PROMPT 1
DEFAULT vmlinuz
APPEND ide=nodma initrd=instroot.gz root=/dev/ram0 ramdisk_size=16384 rw
-LABEL nopcmcia
+LABEL unattended
+ KERNEL vmlinuz
+ APPEND ide=nodma initrd=instroot.gz root=/dev/ram0 ramdisk_size=16384 rw unattended
+LABEL nopcmcia
KERNEL vmlinuz
APPEND ide=nodma initrd=instroot.gz root=/dev/ram0 ramdisk_size=16384 rw nopcmcia
LABEL nousb
--- /dev/null
+DOMAINNAME=localdomain
+HOSTNAME=ipfire
+KEYMAP=/usr/share/kbd/keymaps/i386/qwerty/de.map.gz
+LANGUAGE=de
+TIMEZONE=/usr/share/zoneinfo/posix/Europe/Berlin
+GREEN_ADDRESS=192.168.0.15
+GREEN_NETMASK=255.255.255.0
+GREEN_NETADDRESS=192.168.0.0
+GREEN_BROADCAST=192.168.0.255
+ROOT_PASSWORD=ipfire
+ADMIN_PASSWORD=ipfire
+SERIAL_CONSOLE=yes
+REVERSE_NICS=yes
+MEGABRIDGE=yes
"Geben Sie die URL für ipcop-<version>.tgz und die images/scsidrv-<version>.img-Dateien ein. WARNUNG: DNS ist nicht verfügbar! Sie sollten jetzt nur etwas im Format 'http://X.X.X.X/<verzeichnis>' eingeben. ",
/* TR_ERROR */
"Fehler",
+/* TR_ERROR_PROBING_CDROM */
+"Kein CDROM-Laufwerk gefunden.",
/* TR_ERROR_WRITING_CONFIG */
"Fehler beim Schreiben der Konfigurationsinformationen.",
/* TR_EURO_EDSS1 */
"Enter the URL path to the ipcop-<version>.tgz and images/scsidrv-<version>.img files. WARNING: DNS not available! This should now just be http://X.X.X.X/<directory>",
/* TR_ERROR */
"Error",
+/* TR_ERROR_PROBING_CDROM */
+"No CDROM drive found.",
/* TR_ERROR_WRITING_CONFIG */
"Error writing configuration information.",
/* TR_EURO_EDSS1 */
# Compress root filesystem
# Reason for this tar+untar+tar is removing of entries listed two or more in src/ROOTFILES
- mkdir -p /install/cdrom/{doc,dosutils,images}
+ mkdir -p /install/cdrom/{doc,dosutils}
find $(DIR_SRC)/config/rootfiles/common -maxdepth 1 -type f | xargs cat >> /tmp/ROOTFILES
find $(DIR_SRC)/config/rootfiles/ver_$(IPFVER) -maxdepth 1 -type f | xargs cat >> /tmp/ROOTFILES
tar -c -C / --files-from=/tmp/ROOTFILES \
# Other files
sed 's/VERSION/$(VERSION)/' $(DIR_SRC)/config/cdrom/README.txt > /install/cdrom/README.txt
cp $(DIR_SRC)/doc/COPYING /install/cdrom/
- cp /install/images/*.img /install/cdrom/images
cp $(DIR_SRC)/doc/{ChangeLog,packages-list.txt} /install/cdrom/doc
cp $(DIR_DL)/rawrite.exe /install/cdrom/dosutils
unzip -j -L $(DIR_DL)/rawwritewin*.zip -x "*.txt" -d /install/cdrom/dosutils
+ # Configuration
+ mkdir -p /install/cdrom/boot
+ cp $(DIR_SRC)/config/kernel/unattended.conf /install/cdrom/boot/unattended.conf
+
# Make the ISO
mkdir -p /install/cdrom/boot/isolinux; \
dd if=/dev/zero bs=1k count=2 > /install/cdrom/boot/isolinux/boot.catalog; \
+++ /dev/null
-###############################################################################
-# This file is part of the IPCop Firewall. #
-# #
-# IPCop 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 of the License, or #
-# (at your option) any later version. #
-# #
-# IPCop 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 IPCop; if not, write to the Free Software #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
-# #
-# Makefiles are based on LFSMake, which is #
-# Copyright (C) 2002 Rod Roard <rod@sunsetsystems.com> #
-# #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VER = ipfire
-
-THISAPP = hwinfo
-DIR_APP = $(DIR_SRC)/$(THISAPP)
-TARGET = $(DIR_INFO)/$(THISAPP)
-
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-install : $(TARGET)
-
-check :
-
-download :
-
-md5 :
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) :
- @$(PREBUILD)
- @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/hwinfo/* $(DIR_APP)
- cd $(DIR_APP) && make tinystatic
- cd $(DIR_APP) && DESTDIR="/install/initrd" make tinystaticinstall
- @rm -rf $(DIR_APP)
- @$(POSTBUILD)
ipfiremake uClibc
installmake busybox
installmake udev
- installmake sysvinit
+ installmake slang
+ installmake newt
installmake gettext
- installmake e2fsprogs
+ installmake kbd
+ installmake popt
+ installmake kudzu
+ installmake sysvinit
installmake misc-progs
+ installmake e2fsprogs
+ installmake reiserfsprogs
installmake sysfsutils
-# installmake hwinfo
- installmake slang
installmake util-linux
- installmake reiserfsprogs
- installmake newt
installmake pciutils
installmake pcmciautils
- installmake kbd
- installmake popt
- installmake kudzu
installmake installer
- installmake scsi.img
- installmake driver.img
+ installmake scsi.img # this is to be deleted
+ installmake driver.img # this is to be deleted
installmake initrd
- installmake boot.img
-# ipfiremake as86
-# ipfiremake mbr
+ installmake boot.img # this is to be deleted
+# ipfiremake as86 # this is to be deleted
+# ipfiremake mbr # this is to be deleted
}
buildpackages() {
beautify message DONE
# Create images for install
- ipfiremake pxe
ipfiremake cdrom
+ ipfiremake pxe
cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
# ipfirepackages
watch)
watch_screen
;;
+pxe)
+ case "$2" in
+ start)
+ start_tftpd
+ ;;
+ stop)
+ stop_tftpd
+ ;;
+ reload)
+ reload_tftpd
+ ;;
+ esac
+ exit 0
+ ;;
"")
clear
svn info
+++ /dev/null
-----------------------------------------------------------------------
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-\f
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- 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 of the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+++ /dev/null
-22/3/2005: v10.16
- - updated X11 data (#74130)
-
-21/3/2005: v10.15
- - mls: faster hwscand
-
-21/3/2005: v10.14
- - updated X11 data (#74022)
-
-19/3/2005: v10.13
- - fix wrong entry for Fritz!Card DSL SL USB and
- make ppp mode detection safer (#71995)
- - adjusted ltmodem info (#71979)
-
-18/3/2005: v10.12
- - updated nongpl info
- - reverting slamr patch (#72301)
- - pcmcia info updated (#73057)
- - pci dev names updated
- - read /proc/modules less often
- - updated X11 data
- - aic7xxx/aic79xx driver info update
- - fix Fritz!Box Fon entry in database
-
-17/3/2005: v10.11
- - another notebook (#67412)
- - do wlan detection for --netcard (#73077)
- - remove Eicon cards from 64 bit archs, the driver does not support
- 64 bit yet (#55722)
-
-16/3/2005: v10.10
- - updated notebook display data
- - fix udev db reading
- - updated X11 data
- - ltmodem device id update
- - no check for gfx card changes (#72907)
-
-14/3/2005: v10.9
- - hardware detection for ISDN PCMCIA cards (#71208)
- - updated ISDN data
- - updated X11 data
- - better network type detection (#70991, #71231, #67325)
- - load some acpi modules on hp notebook (#72146)
- - fixed isapnp sound card detection (#67303)
- - slamr: ttySL0 -> ttyLT0 (#72301)
-
-7/3/2005: v10.8
- - updated X11 data
-
-4/3/2005: v10.7
- - s390: made ccwgroup walking more robust
- - fixed bios base mem detection
- - allow device class in 'hwinfo --db' request
- - updated X11 data
-
-28/2/2005: v10.6
- - jg: improved wlan patch (no dependency on libiw)
-
-28/2/2005: v10.5
- - fixed model name for some SGI hardware (#63973)
- - fix Fritz!Card DSL SL USB ID (#66674)
- - better heuristics to assign BIOS driver numbers (#66669)
- - removed ahci vs. ata_piix hack (#65218)
-
-25/2/2005: v10.4
- - report pci class 0x403 as audio devices (#66466)
- - load ahci *and* ata_piix (#65218)
- - symlink /dev/fb might be missing; trying fb0, too (#66501)
- - reorder modules.pcimap entries so that more specific matches are
- considered first (#66594)
- - ensure nvida network cards are network cards (#65852)
- - updated X11 data
-
-23/2/2005: v10.3
- - reworked pcmcia code to give cardbus devices sysfs ids
-
-21/2/2005: v10.2
- - jg: added wlan feature detection
-
-17/2/2005: v10.1
- - notebook lcd data update
- - build shared tiny lib
-
-15/2/2005: v10.0
- - libhd interface changes: geometry values
- - prepare for wlan feature detection
- - x11 db update
- - better disk geometry handling
-
-8/2/2005: v9.36
- - added '--kernel-version' option
-
-31/1/2004: v9.35
- - updated X11 data
-
-14/12/2004: v9.34
- - fixed access to undefined memory (#39238)
- - fix segfault when using 'x11=foo' boot option (#46367)
- - add additional check to catch broken BIOSes (#48665)
- - abort BIOS code execution if it takes too long (#48665)
- - find usb serial lines
-
-2/12/2004: v9.33
- - s390: identify new CU types 2107, 1750 as DASD
- - fixed some dvb entries (#47057)
- - s390: added new prog_if ID pif_dasd_fba to identify FBA DASDs
- (reqd. by fehr)
- - less agressively assume scsi devs are disks (#47654)
- - fixed external hardware db parser (#47606, comment 6)
- - ibm notebook data updated
- - avoid libsysfs accidentally reading pci config space
- - fixed parsing of scsi serial id (#48757)
- - look at /sys/class/net/*/type, too (#48812)
-
-13/10/2004: v9.32
- - report network interfaces correctly even though udev lists them
-
-12/10/2004: v9.31
- - report usb host-to-host links as network devs (#22739)
-
-11/10/2004: v9.30
- - find ide devices != cdrom & disk (#39911, #45229)
- - return special ids for synaptics touchpad (#46649)
-
-7/10/2004: v9.29
- - fixed segfault with large /proc/interrupt entries (e.g. 512 cpus) (#46582)
-
-1/10/2004: v9.28
- - list bluetooth isdn box as bt device, too (#46626)
-
-1/10/2004: v9.27
- - smartlink-softmodem is back (#46594)
- - added some dvb cards (#46612)
-
-30/9/2004: v9.26
- - updated X11 data (#45870)
-
-29/9/2004: v9.25
- - removed obsolete module info; reworked pcmcia info
-
-29/9/2004: v9.24
- - updated pcmcia & usb network data (#33647)
- - updated pci device names
-
-29/9/2004: v9.23
- - use SG_IO for SCSI device accesses (#46058)
-
-28/9/2004: v9.22
- - added gen-hwcfg-disk.sh (#46311)
-
-27/9/2004: v9.21
- - updated ancient audio info (#46096)
- - add ipw/atmel firmware packages (#45960)
- - updated X11 data
- - added new isdn cards to database
-
-27/9/2004: v9.20
- - report bluetooth devices (#45893)
-
-24/9/2004: v9.19
- - return package info for sony notebooks, too (35245)
-
-23/9/2004: v9.18
- - added --pcmcia option to hwscanqueue (#44290)
- - return package info in system entry (#35245)
-
-22/9/2004: v9.17
- - updated X11 data
-
-21/9/2004: v9.16
- - drop workaround for multiple hotplug events by broken kernel
-
-21/9/2004: v9.15
- - replaced raiddetect with dmraid
-
-20/9/2004: v9.14
- - sata info update (#45551)
- - look at smbios data for smp detection, too
-
-17/9/2004: v9.13
- - added some epson scanners (#45074)
- - adaptec module info update
-
-13/9/2004: v9.12
- - kernel-nongpl stuff only for i386 (#45099)
- - updated megaraid module info
- - ibm notebook info update (#45038)
-
-13/9/2004: v9.11
- - clear hd_data struct after it has been released (#44855)
- - updated X11 data
- - changed sata vendor name handling a bit
- - isdn: remove old bluetooth packages from database
-
-10/9/2004: v9.10
- - sata driver seems to generate a dummy scsi vendor name (#44286)
-
-6/9/2004: v9.9
- - updated tv-card info
-
-6/9/2004: v9.8
- - removed ancient function hd_has_special_eide()
- - use edd module to get extended BIOS features (#44649)
- - 'hwinfo --map' includes a hardware scan
-
-3/9/2004: v9.7
- - win modem dev name change (#44253)
- - added nongpl module info
- - fixed /tmp file handling (#44538)
-
-30/8/2004: v9.6
- - changed hwbootscan to use bash (#44199)
- - fixed hd.ids parser bug
- - updated X11 data
-
-23/8/2004: v9.5
- - updated X11 data
- - added display sizes for a number of IBM notebooks
-
-18/8/2004: v9.4
- - new wlan data (#42759, #39481, #43921)
- - hwscan now really moved to /sbin
-
-16/8/2004: v9.3
- - move hwscan* to /sbin (#43601)
-
-5/8/2004: v9.2
- - push/pop don't work with 32bit regs on amd64 (#43531)
-
-4/8/2004: v9.1
- - get netcard link state via ethtool ioctl
-
-6/7/2004: v9.0
- - ids/src/s390: changed "OSA Express Ethernet card" to "OSA Express
- Network card" (can be Token Ring, too)
- - joined changes up to 8.60 from 9.1 branch:
- - major 229, minors >= 128 are hvsi%u devies (host virtual
- serial interface) (requested by IBM)
- - ids/src/s390: use subclass 0x86 for OSA Express (bug #41461)
- - changed Broadcom netcard name (#42362)
- - dac960 data corrected (#41659)
- - s390: set status.available to yes for IUCV devs (bug #41525)
- - s390: give bus_iucv a name (bug #41525)
- - s390: give the IUCV "controller" subclass ID and name (bug #41525)
- - ia64: fixed unaligned accesses (#41589)
- - check file size so we don't read outside mmap()-ed region
- - ppc: handle iseries_veth correctly in loaded and unloaded module
- state. #41347/LTC#8984
- - send smaller scsi INQUIRY command (#38731)
- - added scsi.noserial probe option; useful for some usb sticks (#40485)
- - adding pci id fix from #40175
- - updated b44 vs. bcm4400 data
- - s390: fixed several DASD IDs
- - s390: fixed --disk filtering (bug #41231)
- - made --only more effective (#37933)
- - hwscanqueue: closing file descriptors to allow parent to terminate
- - added debug option to cpu emulation to help tracing bios related system
- crashes (#40644)
- - use sysfs_bus_id for unique ID calculation on CCW devices to avoid
- duplicate IDs (bug #40587)
- - read /proc/iSeries/config to get number of veth devs (#40527)
- - load sg module before looking for scanners (#40478)
- - updated usb scanner data (#40480)
- - got latest pci device names from pciutils
- - use mmap() to access /dev/mem & re-enable bios access
- on ia64 (#34550)
- - take out ips (#39993)
- - fixed cdb_x11 script (#40335)
- - updated X11 data (#40335)
- - fixed UML fix (#40271)
- - don't check alternate settings (#40266)
- - added functions necessary to build a model name to tiny version;
- this is needed by linuxrc (#39092)
- - detect IUCV pseudodevices (bug #39456)
- - added hd_busid_to_hwcfg() (bug #39456)
- - updated X11 data (#39767)
- - fixed strange side effect of UML detection (#39946)
- - s390: enhance grouped channel detection using ccwgroup bus
- - use *last* console parameter for serial console
- - look for usb network cards (#37870)
- - network class id cleanup (#39456)
- - add bus.name for bus.id == bus_ccw
- - avoid unspecific network types (#38874)
- - fixed memory size detection (#34895, #38758)
- - report UML network (#39521)
- - 'hwinfo --map' returns mapping new -> old block
- device names (#39437)
- - s390: set is.notready flag on unformatted DASDs (bug #39174)
- - rewrote serial console handling (#39029, #23322, #35824)
- - updated X11 data (#39282)
- - subclass 0x83 for xpnet card (#35867)
- - add UML keyboard (#38922)
- - s390: add bus id bus_ccw
- - s390: set bus.id, sysfs_bus_id and sysfs_device_link for all devices
- - s390: do not do pr_s390disks by default, and run it after pr_s390
- to keep already detected non-disk devices from being deleted
- - s390: implement rw/ro info properly
- - s390: fake geometry and size of unformatted DASDs to most likely
- values
- - removed veth.* (not needed)
- - fixed bug in modules.alias conversion script (#38800)
- - fixed linmodem data (#38800)
- - handle veth devices on iSeries (#38696, #37981)
- - another de4x5 vs. tulip case (#39127)
- - fixed cdrom config segfault (might happen while reading inconsistent
- cdrom config data)
- - support pSeries vscsi (#36029)
- - bcm5700, not tg3 on ppc* (#38647)
- - add Acer TravelMate 660 & Asus S5200N LCD sizes (#38149)
- - make SGI IOC4 known as storage controller (#38628)
- - support SGI XPNET (#35867)
-
-6/4/2004: v8.38
- - do call --partion with --fast in hwscand polling code
-
-6/4/2004: v8.37
- - fixed unique ids for pci devs (#37570)
-
-6/4/2004: v8.36
- - run raiddetect only on x86-like archs (#36157)
- - don't run raiddetect if we didn't find any disks
-
-5/4/2004: v8.35
- - don't run raiddetect if --fast option is used
-
-5/4/2004: v8.34
- - make --only accept device names, too (#38265)
- - check return value from hd_sysfs_id() (#38266)
- - make it more resistant against strange libsysfs data (#38259)
- - tg3 vs bcm5700 again (#38268)
-
-2/4/2004: v8.33
- - another wlan card (#38119)
-
-2/4/2004: v8.32
- - store driver list & sysfs info in hardware config files
-
-2/4/2004: v8.31
- - add Fritz!Card DSL SL USB in database
- - hwbootscan: move icon creation from coldplug
- - lt modem (#36552)
- - fixed some module names (#37285, #37518)
- - added dvb cards (#32730)
- - use old bios disk assign code if there's no edd info
-
-1/4/2004: v8.30
- - wlan card detection fix (#37872)
- - updated X11 data
- - read isapnp from sysfs (#35157)
-
-1/4/2004: v8.29
- - hwscanqueue: remember commands and ignore the same commands for 20
- seconds (workaround some unexpected signals from kernel)
- - hwscand: set long timeout to 10 seconds
- - hwscan*: add --partition command
-
-31/3/2004: v8.28
- - rewrote input device handling
- - load ide-cd, sd_mod, sr_mod before looking for block devs (#37558)
- - fixed usb printer detection
- - run 'raiddetect' to tag ide soft raid devices
- - minor vbe bios fixes
-
-30/3/2004: v8.27
- - changed bios probing to do less things
- - added duplicate DASD detection code from the late dasd.c
- to block.c (bug #37068)
- - changed bios probing to do less things
- - another winmodem (#37335)
-
-29/3/2004: v8.26
- - don't run modprobe if it doesn't exist
-
-29/3/2004: v8.25
- - add edd support
-
-28/3/2004: v8.24
- - added hwscand hwscanqueue
- - use sysfs for usb devices
- - scsi tapes detected again
- - added hardware class 'tape'
- - added getsysinfo script (collect data to debug hw detection)
-
-25/3/2004: v8.23
- - added hd_is_uml() to report if we're running in an UM kernel
- - b44 vs. bcm4400 (#36763)
- - fix inconsitency in device name list
- - allow device names in 'hwscan --show'
-
-22/3/2004: v8.22
- - removed Intel-v92ham support (#36667)
- - worked on new sysfs block code
-
-21/3/2004: v8.21
- - use sysfs for block devices
-
-15/3/2004: v8.20
- - fixed 8139cp/too module info (#36028)
-
-15/3/2004: v8.19
- - do not reverse sysfs order (libsysfs does it)
- - updated X11 data
- - return real device name, not udev symlink
- - DSL hardware detection for none pppoe (kkeil)
-
-14/3/2004: v8.18
- - s390: added two missing DASD device types
- - added '--root' option (for testing)
- - added '--db' option for database queries
- - fixed 'x11i' parameter handling
- - read pci.handmap
-
-9/3/2004: v8.17
- - udevinfo moved to /usr/bin
-
-8/3/2004: v8.16
- - added host info for s390 SCSI devices
- - added disk-only probing method for s390
- - added WWPN, FCP LUN for s390 SCSI devices
- - updated X11 data
-
-4/3/2004: v8.15
- - s390: added LCSS info to ccw_t
- - link libhd against libsysfs
- - added hw item for quick DASD rescanning
- - updated digital camera ids.
- - pci from sysfs finished
- - network interfaces from sysfs
-
-1/3/2004: v8.14
- - fix smp detection on ia32e (#34742)
- - store some new fields in unique-id files
- - better error logging for vbios init
- - disable all BIOS related things on ia64 (#34550)
- - updated X11 data
- - use sysfs for pci data (not default)
-
-24/2/2004: v8.13
- - include x86emu into libhd.so
- - don't segfault if we couldn't get a shared memory segment
-
-23/2/2004: v8.12
- - fixed Makefile
-
-23/2/2004: v8.11
- - added '--version' (#31925)
-
-23/2/2004: v8.10
- - check for hyperthreading on amd64 (#34742)
- - removed last references to ataraid from hardware db
- - added new x86 emulator (#34545)
- - return MacRISC<n> (#34591)
-
-17/2/2004: v8.09
- - handle '-' vs. '_' in module names
-
-17/2/2004: v8.08
- - isdn database optional read from /usr/share/hwinfo/ISDN.CDB.hwdb
- - mk_isdnhwdb tool to convert CDB data to ISDN.CDB.hwdb
- - fixed Makefile
-
-16/2/2004: v8.07
- - fixed ia64 unaligned access (#32396)
- - use modprobe for tulip (#32911)
-
-11/2/2004: v8.06
- - fixed segfault on s390*
- - removed special ia64 hardware data: new kernel, new game
-
-9/2/2004: v8.05
- - nvnet -> forcedeth (#25531)
- - sata module data updated
- - moved psaux mice to input/mice
- - make convert_hd understand modules.alias files
-
-6/2/2004: v8.04
- - sysfs includes moved
- - usb modules renamed
- - really basic udev & sysfs support for block devs
-
-4/12/2003: v8.03
- - proper multichannel device detection (finally...)
- - identify virtual reader/punch/printer
-
-2/12/2003: v8.02
- - build with "-pipe"
- - accommodated to changes in format of /proc/dasd/devices
- - ditched storage subclass dasd, introduced s390disk prog_if instead
- - ditched fake CTC controller generation
- - deal with unsorted bus trees in multichannel device detection
-
-18/11/2003: v8.01
- - converted s390 HW detection to sysfs
- - moved CU/device models to separate data structure
- - added more s390 devices
- - rewrote parsing of SMBIOS data structures
-
-28/10/2003: v8.00
- - get pci config type from kernel log (#30704)
- - add new flag 'cpuemu' to use cpu emulation on i386
-
-22/9/2003: v7.30
- - updated usb scanner & webcam data
- - updated X11 data
- - hwbootscan: split 'hwscan --pci --disk' call to avoid
- wrong unique ids for some pci devices (#31545)
-
-21/9/2003: v7.29
- - updated X11 data
-
-18/9/2003: v7.28
- - set ATA RAID bus type to 'RAID' (#31235)
-
-17/9/2003: v7.27
- - don't make every parport into a printer (#31161)
- - some driver data updated
-
-16/9/2003: v7.26
- - default to 'printer' if a class tag is missing in parport
- autoprobe data (#30982)
- - fixed serial console detection (#30936)
-
-15/9/2003: v7.25
- - pcmcia data update
-
-15/9/2003: v7.24
- - report pci modems (#30887)
- - don't get fooled by removed pcmcia cards
- - wlan data update (#30886, #30823, #30501)
- - driver data update (#30384, #29468, #30745)
-
-15/9/2003: v7.23
- - ignore alternative usb interface settings
-
-11/9/2003: v7.22
- - updated X11 data
- - don't read from cd drives that don't exist (#23248)
-
-10/9/2003: v7.21
- - fixed monitor data interpretation bug (#29718)
-
-9/9/2003: v7.20
- - more ltmodem ids
- - uli: implementation of S/390 hardware detection
-
-8/9/2003: v7.19
- - updated driver info (#25457, #29481, #25531)
- - updated X11 data
- - added --combine option to check_hd to assist in creating
- driver data
- - fixed minor typos
-
-6/9/2003: v7.18
- - updated usb mouse data (#29719)
- - better touch pad/track point reporting for notebooks
- - fork() for serial mouse & modem detection (#25843, #26513)
- - fixed hwbootscan (#29959)
- - don't load imm.o module (#14175)
-
-2/9/2003: v7.17
- - catch more vm86() faults (#28381)
- - added 'active' status flag (not modified by libhd)
-
-1/9/2003: v7.16
- - update ISDN CDB data
- - catch faults inside vm86() code (#29571)
- - give wlan cards their own subclass (#29506)
- - updated X11 data
-
-28/8/2003: v7.15
- - iopl() may fail even if we're root (#29494)
-
-27/8/2003: v7.14
- - probe for multiple hardware classes at a time
-
-26/8/2003: v7.13
- - default ISDN data for all ARCH
- - update ISDN CDB data
-
-26/8/2003: v7.12
- - updated X11 data (#29316)
- - add ISDN database for ia64
- - fix minor warnings
-
-25/8/2003: v7.11
- - don't try BIOS things on SGI Altix (#28663)
-
-25/8/2003: v7.10
- - added lots of new camera ids.
- - new isdn data taken from cdb
- - updated X11 data
-
-18/8/2003: v7.09
- - add ChildIDs field (reverse of ParentID)
-
-12/8/2003: v7.08
- - better internal hwclass handling
-
-11/8/2003: v7.07
- - define HARDWARE_DIR in hd.h
-
-8/8/2003: v7.06
- - use modprobe instead of insmod for scsi modules
-
-5/8/2003: v7.05
- - ltmodem is back
- - parent id, again
-
-5/8/2003: v7.04
- - hp officejet scanner gets package info & own subclass
-
-1/8/2003: v7.03
- - reworked usb things
-
-18/7/2003: v7.02
- - changed disk size reading for 2.6
- - more 2.6 header fixes
-
-17/7/2003: v7.01
- - store parent id (#27508) and hotplug field
- - new attempt to work around broken cciss_ioctl.h inclue file
-
-16/7/2003: v7.00
- - detect pcmcia cards
- - updated x11 data
-
-16/4/2003: v6.20
- - fixed megaraid info (#26325)
-
-27/3/2003: v6.19
- - scan for partitions
-
-13/3/2003: v6.18
- - ltmodem stuff makes trouble, removed (#25309)
-
-13/3/2003: v6.17
- - updated X11 data (#25217)
-
-12/3/2003: v6.16
- - be more careful when joining feature flags of
- ide-scsi handled devices (#25169)
-
-12/3/2003: v6.15
- - limit the maximum amount of data we expect looking
- for serial mice (#25153)
-
-11/3/2003: v6.14
- - updated ide raid info (#25010)
-
-10/3/2003: v6.13
- - added more notebook data
-
-8/3/2003: v6.12
- - fixed ide-scsi detection bug (device names mixed up if more than
- one device is handled by ide-scsi)
-
-8/3/2003: v6.11
- - updated data from pci utils
-
-8/3/2003: v6.10
- - detect wlan cards (#23491)
-
-7/3/2003: v6.09
- - usb multiple interfaces again: only for HID devices (#24824)
- - add monitor vendor & device name
- - allow hwscan to be disabled at boot time via 'hwprobe=-scan'
-
-6/3/2003: v6.08
- - updated X11 data
- - added '--dsl' option to hwscan
-
-6/3/2003: v6.07
- - write ff to /dev/lp0 if imm.o didn't load (#14175)
- - probe for scsi cache even in fast mode, else we miss scsi cd writers
- - better Epson scanner detection (#20837)
- - fixed stupid '\0'-missing-at-end-of-buffer bug
- - added '--slient' option to hwscan (don't show ids)
- - cleaned up notebook lcd detection and added more data
-
-4/3/2003: v6.06
- - fixed floppy detection (#24283)
-
-4/3/2003: v6.05
- - fixed ataraid detection (format of /proc/ide/ide?/config
- changed, #23057, #24528)
-
-3/3/2003: v6.04
- - bcm instead of tg3 (request by ak)
- - reenable mouse probing, but without serial mice and no dialog (#20309)
- - support some winmodems
- - updated X11 data
-
-26/2/2003: v6.03
- - better ZIP drive handling
- - handle usb devices with multiple interfaces (#21487, #22223, #22843)
- - removed 'Looking for braille...' line
- - fixed multi-CDROM bug (#24280)
- - save/restore feature flags (#23364)
- - keep feature flags for ide-scsi handled drives (#23550)
-
-25/2/2003: v6.02
- - fixed 64 bit int -> pointer gcc warnings
- - fixed minor database lookup bug
- - database parser logs to logfile, not stderr
- - support serial mice with really strange vendor ids (#24137)
-
-24/2/2003: v6.01
- - add fibre channel adapters to storage controller list (#23686)
-
-24/2/2003: v6.00
- - fixed gcc warnings
- - updated module info
- - increased major version
-
-18/2/2003: v5.55
- - added pppoe detection
- - updated X11 data
-
-18/2/2003: v5.54
- - removed experimental code causing segfault on compaq machines
-
-10/2/2003: v5.53
- - remove mouse probing from hwbootscan, it sometimes
- hangs and takes too long.
- - add --fast to --cdrom probe, so the cdrom is not opened.
- - updated X11 data
-
-4/2/2003: v5.52
- - fixed pci base addresses on 64bit archs (#21075)
-
-20/1/2003: v5.51
- - detection of more Microcom modems
- - updated the pcmcia controllers fallback list
- - added a minimal man page
- - add AVM Fritz!Card DSL USB
- - updated X11 data
-
-13/1/2003: v5.50
- - added Myrinet support (#21130)
- - make it compile on !(x86_64 & ia64) again
-
-9/1/2003: v5.49
- - fixed some network card names (#22795)
- - added wheel mouse data (#22797)
- - make it compile on x86_64 & ia64 again
-
-13/12/2002: v5.48
- - cdrom feature list (dvd, cdr, etc)
-
-27/11/2002: v5.47
- - changed tg3/bcm* on ia64 (#21984)
- - one ncr53c8xx vs. sym53c8xx issue (#21984)
- - cleanup ISDN ids, remove unsupported protocols (#22179)
-
-25/11/2002: v5.46
- - rewrote assignment of BIOS driver numbers
- - slight cleanup of int10 code
-
-19/11/2002: v5.45
- - use eepro100 instead of e100 on ia64 (#21055)
-
-18/11/2002: v5.44
- - fixed qla* module info (#21567)
-
-6/11/2002: v5.43
- - joined with 8.1 branch
-
-4/11/2002: v5.42
- - check for REDIRECT in hwscan init script (in case it gets called
- from the commandline). #17773
-
-4/11/2002: v5.41
- - do some consistency checks on legacy data from BIOS area (#21462)
-
-17/10/2002: v5.40
- - updated megaraid info (#21043)
-
-10/10/2002: v5.39
- - updated tg3/bcm5700 driver info (#19913)
-
-7/10/2002: v5.38
- - added aacraid driver info (#20592)
- - don't run yast if no keyboard is attached (#19768)
-
-30/9/2002: v5.37
- - add "Virtual" to veth description string (#20319)
-
-27/9/2002: v5.36
- - fixed floppy detection (#20269)
- - x11 data update (#20182)
- - added IBM ServeRAID ids (#20268)
-
-23/9/2002: v5.35
- - 'hwscan --pci' should add prom id (#19648)
-
-20/9/2002: v5.34
- - ia64: switch back to reading ACPI tables for SMP detection.
-
-18/9/2002: v5.33
- - fixed chksum call causing hwinfo to hang in some cases on ia64
- - don't overwrite vga modelist
-
-10/9/2002: v5.32
- - avoid alignment problems on ia64
- - fixed usb-cdrom probing (#19407, #19440)
- - removed '--fast' for disk probing; instead, fixed i2o & cciss
-
-10/9/2002: v5.31
- - probe for cdrom & disk at boot (#19297)
- - '--fast' option has effect on disk probing (no i2o & cciss)
- - dmfe instead of tulip (#19271)
- - convert_hd now understands XML properly
- - removed outdated docs
-
-9/9/2002: v5.30
- - probe also USB isdn controllers (#18830)
- - added '--help' option to check_hd & convert_hd
- - converted pci info to utf8
-
-7/9/2002: v5.29
- - make sure usb floppies are reported as such (#12262)
-
-6/9/2002: v5.28
- - new x11 data
- - report s390x arch properly
-
-5/9/2002: v5.27
- - added amd-8111 info
- - fixed dpt info (#18914)
- - always smp on s390* (#18990)
- - changed pcnet32 description (#18892)
-
-4/9/2002: v5.26
- - show boot catalog address in cd info
-
-4/9/2002: v5.25
- - switched escon adapter from 0x70 to 0x8
- - corrected number for CTC, IUCV, HSI and QETH
- - fix usb isdn adapter detection (#18829)
- - updated pci & usb data
-
-3/9/2002: v5.24
- - fixed ata raid code
- - new usb mouse (#18296)
-
-3/9/2002: v5.23
- - updated x11 data
-
-02/9/2002: v5.22
- - code for detekting configured CTC, IUCV, HSI and QETH
- adapters on s390/s390x
- - fixed iSeries network id
-
-29/8/2002: v5.21
- - braille detection on sparc
- - fixed script that reads CDB data
- - log error messages from vm86 code
- - better chipcard reader support
- - use _exit instead of exit on some more places.
- - prepared for uclibc
- - save & restore resource data
-
-28/8/2002: v5.20
- - got rid of gcc warning
-
-28/8/2002: v5.19
- - added x86_64 x11 data
-
-27/8/2002: v5.18
- - changed dasd.c to accept old and new format of /proc/dasd/devices
- - better serial mouse detection (#18384)
-
-27/8/2002: v5.17
- - msvec: detect some microcom modems (#15359)
-
-26/8/2002: v5.16
- - use "reprobe" as yast2 argument, not (.reprobe)
- - added some new hardware types
- - fixed usb & ieee1394 controller detection
-
-22/8/2002: v5.15
- - check cpuid for hyperthreading (#13532)
- - add new bus id 'Virtual IO' for DASD (#18202)
- - use grub on x86_64
- - fixed s390 cpu detection
-
-20/8/2002: v5.14
- - mls: x86 emu for BIOS calls on ia64
-
-19/8/2002: v5.13
- - mls: x86 emu for BIOS calls on x86_64
- - updated x11 data
-
-16/8/2002: v5.12
- - changes in libhd interface
-
-15/8/2002: v5.11
- - segfault in hwinfo, part 2
- - fixed symbios module entry
-
-13/8/2002: v5.10
- - get isdn model name from isdn database
- - updated megaraid info
- - make install creates /etc/init.d
-
-13/8/2002: v5.09
- - added info for firewire module
- - fixed convert_hd to work with perl 5.8
-
-12/8/2002: v5.08
- - fixed evil segfault in hwinfo
- - updated docs
-
-9/8/2002: v5.07
- - moved unique key file to var/lib/hardware/unique-keys
- - moved things from var/lib/libhd to var/lib/hardware
- - added HD_VERSION #define to hd.h
-
-8/8/2002: v5.06
- - extended isdn package info
- - detect dvb cards
- - fixed reading driver info
- - updated driver info
- - changed tv card detection code
-
-6/8/2002: v5.05
- - minor libhd interface changes
-
-5/8/2002: v5.04
- - gmac -> sungem
- - don't source rc.config
- - report cardbus cards
- - _exit instead of exit to avoid calling QT destructors in Yast2
- - activated new database code
-
-22/7/2002: v5.03
- - updated x11 data
-
-22/7/2002: v5.02
- - run hwbootscan rc script after "kbd" script
- - don't _change_ config status in hwbootscan
- - save %gs register around vm86() syscall (%gs may be used in glibc)
- - isdn changes
- - better handling of dasd devs
- - grub instead of lilo on ix86
-
-13/6/2002: v5.01
- - made ia64 cpu model entry more useful
- - get bios led status
-
-6/6/2002: v5.00
- - assign hardware added via 'hwprobe' a proper inital status
- - added alsa driver info
- - dropped old pnpdump() code
-
-24/4/2002: v4.26
- - add x86-64 support
-
-27/3/2002: v4.25
- - prevent doubled cdrom hardware items
-
-27/3/2002: v4.24
- - fixed cdrom device detection (#15553)
- - don't assign lp8 to nonexistent usb printers
-
-25/3/2002: v4.23
- - updated help texts
-
-25/3/2002: v4.22
- - recognize fibre channel controllers as storage controllers
-
-24/3/2002: v4.21
- - read bios data in libhd_tiny (to allow vaio handling in linuxrc, #12075)
- - read /etc/module.pcimap, too (it's there during installation)
- - new x11 data
- - de4x5.o vs. tulip.o issue (#15303)
- - added Netgear WLAN-Card data (#14848)
-
-21/3/2002: v4.20
- - remove /var/lib/hardware/LOCK in hwbootscan (#15217)
- - updated X11 data
- - prefer tg3 over bcm5700
- - fixed broken framebuffer detection: reenabled & fixed pci setup code
-
-18/3/2002: v4.19
- - fixed segfault in ide code
-
-16/3/2002: v4.18
- - fixed bug that caused 'Processor' scsi devices to be treated
- as disks (mentioned in #15007)
-
-14/3/2002: v4.17
- - udated mptbase driver info (#14732)
- - better handling of usb-storage devices
- - add mouse info we got from smbios
- - use info from modules.pcimap
- - detect memory size > 4GB (#14287)
-
-9/3/2002: v4.16
- - made hwbootscan an init script again, started after hotplug.
- - do not delete the reconfig.needed files, but set configured=no
- and needed=no to avoid problems with unsupported graphic cards.
- - added usb ids from usbutils
- - fixed network module info (#14529)
- - improved smbios parser
- - updated x11 driver info
- - isdn: fix wrong names (AVM) and add more USB devices
- - disabled pci setup code that caused infinite loops on
- some systems with isa gfxcards
-
-4/3/2002: v4.15
- - new isdn data
- - look at /proc/apm, too
- - updated network driver info
- - detect fujitsu siemens notebook lcd
- - updated x11 driver info
- - updated pci device list
- - check for isapnp devs in boot.hwscan, too
-
-1/3/2002: v4.14
- - detect USB scanner by just looking if the module is usbscanner
- - new scanner ids
- - camera subclass ids were 1 off from enumeration
- - added some new hardware classes: bios, bridge, hub, usb_ctrl
- - added '--pci' and '--isapnp' options to hwscan
- - fixed evil segfault caused by reading some hardware configs
- - added '--fast' option to hwscan: don't check for tricky hardware
- as serial mice or parport zips unless they had been found
- previously
- - boot.hwscan: probe for mice & pci hardware only (to be faster)
- - don't try to access 'not available' devices
-
-25/2/2002: v4.13
- - meissner: boot.hwscan:
- probe for storage, network, tv, sound handware
- - updated x11 data
- - handle usb ehci controller
- - added basic smbios parser
-
-21/2/2002: v4.12
- - meissner: boot.hwscan: fixed confused curses output
- - new isdn database
- - update 'not available' state
- - changed unique_id algorithm for usb devices
-
-18/2/2002: v4.11
- - added new scanner
- - updated x11 data
- - experimental support for hpt3* ideraid
-
-12/2/2002: v4.10
- - meissner: mouse probing is in choose_mouse
- - meissner: added arguments for light probing '(.reprobe)' as suggested by tom
-
-11/2/2002: v4.09
- - isdn database now in libhd, support for multiple isdn driver
-
-7/2/2002: v4.08
- - renamed a function to avoid conflicts with linuxrc
-
-7/2/2002: v4.07
- - fixed dac960 detection: we used to return just the 1st disk
-
-7/2/2002: v4.06
- - first attempt to handle ide raid controller
- - use /proc/partitions to find disks, too
-
-6/2/2002: v4.05
- - make hd_list() work properly if LIBHD_TINY is defined
- - added new braille display
- - hwinfo accepts '--netcard' as alias to '--network_ctrl'
-
-4/2/2002: v4.04
- - store a config string along with the config status
-
-4/2/2002: v4.03
- - changed hd_change_status() prototype
-
-20/1/2002: v4.02
- - fixed bug that prevented hwprobe env var to work in some cases
-
-28/1/2002: v4.01
- - hwscan: touch /var/lib/hardware/.update if things have changed
- - meissner: added boot scripts
-
-21/1/2001: v4.00
- - increased major version number, as we're incompatible to v3 meanwhile
- - added function to set hardware config status data directly
-
-20/1/2002: v3.40
- - updated hwscan so it does something useful
- - updated x11 data
-
-14/1/2002: v3.39
- - next try with dietlibc on sparc
-
-14/1/2002: v3.38
- - olh: assume veth always present
- - make it work with dietlibc on sparc
- - new class: hw_usb_ctrl
-
-4/1/2002: v3.37
- - reimplemented iSeries veth device detection (#12680)
-
-14/12/2001: v3.36
- - create version for linking against dietlibc
- - mls: continue even if some vbe calls fail
-
-26/11/2001: v3.35
- - prepare for arm
-
-22/11/2001: v3.34
- - call cpu probe for keyboard query
- - reduced libhd_tiny size
-
-2/11/2001:. v3.33
- - read country code from usb devices
-
-30/10/2001: v3.32
- - handle iSeries network and storage devices
- return ppc64 when uname -m returns it
-
-18/10/2001: v3.31
- - gmac controllers are powered off when unconfigured, so
- we have to provide the class id ourself (#11733)
-
-15/10/2001: v3.30
- - don't load parport modules on pmac (#11743)
- - provide monitor sync data if they are missing
-
-10/10/2001: v3.29
- - more apple monitor fixes
-
-9/10/2001: v3.28
- - work around incorrect iMac monitor data
-
-8/10/2001: v3.27
- - ppc: detect swim3 floppy (#11643)
- - ppc: pr_prom needs pr_pci in some cases
- - add monitor entry based on fbdev data, if we have
- nothing better (#11344)
-
-5/10/2001: v3.26
- - fix the check for active framebuffer (ppc)
- the current one is a hack and doesnt work in all cases
- - use pc104 instead of powerpcps2 (ppc)
- - longer timeouts in modem detection (#11432)
- - don't merge pci and proc data on ppc (#10435)
- - pci data are inconsistent on ppc, remove consistency check (#11551)
- - new x11 data (ppc)
-
-24/9/2001: v3.25
- - updated X11 data
- - no longer default to XF3 for installation on ppc (#11260)
-
-24/9/2001: v3.24
- - added LSIFC9xx/LSI409xx Fibre Channel (#11251)
-
-24/9/2001: v3.23
- - use aic7xxx_old one some controllers (#11202)
- - use de4x5 instead of tulip for one card (#11093)
- - updated X11 data
-
-20/9/2001: v3.22
- - make AIPTEK tablet a mouse again
- - added old_unique_id field
- - updated driver info
-
-19/9/2001: v3.21
- - new sound card
- - new x11 data
-
-18/9/2001: v3.20
- - rewrote floppy detection to make it work on non-i386 archs
- - new x11 data
-
-11/9/2001: v3.19
- - updated X11 data
- - get current video mode
-
-10/9/2001: v3.18
- - updated X11 data
- - make it work with diet-libc
- - should correctly report vmware cards now
-
-4/9/2001: v3.17
- - changed unique_id calculation (#10139)
- - introduced arch_ppc64, CHRP64 -> CHRP
- - new X11 data
-
-3/9/2001: v3.16
- - usb printer device names have changed
- - new x11 data
- - fixed segfault bug in ide-scsi handling
-
-29/8/2001: v3.15
- - new x11 data
- - ignore obviously broken ddc info
-
-27/8/2001: v3.14
- - new qlogic driver info (#9868)
- - completely new x11 data
-
-23/8/2001: v3.13
- - fixed to work with the new cpqarray driver
- - fixed evil database bug (#9798)
-
-20/8/2001: v3.12
- - removed usb network module info
- - added iSeries disks
-
-17/8/2001: v3.11
- - added usb network data
-
-17/8/2001: v3.10
- - install in $DESTDIR
- - handle ide-scsi drives
- - fix segfault bug in apm detection
-
-9/8/2001: v3.09
- - fixed some drivers.audio entries
-
-6/8/2001: v3.08
- - added sungem
- - fixed qlogicfc entry
- - fixed tv card detection
-
-1/8/2001: v3.07
- - fixed typo in short model name calculation
-
-31/7/2001: v3.06
- - make now builds shared version per default
-
-30/7/2001: v3.05
- - integrated hwscan
-
-27/7/2001: v3.04
- - added chipcard reader support
- - added camera (webcam) support
- - added framebuffer support (currently: VESA)
-
-26/7/2001: v3.03
- - support (usb) joysticks
-
-25/7/2001: v3.02
- - added access functions for /var/lib/hardware/ to libhd
- - hwinfo: no progress info if output is redirected
- - hwinfo: multiple arguments allowed
- - assign a hw_class
-
-24/7/2001: v3.01
- - report smp capability only if >1 processors are active
-
-23/7/2001: v3.00
- - SMP code can now handle empty MP tables
- - support module lists in driver info
- - new 'manual' flag indicating hardware that was not
- detected but entered manually
- - report usb capability only if the controller has an irq assigned
-
-27/6/2001: v2.22
- - added usb scanner detection
- - set gpm protocol to imps2 for wheel mice
- - bios based monitor detection enabled per default
- - made usb module loading default
-
-25/6/2001: v2.21
- - sndirsch: corrected 3D info for geforce3 cards
-
-21/6/2001: v2.20
- - updated driver info for new gdth.o
-
-19/6/2001: v2.19
- - fixed for s390x
-
-13/6/2001: v2.18
- - schwab: don't dereference free'd pointer
- - prefer e100.o over eepro100.o (#8797)
- - fixed framebuffer mode detection bug (#8620)
-
-7/6/2001: v2.17
- - fixed keyboard detection on sparc
-
-22/5/2001: v2.16
- - dan: fix usb modem bug (#8490)
- - remove 3d & xf_v3 driver info for ia64
-
-14/5/2001: v2.15
- - use isapnp_reset=0 for loading isa-pnp.o
-
-11/5/2001: v2.14
- - new driver data for 3c509
- - X11 data updated
- - have i2o cards listed as storage controllers (#6335)
-
-10/5/2001: v2.13
- - increase /dev/psaux timeout
- - adapted missing keyboard detection for kernel 2.4
-
-10/5/2001: v2.12
- - less things in libhd_tiny.a
- - read block 0 from disks _before_ going to look for the boot device
- - vmware detection clobbers %ebx; fixed
- - completely new monitor data base (#7536)
-
-7/5/2001: v2.11
- - preserve %ebx in i10_v86.c::vm86_rep
-
-7/5/2001: v2.10
- - rewrote isapnp detection for 2.4 kernel
- - updated driver info data
- - added "Baum" braille display detection
-
-3/5/2001: v2.09
- - support vbe bios calls to get monitor data (default: disabled)
- - added more usb wheel mice
-
-3/5/2001: v2.08
- - added vmware check
- - don't do scsi write cache detection in vmware
- - added ia64 smp detection
- - ia64 x11 data added
- - use tulip instead of de4x5 (#7317)
-
-30/4/2001: v2.07
- - updated x11 data
- - fixed multi-head display handling
- - adapted compaq smart array detection for kernel 2.4
-
-25/4/2001: v2.06
- - parport detection updated for kernel 2.4
- - add scsi hostadapter info to debug output
- - usb-storage again
- - boot_ia64 -> boot_elilo
-
-24/4/2001: v2.05
- - worked on usb-storage support
- - no isa-pnp probing in linuxrc
-
-20/4/2001: v2.04
- - better usb-storage support
-
-19/4/2001: v2.03
- - reworked floppy detection
- - identify devices with removable media
- - zip drives are always reported as floppies
-
-18/4/2001: v2.02
- - reworked ps/2 mouse code
- - provide number of buttons/wheels for mice
- - X11 data updated (ia32)
-
-7/4/2001: v2.01
- - new output format for support tool
- - more options for hwinfo
- - include pcmcia/cardbus cards in device lists
-
-5/4/2001: v2.00
- - new major version due to incompatible interface changes
- - integrated experimental changes (split was after v1.90)
-
-3/4/2001: v1.99
- - fixed segfault bug in alpha smp code
-
-26/3/2001: v1.98
- - unique id format changed
-
-21/3/2001: v1.97
- - fixed src/ids/Makefile for axp
- - slightly changed display detection code on axp
-
-20/3/2001: v1.96
- - new axp x11 data
-
-28/2/2001: v1.95
- - stepan: removed ISDN on alpha
- - avoid trigraphs while generating the data base
-
-22/2/2001: v1.94
- - fixed hd_copy() segfault bug (ppc)
-
-21/2/2001: v1.93
- - implemented SMP detection on ppc
-
-20/2/2001: v1.92
- - backport of new SMP detection code (ia32)
- - get console speed from kernel command line (ppc)
-
-15/2/2001: v1.91
- - fixed evil scsi device detection bug
- (missing scsi devices under some strange circumstances)
- - don't probe physical scsi geometry
-
-12/2/2001: v1.90
- - changed display adapter detection code to prefer sbus cards
-
-9/2/2001: v1.89
- - kkaempf: "ld -shared" is forbidden, changed to "gcc"
-
-7/2/2001: v1.88
- - new x11 data (sparc)
-
-31/1/2001: v1.87
- - mls: new oem stuff
-
-30/1/2001: v1.86
- - new x11 data (sparc)
-
-29/1/2001: v1.85
- - kukuk: sparc keyboard patches
-
-23/1/2001: v1.84
- - mls: added '--packages' option to hwinfo
-
-21/1/2001: v1.83
- - new x11 data (sparc)
-
-19/1/2001: v1.82
- - ncr*.o instead of sym*.o for 53c895a
- - new x11 data (ia32)
-
-18/1/2001: v1.81
- - fixed ISAPnP device name handling
- - back to ncr*.o for 53c875 [devid 0xf] (#5816)
- - added new tulip card
-
-17/1/2001: v1.80
- - updated dac960 driver info
-
-17/1/2001: v1.79
- - new x11 data
- - added '--help' option to hwinfo
- - implemented a basic getopt-style hwinfo interface
- - activate pr_bios if pr_misc is set
-
-16/1/2001: v1.78
- - updated driver info (starfire/qla2x00)
-
-16/1/2001: v1.77
- - back to old version scheme to avoid update problems
-
-15/1/2001: v1.0.76
- - updated scsi driver info
-
-15/1/2001: v1.0.75
- - new x11 data
- - make XF 4 default if no X11 info is found (ia32 only)
- - fixed serial line detection bug
-
-14/1/2001: v1.0.74
- - updated pci name list
- - updated scsi/network driver info
-
-12/1/2001: v1.0.73
- - new x11 data
- - sym*.o instead of ncr*.o for 53C875
- - quick fix for Wacom tablets
-
-12/1/2001: v1.0.72
- - fix minor bug in printer detection
- - fix bios disk number detection
-
-11/1/2001: v1.0.71
- - arvin: made res_pppd_option work
- - arvin: fixed detection of terminal adapters
- - sped up new modem stuff if no modem is connected
-
-11/1/2001: v1.0.70:
- - new x11 data (sparc)
-
-10/1/2001: v1.0.69
- - introduced res_pppd_option
- - new x11 data (ia32)
-
-9/1/2001: v1.0.68
- - smid@suse.cz: improved modem init string code
-
-8/1/2001: v1.0.67
- - fixed color depth handling
- - fixed multi-soundcard bug
- - new x11 data
-
-7/1/2001: v1.0.66
- - kendy@suse.cz: use BIOS port info for parport
- - new x11 data for all archs
- - 8139too instead of rtl8139 whenever possible
-
-20/12/2000: v1.0.65
- - added modem init string patch from smid@suse.cz
-
-19/12/2000: v1.0.64
- - added cciss stuff
- - updated x11 data
-
-18/12/2000: v1.0.63
- - BIOS lba stuff now works
-
-18/12/2000: v1.0.62
- - updated x11 data
-
-14/12/2000: v1.0.61
- - updated x11 data
- - build pnpdump only on i386 and alpha
- - hwinfo can now update x11 info in install.inf
-
-13/12/2000: v1.0.60
- - hwinfo can now update braille info in install.inf
- - activate alva braille detection
-
-13/12/2000: v1.0.59
- - updated x11 data
-
-12/12/2000: v1.0.58
- - new version number scheme (due to shared lib)
- - create shared libhd
- - report BIOS lba extension support
- - rearranged building libhd_tiny a bit
-
-12/12/2000: v1.57
- - fixed isapnp segfault bug
- - updated x11 data
-
-8/12/200: v1.56
- - new alva detection code
- - added cd-r/dvd detection
- - read "el torito" boot info
- - updated x11 info
-
-7/12/2000: v1.55
- - fixed evil hddb bug
- - added 3d script field
-
-9/11/2000: v1.54
- - started work on hddb fix
- - renamed timeout -> hd_timeout
-
-27/10/2000: v1.53
- - remove memory leaks, part 2 (ppc)
-
-26/10/2000: v1.52
- - add CD-RW detection (and DVD)
-
-25/10/2000: v1.51
- - remove memory leaks, part 1
-
-10/10/2000: v1.50
- - distinguish between chrp & chrp64
-
-10/10/2000: v1.49
- - provide a unique key for every hardware item
-
-10/10/2000: v1.48
- - cpu/smp detection code improved
-
-28/9/2000: v1.47
- - sparc: new x11 info
-
-22/9/2000: v1.46
- - ppc: fixed serial line & modem detection
-
-21/9/2000: v1.45
- - provide CHPID on s390
-
-20/9/2000: v1.44
- - added missing closedir()
-
-18/9/2000: v1.43
- - improved /proc/interrupt parsing
- - ppc: always return a ps/2 mouse for PreP & CHRP
- - skip serial device detection for console & yast2ser /proc/cmdline
- entries
- - ids updated
-
-18/9/2000: v1.42
- - now *really* disabled braille except on ia32
-
-15/9/2000: v1.41
- - ppc: changed some ids
-
-13/9/2000: v1.40
- - serial console detection for ppc
-
-13/9/2000: v1.39
- - ppc x11 driver info
- - ppc serial console
- - braille only on ia32
- - fixed scsi segfault bug
-
-8/9/2000: v1.38
- - updated device ids
- - added basic i2o support
- - disabled isapnp on ppc
-
-7/9/2000: v1.37
- - fixed modem segfault bug
- - fixed Zip device detection
-
-6/9/2000: v1.36
- - s390 network devices
-
-5/9/2000: v1.35
- - s390: finds disks
- - ppc: better sound detection
-
-25/8/2000: v1.34
- - new platform cpu entry on alpha
-
-24/8/2000: v1.33
- - better monitor & display detection on ppc
-
-23/8/2000: v1.32
- - made libhd at least to compile on s390
-
-23/8/2000: v1.31
- - slightly changed memory detection
- - ADB mice: /dev/input/mice
-
-15/8/2000: v1.30
- - added monitor detection on ppc
- - fixed iso9660 info reading
-
-14/8/2000: v1.29
- - added PROM parser for ppc; currently handles
- SCSI, network, sound & floppy devices
-
-9/8/2000: v1.28
- - added pr_misc to hw_isdn
- - fixed memory size detection
- - added 'generation' to system entry (for ppc)
- - new scsi detection code
- - kukuk: PS/2 keyboard detection on UltraSPARC
-
-28/7/2000: v1.27
- - fixed 'x11' parameter parsing
-
-27/7/2000: v1.26
- - added '--special' option to hwinfo (needed for live CD)
- - updated x11 data
-
-24/7/2000: v1.25
- - SMP detection: look for 'apic' flag
- - updated x11 data
-
-20/7/2000: v1.24
- - fixed Vaio detection
- - updated special ide chipset list
- - included more functions in LIBHD_TINY
- - updated x11 data
-
-19/7/2000: v1.23
- - updated x11 data
-
-18/7/2000: v1.22
- - dropped alva probing
- - updated x11 data
-
-15/7/2000: v1.21
- - fixed isapnp isdn probing bug
- - updated x11 data
-
-14/7/2000: v1.20
- - fixed stupid printer probing bug
- - updated x11 data
-
-13/7/2000: v1.19
- - fixed bootdevice detection bug
- - detect PowerBooks
-
-12/7/2000: v1.18
- - updated alsa driver info
- - updated minicdb id data
- - fixed missing isapnp sound cards bug
-
-11/7/2000: v1.17
- - added Sony Vaio detection
- - changed lance driver entry
- - fixed isdn/network card bug
- - updated id data
-
-10/7/2000: v1.16
- - pnpdump: start port scanning at port 0x20b, not 0x203
- (skips potential game port)
- - get ids directly from minicdb
-
-7/7/2000: v1.15
- - fixed hw_sys/hw_tv probing bug
-
-6/7/2000: v1.14
- - new 'system' hw entry
- - sparc smp detection: active -> probed
-
-5/7/2000: v1.13
- - added parallel Zip drive detection
-
-3/7/2000: v1.12
- - don't list cardbus/pcmcia devs in hd_list()
- - add multimedia/video boards to display adapters
-
-27/6/2000: v1.11
- - increased timeout in fhp detection
-
-27/6/2000: v1.10
- - fixed bug in braille detection
-
-26/6/2000: v1.09
- - updated README
- - fixed bug in 'hwprobe' handling
-
-26/6/2000: v1.08
- - new usb mouse devices
-
-22/6/2000: v1.07
- - activated serial line scanning in linuxrc
- - extendend 'hwprobe=' features
-
-21/6/2000: v1.06
- - fhp_old braille detection implemented
- - alva & ht braille stuff added
-
-21/6/2000: v1.05
- - changed (driver_info_x11_t).x11.raw to str_list_t
-
-21/6/2000: v1.04
- - added 'x11' kernel cmdline param
-
-20/6/2000: v1.03
- - fixed mk_ids (used to drop all non-x11 ids)
- - improved 'hwprobe=' functionality
- - fhp braille detection implemented
-
-20/6/2000: v1.02
- - updated pciutils & sax/sax2 data
- - added fire gl1
- - added 'hwprobe' env resp. kernel cmdline param
-
-13/6/2000: v1.01
- - new module info
- - fix old VGA entries
- - hw_tv now functional
-
-9/6/2000: v1.00
- - added hw_monitor, hw_printer, hw_tv, hw_scanner
- [hw_tv, hw_scanner still non-funcional]
- - improved ddc parsing (new syslinux!)
-
-7/6/2000: v0.99
- - added hd_list() function
-
-6//6/2000: v0.98
- - hd_display_list() function
- - new SaX[2] data
- - changed mk_ids to provide 3d *and* non-3d x11 entries
-
-31/5/2000: v0.97
- - provides info about bios disk ids
-
-30/5/2000: v0.96
- - extended X11 driver info (for XF86 4.0)
- - added Thorsten's small SPARC patch
- - extended serial line info
- - note: v0.95 was a ppc quick-hack only version needed for 6.4;
- it will not be integrated into the main tree
-
-24/5/2000: v0.94
- - fixed tmp file security hole
- - added hd_{mouse/keyboard/floppy}_list() functions
-
-15/5/2000: v0.93
- - integrated Thorsten Kukuk's patches (mostly SPARC stuff)
- - some minor other fixes
-
-17/4/2000: v0.92
- - ADB mouse driver info extended
- - color code stuff updated
-
-11/4/2000: v0.91
- - fixed XkbModel typo on intel/axp
- - ia64 patches from Andreas
- - new Mac color code
-
-31/3/2000: v0.89
- - changed XkbModel to "powerpcps2" on chrp machines
- - more iMac colors
-
-24/3/2000: v0.88
- - read color code on macs
-
-21/3/2000: v0.87
- - added Netfinity graphics card fix
- - 3com net card driver adjustments
- - ISDN info fix
- - SPARC keyboard code
- - added keyboard driver info
-
-14/3/2000: v0.86
- - flush serial buffer before close()
-
-8/3/2000: v0.85
- - some minor bug fixes
-
-8/3/2000: v0.84
- - changed display adapter probing to include bc_multimedia
-
-8/3/2000: v0.83
- - pci cards are attached to their resp. bridges
- - card bus cards not listed by probe_by_class
-
-6/3/2000: v0.82
- - X server list fixes
-
-5/3/2000: v0.81
- - some monitor data
-
-4/3/2000: v0.80
- - new probing flag pr_scsi_geo: defaults to off due to
- problems on scsi-Zip's
-
-3/3/2000: v0.79
- - tuned probing flags
- - renamed drivers file
- - added "Belinea 10 20 20" data (ddc info lies about supported modes!)
-
-29/2/2000: v0.78
- - new graphics cards
-
-28/2/2000: v0.77
- - modem fix: give default name if none could be determined
- - added 3Com Robotics recognition
- - added physical SCSI geometry
-
-28/2/2000: v0.76
- - automatic usb module loading
- - rewrite of the probing flags stuff; new probing flags
- - new hd_display() function
-
-26/2/2000: v0.75
- - pcmcia detection now looks at class ids
- - fixed pcmcia detection bug
- - added usb detection function
-
-26/2/2000: v0.74
- - added alsa isapnp sound cards
-
-25/2/2000: v0.73
- - sparc & baud rate fix
- - new libihw
- - minor usb improvements
- - better keyboard detection
- - ressource management for irqs
- - isdn fixes/improvements
- - added some sound cards
-
-24/2/2000: v0.72
- - libihw used only on ix86 & axp
- - pc keyboard detection
-
-23/2/2000: v0.71
- - isdn stuff
-
-22/2/2000: v0.70
- - changed x11/3d driver info
-
-18/2/2000: v0.69
- - mouse code now resets serial lines
-
-18/2/2000: v0.68
- - new try at AGP detection
- - improved mylex code
- - added compaq smart raid detection
- - improved scsi code
-
-17/2/2000: v0.67
- - improved CPU code on axp & ppc
- - changed serial line code: use non-blocking open
-
-16/2/2000: v0.66
- - new ids
- - added Mylex detection (dac960)
-
-15/2/2000: v0.65
- - a lot of driver info
- - timeout problem opening serial devs?
-
-12/2/2000: v0.64
- - added some ids
- - added Zoom modem detection
-
-11/2/2000: v0.63
- - fixed isapnp for ppc
-
-11/2/2000: v0.62
- - Makefile now knows about sparc64
- - driver info: 3c90x vs. 3c59x; see comment in drivers.SuSE
- - worked on ISDN stuff
-
-10/2/2000: v0.61
- - added peliminary usb storage device handling
- - added ISA-PnP memory range decoding
- - added ISDN probing for ISA cards (*very* preliminary)
-
-8/2/2000: v0.60
- - added UMAX USB scanner ids
- - small modem fix (open fds)
- - determines boot device
-
-5/2/2000: v0.59
- - improved boot floppy: now with usb support
- - changed hw behavior: no listing on console if a logfile is used
- - fixed missing baud defines on SPARC
- - added 3d graphics card info
- - changed internal mouse ids from PnP ids --> special ids
- - some 64 bit pci fixes
- - pci devices with missing class info: get class info from data base
- - added more usb ids
-
-4/2/2000: v0.58
- - added generic ne2000 info
- - improved printing of modules.conf entries
- - moved ID handling macros (MAKE_ID, etc) to hd.h
-
-3/2/2000: v0.57
- - added lp-devices to mk_floppy
- - added usb vendor list
- - NOTE: hd_class_list() interface slightly changed!!!
- - USB support complete rewritten
- - modem fix: avoid selecting a device twice!
- - driver info: take compatible devices into account
-
-2/2/2000: v0.56
- - more driver info
- - added hd_smp_support()
-
-1/2/2000: v0.55
- - made hd_module_is_active() global
- - added pcnet32 info
- - added 'static' target
- - fixed ddc string parser
- - fixed monitor driver info parser
- - added tiny target: -> libhd_tiny.a is minimum version for linuxrc
-
-27/10/2000: v0.54
- - rescan == 3 --> return new entries since last call with rescan == 2
-
-27/10/2000: v0.53
- - fixed driver entries with modules.conf lines
- - fixed internal handling of modules.conf entries
- - added new feature to hd_*_list() functions:
- rescan == 2 --> return only new entries
-
-25/10/2000: v0.52
- - started this log :-)
- - modem code now handles non-pnp modems
- - added a baud resource to modem entries: holds the modem's max.
- port speed
- - added some modem ids
- - updated docu (interface.html)
+++ /dev/null
-TOPDIR = $(CURDIR)
-SUBDIRS = src
-TARGETS = hwinfo hwscan hwscand hwscanqueue
-CLEANFILES = hwinfo hwinfo.static hwscan hwscan.static hwscand hwscanqueue doc/libhd doc/*~
-LIBDIR = /lib
-ULIBDIR = /usr$(LIBDIR)
-LIBS = -lhd
-SLIBS = -lhd -lsysfs
-TLIBS = -lhd_tiny -lsysfs
-SO_LIBS = -lsysfs
-TSO_LIBS = -lsysfs
-
-export SO_LIBS
-
-include Makefile.common
-
-SHARED_FLAGS =
-OBJS_NO_TINY = names.o parallel.o modem.o
-
-.PHONY: fullstatic static shared tiny doc diet tinydiet uc tinyuc
-
-hwscan: hwscan.o $(LIBHD)
- $(CC) hwscan.o $(LDFLAGS) $(LIBS) -o $@
-
-hwinfo: hwinfo.o $(LIBHD)
- $(CC) hwinfo.o $(LDFLAGS) $(LIBS) -o $@
-
-hwscand: hwscand.o
- $(CC) $< $(LDFLAGS) -o $@
-
-hwscanqueue: hwscanqueue.o
- $(CC) $< $(LDFLAGS) -o $@
-
-# kept for compatibility
-shared:
- @make
-
-tiny:
- @make EXTRA_FLAGS=-DLIBHD_TINY LIBHD_BASE=libhd_tiny LIBS="$(TLIBS)" SO_LIBS="$(TSO_LIBS)"
-
-tinyinstall:
- @make EXTRA_FLAGS=-DLIBHD_TINY LIBHD_BASE=libhd_tiny LIBS="$(TLIBS)" SO_LIBS="$(TSO_LIBS)" install
-
-tinystatic:
- @make EXTRA_FLAGS=-DLIBHD_TINY LIBHD_BASE=libhd_tiny SHARED_FLAGS= LIBS="$(TLIBS)" SO_LIBS="$(TSO_LIBS)"
-
-tinystaticinstall:
- @make EXTRA_FLAGS=-DLIBHD_TINY LIBHD_BASE=libhd_tiny SHARED_FLAGS= LIBS="$(TLIBS)" SO_LIBS="$(TSO_LIBS)" install
-
-diet:
- @make CC="diet gcc" EXTRA_FLAGS="-fno-pic -DDIET" SHARED_FLAGS= LIBS="$(SLIBS)"
-
-tinydiet:
- @make CC="diet gcc" EXTRA_FLAGS="-fno-pic -DLIBHD_TINY -DDIET" SHARED_FLAGS= LIBS="$(SLIBS)"
-
-uc:
- @make CC="/opt/i386-linux-uclibc/bin/i386-uclibc-gcc" EXTRA_FLAGS="-fno-pic -DUCLIBC" SHARED_FLAGS= LIBS="$(SLIBS)"
-
-tinyuc:
- @make CC="/opt/i386-linux-uclibc/usr/bin/gcc" EXTRA_FLAGS="-fno-pic -DLIBHD_TINY -DUCLIBC" SHARED_FLAGS= LIBS="$(SLIBS)"
-
-static:
- make SHARED_FLAGS= LIBS="$(SLIBS)"
-
-fullstatic: static
- $(CC) -static hwinfo.o $(LDFLAGS) $(SLIBS) -o hwinfo.static
- $(CC) -static hwscan.o $(LDFLAGS) $(SLIBS) -o hwscan.static
- strip -R .note -R .comment hwinfo.static
- strip -R .note -R .comment hwscan.static
-
-doc:
- @cd doc ; doxygen libhd.doxy
-
-install:
- install -d -m 755 $(DESTDIR)/sbin $(DESTDIR)/usr/sbin $(DESTDIR)$(LIBDIR) $(DESTDIR)$(ULIBDIR)\
- $(DESTDIR)/usr/include $(DESTDIR)/etc/init.d
- install -m 755 hwinfo $(DESTDIR)/usr/sbin
- install -m 755 hwscan hwscand hwscanqueue $(DESTDIR)/sbin
- install -m 755 -s src/ids/check_hd $(DESTDIR)/usr/sbin
- install -m 755 src/ids/convert_hd $(DESTDIR)/usr/sbin
- if [ -f $(LIBHD_SO) ] ; then \
- install $(LIBHD_SO) $(DESTDIR)$(LIBDIR) ; \
- ln -snf $(LIBHD_NAME) $(DESTDIR)$(LIBDIR)/$(LIBHD_SONAME) ; \
- ln -snf $(LIBDIR)/$(LIBHD_SONAME) $(DESTDIR)$(ULIBDIR)/$(LIBHD_BASE).so ; \
- else \
- install -m 644 $(LIBHD) $(DESTDIR)$(ULIBDIR) ; \
- fi
- install -m 644 src/hd/hd.h $(DESTDIR)/usr/include
- install -m 755 hwbootscan getsysinfo gen-hwcfg-disk.sh $(DESTDIR)/usr/sbin
- install -m 755 hwbootscan.rc $(DESTDIR)/etc/init.d/hwscan
- install -m 755 src/isdn/cdb/mk_isdnhwdb $(DESTDIR)/usr/sbin
- install -d -m 755 $(DESTDIR)/usr/share/hwinfo
- install -m 644 src/isdn/cdb/ISDN.CDB.txt $(DESTDIR)/usr/share/hwinfo
- install -m 644 src/isdn/cdb/ISDN.CDB.hwdb $(DESTDIR)/usr/share/hwinfo
-
+++ /dev/null
-# libhd/Makefile.common
-
-ARCH := $(shell uname -m)
-ifeq "$(ARCH)" "i486"
-ARCH := i386
-endif
-ifeq "$(ARCH)" "i586"
-ARCH := i386
-endif
-ifeq "$(ARCH)" "i686"
-ARCH := i386
-endif
-ifeq "$(ARCH)" "parisc"
-EXTRA_FLAGS := -fPIC $(EXTRA_FLAGS)
-endif
-
-LIBHD_VERSION := $(shell cat $(TOPDIR)/VERSION)
-LIBHD_MINOR_VERSION := $(shell cut -d . -f 2 $(TOPDIR)/VERSION)
-LIBHD_MAJOR_VERSION := $(shell cut -d . -f 1 $(TOPDIR)/VERSION)
-
-CC = gcc
-LD = ld
-CFLAGS = -Wall -O2 -pipe -g $(SHARED_FLAGS) $(EXTRA_FLAGS) -I/opt/i586-uClibc/include -I/opt/i586-uClibc/usr/include -I$(TOPDIR)/src/hd
-SHARED_FLAGS = -fPIC
-
-LDFLAGS = -Lsrc
-
-CFILES = $(wildcard *.c)
-OBJS = $(CFILES:.c=.o)
-LIBHD_BASE = libhd
-LIBHD = $(TOPDIR)/src/$(LIBHD_BASE).a
-LIBHD_SONAME = $(LIBHD_BASE).so.$(LIBHD_MAJOR_VERSION)
-LIBHD_NAME = $(LIBHD_BASE).so.$(LIBHD_VERSION)
-LIBHD_SO = $(TOPDIR)/src/$(LIBHD_NAME)
-LIBHD_D = $(TOPDIR)/src/.lib
-
-export CC TOPDIR CFLAGS LIBHD ARCH
-
-.PHONY: all distclean clean install subdirs
-
-%.o: %.c
- $(CC) -c $(CFLAGS) $<
-
-all: subdirs $(TARGETS)
-
-install: all
-
-ifneq "$(SUBDIRS)" ""
-subdirs:
- @for i in $(SUBDIRS) ; do make -C $$i $(MAKECMDGOALS) || exit ; done
-endif
-
-clean: subdirs
- @rm -rf $(OBJS) .depend $(CLEANFILES) *~
-
-distclean: subdirs
- @rm -rf $(OBJS) .depend $(CLEANFILES) $(DISTCLEANFILES) *~
-
-ifneq "$(CFILES)" ""
-ifeq ($(findstring $(MAKECMDGOALS), clean distclean),)
-.depend: $(CFILES)
- @$(CC) -MG -MM $(CFLAGS) $(CFILES) >$@
-
--include .depend
-endif
-endif
+++ /dev/null
-1. Usage
-========
-
- hwinfo [debug=deb_flag] [log=log_file] [list[+]=hw_item] [[+|-]probe_option1] [[+|-]probe_option2] ...
-
-Examples:
-
- hwinfo
- - probes for nearly everything
-
- hwinfo +all
- - probes for everything
-
- hwinfo log=hw_log
- - default probing, output is written to hw_log
- *** Please don't use "hwinfo >some_log 2>&1" to store the output into a
- log file! ***
-
- hwinfo -all +ide
- - probe for ide drives only
-
- hwinfo +all -isapnp -floppy
- - probe for everything *except* isapnp and floppies
-
-Some probing flags do not stand for complete modules but enable additional
-features; e.g. "pci.range" or "cdrom.info".
-
-Example:
- hwinfo -all +cdrom
- gives a list of all cdrom's
-
- hwinfo -all +cdrom.info
- additionally reads the iso9660 info
-
-To get a list of all supported probing flags, call 'hwinfo -all'.
-
-
-2. Environment variables/kernel cmdline parameters
-==================================================
-
-You can control the hardware probing using the environment variable
-"hwprobe" and the kernel cmdline parameters "hwprobe" & "x11".
-
-If "hwprobe" is set on the kernel cmdline, the environment variable
-"hwprobe" is ignored. Otherwise, the meaning of both is exactly the same.
-
- x11
- - Controls the X server/X version to prefer. It is either "3" or "4" or the
- name of the X server/X server module to use (XF3: server name without
- the leading "XF86_", XF4: the server module name).
-
- Examples:
- x11=3
- o prefer XFree86 3.x over 4.x (if possible)
-
- x11=SVGA
- o use the XF86_SVGA server (*** Even if the server does not
- support the card! ***)
-
- x11=nv
- o use the XF4 nv_drv.o driver (*** Even if the module does not
- support the card! ***)
-
- hwprobe
- - Controls which probing flags should *always* be set/cleared. (These
- settings *cannot* be overridden by command line switches.)
-
- Examples:
- hwprobe=-isapnp
- o *never* do any isapnp probing
-
- hwprobe=-braille,-modem
- o don't look for braille displays & modems
-
- - Allows you to add and remove hardware from the probing results. In this case
- the syntax is (-: remove, +: add at end of list, <nothing>: add at begin of
- list):
- hwprobe=[+-]<device_class>:<vendor_id>:<device_id>[:<unix_device_file>]
-
- <device_class>, <vendor_id> and <device_id> are device ids as used by libhd.
- See the output of hwinfo for examples. In connection with "-", you can use
- "*" as a placeholder that matches every id.
-
- Note: <unix_device_file> is optional.
-
- Note2: you cannot usefully *add* hardware that needs more info than that
- given by the hwprobe entry. Disks & floppies are notable examples.
- (But you can *remove* them.)
-
- Here is a typical hwinfo output for a mouse, with the relevant ids
- underlined (<device_class> is the combined base_class & sub_class),
- [see 1st example below]:
-
- 14: PS/2 00.0: 10500 PS/2 Mouse
- ^^^^^ --> <device_class>
- [Created at mouse.110]
- Vendor: s0200 "Unknown"
- ^^^^^ --> <vendor_id>
- Model: 0002 "Generic PS/2 Mouse"
- ^^^^ --> <device_id>
- Device File: /dev/psaux
- ^^^^^^^^^^ --> <unix_device_file>
- Driver Info #0:
- XFree86 Protocol: ps/2
- GPM Protocol: ps2
- Attached to: #8 (PS/2 Controller)
-
-
- Examples:
- hwprobe=+10500:s200:2:/dev/psaux
- o add a ps/2 mouse [at the end of the hardware list]
-
- hwprobe=10500:s200:2:/dev/psaux
- o add a ps/2 mouse [at the start of the hardware list, so it
- is our default mouse]
-
- hwprobe=+10b00:s5001:0:/dev/ttyS0
- o add a braille display connected to /dev/ttyS0
-
- hwprobe=-10500:s200:2:/dev/psaux
- o remove ps/2 mice attached to /dev/psaux
-
- hwprobe=-10500:s200:2
- o remove all ps/2 mice
-
- hwprobe=-10500:*:*
- o remove all ps/2 mice
-
- hwprobe=-*:*:*:/dev/hdc
- o remove /dev/hdc
-
- hwprobe=+401:1274:5000
- o add an ensoniq sound card
-
- Grafics cards are are slightly trickier:
-
- hwprobe=+300:1014:b7
- o add a Fire GL1 card
- Note: this way you'll get a multihead config. You'll probably
- rather want the following example.
-
- hwprobe=-300:*:*,+300:1014:b7
- o remove all graphics cards; then add a Fire GL1 card
-
- hwprobe=+400:121a:1
- o add a 3fx voodoo card (Note the class "400", not "300"!)
-
- - for more ids, see "src/ids/names.*" and "src/ids/drivers.*"
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <hd.h>
-
-int main(int argc, char **argv)
-{
- hd_data_t *hd_data;
- hd_t *hd;
-
- hd_data = calloc(1, sizeof *hd_data);
-
- hd = hd_list(hd_data, hw_scsi, 1, NULL);
-
- for(; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, stdout)
- }
-
- hd_free_hd_list(hd); /* free it */
- hd_free_hd_data(hd_data);
-
- free(hd_data);
-
- return 0;
-}
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <hd.h>
-
-int main(int argc, char **argv)
-{
- hd_data_t *hd_data;
- hd_t *hd;
- unsigned display_idx;
-
- hd_data = calloc(1, sizeof *hd_data);
-
- hd = hd_list(hd_data, hw_display, 1, NULL);
- display_idx = hd_display_adapter(hd_data);
-
- hd_dump_entry(hd_data, hd_get_device_by_idx(hd_data, display_idx), stdout)
-
- hd_free_hd_list(hd);
- hd_free_hd_data(hd_data);
-
- free(hd_data);
-
- return 0;
-}
-
+++ /dev/null
-</body></html>
+++ /dev/null
-.\" Michal Svec <msvec@suse.cz>
-.\"
-.\" Process this file with
-.\" groff -man -Tascii foo.1
-.\"
-.\"
-.TH HWINFO 8 "January 2003" "hwinfo" "System configuration"
-.\"
-.\"
-.SH NAME
-hwinfo \- probe for hardware
-.\"
-.\"
-.SH SYNOPSIS
-.B hwinfo [
-.I options
-.B ]
-.\"
-.\"
-.SH DESCRIPTION
-.B hwinfo
-is used to probe for the hardware present in the system. It can be used
-to generate a system overview log which can be later used for support.
-.\"
-.\"
-.SH OPTIONS
-.\"
-.TP
-.BI --debug " " level
-Set debug
-.B level.
-The debug info is shown only in the log file. If you specify a log file,
-the debug level is implicitly set to a reasonable value.
-.\"
-.TP
-.BI --dump-db " " n
-Dump hardware data base,
-.B n
-is either
-.B 0
-for the external data base, or
-.B 1
-for the internal data base.
-.\"
-.TP
-.BI --help
-Print a usage and exit.
-.\"
-.TP
-.BI --log " " logfile
-Write info to
-.B logfile.
-.\"
-.TP
-.BI --short
-Just a short listing.
-.\"
-.TP
-.BI --version
-Show libhd version.
-.\"
-.TP
-.BI --<hwitem>
-Probe for the particular hardware item. Available hardware items are:
-.B all, bios, block, bluetooth, braille, bridge, camera, cdrom, chipcard, cpu,
-.B disk, dsl, dvb, floppy, framebuffer, gfxcard, hub, ide, isapnp, isdn,
-.B joystick, keyboard, memory, modem, monitor, mouse, netcard, network,
-.B partition, pci, pcmcia, pcmcia-ctrl, pppoe, printer, scanner, scsi, smp,
-.B sound, storage-ctrl, sys, tape, tv, usb, usb-ctrl, vbe, wlan,
-and
-.B zip.
-.\"
-.\"
-.SH FILES
-.B /var/lib/hardware/*
-.\"
-.\"
-.SH BUGS
-Not all hardware can be detected.
-.\"
-.\"
-.SH AUTHOR
-.nf
-Steffen Winterfeldt <snwint@suse.de> - hwinfo
-Michal Svec <msvec@suse.cz> - manual page
-.fi
-.\"
-.\"
-.SH "SEE ALSO"
-Documentation in /usr/share/doc/packages/hwinfo.
-.\"
-.\" EOF
+++ /dev/null
-/*! \mainpage libhd documentation
-
-<h2>Introduction</h2>
-
-libhd is a hardware detection lib.
-
-<h2>Changes</h2>
-
-\ref libhd_5_12
-
-<h2>Examples</h2>
-
-\ref example1
-
-\ref example2
-
-*/
-
-
-/*! \page examples Examples
-
-\ref example1
-
-\ref example2
-
-<hr>
-
-\subsection example1 Get list of SCSI controllers
-
-\include example1.c
-
-<hr>
-
-\subsection example2 Get primary display controller
-
-\include example2.c
-
-*/
-
-/*! \page changes Changes
-
-\ref libhd_5_12
-
-<hr>
-
-\subsection libhd_5_12 libhd-5.12
-
-<ul>
-
- <li>changes in \ref hd_t
-
- <ul>
-
- <li>\ref hd_t::bus "bus" is now a struct, use \ref hd_t::bus "bus.id" instead.
-
- <li>\ref hd_t::base_class "base_class" is now a struct, use \ref hd_t::base_class "base_class.id" instead.
-
- <li>\ref hd_t::sub_class "sub_class" is now a struct, use \ref hd_t::sub_class "sub_class.id" instead.
-
- <li>\ref hd_t::prog_if "prog_if" is now a struct, use \ref hd_t::prog_if "prog_if.id" instead.
-
- <li>\ref hd_t::vendor "vendor" is a struct replacing vend and vend_name.
- Use \ref hd_t::vendor "vendor.id" and \ref hd_t::vendor "vendor.name" now.
-
- <li>\ref hd_t::device "device" is a struct replacing dev and dev_name.
- Use \ref hd_t::device "device.id" and \ref hd_t::device "device.name" now.
-
- <li>\ref hd_t::sub_vendor "sub_vendor" is a struct replacing sub_vend and sub_vend_name.
- Use \ref hd_t::sub_vendor "sub_vendor.id" and \ref hd_t::sub_vendor "sub_vendor.name" now.
-
- <li>\ref hd_t::sub_device "sub_device" is a struct replacing sub_dev and sub_dev_name.
- Use \ref hd_t::sub_device "sub_device.id" and \ref hd_t::sub_device "sub_device.name" now.
-
- <li>\ref hd_t::revision "revision" is a struct replacing rev and rev_name.
- Use \ref hd_t::revision "revision.id" and \ref hd_t::revision "revision.name" now.
-
- <li>\ref hd_t::compat_vendor "compat_vendor" is a struct replacing compat_vend.
- Use \ref hd_t::compat_vendor "compat_vendor.id" now.
-
- <li>\ref hd_t::compat_device "compat_device" is a struct replacing compat_dev.
- Use \ref hd_t::compat_device "compat_device.id" now.
-
- </ul>
-
- <li>interface functions removed
-
- <ul>
-
- <li>hd_bus_name is gone. Use \ref hd_t::bus "bus.name" instead.
-
- <li>hd_class_name is gone. Use \ref hd_t::base_class "base_class.name",
- \ref hd_t::sub_class "sub_class.name" or \ref hd_t::prog_if "prog_if.name" instead.
-
- <li>hd_vendor_name is gone. Use \ref hd_t::vendor "vendor.name" instead.
-
- <li>hd_device_name is gone. Use \ref hd_t::device "device.name" instead.
-
- <li>hd_sub_device_name is gone. Use \ref hd_t::sub_device "sub_device.name" instead.
-
- <li>hd_find_device_by_name is gone.
-
- </ul>
-
-</ul>
-
-<hr>
-
-*/
-
+++ /dev/null
-# Doxyfile 1.2.13.1
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# General configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME = libhd
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER = 5.0
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = libhd
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
-# German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
-# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
-
-OUTPUT_LANGUAGE = English
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these class will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
-# members of a class in the documentation of that class as if those members were
-# ordinary class members. Constructors, destructors and assignment operators of
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. It is allowed to use relative paths in the argument list.
-
-STRIP_FROM_PATH =
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower case letters. If set to YES upper case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# users are adviced to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explict @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# reimplements.
-
-INHERIT_DOCS = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 8
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST = YES
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consist of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C.
-# For instance some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text.
-
-WARN_FORMAT =
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT = libhd.doc ../src
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
-# *.h++ *.idl
-
-FILE_PATTERNS = *.c *.h
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE = ../src/ids
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-
-EXCLUDE_PATTERNS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH = .
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS = *.c
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
-
-INPUT_FILTER =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse.
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT =
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER = footer.html
-
-# The HTML_STYLESHEET tag can be used to specify a user defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet
-
-HTML_STYLESHEET =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the Html help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
-# or Internet explorer 4.0+). Note that for large projects the tree generation
-# can take a very long time. In such cases it is better to disable this feature.
-# Windows users are probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX = YES
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT =
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimised for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT =
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assigments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT =
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION =
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_XML = NO
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed.
-
-PREDEFINED =
-
-# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line and do not end with a semicolon. Such function macros are typically
-# used for boiler-plate code, and will confuse the parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::addtions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tagfiles.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
-# super classes. Setting the tag to NO turns the diagrams off. Note that this
-# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
-# recommended to install and use dot, since it yield more powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found on the path.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS =
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_WIDTH = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT = 1024
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermedate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
-
-# The CGI_NAME tag should be the name of the CGI script that
-# starts the search engine (doxysearch) with the correct parameters.
-# A script with this name will be generated by doxygen.
-
-CGI_NAME =
-
-# The CGI_URL tag should be the absolute URL to the directory where the
-# cgi binaries are located. See the documentation of your http daemon for
-# details.
-
-CGI_URL =
-
-# The DOC_URL tag should be the absolute URL to the directory where the
-# documentation is located. If left blank the absolute path to the
-# documentation, with file:// prepended to it, will be used.
-
-DOC_URL =
-
-# The DOC_ABSPATH tag should be the absolute path to the directory where the
-# documentation is located. If left blank the directory on the local machine
-# will be used.
-
-DOC_ABSPATH =
-
-# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
-# is installed.
-
-BIN_ABSPATH =
-
-# The EXT_DOC_PATHS tag can be used to specify one or more paths to
-# documentation generated for other projects. This allows doxysearch to search
-# the documentation for these projects as well.
-
-EXT_DOC_PATHS =
+++ /dev/null
-#!/bin/bash
-#
-# gen-hwcfg-disk.sh
-#
-# Generates hwcfg file for all configured disks
-#
-
-if [ -x /sbin/ata_identify ]; then
- ATA_ID=/sbin/ata_identify
-elif [ -x /lib/klibc/bin/ata_identify ]; then
- ATA_ID=/lib/klibc/bin/ata_identify
-else
- echo "ata_identify not found, please install udev"
- exit 1
-fi
-
-hwcfg=/etc/sysconfig/hardware
-
-if [ ! -d "$hwcfg" ]; then
- echo "No hardware configuration directory found"
- exit 1
-fi
-
-# IDE disks first
-for ifname in /sys/block/hd*; do
- id=$($ATA_ID /dev/${ifname##*/} 2> /dev/null)
- if [ $? -eq 0 ]; then
- filename="SATA_$id"
- echo "Generate hwcfg file for $filename"
- echo "DEVICE=${ifname##*/}" > ${hwcfg}/hwcfg-disk-id-${filename}
- fi
-done
-
-# SCSI disks next
-for ifname in /sys/block/sd*; do
- if [ -d $ifname/device ]; then
- read vendor < $ifname/device/vendor
- if [ "$vendor" = "ATA" ]; then
- # We need page 0x80 to get the serial number
- page="-p 0x80"
- else
- page=
- fi
- scsi_id -g $page -s ${ifname#/sys} 2> /dev/null | while read vendor model serial; do
- filename="${vendor}_${model}_${serial}"
- echo "Generate hwcfg file for $filename"
- echo "DEVICE=${ifname##*/}" > ${hwcfg}/hwcfg-disk-id-${filename}
- done
- fi
-done
+++ /dev/null
-#! /bin/sh
-
-if [ "$1" ] ; then
- cat <<EOF
-Usage: getsysinfo
-Collect some system data that are useful for debugging
-hardware detection bugs.
-EOF
- exit 0
-fi
-
-# collect some system data
-
-dir=`mktemp -d /tmp/getsysinfo.XXXXXXXXXX`
-
-[ -d "$dir" ] || exit 1
-
-host=`hostname`
-[ "$host" ] || host=xxx
-
-mkdir -p "$dir/$host"
-
-for i in \
- /proc/bus/input \
- /proc/cpuinfo \
- /proc/device-tree \
- /proc/devices \
- /proc/dma \
- /proc/driver/nvram \
- /proc/fb \
- /proc/iSeries \
- /proc/ide \
- /proc/interrupts \
- /proc/iomem \
- /proc/ioports \
- /proc/meminfo \
- /proc/modules \
- /proc/net/dev \
- /proc/partitions \
- /proc/scsi \
- /proc/sys/dev/cdrom/info \
- /proc/sys/dev/parport \
- /proc/tty \
- /proc/version \
- /sys \
- /var/log/boot.msg
-do
- if [ -e "$i" ] ; then
- echo "$i"
- cp -a --parents "$i" "$dir/$host" 2>/dev/null
- chmod -R u+w,a+r,a+X "$dir/$host"
- fi
-done
-
-echo /proc/mounts
-cp --parents /proc/mounts "$dir/$host"
-
-echo -e "\n------ dmesg start ------\n" >>"$dir/$host/var/log/boot.msg"
-dmesg >>"$dir/$host/var/log/boot.msg"
-
-file="$host.tar.gz"
-tar -C "$dir" -zcf "$dir/$file" "$host"
-
-rm -f "/tmp/$file"
-
-if [ -e "/tmp/$file" ] ; then
- echo "Warning: /tmp/$file exists, no info written"\!
- rm -rf "$dir"
- exit 1
-fi
-
-ln -nf "$dir/$file" "/tmp/$file"
-
-rm -rf "$dir"
-
-echo -e "\nSystem data written to: /tmp/$file"
-
+++ /dev/null
-#!/bin/bash
-
-rm -f /var/lib/hardware/LOCK
-
-/sbin/hwscan --silent --boot --fast --isapnp --pci --block --floppy --mouse
-
-#
-# create icons for static drives
-#
-if [ -e /etc/hotplug/hotplug.subfs.functions ]; then
- . /etc/hotplug/hotplug.subfs.functions
- coldplug_create_subfs
-fi
-
-exit 0
+++ /dev/null
-#! /bin/sh
-# Copyright (c) 2002 SuSE GmbH Nuernberg, Germany. All rights reserved.
-#
-# Author: Marcus Meissner <meissner@suse.de>
-#
-# /etc/init.d/hwscan
-#
-# System startup script for boot hw probing and reconfiguration
-#
-### BEGIN INIT INFO
-# Provides: hwscan
-# Required-Start:
-# X-UnitedLinux-Should-Start: hotplug kbd
-# Required-Stop:
-# Default-Start: 2 3 5
-# Default-Stop:
-# Description: Hardware scan and reconfiguration on boot.
-### END INIT INFO
-
-HWBOOTSCAN_BIN=/usr/sbin/hwbootscan
-test -x $HWBOOTSCAN_BIN || exit 5
-
-# Shell functions sourced from /etc/rc.status:
-# rc_check check and set local and overall rc status
-# rc_status check and set local and overall rc status
-# rc_status -v ditto but be verbose in local rc status
-# rc_status -v -r ditto and clear the local rc status
-# rc_failed set local and overall rc status to failed
-# rc_reset clear local rc status (overall remains)
-# rc_exit exit appropriate to overall rc status
-. /etc/rc.status
-
-# First reset status of this service
-rc_reset
-
-# Return values acc. to LSB for all commands but status:
-# 0 - success
-# 1 - misc error
-# 2 - invalid or excess args
-# 3 - unimplemented feature (e.g. reload)
-# 4 - insufficient privilege
-# 5 - program not installed
-# 6 - program not configured
-# 7 - program is not running
-#
-# Note that starting an already running service, stopping
-# or restarting a not-running service as well as the restart
-# with force-reload (in case signalling is not supported) are
-# considered a success.
-
-case "$1" in
- start)
- echo -n "Starting hardware scan on boot"
- rc_splash "YaST"
- [ -n "$REDIRECT" ] && exec 0<> $REDIRECT 1>&0 2>&0
- $HWBOOTSCAN_BIN
- rc_check
- rc_status -v
- ;;
- stop)
- rc_check
- ;;
- restart)
- ## Stop the service and regardless of whether it was
- ## running or not, start it again.
- # Remember status and be quiet
- rc_check
- ;;
- force-reload)
- ## Signal the daemon to reload its config. Most daemons
- ## do this on signal 1 (SIGHUP).
- ## If it does not support it, restart.
- # Remember status and be quiet
- rc_check
- ;;
- reload)
- ## Like force-reload, but if daemon does not support
- ## signalling, do nothing (!)
-
- # If it supports signalling:
- rc_reset
- ;;
- status)
- ## Check status with checkproc(8), if process is running
- ## checkproc will return with exit status 0.
-
- # Status has a slightly different for the status command:
- # 0 - service running
- # 1 - service dead, but /var/run/ pid file exists
- # 2 - service dead, but /var/lock/ lock file exists
- # 3 - service not running
-
- rc_reset
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|force-reload|reload|status}"
- exit 1
- ;;
-esac
-rc_exit
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "hd.h"
-#include "hd_int.h"
-
-static int get_probe_flags(int, char **, hd_data_t *);
-static void progress2(char *, char *);
-
-// ##### temporary solution, fix it later!
-str_list_t *read_file(char *file_name, unsigned start_line, unsigned lines);
-str_list_t *search_str_list(str_list_t *sl, char *str);
-str_list_t *add_str_list(str_list_t **sl, char *str);
-char *new_str(const char *);
-
-static unsigned deb = 0;
-static char *log_file = "";
-static char *list = NULL;
-static int listplus = 0;
-
-static int test = 0;
-static int is_short = 0;
-
-static char *showconfig = NULL;
-static char *saveconfig = NULL;
-static hd_hw_item_t hw_item[100] = { };
-static int hw_items = 0;
-
-int braille_install_info(hd_data_t *hd_data);
-int x11_install_info(hd_data_t *hd_data);
-int oem_install_info(hd_data_t *hd_data);
-void dump_packages(hd_data_t *hd_data);
-
-void do_hw(hd_data_t *hd_data, FILE *f, hd_hw_item_t hw_item);
-void do_hw_multi(hd_data_t *hd_data, FILE *f, hd_hw_item_t *hw_items);
-void do_short(hd_data_t *hd_data, hd_t *hd, FILE *f);
-void do_test(hd_data_t *hd_data);
-void help(void);
-void dump_db_raw(hd_data_t *hd_data);
-void dump_db(hd_data_t *hd_data);
-void do_chroot(hd_data_t *hd_data, char *dir);
-void ask_db(hd_data_t *hd_data, char *query);
-void get_mapping(hd_data_t *hd_data);
-
-
-struct {
- unsigned db_idx;
- unsigned separate:1;
- char *root;
-} opt;
-
-struct option options[] = {
- { "special", 1, NULL, 1 },
- { "help", 0, NULL, 'h' },
- { "debug", 1, NULL, 'd' },
- { "version", 0, NULL, 400 },
- { "log", 1, NULL, 'l' },
- { "packages", 0, NULL, 'p' },
- { "test", 0, NULL, 300 },
- { "format", 1, NULL, 301 },
- { "show-config", 1, NULL, 302 },
- { "save-config", 1, NULL, 303 },
- { "short", 0, NULL, 304 },
- { "fast", 0, NULL, 305 },
- { "dump-db", 1, NULL, 306 },
- { "dump-db-raw", 1, NULL, 307 },
- { "separate", 0, NULL, 308 },
- { "root", 1, NULL, 309 },
- { "db", 1, NULL, 310 },
- { "only", 1, NULL, 311 },
- { "listmd", 0, NULL, 312 },
- { "map", 0, NULL, 313 },
- { "kernel-version", 1, NULL, 314 },
- { "cdrom", 0, NULL, 1000 + hw_cdrom },
- { "floppy", 0, NULL, 1000 + hw_floppy },
- { "disk", 0, NULL, 1000 + hw_disk },
- { "network", 0, NULL, 1000 + hw_network },
- { "display", 0, NULL, 1000 + hw_display },
- { "gfxcard", 0, NULL, 1000 + hw_display },
- { "framebuffer", 0, NULL, 1000 + hw_framebuffer },
- { "monitor", 0, NULL, 1000 + hw_monitor },
- { "camera", 0, NULL, 1000 + hw_camera },
- { "mouse", 0, NULL, 1000 + hw_mouse },
- { "joystick", 0, NULL, 1000 + hw_joystick },
- { "keyboard", 0, NULL, 1000 + hw_keyboard },
- { "chipcard", 0, NULL, 1000 + hw_chipcard },
- { "sound", 0, NULL, 1000 + hw_sound },
- { "isdn", 0, NULL, 1000 + hw_isdn },
- { "modem", 0, NULL, 1000 + hw_modem },
- { "storage-ctrl", 0, NULL, 1000 + hw_storage_ctrl },
- { "storage_ctrl", 0, NULL, 1000 + hw_storage_ctrl },
- { "netcard", 0, NULL, 1000 + hw_network_ctrl },
- { "netcards", 0, NULL, 1000 + hw_network_ctrl }, // outdated, just kept for comaptibility
- { "network-ctrl", 0, NULL, 1000 + hw_network_ctrl },
- { "network_ctrl", 0, NULL, 1000 + hw_network_ctrl },
- { "printer", 0, NULL, 1000 + hw_printer },
- { "tv", 0, NULL, 1000 + hw_tv },
- { "dvb", 0, NULL, 1000 + hw_dvb },
- { "scanner", 0, NULL, 1000 + hw_scanner },
- { "braille", 0, NULL, 1000 + hw_braille },
- { "sys", 0, NULL, 1000 + hw_sys },
- { "bios", 0, NULL, 1000 + hw_bios },
- { "cpu", 0, NULL, 1000 + hw_cpu },
- { "partition", 0, NULL, 1000 + hw_partition },
- { "usb-ctrl", 0, NULL, 1000 + hw_usb_ctrl },
- { "usb_ctrl", 0, NULL, 1000 + hw_usb_ctrl },
- { "usb", 0, NULL, 1000 + hw_usb },
- { "pci", 0, NULL, 1000 + hw_pci },
- { "isapnp", 0, NULL, 1000 + hw_isapnp },
- { "scsi", 0, NULL, 1000 + hw_scsi },
- { "ide", 0, NULL, 1000 + hw_ide },
- { "bridge", 0, NULL, 1000 + hw_bridge },
- { "hub", 0, NULL, 1000 + hw_hub },
- { "memory", 0, NULL, 1000 + hw_memory },
- { "manual", 0, NULL, 1000 + hw_manual },
- { "pcmcia", 0, NULL, 1000 + hw_pcmcia },
- { "pcmcia_ctrl", 0, NULL, 1000 + hw_pcmcia_ctrl },
- { "ieee1394", 0, NULL, 1000 + hw_ieee1394 },
- { "ieee1394_ctrl", 0, NULL, 1000 + hw_ieee1394_ctrl },
- { "firewire", 0, NULL, 1000 + hw_ieee1394 },
- { "firewire_ctrl", 0, NULL, 1000 + hw_ieee1394_ctrl },
- { "hotplug", 0, NULL, 1000 + hw_hotplug },
- { "hotplug_ctrl", 0, NULL, 1000 + hw_hotplug_ctrl },
- { "zip", 0, NULL, 1000 + hw_zip },
- { "pppoe", 0, NULL, 1000 + hw_pppoe },
- { "dsl", 0, NULL, 1000 + hw_dsl },
- { "wlan", 0, NULL, 1000 + hw_wlan },
- { "redasd", 0, NULL, 1000 + hw_redasd },
- { "block", 0, NULL, 1000 + hw_block },
- { "tape", 0, NULL, 1000 + hw_tape },
- { "vbe", 0, NULL, 1000 + hw_vbe },
- { "bluetooth", 0, NULL, 1000 + hw_bluetooth },
- { "all", 0, NULL, 2000 },
- { "reallyall", 0, NULL, 2001 },
- { "smp", 0, NULL, 2002 },
- { "arch", 0, NULL, 2003 },
- { "uml", 0, NULL, 2004 },
- { }
-};
-
-
-/*
- * Just scan the hardware and dump all info.
- */
-int main(int argc, char **argv)
-{
- hd_data_t *hd_data;
- hd_t *hd;
- FILE *f = NULL;
- int i;
- unsigned first_probe = 1;
-
- hd_data = calloc(1, sizeof *hd_data);
- hd_data->progress = isatty(1) ? progress2 : NULL;
- hd_data->debug=~(HD_DEB_DRIVER_INFO | HD_DEB_HDDB);
-
- for(i = 0; i < argc; i++) {
- if(strstr(argv[i], "--") == argv[i]) break;
- }
-
- if(i != argc) {
- /* new style interface */
-
- opterr = 0;
-
- while((i = getopt_long(argc, argv, "hd:l:p", options, NULL)) != -1) {
- switch(i) {
- case 1:
- if(!strcmp(optarg, "braille")) {
- braille_install_info(hd_data);
- }
- else if(!strcmp(optarg, "x11")) {
- x11_install_info(hd_data);
- }
- else if(!strcmp(optarg, "oem")) {
- oem_install_info(hd_data);
- }
- else {
- help();
- return 1;
- }
- break;
-
- case 'd':
- hd_data->debug = strtol(optarg, NULL, 0);
- break;
-
- case 'l':
- log_file = optarg;
- break;
-
- case 'p':
- dump_packages(hd_data);
- break;
-
- case 300:
- do_test(hd_data);
- break;
-
- case 301:
- hd_data->flags.dformat = strtol(optarg, NULL, 0);
- break;
-
- case 302:
- showconfig = optarg;
- break;
-
- case 303:
- saveconfig = optarg;
- break;
-
- case 304:
- is_short = 1;
- break;
-
- case 305:
- hd_data->flags.fast = 1;
- break;
-
- case 306:
- opt.db_idx = strtoul(optarg, NULL, 0);
- dump_db(hd_data);
- break;
-
- case 307:
- opt.db_idx = strtoul(optarg, NULL, 0);
- dump_db_raw(hd_data);
- break;
-
- case 308:
- /* basically for debugging */
- opt.separate = 1;
- break;
-
- case 309:
- opt.root = optarg;
- break;
-
- case 310:
- ask_db(hd_data, optarg);
- break;
-
- case 311:
- if(*optarg) add_str_list(&hd_data->only, optarg);
- break;
-
- case 312:
- hd_data->flags.list_md = 1;
- break;
-
- case 313:
- get_mapping(hd_data);
- break;
-
- case 314:
- if(*optarg) setenv("LIBHD_KERNELVERSION", optarg, 1);
- break;
-
- case 400:
- printf("%s\n", hd_version());
- break;
-
- case 1000 ... 1100:
- if(hw_items < (int) (sizeof hw_item / sizeof *hw_item) - 1)
- hw_item[hw_items++] = i - 1000;
- break;
-
- case 2000:
- case 2001:
- case 2002:
- case 2003:
- case 2004:
- if(hw_items < (int) (sizeof hw_item / sizeof *hw_item) - 1)
- hw_item[hw_items++] = i;
- break;
-
- default:
- help();
- return 0;
- }
- }
-
- if(!hw_items && is_short) hw_item[hw_items++] = 2000; /* all */
-
- if(hw_items >= 0 || showconfig || saveconfig) {
- if(*log_file) {
- if(!strcmp(log_file, "-")) {
- f = fdopen(1, "w");
- }
- else {
- f = fopen(log_file, "w+");
- }
- }
-
- if(opt.root) do_chroot(hd_data, opt.root);
-
- if(opt.separate || hw_items <= 1) {
- for(i = 0; i < hw_items; i++) {
- if(i) fputc('\n', f ? f : stdout);
- do_hw(hd_data, f, hw_item[i]);
- }
- }
- else {
- hw_item[hw_items] = 0;
- do_hw_multi(hd_data, f, hw_item);
- }
-
-#ifndef LIBHD_TINY
- if(showconfig) {
- hd = hd_read_config(hd_data, showconfig);
- if(hd) {
- hd_dump_entry(hd_data, hd, f ? f : stdout);
- hd = hd_free_hd_list(hd);
- }
- else {
- fprintf(f ? f : stdout, "No config data: %s\n", showconfig);
- }
- }
-
- if(saveconfig) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(!strcmp(hd->unique_id, saveconfig)) {
- i = hd_write_config(hd_data, hd);
- fprintf(f ? f : stdout, "%s: %s\n",
- saveconfig,
- i ? "Error writing config data" : "config saved"
- );
- break;
- }
- }
- if(!hd) {
- fprintf(f ? f : stdout, "No such hardware: %s\n", saveconfig);
- }
- }
-#endif
-
- if(f) fclose(f);
- }
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return 0;
- }
-
- /* old style interface */
-
- argc--; argv++;
-
- if(argc == 1 && !strcmp(*argv, "-h")) {
- help();
- return 0;
- }
-
- do {
- if(first_probe) /* only for the 1st probing */
- hd_set_probe_feature(hd_data, pr_default);
- else {
- hd_clear_probe_feature(hd_data, pr_all);
- }
-
- if((i = get_probe_flags(argc, argv, hd_data)) < 0) return 1;
- deb = hd_data->debug;
- argc -= i; argv += i;
-
- if(opt.root && first_probe) do_chroot(hd_data, opt.root);
-
- hd_scan(hd_data);
- if(hd_data->progress) printf("\r%64s\r", "");
-
- first_probe = 0;
- } while(argc);
-
- if(*log_file) {
- if(!strcmp(log_file, "-")) {
- f = fdopen(1, "w");
- }
- else {
- f = fopen(log_file, "w+");
- }
- }
-
- if((hd_data->debug & HD_DEB_SHOW_LOG) && hd_data->log) {
- if(*log_file) {
- fprintf(f ? f : stdout,
- "============ start hardware log ============\n"
- );
- }
- fprintf(f ? f : stdout,
- "============ start debug info ============\n%s=========== end debug info ============\n",
- hd_data->log
- );
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, f ? f : stdout);
- }
-
- if(*log_file) {
- fprintf(f ? f : stdout,
- "============ end hardware log ============\n"
- );
- }
-
- i = -1;
- if(list) {
- if(!strcmp(list, "cdrom")) i = hw_cdrom;
- if(!strcmp(list, "disk")) i = hw_disk;
- if(!strcmp(list, "floppy")) i = hw_floppy;
- if(!strcmp(list, "network")) i = hw_network;
- if(!strcmp(list, "display")) i = hw_display;
- if(!strcmp(list, "monitor")) i = hw_monitor;
- if(!strcmp(list, "mouse")) i = hw_mouse;
- if(!strcmp(list, "keyboard")) i = hw_keyboard;
- if(!strcmp(list, "sound")) i = hw_sound;
- if(!strcmp(list, "isdn")) i = hw_isdn;
- if(!strcmp(list, "dsl")) i = hw_dsl;
- if(!strcmp(list, "modem")) i = hw_modem;
- if(!strcmp(list, "storage_ctrl")) i = hw_storage_ctrl;
- if(!strcmp(list, "network_ctrl")) i = hw_network_ctrl;
- if(!strcmp(list, "netcards")) i = hw_network_ctrl;
- if(!strcmp(list, "printer")) i = hw_printer;
- if(!strcmp(list, "tv")) i = hw_tv;
- if(!strcmp(list, "scanner")) i = hw_scanner;
- if(!strcmp(list, "braille")) i = hw_braille;
- if(!strcmp(list, "sys")) i = hw_sys;
- if(!strcmp(list, "cpu")) i = hw_cpu;
-
- if(i >= 0) {
- hd = hd_list(hd_data, i, listplus, NULL);
- printf("\n");
- printf("-- %s list --\n", list);
- for(; hd; hd = hd->next) hd_dump_entry(hd_data, hd, stdout);
- printf("-- %s list end --\n", list);
- hd = hd_free_hd_list(hd);
- }
- }
-
- if(f) fclose(f);
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return 0;
-}
-
-
-void do_hw(hd_data_t *hd_data, FILE *f, hd_hw_item_t hw_item)
-{
- hd_t *hd, *hd0;
- int smp = -1, uml = 0, i;
- char *s, *t;
- enum boot_arch b_arch;
- enum cpu_arch c_arch;
-
- hd0 = NULL;
-
- switch(hw_item) {
- case 2002:
- smp = hd_smp_support(hd_data);
- break;
-
- case 2000:
- case 2001:
- case 2003:
- i = -1;
- switch((int) hw_item) {
- case 2000: i = pr_default; break;
- case 2001: i = pr_all; break;
- case 2003: i = pr_cpu; break;
- }
- if(i != -1) {
- hd_clear_probe_feature(hd_data, pr_all);
- hd_set_probe_feature(hd_data, i);
- hd_scan(hd_data);
- hd0 = hd_data->hd;
- }
- break;
-
- case 2004:
- uml = hd_is_uml(hd_data);
- break;
-
- default:
- hd0 = hd_list(hd_data, hw_item, 1, NULL);
- }
-
- if(hd_data->progress) {
- printf("\r%64s\r", "");
- fflush(stdout);
- }
-
- if(f) {
- if((hd_data->debug & HD_DEB_SHOW_LOG) && hd_data->log) {
- fprintf(f,
- "============ start hardware log ============\n"
- );
- fprintf(f,
- "============ start debug info ============\n%s=========== end debug info ============\n",
- hd_data->log
- );
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, f);
- }
-
- fprintf(f,
- "============ end hardware log ============\n"
- );
- }
-
- if(hw_item == 2002) {
- fprintf(f ? f : stdout,
- "SMP support: %s",
- smp < 0 ? "unknown" : smp > 0 ? "yes" : "no"
- );
- if(smp > 0) fprintf(f ? f : stdout, " (%u cpus)", smp);
- fprintf(f ? f : stdout, "\n");
- }
- else if(hw_item == 2003) {
- c_arch = hd_cpu_arch(hd_data);
- b_arch = hd_boot_arch(hd_data);
-
- s = t = "Unknown";
- switch(c_arch) {
- case arch_unknown:
- break;
- case arch_intel:
- s = "X86 (32)";
- break;
- case arch_alpha:
- s = "Alpha";
- break;
- case arch_sparc:
- s = "Sparc (32)";
- break;
- case arch_sparc64:
- s = "UltraSparc (64)";
- break;
- case arch_ppc:
- s = "PowerPC";
- break;
- case arch_ppc64:
- s = "PowerPC (64)";
- break;
- case arch_68k:
- s = "68k";
- break;
- case arch_ia64:
- s = "IA-64";
- break;
- case arch_s390:
- s = "S390";
- break;
- case arch_s390x:
- s = "S390x";
- break;
- case arch_arm:
- s = "ARM";
- break;
- case arch_mips:
- s = "MIPS";
- break;
- case arch_x86_64:
- s = "X86_64";
- break;
- }
-
- switch(b_arch) {
- case boot_unknown:
- break;
- case boot_lilo:
- t = "lilo";
- break;
- case boot_milo:
- t = "milo";
- break;
- case boot_aboot:
- t = "aboot";
- break;
- case boot_silo:
- t = "silo";
- break;
- case boot_ppc:
- t = "ppc";
- break;
- case boot_elilo:
- t = "elilo";
- break;
- case boot_s390:
- t = "s390";
- break;
- case boot_mips:
- t = "mips";
- break;
- case boot_grub:
- t = "grub";
- break;
- }
-
- fprintf(f ? f : stdout, "Arch: %s/%s\n", s, t);
- }
- else if(hw_item == 2004) {
- fprintf(f ? f : stdout, "UML: %s\n", uml ? "yes" : "no");
- }
- else {
- if(is_short) {
- /* always to stdout */
- do_short(hd_data, hd0, stdout);
- if(f) do_short(hd_data, hd0, f);
- }
- else {
- for(hd = hd0; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, f ? f : stdout);
- }
- }
- }
-
- if(hw_item == hw_display && hd0) {
- fprintf(f ? f : stdout, "\nPrimary display adapter: #%u\n", hd_display_adapter(hd_data));
- }
-
- if(hd0 != hd_data->hd) hd_free_hd_list(hd0);
-}
-
-
-void do_hw_multi(hd_data_t *hd_data, FILE *f, hd_hw_item_t *hw_items)
-{
- hd_t *hd, *hd0;
-
- hd0 = hd_list2(hd_data, hw_items, 1);
-
- if(hd_data->progress) {
- printf("\r%64s\r", "");
- fflush(stdout);
- }
-
- if(f) {
- if((hd_data->debug & HD_DEB_SHOW_LOG) && hd_data->log) {
- fprintf(f,
- "============ start hardware log ============\n"
- );
- fprintf(f,
- "============ start debug info ============\n%s=========== end debug info ============\n",
- hd_data->log
- );
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, f);
- }
-
- fprintf(f,
- "============ end hardware log ============\n"
- );
- }
-
- if(is_short) {
- /* always to stdout */
- do_short(hd_data, hd0, stdout);
- if(f) do_short(hd_data, hd0, f);
- }
- else {
- for(hd = hd0; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, f ? f : stdout);
- }
- }
-
- hd_free_hd_list(hd0);
-}
-
-
-void do_short(hd_data_t *hd_data, hd_t *hd, FILE *f)
-{
-#ifndef LIBHD_TINY
- hd_hw_item_t item;
- hd_t *hd1;
- int i;
- char *s;
-
- for(item = 1; item < hw_all; item++) {
- i = 0;
- s = hd_hw_item_name(item);
- if(!s) continue;
-
- if(item == hw_sys) continue;
-
- for(hd1 = hd; hd1; hd1 = hd1->next) {
- if(hd1->hw_class == item) {
- if(!i++) fprintf(f, "%s:\n", s);
- fprintf(f, " %-20s %s\n",
- hd1->unix_dev_name ? hd1->unix_dev_name : "",
- hd1->model ? hd1->model : "???"
- );
- }
- }
- }
-#endif
-}
-
-
-#if 0
-typedef struct {
- char *vendor, *model, *driver;
-} scanner_t;
-
-static scanner_t scanner_data[] = {
- { "Abaton", "SCAN 300/GS", "abaton" },
- { "Abaton", "SCAN 300/S", "abaton" },
- { "Acer", "300f", "SnapScan" },
- { "Acer", "310s", "SnapScan" },
- { "Acer", "610plus", "SnapScan" },
- { "Acer", "610s", "SnapScan" },
- { "Acer", "Prisa 1240", "SnapScan" },
- { "Acer", "Prisa 3300", "SnapScan" },
- { "Acer", "Prisa 4300", "SnapScan" },
- { "Acer", "Prisa 5300", "SnapScan" },
- { "Acer", "Prisa 620s", "SnapScan" },
- { "Acer", "Prisa 620u", "SnapScan" },
- { "Acer", "Prisa 620ut", "SnapScan" },
- { "Acer", "Prisa 640bu", "SnapScan" },
- { "Acer", "Prisa 640u", "SnapScan" },
- { "Agfa", "Arcus II", "microtek" },
- { "Agfa", "DuoScan", "microtek" },
- { "Agfa", "FOCUS COLOR", "agfafocus" },
- { "Agfa", "FOCUS GS SCANNER", "agfafocus" },
- { "Agfa", "FOCUS II", "agfafocus" },
- { "Agfa", "FOCUS LINEART SCANNER", "agfafocus" },
- { "Agfa", "SnapScan 1212u", "SnapScan" },
- { "Agfa", "SnapScan 1236s", "SnapScan" },
- { "Agfa", "SnapScan 1236u", "SnapScan" },
- { "Agfa", "SnapScan 300", "SnapScan" },
- { "Agfa", "SnapScan 310", "SnapScan" },
- { "Agfa", "SnapScan 600", "SnapScan" },
- { "Agfa", "SnapScan e20", "SnapScan" },
- { "Agfa", "SnapScan e25", "SnapScan" },
- { "Agfa", "SnapScan e40", "SnapScan" },
- { "Agfa", "SnapScan e50", "SnapScan" },
- { "Agfa", "SnapScan e60", "SnapScan" },
- { "Agfa", "StudioScan", "microtek" },
- { "Agfa", "StudioScan II", "microtek" },
- { "Agfa", "StudioScan IIsi", "microtek" },
- { "Apple", "APPLE SCANNER", "apple" },
- { "Apple", "COLORONESCANNER", "apple" },
- { "Apple", "ONESCANNER", "apple" },
- { "Artec", "A6000C", "artec" },
- { "Artec", "A6000C PLUS", "artec" },
- { "Artec", "AM12S", "artec" },
- { "Artec", "AT12", "artec" },
- { "Artec", "AT3", "artec" },
- { "Artec", "AT6", "artec" },
- { "Artec", "ColorOneScanner", "artec" },
- { "Avision", "AV 620 CS", "avision" },
- { "Avision", "AV 6240", "avision" },
- { "Avision", "AV 630 CS", "avision" },
- { "B&H SCSI", "COPISCAN II 2135", "bh" },
- { "B&H SCSI", "COPISCAN II 2137", "bh" },
- { "B&H SCSI", "COPISCAN II 2137A", "bh" },
- { "B&H SCSI", "COPISCAN II 2138A", "bh" },
- { "B&H SCSI", "COPISCAN II 3238", "bh" },
- { "B&H SCSI", "COPISCAN II 3338", "bh" },
- { "B&H SCSI", "COPISCAN II 6338", "bh" },
- { "BlackWidow", "BW4800SP", "artec" },
- { "Canon", "CANOSCAN 2700F", "canon" },
- { "Canon", "CANOSCAN 300", "canon" },
- { "Canon", "CANOSCAN 600", "canon" },
- { "Devcom", "9636PRO", "pie" },
- { "Devcom", "9636S", "pie" },
- { "EDGE", "KTX-9600US", "umax" },
- { "Epson", "ES-8500", "epson" },
- { "Epson", "EXPRESSION 1600", "epson" },
- { "Epson", "EXPRESSION 1680", "epson" },
- { "Epson", "EXPRESSION 636", "epson" },
- { "Epson", "EXPRESSION 800", "epson" },
- { "Epson", "FILMSCAN 200", "epson" },
- { "Epson", "GT-5500", "epson" },
- { "Epson", "GT-7000", "epson" },
- { "Epson", "GT-8000", "epson" },
- { "Epson", "PERFECTION 1200PHOTO", "epson" },
- { "Epson", "PERFECTION 1200S", "epson" },
- { "Epson", "PERFECTION 1200U", "epson" },
- { "Epson", "PERFECTION 1240", "epson" },
- { "Epson", "PERFECTION 1640", "epson" },
- { "Epson", "PERFECTION 1650", "epson" },
- { "Epson", "PERFECTION 610", "epson" },
- { "Epson", "PERFECTION 636S", "epson" },
- { "Epson", "PERFECTION 636U", "epson" },
- { "Epson", "PERFECTION 640", "epson" },
- { "Epson", "PERFECTION1200", "epson" },
- { "Epson", "Perfection 600", "umax" },
- { "Escom", "Image Scanner 256", "umax" },
- { "Escort", "Galleria 600", "umax" },
- { "Fujitsu", "M3091DCD", "m3091" },
- { "Fujitsu", "M3096G", "m3096g" },
- { "Fujitsu", "SP15C", "sp15c" },
- { "Genius", "ColorPage-HR5 Pro", "umax" },
- { "Guillemot", "Maxi Scan A4 Deluxe", "SnapScan" },
- { "HP", "HP OFFICEJET K SERIES", "hp" },
- { "HP", "HP OFFICEJET V SERIES", "hp" },
- { "HP", "HP PHOTOSMART PHOTOSCANNER", "hp" },
- { "HP", "HP PSC 700 SERIES", "hp" },
- { "HP", "HP PSC 900 SERIES", "hp" },
- { "HP", "HP SCANJET 3C", "hp" },
- { "HP", "HP SCANJET 3P", "hp" },
- { "HP", "HP SCANJET 4100C", "hp" },
- { "HP", "HP SCANJET 4C", "hp" },
- { "HP", "HP SCANJET 4P", "hp" },
- { "HP", "HP SCANJET 5200C", "hp" },
- { "HP", "HP SCANJET 6100C", "hp" },
- { "HP", "HP SCANJET 6200C", "hp" },
- { "HP", "HP SCANJET 6250C", "hp" },
- { "HP", "HP SCANJET 6300C", "hp" },
- { "HP", "HP SCANJET 6350C", "hp" },
- { "HP", "HP SCANJET 6390C", "hp" },
- { "HP", "HP SCANJET IIC", "hp" },
- { "HP", "HP SCANJET IICX", "hp" },
- { "HP", "HP SCANJET IIP", "hp" },
- { "HP", "HP ScanJet 5p", "hp" },
- { "HP", "HP4200", "hp4200" },
- { "Highscreen", "Scanboostar Premium", "umax" },
- { "Linotype Hell", "Jade", "umax" },
- { "Linotype Hell", "Jade2", "umax" },
- { "Linotype Hell", "Linoscan 1400", "umax" },
- { "Linotype Hell", "Opal", "umax" },
- { "Linotype Hell", "Opal Ultra", "umax" },
- { "Linotype Hell", "Saphir", "umax" },
- { "Linotype Hell", "Saphir HiRes", "umax" },
- { "Linotype Hell", "Saphir Ultra", "umax" },
- { "Linotype Hell", "Saphir Ultra II", "umax" },
- { "Linotype Hell", "Saphir2", "umax" },
- { "Microtek", "Phantom 636", "microtek2" },
- { "Microtek", "ScanMaker 330", "microtek2" },
- { "Microtek", "ScanMaker 3600", "sm3600" },
- { "Microtek", "ScanMaker 630", "microtek2" },
- { "Microtek", "ScanMaker 636", "microtek2" },
- { "Microtek", "ScanMaker 9600XL", "microtek2" },
- { "Microtek", "ScanMaker E3plus", "microtek2" },
- { "Microtek", "ScanMaker V300", "microtek2" },
- { "Microtek", "ScanMaker V310", "microtek2" },
- { "Microtek", "ScanMaker V600", "microtek2" },
- { "Microtek", "ScanMaker V6USL", "microtek2" },
- { "Microtek", "ScanMaker X6", "microtek2" },
- { "Microtek", "ScanMaker X6EL", "microtek2" },
- { "Microtek", "ScanMaker X6USB", "microtek2" },
- { "Microtek", "Scanmaker 35", "microtek" },
- { "Microtek", "Scanmaker 35t+", "microtek" },
- { "Microtek", "Scanmaker 45t", "microtek" },
- { "Microtek", "Scanmaker 600G", "microtek" },
- { "Microtek", "Scanmaker 600G S", "microtek" },
- { "Microtek", "Scanmaker 600GS", "microtek" },
- { "Microtek", "Scanmaker 600S", "microtek" },
- { "Microtek", "Scanmaker 600Z", "microtek" },
- { "Microtek", "Scanmaker 600Z S", "microtek" },
- { "Microtek", "Scanmaker 600ZS", "microtek" },
- { "Microtek", "Scanmaker E2", "microtek" },
- { "Microtek", "Scanmaker E3", "microtek" },
- { "Microtek", "Scanmaker E6", "microtek" },
- { "Microtek", "Scanmaker II", "microtek" },
- { "Microtek", "Scanmaker IIG", "microtek" },
- { "Microtek", "Scanmaker IIHR", "microtek" },
- { "Microtek", "Scanmaker III", "microtek" },
- { "Microtek", "Scanmaker IISP", "microtek" },
- { "Microtek", "SlimScan C6", "microtek2" },
- { "Mustek", "1200 CU", "mustek_usb" },
- { "Mustek", "1200 CU Plus", "mustek_usb" },
- { "Mustek", "1200 UB", "mustek_usb" },
- { "Mustek", "600 CU", "mustek_usb" },
- { "Mustek", "Paragon 1200 A3 Pro", "mustek" },
- { "Mustek", "Paragon 1200 III SP", "mustek" },
- { "Mustek", "Paragon 1200 LS", "mustek" },
- { "Mustek", "Paragon 1200 SP Pro", "mustek" },
- { "Mustek", "Paragon 600 II CD", "mustek" },
- { "Mustek", "Paragon 800 II SP", "mustek" },
- { "Mustek", "Paragon MFC-600S", "mustek" },
- { "Mustek", "Paragon MFC-800S", "mustek" },
- { "Mustek", "Paragon MFS-12000CX", "mustek" },
- { "Mustek", "Paragon MFS-12000SP", "mustek" },
- { "Mustek", "Paragon MFS-1200SP", "mustek" },
- { "Mustek", "Paragon MFS-6000CX", "mustek" },
- { "Mustek", "Paragon MFS-6000SP", "mustek" },
- { "Mustek", "Paragon MFS-8000SP", "mustek" },
- { "Mustek", "ScanExpress 12000SP", "mustek" },
- { "Mustek", "ScanExpress 12000SP Plus", "mustek" },
- { "Mustek", "ScanExpress 6000SP", "mustek" },
- { "Mustek", "ScanExpress A3 SP", "mustek" },
- { "Mustek", "ScanMagic 600 II SP", "mustek" },
- { "Mustek", "ScanMagic 9636S", "mustek" },
- { "Mustek", "ScanMagic 9636S Plus", "mustek" },
- { "NEC", "PC-IN500/4C", "nec" },
- { "Nikon", "AX-210", "umax" },
- { "Nikon", "LS-1000", "coolscan" },
- { "Nikon", "LS-20", "coolscan" },
- { "Nikon", "LS-2000", "coolscan" },
- { "Nikon", "LS-30", "coolscan" },
- { "Pie", "9630S", "pie" },
- { "Pie", "ScanAce 1230S", "pie" },
- { "Pie", "ScanAce 1236S", "pie" },
- { "Pie", "ScanAce 630S", "pie" },
- { "Pie", "ScanAce 636S", "plustek" },
- { "Pie", "ScanAce II", "pie" },
- { "Pie", "ScanAce II Plus", "pie" },
- { "Pie", "ScanAce III", "pie" },
- { "Pie", "ScanAce III Plus", "pie" },
- { "Pie", "ScanAce Plus", "pie" },
- { "Pie", "ScanAce ScanMedia", "pie" },
- { "Pie", "ScanAce ScanMedia II", "pie" },
- { "Pie", "ScanAce V", "pie" },
- { "Plustek", "OpticPro 19200S", "artec" },
- { "Polaroid", "DMC", "dmc" },
- { "Ricoh", "Ricoh IS50", "ricoh" },
- { "Ricoh", "Ricoh IS60", "ricoh" },
- { "Scanport", "SQ4836", "microtek2" },
- { "Sharp", "9036 Flatbed scanner", "sharp" },
- { "Sharp", "JX-250", "sharp" },
- { "Sharp", "JX-320", "sharp" },
- { "Sharp", "JX-330", "sharp" },
- { "Sharp", "JX-350", "sharp" },
- { "Sharp", "JX-610", "sharp" },
- { "Siemens", "9036 Flatbed scanner", "s9036" },
- { "Siemens", "FOCUS COLOR PLUS", "agfafocus" },
- { "Siemens", "ST400", "st400" },
- { "Siemens", "ST800", "st400" },
- { "Tamarack", "Artiscan 12000C", "tamarack" },
- { "Tamarack", "Artiscan 6000C", "tamarack" },
- { "Tamarack", "Artiscan 8000C", "tamarack" },
- { "Trust", "Compact Scan USB 19200", "mustek_usb" },
- { "Trust", "Imagery 1200 SP", "mustek" },
- { "Trust", "Imagery 4800 SP", "mustek" },
- { "Trust", "SCSI Connect 19200", "mustek" },
- { "Trust", "SCSI excellence series 19200", "mustek" },
- { "UMAX", "Astra 1200S", "umax" },
- { "UMAX", "Astra 1220S", "umax" },
- { "UMAX", "Astra 2100S", "umax" },
- { "UMAX", "Astra 2200", "umax" },
- { "UMAX", "Astra 2200 S", "umax" },
- { "UMAX", "Astra 2200 U", "umax" },
- { "UMAX", "Astra 2400S", "umax" },
- { "UMAX", "Astra 600S", "umax" },
- { "UMAX", "Astra 610S", "umax" },
- { "UMAX", "Gemini D-16", "umax" },
- { "UMAX", "Mirage D-16L", "umax" },
- { "UMAX", "Mirage II", "umax" },
- { "UMAX", "Mirage IIse", "umax" },
- { "UMAX", "PL-II", "umax" },
- { "UMAX", "PSD", "umax" },
- { "UMAX", "PowerLook", "umax" },
- { "UMAX", "PowerLook 2000", "umax" },
- { "UMAX", "PowerLook 3000", "umax" },
- { "UMAX", "PowerLook III", "umax" },
- { "UMAX", "Supervista S-12", "umax" },
- { "UMAX", "UC 1200S", "umax" },
- { "UMAX", "UC 1200SE", "umax" },
- { "UMAX", "UC 1260", "umax" },
- { "UMAX", "UC 630", "umax" },
- { "UMAX", "UC 840", "umax" },
- { "UMAX", "UG 630", "umax" },
- { "UMAX", "UG 80", "umax" },
- { "UMAX", "UMAX S-12", "umax" },
- { "UMAX", "UMAX S-12G", "umax" },
- { "UMAX", "UMAX S-6E", "umax" },
- { "UMAX", "UMAX S-6EG", "umax" },
- { "UMAX", "UMAX VT600", "umax" },
- { "UMAX", "Vista S6", "umax" },
- { "UMAX", "Vista S6E", "umax" },
- { "UMAX", "Vista-S8", "umax" },
- { "UMAX", "Vista-T630", "umax" },
- { "Ultima", "A6000C", "artec" },
- { "Ultima", "A6000C PLUS", "artec" },
- { "Ultima", "AM12S", "artec" },
- { "Ultima", "AT12", "artec" },
- { "Ultima", "AT3", "artec" },
- { "Ultima", "AT6", "artec" },
- { "Ultima", "ColorOneScanner", "artec" },
- { "Vobis", "HighScan", "microtek2" },
- { "Vobis", "Scanboostar Premium", "umax" },
- { "Vuego", "Close SnapScan 310 compatible.", "SnapScan" }
-};
-
-static char *scanner_info(hd_t *hd)
-{
- int i;
-
- if(!hd->vendor.name || !hd->device.name) return NULL;
-
- for(i = 0; (unsigned) i < sizeof scanner_data / sizeof *scanner_data; i++) {
- if(
- !strcasecmp(scanner_data[i].vendor, hd->vendor.name) &&
- !strcasecmp(scanner_data[i].model, hd->device.name)
- ) {
- return scanner_data[i].driver;
- }
- }
-
- return NULL;
-}
-
-#endif
-
-void do_test(hd_data_t *hd_data)
-{
-#if 0
- hd_t *hd, *hd0;
- hd_res_t *res;
- driver_info_t *di;
- FILE *f;
- int i, wheels, buttons;
- unsigned u;
- uint64_t ul;
- char *s, *s1;
- hd_hw_item_t item, items[] = {
- hw_display, hw_monitor, hw_tv, hw_sound, hw_mouse, hw_disk, hw_cdrom,
- hw_floppy, hw_modem, hw_isdn, hw_scanner, hw_camera
- };
-
- hd_set_probe_feature(hd_data, pr_default);
- hd_scan(hd_data);
-
- f = fopen("/tmp/hw_overview.log", "w");
-
- for(i = 0; (unsigned) i < sizeof items / sizeof *items; i++) {
- item = items[i];
- hd0 = hd_list(hd_data, item, 0, NULL);
-
- if(!hd0) continue;
-
- switch(item) {
- case hw_disk:
- fprintf(f, "Disk\n");
- for(hd = hd0; hd; hd = hd->next) {
- u = 0;
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_size && res->size.unit == size_unit_sectors) {
- ul = (uint64_t) res->size.val1 * (res->size.val2 ?: 0x200);
- u = ((ul >> 29) + 1) >> 1;
- }
- }
- s = hd->bus.name;
- fprintf(f, " %s", hd->model);
- if(u) {
- fprintf(f, " (");
- if(s) fprintf(f, "%s, ", s);
- fprintf(f, "%u GB)", u);
- }
- fprintf(f, "\n");
- }
- fprintf(f, "\n");
- break;
-
- case hw_cdrom:
- fprintf(f, "CD-ROM\n");
- for(hd = hd0; hd; hd = hd->next) {
- s = hd->bus.name;
- fprintf(f, " %s (", hd->model);
- if(s) fprintf(f, "%s, ", s);
- fprintf(f, "%s)", hd->prog_if.name ?: "CD-ROM");
- fprintf(f, "\n");
- }
- fprintf(f, "\n");
- break;
-
- case hw_monitor:
- fprintf(f, "Monitor\n");
- for(hd = hd0; hd; hd = hd->next) {
- s = hd->model;
- if(!strcmp(hd->unique_id, "rdCR.EY_qmtb9YY0")) s = "not detected";
- fprintf(f, " %s\n", s);
- }
- fprintf(f, "\n");
- break;
-
- case hw_display:
- fprintf(f, "GFX Card\n");
- for(hd = hd0; hd; hd = hd->next) {
- u = 0;
- s1 = NULL;
- for(di = hd->driver_info; di; di = di->next) {
- if(di->any.type == di_x11) {
- if(!s1) s1 = di->x11.server;
- if(di->x11.x3d && !u) {
- s1 = di->x11.server;
- u = 1;
- }
- }
- }
- if(!s1) {
- s1 = "not supported";
- u = 0;
- }
- fprintf(f, " %s (%s", hd->model, s1);
- if(u) fprintf(f, ", 3D support");
- fprintf(f, ")");
- fprintf(f, "\n");
- }
- fprintf(f, "\n");
- break;
-
- case hw_mouse:
- fprintf(f, "Mouse\n");
- for(hd = hd0; hd; hd = hd->next) {
- buttons = wheels = -1; // make gcc happy
- s = NULL;
- for(di = hd->driver_info; di; di = di->next) {
- if(di->any.type == di_mouse) {
- buttons = di->mouse.buttons;
- wheels = di->mouse.wheels;
- s = di->mouse.xf86;
- break;
- }
- }
- if(!s) {
- s = "not supported";
- buttons = wheels = -1;
- }
- fprintf(f, " %s (%s", hd->model, s);
- if(buttons >= 0) fprintf(f, ", %d buttons", buttons);
- if(wheels >= 0) fprintf(f, ", %d wheels", wheels);
- fprintf(f, ")");
- fprintf(f, "\n");
- }
- fprintf(f, "\n");
- break;
-
- case hw_tv:
- fprintf(f, "TV Card\n");
- for(hd = hd0; hd; hd = hd->next) {
- s = NULL;
- for(di = hd->driver_info; di; di = di->next) {
- if(
- (di->any.type == di_any || di->any.type == di_module) &&
- di->any.hddb0 &&
- di->any.hddb0->str
- ) {
- s = di->any.hddb0->str;
- break;
- }
- }
- if(!s) {
- s = "not supported";
- }
- fprintf(f, " %s (%s)\n", hd->model, s);
- }
- fprintf(f, "\n");
- break;
-
- case hw_sound:
- fprintf(f, "Sound Card\n");
- for(hd = hd0; hd; hd = hd->next) {
- s = NULL;
- for(di = hd->driver_info; di; di = di->next) {
- if(
- (di->any.type == di_any || di->any.type == di_module) &&
- di->any.hddb0 &&
- di->any.hddb0->str
- ) {
- s = di->any.hddb0->str;
- break;
- }
- }
- if(!s) {
- s = "not supported";
- }
- fprintf(f, " %s (%s)\n", hd->model, s);
- }
- fprintf(f, "\n");
- break;
-
- case hw_camera:
- fprintf(f, "Digital Camera/WebCam\n");
- for(hd = hd0; hd; hd = hd->next) {
- fprintf(f, " %s\n", hd->model);
- }
- fprintf(f, "\n");
- break;
-
- case hw_floppy:
- fprintf(f, "Floppy/Zip Drive\n");
- for(hd = hd0; hd; hd = hd->next) {
- fprintf(f, " %s\n", hd->model);
- }
- fprintf(f, "\n");
- break;
-
- case hw_modem:
- fprintf(f, "Modem\n");
- for(hd = hd0; hd; hd = hd->next) {
- fprintf(f, " %s\n", hd->model);
- }
- fprintf(f, "\n");
- break;
-
- case hw_isdn:
- fprintf(f, "ISDN\n");
- for(hd = hd0; hd; hd = hd->next) {
- fprintf(f, " %s (%ssupported)\n", hd->model, hd->driver_info ? "" : "not ");
- }
- fprintf(f, "\n");
- break;
-
- case hw_scanner:
- fprintf(f, "Scanner\n");
- for(hd = hd0; hd; hd = hd->next) {
- s = scanner_info(hd);
- if(!s) s = "not supported";
- fprintf(f, " %s (%s)\n", hd->model, s);
- }
- fprintf(f, "\n");
- break;
-
- default:
- break;
- }
-
- hd_free_hd_list(hd0);
-
- }
-
- fclose(f);
-
- f = fopen("/tmp/hw_detail.log", "w");
-
- if(hd_data->log) {
- fprintf(f,
- "============ start detailed hardware log ============\n"
- );
- fprintf(f,
- "============ start debug info ============\n%s=========== end debug info ============\n",
- hd_data->log
- );
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, f);
- }
-
- fprintf(f,
- "============ end detailed hardware log ============\n"
- );
-
- fclose(f);
-
- fprintf(stderr, "\n");
-
-#endif
-
-#if 0
- hd_t *hd;
- hd_t *hd0 = NULL;
-
- for(hd = hd_list(hd_data, hw_cdrom, 1, hd0); hd; hd = hd->next) {
- fprintf(stderr, "cdrom: %s, %s\n", hd->unix_dev_name, hd->model);
- }
-
- for(hd = hd_list(hd_data, hw_cdrom, 1, hd0); hd; hd = hd->next) {
- fprintf(stderr, "cdrom: %s, %s\n", hd->unix_dev_name, hd->model);
- }
-#endif
-
-#if 0
- hd_t *hd;
-
- hd = hd_list(hd_data, hw_disk, 1, NULL);
- hd_free_hd_list(hd);
- hd_free_hd_data(hd_data);
-
- hd = hd_list(hd_data, hw_cdrom, 1, NULL);
- hd_free_hd_list(hd);
- hd_free_hd_data(hd_data);
-
- hd = hd_list(hd_data, hw_storage_ctrl, 1, NULL);
- hd_free_hd_list(hd);
- hd_free_hd_data(hd_data);
-
- hd = hd_list(hd_data, hw_display, 1, NULL);
- hd_free_hd_list(hd);
- hd_free_hd_data(hd_data);
-
-#if 0
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, stdout);
- }
-
- printf("%s\n", hd_data->log);
-#endif
-
-#endif
-
-#if 0
- hd_t *hd, *hd0;
-
- hd0 = hd_list(hd_data, hw_sound, 1, NULL);
- hd0 = hd_list(hd_data, hw_sound, 1, NULL);
-
- for(hd = hd0; hd; hd = hd->next) {
- hd_dump_entry(hd_data, hd, stdout);
- }
-
-#if 0
- hd_data->log = free_mem(hd_data->log);
- dump_hddb_data(hd_data, hd_data->hddb_dev, "hddb_dev, final");
- if(hd_data->log) printf("%s", hd_data->log);
-#endif
-
-#endif
-
-#if 0
- hd_t *hd;
- driver_info_t *di;
- str_list_t *sl;
-
- hd = hd_list(hd_data, hw_sys, 1, NULL);
-
- for(di = hd->driver_info; di; di = di->next) {
- if(di->any.type == di_module) {
- for(sl = di->module.names; sl; sl = sl->next) printf("%s\n", sl->str);
- }
- }
-
-#endif
-}
-
-
-void help()
-{
- fprintf(stderr,
- "Usage: hwinfo [options]\n"
- "Probe for hardware.\n"
- " --short just a short listing\n"
- " --log logfile write info to logfile\n"
- " --debug level set debuglevel\n"
- " --version show libhd version\n"
- " --dump-db n dump hardware data base, 0: external, 1: internal\n"
- " --hw_item probe for hw_item\n"
- " hw_item is one of:\n"
- " all, bios, block, bluetooth, braille, bridge, camera, cdrom, chipcard, cpu,\n"
- " disk, dsl, dvb, floppy, framebuffer, gfxcard, hub, ide, isapnp, isdn,\n"
- " joystick, keyboard, memory, modem, monitor, mouse, netcard, network,\n"
- " partition, pci, pcmcia, pcmcia-ctrl, pppoe, printer, scanner, scsi, smp,\n"
- " sound, storage-ctrl, sys, tape, tv, usb, usb-ctrl, vbe, wlan, zip\n\n"
- " Note: debug info is shown only in the log file. (If you specify a\n"
- " log file the debug level is implicitly set to a reasonable value.)\n"
- );
-}
-
-
-/*
- * Parse command line options.
- */
-int get_probe_flags(int argc, char **argv, hd_data_t *hd_data)
-{
- int i, j, k;
- char *s, *t;
- for(i = 0; i < argc; i++) {
- s = argv[i];
-
- if(!strcmp(s, ".")) {
- return i + 1;
- }
-
- t = "debug=";
- if(!strncmp(s, t, strlen(t))) {
- hd_data->debug = strtol(s + strlen(t), NULL, 0);
- continue;
- }
-
- t = "list=";
- if(!strncmp(s, t, strlen(t))) {
- list = s + strlen(t);
- continue;
- }
-
- t = "list+=";
- if(!strncmp(s, t, strlen(t))) {
- list = s + strlen(t);
- listplus = 1;
- continue;
- }
-
- t = "log=";
- if(!strncmp(s, t, strlen(t))) {
- log_file = s + strlen(t);
- continue;
- }
-
- t = "only=";
- if(!strncmp(s, t, strlen(t))) {
- add_str_list(&hd_data->only, s + strlen(t));
- continue;
- }
-
- t = "root=";
- if(!strncmp(s, t, strlen(t))) {
- opt.root = s + strlen(t);
- continue;
- }
-
- k = 1;
- if(*s == '+')
- s++;
- else if(*s == '-')
- k = 0, s++;
-
- if((j = hd_probe_feature_by_name(s))) {
- if(k)
- hd_set_probe_feature(hd_data, j);
- else
- hd_clear_probe_feature(hd_data, j);
- continue;
- }
-
- fprintf(stderr, "oops: don't know what to do with \"%s\"\n", s);
- return -1;
- }
-
- return argc;
-}
-
-/*
- * A simple progress function.
- */
-void progress2(char *pos, char *msg)
-{
- if(!test) printf("\r%64s\r", "");
- printf("> %s: %s", pos, msg);
- if(test) printf("\n");
- fflush(stdout);
-}
-
-
-#define INSTALL_INF "/etc/install.inf"
-
-int braille_install_info(hd_data_t *hd_data)
-{
- hd_t *hd;
- int ok = 0;
- char *braille = NULL;
- char *braille_dev = NULL;
- str_list_t *sl0, *sl;
- FILE *f;
-
- hd = hd_list(hd_data, hw_braille, 1, NULL);
-
- if(hd_data->progress) {
- printf("\r%64s\r", "");
- fflush(stdout);
- }
-
- for(; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_braille && /* is a braille display */
- hd->unix_dev_name && /* and has a device name */
- (braille = hd->device.name)
- ) {
- braille_dev = hd->unix_dev_name;
- ok = 1;
- break;
- }
- }
-
- if(!ok) return 1;
-
- printf("found a %s at %s\n", braille, braille_dev);
-
- sl0 = read_file(INSTALL_INF, 0, 0);
- f = fopen(INSTALL_INF, "w");
- if(!f) {
- perror(INSTALL_INF);
- return 1;
- }
-
- for(sl = sl0; sl; sl = sl->next) {
- if(
- strstr(sl->str, "Braille:") != sl->str &&
- strstr(sl->str, "Brailledevice:") != sl->str
- ) {
- fprintf(f, "%s", sl->str);
- }
- }
-
- fprintf(f, "Braille: %s\n", braille);
- fprintf(f, "Brailledevice: %s\n", braille_dev);
-
- fclose(f);
-
- return 0;
-}
-
-
-/*
- * get VGA parameter from /proc/cmdline
- */
-int get_fb_mode()
-{
-#ifndef __PPC__
- FILE *f;
- char buf[256], *s, *t;
- int i, fb_mode = 0;
-
- if((f = fopen("/proc/cmdline", "r"))) {
- if(fgets(buf, sizeof buf, f)) {
- t = buf;
- while((s = strsep(&t, " "))) {
- if(sscanf(s, "vga=%i", &i) == 1) fb_mode = i;
- if(strstr(s, "vga=normal") == s) fb_mode = 0;
- }
- }
- fclose(f);
- }
-
- return fb_mode > 0x10 ? fb_mode : 0;
-#else /* __PPC__ */
- /* this is the only valid test for active framebuffer ... */
- FILE *f = NULL;
- int fb_mode = 0;
- if((f = fopen("/dev/fb", "r"))) {
- fb_mode++;
- fclose(f);
- }
-
- return fb_mode;
-#endif
-}
-
-
-/*
- * read "x11i=" entry from /proc/cmdline
- */
-char *get_x11i()
-{
- FILE *f;
- char buf[256], *s, *t;
- static char x11i[64] = { };
-
- if(*x11i) return x11i;
-
- if((f = fopen("/proc/cmdline", "r"))) {
- if(fgets(buf, sizeof buf, f)) {
- t = buf;
- while((s = strsep(&t, " "))) {
- if(sscanf(s, "x11i=%60s", x11i) == 1) break;
- }
- }
- fclose(f);
- }
-
- return x11i;
-}
-
-
-/*
- * Assumes xf86_ver to be either "3" or "4" (or empty).
- */
-char *get_xserver(hd_data_t *hd_data, char **version, char **busid, driver_info_t **x11_driver)
-{
- static char display[16];
- static char xf86_ver[2];
- static char id[32];
- char c, *x11i = get_x11i();
- driver_info_t *di;
- hd_t *hd;
-
- *x11_driver = NULL;
-
- *display = *xf86_ver = *id = c = 0;
- *version = xf86_ver;
- *busid = id;
-
- if(x11i) {
- if(*x11i == '3' || *x11i == '4') {
- c = *x11i;
- }
- else {
- if(*x11i >= 'A' && *x11i <= 'Z') {
- c = '3';
- }
- if(*x11i >= 'a' && *x11i <= 'z') {
- c = '4';
- }
- if(c) {
- strncpy(display, x11i, sizeof display - 1);
- display[sizeof display - 1] = 0;
- }
- }
- }
-
- if(c) { xf86_ver[0] = c; xf86_ver[1] = 0; }
-
- hd = hd_get_device_by_idx(hd_data, hd_display_adapter(hd_data));
-
- if(hd && hd->bus.id == bus_pci)
- sprintf(id, "%d:%d:%d", hd->slot >> 8, hd->slot & 0xff, hd->func);
-
- if(!hd || *display) return display;
-
- for(di = hd->driver_info; di; di = di->next) {
- if(di->any.type == di_x11 && di->x11.server && di->x11.xf86_ver && !di->x11.x3d) {
- if(c == 0 || c == di->x11.xf86_ver[0]) {
- xf86_ver[0] = di->x11.xf86_ver[0];
- xf86_ver[1] = 0;
- strncpy(display, di->x11.server, sizeof display - 1);
- display[sizeof display - 1] = 0;
- *x11_driver = di;
- break;
- }
- }
- }
-
- if(*display) return display;
-
- if(c == 0) c = '4'; /* default to XF 4, if nothing else is known */
-
- xf86_ver[0] = c;
- xf86_ver[1] = 0;
- strcpy(display, c == '3' ? "FBDev" : "fbdev");
-
- return display;
-}
-
-int x11_install_info(hd_data_t *hd_data)
-{
- hd_t *hd;
- driver_info_t *di;
- char *x11i;
- int fb_mode, kbd_ok = 0;
- unsigned yast2_color = 0;
- char *xkbrules = NULL, *xkbmodel = NULL, *xkblayout = NULL;
- char *xserver, *version, *busid;
- driver_info_t *x11_driver;
- str_list_t *sl0, *sl;
- FILE *f;
-
- /* get color info */
- hd_set_probe_feature(hd_data, pr_cpu);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_scan(hd_data);
-
- x11i = get_x11i();
- fb_mode = get_fb_mode();
-
- hd_list(hd_data, hw_display, 1, NULL);
-
- for(hd = hd_list(hd_data, hw_keyboard, 1, NULL); hd; hd = hd->next) {
- kbd_ok = 1;
- di = hd->driver_info;
- if(di && di->any.type == di_kbd) {
- xkbrules = di->kbd.XkbRules;
- xkbmodel = di->kbd.XkbModel;
- xkblayout = di->kbd.XkbLayout;
- break;
- }
- /* don't free di */
- }
-
- xserver = get_xserver(hd_data, &version, &busid, &x11_driver);
-
- switch(hd_mac_color(hd_data)) {
- case 0x01:
- yast2_color = 0x5a4add;
- break;
- case 0x04:
- yast2_color = 0x32cd32;
- break;
- case 0x05:
- yast2_color = 0xff7f50;
- break;
- case 0x07:
- yast2_color = 0x000000;
- break;
- case 0xff:
- yast2_color = 0x7f7f7f;
- break;
- }
-
- if(hd_data->progress) {
- printf("\r%64s\r", "");
- fflush(stdout);
- }
-
- sl0 = read_file(INSTALL_INF, 0, 0);
- f = fopen(INSTALL_INF, "w");
- if(!f) {
- perror(INSTALL_INF);
- return 1;
- }
-
- for(sl = sl0; sl; sl = sl->next) {
- if(
- strstr(sl->str, "Framebuffer:") != sl->str &&
- strstr(sl->str, "XServer:") != sl->str &&
- strstr(sl->str, "XVersion:") != sl->str &&
- strstr(sl->str, "XBusID:") != sl->str &&
- strstr(sl->str, "X11i:") != sl->str &&
- strstr(sl->str, "Keyboard:") != sl->str &&
- strstr(sl->str, "XkbRules:") != sl->str &&
- strstr(sl->str, "XkbModel:") != sl->str &&
- strstr(sl->str, "XkbLayout:") != sl->str &&
- strstr(sl->str, "XF86Ext:") != sl->str &&
- strstr(sl->str, "XF86Raw:") != sl->str
- ) {
- fprintf(f, "%s", sl->str);
- }
- }
-
- fprintf(f, "Keyboard: %d\n", kbd_ok);
- if(fb_mode) fprintf(f, "Framebuffer: 0x%04x\n", fb_mode);
- if(x11i) fprintf(f, "X11i: %s\n", x11i);
- if(xserver && *xserver) {
- fprintf(f, "XServer: %s\n", xserver);
- if(*version) fprintf(f, "XVersion: %s\n", version);
- if(*busid) fprintf(f, "XBusID: %s\n", busid);
- }
- if(xkbrules && *xkbrules) fprintf(f, "XkbRules: %s\n", xkbrules);
- if(xkbmodel && *xkbmodel) fprintf(f, "XkbModel: %s\n", xkbmodel);
- if(xkblayout && *xkblayout) fprintf(f, "XkbLayout: %s\n", xkblayout);
-
- if(x11_driver) {
- for(sl = x11_driver->x11.extensions; sl; sl = sl->next) {
- if(*sl->str) fprintf(f, "XF86Ext: Load\t\t\"%s\"\n", sl->str);
- }
- for(sl = x11_driver->x11.options; sl; sl = sl->next) {
- if(*sl->str) fprintf(f, "XF86Raw: Option\t\"%s\"\n", sl->str);
- }
- for(sl = x11_driver->x11.raw; sl; sl = sl->next) {
- if(*sl->str) fprintf(f, "XF86Raw: %s\n", sl->str);
- }
- }
-
- fclose(f);
-
- return 0;
-}
-
-
-char *xserver3map[] =
-{
-#ifdef __i386__
- "VGA16", "xvga16",
- "RUSH", "xrush",
-#endif
-#if defined(__i386__) || defined(__alpha__) || defined(__ia64__)
- "SVGA", "xsvga",
- "3DLABS", "xglint",
-#endif
-#if defined(__i386__) || defined(__alpha__)
- "MACH64", "xmach64",
- "P9000", "xp9k",
- "S3", "xs3",
-#endif
-#ifdef __alpha__
- "TGA", "xtga",
-#endif
-#ifdef __sparc__
- "SUNMONO", "xsunmono",
- "SUN", "xsun",
- "SUN24", "xsun24",
-#endif
-#if 0
- "VMWARE", "xvmware",
-#endif
- 0, 0
-};
-
-
-void dump_packages(hd_data_t *hd_data)
-{
- str_list_t *sl;
- int i;
-
- hd_data->progress = NULL;
- hd_scan(hd_data);
-
- sl = get_hddb_packages(hd_data);
-
- for(i = 0; xserver3map[i]; i += 2) {
- if (!search_str_list(sl, xserver3map[i + 1]))
- add_str_list(&sl, new_str(xserver3map[i + 1]));
- }
-
- for(; sl; sl = sl->next) {
- printf("%s\n", sl->str);
- }
-}
-
-
-struct x11pack {
- struct x11pack *next;
- char *pack;
-};
-
-int oem_install_info(hd_data_t *hd_data)
-{
- hd_t *hd;
- str_list_t *str;
- str_list_t *x11packs = 0;
- str_list_t *sl0, *sl;
- FILE *f;
- int pcmcia, i;
-
- driver_info_x11_t *di, *drvinfo;
-
- hd_set_probe_feature(hd_data, pr_pci);
- hd_scan(hd_data);
- pcmcia = hd_has_pcmcia(hd_data);
-
- for(hd = hd_list(hd_data, hw_display, 1, NULL); hd; hd = hd->next) {
- for(str = hd->requires; str; str = str->next) {
- if(!search_str_list(x11packs, str->str)) {
- add_str_list(&x11packs, str->str);
- }
- }
- drvinfo = (driver_info_x11_t *) hd->driver_info;
- for (di = drvinfo; di; di = (driver_info_x11_t *)di->next) {
- if (di->type != di_x11)
- continue;
- if (di->xf86_ver[0] == '3') {
- char *server = di->server;
- if (server) {
- for (i = 0; xserver3map[i]; i += 2)
- if (!strcmp(xserver3map[i], server))
- break;
- if (xserver3map[i])
- if (!search_str_list(x11packs, xserver3map[i + 1]))
- add_str_list(&x11packs, xserver3map[i + 1]);
- }
- }
- }
- }
-
- if(hd_data->progress) {
- printf("\r%64s\r", "");
- fflush(stdout);
- }
-
- sl0 = read_file(INSTALL_INF, 0, 0);
- f = fopen(INSTALL_INF, "w");
- if(!f) {
- perror(INSTALL_INF);
- return 1;
- }
- for(sl = sl0; sl; sl = sl->next) {
- if(
- strstr(sl->str, "X11Packages:") != sl->str &&
- strstr(sl->str, "Pcmcia:") != sl->str
- ) {
- fprintf(f, "%s", sl->str);
- }
- }
- if (x11packs) {
- fprintf(f, "X11Packages: ");
- for (sl = x11packs; sl; sl = sl->next) {
- if (sl != x11packs)
- fputc(',', f);
- fprintf(f, "%s", sl->str);
- }
- fputc('\n', f);
- }
- if (pcmcia)
- fprintf(f, "Pcmcia: %d\n", pcmcia);
- fclose(f);
- return 0;
-}
-
-
-void dump_db_raw(hd_data_t *hd_data)
-{
- hd_data->progress = NULL;
- hd_clear_probe_feature(hd_data, pr_all);
- hd_scan(hd_data);
-
- if(opt.db_idx >= sizeof hd_data->hddb2 / sizeof *hd_data->hddb2) return;
-
- hddb_dump_raw(hd_data->hddb2[opt.db_idx], stdout);
-}
-
-
-void dump_db(hd_data_t *hd_data)
-{
- hd_data->progress = NULL;
- hd_clear_probe_feature(hd_data, pr_all);
- hd_scan(hd_data);
-
- if(opt.db_idx >= sizeof hd_data->hddb2 / sizeof *hd_data->hddb2) return;
-
- hddb_dump(hd_data->hddb2[opt.db_idx], stdout);
-}
-
-
-void do_chroot(hd_data_t *hd_data, char *dir)
-{
- int i;
-
- i = chroot(dir);
- ADD2LOG("chroot %s: %s\n", dir, i ? strerror(errno) : "ok");
-
- if(!i) chdir("/");
-}
-
-
-void ask_db(hd_data_t *hd_data, char *query)
-{
- hd_t *hd;
- driver_info_t *di;
- str_list_t *sl, *query_sl;
- unsigned tag = 0, u, cnt;
- char buf[256];
-
- setenv("hwprobe", "-all", 1);
- hd_scan(hd_data);
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- query_sl = hd_split(' ', query);
-
- for(sl = query_sl; sl; sl = sl->next) {
- if(!strcmp(sl->str, "pci")) { tag = TAG_PCI; continue; }
- if(!strcmp(sl->str, "usb")) { tag = TAG_USB; continue; }
- if(!strcmp(sl->str, "pnp")) { tag = TAG_EISA; continue; }
- if(!strcmp(sl->str, "isapnp")) { tag = TAG_EISA; continue; }
- if(!strcmp(sl->str, "special")) { tag = TAG_SPECIAL; continue; }
- if(!strcmp(sl->str, "pcmcia")) { tag = TAG_PCMCIA; continue; }
-
- if(sscanf(sl->str, "class=%i%n", &u, &cnt) >= 1 && !sl->str[cnt]) {
- hd->base_class.id = u >> 16;
- hd->sub_class.id = (u >> 8) & 0xff;
- hd->prog_if.id = u & 0xff;
- continue;
- }
-
- if(sscanf(sl->str, "vendor=%i%n", &u, &cnt) >= 1 && !sl->str[cnt]) {
- hd->vendor.id = MAKE_ID(tag, u);
- continue;
- }
-
- if(sscanf(sl->str, "vendor=%3s%n", buf, &cnt) >= 1 && !sl->str[cnt]) {
- u = name2eisa_id(buf);
- if(u) hd->vendor.id = u;
- tag = TAG_EISA;
- continue;
- }
-
- if(sscanf(sl->str, "device=%i%n", &u, &cnt) >= 1 && !sl->str[cnt]) {
- hd->device.id = MAKE_ID(tag, u);
- continue;
- }
-
- if(sscanf(sl->str, "subvendor=%i%n", &u, &cnt) >= 1 && !sl->str[cnt]) {
- hd->sub_vendor.id = MAKE_ID(tag, u);
- continue;
- }
-
- if(sscanf(sl->str, "subvendor=%3s%n", buf, &cnt) >= 1 && !sl->str[cnt]) {
- u = name2eisa_id(buf);
- if(u) hd->sub_vendor.id = u;
- tag = TAG_EISA;
- continue;
- }
-
- if(sscanf(sl->str, "subdevice=%i%n", &u, &cnt) >= 1 && !sl->str[cnt]) {
- hd->sub_device.id = MAKE_ID(tag, u);
- continue;
- }
-
- if(sscanf(sl->str, "revision=%i%n", &u, &cnt) >= 1 && !sl->str[cnt]) {
- hd->revision.id = u;
- continue;
- }
-
- if(sscanf(sl->str, "serial=%255s%n", buf, &cnt) >= 1 && !sl->str[cnt]) {
- hd->serial = new_str(buf);
- continue;
- }
-
- }
-
- free_str_list(query_sl);
-
- hddb_add_info(hd_data, hd);
-
- for(di = hd->driver_info; di; di = di->next) {
- if(di->any.type == di_module && di->module.modprobe) {
- for(sl = di->module.names; sl; sl = sl->next) {
- printf("%s%c", sl->str, sl->next ? ' ' : '\n');
- }
- }
- }
-}
-
-
-int is_same_block_dev(hd_t *hd1, hd_t *hd2)
-{
- if(!hd1 || !hd2 || hd1 == hd2) return 0;
-
- if(
- hd1->base_class.id != hd2->base_class.id ||
- hd1->sub_class.id != hd2->sub_class.id
- ) return 0;
-
- if(
- !hd1->model ||
- !hd2->model ||
- strcmp(hd1->model, hd2->model)
- ) return 0;
-
- if(hd1->revision.name || hd2->revision.name) {
- if(
- !hd1->revision.name ||
- !hd2->revision.name ||
- strcmp(hd1->revision.name, hd2->revision.name)
- ) return 0;
- }
-
- if(hd1->serial || hd2->serial) {
- if(
- !hd1->serial ||
- !hd2->serial ||
- strcmp(hd1->serial, hd2->serial)
- ) return 0;
- }
-
- return 1;
-}
-
-
-hd_t *get_same_block_dev(hd_t *hd_list, hd_t *hd, hd_status_value_t status)
-{
- for(; hd_list; hd_list = hd_list->next) {
- if(hd_list->status.available != status) continue;
- if(is_same_block_dev(hd_list, hd)) return hd_list;
- }
-
- return NULL;
-}
-
-
-void get_mapping(hd_data_t *hd_data)
-{
- hd_t *hd_manual, *hd, *hd2;
- struct {
- hd_t *hd;
- unsigned unknown:1;
- } map[256] = { };
- unsigned maps = 0, u;
- int broken, first;
- hd_hw_item_t hw_items[] = { hw_disk, hw_cdrom, 0 };
-
- hd_data->progress = NULL;
-
- hd_data->flags.list_all = 1;
-
- hd_manual = hd_list2(hd_data, hw_items, 1);
- for(hd = hd_manual; hd && maps < sizeof map / sizeof *map; hd = hd->next) {
- if(!hd->unix_dev_name) continue;
-
- if(hd->status.available == status_yes) {
- /* check if we already have an active device with the same name */
- for(broken = u = 0; u < maps; u++) {
- if(!strcmp(map[u].hd->unix_dev_name, hd->unix_dev_name)) {
- map[u].unknown = 1;
- broken = 1;
- }
- }
- if(broken) continue;
-
- /* ensure we really can tell different devices apart */
- if(get_same_block_dev(hd_manual, hd, status_yes)) {
- map[maps].hd = hd;
- map[maps].unknown = 1;
- }
- else {
- map[maps].hd = hd;
- }
- maps++;
- }
- }
-
- /* ok, we have a list of all new devs */
-
- for(u = 0; u < maps; u++) {
- if(map[u].unknown) {
- printf("%s\n", map[u].hd->unix_dev_name);
- }
- else {
- first = 1;
- for(hd2 = hd_manual; (hd2 = get_same_block_dev(hd2, map[u].hd, status_no)); hd2 = hd2->next) {
- if(hd2->unix_dev_name && strcmp(map[u].hd->unix_dev_name, hd2->unix_dev_name)) {
- printf("%s\t%s", first ? map[u].hd->unix_dev_name : "", hd2->unix_dev_name);
- first = 0;
- }
- }
- if(!first) printf("\n");
- }
-
- }
-
-}
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include "hd.h"
-#include "hd_int.h"
-
-struct option options[] = {
- { "help", 0, NULL, 'h' },
- { "verbose", 0, NULL, 'v' },
- { "version", 0, NULL, 400 },
- { "show", 1, NULL, 500 },
- { "list", 0, NULL, 501 },
- { "cfg", 1, NULL, 502 },
- { "avail", 1, NULL, 503 },
- { "need", 1, NULL, 504 },
- { "new", 0, NULL, 505 },
- { "fast", 0, NULL, 506 },
- { "silent", 0, NULL, 507 },
- { "boot", 0, NULL, 508 },
- { "active", 1, NULL, 509 },
- { "only", 1, NULL, 510 },
- { "sys", 0, NULL, 1000 + hw_sys },
- { "cpu", 0, NULL, 1000 + hw_cpu },
- { "keyboard", 0, NULL, 1000 + hw_keyboard },
- { "braille", 0, NULL, 1000 + hw_braille },
- { "mouse", 0, NULL, 1000 + hw_mouse },
- { "joystick", 0, NULL, 1000 + hw_joystick },
- { "printer", 0, NULL, 1000 + hw_printer },
- { "scanner", 0, NULL, 1000 + hw_scanner },
- { "chipcard", 0, NULL, 1000 + hw_chipcard },
- { "monitor", 0, NULL, 1000 + hw_monitor },
- { "tv", 0, NULL, 1000 + hw_tv },
- { "gfxcard", 0, NULL, 1000 + hw_display },
- { "framebuffer", 0, NULL, 1000 + hw_framebuffer },
- { "camera", 0, NULL, 1000 + hw_camera },
- { "sound", 0, NULL, 1000 + hw_sound },
- { "storage-ctrl", 0, NULL, 1000 + hw_storage_ctrl },
- { "storage_ctrl", 0, NULL, 1000 + hw_storage_ctrl },
- { "netcard", 0, NULL, 1000 + hw_network_ctrl },
- { "network-ctrl", 0, NULL, 1000 + hw_network_ctrl },
- { "network_ctrl", 0, NULL, 1000 + hw_network_ctrl },
- { "isdn", 0, NULL, 1000 + hw_isdn },
- { "modem", 0, NULL, 1000 + hw_modem },
- { "network", 0, NULL, 1000 + hw_network },
- { "disk", 0, NULL, 1000 + hw_disk },
- { "partition", 0, NULL, 1000 + hw_partition },
- { "cdrom", 0, NULL, 1000 + hw_cdrom },
- { "floppy", 0, NULL, 1000 + hw_floppy },
- { "update", 0, NULL, 1000 + hw_manual },
- { "usb-ctrl", 0, NULL, 1000 + hw_usb_ctrl },
- { "usb_ctrl", 0, NULL, 1000 + hw_usb_ctrl },
- { "usb", 0, NULL, 1000 + hw_usb },
- { "bios", 0, NULL, 1000 + hw_bios },
- { "pci", 0, NULL, 1000 + hw_pci },
- { "isapnp", 0, NULL, 1000 + hw_isapnp },
- { "bridge", 0, NULL, 1000 + hw_bridge },
- { "hub", 0, NULL, 1000 + hw_hub },
- { "scsi", 0, NULL, 1000 + hw_scsi },
- { "ide", 0, NULL, 1000 + hw_ide },
- { "memory", 0, NULL, 1000 + hw_memory },
- { "dvb", 0, NULL, 1000 + hw_dvb },
- { "pcmcia", 0, NULL, 1000 + hw_pcmcia },
- { "pcmcia_ctrl", 0, NULL, 1000 + hw_pcmcia_ctrl },
- { "ieee1394", 0, NULL, 1000 + hw_ieee1394 },
- { "firewire", 0, NULL, 1000 + hw_ieee1394 },
- { "ieee1394_ctrl", 0, NULL, 1000 + hw_ieee1394_ctrl },
- { "firewire_ctrl", 0, NULL, 1000 + hw_ieee1394_ctrl },
- { "hotplug", 0, NULL, 1000 + hw_hotplug },
- { "hotplug_ctrl", 0, NULL, 1000 + hw_hotplug_ctrl },
- { "zip", 0, NULL, 1000 + hw_zip },
- { "pppoe", 0, NULL, 1000 + hw_pppoe },
- { "dsl", 0, NULL, 1000 + hw_dsl },
- { "wlan", 0, NULL, 1000 + hw_wlan },
- { "block", 0, NULL, 1000 + hw_block },
- { "tape", 0, NULL, 1000 + hw_tape },
- { "vbe", 0, NULL, 1000 + hw_vbe },
- { "bluetooth", 0, NULL, 1000 + hw_bluetooth },
- { "all", 0, NULL, 1000 + hw_all },
- { }
-};
-
-int verbose = 0;
-hd_hw_item_t scan_item[100] = { };
-unsigned scan_items = 0;
-int found_items = 0;
-
-struct {
- unsigned show:1;
- unsigned scan:1;
- unsigned list:1;
- unsigned config_cfg:1;
- unsigned config_avail:1;
- unsigned config_need:1;
- unsigned config_active:1;
- unsigned new:1;
- unsigned fast:1;
- unsigned silent:1;
- unsigned boot:1;
- str_list_t *only;
-} opt;
-
-void help(void);
-int do_scan(hd_hw_item_t *items);
-int do_show(char *id);
-int do_list(hd_hw_item_t *items);
-int do_config(int type, char *val, char *id);
-int fast_ok(hd_hw_item_t *items);
-int has_item(hd_hw_item_t *items, hd_hw_item_t item);
-int has_hw_class(hd_t *hd, hd_hw_item_t *items);
-
-
-int main(int argc, char **argv)
-{
- int rc = 0;
-
-#ifndef LIBHD_TINY
-
- char *id = NULL;
- char *config_cfg = NULL;
- char *config_avail = NULL;
- char *config_need = NULL;
- char *config_active = NULL;
- int i;
- int ok = 0;
- FILE *f;
-
- opterr = 0;
-
- while((i = getopt_long(argc, argv, "hv", options, NULL)) != -1) {
- switch(i) {
- case 'v':
- verbose++;
- break;
-
- case 400:
- printf("%s\n", hd_version());
- ok = 1;
- break;
-
- case 500:
- opt.show = 1;
- id = optarg;
- break;
-
- case 501:
- opt.list = 1;
- break;
-
- case 502:
- opt.config_cfg = 1;
- config_cfg = optarg;
- break;
-
- case 503:
- opt.config_avail = 1;
- config_avail = optarg;
- break;
-
- case 504:
- opt.config_need = 1;
- config_need = optarg;
- break;
-
- case 505:
- opt.new = 1;
- break;
-
- case 506:
- opt.fast = 1;
- break;
-
- case 507:
- opt.silent = 1;
- break;
-
- case 508:
- opt.boot = 1;
- break;
-
- case 509:
- opt.config_active = 1;
- config_active = optarg;
- break;
-
- case 510:
- if(*optarg) add_str_list(&opt.only, optarg);
- break;
-
- case 1000 ... 1100:
- opt.scan = 1;
- if(scan_items + 1 < sizeof scan_item / sizeof *scan_item) {
- scan_item[scan_items++] = i - 1000;
- }
- break;
-
- default:
- help();
- return 1;
- }
- }
-
- scan_item[scan_items] = 0;
-
- if(opt.scan && !opt.list) {
- if(argv[optind] || !scan_items) return help(), 1;
- rc = do_scan(scan_item);
- if(found_items) {
- unlink(HARDWARE_DIR "/.update"); /* the old file */
- unlink(HARDWARE_UNIQUE_KEYS "/.update"); /* so we trigger a rescan */
- if((f = fopen(HARDWARE_UNIQUE_KEYS "/.update", "a"))) fclose(f);
- }
- ok = 1;
- }
-
- if(opt.show) {
- do_show(id);
- ok = 1;
- }
-
- if(opt.list) {
- do_list(scan_item);
- ok = 1;
- }
-
- if(opt.config_cfg) {
- if(!argv[optind]) return help(), 1;
- do_config(1, config_cfg, argv[optind]);
- ok = 1;
- }
-
- if(opt.config_avail) {
- if(!argv[optind]) return help(), 1;
- do_config(2, config_avail, argv[optind]);
- ok = 1;
- }
-
- if(opt.config_need) {
- if(!argv[optind]) return help(), 1;
- do_config(3, config_need, argv[optind]);
- ok = 1;
- }
-
- if(opt.config_active) {
- if(!argv[optind]) return help(), 1;
- do_config(4, config_active, argv[optind]);
- ok = 1;
- }
-
- if(!ok) help();
-
-#endif /* !defined(LIBHD_TINY) */
-
- return rc;
-}
-
-void help()
-{
- fprintf(stderr,
- "Usage: hwscan [options]\n"
- "Show information about currently known hardware.\n"
- " --list show list of known hardware\n"
- " --version show libhd version\n"
- " --silent don't show hardware config changes\n"
- " --boot run only if we haven't been disabled via 'hwprobe=-scan'\n"
- " --cfg=state id change 'configured' status; id is one of the\n"
- " ids from 'hwscan --list'\n"
- " state is one of new, no, yes\n"
- " --avail=state id change 'available' status\n"
- " --need=state id change 'needed' status\n"
- " --active=state id change 'active' status\n"
- " --hw_item probe for hw_item and update status info\n"
- " hw_item is one of:\n"
- " all, bios, block, bluetooth, braille, bridge, camera, cdrom, chipcard, cpu,\n"
- " disk, dsl, dvb, floppy, framebuffer, gfxcard, hub, ide, isapnp, isdn,\n"
- " joystick, keyboard, memory, modem, monitor, mouse, netcard, network,\n"
- " partition, pci, pcmcia, pcmcia-ctrl, pppoe, printer, scanner, scsi, smp,\n"
- " sound, storage-ctrl, sys, tape, tv, usb, usb-ctrl, vbe, wlan, zip\n"
- );
-}
-
-#ifndef LIBHD_TINY
-
-int do_scan(hd_hw_item_t *items)
-{
- int run_config = 0;
- hd_status_t status = { };
- hd_data_t *hd_data;
- hd_t *hd, *hd1;
- int err = 0;
-
- if(opt.fast) opt.fast = fast_ok(items);
-
- hd_data = calloc(1, sizeof *hd_data);
-
- if(opt.boot) {
- /* look if we have been disabled */
- hd_clear_probe_feature(hd_data, pr_all);
- hd_scan(hd_data);
- hd_set_probe_feature(hd_data, pr_scan);
- if(!hd_probe_feature(hd_data, pr_scan)) {
- hd_free_hd_data(hd_data);
- free(hd_data);
- return 0;
- }
- }
-
- hd_data->only = opt.only;
- opt.only = NULL;
-
- hd_data->flags.list_all = 1;
- hd_data->flags.fast = opt.fast;
-
- hd = hd_list2(hd_data, items, 1);
-
- if(hd) found_items = 1;
-
- for(hd1 = hd; hd1; hd1 = hd1->next) {
- err = hd_write_config(hd_data, hd1);
- if(verbose >= 2) {
- printf(
- "write=%d %s: (cfg=%s, avail=%s, need=%s, active=%s",
- err,
- hd1->unique_id,
- hd_status_value_name(hd1->status.configured),
- hd_status_value_name(hd1->status.available),
- hd_status_value_name(hd1->status.needed),
- hd_status_value_name(hd1->status.active)
- );
- if(hd1->unix_dev_name) {
- printf(", dev=%s", hd1->unix_dev_name);
- }
- printf(
- ") %s\n",
- hd1->model
- );
-
- }
- if(err) break;
- }
-
- if(err) {
- fprintf(stderr,
- "Error writing configuration for %s (%s)\n",
- hd1->unique_id,
- hd1->model
- );
- exit(1);
- }
-
- hd = hd_free_hd_list(hd);
-
- if(opt.new) {
- status.configured = status_new;
- }
- else {
- status.reconfig = status_yes;
- }
-
- hd = hd_list_with_status2(hd_data, items, status);
- if(hd) run_config = 1;
-
- if(verbose) {
- for(hd1 = hd; hd1; hd1 = hd1->next) {
- printf(
- "%s: (cfg=%s, avail=%s, need=%s, active=%s",
- hd1->unique_id,
- hd_status_value_name(hd1->status.configured),
- hd_status_value_name(hd1->status.available),
- hd_status_value_name(hd1->status.needed),
- hd_status_value_name(hd1->status.active)
- );
- if(hd1->unix_dev_name) {
- printf(", dev=%s", hd1->unix_dev_name);
- }
- printf(
- ") %s\n",
- hd1->model
- );
- }
- }
- else if(!opt.silent) {
- for(hd1 = hd; hd1; hd1 = hd1->next) printf("%s\n", hd1->unique_id);
- }
-
- hd = hd_free_hd_list(hd);
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return run_config ^ 1;
-}
-
-
-int do_show(char *id)
-{
- hd_data_t *hd_data;
- hd_t *hd;
-
- hd_data = calloc(1, sizeof *hd_data);
-
- if ( id[0] == '/' ){
- int nr=0;
- char *_id = 0;
- hd_t *hd_manual;
-
- hd_manual = hd_list(hd_data, hw_manual, 1, NULL);
- for(hd = hd_manual; hd; hd = hd->next) {
- if(hd->status.available != status_yes) continue;
- if(!search_str_list(hd->unix_dev_names, id)) continue;
- _id = hd->unique_id;
- nr++;
- }
-
- if ( nr == 1 ) /* > 1 means our database is not okay */
- hd = hd_read_config(hd_data, _id);
- }else
- hd = hd_read_config(hd_data, id);
-
- if(hd) {
- hd_data->debug = -1;
- hd_dump_entry(hd_data, hd, stdout);
- hd = hd_free_hd_list(hd);
- }
- else {
- printf("no such hardware item: %s\n", id);
- }
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return 0;
-}
-
-
-int do_list(hd_hw_item_t *items)
-{
- hd_data_t *hd_data;
- hd_t *hd, *hd_manual;
- char *s;
- char status[64];
- int i;
-
- hd_data = calloc(1, sizeof *hd_data);
-
- hd_manual = hd_list(hd_data, hw_manual, 1, NULL);
-
- for(hd = hd_manual; hd; hd = hd->next) {
- if(opt.scan && ! has_hw_class(hd, items)) continue;
-
- strcpy(status, "(");
-
- i = 0;
- if(hd->status.configured && (s = hd_status_value_name(hd->status.configured))) {
- sprintf(status + strlen(status), "%scfg=%s", i ? ", " : "", s);
- i++;
- }
-
- if(hd->status.available && (s = hd_status_value_name(hd->status.available))) {
- sprintf(status + strlen(status), "%savail=%s", i ? ", " : "", s);
- i++;
- }
-
- if(hd->status.needed && (s = hd_status_value_name(hd->status.needed))) {
- sprintf(status + strlen(status), "%sneed=%s", i ? ", " : "", s);
- i++;
- }
-
- if(hd->status.active && (s = hd_status_value_name(hd->status.active))) {
- sprintf(status + strlen(status), "%sactive=%s", i ? ", " : "", s);
- i++;
- }
-
- strcat(status, ")");
-
- s = hd_hw_item_name(hd->hw_class);
- if(!s) s = "???";
-
- printf("%s: %-32s %-16s %s\n", hd->unique_id, status, s, hd->model);
- if(hd->config_string) {
- printf(" configured as: \"%s\"\n", hd->config_string);
- }
- }
-
- hd_free_hd_list(hd_manual);
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return 0;
-}
-
-
-int do_config(int type, char *val, char *id)
-{
- hd_data_t *hd_data;
- hd_t *hd;
- hd_status_value_t status = 0;
- int i;
- char *s;
-
- hd_data = calloc(1, sizeof *hd_data);
-
- if ( id[0] == '/' ){
- int nr=0;
- char *_id = 0;
- hd_t *hd_manual;
-
- hd_manual = hd_list(hd_data, hw_manual, 1, NULL);
- for(hd = hd_manual; hd; hd = hd->next) {
- if(hd->status.available != status_yes) continue;
- if(!search_str_list(hd->unix_dev_names, id)) continue;
- _id = hd->unique_id;
- nr++;
- }
- if ( nr == 1 )
- hd = hd_read_config(hd_data, _id);
- }else
- hd = hd_read_config(hd_data, id);
-
- if(hd) {
- for(i = 1; i < 8; i++) {
- s = hd_status_value_name(i);
- if(s && !strcmp(val, s)) {
- status = i;
- break;
- }
- }
- if(!status) {
- printf("invalid status: %s\n", val);
- }
- else {
- switch(type) {
- case 1:
- hd->status.configured = status;
- break;
-
- case 2:
- hd->status.available = status;
- break;
-
- case 3:
- hd->status.needed = status;
- break;
-
- case 4:
- hd->status.active = status;
- break;
- }
- hd_write_config(hd_data, hd);
- }
- hd = hd_free_hd_list(hd);
- }
- else {
- printf("no such hardware item: %s\n", id);
- }
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return 0;
-}
-
-
-/*
- * Check whether a 'fast' scan would suffice to re-check the presence
- * of all known hardware.
- */
-int fast_ok(hd_hw_item_t *items)
-{
- hd_data_t *hd_data;
- hd_t *hd, *hd1;
- int ok = 1;
-
- if(!has_item(items, hw_mouse) && !has_item(items, hw_storage_ctrl)) {
- return 1;
- }
-
- hd_data = calloc(1, sizeof *hd_data);
-
- hd_data->flags.list_all = 1;
-
- hd = hd_list(hd_data, hw_manual, 1, NULL);
-
- for(hd1 = hd; hd1; hd1 = hd1->next) {
- /* serial mice */
- if(hd1->hw_class == hw_mouse && hd1->bus.id == bus_serial) {
- ok = 0;
- break;
- }
- /* parallel zip */
- if(hd1->hw_class == hw_storage_ctrl && hd1->bus.id == bus_parallel) {
- ok = 0;
- break;
- }
- }
-
- hd_free_hd_data(hd_data);
- free(hd_data);
-
- return ok;
-}
-
-
-/* check if item is in items */
-int has_item(hd_hw_item_t *items, hd_hw_item_t item)
-{
- while(*items) if(*items++ == item) return 1;
-
- return 0;
-}
-
-
-/* check if one of items is in hw_class */
-int has_hw_class(hd_t *hd, hd_hw_item_t *items)
-{
- while(*items) if(hd_is_hw_class(hd, *items++)) return 1;
-
- return 0;
-}
-
-
-#endif /* !defined(LIBHD_TINY) */
+++ /dev/null
-
-/* hwscan front end
- Copyright 2004 by SUSE (<adrian@suse.de>) */
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <time.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "init_message.h"
-
-#define TIMEOUT 2
-#define LONG_TIMEOUT 0
-#define BUFFERS 1024
-
-int main( int argc, char **argv )
-{
- int ret, i;
- key_t key = KEY;
- int msgid;
- int mode = 0;
- int dev_nr = 0;
- int lines = 0;
- int block, usb, firewire, pci;
- int dev_last_state[BUFFERS];
- int dev_counter[BUFFERS];
- char * command_device[NR_COMMANDS][BUFFERS];
- time_t command_device_last[NR_COMMANDS][BUFFERS];
- time_t last;
- char **commands;
- char **devices;
- char buffer[32];
- message m;
-
- // are we running already, maybe ?
- {
- do {
- ssize_t r;
- char b[1024];
- char link[1024];
- int fd = open( PID_FILE, O_RDONLY );
- if ( fd >= 0 && (r=read(fd,b,1023)) > 0 ){
- close(fd);
- b[r]='\0';
- snprintf(link, 1023, "/proc/%s/exe", b);
- if ( (r=readlink( link, b, 1023 )) > 0 ){
- b[r]='\0';
- if ( r<8 )
- unlink(PID_FILE);
- else if ( strcmp("/hwscand", b+strlen(b)-8) )
- unlink(PID_FILE);
- else
- exit(1);
- }else
- unlink(PID_FILE);
- }else if ( fd >= 0 )
- unlink(PID_FILE);
- } while ( 0 > (ret = open( PID_FILE, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR ) ) );
- sprintf(buffer, "%d", getpid());
- if ( ret < 0 || write(ret,buffer,strlen(buffer)) <= 0 ){
- perror("hwscand: unable to write pid file "PID_FILE);
- exit(1);
- }
- close(ret);
- }
-
- // initialize ...
- for ( i=0; i<NR_COMMANDS; i++ ){
- command_device[i][0] = 0;
- command_device_last[i][0] = 1;
- }
-
- last=block=usb=firewire=pci=0;
- commands = (char**) malloc( BUFFERS * sizeof(char*) );
- devices = (char**) malloc( BUFFERS * sizeof(char*) );
-
- msgid = msgget(key, IPC_CREAT | 0600);
- if (msgid < 0) {
- perror("msgget");
- exit(1);
- }
-
- while (1) {
- if ( last || dev_nr )
- mode = IPC_NOWAIT;
- else
- mode = 0;
-
- if( msgrcv(msgid, &m, MESSAGE_BUFFER, 1, mode) >= 0 ){
- char *p = m.mtext;
-
- if ( p == 0 ){
- fprintf( stderr, "hwscand: error, zero sized message\n" );
- }else{
- if ( p[0] == 'S' && strlen(p) > 1 ){
- // scan calls
- char z[2];
- int c;
- z[0] = *(p+1);
- z[1] = '\0';
- c = atoi(z);
- if ( c < NR_COMMANDS ){
- if ( ! command_with_device[c] ){
- last = time(0L);
- if ( LONG_TIMEOUT+command_device_last[c][0] < time(0L) )
- command_device_last[c][0] = 0;
- }else
- for ( i=0; i<BUFFERS; i++ ){
- if ( !command_device[c][i] ){
- last = time(0L);
- command_device[c][i] = strdup(p+2);
- command_device[c][i+1] = 0;
- command_device_last[c][i] = 0;
- break;
- }else if ( !strcmp(command_device[c][i], p+2) ){
- last = time(0L);
- if ( LONG_TIMEOUT+command_device_last[c][i] < time(0L) )
- command_device_last[c][i] = 0;
- break;
- }
- }
- }
- }
- if ( p[0] == 'C' && lines < BUFFERS ){
- last = time(0L);
- // config calls
- commands[lines] = strdup(p+1);
- lines++;
- }
- if ( p[0] == 'A' && dev_nr < BUFFERS ){
- // add scan devices
- devices[dev_nr] = strdup(p+1);
- dev_last_state[dev_nr] = 0;
- dev_counter[dev_nr] = 0;
- dev_nr++;
- }
- if ( p[0] == 'R' && dev_nr < BUFFERS ){
- for ( i=0; i<dev_nr; i++ ){
- if ( !strcmp(p+1, devices[i]) ){
- int j;
- free(devices[i]);
- for ( j=i; j+1<dev_nr; j++ ){
- devices[j] = devices[j+1];
- dev_last_state[j] = dev_last_state[j+1];
- dev_counter[j] = dev_counter[j+1];
- }
- dev_nr--;
- }
- }
- }
- }
-#if DEBUG
- printf("CALL RECEIVED %s\n", p);
-#endif
- }else{
- // we do this only in scanning mode ...
-
- sleep(1);
- for ( i=0; i<dev_nr; i++ ){
- if (dev_counter[i]<0) continue;
- dev_counter[i]++;
- if ( dev_counter[i] > 5 ){
- int fd;
- char buf[MESSAGE_BUFFER];
- dev_counter[i] = 0;
- fd = open( devices[i], O_RDONLY );
- strcpy( buf, "/sbin/hwscan --fast --partition --only=");
- strcat( buf, devices[i] );
- if ( fd < 0 ){
- if ( dev_last_state[i] )
- system(buf);
- dev_last_state[i] = 0;
- }else{
- if ( dev_last_state[i] == 0)
- system(buf);
- dev_last_state[i] = 1;
- close(fd);
- }
- }
- }
- }
-
- if ( last && (last+TIMEOUT <= time(0L)) ){
- char buf[MESSAGE_BUFFER * NR_COMMANDS];
- int run_really = 0;
-
- last=0;
- strcpy( buf, "/sbin/hwscan --fast --boot --silent" );
- for ( i=0; i<NR_COMMANDS; i++ ){
- if ( command_with_device[i] == 0 &&
- command_device_last[i][0] == 0 ){
- command_device_last[i][0] = time(0L);
- strcat( buf, " --");
- strcat( buf, command_args[i] );
- run_really = 1;
- } else {
- int j;
- int commappended = 0;
-
- for ( j=0; j<BUFFERS; j++ ){
- if ( !command_device[i][j] )
- break;
- if ( command_device_last[i][j] == 0 ){
- if (!commappended) {
- strcat( buf, " --");
- strcat( buf, command_args[i] );
- commappended = 1;
- }
- strcat( buf, " --only=" );
- strcat( buf, command_device[i][j] );
- command_device_last[i][j] = time(0L);
- run_really = 1;
- if (strlen(buf) > sizeof(buf) - MESSAGE_BUFFER)
- break;
- }
- }
- }
- if (strlen(buf) > sizeof(buf) - MESSAGE_BUFFER) {
- last = time(0L); /* call me again */
- break;
- }
- }
-
- if ( run_really ){
-#if DEBUG
- printf("RUN %s\n", buf);
-#endif
- system(buf);
-#if DEBUG
- printf("RUN quit %s\n", buf);
-#endif
- }
- if ( lines ){
- for (i=0; i<lines; i++){
-#if DEBUG
- printf("CALL DIRECT %s\n", commands[i]);
-#endif
- system(commands[i]);
-#if DEBUG
- printf("CALL quit %s\n", commands[i]);
-#endif
- free(commands[i]);
- }
- lines=0;
- }
- }
- }
-
- return 0;
-}
+++ /dev/null
-
-/* hwscan front end
- Copyright 2004 by SUSE (<adrian@suse.de>) */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "init_message.h"
-
-int main( int argc, char **argv )
-{
- int ret;
- unsigned short i;
- key_t key = KEY;
- int msgid;
- message m;
- char *device = argv[2];
-
- if ( argc < 2 ){
- fprintf( stderr, "help: hwscanqueue hwscan-commands\n" );
- fprintf( stderr, "help: commands:\n" );
- for ( i=0; i<NR_COMMANDS; i++ ){
- fprintf( stderr, " --%s", command_args[i] );
- if ( command_with_device[i] )
- fprintf( stderr, " device" );
- fprintf( stderr, "\n");
- }
- fprintf( stderr, " --avail=yes/no id\n" );
- fprintf( stderr, " --scan=device\n" );
- fprintf( stderr, " --stop=device\n" );
- exit(1);
- }
-
- if ( !strncmp("--cfg=", argv[1], 6) && argc>2 )
- snprintf( m.mtext, MESSAGE_BUFFER, "C/sbin/hwscan %s %s", argv[1], argv[2] );
- else if ( !strncmp("--avail=", argv[1], 8) && argc>2 )
- snprintf( m.mtext, MESSAGE_BUFFER, "C/sbin/hwscan %s %s", argv[1], argv[2] );
- else if ( !strncmp("--scan=", argv[1], 7) )
- snprintf( m.mtext, MESSAGE_BUFFER, "A%s", argv[1]+7 );
- else if ( !strncmp("--stop=", argv[1], 7) )
- snprintf( m.mtext, MESSAGE_BUFFER, "R%s", argv[1]+7 );
- else if ( !strncmp("--", argv[1], 2) ){
- for ( i=0; i<NR_COMMANDS; i++ ){
- if ( !strcmp(argv[1]+2,command_args[i]) ){
-#if DEBUG
- printf("COMMAND %s\n", command_args[i] );
-#endif
- snprintf( m.mtext, MESSAGE_BUFFER, "S%d", i );
- if (command_with_device[i]){
- if ( !device ){
- fprintf(stderr, "need a device for this command\n");
- exit(1);
- }
- strncat( m.mtext, device, MESSAGE_BUFFER-3 );
- }
- break;
- }
- }
- if ( i>=NR_COMMANDS ){
- fprintf(stderr, "unknown command\n");
- exit(1);
- }
- }else
- exit(1);
-
- if ( (msgid = msgget(key, IPC_CREAT | 0600)) < 0 ){
- perror("unable to init.");
- exit(1);
- }
- m.mtype = 1;
- ret = msgsnd( msgid, &m, MESSAGE_BUFFER, IPC_NOWAIT);
-#if DEBUG
- printf("SEND %s, return %d\n", m.mtext, ret );
-#endif
-
- if ( ret < 0 )
- perror("message send failed");
- else{
- // success ... start hwscand, if it is not yet running
- ssize_t r;
- char buffer[1024];
- char link[1024];
- int fd = open( PID_FILE, O_RDONLY );
- if ( fd >= 0 && (r=read(fd,buffer,1023)) > 0 ){
- close(fd);
- buffer[r]='\0';
- snprintf(link, 1023, "/proc/%s/exe", buffer);
- if ( (r=readlink( link, buffer, 1023 )) > 0 ){
- buffer[r]='\0';
- if ( r<8 )
- fd=-1;
- else if ( strcmp("/hwscand", buffer+strlen(buffer)-8) )
- fd=-1;
- }else
- fd=-1;
- }else
- fd=-1;
-
- if ( fd < 0 ){
- pid_t pid;
- signal(SIGCHLD,SIG_IGN);
- pid=fork();
- if (pid==0){
- /* Change directory to allow clean shut-down */
- chdir("/");
- /* Close std fds */
- close(0);
- close(1);
- close(2);
- /* Start hwscand */
- execve("/sbin/hwscand", 0, 0);
- }
- }
- }
-
- exit(ret);
-}
-
+++ /dev/null
-#define MESSAGE_BUFFER 1024
-#define KEY 8024;
-#define PID_FILE "/var/run/hwscand.pid"
-
-// WARNING NEEDS TO BE <= 9
-#define NR_COMMANDS 7
-// WARNING NEEDS TO BE <= 9
-static const char *command_args[] = { "block", "partition", "usb", "firewire", "pci", "pcmcia", "bluetooth" };
-static const int command_with_device[] = { 1, 1, 0, 0, 0, 0, 0 };
-
-typedef struct msgbuf {
- long mtype;
- char mtext[MESSAGE_BUFFER+1];
-} message;
-
-#define DEBUG 0
-
+++ /dev/null
-#! /usr/bin/perl
-
-sub addr2line;
-
-$list = shift;
-$bin = shift;
-$ofs = shift;
-
-die "usage: mci data_file binary\n" unless -f($list);
-
-open F, $list;
-
-while(<F>) {
- if(/^;\s*(.+?)\s*$/) {
- @i = split ' ', $1;
- $i[0] = sprintf "%-24s", $i[0];
- $i[1] = addr2line $i[1];
- print "; ", join("\t", @i), "\n";
- next
- }
- @i = split;
-
- die "oops, format error" if @i > 3;
-
- if(@i == 1) {
- if($i[0] =~ /^>(\S+)/) {
- unshift @funcs, $1;
- }
- elsif($i[0] =~ /<(\S+)/) {
- if($funcs[0] eq $1) {
- shift @funcs
- }
- else {
- die "oops, strange data (line $.)\n"
- }
- }
- else {
- die "oops, format error"
- }
- }
- else {
- $func = $i[0];
- $addr = $i[1];
- $size = undef;
- $size = @i == 2 ? undef : $i[2];
-
- if(defined $size) {
- if(exists $mem{$addr}) {
- $x = addr2line $func;
- $y = addr2line ${$mem{$addr}}[1];
- print "malloc oops (line $.): mem $addr; old: $y, size ${$mem{$addr}}[0]; new: $x, size $size\n";
- }
- $mem{$addr} = [ $size, $func, @funcs ];
- delete $lfree{$addr};
- }
- else {
- if(!exists $mem{$addr}) {
- $xx = "";
- $first = 1;
- for $f ($func, @funcs) {
- $xx .= "<-" unless $first;
- $first = 0;
- $xx .= addr2line $f;
- }
- print "free oops (line $.): $addr ($xx) [last free: line $lfree{$addr}]\n";
- }
- delete $mem{$addr};
- $lfree{$addr} .= " $.";
- }
- }
-}
-
-for (sort keys %mem) {
- $total += oct(${$mem{$_}}[0]);
- $cnt++;
-
-# $x = `addr2line -s -e $bin ${$mem{$_}}[1]`;
-# chomp $x;
-# $x = $x =~ /\?{2}/ ? undef : "$x ";
- $x = addr2line ${$mem{$_}}[1];
-
- print "$_\t${$mem{$_}}[0]\t";
- $first = 1;
- for $f (@{$mem{$_}}[1..$#{$mem{$_}}]) {
- print "<-" unless $first;
- $first = 0;
- print addr2line $f;
- }
- print "\n"
-}
-
-printf "total: %u bytes in %u blocks\n", $total, $cnt;
-
-
-sub addr2line
-{
- my ($x, $y);
-
- return $_[0] unless $bin;
-
- $y = sprintf "0x%x", oct($_[0]) + $ofs;
-
- return $addr_cache{$y} if exists $addr_cache{$y};
-
- $x = `addr2line -s -e $bin $y`;
- chomp $x;
- $x = $x =~ /\?{2}/ ? $_[0] : $x;
-
- $addr_cache{$y} = $x;
-
- return $x;
-}
-
+++ /dev/null
-TOPDIR = ..
-SUBDIRS = hd isdn ids
-TARGETS = touch $(LIBHD) $(LIBHD_SO)
-CLEANFILES = $(LIBHD) $(LIBHD_D) $(LIBHD_SO) *.so *.so.* *.a
-
-.PHONY: touch
-
-include $(TOPDIR)/Makefile.common
-
-ifneq "$(findstring $(ARCH), i386 x86_64 ia64)" ""
-ifneq ($(LIBHD_BASE), libhd_tiny)
-SUBDIRS += x86emu int10
-endif
-endif
-
-#ifeq "$(findstring $(ARCH), i386 alpha)" ""
-#SUBDIRS := $(filter-out pnpdump, $(SUBDIRS))
-#endif
-
-$(LIBHD): $(OBJS)
- ar r $@ $?
- @rm -f $(LIBHD_D)
-
-ifdef SHARED_FLAGS
-$(LIBHD_SO): $(LIBHD)
- $(CC) -shared $(SO_LIBS) -Wl,--whole-archive $(LIBHD) -Wl,--no-whole-archive \
- -Wl,-soname=$(LIBHD_SONAME) \
- -o $(LIBHD_SO)
- ln -snf $(LIBHD_NAME) $(LIBHD_SONAME)
- ln -snf $(LIBHD_SONAME) $(LIBHD_BASE).so
-else
-$(LIBHD_SO):
-endif
-
-subdirs: touch
-
-touch:
- @touch -r $(LIBHD) $(LIBHD_D) 2>/dev/null || true
+++ /dev/null
-TOPDIR = ../..
-TARGETS = $(LIBHD_D)
-CLEANFILES = version.h
-
-include $(TOPDIR)/Makefile.common
-
-version.h: $(TOPDIR)/VERSION
- @echo "#define HD_VERSION_STRING \"`cat $(TOPDIR)/VERSION`\"" >$@
-
-hd.h: $(TOPDIR)/VERSION
- @perl -pi -e "s/define\s+HD_VERSION\s+\d+/define HD_VERSION\t$(LIBHD_MAJOR_VERSION)/" $@
-
-$(LIBHD_D): $(OBJS)
- ar r $(LIBHD) $?
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <termios.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "adb.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * adb info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifdef __PPC__
-
-void hd_scan_adb(hd_data_t *hd_data)
-{
- int i;
- unsigned u, adr = 0;
- hd_t *hd;
- str_list_t *sl;
-
- if(!hd_probe_feature(hd_data, pr_adb)) return;
-
- hd_data->module = mod_adb;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "get info");
-
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(sscanf(sl->str, "<4>ADB mouse at %u, %*[a-z ] %i", &u, &i) == 2 && u < 32) {
- /* u: max 15 actually, but who cares... */
- if(!(adr & (1 << u))) {
- adr |= 1 << u;
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_bus;
- hd->bus.id = bus_adb;
- hd->slot = u;
-// hd->func = i;
- hd->unix_dev_name = new_str(DEV_MICE);
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0100);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0300 + i);
- }
- }
-
- if(sscanf(sl->str, "<4>ADB keyboard at %u, %*[a-z ] %i", &u, &i) == 2 && u < 32) {
- /* u: max 15 actually, but who cares... */
- if(!(adr & (1 << u))) {
- adr |= 1 << u;
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = 0;
- hd->bus.id = bus_adb;
- hd->slot = u;
-// hd->func = i;
-// hd->unix_dev_name = new_str(DEV_ADBMOUSE);
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0100);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0200+i);
- }
- }
- }
-}
-
-#endif /* __PPC__ */
+++ /dev/null
-void hd_scan_adb(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <byteswap.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#if defined(__i386__) || defined (__x86_64__) || defined(__ia64__)
-#include <sys/io.h>
-#endif
-typedef unsigned long kernel_ulong_t;
-#include <linux/types.h>
-#ifdef __UCLIBC__
-#include <linux/pci.h>
-#else
-#include <sys/pci.h>
-#endif
-
-#include "hd.h"
-#include "hd_int.h"
-#include "bios.h"
-#include "smbios.h"
-#include "klog.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * bios info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if defined(__i386__) || defined (__x86_64__) || defined (__ia64__)
-
-static struct {
- int width;
- int height;
- char *vendor;
- char *name;
- char *version;
-} panel_data[] = {
- { 800, 600, "Fujitsu Siemens", "LiteLine", "LF6" },
- { 1024, 768, "ASUSTEK", "L2000D", NULL },
- { 1024, 768, "ASUSTeK Computer Inc.", "L8400C series Notebook PC", NULL },
- { 1024, 768, "ASUSTeK Computer Inc.", "S5N", NULL },
- { 1024, 768, "Acer", "TravelMate 720", NULL },
- { 1024, 768, "COMPAL", "N30T5", NULL },
- { 1024, 768, "Dell Computer Corporation", "Inspiron 5000", NULL },
- { 1024, 768, "Dell Computer Corporation", "Latitude C400", NULL },
- { 1024, 768, "Dell Computer Corporation", "Latitude C600", NULL },
- { 1024, 768, "Dell Computer Corporation", "Latitude CPt C400GT", NULL },
- { 1024, 768, "Hewlett-Packard", "HP OmniBook PC", "HP OmniBook 4150 B" },
- { 1280, 800, "Hewlett-Packard", "hp compaq nx9105 (DU367T#ABD)", "03" },
- { 1280, 800, "Hewlett-Packard", "Pavilion zv5000 (PA456EA#ABD)", "F.11" },
-#include "ibm-notebooks.h"
- { 1400, 1050, "IBM", "73geu99", NULL },
- { 1024, 768, "KDST", "KDS6KSUMO", NULL },
- { 1024, 768, "Sony Corporation", "PCG-F370(UC)", NULL },
- { 1024, 768, "Sony Corporation", "PCG-N505SN", NULL },
- { 1024, 768, "TOSHIBA", "S2400-103", NULL },
- { 1280, 800, "Acer", "Aspire 1520", NULL },
- { 1400, 1050, "Acer", "TravelMate 660", NULL },
- { 1400, 1050, "Dell Computer Corporation", "Inspiron 8000", NULL },
- { 1600, 1200, "Dell Computer Corporation", "Inspiron 8200", NULL },
- { 1600, 1200, "Dell Computer Corporation", "Latitude C840", NULL }
-};
-
-#define BIOS_TEST
-
-typedef struct {
- unsigned eax, ebx, ecx, edx, esi, edi, eip, es, iret, cli;
-} bios32_regs_t;
-
-static void read_memory(hd_data_t *hd_data, memory_range_t *mem);
-static void dump_memory(hd_data_t *hd_data, memory_range_t *mem, int sparse, char *label);
-static void get_pnp_support_status(memory_range_t *mem, bios_info_t *bt);
-static void smbios_get_info(hd_data_t *hd_data, memory_range_t *mem, bios_info_t *bt);
-static void get_fsc_info(hd_data_t *hd_data, memory_range_t *mem, bios_info_t *bt);
-static void add_panel_info(hd_data_t *hd_data, bios_info_t *bt);
-static void add_mouse_info(hd_data_t *hd_data, bios_info_t *bt);
-static unsigned char crc(unsigned char *mem, unsigned len);
-static int get_smp_info(hd_data_t *hd_data, memory_range_t *mem, smp_info_t *smp);
-static void parse_mpconfig(hd_data_t *hd_data, memory_range_t *mem, smp_info_t *smp);
-static int get_bios32_info(hd_data_t *hd_data, memory_range_t *mem, bios32_info_t *bios32);
-
-int detect_smp_bios(hd_data_t *hd_data)
-{
- bios_info_t *bt;
- hd_smbios_t *sm;
- hd_t *hd;
- int cpus;
-
- if(!hd_data->bios_ram.data) return -1; /* hd_scan_bios() not called */
-
- for(bt = NULL, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal &&
- hd->sub_class.id == sc_int_bios &&
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- (bt = hd->detail->bios.data)
- ) {
- break;
- }
- }
-
- if(!bt) return -1;
-
- cpus = 0;
-
- /* look at smbios data in case there's no mp table */
- if(hd_data->smbios) {
- for(sm = hd_data->smbios; sm; sm = sm->next) {
- if(
- sm->any.type == sm_processor &&
- sm->processor.pr_type.id == 3 && /* cpu */
- sm->processor.cpu_status.id == 1 /* enabled */
- ) {
- cpus++;
- }
- }
- ADD2LOG(" smp detect: mp %d cpus, smbios %d cpus\n", bt->smp.ok ? bt->smp.cpus_en : 0, cpus);
- }
-
- if(bt->smp.ok && bt->smp.cpus_en) cpus = bt->smp.cpus_en;
-
- return cpus;
-}
-
-
-void hd_scan_bios(hd_data_t *hd_data)
-{
- hd_t *hd;
- bios_info_t *bt;
- char *s;
- unsigned char *bios_ram;
- unsigned u, u1;
- memory_range_t mem;
- unsigned smp_ok;
-#ifndef LIBHD_TINY
- vbe_info_t *vbe;
- vbe_mode_info_t *mi;
- hd_res_t *res;
- str_list_t *sl;
-#endif
-
- if(!hd_probe_feature(hd_data, pr_bios)) return;
-
- /* we better do nothing on a SGI Altix machine */
- if(hd_is_sgi_altix(hd_data)) return;
-
- hd_data->module = mod_bios;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "cmdline");
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_bios;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_bios;
- hd->detail->bios.data = bt = new_mem(sizeof *bt);
-
- /*
- * first, look for APM support
- */
- if((s = get_cmd_param(hd_data, 1))) {
- if(strlen(s) >= 10) {
- bt->apm_supported = 1;
- bt->apm_ver = hex(s, 1);
- bt->apm_subver = hex(s + 1, 1);
- bt->apm_bios_flags = hex(s + 2, 2);
- /*
- * Bitfields for APM flags (from Ralf Brown's list):
- * Bit(s) Description
- * 0 16-bit protected mode interface supported
- * 1 32-bit protected mode interface supported
- * 2 CPU idle call reduces processor speed
- * 3 BIOS power management disabled
- * 4 BIOS power management disengaged (APM v1.1)
- * 5-7 reserved
- */
- bt->apm_enabled = (bt->apm_bios_flags & 8) ? 0 : 1;
-
- bt->vbe_ver = hex(s + 4, 2);
- bt->vbe_ver = (((bt->vbe_ver >> 4) & 0xf) << 8) + (bt->vbe_ver & 0xf);
- bt->vbe_video_mem = hex(s + 6, 4) << 16;
- }
-
- s = free_mem(s);
- }
-
- if((s = get_cmd_param(hd_data, 2))) {
- if(strlen(s) > 8) {
- if(s[8] == '.') bt->lba_support = 1;
- }
-
- s = free_mem(s);
- }
-
- PROGRESS(1, 1, "apm");
-
- if(!bt->apm_ver) {
- str_list_t *sl0, *sl;
-
- sl0 = read_file(PROC_APM, 0, 0);
- if(sl0) {
- bt->apm_supported = 1;
- bt->apm_enabled = 1;
- ADD2LOG("----- %s -----\n", PROC_APM);
- for(sl = sl0; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- %s end -----\n", PROC_APM);
- }
- free_str_list(sl0);
- }
-
- /*
- * get the i/o ports for the parallel & serial interfaces from the BIOS
- * memory area starting at 0x40:0
- */
- PROGRESS(2, 0, "ram");
-
- hd_data->bios_ram.start = BIOS_RAM_START;
- hd_data->bios_ram.size = BIOS_RAM_SIZE;
- read_memory(hd_data, &hd_data->bios_ram);
-
- hd_data->bios_rom.start = BIOS_ROM_START;
- hd_data->bios_rom.size = BIOS_ROM_SIZE;
- read_memory(hd_data, &hd_data->bios_rom);
-
- if(hd_data->bios_ram.data) {
- bios_ram = hd_data->bios_ram.data;
-
- bt->ser_port0 = (bios_ram[1] << 8) + bios_ram[0];
- bt->ser_port1 = (bios_ram[3] << 8) + bios_ram[2];
- bt->ser_port2 = (bios_ram[5] << 8) + bios_ram[4];
- bt->ser_port3 = (bios_ram[7] << 8) + bios_ram[6];
-
- bt->par_port0 = (bios_ram[ 9] << 8) + bios_ram[ 8];
- bt->par_port1 = (bios_ram[0xb] << 8) + bios_ram[0xa];
- bt->par_port2 = (bios_ram[0xd] << 8) + bios_ram[0xc];
-
- bt->led.scroll_lock = bios_ram[0x97] & 1;
- bt->led.num_lock = (bios_ram[0x97] >> 1) & 1;
- bt->led.caps_lock = (bios_ram[0x97] >> 2) & 1;
- bt->led.ok = 1;
-
- /*
- * do some consistency checks:
- *
- * ports must be < 0x1000 and not appear twice
- */
- if(bt->ser_port0 >= 0x1000) bt->ser_port0 = 0;
-
- if(
- bt->ser_port1 >= 0x1000 ||
- bt->ser_port1 == bt->ser_port0
- ) bt->ser_port1 = 0;
-
- if(
- bt->ser_port2 >= 0x1000 ||
- bt->ser_port2 == bt->ser_port0 ||
- bt->ser_port2 == bt->ser_port1
- ) bt->ser_port2 = 0;
-
- if(
- bt->ser_port3 >= 0x1000 ||
- bt->ser_port3 == bt->ser_port0 ||
- bt->ser_port3 == bt->ser_port1 ||
- bt->ser_port3 == bt->ser_port2
- ) bt->ser_port3 = 0;
-
- if(bt->par_port0 >= 0x1000) bt->par_port0 = 0;
-
- if(
- bt->par_port1 >= 0x1000 ||
- bt->par_port1 == bt->par_port0
- ) bt->par_port1 = 0;
-
- if(
- bt->par_port2 >= 0x1000 ||
- bt->par_port2 == bt->par_port0 ||
- bt->par_port2 == bt->par_port1
- ) bt->par_port2 = 0;
-
- ADD2LOG(" bios: %u disks\n", bios_ram[0x75]);
-
- bt->low_mem_size = ((bios_ram[0x14] << 8) + bios_ram[0x13]) << 10;
-
- if(bt->low_mem_size) {
- ADD2LOG(" bios: %uk low mem\n", bt->low_mem_size >> 10);
- }
-
- /* too unusual */
- if(bt->low_mem_size >= (768 << 10) || bt->low_mem_size < (384 << 10)) {
- bt->low_mem_size = 0;
- }
-
- hd_data->bios_ebda.start = hd_data->bios_ebda.size = 0;
- hd_data->bios_ebda.data = free_mem(hd_data->bios_ebda.data);
- u = ((bios_ram[0x0f] << 8) + bios_ram[0x0e]) << 4;
- if(u) {
- hd_data->bios_ebda.start = u;
- hd_data->bios_ebda.size = 1; /* just one byte */
- read_memory(hd_data, &hd_data->bios_ebda);
- if(hd_data->bios_ebda.data) {
- u1 = hd_data->bios_ebda.data[0];
- if(u1 > 0 && u1 <= 64) { /* be sensible, typically only 1k */
- u1 <<= 10;
- if(u + u1 <= (1 << 20)) {
- hd_data->bios_ebda.size = u1;
- read_memory(hd_data, &hd_data->bios_ebda);
- }
- }
- }
- }
-
- if(hd_data->bios_ebda.data) {
- ADD2LOG(
- " bios: EBDA 0x%05x bytes at 0x%05x\n",
- hd_data->bios_ebda.size, hd_data->bios_ebda.start
- );
- }
- }
-
- /*
- * read the bios rom and look for useful things there...
- */
- PROGRESS(2, 0, "rom");
-
- if(hd_data->bios_rom.data) {
- get_pnp_support_status(&hd_data->bios_rom, bt);
- smbios_get_info(hd_data, &hd_data->bios_rom, bt);
- get_fsc_info(hd_data, &hd_data->bios_rom, bt);
- add_panel_info(hd_data, bt);
- add_mouse_info(hd_data, bt);
- }
-
- PROGRESS(3, 0, "smp");
-
- smp_ok = 0;
-
- mem = hd_data->bios_ebda;
- smp_ok = get_smp_info(hd_data, &mem, &bt->smp);
-
- if(!smp_ok) {
- mem = hd_data->bios_rom;
- if(mem.data) {
- mem.size -= 0xf0000 - mem.start;
- mem.data += 0xf0000 - mem.start;
- mem.start = 0xf0000;
- if(mem.size < (1 << 20)) smp_ok = get_smp_info(hd_data, &mem, &bt->smp);
- }
- }
-
- if(!smp_ok) {
- mem.size = 1 << 10;
- mem.start = 639 << 10;
- mem.data = NULL;
- read_memory(hd_data, &mem);
- if(mem.data) smp_ok = get_smp_info(hd_data, &mem, &bt->smp);
- mem.data = free_mem(mem.data);
- }
-
- if(bt->smp.ok && bt->smp.mpconfig) {
- mem.start = bt->smp.mpconfig;
- mem.size = 1 << 16;
- mem.data = NULL;
- read_memory(hd_data, &mem);
- parse_mpconfig(hd_data, &mem, &bt->smp);
- mem.data = free_mem(mem.data);
- }
-
- if((hd_data->debug & HD_DEB_BIOS)) {
- dump_memory(hd_data, &hd_data->bios_ram, 0, "BIOS data");
- dump_memory(hd_data, &hd_data->bios_ebda, hd_data->bios_ebda.size <= (8 << 10) ? 0 : 1, "EBDA");
- // dump_memory(hd_data, &hd_data->bios_rom, 1, "BIOS ROM");
-
- if(bt->smp.ok && bt->smp.mpfp) {
- mem.start = bt->smp.mpfp;
- mem.size = 0x10;
- mem.data = NULL;
- read_memory(hd_data, &mem);
- dump_memory(hd_data, &mem, 0, "MP FP");
- mem.data = free_mem(mem.data);
- }
-
- if(bt->smp.ok && bt->smp.mpconfig && bt->smp.mpconfig_size) {
- mem.start = bt->smp.mpconfig;
- mem.size = bt->smp.mpconfig_size;
- mem.data = NULL;
- read_memory(hd_data, &mem);
- dump_memory(hd_data, &mem, 0, "MP config table");
- mem.data = free_mem(mem.data);
- }
- }
-
-#ifndef LIBHD_TINY
- if(hd_probe_feature(hd_data, pr_bios_vesa)) {
- PROGRESS(4, 0, "vbe");
-
- vbe = &bt->vbe;
- vbe->ok = 0;
-
- if(!hd_data->klog) read_klog(hd_data);
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(sscanf(sl->str, "<6>PCI: Using configuration type %u", &u) == 1) {
- hd_data->pci_config_type = u;
- ADD2LOG(" klog: pci config type %u\n", hd_data->pci_config_type);
- }
- }
-
- get_vbe_info(hd_data, vbe);
-
- if(vbe->ok) {
- bt->vbe_ver = vbe->version;
- }
-
- if(vbe->ok && vbe->fb_start) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_framebuffer;
- hd->sub_class.id = sc_fb_vesa;
-
- hd_set_hw_class(hd, hw_vbe);
-
-#if 0
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_bios;
- hd->detail->bios.data = bt = new_mem(sizeof *bt);
-#endif
-
- hd->vendor.name = new_str(vbe->vendor_name);
- hd->device.name = new_str(vbe->product_name);
- hd->sub_vendor.name = new_str(vbe->oem_name);
- hd->revision.name = new_str(vbe->product_revision);
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->phys_mem.type = res_phys_mem;
- res->phys_mem.range = vbe->memory;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->mem.type = res_mem;
- res->mem.base = vbe->fb_start;
- res->mem.range = vbe->memory;
- res->mem.access = acc_rw;
- res->mem.enabled = 1;
-
- if(vbe->mode) {
- for(u = 0; u < vbe->modes; u++) {
- mi = vbe->mode + u;
- if(
- (mi->attributes & 1) && /* mode supported */
- mi->fb_start &&
- mi->pixel_size != -1u /* text mode */
- ) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->framebuffer.type = res_framebuffer;
- res->framebuffer.width = mi->width;
- res->framebuffer.bytes_p_line = mi->bytes_p_line;
- res->framebuffer.height = mi->height;
- res->framebuffer.colorbits = mi->pixel_size;
- res->framebuffer.mode = mi->number + 0x200;
- }
- }
- }
-
-#if 0
- if(
- hd->vend_name &&
- !strcmp(hd->vend_name, "Matrox") &&
- hd->device.name &&
- (
- strstr(hd->dev_name, "G200") ||
- strstr(hd->dev_name, "G400") ||
- strstr(hd->dev_name, "G450")
- )
- ) {
- hd->broken = 1;
- }
-#endif
-
- }
- }
-#endif /* LIBHD_TINY */
-
- PROGRESS(5, 0, "32");
-
- mem = hd_data->bios_rom;
- if(mem.data) {
- mem.size -= 0xe0000 - mem.start;
- mem.data += 0xe0000 - mem.start;
- mem.start = 0xe0000;
- if(mem.size < (1 << 20)) get_bios32_info(hd_data, &mem, &bt->bios32);
- }
-
- if(bt->bios32.ok) {
- mem = hd_data->bios_rom;
-
- if(
- mem.start <= 0xfffea &&
- mem.start + mem.size >= 0xfffea + 6 &&
- !memcmp(mem.data + 0xfffea - mem.start, "COMPAQ", 6)
- ) {
- bt->bios32.compaq = 1;
- ADD2LOG(" bios32: compaq machine\n");
- }
- }
-
-}
-
-
-void read_memory(hd_data_t *hd_data, memory_range_t *mem)
-{
-#ifdef BIOS_TEST
- char *s = getenv("LIBHD_MEM");
-#endif
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, ">%p\n", CALLED_FROM(read_memory, mem));
- }
-#endif
-
- if(mem->data) free_mem(mem->data);
- mem->data = new_mem(mem->size);
-#ifdef BIOS_TEST
- hd_read_mmap(hd_data, s ?: DEV_MEM, mem->data, mem->start, mem->size);
-#else
- hd_read_mmap(hd_data, DEV_MEM, mem->data, mem->start, mem->size);
-#endif
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(read_memory, mem));
- }
-#endif
-}
-
-
-void dump_memory(hd_data_t *hd_data, memory_range_t *mem, int sparse, char *label)
-{
- unsigned u, step;
-
- if(!mem->size || !mem->data) return;
-
-#if 1
- step = sparse ? 0x1000 : 0x10;
-#else
- step = 0x10;
-#endif
-
- ADD2LOG("----- %s 0x%05x - 0x%05x -----\n", label, mem->start, mem->start + mem->size - 1);
- for(u = 0; u < mem->size; u += step) {
- ADD2LOG(" %03x ", u + mem->start);
- hexdump(&hd_data->log, 1, mem->size - u > 0x10 ? 0x10 : mem->size - u, mem->data + u);
- ADD2LOG("\n");
- }
- ADD2LOG("----- %s end -----\n", label);
-}
-
-
-void get_pnp_support_status(memory_range_t *mem, bios_info_t *bt)
-{
- int i;
- unsigned char pnp[4] = { '$', 'P', 'n', 'P' };
- unsigned char *t;
- unsigned l, cs;
-
- if(!mem->data) return;
-
- for(i = 0xf0000 - mem->start; (unsigned) i < mem->size; i += 0x10) {
- t = mem->data + i;
- if(t[0] == pnp[0] && t[1] == pnp[1] && t[2] == pnp[2] && t[3] == pnp[3]) {
- for(l = cs = 0; l < t[5]; l++) { cs += t[l]; }
- if((cs & 0xff) == 0) { // checksum ok
- bt->is_pnp_bios = 1;
-// printf("0x%x bytes at 0x%x, cs = 0x%x\n", t[5], i, cs);
- bt->pnp_id = t[0x17] + (t[0x18] << 8) + (t[0x19] << 16) + (t[0x20] << 24);
- }
- }
- }
-}
-
-unsigned char crc(unsigned char *mem, unsigned len)
-{
- unsigned char uc = 0;
-
- while(len--) uc += *mem++;
-
- return uc;
-}
-
-
-void smbios_get_info(hd_data_t *hd_data, memory_range_t *mem, bios_info_t *bt)
-{
- unsigned u, u1, u2, ok, hlen = 0, ofs;
- unsigned addr = 0, len = 0, scnt;
- unsigned structs = 0, type, slen;
- char *s;
- memory_range_t memory;
- hd_smbios_t *sm;
-
- if(!mem->data || mem->size < 0x100) return;
-
- for(u = ok = 0; u <= mem->size - 0x100; u += 0x10) {
- if(*(unsigned *) (mem->data + u) == 0x5f4d535f) { /* "_SM_" */
- hlen = mem->data[u + 5];
- addr = *(unsigned *) (mem->data + u + 0x18);
- len = *(unsigned short *) (mem->data + u + 0x16);
- structs = *(unsigned short *) (mem->data + u + 0x1c);
- if(hlen < 0x1e) continue;
- ok = crc(mem->data + u, hlen) == 0 && addr < (1 << 20) && len;
- if(ok) break;
- }
- }
-
- if(!ok) return;
-
- bt->smbios_ver = (mem->data[u + 6] << 8) + mem->data[u + 7];
-
- hd_data->smbios = smbios_free(hd_data->smbios);
-
- memory.start = mem->start + u;
- memory.size = hlen;
- memory.data = mem->data + u;
- dump_memory(hd_data, &memory, 0, "SMBIOS Entry Point");
-
- memory.start = addr;
- memory.size = len;
- memory.data = NULL;
- read_memory(hd_data, &memory);
- if(len >= 0x4000) {
- ADD2LOG(
- " SMBIOS Structure Table at 0x%05x (size 0x%x)\n",
- addr, len
- );
- }
- else {
- dump_memory(hd_data, &memory, 0, "SMBIOS Structure Table");
- }
-
- for(type = 0, u = 0, ofs = 0; u < structs && ofs + 3 < len; u++) {
- type = memory.data[ofs];
- slen = memory.data[ofs + 1];
- if(ofs + slen > len || slen < 4) break;
- sm = smbios_add_entry(&hd_data->smbios, new_mem(sizeof *sm));
- sm->any.type = type;
- sm->any.data_len = slen;
- sm->any.data = new_mem(slen);
- memcpy(sm->any.data, memory.data + ofs, slen);
- sm->any.handle = memory.data[ofs + 2] + (memory.data[ofs + 3] << 8);
- ADD2LOG(" type 0x%02x [0x%04x]: ", type, sm->any.handle);
- if(slen) hexdump(&hd_data->log, 0, slen, sm->any.data);
- ADD2LOG("\n");
- if(type == sm_end) break;
- ofs += slen;
- u1 = ofs;
- u2 = 1;
- scnt = 0;
- while(ofs + 1 < len) {
- if(!memory.data[ofs]) {
- if(ofs > u1) {
- s = canon_str(memory.data + u1, strlen(memory.data + u1));
- add_str_list(&sm->any.strings, s);
- scnt++;
- if(*s) ADD2LOG(" str%d: \"%s\"\n", scnt, s);
- free_mem(s);
- u1 = ofs + 1;
- u2++;
- }
- if(!memory.data[ofs + 1]) {
- ofs += 2;
- break;
- }
- }
- ofs++;
- }
- }
-
- if(u != structs) {
- if(type == sm_end) {
- ADD2LOG(" smbios: stopped at end tag\n");
- }
- else {
- ADD2LOG(" smbios oops: only %d of %d structs found\n", u, structs);
- }
- }
-
- memory.data = free_mem(memory.data);
-
- smbios_parse(hd_data);
-}
-
-
-void get_fsc_info(hd_data_t *hd_data, memory_range_t *mem, bios_info_t *bt)
-{
- unsigned u, mtype, fsc_id;
- unsigned x, y;
- hd_smbios_t *sm;
- char *vendor = NULL;
-
- if(!mem->data || mem->size < 0x20) return;
-
- for(sm = hd_data->smbios; sm; sm = sm->next) {
- if(sm->any.type == sm_sysinfo) {
- vendor = sm->sysinfo.manuf;
- break;
- }
- }
-
- vendor = vendor && !strcasecmp(vendor, "Fujitsu") ? "Fujitsu" : "Fujitsu Siemens";
-
- for(u = 0; u <= mem->size - 0x20; u += 0x10) {
- if(
- *(unsigned *) (mem->data + u) == 0x696a7546 &&
- *(unsigned *) (mem->data + u + 4) == 0x20757374
- ) {
- mtype = *(unsigned *) (mem->data + u + 0x14);
- if(!crc(mem->data + u, 0x20) && !(mtype & 0xf0000000)) {
- fsc_id = (mtype >> 12) & 0xf;
-
- switch(fsc_id) {
- case 1:
- x = 640; y = 480;
- break;
-
- case 2:
- x = 800; y = 600;
- break;
-
- case 3:
- x = 1024; y = 768;
- break;
-
- case 4:
- x = 1280; y = 1024;
- break;
-
- case 5:
- x = 1400; y = 1050;
- break;
-
- case 6:
- x = 1024; y = 512;
- break;
-
- case 7:
- x = 1280; y = 600;
- break;
-
- case 8:
- x = 1600; y = 1200;
- break;
-
- default:
- x = 0; y = 0;
- }
-
- if(x) {
- bt->lcd.vendor = new_str(vendor);
- bt->lcd.name = new_str("Notebook LCD");
- bt->lcd.width = x;
- bt->lcd.height = y;
- }
-
- ADD2LOG(" found FSC LCD: %d (%ux%u)\n", fsc_id, x, y);
- break;
- }
- }
- }
-}
-
-
-void add_panel_info(hd_data_t *hd_data, bios_info_t *bt)
-{
- unsigned width, height;
- char *vendor, *name, *version;
- hd_smbios_t *sm;
- unsigned u;
-
- if(bt->lcd.width || !hd_data->smbios) return;
-
- vendor = name = version = NULL;
- width = height = 0;
-
- for(sm = hd_data->smbios; sm; sm = sm->next) {
- if(sm->any.type == sm_sysinfo) {
- vendor = sm->sysinfo.manuf;
- name = sm->sysinfo.product;
- version = sm->sysinfo.version;
- break;
- }
- }
-
- if(!vendor || !name) return;
-
- for(u = 0; u < sizeof panel_data / sizeof *panel_data; u++) {
- if(
- !strcmp(vendor, panel_data[u].vendor) &&
- !strcmp(name, panel_data[u].name) &&
- (version || !panel_data[u].version) &&
- (!version || !panel_data[u].version || !strcmp(version, panel_data[u].version))
- ) {
- bt->lcd.vendor = new_str(vendor);
- bt->lcd.name = new_str("Notebook LCD");
- bt->lcd.width = panel_data[u].width;
- bt->lcd.height = panel_data[u].height;
- break;
- }
- }
-}
-
-
-void add_mouse_info(hd_data_t *hd_data, bios_info_t *bt)
-{
- unsigned compat_vend, compat_dev, bus;
- char *vendor, *name, *type;
- hd_smbios_t *sm;
-
- if(bt->mouse.compat_vend || !hd_data->smbios) return;
-
- vendor = name = type = NULL;
- compat_vend = compat_dev = bus = 0;
-
- for(sm = hd_data->smbios; sm; sm = sm->next) {
- if(sm->any.type == sm_sysinfo) {
- vendor = sm->sysinfo.manuf;
- name = sm->sysinfo.product;
- }
- if(
- sm->any.type == sm_mouse &&
- !compat_vend /* take the first entry */
- ) {
- compat_vend = compat_dev = bus = 0;
- type = NULL;
-
- switch(sm->mouse.interface.id) {
- case 4: /* ps/2 */
- case 7: /* bus mouse (dell notebooks report this) */
- bus = bus_ps2;
- compat_vend = MAKE_ID(TAG_SPECIAL, 0x0200);
- compat_dev = MAKE_ID(TAG_SPECIAL, sm->mouse.buttons == 3 ? 0x0007 : 0x0006);
- break;
- }
- type = sm->mouse.mtype.name;
- if(sm->mouse.mtype.id == 1) type = "Touch Pad"; /* Why??? */
- if(sm->mouse.mtype.id == 2) type = NULL; /* "Other" */
- }
- }
-
- if(!vendor || !name) return;
-
- if(!type) {
- if(!strcmp(vendor, "Sony Corporation") && strstr(name, "PCG-") == name) {
- bus = bus_ps2;
- type = "Touch Pad";
- compat_vend = MAKE_ID(TAG_SPECIAL, 0x0200);
- compat_dev = MAKE_ID(TAG_SPECIAL, 0x0006);
- }
- }
-
- if(!type) return;
-
- bt->mouse.vendor = new_str(vendor);
- bt->mouse.type = new_str(type);
- bt->mouse.bus = bus;
- bt->mouse.compat_vend = compat_vend;
- bt->mouse.compat_dev = compat_dev;
-}
-
-
-int get_smp_info(hd_data_t *hd_data, memory_range_t *mem, smp_info_t *smp)
-{
-#ifndef __ia64__
- unsigned u, ok;
- unsigned addr = 0, len;
-
- if(mem->size < 0x10) return 0;
-
- for(u = ok = 0; u <= mem->size - 0x10; u++) {
- if(*(unsigned *) (mem->data + u) == 0x5f504d5f) { /* "_MP_" */
- addr = *(unsigned *) (mem->data + u + 4);
- len = mem->data[u + 8];
- ok = len == 1 && crc(mem->data + u, 0x10) == 0 && addr < (1 << 20) ? 1 : 0;
- ADD2LOG(
- " smp: %svalid MP FP at 0x%05x (size 0x%x, rev %u), MP config at 0x%05x\n",
- ok ? "" : "in", u + mem->start, len << 4, mem->data[u + 9], addr
- );
- if(ok) break;
- }
- }
-
- if(ok) {
- smp->ok = 1;
- smp->mpfp = mem->start + u;
- smp->rev = mem->data[u + 9];
- smp->mpconfig = addr;
- memcpy(smp->feature, mem->data + u + 11, 5);
- }
-
- return ok;
-#else
- return 0;
-#endif
-}
-
-
-void parse_mpconfig(hd_data_t *hd_data, memory_range_t *mem, smp_info_t *smp)
-{
- unsigned cfg_len, xcfg_len;
- unsigned char u0, ux0;
- unsigned u, type, len, entries, entry_cnt;
- char *s;
-
- cfg_len = xcfg_len = 0;
-
- if(*(unsigned *) (mem->data) == 0x504d4350) { /* "PCMP" */
- cfg_len = mem->data[0x04] + (mem->data[0x05] << 8);
- smp->mpconfig_size = cfg_len;
- u0 = crc(mem->data, cfg_len);
- if(u0) return;
- smp->mpconfig_ok = 1;
- smp->cpus = smp->cpus_en = 0;
- xcfg_len = mem->data[0x28] + (mem->data[0x29] << 8);
- ux0 = crc(mem->data + cfg_len, xcfg_len) + mem->data[0x2a];
- if(!ux0) {
- smp->mpconfig_size += xcfg_len;
- }
- else {
- xcfg_len = 0;
- }
- }
-
- if(cfg_len) {
- s = canon_str(mem->data + 8, 8);
- strcpy(smp->oem_id, s);
- free_mem(s);
- s = canon_str(mem->data + 0x10, 12);
- strcpy(smp->prod_id, s);
- s = free_mem(s);
-
- entries = mem->data[0x22] + (mem->data[0x23] << 8);
- ADD2LOG(" base MP config table (%u entries):\n", entries);
- entry_cnt = 0;
- for(u = 0x2c; u < cfg_len - 1; u += len, entry_cnt++) {
- type = mem->data[u];
- len = type == 0 ? 20 : type <= 4 ? 8 : 16;
- ADD2LOG(" %stype %u, len %u\n ", type > 4 ? "unknown ": "", type, len);
- if(len + u > cfg_len) len = cfg_len - u;
- hexdump(&hd_data->log, 1, len, mem->data + u);
- ADD2LOG("\n");
- if(type > 4) break;
- if(type == 0) {
- smp->cpus++;
- if((mem->data[u + 3] & 1)) smp->cpus_en++;
- }
- }
- if(entry_cnt != entries) {
- ADD2LOG(" oops: %u entries instead of %u found\n", entry_cnt, entries);
- }
- }
-
- if(xcfg_len) {
- ADD2LOG(" extended MP config table:\n");
- for(u = 0; u < xcfg_len - 2; u += len) {
- type = mem->data[u + cfg_len];
- len = mem->data[u + cfg_len + 1];
- ADD2LOG(" type %u, len %u\n ", type, len);
- if(len + u > xcfg_len) len = xcfg_len - u;
- hexdump(&hd_data->log, 1, len, mem->data + cfg_len + u);
- ADD2LOG("\n");
- if(len < 2) {
- ADD2LOG(" oops: invalid record lenght\n");
- break;
- }
- }
- }
-}
-
-
-int get_bios32_info(hd_data_t *hd_data, memory_range_t *mem, bios32_info_t *bios32)
-{
- unsigned u, ok;
- unsigned addr = 0, len;
-
- if(mem->size < 0x10) return 0;
-
- for(u = ok = 0; u <= mem->size - 0x10; u += 0x10) {
- if(*(unsigned *) (mem->data + u) == 0x5f32335f) { /* "_32_" */
- addr = *(unsigned *) (mem->data + u + 4);
- len = mem->data[u + 9];
- ok = len == 1 && crc(mem->data + u, 0x10) == 0 && addr < (1 << 20) ? 1 : 0;
- ADD2LOG(
- " bios32: %svalid SD header at 0x%05x (size 0x%x, rev %u), SD at 0x%05x\n",
- ok ? "" : "in", u + mem->start, len << 4, mem->data[u + 8], addr
- );
- if(ok) break;
- }
- }
-
- if(ok) {
- bios32->ok = 1;
- bios32->entry = addr;
- }
-
- return ok;
-}
-
-
-#endif /* defined(__i386__) || defined (__x86_64__) */
-
+++ /dev/null
-#define BIOS_ROM_START 0xc0000
-#define BIOS_ROM_SIZE 0x40000
-
-#define BIOS_RAM_START 0x400
-#define BIOS_RAM_SIZE 0x100
-
-void hd_scan_bios(hd_data_t *hd_data);
-void get_vbe_info(hd_data_t *hd_data, vbe_info_t *vbe);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <linux/iso_fs.h>
-#include <scsi/sg.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "block.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * block device stuff
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static void get_block_devs(hd_data_t *hd_data);
-static void add_partitions(hd_data_t *hd_data, hd_t *hd, char *path);
-static void add_cdrom_info(hd_data_t *hd_data, hd_t *hd);
-static void add_other_sysfs_info(hd_data_t *hd_data, hd_t *hd, struct sysfs_device *sf_dev);
-static void add_ide_sysfs_info(hd_data_t *hd_data, hd_t *hd, struct sysfs_device *sf_dev);
-static void add_scsi_sysfs_info(hd_data_t *hd_data, hd_t *hd, struct sysfs_device *sf_dev);
-static void read_partitions(hd_data_t *hd_data);
-static void read_cdroms(hd_data_t *hd_data);
-static cdrom_info_t *new_cdrom_entry(cdrom_info_t **ci);
-static cdrom_info_t *get_cdrom_entry(cdrom_info_t *ci, int n);
-static void get_scsi_tape(hd_data_t *hd_data);
-static void get_generic_scsi_devs(hd_data_t *hd_data);
-static void add_disk_size(hd_data_t *hd_data, hd_t *hd);
-
-
-void hd_scan_sysfs_block(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_block)) return;
-
- hd_data->module = mod_block;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- hd_data->disks = free_str_list(hd_data->disks);
- hd_data->partitions = free_str_list(hd_data->partitions);
- hd_data->cdroms = free_str_list(hd_data->cdroms);
-
- if(hd_probe_feature(hd_data, pr_block_mods)) {
- PROGRESS(1, 0, "block modules");
- load_module(hd_data, "ide_cd");
- load_module(hd_data, "sr_mod");
- load_module(hd_data, "sd_mod");
- load_module(hd_data, "st");
- }
-
- PROGRESS(2, 0, "sysfs drivers");
-
- hd_sysfs_driver_list(hd_data);
-
- PROGRESS(3, 0, "cdrom");
-
- read_cdroms(hd_data);
-
- PROGRESS(4, 0, "partition");
-
- read_partitions(hd_data);
-
- PROGRESS(5, 0, "get sysfs block dev data");
-
- get_block_devs(hd_data);
-
- if(hd_data->cdrom) {
- ADD2LOG("oops: cdrom list not empty\n");
- }
-}
-
-
-void get_block_devs(hd_data_t *hd_data)
-{
- str_list_t *sl;
- char *s, *t;
- unsigned u1, u2, u3;
- uint64_t ul0;
- hd_t *hd, *hd1;
- hd_dev_num_t dev_num;
-
- struct sysfs_bus *sf_bus;
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct dlist *sf_cdev_list;
- struct dlist *sf_ide_list = NULL;
- struct sysfs_device *sf_ide;
-
- sf_bus = sysfs_open_bus("ide");
- if(sf_bus) {
- sf_ide_list = sysfs_get_bus_devices(sf_bus);
- if(sf_ide_list) dlist_for_each_data(sf_ide_list, sf_ide, struct sysfs_device) {
- ADD2LOG(
- " ide: bus_id = %s path = %s\n",
- sf_ide->bus_id,
- hd_sysfs_id(sf_ide->path)
- );
- }
- }
-
- sf_class = sysfs_open_class("block");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: block\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- ADD2LOG(
- " block: name = %s, path = %s\n",
- sf_cdev->name,
- hd_sysfs_id(sf_cdev->path)
- );
-
- memset(&dev_num, 0, sizeof dev_num);
-
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "dev")))) {
- if(sscanf(s, "%u:%u", &u1, &u2) == 2) {
- dev_num.type = 'b';
- dev_num.major = u1;
- dev_num.minor = u2;
- dev_num.range = 1;
- }
- ADD2LOG(" dev = %u:%u\n", u1, u2);
- }
-
- if(hd_attr_uint(sysfs_get_classdev_attr(sf_cdev, "range"), &ul0, 0)) {
- dev_num.range = ul0;
- ADD2LOG(" range = %u\n", dev_num.range);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- ADD2LOG(
- " block device: bus = %s, bus_id = %s driver = %s\n path = %s\n",
- sf_dev->bus,
- sf_dev->bus_id,
- sf_dev->driver_name,
- hd_sysfs_id(sf_dev->path)
- );
- }
-
- hd = NULL;
-
- /* check if disk is DASD and has already been found by s390.c */
- if(sf_dev && sf_dev->driver_name && strstr(sf_dev->driver_name,"dasd"))
- {
- char bid[9];
- hd_res_t* res;
- //fprintf(stderr,"dn %s bi %s\n",sf_dev->driver_name,sf_dev->bus_id);
- for(hd=hd_data->hd;hd;hd=hd->next)
- {
- //fprintf(stderr,"bcid %d\n",hd->base_class.id);
- if(hd->base_class.id == bc_storage_device
- && hd->detail
- && hd->detail->ccw.type == hd_detail_ccw)
- {
- for(res=hd->res;res;res=res->next)
- {
- if(res->io.type==res_io)
- {
- sprintf(bid,"%01x.%01x.%04x",
- hd->detail->ccw.data->lcss >> 8,
- hd->detail->ccw.data->lcss & 0xff,
- (unsigned short)res->io.base);
- //fprintf(stderr,"bid %s\n",bid);
- if (strcmp(bid,sf_dev->bus_id)==0) goto out;
- }
- }
- }
- }
- hd=NULL;
- out:;
- }
- else if((sl = search_str_list(hd_data->disks, hd_sysfs_name2_dev(sf_cdev->name)))) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->sub_class.id = sc_sdev_disk;
- }
- else if((sl = search_str_list(hd_data->cdroms, hd_sysfs_name2_dev(sf_cdev->name)))) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->sub_class.id = sc_sdev_cdrom;
- }
- else if(
- sf_dev &&
- sf_dev->bus &&
- (!strcmp(sf_dev->bus, "scsi") || !strcmp(sf_dev->bus, "ide"))
- ) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->sub_class.id = sc_sdev_other;
- }
-
- if(hd) {
- str_printf(&hd->unix_dev_name, 0, "/dev/%s", hd_sysfs_name2_dev(sf_cdev->name));
-
- hd->base_class.id = bc_storage_device;
-
- hd->sysfs_id = new_str(hd_sysfs_id(sf_cdev->path));
-
- if(sf_dev) hd->sysfs_device_link = new_str(hd_sysfs_id(sf_dev->path));
-
- hd->unix_dev_num = dev_num;
-
- hd->bus.id = bus_none;
-
- if(sf_dev) {
- if(sf_dev->bus) {
- if(!strcmp(sf_dev->bus, "ide")) hd->bus.id = bus_ide;
- else if(!strcmp(sf_dev->bus, "scsi")) hd->bus.id = bus_scsi;
- }
- hd->sysfs_bus_id = new_str(sf_dev->bus_id);
- }
-
- if(sf_dev && (s = hd_sysfs_id(sf_dev->path))) {
-
- /* parent has longest matching sysfs id */
- u2 = strlen(s);
- for(u3 = 0, hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->sysfs_id) {
- u1 = strlen(hd1->sysfs_id);
- if(u1 > u3 && u1 <= u2 && !strncmp(s, hd1->sysfs_id, u1)) {
- u3 = u1;
- hd->attached_to = hd1->idx;
- }
- }
- }
-
- /* find longest matching sysfs id we have a driver for */
- s = new_str(s);
- t = strrchr(s, '/');
- if(t) *t = 0;
- t = hd_sysfs_find_driver(hd_data, s, 0);
- if(t) {
- add_str_list(&hd->drivers, t);
- }
- s = free_mem(s);
-
- /* look for ide-scsi handled devices */
- if(hd->bus.id == bus_scsi) {
- if(sf_ide_list) dlist_for_each_data(sf_ide_list, sf_ide, struct sysfs_device) {
- if(
- strcmp(sf_dev->path, sf_ide->path) &&
- !strncmp(sf_dev->path, sf_ide->path, strlen(sf_ide->path)) &&
- sscanf(sf_ide->bus_id, "%u.%u", &u1, &u2) == 2
- ) {
- str_printf(&hd->unix_dev_name2, 0, "/dev/hd%c", 'a' + (u1 << 1) + u2);
- }
- }
- }
- }
-
- /*
- * set hd->drivers before calling any of add_xxx_sysfs_info()
- */
- if(
- sf_dev &&
- sf_dev->driver_name &&
- *sf_dev->driver_name &&
- strcmp(sf_dev->driver_name, "unknown")
- ) {
- add_str_list(&hd->drivers, sf_dev->driver_name);
- }
-
- if(hd->bus.id == bus_ide) {
- add_ide_sysfs_info(hd_data, hd, sf_dev);
- }
- else if(hd->bus.id == bus_scsi) {
- add_scsi_sysfs_info(hd_data, hd, sf_dev);
- }
- else {
- add_other_sysfs_info(hd_data, hd, sf_dev);
- }
-
-
- if(hd->sub_class.id == sc_sdev_cdrom) {
- add_cdrom_info(hd_data, hd);
- }
-
- if(
- hd->sub_class.id == sc_sdev_disk &&
- hd_probe_feature(hd_data, pr_block_part)
- ) {
- add_partitions(hd_data, hd, sf_cdev->path);
- }
-
- }
-
- }
-
- sysfs_close_class(sf_class);
-
- sysfs_close_bus(sf_bus);
-}
-
-
-/*
- * Find driver for sysfs_id.
- *
- * Return driver for id (exact = 1) or longest matching id (exact = 0).
- */
-char *hd_sysfs_find_driver(hd_data_t *hd_data, char *sysfs_id, int exact)
-{
- hd_sysfsdrv_t *sf;
- char *t;
- unsigned u1, u2, u3;
-
- if(!sysfs_id || !*sysfs_id) return NULL;
-
- t = NULL;
-
- if(exact) {
- for(sf = hd_data->sysfsdrv; sf; sf = sf->next) {
- if(!strcmp(sysfs_id, sf->device)) {
- t = sf->driver;
- break;
- }
- }
- }
- else {
- u2 = strlen(sysfs_id);
- u3 = 0;
- for(sf = hd_data->sysfsdrv; sf; sf = sf->next) {
- u1 = strlen(sf->device);
- if(u1 > u3 && u1 <= u2 && !strncmp(sysfs_id, sf->device, u1)) {
- u3 = u1;
- t = sf->driver;
- }
- }
- }
-
- return t;
-}
-
-
-void add_partitions(hd_data_t *hd_data, hd_t *hd, char *path)
-{
- hd_t *hd1;
- str_list_t *sl;
- char *s;
- size_t len;
-
- s = hd->unix_dev_name + sizeof "/dev/" - 1;
- len = strlen(s);
- for(sl = hd_data->partitions; sl; sl = sl->next) {
- if(!strncmp(sl->str, s, len)) {
- hd1 = add_hd_entry(hd_data, __LINE__, 0);
- hd1->base_class.id = bc_partition;
- str_printf(&hd1->unix_dev_name, 0, "/dev/%s", sl->str);
- hd1->attached_to = hd->idx;
-
- str_printf(&hd1->sysfs_id, 0, "%s/%s", hd->sysfs_id, hd_sysfs_dev2_name(sl->str));
- }
- }
-}
-
-
-void add_cdrom_info(hd_data_t *hd_data, hd_t *hd)
-{
- cdrom_info_t *ci, **prev;
-
- hd->detail = free_hd_detail(hd->detail);
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cdrom;
-
- for(ci = *(prev = &hd_data->cdrom); ci; ci = *(prev = &ci->next)) {
- if(!strcmp(hd->unix_dev_name + sizeof "/dev/" - 1, ci->name)) {
- hd->detail->cdrom.data = ci;
- *prev = ci->next;
- hd->detail->cdrom.data->next = NULL;
- break;
- }
- }
-
- if((ci = hd->detail->cdrom.data)) {
- /* update prog_if: cdr, cdrw, ... */
- if(
- /* ###### FIXME: dosn't work anyway: ide-scsi doesn't support sysfs */
- hd->bus.id == bus_scsi &&
- !search_str_list(hd->drivers, "ide-scsi") /* could be ide, though */
- ) {
- /* scsi devs lie */
- if(ci->dvd && (ci->cdrw || ci->dvdr || ci->dvdram)) {
- ci->dvd = ci->dvdr = ci->dvdram = 0;
- }
- ci->dvdr = ci->dvdram = 0;
- ci->cdr = ci->cdrw = 0;
- if(hd->prog_if.id == pif_cdr) ci->cdr = 1;
- }
-
- /* trust ide info */
- if(ci->dvd) {
- hd->is.dvd = 1;
- hd->prog_if.id = pif_dvd;
- }
- if(ci->cdr) {
- hd->is.cdr = 1;
- hd->prog_if.id = pif_cdr;
- }
- if(ci->cdrw) {
- hd->is.cdrw = 1;
- hd->prog_if.id = pif_cdrw;
- }
- if(ci->dvdr) {
- hd->is.dvdr = 1;
- hd->prog_if.id = pif_dvdr;
- }
- if(ci->dvdram) {
- hd->is.dvdram = 1;
- hd->prog_if.id = pif_dvdram;
- }
- }
-
- if(
- hd_probe_feature(hd_data, pr_block_cdrom) &&
- hd_report_this(hd_data, hd)
- ) {
- hd_read_cdrom_info(hd_data, hd);
- }
-}
-
-
-void add_other_sysfs_info(hd_data_t *hd_data, hd_t *hd, struct sysfs_device *sf_dev)
-{
- unsigned u0, u1;
- char c;
-
- if(hd->sysfs_id) {
- if(
- sscanf(hd->sysfs_id, "/block/cciss!c%ud%u", &u0, &u1) == 2
- ) {
- hd->slot = (u0 << 8) + u1;
- str_printf(&hd->device.name, 0, "CCISS disk %u/%u", u0, u1);
- }
- else if(
- sscanf(hd->sysfs_id, "/block/ida!c%ud%u", &u0, &u1) == 2
- ) {
- hd->slot = (u0 << 8) + u1;
- str_printf(&hd->device.name, 0, "SMART Array %u/%u", u0, u1);
- }
- else if(
- sscanf(hd->sysfs_id, "/block/rd!c%ud%u", &u0, &u1) == 2
- ) {
- hd->slot = (u0 << 8) + u1;
- str_printf(&hd->device.name, 0, "DAC960 RAID Array %u/%u", u0, u1);
- }
- else if(
- sscanf(hd->sysfs_id, "/block/i2o!hd%c", &c) == 1 &&
- c >= 'a'
- ) {
- hd->slot = c - 'a';
- str_printf(&hd->device.name, 0, "I2O disk %u", hd->slot);
- }
- else if(
- sscanf(hd->sysfs_id, "/block/dasd%c", &c) == 1 &&
- c >= 'a'
- ) {
- hd->slot = c - 'a';
- hd->device.name = new_str("S390 Disk");
- }
- }
-
- add_disk_size(hd_data, hd);
-}
-
-
-void add_ide_sysfs_info(hd_data_t *hd_data, hd_t *hd, struct sysfs_device *sf_dev)
-{
- char *fname = NULL, buf[256], *dev_name, *s;
- unsigned u0, u1, u2, size = 0;
- str_list_t *sl, *sl0;
- hd_res_t *res;
- FILE *f;
-
- if(!hd_report_this(hd_data, hd)) return;
-
- if(hd->sysfs_bus_id && sscanf(hd->sysfs_bus_id, "%u.%u", &u0, &u1) == 2) {
- /* host.master/slave */
- hd->slot = (u0 << 1) + u1;
- }
-
- if(
- hd->unix_dev_name &&
- strlen(hd->unix_dev_name) > 5
- ) {
- dev_name = hd->unix_dev_name + 5;
-
- str_printf(&fname, 0, PROC_IDE "/%s/media", dev_name);
- if((sl = read_file(fname, 0, 1))) {
-
- if(strstr(sl->str, "floppy"))
- hd->sub_class.id = sc_sdev_floppy;
- else if(strstr(sl->str, "cdrom"))
- hd->sub_class.id = sc_sdev_cdrom;
- else if(strstr(sl->str, "tape"))
- hd->sub_class.id = sc_sdev_tape;
-
- free_str_list(sl);
- }
-
- str_printf(&fname, 0, PROC_IDE "/%s/model", dev_name);
- if((sl = read_file(fname, 0, 1))) {
- hd->vendor.name = canon_str(sl->str, strlen(sl->str));
- if((s = strchr(hd->vendor.name, ' '))) {
- hd->device.name = canon_str(s, strlen(s));
- if(*hd->device.name) {
- *s = 0;
- }
- else {
- hd->device.name = free_mem(hd->device.name);
- }
- }
- if(!hd->device.name) {
- hd->device.name = hd->vendor.name;
- hd->vendor.name = NULL;
- }
-
- free_str_list(sl);
- }
-
- str_printf(&fname, 0, PROC_IDE "/%s/driver", dev_name);
- if((sl = read_file(fname, 0, 1))) {
- if((s = strchr(sl->str, ' '))) *s = 0;
- s = canon_str(sl->str, strlen(sl->str));
- add_str_list(&hd->drivers, s);
- s = free_mem(s);
- free_str_list(sl);
- }
-
- str_printf(&fname, 0, PROC_IDE "/%s/capacity", dev_name);
- if((sl = read_file(fname, 0, 1))) {
- if(sscanf(sl->str, "%u", &u0) == 1 && u0 != 0x7fffffff) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.unit = size_unit_sectors;
- res->size.val1 = size = u0;
- res->size.val2 = 512; // ####### FIXME: sector size?
- }
- free_str_list(sl);
- }
-
- str_printf(&fname, 0, PROC_IDE "/%s/geometry", dev_name);
- if((sl0 = read_file(fname, 0, 2))) {
- for(sl = sl0; sl; sl = sl->next) {
- if(sscanf(sl->str, " physical %u / %u / %u", &u0, &u1, &u2) == 3) {
- if(u0 || u1 || u2) {
- if(size && u1 && u2) {
- u0 = size / (u1 * u2);
- }
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = u0;
- res->disk_geo.heads = u1;
- res->disk_geo.sectors = u2;
- res->disk_geo.geotype = geo_physical;
- }
- continue;
- }
-
- if(sscanf(sl->str, " logical %u / %u / %u", &u0, &u1, &u2) == 3) {
- if(size && u1 && u2) {
- u0 = size / (u1 * u2);
- }
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = u0;
- res->disk_geo.heads = u1;
- res->disk_geo.sectors = u2;
- res->disk_geo.geotype = geo_logical;
- }
- }
- free_str_list(sl0);
- }
-
- str_printf(&fname, 0, PROC_IDE "/%s/cache", dev_name);
- if((sl = read_file(fname, 0, 1))) {
- if(sscanf(sl->str, "%u", &u0) == 1 && u0) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->cache.type = res_cache;
- res->cache.size = u0;
- }
- free_str_list(sl);
- }
-
- str_printf(&fname, 0, PROC_IDE "/%s/identify", dev_name);
- if((f = fopen(fname, "r"))) {
- u1 = 0;
- memset(buf, sizeof buf, 0);
- while(u1 < sizeof buf - 1 && fscanf(f, "%x", &u0) == 1) {
- buf[u1++] = u0 >> 8; buf[u1++] = u0;
- }
- fclose(f);
-
- /* ok, we now have the ATA/ATAPI ident block */
-
- if(buf[0x14] || buf[0x15]) { /* has serial id */
- hd->serial = canon_str(buf + 0x14, 20);
- }
- if(buf[0x2e] || buf[0x2f]) { /* has revision id */
- hd->revision.name = canon_str(buf + 0x2e, 8);
- }
- }
-
- free_mem(fname);
- }
-
- if(!size) add_disk_size(hd_data, hd);
-}
-
-
-/*
- * assumes hd->drivers aleady includes scsi device drivers (like 'sd')
- */
-void add_scsi_sysfs_info(hd_data_t *hd_data, hd_t *hd, struct sysfs_device *sf_dev)
-{
- hd_t *hd1;
- char *s, *t, *cs, *pr_str;
- unsigned u0, u1, u2, u3;
- int fd, k;
- unsigned char scsi_cmd_buf[0x300];
- struct sg_io_hdr hdr;
- unsigned char *uc;
- scsi_t *scsi;
- hd_res_t *geo, *size;
- uint64_t ul0;
-
- if(!hd_report_this(hd_data, hd)) return;
-
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_scsi;
- hd->detail->scsi.data = scsi = new_mem(sizeof *scsi);
-
- if(hd->sysfs_bus_id && sscanf(hd->sysfs_bus_id, "%u:%u:%u:%u", &u0, &u1, &u2, &u3) == 4) {
- /* host:channel:id:lun */
- hd->slot = (u0 << 8) + (u1 << 4) + u2;
- hd->func = u3;
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev, "vendor")))) {
- cs = canon_str(s, strlen(s));
- ADD2LOG(" vendor = %s\n", cs);
- if(*cs) {
- hd->vendor.name = cs;
- }
- else {
- free_mem(cs);
- }
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev, "model")))) {
- cs = canon_str(s, strlen(s));
- ADD2LOG(" model = %s\n", cs);
- if(*cs) {
- hd->device.name = cs;
- }
- else {
- free_mem(cs);
- }
-
- /* sata entries are somewhat strange... */
- if(
- hd->vendor.name &&
- !strcmp(hd->vendor.name, "ATA") &&
- hd->device.name
- ) {
- hd->bus.id = bus_ide;
-
- if((cs = strchr(hd->device.name, ' '))) {
- t = canon_str(cs, strlen(cs));
- if(*t) {
- *cs = 0;
- free_mem(hd->vendor.name);
- hd->vendor.name = hd->device.name;
- hd->device.name = t;
- }
- else {
- t = free_mem(t);
- }
- }
-
- if(!strcmp(hd->vendor.name, "ATA")) {
- hd->vendor.name = free_mem(hd->vendor.name);
- }
- }
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev, "rev")))) {
- cs = canon_str(s, strlen(s));
- ADD2LOG(" rev = %s\n", cs);
- if(*cs) {
- hd->revision.name = cs;
- }
- else {
- free_mem(cs);
- }
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "type"), &ul0, 0)) {
- ADD2LOG(" type = %u\n", (unsigned) ul0);
- if(ul0 == 6 /* scanner */) {
- hd->sub_class.id = sc_sdev_scanner;
- }
- else if(ul0 == 3 /* processor */ && hd->vendor.name) {
- if(
- !strncmp(hd->vendor.name, "HP", sizeof "HP" - 1) ||
- !strncmp(hd->vendor.name, "EPSON", sizeof "EPSON" - 1)
- ) {
- hd->sub_class.id = sc_sdev_scanner;
- }
- }
-
- /*
- * typically needed for usb card readers (unused slots)
- */
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_other
- ) {
- switch(ul0) {
- case 0:
- if(search_str_list(hd->drivers, "sd")) {
- hd->sub_class.id = sc_sdev_disk;
- }
- break;
-
- case 5:
- if(search_str_list(hd->drivers, "sr")) {
- hd->sub_class.id = sc_sdev_cdrom;
- }
- break;
- }
- }
-
- }
-
- /* s390: wwpn & fcp lun */
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "wwpn"), &ul0, 0)) {
- ADD2LOG(" wwpn = 0x%016"PRIx64"\n", ul0);
- scsi->wwpn = ul0;
-
- /* it's a bit of a hack, actually */
- t = new_str(hd_sysfs_id(sf_dev->path));
- if(t) {
- if((s = strrchr(t, '/'))) *s = 0;
- if((s = strrchr(t, '/'))) *s = 0;
- if((s = strrchr(t, '/'))) {
- scsi->controller_id = new_str(s + 1);
- }
- }
- t = free_mem(t);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "fcp_lun"), &ul0, 0)) {
- ADD2LOG(" fcp_lun = 0x%016"PRIx64"\n", ul0);
- scsi->fcp_lun = ul0;
- }
-
- /* ppc: get rom id */
- if((hd1 = hd_get_device_by_idx(hd_data, hd->attached_to)) && hd1->rom_id) {
- str_printf(&hd->rom_id, 0, "%s/@%u", hd1->rom_id, (hd->slot & 0xf));
- }
-
- pr_str = NULL;
-
- if(
- hd_report_this(hd_data, hd) &&
- hd->unix_dev_name &&
- hd->sub_class.id == sc_sdev_cdrom &&
- hd_data->in_vmware != 1 /* VMWare doesn't like it */
- ) {
- PROGRESS(5, 0, hd->unix_dev_name);
- fd = open(hd->unix_dev_name, O_RDONLY | O_NONBLOCK);
- if(fd >= 0) {
-
- str_printf(&pr_str, 0, "%s cache", hd->unix_dev_name);
- PROGRESS(5, 1, pr_str);
-
- memset(scsi_cmd_buf, 0, sizeof scsi_cmd_buf);
- memset(&hdr, 0, sizeof(hdr));
-
- hdr.interface_id = 'S';
- hdr.cmd_len = 6;
- hdr.dxfer_direction = SG_DXFER_FROM_DEV;
- hdr.dxferp = scsi_cmd_buf + 8 + 6;
- hdr.dxfer_len = 0xff;
- hdr.cmdp = scsi_cmd_buf + 8;
- hdr.cmdp[0] = 0x1a;
- hdr.cmdp[2] = 0x08;
- hdr.cmdp[4] = 0xff;
-
- k = ioctl(fd, SG_IO, &hdr);
-
- if(k) {
- ADD2LOG("%s status(0x1a:8) 0x%x\n", hd->unix_dev_name, k);
- }
- else {
- unsigned char *ptr = hdr.dxferp;
-
- uc = ptr + 4 + ptr[3] + 2;
- scsi->cache = uc[0];
- ADD2LOG(" scsi cache: 0x%02x\n", uc[0]);
-
- if((scsi->cache & 4)) {
- hd->prog_if.id = pif_cdr;
- }
- }
-
- close(fd);
- }
- }
-
-
- if(
- hd_report_this(hd_data, hd) &&
- hd->unix_dev_name &&
- hd->sub_class.id == sc_sdev_disk &&
- !hd_probe_feature(hd_data, pr_scsi_noserial)
- ) {
- PROGRESS(5, 0, hd->unix_dev_name);
- fd = open(hd->unix_dev_name, O_RDONLY | O_NONBLOCK);
- if(fd >= 0) {
-
- str_printf(&pr_str, 0, "%s geo", hd->unix_dev_name);
- PROGRESS(5, 1, pr_str);
-
- if(hd_getdisksize(hd_data, hd->unix_dev_name, fd, &geo, &size) == 1) {
- /* (low-level) unformatted disk */
- hd->is.notready = 1;
- }
-
- if(geo) add_res_entry(&hd->res, geo);
- if(size) add_res_entry(&hd->res, size);
-
- str_printf(&pr_str, 0, "%s serial", hd->unix_dev_name);
- PROGRESS(5, 2, pr_str);
-
- memset(scsi_cmd_buf, 0, sizeof scsi_cmd_buf);
- memset(&hdr, 0, sizeof(hdr));
-
- hdr.interface_id = 'S';
- hdr.cmd_len = 6;
- hdr.dxfer_direction = SG_DXFER_FROM_DEV;
- hdr.dxferp = scsi_cmd_buf + 8 + 6;
- hdr.dxfer_len = 0x24;
- hdr.cmdp = scsi_cmd_buf + 8;
- hdr.cmdp[0] = 0x12;
- hdr.cmdp[1] = 0x01;
- hdr.cmdp[2] = 0x80;
- hdr.cmdp[4] = 0x24;
-
- k = ioctl(fd, SG_IO, &hdr);
-
- if(k) {
- ADD2LOG("%s status(0x12) 0x%x\n", scsi->dev_name, k);
- }
- else {
- unsigned char *ptr = hdr.dxferp;
-
- ADD2LOG(" serial id len: %u\n", ptr[3]);
-
- if((hd->serial = canon_str(ptr + 4, ptr[3]))) {
- if(!*hd->serial) hd->serial = free_mem(hd->serial);
- }
- }
-
- close(fd);
- }
- }
-
- pr_str = free_mem(pr_str);
-
-
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_scanner
- ) {
- hd->base_class.id = bc_scanner;
- }
-
- // ###### FIXME: usb-storage: disk vs. floppy?
-
-}
-
-
-void read_partitions(hd_data_t *hd_data)
-{
- str_list_t *sl, *sl0, *pl0 = NULL;
- char buf[256], *s1, *name, *base;
- char *last_base = new_str(" ");
- char *last_name = new_str(" ");
- int l, is_disk;
-
- if(!(sl0 = read_file(PROC_PARTITIONS, 2, 0))) return;
-
- if(hd_data->debug) {
- ADD2LOG("----- "PROC_PARTITIONS" -----\n");
- for(sl = sl0; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- "PROC_PARTITIONS" end -----\n");
- }
-
- for(sl = sl0; sl; sl = sl->next) {
- *buf = 0;
- if(sscanf(sl->str, "%*s %*s %*s %255s", buf) > 0) {
- if(*buf) add_str_list(&pl0, buf);
- }
- }
-
- free_str_list(sl0);
-
- for(is_disk = 1, sl = pl0; sl; sl = sl->next) {
- base = sl->str;
- l = strlen(base);
- if(!l) continue;
-
- s1 = base + l - 1;
- while(isdigit(*s1) && s1 > base) s1--;
- if(s1 == base) continue;
-
- name = new_str(base);
- s1[1] = 0;
-
- if(!strcmp(last_base, base)) {
- if(!strcmp(last_name, base)) is_disk = 0;
- }
- else {
- is_disk = strncmp(last_name, base, strlen(last_name)) ? 1 : 0;
- }
-
- if(!search_str_list(hd_data->cdroms, name)) {
- if(
- strncmp(name, "loop", sizeof "loop" - 1) &&
- (
- hd_data->flags.list_md ||
- (
- strncmp(name, "md", sizeof "md" - 1) &&
- strncmp(name, "dm-", sizeof "dm-" - 1)
- )
- )
- ) {
- add_str_list(is_disk ? &hd_data->disks : &hd_data->partitions, name);
- }
- }
- free_mem(last_base);
- free_mem(last_name);
-
- last_base = new_str(base);
- last_name = name; name = NULL;
- }
-
- free_mem(last_base);
- free_mem(last_name);
-
- free_str_list(pl0);
-
- if(hd_data->debug) {
- ADD2LOG("disks:\n");
- for(sl = hd_data->disks; sl; sl = sl->next) ADD2LOG(" %s\n", sl->str);
- ADD2LOG("partitions:\n");
- for(sl = hd_data->partitions; sl; sl = sl->next) ADD2LOG(" %s\n", sl->str);
- }
-}
-
-
-/*
- * Read iso9660/el torito info, if there is a CD inserted.
- * Returns NULL if nothing was found
- */
-cdrom_info_t *hd_read_cdrom_info(hd_data_t *hd_data, hd_t *hd)
-{
- int fd;
- char *s;
- cdrom_info_t *ci;
- struct iso_primary_descriptor iso_desc;
- unsigned char sector[0x800];
- unsigned et;
- unsigned u0, u1, u2;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_read_cdrom_info, hd_data), hd_data);
- }
-#endif
-
- /* free existing entry */
- if(hd->detail && hd->detail->type != hd_detail_cdrom) {
- hd->detail = free_hd_detail(hd->detail);
- }
-
- if(!hd->detail) {
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cdrom;
- hd->detail->cdrom.data = new_mem(sizeof *hd->detail->cdrom.data);
- }
-
- ci = hd->detail->cdrom.data;
-
- hd->is.notready = 0;
-
- if((fd = open(hd->unix_dev_name, O_RDONLY)) < 0) {
- /* we are here if there is no CD in the drive */
- hd->is.notready = 1;
- return NULL;
- }
-
- ci->iso9660.ok = 0;
- if(
- lseek(fd, 0x8000, SEEK_SET) >= 0 &&
- read(fd, &iso_desc, sizeof iso_desc) == sizeof iso_desc
- ) {
- ci->cdrom = 1;
- if(!memcmp(iso_desc.id, "CD001", 5)) {
- ci->iso9660.ok = 1;
- /* now, fill in the fields */
- s = canon_str(iso_desc.volume_id, sizeof iso_desc.volume_id);
- if(!*s) s = free_mem(s);
- ci->iso9660.volume = s;
-
- s = canon_str(iso_desc.publisher_id, sizeof iso_desc.publisher_id);
- if(!*s) s = free_mem(s);
- ci->iso9660.publisher = s;
-
- s = canon_str(iso_desc.preparer_id, sizeof iso_desc.preparer_id);
- if(!*s) s = free_mem(s);
- ci->iso9660.preparer = s;
-
- s = canon_str(iso_desc.application_id, sizeof iso_desc.application_id);
- if(!*s) s = free_mem(s);
- ci->iso9660.application = s;
-
- s = canon_str(iso_desc.creation_date, sizeof iso_desc.creation_date);
- if(!*s) s = free_mem(s);
- ci->iso9660.creation_date = s;
- }
- }
-
- if(
- ci->iso9660.ok &&
- lseek(fd, 0x8800, SEEK_SET) >= 0 &&
- read(fd, §or, sizeof sector) == sizeof sector
- ) {
- if(
- sector[0] == 0 && sector[6] == 1 &&
- !memcmp(sector + 1, "CD001", 5) &&
- !memcmp(sector + 7, "EL TORITO SPECIFICATION", 23)
- ) {
- et = sector[0x47] + (sector[0x48] << 8) + (sector[0x49] << 16) + (sector[0x4a] << 24);
- ADD2LOG(" %s: el torito boot catalog at 0x%04x\n", ci->name, et);
- if(
- lseek(fd, et * 0x800, SEEK_SET) >= 0 &&
- read(fd, §or, sizeof sector) == sizeof sector &&
- sector[0] == 1
- ) {
- ci->el_torito.ok = 1;
- ci->el_torito.catalog = et;
- ci->el_torito.platform = sector[1];
- s = canon_str(sector + 4, 24);
- if(!*s) s = free_mem(s);
- ci->el_torito.id_string = s;
- ci->el_torito.bootable = sector[0x20] == 0x88 ? 1 : 0;
- ci->el_torito.media_type = sector[0x21];
- ADD2LOG(" media type: %u\n", ci->el_torito.media_type);
- ci->el_torito.load_address = (sector[0x22] + (sector[0x23] << 8)) << 4;
- ADD2LOG(" load address: 0x%04x\n", ci->el_torito.load_address);
-#if 0
- if(ci->el_torito.platform == 0 && ci->el_torito.load_address == 0)
- ci->el_torito.load_address = 0x7c00;
-#endif
- ci->el_torito.load_count = sector[0x26] + (sector[0x27] << 8);
- ci->el_torito.start = sector[0x28] + (sector[0x29] << 8) + (sector[0x2a] << 16) + (sector[0x2b] << 24);
- if(ci->el_torito.media_type >= 1 && ci->el_torito.media_type <= 3) {
- ci->el_torito.geo.c = 80;
- ci->el_torito.geo.h = 2;
- }
- switch(ci->el_torito.media_type) {
- case 1:
- ci->el_torito.geo.s = 15;
- break;
- case 2:
- ci->el_torito.geo.s = 18;
- break;
- case 3:
- ci->el_torito.geo.s = 36;
- break;
- }
- if(
- lseek(fd, ci->el_torito.start * 0x800, SEEK_SET) >= 0 &&
- read(fd, §or, sizeof sector) == sizeof sector
- ) {
- if(ci->el_torito.media_type == 4) {
- /* ##### we should go on and read the 1st partition sector in this case... */
- ci->el_torito.geo.h = (unsigned) sector[0x1be + 5] + 1;
- ci->el_torito.geo.s = sector[0x1be + 6] & 0x3f;
- ci->el_torito.geo.c = sector[0x1be + 7] + (((unsigned) sector[0x1be + 6] >> 6) << 8);
- }
- if(
- sector[0x1fe] == 0x55 && sector[0x1ff] == 0xaa &&
- sector[0x0b] == 0 && sector[0x0c] == 2 &&
- sector[0x0e] == 1 && sector[0x0f] == 0
- ) {
- u0 = sector[0x13] + (sector[0x14] << 8); /* partition size */
- u1 = sector[0x18] + (sector[0x19] << 8); /* sectors per track */
- u2 = sector[0x1a] + (sector[0x1b] << 8); /* heads */
- u0 = u0 ? u0 : sector[0x20] + (sector[0x21] << 8) + (sector[0x22] << 16) + ((unsigned) sector[0x23] << 24);
- if(sector[0x26] == 0x29) {
- s = canon_str(sector + 0x2b, 11);
- if(!*s) s = free_mem(s);
- ci->el_torito.label = s;
- }
- if(!ci->el_torito.label) {
- s = canon_str(sector + 3, 8);
- if(!*s) s = free_mem(s);
- ci->el_torito.label = s;
- }
- if(
- (ci->el_torito.media_type == 0 || ci->el_torito.media_type > 3) &&
- u0 && u1 && u2
- ) {
- ci->el_torito.geo.h = u2;
- ci->el_torito.geo.s = u1;
- ci->el_torito.geo.size = u0;
- ci->el_torito.geo.c = ci->el_torito.geo.size / (u1 * u2);
- }
- }
- }
-
- ci->el_torito.geo.size = ci->el_torito.geo.s * ci->el_torito.geo.c * ci->el_torito.geo.h;
- }
- }
- }
-
- close(fd);
-
- return ci;
-}
-
-
-/*
- * Read the list of CDROM devices known to the kernel. The info is taken
- * from /proc/sys/dev/cdrom/info.
- */
-void read_cdroms(hd_data_t *hd_data)
-{
- char *s, *t, *v;
- str_list_t *sl, *sl0;
- cdrom_info_t *ci;
- int i, line, entries = 0;
- unsigned val;
-
- if(!(sl0 = read_file(PROC_CDROM_INFO, 2, 0))) return;
-
- if((hd_data->debug & HD_DEB_CDROM)) {
- ADD2LOG("----- "PROC_CDROM_INFO" -----\n");
- for(sl = sl0; sl; sl = sl->next) {
- if(*sl->str != '\n') ADD2LOG("%s", sl->str);
- }
- ADD2LOG("----- "PROC_CDROM_INFO" end -----\n");
- }
-
- for(sl = sl0; sl; sl = sl->next) {
- if(
- (line = 0, strstr(sl->str, "drive name:") == sl->str) ||
- (line++, strstr(sl->str, "drive speed:") == sl->str) ||
- (line++, strstr(sl->str, "Can write CD-R:") == sl->str) ||
- (line++, strstr(sl->str, "Can write CD-RW:") == sl->str) ||
- (line++, strstr(sl->str, "Can read DVD:") == sl->str) ||
- (line++, strstr(sl->str, "Can write DVD-R:") == sl->str) ||
- (line++, strstr(sl->str, "Can write DVD-RAM:") == sl->str)
- ) {
- s = strchr(sl->str, ':') + 1;
- i = 0;
- while((t = strsep(&s, " \t\n"))) {
- if(!*t) continue;
- i++;
- switch(line) {
- case 0: /* drive name */
- ci = new_cdrom_entry(&hd_data->cdrom);
- entries++;
- add_str_list(&hd_data->cdroms, t);
- ci->name = new_str(t);
- break;
-
- case 1: /* drive speed */
- case 2: /* Can write CD-R */
- case 3: /* Can write CD-RW */
- case 4: /* Can read DVD */
- case 5: /* Can write DVD-R */
- case 6: /* Can write DVD-RAM */
- ci = get_cdrom_entry(hd_data->cdrom, entries - i);
- if(ci) {
- val = strtoul(t, &v, 10);
- if(!*v) {
- switch(line) {
- case 1:
- ci->speed = val;
- break;
- case 2:
- ci->cdr = val;
- break;
- case 3:
- ci->cdrw = val;
- break;
- case 4:
- ci->dvd = val;
- break;
- case 5:
- ci->dvdr = val;
- break;
- case 6:
- ci->dvdram = val;
- break;
- }
- }
- }
- break;
- }
- }
- }
- }
-
- free_str_list(sl0);
-}
-
-
-/* add new entries at the _start_ of the list */
-cdrom_info_t *new_cdrom_entry(cdrom_info_t **ci)
-{
- cdrom_info_t *new_ci = new_mem(sizeof *new_ci);
-
- new_ci->next = *ci;
- return *ci = new_ci;
-}
-
-
-/* return nth entry */
-cdrom_info_t *get_cdrom_entry(cdrom_info_t *ci, int n)
-{
- if(n < 0) return NULL;
-
- while(n--) {
- if(!ci) return NULL;
- ci = ci->next;
- }
-
- return ci;
-}
-
-
-/*
- * Add generic scsi devs.
- */
-void hd_scan_sysfs_scsi(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_scsi)) return;
-
- hd_data->module = mod_scsi;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "scsi modules");
-
- load_module(hd_data, "sg");
-
- PROGRESS(2, 0, "scsi tape");
-
- get_scsi_tape(hd_data);
-
- PROGRESS(3, 0, "scsi generic");
-
- get_generic_scsi_devs(hd_data);
-}
-
-
-void get_scsi_tape(hd_data_t *hd_data)
-{
- char *s, *t;
- unsigned u1, u2, u3;
- uint64_t ul0;
- hd_t *hd, *hd1;
- hd_dev_num_t dev_num;
-
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct dlist *sf_cdev_list;
-
- sf_class = sysfs_open_class("scsi_tape");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: scsi_tape\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- ADD2LOG(
- " scsi tape: name = %s, path = %s\n",
- sf_cdev->name,
- hd_sysfs_id(sf_cdev->path)
- );
-
- memset(&dev_num, 0, sizeof dev_num);
-
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "dev")))) {
- if(sscanf(s, "%u:%u", &u1, &u2) == 2) {
- dev_num.type = 'c';
- dev_num.major = u1;
- dev_num.minor = u2;
- dev_num.range = 1;
- }
- ADD2LOG(" dev = %u:%u\n", u1, u2);
- }
-
- if(hd_attr_uint(sysfs_get_classdev_attr(sf_cdev, "range"), &ul0, 0)) {
- dev_num.range = ul0;
- ADD2LOG(" range = %u\n", dev_num.range);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- s = hd_sysfs_id(sf_dev->path);
- ADD2LOG(
- " scsi device: bus = %s, bus_id = %s driver = %s\n path = %s\n",
- sf_dev->bus,
- sf_dev->bus_id,
- sf_dev->driver_name,
- s
- );
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->sysfs_device_link &&
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_tape &&
- s &&
- !strcmp(hd->sysfs_device_link, s)
- ) break;
- }
-
- if(!hd) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage_device;
- hd->sub_class.id = sc_sdev_tape;
-
- hd->bus.id = bus_scsi;
-
- hd->sysfs_device_link = new_str(s);
-
- hd->sysfs_bus_id = new_str(sf_dev->bus_id);
-
- /* parent has longest matching sysfs id */
- u2 = strlen(s);
- for(u3 = 0, hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->sysfs_id) {
- u1 = strlen(hd1->sysfs_id);
- if(u1 > u3 && u1 <= u2 && !strncmp(s, hd1->sysfs_id, u1)) {
- u3 = u1;
- hd->attached_to = hd1->idx;
- }
- }
- }
-
- /* find longest matching sysfs id we have a driver for */
- s = new_str(s);
- t = strrchr(s, '/');
- if(t) *t = 0;
- t = hd_sysfs_find_driver(hd_data, s, 0);
- if(t) {
- add_str_list(&hd->drivers, t);
- }
- s = free_mem(s);
-
- if(
- sf_dev->driver_name &&
- *sf_dev->driver_name &&
- strcmp(sf_dev->driver_name, "unknown")
- ) {
- add_str_list(&hd->drivers, sf_dev->driver_name);
- }
-
- add_scsi_sysfs_info(hd_data, hd, sf_dev);
- }
-
- s = hd_sysfs_name2_dev(sf_cdev->name);
-
- if(!hd->unix_dev_name || strlen(s) + sizeof "/dev/" - 1 < strlen(hd->unix_dev_name)) {
- str_printf(&hd->unix_dev_name, 0, "/dev/%s", s);
- hd->unix_dev_num = dev_num;
- free_mem(hd->sysfs_id);
- hd->sysfs_id = new_str(hd_sysfs_id(sf_cdev->path));
- }
- }
- }
-
- sysfs_close_class(sf_class);
-}
-
-
-void get_generic_scsi_devs(hd_data_t *hd_data)
-{
- char *s, *t;
- unsigned u1, u2, u3;
- uint64_t ul0;
- hd_t *hd, *hd1;
- hd_dev_num_t dev_num;
-
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct dlist *sf_cdev_list;
-
- sf_class = sysfs_open_class("scsi_generic");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: scsi_generic\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- ADD2LOG(
- " scsi: name = %s, path = %s\n",
- sf_cdev->name,
- hd_sysfs_id(sf_cdev->path)
- );
-
- memset(&dev_num, 0, sizeof dev_num);
-
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "dev")))) {
- if(sscanf(s, "%u:%u", &u1, &u2) == 2) {
- dev_num.type = 'c';
- dev_num.major = u1;
- dev_num.minor = u2;
- dev_num.range = 1;
- }
- ADD2LOG(" dev = %u:%u\n", u1, u2);
- }
-
- if(hd_attr_uint(sysfs_get_classdev_attr(sf_cdev, "range"), &ul0, 0)) {
- dev_num.range = ul0;
- ADD2LOG(" range = %u\n", dev_num.range);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- s = hd_sysfs_id(sf_dev->path);
-
- ADD2LOG(
- " scsi device: bus = %s, bus_id = %s driver = %s\n path = %s\n",
- sf_dev->bus,
- sf_dev->bus_id,
- sf_dev->driver_name,
- s
- );
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->sysfs_device_link &&
- hd->bus.id == bus_scsi &&
- s &&
- !strcmp(hd->sysfs_device_link, s)
- ) break;
- }
-
- if(hd) {
- if(!hd->unix_dev_name2) {
- str_printf(&hd->unix_dev_name2, 0, "/dev/%s", hd_sysfs_name2_dev(sf_cdev->name));
- hd->unix_dev_num2 = dev_num;
- }
- }
-
- hd = NULL;
-
- if(
- sf_dev &&
- sf_dev->driver_name &&
- !strcmp(sf_dev->driver_name, "unknown")
- ) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage_device;
- hd->sub_class.id = sc_sdev_other;
-
- str_printf(&hd->unix_dev_name, 0, "/dev/%s", hd_sysfs_name2_dev(sf_cdev->name));
-
- hd->bus.id = bus_scsi;
-
- hd->sysfs_id = new_str(hd_sysfs_id(sf_cdev->path));
-
- hd->unix_dev_num = dev_num;
-
- if(sf_dev) hd->sysfs_bus_id = new_str(sf_dev->bus_id);
-
- if(sf_dev && (s = hd_sysfs_id(sf_dev->path))) {
-
- /* parent has longest matching sysfs id */
- u2 = strlen(s);
- for(u3 = 0, hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->sysfs_id) {
- u1 = strlen(hd1->sysfs_id);
- if(u1 > u3 && u1 <= u2 && !strncmp(s, hd1->sysfs_id, u1)) {
- u3 = u1;
- hd->attached_to = hd1->idx;
- }
- }
- }
-
- /* find longest matching sysfs id we have a driver for */
- s = new_str(s);
- t = strrchr(s, '/');
- if(t) *t = 0;
- t = hd_sysfs_find_driver(hd_data, s, 0);
- if(t) {
- add_str_list(&hd->drivers, t);
- }
- s = free_mem(s);
-
- }
-
- add_scsi_sysfs_info(hd_data, hd, sf_dev);
-
- }
-
- }
-
- sysfs_close_class(sf_class);
-}
-
-
-void add_disk_size(hd_data_t *hd_data, hd_t *hd)
-{
- hd_res_t *geo, *size;
- int fd;
- char *pr_str;
-
- pr_str = NULL;
-
- if(
- hd->unix_dev_name &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- PROGRESS(5, 0, hd->unix_dev_name);
- fd = open(hd->unix_dev_name, O_RDONLY | O_NONBLOCK);
- if(fd >= 0) {
-
- str_printf(&pr_str, 0, "%s geo", hd->unix_dev_name);
- PROGRESS(5, 1, pr_str);
-
- if(hd_getdisksize(hd_data, hd->unix_dev_name, fd, &geo, &size) == 1) {
- /* (low-level) unformatted disk */
- hd->is.notready = 1;
- }
-
- if(geo) add_res_entry(&hd->res, geo);
- if(size) add_res_entry(&hd->res, size);
-
- close(fd);
- }
- }
-
- pr_str = free_mem(pr_str);
-}
-
-
+++ /dev/null
-void hd_scan_sysfs_block(hd_data_t *hd_data);
-void hd_scan_sysfs_scsi(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <termios.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "braille.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * braille displays
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if !defined(LIBHD_TINY) && !defined(__sparc__)
-
-static unsigned do_alva(hd_data_t *hd_data, char *dev_name, int cnt);
-static unsigned do_fhp(hd_data_t *hd_data, char *dev_name, unsigned baud, int cnt);
-static unsigned do_ht(hd_data_t *hd_data, char *dev_name, int cnt);
-static unsigned do_baum(hd_data_t *hd_data, char *dev_name, int cnt);
-
-void hd_scan_braille(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_tmp;
- int cnt = 0;
- unsigned dev, vend;
-
- if(!hd_probe_feature(hd_data, pr_braille)) return;
-
- hd_data->module = mod_braille;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_comm &&
- hd->sub_class.id == sc_com_ser &&
- hd->unix_dev_name &&
- !hd->tag.ser_skip &&
- !has_something_attached(hd_data, hd)
- ) {
- cnt++;
- dev = vend = 0;
-
- if(hd_probe_feature(hd_data, pr_braille_alva)) {
- PROGRESS(1, cnt, "alva");
- vend = MAKE_ID(TAG_SPECIAL, 0x5001);
- dev = do_alva(hd_data, hd->unix_dev_name, cnt);
- }
-
- if(!dev && hd_probe_feature(hd_data, pr_braille_fhp)) {
- PROGRESS(1, cnt, "fhp_old");
- vend = MAKE_ID(TAG_SPECIAL, 0x5002);
- dev = do_fhp(hd_data, hd->unix_dev_name, B19200, cnt);
- if(!dev) {
- PROGRESS(1, cnt, "fhp_el");
- dev = do_fhp(hd_data, hd->unix_dev_name, B38400, cnt);
- }
- }
-
- if(!dev && hd_probe_feature(hd_data, pr_braille_ht)) {
- PROGRESS(1, cnt, "ht");
- vend = MAKE_ID(TAG_SPECIAL, 0x5003);
- dev = do_ht(hd_data, hd->unix_dev_name, cnt);
- }
-
- if(!dev && hd_probe_feature(hd_data, pr_braille_baum)) {
- PROGRESS(1, cnt, "baum");
- vend = MAKE_ID(TAG_SPECIAL, 0x5004);
- dev = do_baum(hd_data, hd->unix_dev_name, cnt);
- }
-
- if(dev) {
- hd_tmp = add_hd_entry(hd_data, __LINE__, 0);
- hd_tmp->base_class.id = bc_braille;
- hd_tmp->bus.id = bus_serial;
- hd_tmp->unix_dev_name = new_str(hd->unix_dev_name);
- hd_tmp->attached_to = hd->idx;
- hd_tmp->vendor.id = vend;
- hd_tmp->device.id = dev;
- }
- }
- }
-}
-
-
-/*
- * autodetect for Alva Braille-displays
- * Author: marco Skambraks <marco@suse.de>
- * Suse GmbH Nuernberg
- *
- * This is free software, placed under the terms of the
- * GNU General Public License, as published by the Free Software
- * Foundation. Please see the file COPYING for details.
-*/
-
-/* Communication codes */
-#define BRL_ID "\033ID="
-
-
-#define WAIT_DTR 700000
-#define WAIT_FLUSH 200
-
-unsigned do_alva(hd_data_t *hd_data, char *dev_name, int cnt)
-{
- int fd, i, timeout = 100;
- struct termios oldtio, newtio; /* old & new terminal settings */
- int model = -1;
- unsigned char buffer[sizeof BRL_ID];
- unsigned dev = 0;
-
- PROGRESS(2, cnt, "alva open");
-
- /* Open the Braille display device for random access */
- fd = open(dev_name, O_RDWR | O_NOCTTY);
- if(fd < 0) return 0;
-
- tcgetattr(fd, &oldtio); /* save current settings */
-
- /* Set flow control and 8n1, enable reading */
- memset(&newtio, 0, sizeof newtio);
- newtio.c_cflag = CRTSCTS | CS8 | CLOCAL | CREAD;
- /* Ignore bytes with parity errors and make terminal raw and dumb */
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0; /* raw output */
- newtio.c_lflag = 0; /* don't echo or generate signals */
- newtio.c_cc[VMIN] = 0; /* set nonblocking read */
- newtio.c_cc[VTIME] = 0;
-
- PROGRESS(3, cnt, "alva init ok");
-
- PROGRESS(4, cnt, "alva read data");
-
- /* autodetecting ABT model */
- /* to force DTR off */
- cfsetispeed(&newtio, B0);
- cfsetospeed(&newtio, B0);
- tcsetattr(fd, TCSANOW, &newtio); /* activate new settings */
- usleep(WAIT_DTR);
-
- tcflush(fd, TCIOFLUSH); /* clean line */
- usleep(WAIT_FLUSH);
-
- /* DTR back on */
- cfsetispeed(&newtio, B9600);
- cfsetospeed(&newtio, B9600);
- tcsetattr(fd, TCSANOW, &newtio); /* activate new settings */
- usleep(WAIT_DTR); /* give time to send ID string */
-
- if((i = read(fd, buffer, sizeof buffer)) == sizeof buffer) {
- if(!strncmp(buffer, BRL_ID, sizeof BRL_ID - 1)) {
- /* Find out which model we are connected to... */
- switch(model = buffer[sizeof buffer - 1])
- {
- case 1:
- case 2:
- case 3:
- case 4:
- case 0x0b:
- case 0x0d:
- case 0x0e:
- dev = MAKE_ID(TAG_SPECIAL, model);
- break;
- }
- }
- }
- ADD2LOG("alva.%d@%s[%d]: ", timeout, dev_name, i);
- if(i > 0) hexdump(&hd_data->log, 1, i, buffer);
- ADD2LOG("\n");
-
- PROGRESS(5, cnt, "alva read done");
-
- /* reset serial lines */
- tcflush(fd, TCIOFLUSH);
- tcsetattr(fd, TCSAFLUSH, &oldtio);
- close(fd);
-
- return dev;
-}
-
-
-/*
- * autodetect for Papenmeier Braille-displays
- * Author: marco Skambraks <marco@suse.de>
- * Suse GmbH Nuernberg
- *
- * This is free software, placed under the terms of the
- * GNU General Public License, as published by the Free Software
- * Foundation. Please see the file COPYING for details.
- */
-
-unsigned do_fhp(hd_data_t *hd_data, char *dev_name, unsigned baud, int cnt)
-{
- int fd, i;
- char crash[] = { 2, 'S', 0, 0, 0, 0 };
- unsigned char buf[10];
- struct termios oldtio, newtio; /* old & new terminal settings */
- unsigned dev;
-
- PROGRESS(2, cnt, "fhp open");
-
- /* Now open the Braille display device for random access */
- fd = open(dev_name, O_RDWR | O_NOCTTY);
- if(fd < 0) return 0;
-
- tcgetattr(fd, &oldtio); /* save current settings */
-
- /* Set bps, flow control and 8n1, enable reading */
- memset(&newtio, 0, sizeof newtio);
- newtio.c_cflag = baud | CS8 | CLOCAL | CREAD;
-
- /* Ignore bytes with parity errors and make terminal raw and dumb */
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0; /* raw output */
- newtio.c_lflag = 0; /* don't echo or generate signals */
- newtio.c_cc[VMIN] = 0; /* set nonblocking read */
- newtio.c_cc[VTIME] = 0;
- tcflush(fd, TCIFLUSH); /* clean line */
- tcsetattr(fd, TCSANOW, &newtio); /* activate new settings */
-
- PROGRESS(3, cnt, "fhp init ok");
-
- crash[2] = 0x200 >> 8;
- crash[3] = 0x200 & 0xff;
- crash[5] = (7+10) & 0xff;
-
- write(fd, crash, sizeof crash);
- write(fd, "1111111111",10);
- write(fd, "\03", 1);
-
- crash[2] = 0x0 >> 8;
- crash[3] = 0x0 & 0xff;
- crash[5] = 5 & 0xff;
-
- write(fd, crash, sizeof crash);
- write(fd, "1111111111", 10);
- write(fd, "\03", 1);
-
- usleep(500000); /* 100000 should be enough */
-
- PROGRESS(4, cnt, "fhp write ok");
-
- i = read(fd, &buf, 10);
-
- PROGRESS(5, cnt, "fhp read done");
-
- ADD2LOG("fhp@%s[%d]: ", dev_name, i);
- if(i > 0) hexdump(&hd_data->log, 1, i, buf);
- ADD2LOG("\n");
-
- dev = 0;
- if(i == 10 && buf[0] == 0x02 && buf[1] == 0x49) {
- switch(buf[2]) {
- case 1:
- case 2:
- case 3:
- case 64:
- case 65:
- case 66:
- case 67:
- case 68:
- dev = buf[2];
- dev = MAKE_ID(TAG_SPECIAL, dev);
- break;
- }
- }
- if(!dev) ADD2LOG("no fhp display: 0x%02x\n", i >= 2 ? buf[2] : 0);
-
- /* reset serial lines */
- tcflush(fd, TCIOFLUSH);
- tcsetattr(fd, TCSAFLUSH, &oldtio);
- close(fd);
-
- return dev;
-}
-
-
-/*
- * autodetect for Handy Tech Braille-displays
- * Author: marco Skambraks <marco@suse.de>
- * Suse GmbH Nuernberg
- *
- * This is free software, placed under the terms of the
- * GNU General Public License, as published by the Free Software
- * Foundation. Please see the file COPYING for details.
-*/
-
-unsigned do_ht(hd_data_t *hd_data, char *dev_name, int cnt)
-{
- int fd, i;
- unsigned char code = 0xff, buf[2] = { 0, 0 };
- struct termios oldtio, newtio;
- unsigned dev = 0;
-
- PROGRESS(2, cnt, "ht open");
-
- fd = open(dev_name, O_RDWR | O_NOCTTY);
- if(fd < 0) return 0;
-
- tcgetattr(fd, &oldtio);
-
- newtio = oldtio;
- newtio.c_cflag = CLOCAL | PARODD | PARENB | CREAD | CS8;
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0;
- newtio.c_lflag = 0;
- newtio.c_cc[VMIN] = 0;
- newtio.c_cc[VTIME] = 0;
-
- i = 0;
- /*
- * Force down DTR, flush any pending data and then the port to what we
- * want it to be
- */
- if(
- !(
- cfsetispeed(&newtio, B0) ||
- cfsetospeed(&newtio, B0) ||
- tcsetattr(fd, TCSANOW, &newtio) ||
- tcflush(fd, TCIOFLUSH) ||
- cfsetispeed(&newtio, B19200) ||
- cfsetospeed(&newtio, B19200) ||
- tcsetattr(fd, TCSANOW, &newtio)
- )
- ) {
- /* Pause to let them take effect */
- usleep(500);
-
- PROGRESS(3, cnt, "ht init ok");
-
- write(fd, &code, 1); /* reset brl */
- usleep(5000); /* wait for reset */
-
- PROGRESS(4, cnt, "ht write ok");
-
- read(fd, buf, 1);
- i = 1;
-
- PROGRESS(5, cnt, "ht read done");
-
- if(buf[0] == 0xfe) { /* resetok now read id */
- usleep(5000);
- read(fd, buf + 1, 1);
- i = 2;
-
- PROGRESS(6, cnt, "ht read done");
-
- switch(buf[1]) {
- case 0x05:
- case 0x09:
- case 0x44:
- case 0x74:
- case 0x80:
- case 0x84:
- case 0x88:
- case 0x89:
- dev = buf[1];
- dev = MAKE_ID(TAG_SPECIAL, dev);
- break;
- }
- }
- }
-
- ADD2LOG("ht@%s[%d]: ", dev_name, i);
- if(i > 0) hexdump(&hd_data->log, 1, i, buf);
- ADD2LOG("\n");
-
- if(!dev) ADD2LOG("no ht display: 0x%02x\n", buf[1]);
-
- /* reset serial lines */
- tcflush(fd, TCIOFLUSH);
- tcsetattr(fd, TCSAFLUSH, &oldtio);
- close(fd);
-
- return dev;
-}
-
-
-/*
- * autodetect for Baum Braille-displays
- * Author: marco Skambraks <marco@suse.de>
- * Suse GmbH Nuernberg
- *
- * This is free software, placed under the terms of the
- * GNU General Public License, as published by the Free Software
- * Foundation. Please see the file COPYING for details.
-*/
-
-#define BAUDRATE B19200 /* But both run at 19k2 */
-#define MAXREAD 18
-
-unsigned do_baum(hd_data_t *hd_data, char *dev_name, int cnt)
-{
- static char device_id[] = { 0x1b, 0x84 };
- int fd;
- struct termios oldtio, curtio;
- unsigned char buf[MAXREAD + 1];
- int i;
-
- PROGRESS(2, cnt, "baum open");
-
- fd = open(dev_name, O_RDWR | O_NOCTTY);
- if(fd < 0) return 0;
-
- tcgetattr(fd, &curtio);
-
- oldtio = curtio;
- cfmakeraw(&curtio);
-
- /* no SIGTTOU to backgrounded processes */
- curtio.c_lflag &= ~TOSTOP;
- curtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
- /* no input parity check, no XON/XOFF */
- curtio.c_iflag &= ~(INPCK | ~IXOFF);
-
- curtio.c_cc[VTIME] = 1; /* 0.1s timeout between chars on input */
- curtio.c_cc[VMIN] = 0; /* no minimum input */
-
- tcsetattr(fd, TCSAFLUSH, &curtio);
-
- /* write ID-request */
- write(fd, device_id, sizeof device_id);
-
- /* wait for response */
- usleep(100000);
-
- PROGRESS(3, cnt, "baum write ok");
-
- i = read(fd, buf, sizeof buf - 1);
- buf[sizeof buf - 1] = 0;
-
- PROGRESS(4, cnt, "baum read done");
-
- ADD2LOG("baum@%s[%d]: ", dev_name, i);
- if(i > 0) hexdump(&hd_data->log, 1, i, buf);
- ADD2LOG("\n");
-
- /* reset serial lines */
- tcflush(fd, TCIOFLUSH);
- tcsetattr(fd, TCSAFLUSH, &oldtio);
- close(fd);
-
- if(!strcmp(buf + 2, "Baum Vario40")) return 1;
- if(!strcmp(buf + 2, "Baum Vario80")) return 2;
-
- return 0;
-}
-
-
-#endif /* !defined(LIBHD_TINY) && !defined(__sparc__) */
-
+++ /dev/null
-void hd_scan_braille(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#ifdef __ia64__
-#include <fcntl.h>
-#include <errno.h>
-#include <stdint.h>
-#include <sys/mman.h>
-#endif
-
-#ifdef __powerpc__
-#include <sys/utsname.h>
-#endif
-
-#include "hd.h"
-#include "hd_int.h"
-#include "klog.h"
-#include "cpu.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * cpu info
- *
- * Note: on other architectures, entries differ (cf. Alpha)!!!
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static void read_cpuinfo(hd_data_t *hd_data);
-static void dump_cpu_data(hd_data_t *hd_data);
-
-#if defined(__i386__) || defined(__x86_64__)
-static inline unsigned units_per_cpu();
-#endif
-#ifdef __ia64__
-static int ia64DetectSMP(hd_data_t *hd_data);
-#endif
-
-void hd_scan_cpu(hd_data_t *hd_data)
-{
- hd_t *hd0, *hd;
- int i, cpus;
- unsigned u;
-
- if(!hd_probe_feature(hd_data, pr_cpu)) return;
-
- hd_data->module = mod_cpu;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->cpu = free_str_list(hd_data->cpu);
-
- PROGRESS(1, 0, "cpuinfo");
-
- read_cpuinfo(hd_data);
-
- for(hd0 = hd_data->hd; hd0; hd0 = hd0->next) {
- if(hd0->base_class.id == bc_internal && hd0->sub_class.id == sc_int_cpu) break;
- }
-
- if(!hd0 || hd0->next) return; /* 0 or > 1 entries */
-
- /* only one entry, maybe UP kernel on SMP system */
-
- cpus = 0;
-
-#ifdef __ia64__
- cpus = ia64DetectSMP(hd_data);
-#endif
-
- for(i = 1; i < cpus; i++) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- u = hd->idx;
- hd_copy(hd, hd0);
- hd->idx = u;
- hd->slot = i;
- }
-}
-
-
-void read_cpuinfo(hd_data_t *hd_data)
-{
- hd_t *hd;
- unsigned cpus = 0;
- cpu_info_t *ct;
- str_list_t *sl;
-
-#if defined(__i386__) || defined (__x86_64__)
- char model_id[80], vendor_id[80], features[0x100];
- unsigned bogo, mhz, cache, family, model, stepping;
- char *t0, *t;
-#endif
-
-#ifdef __ia64__
- char model_id[80], vendor_id[80], features[0x100];
- unsigned mhz, stepping;
- char *t0, *t;
-#endif
-
-#ifdef __alpha__
- char model_id[80], system_id[80], serial_number[80], platform[80];
- unsigned cpu_variation, cpu_revision, u, hz;
- cpu_info_t *ct1;
-#endif
-
-#ifdef __PPC__
- char model_id[80], vendor_id[80], motherboard[80];
- unsigned bogo, mhz, cache, family, model, stepping;
- struct utsname un;
-#endif
-
-#ifdef __sparc__
- char cpu_id[80], fpu_id[80], promlib[80], prom[80], type[80], mmu[80];
- unsigned u, bogo, cpus_active;
-#endif
-
-#if defined(__s390__) || defined(__s390x__)
- char vendor_id[80];
- unsigned bogo;
- unsigned u0, u1, u2, u3;
-#endif
-
- hd_data->cpu = read_file(PROC_CPUINFO, 0, 0);
- if((hd_data->debug & HD_DEB_CPU)) dump_cpu_data(hd_data);
- if(!hd_data->cpu) return;
-
-#ifdef __alpha__
- *model_id = *system_id = *serial_number = *platform = 0;
- cpu_variation = cpu_revision = hz = 0;
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "cpu model : %79[^\n]", model_id) == 1) continue;
- if(sscanf(sl->str, "system type : %79[^\n]", system_id) == 1) continue;
- if(sscanf(sl->str, "cpu variation : %u", &cpu_variation) == 1) continue;
- if(sscanf(sl->str, "cpu revision : %u", &cpu_revision) == 1) continue;
- if(sscanf(sl->str, "system serial number : %79[^\n]", serial_number) == 1) continue;
- if(sscanf(sl->str, "cpus detected : %u", &cpus) == 1) continue;
- if(sscanf(sl->str, "cycle frequency [Hz] : %u", &hz) == 1) continue;
- if(sscanf(sl->str, "system variation : %79[^\n]", platform) == 1) continue;
- }
-
- if(*model_id || *system_id) { /* at least one of those */
- ct = new_mem(sizeof *ct);
- ct->architecture = arch_alpha;
- if(model_id) ct->model_name = new_str(model_id);
- if(system_id) ct->vend_name = new_str(system_id);
- if(strncmp(serial_number, "MILO", 4) == 0)
- hd_data->boot = boot_milo;
- else
- hd_data->boot = boot_aboot;
-
- ct->family = cpu_variation;
- ct->model = cpu_revision;
- ct->stepping = 0;
- ct->cache = 0;
- ct->clock = (hz + 500000) / 1000000;
-
- if(platform && strcmp(platform, "0")) {
- ct->platform = new_str(platform);
- }
-
- if(!cpus) cpus = 1; /* at least 1 machine had a "cpus: 0" entry... */
- for(u = 0; u < cpus; u++) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_cpu;
- hd->slot = u;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cpu;
- if(u) {
- hd->detail->cpu.data = ct1 = new_mem(sizeof *ct);
- *ct1 = *ct;
- ct1->model_name = new_str(ct1->model_name);
- ct1->vend_name = new_str(ct1->vend_name);
- ct1->platform = new_str(ct1->platform);
- }
- else {
- hd->detail->cpu.data = ct;
- }
- }
-
- }
-#endif /* __alpha__ */
-
-
-#ifdef __sparc__
- *cpu_id = *fpu_id = *promlib = *prom = *type = *mmu = 0;
- cpus = cpus_active = bogo = 0;
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "cpu : %79[^\n]", cpu_id) == 1);
- if(sscanf(sl->str, "fpu : %79[^\n]", fpu_id) == 1);
- if(sscanf(sl->str, "promlib : %79[^\n]", promlib) == 1);
- if(sscanf(sl->str, "prom : %79[^\n]", prom) == 1);
- if(sscanf(sl->str, "type : %79[^\n]", type) == 1);
- if(sscanf(sl->str, "ncpus probed : %u", &cpus) == 1);
- if(sscanf(sl->str, "ncpus active : %u", &cpus_active) == 1);
- if(sscanf(sl->str, "BogoMips : %u", &bogo) == 1);
- if(sscanf(sl->str, "MMU Type : %79[^\n]", mmu) == 1);
- }
-
- if(*cpu_id) {
- for(u = 0; u < cpus; u++) {
- ct = new_mem(sizeof *ct);
- ct->platform = new_str (type);
- if(strcmp (type, "sun4u") == 0)
- ct->architecture = arch_sparc64;
- else
- ct->architecture = arch_sparc;
-
- ct->model_name = new_str(cpu_id);
- hd_data->boot = boot_silo;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_cpu;
- hd->slot = u;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cpu;
- hd->detail->cpu.data = ct;
- }
- }
-#endif /* sparc */
-
-
-#if defined(__i386__) || defined (__x86_64__)
- *model_id = *vendor_id = *features = 0;
- bogo = mhz = cache = family = model = stepping = 0;
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "model name : %79[^\n]", model_id) == 1);
- if(sscanf(sl->str, "vendor_id : %79[^\n]", vendor_id) == 1);
- if(sscanf(sl->str, "flags : %255[^\n]", features) == 1);
- if(sscanf(sl->str, "bogomips : %u", &bogo) == 1);
- if(sscanf(sl->str, "cpu MHz : %u", &mhz) == 1);
- if(sscanf(sl->str, "cache size : %u KB", &cache) == 1);
-
- if(sscanf(sl->str, "cpu family : %u", &family) == 1);
- if(sscanf(sl->str, "model : %u", &model) == 1);
- if(sscanf(sl->str, "stepping : %u", &stepping) == 1);
-
- if(strstr(sl->str, "processor") == sl->str || !sl->next) { /* EOF */
- if(*model_id || *vendor_id) { /* at least one of those */
- ct = new_mem(sizeof *ct);
-#ifdef __i386__
- ct->architecture = arch_intel;
-#endif
-#ifdef __x86_64__
- ct->architecture = arch_x86_64;
-#endif
- if(model_id) ct->model_name = new_str(model_id);
- if(vendor_id) ct->vend_name = new_str(vendor_id);
- ct->family = family;
- ct->model = model;
- ct->stepping = stepping;
- ct->cache = cache;
- hd_data->boot = boot_grub;
-
- /* round clock to typical values */
- if(mhz >= 38 && mhz <= 42)
- mhz = 40;
- else if(mhz >= 88 && mhz <= 92)
- mhz = 90;
- else {
- unsigned u, v;
-
- u = (mhz + 2) % 100;
- v = (mhz + 2) / 100;
- if(u <= 4)
- u = 2;
- else if(u >= 25 && u <= 29)
- u = 25 + 2;
- else if(u >= 33 && u <= 37)
- u = 33 + 2;
- else if(u >= 50 && u <= 54)
- u = 50 + 2;
- else if(u >= 66 && u <= 70)
- u = 66 + 2;
- else if(u >= 75 && u <= 79)
- u = 75 + 2;
- else if(u >= 80 && u <= 84) /* there are 180MHz PPros */
- u = 80 + 2;
- u -= 2;
- mhz = v * 100 + u;
- }
-
- ct->clock = mhz;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_cpu;
- hd->slot = cpus;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cpu;
- hd->detail->cpu.data = ct;
-
- if(*features) {
- for(t0 = features; (t = strsep(&t0, " ")); ) {
- add_str_list(&ct->features, t);
- if(!strcmp(t, "ht")) ct->units = units_per_cpu();
- }
- }
-
- *model_id = *vendor_id = 0;
- bogo = mhz = cache = family = model= 0;
- cpus++;
- }
- }
- }
-#endif /* __i386__ || __x86_64__ */
-
-
-#ifdef __PPC__
- *model_id = *vendor_id = *motherboard = 0;
- bogo = mhz = cache = family = model = stepping = 0;
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "machine : %79[^\n]", vendor_id) == 1);
- }
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "cpu : %79[^\n]", model_id) == 1);
- if(sscanf(sl->str, "motherboard : %79[^\n]", motherboard) == 1);
- if(sscanf(sl->str, "bogomips : %u", &bogo) == 1);
- if(sscanf(sl->str, "clock : %u", &mhz) == 1);
- if(sscanf(sl->str, "L2 cache : %u KB", &cache) == 1);
-
- if(strstr(sl->str, "processor") == sl->str || !sl->next) { /* EOF */
- if(*model_id) { /* at least one of those */
- ct = new_mem(sizeof *ct);
- ct->architecture = arch_ppc;
- if(model_id) {
- ct->model_name = new_str(model_id);
- }
-
- if(!uname(&un))
- if(strstr(un.machine,"ppc64"))
- ct->architecture = arch_ppc64;
-
- if(vendor_id) ct->vend_name = new_str(vendor_id);
- if(motherboard) ct->platform = new_str(motherboard);
- ct->family = family;
- ct->model = model;
- ct->stepping = stepping;
- ct->cache = cache;
- hd_data->boot = boot_ppc;
- ct->clock = mhz;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_cpu;
- hd->slot = cpus;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cpu;
- hd->detail->cpu.data = ct;
-
- if(ct->vend_name && !strcmp(ct->vend_name, "PowerBook") && !hd_data->color_code) {
- hd_data->color_code = 7; // black
- }
-
- *model_id = 0;
- bogo = mhz = cache = family = model= 0;
- cpus++;
- }
- }
- }
-#endif /* __PPC__ */
-
-
-#ifdef __ia64__
- *model_id = *vendor_id = *features = 0;
- mhz = stepping = 0;
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "family : %79[^\n]", model_id) == 1);
- if(sscanf(sl->str, "vendor : %79[^\n]", vendor_id) == 1);
- if(sscanf(sl->str, "features : %255[^\n]", features) == 1);
- if(sscanf(sl->str, "cpu MHz : %u", &mhz) == 1);
- if(sscanf(sl->str, "revision : %u", &stepping) == 1);
-
- if(strstr(sl->str, "processor") == sl->str || !sl->next) { /* EOF */
- if(*model_id || *vendor_id) { /* at least one of those */
- ct = new_mem(sizeof *ct);
- ct->architecture = arch_ia64;
- if(model_id) ct->model_name = new_str(model_id);
- if(vendor_id) ct->vend_name = new_str(vendor_id);
- ct->stepping = stepping;
- hd_data->boot = boot_elilo;
-
- /* round clock to typical values */
- if(mhz >= 38 && mhz <= 42)
- mhz = 40;
- else if(mhz >= 88 && mhz <= 92)
- mhz = 90;
- else {
- unsigned u, v;
-
- u = (mhz + 2) % 100;
- v = (mhz + 2) / 100;
- if(u <= 4)
- u = 2;
- else if(u >= 25 && u <= 29)
- u = 25 + 2;
- else if(u >= 33 && u <= 37)
- u = 33 + 2;
- else if(u >= 50 && u <= 54)
- u = 50 + 2;
- else if(u >= 66 && u <= 70)
- u = 66 + 2;
- else if(u >= 75 && u <= 79)
- u = 75 + 2;
- else if(u >= 80 && u <= 84) /* there are 180MHz PPros */
- u = 80 + 2;
- u -= 2;
- mhz = v * 100 + u;
- }
-
- ct->clock = mhz;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_cpu;
- hd->slot = cpus;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cpu;
- hd->detail->cpu.data = ct;
-
- if(*features) {
- for(t0 = features; (t = strsep(&t0, " ")); ) {
- add_str_list(&ct->features, t);
- }
- }
-
- *model_id = *vendor_id = 0;
- mhz = 0;
- cpus++;
- }
- }
- }
-
-#endif /* __ia64__ */
-
-
-#if defined(__s390__) || defined(__s390x__)
- *vendor_id = 0;
- bogo = 0;
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "vendor_id : %79[^\n]", vendor_id) == 1);
- if(sscanf(sl->str, "bogomips per cpu : %u", &bogo) == 1);
- }
-
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(
- sscanf(sl->str, "processor %u : version = %x , identification = %x , machine = %x", &u0, &u1, &u2, &u3) == 4
- ) {
- ct = new_mem(sizeof *ct);
-#ifdef __s390x__
- ct->architecture = arch_s390x;
-#else
- ct->architecture = arch_s390;
-#endif
- if(vendor_id) ct->vend_name = new_str(vendor_id);
- ct->stepping = u1;
- hd_data->boot = boot_s390;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_cpu;
- hd->slot = cpus;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_cpu;
- hd->detail->cpu.data = ct;
-
- bogo = 0;
- cpus++;
- }
- }
-#endif /* defined(__s390__) || defined(__s390x__) */
-}
-
-/*
- * Add some cpu data to the global log.
- */
-void dump_cpu_data(hd_data_t *hd_data)
-{
- str_list_t *sl;
-
- ADD2LOG("----- /proc/cpuinfo -----\n");
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/cpuinfo end -----\n");
-}
-
-
-#if defined(__i386__) || defined(__x86_64__)
-inline unsigned units_per_cpu()
-{
- unsigned u;
-
- asm(
-#ifdef __i386__
- "push %%ebx\n\t"
-#else
- "push %%rbx\n\t"
-#endif
- "mov $1,%%eax\n\t"
- "cpuid\n\t"
- "shr $8,%%ebx\n\t"
- "movzx %%bh,%%eax\n\t"
-#ifdef __i386__
- "pop %%ebx"
-#else
- "pop %%rbx"
-#endif
- : "=a" (u)
- :: "%ecx", "%edx"
- );
-
- return u;
-}
-#endif
-
-
-#ifdef __ia64__
-
-/*
- * IA64 SMP detection code
- */
-
-#define PAGE_OFFSET(addr) ((uintptr_t) (addr) & (getpagesize () - 1))
-
-typedef struct
-{
- uint8_t type;
- uint8_t length;
-} __attribute__ ((packed)) acpi_table_entry_header;
-
-struct acpi20_table_rsdp
-{
- char signature[8];
- uint8_t checksum;
- char oem_id[6];
- uint8_t revision;
- uint32_t rsdt_address;
- uint32_t length;
- unsigned long xsdt_address;
- uint8_t ext_checksum;
- uint8_t reserved[3];
-} __attribute__ ((packed));
-
-struct acpi_table_header
-{
- char signature[4];
- uint32_t length;
- uint8_t revision;
- uint8_t checksum;
- char oem_id[6];
- char oem_table_id[8];
- uint32_t oem_revision;
- char asl_compiler_id[4];
- uint32_t asl_compiler_revision;
-};
-
-#define ACPI_XSDT_SIG "XSDT"
-struct acpi_table_xsdt
-{
- struct acpi_table_header header;
- unsigned long entry[0];
-} __attribute__ ((packed));
-
-#define ACPI_MADT_SIG "ACPI"
-struct acpi_table_madt
-{
- struct acpi_table_header header;
- uint32_t lapic_address;
- struct
- {
- uint32_t pcat_compat:1;
- uint32_t reserved:31;
- } flags;
-} __attribute__ ((packed));
-
-#define ACPI_MADT_LSAPIC 7
-
-struct acpi_table_lsapic
-{
- acpi_table_entry_header header;
- uint8_t acpi_id;
- uint8_t id;
- uint8_t eid;
- uint8_t reserved[3];
- struct
- {
- uint32_t enabled:1;
- uint32_t reserved:31;
- } flags;
-} __attribute__ ((packed));
-
-/*
- * Map an ACPI table into virtual memory
- */
-static struct acpi_table_header *
-acpi_map_table (int mem, unsigned long addr, char *signature)
-{
- /* mmap header to determine table size */
- struct acpi_table_header *table = NULL;
- unsigned long offset = PAGE_OFFSET (addr);
- uint8_t *mapped = mmap (NULL,
- sizeof (struct acpi_table_header) + offset,
- PROT_READ,
- MAP_PRIVATE,
- mem,
- (unsigned long) addr - offset);
- table = (struct acpi_table_header *) (mapped != MAP_FAILED
- ? mapped + offset
- : NULL);
- if (table)
- {
- if (memcmp (table->signature, signature, sizeof (table->signature)))
- {
- munmap ((char *) table - offset,
- sizeof (struct acpi_table_header) + offset);
- return NULL;
- }
- {
- /* re-mmap entire table */
- unsigned long size = table->length;
- munmap ((uint8_t *) table - offset,
- sizeof (struct acpi_table_header) + offset);
- mapped = mmap (NULL, size + offset, PROT_READ, MAP_PRIVATE, mem,
- (unsigned long) addr - offset);
- table = (struct acpi_table_header *) (mapped != MAP_FAILED
- ? mapped + offset
- : NULL);
- }
- }
- return table;
-}
-
-/*
- * Unmap an ACPI table from virtual memory
- */
-static void
-acpi_unmap_table (struct acpi_table_header * table)
-{
- if (table)
- {
- unsigned long offset = PAGE_OFFSET (table);
- munmap ((uint8_t *) table - offset, table->length + offset);
- }
-}
-
-int
-acpi_parse_lsapic (acpi_table_entry_header *p)
-{
- struct acpi_table_lsapic *lsapic = (struct acpi_table_lsapic *) p;
-
- return lsapic->flags.enabled;
-}
-
-static int
-acpi_parse_madt (struct acpi_table_madt *madt)
-{
- acpi_table_entry_header *p, *end;
- int n_cpu = 0;
-
- p = (acpi_table_entry_header *) (madt + 1);
- end = (acpi_table_entry_header *) ((char *) madt + madt->header.length);
-
- while (p < end)
- {
- if (p->type == ACPI_MADT_LSAPIC)
- n_cpu += acpi_parse_lsapic (p);
-
- p = (acpi_table_entry_header *) ((char *) p + p->length);
- }
-
- return n_cpu;
-}
-
-static int
-acpi_parse_rsdp (int mem_fd, struct acpi20_table_rsdp *rsdp)
-{
- int n_cpu = 0;
- int i;
- struct acpi_table_xsdt *xsdt = 0;
- int tables;
-
- if (rsdp->xsdt_address)
- xsdt = (struct acpi_table_xsdt *) acpi_map_table (mem_fd, rsdp->xsdt_address,
- ACPI_XSDT_SIG);
- if (xsdt)
- {
- tables = (xsdt->header.length - sizeof (struct acpi_table_header)) / 8;
- for (i = 0; i < tables; i++)
- {
- struct acpi_table_header *dt
- = acpi_map_table (mem_fd, xsdt->entry[i], ACPI_MADT_SIG);
- if (dt)
- n_cpu += acpi_parse_madt ((struct acpi_table_madt *) dt);
- acpi_unmap_table (dt);
- }
- acpi_unmap_table ((struct acpi_table_header *) xsdt);
- }
- return n_cpu;
-}
-
-int ia64DetectSMP(hd_data_t *hd_data)
-{
- int n_cpu = 0, mem_fd, systab_fd;
- struct acpi20_table_rsdp rsdp;
- uint8_t *mapped;
- unsigned long addr = 0, offset;
- int ok = 0;
- str_list_t *sl;
- const char *rsd_klog = "ACPI 2.0=";
- const char *rsd_systab = "ACPI20=";
- char *s;
-
- mem_fd = open("/dev/mem", O_RDONLY);
- if(mem_fd == -1) return -1;
-
- systab_fd = open("/proc/efi/systab", O_RDONLY);
- if (systab_fd != -1)
- {
- char buffer[512];
- int n_read = read(systab_fd, buffer, sizeof(buffer) - 1);
- close(systab_fd);
- if (n_read > 0)
- {
- buffer[n_read] = 0;
- if ((s = strstr(buffer, rsd_systab)) != NULL &&
- sscanf(s + strlen(rsd_systab), "%lx", &addr) == 1)
- goto found_it;
- }
- }
-
- if(!hd_data->klog) read_klog(hd_data);
-
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if((s = strstr(sl->str, rsd_klog))) {
- if(sscanf(s + strlen(rsd_klog), "%lx", &addr) == 1) {
- found_it:
- offset= PAGE_OFFSET (addr);
- mapped = mmap(NULL, sizeof rsdp + offset, PROT_READ, MAP_PRIVATE,
- mem_fd, (unsigned long) addr - offset);
- if(mapped != MAP_FAILED) {
- ADD2LOG("seek to 0x%lx\n", addr);
- memcpy(&rsdp, mapped + offset, sizeof rsdp);
- munmap(mapped, sizeof rsdp + offset);
- ok = 1;
- }
- break;
- }
- }
- }
-
- if(ok) {
- n_cpu = acpi_parse_rsdp(mem_fd, &rsdp);
- if(n_cpu) {
- ADD2LOG("RSDP found at 0x%lx\n", addr);
- }
- }
-
- close (mem_fd);
-
- ADD2LOG("n_cpu = %d\n", n_cpu);
-
- return n_cpu;
-}
-
-
-#endif /* __ia64__ */
-
+++ /dev/null
-void hd_scan_cpu(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "edd.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * edd
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static void get_edd_info(hd_data_t *hd_data);
-
-void hd_scan_sysfs_edd(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_edd)) return;
-
- hd_data->module = mod_edd;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- hd_data->flags.edd_used = 0;
-
- if(hd_probe_feature(hd_data, pr_edd_mod)) {
- PROGRESS(1, 0, "edd mod");
- load_module(hd_data, "edd");
- }
-
- PROGRESS(2, 0, "edd info");
-
- get_edd_info(hd_data);
-}
-
-
-void get_edd_info(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
- unsigned u, u1, u2, edd_cnt = 0, lba;
- uint64_t ul0;
- str_list_t *sl;
- bios_info_t *bt;
- edd_info_t *ei;
-
- struct sysfs_directory *sf_dir;
- struct sysfs_directory *sf_dir_2;
- struct sysfs_link *sf_link;
-
- for(u = 0; u < sizeof hd_data->edd / sizeof *hd_data->edd; u++) {
- free_mem(hd_data->edd[u].sysfs_id);
- }
-
- memset(hd_data->edd, 0, sizeof hd_data->edd);
-
- sf_dir = sysfs_open_directory("/sys/firmware/edd");
-
- if(sf_dir) {
- if(!sysfs_read_all_subdirs(sf_dir)) {
- if(sf_dir->subdirs) {
- dlist_for_each_data(sf_dir->subdirs, sf_dir_2, struct sysfs_directory) {
-
- if(
- sscanf(sf_dir_2->name, "int13_dev%02x", &u) == 1 &&
- u >= 0x80 &&
- u <= 0xff
- ) {
- edd_cnt++;
-
- u -= 0x80;
-
- ei = hd_data->edd + u;
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "sectors"), &ul0, 0)) {
- ei->sectors = ul0;
- }
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "default_cylinders"), &ul0, 0)) {
- ei->edd.cyls = ul0;
- }
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "default_heads"), &ul0, 0)) {
- ei->edd.heads = ul0;
- }
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "default_sectors_per_track"), &ul0, 0)) {
- ei->edd.sectors = ul0;
- }
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "legacy_max_cylinder"), &ul0, 0)) {
- ei->legacy.cyls = ul0 + 1;
- }
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "legacy_max_head"), &ul0, 0)) {
- ei->legacy.heads = ul0 + 1;
- }
-
- if(hd_attr_uint(sysfs_get_directory_attribute(sf_dir_2, "legacy_sectors_per_track"), &ul0, 0)) {
- ei->legacy.sectors = ul0;
- }
-
- if(ei->sectors && ei->edd.heads && ei->edd.sectors) {
- ei->edd.cyls = ei->sectors / (ei->edd.heads * ei->edd.sectors);
- }
-
- sf_link = sysfs_get_directory_link(sf_dir_2, "pci_dev");
- if(sf_link) {
- hd_data->edd[u].sysfs_id = new_str(hd_sysfs_id(sf_link->target));
- if((hd = hd_find_sysfs_id(hd_data, hd_data->edd[u].sysfs_id))) {
- hd_data->edd[u].hd_idx = hd->idx;
- }
- }
-
- sl = hd_attr_list(sysfs_get_directory_attribute(sf_dir_2, "extensions"));
- if(search_str_list(sl, "Fixed disk access")) hd_data->edd[u].ext_fixed_disk = 1;
- if(search_str_list(sl, "Device locking and ejecting")) hd_data->edd[u].ext_lock_eject = 1;
- if(search_str_list(sl, "Enhanced Disk Drive support")) hd_data->edd[u].ext_edd = 1;
- if(search_str_list(sl, "64-bit extensions")) hd_data->edd[u].ext_64bit = 1;
-
- ADD2LOG(
- "edd: 0x%02x\n size: %"PRIu64"\n chs default: %u/%u/%u\n chs legacy: %u/%u/%u\n caps: %s%s%s%s\n attached: #%u %s\n",
- u + 0x80,
- ei->sectors,
- ei->edd.cyls,
- ei->edd.heads,
- ei->edd.sectors,
- ei->legacy.cyls,
- ei->legacy.heads,
- ei->legacy.sectors,
- ei->ext_fixed_disk ? "fixed " : "",
- ei->ext_lock_eject ? "lock " : "",
- ei->ext_edd ? "edd " : "",
- ei->ext_64bit ? "64bit " : "",
- ei->hd_idx,
- ei->sysfs_id ?: ""
- );
- }
- }
- }
- }
- }
-
- sysfs_close_directory(sf_dir);
-
- if(!edd_cnt) return;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- hd->rom_id = free_mem(hd->rom_id);
- }
- }
-
- /* add BIOS drive ids to disks */
-
- /* first, check sysfs link */
- for(u = 0; u < sizeof hd_data->edd / sizeof *hd_data->edd; u++) {
- if(!hd_data->edd[u].hd_idx) continue;
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk &&
- hd->attached_to == hd_data->edd[u].hd_idx &&
- !hd->rom_id
- ) {
- str_printf(&hd->rom_id, 0, "0x%02x", u + 0x80);
- hd_data->flags.edd_used = 1;
- hd_data->edd[u].assigned = 1;
- break;
- }
- }
- }
-
- /* try based on disk size */
- for(u = 0; u < sizeof hd_data->edd / sizeof *hd_data->edd; u++) {
- if(hd_data->edd[u].assigned) continue;
- if(!(ul0 = hd_data->edd[u].sectors)) continue;
- for(u1 = u2 = 0; u1 < sizeof hd_data->edd / sizeof *hd_data->edd; u1++) {
- if(ul0 == hd_data->edd[u1].sectors) u2++;
- }
-
- /* more than one disk with this size */
- if(u2 != 1) continue;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk &&
- !hd->rom_id
- ) {
- for(res = hd->res; res; res = res->next) {
- if(
- res->any.type == res_size &&
- res->size.unit == size_unit_sectors &&
- res->size.val1 == ul0
- ) break;
- }
-
- if(!res) continue;
-
- str_printf(&hd->rom_id, 0, "0x%02x", u + 0x80);
- hd_data->flags.edd_used = 1;
- hd_data->edd[u].assigned = 1;
- break;
- }
- }
- }
-
- /* set lba support flag in BIOS data */
- for(lba = u = 0; u < sizeof hd_data->edd / sizeof *hd_data->edd; u++) {
- if(hd_data->edd[u].ext_fixed_disk) {
- lba = 1;
- break;
- }
- }
-
- if(lba) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal &&
- hd->sub_class.id == sc_int_bios &&
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- (bt = hd->detail->bios.data)
- ) {
- bt->lba_support = lba;
- }
- }
- }
-
-}
-
+++ /dev/null
-void hd_scan_sysfs_edd(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <linux/hdreg.h>
-#include <linux/fb.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "fb.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- *
- * scan framebuffer devices
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-typedef struct {
- unsigned width;
- unsigned height;
- double pix_clock;
- double h_freq;
- double v_freq;
-} fb_info_t;
-
-static fb_info_t *fb_get_info(hd_data_t *hd_data);
-
-void hd_scan_fb(hd_data_t *hd_data)
-{
- fb_info_t *fb;
- hd_t *hd;
- hd_res_t *res;
- unsigned imac_dev, imac_vend;
- unsigned imac = 0;
- monitor_info_t *mi = NULL;
-
- if(!hd_probe_feature(hd_data, pr_fb)) return;
-
- hd_data->module = mod_fb;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "read info");
-
- fb = fb_get_info(hd_data);
-
- if(fb) {
- imac_dev = MAKE_ID(TAG_EISA, 0x9d03);
- imac_vend = name2eisa_id("APP");
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_monitor) break;
- }
-
- if(hd && hd->device.id == imac_dev && hd->vendor.id == imac_vend) {
- hd->tag.remove = 1;
- remove_tagged_hd_entries(hd_data);
- imac = 1;
- hd = NULL;
- }
-
- /* add monitor entry based on fb data if we have no other info */
- if(!hd) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_monitor;
- if(imac) {
- hd->vendor.id = imac_vend;
- hd->device.id = imac_dev;
- }
- else {
- hd->vendor.name = new_str("Generic");
- hd->device.name = new_str("Monitor");
- }
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->monitor.type = res_monitor;
- res->monitor.width = fb->width;
- res->monitor.height = fb->height;
- res->monitor.vfreq = fb->v_freq + 0.5;
-
- if(!hd->detail) {
- mi = new_mem(sizeof *mi);
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_monitor;
- hd->detail->monitor.data = mi;
-
- mi->min_vsync = 50;
- mi->min_hsync = 31;
- mi->max_vsync = fb->v_freq * 1.11 + 0.9;
- mi->max_hsync = fb->h_freq / 1000.0 + 1.9;
- if(mi->max_vsync <= mi->min_vsync) mi->max_vsync = mi->min_vsync + 10;
- if(mi->max_hsync <= mi->min_hsync) mi->max_hsync = mi->min_hsync + 5;
- /* round up */
- mi->max_vsync = ((mi->max_vsync + 9) / 10) * 10;
- }
- }
- }
-}
-
-fb_info_t *fb_get_info(hd_data_t *hd_data)
-{
- int fd;
- struct fb_var_screeninfo fbv_info;
- static fb_info_t fb_info;
- fb_info_t *fb = NULL;
- int h, v;
-
- fd = open(DEV_FB, O_RDONLY);
- if(fd < 0) fd = open(DEV_FB0, O_RDONLY);
- if(fd < 0) return fb;
-
- if(!ioctl(fd, FBIOGET_VSCREENINFO, &fbv_info)) {
- h = fbv_info.left_margin + fbv_info.xres + fbv_info.right_margin + fbv_info.hsync_len;
- v = fbv_info.upper_margin + fbv_info.yres + fbv_info.lower_margin + fbv_info.vsync_len;
- if(fbv_info.pixclock && h && v) {
- fb_info.width = fbv_info.xres;
- fb_info.height = fbv_info.yres;
- fb_info.pix_clock = 1e12 / fbv_info.pixclock;
- fb_info.h_freq = fb_info.pix_clock / h;
- fb_info.v_freq = fb_info.h_freq / v;
- fb = &fb_info;
- ADD2LOG("fb: size %d x %d\n", fb_info.width, fb_info.height);
- ADD2LOG("fb: timing %.2f MHz, %.2f kHz, %.2f Hz\n", fb_info.pix_clock * 1e-6, fb_info.h_freq * 1e-3, fb_info.v_freq);
- }
- }
-
- close(fd);
-
- return fb;
-}
+++ /dev/null
-void hd_scan_fb(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "klog.h"
-#include "floppy.h"
-
-static void dump_floppy_data(hd_data_t *hd_data);
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * floppy info
- *
- * This should currently be called *before* scan_misc() so we can try to get
- * the floppy controller resources in scan_misc() by actually accessing the
- * floppy drive. (Otherwise there would be a rather longish timeout.)
- *
- * This is all rather strange and should be rewritten...
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-
-void hd_scan_floppy(hd_data_t *hd_data)
-{
- hd_t *hd;
- char b0[10], b1[10], c;
- unsigned u;
- int fd, i, floppy_ctrls = 0, floppy_ctrl_idx = 0;
- str_list_t *sl;
- hd_res_t *res;
- int floppy_stat[2] = { 1, 1 };
-
- if(!hd_probe_feature(hd_data, pr_floppy)) return;
-
- hd_data->module = mod_floppy;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->floppy = free_str_list(hd_data->floppy);
-
- PROGRESS(1, 0, "get nvram");
-
- /*
- * Look for existing floppy controller entries (typically there will be
- * *none*).
- */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_storage && hd->sub_class.id == sc_sto_floppy) {
- floppy_ctrls++;
- floppy_ctrl_idx = hd->idx;
- }
- }
-
- /*
- * Is enough to load the nvram module.
- *
- * Note: although you must be root to access /dev/nvram, every
- * user can read /proc/nvram.
- */
- fd = open(DEV_NVRAM, O_RDONLY | O_NONBLOCK);
- if(fd >= 0) close(fd);
-
- if(
- !(hd_data->floppy = read_file(PROC_NVRAM_24, 0, 0)) &&
- !(hd_data->floppy = read_file(PROC_NVRAM_22, 0, 0))
- );
-
- if(hd_data->floppy && (hd_data->debug & HD_DEB_FLOPPY)) dump_floppy_data(hd_data);
-
- if(!hd_data->klog) read_klog(hd_data);
-
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(sscanf(sl->str, "<4>floppy%u: no floppy controllers foun%c", &u, &c) == 2) {
- if(u < sizeof floppy_stat / sizeof *floppy_stat) {
- floppy_stat[u] = 0;
- }
- }
- }
-
- if(hd_data->floppy) {
- PROGRESS(2, 0, "nvram info");
- sl = hd_data->floppy;
- }
- else {
- PROGRESS(2, 0, "klog info");
- sl = hd_data->klog;
- }
-
- for(; sl; sl = sl->next) {
- if(hd_data->floppy) {
- i = sscanf(sl->str, " Floppy %u type : %8[0-9.]'' %8[0-9.]%c", &u, b0, b1, &c) == 4;
- }
- else {
- i = sscanf(sl->str, "<6>Floppy drive(s): fd%u is %8[0-9.]%c", &u, b1, &c) == 3;
- *b0 = 0;
- }
-
- if(i) {
- if(
- !floppy_ctrls &&
- u < sizeof floppy_stat / sizeof *floppy_stat &&
- floppy_stat[u]
- ) {
- /* create one, if missing (there's no floppy without a controller...) */
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_floppy;
- floppy_ctrl_idx = hd->idx;
- floppy_ctrls++;
- }
-
- if(floppy_ctrls) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage_device;
- hd->sub_class.id = sc_sdev_floppy;
- hd->bus.id = bus_floppy;
- hd->slot = u;
- str_printf(&hd->unix_dev_name, 0, "/dev/fd%u", u);
-
- if(*b0) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.val1 = str2float(b0, 2);
- res->size.unit = size_unit_cinch;
- }
-
- /* 'k' or 'M' */
- i = c == 'M' ? str2float(b1, 3) : str2float(b1, 0);
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.val1 = i << 1;
- res->size.val2 = 0x200;
- res->size.unit = size_unit_sectors;
-
- /* the only choice... */
- if(floppy_ctrls == 1) hd->attached_to = floppy_ctrl_idx;
- }
- }
- }
-}
-
-
-/*
- * Add floppy data to the global log.
- */
-void dump_floppy_data(hd_data_t *hd_data)
-{
- str_list_t *sl;
-
- ADD2LOG("----- /proc/nvram -----\n");
- for(sl = hd_data->floppy; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/nvram end -----\n");
-}
+++ /dev/null
-void hd_scan_floppy(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <ctype.h>
-#include <errno.h>
-#include <dirent.h>
-#include <time.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <sys/mount.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-typedef unsigned long kernel_ulong_t;
-#include <linux/types.h>
-#include <linux/pci.h>
-#include <linux/hdreg.h>
-#define _LINUX_AUDIT_H_
-#include <linux/fs.h>
-
-#define u64 uint64_t
-
-#ifndef BLKSSZGET
-#define BLKSSZGET _IO(0x12,104) /* get block device sector size */
-#endif
-
-#include "hd.h"
-#include "hddb.h"
-#include "hd_int.h"
-#include "smbios.h"
-#include "memory.h"
-#include "isapnp.h"
-#include "monitor.h"
-#include "cpu.h"
-#include "misc.h"
-#include "mouse.h"
-#include "floppy.h"
-#include "bios.h"
-#include "serial.h"
-#include "net.h"
-#include "version.h"
-#include "usb.h"
-#include "adb.h"
-#include "modem.h"
-#include "parallel.h"
-#include "isa.h"
-#include "isdn.h"
-#include "kbd.h"
-#include "prom.h"
-#include "sbus.h"
-#include "int.h"
-#include "braille.h"
-#include "sys.h"
-#include "manual.h"
-#include "fb.h"
-#include "pppoe.h"
-#include "pcmcia.h"
-#include "s390.h"
-#include "pci.h"
-#include "block.h"
-#include "edd.h"
-#include "input.h"
-#include "wlan.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * various functions commmon to all probing modules
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifdef __i386__
-#define HD_ARCH "ia32"
-#endif
-
-#ifdef __ia64__
-#define HD_ARCH "ia64"
-#endif
-
-#ifdef __alpha__
-#define HD_ARCH "axp"
-#endif
-
-#ifdef __PPC__
-#define HD_ARCH "ppc"
-#endif
-
-#ifdef __sparc__
-#define HD_ARCH "sparc"
-#endif
-
-#ifdef __s390x__
-#define HD_ARCH "s390x"
-#else
-#ifdef __s390__
-#define HD_ARCH "s390"
-#endif
-#endif
-
-#ifdef __arm__
-#define HD_ARCH "arm"
-#endif
-
-#ifdef __mips__
-#define HD_ARCH "mips"
-#endif
-
-#ifdef __x86_64__
-#define HD_ARCH "x86-64"
-#endif
-
-#ifdef __hppa__
-#define HD_ARCH "hppa"
-#endif
-
-typedef struct disk_s {
- struct disk_s *next;
- unsigned crc;
- unsigned crc_match:1;
- unsigned hd_idx;
- char *dev_name;
- unsigned char *data;
-} disk_t;
-
-static struct s_pr_flags *get_pr_flags(enum probe_feature feature);
-static void fix_probe_features(hd_data_t *hd_data);
-static void set_probe_feature(hd_data_t *hd_data, enum probe_feature feature, unsigned val);
-static void free_old_hd_entries(hd_data_t *hd_data);
-static hd_t *free_hd_entry(hd_t *hd);
-static hd_t *add_hd_entry2(hd_t **hd, hd_t *new_hd);
-static void timeout_alarm_handler(int signal);
-static void get_probe_env(hd_data_t *hd_data);
-static void hd_scan_xtra(hd_data_t *hd_data);
-static hd_t *hd_get_device_by_id(hd_data_t *hd_data, char *id);
-static int has_item(hd_hw_item_t *items, hd_hw_item_t item);
-static int has_hw_class(hd_t *hd, hd_hw_item_t *items);
-
-static void test_read_block0_open(void *arg);
-static void get_kernel_version(hd_data_t *hd_data);
-static int is_modem(hd_data_t *hd_data, hd_t *hd);
-static int is_audio(hd_data_t *hd_data, hd_t *hd);
-static void assign_hw_class(hd_data_t *hd_data, hd_t *hd);
-static void short_vendor(char *vendor);
-static void create_model_name(hd_data_t *hd_data, hd_t *hd);
-
-static void sigchld_handler(int);
-static pid_t child_id;
-static volatile pid_t child;
-static char *hd_shm_add_str(hd_data_t *hd_data, char *str);
-static str_list_t *hd_shm_add_str_list(hd_data_t *hd_data, str_list_t *sl);
-
-static hd_udevinfo_t *hd_free_udevinfo(hd_udevinfo_t *ui);
-static hd_sysfsdrv_t *hd_free_sysfsdrv(hd_sysfsdrv_t *sf);
-
-
-/*
- * Names of the probing modules.
- * Cf. enum mod_idx in hd_int.h.
- */
-static struct s_mod_names {
- unsigned val;
- char *name;
-} pr_modules[] = {
- { mod_none, "none"},
- { mod_memory, "memory"},
- { mod_pci, "pci"},
- { mod_isapnp, "isapnp"},
- { mod_pnpdump, "pnpdump"},
- { mod_net, "net"},
- { mod_floppy, "floppy"},
- { mod_misc, "misc" },
- { mod_bios, "bios"},
- { mod_cpu, "cpu"},
- { mod_monitor, "monitor"},
- { mod_serial, "serial"},
- { mod_mouse, "mouse"},
- { mod_scsi, "scsi"},
- { mod_usb, "usb"},
- { mod_adb, "adb"},
- { mod_modem, "modem"},
- { mod_parallel, "parallel" },
- { mod_isa, "isa" },
- { mod_isdn, "isdn" },
- { mod_kbd, "kbd" },
- { mod_prom, "prom" },
- { mod_sbus, "sbus" },
- { mod_int, "int" },
- { mod_braille, "braille" },
- { mod_xtra, "hd" },
- { mod_sys, "sys" },
- { mod_manual, "manual" },
- { mod_fb, "fb" },
- { mod_pppoe, "pppoe" },
- { mod_pcmcia, "pcmcia" },
- { mod_s390, "s390" },
- { mod_sysfs, "sysfs" },
- { mod_dsl, "dsl" },
- { mod_block, "block" },
- { mod_edd, "edd" },
- { mod_input, "input" }
-};
-
-/*
- * Names for the probe flags. Used for debugging and command line parsing in
- * hw.c. Cf. enum probe_feature, hd_data_t.probe.
- */
-static struct s_pr_flags {
- enum probe_feature val, parent;
- unsigned mask; /* bit 0: default, bit 1: all, bit 2: max, bit 3: linuxrc */
- char *name;
-} pr_flags[] = {
- { pr_default, -1, 1, "default" },
- { pr_all, -1, 2 , "all" },
- { pr_max, -1, 4 , "max" },
- { pr_lxrc, -1, 8 , "lxrc" },
- { pr_memory, 0, 8|4|2|1, "memory" },
- { pr_pci, 0, 8|4|2|1, "pci" },
- { pr_s390, 0, 8|4|2|1, "s390" },
- { pr_s390disks, 0, 0, "s390disks" },
- { pr_isapnp, 0, 4|2|1, "isapnp" },
- { pr_isapnp_old, pr_isapnp, 0, "isapnp.old" },
- { pr_isapnp_new, pr_isapnp, 0, "isapnp.new" },
- { pr_isapnp_mod, 0, 4 , "isapnp.mod" },
- { pr_isapnp, 0, 0, "pnpdump" }, /* alias for isapnp */
- { pr_net, 0, 8|4|2|1, "net" },
- { pr_floppy, 0, 8|4|2|1, "floppy" },
- { pr_misc, pr_bios, 8|4|2|1, "misc" }, // ugly hack!
- { pr_misc_serial, pr_misc, 8|4|2|1, "misc.serial" },
- { pr_misc_par, pr_misc, 4|2|1, "misc.par" },
- { pr_misc_floppy, pr_misc, 8|4|2|1, "misc.floppy" },
- { pr_bios, 0, 8|4|2|1, "bios" },
- { pr_bios_vesa, pr_bios, 4|2|1, "bios.vesa" },
- { pr_bios_ddc, pr_bios_vesa, 0, "bios.ddc" },
- { pr_bios_fb, pr_bios_vesa, 0, "bios.fb" },
- { pr_bios_mode, pr_bios_vesa, 0, "bios.mode" },
- { pr_bios_vbe, pr_bios_mode, 0, "bios.vbe" }, // just an alias
- { pr_cpu, 0, 8|4|2|1, "cpu" },
- { pr_monitor, 0, 8|4|2|1, "monitor" },
- { pr_serial, 0, 4|2|1, "serial" },
-#if defined(__sparc__)
- /* Probe for mouse on SPARC */
- { pr_mouse, 0, 8|4|2|1, "mouse" },
-#else
- { pr_mouse, 0, 4|2|1, "mouse" },
-#endif
- { pr_scsi, 0, 8|4|2|1, "scsi" },
- { pr_scsi_noserial, 0, 0, "scsi.noserial" },
- { pr_usb, 0, 8|4|2|1, "usb" },
- { pr_usb_mods, 0, 4 , "usb.mods" },
- { pr_adb, 0, 8|4|2|1, "adb" },
- { pr_modem, 0, 4|2|1, "modem" },
- { pr_modem_usb, pr_modem, 4|2|1, "modem.usb" },
- { pr_parallel, 0, 4|2|1, "parallel" },
- { pr_parallel_lp, pr_parallel, 4|2|1, "parallel.lp" },
- { pr_parallel_zip, pr_parallel, 4|2|1, "parallel.zip" },
- { pr_parallel_imm, 0, 0, "parallel.imm" },
- { pr_isa, 0, 4|2|1, "isa" },
- { pr_isa_isdn, pr_isa, 4|2|1, "isa.isdn" },
- { pr_isdn, 0, 4|2|1, "isdn" },
- { pr_kbd, 0, 8|4|2|1, "kbd" },
- { pr_prom, 0, 8|4|2|1, "prom" },
- { pr_sbus, 0, 8|4|2|1, "sbus" },
- { pr_int, 0, 8|4|2|1, "int" },
-#if defined(__i386__) || defined (__x86_64__)
- { pr_braille, 0, 4|2|1, "braille" },
- { pr_braille_alva, pr_braille, 4|2|1, "braille.alva" },
- { pr_braille_fhp, pr_braille, 4|2|1, "braille.fhp" },
- { pr_braille_ht, pr_braille, 4|2|1, "braille.ht" },
- { pr_braille_baum, pr_braille, 4|2|1, "braille.baum" },
-#else
- { pr_braille, 0, 4|2 , "braille" },
- { pr_braille_alva, pr_braille, 0, "braille.alva" },
- { pr_braille_fhp, pr_braille, 4|2 , "braille.fhp" },
- { pr_braille_ht, pr_braille, 4|2 , "braille.ht" },
- { pr_braille_baum, pr_braille, 4|2 , "braille.baum" },
-#endif
- { pr_ignx11, 0, 0, "ignx11" },
- { pr_sys, 0, 8|4|2|1, "sys" },
- { pr_manual, 0, 8|4|2|1, "manual" },
- { pr_fb, 0, 8|4|2|1, "fb" },
- { pr_pppoe, 0, 8|4|2|1, "pppoe" },
- /* dummy, used to turn off hwscan */
- { pr_scan, 0, 0, "scan" },
- { pr_pcmcia, 0, 8|4|2|1, "pcmcia" },
- { pr_fork, 0, 0, "fork" },
- { pr_cpuemu, 0, 0, "cpuemu" },
- { pr_cpuemu_debug, pr_cpuemu, 0, "cpuemu.debug" },
- { pr_sysfs, 0, 0, "sysfs" },
- { pr_dsl, 0, 4|2|1, "dsl" },
- { pr_udev, 0, 8|4|2|1, "udev" },
- { pr_block, 0, 8|4|2|1, "block" },
- { pr_block_cdrom, pr_block, 8|4|2|1, "block.cdrom" },
- { pr_block_part, pr_block, 8|4|2|1, "block.part" },
- { pr_block_mods, pr_block, 8|4|2|1, "block.mods" },
- { pr_edd, 0, 8|4|2|1, "edd" },
- { pr_edd_mod, pr_edd, 8|4|2|1, "edd.mod" },
- { pr_input, 0, 8|4|2|1, "input" },
- { pr_wlan, 0, 8|4|2|1, "wlan" }
-};
-
-struct s_pr_flags *get_pr_flags(enum probe_feature feature)
-{
- int i;
-
- for(i = 0; (unsigned) i < sizeof pr_flags / sizeof *pr_flags; i++) {
- if(feature == pr_flags[i].val) return pr_flags + i;
- }
-
- return NULL;
-}
-
-void fix_probe_features(hd_data_t *hd_data)
-{
- int i;
-
- for(i = 0; (unsigned) i < sizeof hd_data->probe; i++) {
- hd_data->probe[i] |= hd_data->probe_set[i];
- hd_data->probe[i] &= ~hd_data->probe_clr[i];
- }
-}
-
-void set_probe_feature(hd_data_t *hd_data, enum probe_feature feature, unsigned val)
-{
- unsigned ofs, bit, mask;
- int i;
- struct s_pr_flags *pr;
-
- if(!(pr = get_pr_flags(feature))) return;
-
- if(pr->parent == -1u) {
- mask = pr->mask;
- for(i = 0; (unsigned) i < sizeof pr_flags / sizeof *pr_flags; i++) {
- if(pr_flags[i].parent != -1u && (pr_flags[i].mask & mask))
- set_probe_feature(hd_data, pr_flags[i].val, val);
- }
- }
- else {
- ofs = feature >> 3; bit = feature & 7;
- if(ofs < sizeof hd_data->probe) {
- if(val) {
- hd_data->probe_set[ofs] |= 1 << bit;
- hd_data->probe_clr[ofs] &= ~(1 << bit);
- }
- else {
- hd_data->probe_clr[ofs] |= 1 << bit;
- hd_data->probe_set[ofs] &= ~(1 << bit);
- }
- }
- if(pr->parent) set_probe_feature(hd_data, pr->parent, val);
- }
-
- fix_probe_features(hd_data);
-}
-
-void hd_set_probe_feature(hd_data_t *hd_data, enum probe_feature feature)
-{
- unsigned ofs, bit, mask;
- int i;
- struct s_pr_flags *pr;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_set_probe_feature, hd_data), hd_data);
- }
-#endif
-
- if(!(pr = get_pr_flags(feature))) return;
-
- if(pr->parent == -1u) {
- mask = pr->mask;
- for(i = 0; (unsigned) i < sizeof pr_flags / sizeof *pr_flags; i++) {
- if(pr_flags[i].parent != -1u && (pr_flags[i].mask & mask))
- hd_set_probe_feature(hd_data, pr_flags[i].val);
- }
- }
- else {
- ofs = feature >> 3; bit = feature & 7;
- if(ofs < sizeof hd_data->probe)
- hd_data->probe[ofs] |= 1 << bit;
- if(pr->parent) hd_set_probe_feature(hd_data, pr->parent);
- }
-
- fix_probe_features(hd_data);
-}
-
-void hd_clear_probe_feature(hd_data_t *hd_data, enum probe_feature feature)
-{
- unsigned ofs, bit, mask;
- int i;
- struct s_pr_flags *pr;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_clear_probe_feature, hd_data), hd_data);
- }
-#endif
-
- if(!(pr = get_pr_flags(feature))) return;
-
- if(pr->parent == -1u) {
- mask = pr->mask;
- for(i = 0; (unsigned) i < sizeof pr_flags / sizeof *pr_flags; i++) {
- if(pr_flags[i].parent != -1u && (pr_flags[i].mask & mask))
- hd_clear_probe_feature(hd_data, pr_flags[i].val);
- }
- }
- else {
- ofs = feature >> 3; bit = feature & 7;
- if(ofs < sizeof hd_data->probe)
- hd_data->probe[ofs] &= ~(1 << bit);
- }
-}
-
-int hd_probe_feature(hd_data_t *hd_data, enum probe_feature feature)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_probe_feature, hd_data), hd_data);
- }
-#endif
-
- if(feature < 0 || feature >= pr_default) return 0;
-
- return hd_data->probe[feature >> 3] & (1 << (feature & 7)) ? 1 : 0;
-}
-
-
-void hd_set_probe_feature_hw(hd_data_t *hd_data, hd_hw_item_t item)
-{
- hd_set_probe_feature(hd_data, pr_int);
- hd_set_probe_feature(hd_data, pr_manual);
-
- switch(item) {
- case hw_cdrom:
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_block_mods);
- hd_set_probe_feature(hd_data, pr_scsi);
- if(!hd_data->flags.fast) {
- hd_set_probe_feature(hd_data, pr_block_cdrom);
- }
- break;
-
- case hw_floppy:
- hd_set_probe_feature(hd_data, pr_floppy);
- hd_set_probe_feature(hd_data, pr_misc_floppy);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- hd_set_probe_feature(hd_data, pr_scsi);
- break;
-
- case hw_partition:
- hd_set_probe_feature(hd_data, pr_block_part);
-
- case hw_disk:
- hd_set_probe_feature(hd_data, pr_s390disks);
- hd_set_probe_feature(hd_data, pr_bios); // bios disk order
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- hd_set_probe_feature(hd_data, pr_edd_mod);
- hd_set_probe_feature(hd_data, pr_scsi);
- break;
-
- case hw_block:
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_s390disks);
- hd_set_probe_feature(hd_data, pr_bios); // bios disk order
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- hd_set_probe_feature(hd_data, pr_edd_mod);
- hd_set_probe_feature(hd_data, pr_scsi);
- if(!hd_data->flags.fast) {
- hd_set_probe_feature(hd_data, pr_floppy);
- hd_set_probe_feature(hd_data, pr_misc_floppy);
- hd_set_probe_feature(hd_data, pr_block_cdrom);
- }
- hd_set_probe_feature(hd_data, pr_block_part);
- break;
-
- case hw_network:
- hd_set_probe_feature(hd_data, pr_net);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_usb);
- break;
-
- case hw_display:
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_sbus);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_misc); /* for isa cards */
- break;
-
- case hw_monitor:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_bios_ddc);
- hd_set_probe_feature(hd_data, pr_fb);
- hd_set_probe_feature(hd_data, pr_monitor);
- break;
-
- case hw_framebuffer:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_bios_fb);
- hd_set_probe_feature(hd_data, pr_fb);
- break;
-
- case hw_mouse:
- hd_set_probe_feature(hd_data, pr_misc);
- if(!hd_data->flags.fast) {
- hd_set_probe_feature(hd_data, pr_serial);
- }
- hd_set_probe_feature(hd_data, pr_adb);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_kbd);
- hd_set_probe_feature(hd_data, pr_sys);
- hd_set_probe_feature(hd_data, pr_bios);
- hd_set_probe_feature(hd_data, pr_mouse);
- hd_set_probe_feature(hd_data, pr_input);
- break;
-
- case hw_joystick:
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_input);
- break;
-
- case hw_chipcard:
- hd_set_probe_feature(hd_data, pr_misc);
- if(!hd_data->flags.fast) {
- hd_set_probe_feature(hd_data, pr_serial);
- }
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_mouse); /* we need the pnp code */
- break;
-
- case hw_camera:
- hd_set_probe_feature(hd_data, pr_usb);
- break;
-
- case hw_keyboard:
- hd_set_probe_feature(hd_data, pr_cpu);
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_adb);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_kbd);
- hd_set_probe_feature(hd_data, pr_input);
-#ifdef __PPC__
- hd_set_probe_feature(hd_data, pr_serial);
-#endif
- break;
-
- case hw_sound:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_isapnp);
- hd_set_probe_feature(hd_data, pr_isapnp_mod);
- hd_set_probe_feature(hd_data, pr_sbus);
- hd_set_probe_feature(hd_data, pr_prom);
- break;
-
- case hw_isdn:
- hd_set_probe_feature(hd_data, pr_misc); /* get basic i/o res */
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_pcmcia);
- hd_set_probe_feature(hd_data, pr_isapnp);
- hd_set_probe_feature(hd_data, pr_isapnp_mod);
- hd_set_probe_feature(hd_data, pr_isa_isdn);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_isdn);
- break;
-
- case hw_modem:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_serial);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_modem);
- hd_set_probe_feature(hd_data, pr_modem_usb);
- break;
-
- case hw_storage_ctrl:
- hd_set_probe_feature(hd_data, pr_floppy);
- hd_set_probe_feature(hd_data, pr_sys);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_sbus);
- if(!hd_data->flags.fast) {
- hd_set_probe_feature(hd_data, pr_misc_par);
- hd_set_probe_feature(hd_data, pr_parallel_zip);
- }
- hd_set_probe_feature(hd_data, pr_s390);
- hd_set_probe_feature(hd_data, pr_prom);
-#ifdef __PPC__
- hd_set_probe_feature(hd_data, pr_misc);
-#endif
- break;
-
- case hw_network_ctrl:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_net);
- hd_set_probe_feature(hd_data, pr_pcmcia);
- hd_set_probe_feature(hd_data, pr_isapnp);
- hd_set_probe_feature(hd_data, pr_isapnp_mod);
- hd_set_probe_feature(hd_data, pr_sbus);
- hd_set_probe_feature(hd_data, pr_isdn);
- hd_set_probe_feature(hd_data, pr_dsl);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_s390);
- hd_set_probe_feature(hd_data, pr_wlan);
- break;
-
- case hw_printer:
- hd_set_probe_feature(hd_data, pr_sys);
- hd_set_probe_feature(hd_data, pr_bios);
- hd_set_probe_feature(hd_data, pr_misc_par);
- hd_set_probe_feature(hd_data, pr_parallel_lp);
- hd_set_probe_feature(hd_data, pr_usb);
- break;
-
- case hw_wlan:
- hd_set_probe_feature(hd_data, pr_pcmcia);
- hd_set_probe_feature(hd_data, pr_wlan);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_net);
- break;
-
- case hw_tv:
- case hw_dvb:
- hd_set_probe_feature(hd_data, pr_pci);
- break;
-
- case hw_scanner:
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_scsi);
- break;
-
- case hw_braille:
- hd_set_probe_feature(hd_data, pr_misc_serial);
- hd_set_probe_feature(hd_data, pr_serial);
- hd_set_probe_feature(hd_data, pr_braille_alva);
- hd_set_probe_feature(hd_data, pr_braille_fhp);
- hd_set_probe_feature(hd_data, pr_braille_ht);
- hd_set_probe_feature(hd_data, pr_braille_baum);
- hd_set_probe_feature(hd_data, pr_usb);
- break;
-
- case hw_sys:
- hd_set_probe_feature(hd_data, pr_bios);
- hd_set_probe_feature(hd_data, pr_prom);
- hd_set_probe_feature(hd_data, pr_s390);
- hd_set_probe_feature(hd_data, pr_sys);
- break;
-
- case hw_cpu:
- hd_set_probe_feature(hd_data, pr_cpu);
- break;
-
- case hw_bios:
- hd_set_probe_feature(hd_data, pr_bios);
- hd_set_probe_feature(hd_data, pr_edd_mod);
- break;
-
- case hw_vbe:
- hd_set_probe_feature(hd_data, pr_bios_ddc);
- hd_set_probe_feature(hd_data, pr_bios_fb);
- hd_set_probe_feature(hd_data, pr_bios_mode);
- hd_set_probe_feature(hd_data, pr_monitor);
- break;
-
- case hw_manual:
- hd_set_probe_feature(hd_data, pr_manual);
- break;
-
- case hw_usb_ctrl:
- case hw_pcmcia_ctrl:
- case hw_ieee1394_ctrl:
- case hw_hotplug_ctrl:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_pci);
- break;
-
- case hw_usb:
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_isdn); // need pr_misc, too?
- hd_set_probe_feature(hd_data, pr_dsl);
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- hd_set_probe_feature(hd_data, pr_scsi);
- hd_set_probe_feature(hd_data, pr_net);
- hd_data->flags.fast = 1;
- break;
-
- case hw_pci:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_net);
- hd_set_probe_feature(hd_data, pr_isdn);
- hd_set_probe_feature(hd_data, pr_dsl);
- hd_set_probe_feature(hd_data, pr_prom);
- break;
-
- case hw_isapnp:
- hd_set_probe_feature(hd_data, pr_isapnp);
- hd_set_probe_feature(hd_data, pr_isapnp_mod);
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_isdn);
- break;
-
- case hw_bridge:
- hd_set_probe_feature(hd_data, pr_misc);
- hd_set_probe_feature(hd_data, pr_pci);
- break;
-
- case hw_hub:
- hd_set_probe_feature(hd_data, pr_usb);
- break;
-
- case hw_memory:
- hd_set_probe_feature(hd_data, pr_memory);
- break;
-
- case hw_scsi:
- case hw_tape:
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- hd_set_probe_feature(hd_data, pr_scsi);
- break;
-
- case hw_ide:
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- break;
-
- case hw_pppoe:
- hd_set_probe_feature(hd_data, pr_net);
- hd_set_probe_feature(hd_data, pr_pppoe);
- break;
-
- case hw_dsl:
- hd_set_probe_feature(hd_data, pr_net);
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_pppoe);
- hd_set_probe_feature(hd_data, pr_usb);
- break;
-
- case hw_pcmcia:
- hd_set_probe_feature(hd_data, pr_pci);
- hd_set_probe_feature(hd_data, pr_pcmcia);
- hd_set_probe_feature(hd_data, pr_wlan);
- hd_set_probe_feature(hd_data, pr_net);
- hd_set_probe_feature(hd_data, pr_isdn);
- break;
-
- case hw_bluetooth:
- hd_set_probe_feature(hd_data, pr_usb);
- hd_set_probe_feature(hd_data, pr_isdn); // need pr_misc, too?
- hd_set_probe_feature(hd_data, pr_dsl);
- break;
-
- case hw_all:
- hd_set_probe_feature(hd_data, pr_default);
- break;
-
- case hw_redasd:
- hd_set_probe_feature(hd_data, pr_block);
- hd_set_probe_feature(hd_data, pr_block_mods);
- break;
-
- case hw_unknown:
- case hw_ieee1394:
- case hw_hotplug:
- case hw_zip:
- break;
- }
-}
-
-
-/*
- * Free all data associated with a hd_data_t struct. *Not* the struct itself.
- */
-hd_data_t *hd_free_hd_data(hd_data_t *hd_data)
-{
- hddb_pci_t *p;
- unsigned u;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_free_hd_data, hd_data), hd_data);
- }
-#endif
-
- add_hd_entry2(&hd_data->old_hd, hd_data->hd); hd_data->hd = NULL;
- hd_data->log = free_mem(hd_data->log);
- free_old_hd_entries(hd_data); /* hd_data->old_hd */
- /* hd_data->pci is always NULL */
- /* hd_data->isapnp->card is always NULL */
- hd_data->isapnp = free_mem(hd_data->isapnp);
- /* hd_data->cdrom is always NULL */
- hd_data->net = free_str_list(hd_data->net);
- hd_data->floppy = free_str_list(hd_data->floppy);
- hd_data->misc = free_misc(hd_data->misc);
- /* hd_data->serial is always NULL */
- /* hd_data->scsi is always NULL */
- /* hd_data->ser_mouse is always NULL */
- /* hd_data->ser_modem is always NULL */
- hd_data->cpu = free_str_list(hd_data->cpu);
- hd_data->klog = free_str_list(hd_data->klog);
- hd_data->proc_usb = free_str_list(hd_data->proc_usb);
- /* hd_data->usb is always NULL */
-
- if((p = hd_data->hddb_pci)) {
- for(; p->module; p++) free_mem(p->module);
- }
- if(hd_data->hddb2[0]) {
- free_mem(hd_data->hddb2[0]->list);
- free_mem(hd_data->hddb2[0]->ids);
- free_mem(hd_data->hddb2[0]->strings);
- hd_data->hddb2[0] = free_mem(hd_data->hddb2[0]);
- }
- /* hddb2[1] is the static internal database; don't try to free it! */
- hd_data->hddb2[1] = NULL;
-
- hd_data->hddb_pci = free_mem(hd_data->hddb_pci);
- hd_data->kmods = free_str_list(hd_data->kmods);
- hd_data->bios_rom.data = free_mem(hd_data->bios_rom.data);
- hd_data->bios_ram.data = free_mem(hd_data->bios_ram.data);
- hd_data->bios_ebda.data = free_mem(hd_data->bios_ebda.data);
- hd_data->cmd_line = free_mem(hd_data->cmd_line);
- hd_data->xtra_hd = free_str_list(hd_data->xtra_hd);
- hd_data->devtree = free_devtree(hd_data);
- hd_data->manual = hd_free_manual(hd_data->manual);
- hd_data->disks = free_str_list(hd_data->disks);
- hd_data->partitions = free_str_list(hd_data->partitions);
- hd_data->cdroms = free_str_list(hd_data->cdroms);
-
- hd_data->smbios = smbios_free(hd_data->smbios);
-
- hd_data->udevinfo = hd_free_udevinfo(hd_data->udevinfo);
- hd_data->sysfsdrv = hd_free_sysfsdrv(hd_data->sysfsdrv);
-
- hd_data->only = free_str_list(hd_data->only);
- hd_data->scanner_db = free_str_list(hd_data->scanner_db);
-
- for(u = 0; u < sizeof hd_data->edd / sizeof *hd_data->edd; u++) {
- hd_data->edd[u].sysfs_id = free_mem(hd_data->edd[u].sysfs_id);
- }
-
- hd_data->last_idx = 0;
-
- hd_shm_done(hd_data);
-
- memset(hd_data, 0, sizeof *hd_data);
-
- return NULL;
-}
-
-
-/*
- * Free all data associated with a driver_info_t struct. Even the struct itself.
- */
-driver_info_t *free_driver_info(driver_info_t *di)
-{
- driver_info_t *next;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(free_driver_info, di), di);
- }
-#endif
-
- for(; di; di = next) {
- next = di->next;
-
- switch(di->any.type) {
- case di_any:
- case di_display:
- break;
-
- case di_module:
- free_str_list(di->module.names);
- free_str_list(di->module.mod_args);
- free_mem(di->module.conf);
- break;
-
- case di_mouse:
- free_mem(di->mouse.xf86);
- free_mem(di->mouse.gpm);
- break;
-
- case di_x11:
- free_mem(di->x11.server);
- free_mem(di->x11.xf86_ver);
- free_str_list(di->x11.extensions);
- free_str_list(di->x11.options);
- free_str_list(di->x11.raw);
- free_mem(di->x11.script);
- break;
-
- case di_isdn:
- free_mem(di->isdn.i4l_name);
- if(di->isdn.params) {
- isdn_parm_t *p = di->isdn.params, *next;
- for(; p; p = next) {
- next = p->next;
- free_mem(p->name);
- free_mem(p->alt_value);
- free_mem(p);
- }
- }
- break;
-
- case di_dsl:
- free_mem(di->dsl.name);
- free_mem(di->dsl.mode);
- break;
-
- case di_kbd:
- free_mem(di->kbd.XkbRules);
- free_mem(di->kbd.XkbModel);
- free_mem(di->kbd.XkbLayout);
- free_mem(di->kbd.keymap);
- break;
- }
-
- free_str_list(di->any.hddb0);
- free_str_list(di->any.hddb1);
-
- free_mem(di);
- }
-
- return NULL;
-}
-
-
-int exists_hd_entry(hd_data_t *hd_data, hd_t *old_hd, hd_t *hd_ex)
-{
- hd_t *hd;
-
- if(!hd_ex) return 0;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd == hd_ex) return 1;
- }
- for(hd = old_hd; hd; hd = hd->next) {
- if(hd == hd_ex) return 1;
- }
-
- return 0;
-}
-
-
-/*!
- * \note This may not free it.
- */
-hd_t *hd_free_hd_list(hd_t *hd)
-{
- hd_t *h;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_free_hd_list, hd), hd);
- }
-#endif
-
- /* Note: hd->next should better be NULL! */
- if(hd && hd->tag.freeit) {
- free_hd_entry(hd);
- return free_mem(hd);
- }
-
- /* do nothing unless the list holds only copies of hd_t entries */
- for(h = hd; h; h = h->next) if(!h->ref) return NULL;
-
- for(; hd; hd = (h = hd)->next, free_mem(h));
-
- return NULL;
-}
-
-hd_detail_t *free_hd_detail(hd_detail_t *d)
-{
- if(!d) return NULL;
-
- switch(d->type) {
- case hd_detail_pci: {
- pci_t *p = d->pci.data;
-
- free_mem(p->log);
- free_mem(p->sysfs_id);
- free_mem(p->sysfs_bus_id);
- free_mem(p);
- }
- break;
-
- case hd_detail_usb:
- {
- usb_t *u = d->usb.data;
-
- if(!u->cloned) {
- free_str_list(u->c);
- free_str_list(u->e);
- }
- free_str_list(u->d);
- free_str_list(u->p);
- free_str_list(u->s);
- free_str_list(u->t);
- free_str_list(u->i);
-
- free_mem(u->manufact);
- free_mem(u->product);
- free_mem(u->serial);
- free_mem(u->driver);
- free_mem(u->raw_descr.data);
-
- free_mem(u);
- }
- break;
-
- case hd_detail_isapnp:
- {
- isapnp_dev_t *i = d->isapnp.data;
- int j;
-
- if(!i->ref) {
- free_mem(i->card->serial);
- free_mem(i->card->card_regs);
- free_mem(i->card->ldev_regs);
- for(j = 0; j < i->card->res_len; j++) {
- free_mem(i->card->res[j].data);
- }
- if(i->card->res) free_mem(i->card->res);
- }
- free_mem(i->card);
- free_mem(i);
- }
- break;
-
- case hd_detail_cdrom:
- {
- cdrom_info_t *c = d->cdrom.data;
-
- if(c) {
- free_mem(c->name);
- free_mem(c->iso9660.volume);
- free_mem(c->iso9660.publisher);
- free_mem(c->iso9660.preparer);
- free_mem(c->iso9660.application);
- free_mem(c->iso9660.creation_date);
- free_mem(c->el_torito.id_string);
- free_mem(c->el_torito.label);
-
- free_mem(c);
- }
- }
- break;
-
- case hd_detail_floppy:
- free_mem(d->floppy.data);
- break;
-
- case hd_detail_bios:
- {
- bios_info_t *b = d->bios.data;
-
- free_mem(b->vbe.oem_name);
- free_mem(b->vbe.vendor_name);
- free_mem(b->vbe.product_name);
- free_mem(b->vbe.product_revision);
- free_mem(b->vbe.mode);
- free_mem(b->lcd.vendor);
- free_mem(b->lcd.name);
- free_mem(b->mouse.vendor);
- free_mem(b->mouse.type);
-
- free_mem(b);
- }
- break;
-
- case hd_detail_cpu:
- {
- cpu_info_t *c = d->cpu.data;
-
- free_mem(c->vend_name);
- free_mem(c->model_name);
- free_mem(c->platform);
- free_str_list(c->features);
- free_mem(c);
- }
- break;
-
- case hd_detail_prom:
- free_mem(d->prom.data);
- break;
-
- case hd_detail_monitor:
- {
- monitor_info_t *m = d->monitor.data;
-
- free_mem(m->vendor);
- free_mem(m->name);
- free_mem(m->serial);
-
- free_mem(m);
- }
- break;
-
- case hd_detail_sys:
- {
- sys_info_t *s = d->sys.data;
-
- free_mem(s->system_type);
- free_mem(s->generation);
- free_mem(s->vendor);
- free_mem(s->model);
- free_mem(s->serial);
- free_mem(s->lang);
-
- free_mem(s);
- }
- break;
-
- case hd_detail_scsi:
- free_scsi(d->scsi.data, 1);
- break;
-
- case hd_detail_devtree:
- /* is freed with hd_data->dev_tree */
- break;
-
- case hd_detail_ccw:
- free_mem(d->ccw.data);
- break;
- }
-
- free_mem(d);
-
- return NULL;
-}
-
-
-hd_t *free_hd_entry(hd_t *hd)
-{
- free_mem(hd->bus.name);
- free_mem(hd->base_class.name);
- free_mem(hd->sub_class.name);
- free_mem(hd->prog_if.name);
- free_mem(hd->vendor.name);
- free_mem(hd->device.name);
- free_mem(hd->sub_vendor.name);
- free_mem(hd->sub_device.name);
- free_mem(hd->revision.name);
- free_mem(hd->serial);
- free_mem(hd->compat_vendor.name);
- free_mem(hd->compat_device.name);
- free_mem(hd->model);
- free_mem(hd->sysfs_id);
- free_mem(hd->sysfs_bus_id);
- free_mem(hd->sysfs_device_link);
- free_str_list(hd->unix_dev_names);
- free_mem(hd->unix_dev_name);
- free_mem(hd->unix_dev_name2);
- free_mem(hd->rom_id);
- free_mem(hd->unique_id);
- free_mem(hd->block0);
- free_mem(hd->driver);
- free_str_list(hd->drivers);
- free_mem(hd->old_unique_id);
- free_mem(hd->unique_id1);
- free_mem(hd->usb_guid);
- free_mem(hd->parent_id);
- free_str_list(hd->child_ids);
- free_mem(hd->config_string);
- free_str_list(hd->extra_info);
-
- free_res_list(hd->res);
-
- free_hd_detail(hd->detail);
-
- free_driver_info(hd->driver_info);
- free_str_list(hd->requires);
-
- memset(hd, 0, sizeof *hd);
-
- return NULL;
-}
-
-misc_t *free_misc(misc_t *m)
-{
- int i, j;
-
- if(!m) return NULL;
-
- for(i = 0; (unsigned) i < m->io_len; i++) {
- free_mem(m->io[i].dev);
- }
- free_mem(m->io);
-
- for(i = 0; (unsigned) i < m->dma_len; i++) {
- free_mem(m->dma[i].dev);
- }
- free_mem(m->dma);
-
- for(i = 0; (unsigned) i < m->irq_len; i++) {
- for(j = 0; j < m->irq[i].devs; j++) {
- free_mem(m->irq[i].dev[j]);
- }
- free_mem(m->irq[i].dev);
- }
- free_mem(m->irq);
-
- free_str_list(m->proc_io);
- free_str_list(m->proc_dma);
- free_str_list(m->proc_irq);
-
- free_mem(m);
-
- return NULL;
-}
-
-scsi_t *free_scsi(scsi_t *scsi, int free_all)
-{
- scsi_t *next;
-
- for(; scsi; scsi = next) {
- next = scsi->next;
-
- free_mem(scsi->dev_name);
- free_mem(scsi->guessed_dev_name);
- free_mem(scsi->vendor);
- free_mem(scsi->model);
- free_mem(scsi->rev);
- free_mem(scsi->type_str);
- free_mem(scsi->serial);
- free_mem(scsi->proc_dir);
- free_mem(scsi->driver);
- free_mem(scsi->info);
- free_mem(scsi->usb_guid);
- free_str_list(scsi->host_info);
- free_mem(scsi->controller_id);
-
- if(!free_all) {
- next = scsi->next;
- memset(scsi, 0, sizeof scsi);
- scsi->next = next;
- break;
- }
-
- free_mem(scsi);
- }
-
- return NULL;
-}
-
-
-hd_manual_t *hd_free_manual(hd_manual_t *manual)
-{
- hd_manual_t *next;
-
- if(!manual) return NULL;
-
- for(; manual; manual = next) {
- next = manual->next;
-
- free_mem(manual->unique_id);
- free_mem(manual->parent_id);
- free_mem(manual->child_ids);
- free_mem(manual->model);
-
- free_mem(manual->config_string);
-
- free_str_list(manual->key);
- free_str_list(manual->value);
-
- free_mem(manual);
- }
-
- return NULL;
-}
-
-
-/*
- * Removes all hd_data->old_hd entries and frees their memory.
- */
-void free_old_hd_entries(hd_data_t *hd_data)
-{
- hd_t *hd, *next;
-
- for(hd = hd_data->old_hd; hd; hd = next) {
- next = hd->next;
-
- if(exists_hd_entry(hd_data, next, hd->ref) && hd->ref->ref_cnt) hd->ref->ref_cnt--;
-
- if(!hd->ref) free_hd_entry(hd);
-
- free_mem(hd);
- }
-
- hd_data->old_hd = NULL;
-}
-
-
-void *new_mem(size_t size)
-{
- void *p;
-
- if(size == 0) return NULL;
-
- p = calloc(size, 1);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "%p\t%p\t0x%x\n", CALLED_FROM(new_mem, size), p, size);
- }
-#endif
-
- if(p) return p;
-
- fprintf(stderr, "memory oops 1\n");
- exit(11);
- /*NOTREACHED*/
- return 0;
-}
-
-void *resize_mem(void *p, size_t n)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log && p) fprintf(libhd_log, "%p\t%p\n", CALLED_FROM(resize_mem, p), p);
- }
-#endif
-
- p = realloc(p, n);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "%p\t%p\t0x%x\n", CALLED_FROM(resize_mem, p), p, n);
- }
-#endif
-
- if(!p) {
- fprintf(stderr, "memory oops 7\n");
- exit(17);
- }
-
- return p;
-}
-
-void *add_mem(void *p, size_t elem_size, size_t n)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log && p) fprintf(libhd_log, "%p\t%p\n", CALLED_FROM(add_mem, p), p);
- }
-#endif
-
- p = realloc(p, (n + 1) * elem_size);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "%p\t%p\t0x%x\n", CALLED_FROM(add_mem, p), p, (n + 1) * elem_size);
- }
-#endif
-
- if(!p) {
- fprintf(stderr, "memory oops 7\n");
- exit(17);
- }
-
- memset(p + n * elem_size, 0, elem_size);
-
- return p;
-}
-
-char *new_str(const char *s)
-{
- char *t;
-
- if(!s) return NULL;
-
- t = strdup(s);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "%p\t%p\t0x%x\n", CALLED_FROM(new_str, s), t, strlen(t) + 1);
- }
-#endif
-
- if(t) return t;
-
- fprintf(stderr, "memory oops 2\n");
- /*NOTREACHED*/
- exit(12);
-
- return NULL;
-}
-
-void *free_mem(void *p)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log && p) fprintf(libhd_log, "%p\t%p\n", CALLED_FROM(free_mem, p), p);
- }
-#endif
-
- if(p) free(p);
-
- return NULL;
-}
-
-void join_res_io(hd_res_t **res1, hd_res_t *res2)
-{
- hd_res_t *res;
-
- /*
- * see if we must add an i/o range (tricky...)
- *
- * We look for identical i/o bases and add a range if one was missing. If
- * no matching pair was found, add the i/o resource.
- */
- for(; res2; res2 = res2->next) {
- if(res2->io.type == res_io) {
- for(res = *res1; res; res = res->next) {
- if(res->io.type == res_io) {
- if(res->io.base == res2->io.base) {
- /* identical bases: take maximum of both ranges */
- if(res2->io.range > res->io.range) {
- res->io.range = res2->io.range;
- }
- break;
- }
- else if(
- res->io.range &&
- res2->io.range &&
- res->io.base + res->io.range == res2->io.base)
- {
- /* res2 directly follows res1: extend res1 to cover res2 */
- res->io.range += res2->io.range;
- break;
- }
- else if(
- res2->io.base >= res->io.base &&
- res2->io.base < res->io.base + res->io.range
- ) {
- /* res2 is totally contained in res1: ignore it */
- break;
- }
- }
- }
- if(!res) {
- res = add_res_entry(res1, new_mem(sizeof *res));
- *res = *res2; /* *copy* the struct */
- res->next = NULL;
- }
- }
- }
-}
-
-void join_res_irq(hd_res_t **res1, hd_res_t *res2)
-{
- hd_res_t *res;
-
- /* see if we must add an dma channel */
- for(; res2; res2 = res2->next) {
- if(res2->irq.type == res_irq) {
- for(res = *res1; res; res = res->next) {
- if(res->irq.type == res_irq && res->irq.base == res2->irq.base) break;
- }
- if(!res) {
- res = add_res_entry(res1, new_mem(sizeof *res));
- *res = *res2; /* *copy* the struct */
- res->next = NULL;
- }
- }
- }
-}
-
-
-void join_res_dma(hd_res_t **res1, hd_res_t *res2)
-{
- hd_res_t *res;
-
- /* see if we must add an dma channel */
- for(; res2; res2 = res2->next) {
- if(res2->dma.type == res_dma) {
- for(res = *res1; res; res = res->next) {
- if(res->dma.type == res_dma && res->dma.base == res2->dma.base) break;
- }
- if(!res) {
- res = add_res_entry(res1, new_mem(sizeof *res));
- *res = *res2; /* *copy* the struct */
- res->next = NULL;
- }
- }
- }
-}
-
-
-/*
- * Check whether both resource lists have common entries.
- */
-int have_common_res(hd_res_t *res1, hd_res_t *res2)
-{
- hd_res_t *res;
-
- for(; res1; res1 = res1->next) {
- for(res = res2; res; res = res->next) {
- if(res->any.type == res1->any.type) {
- switch(res->any.type) {
- case res_io:
- if(res->io.base == res1->io.base) return 1;
- break;
-
- case res_irq:
- if(res->irq.base == res1->irq.base) return 1;
- break;
-
- case res_dma:
- if(res->dma.base == res1->dma.base) return 1;
- break;
-
- default: /* gcc -Wall */
- break;
- }
- }
- }
- }
-
- return 0;
-}
-
-
-/*
- * Free the memory allocated by a resource list.
- */
-hd_res_t *free_res_list(hd_res_t *res)
-{
- hd_res_t *next;
-
- for(; res; res = next) {
- next = res->next;
-
- if(res->any.type == res_init_strings) {
- free_mem(res->init_strings.init1);
- free_mem(res->init_strings.init2);
- }
-
- if(res->any.type == res_pppd_option) {
- free_mem(res->pppd_option.option);
- }
-
- if(res->any.type == res_hwaddr) {
- free_mem(res->hwaddr.addr);
- }
-
- free_mem(res);
- }
-
- return NULL;
-}
-
-
-/*
- * Note: new_res is directly inserted into the list, so you *must* make sure
- * that new_res points to a malloc'ed pice of memory.
- */
-hd_res_t *add_res_entry(hd_res_t **res, hd_res_t *new_res)
-{
- while(*res) res = &(*res)->next;
-
- return *res = new_res;
-}
-
-
-hd_t *add_hd_entry(hd_data_t *hd_data, unsigned line, unsigned count)
-{
- hd_t *hd;
-
- hd = add_hd_entry2(&hd_data->hd, new_mem(sizeof *hd));
-
- hd->idx = ++(hd_data->last_idx);
- hd->module = hd_data->module;
- hd->line = line;
- hd->count = count;
-
- return hd;
-}
-
-
-hd_t *add_hd_entry2(hd_t **hd, hd_t *new_hd)
-{
- while(*hd) hd = &(*hd)->next;
-
- return *hd = new_hd;
-}
-
-
-void hd_scan(hd_data_t *hd_data)
-{
- char *s = NULL;
- int i, j;
- hd_t *hd, *hd2;
- uint64_t irqs;
- str_list_t *sl, *sl0;
-
-#ifdef LIBHD_MEMCHECK
- if(!libhd_log) {
- char *s = getenv("LIBHD_MEMCHECK");
-
- if(s && *s) {
- libhd_log = fopen(s, "w");
- if(libhd_log) setlinebuf(libhd_log);
- }
- }
-#endif
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_scan, hd_data), hd_data);
- }
-#endif
-
- /* log the debug & probe flags */
- if(hd_data->debug && !hd_data->flags.internal) {
- ADD2LOG("libhd version %s%s (%s)\n", HD_VERSION_STRING, getuid() ? "u" : "", HD_ARCH);
- }
-
- get_kernel_version(hd_data);
-
- /* needed only on 1st call */
- if(hd_data->last_idx == 0) {
- get_probe_env(hd_data);
- }
-
- fix_probe_features(hd_data);
-
- if(hd_data->debug && !hd_data->flags.internal) {
- for(i = sizeof hd_data->probe - 1; i >= 0; i--) {
- str_printf(&s, -1, "%02x", hd_data->probe[i]);
- }
- ADD2LOG("debug = 0x%x\nprobe = 0x%s (", hd_data->debug, s);
- s = free_mem(s);
-
- for(i = 1; i < pr_default; i++) { /* 1 because of pr_memory */
- if((s = hd_probe_feature_by_value(i))) {
- ADD2LOG("%s%c%s", i == 1 ? "" : " ", hd_probe_feature(hd_data, i) ? '+' : '-', s);
- }
- }
-
- ADD2LOG(")\n");
- }
-
- /* init driver info database */
- hddb_init(hd_data);
-
- /* only first time */
- if(hd_data->last_idx == 0) {
- hd_set_probe_feature(hd_data, pr_fork);
- if(!hd_probe_feature(hd_data, pr_fork)) hd_data->flags.nofork = 1;
-// hd_set_probe_feature(hd_data, pr_sysfs);
- if(!hd_probe_feature(hd_data, pr_sysfs)) hd_data->flags.nosysfs = 1;
- if(hd_probe_feature(hd_data, pr_cpuemu)) hd_data->flags.cpuemu = 1;
- if(hd_probe_feature(hd_data, pr_udev)) hd_data->flags.udev = 1;
- }
-
- /* get shm segment, if we didn't do it already */
- hd_shm_init(hd_data);
-
- if(!hd_data->shm.ok && !hd_data->flags.nofork) {
- hd_data->flags.nofork = 1;
- ADD2LOG("shm: failed to get shm segment; will not fork\n");
- }
-
- if(hd_data->only) {
- s = hd_join(", ", hd_data->only);
- ADD2LOG("only: %s\n", s);
- s = free_mem(s);
- }
-
-#ifndef LIBHD_TINY
- /*
- * There might be old 'manual' entries left from an earlier scan. Remove
- * them, they will confuse us.
- */
- if(hd_probe_feature(hd_data, pr_manual)) {
- hd_data->module = mod_manual;
- remove_hd_entries(hd_data);
- }
-#endif
-
- /*
- * for various reasons, do it befor scan_misc()
- */
- hd_scan_floppy(hd_data);
-
- /*
- * to be able to read the right parport io,
- * we have to do this before scan_misc()
- */
-#if defined(__i386__) || defined (__x86_64__) || defined (__ia64__)
- hd_scan_bios(hd_data);
-#endif
-
- /* before hd_scan_misc(): we need some ppc info later */
- hd_scan_sys(hd_data);
-
- /* get basic system info */
- hd_scan_misc(hd_data);
-
- /* hd_scan_cpu() after hd_scan_misc(): klog needed */
- hd_scan_cpu(hd_data);
- hd_scan_memory(hd_data);
-
- hd_scan_sysfs_pci(hd_data);
-
- /* do it _after_ hd_scan_sysfs_pci() */
-#if defined(__PPC__)
- hd_scan_prom(hd_data);
-#endif
-
-#if defined(__s390__) || defined(__s390x__)
- hd_scan_s390disks(hd_data);
- hd_scan_s390(hd_data);
-#endif
-
- /* after hd_scan_prom() and hd_scan_bios() */
- hd_scan_monitor(hd_data);
-
-#ifndef LIBHD_TINY
-#if defined(__i386__) || defined(__alpha__)
- hd_scan_isapnp(hd_data);
-#endif
-#endif
-
-#ifndef LIBHD_TINY
-#if defined(__i386__)
- hd_scan_isa(hd_data);
-#endif
-#endif
-
- /* after pci & isa */
- hd_scan_pcmcia(hd_data);
-
- hd_scan_serial(hd_data);
-
- /* merge basic system info & the easy stuff */
- hd_scan_misc2(hd_data);
-
-#ifndef LIBHD_TINY
- if(!hd_data->flags.no_parport) {
- hd_scan_parallel(hd_data); /* after hd_scan_misc*() */
- }
-#endif
-
- hd_scan_sysfs_block(hd_data);
- hd_scan_sysfs_scsi(hd_data);
- hd_scan_sysfs_usb(hd_data);
- hd_scan_sysfs_edd(hd_data);
-
-#if defined(__PPC__)
- hd_scan_adb(hd_data);
-#endif
-
-#ifndef LIBHD_TINY
-#if !defined(__sparc__)
- hd_scan_braille(hd_data);
-#endif
- hd_scan_modem(hd_data); /* do it before hd_scan_mouse() */
- hd_scan_mouse(hd_data);
-#endif
- hd_scan_sbus(hd_data);
-
- hd_scan_input(hd_data);
-
-#if !defined(__s390__) && !defined(__s390x__)
- hd_scan_kbd(hd_data);
-#endif
-
- /* must be after hd_scan_monitor() */
- hd_scan_fb(hd_data);
-
- /* keep these at the end of the list */
- hd_scan_net(hd_data);
-
- hd_scan_pppoe(hd_data);
-
-#ifndef LIBHD_TINY
- hd_scan_wlan(hd_data);
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) hd_add_id(hd_data, hd);
-
-#ifndef LIBHD_TINY
- hd_scan_manual(hd_data);
-#endif
-
- /* add test entries */
- hd_scan_xtra(hd_data);
-
- /* some final fixup's */
-#if WITH_ISDN
- hd_scan_isdn(hd_data);
- hd_scan_dsl(hd_data);
-#endif
- hd_scan_int(hd_data);
-
- /* and again... */
- for(hd = hd_data->hd; hd; hd = hd->next) hd_add_id(hd_data, hd);
-
- /* assign parent & child ids */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd->child_ids = free_str_list(hd->child_ids);
- if((hd2 = hd_get_device_by_idx(hd_data, hd->attached_to))) {
- free_mem(hd->parent_id);
- hd->parent_id = new_str(hd2->unique_id);
- }
- else if((hd2 = hd_get_device_by_id(hd_data, hd->parent_id))) {
- hd->attached_to = hd2->idx;
- }
- else {
- hd->attached_to = 0;
- }
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if((hd2 = hd_get_device_by_idx(hd_data, hd->attached_to))) {
- add_str_list(&hd2->child_ids, hd->unique_id);
- }
- }
-
- /* assign a hw_class & build a useful model string */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- assign_hw_class(hd_data, hd);
-
- /* create model name _after_ hw_class */
- create_model_name(hd_data, hd);
- }
-
-#ifndef LIBHD_TINY
- /* must be _after_ we have valid hw_class entries */
- hd_scan_manual2(hd_data);
-#endif
-
- /* we are done... */
- for(hd = hd_data->hd; hd; hd = hd->next) hd->tag.fixed = 1;
-
- /* for compatibility */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd->driver = free_mem(hd->driver);
- if(hd->drivers && hd->drivers->str) hd->driver = new_str(hd->drivers->str);
- }
-
- hd_data->module = mod_none;
-
- if(
- hd_data->debug &&
- !hd_data->flags.internal &&
- (
- hd_data->kmods ||
- hd_probe_feature(hd_data, pr_int /* arbitrary; just avoid /proc/modules for -pr_all */)
- )
- ) {
- sl0 = read_file(PROC_MODULES, 0, 0);
- ADD2LOG("----- /proc/modules -----\n");
- for(sl = sl0; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/modules end -----\n");
- free_str_list(sl0);
- }
-
- update_irq_usage(hd_data);
-
- if(hd_data->debug && !hd_data->flags.internal) {
- irqs = hd_data->used_irqs;
-
- ADD2LOG(" used irqs:");
- for(i = j = 0; i < 64; i++, irqs >>= 1) {
- if((irqs & 1)) {
- ADD2LOG("%c%d", j ? ',' : ' ', i);
- j = 1;
- }
- }
- ADD2LOG("\n");
- }
-}
-
-
-/*
- * Note: due to byte order problems decoding the id is really a mess...
- * And, we use upper case for hex numbers!
- */
-char *isa_id2str(unsigned id)
-{
- char *s = new_mem(8);
- unsigned u = ((id & 0xff) << 8) + ((id >> 8) & 0xff);
- unsigned v = ((id >> 8) & 0xff00) + ((id >> 24) & 0xff);
-
- s[0] = ((u >> 10) & 0x1f) + 'A' - 1;
- s[1] = ((u >> 5) & 0x1f) + 'A' - 1;
- s[2] = ( u & 0x1f) + 'A' - 1;
-
- sprintf(s + 3, "%04X", v);
-
- return s;
-}
-
-char *eisa_vendor_str(unsigned v)
-{
- static char s[4];
-
- s[0] = ((v >> 10) & 0x1f) + 'A' - 1;
- s[1] = ((v >> 5) & 0x1f) + 'A' - 1;
- s[2] = ( v & 0x1f) + 'A' - 1;
- s[3] = 0;
-
- return s;
-}
-
-
-/*
- * Must _not_ check that s is exactly 3 chars.
- */
-unsigned name2eisa_id(char *s)
-{
- int i;
- unsigned u = 0;
-
- for(i = 0; i < 3; i++) {
- u <<= 5;
- if(s[i] < 'A' - 1 || s[i] > 'A' - 1 + 0x1f) return 0;
- u += s[i] - 'A' + 1;
- }
-
- return MAKE_ID(TAG_EISA, u);
-}
-
-
-/*
- * Create a 'canonical' version, i.e. no spaces at start and end.
- *
- * Note: removes chars >= 0x80 as well (due to (char *))! This
- * is currently considered a feature.
- */
-char *canon_str(char *s, int len)
-{
- char *m2, *m1, *m0;
- int i;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, ">%p\n", CALLED_FROM(canon_str, s));
- }
-#endif
-
- if(len < 0) len = 0; /* just to be safe */
-
- m0 = new_mem(len + 1);
-
- for(m1 = m0, i = 0; i < len; i++) {
- if(m1 == m0 && s[i] <= ' ') continue;
- *m1++ = s[i];
- }
- *m1 = 0;
- while(m1 > m0 && m1[-1] <= ' ') {
- *--m1 = 0;
- }
-
- m2 = new_str(m0);
- free_mem(m0);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(canon_str, s));
- }
-#endif
-
- return m2;
-}
-
-
-/*
- * Convert a n-digit hex number to its numerical value.
- */
-int hex(char *s, int n)
-{
- int i = 0, j;
-
- while(n--) {
- if(sscanf(s++, "%1x", &j) != 1) return -1;
- i = (i << 4) + j;
- }
-
- return i;
-}
-
-
-/* simple 32 bit fixed point numbers with n decimals */
-int str2float(char *s, int n)
-{
- int i = 0;
- int dot = 0;
-
- while(*s) {
- if(*s == '.') {
- if(dot++) return 0;
- }
- else if(*s >= '0' && *s <= '9') {
- if(dot) {
- if(!n) return i;
- n--;
- }
- i *= 10;
- i += *s - '0';
- }
- else {
- return 0;
- }
-
- s++;
- }
-
- while(n--) i *= 10;
-
- return i;
-}
-
-
-/* simple 32 bit fixed point numbers with n decimals */
-char *float2str(int f, int n)
-{
- int i = 1, j, m = n;
- static char buf[32];
-
- while(n--) i *= 10;
-
- j = f / i;
- i = f % i;
-
- while(i && !(i % 10)) i /= 10, m--;
-
- if(i) {
- sprintf(buf, "%d.%0*d", j, m, i);
- }
- else {
- sprintf(buf, "%d", j);
- }
-
- return buf;
-}
-
-
-/*
- * find hardware entry with given index
- */
-hd_t *hd_get_device_by_idx(hd_data_t *hd_data, unsigned idx)
-{
- hd_t *hd;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_get_device_by_idx, hd_data), hd_data);
- }
-#endif
-
- if(!idx) return NULL; /* early out: idx is always != 0 */
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->idx == idx) return hd;
- }
-
- return NULL;
-}
-
-
-/*
- * find hardware entry with given unique id
- */
-hd_t *hd_get_device_by_id(hd_data_t *hd_data, char *id)
-{
- hd_t *hd;
-
- if(!id) return NULL;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->unique_id && !strcmp(hd->unique_id, id)) return hd;
- }
-
- return NULL;
-}
-
-
-/*
- * Give the actual name of the probing module.
- */
-char *mod_name_by_idx(unsigned idx)
-{
- unsigned u;
-
- for(u = 0; u < sizeof pr_modules / sizeof *pr_modules; u++)
- if(idx == pr_modules[u].val) return pr_modules[u].name;
-
- return "";
-}
-
-
-/*
- * Print to a string.
- * Note: *buf must point to a malloc'd memory area (or be NULL).
- *
- * Use an offset of -1 or -2 to append the new string.
- *
- * As this function is quite often used to extend our log messages, there
- * is a cache that holds the length of the last string we created. This way
- * we speed this up somewhat. Use an offset of -2 to use this feature.
- * Note: this only works as long as str_printf() is used *exclusively* to
- * extend the string.
- */
-void str_printf(char **buf, int offset, char *format, ...)
-{
- static char *last_buf = NULL;
- static int last_len = 0;
- int len, use_cache;
- char b[0x10000];
- va_list args;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, ">%p\n", CALLED_FROM(str_printf, buf));
- }
-#endif
-
- use_cache = offset == -2 ? 1 : 0;
-
- if(*buf) {
- if(offset == -1) {
- offset = strlen(*buf);
- }
- else if(offset == -2) {
- if(last_buf == *buf && last_len && !(*buf)[last_len])
- offset = last_len;
- else
- offset = strlen(*buf);
- }
- }
- else {
- offset = 0;
- }
-
- va_start(args, format);
- vsnprintf(b, sizeof b, format, args);
- va_end(args);
-
- *buf = resize_mem(*buf, (len = offset + strlen(b)) + 1);
- strcpy(*buf + offset, b);
-
- if(use_cache) {
- last_buf = *buf;
- last_len = len;
- }
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(str_printf, buf));
- }
-#endif
-}
-
-
-void hexdump(char **buf, int with_ascii, unsigned data_len, unsigned char *data)
-{
- unsigned i;
-
- for(i = 0; i < data_len; i++) {
- if(i)
- str_printf(buf, -2, " %02x", data[i]);
- else
- str_printf(buf, -2, "%02x", data[i]);
- }
-
- if(with_ascii) {
- str_printf(buf, -2, " \"");
- for(i = 0; i < data_len; i++) {
- str_printf(buf, -2, "%c", data[i] < ' ' || data[i] >= 0x7f ? '.' : data[i]);
- }
- str_printf(buf, -2, "\"");
- }
-}
-
-
-/** \relates s_str_list_t
- * Search a string list for a string.
- */
-str_list_t *search_str_list(str_list_t *sl, char *str)
-{
- if(!str) return NULL;
-
- for(; sl; sl = sl->next) if(sl->str && !strcmp(sl->str, str)) return sl;
-
- return NULL;
-}
-
-
-/** \relates s_str_list_t
- * Add a string to a string list.
- *
- * The new string (str) will be *copied*!
- */
-str_list_t *add_str_list(str_list_t **sl, char *str)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, ">%p\n", CALLED_FROM(add_str_list, sl));
- }
-#endif
-
- while(*sl) sl = &(*sl)->next;
-
- *sl = new_mem(sizeof **sl);
- (*sl)->str = new_str(str);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(add_str_list, sl));
- }
-#endif
-
- return *sl;
-}
-
-
-/** \relates s_str_list_t
- * Free the memory allocated by a string list.
- */
-str_list_t *free_str_list(str_list_t *list)
-{
- str_list_t *l;
-
- for(; list; list = (l = list)->next, free_mem(l)) {
- free_mem(list->str);
- }
-
- return NULL;
-}
-
-
-/*
- * Read a file; return a linked list of lines.
- *
- * start_line is zero-based; lines == 0 -> all lines
- */
-str_list_t *read_file(char *file_name, unsigned start_line, unsigned lines)
-{
- FILE *f;
- char buf[0x10000];
- int pipe = 0;
- str_list_t *sl_start = NULL, *sl_end = NULL, *sl;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, ">%p\n", CALLED_FROM(read_file, file_name));
- }
-#endif
-
- if(*file_name == '|') {
- pipe = 1;
- file_name++;
- if(!(f = popen(file_name, "r"))) {
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(read_file, file_name));
- }
-#endif
- return NULL;
- }
- }
- else {
- if(!(f = fopen(file_name, "r"))) {
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(read_file, file_name));
- }
-#endif
- return NULL;
- }
- }
-
- while(fgets(buf, sizeof buf, f)) {
- if(start_line) {
- start_line--;
- continue;
- }
- sl = new_mem(sizeof *sl);
- sl->str = new_str(buf);
- if(sl_start)
- sl_end->next = sl;
- else
- sl_start = sl;
- sl_end = sl;
-
- if(lines == 1) break;
- lines--;
- }
-
- if(pipe)
- pclose(f);
- else
- fclose(f);
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log) fprintf(libhd_log, "<%p\n", CALLED_FROM(read_file, file_name));
- }
-#endif
-
- return sl_start;
-}
-
-
-/*
- * Read directory, return a list of entries with file type 'type'.
- */
-str_list_t *read_dir(char *dir_name, int type)
-{
- str_list_t *sl_start = NULL, *sl_end = NULL, *sl;
- DIR *dir;
- struct dirent *de;
- struct stat sbuf;
- char *s;
- int dir_type;
-
- if(dir_name && (dir = opendir(dir_name))) {
- while((de = readdir(dir))) {
- if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
- dir_type = 0;
-
- if(type) {
- s = NULL;
- str_printf(&s, 0, "%s/%s", dir_name, de->d_name);
-
- if(!lstat(s, &sbuf)) {
- if(S_ISDIR(sbuf.st_mode)) {
- dir_type = 'd';
- }
- else if(S_ISREG(sbuf.st_mode)) {
- dir_type = 'r';
- }
- else if(S_ISLNK(sbuf.st_mode)) {
- dir_type = 'l';
- }
- }
-
- s = free_mem(s);
- }
-
- if(dir_type == type) {
- sl = new_mem(sizeof *sl);
- sl->str = new_str(de->d_name);
- if(sl_start)
- sl_end->next = sl;
- else
- sl_start = sl;
- sl_end = sl;
- }
- }
- closedir(dir);
- }
-
- return sl_start;
-}
-
-
-char *hd_read_symlink(char *link_name)
-{
- static char buf[256];
- int i;
-
- i = readlink(link_name, buf, sizeof buf);
- buf[sizeof buf - 1] = 0;
- if(i >= 0 && (unsigned) i < sizeof buf) buf[i] = 0;
- if(i < 0) *buf = 0;
-
- return buf;
-}
-
-
-/*
- * Log the hardware detection progress.
- */
-void progress(hd_data_t *hd_data, unsigned pos, unsigned count, char *msg)
-{
- char buf1[32], buf2[32], buf3[128], *fn;
-
- if(hd_data->shm.ok && hd_data->flags.forked) {
- ((hd_data_t *) (hd_data->shm.data))->shm.updated++;
- }
-
- if(!msg) msg = "";
-
- sprintf(buf1, "%u", hd_data->module);
- sprintf(buf2, ".%u", count);
- fn = mod_name_by_idx(hd_data->module);
-
- sprintf(buf3, "%s.%u%s", *fn ? fn : buf1, pos, count ? buf2 : "");
-
- if((hd_data->debug & HD_DEB_PROGRESS))
- ADD2LOG(">> %s: %s\n", buf3, msg);
-
- if(hd_data->progress) hd_data->progress(buf3, msg);
-}
-
-
-
-/*
- * Returns a probe feature suitable for hd_*probe_feature().
- * If name is not a valid probe feature, 0 is returned.
- *
- */
-enum probe_feature hd_probe_feature_by_name(char *name)
-{
- unsigned u;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_probe_feature_by_name, name), name);
- }
-#endif
-
- for(u = 0; u < sizeof pr_flags / sizeof *pr_flags; u++)
- if(!strcmp(name, pr_flags[u].name)) return pr_flags[u].val;
-
- return 0;
-}
-
-
-/*
- * Coverts a enum probe_feature to a string.
- * If it fails, NULL is returned.
- */
-char *hd_probe_feature_by_value(enum probe_feature feature)
-{
- unsigned u;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%u\n", __FUNCTION__, CALLED_FROM(hd_probe_feature_by_value, feature), feature);
- }
-#endif
-
- for(u = 0; u < sizeof pr_flags / sizeof *pr_flags; u++)
- if(feature == pr_flags[u].val) return pr_flags[u].name;
-
- return NULL;
-}
-
-
-/*
- * Removes all hd_data->hd entries created by the current module from the
- * list. The old entries are added to hd_data->old_hd.
- */
-void remove_hd_entries(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->module == hd_data->module) {
- hd->tag.remove = 1;
- }
- }
-
- remove_tagged_hd_entries(hd_data);
-}
-
-
-/*
- * Removes all hd_data->hd entries that have the remove tag set from the
- * list. The old entries are added to hd_data->old_hd.
- */
-void remove_tagged_hd_entries(hd_data_t *hd_data)
-{
- hd_t *hd, **prev, **h;
-
- for(hd = *(prev = &hd_data->hd); hd;) {
- if(hd->tag.remove) {
- /* find end of the old list... */
- h = &hd_data->old_hd;
- while(*h) h = &(*h)->next;
- *h = hd; /* ...and append the entry */
-
- hd = *prev = hd->next;
- (*h)->next = NULL;
- }
- else {
- hd = *(prev = &hd->next);
- }
- }
-}
-
-
-int hd_module_is_active(hd_data_t *hd_data, char *mod)
-{
- str_list_t *sl, *sl0 = read_kmods(hd_data);
- int active = 0;
- char *s;
-#ifdef __PPC__
- char *s1, *s2;
-#endif
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_module_is_active, hd_data), hd_data);
- }
-#endif
-
- mod = new_str(mod);
-
- /* convert '-' to '_' */
- for(s = mod; *s; s++) if(*s == '-') *s = '_';
-
- for(sl = sl0; sl; sl = sl->next) {
- if(!strcmp(sl->str, mod)) break;
- }
-
- free_str_list(sl0);
- active = sl ? 1 : 0;
-
- if(active) {
- free_mem(mod);
-
- return active;
- }
-
-#ifdef __PPC__
- /* temporary hack for ppc */
- if(!strcmp(mod, "gmac")) {
- s1 = "<6>eth";
- s2 = " GMAC ";
- }
- else if(!strcmp(mod, "mace")) {
- s1 = "<6>eth";
- s2 = " MACE ";
- }
- else if(!strcmp(mod, "bmac")) {
- s1 = "<6>eth";
- s2 = " BMAC";
- }
- else if(!strcmp(mod, "mac53c94")) {
- s1 = "<4>scsi";
- s2 = " 53C94";
- }
- else if(!strcmp(mod, "mesh")) {
- s1 = "<4>scsi";
- s2 = " MESH";
- }
- else if(!strcmp(mod, "swim3")) {
- s1 = "<6>fd";
- s2 = " SWIM3 ";
- }
- else {
- s1 = s2 = NULL;
- }
-
- if(s1) {
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(strstr(sl->str, s1) == sl->str && strstr(sl->str, s2)) {
- active = 1;
- break;
- }
- }
- }
-#endif
-
- free_mem(mod);
-
- return active;
-}
-
-
-int hd_has_pcmcia(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(is_pcmcia_ctrl(hd_data, hd)) return 1;
- }
-
- return 0;
-}
-
-
-int hd_apm_enabled(hd_data_t *hd_data)
-{
- hd_t *hd;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_apm_enabled, hd_data), hd_data);
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal &&
- hd->sub_class.id == sc_int_bios &&
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- hd->detail->bios.data
- ) {
- return hd->detail->bios.data->apm_enabled;
- }
- }
-
- return 0;
-}
-
-
-int hd_usb_support(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_usb_support, hd_data), hd_data);
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_serial && hd->sub_class.id == sc_ser_usb) {
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_irq)
- return hd->prog_if.id == pif_usb_ohci ? 2 : 1; /* 2: ohci, 1: uhci */
- }
- }
- }
-
- return 0;
-}
-
-
-int hd_smp_support(hd_data_t *hd_data)
-{
- int is_smp = 0;
- unsigned u;
- hd_t *hd, *hd0;
-#if defined(__i386__) || defined (__x86_64__)
- unsigned cpu_threads = 0;
- cpu_info_t *ct;
-#endif
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_smp_support, hd_data), hd_data);
- }
-#endif
-
- u = hd_data->flags.internal;
- hd_data->flags.internal = 1;
- hd = hd_list(hd_data, hw_cpu, 0, NULL);
- if(!hd) hd = hd_list(hd_data, hw_cpu, 1, NULL);
- hd_data->flags.internal = u;
-
- for(is_smp = 0, hd0 = hd; hd0; hd0 = hd0->next) is_smp++;
- if(is_smp == 1) is_smp = 0;
-
-#if defined(__i386__) || defined (__x86_64__)
- if(
- hd &&
- hd->detail &&
- hd->detail->type == hd_detail_cpu &&
- (ct = hd->detail->cpu.data)
- ) {
- cpu_threads = ct->units;
- }
-#endif
-
- hd = hd_free_hd_list(hd);
-
-#if !defined(LIBHD_TINY) && (defined(__i386__) || defined (__x86_64__))
- if(is_smp < 2) {
- if(!hd_data->bios_ram.data) {
- hd_free_hd_list(hd_list(hd_data, hw_sys, 1, NULL));
- }
- is_smp = detect_smp_bios(hd_data);
- // at least 2 processors
- if(is_smp < 2) is_smp = 0;
- if(!is_smp && cpu_threads > 1) is_smp = 2;
- }
-#endif
-
-#ifdef __PPC__
- if(is_smp < 2) {
- if(!hd_data->devtree) {
- hd_free_hd_list(hd_list(hd_data, hw_sys, 1, NULL));
- }
- is_smp = detect_smp_prom(hd_data);
- if(is_smp < 0) is_smp = 0;
- }
-#endif
-
-#if defined(__s390__) || defined(__s390x__)
- if(!is_smp) is_smp = 1;
-#endif
-
- return is_smp;
-}
-
-
-int hd_color(hd_data_t *hd_data)
-{
-#if 0
- hd_t *hd;
- prom_info_t *pt;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal && hd->sub_class.id == sc_int_prom &&
- hd->detail && hd->detail->type == hd_detail_prom &&
- (pt = hd->detail->prom.data) &&
- pt->has_color
- ) {
- return pt->color;
- }
- }
-#endif
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_color, hd_data), hd_data);
- }
-#endif
-
- if(hd_data->color_code) return hd_data->color_code & 0xffff;
-
- return -1;
-}
-
-
-int hd_mac_color(hd_data_t *hd_data)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_mac_color, hd_data), hd_data);
- }
-#endif
-
- return hd_color(hd_data);
-}
-
-
-unsigned hd_display_adapter(hd_data_t *hd_data)
-{
- hd_t *hd;
- driver_info_t *di;
- unsigned disp, disp_sbus, disp_pci, disp_any, disp_di;
- unsigned disp_cnt, disp_any_cnt;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_display_adapter, hd_data), hd_data);
- }
-#endif
-
- /* if we know exactly where our primary display is, return it */
- if(hd_get_device_by_idx(hd_data, hd_data->display)) return hd_data->display;
-
- disp = disp_sbus = disp_pci = disp_any = disp_di = 0;
- disp_cnt = disp_any_cnt = 0;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_display) {
- disp_any_cnt++;
- if(!disp_any) disp_any = hd->idx;
- if(hd->sub_class.id == sc_dis_vga) {
- disp_cnt++;
- if(!disp) disp = hd->idx;
- if(hd->bus.id == bus_pci && !disp_pci) disp_pci = hd->idx;
- if(hd->bus.id == bus_sbus && !disp_sbus) disp_sbus = hd->idx;
- }
- if(!disp_di) {
- if(!(di = hd->driver_info)) {
- hddb_add_info(hd_data, hd);
- di = hd->driver_info;
- }
- if(di && di->any.type == di_x11 && di->x11.server) {
- disp_di = hd->idx;
- }
- }
- }
- }
-
- /* if there's only one display adapter, return it */
- if(disp_any_cnt == 1) return disp_any;
-
- /* if there's only one vga compatible adapter, return it */
- if(disp_cnt == 1) return disp;
-
- /* return 1st (vga compatible) sbus card */
- /* note: the sbus code enters display cards as 'vga compatible' */
- if(disp_sbus) return disp_sbus;
-
- /* return 1st display adapter that has some x11 info */
- if(disp_di) return disp_di;
-
- /* return 1st vga compatible pci card */
- if(disp_pci) return disp_pci;
-
- /* return 1st vga compatible card */
- if(disp) return disp;
-
- /* return 1st display adapter */
- if(disp_any) return disp_any;
-
- /* there were none... */
- return 0;
-}
-
-
-enum cpu_arch hd_cpu_arch(hd_data_t *hd_data)
-{
- hd_t *hd;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_cpu_arch, hd_data), hd_data);
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal &&
- hd->sub_class.id == sc_int_cpu &&
- hd->detail &&
- hd->detail->type == hd_detail_cpu &&
- hd->detail->cpu.data
- ) {
- return hd->detail->cpu.data->architecture;
- }
- }
-
-#ifdef __i386__
- return arch_intel;
-#else
-#ifdef __alpha__
- return arch_alpha;
-#else
-#ifdef __PPC__
- return arch_ppc;
-#else
-#ifdef __sparc__
- return arch_sparc;
-#else
-#ifdef __s390x__
- return arch_s390x;
-#else
-#ifdef __s390__
- return arch_s390;
-#else
-#ifdef __ia64__
- return arch_ia64;
-#else
-#ifdef __x86_64__
- return arch_x86_64;
-#else
- return arch_unknown;
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-}
-
-
-enum boot_arch hd_boot_arch(hd_data_t *hd_data)
-{
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_boot_arch, hd_data), hd_data);
- }
-#endif
-
- return hd_data->boot;
-}
-
-
-int hd_is_uml(hd_data_t *hd_data)
-{
- int is_uml = 0;
- hd_t *hd;
- cpu_info_t *ct;
- unsigned u;
- unsigned saved_mod = hd_data->module;
- unsigned char probe_save[sizeof hd_data->probe];
-
- u = hd_data->flags.internal;
- hd_data->flags.internal = 1;
- hd = hd_list(hd_data, hw_cpu, 0, NULL);
- if(!hd) {
- /* Do *not* run hd_list(,, 1,) here! */
- memcpy(probe_save, hd_data->probe, sizeof probe_save);
- hd_set_probe_feature(hd_data, pr_cpu);
- hd_scan_cpu(hd_data);
- memcpy(hd_data->probe, probe_save, sizeof hd_data->probe);
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_internal && hd->sub_class.id == sc_int_cpu) break;
- }
- }
- hd_data->flags.internal = u;
-
- if(
- hd &&
- hd->detail &&
- hd->detail->type == hd_detail_cpu &&
- (ct = hd->detail->cpu.data) &&
- ct->model_name &&
- !strcmp(ct->model_name, "UML")
- ) {
- is_uml = 1;
- }
-
- hd = hd_free_hd_list(hd);
-
- hd_data->module = saved_mod;
-
- return is_uml;
-}
-
-
-int hd_is_sgi_altix(hd_data_t *hd_data)
-{
- struct stat sbuf;
-
- return stat("/proc/sgi_sn", &sbuf) ? 0 : 1;
-}
-
-
-int hd_is_iseries(hd_data_t *hd_data)
-{
- struct stat sbuf;
-
- return stat(PROC_ISERIES, &sbuf) ? 0 : 1;
-}
-
-
-/*
- * makes a (shallow) copy; does some magic fixes
- */
-void hd_copy(hd_t *dst, hd_t *src)
-{
- hd_t *tmp;
-// unsigned u;
-
- tmp = dst->next;
-// u = dst->idx;
-
- *dst = *src;
- src->ref_cnt++;
- dst->ref = src;
-
- dst->next = tmp;
-// dst->idx = u;
-
- /* needed to keep in sync with the real device tree */
- if(
- dst->detail &&
- dst->detail->type == hd_detail_devtree
- ) {
- dst->detail = NULL; /* ??? was: free_mem(dst->detail); */
- }
-}
-
-
-hd_t *hd_list(hd_data_t *hd_data, hd_hw_item_t item, int rescan, hd_t *hd_old)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
- unsigned char probe_save[sizeof hd_data->probe];
- unsigned fast_save;
-
-#ifdef LIBHD_MEMCHECK
-#ifndef __PPC__
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\t%u\t%u\t%p\n", __FUNCTION__, CALLED_FROM(hd_list, hd_data), hd_data, item, rescan, hd_old);
- }
-#endif
-#endif
-
- if(rescan) {
- memcpy(probe_save, hd_data->probe, sizeof probe_save);
- fast_save = hd_data->flags.fast;
- hd_clear_probe_feature(hd_data, pr_all);
-#ifdef __powerpc__
- hd_set_probe_feature(hd_data, pr_sys);
- hd_scan(hd_data);
-#endif
- hd_set_probe_feature_hw(hd_data, item);
- hd_scan(hd_data);
- memcpy(hd_data->probe, probe_save, sizeof hd_data->probe);
- hd_data->flags.fast = fast_save;
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(!hd_report_this(hd_data, hd)) continue;
-
- if(
- (
- item == hw_manual || hd_is_hw_class(hd, item)
- )
-#ifndef LIBHD_TINY
-/* with LIBHD_TINY hd->status is not maintained (cf. manual.c) */
- && (
- hd->status.available == status_yes ||
- hd->status.available == status_unknown ||
- item == hw_manual ||
- hd_data->flags.list_all
- )
-#endif
- ) {
-// if(hd->is.softraiddisk) continue; /* don't report them */
-
- /* don't report old entries again */
- for(hd1 = hd_old; hd1; hd1 = hd1->next) {
- if(!cmp_hd(hd1, hd)) break;
- }
- if(!hd1) {
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
- }
-
- if(item == hw_manual) {
- for(hd = hd_list; hd; hd = hd->next) {
- hd->status.available = hd->status.available_orig;
- }
- }
-
- return hd_list;
-}
-
-
-hd_t *hd_list_with_status(hd_data_t *hd_data, hd_hw_item_t item, hd_status_t status)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
- unsigned char probe_save[sizeof hd_data->probe];
-
-#ifdef LIBHD_MEMCHECK
-#ifndef __PPC__
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\t%u\n", __FUNCTION__, CALLED_FROM(hd_list_with_status, hd_data), hd_data, item);
- }
-#endif
-#endif
-
- memcpy(probe_save, hd_data->probe, sizeof probe_save);
- hd_clear_probe_feature(hd_data, pr_all);
- hd_set_probe_feature(hd_data, pr_manual);
- hd_scan(hd_data);
- memcpy(hd_data->probe, probe_save, sizeof hd_data->probe);
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd_is_hw_class(hd, item)) {
- if(
- (status.configured == 0 || status.configured == hd->status.configured) &&
- (status.available == 0 || status.available == hd->status.available) &&
- (status.needed == 0 || status.needed == hd->status.needed) &&
- (status.reconfig == 0 || status.reconfig == hd->status.reconfig)
- ) {
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
- }
-
- return hd_list;
-}
-
-
-/* check if item is in items */
-int has_item(hd_hw_item_t *items, hd_hw_item_t item)
-{
- while(*items) if(*items++ == item) return 1;
-
- return 0;
-}
-
-
-/* check if one of items is in hw_class */
-int has_hw_class(hd_t *hd, hd_hw_item_t *items)
-{
- while(*items) if(hd_is_hw_class(hd, *items++)) return 1;
-
- return 0;
-}
-
-
-/*
- * items must be a 0 terminated list
- */
-hd_t *hd_list2(hd_data_t *hd_data, hd_hw_item_t *items, int rescan)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
- unsigned char probe_save[sizeof hd_data->probe];
- unsigned fast_save;
- hd_hw_item_t *item_ptr;
- int is_manual;
-
- if(!items) return NULL;
-
- is_manual = has_item(items, hw_manual);
-
- if(rescan) {
- memcpy(probe_save, hd_data->probe, sizeof probe_save);
- fast_save = hd_data->flags.fast;
- hd_clear_probe_feature(hd_data, pr_all);
-#ifdef __powerpc__
- hd_set_probe_feature(hd_data, pr_sys);
- hd_scan(hd_data);
-#endif
- for(item_ptr = items; *item_ptr; item_ptr++) {
- hd_set_probe_feature_hw(hd_data, *item_ptr);
- }
- hd_scan(hd_data);
- memcpy(hd_data->probe, probe_save, sizeof hd_data->probe);
- hd_data->flags.fast = fast_save;
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(!hd_report_this(hd_data, hd)) continue;
- if(
- (
- is_manual || has_hw_class(hd, items)
- )
-#ifndef LIBHD_TINY
-/* with LIBHD_TINY hd->status is not maintained (cf. manual.c) */
- && (
- hd->status.available == status_yes ||
- hd->status.available == status_unknown ||
- is_manual ||
- hd_data->flags.list_all
- )
-#endif
- ) {
-// if(hd->is.softraiddisk) continue; /* don't report them */
-
- /* don't report old entries again */
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
-
- if(is_manual) {
- for(hd = hd_list; hd; hd = hd->next) {
- hd->status.available = hd->status.available_orig;
- }
- }
-
- return hd_list;
-}
-
-
-/*
- * items must be a 0 terminated list
- */
-hd_t *hd_list_with_status2(hd_data_t *hd_data, hd_hw_item_t *items, hd_status_t status)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
- unsigned char probe_save[sizeof hd_data->probe];
-
- if(!items) return NULL;
-
- memcpy(probe_save, hd_data->probe, sizeof probe_save);
- hd_clear_probe_feature(hd_data, pr_all);
- hd_set_probe_feature(hd_data, pr_manual);
- hd_scan(hd_data);
- memcpy(hd_data->probe, probe_save, sizeof hd_data->probe);
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(has_hw_class(hd, items)) {
- if(
- (status.configured == 0 || status.configured == hd->status.configured) &&
- (status.available == 0 || status.available == hd->status.available) &&
- (status.needed == 0 || status.needed == hd->status.needed) &&
- (status.reconfig == 0 || status.reconfig == hd->status.reconfig)
- ) {
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
- }
-
- return hd_list;
-}
-
-
-hd_t *hd_base_class_list(hd_data_t *hd_data, unsigned base_class)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
-// hd_t *bridge_hd;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_base_class_list, hd_data), hd_data);
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
-
-#if 0
- /* ###### fix later: card bus magic */
- if((bridge_hd = hd_get_device_by_idx(hd_data, hd->attached_to))) {
- if(
- bridge_hd->base_class.id == bc_bridge &&
- bridge_hd->sub_class.id == sc_bridge_cardbus
- ) continue;
- }
-#endif
-
- /* add multimedia/sc_multi_video to display */
- if(
- hd->base_class.id == base_class ||
- (
- base_class == bc_display &&
- hd->base_class.id == bc_multimedia &&
- hd->sub_class.id == sc_multi_video
- )
- ) {
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
-
- return hd_list;
-}
-
-hd_t *hd_sub_class_list(hd_data_t *hd_data, unsigned base_class, unsigned sub_class)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_sub_class_list, hd_data), hd_data);
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == base_class && hd->sub_class.id == sub_class) {
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
-
- return hd_list;
-}
-
-hd_t *hd_bus_list(hd_data_t *hd_data, unsigned bus)
-{
- hd_t *hd, *hd1, *hd_list = NULL;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_bus_list, hd_data), hd_data);
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->bus.id == bus) {
- hd1 = add_hd_entry2(&hd_list, new_mem(sizeof *hd_list));
- hd_copy(hd1, hd);
- }
- }
-
- return hd_list;
-}
-
-/* Convert libhd bus IDs to hwcfg bus names */
-const char* hd_busid_to_hwcfg(int busid)
-{
- const char* const ids1[]={"none","isa","eisa","mc","pci","pcmcia","nubus","cardbus","other"};
- const char* const ids2[]={"ps2","serial","parallel","floppy","scsi","ide","usb","adb","raid","sbus","i2o","vio","ccw","iucv"};
- if(busid <9)
- return ids1[busid];
- else if(busid >=0x80 && busid <0x8e)
- return ids2[busid-0x80];
- else
- return 0;
-}
-
-/*
- * Check if the execution of (*func)() takes longer than timeout seconds.
- * This is useful to work around long kernel-timeouts as in the floppy
- * detection and ps/2 mouse detection.
- */
-int hd_timeout(void(*func)(void *), void *arg, int timeout)
-{
- int child1, child2;
- int status = 0;
-
- child1 = fork();
- if(child1 == -1) return -1;
-
- if(child1) {
- if(waitpid(child1, &status, 0) == -1) return -1;
-// fprintf(stderr, ">child1 status: 0x%x\n", status);
-
- if(WIFEXITED(status)) {
- status = WEXITSTATUS(status);
-// fprintf(stderr, ">normal child1 status: 0x%x\n", status);
- /* != 0 if we timed out */
- }
- else {
- status = 0;
- }
- }
- else {
- /* fork again */
-
-#ifdef LIBHD_MEMCHECK
- /* stop logging in child process */
- if(libhd_log) fclose(libhd_log);
- libhd_log = NULL;
-#endif
-
- child2 = fork();
- if(child2 == -1) return -1;
-
- if(child2) {
-// fprintf(stderr, ">signal\n");
- signal(SIGALRM, timeout_alarm_handler);
- alarm(timeout);
- if(waitpid(child2, &status, 0) == -1) return -1;
-// fprintf(stderr, ">child2 status: 0x%x\n", status);
- _exit(0);
- }
- else {
- (*func)(arg);
- _exit(0);
- }
- }
-
- return status ? 1 : 0;
-}
-
-void timeout_alarm_handler(int signal)
-{
- _exit(63);
-}
-
-
-/*
- * Return list of loaded modules. Converts '-' to '_'.
- */
-str_list_t *read_kmods(hd_data_t *hd_data)
-{
- str_list_t *sl, *sl0, *sl1 = NULL;
- char *s;
-
- if(!hd_data->kmods || hd_data->flags.keep_kmods != 2) {
- hd_data->kmods = free_str_list(hd_data->kmods);
- if(!(sl0 = read_file(PROC_MODULES, 0, 0))) return NULL;
- hd_data->kmods = sl0;
- if(hd_data->flags.keep_kmods == 1) hd_data->flags.keep_kmods = 2;
- }
-
- for(sl = hd_data->kmods; sl; sl = sl->next) {
- s = sl->str;
- add_str_list(&sl1, strsep(&s, " \t"));
- }
-
- for(sl = sl1; sl; sl = sl->next) {
- for(s = sl->str; *s; s++) if(*s == '-') *s = '_';
- }
-
- return sl1;
-}
-
-
-str_list_t *get_cmdline(hd_data_t *hd_data, char *key)
-{
- str_list_t *sl0, *sl1, *cmd = NULL;
- char *s, *t, *t0;
- int i, l = strlen(key);
-
- if(!hd_data->cmd_line) {
- sl0 = read_file(PROC_CMDLINE, 0, 1);
- sl1 = read_file(LIB_CMDLINE, 0, 1);
-
- if(sl0) {
- i = strlen(sl0->str);
- if(i && sl0->str[i - 1] == '\n') sl0->str[i - 1] = 0;
- hd_data->cmd_line = new_str(sl0->str);
- if(hd_data->debug) {
- ADD2LOG("----- " PROC_CMDLINE " -----\n");
- ADD2LOG(" %s\n", sl0->str);
- ADD2LOG("----- " PROC_CMDLINE " end -----\n");
- }
- }
- if(sl1) {
- i = strlen(sl1->str);
- if(i && sl1->str[i - 1] == '\n') sl1->str[i - 1] = 0;
- str_printf(&hd_data->cmd_line, -1, " %s", sl1->str);
- if(hd_data->debug) {
- ADD2LOG("----- " LIB_CMDLINE " -----\n");
- ADD2LOG(" %s\n", sl1->str);
- ADD2LOG("----- " LIB_CMDLINE " end -----\n");
- }
- }
-
- free_str_list(sl0);
- free_str_list(sl1);
- }
-
- if(!hd_data->cmd_line) return NULL;
-
- t = t0 = new_str(hd_data->cmd_line);
- while((s = strsep(&t, " "))) {
- if(!*s) continue;
- if(!strncmp(s, key, l) && s[l] == '=') {
- add_str_list(&cmd, s + l + 1);
- }
- }
-
- free_mem(t0);
-
- return cmd;
-}
-
-
-/*
- * Return field 'field' (starting with 0) from the 'SuSE='
- * kernel cmd line parameter.
- */
-char *get_cmd_param(hd_data_t *hd_data, int field)
-{
- char *s, *t;
- str_list_t *cmd;
-
- if(!(cmd = get_cmdline(hd_data, "SuSE"))) return NULL;
-
- s = cmd->str;
-
- t = NULL;
-
- if(s) {
- for(; field; field--) {
- if(!(s = strchr(s, ','))) break;
- s++;
- }
-
- if(s && (t = strchr(s, ','))) *t = 0;
- }
-
- t = new_str(s);
-
- free_str_list(cmd);
-
- return t;
-}
-
-
-unsigned get_disk_crc(unsigned char *data, unsigned len)
-{
- unsigned i, crc;
-
- crc = -1;
- for(i = 0; i < len; i++) {
- crc += data[i];
- crc *= 57;
- }
-
- return crc;
-}
-
-disk_t *add_disk_entry(disk_t **dl, disk_t *new_dl)
-{
- while(*dl) dl = &(*dl)->next;
- return *dl = new_dl;
-}
-
-disk_t *free_disk_list(disk_t *dl)
-{
- disk_t *l;
-
- for(; dl; dl = (l = dl)->next, free_mem(l));
-
- return NULL;
-}
-
-int dev_name_duplicate(disk_t *dl, char *dev_name)
-{
- for(; dl; dl = dl->next) {
- if(!strcmp(dl->dev_name, dev_name)) return 1;
- }
-
- return 0;
-}
-
-unsigned hd_boot_disk(hd_data_t *hd_data, int *matches)
-{
- hd_t *hd;
- unsigned crc, hd_idx = 0;
- char *s;
- int i, j;
- disk_t *dl, *dl0 = NULL, *dl1 = NULL;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_boot_disk, hd_data), hd_data);
- }
-#endif
-
- if(matches) *matches = 0;
-
- if(!(s = get_cmd_param(hd_data, 2))) return 0;
-
- i = strlen(s);
-
- if(i >= 8) {
- crc = hex(s, 8);
- }
- else {
- free_mem(s);
- return 0;
- }
-
- s = free_mem(s);
-
- if((hd_data->debug & HD_DEB_BOOT)) {
- ADD2LOG(" boot dev crc 0x%x\n", crc);
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk &&
- hd->block0
- ) {
- if(dev_name_duplicate(dl0, hd->unix_dev_name)) continue;
- dl = add_disk_entry(&dl0, new_mem(sizeof *dl0));
- dl->dev_name = hd->unix_dev_name;
- dl->hd_idx = hd->idx;
- dl->crc = get_disk_crc(dl->data = hd->block0, 512);
- }
- }
-
- if(!dl0) return 0;
-
- if((hd_data->debug & HD_DEB_BOOT)) {
- for(dl = dl0; dl; dl = dl->next) {
- ADD2LOG(" crc %s 0x%08x\n", dl->dev_name, dl->crc);
- }
- }
-
- for(i = 0, dl = dl0; dl; dl = dl->next) {
- if(crc == dl->crc) {
- dl->crc_match = 1;
- dl1 = dl;
- if(!i++) hd_idx = dl->hd_idx;
- }
- }
-
- if(i == 1 && dl1 && (hd_data->debug & HD_DEB_BOOT)) {
- ADD2LOG("----- MBR -----\n");
- for(j = 0; j < 512; j += 0x10) {
- ADD2LOG(" %03x ", j);
- hexdump(&hd_data->log, 1, 0x10, dl1->data + j);
- ADD2LOG("\n");
- }
- ADD2LOG("----- MBR end -----\n");
- }
-
- free_disk_list(dl0);
-
- if(matches) *matches = i;
-
- hd_data->debug &= ~HD_DEB_BOOT;
-
- return hd_idx;
-}
-
-void update_irq_usage(hd_data_t *hd_data)
-{
- hd_t *hd;
- misc_irq_t *mi;
- unsigned u, v;
- uint64_t irqs = 0;
- hd_res_t *res;
-
- if(hd_data->misc) {
- mi = hd_data->misc->irq;
- for(u = 0; u < hd_data->misc->irq_len; u++) {
- v = mi[u].irq;
- irqs |= 1ull << v;
- }
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_irq) {
- irqs |= 1ull << res->irq.base;
- }
- }
- }
-
- hd_data->used_irqs = irqs;
-}
-
-int run_cmd(hd_data_t *hd_data, char *cmd)
-{
- char *xcmd = NULL;
- str_list_t *sl, *sl0;
-
- ADD2LOG("----- exec: \"%s\" -----\n", cmd);
-
- if(*cmd == '/') {
- str_printf(&xcmd, 0, "|%s 2>&1", cmd);
- sl0 = read_file(xcmd, 0, 0);
- for(sl = sl0; sl; sl = sl->next) ADD2LOG(" %s", sl->str);
- sl0 = free_str_list(sl0);
- }
-
- ADD2LOG("----- return code: ? -----\n");
-
- free_mem(xcmd);
-
- return 0;
-}
-
-int probe_module(hd_data_t *hd_data, char *module)
-{
- char *cmd = NULL;
- int i;
- struct stat sbuf;
-
- if(hd_module_is_active(hd_data, module)) return 0;
-
- if(stat(PROG_MODPROBE, &sbuf)) return 127;
-
- str_printf(&cmd, 0, PROG_MODPROBE " %s", module);
-
- i = run_cmd(hd_data, cmd);
-
- free_mem(cmd);
-
- return i;
-}
-
-int load_module_with_params(hd_data_t *hd_data, char *module, char *params)
-{
- char *cmd = NULL;
- int i;
- struct stat sbuf;
-
- if(hd_module_is_active(hd_data, module)) return 0;
-
- if(stat(PROG_MODPROBE, &sbuf)) return 127;
-
- str_printf(&cmd, 0, PROG_MODPROBE " %s %s", module, params ? params : "");
-
- i = run_cmd(hd_data, cmd);
-
- free_mem(cmd);
-
- return i;
-}
-
-int load_module(hd_data_t *hd_data, char *module)
-{
- return load_module_with_params(hd_data, module, NULL);
-}
-
-int unload_module(hd_data_t *hd_data, char *module)
-{
- char *cmd = NULL;
- int i;
-
- if(!hd_module_is_active(hd_data, module)) return 0;
-
- str_printf(&cmd, 0, PROG_RMMOD " %s", module);
-
- i = run_cmd(hd_data, cmd);
-
- free_mem(cmd);
-
- return i;
-}
-
-/*
- * Compare two hd entries and return 0 if they are identical.
- */
-int cmp_hd(hd_t *hd1, hd_t *hd2)
-{
- if(!hd1 || !hd2) return 1;
-
- if(
- hd1->bus.id != hd2->bus.id ||
- hd1->slot != hd2->slot ||
- hd1->func != hd2->func ||
- hd1->base_class.id != hd2->base_class.id ||
- hd1->sub_class.id != hd2->sub_class.id ||
- hd1->prog_if.id != hd2->prog_if.id ||
- hd1->device.id != hd2->device.id ||
- hd1->vendor.id != hd2->vendor.id ||
- hd1->sub_vendor.id != hd2->sub_vendor.id ||
- hd1->revision.id != hd2->revision.id ||
- hd1->compat_device.id != hd2->compat_device.id ||
- hd1->compat_vendor.id != hd2->compat_vendor.id ||
-
- hd1->module != hd2->module ||
- hd1->line != hd2->line
- ) {
- return 1;
- }
-
- if(hd1->unix_dev_name || hd2->unix_dev_name) {
- if(hd1->unix_dev_name && hd2->unix_dev_name) {
- if(strcmp(hd1->unix_dev_name, hd2->unix_dev_name)) return 1;
- }
- else {
- return 1;
- }
- }
-
- return 0;
-}
-
-
-void get_probe_env(hd_data_t *hd_data)
-{
- char *s, *t, *env;
- str_list_t *cmd = NULL;
- int j, k;
- char buf[10];
-
- env = getenv("hwprobe");
- if(!env) {
- cmd = get_cmdline(hd_data, "hwprobe");
- if(cmd) env = cmd->str;
- }
- s = env = new_str(env);
-
- free_str_list(cmd);
-
- if(!env) return;
-
- hd_data->xtra_hd = free_str_list(hd_data->xtra_hd);
-
- while((t = strsep(&s, ","))) {
- if(*t == '+') {
- k = 1; t++;
- }
- else if(*t == '-') {
- k = 0; t++;
- }
- else {
- k = 2;
-// ADD2LOG("hwprobe: +/- missing before \"%s\"\n", t);
-// return;
- }
-
- if((j = hd_probe_feature_by_name(t))) {
- set_probe_feature(hd_data, j, k ? 1 : 0);
- }
- else if(sscanf(t, "%8[^:]:%8[^:]:%8[^:]", buf, buf, buf) == 3) {
- add_str_list(&hd_data->xtra_hd, t - (k == 2 ? 0 : 1));
- }
- else {
- if(*t) ADD2LOG("hwprobe: what is \"%s\"?\n", t);
- return;
- }
- }
-
- free_mem(env);
-}
-
-void hd_scan_xtra(hd_data_t *hd_data)
-{
- str_list_t *sl;
- hd_t *hd, *hd_tmp;
- unsigned u0, u1, u2, tag;
- int i, err;
- char buf0[10], buf1[10], buf2[10], buf3[64], *s, k;
-
- hd_data->module = mod_xtra;
-
- remove_hd_entries(hd_data);
-
- for(sl = hd_data->xtra_hd; sl; sl = sl->next) {
- s = sl->str;
- err = 0;
- switch(*s) {
- case '+': k = 1; s++; break;
- case '-': k = 0; s++; break;
- default: k = 2;
- }
- if(
- (i = sscanf(s, "%8[^:]:%8[^:]:%8[^:]:%60s", buf0, buf1, buf2, buf3)) >= 3
- ) {
- if(i < 4) *buf3 = 0;
-
- u0 = strtoul(buf0, &s, 16);
- if(*s) err |= 1;
- if(strlen(buf1) == 3) {
- u1 = name2eisa_id(buf1);
- }
- else {
- tag = TAG_PCI;
- s = buf1;
- switch(*s) {
- case 'p': tag = TAG_PCI; s++; break;
- case 'r': tag = 0; s++; break;
- case 's': tag = TAG_SPECIAL; s++; break;
- case 'u': tag = TAG_USB; s++; break;
- case 'P': tag = TAG_PCMCIA; s++; break;
- }
- u1 = strtoul(s, &s, 16);
- if(*s) err |= 2;
- u1 = MAKE_ID(tag, u1);
- }
- u2 = strtoul(buf2, &s, 16);
- if(*s) err |= 4;
- u2 = MAKE_ID(ID_TAG(u1), ID_VALUE(u2));
- if((err & 1) && !strcmp(buf0, "*")) {
- u0 = -1;
- err &= ~1;
- }
- if((err & 2) && !strcmp(buf1, "*")) {
- u1 = 0;
- err &= ~2;
- }
- if((err & 4) && !strcmp(buf2, "*")) {
- u2 = 0;
- err &= ~4;
- }
- if(!err) {
- if(k) {
- if(k == 2) {
- /* insert at top */
- hd_tmp = hd_data->hd;
- hd_data->hd = NULL;
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->next = hd_tmp;
- hd_tmp = NULL;
- }
- else {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- }
- hd->base_class.id = u0 >> 8;
- hd->sub_class.id = u0 & 0xff;
- hd->vendor.id = u1;
- hd->device.id = u2;
- if(ID_TAG(hd->vendor.id) == TAG_PCI) hd->bus.id = bus_pci;
- if(ID_TAG(hd->vendor.id) == TAG_USB) hd->bus.id = bus_usb;
- if(ID_TAG(hd->vendor.id) == TAG_PCMCIA) {
- hd->bus.id = bus_pcmcia;
- hd->hotplug = hp_pcmcia;
- }
- if(*buf3) hd->unix_dev_name = new_str(buf3);
- hd->status.available = status_yes;
- hd->status.configured = status_new;
- hd->status.needed = status_no;
- }
- else {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- (u0 == -1u || (
- hd->base_class.id == (u0 >> 8) &&
- hd->sub_class.id == (u0 & 0xff)
- )) &&
- (u1 == 0 || hd->vendor.id == u1) &&
- (u2 == 0 || hd->device.id == u2) &&
- (*buf3 == 0 || (
- hd->unix_dev_name &&
- !strcmp(hd->unix_dev_name, buf3)
- ))
- ) {
- hd->tag.remove = 1;
- }
- }
- remove_tagged_hd_entries(hd_data);
- }
- }
- }
- }
-}
-
-unsigned has_something_attached(hd_data_t *hd_data, hd_t *hd)
-{
- hd_t *hd1;
-
- for(hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->attached_to == hd->idx) return hd1->idx;
- }
-
- return 0;
-}
-
-
-/* ##### FIX: replace with a real crc later ##### */
-void crc64(uint64_t *id, void *p, int len)
-{
- unsigned char uc;
-
- for(; len; len--, p++) {
- uc = *(unsigned char *) p;
- *id += uc + ((uc + 57) << 27);
- *id *= 73;
- *id *= 65521;
- }
-}
-
-char *numid2str(uint64_t id, int len)
-{
- static char buf[32];
-
-#ifdef NUMERIC_UNIQUE_ID
- /* numeric */
-
- if(len < (sizeof id << 3)) id &= ~(-1LL << len);
- sprintf(buf, "%0*"PRIx64, len >> 2, id);
-
-#else
- /* base64 like */
-
- int i;
- unsigned char u;
-
- memset(buf, 0, sizeof buf);
- for(i = 0; len > 0 && i < (int) sizeof buf - 1; i++, len -= 6, id >>= 6) {
- u = id & 0x3f;
- if(u < 10) {
- u += '0'; /* 0..9 */
- }
- else if(u < 10 + 26) {
- u += 'A' - 10; /* A..Z */
- }
- else if(u < 10 + 26 + 26) {
- u += 'a' - 10 - 26; /* a..z */
- }
- else if(u == 63) {
- u = '+';
- }
- else {
- u = '_';
- }
- buf[i] = u;
- }
-
-#endif
-
- return buf;
-}
-
-/*
- * calculate unique ids
- */
-#define INT_CRC(a, b) crc64(&a, &hd->b, sizeof hd->b);
-#define STR_CRC(a, b) if(hd->b) crc64(&a, hd->b, strlen(hd->b) + 1);
-
-
-// old method
-void hd_add_old_id(hd_t *hd)
-{
- uint64_t id0 = 0, id1 = 0;
-
- if(hd->unique_id) return;
-
- INT_CRC(id0, bus.id);
- INT_CRC(id0, slot);
- INT_CRC(id0, func);
- INT_CRC(id0, base_class.id);
- INT_CRC(id0, sub_class.id);
- INT_CRC(id0, prog_if.id);
- STR_CRC(id0, unix_dev_name);
- STR_CRC(id0, rom_id);
-
- INT_CRC(id1, base_class.id);
- INT_CRC(id1, sub_class.id);
- INT_CRC(id1, prog_if.id);
- INT_CRC(id1, device.id);
- INT_CRC(id1, vendor.id);
- INT_CRC(id1, sub_device.id);
- INT_CRC(id1, sub_vendor.id);
- INT_CRC(id1, revision.id);
- INT_CRC(id1, compat_device.id);
- INT_CRC(id1, compat_vendor.id);
- STR_CRC(id1, device.name);
- STR_CRC(id1, vendor.name);
- STR_CRC(id1, sub_device.name);
- STR_CRC(id1, sub_vendor.name);
- STR_CRC(id1, revision.name);
- STR_CRC(id1, serial);
-
- id0 += (id0 >> 32);
- str_printf(&hd->unique_id, 0, "%s", numid2str(id0, 24));
- str_printf(&hd->unique_id, -1, ".%s", numid2str(id1, 64));
-}
-
-void hd_add_id(hd_data_t *hd_data, hd_t *hd)
-{
- uint64_t id0 = 0, id1 = 0;
-
- if(hd->unique_id) return;
-
- hd_add_old_id(hd);
- hd->old_unique_id = hd->unique_id;
- hd->unique_id = NULL;
-
- INT_CRC(id1, base_class.id);
- INT_CRC(id1, sub_class.id);
- INT_CRC(id1, prog_if.id);
- INT_CRC(id1, device.id);
- INT_CRC(id1, vendor.id);
- INT_CRC(id1, sub_device.id);
- INT_CRC(id1, sub_vendor.id);
- INT_CRC(id1, revision.id);
- if(
- hd->detail &&
- hd->detail->type == hd_detail_ccw &&
- hd->detail->ccw.data
- ) INT_CRC(id1, detail->ccw.data->cu_model);
- INT_CRC(id1, compat_device.id);
- INT_CRC(id1, compat_vendor.id);
- // make sure we get the same id even if, say, the pci name list changes
- if(!hd->device.id) STR_CRC(id1, device.name);
- if(!hd->vendor.id) STR_CRC(id1, vendor.name);
- if(!hd->sub_device.name) STR_CRC(id1, sub_device.name);
- if(!hd->sub_vendor.name) STR_CRC(id1, sub_vendor.name);
- if(!hd->revision.name) STR_CRC(id1, revision.name);
- STR_CRC(id1, serial);
-
- hd->unique_id1 = new_str(numid2str(id1, 64));
-
- INT_CRC(id0, bus.id);
-
- if(
- (hd->bus.id == bus_usb ||
- hd->bus.id == bus_ccw) &&
- hd->sysfs_bus_id
- ) {
- STR_CRC(id0, sysfs_bus_id);
- }
- else if(
- hd->bus.id != bus_usb &&
- hd->bus.id != bus_pci &&
- hd->sysfs_id
- ) {
- STR_CRC(id0, sysfs_id);
- }
- else if(hd->unix_dev_name) {
- STR_CRC(id0, unix_dev_name);
- }
- else {
- INT_CRC(id0, slot);
- INT_CRC(id0, func);
- }
-
- STR_CRC(id0, rom_id);
-
- id0 += (id0 >> 32);
-
- str_printf(&hd->unique_id, 0, "%s.%s", numid2str(id0, 24), hd->unique_id1);
-}
-#undef INT_CRC
-#undef STR_CRC
-
-
-devtree_t *free_devtree(hd_data_t *hd_data)
-{
- hd_t *hd;
- devtree_t *dt, *next;
-
- /*
- * first, remove all references in the current device tree
- * (refs in hd_old can remain)
- */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->detail && hd->detail->type == hd_detail_devtree) {
- hd->detail = free_mem(hd->detail);
- }
- }
-
- for(dt = hd_data->devtree; dt; dt = next) {
- next = dt->next;
-
- free_mem(dt->path);
- free_mem(dt->filename);
- free_mem(dt->name);
- free_mem(dt->model);
- free_mem(dt->device_type);
- free_mem(dt->compatible);
- free_mem(dt->edid);
-
- free_mem(dt);
- }
-
- return hd_data->devtree = NULL;
-}
-
-
-void test_read_block0_open(void *arg)
-{
- open((char *) arg, O_RDONLY);
-}
-
-unsigned char *read_block0(hd_data_t *hd_data, char *dev, int *timeout)
-{
- int fd, len, buf_size = 512, k, sel;
- unsigned char *buf = NULL;
- struct timeval to;
- fd_set set, set0;
-
- if(hd_timeout(test_read_block0_open, dev, *timeout) > 0) {
- ADD2LOG(" read_block0: open(%s) timed out\n", dev);
- *timeout = -1;
- fd = -2;
- }
- else {
- fd = open(dev, O_RDONLY);
- if(fd < 0) ADD2LOG(" read_block0: open(%s) failed\n", dev);
- }
- if(fd >= 0) {
- buf = new_mem(buf_size);
- len = k = 0;
-
- FD_ZERO(&set0);
- FD_SET(fd, &set0);
-
- to.tv_sec = *timeout; to.tv_usec = 0;
- for(;;) {
- set = set0;
- if((sel = select(fd + 1, &set, NULL, NULL, &to)) > 0) {
- if((k = read(fd, buf + len, buf_size - len)) > 0) len += k;
- ADD2LOG(" read_block0: %d bytes (%ds, %dus)\n", k, (int) to.tv_sec, (int) to.tv_usec);
- if(k <= 0 || buf_size == len) break;
- }
- if(sel == 0) {
- *timeout = -2; break;
- }
- }
-
- if(k < 0) {
- ADD2LOG(" read_block0: read error(%s, %d, %d): errno %d\n", dev, len, buf_size - len, errno);
- buf = free_mem(buf);
- }
- close(fd);
- }
-
- return buf;
-}
-
-
-void get_kernel_version(hd_data_t *hd_data)
-{
- unsigned u1, u2;
- str_list_t *sl;
-
- if(hd_data->kernel_version) return;
-
- hd_data->kernel_version = KERNEL_24;
-
- sl = read_file(PROC_VERSION, 0, 1);
-
- if(!sl || !sl->str) return;
-
- if(sscanf(sl->str, "Linux version %u.%u.", &u1, &u2) == 2) {
- if(hd_data->debug) {
- ADD2LOG("kernel version is %u.%u\n", u1, u2);
- }
- u1 = (u1 << 16) + (u2 << 8);
-
- if(u1 <= KERNEL_22) {
- hd_data->kernel_version = KERNEL_22;
- }
- else if(u1 <= KERNEL_24) {
- hd_data->kernel_version = KERNEL_24;
- }
- else if(u1 <= KERNEL_26) {
- hd_data->kernel_version = KERNEL_26;
- }
- }
-
- free_str_list(sl);
-}
-
-
-char *vend_id2str(unsigned vend)
-{
- static char buf[32];
- char *s;
-
- *(s = buf) = 0;
-
- if(ID_TAG(vend) == TAG_EISA) {
- strcpy(s, eisa_vendor_str(vend));
- }
- else {
- if(ID_TAG(vend) == TAG_USB) *s++ = 'u', *s = 0;
- if(ID_TAG(vend) == TAG_SPECIAL) *s++ = 's', *s = 0;
- if(ID_TAG(vend) == TAG_PCMCIA) *s++ = 'P', *s = 0;
- sprintf(s, "%04x", ID_VALUE(vend));
- }
-
- return buf;
-}
-
-
-int is_modem(hd_data_t *hd_data, hd_t *hd)
-{
- if(
- hd->base_class.id == bc_modem ||
- (
- hd->base_class.id == bc_comm &&
- hd->sub_class.id == sc_com_modem
- )
- ) return 1;
-
- return 0;
-}
-
-
-int is_audio(hd_data_t *hd_data, hd_t *hd)
-{
- /* ISA-PnP sound cards: just one entry per card */
- if(
- hd->bus.id == bus_isa &&
- hd->is.isapnp &&
- hd->func
- ) return 0;
-
- if(
- hd->base_class.id == bc_multimedia &&
- (
- hd->sub_class.id == sc_multi_audio ||
- hd->sub_class.id == 3
- )
- ) return 1;
-
- return 0;
-}
-
-
-void assign_hw_class(hd_data_t *hd_data, hd_t *hd)
-{
- int sc; /* compare sub_class too */
- unsigned base_class, sub_class;
- hd_hw_item_t item;
- int (*test_func)(hd_data_t *, hd_t *);
-
- if(!hd) return;
-
- // ###### FIXME: maybe just return here?
- if(!hd->hw_class) { /* skip if we've already done it */
- for(item = 1; item < hw_all; item++) {
-
- test_func = NULL;
-
- sc = 0;
- sub_class = 0;
-
- base_class = -1;
- switch(item) {
- case hw_cdrom:
- base_class = bc_storage_device;
- sub_class = sc_sdev_cdrom;
- sc = 1;
- break;
-
- case hw_floppy:
- base_class = bc_storage_device;
- sub_class = sc_sdev_floppy;
- sc = 1;
- break;
-
- case hw_disk:
- base_class = bc_storage_device;
- sub_class = sc_sdev_disk;
- sc = 1;
- break;
-
- case hw_network:
- base_class = bc_network_interface;
- break;
-
- case hw_display:
- base_class = bc_display;
- break;
-
- case hw_monitor:
- base_class = bc_monitor;
- break;
-
- case hw_mouse:
- base_class = bc_mouse;
- break;
-
- case hw_joystick:
- base_class = bc_joystick;
- break;
-
- case hw_keyboard:
- base_class = bc_keyboard;
- break;
-
- case hw_camera:
- base_class = bc_camera;
- break;
-
- case hw_framebuffer:
- base_class = bc_framebuffer;
- break;
-
- case hw_chipcard:
- base_class = bc_chipcard;
- break;
-
- case hw_sound:
- test_func = is_audio;
- break;
-
- case hw_isdn:
- base_class = bc_isdn;
- break;
-
- case hw_dsl:
- base_class = bc_dsl;
- break;
-
- case hw_modem:
- test_func = is_modem;
- break;
-
- case hw_storage_ctrl:
- base_class = bc_storage;
- break;
-
- case hw_network_ctrl:
- base_class = bc_network;
- break;
-
- case hw_printer:
- base_class = bc_printer;
- break;
-
- case hw_tv:
- base_class = bc_tv;
- break;
-
- case hw_dvb:
- base_class = bc_dvb;
- break;
-
- case hw_scanner:
- base_class = bc_scanner;
- break;
-
- case hw_braille:
- base_class = bc_braille;
- break;
-
- case hw_sys:
- base_class = bc_internal;
- sub_class = sc_int_sys;
- sc = 1;
- break;
-
- case hw_cpu:
- base_class = bc_internal;
- sub_class = sc_int_cpu;
- sc = 1;
- break;
-
- case hw_bios:
- base_class = bc_internal;
- sub_class = sc_int_bios;
- sc = 1;
- break;
-
- case hw_usb_ctrl:
- base_class = bc_serial;
- sub_class = sc_ser_usb;
- sc = 1;
- break;
-
- case hw_bridge:
- base_class = bc_bridge;
- break;
-
- case hw_hub:
- base_class = bc_hub;
- break;
-
- case hw_memory:
- base_class = bc_internal;
- sub_class = sc_int_main_mem;
- sc = 1;
- break;
-
- case hw_ieee1394_ctrl:
- base_class = bc_serial;
- sub_class = sc_ser_fire;
- sc = 1;
- break;
-
- case hw_pcmcia_ctrl:
- test_func = is_pcmcia_ctrl;
- break;
-
- case hw_pppoe:
- base_class = bc_network_interface;
- break;
-
- case hw_partition:
- base_class = bc_partition;
- break;
-
- case hw_bluetooth:
- base_class = bc_bluetooth;
- break;
-
- case hw_wlan:
- case hw_block:
- case hw_tape:
- case hw_vbe:
- break;
-
- case hw_unknown:
- case hw_all:
- case hw_manual: /* special */
-
- /* bus types */
- case hw_usb:
- case hw_pci:
- case hw_isapnp:
- case hw_scsi:
- case hw_ide:
-
- case hw_pcmcia: /* special */
-
- case hw_ieee1394: /* not handled */
- case hw_hotplug: /* not handled */
- case hw_hotplug_ctrl: /* not handled */
- case hw_zip: /* not handled */
- case hw_redasd:
- break;
- }
-
- if(test_func) {
- if(test_func(hd_data, hd)) {
- hd->hw_class = item;
- break;
- }
- }
- else if(
- (
- hd->base_class.id == base_class &&
- (sc == 0 || hd->sub_class.id == sub_class)
- )
- ||
- ( /* list other display adapters, too */
- base_class == bc_display &&
- hd->base_class.id == bc_multimedia &&
- hd->sub_class.id == sc_multi_video
- )
- ||
- ( /* make i2o storage controllers */
- item == hw_storage_ctrl &&
- hd->base_class.id == bc_i2o
- )
- ||
- ( /* add fibre channel to storage ctrl list */
- item == hw_storage_ctrl &&
- hd->base_class.id == bc_serial &&
- hd->sub_class.id == sc_ser_fiber
- )
- ) {
- hd->hw_class = item;
- break;
- }
- }
-
- if(!hd->hw_class) hd->hw_class = hw_unknown;
- }
-
- hd_set_hw_class(hd, hd->hw_class);
-
- if(hd->bus.id == bus_usb) {
- hd_set_hw_class(hd, hw_usb);
- }
- else if(hd->bus.id == bus_pci) {
- hd_set_hw_class(hd, hw_pci);
- }
- else if(hd->bus.id == bus_scsi) {
- hd_set_hw_class(hd, hw_scsi);
- }
- else if(hd->bus.id == bus_ide) {
- hd_set_hw_class(hd, hw_ide);
- }
- else if(hd->bus.id == bus_isa && hd->is.isapnp) {
- hd_set_hw_class(hd, hw_isapnp);
- }
-
- if(hd->hw_class == hw_network && hd->is.pppoe) {
- hd_set_hw_class(hd, hw_pppoe);
- }
-
- if(hd->usb_guid) {
- hd_set_hw_class(hd, hw_usb); // ###### maybe only if(hd->bus.id == bus_scsi)?
- }
-
- if(hd->hotplug == hp_pcmcia || hd->hotplug == hp_cardbus) {
- hd_set_hw_class(hd, hw_pcmcia);
- }
-
- if(hd->is.wlan) {
- hd_set_hw_class(hd, hw_wlan);
- }
-
- if(hd_is_hw_class(hd, hw_bios)) {
- hd_set_hw_class(hd, hw_vbe);
- }
-
- if(
- hd->base_class.id == bc_storage_device ||
- hd->base_class.id == bc_partition
- ) {
- hd_set_hw_class(hd, hw_block);
- }
-
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_tape
- ) {
- hd_set_hw_class(hd, hw_tape);
- }
-
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- hd_set_hw_class(hd, hw_redasd);
- }
-}
-
-
-void short_vendor(char *vendor)
-{
- static char *remove[] = {
- ".", ",", "-", "&", " inc", "corporation", " corp", " system",
- " systems", "technology", "technologies", "multimedia", "communications",
- "computer", " ltd", "(formerly ncr)", " group", " labs", "research",
- "equipment", " ag", "personal", " canada", "data", "products",
- " america", " co", " of", "solutions", " as", "publishing", "(old)",
- " usa", " gmbh", "electronic", "components", "(matsushita)", " ab",
- " pte", " north", " japan", "limited", "microcomputer", " kg",
- "incorporated", "semiconductor", "sem", "graphics"
- };
- int i, j;
- int len, len1, len2;
-
- if(!vendor) return;
-
- len2 = strlen(vendor);
-
- if(!len2) return;
-
- do {
- len = len2;
- for(i = 0; (unsigned) i < sizeof remove / sizeof *remove; i++) {
- len1 = strlen(remove[i]);
- if(len > len1 && !strcasecmp(vendor + len - len1, remove[i])) {
- vendor[j = len - len1] = 0;
- for(j--; j >= 0; vendor[j--] = 0) {
- if(!isspace(vendor[j])) break;
- }
- }
- }
- len2 = strlen(vendor);
- } while(len2 != len);
-
-}
-
-
-void create_model_name(hd_data_t *hd_data, hd_t *hd)
-{
- char *vend, *dev;
- char *compat, *dev_class, *hw_class;
- char *part1, *part2;
- cpu_info_t *ct;
-
- /* early out */
- if(!hd || hd->model) return;
-
- part1 = part2 = NULL;
-
- vend = dev = compat = dev_class = hw_class = NULL;
-
- if(
- hd->hw_class == hw_cpu &&
- hd->detail &&
- hd->detail->type == hd_detail_cpu &&
- (ct = hd->detail->cpu.data) &&
- ct->model_name
- ) {
- /* cpu entry */
-
- part1 = new_str(ct->model_name);
- if(ct->clock) str_printf(&part1, -1, ", %u MHz", ct->clock);
- }
- else {
- /* normal entry */
-
- vend = new_str(hd->sub_vendor.name);
-
- dev = new_str(hd->sub_device.name);
-
- if(!vend) vend = new_str(hd->vendor.name);
-
- if(!dev) dev = new_str(hd->device.name);
-
- if(dev) {
- if(vend) {
- part1 = vend; part2 = dev;
- }
- else {
- part1 = dev;
- }
- }
-
- if(!part1 && !part2) {
- compat = new_str(hd->compat_device.name);
-
- dev_class = new_str(hd->sub_class.name ?: hd->base_class.name);
-
- hw_class = new_str(hd_hw_item_name(hd->hw_class));
-
- if(vend) {
- if(compat) {
- part1 = vend; part2 = compat;
- }
- else if(dev_class) {
- part1 = vend; part2 = dev_class;
- }
- }
- else {
- if(
- compat &&
- dev_class &&
- hd->base_class.id != bc_internal /* avoid things like 'Notebook *System*' */
- ) {
- part1 = compat; part2 = dev_class;
- }
- else if(compat) {
- part1 = compat;
- }
- else if(dev_class) {
- part1 = dev_class;
- if(hw_class && !strchr(part1, ' ') && strchr(hw_class, ' ')) {
- part2 = hw_class;
- }
- }
- }
- }
- }
-
- if(part1 && part2) {
- short_vendor(part1);
- }
-
- if(part1 && !strcasecmp(part1, "unknown")) {
- part1 = part2;
- part2 = NULL;
- }
-
- if(part1 && part2) {
- /* maybe the vendor name is already part of the device name... */
- if(strstr(part2, part1) || !strcasecmp(part1, part2)) {
- part1 = part2;
- part2 = NULL;
- }
- }
-
- if(!part1 && !part2 && hw_class) {
- str_printf(&part1, 0, "unknown %s", hw_class);
- if(strchr(hw_class, ' ')) {
- str_printf(&part1, -1, " hardware");
- }
- }
-
- str_printf(&hd->model, 0, "%s%s%s", part1, part2 ? " " : "", part2 ? part2 : "");
-
- free_mem(vend);
- free_mem(dev);
- free_mem(compat);
- free_mem(dev_class);
- free_mem(hw_class);
-}
-
-
-#ifndef LIBHD_TINY
-int hd_change_status(const char *id, hd_status_t status, const char *config_string)
-{
- hd_data_t *hd_data;
- hd_manual_t *entry;
- int i;
-
- hd_data = new_mem(sizeof *hd_data);
-
- entry = hd_manual_read_entry(hd_data, (char *) id);
-
- if(!entry || status.invalid) return 1;
-
- if(status.configured) entry->status.configured = status.configured;
- if(status.available) entry->status.available = status.available;
- if(status.needed) entry->status.needed = status.needed;
- entry->status.invalid = status.invalid;
-
- if(config_string) {
- free_mem(entry->config_string);
- entry->config_string = new_str(config_string);
- }
-
- i = hd_manual_write_entry(hd_data, entry);
-
- hd_free_manual(entry);
-
- hd_free_hd_data(hd_data);
-
- free_mem(hd_data);
-
- return i;
-}
-
-#endif /* !defined(LIBHD_TINY) */
-
-
-int hd_getdisksize(hd_data_t *hd_data, char *dev, int fd, hd_res_t **geo, hd_res_t **size)
-{
- int status=0;
- hd_res_t *res;
- struct hd_geometry geo_s;
-#ifdef HDIO_GETGEO_BIG
- struct hd_big_geometry big_geo_s;
-#endif
- unsigned long secs32;
- uint64_t secs, secs0;
- unsigned sec_size;
- int close_fd = 0;
- int got_big = 0;
-
- *geo = *size = NULL;
-
- ADD2LOG(" dev = %s, fd = %d\n", dev, fd);
-
- if(fd < 0) {
- if(!dev) return 0;
- fd = open(dev, O_RDONLY | O_NONBLOCK);
- close_fd = 1;
- if(fd < 0) return 0;
- }
-
- ADD2LOG(" open ok, fd = %d\n", fd);
-
- secs0 = 0;
- res = NULL;
-
-#ifdef HDIO_GETGEO_BIG
- if(!ioctl(fd, HDIO_GETGEO_BIG, &big_geo_s)) {
- if(dev) ADD2LOG("%s: ioctl(big geo) ok\n", dev);
- res = add_res_entry(geo, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = big_geo_s.cylinders;
- res->disk_geo.heads = big_geo_s.heads;
- res->disk_geo.sectors = big_geo_s.sectors;
- res->disk_geo.geotype = geo_logical;
- secs0 = (uint64_t) res->disk_geo.cyls * res->disk_geo.heads * res->disk_geo.sectors;
- got_big = 1;
- }
- else {
- ADD2LOG(" big geo failed: %s\n", strerror(errno));
-#else
- {
-#endif
- if(!ioctl(fd, HDIO_GETGEO, &geo_s)) {
- if(dev) ADD2LOG("%s: ioctl(geo) ok\n", dev);
- res = add_res_entry(geo, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = geo_s.cylinders;
- res->disk_geo.heads = geo_s.heads;
- res->disk_geo.sectors = geo_s.sectors;
- res->disk_geo.geotype = geo_logical;
- secs0 = (uint64_t) res->disk_geo.cyls * res->disk_geo.heads * res->disk_geo.sectors;
- }
- else {
- ADD2LOG(" geo failed: %s\n", strerror(errno));
- }
- }
-
- /* ##### maybe always BLKSZGET or always 0x200? */
- if(!ioctl(fd, BLKSSZGET, &sec_size)) {
- if(dev) ADD2LOG("%s: ioctl(block size) ok\n", dev);
- if(!sec_size) sec_size = 0x200;
- }
- else {
- sec_size = 0x200;
- }
-
- secs = 0;
-
-#if defined(__s390__) || defined(__s390x__)
- if(res && res->disk_geo.sectors == 0)
- { /* This seems to be an unformatted DASD -> fake the formatted geometry */
- res->disk_geo.sectors=12;
- sec_size=4096;
- secs = (uint64_t) res->disk_geo.cyls * res->disk_geo.heads * res->disk_geo.sectors;
- status=1;
- }
- else
- {
-#endif
- if(!ioctl(fd, BLKGETSIZE64, &secs)) {
- if(dev) ADD2LOG("%s: ioctl(disk size) ok\n", dev);
- secs /= sec_size;
- }
- else if(!ioctl(fd, BLKGETSIZE, &secs32)) {
- if(dev) ADD2LOG("%s: ioctl(disk size32) ok\n", dev);
- secs = secs32;
- }
- else {
- secs = secs0;
- }
-#if defined(__s390__) || defined(__s390x__)
- }
-#endif
-
- if(!got_big && secs0 && res) {
- /* fix cylinder value */
- res->disk_geo.cyls = secs / (res->disk_geo.heads * res->disk_geo.sectors);
- }
-
- if(secs) {
- res = add_res_entry(size, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.unit = size_unit_sectors;
- res->size.val1 = secs;
- res->size.val2 = sec_size;
- }
-
- // ADD2LOG(" geo = %p, size = %p\n", *geo, *size);
-
- if(close_fd) close(fd);
-
- return status;
-}
-
-
-str_list_t *hd_split(char del, char *str)
-{
- char *t, *s;
- str_list_t *sl = NULL;
-
- if(!str) return NULL;
-
- for(s = str = new_str(str); (t = strchr(s, del)); s = t + 1) {
- *t = 0;
- add_str_list(&sl, s);
- }
- add_str_list(&sl, s);
-
- free_mem(str);
-
- return sl;
-}
-
-
-char *hd_join(char *del, str_list_t *str)
-{
- char *s;
- str_list_t *str0;
- int len = 0, del_len = 0;
-
- if(del) del_len = strlen(del);
-
- for(str0 = str; str0; str0 = str0->next) {
- if(str0->str) len += strlen(str0->str);
- if(str0->next) len += del_len;
- }
-
- if(!len) return NULL;
-
- len++;
-
- s = new_mem(len);
-
- for(; str; str = str->next) {
- if(str->str) strcat(s, str->str);
- if(str->next && del) strcat(s, del);
- }
-
- return s;
-}
-
-
-/*
- * cf. pcmcia-cs-*:cardmgr/pcic_probe.c
- */
-int is_pcmcia_ctrl(hd_data_t *hd_data, hd_t *hd)
-{
- int i;
- static unsigned ids[][2] = {
- { 0x1013, 0x1100 },
- { 0x1013, 0x1110 },
- { 0x10b3, 0xb106 },
- { 0x1180, 0x0465 },
- { 0x1180, 0x0466 },
- { 0x1180, 0x0475 },
- { 0x1180, 0x0476 },
- { 0x1180, 0x0478 },
- { 0x104c, 0xac12 },
- { 0x104c, 0xac13 },
- { 0x104c, 0xac15 },
- { 0x104c, 0xac1a },
- { 0x104c, 0xac1e },
- { 0x104c, 0xac17 },
- { 0x104c, 0xac19 },
- { 0x104c, 0xac1c },
- { 0x104c, 0xac16 },
- { 0x104c, 0xac1d },
- { 0x104c, 0xac1f },
- { 0x104c, 0xac50 },
- { 0x104c, 0xac51 },
- { 0x104c, 0xac1b },
- { 0x104c, 0xac52 },
- { 0x104c, 0xac41 },
- { 0x104c, 0xac40 },
- { 0x104c, 0xac42 },
- { 0x1217, 0x6729 },
- { 0x1217, 0x673a },
- { 0x1217, 0x6832 },
- { 0x1217, 0x6836 },
- { 0x1217, 0x6872 },
- { 0x1217, 0x6925 },
- { 0x1217, 0x6933 },
- { 0x1217, 0x6972 },
- { 0x1179, 0x0603 },
- { 0x1179, 0x060a },
- { 0x1179, 0x060f },
- { 0x1179, 0x0617 },
- { 0x119b, 0x1221 },
- { 0x8086, 0x1221 }
- };
-
- if(!hd) return 0;
-
- if(
- hd->base_class.id == bc_bridge &&
- (hd->sub_class.id == sc_bridge_pcmcia || hd->sub_class.id == sc_bridge_cardbus)
- ) return 1;
-
- /* just in case... */
- if(hd->bus.id == bus_pci) {
- for(i = 0; (unsigned) i < sizeof ids / sizeof *ids; i++) {
- if(
- ID_VALUE(hd->vendor.id) == ids[i][0] &&
- ID_VALUE(hd->device.id) == ids[i][1]
- ) return 1;
- }
- }
-
- return 0;
-}
-
-void hd_set_hw_class(hd_t *hd, hd_hw_item_t hw_class)
-{
- unsigned ofs, bit;
-
- ofs = (unsigned) hw_class >> 3;
- bit = (unsigned) hw_class & 7;
-
- if(ofs < sizeof hd->hw_class_list / sizeof *hd->hw_class_list) {
- hd->hw_class_list[ofs] |= 1 << bit;
- }
-}
-
-
-int hd_is_hw_class(hd_t *hd, hd_hw_item_t hw_class)
-{
- unsigned ofs, bit;
-
- if(hw_class == hw_all) return 1;
-
- ofs = (unsigned) hw_class >> 3;
- bit = (unsigned) hw_class & 7;
-
- if(ofs < sizeof hd->hw_class_list / sizeof *hd->hw_class_list) {
- return hd->hw_class_list[ofs] & (1 << bit) ? 1 : 0;
- }
-
- return 0;
-}
-
-
-/*
- * Start subprocess for dangerous things.
- *
- * Stop it after total_timeout seconds or if nothing happens for
- * timeout seconds.
- */
-void hd_fork(hd_data_t *hd_data, int timeout, int total_timeout)
-{
- void (*old_sigchld_handler)(int);
- struct timespec wait_time;
- int i, j, sleep_intr = 1;
- hd_data_t *hd_data_shm;
- time_t stop_time;
- int updated, rem_time;
- sigset_t new_set, old_set;
-
- if(hd_data->flags.forked) return;
-
- if(hd_data->flags.nofork) {
- hd_data->flags.forked = 1;
- return;
- }
-
- hd_data_shm = hd_data->shm.data;
-
- stop_time = time(NULL) + total_timeout;
- rem_time = total_timeout;
-
- child_id = child = 0;
-
- sigemptyset(&new_set);
- sigaddset(&new_set, SIGCHLD);
- sigprocmask(SIG_BLOCK, &new_set, &old_set);
-
- old_sigchld_handler = signal(SIGCHLD, sigchld_handler);
-
- wait_time.tv_sec = timeout;
- wait_time.tv_nsec = 0;
-
- updated = hd_data_shm->shm.updated;
-
- child = fork();
-
- sigprocmask(SIG_SETMASK, &old_set, NULL);
-
- if(child != -1) {
- if(child) {
- ADD2LOG(
- "****** started child process %d (%ds/%ds) ******\n",
- (int) child, timeout, total_timeout
- );
-
- while(child_id != child && sleep_intr) {
- sleep_intr = nanosleep(&wait_time, &wait_time);
-// fprintf(stderr, "woke up %d\n", sleep_intr);
- rem_time = stop_time - time(NULL);
- if(updated != hd_data_shm->shm.updated && rem_time >= 0) {
- /* reset time if there was some progress and we've got some time left */
- rem_time++;
- wait_time.tv_sec = rem_time > timeout ? timeout : rem_time;
- wait_time.tv_nsec = 0;
-
- sleep_intr = 1;
- }
- updated = hd_data_shm->shm.updated;
- }
-
- if(child_id != child) {
- ADD2LOG("****** killed child process %d (%ds) ******\n", (int) child, rem_time);
- kill(child, SIGKILL);
- for(i = 10; i && !waitpid(child, NULL, WNOHANG); i--) {
- wait_time.tv_sec = 0;
- wait_time.tv_nsec = 10*1000000;
- nanosleep(&wait_time, NULL);
- }
- }
-
- i = hd_data->log ? strlen(hd_data->log) : 0;
-
- if(hd_data_shm->log) {
- j = strlen(hd_data_shm->log);
- hd_data->log = resize_mem(hd_data->log, i + j + 1);
- memcpy(hd_data->log + i, hd_data_shm->log, j + 1);
- }
-
- ADD2LOG("****** stopped child process %d (%ds) ******\n", (int) child, rem_time);
- }
- else {
-#ifdef LIBHD_MEMCHECK
- /* stop logging in child process */
- if(libhd_log) fclose(libhd_log);
- libhd_log = NULL;
-#endif
- hd_data->log = free_mem(hd_data->log);
-
- hd_data->flags.forked = 1;
- }
- }
-
- signal(SIGCHLD, old_sigchld_handler);
-}
-
-
-/*
- * Stop subprocess.
- */
-void hd_fork_done(hd_data_t *hd_data)
-{
- int len;
- void *p;
- hd_data_t *hd_data_shm;
-
- if(!hd_data->flags.forked || hd_data->flags.nofork) return;
-
- hd_data_shm = hd_data->shm.data;
-
- if(hd_data->log) {
- len = strlen(hd_data->log) + 1;
- p = hd_shm_add(hd_data, hd_data->log, len);
- hd_data_shm->log = p;
- }
-
- _exit(0);
-}
-
-
-/*
- * SIGCHLD handler while we're waiting for our child.
- */
-void sigchld_handler(int num)
-{
- pid_t p = waitpid(child, NULL, WNOHANG);
-
- if(p && p == child) child_id = p;
-}
-
-
-/*
- * Get a sufficiently large shm segment.
- */
-void hd_shm_init(hd_data_t *hd_data)
-{
- void *p;
-
- if(hd_data->shm.ok || hd_data->flags.nofork) return;
-
- memset(&hd_data->shm, 0, sizeof hd_data->shm);
-
- hd_data->shm.size = 256*1024;
-
- hd_data->shm.id = shmget(IPC_PRIVATE, hd_data->shm.size, IPC_CREAT | 0600);
-
- if(hd_data->shm.id == -1) {
- ADD2LOG("shm: shmget failed (errno %d)\n", errno);
- return;
- }
-
- p = shmat(hd_data->shm.id, NULL, 0);
-
- if(p == (void *) -1) {
- ADD2LOG("shm: shmat for segment %d failed (errno %d)\n", hd_data->shm.id, errno);
- }
-
- shmctl(hd_data->shm.id, IPC_RMID, NULL);
-
- if(p == (void *) -1) return;
-
- hd_data->shm.data = p;
-
- ADD2LOG("shm: attached segment %d at %p\n", hd_data->shm.id, hd_data->shm.data);
-
- hd_data->shm.ok = 1;
-
- hd_shm_clean(hd_data);
-}
-
-
-/*
- * Reset shm usage, remove references to shm area.
- */
-void hd_shm_clean(hd_data_t *hd_data)
-{
- hd_data_t *hd_data_shm;
-
- if(!hd_data->shm.ok) return;
-
- if(hd_is_shm_ptr(hd_data, hd_data->ser_mouse)) hd_data->ser_mouse = NULL;
- if(hd_is_shm_ptr(hd_data, hd_data->ser_modem)) hd_data->ser_modem = NULL;
-
-
- hd_data->shm.used = sizeof *hd_data;
- hd_data->shm.updated = 0;
-
- memcpy(hd_data_shm = hd_data->shm.data, hd_data, sizeof *hd_data);
-
- hd_data_shm->log = NULL;
-}
-
-
-/*
- * Release shm segment.
- */
-void hd_shm_done(hd_data_t *hd_data)
-{
- if(!hd_data->shm.ok) return;
-
- shmdt(hd_data->shm.data);
-
- hd_data->shm.ok = 0;
-}
-
-
-/*
- * Copy into shm area. If ptr is NULL return a shm area of size len.
- */
-void *hd_shm_add(hd_data_t *hd_data, void *ptr, unsigned len)
-{
- if(!hd_data->shm.ok || !len) return NULL;
-
- hd_data = hd_data->shm.data;
-
- if(hd_data->shm.size - hd_data->shm.used < len) return NULL;
-
- if(ptr) {
- ptr = memcpy(hd_data->shm.data + hd_data->shm.used, ptr, len);
- }
- else {
- ptr = memset(hd_data->shm.data + hd_data->shm.used, 0, len);
- }
-
- hd_data->shm.used += len;
-
- return ptr;
-}
-
-
-/*
- * Check if ptr points to a valid shm address.
- */
-int hd_is_shm_ptr(hd_data_t *hd_data, void *ptr)
-{
- if(!hd_data->shm.ok || !ptr) return 0;
-
- hd_data = hd_data->shm.data;
-
- if(
- ptr < hd_data->shm.data ||
- ptr >= hd_data->shm.data + hd_data->shm.used
- ) return 0;
-
- return 1;
-}
-
-
-char *hd_shm_add_str(hd_data_t *hd_data, char *str)
-{
- return hd_shm_add(hd_data, str, str ? strlen(str) + 1 : 0);
-}
-
-
-str_list_t *hd_shm_add_str_list(hd_data_t *hd_data, str_list_t *sl)
-{
- str_list_t *sl0 = NULL, **sl_shm;
-
- for(sl_shm = &sl0; sl; sl = sl->next, sl_shm = &(*sl_shm)->next) {
- *sl_shm = hd_shm_add(hd_data, NULL, sizeof **sl_shm);
- (*sl_shm)->str = hd_shm_add_str(hd_data, sl->str);
- }
-
- return sl0;
-}
-
-
-void hd_move_to_shm(hd_data_t *hd_data)
-{
- hd_data_t *hd_data_shm;
- ser_device_t *ser, **ser_shm;
- struct {
- ser_device_t **src, **dst;
- } ser_dev[2];
- unsigned u;
-
- if(!hd_data->shm.ok) return;
-
- hd_data_shm = hd_data->shm.data;
-
- ser_dev[0].src = &hd_data->ser_mouse;
- ser_dev[0].dst = &hd_data_shm->ser_mouse;
- ser_dev[1].src = &hd_data->ser_modem;
- ser_dev[1].dst = &hd_data_shm->ser_modem;
-
- for(u = 0; u < sizeof ser_dev / sizeof *ser_dev; u++) {
- if(*ser_dev[u].src) {
- /* copy serial mouse data */
- for(
- ser = *ser_dev[u].src, ser_shm = ser_dev[u].dst;
- ser;
- ser = ser->next, ser_shm = &(*ser_shm)->next
- ) {
- *ser_shm = hd_shm_add(hd_data, ser, sizeof *ser);
- }
-
- for(ser = *ser_dev[u].dst; ser; ser = ser->next) {
- ser->dev_name = hd_shm_add_str(hd_data, ser->dev_name);
- ser->serial = hd_shm_add_str(hd_data, ser->serial);
- ser->class_name = hd_shm_add_str(hd_data, ser->class_name);
- ser->dev_id = hd_shm_add_str(hd_data, ser->dev_id);
- ser->user_name = hd_shm_add_str(hd_data, ser->user_name);
- ser->vend = hd_shm_add_str(hd_data, ser->vend);
- ser->init_string1 = hd_shm_add_str(hd_data, ser->init_string1);
- ser->init_string2 = hd_shm_add_str(hd_data, ser->init_string2);
- ser->pppd_option = hd_shm_add_str(hd_data, ser->pppd_option);
-
- ser->at_resp = hd_shm_add_str_list(hd_data, ser->at_resp);
- }
- }
- }
-
-}
-
-
-hd_udevinfo_t *hd_free_udevinfo(hd_udevinfo_t *ui)
-{
- hd_udevinfo_t *next;
-
- for(; ui; ui = next) {
- next = ui->next;
-
- free_mem(ui->sysfs);
- free_mem(ui->name);
- free_str_list(ui->links);
-
- free_mem(ui);
- }
-
- return NULL;
-}
-
-
-void read_udevinfo(hd_data_t *hd_data)
-{
- str_list_t *sl, *udevinfo, *sl0, *sl1, *dir_list;
- hd_udevinfo_t **uip, *ui;
- char *s, buf[256];
- int l;
-
- udevinfo = NULL;
-
- if((dir_list = read_dir("/dev/.udevdb", 'r'))) {
- s = NULL;
-
- for(sl = dir_list; sl; sl = sl->next) {
- str_printf(&s, 0, "/dev/.udevdb/%s", sl->str);
- sl0 = read_file(s, 0, 0);
- if(sl0) {
- sl1 = udevinfo;
- udevinfo = sl0;
- while(sl0->next) sl0 = sl0->next;
- sl0->next = sl1;
- }
- }
-
- s = free_mem(s);
- free_str_list(dir_list);
- }
- else {
- udevinfo = read_file("| " PROG_UDEVINFO " -d 2>/dev/null", 0, 0);
- }
-
- ADD2LOG("----- udevinfo -----\n");
- for(sl = udevinfo; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- udevinfo end -----\n");
-
- hd_data->udevinfo = hd_free_udevinfo(hd_data->udevinfo);
-
- uip = &hd_data->udevinfo;
-
- for(ui = NULL, sl = udevinfo; sl; sl = sl->next) {
- if(sscanf(sl->str, "P: %255s", buf) == 1) {
- ui = *uip = new_mem(sizeof **uip);
- uip = &(*uip)->next;
- ui->sysfs = new_str(buf);
-
- continue;
- }
-
- if(sscanf(sl->str, "T: %255s", buf) == 1) {
- ui->type = *buf;
-
- continue;
- }
-
- if(sscanf(sl->str, "N: %255s", buf) == 1) {
- free_mem(ui->name);
- ui->name = new_str(buf);
-
- continue;
- }
-
- if(!strncmp(sl->str, "S:", 2)) {
- s = sl->str + 2;
- while(*s == ' ') s++;
- l = strlen(s);
- while(l > 0 && isspace(s[l-1])) s[--l] = 0;
- if(*s) {
- sl0 = hd_split(' ', s);
- for(sl1 = sl0; sl1; sl1 = sl1->next) {
- add_str_list(&ui->links, sl1->str);
- }
- free_str_list(sl0);
- }
-
- continue;
- }
- }
-
- for(ui = hd_data->udevinfo; ui; ui = ui->next) {
- ADD2LOG("%s\n", ui->sysfs);
- if(ui->name) ADD2LOG(" name: %s\n", ui->name);
- if(ui->links) {
- s = hd_join(", ", ui->links);
- ADD2LOG(" links: %s\n", s);
- free_mem(s);
- }
- }
-
- free_str_list(udevinfo);
-}
-
-
-/*
- * Return libhd version.
- */
-char *hd_version()
-{
- return HD_VERSION_STRING;
-}
-
-
-hd_t *hd_find_sysfs_id(hd_data_t *hd_data, char *id)
-{
- hd_t *hd;
-
- if(id && *id) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->sysfs_id && !strcmp(hd->sysfs_id, id)) return hd;
- }
- }
-
- return NULL;
-}
-
-
-hd_sysfsdrv_t *hd_free_sysfsdrv(hd_sysfsdrv_t *sf)
-{
- hd_sysfsdrv_t *next;
-
- for(; sf; sf = next) {
- next = sf->next;
-
- free_mem(sf->driver);
- free_mem(sf->device);
-
- free_mem(sf);
- }
-
- return NULL;
-}
-
-
-void hd_sysfs_driver_list(hd_data_t *hd_data)
-{
- char *bus;
- hd_sysfsdrv_t **sfp, *sf;
- str_list_t *sl, *sl0;
- uint64_t id = 0;
-
- struct sysfs_bus *sf_bus;
- struct sysfs_driver *sf_drv;
- struct sysfs_device *sf_dev;
-
- struct dlist *sf_subsys;
- struct dlist *sf_drv_list;
- struct dlist *sf_dev_list;
-
-
- for(sl = sl0 = read_file(PROC_MODULES, 0, 0); sl; sl = sl->next) {
- crc64(&id, sl->str, strlen(sl->str) + 1);
- }
- free_str_list(sl0);
-
- if(id != hd_data->sysfsdrv_id) {
- hd_data->sysfsdrv = hd_free_sysfsdrv(hd_data->sysfsdrv);
- }
-
- if(hd_data->sysfsdrv) return;
-
- hd_data->sysfsdrv_id = id;
-
- sfp = &hd_data->sysfsdrv;
-
- ADD2LOG("----- sysfs driver list (id 0x%016"PRIx64") -----\n", id);
-
- sf_subsys = sysfs_open_subsystem_list("bus");
-
- if(sf_subsys) dlist_for_each_data(sf_subsys, bus, char) {
- sf_bus = sysfs_open_bus(bus);
-
- if(sf_bus) {
- sf_drv_list = sysfs_get_bus_drivers(sf_bus);
- if(sf_drv_list) dlist_for_each_data(sf_drv_list, sf_drv, struct sysfs_driver) {
- sf_dev_list = sysfs_get_driver_devices(sf_drv);
- if(sf_dev_list) dlist_for_each_data(sf_dev_list, sf_dev, struct sysfs_device) {
- sf = *sfp = new_mem(sizeof **sfp);
- sfp = &(*sfp)->next;
- sf->driver = new_str(sf_drv->name);
- sf->device = new_str(hd_sysfs_id(sf_dev->path));
- ADD2LOG("%16s: %s\n", sf->driver, sf->device);
- }
- }
-
- sysfs_close_bus(sf_bus);
- }
- }
-
- sysfs_close_list(sf_subsys);
-
- ADD2LOG("----- sysfs driver list end -----\n");
-}
-
-
-int hd_report_this(hd_data_t *hd_data, hd_t *hd)
-{
- if(!hd_data->only) return 1;
-
- if(search_str_list(hd_data->only, hd->sysfs_id)) return 1;
-
- return search_str_list(hd_data->only, hd->unix_dev_name) ? 1 : 0;
-}
-
-
-str_list_t *hd_module_list(hd_data_t *hd_data, unsigned id)
-{
- hd_t *hd;
- str_list_t *drivers = NULL, *sl;
- driver_info_t *di;
-
- hd = new_mem(sizeof *hd);
- hd->tag.freeit = 1;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0xf000);
- hd->device.id = MAKE_ID(TAG_SPECIAL, id);
-
- hddb_add_info(hd_data, hd);
-
- for(di = hd->driver_info; di; di = di->next) {
- if(di->any.type == di_module && di->module.modprobe) {
- for(sl = di->module.names; sl; sl = sl->next) {
- add_str_list(&drivers, sl->str);
- }
- }
- }
-
- hd_free_hd_list(hd);
-
- return drivers;
-}
-
-
-/*
- * Read using mmap().
- */
-int hd_read_mmap(hd_data_t *hd_data, char *name, unsigned char *buf, off_t start, unsigned size)
-{
- off_t map_start, xofs;
- int psize = getpagesize(), fd;
- unsigned map_size;
- void *p;
- struct stat sbuf;
-
- if(!size || !name) return 0;
-
- memset(buf, 0, size);
-
- map_start = start & -psize;
- xofs = start - map_start;
-
- map_size = (xofs + size + psize - 1) & -psize;
-
- fd = open(name, O_RDONLY);
-
- if(fd == -1) return 0;
-
- if(!fstat(fd, &sbuf) && S_ISREG(sbuf.st_mode)) {
- if(sbuf.st_size < start + size) {
- if(sbuf.st_size > start) {
- size = sbuf.st_size - start;
- }
- else {
- size = 0;
- }
- }
- }
-
- if(!size) {
- close(fd);
- return 0;
- }
-
- p = mmap(NULL, map_size, PROT_READ, MAP_PRIVATE, fd, map_start);
-
- if(p == MAP_FAILED) {
- if(hd_data) ADD2LOG(
- "%s[0x%x, %u]: mmap(, %u,,,, 0x%x) failed: %s\n",
- name, (unsigned) start, size, map_size, (unsigned) map_start, strerror(errno)
- );
- close(fd);
- return 0;
- }
- if(hd_data) ADD2LOG(
- "%s[0x%x, %u]: mmap(, %u,,,, 0x%x) ok\n",
- name, (unsigned) start, size, map_size, (unsigned) map_start
- );
-
- memcpy(buf, p + xofs, size);
-
- munmap(p, map_size);
-
- close(fd);
-
- return 1;
-}
-
-
+++ /dev/null
-#ifndef _HD_H
-#define _HD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- *
- * libhd data structures
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#define HD_VERSION 10
-
-/*
- * debug flags
- */
-#define HD_DEB_SHOW_LOG (1 << 0)
-#define HD_DEB_PROGRESS (1 << 1)
-#define HD_DEB_CREATION (1 << 2)
-#define HD_DEB_DRIVER_INFO (1 << 3)
-#define HD_DEB_PCI (1 << 4)
-#define HD_DEB_ISAPNP (1 << 5)
-#define HD_DEB_CDROM (1 << 6)
-#define HD_DEB_NET (1 << 7)
-#define HD_DEB_FLOPPY (1 << 8)
-#define HD_DEB_MISC (1 << 9)
-#define HD_DEB_SERIAL (1 << 10)
-#define HD_DEB_MONITOR (1 << 11)
-#define HD_DEB_CPU (1 << 12)
-#define HD_DEB_BIOS (1 << 13)
-#define HD_DEB_MOUSE (1 << 14)
-#define HD_DEB_IDE (1 << 15)
-#define HD_DEB_SCSI (1 << 16)
-#define HD_DEB_USB (1 << 17)
-#define HD_DEB_ADB (1 << 18)
-#define HD_DEB_MODEM (1 << 19)
-#define HD_DEB_PARALLEL (1 << 20)
-#define HD_DEB_ISA (1 << 21)
-#define HD_DEB_BOOT (1 << 22)
-#define HD_DEB_HDDB (1 << 23)
-
-#include <stdio.h>
-#include <inttypes.h>
-#include <termios.h>
-#include <sys/types.h>
-
-/*
- * libhd's directory
- */
-#define HARDWARE_DIR "/var/lib/hardware"
-#define HARDWARE_UNIQUE_KEYS HARDWARE_DIR "/unique-keys"
-
-/**
- * \defgroup idmacros Id macros
- * Macros to handle device and vendor ids.
- *
- * Example: to check if an id is a pci id and get its value,
- * do something like this:
- * \code
- * if(ID_TAG(hd->dev) == TAG_PCI) {
- * pci_id = ID_VALUE(hd->dev)
- * }
- * \endcode
- *@{
- */
-
-#define TAG_PCI 1 /**< PCI ids. */
-#define TAG_EISA 2 /**< EISA ids (monitors, ISA-PnP, modems, mice etc). */
-#define TAG_USB 3 /**< USB ids. */
-#define TAG_SPECIAL 4 /**< Internally used ids. */
-#define TAG_PCMCIA 5 /**< PCMCIA ids. */
-
-/**
- * Get the real id value.
- */
-#define ID_VALUE(id) ((id) & 0xffff)
-
-/**
- * Get the tag value.
- */
-#define ID_TAG(id) (((id) >> 16) & 0xf)
-
-/**
- * Combine tag and id value.
- */
-#define MAKE_ID(tag, id_val) ((tag << 16) | (id_val))
-
-/*@}*/
-
-/*
- * flags to control the probing.
- */
-typedef enum probe_feature {
- pr_memory = 1, pr_pci, pr_isapnp, pr_net, pr_floppy, pr_misc,
- pr_misc_serial, pr_misc_par, pr_misc_floppy, pr_serial, pr_cpu, pr_bios,
- pr_monitor, pr_mouse, pr_scsi, pr_usb, pr_usb_mods, pr_adb, pr_modem,
- pr_modem_usb, pr_parallel, pr_parallel_lp, pr_parallel_zip, pr_isa,
- pr_isa_isdn, pr_isdn, pr_kbd, pr_prom, pr_sbus, pr_int, pr_braille,
- pr_braille_alva, pr_braille_fhp, pr_braille_ht, pr_ignx11, pr_sys,
- pr_bios_vbe, pr_isapnp_old, pr_isapnp_new, pr_isapnp_mod, pr_braille_baum,
- pr_manual, pr_fb, pr_veth, pr_pppoe, pr_scan, pr_pcmcia, pr_fork,
- pr_parallel_imm, pr_s390, pr_cpuemu, pr_sysfs, pr_s390disks, pr_udev,
- pr_block, pr_block_cdrom, pr_block_part, pr_edd, pr_edd_mod, pr_bios_ddc,
- pr_bios_fb, pr_bios_mode, pr_input, pr_block_mods, pr_bios_vesa,
- pr_cpuemu_debug, pr_scsi_noserial, pr_wlan,
- pr_max, pr_lxrc, pr_dsl, pr_default, pr_all /* pr_all must be last */
-} hd_probe_feature_t;
-
-/*
- * list types for hd_list()
- *
- * if you want to modify this: cf. manual.c::hw_items[]
- *
- * Note: hw_tv _must_ be < hw_display!
- */
-typedef enum hw_item {
- hw_sys = 1, hw_cpu, hw_keyboard, hw_braille, hw_mouse, hw_joystick,
- hw_printer, hw_scanner, hw_chipcard, hw_monitor, hw_tv, hw_display,
- hw_framebuffer, hw_camera, hw_sound, hw_storage_ctrl, hw_network_ctrl,
- hw_isdn, hw_modem, hw_network, hw_disk, hw_partition, hw_cdrom, hw_floppy,
- hw_manual, hw_usb_ctrl, hw_usb, hw_bios, hw_pci, hw_isapnp, hw_bridge,
- hw_hub, hw_scsi, hw_ide, hw_memory, hw_dvb, hw_pcmcia, hw_pcmcia_ctrl,
- hw_ieee1394, hw_ieee1394_ctrl, hw_hotplug, hw_hotplug_ctrl, hw_zip, hw_pppoe,
- hw_wlan, hw_redasd, hw_dsl, hw_block, hw_tape, hw_vbe, hw_bluetooth,
- /* append new entries here */
- hw_unknown, hw_all /* hw_all must be last */
-} hd_hw_item_t;
-
-/*
- * device base classes and bus types
- *
- */
-
-/* base class values (superset of PCI classes) */
-typedef enum base_classes {
- /* these *must* match standard PCI class numbers */
- bc_none, bc_storage, bc_network, bc_display, bc_multimedia,
- bc_memory, bc_bridge, bc_comm, bc_system, bc_input, bc_docking,
- bc_processor, bc_serial, bc_wireless, bc_i2o, bc_other = 0xff,
-
- // add our own classes here (starting at 0x100 as PCI values are 8 bit)
- bc_monitor = 0x100, bc_internal, bc_modem, bc_isdn, bc_ps2, bc_mouse,
- bc_storage_device, bc_network_interface, bc_keyboard, bc_printer,
- bc_hub, bc_braille, bc_scanner, bc_joystick, bc_chipcard, bc_camera,
- bc_framebuffer, bc_dvb, bc_tv, bc_partition, bc_dsl, bc_bluetooth
-} hd_base_classes_t;
-
-/* subclass values of bc_monitor */
-typedef enum sc_monitor {
- sc_mon_other, sc_mon_crt, sc_mon_lcd
-} hd_sc_monitor_t;
-
-/* subclass values of bc_storage */
-typedef enum sc_storage {
- sc_sto_scsi, sc_sto_ide, sc_sto_floppy, sc_sto_ipi, sc_sto_raid,
- sc_sto_other = 0x80
-} hd_sc_storage_t;
-
-/* subclass values of bc_display */
-typedef enum sc_display {
- sc_dis_vga, sc_dis_xga, sc_dis_other = 0x80
-} hd_sc_display_t;
-
-/* subclass values of bc_framebuffer */
-typedef enum sc_framebuffer {
- sc_fb_vesa = 1
-} hd_sc_framebuffer_t;
-
-/* subclass values of bc_bridge */
-typedef enum sc_bridge {
- sc_bridge_host, sc_bridge_isa, sc_bridge_eisa, sc_bridge_mc,
- sc_bridge_pci, sc_bridge_pcmcia, sc_bridge_nubus, sc_bridge_cardbus,
- sc_bridge_other = 0x80
-} hd_sc_bridge_t;
-
-/* subclass values of bc_comm */
-typedef enum sc_comm {
- sc_com_ser, sc_com_par, sc_com_multi, sc_com_modem, sc_com_other = 0x80
-} hd_sc_comm_t;
-
-/* subclass values of bc_system */
-typedef enum sc_system {
- sc_sys_pic, sc_sys_dma, sc_sys_timer, sc_sys_rtc, sc_sys_other = 0x80
-} hd_sc_system_t;
-
-/* subclass values of bc_input */
-typedef enum sc_input {
- sc_inp_keyb, sc_inp_digit, sc_inp_mouse, sc_inp_other = 0x80
-} hd_sc_input_t;
-
-/* subclass values of bc_serial */
-typedef enum sc_serial {
- sc_ser_fire, sc_ser_access, sc_ser_ssa, sc_ser_usb, sc_ser_fiber,
- sc_ser_smbus, sc_ser_other = 0x80
-} hd_sc_serial_t;
-
-/* internal sub class values (bc_internal) */
-typedef enum sc_internal {
- sc_int_none, sc_int_isapnp_if, sc_int_main_mem, sc_int_cpu, sc_int_fpu,
- sc_int_bios, sc_int_prom, sc_int_sys
-} hd_sc_internal_t;
-
-/* subclass values of bc_mouse */
-typedef enum sc_mouse {
- sc_mou_ps2, sc_mou_ser, sc_mou_bus, sc_mou_usb, sc_mou_sun,
- sc_mou_other = 0x80
-} hd_sc_mouse_t;
-
-/* subclass values of bc_storage_device */
-typedef enum sc_std {
- sc_sdev_disk, sc_sdev_tape, sc_sdev_cdrom, sc_sdev_floppy, sc_sdev_scanner,
- sc_sdev_other = 0x80
-} hd_sc_std_t;
-
-/* subclass values of bc_network_interface */
-typedef enum sc_net_if {
- sc_nif_loopback, sc_nif_ethernet, sc_nif_tokenring, sc_nif_fddi,
- sc_nif_ctc, sc_nif_iucv, sc_nif_hsi, sc_nif_qeth,
- sc_nif_escon, sc_nif_myrinet, sc_nif_wlan, sc_nif_xp,
- sc_nif_usb, sc_nif_other = 0x80, sc_nif_sit
-} hd_sc_net_if_t;
-
-/* subclass values of bc_multimedia */
-typedef enum sc_multimedia {
- sc_multi_video, sc_multi_audio, sc_multi_other
-} hd_sc_multimedia_t;
-
-/* subclass values of bc_keyboard */
-typedef enum sc_keyboard {
- sc_keyboard_kbd, sc_keyboard_console
-} hd_sc_keyboard_t;
-
-/* subclass values of bc_hub */
-typedef enum sc_hub {
- sc_hub_other, sc_hub_usb
-} hd_sc_hub_t;
-
-/* subclass values of bc_camera */
-typedef enum sc_camera {
- sc_camera_webcam, sc_camera_digital
-} hd_sc_camera_t;
-
-/* subclass values of bc_modem */
-typedef enum sc_modem {
- sc_mod_at, sc_mod_win1, sc_mod_win2, sc_mod_win3, sc_mod_win4
-} hd_sc_modem_t;
-
-/* subclass values of bc_dsl */
-typedef enum sc_dsl {
- sc_dsl_unknown, sc_dsl_pppoe, sc_dsl_capi, sc_dsl_capiisdn
-} hd_sc_dsl_t;
-
-/* prog_if's of sc_ser_usb */
-typedef enum pif_usb_e {
- pif_usb_uhci = 0, pif_usb_ohci = 0x10, pif_usb_ehci = 0x20,
- pif_usb_other = 0x80, pif_usb_device = 0xfe
-} hd_pif_usb_t;
-
-/* CD-ROM prog_if values */
-typedef enum pif_cdrom {
- pif_cdrom, pif_cdr, pif_cdrw, pif_dvd, pif_dvdr, pif_dvdram
-} hd_pif_cdrom_t ;
-
-/* S/390 disk prog_if values */
-typedef enum pif_s390disk {
- pif_scsi, pif_dasd, pif_dasd_fba
-} hd_pif_s390disk_t;
-
-/* bus type values similar to PCI bridge subclasses */
-typedef enum bus_types {
- bus_none, bus_isa, bus_eisa, bus_mc, bus_pci, bus_pcmcia, bus_nubus,
- bus_cardbus, bus_other,
-
- /* outside the range of the PCI values */
- bus_ps2 = 0x80, bus_serial, bus_parallel, bus_floppy, bus_scsi, bus_ide, bus_usb,
- bus_adb, bus_raid, bus_sbus, bus_i2o, bus_vio, bus_ccw, bus_iucv
-} hd_bus_types_t;
-
-/**
- * Hardware status.
- * The status is stored in /var/lib/hardware/unique-keys/ and used
- * to detect if the hardware is new and has to be configured by some
- * hardware %config tool.
- */
-typedef struct {
- /**
- * Status fields are invalid.
- */
- unsigned invalid:1;
- /**
- * Hardware should be reconfigured.
- * Either \ref hd_status_t::status_yes or \ref hd_status_t::status_no.
- * A hardware must be reconfigured if it is in state
- * \ref hd_status_t::available == \ref hd_status_t::status_no and
- * \ref hd_status_t::needed == \ref hd_status_t::status_yes.
- * In other words, if a hardware that was
- * needed to run the system is gone.
- */
- unsigned reconfig:3;
-
- /**
- * Hardware %config status.
- * Set to \ref hd_status_t::status_yes if the hardware has been configured, otherwise
- * \ref hd_status_t::status_no.
- */
- unsigned configured:3;
-
- /**
- * Hardware availability.
- * Set to \ref hd_status_t::status_yes if the hardware has been detected or
- * \ref hd_status_t::status_no if the hardware has not been found. You can set
- * it to \ref hd_status_t::status_unknown to indicate that this hardware cannot
- * be automatically detected (say, ISA cards).
- * \note You can simulate all kinds of hardware on your system by
- * creating entries in /var/lib/hardware/unique-keys/ that have
- * \ref hd_status_t::available set to \ref hd_status_t::status_unknown.
- */
- unsigned available:3;
-
- /**
- * Hardware is needed.
- * Set to \ref hd_status_t::status_yes if this hardware is really necessary to run
- * your computer. The effect will be that some hardware %config dialog
- * is run if the hardware item is not found.
- * Typical examples are graphics cards and mice.
- */
- unsigned needed:3;
-
- /**
- * (Internal) original value of \ref available;
- * This is used to keep track of the original value of the \ref hd_status_t::available
- * state as it was stored in /var/lib/hardware/unique-keys/. (\ref hd_status_t::available
- * is automatically updated during the detection process.)
- */
- unsigned available_orig:3;
-
- /**
- * Hardware is active.
- */
- unsigned active:3;
-} hd_status_t;
-
-/* hardware config status values */
-typedef enum {
- status_no = 1, status_yes, status_unknown, status_new
-} hd_status_value_t;
-
-/**
- * Various types of hotplug devices.
- */
-typedef enum {
- hp_none, /**< Not a hotpluggable %device. */
- hp_pcmcia, /**< PCMCIA %device. */
- hp_cardbus, /**< Cardbus %device. */
- hp_pci, /**< PCI hotplug %device. */
- hp_usb, /**< USB %device. */
- hp_ieee1394 /**< IEEE 1394 (FireWire) %device */
-} hd_hotplug_t;
-
-
-/**
- * Holds id/name pairs.
- * Used for bus, class, vendor, %device and such.
- */
-typedef struct {
- unsigned id; /**< Numeric id. */
- char *name; /**< Name (if any) that corresponds to \ref hd_id_t::id. */
-} hd_id_t;
-
-/**
- * String list type.
- * Used whenever we create a list of strings (e.g. file read).
- */
-typedef struct s_str_list_t {
- struct s_str_list_t *next; /**< Link to next member. */
- char *str; /**< Some string data. */
-} str_list_t;
-
-
-typedef struct {
- unsigned char bitmap[16]; /* large enough for all uses */
- unsigned bits; /* real bitmap length in bits */
- unsigned not_empty:1; /* at least 1 bit is set */
- str_list_t *str; /* interpreted bitmask */
-} hd_bitmap_t;
-
-
-/*
- * for memory areas
- */
-typedef struct {
- unsigned start, size; /* base address & size */
- unsigned char *data; /* actual data */
-} memory_range_t;
-
-
-/*
- * smp info according to Intel smp spec (ia32)
- */
-typedef struct {
- unsigned ok:1; /* data are valid */
- unsigned rev; /* MP spec revision */
- unsigned mpfp; /* MP Floating Pointer struct */
- unsigned mpconfig_ok:1; /* MP config table valid */
- unsigned mpconfig; /* MP config table */
- unsigned mpconfig_size; /* dto, size */
- unsigned char feature[5]; /* MP feature info */
- char oem_id[9]; /* oem id */
- char prod_id[13]; /* product id */
- unsigned cpus, cpus_en; /* number of cpus & ennabled cpus */
-} smp_info_t;
-
-
-/*
- * vesa bios extensions info
- */
-typedef struct vbe_mode_info_s {
- unsigned number; /* mode number */
- unsigned attributes; /* mode attributes */
- unsigned width, height; /* mode size */
- unsigned bytes_p_line; /* line length */
- unsigned pixel_size; /* bits per pixel */
- unsigned fb_start; /* frame buffer start address (if any) */
- unsigned win_A_start; /* window A start address */
- unsigned win_A_attr; /* window A attributes */
- unsigned win_B_start; /* window B start address */
- unsigned win_B_attr; /* window B attributes */
- unsigned win_size; /* window size in bytes */
- unsigned win_gran; /* window granularity in bytes */
- unsigned pixel_clock; /* maximum pixel clock */
-} vbe_mode_info_t;
-
-
-typedef struct {
- unsigned ok:1; /* data are valid */
- unsigned version; /* vbe version */
- unsigned oem_version; /* oem version info */
- unsigned memory; /* in bytes */
- unsigned fb_start; /* != 0 if framebuffer is supported */
- char *oem_name; /* oem name */
- char *vendor_name; /* vendor name */
- char *product_name; /* product name */
- char *product_revision; /* product revision */
- unsigned modes; /* number of supported video modes */
- vbe_mode_info_t *mode; /* video mode list */
- unsigned current_mode; /* current video mode */
- unsigned char ddc[0x80]; /* ddc monitor info */
-} vbe_info_t;
-
-
-/*
- * Compaq Controller Order EV (CQHORD) definition
- */
-typedef struct {
- unsigned id;
- unsigned char slot;
- unsigned char bus;
- unsigned char devfn;
- unsigned char misc;
-} cpq_ctlorder_t;
-
-
-typedef struct {
- unsigned ok:1; /* data are valid */
- unsigned entry; /* entry point */
- unsigned compaq:1; /* is compaq system */
- cpq_ctlorder_t cpq_ctrl[32]; /* 32 == MAX_CONTROLLERS */
-} bios32_info_t;
-
-
-/*
- * smbios entries
- */
-typedef enum {
- sm_biosinfo, sm_sysinfo, sm_boardinfo, sm_chassis,
- sm_processor, sm_memctrl, sm_memmodule, sm_cache,
- sm_connect, sm_slot, sm_onboard, sm_oem,
- sm_config, sm_lang, sm_group, sm_eventlog,
- sm_memarray, sm_memdevice, sm_memerror, sm_memarraymap,
- sm_memdevicemap, sm_mouse, sm_battery, sm_reset,
- sm_secure, sm_power, sm_voltage, sm_cool,
- sm_temperature, sm_current, sm_outofband, sm_bis,
- sm_boot, sm_mem64error, sm_mandev, sm_mandevcomp,
- sm_mdtd, sm_inactive = 126, sm_end = 127
-} hd_smbios_type_t;
-
-
-/* common part of all smbios_* types */
-typedef struct {
- union u_hd_smbios_t *next; /* link to next entry */
- hd_smbios_type_t type; /* BIOS info type */
- int data_len; /* formatted section length */
- unsigned char *data; /* formatted section */
- str_list_t *strings; /* strings taken from the unformed section */
- int handle; /* handle, unique 16 bit number */
-} smbios_any_t;
-
-
-/* BIOS related information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *vendor; /* vendor name */
- char *version; /* version (free form) */
- char *date; /* date mm/dd/yyyy (old: yy) */
- hd_bitmap_t feature; /* BIOS characteristics */
- unsigned start; /* start address */
- unsigned rom_size; /* ROM size (in bytes) */
-} smbios_biosinfo_t;
-
-
-/* overall system related information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *manuf; /* manufacturer */
- char *product; /* product name */
- char *version; /* version */
- char *serial; /* serial number */
- unsigned char uuid[16]; /* universal unique id; all 0x00: undef, all 0xff: undef but settable */
- hd_id_t wake_up; /* wake-up type */
-} smbios_sysinfo_t;
-
-
-/* motherboard related information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *manuf; /* manufacturer */
- char *product; /* product name */
- char *version; /* version */
- char *serial; /* serial number */
- char *asset; /* asset tag */
- hd_id_t board_type; /* board type */
- hd_bitmap_t feature; /* board features */
- char *location; /* location in chassis */
- int chassis; /* handle of chassis */
- int objects_len; /* number of contained objects */
- int *objects; /* array of object handles */
-} smbios_boardinfo_t;
-
-
-/* chassis information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *manuf; /* manufacturer */
- char *version; /* version */
- char *serial; /* serial number */
- char *asset; /* asset tag */
- hd_id_t ch_type; /* chassis type */
- unsigned lock; /* 1: lock present, 0: not present or unknown */
- hd_id_t bootup; /* bootup state */
- hd_id_t power; /* power supply state (at last boot) */
- hd_id_t thermal; /* thermal state (at last boot) */
- hd_id_t security; /* security state (at last boot) */
- unsigned oem; /* OEM-specific information */
-} smbios_chassis_t;
-
-
-/* processor information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *socket; /* socket */
- hd_id_t upgrade; /* socket type */
- char *manuf; /* manufacturer */
- char *version; /* version */
- char *serial; /* serial number */
- char *asset; /* asset tag */
- char *part; /* part number */
- hd_id_t pr_type; /* processor type */
- hd_id_t family; /* processor family */
- uint64_t cpu_id; /* processor id */
- unsigned voltage; /* in 0.1 V */
- unsigned ext_clock; /* MHz */
- unsigned max_speed; /* MHz */
- unsigned current_speed; /* MHz */
- unsigned sock_status; /* socket status (1: populated, 0: empty */
- hd_id_t cpu_status; /* cpu status */
- int l1_cache; /* handle of L1 cache */
- int l2_cache; /* handle of L2 cache */
- int l3_cache; /* handle of L3 cache */
-} smbios_processor_t;
-
-
-/* cache information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *socket; /* socket designation */
- unsigned max_size; /* max cache size in kbytes */
- unsigned current_size; /* current size in kbytes */
- unsigned speed; /* cache speed in nanoseconds */
- hd_id_t mode; /* operational mode */
- unsigned state; /* 0/1: disabled/enabled */
- hd_id_t location; /* cache location */
- unsigned socketed; /* 0/1: not socketed/socketed */
- unsigned level; /* cache level (0 = L1, 1 = L2, ...) */
- hd_id_t ecc; /* error correction type */
- hd_id_t cache_type; /* logical cache type */
- hd_id_t assoc; /* cache associativity */
- hd_bitmap_t supp_sram; /* supported SRAM types */
- hd_bitmap_t sram; /* current SRAM type */
-} smbios_cache_t;
-
-
-/* port connector information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- hd_id_t port_type; /* port type */
- char *i_des; /* internal reference designator */
- hd_id_t i_type; /* internal connector type */
- char *x_des; /* external reference designator */
- hd_id_t x_type; /* external connector type */
-} smbios_connect_t;
-
-
-/* system slot information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *desig; /* slot designation */
- hd_id_t slot_type; /* slot type */
- hd_id_t bus_width; /* data bus width */
- hd_id_t usage; /* current usage */
- hd_id_t length; /* slot length */
- unsigned id; /* slot id */
- hd_bitmap_t feature; /* slot characteristics */
-} smbios_slot_t;
-
-
-/* on board devices information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- unsigned dev_len; /* device list length */
- struct {
- char *name; /* device name */
- hd_id_t type; /* device type */
- unsigned status; /* 0: disabled, 1: enabled */
- } *dev; /* device list */
-} smbios_onboard_t;
-
-
-/* OEM information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- str_list_t *oem_strings; /* OEM strings */
-} smbios_oem_t;
-
-
-/* system config options */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- str_list_t *options; /* system config options */
-} smbios_config_t;
-
-
-/* language information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings; /* list of languages */
- int handle;
- char *current; /* current language */
-} smbios_lang_t;
-
-
-/* group associations */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *name; /* group name */
- int items_len; /* number of items in this group */
- int *item_handles; /* array of item handles */
-} smbios_group_t;
-
-
-/* physical memory array (consists of several memory devices) */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- hd_id_t location; /* memory device location */
- hd_id_t use; /* memory usage */
- hd_id_t ecc; /* ECC types */
- unsigned max_size; /* maximum memory size in kB */
- int error_handle; /* points to error info record; 0xfffe: not supported, 0xffff: no error */
- unsigned slots; /* slots or sockets for this device */
-} smbios_memarray_t;
-
-
-/* memory device */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- char *location; /* device location */
- char *bank; /* bank location */
- char *manuf; /* manufacturer */
- char *serial; /* serial number */
- char *asset; /* asset tag */
- char *part; /* part number */
- int array_handle; /* memory array this device belongs to */
- int error_handle; /* points to error info record; 0xfffe: not supported, 0xffff: no error */
- unsigned width; /* data width in bits */
- unsigned eccbits; /* ecc bits */
- unsigned size; /* kB */
- hd_id_t form; /* form factor */
- unsigned set; /* 0: does not belong to a set; 1-0xfe: set number; 0xff: unknown */
- hd_id_t mem_type; /* memory type */
- hd_bitmap_t type_detail; /* memory type details */
- unsigned speed; /* in MHz */
-} smbios_memdevice_t;
-
-
-/* 32-bit memory error information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- hd_id_t err_type; /* error type memory */
- hd_id_t granularity; /* memory array or memory partition */
- hd_id_t operation; /* mem operation causing the error */
- unsigned syndrome; /* vendor-specific ECC syndrome; 0: unknown */
- unsigned array_addr; /* fault address rel. to mem array; 0x80000000: unknown */
- unsigned device_addr; /* fault address rel to mem device; 0x80000000: unknown */
- unsigned range; /* range, within which the error can be determined; 0x80000000: unknown */
-} smbios_memerror_t;
-
-
-/* memory array mapped address */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- int array_handle; /* memory array this mapping belongs to */
- uint64_t start_addr; /* memory range start address */
- uint64_t end_addr; /* end address */
- unsigned part_width; /* number of memory devices */
-} smbios_memarraymap_t;
-
-
-/* memory device mapped address */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- int memdevice_handle; /* memory device handle */
- int arraymap_handle; /* memory array mapping handle */
- uint64_t start_addr; /* memory range start address */
- uint64_t end_addr; /* end address */
- unsigned row_pos; /* position of the referenced memory device in a row of the address partition */
- unsigned interleave_pos; /* dto, in an interleave */
- unsigned interleave_depth; /* number of consecutive rows */
-} smbios_memdevicemap_t;
-
-
-/* pointing device (aka 'mouse') information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- hd_id_t mtype; /* mouse type */
- hd_id_t interface; /* interface type */
- unsigned buttons; /* number of buttons */
-} smbios_mouse_t;
-
-
-/* hardware security */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- hd_id_t power; /* power-on password status */
- hd_id_t keyboard; /* keyboard password status */
- hd_id_t admin; /* admin password status */
- hd_id_t reset; /* front panel reset status */
-} smbios_secure_t;
-
-
-/* system power controls */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- unsigned month; /* next scheduled power-on month */
- unsigned day; /* dto, day */
- unsigned hour; /* dto, hour */
- unsigned minute; /* dto, minute */
- unsigned second; /* dto, second */
-} smbios_power_t;
-
-
-/* 64-bit memory error information */
-typedef struct {
- union u_hd_smbios_t *next;
- hd_smbios_type_t type;
- int data_len;
- unsigned char *data;
- str_list_t *strings;
- int handle;
- hd_id_t err_type; /* error type memory */
- hd_id_t granularity; /* memory array or memory partition */
- hd_id_t operation; /* mem operation causing the error */
- unsigned syndrome; /* vendor-specific ECC syndrome; 0: unknown */
- uint64_t array_addr; /* fault address rel. to mem array; 0x80000000: unknown */
- uint64_t device_addr; /* fault address rel to mem device; 0x80000000: unknown */
- unsigned range; /* range, within which the error can be determined; 0x80000000: unknown */
-} smbios_mem64error_t;
-
-
-typedef union u_hd_smbios_t {
- union u_hd_smbios_t *next;
- smbios_any_t any;
- smbios_biosinfo_t biosinfo;
- smbios_sysinfo_t sysinfo;
- smbios_boardinfo_t boardinfo;
- smbios_chassis_t chassis;
- smbios_processor_t processor;
- smbios_cache_t cache;
- smbios_connect_t connect;
- smbios_slot_t slot;
- smbios_onboard_t onboard;
- smbios_oem_t oem;
- smbios_config_t config;
- smbios_lang_t lang;
- smbios_group_t group;
- smbios_memarray_t memarray;
- smbios_memdevice_t memdevice;
- smbios_memerror_t memerror;
- smbios_memarraymap_t memarraymap;
- smbios_memdevicemap_t memdevicemap;
- smbios_mouse_t mouse;
- smbios_secure_t secure;
- smbios_power_t power;
- smbios_mem64error_t mem64error;
-} hd_smbios_t;
-
-
-/*
- * udev database info
- */
-typedef struct s_udevinfo_t {
- struct s_udevinfo_t *next;
- char *sysfs;
- char *name;
- str_list_t *links;
- int type;
-} hd_udevinfo_t;
-
-
-/*
- * sysfs driver info
- */
-typedef struct s_sysfsdrv_t {
- struct s_sysfsdrv_t *next;
- char *driver;
- char *device;
-} hd_sysfsdrv_t;
-
-
-/*
- * device number; type is either 0 or 'b' or 'c'.
- *
- * range: number of nodes
- */
-typedef struct {
- int type;
- unsigned major, minor, range;
-} hd_dev_num_t;
-
-
-/*
- * structure holding the (raw) PCI data
- */
-typedef struct s_pci_t {
- struct s_pci_t *next; /* linked list */
- unsigned data_len; /* the actual length of the data field */
- unsigned data_ext_len; /* max. accessed config byte; see code */
- unsigned char data[256]; /* the PCI data */
- char *log; /* log messages */
- unsigned flags, /* various info, see enum pci_flags */
- cmd, /* PCI_COMMAND */
- hdr_type, /* PCI_HEADER_TYPE */
- secondary_bus; /* > 0 for PCI & CB bridges */
- unsigned bus, /* PCI bus #, *nothing* to do with hw_t.bus */
- slot, func; /* slot & function */
- unsigned base_class, sub_class, prog_if; /* PCI device classes */
- unsigned dev, vend, sub_dev, sub_vend, rev; /* vendor & device ids */
- unsigned irq; /* used irq, if any */
- uint64_t base_addr[7]; /* I/O or memory base */
- uint64_t base_len[7]; /* I/O or memory ranges */
- unsigned addr_flags[7]; /* I/O or memory address flags */
- uint64_t rom_base_addr; /* memory base for card ROM */
- uint64_t rom_base_len; /* memory range for card ROM */
- char *sysfs_id; /* sysfs path */
- char *sysfs_bus_id; /* sysfs bus id */
-} pci_t;
-
-/*
- * pci related flags cf. (pci_t).flags
- */
-typedef enum pci_flags {
- pci_flag_ok, pci_flag_pm, pci_flag_agp
-} hd_pci_flags_t;
-
-
-/*
- * raw USB data
- */
-typedef struct usb_s {
- struct usb_s *next;
- unsigned hd_idx;
- unsigned hd_base_idx;
- /* see Linux USB docs */
- str_list_t *c, *d, *e, *i, *p, *s, *t;
- struct usb_s *cloned;
- int bus, dev_nr, lev, parent, port, count, conns, used_conns, ifdescr;
- unsigned speed;
- unsigned vendor, device, rev;
- char *manufact, *product, *serial;
- char *driver;
- memory_range_t raw_descr;
- int d_cls, d_sub, d_prot;
- int i_alt, i_cls, i_sub, i_prot;
- unsigned country;
-} usb_t;
-
-/*
- *structures to hold the (raw) ISA-PnP data
- */
-typedef struct {
- int len;
- int type;
- unsigned char *data;
-} isapnp_res_t;
-
-typedef struct {
- int csn;
- int log_devs;
- unsigned char *serial;
- unsigned char *card_regs;
- unsigned char (*ldev_regs)[0xd0];
- int res_len;
- unsigned broken:1; /* mark a broken card */
- isapnp_res_t *res;
-} isapnp_card_t;
-
-typedef struct {
- int read_port;
- int cards;
- isapnp_card_t *card;
-} isapnp_t;
-
-typedef struct {
- isapnp_card_t *card;
- int dev;
- unsigned flags; /* cf. enum isapnp_flags */
- unsigned ref:1; /* internally used flag */
-} isapnp_dev_t;
-
-/*
- * ISA-PnP related flags; cf. (isapnp_dev_t).flags
- */
-typedef enum isapnp_flags {
- isapnp_flag_act
-} hd_isapnp_flags_t;
-
-
-/*
- * raw SCSI data
- */
-typedef struct scsi_s {
- struct scsi_s *next;
- unsigned deleted:1;
- unsigned generic:1;
- unsigned fake:1;
- char *dev_name;
- char *guessed_dev_name;
- int generic_dev;
- unsigned host, channel, id, lun;
- char *vendor, *model, *rev, *type_str, *serial;
- int type;
- unsigned inode_low;
- char *proc_dir, *driver;
- unsigned unique;
- char *info;
- unsigned lgeo_c, lgeo_h, lgeo_s;
- unsigned pgeo_c, pgeo_h, pgeo_s;
- uint64_t size;
- unsigned sec_size;
- unsigned cache;
- str_list_t *host_info;
- char *usb_guid;
- unsigned pci_info;
- unsigned pci_bus;
- unsigned pci_slot;
- unsigned pci_func;
- uint64_t wwpn;
- uint64_t fcp_lun;
- char *controller_id;
-} scsi_t;
-
-
-/*
- * PROM tree on PPC
- */
-typedef struct devtree_s {
- struct devtree_s *next;
- struct devtree_s *parent;
- unsigned idx;
- char *path, *filename;
- unsigned pci:1;
- char *name, *model, *device_type, *compatible;
- int class_code; /* class : sub_class : prog-if */
- int vendor_id, device_id, subvendor_id, subdevice_id;
- int revision_id, interrupt;
- unsigned char *edid; /* 128 bytes */
-} devtree_t;
-
-/*
- * Device/CU model numbers for S/390
- */
-typedef struct ccw_s {
- unsigned char lcss;
- unsigned char cu_model;
- unsigned char dev_model;
-} ccw_t;
-
-/*
- * special CDROM entry
- */
-typedef struct cdrom_info_s {
- struct cdrom_info_s *next;
- char *name;
- unsigned speed;
- unsigned cdr:1, cdrw:1, dvd:1, dvdr:1, dvdram:1;
- unsigned cdrom:1; /* cdrom in drive */
- struct {
- unsigned ok:1;
- char *volume, *publisher, *preparer, *application, *creation_date;
- } iso9660;
- struct {
- unsigned ok:1;
- unsigned platform;
- char *id_string;
- unsigned bootable:1;
- unsigned media_type; /* boot emulation type */
- unsigned load_address;
- unsigned load_count; /* sectors to load */
- unsigned start; /* start sector */
- unsigned catalog; /* boot catalog start */
- struct {
- unsigned c, h, s;
- unsigned size;
- } geo;
- char *label;
- } el_torito;
-
-} cdrom_info_t;
-
-// note: obsolete, will be removed
-typedef struct {
- unsigned char block0[512];
-} floppy_info_t;
-
-/*
- * bios data (ix86)
- */
-typedef struct {
- unsigned apm_supported:1;
- unsigned apm_enabled:1;
- unsigned apm_ver, apm_subver;
- unsigned apm_bios_flags;
-
- unsigned vbe_ver;
- unsigned vbe_video_mem;
-
- unsigned ser_port0, ser_port1, ser_port2, ser_port3;
- unsigned par_port0, par_port1, par_port2;
-
- /* The id is still in big endian format! */
- unsigned is_pnp_bios:1;
- unsigned pnp_id;
- unsigned lba_support:1;
-
- unsigned low_mem_size;
- smp_info_t smp;
- vbe_info_t vbe;
-
- unsigned smbios_ver;
-
- struct {
- unsigned width;
- unsigned height;
- char *vendor;
- char *name;
- } lcd;
-
- struct {
- char *vendor;
- char *type;
- unsigned bus;
- unsigned compat_vend;
- unsigned compat_dev;
- } mouse;
-
- struct {
- unsigned ok:1;
- unsigned scroll_lock:1;
- unsigned num_lock:1;
- unsigned caps_lock:1;
- } led;
-
- bios32_info_t bios32;
-
-} bios_info_t;
-
-
-/*
- * prom data (ppc, sparc)
- */
-typedef struct {
- unsigned has_color:1;
- unsigned color;
-} prom_info_t;
-
-
-/*
- * general system data
- */
-typedef struct {
- char *system_type;
- char *generation;
- char *vendor;
- char *model;
- char *serial;
- char *lang;
-} sys_info_t;
-
-
-/*
- * monitor (DDC) data
- */
-typedef struct {
- unsigned manu_year;
- unsigned min_vsync, max_vsync; /* vsync range */
- unsigned min_hsync, max_hsync; /* hsync range */
- char *vendor;
- char *name;
- char *serial;
-} monitor_info_t;
-
-
-typedef enum cpu_arch {
- arch_unknown = 0,
- arch_intel,
- arch_alpha,
- arch_sparc, arch_sparc64,
- arch_ppc, arch_ppc64,
- arch_68k,
- arch_ia64,
- arch_s390, arch_s390x,
- arch_arm,
- arch_mips,
- arch_x86_64
-} hd_cpu_arch_t;
-
-// ###### drop boot_arch at all?
-typedef enum boot_arch {
- boot_unknown = 0,
- boot_lilo, boot_milo, boot_aboot, boot_silo, boot_ppc, boot_elilo, boot_s390,
- boot_mips, boot_grub
-} hd_boot_arch_t;
-
-/* special cpu entry */
-typedef struct {
- enum cpu_arch architecture;
- unsigned family; /* axp: cpu variation */
- unsigned model; /* axp: cpu revision */
- unsigned stepping;
- unsigned cache;
- unsigned clock;
- unsigned units; /* >1 "hyperthreading" */
- char *vend_name; /* axp: system type */
- char *model_name; /* axp: cpu model */
- char *platform; /* x86: NULL */
- str_list_t *features; /* x86: flags */
-} cpu_info_t;
-
-
-/*
- * enhanced disk data (cf. edd.c)
- */
-typedef struct {
- uint64_t sectors;
- struct {
- unsigned cyls, heads, sectors;
- } edd;
- struct {
- unsigned cyls, heads, sectors;
- } legacy;
- unsigned ext_fixed_disk:1;
- unsigned ext_lock_eject:1;
- unsigned ext_edd:1;
- unsigned ext_64bit:1;
- unsigned assigned:1;
- char *sysfs_id;
- unsigned hd_idx;
-} edd_info_t;
-
-
-/*
- * database info
- */
-typedef struct {
- unsigned data_len, data_max;
- unsigned *data;
- unsigned names_len, names_max;
- char *names;
-} hddb_data_t;
-
-typedef uint32_t hddb_entry_mask_t;
-
-typedef struct hddb_list_s {
- hddb_entry_mask_t key_mask;
- hddb_entry_mask_t value_mask;
- unsigned key;
- unsigned value;
-} hddb_list_t;
-
-typedef struct {
- unsigned list_len, list_max;
- hddb_list_t *list;
- unsigned ids_len, ids_max;
- unsigned *ids;
- unsigned strings_len, strings_max;
- char *strings;
-} hddb2_data_t;
-
-/*
- * pci module info
- */
-typedef struct {
- char *module;
- unsigned vendor;
- unsigned device;
- unsigned subvendor;
- unsigned subdevice;
- unsigned pciclass;
- unsigned classmask;
-} hddb_pci_t;
-
-
-/*
- * resource types
- */
-typedef enum resource_types {
- res_any, res_phys_mem, res_mem, res_io, res_irq, res_dma, res_monitor,
- res_size, res_disk_geo, res_cache, res_baud, res_init_strings, res_pppd_option,
- res_framebuffer, res_hwaddr, res_link, res_wlan
-} hd_resource_types_t;
-
-
-/*
- * size units (cf. (res_size_t).unit)
- */
-typedef enum size_units {
- size_unit_cm, size_unit_cinch, size_unit_byte, size_unit_sectors,
- size_unit_kbyte, size_unit_mbyte, size_unit_gbyte
-} hd_size_units_t;
-
-/*
- * access types for I/O and memory resources
- */
-typedef enum access_flags {
- acc_unknown, acc_ro, acc_wo, acc_rw /* unknown, read only, write only, read/write */
-} hd_access_flags_t;
-
-
-typedef enum yes_no_flag {
- flag_unknown, flag_no, flag_yes /* unknown, no, yes */
-} hd_yes_no_flag_t;
-
-
-typedef enum geo_types {
- geo_physical = 0, geo_logical, geo_bios_edd, geo_bios_legacy
-} hd_geo_types_t;
-
-
-/*
- * definitions for the various resource types
- */
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
-} res_any_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- uint64_t base, range;
- unsigned
- enabled:1, /* 0: disabled, 1 enabled */
- access:2, /* enum access_flags */
- prefetch:2; /* enum yes_no_flag */
-} res_mem_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- uint64_t range;
-} res_phys_mem_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- uint64_t base, range;
- unsigned
- enabled:1, /* 0: disabled, 1 enabled */
- access:2; /* enum access_flags */
-} res_io_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned base;
- unsigned triggered; /* # of interrupts */
- unsigned enabled:1; /* 0: disabled, 1 enabled */
-} res_irq_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned base;
- unsigned enabled:1; /* 0: disabled, 1 enabled */
-} res_dma_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- enum size_units unit;
- uint64_t val1, val2; /* to allow for 2D values */
-} res_size_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned speed;
- unsigned bits, stopbits;
- char parity; /* n, e, o, s, m */
- char handshake; /* -, h, s */
-} res_baud_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned size; /* in kbyte */
-} res_cache_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned cyls, heads, sectors;
- uint64_t size;
- enum geo_types geotype; /* 0-3: physical/logical/bios edd/bios legacy */
-} res_disk_geo_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned width, height; /* in pixel */
- unsigned vfreq; /* in Hz */
- unsigned interlaced:1; /* 0/1 */
-} res_monitor_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- char *init1;
- char *init2;
-} res_init_strings_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- char *option;
-} res_pppd_option_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned width, height; /* in pixel */
- unsigned bytes_p_line; /* line length in bytes (do not confuse with 'width') */
- unsigned colorbits; /* 4, 8, 15, 16, 24, 32 */
- unsigned mode; /* mode number for kernel */
-} res_framebuffer_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- char *addr;
-} res_hwaddr_t;
-
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- unsigned state:1; /* network link state: 0 - not connected, 1 - connected */
-} res_link_t;
-
-/* wlan capabilities */
-typedef struct {
- union u_hd_res_t *next;
- enum resource_types type;
- str_list_t *channels;
- str_list_t *frequencies; /* in GHz units */
- str_list_t *bitrates; /* in Mbps units */
- str_list_t *auth_modes; /* open, sharedkey, wpa-psk, wpa-eap, wpa-leap */
- str_list_t *enc_modes; /* WEP40, WEP104, WEP128, WEP232, TKIP, CCMP */
-} res_wlan_t;
-
-typedef union u_hd_res_t {
- union u_hd_res_t *next;
- res_any_t any;
- res_io_t io;
- res_mem_t mem;
- res_phys_mem_t phys_mem;
- res_irq_t irq;
- res_dma_t dma;
- res_size_t size;
- res_cache_t cache;
- res_baud_t baud;
- res_disk_geo_t disk_geo;
- res_monitor_t monitor;
- res_init_strings_t init_strings;
- res_pppd_option_t pppd_option;
- res_framebuffer_t framebuffer;
- res_hwaddr_t hwaddr;
- res_link_t link;
- res_wlan_t wlan;
-} hd_res_t;
-
-
-/*
- * data gathered by the misc module; basically resources from /proc
- */
-typedef struct {
- uint64_t addr, size;
- char *dev;
- unsigned tag;
-} misc_io_t;
-
-typedef struct {
- unsigned channel;
- char *dev;
- unsigned tag;
-} misc_dma_t;
-
-typedef struct {
- unsigned irq, events;
- int devs;
- char **dev;
- unsigned tag;
-} misc_irq_t;
-
-typedef struct {
- unsigned io_len, dma_len, irq_len;
- misc_io_t *io;
- misc_dma_t *dma;
- misc_irq_t *irq;
- str_list_t *proc_io, *proc_dma, *proc_irq;
-} misc_t;
-
-typedef struct s_serial_t {
- struct s_serial_t *next;
- char *name;
- char *device;
- unsigned line, port, irq, baud;
-} serial_t;
-
-typedef struct s_ser_device_t {
- struct s_ser_device_t *next;
- unsigned hd_idx;
- char *dev_name;
- str_list_t *at_resp;
- int fd;
- struct termios tio;
- unsigned max_baud, cur_baud;
- unsigned is_mouse:1;
- unsigned is_modem:1;
- unsigned do_io:1;
- unsigned char buf[0x1000];
- int buf_len;
- int garbage, non_pnp, pnp;
- unsigned char pnp_id[8];
- char *serial, *class_name, *dev_id, *user_name, *vend, *init_string1, *init_string2, *pppd_option;
- unsigned pnp_rev;
- unsigned bits;
-} ser_device_t;
-
-/*
- * Notes on isdn_parm_t:
- * - def_value is only relevant of alt_values != 0
- * - def_value should be a value out of alt_value[]
- * - see libihw docu for the meaning of name,type,flags,def_value
- */
-typedef struct isdn_parm_s {
- struct isdn_parm_s *next;
- char *name; /* parameter name */
- unsigned valid:1; /* 1: entry is valid, 0: some inconsistencies */
- unsigned conflict:1; /* 1: ressource conflict (eg. no free irq) */
- uint64_t value; /* value of the parameter */
- unsigned type; /* CDBISDN type (P_...) */
- unsigned flags; /* CDBISDN flags (P_...) */
- unsigned def_value; /* default value */
- int alt_values; /* length of alt_value[] */
- unsigned *alt_value; /* possible values */
-} isdn_parm_t;
-
-/* device driver info types */
-typedef enum driver_info_type {
- di_any, di_display, di_module, di_mouse, di_x11, di_isdn, di_kbd, di_dsl
-} hd_driver_info_t;
-
-/* unspecific info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
-} driver_info_any_t;
-
-/* display (monitor) info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- unsigned width, height; /* max. useful display geometry */
- unsigned min_vsync, max_vsync; /* vsync range */
- unsigned min_hsync, max_hsync; /* hsync range */
- unsigned bandwidth; /* max. pixel clock */
-} driver_info_display_t;
-
-/* module info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- unsigned active:1; /* if module is currently active */
- unsigned modprobe:1; /* modprobe or insmod */
- str_list_t *names; /* (ordered) list of module names */
- str_list_t *mod_args; /* list of module args (corresponds to the module name list) */
- char *conf; /* conf.modules entry, if any (e.g. for sb.o) */
-} driver_info_module_t;
-
-/* mouse protocol info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- char *xf86; /* the XF86 protocol name */
- char *gpm; /* dto, gpm */
- int buttons; /* number of buttons, -1 --> unknown */
- int wheels; /* dto, wheels */
-} driver_info_mouse_t;
-
-/* X11 server info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- char *server; /* the server/module name */
- char *xf86_ver; /* XFree86 version (3 or 4) */
- unsigned x3d:1; /* has 3D support */
- struct {
- unsigned all:5; /* the next 5 entries combined */
- unsigned c8:1, c15:1, c16:1, c24:1, c32:1;
- } colors; /* supported color depths */
- unsigned dacspeed; /* max. ramdac clock */
- str_list_t *extensions; /* additional X extensions to load ('Module' section) */
- str_list_t *options; /* special server options */
- str_list_t *raw; /* extra info to add to XF86Config */
- char *script; /* 3d script to run */
-} driver_info_x11_t;
-
-/* isdn info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- int i4l_type, i4l_subtype; /* I4L types */
- char *i4l_name; /* I4L card name */
- isdn_parm_t *params; /* isdn parameters */
-} driver_info_isdn_t;
-
-/* dsl info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- char *mode; /* DSL driver types */
- char *name; /* DSL driver name */
-} driver_info_dsl_t;
-
-/* keyboard info */
-typedef struct {
- union driver_info_u *next;
- enum driver_info_type type; /* driver info type */
- str_list_t *hddb0, *hddb1; /* the actual driver database entries */
- char *XkbRules; /* XF86Config entries */
- char *XkbModel;
- char *XkbLayout;
- char *keymap; /* console keymap */
-} driver_info_kbd_t;
-
-/*
- * holds device driver info
- */
-typedef union driver_info_u {
- union driver_info_u *next;
- driver_info_any_t any;
- driver_info_module_t module;
- driver_info_mouse_t mouse;
- driver_info_x11_t x11;
- driver_info_display_t display;
- driver_info_isdn_t isdn;
- driver_info_dsl_t dsl;
- driver_info_kbd_t kbd;
-} driver_info_t;
-
-
-/*
- * Some hardware doesn't fit into the hd_t scheme or there is info we
- * gathered during the scan process but that no-one really cares about. Such
- * stuff is stored in hd_detail_t.
- */
-typedef enum hd_detail_type {
- hd_detail_pci, hd_detail_usb, hd_detail_isapnp, hd_detail_cdrom,
- hd_detail_floppy, hd_detail_bios, hd_detail_cpu, hd_detail_prom,
- hd_detail_monitor, hd_detail_sys, hd_detail_scsi, hd_detail_devtree,
- hd_detail_ccw
-} hd_detail_type_t;
-
-typedef struct {
- enum hd_detail_type type;
- pci_t *data;
-} hd_detail_pci_t;
-
-typedef struct {
- enum hd_detail_type type;
- usb_t *data;
-} hd_detail_usb_t;
-
-typedef struct {
- enum hd_detail_type type;
- isapnp_dev_t *data;
-} hd_detail_isapnp_t;
-
-typedef struct {
- enum hd_detail_type type;
- cdrom_info_t *data;
-} hd_detail_cdrom_t;
-
-typedef struct {
- enum hd_detail_type type;
- floppy_info_t *data;
-} hd_detail_floppy_t;
-
-typedef struct {
- enum hd_detail_type type;
- bios_info_t *data;
-} hd_detail_bios_t;
-
-typedef struct {
- enum hd_detail_type type;
- cpu_info_t *data;
-} hd_detail_cpu_t;
-
-typedef struct {
- enum hd_detail_type type;
- prom_info_t *data;
-} hd_detail_prom_t;
-
-typedef struct {
- enum hd_detail_type type;
- monitor_info_t *data;
-} hd_detail_monitor_t;
-
-typedef struct {
- enum hd_detail_type type;
- sys_info_t *data;
-} hd_detail_sys_t;
-
-typedef struct {
- enum hd_detail_type type;
- scsi_t *data;
-} hd_detail_scsi_t;
-
-typedef struct {
- enum hd_detail_type type;
- devtree_t *data;
-} hd_detail_devtree_t;
-
-typedef struct {
- enum hd_detail_type type;
- ccw_t *data;
-} hd_detail_ccw_t;
-
-typedef union {
- enum hd_detail_type type;
- hd_detail_pci_t pci;
- hd_detail_usb_t usb;
- hd_detail_isapnp_t isapnp;
- hd_detail_cdrom_t cdrom;
- hd_detail_floppy_t floppy;
- hd_detail_bios_t bios;
- hd_detail_cpu_t cpu;
- hd_detail_prom_t prom;
- hd_detail_monitor_t monitor;
- hd_detail_sys_t sys;
- hd_detail_scsi_t scsi;
- hd_detail_devtree_t devtree;
- hd_detail_ccw_t ccw;
-} hd_detail_t;
-
-
-/* info about manually configured hardware (in /var/lib/hardware/) */
-typedef struct hd_manual_s {
- struct hd_manual_s *next;
-
- char *unique_id;
- char *parent_id;
- char *child_ids;
- unsigned hw_class;
- char *model;
-
- hd_status_t status;
- char *config_string;
-
- /* More or less free-form key, value pairs.
- * key should not contain '=', however.
- */
- str_list_t *key;
- str_list_t *value;
-} hd_manual_t;
-
-
-/**
- * Individual hardware item.
- * Every hardware component gets an \ref hd_t entry. A list of all hardware
- * items is in \ref hd_data_t::hd.
- */
-typedef struct s_hd_t {
- struct s_hd_t *next; /**< Link to next hardware item. */
- /**
- * Unique index, starting at 1.
- * Use \ref hd_get_device_by_idx() to look up an hardware entry by index. And don't
- * free the result!
- */
- unsigned idx;
-
- /**
- * Hardware appears to be broken in some way.
- * This was used to indicate broken framebuffer support of some graphics cards.
- * Currently unused.
- */
- unsigned broken:1;
-
- /**
- * Bus type (id and name).
- */
- hd_id_t bus;
-
- /**
- * Slot and bus number.
- * Bits 0-7: slot number, 8-31 bus number.
- */
- unsigned slot;
-
- /**
- * (PCI) function.
- */
- unsigned func;
-
- /**
- * Base class (id and name).
- */
- hd_id_t base_class;
-
- /**
- * Sub class (id and name).
- */
- hd_id_t sub_class;
-
- /**
- * (PCI) programming interface (id and name).
- */
- hd_id_t prog_if;
-
- /**
- * Vendor id and name.
- * Id is actually a combination of some tag to differentiate the
- * various id types and the real id. Use the \ref ID_VALUE macro to
- * get e.g. the real PCI id value for a PCI %device.
- */
- hd_id_t vendor;
-
- /**
- * Device id and name.
- * Id is actually a combination of some tag to differentiate the
- * various id types and the real id. Use the \ref ID_VALUE macro to
- * get e.g. the real PCI id value for a PCI %device.
- * \note If you're looking or something printable, you might want to use \ref hd_t::model
- * instead.
- */
- hd_id_t device;
-
- /**
- * Subvendor id and name.
- * Id is actually a combination of some tag to differentiate the
- * various id types and the real id. Use the \ref ID_VALUE macro to
- * get e.g. the real PCI id value for a PCI %device.
- */
- hd_id_t sub_vendor;
-
- /**
- * Subdevice id and name.
- * Id is actually a combination of some tag to differentiate the
- * various id types and the real id. Use the \ref ID_VALUE macro to
- * get e.g. the real PCI id value for a PCI %device.
- */
- hd_id_t sub_device;
-
- /**
- * Revision id or string.
- * If revision is numerical (e.g. PCI) \ref hd_id_t::id is used.
- * If revision is some char data (e.g. disk drives) it is stored in \ref hd_id_t::name.
- */
- hd_id_t revision;
-
- /**
- * Serial id.
- */
- char *serial;
-
- /**
- * Vendor id and name of some compatible hardware.
- * Used mainly for ISA-PnP devices.
- */
- hd_id_t compat_vendor;
-
- /**
- * Device id and name of some compatible hardware.
- * Used mainly for ISA-PnP devices.
- */
- hd_id_t compat_device;
-
- /**
- * Hardware class.
- * Not to confuse with \ref base_class!
- */
- hd_hw_item_t hw_class;
-
- /**
- * Hardware class list.
- * A device may belong to more than one hardware class.
- */
- unsigned char hw_class_list[(hw_all + 7) / 8]; /**< (Internal) bitmask of hw classes. */
-
- /**
- * Model name.
- * This is a combination of vendor and %device names. Some heuristics is used
- * to make it more presentable. Use this instead of \ref hd_t::vendor and
- * \ref hd_t::device.
- */
- char *model;
-
- /**
- * Device this hardware is attached to.
- * Link to some 'parent' %device. Use \ref hd_get_device_by_idx() to get
- * the corresponding hardware entry.
- */
- unsigned attached_to;
-
- /**
- * sysfs entry for this hardware, if any.
- */
- char *sysfs_id;
-
- /**
- * sysfs bus id for this hardware, if any.
- */
- char *sysfs_bus_id;
-
- /**
- * sysfs device link.
- */
- char *sysfs_device_link;
-
- /**
- * Special %device file.
- * Device file name to access this hardware. Normally something below /dev.
- * For network interfaces this is the interface name.
- */
- char *unix_dev_name;
-
- /**
- * Device type & number according to sysfs.
- */
- hd_dev_num_t unix_dev_num;
-
- /**
- * List of %device names.
- * Device file names to access this hardware. Normally something below /dev.
- * They should be all equivalent. The preferred name however is
- * \ref hd_t::unix_dev_name.
- */
- str_list_t *unix_dev_names;
-
- /**
- * Special %device file.
- * Device file name to access this hardware. Most hardware only has one
- * %device name stored in \ref hd_t::unix_dev_name. But in some cases
- * there's an alternative name.
- */
- char *unix_dev_name2;
-
- /**
- * Device type & number according to sysfs.
- */
- hd_dev_num_t unix_dev_num2;
-
- /**
- * BIOS/PROM id.
- * Where appropriate, this is a special BIOS/PROM id (e.g. "0x80" for
- * the first harddisk on Intel-PCs).
- * CHPID for s390.
- */
- char *rom_id;
-
- /**
- * Unique id for this hardware.
- * A unique string identifying this hardware. The string consists
- * of two parts separated by a dot ("."). The part before the dot
- * describes the location (where the hardware is attached in the system).
- * The part after the dot identifies the hardware itself. The string
- * must not contain slashes ("/") because we're going to create files
- * with this id as name. Apart from this there are no restrictions on
- * the form of this string.
- */
- char *unique_id;
-
- /* List of ids. */
- str_list_t *unique_ids;
-
- /**
- * (Internal) Probing module that created this entry.
- */
- unsigned module;
-
- /**
- * (Internal) Source code line where this entry was created.
- */
- unsigned line;
-
- /**
- * (Internal) Counter, used in combination with \ref hd_t::module and \ref hd_t::line.
- */
- unsigned count;
-
- /**
- * Device resources.
- */
- hd_res_t *res;
-
- /**
- * Special info associated with this hardware.
- * \note This is going to change!
- */
- hd_detail_t *detail;
-
- /**
- * (Internal) Unspecific text info.
- * It is used to track IDE interfaces and assign them to the correct
- * IDE controllers.
- */
- str_list_t *extra_info;
-
- /**
- * Hardware status (if available).
- * The status is stored in files below /var/lib/hardware/unique-keys/. Every
- * hardware item gets a file there with its unique id as file name.
- */
- hd_status_t status;
-
- /**
- * Some %config info.
- * Every hardware item may get some string assigned. This string is stored
- * in files below /var/lib/hardware/unique-keys/. There is no meaning
- * associated with this string.
- */
- char *config_string;
-
- /**
- * Hotplug controller for this %device.
- * It indicates what kind of hotplug %device (if any) this is.
- */
- hd_hotplug_t hotplug;
-
- /**
- * Slot the hotplug device is connected to (e.g. PCMCIA socket).
- * \note \ref hotplug_slot counts 1-based (0: no information available).
- */
- unsigned hotplug_slot;
-
- struct is_s {
- unsigned agp:1; /* AGP device */
- unsigned isapnp:1; /* ISA-PnP device */
- unsigned notready:1; /* block devices: no medium, other: device not configured */
- unsigned manual:1; /* undetectable, manually configured hardware */
- unsigned softraiddisk:1; /* disk belongs to some soft raid array */
- unsigned zip:1; /* zip floppy */
- unsigned cdr:1; /* CD-R */
- unsigned cdrw:1; /* CD-RW */
- unsigned dvd:1; /* DVD */
- unsigned dvdr:1; /* DVD-R */
- unsigned dvdram:1; /* DVD-RAM */
- unsigned pppoe:1; /* PPPOE modem connected */
- unsigned wlan:1; /* WLAN card */
- } is;
-
- struct tag_s { /* this struct is for internal purposes only */
- unsigned remove:1; /* schedule for removal */
- unsigned freeit:1; /* for internal memory management */
- unsigned fixed:1; /* fixed, do no longer modify this entry */
- unsigned ser_skip:1; /* if serial line, don't scan for devices */
- unsigned ser_device:2; /* if != 0: info about attached serial device; see serial.c */
- } tag;
-
- /**
- * (Internal) First 512 bytes of block devices.
- * To check accessibility of block devices we read the first block. The data
- * is used to identify the boot %device.
- */
- unsigned char *block0;
-
- /**
- * Currently active driver.
- */
- char *driver;
-
- /**
- * List of currently active drivers.
- */
- str_list_t *drivers;
-
- /**
- * Old \ref unique_id for compatibility.
- * The calculation of unique ids has changed in libhd v3.17. Basically
- * we no longer use the vendor/%device names if there are vendor/%device
- * ids. (Otherwise a simple %device name database update would change the id,
- * which is really not what you want.)
- */
- char *old_unique_id;
-
- /**
- * \ref unique_id of parent (\ref attached_to).
- * \note Please do not use it for now.
- *
- */
- char *parent_id;
-
- /**
- * \ref unique_ids of children (\ref parent_id).
- * \note Please do not use it for now.
- *
- */
- str_list_t *child_ids;
-
- /**
- * (Internal) location independent \ref unique_id part.
- * The speed up some internal searches, we store it here separately.
- */
- char *unique_id1;
-
- /**
- * USB Global Unique Identifier.
- * Available for USB devices. This may even be set if \ref hd_t::bus is not
- * \ref bus_usb (e.g. USB storage devices will have \ref hd_t::bus set to
- * \ref bus_scsi due to SCSI emulation).
- */
- char *usb_guid;
-
- driver_info_t *driver_info; /* device driver info */
-
- str_list_t *requires; /* packages/programs required for this hardware */
-
- /*
- * These are used internally for memory management.
- * Do not even _think_ of modifying these!
- */
- unsigned ref_cnt; /**< (Internal) memory reference count. */
- struct s_hd_t *ref; /**< (Internal) if set, this is only a reference. */
-} hd_t;
-
-
-/**
- * Holds all data accumulated during hardware probing.
- */
-typedef struct {
- /**
- * Current hardware list.
- * The list of all currently probed hardware. This is not identical with
- * the result of \ref hd_list(). (But a superset of it.)
- */
- hd_t *hd;
-
- /**
- * A progress indicator.
- * If this callback function is not NULL, it is called at various points and can
- * be used to give some user feedback what we are actually doing.
- * If the debug flag HD_DEB_PROGRESS is set, progress messages are logged.
- * \param pos Indicates where we are.
- * \param msg Indicates what we are going to do.
- */
- void (*progress)(char *pos, char *msg);
-
- /** Log messages.
- * All messages logged during hardware probing accumulate here.
- */
- char *log;
-
- /** Debug flags.
- * Although there exist some debug flag defines this scheme is currently
- * not followed consistently. It is guaranteed however that -1 will give
- * the most log messages and 0 the least.
- */
- unsigned debug;
-
- /**
- * Special flags.
- * Influence hardware probing in some strange ways with these. You normally
- * do not want to use them.
- */
- struct flag_struct {
- unsigned internal:1; /**< \ref hd_scan() has been called internally. */
- unsigned dformat:2; /**< Alternative output format. */
- unsigned no_parport:1; /**< Don't do parport probing: parport modules (used to) crash pmacs. */
- unsigned iseries:1; /**< Set if we are on an iSeries machine. */
- unsigned list_all:1; /**< Return even devices with status 'not available'. */
- unsigned fast:1; /**< Don't check tricky hardware. */
- unsigned list_md:1; /**< Report md & lvm devices from /proc/partitions */
- unsigned nofork:1; /**< don't run potentially hanging code in a subprocess */
- unsigned nosysfs:1; /**< don't ask sysfs */
- unsigned forked:1; /**< we're running in a subprocess */
- unsigned cpuemu:1; /**< use CPU emulation to run BIOS code (i386 only) */
- unsigned udev:1; /**< return first udev symlink as device name */
- unsigned edd_used:1; /**< internal: edd info has been used */
- unsigned keep_kmods:2; /**< internal: don't reread kmods */
- } flags;
-
-
- /** Concentrate on these devices.
- * List of sysfs ids for devices to look for.
- */
- str_list_t *only;
-
- /*
- * The following entries should *not* be accessed outside of libhd!
- */
- unsigned char probe[(pr_all + 7) / 8]; /**< (Internal) bitmask of probing features. */
- unsigned char probe_set[(pr_all + 7) / 8]; /**< (Iternal) bitmask of probing features that will always be set. */
- unsigned char probe_clr[(pr_all + 7) / 8]; /**< (Internal) bitmask of probing features that will always be reset. */
- unsigned last_idx; /**< (Internal) index of the last hd entry generated */
- unsigned module; /**< (Internal) the current probing module we are in */
- enum boot_arch boot; /**< (Internal) boot method */
- hd_t *old_hd; /**< (Internal) old (outdated) entries (if you scan more than once) */
- pci_t *pci; /**< (Internal) raw PCI data */
- isapnp_t *isapnp; /**< (Internal) raw ISA-PnP data */
- cdrom_info_t *cdrom; /**< (Internal) CDROM devs from PROC_CDROM_INFO */
- str_list_t *net; /**< (Internal) list of network interfaces */
- str_list_t *floppy; /**< (Internal) contents of PROC_NVRAM, used by the floppy module */
- misc_t *misc; /**< (Internal) data gathered in the misc module */
- serial_t *serial; /**< (Internal) /proc's serial info */
- scsi_t *scsi; /**< (Internal) raw SCSI data */
- ser_device_t *ser_mouse; /**< (Internal) info about serial mice */
- ser_device_t *ser_modem; /**< (Internal) info about serial modems */
- str_list_t *cpu; /**< (Internal) /proc/cpuinfo */
- str_list_t *klog; /**< (Internal) kernel log */
- str_list_t *proc_usb; /**< (Internal) /proc/bus/usb info */
- usb_t *usb; /**< (Internal) usb info */
- hddb_pci_t *hddb_pci_hm; /**< (Internal) pci module info */
- hddb_pci_t *hddb_pci; /**< (Internal) pci module info */
- hddb2_data_t *hddb2[2]; /**< (Internal) hardware database */
- str_list_t *kmods; /**< (Internal) list of active kernel modules */
- uint64_t used_irqs; /**< (Internal) irq usage */
- uint64_t assigned_irqs; /**< (Internal) irqs automatically assigned by libhd (for driver info) */
- memory_range_t bios_rom; /**< (Internal) BIOS 0xc0000 - 0xfffff */
- memory_range_t bios_ram; /**< (Internal) BIOS 0x00400 - 0x004ff */
- memory_range_t bios_ebda; /**< (Internal) EBDA */
- unsigned display; /**< (Internal) hd_idx of the active (vga) display */
- unsigned color_code; /**< (Internal) color, if any */
- char *cmd_line; /**< (Internal) kernel command line */
- str_list_t *xtra_hd; /**< (Internal) fake hd entries (for testing) */
- devtree_t *devtree; /**< (Internal) prom device tree on ppc */
- unsigned kernel_version; /**< (Internal) kernel version */
- int in_vmware; /**< (Internal) running in vmware */
- hd_manual_t *manual; /**< (Internal) hardware config info */
- str_list_t *disks; /**< (Internal) disks according to /proc/partitions */
- str_list_t *partitions; /**< (Internal) dto, partitions */
- str_list_t *cdroms; /**< (Internal) cdroms according to PROC_CDROM_INFO */
- hd_smbios_t *smbios; /**< (Internal) smbios data */
- struct {
- unsigned ok:1;
- unsigned size;
- unsigned used;
- void *data;
- int id;
- int updated;
- } shm; /**< (Internal) our shm segment */
- unsigned pci_config_type; /**< (Internal) PCI config type (1 or 2), 0: unknown */
- hd_udevinfo_t *udevinfo; /**< (Internal) udev info */
- hd_sysfsdrv_t *sysfsdrv; /**< (Internal) sysfs driver info */
- uint64_t sysfsdrv_id; /**< (Internal) sysfs driver info id */
- str_list_t *scanner_db; /**< (Internal) list of scanner modules */
- edd_info_t edd[0x80]; /**< (Internal) enhanced disk drive data */
-} hd_data_t;
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- *
- * libhd interface functions
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-/* implemented in hd.c */
-
-/* the actual hardware scan */
-void hd_scan(hd_data_t *hd_data);
-
-//! Free all data.
-hd_data_t *hd_free_hd_data(hd_data_t *hd_data);
-
-//! Free hardware items returned by e.g. \ref hd_list().
-hd_t *hd_free_hd_list(hd_t *hd);
-
-void hd_set_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
-void hd_clear_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
-int hd_probe_feature(hd_data_t *hd_data, enum probe_feature feature);
-void hd_set_probe_feature_hw(hd_data_t *hd_data, hd_hw_item_t item);
-
-enum probe_feature hd_probe_feature_by_name(char *name);
-char *hd_probe_feature_by_value(enum probe_feature feature);
-
-int hd_module_is_active(hd_data_t *hd_data, char *mod);
-
-hd_t *hd_base_class_list(hd_data_t *hd_data, unsigned base_class);
-hd_t *hd_sub_class_list(hd_data_t *hd_data, unsigned base_class, unsigned sub_class);
-hd_t *hd_bus_list(hd_data_t *hd_data, unsigned bus);
-const char* hd_busid_to_hwcfg(int busid);
-hd_t *hd_list(hd_data_t *hd_data, hd_hw_item_t item, int rescan, hd_t *hd_old);
-hd_t *hd_list_with_status(hd_data_t *hd_data, hd_hw_item_t item, hd_status_t status);
-hd_t *hd_list2(hd_data_t *hd_data, hd_hw_item_t *items, int rescan);
-hd_t *hd_list_with_status2(hd_data_t *hd_data, hd_hw_item_t *items, hd_status_t status);
-
-int hd_has_pcmcia(hd_data_t *hd_data);
-// will be gone soon
-// int hd_apm_enabled(hd_data_t *hd_data);
-int hd_usb_support(hd_data_t *hd_data);
-int hd_smp_support(hd_data_t *hd_data);
-int hd_mac_color(hd_data_t *hd_data);
-int hd_color(hd_data_t *hd_data);
-int hd_is_uml(hd_data_t *hd_data);
-unsigned hd_display_adapter(hd_data_t *hd_data);
-unsigned hd_boot_disk(hd_data_t *hd_data, int *matches);
-enum cpu_arch hd_cpu_arch(hd_data_t *hd_data);
-enum boot_arch hd_boot_arch(hd_data_t *hd_data);
-
-hd_t *hd_get_device_by_idx(hd_data_t *hd_data, unsigned idx);
-
-void hd_set_hw_class(hd_t *hd, hd_hw_item_t hw_class);
-int hd_is_hw_class(hd_t *hd, hd_hw_item_t hw_class);
-
-int hd_is_sgi_altix(hd_data_t *hd_data);
-
-char *hd_version(void);
-
-/* implemented in hddb.c */
-
-str_list_t *get_hddb_packages(hd_data_t *hd_data);
-void hddb_add_info(hd_data_t *hd_data, hd_t *hd);
-
-void hddb_dump_raw(hddb2_data_t *hddb, FILE *f);
-void hddb_dump(hddb2_data_t *hddb, FILE *f);
-
-/* implemented in hdp.c */
-
-void hd_dump_entry(hd_data_t *hd_data, hd_t *hd, FILE *f);
-
-
-/* implemented in cdrom.c */
-
-cdrom_info_t *hd_read_cdrom_info(hd_data_t *hd_data, hd_t *hd);
-
-/* implemented in manual.c */
-hd_manual_t *hd_manual_read_entry(hd_data_t *hd_data, const char *id);
-int hd_manual_write_entry(hd_data_t *hd_data, hd_manual_t *entry);
-hd_manual_t *hd_free_manual(hd_manual_t *manual);
-hd_t *hd_read_config(hd_data_t *hd_data, const char *id);
-int hd_write_config(hd_data_t *hd_data, hd_t *hd);
-char *hd_hw_item_name(hd_hw_item_t item);
-char *hd_status_value_name(hd_status_value_t status);
-int hd_change_status(const char *id, hd_status_t status, const char *config_string);
-int hd_read_mmap(hd_data_t *hd_data, char *name, unsigned char *buf, off_t start, unsigned size);
-
-
-/*
- * - - - - - CDB ISDN interface - - - - -
- */
-
-
-/* (C) 2003 kkeil@suse.de */
-
-#define CDBISDN_VERSION 0x0101
-
-#ifndef PCI_ANY_ID
-#define PCI_ANY_ID 0xffff
-#endif
-
-#define CDBISDN_P_NONE 0x0
-#define CDBISDN_P_IRQ 0x1
-#define CDBISDN_P_MEM 0x2
-#define CDBISDN_P_IO 0x3
-
-/* vendor info */
-typedef struct {
- char *name;
- char *shortname;
- int vnr;
- int refcnt;
-} cdb_isdn_vendor;
-
-typedef struct {
- int handle; /* internal identifier idx in database */
- int vhandle; /* internal identifier to vendor database */
- char *name; /* cardname */
- char *lname; /* vendor short name + cardname */
- char *Class; /* CLASS of the card */
- char *bus; /* bus type */
- int revision; /* revision used with USB */
- int vendor; /* Vendor ID for ISAPNP and PCI cards */
- int device; /* Device ID for ISAPNP and PCI cards */
- int subvendor; /* Subvendor ID for PCI cards */
- /* A value of 0xffff is ANY_ID */
- int subdevice; /* Subdevice ID for PCI cards */
- /* A value of 0xffff is ANY_ID */
- unsigned int features; /* feature flags */
- int line_cnt; /* count of ISDN ports */
- int vario_cnt; /* count of driver varios */
- int vario; /* referenz to driver vario record */
-} cdb_isdn_card;
-
-typedef struct {
- int handle; /* idx in database */
- int next_vario; /* link to alternate vario */
- int drvid; /* unique id of the driver vario */
- int typ; /* Type to identify the driver */
- int subtyp; /* Subtype of the driver type */
- int smp; /* SMP supported ? */
- char *mod_name; /* name of the driver module */
- char *para_str; /* optional parameter string */
- char *mod_preload; /* optional modules to preload */
- char *cfg_prog; /* optional cfg prog */
- char *firmware; /* optional firmware to load */
- char *description; /* optional description */
- char *need_pkg; /* list of packages needed for function */
- char *info; /* optional additional info */
- char *protocol; /* supported D-channel protocols */
- char *interface; /* supported API interfaces */
- char *io; /* possible IO ports with legacy ISA cards */
- char *irq; /* possible interrupts with legacy ISA cards */
- char *membase; /* possible membase with legacy ISA cards */
- char *features; /* optional features*/
- int card_ref; /* reference to a card */
- char *name; /* driver name */
-} cdb_isdn_vario;
-
-
-extern cdb_isdn_vendor *hd_cdbisdn_get_vendor(int);
-extern cdb_isdn_card *hd_cdbisdn_get_card(int);
-extern cdb_isdn_vario *hd_cdbisdn_get_vario_from_type(int, int);
-extern cdb_isdn_card *hd_cdbisdn_get_card_from_type(int, int);
-extern cdb_isdn_card *hd_cdbisdn_get_card_from_id(int, int, int, int);
-extern cdb_isdn_vario *hd_cdbisdn_get_vario(int);
-extern int hd_cdbisdn_get_version(void);
-extern int hd_cdbisdn_get_db_version(void);
-extern char *hd_cdbisdn_get_db_date(void);
-
-/* CDB ISDN interface end */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _HD_H */
+++ /dev/null
-#include <sysfs/dlist.h>
-#include <sysfs/libsysfs.h>
-
-#define PROC_CMDLINE "/proc/cmdline"
-#define PROC_PCI_DEVICES "/proc/bus/pci/devices"
-#define PROC_PCI_BUS "/proc/bus/pci"
-#define PROC_CPUINFO "/proc/cpuinfo"
-#define PROC_IOPORTS "/proc/ioports"
-#define PROC_DMA "/proc/dma"
-#define PROC_INTERRUPTS "/proc/interrupts"
-#define PROC_NVRAM_22 "/proc/driver/nvram"
-#define PROC_NVRAM_24 "/proc/nvram"
-#define PROC_IDE "/proc/ide"
-#define PROC_SCSI "/proc/scsi"
-#define PROC_CDROM_INFO "/proc/sys/dev/cdrom/info"
-#define PROC_NET_IF_INFO "/proc/net/dev"
-#define PROC_MODULES "/proc/modules"
-#define PROC_DRIVER_SERIAL "/proc/tty/driver/serial"
-#define PROC_DRIVER_MACSERIAL "/proc/tty/driver/macserial"
-#define PROC_PARPORT_22 "/proc/parport/" /* Final '/' is essential! */
-#define PROC_PARPORT_24 "/proc/sys/dev/parport/parport"
-#define PROC_KCORE "/proc/kcore"
-// #define PROC_USB_DEVICES "/proc/bus/usb/devices"
-#define PROC_USB_DEVICES "/proc/bus/usb/devices_please-use-sysfs-instead"
-#define PROC_PROM "/proc/device-tree"
-#define PROC_MEMINFO "/proc/meminfo"
-#define PROC_VERSION "/proc/version"
-#define PROC_ISAPNP "/proc/isapnp"
-#define PROC_ISERIES "/proc/iSeries"
-#define PROC_ISERIES_VETH "/proc/iSeries/veth"
-#define PROC_PARTITIONS "/proc/partitions"
-#define PROC_APM "/proc/apm"
-
-#define DEV_NVRAM "/dev/nvram"
-#define DEV_PSAUX "/dev/psaux"
-#define DEV_ADBMOUSE "/dev/adbmouse"
-#define DEV_MEM "/dev/mem"
-#define DEV_KBD "/dev/kbd"
-#define DEV_CONSOLE "/dev/console"
-#define DEV_OPENPROM "/dev/openprom"
-#define DEV_SUNMOUSE "/dev/sunmouse"
-#define DEV_MICE "/dev/input/mice"
-#define DEV_FB "/dev/fb"
-#define DEV_FB0 "/dev/fb0"
-
-#define PROG_MODPROBE "/sbin/modprobe"
-#define PROG_RMMOD "/sbin/rmmod"
-#define PROG_CARDCTL "/sbin/cardctl"
-#define PROG_UDEVINFO "/usr/bin/udevinfo"
-
-#define KLOG_BOOT "/var/log/boot.msg"
-#define ISAPNP_CONF "/etc/isapnp.conf"
-
-#define ID_LIST HARDWARE_DIR "/hd.ids"
-#define LIB_CMDLINE HARDWARE_DIR "/cmdline"
-
-#define KERNEL_22 0x020200
-#define KERNEL_24 0x020400
-#define KERNEL_26 0x020600
-
-#if defined(__s390__) || defined(__s390x__) || defined(__alpha__) || defined(LIBHD_TINY)
-#define WITH_ISDN 0
-#else
-#define WITH_ISDN 1
-#endif
-
-#define PROGRESS(a, b, c) progress(hd_data, a, b, c)
-#define ADD2LOG(a...) str_printf(&hd_data->log, -2, a)
-
-#undef LIBHD_MEMCHECK
-
-#if defined(__i386__) || defined(__PPC__)
-/*
- * f: function we are in
- * a: first argument
- */
-
-#ifdef __i386__
-#define CALLED_FROM(f, a) ((void *) ((unsigned *) &a)[-1] - 5)
-#endif
-
-#ifdef __PPC__
-/* (1-arg funcs only) #define CALLED_FROM(f, a) ((void *) *((unsigned *) ((void *) &a - ((short *) f)[1] - 4)) - 4) */
-static inline void *getr1() { void *p; asm("mr %0,1" : "=r" (p) :); return p; }
-#define CALLED_FROM(f, a) ((void *) ((unsigned *) (getr1() - ((short *) f)[1]))[1] - 4)
-#endif
-#else
-#undef LIBHD_MEMCHECK
-#endif
-
-#ifdef LIBHD_MEMCHECK
-FILE *libhd_log;
-#endif
-
-
-/*
- * define to make (hd_t).unique_id a hex string, otherwise it is a
- * base64-like string
- */
-#undef NUMERIC_UNIQUE_ID
-
-/*
- * Internal probing module numbers. Use mod_name_by_idx() outside of libhd.
- */
-enum mod_idx {
- mod_none, mod_memory, mod_pci, mod_isapnp, mod_pnpdump, mod_net,
- mod_floppy, mod_misc, mod_bios, mod_cpu, mod_monitor, mod_mouse, mod_scsi,
- mod_serial, mod_usb, mod_adb, mod_modem, mod_parallel, mod_isa, mod_isdn,
- mod_kbd, mod_prom, mod_sbus, mod_int, mod_braille, mod_xtra, mod_sys,
- mod_manual, mod_fb, mod_veth, mod_pppoe, mod_pcmcia, mod_s390,
- mod_sysfs, mod_dsl, mod_block, mod_edd, mod_input, mod_wlan
-};
-
-void *new_mem(size_t size);
-void *resize_mem(void *, size_t);
-void *add_mem(void *, size_t, size_t);
-char *new_str(const char *);
-void *free_mem(void *);
-int have_common_res(hd_res_t *res1, hd_res_t *res2);
-void join_res_io(hd_res_t **res1, hd_res_t *res2);
-void join_res_irq(hd_res_t **res1, hd_res_t *res2);
-void join_res_dma(hd_res_t **res1, hd_res_t *res2);
-hd_res_t *free_res_list(hd_res_t *res);
-hd_res_t *add_res_entry(hd_res_t **res, hd_res_t *new_res);
-hd_t *add_hd_entry(hd_data_t *hd_data, unsigned line, unsigned count);
-misc_t *free_misc(misc_t *m);
-scsi_t *free_scsi(scsi_t *scsi, int free_all);
-hd_detail_t *free_hd_detail(hd_detail_t *d);
-devtree_t *free_devtree(hd_data_t *hd_data);
-void hd_add_id(hd_data_t *hd_data, hd_t *hd);
-
-char *isa_id2str(unsigned);
-char *eisa_vendor_str(unsigned);
-unsigned name2eisa_id(char *);
-char *canon_str(char *, int);
-
-int hex(char *string, int digits);
-
-void str_printf(char **buf, int offset, char *format, ...) __attribute__ ((format (printf, 3, 4)));
-void hexdump(char **buf, int with_ascii, unsigned data_len, unsigned char *data);
-str_list_t *search_str_list(str_list_t *sl, char *str);
-str_list_t *add_str_list(str_list_t **sl, char *str);
-str_list_t *free_str_list(str_list_t *list);
-str_list_t *read_file(char *file_name, unsigned start_line, unsigned lines);
-str_list_t *read_dir(char *dir_name, int type);
-char *hd_read_symlink(char *link_name);
-void progress(hd_data_t *hd_data, unsigned pos, unsigned count, char *msg);
-
-void remove_hd_entries(hd_data_t *hd_data);
-void remove_tagged_hd_entries(hd_data_t *hd_data);
-
-driver_info_t *free_driver_info(driver_info_t *di);
-
-int str2float(char *s, int n);
-char *float2str(int i, int n);
-
-/* return the file name of a module */
-char *mod_name_by_idx(unsigned idx);
-
-int hd_timeout(void(*func)(void *), void *arg, int timeout);
-
-str_list_t *read_kmods(hd_data_t *hd_data);
-char *get_cmd_param(hd_data_t *hd_data, int field);
-
-#ifdef __i386__
-/* smp/smp.c */
-int detectSMP(void);
-#endif
-
-void update_irq_usage(hd_data_t *hd_data);
-int run_cmd(hd_data_t *hd_data, char *cmd);
-int load_module_with_params(hd_data_t *hd_data, char *module, char *params);
-int load_module(hd_data_t *hd_data, char *module);
-int unload_module(hd_data_t *hd_data, char *module);
-int probe_module(hd_data_t *hd_data, char *module);
-
-int cmp_hd(hd_t *hd1, hd_t *hd2);
-unsigned has_something_attached(hd_data_t *hd_data, hd_t *hd);
-
-str_list_t *get_cmdline(hd_data_t *hd_data, char *key);
-
-int detect_smp_bios(hd_data_t *hd_data);
-int detect_smp_prom(hd_data_t *hd_data);
-
-unsigned char *read_block0(hd_data_t *hd_data, char *dev, int *timeout);
-
-void hd_copy(hd_t *dst, hd_t *src);
-
-/* parameter for gather_resources(,,, which) */
-#define W_IO (1 << 0)
-#define W_DMA (1 << 1)
-#define W_IRQ (1 << 2)
-
-void gather_resources(misc_t *m, hd_res_t **r, char *name, unsigned which);
-
-char *vend_id2str(unsigned vend);
-
-int hd_getdisksize(hd_data_t *hd_data, char *dev, int fd, hd_res_t **geo, hd_res_t **size);
-
-str_list_t *hd_split(char del, char *str);
-char *hd_join(char *del, str_list_t *str);
-
-int is_pnpinfo(ser_device_t *mi, int ofs);
-
-int is_pcmcia_ctrl(hd_data_t *hd_data, hd_t *hd);
-
-void hd_fork(hd_data_t *hd_data, int timeout, int total_timeout);
-void hd_fork_done(hd_data_t *hd_data);
-void hd_shm_init(hd_data_t *hd_data);
-void hd_shm_clean(hd_data_t *hd_data);
-void hd_shm_done(hd_data_t *hd_data);
-void *hd_shm_add(hd_data_t *hd_data, void *ptr, unsigned len);
-int hd_is_shm_ptr(hd_data_t *hd_data, void *ptr);
-void hd_move_to_shm(hd_data_t *hd_data);
-
-void read_udevinfo(hd_data_t *hd_data);
-
-hd_t *hd_find_sysfs_id(hd_data_t *hd_data, char *id);
-int hd_attr_uint(struct sysfs_attribute *attr, uint64_t *u, int base);
-char *hd_attr_str(struct sysfs_attribute *attr);
-str_list_t *hd_attr_list(struct sysfs_attribute *attr);
-char *hd_sysfs_id(char *path);
-char *hd_sysfs_name2_dev(char *str);
-char *hd_sysfs_dev2_name(char *str);
-void hd_sysfs_driver_list(hd_data_t *hd_data);
-char *hd_sysfs_find_driver(hd_data_t *hd_data, char *sysfs_id, int exact);
-int hd_report_this(hd_data_t *hd_data, hd_t *hd);
-str_list_t *hd_module_list(hd_data_t *hd_data, unsigned id);
-
-int hd_is_iseries(hd_data_t *hd_data);
-
-
-#ifdef __cplusplus
-}
-#endif
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/utsname.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "isdn.h"
-#include "hddb_int.h"
-
-extern hddb2_data_t hddb_internal;
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-// #define HDDB_TRACE
-// #define HDDB_TEST
-// #define HDDB_EXTERNAL_ONLY
-
-static char *hid_tag_names[] = { "", "pci ", "eisa ", "usb ", "special ", "pcmcia " };
-// just experimenting...
-static char *hid_tag_names2[] = { "", "pci ", "eisa ", "usb ", "int ", "pcmcia " };
-
-typedef enum {
- pref_empty, pref_new, pref_and, pref_or, pref_add
-} prefix_t;
-
-typedef struct line_s {
- prefix_t prefix;
- hddb_entry_t key;
- char *value;
-} line_t;
-
-typedef struct {
- int len;
- unsigned val[32]; /* arbitrary (approx. max. number of modules/xf86 config lines) */
-} tmp_entry_t;
-
-/* except for driver, all strings are static and _must not_ be freed */
-typedef struct {
- hddb_entry_mask_t key;
- hddb_entry_mask_t value;
- hddb_entry_mask_t value_mask[he_nomask];
- hd_id_t bus;
- hd_id_t base_class;
- hd_id_t sub_class;
- hd_id_t prog_if;
- hd_id_t vendor;
- hd_id_t device;
- hd_id_t sub_vendor;
- hd_id_t sub_device;
- hd_id_t revision;
- hd_id_t cu_model;
- char *serial;
- str_list_t *driver;
- char *requires;
-} hddb_search_t;
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-static void hddb_init_pci(hd_data_t *hd_data);
-static hddb_pci_t *parse_pcimap(str_list_t *file);
-static driver_info_t *hd_pcidb(hd_data_t *hd_data, hddb_pci_t *pci_db, hd_t *hd, driver_info_t *drv_info);
-static void hddb_init_external(hd_data_t *hd_data);
-
-static line_t *parse_line(char *str);
-static unsigned store_string(hddb2_data_t *x, char *str);
-static unsigned store_list(hddb2_data_t *x, hddb_list_t *list);
-static unsigned store_value(hddb2_data_t *x, unsigned val);
-static unsigned store_entry(hddb2_data_t *x, tmp_entry_t *te);
-static void clear_entry(tmp_entry_t *te);
-static void add_value(tmp_entry_t *te, hddb_entry_t idx, unsigned val);
-static hddb_entry_mask_t add_entry(hddb2_data_t *hddb2, tmp_entry_t *te, hddb_entry_t idx, char *str);
-static int compare_ids(hddb2_data_t *hddb, hddb_search_t *hs, hddb_entry_mask_t mask, unsigned key);
-static void complete_ids(hddb2_data_t *hddb, hddb_search_t *hs, hddb_entry_mask_t key_mask, hddb_entry_mask_t mask, unsigned val_idx);
-static int hddb_search(hd_data_t *hd_data, hddb_search_t *hs, int max_recursions);
-#ifdef HDDB_TEST
-static void test_db(hd_data_t *hd_data);
-#endif
-static driver_info_t *hddb_to_device_driver(hd_data_t *hd_data, hddb_search_t *hs);
-static driver_info_t *kbd_driver(hd_data_t *hd_data, hd_t *hd);
-static driver_info_t *monitor_driver(hd_data_t *hd_data, hd_t *hd);
-
-#if WITH_ISDN
-/* static int chk_free_biosmem(hd_data_t *hd_data, unsigned addr, unsigned len); */
-/* static isdn_parm_t *new_isdn_parm(isdn_parm_t **ip); */
-static driver_info_t *isdn_driver(hd_data_t *hd_data, hd_t *hd, cdb_isdn_card *cic);
-static driver_info_t *dsl_driver(hd_data_t *hd_data, hd_t *hd, cdb_isdn_card *cic);
-#endif
-
-static hd_res_t *get_res(hd_t *h, enum resource_types t, unsigned index);
-static driver_info_t *reorder_x11(driver_info_t *di0, char *info);
-static void expand_driver_info(hd_data_t *hd_data, hd_t *hd);
-static char *module_cmd(hd_t *hd, char *cmd);
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void hddb_init_pci(hd_data_t *hd_data)
-{
- str_list_t *sl = NULL;
- char *s = NULL, *r;
- struct utsname ubuf;
-
- if(!hd_data->hddb_pci) {
- if(!uname(&ubuf)) {
- r = getenv("LIBHD_KERNELVERSION");
- if(!r || !*r) r = ubuf.release;
- str_printf(&s, 0, "/lib/modules/%s/modules.pcimap", r);
- sl = read_file(s, 0, 0);
- s = free_mem(s);
- }
-
- hd_data->hddb_pci = parse_pcimap(sl);
-
- sl = free_str_list(sl);
- }
-
- if(!hd_data->hddb_pci_hm) {
- sl = read_file("/etc/hotplug/pci.handmap", 0, 0);
- hd_data->hddb_pci_hm = parse_pcimap(sl);
- sl = free_str_list(sl);
- }
-}
-
-
-hddb_pci_t *parse_pcimap(str_list_t *file)
-{
- str_list_t *sl;
- unsigned len;
- hddb_pci_t *pci, *p;
- char buf[64];
- unsigned u0, u1, u2, u3, u4, u5;
-
- for(len = 1, sl = file; sl; sl = sl->next) len++;
-
- pci = new_mem(len * sizeof *pci);
-
- for(p = pci, sl = file; sl; sl = sl->next) {
- if(sscanf(sl->str, "%63s %x %x %x %x %x %x", buf, &u0, &u1, &u2, &u3, &u4, &u5) == 7) {
- p->module = new_str(buf);
- p->vendor = u0;
- p->device = u1;
- p->subvendor = u2;
- p->subdevice = u3;
- p->pciclass = u4;
- p->classmask = u5;
-
- p++;
- }
- }
-
-#if 0
- fprintf(stderr, "--- pcimap ---\n");
- for(p = pci; p->module; p++) {
- fprintf(stderr, "%s, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n",
- p->module, p->vendor, p->device, p->subvendor, p->subdevice,
- p->pciclass, p->classmask
- );
- }
-#endif
-
- return pci;
-}
-
-
-driver_info_t *hd_pcidb(hd_data_t *hd_data, hddb_pci_t *pci_db, hd_t *hd, driver_info_t *drv_info)
-{
- unsigned vendor, device, subvendor, subdevice, pciclass;
- driver_info_t **di = NULL, *di2;
- pci_t *pci;
- char *mod_list[16 /* arbitrary */];
- int mod_prio[sizeof mod_list / sizeof *mod_list];
- int i, prio, mod_list_len;
-
- if(!pci_db) return drv_info;
-
- if(ID_TAG(hd->vendor.id) != TAG_PCI) return drv_info;
-
- /* don't add module info if driver info of some other type exists */
- for(di = &drv_info; *di; di = &(*di)->next) {
- if((*di)->any.type != di_module) return drv_info;
- }
-
- vendor = ID_VALUE(hd->vendor.id);
- device = ID_VALUE(hd->device.id);
- subvendor = ID_VALUE(hd->sub_vendor.id);
- subdevice = ID_VALUE(hd->sub_device.id);
- pciclass = (hd->base_class.id << 16) + ((hd->sub_class.id & 0xff) << 8) + (hd->prog_if.id & 0xff);
-
- if(
- hd->detail &&
- hd->detail->type == hd_detail_pci &&
- (pci = hd->detail->pci.data)
- ) {
- pciclass = (pci->base_class << 16) + ((pci->sub_class & 0xff) << 8) + (pci->prog_if & 0xff);
- }
-
- for(mod_list_len = 0; pci_db->module; pci_db++) {
- if(
- (pci_db->vendor == 0xffffffff || pci_db->vendor == vendor) &&
- (pci_db->device == 0xffffffff || pci_db->device == device) &&
- (pci_db->subvendor == 0xffffffff || pci_db->subvendor == subvendor) &&
- (pci_db->subdevice == 0xffffffff || pci_db->subdevice == subdevice) &&
- !((pci_db->pciclass ^ pciclass) & pci_db->classmask)
- ) {
- for(di2 = drv_info; di2; di2 = di2->next) {
- if(
- di2->any.type == di_module &&
- di2->any.hddb0 &&
- di2->any.hddb0->str &&
- !strcmp(di2->any.hddb0->str, pci_db->module)
- ) break;
- }
-
- if(di2) continue;
-
- prio = 0;
- if(pci_db->vendor == vendor) prio = 1;
- if(pci_db->device == device) prio = 2;
- if(pci_db->subvendor == subvendor) prio = 3;
- if(pci_db->subdevice == subdevice) prio = 4;
-
- mod_prio[mod_list_len] = prio;
- mod_list[mod_list_len++] = pci_db->module;
-
- if(mod_list_len >= sizeof mod_list / sizeof *mod_list) break;
- }
- }
-
- for(prio = 4; prio >= 0; prio--) {
- for(i = 0; i < mod_list_len; i++) {
- if(mod_prio[i] == prio) {
- *di = new_mem(sizeof **di);
- (*di)->any.type = di_module;
- (*di)->module.modprobe = 1;
- add_str_list(&(*di)->any.hddb0, mod_list[i]);
- di = &(*di)->next;
- }
- }
- }
-
- return drv_info;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void hddb_init(hd_data_t *hd_data)
-{
- hddb_init_pci(hd_data);
- hddb_init_external(hd_data);
-
-#ifndef HDDB_EXTERNAL_ONLY
- hd_data->hddb2[1] = &hddb_internal;
-#endif
-
-#ifdef HDDB_TEST
- test_db(hd_data);
-#endif
-}
-
-
-void hddb_init_external(hd_data_t *hd_data)
-{
- str_list_t *sl, *sl0;
- line_t *l;
- unsigned l_start, l_end /* end points _past_ last element */;
- unsigned u, ent, l_nr = 1;
- tmp_entry_t tmp_entry[he_nomask /* _must_ be he_nomask! */];
- hddb_entry_mask_t entry_mask = 0;
- int state;
- hddb_list_t dbl = {};
- hddb2_data_t *hddb2;
-
- if(hd_data->hddb2[0]) return;
-
- hddb2 = hd_data->hddb2[0] = new_mem(sizeof *hd_data->hddb2[0]);
-
- sl0 = read_file(ID_LIST, 0, 0);
-
- l_start = l_end = 0;
- state = 0;
-
- for(sl = sl0; sl; sl = sl->next, l_nr++) {
- l = parse_line(sl->str);
- if(!l) {
- ADD2LOG("hd.ids line %d: invalid line\n", l_nr);
- state = 4;
- break;
- };
- if(l->prefix == pref_empty) continue;
- switch(l->prefix) {
- case pref_new:
- if((state == 2 && !entry_mask) || state == 1) {
- ADD2LOG("hd.ids line %d: new item not allowed\n", l_nr);
- state = 4;
- break;
- }
- if(state == 2 && entry_mask) {
- ent = store_entry(hddb2, tmp_entry);
- if(ent == -1u) {
- ADD2LOG("hd.ids line %d: internal hddb oops 1\n", l_nr);
- state = 4;
- break;
- }
- if(l_end && l_end > l_start) {
- for(u = l_start; u < l_end; u++) {
- hddb2->list[u].value_mask = entry_mask;
- hddb2->list[u].value = ent;
- }
- }
- }
- entry_mask = 0;
- clear_entry(tmp_entry);
- state = 1;
- l_start = store_list(hddb2, &dbl);
- l_end = l_start + 1;
- break;
-
- case pref_and:
- if(state != 1) {
- ADD2LOG("hd.ids line %d: must start item first\n", l_nr);
- state = 4;
- break;
- }
- break;
-
- case pref_or:
- if(state != 1 || !entry_mask || l_end <= l_start || l_end < 1) {
- ADD2LOG("hd.ids line %d: must start item first\n", l_nr);
- state = 4;
- break;
- }
- ent = store_entry(hddb2, tmp_entry);
- if(ent == -1u) {
- ADD2LOG("hd.ids line %d: internal hddb oops 2\n", l_nr);
- state = 4;
- break;
- }
- hddb2->list[l_end - 1].key_mask = entry_mask;
- hddb2->list[l_end - 1].key = ent;
- entry_mask = 0;
- clear_entry(tmp_entry);
- u = store_list(hddb2, &dbl);
- if(u != l_end) {
- ADD2LOG("hd.ids line %d: internal hddb oops 2\n", l_nr);
- state = 4;
- break;
- }
- l_end++;
- break;
-
- case pref_add:
- if(state == 1 && !entry_mask) {
- ADD2LOG("hd.ids line %d: driver info not allowed\n", l_nr);
- state = 4;
- break;
- }
- if(state == 1 && l_end > l_start) {
- ent = store_entry(hddb2, tmp_entry);
- if(ent == -1u) {
- ADD2LOG("hd.ids line %d: internal hddb oops 3\n", l_nr);
- state = 4;
- break;
- }
- hddb2->list[l_end - 1].key_mask = entry_mask;
- hddb2->list[l_end - 1].key = ent;
- entry_mask = 0;
- clear_entry(tmp_entry);
- state = 2;
- }
- if(state != 2 || l_end == 0) {
- ADD2LOG("hd.ids line %d: driver info not allowed\n", l_nr);
- state = 4;
- break;
- }
- break;
-
- default:
- state = 4;
- }
-
- if(state != 4) {
- u = add_entry(hddb2, tmp_entry, l->key, l->value);
- if(u) {
- entry_mask |= u;
- }
- else {
- ADD2LOG("hd.ids line %d: invalid info\n", l_nr);
- state = 4;
- }
- }
-
- if(state == 4) break; /* error */
- }
-
- /* finalize last item */
- if(state == 2 && entry_mask) {
- ent = store_entry(hddb2, tmp_entry);
- if(ent == -1u) {
- ADD2LOG("hd.ids line %d: internal hddb oops 4\n", l_nr);
- state = 4;
- }
- else if(l_end && l_end > l_start) {
- for(u = l_start; u < l_end; u++) {
- hddb2->list[u].value_mask = entry_mask;
- hddb2->list[u].value = ent;
- }
- }
- }
-
- sl0 = free_str_list(sl0);
-
- if(state == 4) {
- /* there was an error */
-
- free_mem(hddb2->list);
- free_mem(hddb2->ids);
- free_mem(hddb2->strings);
- hd_data->hddb2[0] = free_mem(hd_data->hddb2[0]);
- }
-}
-
-
-line_t *parse_line(char *str)
-{
- static line_t l;
- char *s;
- int i;
-
- /* drop leading spaces */
- while(isspace(*str)) str++;
-
- /* skip emtpy lines and comments */
- if(!*str || *str == ';' || *str == '#') {
- l.prefix = pref_empty;
- return &l;
- }
-
- l.prefix = pref_new;
-
- switch(*str) {
- case '&':
- l.prefix = pref_and;
- str++;
- break;
-
- case '|':
- l.prefix = pref_or;
- str++;
- break;
-
- case '+':
- l.prefix = pref_add;
- str++;
- break;
- }
-
- /* skip spaces */
- while(isspace(*str)) str++;
-
- s = str;
- while(*str && !isspace(*str)) str++;
- if(*str) *str++ = 0;
- while(isspace(*str)) str++;
-
- for(i = 0; (unsigned) i < sizeof hddb_entry_strings / sizeof *hddb_entry_strings; i++) {
- if(!strcmp(s, hddb_entry_strings[i])) {
- l.key = i;
- break;
- }
- }
-
- if((unsigned) i >= sizeof hddb_entry_strings / sizeof *hddb_entry_strings) return NULL;
-
- l.value = str;
-
- /* drop trailing white space */
- i = strlen(str);
- while(i > 0) {
- if(isspace(str[i - 1]))
- str[--i] = 0;
- else
- break;
- }
-
- /* special case: drop leading and final double quotes, if any */
- i = strlen(l.value);
- if(i >= 2 && l.value[0] == '"' && l.value[i - 1] == '"') {
- l.value[i - 1] = 0;
- l.value++;
- }
-
- // fprintf(stderr, "pre = %d, key = %d, val = \"%s\"\n", l.prefix, l.key, l.value);
-
- return &l;
-}
-
-
-unsigned store_string(hddb2_data_t *x, char *str)
-{
- unsigned l = strlen(str), u;
-
- if(x->strings_len + l >= x->strings_max) {
- x->strings_max += l + 0x1000; /* >4k steps */
- x->strings = resize_mem(x->strings, x->strings_max * sizeof *x->strings);
- }
-
- /* make sure the 1st byte is 0 */
- if(x->strings_len == 0) {
- *x->strings = 0; /* resize_mem does _not_ clear memory */
- x->strings_len = 1;
- }
-
- if(l == 0) return 0; /* 1st byte is always 0 */
-
- strcpy(x->strings + (u = x->strings_len), str);
- x->strings_len += l + 1;
-
- return u;
-}
-
-
-unsigned store_list(hddb2_data_t *x, hddb_list_t *list)
-{
- if(x->list_len == x->list_max) {
- x->list_max += 0x100; /* 4k steps */
- x->list = resize_mem(x->list, x->list_max * sizeof *x->list);
- }
-
- x->list[x->list_len++] = *list;
-
- return x->list_len - 1;
-}
-
-
-unsigned store_value(hddb2_data_t *x, unsigned val)
-{
- if(x->ids_len == x->ids_max) {
- x->ids_max += 0x400; /* 4k steps */
- x->ids = resize_mem(x->ids, x->ids_max * sizeof *x->ids);
- }
-
- x->ids[x->ids_len++] = val;
-
- return x->ids_len - 1;
-}
-
-
-/* returns index in hddb2->ids */
-unsigned store_entry(hddb2_data_t *x, tmp_entry_t *te)
-{
- int i, j;
- unsigned ent = -1, u, v;
-
- for(i = 0; i < he_nomask; i++) {
- if(te[i].len) {
- for(j = 0; j < te[i].len; j++) {
- v = te[i].val[j] | (1 << 31);
- if(j == te[i].len - 1) v &= ~(1 << 31);
- u = store_value(x, v);
- if(ent == -1u) ent = u;
- }
- }
- }
-
- return ent;
-}
-
-void clear_entry(tmp_entry_t *te)
-{
- memset(te, 0, he_nomask * sizeof *te);
-}
-
-void add_value(tmp_entry_t *te, hddb_entry_t idx, unsigned val)
-{
- if(idx >= he_nomask) return;
- te += idx;
-
- if((unsigned) te->len >= sizeof te->val / sizeof *te->val) return;
-
- te->val[te->len++] = val;
-}
-
-int parse_id(char *str, unsigned *id, unsigned *range, unsigned *mask)
-{
- static unsigned id0, val;
- unsigned tag = 0;
- char c = 0, *s, *t = NULL;
-
- *id = *range = *mask = 0;
-
- if(!str || !*str) return 0;
-
- for(s = str; *str && !isspace(*str); str++);
- if(*str) {
- c = *(t = str); /* remember for later */
- *str++ = 0;
- }
- while(isspace(*str)) str++;
-
- if(*s) {
- if(!strcmp(s, "pci")) tag = TAG_PCI;
- else if(!strcmp(s, "usb")) tag = TAG_USB;
- else if(!strcmp(s, "special")) tag = TAG_SPECIAL;
- else if(!strcmp(s, "eisa")) tag = TAG_EISA;
- else if(!strcmp(s, "isapnp")) tag = TAG_EISA;
- else if(!strcmp(s, "pcmcia")) tag = TAG_PCMCIA;
- else {
- str = s;
- if(t) *t = c; /* restore */
- }
- }
-
- id0 = strtoul(str, &s, 0);
-
- if(s == str) {
- id0 = name2eisa_id(str);
- if(!id0) return 0;
- s = str + 3;
- id0 = ID_VALUE(id0);
- if(!tag) tag = TAG_EISA;
- }
-
- while(isspace(*s)) s++;
- if(*s && *s != '&' && *s != '+') return 0;
-
- *id = MAKE_ID(tag, id0);
-
- if(!*s) return 1;
-
- c = *s++;
-
- while(isspace(*s)) s++;
-
- val = strtoul(s, &str, 0);
-
- if(s == str) return 0;
-
- while(isspace(*str)) str++;
-
- if(*str) return 0;
-
- if(c == '+') *range = val; else *mask = val;
-
- return c == '+' ? 2 : 3;
-}
-
-
-hddb_entry_mask_t add_entry(hddb2_data_t *hddb2, tmp_entry_t *te, hddb_entry_t idx, char *str)
-{
- hddb_entry_mask_t mask = 0;
- int i;
- unsigned u, u0, u1, u2;
- char *s, c;
-
- for(i = 0; (unsigned) i < sizeof hddb_is_numeric / sizeof *hddb_is_numeric; i++) {
- if(idx == hddb_is_numeric[i]) break;
- }
-
- if((unsigned) i < sizeof hddb_is_numeric / sizeof *hddb_is_numeric) {
- /* numeric id */
- mask |= 1 << idx;
-
- i = parse_id(str, &u0, &u1, &u2);
-
- switch(i) {
- case 1:
- add_value(te, idx, MAKE_DATA(FLAG_ID, u0));
- break;
-
- case 2:
- add_value(te, idx, MAKE_DATA(FLAG_RANGE, u1));
- add_value(te, idx, MAKE_DATA(FLAG_ID, u0));
- break;
-
- case 3:
- add_value(te, idx, MAKE_DATA(FLAG_MASK, u2));
- add_value(te, idx, MAKE_DATA(FLAG_ID, u0));
- break;
-
- default:
- return 0;
- }
- }
- else {
- if(idx < he_nomask) {
- /* strings */
-
- mask |= 1 << idx;
- u = store_string(hddb2, str);
- // fprintf(stderr, ">>> %s\n", str);
- add_value(te, idx, MAKE_DATA(FLAG_STRING, u));
- }
- else {
- /* special */
-
- if(idx == he_class_id) {
- i = parse_id(str, &u0, &u1, &u2);
- if(i != 1) return 0;
- u = ID_VALUE(u0) >> 8;
- add_value(te, he_baseclass_id, MAKE_DATA(FLAG_ID, u));
- u = u0 & 0xff;
- add_value(te, he_subclass_id, MAKE_DATA(FLAG_ID, u));
- /* add_value(te, he_progif_id, MAKE_DATA(FLAG_ID, 0)); */
- mask |= (1 << he_baseclass_id) + (1 << he_subclass_id) /* + (1 << he_progif_id) */;
- }
- else {
- switch(idx) {
- case he_driver_module_insmod:
- c = 'i';
- break;
-
- case he_driver_module_modprobe:
- c = 'm';
- break;
-
- case he_driver_module_config:
- c = 'M';
- break;
-
- case he_driver_xfree:
- c = 'x';
- break;
-
- case he_driver_xfree_config:
- c = 'X';
- break;
-
- case he_driver_mouse:
- c = 'p';
- break;
-
- case he_driver_display:
- c = 'd';
- break;
-
- case he_driver_any:
- c = 'a';
- break;
-
- default:
- c = 0;
- break;
- }
- if(c) {
- s = new_mem(strlen(str) + 3);
- s[0] = c;
- s[1] = '\t';
- strcpy(s + 2, str);
- mask |= add_entry(hddb2, te, he_driver, s);
- s = free_mem(s);
- }
- }
- }
- }
-
- return mask;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void hddb_dump_raw(hddb2_data_t *hddb, FILE *f)
-{
- int i;
- unsigned u, fl, v, t, id;
- char *s;
-
- if(!hddb) return;
-
- fprintf(f, "=== strings 0x%05x/0x%05x ===\n", hddb->strings_len, hddb->strings_max);
-
- for(s = hddb->strings, i = 0, u = 0; u < hddb->strings_len; u++) {
- if(!hddb->strings[u]) {
- fprintf(f, "%4d (0x%05x): \"%s\"\n", i, (unsigned) (s - hddb->strings), s);
- i++;
- s = hddb->strings + u + 1;
- }
- }
-
- fprintf(f, "\n=== ids 0x%05x/0x%05x ===\n", hddb->ids_len, hddb->ids_max);
-
- for(u = 0; u < hddb->ids_len; u++) {
- fprintf(f, "0x%05x: 0x%08x ", u, hddb->ids[u]);
- if(hddb->ids[u] & (1 << 31)) fprintf(f, " ");
- fl = DATA_FLAG(hddb->ids[u]) & 0x7;
- v = DATA_VALUE(hddb->ids[u]);
- if(fl == FLAG_STRING && v < hddb->strings_len) {
- fprintf(f, "\"%s\"", hddb->strings + v);
- }
- else if(fl == FLAG_MASK) {
- fprintf(f, "&0x%04x", v);
- }
- else if(fl == FLAG_RANGE) {
- fprintf(f, "+0x%04x", v);
- }
- else if(fl == FLAG_ID) {
- t = ID_TAG(v);
- id = ID_VALUE(v);
- fprintf(f, "%s0x%04x", hid_tag_name(t), id);
- if(t == TAG_EISA) {
- fprintf(f, " (%s)", eisa_vendor_str(id));
- }
- }
- fprintf(f, "\n");
- }
-
- fprintf(f, "\n=== search list 0x%05x/0x%05x ===\n", hddb->list_len, hddb->list_max);
-
- for(u = 0; u < hddb->list_len; u++) {
- fprintf(f,
- "%4d: 0x%08x 0x%08x 0x%05x 0x%05x\n",
- u, hddb->list[u].key_mask, hddb->list[u].value_mask,
- hddb->list[u].key, hddb->list[u].value
- );
- }
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void hddb_dump_ent_name(hddb2_data_t *hddb, FILE *f, char pre, hddb_entry_t ent)
-{
- int len, tab_ind = 24;
-
- if(ent >= sizeof hddb_entry_strings / sizeof *hddb_entry_strings) return;
-
- fprintf(f, "%c%s\t", pre, hddb_entry_strings[ent]);
-
- len = strlen(hddb_entry_strings[ent]) + 1;
-
- for(len = (len & ~7) + 8; len < tab_ind; len += 8) {
- fputc('\t', f);
- }
-}
-
-
-void hddb_dump_skey(hddb2_data_t *hddb, FILE *f, prefix_t pre, hddb_entry_mask_t key_mask, unsigned key)
-{
- static char pref_char[5] = { ' ', ' ', '&', '|', '+' };
- hddb_entry_t ent;
- unsigned rm_val = 0, r_or_m = 0;
- unsigned fl, val, *ids, id, tag, u;
- char *str_val;
- int i;
-
- if(pre >= sizeof pref_char) return;
-
- if(key >= hddb->ids_len) return;
-
- ids = hddb->ids + key;
-
- for(ent = 0; ent < he_nomask && key_mask; ent++, key_mask >>= 1) {
- if(!(key_mask & 1)) continue;
-
- fl = DATA_FLAG(*ids);
- val = DATA_VALUE(*ids);
-
- r_or_m = 0;
-
- while((fl & FLAG_CONT)) {
- if(fl == (FLAG_CONT | FLAG_RANGE)) {
- rm_val = val;
- r_or_m = 1;
- }
- else if(fl == (FLAG_CONT | FLAG_MASK)) {
- rm_val = val;
- r_or_m = 2;
- }
- else {
- break;
- }
-
- ids++;
-
- fl = DATA_FLAG(*ids);
- val = DATA_VALUE(*ids);
- }
-
- fl &= ~FLAG_CONT;
-
- if(ent != he_driver) {
- hddb_dump_ent_name(hddb, f, pref_char[pre], ent);
-
- if(fl == FLAG_ID) {
- tag = ID_TAG(val);
- id = ID_VALUE(val);
- if(tag == TAG_EISA && (ent == he_vendor_id || ent == he_subvendor_id)) {
- fprintf(f, "%s", eisa_vendor_str(id));
- }
- else {
- u = 4;
- if(ent == he_bus_id || ent == he_subclass_id || ent == he_progif_id) {
- u = 2;
- }
- else if(ent == he_baseclass_id) {
- u = 3;
- }
- fprintf(f, "%s0x%0*x", hid_tag_name(tag), u, id);
- }
- if(r_or_m) {
- fprintf(f, "%c0x%04x", r_or_m == 1 ? '+' : '&', rm_val);
- }
- }
- else if(fl == FLAG_STRING) {
- if(val < hddb->strings_len) {
- str_val = hddb->strings + val;
- fprintf(f, "%s", str_val);
- }
- }
- fputc('\n', f);
- }
- else {
- ids--;
- do {
- ids++;
- fl = DATA_FLAG(*ids) & ~FLAG_CONT;
- val = DATA_VALUE(*ids);
- if(fl != FLAG_STRING) break;
- str_val = NULL;
- if(val < hddb->strings_len) str_val = hddb->strings + val;
- if(!str_val) break;
- if(!*str_val && !str_val[1] == '\t') break;
-
- switch(*str_val) {
- case 'x':
- i = he_driver_xfree;
- break;
-
- case 'X':
- i = he_driver_xfree_config;
- break;
-
- case 'i':
- i = he_driver_module_insmod;
- break;
-
- case 'm':
- i = he_driver_module_modprobe;
- break;
-
- case 'M':
- i = he_driver_module_config;
- break;
-
- case 'p':
- i = he_driver_mouse;
- break;
-
- case 'd':
- i = he_driver_display;
- break;
-
- case 'a':
- i = he_driver_any;
- break;
-
- default:
- i = -1;
- break;
- }
- if(i == -1) break;
-
- hddb_dump_ent_name(hddb, f, pref_char[pre], i);
- fprintf(f, "%s\n", str_val + 2);
- }
- while((*ids & (1 << 31)));
- }
-
- /* at this point 'ids' must be the _current_ entry (_not_ the next) */
-
- /* skip potential garbage/unhandled entries */
- while((*ids & (1 << 31))) ids++;
-
- ids++;
-
- if(pre != pref_add) pre = pref_and;
- }
-}
-
-
-void hddb_dump(hddb2_data_t *hddb, FILE *f)
-{
- unsigned u;
-
- if(!hddb) return;
-
- for(u = 0; u < hddb->list_len; u++) {
- hddb_dump_skey(hddb, f, pref_new, hddb->list[u].key_mask, hddb->list[u].key);
- hddb_dump_skey(hddb, f, pref_add, hddb->list[u].value_mask, hddb->list[u].value);
- fputc('\n', f);
- }
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-int compare_ids(hddb2_data_t *hddb, hddb_search_t *hs, hddb_entry_mask_t mask, unsigned key)
-{
- hddb_entry_t ent;
- unsigned rm_val = 0, r_or_m = 0, res = 0;
- unsigned fl, val, ok, *ids, id;
- char *str, *str_val;
-
- if(key >= hddb->ids_len) return 1;
-
- ids = hddb->ids + key;
-
- for(ent = 0; ent < he_nomask && mask && !res; ent++, mask >>= 1) {
- if(!(mask & 1)) continue;
-
- fl = DATA_FLAG(*ids);
- val = DATA_VALUE(*ids);
-
- r_or_m = 0;
-
- while((fl & FLAG_CONT)) {
- if(fl == (FLAG_CONT | FLAG_RANGE)) {
- rm_val = val;
- r_or_m = 1;
- }
- else if(fl == (FLAG_CONT | FLAG_MASK)) {
- rm_val = val;
- r_or_m = 2;
- }
- else {
- break;
- }
-
- ids++;
-
- fl = DATA_FLAG(*ids);
- val = DATA_VALUE(*ids);
- }
-
- fl &= ~FLAG_CONT;
-
- id = 0;
- str = str_val = NULL;
- ok = 0;
- if(fl == FLAG_ID) {
- ok = 1;
- switch(ent) {
- case he_bus_id:
- id = hs->bus.id;
- break;
-
- case he_baseclass_id:
- id = hs->base_class.id;
- break;
-
- case he_subclass_id:
- id = hs->sub_class.id;
- break;
-
- case he_progif_id:
- id = hs->prog_if.id;
- break;
-
- case he_vendor_id:
- id = hs->vendor.id;
- break;
-
- case he_device_id:
- id = hs->device.id;
- break;
-
- case he_subvendor_id:
- id = hs->sub_vendor.id;
- break;
-
- case he_subdevice_id:
- id = hs->sub_device.id;
- break;
-
- case he_rev_id:
- id = hs->revision.id;
- break;
- case he_detail_ccw_data_cu_model:
- id = hs->cu_model.id;
- break;
-
- default:
- ok = 0;
- break;
- }
- }
- else if(fl == FLAG_STRING) {
- if(val < hddb->strings_len) str_val = hddb->strings + val;
- ok = 2;
- switch(ent) {
- case he_bus_name:
- str = hs->bus.name;
- break;
-
- case he_baseclass_name:
- str = hs->base_class.name;
- break;
-
- case he_subclass_name:
- str = hs->sub_class.name;
- break;
-
- case he_progif_name:
- str = hs->prog_if.name;
- break;
-
- case he_vendor_name:
- str = hs->vendor.name;
- break;
-
- case he_device_name:
- str = hs->device.name;
- break;
-
- case he_subvendor_name:
- str = hs->sub_vendor.name;
- break;
-
- case he_subdevice_name:
- str = hs->sub_device.name;
- break;
-
- case he_rev_name:
- str = hs->revision.name;
- break;
-
- case he_serial:
- str = hs->serial;
- break;
-
- case he_requires:
- str = hs->requires;
- break;
-
- default:
- ok = 0;
- }
- }
-
- switch(ok) {
- case 1:
- switch(r_or_m) {
- case 1:
- if(id < val || id >= val + rm_val) res = 1;
- break;
-
- case 2:
- if((id & ~rm_val) != val) res = 1;
- break;
-
- default:
- if(id != val) res = 1;
- }
- break;
-
- case 2:
- if(str && str_val) {
- if(strcmp(str, str_val)) res = 1;
- }
- else {
- res = 1;
- }
- break;
-
- default:
- res = 1;
- }
-
-#ifdef HDDB_TRACE
- switch(ok) {
- case 1:
- if(r_or_m) {
- printf(
- "cmp: 0x%05x: (ent = %2d, id = 0x%x, val = 0x%x%c0x%x) = %d\n",
- key, ent, id, val, r_or_m == 1 ? '+' : '&', rm_val, res
- );
- }
- else {
- printf(
- "cmp: 0x%05x: (ent = %2d, id = 0x%x, val = 0x%x) = %d\n",
- key, ent, id, val, res
- );
- }
- break;
-
- case 2:
- printf(
- "cmp: 0x%05x: (ent = %2d, id = \"%s\", val = \"%s\") = %d\n",
- key, ent, str, str_val, res
- );
-
- break;
-
- default:
- printf("cmp: 0x%05x: (ent = %2d, *** unhandled key ***) = %d\n", key, ent, res);
- }
-#endif
-
- /* at this point 'ids' must be the _current_ entry (_not_ the next) */
-
- /* skip potential garbage/unhandled entries */
- while((*ids & (1 << 31))) ids++;
-
- ids++;
- }
-
- return res;
-}
-
-void complete_ids(
- hddb2_data_t *hddb, hddb_search_t *hs,
- hddb_entry_mask_t key_mask, hddb_entry_mask_t mask, unsigned val_idx
-)
-{
- hddb_entry_t ent;
- unsigned *ids, *id;
- unsigned fl, val, ok;
- char **str, *str_val;
-
- if(val_idx >= hddb->ids_len) return;
-
- ids = hddb->ids + val_idx;
-
- for(ent = 0; ent < he_nomask && mask; ent++, mask >>= 1) {
- if(!(mask & 1)) continue;
-
- fl = DATA_FLAG(*ids);
- val = DATA_VALUE(*ids);
-
- fl &= ~FLAG_CONT;
-
- id = NULL;
- str = NULL;
- str_val = NULL;
- ok = 0;
- if(fl == FLAG_ID) {
- ok = 1;
- switch(ent) {
- case he_bus_id:
- id = &hs->bus.id;
- break;
-
- case he_baseclass_id:
- id = &hs->base_class.id;
- break;
-
- case he_subclass_id:
- id = &hs->sub_class.id;
- break;
-
- case he_progif_id:
- id = &hs->prog_if.id;
- break;
-
- case he_vendor_id:
- id = &hs->vendor.id;
- break;
-
- case he_device_id:
- id = &hs->device.id;
- break;
-
- case he_subvendor_id:
- id = &hs->sub_vendor.id;
- break;
-
- case he_subdevice_id:
- id = &hs->sub_device.id;
- break;
-
- case he_rev_id:
- id = &hs->revision.id;
- break;
-
- case he_detail_ccw_data_cu_model:
- id = &hs->cu_model.id;
- break;
-
- default:
- ok = 0;
- break;
- }
- }
- else if(fl == FLAG_STRING) {
- if(val < hddb->strings_len) str_val = hddb->strings + val;
- ok = 2;
- switch(ent) {
- case he_bus_name:
- str = &hs->bus.name;
- break;
-
- case he_baseclass_name:
- str = &hs->base_class.name;
- break;
-
- case he_subclass_name:
- str = &hs->sub_class.name;
- break;
-
- case he_progif_name:
- str = &hs->prog_if.name;
- break;
-
- case he_vendor_name:
- str = &hs->vendor.name;
- break;
-
- case he_device_name:
- str = &hs->device.name;
- break;
-
- case he_subvendor_name:
- str = &hs->sub_vendor.name;
- break;
-
- case he_subdevice_name:
- str = &hs->sub_device.name;
- break;
-
- case he_rev_name:
- str = &hs->revision.name;
- break;
-
- case he_serial:
- str = &hs->serial;
- break;
-
- case he_driver:
- ok = 3;
- break;
-
- case he_requires:
- str = &hs->requires;
- break;
-
- default:
- ok = 0;
- }
- }
-
- if(ok) {
- if(
- (hs->value_mask[ent] & key_mask) == hs->value_mask[ent] &&
- key_mask != hs->value_mask[ent]
- ) {
- hs->value_mask[ent] = key_mask;
- hs->value |= 1 << ent;
- }
- else {
- /* don't change if already set */
- ok = 4;
- }
-
-#if 0
- if((hs->value & (1 << ent))) {
- /* don't change if already set */
- ok = 4;
- }
- else if(ent != he_driver) {
- hs->value |= 1 << ent;
- }
-#endif
- }
-
- switch(ok) {
- case 1:
- *id = val;
-#ifdef HDDB_TRACE
- printf("add: 0x%05x: (ent = %2d, val = 0x%08x)\n", val_idx, ent, val);
-#endif
- break;
-
- case 2:
- *str = str_val;
-#ifdef HDDB_TRACE
- printf("add: 0x%05x: (ent = %2d, val = \"%s\")\n", val_idx, ent, str_val);
-#endif
- break;
-
- case 3:
- ids--;
- hs->driver = free_str_list(hs->driver);
- do {
- ids++;
- fl = DATA_FLAG(*ids) & ~FLAG_CONT;
- val = DATA_VALUE(*ids);
- if(fl != FLAG_STRING) break;
- str_val = NULL;
- if(val < hddb->strings_len) str_val = hddb->strings + val;
- if(!str_val) break;
-#ifdef HDDB_TRACE
- printf("add: 0x%05x: (ent = %2d, val = \"%s\")\n", val_idx, ent, str_val);
-#endif
- add_str_list(&hs->driver, str_val);
- }
- while((*ids & (1 << 31)));
- break;
-
- case 4:
- break;
-
-#ifdef HDDB_TRACE
- default:
- printf("add: 0x%05x: (ent = %2d, *** unhandled value ***)\n", val_idx, ent);
-#endif
- }
-
- /* at this point 'ids' must be the _current_ entry (_not_ the next) */
-
- /* skip potential garbage/unhandled entries */
- while((*ids & (1 << 31))) ids++;
-
- ids++;
- }
-}
-
-int hddb_search(hd_data_t *hd_data, hddb_search_t *hs, int max_recursions)
-{
- unsigned u;
- int i;
- hddb2_data_t *hddb;
- int db_idx;
- hddb_entry_mask_t all_values = 0;
-
- if(!hs) return 0;
-
- if(!max_recursions) max_recursions = 2;
-
- while(max_recursions--) {
- for(db_idx = 0; (unsigned) db_idx < sizeof hd_data->hddb2 / sizeof *hd_data->hddb2; db_idx++) {
- if(!(hddb = hd_data->hddb2[db_idx])) continue;
-
- for(u = 0; u < hddb->list_len; u++) {
- if(
- (hs->key & hddb->list[u].key_mask) == hddb->list[u].key_mask
- /* && (hs->value & hddb->list[u].value_mask) != hddb->list[u].value_mask */
- ) {
- i = compare_ids(hddb, hs, hddb->list[u].key_mask, hddb->list[u].key);
- if(!i) {
- complete_ids(hddb, hs,
- hddb->list[u].key_mask,
- hddb->list[u].value_mask, hddb->list[u].value
- );
- }
- }
- }
- }
-
- all_values |= hs->value;
-
- if(!max_recursions) break;
-
- hs->key |= hs->value;
- hs->value = 0;
- memset(hs->value_mask, 0, sizeof hs->value_mask);
- }
-
- hs->value = all_values;
-
- return 1;
-}
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-#ifdef HDDB_TEST
-void test_db(hd_data_t *hd_data)
-{
- hddb_search_t hs = {};
- int i;
-
- hs.bus.id = 4;
- hs.key |= (1 << he_bus_id) + (1 << he_serial);
-
- hs.serial = "ser 0123";
-
- i = hddb_search(hd_data, &hs, 0);
-
- printf("%d, >%s<\n", i, hs.bus.name);
-}
-#endif
-
-
-str_list_t *get_hddb_packages(hd_data_t *hd_data)
-{
- return NULL;
-}
-
-
-unsigned device_class(hd_data_t *hd_data, unsigned vendor, unsigned device)
-{
- hddb_search_t hs = {};
-
- hs.vendor.id = vendor;
- hs.device.id = device;
- hs.key |= (1 << he_vendor_id) + (1 << he_device_id);
-
- hddb_search(hd_data, &hs, 1);
-
- if(
- (hs.value & ((1 << he_baseclass_id) + (1 << he_subclass_id))) ==
- ((1 << he_baseclass_id) + (1 << he_subclass_id))
- ) {
- return (hs.base_class.id << 8) + (hs.sub_class.id & 0xff);
- }
-
- return 0;
-}
-
-
-unsigned sub_device_class(hd_data_t *hd_data, unsigned vendor, unsigned device, unsigned sub_vendor, unsigned sub_device)
-{
- hddb_search_t hs = {};
-
- hs.vendor.id = vendor;
- hs.device.id = device;
- hs.sub_vendor.id = sub_vendor;
- hs.sub_device.id = sub_device;
- hs.key |= (1 << he_vendor_id) + (1 << he_device_id) + (1 << he_subvendor_id) + (1 << he_subdevice_id);
-
- hddb_search(hd_data, &hs, 1);
-
- if(
- (hs.value & ((1 << he_baseclass_id) + (1 << he_subclass_id))) ==
- ((1 << he_baseclass_id) + (1 << he_subclass_id))
- ) {
- return (hs.base_class.id << 8) + (hs.sub_class.id & 0xff);
- }
-
- return 0;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void hddb_add_info(hd_data_t *hd_data, hd_t *hd)
-{
- hddb_search_t hs = {};
- driver_info_t *new_driver_info = NULL;
-#if WITH_ISDN
- cdb_isdn_card *cic;
-#endif
-
- if(hd->tag.fixed) return;
-
- hs.bus.id = hd->bus.id;
- hs.key |= 1 << he_bus_id;
-
- hs.base_class.id = hd->base_class.id;
- hs.key |= 1 << he_baseclass_id;
-
- hs.sub_class.id = hd->sub_class.id;
- hs.key |= 1 << he_subclass_id;
-
- hs.prog_if.id = hd->prog_if.id;
- hs.key |= 1 << he_progif_id;
-
- if(hd->vendor.id) {
- hs.vendor.id = hd->vendor.id;
- hs.key |= 1 << he_vendor_id;
- }
-
- if(hd->vendor.name) {
- hs.vendor.name = hd->vendor.name;
- hs.key |= 1 << he_vendor_name;
- }
-
- if(hd->device.id) {
- hs.device.id = hd->device.id;
- hs.key |= 1 << he_device_id;
- }
-
- if(hd->device.name) {
- hs.device.name = hd->device.name;
- hs.key |= 1 << he_device_name;
- }
-
- if(hd->sub_vendor.id) {
- hs.sub_vendor.id = hd->sub_vendor.id;
- hs.key |= 1 << he_subvendor_id;
- }
-
- if(hd->sub_device.id) {
- hs.sub_device.id = hd->sub_device.id;
- hs.key |= 1 << he_subdevice_id;
- }
-
- hs.revision.id = hd->revision.id;
- hs.key |= 1 << he_rev_id;
-
- if(hd->revision.name) {
- hs.revision.name = hd->revision.name;
- hs.key |= 1 << he_rev_name;
- }
-
- if(hd->serial) {
- hs.serial = hd->serial;
- hs.key |= 1 << he_serial;
- }
-
- if(hd->detail && hd->detail->ccw.data) {
- hs.cu_model.id=hd->detail->ccw.data->cu_model;
- hs.key |= 1 << he_detail_ccw_data_cu_model;
- }
-
- hddb_search(hd_data, &hs, 0);
-
- if((hs.value & (1 << he_bus_id))) {
- hd->bus.id = hs.bus.id;
- }
-
- if((hs.value & (1 << he_bus_name))) {
- if(!hd->ref) free_mem(hd->bus.name);
- hd->bus.name = new_str(hs.bus.name);
- }
-
- if((hs.value & (1 << he_baseclass_id))) {
- hd->base_class.id = hs.base_class.id;
- }
-
- if((hs.value & (1 << he_baseclass_name))) {
- if(!hd->ref) free_mem(hd->base_class.name);
- hd->base_class.name = new_str(hs.base_class.name);
- }
-
- if((hs.value & (1 << he_subclass_id))) {
- hd->sub_class.id = hs.sub_class.id;
- }
-
- if((hs.value & (1 << he_subclass_name))) {
- if(!hd->ref) free_mem(hd->sub_class.name);
- hd->sub_class.name = new_str(hs.sub_class.name);
- }
-
- if((hs.value & (1 << he_progif_id))) {
- hd->prog_if.id = hs.prog_if.id;
- }
-
- if((hs.value & (1 << he_progif_name))) {
- if(!hd->ref) free_mem(hd->prog_if.name);
- hd->prog_if.name = new_str(hs.prog_if.name);
- }
-
- if((hs.value & (1 << he_requires))) {
- if(!hd->ref) hd->requires = free_str_list(hd->requires);
- hd->requires = hd_split('|', hs.requires);
- }
-
- if((hs.value & (1 << he_vendor_id))) {
- hd->vendor.id = hs.vendor.id;
- }
-
- if((hs.value & (1 << he_vendor_name))) {
- if(!hd->ref) free_mem(hd->vendor.name);
- hd->vendor.name = new_str(hs.vendor.name);
- }
-
- if((hs.value & (1 << he_device_id))) {
- hd->device.id = hs.device.id;
- }
-
- if((hs.value & (1 << he_device_name))) {
- if(!hd->ref) free_mem(hd->device.name);
- hd->device.name = new_str(hs.device.name);
- }
-
- if((hs.value & (1 << he_subvendor_id))) {
- hd->sub_vendor.id = hs.sub_vendor.id;
- }
-
- if((hs.value & (1 << he_subvendor_name))) {
- if(!hd->ref) free_mem(hd->sub_vendor.name);
- hd->sub_vendor.name = new_str(hs.sub_vendor.name);
- }
-
- if((hs.value & (1 << he_subdevice_id))) {
- hd->sub_device.id = hs.sub_device.id;
- }
-
- if((hs.value & (1 << he_subdevice_name))) {
- if(!hd->ref) free_mem(hd->sub_device.name);
- hd->sub_device.name = new_str(hs.sub_device.name);
- }
-
- if((hs.value & (1 << he_detail_ccw_data_cu_model))) {
- if(hd->detail && hd->detail->ccw.data)
- hd->detail->ccw.data->cu_model=hs.cu_model.id;
- }
-
- /* look for sub vendor again */
-
- if(!hd->sub_vendor.name && hd->sub_vendor.id) {
- hddb_search_t hs2 = {};
-
- hs2.vendor.id = hd->sub_vendor.id;
- hs2.key |= 1 << he_vendor_id;
-
- hddb_search(hd_data, &hs2, 1);
-
- if((hs2.value & (1 << he_vendor_name))) {
- hd->sub_vendor.name = new_str(hs2.vendor.name);
- }
- }
-
- /* look for compat device name */
- if(
- hd->compat_vendor.id &&
- hd->compat_device.id &&
- !hd->compat_vendor.name &&
- !hd->compat_device.name
- ) {
- hddb_search_t hs2 = {};
-
- hs2.vendor.id = hd->compat_vendor.id;
- hs2.key |= 1 << he_vendor_id;
-
- hs2.device.id = hd->compat_device.id;
- hs2.key |= 1 << he_device_id;
-
- hddb_search(hd_data, &hs2, 1);
-
- if((hs2.value & (1 << he_vendor_name))) {
- hd->compat_vendor.name = new_str(hs2.vendor.name);
- }
-
- if((hs2.value & (1 << he_device_name))) {
- hd->compat_device.name = new_str(hs2.device.name);
- }
- }
-
- /* get package info for compat device id */
-
- if(!hd->requires) {
- hddb_search_t hs2 = {};
-
- hs2.vendor.id = hd->compat_vendor.id;
- hs2.key |= 1 << he_vendor_id;
-
- hs2.device.id = hd->compat_device.id;
- hs2.key |= 1 << he_device_id;
-
- hddb_search(hd_data, &hs2, 1);
-
- if((hs2.value & (1 << he_requires))) {
- hd->requires = hd_split('|', hs2.requires);
- }
- }
-
- /* get driver info */
-
-#if WITH_ISDN
- if((cic = get_isdn_info(hd))) {
- new_driver_info = isdn_driver(hd_data, hd, cic);
- if(!hd->model && cic->lname && *cic->lname) {
- hd->model = new_str(cic->lname);
- }
- free_mem(cic);
- }
- if (!new_driver_info && ((cic = get_dsl_info(hd)))) {
- new_driver_info = dsl_driver(hd_data, hd, cic);
- if(!hd->model && cic->lname && *cic->lname) {
- hd->model = new_str(cic->lname);
- }
- free_mem(cic);
- }
-#endif
-
- if(!new_driver_info) {
- new_driver_info = hd_pcidb(hd_data, hd_data->hddb_pci_hm, hd, new_driver_info);
- }
-
- if(!new_driver_info && (hs.value & (1 << he_driver))) {
- new_driver_info = hddb_to_device_driver(hd_data, &hs);
- }
-
- if(!new_driver_info && (hd->compat_vendor.id || hd->compat_device.id)) {
- memset(&hs, 0, sizeof hs);
-
- if(hd->compat_vendor.id) {
- hs.vendor.id = hd->compat_vendor.id;
- hs.key |= 1 << he_vendor_id;
- }
- if(hd->compat_device.id) {
- hs.device.id = hd->compat_device.id;
- hs.key |= 1 << he_device_id;
- }
-
- hddb_search(hd_data, &hs, 1);
-
- if((hs.value & (1 << he_driver))) {
- new_driver_info = hddb_to_device_driver(hd_data, &hs);
- }
- }
-
- if(!new_driver_info && hd->base_class.id == bc_keyboard) {
- new_driver_info = kbd_driver(hd_data, hd);
- }
-
- if(!new_driver_info && hd->base_class.id == bc_monitor) {
- new_driver_info = monitor_driver(hd_data, hd);
- }
-
- new_driver_info = hd_pcidb(hd_data, hd_data->hddb_pci, hd, new_driver_info);
-
- if(new_driver_info) {
- if(!hd->ref) {
- hd->driver_info = free_driver_info(hd->driver_info);
- }
- hd->driver_info = new_driver_info;
- expand_driver_info(hd_data, hd);
- }
-
- free_str_list(hs.driver);
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-driver_info_t *hddb_to_device_driver(hd_data_t *hd_data, hddb_search_t *hs)
-{
- char *s, *t, *t0;
- driver_info_t *di = NULL, *di0 = NULL;
- str_list_t *sl;
-
- for(sl = hs->driver; sl; sl = sl->next) {
- if(!sl->str || !*sl->str || sl->str[1] != '\t') return NULL;
-
- if(di && (*sl->str == 'M' || *sl->str == 'X')) {
- add_str_list(&di->any.hddb1, sl->str + 2);
- continue;
- }
-
- if(di)
- di = di->next = new_mem(sizeof *di);
- else
- di = di0 = new_mem(sizeof *di);
-
- switch(*sl->str) {
- case 'd':
- di->any.type = di_display;
- break;
-
- case 'm':
- di->module.modprobe = 1;
- case 'i':
- di->any.type = di_module;
- break;
-
- case 'p':
- di->any.type = di_mouse;
- break;
-
- case 'x':
- di->any.type = di_x11;
- break;
-
- default:
- di->any.type = di_any;
- }
-
- s = new_str(sl->str + 2);
- for(t0 = s; (t = strsep(&t0, "|")); ) {
- add_str_list(&di->any.hddb0, t);
- }
- free_mem(s);
- }
-
- return di0;
-}
-
-
-driver_info_t *kbd_driver(hd_data_t *hd_data, hd_t *hd)
-{
- driver_info_t *di;
- driver_info_kbd_t *ki;
- int arch = hd_cpu_arch(hd_data);
- unsigned u;
- char *s1, *s2;
- hd_t *hd_tmp;
- usb_t *usb;
-
- /* country codes
- 1 Arabic
- 2 Belgian
- 3 Canadian-Bilingual
- 4 Canadian-French
- 5 Czech Republic
- 6 Danish
- 7 Finnish
- 8 French
- 9 German
- 10 Greek
- 11 Hebrew
- 12 Hungary
- 13 International (ISO)
- 14 Italian
- 15 Japan (Katakana)
- 16 Korean
- 17 Latin American
- 18 Netherlands/Dutch
- 19 Norwegian
- 20 Persian (Farsi)
- 21 Poland
- 22 Portuguese
- 23 Russia
- 24 Slovakia
- 25 Spanish
- 26 Swedish
- 27 Swiss/French
- 28 Swiss/German
- 29 Switzerland
- 30 Taiwan
- 31 Turkish
- 32 UK
- 33 US
- 34 Yugoslavia
- */
- static struct {
- unsigned country;
- char *layout;
- char *keymap;
- } country_code[] = {
- { 5, "cs", "cz-us-qwertz" },
- { 8, "fr", "fr-latin1" },
- { 9, "de", "de-latin1-nodeadkeys" },
- { 10, "gr", "gr" },
- { 14, "it", "it" },
- { 18, "nl", "us" },
- { 23, "ru", "ru1" },
- { 25, "es", "es" },
- { 32, "uk", "uk" },
- { 33, "us", "us" }
- };
-
- if(hd->sub_class.id == sc_keyboard_console) return NULL;
-
- di = new_mem(sizeof *di);
- di->kbd.type = di_kbd;
- ki = &(di->kbd);
-
- switch(arch) {
- case arch_intel:
- case arch_x86_64:
- case arch_alpha:
- ki->XkbRules = new_str("xfree86");
- ki->XkbModel = new_str("pc104");
- break;
-
- case arch_ppc:
- case arch_ppc64:
- ki->XkbRules = new_str("xfree86");
- ki->XkbModel = new_str("macintosh");
- for(hd_tmp = hd_data->hd; hd_tmp; hd_tmp = hd_tmp->next) {
- if(
- hd_tmp->base_class.id == bc_internal &&
- hd_tmp->sub_class.id == sc_int_cpu &&
- hd_tmp->detail &&
- hd_tmp->detail->type == hd_detail_cpu &&
- hd_tmp->detail->cpu.data
- ) {
- s1 = hd_tmp->detail->cpu.data->vend_name;
- if(s1 && (strstr(s1, "CHRP ") == s1 || strstr(s1, "PReP ") == s1)) {
- free_mem(ki->XkbModel);
- ki->XkbModel = new_str("pc104");
- }
- }
- }
- break;
-
- case arch_sparc:
- case arch_sparc64:
- if(hd->vendor.id == MAKE_ID(TAG_SPECIAL, 0x0202)) {
- ki->XkbRules = new_str("sun");
- u = ID_VALUE(hd->device.id);
- if(u == 4) ki->XkbModel = new_str("type4");
- if(u == 5) {
- ki->XkbModel = new_str(ID_VALUE(hd->sub_device.id) == 2 ? "type5_euro" : "type5");
- }
- s1 = s2 = NULL;
-
- switch(hd->prog_if.id) {
- case 0: case 1: case 33: case 34: case 80: case 81:
- default:
- s1 = "us"; s2 = "sunkeymap";
- break;
-
- case 2:
- s1 = "fr"; s2 = "sunt5-fr-latin1"; // fr_BE?
- break;
-
- case 3:
- s1 = "ca";
- break;
-
- case 4: case 36: case 83:
- s1 = "dk";
- break;
-
- case 5: case 37: case 84:
- s1 = "de"; s2 = "sunt5-de-latin1";
- break;
-
- case 6: case 38: case 85:
- s1 = "it";
- break;
-
- case 7: case 39: case 86:
- s1 = "nl";
- break;
-
- case 8: case 40: case 87:
- s1 = "no";
- if(u == 4) s2 = "sunt4-no-latin1";
- break;
-
- case 9: case 41: case 88:
- s1 = "pt";
- break;
-
- case 10: case 42: case 89:
- s1 = "es";
- s2 = u == 4 ? "sunt4-es" : "sunt5-es";
- break;
-
- case 11: case 43: case 90:
- s1 = "se"; s2 = "sunt5-fi-latin1"; // se is swedish, not fi
- break;
-
- case 12: case 44: case 91:
- s1 = "fr"; s2 = "sunt5-fr-latin1"; // fr_CH
- break;
-
- case 13: case 45: case 92:
- s1 = "de"; s2 = "sunt5-de-latin1"; // de_CH
- break;
-
- case 14: case 46: case 93:
- s1 = "gb"; s2 = "sunt5-uk";
- break;
-
- case 16: case 47: case 94:
- s1 = "ko";
- break;
-
- case 17: case 48: case 95:
- s1 = "tw";
- break;
-
- case 32: case 49: case 96:
- s1 = "jp";
- break;
-
- case 50: case 97:
- s1 = "fr"; s2 = "sunt5-fr-latin1"; // fr_CA
- break;
-
- case 51:
- s1 = "hu";
- break;
-
- case 52:
- s1 = "pl"; s2 = "sun-pl";
- break;
-
- case 53:
- s1 = "cs";
- break;
-
- case 54:
- s1 = "ru"; s2 = "sunt5-ru";
- break;
- }
- ki->XkbLayout = new_str(s1);
- ki->keymap = new_str(s2);
- }
- else {
- ki->XkbRules = new_str("xfree86");
- ki->XkbModel = new_str("pc104");
- }
- break;
-
- default:
- ki->XkbRules = new_str("xfree86");
- }
-
- if(
- hd->bus.id == bus_usb &&
- hd->detail &&
- hd->detail->type == hd_detail_usb &&
- (usb = hd->detail->usb.data) &&
- usb->country
- ) {
- for(u = 0; u < sizeof country_code / sizeof *country_code; u++) {
- if(country_code[u].country == usb->country) {
- if(!ki->XkbLayout) ki->XkbLayout = new_str(country_code[u].layout);
- if(!ki->keymap) ki->keymap = new_str(country_code[u].keymap);
- break;
- }
- }
- }
-
- return di;
-}
-
-
-driver_info_t *monitor_driver(hd_data_t *hd_data, hd_t *hd)
-{
- driver_info_t *di = NULL;
- driver_info_display_t *ddi;
- monitor_info_t *mi;
- hd_res_t *res;
- unsigned width = 640, height = 480;
-
- if(
- hd->detail &&
- hd->detail->type == hd_detail_monitor &&
- (mi = hd->detail->monitor.data) &&
- mi->min_hsync
- ) {
- di = new_mem(sizeof *di);
- di->display.type = di_display;
- ddi = &(di->display);
-
- ddi->min_vsync = mi->min_vsync;
- ddi->max_vsync = mi->max_vsync;
- ddi->min_hsync = mi->min_hsync;
- ddi->max_hsync = mi->max_hsync;
-
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_monitor) {
- if(res->monitor.width * res->monitor.height > width * height ) {
- width = res->monitor.width;
- height = res->monitor.height;
- }
- }
- }
-
- ddi->width = width;
- ddi->height = height;
- }
-
- return di;
-}
-
-
-#if WITH_ISDN
-
-#if 0
-int chk_free_biosmem(hd_data_t *hd_data, unsigned addr, unsigned len)
-{
- unsigned u;
- unsigned char c;
-
- addr -= hd_data->bios_rom.start;
- if(
- !hd_data->bios_rom.data ||
- addr >= hd_data->bios_rom.size ||
- addr + len > hd_data->bios_rom.size
- ) return 0;
-
- for(c = 0xff, u = addr; u < addr + len; u++) {
- c &= hd_data->bios_rom.data[u];
- }
-
- return c == 0xff ? 1 : 0;
-}
-
-isdn_parm_t *new_isdn_parm(isdn_parm_t **ip)
-{
- while(*ip) ip = &(*ip)->next;
-
- return *ip = new_mem(sizeof **ip);
-}
-#endif
-
-driver_info_t *isdn_driver(hd_data_t *hd_data, hd_t *hd, cdb_isdn_card *cic)
-{
- driver_info_t *di0, *di;
- cdb_isdn_vario *civ;
-/* hd_res_t *res;
- uint64_t i, irqs, irqs2;
- int irq_val, pnr;
-*/
- int drv;
- str_list_t *sl, *sl0;
-
- if(!cic) return NULL;
-
- di0 = new_mem(sizeof *di0);
-
- drv = cic->vario;
- di = NULL;
-
- while((civ = hd_cdbisdn_get_vario(drv))) {
- drv = civ->next_vario;
- if (di) {
- di->next = new_mem(sizeof *di);
- di = di->next;
- } else {
- di = di0;
- }
- di->isdn.type = di_isdn;
- di->isdn.i4l_type = civ->typ;
- di->isdn.i4l_subtype = civ->subtyp;
- di->isdn.i4l_name = new_str(cic->lname);
-
- if(civ->need_pkg && *civ->need_pkg) {
- sl0 = hd_split(',', (char *) civ->need_pkg);
- for(sl = sl0; sl; sl = sl->next) {
- if(!search_str_list(hd->requires, sl->str)) {
- add_str_list(&hd->requires, sl->str);
- }
- }
- free_str_list(sl0);
- }
-
- if(hd->bus.id == bus_pci) continue;
-#if 0
- pnr = 1;
- civ = hd_cdbisdn_get_vario(cic->vario);
- if (!civ) continue;
- if (civ->irq && civ->irq[0]) {
- ip = new_isdn_parm(&di->isdn.params);
- ip->name = new_str("IRQ");
- ip->type = CDBISDN_P_IRQ;
- }
- if (civ->io && civ->io[0]) {
- ip = new_isdn_parm(&di->isdn.params);
- ip->name = new_str("IO");
- ip->type = CDBISDN_P_IO;
- }
- if (civ->membase && civ->membase[0]) {
- ip = new_isdn_parm(&di->isdn.params);
- ip->name = new_str("MEMBASE");
- ip->type = CDBISDN_P_MEM;
- }
- while((ipi = hd_ihw_get_parameter(ici->handle, pnr++))) {
- ip = new_isdn_parm(&di->isdn.params);
- ip->name = new_str(ipi->name);
- ip->type = ipi->type & P_TYPE_MASK;
- ip->flags = ipi->flags & P_PROPERTY_MASK;
- ip->def_value = ipi->def_value;
- if(ipi->list) ip->alt_values = *ipi->list;
- ip->alt_value = new_mem(ip->alt_values * sizeof *ip->alt_value);
- for(i = 0; i < ip->alt_values; i++) {
- ip->alt_value[i] = ipi->list[i + 1];
- }
- ip->valid = 1;
-
- if((ip->flags & P_SOFTSET)) {
- switch(ip->type) {
- case P_IRQ:
- update_irq_usage(hd_data);
- irqs = 0;
- for(i = 0; i < ip->alt_values; i++) {
- irqs |= 1ull << ip->alt_value[i];
- }
- irqs &= ~(hd_data->used_irqs | hd_data->assigned_irqs);
-#ifdef __i386__
- irqs &= 0xffffull; /* max. 16 on intel */
- /*
- * The point is, that this is relevant for isa boards only
- * and those have irq values < 16 anyway. So it really
- * doesn't matter if we mask with 0xffff or not.
- */
-#endif
- if(!irqs) {
- ip->conflict = 1;
- ip->valid = 0;
- }
- else {
- irqs2 = irqs & ~0xc018ull;
- /* see if we can avoid irqs 3,4,14,15 */
- if(irqs2) irqs = irqs2;
- irq_val = -1;
- /* try default value first */
- if(ip->def_value && (irqs & (1ull << ip->def_value))) {
- irq_val = ip->def_value;
- }
- else {
- for(i = 0; i < 64 && irqs; i++, irqs >>= 1) {
- if((irqs & 1)) irq_val = i;
- }
- }
- if(irq_val >= 0) {
- ip->value = irq_val;
- hd_data->assigned_irqs |= 1ull << irq_val;
- }
- else {
- ip->valid = 0;
- }
- }
- break;
- case P_MEM:
- if(!hd_data->bios_rom.data) {
- if(ip->def_value) {
- ip->value = ip->def_value;
- }
- }
- else {
- /* ###### 0x2000 is just guessing -> should be provided by libihw */
- if(ip->def_value && chk_free_biosmem(hd_data, ip->def_value, 0x2000)) {
- ip->value = ip->def_value;
- }
- else {
- for(i = ip->alt_values - 1; i >= 0; i--) {
- if(chk_free_biosmem(hd_data, ip->alt_value[i], 0x2000)) {
- ip->value = ip->alt_value[i];
- break;
- }
- }
- }
- }
- if(!ip->value) ip->conflict = 1;
- break;
- default:
- ip->valid = 0;
- }
- }
- else if((ip->flags & P_DEFINE)) {
- res = NULL;
- switch(ip->type) {
- case P_IRQ:
- res = get_res(hd, res_irq, 0);
- if(res) ip->value = res->irq.base;
- break;
- case P_MEM:
- res = get_res(hd, res_mem, 0);
- if(res) ip->value = res->mem.base;
- break;
- case P_IO:
- res = get_res(hd, res_io, 0);
- if(res) ip->value = res->io.base;
- break;
- case P_IO0:
- case P_IO1:
- case P_IO2:
- res = get_res(hd, res_io, ip->type - P_IO0);
- if(res) ip->value = res->io.base;
- break;
- // ##### might break for 64bit pci entries?
- case P_BASE0:
- case P_BASE1:
- case P_BASE2:
- case P_BASE3:
- case P_BASE4:
- case P_BASE5:
- res = get_res(hd, res_mem, ip->type - P_BASE0);
- if(res) ip->value = res->mem.base;
- break;
- default:
- ip->valid = 0;
- }
- if(!res) ip->valid = 0;
- }
- }
-#endif
- }
- if(!di) di0 = free_mem(di0);
-
- return di0;
-}
-
-driver_info_t *dsl_driver(hd_data_t *hd_data, hd_t *hd, cdb_isdn_card *cic)
-{
- driver_info_t *di0, *di;
- cdb_isdn_vario *civ;
- int drv;
- str_list_t *sl, *sl0;
-
- if(!cic) return NULL;
-
- di0 = new_mem(sizeof *di0);
-
- drv = cic->vario;
- di = NULL;
-
- while((civ = hd_cdbisdn_get_vario(drv))) {
- drv = civ->next_vario;
- if (di) {
- di->next = new_mem(sizeof *di);
- di = di->next;
- } else {
- di = di0;
- }
- di->dsl.type = di_dsl;
- if(civ->interface && *civ->interface) {
- if (!strcmp(civ->interface, "CAPI20")) {
- di->dsl.mode = new_str("capiadsl");
- if(civ->mod_name && *civ->mod_name)
- di->dsl.name = new_str(civ->mod_name);
- else
- di->dsl.name = new_str("unknown");
- } else if (!strcmp(civ->interface, "pppoe")) {
- di->dsl.mode = new_str("pppoe");
- if(civ->mod_name && *civ->mod_name)
- di->dsl.name = new_str(civ->mod_name);
- else
- di->dsl.name = new_str("none");
- } else {
- di->dsl.mode = new_str("unknown");
- di->dsl.name = new_str("unknown");
- }
- } else {
- di->dsl.mode = new_str("unknown");
- di->dsl.name = new_str("unknown");
- }
-
- if(civ->need_pkg && *civ->need_pkg) {
- sl0 = hd_split(',', (char *) civ->need_pkg);
- for(sl = sl0; sl; sl = sl->next) {
- if(!search_str_list(hd->requires, sl->str)) {
- add_str_list(&hd->requires, sl->str);
- }
- }
- free_str_list(sl0);
- }
-
- if(hd->bus.id == bus_pci) continue;
- }
- if(!di) di0 = free_mem(di0);
-
- return di0;
-}
-
-#endif /* WITH_ISDN */
-
-
-hd_res_t *get_res(hd_t *hd, enum resource_types t, unsigned index)
-{
- hd_res_t *res;
-
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == t) {
- if(!index) return res;
- index--;
- }
- }
-
- return NULL;
-}
-
-
-driver_info_t *reorder_x11(driver_info_t *di0, char *info)
-{
- driver_info_t *di, *di_new, **di_list;
- int i, dis, found;
-
- for(dis = 0, di = di0; di; di = di->next) dis++;
-
- di_list = new_mem(dis * sizeof *di_list);
-
- for(i = 0, di = di0; di; di = di->next) {
- di_list[i++] = di;
- }
-
- di = di_new = NULL;
- for(i = found = 0; i < dis; i++) {
- if(
- !strcmp(di_list[i]->x11.xf86_ver, info) ||
- !strcmp(di_list[i]->x11.server, info)
- ) {
- found = 1;
- if(di) {
- di = di->next = di_list[i];
- }
- else {
- di = di_new = di_list[i];
- }
- di->next = NULL;
- di_list[i] = NULL;
- }
- }
-
- for(i = 0; i < dis; i++) {
- if(di_list[i]) {
- if(di) {
- di = di->next = di_list[i];
- }
- else {
- di = di_new = di_list[i];
- }
- di->next = NULL;
- di_list[i] = NULL;
- }
- }
-
- free_mem(di_list);
-
- if(!found && strlen(info) > 1) {
- free_driver_info(di_new);
- di_new = new_mem(sizeof *di_new);
- di_new->any.type = di_x11;
- di_new->x11.server = new_str(info);
- di_new->x11.xf86_ver = new_str(*info >= 'A' && *info <= 'Z' ? "3" : "4");
- }
-
- return di_new;
-}
-
-
-void expand_driver_info(hd_data_t *hd_data, hd_t *hd)
-{
- int i;
- unsigned u1, u2;
- char *s, *t, *t0;
- driver_info_t *di;
- str_list_t *sl, *sl1, *sl2, *cmd;
-
- if(!hd || !hd->driver_info) return;
-
- for(di = hd->driver_info; di; di = di->next) {
- switch(di->any.type) {
- case di_display:
- for(i = 0, sl = di->display.hddb0; sl; sl = sl->next, i++) {
- if(i == 0 && sscanf(sl->str, "%ux%u", &u1, &u2) == 2) {
- di->display.width = u1;
- di->display.height = u2;
- }
- else if(i == 1 && sscanf(sl->str, "%u-%u", &u1, &u2) == 2) {
- di->display.min_vsync = u1;
- di->display.max_vsync = u2;
- }
- else if(i == 2 && sscanf(sl->str, "%u-%u", &u1, &u2) == 2) {
- di->display.min_hsync = u1;
- di->display.max_hsync = u2;
- }
- else if(i == 3 && sscanf(sl->str, "%u", &u1) == 1) {
- di->display.bandwidth = u1;
- }
- }
- break;
-
- case di_module:
- for(di->module.active = 1, sl = di->module.hddb0; sl; sl = sl->next) {
- t0 = s = new_str(sl->str);
-
- t = strsep(&t0, " ");
-
- add_str_list(&di->module.names, t);
- di->module.active &= (
- hd_module_is_active(hd_data, t) |
- (search_str_list(hd->drivers, t) ? 1 : 0)
- );
-
- if(t0) {
- add_str_list(&di->module.mod_args, module_cmd(hd, t0));
- }
- else {
- add_str_list(&di->module.mod_args, NULL);
- }
-
- free_mem(s);
- }
- for(sl = di->module.hddb1; sl; sl = sl->next) {
- s = module_cmd(hd, sl->str);
- if(s) str_printf(&di->module.conf, -1, "%s\n", s);
- }
- break;
-
- case di_mouse:
- di->mouse.buttons = di->mouse.wheels = -1;
- u1 = 0;
- if(
- hd->compat_vendor.id == MAKE_ID(TAG_SPECIAL, 0x0210) &&
- ID_TAG(hd->compat_device.id) == TAG_SPECIAL
- ) {
- u1 = hd->compat_device.id;
- }
- if(
- hd->vendor.id == MAKE_ID(TAG_SPECIAL, 0x0210) &&
- ID_TAG(hd->device.id) == TAG_SPECIAL
- ) {
- u1 = hd->device.id;
- }
- if(u1) {
- di->mouse.wheels = ID_VALUE(u1) >> 4;
- di->mouse.buttons = ID_VALUE(u1) & 15;
- }
- for(i = 0, sl = di->mouse.hddb0; sl; sl = sl->next, i++) {
- if(i == 0) {
- di->mouse.xf86 = new_str(sl->str);
- }
- else if(i == 1) {
- di->mouse.gpm = new_str(sl->str);
- }
- else if(i == 2 && *sl->str) {
- di->mouse.buttons = strtol(sl->str, NULL, 10);
- }
- else if(i == 3 && *sl->str) {
- di->mouse.wheels = strtol(sl->str, NULL, 10);
- }
- }
- break;
-
- case di_x11:
- for(i = 0, sl = di->x11.hddb0; sl; sl = sl->next, i++) {
- if(i == 0) {
- di->x11.xf86_ver = new_str(sl->str);
- }
- else if(i == 1) {
- di->x11.server = new_str(sl->str);
- }
- else if(i == 2) {
- if(!strcmp(sl->str, "3d")) di->x11.x3d = 1;
- }
-#if 0
- else if(i == 3) {
- s = new_str(sl->str);
- for(t0 = s; (t = strsep(&t0, ",")); ) {
- add_str_list(&di->x11.packages, t);
- }
- free_mem(s);
- }
-#endif
- else if(i == 4) {
- s = new_str(sl->str);
- for(t0 = s; (t = strsep(&t0, ",")); ) {
- add_str_list(&di->x11.extensions, t);
- }
- free_mem(s);
- }
- else if(i == 5) {
- s = new_str(sl->str);
- for(t0 = s; (t = strsep(&t0, ",")); ) {
- add_str_list(&di->x11.options, t);
- }
- free_mem(s);
- }
- else if(i == 6) {
- for(sl2 = sl1 = hd_split(',', sl->str); sl2; sl2 = sl2->next) {
- u1 = strtoul(sl2->str, NULL, 0);
- switch(u1) {
- case 8:
- di->x11.colors.c8 = 1;
- di->x11.colors.all |= (1 << 0);
- break;
-
- case 15:
- di->x11.colors.c15 = 1;
- di->x11.colors.all |= (1 << 1);
- break;
-
- case 16:
- di->x11.colors.c16 = 1;
- di->x11.colors.all |= (1 << 2);
- break;
-
- case 24:
- di->x11.colors.c24 = 1;
- di->x11.colors.all |= (1 << 3);
- break;
-
- case 32:
- di->x11.colors.c32 = 1;
- di->x11.colors.all |= (1 << 4);
- break;
- }
- }
- free_str_list(sl1);
- }
- else if(i == 7) {
- di->x11.dacspeed = strtol(sl->str, NULL, 10);
- }
- else if(i == 8) {
- di->x11.script = new_str(sl->str);
- }
- }
- for(i = 0, sl = di->x11.hddb1; sl; sl = sl->next, i++) {
- add_str_list(&di->x11.raw, sl->str);
- }
-#if 0
- // ######## for compatibility
- for(sl = hd->requires; sl; sl = sl->next) {
- add_str_list(&di->x11.packages, sl->str);
- }
-#endif
- break;
-
- default:
- break;
- }
- }
-
- di = hd->driver_info;
- if(di && di->any.type == di_x11 && !hd_probe_feature(hd_data, pr_ignx11)) {
- cmd = get_cmdline(hd_data, "x11");
- if(cmd && *cmd->str) {
- hd->driver_info = reorder_x11(di, cmd->str);
- }
- free_str_list(cmd);
- }
-}
-
-
-char *module_cmd(hd_t *hd, char *cmd)
-{
- static char buf[256];
- char *s = buf;
- int idx, ofs;
- hd_res_t *res;
-
- // skip inactive PnP cards
- // ##### Really necessary here?
- if(
- hd->is.isapnp &&
- hd->detail &&
- hd->detail->isapnp.data &&
- !(hd->detail->isapnp.data->flags & (1 << isapnp_flag_act))
- ) return NULL;
-
- *buf = 0;
- while(*cmd) {
- if(sscanf(cmd, "<io%u>%n", &idx, &ofs) >= 1) {
- if((res = get_res(hd, res_io, idx))) {
- s += sprintf(s, "0x%02"PRIx64, res->io.base);
- cmd += ofs;
- }
- else {
- return NULL;
- }
- }
- else if(sscanf(cmd, "<irq%u>%n", &idx, &ofs) >= 1) {
- if((res = get_res(hd, res_irq, idx))) {
- s += sprintf(s, "%u", res->irq.base);
- cmd += ofs;
- }
- else {
- return NULL;
- }
- }
- else {
- *s++ = *cmd++;
- }
-
- if(s - buf > (int) sizeof buf - 20) return NULL;
- }
-
- *s = 0;
- return buf;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-char *hid_tag_name(int tag)
-{
- return (unsigned) tag < sizeof hid_tag_names / sizeof *hid_tag_names ? hid_tag_names[tag] : "";
-}
-
-char *hid_tag_name2(int tag)
-{
- return (unsigned) tag < sizeof hid_tag_names2 / sizeof *hid_tag_names2 ? hid_tag_names2[tag] : "";
-}
-
+++ /dev/null
-void hddb_init(hd_data_t *hd_data);
-
-unsigned device_class(hd_data_t *hd_data, unsigned vendor, unsigned device);
-unsigned sub_device_class(hd_data_t *hd_data, unsigned vendor, unsigned device, unsigned sub_vendor, unsigned sub_device);
-
-char *hid_tag_name(int tag);
-char *hid_tag_name2(int tag);
+++ /dev/null
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- *
- * type defs for internal data base
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-#define DATA_VALUE(a) ((a) & ~(-1 << 28))
-#define DATA_FLAG(a) (((a) >> 28) & 0xf)
-#define MAKE_DATA(a, b) ((a << 28) | (b))
-
-#define FLAG_ID 0
-#define FLAG_RANGE 1
-#define FLAG_MASK 2
-#define FLAG_STRING 3
-#define FLAG_REGEXP 4
-/* 5 - 7 reserved */
-#define FLAG_CONT 8 /* bit mask, _must_ be bit 31 */
-
-
-typedef enum hddb_entry_e {
- he_other, he_bus_id, he_baseclass_id, he_subclass_id, he_progif_id,
- he_vendor_id, he_device_id, he_subvendor_id, he_subdevice_id, he_rev_id,
- he_bus_name, he_baseclass_name, he_subclass_name, he_progif_name,
- he_vendor_name, he_device_name, he_subvendor_name, he_subdevice_name,
- he_rev_name, he_serial, he_driver, he_requires /* 21 */,
-
- he_detail_ccw_data_cu_model,
- /* add new entries _here_! */
-
- he_nomask,
-
- /* if he_nomask exceeds 31, adjust entry_mask_t & hddb_entry_mask_t */
-
- he_class_id = he_nomask, he_driver_module_insmod, he_driver_module_modprobe,
- he_driver_module_config, he_driver_xfree, he_driver_xfree_config,
- he_driver_mouse, he_driver_display, he_driver_any
-} hddb_entry_t;
-
-static hddb_entry_t hddb_is_numeric[] = {
- he_bus_id, he_baseclass_id, he_subclass_id, he_progif_id, he_vendor_id,
- he_device_id, he_subvendor_id, he_subdevice_id, he_rev_id, he_detail_ccw_data_cu_model
-};
-
-static char *hddb_entry_strings[] = {
- "other", "bus.id", "baseclass.id", "subclass.id", "progif.id",
- "vendor.id", "device.id", "subvendor.id", "subdevice.id", "rev.id",
- "bus.name", "baseclass.name", "subclass.name", "progif.name",
- "vendor.name", "device.name", "subvendor.name", "subdevice.name",
- "rev.name", "serial", "driver", "requires",
- "detail.ccw.data.cu_model",
- "class.id", "driver.module.insmod", "driver.module.modprobe",
- "driver.module.config", "driver.xfree", "driver.xfree.config",
- "driver.mouse", "driver.display", "driver.any"
-};
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdarg.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hdp.h"
-#include "hddb.h"
-#include "smbios.h"
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * This module provides a function that prints a hardware entry.
- * This is useful for debugging or to provide the user with some fancy info.
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifndef LIBHD_TINY
-
-#define dump_line(x0, x1...) fprintf(f, "%*s" x0, ind, "", x1)
-#define dump_line_str(x0...) fprintf(f, "%*s%s", ind, "", x0)
-#define dump_line0(x0...) fprintf(f, x0)
-
-static int ind = 0; /* output indentation */
-
-static void dump_normal(hd_data_t *, hd_t *, FILE *);
-static void dump_cpu(hd_data_t *, hd_t *, FILE *);
-static void dump_bios(hd_data_t *, hd_t *, FILE *);
-static void dump_prom(hd_data_t *, hd_t *, FILE *);
-static void dump_sys(hd_data_t *, hd_t *, FILE *);
-
-static char *dump_hid(hd_data_t *hd_data, hd_id_t *hid, int format, char *buf, int buf_size);
-static char *dump_hid2(hd_data_t *hd_data, hd_id_t *hid1, hd_id_t *hid2, char *buf, int buf_size);
-static char *print_dev_num(hd_dev_num_t *d);
-
-/*
- * Dump a hardware entry to FILE *f.
- */
-void hd_dump_entry(hd_data_t *hd_data, hd_t *h, FILE *f)
-{
- char *s, *a0, *a1, *a2, *s1, *s2;
- char buf1[32], buf2[32];
- hd_t *hd_tmp;
- int i, j;
- str_list_t *sl;
-
-#ifdef LIBHD_MEMCHECK
- {
- if(libhd_log)
- fprintf(libhd_log, "; %s\t%p\t%p\n", __FUNCTION__, CALLED_FROM(hd_dump_entry, hd_data), hd_data);
- }
-#endif
-
- if(!h) return;
-
- s = "";
- if(h->is.agp) s = "(AGP)";
- // pci_flag_pm: dump_line0(", supports PM");
- if(h->is.isapnp) s = "(PnP)";
-
- a0 = h->bus.name;
- a2 = NULL;
- a1 = h->sub_class.name ?: h->base_class.name;
- if(a1 && h->prog_if.name) {
- str_printf(&a2, 0, "%s (%s)", a1, h->prog_if.name);
- }
- else {
- a2 = new_str(a1 ?: "?");
- }
- dump_line(
- "%02d: %s%s %02x.%x: %02x%02x %s\n",
- h->idx, a0 ? a0 : "?", s, h->slot, h->func,
- h->base_class.id, h->sub_class.id, a2
- );
-
- ind += 2;
-
- if((hd_data->debug & HD_DEB_CREATION)) {
- s = mod_name_by_idx(h->module);
- if(!s) sprintf(s = buf1, "%u", h->module);
- if(h->count)
- sprintf(buf2, ".%u", h->count);
- else
- *buf2 = 0;
- dump_line("[Created at %s.%u%s]\n", s, h->line, buf2);
- }
-
- if(hd_data->flags.dformat == 1) {
- dump_line("ClassName: \"%s\"\n", a2);
- dump_line("Bus: %d\n", h->slot >> 8);
- dump_line("Slot: %d\n", h->slot & 0xff);
- dump_line("Function: %d\n", h->func);
- }
-
- a2 = free_mem(a2);
-
- if((hd_data->debug & HD_DEB_CREATION) && h->unique_id) {
- dump_line("Unique ID: %s\n", h->unique_id);
- }
-
- if(hd_data->debug == -1u && h->old_unique_id) {
- dump_line("Old Unique ID: %s\n", h->old_unique_id);
- }
-
- if((hd_data->debug & HD_DEB_CREATION) && h->parent_id) {
- dump_line("Parent ID: %s\n", h->parent_id);
- }
-
- if(hd_data->debug == -1u && h->child_ids) {
- s = hd_join(", ", h->child_ids);
- dump_line("Child IDs: %s\n", s);
- s = free_mem(s);
- }
-
- if(h->sysfs_id) {
- dump_line("SysFS ID: %s\n", h->sysfs_id);
- }
-
- if(h->sysfs_bus_id) {
- dump_line("SysFS BusID: %s\n", h->sysfs_bus_id);
- }
-
- if(h->sysfs_device_link) {
- dump_line("SysFS Device Link: %s\n", h->sysfs_device_link);
- }
-
- if(h->hw_class && (s = hd_hw_item_name(h->hw_class))) {
- dump_line("Hardware Class: %s\n", s);
- }
-
- if(hd_data->debug == -1u) {
- for(i = j = 0; i < (int) hw_all; i++) {
- if(i != hw_unknown && hd_is_hw_class(h, i) && (s = hd_hw_item_name(i))) {
- if(!j) {
- dump_line("HW Class List: %s", s);
- }
- else {
- dump_line0(", %s", s);
- }
- j = 1;
- }
- }
- if(j) dump_line0("\n");
- }
-
- if(h->base_class.id == bc_internal && h->sub_class.id == sc_int_cpu) {
- dump_cpu(hd_data, h, f);
- }
- else if(h->base_class.id == bc_internal && h->sub_class.id == sc_int_bios) {
- dump_bios(hd_data, h, f);
- }
- else if(h->base_class.id == bc_internal && h->sub_class.id == sc_int_prom) {
- dump_prom(hd_data, h, f);
- }
- else {
- dump_normal(hd_data, h, f);
- }
-
- s1 = s2 = NULL;
- if(h->is.notready) {
- if(h->base_class.id == bc_storage_device) {
- s1 = "no medium";
- }
- else {
- s1 = "not configured";
- }
- }
- if(h->is.softraiddisk) s2 = "soft raid";
- if(!s1) { s1 = s2; s2 = NULL; }
-
- if(s1) {
- dump_line("Drive status: %s%s%s\n", s1, s2 ? ", " : "", s2 ?: "");
- }
-
- if(h->extra_info) {
- dump_line_str("Extra Info: ");
- for(i = 0, sl = h->extra_info; sl; sl = sl->next) {
- dump_line0("%s%s", i ? ", " : "", sl->str);
- i = 1;
- }
- dump_line0("\n");
- }
-
- if(
- hd_data->debug && (
- h->status.configured ||
- h->status.available ||
- h->status.needed ||
- h->status.active ||
- h->status.invalid ||
- h->is.manual
- )
- ) {
- dump_line_str("Config Status: ");
- i = 0;
-
- if(h->status.invalid) {
- dump_line0("invalid");
- i++;
- }
-
- if(h->is.manual) {
- dump_line0("%smanual", i ? ", " : "");
- i++;
- }
-
- if(h->status.configured && (s = hd_status_value_name(h->status.configured))) {
- dump_line0("%scfg=%s", i ? ", " : "", s);
- i++;
- }
-
- if(h->status.available && (s = hd_status_value_name(h->status.available))) {
- dump_line0("%savail=%s", i ? ", " : "", s);
- i++;
- }
-
- if(h->status.needed && (s = hd_status_value_name(h->status.needed))) {
- dump_line0("%sneed=%s", i ? ", " : "", s);
- i++;
- }
-
- if(h->status.active && (s = hd_status_value_name(h->status.active))) {
- dump_line0("%sactive=%s", i ? ", " : "", s);
- i++;
- }
-
- dump_line0("\n");
- }
-
- if(hd_data->debug == -1u && h->config_string) {
- dump_line("Configured as: \"%s\"\n", h->config_string);
- }
-
- if(
- h->attached_to &&
- (hd_tmp = hd_get_device_by_idx(hd_data, h->attached_to))
- ) {
- s = hd_tmp->sub_class.name ?: hd_tmp->base_class.name;
- dump_line("Attached to: #%u (%s)\n", h->attached_to, s ?: "?");
- }
-
- if(h->detail && h->detail->ccw.type==hd_detail_ccw)
- {
- dump_line("LCSS: %x.%x\n",h->detail->ccw.data->lcss >> 8, h->detail->ccw.data->lcss & 0xf);
- dump_line("CU Model: 0x%x\n",h->detail->ccw.data->cu_model);
- dump_line("Device Model: 0x%x\n",h->detail->ccw.data->dev_model);
- }
-
-#if defined(__s390__) || defined(__s390x__)
- if(h->detail && h->detail->scsi.type==hd_detail_scsi)
- {
- if(h->detail->scsi.data->wwpn != (uint64_t)-1)
- dump_line("WWPN: 0x%llx\n",(unsigned long long)h->detail->scsi.data->wwpn);
- if(h->detail->scsi.data->wwpn != (uint64_t)-1)
- dump_line("FCP LUN: 0x%llx\n",(unsigned long long)h->detail->scsi.data->fcp_lun);
- dump_line("SCSI Host CCW ID: %s\n",h->detail->scsi.data->controller_id);
- }
-#endif
-
- if(
- h->base_class.id == bc_storage_device &&
- h->sub_class.id == sc_sdev_cdrom &&
- h->detail &&
- h->detail->type == hd_detail_cdrom &&
- h->detail->cdrom.data
- ) {
- cdrom_info_t *ci = h->detail->cdrom.data;
-
- if(ci->speed) {
- dump_line("Drive Speed: %u\n", ci->speed);
- }
-
- if(ci->iso9660.ok) {
- if(ci->iso9660.volume) dump_line("Volume ID: \"%s\"\n", ci->iso9660.volume);
- if(ci->iso9660.application) dump_line("Application: \"%s\"\n", ci->iso9660.application);
- if(ci->iso9660.publisher) dump_line("Publisher: \"%s\"\n", ci->iso9660.publisher);
- if(ci->iso9660.preparer) dump_line("Preparer: \"%s\"\n", ci->iso9660.preparer);
- if(ci->iso9660.creation_date) dump_line("Creation date: \"%s\"\n", ci->iso9660.creation_date);
- }
-#if 0
- else {
- if(ci->cdrom) {
- dump_line_str("Drive status: non-ISO9660 cdrom\n");
- }
- else {
- dump_line_str("Drive status: no cdrom found\n");
- }
- }
-#endif
- if(ci->el_torito.ok) {
- dump_line(
- "El Torito info: platform %u, %sbootable\n",
- ci->el_torito.platform,
- ci->el_torito.bootable ? "" : "not "
- );
- dump_line(" Boot Catalog: at sector 0x%04x\n", ci->el_torito.catalog);
- if(ci->el_torito.id_string) dump_line(" Id String: \"%s\"\n", ci->el_torito.id_string);
- if(ci->el_torito.label) dump_line(" Volume Label: \"%s\"\n", ci->el_torito.label);
- {
- static char *media[] = {
- "none", "1.2MB Floppy", "1.44MB Floppy", "2.88MB Floppy", "Hard Disk"
- };
- dump_line(
- " Media: %s starting at sector 0x%04x\n",
- media[ci->el_torito.media_type < sizeof media / sizeof *media ? ci->el_torito.media_type : 0],
- ci->el_torito.start
- );
- }
- if(ci->el_torito.geo.size) dump_line(
- " Geometry (CHS): %u/%u/%u (%u blocks)\n",
- ci->el_torito.geo.c, ci->el_torito.geo.h, ci->el_torito.geo.s, ci->el_torito.geo.size
- );
- dump_line(" Load: %u bytes", ci->el_torito.load_count * 0x200);
- if(ci->el_torito.load_address) {
- dump_line0(" at 0x%04x\n", ci->el_torito.load_address);
- }
- else {
- dump_line0("\n");
- }
- }
- }
-
-#if 0
- if(
- h->base_class.id == bc_storage_device &&
- h->sub_class.id == sc_sdev_floppy &&
- h->detail &&
- h->detail->type == hd_detail_floppy
- ) {
- floppy_info_t *fi = h->detail->floppy.data;
-
- if(fi) {
- dump_line_str("Drive status: floppy found\n");
- }
- else {
- dump_line_str("Drive status: no floppy found\n");
- }
- }
-#endif
-
- ind -= 2;
-
- if(h->next) dump_line_str("\n");
-}
-
-
-/*
- * print 'normal' hardware entries
- */
-void dump_normal(hd_data_t *hd_data, hd_t *h, FILE *f)
-{
- int i, j;
- char *s;
- uint64_t u64;
- hd_res_t *res;
- char buf[256], c0, c1;
- driver_info_t *di;
- str_list_t *sl, *sl1, *sl2;
- isdn_parm_t *ip;
- static char *geo_type_str[] = { "Physical", "Logical", "BIOS EDD", "BIOS Legacy" };
-
- if(h->model) dump_line("Model: \"%s\"\n", h->model);
-
- s = NULL;
- switch(h->hotplug) {
- case hp_none:
- break;
- case hp_pcmcia:
- s = "PCMCIA";
- break;
- case hp_cardbus:
- s = "CardBus";
- break;
- case hp_pci:
- s = "PCI";
- break;
- case hp_usb:
- s = "USB";
- break;
- case hp_ieee1394:
- s = "IEEE1394 (FireWire)";
- break;
- }
-
- if(s) {
- dump_line("Hotplug: %s\n", s);
- }
-
- if(
- (h->hotplug == hp_pcmcia || h->hotplug == hp_cardbus) &&
- h->hotplug_slot
- ) {
- dump_line("Socket: %u\n", h->hotplug_slot - 1);
- }
-
- if(h->vendor.id || h->vendor.name || h->device.id || h->device.name) {
- if(h->vendor.id || h->vendor.name) {
- dump_line("Vendor: %s\n", dump_hid(hd_data, &h->vendor, 1, buf, sizeof buf));
- }
- dump_line("Device: %s\n", dump_hid(hd_data, &h->device, 0, buf, sizeof buf));
- }
-
- if(h->sub_vendor.id || h->sub_device.id || h->sub_device.name || h->sub_vendor.name) {
- if(h->sub_vendor.id || h->sub_vendor.name || h->sub_device.id) {
- dump_line("SubVendor: %s\n", dump_hid(hd_data, &h->sub_vendor, 1, buf, sizeof buf));
- }
- dump_line("SubDevice: %s\n", dump_hid(hd_data, &h->sub_device, 0, buf, sizeof buf));
- }
-
- if(h->revision.name) {
- dump_line("Revision: \"%s\"\n", h->revision.name);
- }
- else if(h->revision.id) {
- dump_line("Revision: 0x%02x\n", h->revision.id);
- }
-
- if(h->serial) {
- dump_line("Serial ID: \"%s\"\n", h->serial);
- }
-
- if(h->usb_guid) {
- dump_line("USB GUID: %s\n", h->usb_guid);
- }
-
- if(h->compat_vendor.id || h->compat_device.id) {
- dump_line(
- "Compatible to: %s\n",
- dump_hid2(hd_data, &h->compat_vendor, &h->compat_device, buf, sizeof buf)
- );
- }
-
- if(h->base_class.id == bc_internal && h->sub_class.id == sc_int_sys) {
- dump_sys(hd_data, h, f);
- }
-
- if(h->drivers) {
- s = hd_join("\", \"", h->drivers);
- dump_line("Driver: \"%s\"\n", s);
- s = free_mem(s);
- }
-
- if(h->broken) {
- dump_line_str("Warning: might be broken\n");
- }
-
- if(hd_data->flags.dformat == 1) {
- if(h->unix_dev_name) {
- dump_line("Device File: %s\n", h->unix_dev_name);
- }
- if(h->unix_dev_name2) {
- dump_line("Alternative Device File: %s\n", h->unix_dev_name2);
- }
- }
- else {
- s = h->unix_dev_name;
- if(!s) s = h->unix_dev_name2;
- if(s) {
- dump_line("Device File: %s", s);
- if(h->unix_dev_name2) {
- dump_line0(" (%s)", h->unix_dev_name2);
- }
- dump_line0("\n");
- }
-
- }
-
- /* only if there are more than one */
- if(h->unix_dev_names && h->unix_dev_names->next) {
- s = hd_join(", ", h->unix_dev_names);
- dump_line("Device Files: %s\n", s);
- s = free_mem(s);
- }
-
- if(h->unix_dev_num.type) {
- dump_line("Device Number: %s", print_dev_num(&h->unix_dev_num));
- if(h->unix_dev_num2.type) {
- dump_line0(" (%s)", print_dev_num(&h->unix_dev_num2));
- }
- dump_line0("\n");
- }
-
- if(h->rom_id) {
-#if defined(__i386__) || defined (__x86_64__)
- dump_line("BIOS id: %s\n", h->rom_id);
-#endif
-#if defined(__PPC__) || defined(__sparc__)
- dump_line("PROM id: %s\n", h->rom_id);
-#endif
-#if defined(__s390__) || defined(__s390x__)
- dump_line("IUCV user: %s\n", h->rom_id);
-#endif
- }
-
- if(h->tag.ser_skip) {
- dump_line_str("Tags: ser_skip\n");
- }
-
- if(
- h->is.zip ||
- h->is.cdr || h->is.cdrw || h->is.dvd ||
- h->is.dvdr || h->is.dvdram || h->is.pppoe || h->is.wlan
- ) {
- dump_line_str("Features:");
- i = 0;
- if(h->is.zip) dump_line0("%s ZIP", i++ ? "," : "");
- if(h->is.cdr) dump_line0("%s CD-R", i++ ? "," : "");
- if(h->is.cdrw) dump_line0("%s CD-RW", i++ ? "," : "");
- if(h->is.dvd) dump_line0("%s DVD", i++ ? "," : "");
- if(h->is.dvdr) dump_line0("%s DVD-R", i++ ? "," : "");
- if(h->is.dvdram) dump_line0("%s DVDRAM", i++ ? "," : "");
- if(h->is.pppoe) dump_line0("%s PPPOE", i++ ? "," : "");
- if(h->is.wlan) dump_line0("%s WLAN", i++ ? "," : "");
- dump_line0("\n");
- }
-
- for(res = h->res; res; res = res->next) {
- switch(res->any.type) {
- case res_phys_mem:
- u64 = res->phys_mem.range >> 10;
- c0 = 'M'; c1 = 'k';
- if(u64 >> 20) {
- u64 >>= 10;
- c0 = 'G'; c1 = 'M';
- }
- if((u64 & 0x3ff)) {
- dump_line("Memory Size: %"PRId64" %cB + %"PRId64" %cB\n", u64 >> 10, c0, u64 & 0x3ff, c1);
- }
- else {
- dump_line("Memory Size: %"PRId64" %cB\n", u64 >> 10, c0);
- }
- break;
-
- case res_mem:
- *(s = buf) = 0;
- strcat(buf, res->mem.access == acc_rw ? "rw" : res->mem.access == acc_ro ? "ro" : "wo");
- strcat(buf, res->mem.prefetch == flag_yes ? ",prefetchable" : res->mem.prefetch == flag_no ? ",non-prefetchable" : "");
- if(!res->mem.enabled) strcat(buf, ",disabled");
- if(*s == ',') s++;
- if(res->mem.range) {
- dump_line(
- "Memory Range: 0x%08"PRIx64"-0x%08"PRIx64" (%s)\n",
- res->mem.base, res->mem.base + res->mem.range - 1, s
- );
- }
- else {
- dump_line("Memory Range: 0x%08"PRIx64"-??? (%s)\n", res->mem.base, s);
- }
- break;
-
- case res_io:
- *(s = buf) = 0;
- strcat(buf, res->io.access == acc_rw ? "rw" : res->io.access == acc_ro ? "ro" : "wo");
- if(!res->io.enabled) strcat(buf, ",disabled");
- if(*s == ',') s++;
- if(res->io.range == 0) {
- dump_line("I/O Ports: 0x%02"PRIx64"-??? (%s)\n", res->io.base, s);
- }
- else if(res->io.range == 1) {
- dump_line("I/O Port: 0x%02"PRIx64" (%s)\n", res->io.base, s);
- }
- else {
- dump_line("I/O Ports: 0x%02"PRIx64"-0x%02"PRIx64" (%s)\n", res->io.base, res->io.base + res->io.range -1, s);
- }
- break;
-
- case res_irq:
- *(s = buf) = 0;
- switch(res->irq.triggered) {
- case 0:
- strcpy(s, "no events");
- break;
-
- case 1:
- strcpy(s, "1 event");
- break;
-
- default:
- sprintf(s, "%u events", res->irq.triggered);
- }
- if(!res->irq.enabled) {
- if(res->irq.triggered)
- strcat(s, ",");
- else
- *s = 0;
- strcat(s, "disabled");
- }
- dump_line("IRQ: %u (%s)\n", res->irq.base, s);
- break;
-
- case res_dma:
- *(s = buf) = 0;
- if(!res->dma.enabled) strcpy(buf, " (disabled)");
- dump_line("DMA: %u%s\n", res->dma.base, s);
- break;
-
- case res_monitor:
- dump_line(
- "Resolution: %ux%u@%uHz%s\n",
- res->monitor.width, res->monitor.height, res->monitor.vfreq,
- res->monitor.interlaced ? " (interlaced)" : ""
- );
- break;
-
- case res_size:
- {
- char *s, b0[64], b1[64];
-
- switch(res->size.unit) {
- case size_unit_cinch:
- s = "''";
- snprintf(b0, sizeof b0 - 1, "%s", float2str(res->size.val1, 2));
- snprintf(b1, sizeof b1 - 1, "%s", float2str(res->size.val2, 2));
- break;
-
- default:
- switch(res->size.unit) {
- case size_unit_cm:
- s = "cm";
- break;
- case size_unit_sectors:
- s = "sectors";
- break;
- case size_unit_kbyte:
- s = "kByte";
- break;
- default:
- s = "some unit";
- }
- snprintf(b0, sizeof b0 - 1, "%"PRIu64, res->size.val1);
- snprintf(b1, sizeof b1 - 1, "%"PRIu64, res->size.val2);
- }
- if(!res->size.val2)
- dump_line("Size: %s %s\n", b0, s);
- else if(res->size.unit == size_unit_sectors)
- dump_line("Size: %s %s a %s bytes\n", b0, s, b1);
- else
- dump_line("Size: %sx%s %s\n", b0, b1, s);
- }
- break;
-
- case res_disk_geo:
- s = res->disk_geo.geotype < sizeof geo_type_str / sizeof *geo_type_str ?
- geo_type_str[res->disk_geo.geotype] : "";
- dump_line(
- "Geometry (%s): CHS %u/%u/%u\n", s,
- res->disk_geo.cyls, res->disk_geo.heads, res->disk_geo.sectors
- );
- if(res->disk_geo.size) {
- dump_line("Size (%s): %"PRIu64" sectors\n", s, res->disk_geo.size);
- }
- break;
-
- case res_cache:
- dump_line("Cache: %u kb\n", res->cache.size);
- break;
-
- case res_baud:
- if(res->baud.speed == 0 || res->baud.speed % 100) {
- dump_line("Speed: %u bps\n", res->baud.speed);
- }
- else if(res->baud.speed % 100000) {
- dump_line("Speed: %s kbps\n", float2str(res->baud.speed, 3));
- }
- else {
- dump_line("Speed: %s Mbps\n", float2str(res->baud.speed, 6));
- }
- if(res->baud.bits || res->baud.stopbits || res->baud.parity || res->baud.handshake) {
- int i = 0;
-
- dump_line_str("Config: ");
- if(res->baud.bits) {
- dump_line0("%u bits", res->baud.bits);
- i++;
- }
- if(res->baud.parity) {
- dump_line0("%sparity %c", i++ ? ", " : "", res->baud.parity);
- }
- if(res->baud.stopbits) {
- dump_line0("%s%u stopbits", i++ ? ", " : "", res->baud.stopbits);
- }
- if(res->baud.handshake) {
- dump_line0("%shandshake %c", i++ ? ", " : "", res->baud.handshake);
- }
- dump_line0("\n");
- }
- break;
-
- case res_init_strings:
- if(res->init_strings.init1) dump_line("Init1: %s\n", res->init_strings.init1);
- if(res->init_strings.init2) dump_line("Init2: %s\n", res->init_strings.init2);
- break;
-
- case res_pppd_option:
- dump_line("PPPD Option: %s\n", res->pppd_option.option);
- break;
-
- case res_framebuffer:
- dump_line("Mode 0x%04x: %ux%u (+%u), %u bits\n",
- res->framebuffer.mode,
- res->framebuffer.width,
- res->framebuffer.height,
- res->framebuffer.bytes_p_line,
- res->framebuffer.colorbits
- );
- break;
-
- case res_hwaddr:
- dump_line("HW Address: %s\n", res->hwaddr.addr);
- break;
-
- case res_link:
- dump_line("Link detected: %s\n", res->link.state ? "yes" : "no");
- break;
-
- case res_wlan:
- if(res->wlan.channels) {
- str_list_t *ptr = res->wlan.channels;
- dump_line("WLAN channels: %s", ptr->str);
- while((ptr=ptr->next)) dump_line0(" %s", ptr->str);
- dump_line0("\n");
- }
- if(res->wlan.frequencies) {
- str_list_t *ptr = res->wlan.frequencies;
- dump_line("WLAN frequencies: %s", ptr->str);
- while((ptr=ptr->next)) dump_line0(" %s", ptr->str);
- dump_line0("\n");
- }
- if(res->wlan.bitrates) {
- str_list_t *ptr = res->wlan.bitrates;
- dump_line("WLAN bitrates: %s", ptr->str);
- while((ptr=ptr->next)) dump_line0(" %s", ptr->str);
- dump_line0("\n");
- }
- if(res->wlan.enc_modes) {
- str_list_t *ptr = res->wlan.enc_modes;
- dump_line("WLAN encryption modes: %s", ptr->str);
- while((ptr=ptr->next)) dump_line0(" %s", ptr->str);
- dump_line0("\n");
- }
- if(res->wlan.auth_modes) {
- str_list_t *ptr = res->wlan.auth_modes;
- dump_line("WLAN authentication modes: %s", ptr->str);
- while((ptr=ptr->next)) dump_line0(" %s", ptr->str);
- dump_line0("\n");
- }
- break;
-
-
- default:
- dump_line("Unknown resource type %d\n", res->any.type);
- }
- }
-
- if((sl = h->requires)) {
- dump_line("Requires: %s", sl->str);
- for(sl = sl->next; sl; sl = sl->next) {
- dump_line0(", %s", sl->str);
- }
- dump_line0("\n");
- }
-
- for(di = h->driver_info, i = 0; di; di = di->next, i++) {
- dump_line("Driver Info #%d:\n", i);
- ind += 2;
- switch(di->any.type) {
- case di_any:
- dump_line_str("Driver Info:");
- for(sl = di->any.hddb0, j = 0; sl; sl = sl->next, j++) {
- dump_line0("%c%s", j ? ',' : ' ', sl->str);
- }
- dump_line0("\n");
- break;
-
- case di_display:
- if(di->display.width)
- dump_line("Max. Resolution: %ux%u\n", di->display.width, di->display.height);
- if(di->display.min_vsync)
- dump_line("Vert. Sync Range: %u-%u Hz\n", di->display.min_vsync, di->display.max_vsync);
- if(di->display.min_hsync)
- dump_line("Hor. Sync Range: %u-%u kHz\n", di->display.min_hsync, di->display.max_hsync);
- if(di->display.bandwidth)
- dump_line("Bandwidth: %u MHz\n", di->display.bandwidth);
- break;
-
- case di_module:
- dump_line_str("Driver Status: ");
- for(sl1 = di->module.names; sl1; sl1 = sl1->next) {
- dump_line0("%s%c", sl1->str, sl1->next ? ',' : ' ');
- }
- dump_line0("%s %sactive\n",
- di->module.names->next ? "are" : "is",
- di->module.active ? "" : "not "
- );
-
- dump_line_str("Driver Activation Cmd: \"");
- for(sl1 = di->module.names, sl2 = di->module.mod_args; sl1 && sl2; sl1 = sl1->next, sl2 = sl2->next) {
- dump_line0("%s %s%s%s%s",
- di->module.modprobe ? "modprobe" : "insmod",
- sl1->str,
- sl2->str ? " " : "",
- sl2->str ? sl2->str : "",
- (sl1->next && sl2->next) ? "; " : ""
- );
- }
-
- dump_line0("\"\n");
-
- if(di->module.conf) {
- char *s = di->module.conf;
-
- dump_line_str("Driver \"modules.conf\" Entry: \"");
- for(; *s; s++) {
- if(isprint(*s)) {
- dump_line0("%c", *s);
- }
- else {
- switch(*s) {
- case '\n': dump_line0("\\n"); break;
- case '\r': dump_line0("\\r"); break;
- case '\t': dump_line0("\t"); break; /* *no* typo! */
- default: dump_line0("\\%03o", *s);
- }
- }
- }
- dump_line0("\"\n");
- }
- break;
-
- case di_mouse:
- if(di->mouse.buttons >= 0) dump_line("Buttons: %d\n", di->mouse.buttons);
- if(di->mouse.wheels >= 0) dump_line("Wheels: %d\n", di->mouse.wheels);
- if(di->mouse.xf86) dump_line("XFree86 Protocol: %s\n", di->mouse.xf86);
- if(di->mouse.gpm) dump_line("GPM Protocol: %s\n", di->mouse.gpm);
- break;
-
- case di_x11:
- if(di->x11.server) {
- dump_line(
- "XFree86 v%s Server%s: %s\n",
- di->x11.xf86_ver, strcmp(di->x11.xf86_ver, "4") ? "" : " Module", di->x11.server
- );
- }
- if(di->x11.x3d) dump_line_str("3D Support: yes\n");
- if(di->x11.script) dump_line("3D Script: %s\n", di->x11.script);
- if(di->x11.colors.all) {
- dump_line_str("Color Depths: ");
- j = 0;
- if(di->x11.colors.c8) { dump_line0("8"); j++; }
- if(di->x11.colors.c15) { if(j) dump_line0(", "); dump_line0("15"); j++; }
- if(di->x11.colors.c16) { if(j) dump_line0(", "); dump_line0("16"); j++; }
- if(di->x11.colors.c24) { if(j) dump_line0(", "); dump_line0("24"); j++; }
- if(di->x11.colors.c32) { if(j) dump_line0(", "); dump_line0("32"); j++; }
- dump_line0("\n");
- }
- if(di->x11.dacspeed) dump_line("Max. DAC Clock: %u MHz\n", di->x11.dacspeed);
- if(di->x11.extensions) {
- dump_line("Extensions: %s", di->x11.extensions->str);
- for(sl = di->x11.extensions->next; sl; sl = sl->next) {
- dump_line0(", %s", sl->str);
- }
- dump_line0("\n");
- }
- if(di->x11.options) {
- dump_line("Options: %s", di->x11.options->str);
- for(sl = di->x11.options->next; sl; sl = sl->next) {
- dump_line0(", %s", sl->str);
- }
- dump_line0("\n");
- }
- if(di->x11.raw) {
- dump_line("XF86Config Entry: %s", di->x11.raw->str);
- for(sl = di->x11.raw->next; sl; sl = sl->next) {
- dump_line0("\\n%s", sl->str);
- }
- dump_line0("\n");
- }
- break;
-
- case di_isdn:
- dump_line(
- "I4L Type: %d/%d [%s]\n",
- di->isdn.i4l_type, di->isdn.i4l_subtype, di->isdn.i4l_name
- );
- if((ip = di->isdn.params)) {
- int k, l;
-
- dump_line_str("Parameter:\n");
- for(k = 0; ip; ip = ip->next, k++) {
- dump_line(
- " %d%s: (0x%x/%02x): %s = 0x%"PRIx64,
- k, ip->conflict ? "(conflict)" : ip->valid ? "" : "(invalid)",
- ip->type, ip->flags >> 8, ip->name, ip->value
- );
- if(ip->alt_values) {
- for(l = 0; l < ip->alt_values; l++) {
- dump_line0(
- "%s%s0x%x", l ? "," : " [",
- ip->alt_value[l] == ip->def_value ? "*" : "",
- ip->alt_value[l]
- );
- }
- dump_line0("]");
- }
- dump_line0("\n");
- }
- }
- break;
-
- case di_dsl:
- dump_line(
- "DSL Mode: %s\n",
- di->dsl.mode
- );
- dump_line(
- "Driver: %s\n",
- di->dsl.name
- );
- break;
-
- case di_kbd:
- if(di->kbd.XkbRules) dump_line("XkbRules: %s\n", di->kbd.XkbRules);
- if(di->kbd.XkbModel) dump_line("XkbModel: %s\n", di->kbd.XkbModel);
- if(di->kbd.XkbLayout) dump_line("XkbLayout: %s\n", di->kbd.XkbLayout);
- if(di->kbd.keymap) dump_line("keymap: %s\n", di->kbd.keymap);
- break;
-
- default:
- dump_line_str("Driver Status: unknown driver info format\n");
- }
-
- if((hd_data->debug & HD_DEB_DRIVER_INFO)) {
- for(sl = di->any.hddb0, j = 0; sl; sl = sl->next, j++) {
- if(j) {
- dump_line0("|%s", sl->str);
- }
- else {
- dump_line("Driver DB0: %d, %s", di->any.type, sl->str);
- }
- }
- if(di->any.hddb0) dump_line0("\n");
-
- for(sl = di->any.hddb1, j = 0; sl; sl = sl->next, j++) {
- if(!j) dump_line_str("Driver DB1: \"");
- dump_line0("%s\\n", sl->str);
- }
- if(di->any.hddb1) dump_line0("\"\n");
- }
-
- ind -= 2;
- }
-}
-
-/*
- * print CPU entries
- */
-void dump_cpu(hd_data_t *hd_data, hd_t *hd, FILE *f)
-{
- cpu_info_t *ct;
- str_list_t *sl;
-
- if(!hd->detail || hd->detail->type != hd_detail_cpu) return;
- if(!(ct = hd->detail->cpu.data)) return;
-
- dump_line0 (" Arch: ");
- switch (ct->architecture) {
- case arch_intel:
- dump_line0 ("Intel\n");
- break;
- case arch_alpha:
- dump_line0 ("Alpha\n");
- break;
- case arch_sparc:
- dump_line0 ("Sparc (32)\n");
- break;
- case arch_sparc64:
- dump_line0 ("UltraSparc (64)\n");
- break;
- case arch_ppc:
- dump_line0 ("PowerPC\n");
- break;
- case arch_ppc64:
- dump_line0 ("PowerPC (64)\n");
- break;
- case arch_68k:
- dump_line0 ("68k\n");
- break;
- case arch_ia64:
- dump_line0 ("IA-64\n");
- break;
- case arch_s390:
- dump_line0 ("S390\n");
- break;
- case arch_s390x:
- dump_line0 ("S390x\n");
- break;
- case arch_arm:
- dump_line0 ("ARM\n");
- break;
- case arch_mips:
- dump_line0 ("MIPS\n");
- break;
- case arch_x86_64:
- dump_line0 ("X86-64\n");
- break;
- default:
- dump_line0 ("**UNKNWON**\n");
- break;
- }
-
- if(ct->vend_name) dump_line("Vendor: \"%s\"\n", ct->vend_name);
-
- if(ct->model_name)
- dump_line(
- "Model: %u.%u.%u \"%s\"\n",
- ct->family, ct->model, ct->stepping, ct->model_name
- );
-
- if(ct->platform) dump_line("Platform: \"%s\"\n", ct->platform);
-
- if(ct->features) {
- dump_line("Features: %s", ct->features->str);
- for(sl = ct->features->next; sl; sl = sl->next) {
- dump_line0(",%s", sl->str);
- }
- dump_line0("\n");
- }
-
- if(ct->clock) dump_line("Clock: %u MHz\n", ct->clock);
-
- if(ct->cache) dump_line("Cache: %u kb\n", ct->cache);
- if(ct->units) dump_line("Units/Processor: %u\n", ct->units);
-}
-
-
-/*
- * print BIOS entries
- */
-void dump_bios(hd_data_t *hd_data, hd_t *hd, FILE *f)
-{
- bios_info_t *bt;
-
- if(!hd->detail || hd->detail->type != hd_detail_bios) return;
- if(!(bt = hd->detail->bios.data)) return;
-
- if(bt->vbe_ver) {
- dump_line("VESA BIOS Version: %u.%u\n", bt->vbe_ver >> 8, bt->vbe_ver & 0xff);
- }
-
- if(bt->vbe_video_mem) {
- dump_line("Video Memory: %u kb\n", bt->vbe_video_mem >> 10);
- }
-
- if(bt->vbe.ok && bt->vbe.current_mode) {
- dump_line("Current VESA Mode: 0x%04x\n", bt->vbe.current_mode);
- }
-
- if(bt->apm_supported) {
- dump_line("APM Version: %u.%u\n", bt->apm_ver, bt->apm_subver);
- dump_line("APM Status: %s\n", bt->apm_enabled ? "on" : "off");
- dump_line("APM BIOS Flags: 0x%x\n", bt->apm_bios_flags);
- }
-
- if(bt->led.ok) {
- dump_line_str("BIOS Keyboard LED Status:\n");
- dump_line(" Scroll Lock: %s\n", bt->led.scroll_lock ? "on" : "off");
- dump_line(" Num Lock: %s\n", bt->led.num_lock ? "on" : "off");
- dump_line(" Caps Lock: %s\n", bt->led.caps_lock ? "on" : "off");
- }
-
- if(bt->ser_port0) dump_line("Serial Port 0: 0x%x\n", bt->ser_port0);
- if(bt->ser_port1) dump_line("Serial Port 1: 0x%x\n", bt->ser_port1);
- if(bt->ser_port2) dump_line("Serial Port 2: 0x%x\n", bt->ser_port2);
- if(bt->ser_port3) dump_line("Serial Port 3: 0x%x\n", bt->ser_port3);
-
- if(bt->par_port0) dump_line("Parallel Port 0: 0x%x\n", bt->par_port0);
- if(bt->par_port1) dump_line("Parallel Port 1: 0x%x\n", bt->par_port1);
- if(bt->par_port2) dump_line("Parallel Port 2: 0x%x\n", bt->par_port2);
-
- if(bt->low_mem_size) dump_line("Base Memory: %u kB\n", bt->low_mem_size >> 10);
-
- if(bt->is_pnp_bios) {
- char *s = isa_id2str(bt->pnp_id);
- dump_line("PnP BIOS: %s\n", s);
- free_mem(s);
- }
-
- if(bt->lba_support) {
- dump_line_str("BIOS: extended read supported\n");
- }
-
- if(bt->smp.ok) {
- dump_line("MP spec rev 1.%u info:\n", bt->smp.rev);
- dump_line(" OEM id: \"%s\"\n", bt->smp.oem_id);
- dump_line(" Product id: \"%s\"\n", bt->smp.prod_id);
- dump_line(" %u CPUs (%u disabled)\n", bt->smp.cpus, bt->smp.cpus - bt->smp.cpus_en);
- }
-
- if(bt->bios32.ok) {
- dump_line("BIOS32 Service Directory Entry: 0x%05x\n", bt->bios32.entry);
- }
-
- if(bt->smbios_ver) {
- dump_line("SMBIOS Version: %u.%u\n", bt->smbios_ver >> 8, bt->smbios_ver & 0xff);
- }
-
- smbios_dump(hd_data, f);
-}
-
-
-/*
- * print PROM entries
- */
-void dump_prom(hd_data_t *hd_data, hd_t *hd, FILE *f)
-{
- prom_info_t *pt;
- char *s;
-
- if(!hd->detail || hd->detail->type != hd_detail_prom) return;
- if(!(pt = hd->detail->prom.data)) return;
-
- if(pt->has_color) {
- // ###########################
- // s = hd_device_name(hd_data, MAKE_ID(TAG_SPECIAL, 0x0300), MAKE_ID(TAG_SPECIAL, pt->color));
- s = NULL;
- if(s)
- dump_line("Color: %s (0x%02x)\n", s, pt->color);
- else
- dump_line("Color: 0x%02x\n", pt->color);
- }
-}
-
-
-/*
- * print System entries
- */
-void dump_sys(hd_data_t *hd_data, hd_t *hd, FILE *f)
-{
- sys_info_t *st;
-
- if(!hd->detail || hd->detail->type != hd_detail_sys) return;
- if(!(st = hd->detail->sys.data)) return;
-
- if(st->system_type) {
- dump_line("SystemType: \"%s\"\n", st->system_type);
- }
- if(st->generation) {
- dump_line("Generation: \"%s\"\n", st->generation);
- }
-
- if(st->lang) {
- dump_line("Language: \"%s\"\n", st->lang);
- }
-}
-
-
-char *dump_hid(hd_data_t *hd_data, hd_id_t *hid, int format, char *buf, int buf_size)
-{
- char *s;
- int i;
- unsigned t, id;
-
- *buf = 0;
-
- if(hid->id) {
- t = ID_TAG(hid->id);
- id = ID_VALUE(hid->id);
-
- if(format && t == TAG_EISA) {
- snprintf(buf, buf_size - 1, "%s", eisa_vendor_str(id));
- }
- else {
- snprintf(buf, buf_size - 1, "%s0x%04x", hid_tag_name2(t), id);
- }
- }
-
- i = strlen(buf);
- if(i) {
- buf[i++] = ' ';
- buf[i] = 0;
- }
- s = buf + i;
- buf_size -= i;
-
- if(!buf_size) return buf;
-
- if(hid->name) {
- snprintf(s, buf_size - 1, "\"%s\"", hid->name);
- }
-
- return buf;
-}
-
-char *dump_hid2(hd_data_t *hd_data, hd_id_t *hid1, hd_id_t *hid2, char *buf, int buf_size)
-{
- char *s;
- int i;
- unsigned t, id1, id2;
-
- *buf = 0;
-
- t = 0;
- if(hid1->id) t = ID_TAG(hid1->id);
- if(hid2->id) t = ID_TAG(hid2->id);
-
- id1 = ID_VALUE(hid1->id);
- id2 = ID_VALUE(hid2->id);
-
- if(hid1->id || hid2->id) {
- if(t == TAG_EISA) {
- snprintf(buf, buf_size - 1, "%s 0x%04x", eisa_vendor_str(id1), id2);
- }
- else {
- snprintf(buf, buf_size - 1, "%s0x%04x 0x%04x", hid_tag_name2(t), id1, id2);
- }
- }
-
- i = strlen(buf);
- s = buf + i;
- buf_size -= i;
-
- if(!buf_size) return buf;
-
- if(hid2->name) {
- snprintf(s, buf_size - 1, " \"%s\"", hid2->name);
- }
-
- return buf;
-}
-
-
-char *print_dev_num(hd_dev_num_t *d)
-{
- static char *buf = NULL;
-
- if(d->type) {
- str_printf(&buf, 0, "%s %u:%u",
- d->type == 'b' ? "block" : "char",
- d->major, d->minor
- );
- if(d->range > 1) {
- str_printf(&buf, -1, "-%u:%u",
- d->major, d->minor + d->range - 1
- );
- }
- }
- else {
- str_printf(&buf, 0, "%s", "");
- }
-
- return buf;
-}
-
-
-#else /* ifndef LIBHD_TINY */
-
-void hd_dump_entry(hd_data_t *hd_data, hd_t *h, FILE *f) { }
-
-#endif /* ifndef LIBHD_TINY */
-
+++ /dev/null
- { 1024, 768, "IBM", "18305CU", NULL },
- { 1024, 768, "IBM", "1830BLU", NULL },
- { 1024, 768, "IBM", "1830H3U", NULL },
- { 1024, 768, "IBM", "1830PVU", NULL },
- { 1024, 768, "IBM", "18344AU", NULL },
- { 1024, 768, "IBM", "18344EU", NULL },
- { 1024, 768, "IBM", "183456U", NULL },
- { 1024, 768, "IBM", "18345BU", NULL },
- { 1024, 768, "IBM", "1834E7U", NULL },
- { 1024, 768, "IBM", "1834ELU", NULL },
- { 1024, 768, "IBM", "1834FKU", NULL },
- { 1024, 768, "IBM", "1834NEU", NULL },
- { 1024, 768, "IBM", "1836BAU", NULL },
- { 1024, 768, "IBM", "1836H7U", NULL },
- { 1024, 768, "IBM", "1836Q4U", NULL },
- { 1024, 768, "IBM", "18422QU", NULL },
- { 1024, 768, "IBM", "18422RU", NULL },
- { 1024, 768, "IBM", "1842G3U", NULL },
- { 1024, 768, "IBM", "1842G7U", NULL },
- { 1024, 768, "IBM", "1842GDU", NULL },
- { 1024, 768, "IBM", "1842GQU", NULL },
- { 1024, 768, "IBM", "1842GRU", NULL },
- { 1024, 768, "IBM", "1842HRU", NULL },
- { 1024, 768, "IBM", "1842PPU", NULL },
- { 1024, 768, "IBM", "185928U", NULL },
- { 1024, 768, "IBM", "18594YU", NULL },
- { 1024, 768, "IBM", "18595RU", NULL },
- { 1024, 768, "IBM", "23711CU", NULL },
- { 1024, 768, "IBM", "23716EU", NULL },
- { 1024, 768, "IBM", "23716FU", NULL },
- { 1024, 768, "IBM", "23716GU", NULL },
- { 1024, 768, "IBM", "23717GU", NULL },
- { 1024, 768, "IBM", "23718EU", NULL },
- { 1024, 768, "IBM", "237197U", NULL },
- { 1024, 768, "IBM", "2371A9U", NULL },
- { 1024, 768, "IBM", "2371GHU", NULL },
- { 1024, 768, "IBM", "23731FU", NULL },
- { 1024, 768, "IBM", "23731HU", NULL },
- { 1024, 768, "IBM", "23731WU", NULL },
- { 1024, 768, "IBM", "23734YU", NULL },
- { 1024, 768, "IBM", "23735TU", NULL },
- { 1024, 768, "IBM", "23736VU", NULL },
- { 1024, 768, "IBM", "23736YU", NULL },
- { 1024, 768, "IBM", "23737FU", NULL },
- { 1024, 768, "IBM", "2373J4U", NULL },
- { 1024, 768, "IBM", "2373JTU", NULL },
- { 1024, 768, "IBM", "2373K1U", NULL },
- { 1024, 768, "IBM", "2373L1U", NULL },
- { 1024, 768, "IBM", "23785UU", NULL },
- { 1024, 768, "IBM", "2378DGU", NULL },
- { 1024, 768, "IBM", "2378DHU", NULL },
- { 1024, 768, "IBM", "2378DTU", NULL },
- { 1024, 768, "IBM", "2378DUU", NULL },
- { 1024, 768, "IBM", "2378DWU", NULL },
- { 1024, 768, "IBM", "2378FTU", NULL },
- { 1024, 768, "IBM", "2378FZU", NULL },
- { 1024, 768, "IBM", "2378R1U", NULL },
- { 1024, 768, "IBM", "2378R4U", NULL },
- { 1024, 768, "IBM", "2378R8U", NULL },
- { 1024, 768, "IBM", "23795VU", NULL },
- { 1024, 768, "IBM", "2379DKU", NULL },
- { 1024, 768, "IBM", "2379DWU", NULL },
- { 1024, 768, "IBM", "2379R1U", NULL },
- { 1024, 768, "IBM", "2379R6U", NULL },
- { 1024, 768, "IBM", "2379R8U", NULL },
- { 1024, 768, "IBM", "23826UU", NULL },
- { 1024, 768, "IBM", "2382ECU", NULL },
- { 1024, 768, "IBM", "2382HCU", NULL },
- { 1024, 768, "IBM", "2384A9U", NULL },
- { 1024, 768, "IBM", "2384ATU", NULL },
- { 1024, 768, "IBM", "2384B9U", NULL },
- { 1024, 768, "IBM", "2384DLU", NULL },
- { 1024, 768, "IBM", "2384DWU", NULL },
- { 1024, 768, "IBM", "2384ECU", NULL },
- { 1024, 768, "IBM", "2384EHU", NULL },
- { 1024, 768, "IBM", "2384JCU", NULL },
- { 1024, 768, "IBM", "238613U", NULL },
- { 1024, 768, "IBM", "23861CU", NULL },
- { 1024, 768, "IBM", "23861ZU", NULL },
- { 1024, 768, "IBM", "23865FU", NULL },
- { 1024, 768, "IBM", "23866GU", NULL },
- { 1024, 768, "IBM", "23866RU", NULL },
- { 1024, 768, "IBM", "23866UU", NULL },
- { 1024, 768, "IBM", "23868EU", NULL },
- { 1024, 768, "IBM", "23868WU", NULL },
- { 1024, 768, "IBM", "2386A4U", NULL },
- { 1024, 768, "IBM", "2386E9U", NULL },
- { 1024, 768, "IBM", "23884QU", NULL },
- { 1024, 768, "IBM", "238852U", NULL },
- { 1024, 768, "IBM", "2388DGU", NULL },
- { 1024, 768, "IBM", "2388DMU", NULL },
- { 1024, 768, "IBM", "2388EJU", NULL },
- { 1024, 768, "IBM", "2388ENU", NULL },
- { 1024, 768, "IBM", "2388F4U", NULL },
- { 1024, 768, "IBM", "2388HBU", NULL },
- { 1024, 768, "IBM", "2388JBU", NULL },
- { 1024, 768, "IBM", "2389DHU", NULL },
- { 1024, 768, "IBM", "26284UG", NULL },
- { 1024, 768, "IBM", "26446AG", NULL },
- { 1024, 768, "IBM", "26455BG", NULL },
- { 1024, 768, "IBM", "264721G", NULL },
- { 1024, 768, "IBM", "26725KU", NULL },
- { 1024, 768, "IBM", "2672REU", NULL },
- { 1024, 768, "IBM", "2672RHU", NULL },
- { 1024, 768, "IBM", "267358U", NULL },
- { 1024, 768, "IBM", "26735KU", NULL },
- { 1024, 768, "IBM", "26817FU", NULL },
- { 1024, 768, "IBM", "2682PAU", NULL },
- { 1024, 768, "IBM", "2684FU4", NULL },
- { 1024, 768, "IBM", "2684KJU", NULL },
- { 1024, 768, "IBM", "2684QBU", NULL },
- { 1024, 768, "IBM", "27225JU", NULL },
- { 1024, 768, "IBM", "27233XU", NULL },
- { 1024, 768, "IBM", "288122U", NULL },
- { 1024, 768, "IBM", "288136U", NULL },
- { 1024, 768, "IBM", "288157U", NULL },
- { 1024, 768, "IBM", "28832ZU", NULL },
- { 1024, 768, "IBM", "28838QU", NULL },
- { 1024, 768, "IBM", "2883ARU", NULL },
- { 1024, 768, "IBM", "2883ELU", NULL },
- { 1024, 768, "IBM", "2883GKU", NULL },
- { 1024, 768, "IBM", "28854WU", NULL },
- { 1024, 768, "IBM", "2885PWU", NULL },
- { 1024, 768, "IBM", "28865TU", NULL },
- { 1024, 768, "IBM", "288692U", NULL },
- { 1024, 768, "IBM", "28872KU", NULL },
- { 1024, 768, "IBM", "288745U", NULL },
- { 1024, 768, "IBM", "288767U", NULL },
- { 1024, 768, "IBM", "28878PU", NULL },
- { 1024, 768, "IBM", "28885RU", NULL },
- { 1024, 768, "IBM", "2888M9U", NULL },
- { 1400, 1050, "IBM", "1830BQU", NULL },
- { 1400, 1050, "IBM", "18363SU", NULL },
- { 1400, 1050, "IBM", "1836H8U", NULL },
- { 1400, 1050, "IBM", "1836H9U", NULL },
- { 1400, 1050, "IBM", "1836HAU", NULL },
- { 1400, 1050, "IBM", "1836Q6U", NULL },
- { 1400, 1050, "IBM", "1836Q7U", NULL },
- { 1400, 1050, "IBM", "18594AU", NULL },
- { 1400, 1050, "IBM", "237394U", NULL },
- { 1400, 1050, "IBM", "23739FU", NULL },
- { 1400, 1050, "IBM", "2373G1U", NULL },
- { 1400, 1050, "IBM", "2373G3U", NULL },
- { 1400, 1050, "IBM", "2373GEU", NULL },
- { 1400, 1050, "IBM", "2373GGU", NULL },
- { 1400, 1050, "IBM", "2373GHG", NULL },
- { 1400, 1050, "IBM", "2373KTU", NULL },
- { 1400, 1050, "IBM", "2373KUU", NULL },
- { 1400, 1050, "IBM", "2373L4U", NULL },
- { 1400, 1050, "IBM", "2374GGG", NULL },
- { 1400, 1050, "IBM", "2378DXU", NULL },
- { 1400, 1050, "IBM", "2378FVU", NULL },
- { 1400, 1050, "IBM", "2379DJU", NULL },
- { 1400, 1050, "IBM", "2379DXU", NULL },
- { 1400, 1050, "IBM", "2379R9U", NULL },
- { 1400, 1050, "IBM", "23885DU", NULL },
- { 1400, 1050, "IBM", "2388F5U", NULL },
- { 1400, 1050, "IBM", "288678U", NULL },
- { 1400, 1050, "IBM", "288679U", NULL },
- { 1400, 1050, "IBM", "288693U", NULL },
- { 1600, 1200, "IBM", "183222U", NULL },
- { 1600, 1200, "IBM", "183223U", NULL },
- { 1600, 1200, "IBM", "2373HTU", NULL },
- { 1600, 1200, "IBM", "2373HVU", NULL },
- { 1600, 1200, "IBM", "2373KXU", NULL },
- { 1600, 1200, "IBM", "2373KYU", NULL },
- { 1600, 1200, "IBM", "2373Q1U", NULL },
- { 1600, 1200, "IBM", "2378DYU", NULL },
- { 1600, 1200, "IBM", "2379DYU", NULL },
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <linux/input.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "input.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * input devs
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static void get_input_devices(hd_data_t *hd_data);
-static char *all_bits(char *str);
-static int test_bit(char *str, unsigned bit);
-
-void hd_scan_input(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_input)) return;
-
- hd_data->module = mod_input;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "joydev mod");
- load_module(hd_data, "joydev");
-
- PROGRESS(1, 1, "evdev mod");
- load_module(hd_data, "evdev");
-
- PROGRESS(2, 0, "input");
-
- get_input_devices(hd_data);
-}
-
-
-#define INP_NAME "N: Name="
-#define INP_HANDLERS "H: Handlers="
-#define INP_KEY "B: KEY="
-#define INP_REL "B: REL="
-
-void get_input_devices(hd_data_t *hd_data)
-{
- hd_t *hd;
- str_list_t *input, *sl, *sl1;
- char *s;
- unsigned ok, u;
- unsigned bus, vendor, product, version;
- unsigned mouse_buttons, mouse_wheels;
- char *name = NULL, *handlers = NULL, *key = NULL, *rel = NULL;
- size_t len;
- str_list_t *handler_list;
- hd_dev_num_t dev_num = { type: 'c', range: 1 };
-
- input = read_file("/proc/bus/input/devices", 0, 0);
-
- ADD2LOG("----- /proc/bus/input/devices -----\n");
- for(sl = input; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/bus/input/devices end -----\n");
-
- for(ok = 0, sl = input; sl; sl = sl->next) {
- if(*sl->str == '\n') {
- ADD2LOG("bus = %u, name = %s\n", bus, name);
- if(handlers) ADD2LOG(" handlers = %s\n", handlers);
- if(key) ADD2LOG(" key = %s\n", key);
- if(rel) ADD2LOG(" rel = %s\n", rel);
-
- mouse_buttons = 0;
- if(key) {
- for(u = BTN_MOUSE; u < BTN_MOUSE + 8; u++) {
- if(test_bit(key, u)) mouse_buttons++;
- }
- }
- ADD2LOG(" mouse buttons = %u\n", mouse_buttons);
-
- mouse_wheels = 0;
- if(rel) {
- for(u = REL_HWHEEL; u <= REL_MAX; u++) {
- if(test_bit(rel, u)) mouse_wheels++;
- }
- }
- ADD2LOG(" mouse wheels = %u\n", mouse_wheels);
-
- if(ok && handlers) {
- handler_list = hd_split(' ', handlers);
-
- if(bus == BUS_USB) {
- s = NULL;
- for(sl1 = handler_list; sl1; sl1 = sl1->next) {
- if(sscanf(sl1->str, "mouse%u", &u) == 1) {
- str_printf(&s, 0, "/dev/input/mouse%u", u);
- break;
- }
- }
-
- if(s) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->unix_dev_name2 && !strcmp(hd->unix_dev_name2, s)) {
- hd->compat_vendor.id = MAKE_ID(TAG_SPECIAL, 0x0210);
- hd->compat_device.id = MAKE_ID(TAG_SPECIAL, (mouse_wheels << 4) + mouse_buttons);
- }
- }
- }
-
- s = free_mem(s);
- }
- else {
- if(search_str_list(handler_list, "kbd") && test_bit(key, KEY_1)) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_kbd;
- hd->bus.id = bus_ps2;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0211);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0001);
- hd->device.name = new_str(name);
-
- for(sl1 = handler_list; sl1; sl1 = sl1->next) {
- if(sscanf(sl1->str, "event%u", &u) == 1) {
- str_printf(&hd->unix_dev_name, 0, "/dev/input/event%u", u);
- dev_num.major = 13;
- dev_num.minor = 64 + u;
- hd->unix_dev_num = dev_num;
- break;
- }
- }
- }
- else if(strstr(handlers, "mouse")) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_ps2;
- hd->bus.id = bus_ps2;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0210);
- hd->device.id = MAKE_ID(TAG_SPECIAL, (mouse_wheels << 4) + mouse_buttons);
- hd->device.name = new_str(name);
-
- /* Synaptics/Alps TouchPad */
- if(vendor == 2 && (product == 7 || product == 8)) {
- hd->compat_vendor.id = hd->vendor.id;
- hd->compat_device.id = hd->device.id;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0212);
- hd->device.id = MAKE_ID(TAG_SPECIAL, product - 6);
- }
-
- hd->unix_dev_name = new_str(DEV_MICE);
- dev_num.major = 13;
- dev_num.minor = 63;
- hd->unix_dev_num = dev_num;
-
- for(sl1 = handler_list; sl1; sl1 = sl1->next) {
- if(sscanf(sl1->str, "mouse%u", &u) == 1) {
- str_printf(&hd->unix_dev_name2, 0, "/dev/input/mouse%u", u);
- dev_num.major = 13;
- dev_num.minor = 32 + u;
- hd->unix_dev_num2 = dev_num;
- break;
- }
- }
-
- }
- }
-
- handler_list = free_str_list(handler_list);
- }
-
- ok = 0;
-
- name = free_mem(name);
- handlers = free_mem(handlers);
- key = free_mem(key);
- rel = free_mem(rel);
- }
-
- if(sscanf(sl->str, "I: Bus=%04x Vendor=%04x Product=%04x Version=%04x", &bus, &vendor, &product, &version) == 4) {
- ok = 1;
- continue;
- }
-
- if(!strncmp(sl->str, INP_NAME, sizeof INP_NAME - 1)) {
- s = sl->str + sizeof INP_NAME;
- len = strlen(s);
- if(len > 2) {
- name = canon_str(s, len - 2);
- }
- continue;
- }
-
- if(!strncmp(sl->str, INP_HANDLERS, sizeof INP_HANDLERS - 1)) {
- s = sl->str + sizeof INP_HANDLERS - 1;
- handlers = canon_str(s, strlen(s));
- continue;
- }
-
- if(!strncmp(sl->str, INP_KEY, sizeof INP_KEY - 1)) {
- s = sl->str + sizeof INP_KEY - 1;
- key = canon_str(s, strlen(s));
- key = all_bits(key);
- continue;
- }
-
- if(!strncmp(sl->str, INP_REL, sizeof INP_REL - 1)) {
- s = sl->str + sizeof INP_REL - 1;
- rel = canon_str(s, strlen(s));
- rel = all_bits(rel);
- continue;
- }
- }
-
- free_str_list(input);
-
-}
-
-
-char *all_bits(char *str)
-{
- str_list_t *sl, *sl0;
- char *s = NULL;
- unsigned u;
-
- if(!str) return NULL;
-
- sl = sl0 = hd_split(' ', str);
- for(; sl; sl = sl->next) {
- u = strtoul(sl->str, NULL, 16);
- str_printf(&s, -1, "%08x", u);
- }
- free_str_list(sl0);
- free_mem(str);
-
- return s;
-}
-
-
-int test_bit(char *str, unsigned bit)
-{
- size_t len, ofs;
- unsigned u, mask;
-
- if(!str) return 0;
-
- len = strlen(str);
-
- ofs = bit >> 2;
- mask = 1 << (bit & 3);
-
- if(ofs >= len) return 0;
-
- ofs = len - ofs - 1;
-
- u = str[ofs] >= 'a' ? str[ofs] - 'a' + 10 : str[ofs] - '0';
-
- return (u & mask) ? 1 : 0;
-}
-
-
+++ /dev/null
-void hd_scan_input(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-typedef unsigned long kernel_ulong_t;
-#include <linux/types.h>
-#ifdef __UCLIBC__
-#include <linux/pci.h>
-#else
-#include <sys/pci.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "int.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * internal things
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static void int_hotplug(hd_data_t *hd_data);
-static void int_cdrom(hd_data_t *hd_data);
-#if defined(__i386__) || defined (__x86_64__)
-static int set_bios_id(hd_data_t *hd_data, hd_t *hd_ref, int bios_id);
-static int bios_ctrl_order(hd_data_t *hd_data, unsigned *sctrl, int sctrl_len);
-static void int_bios(hd_data_t *hd_data);
-#endif
-static void int_media_check(hd_data_t *hd_data);
-static int contains_word(char *str, char *str2);
-static int is_zip(hd_t *hd);
-static void int_floppy(hd_data_t *hd_data);
-static void int_fix_usb_scsi(hd_data_t *hd_data);
-static void int_mouse(hd_data_t *hd_data);
-static void new_id(hd_data_t *hd_data, hd_t *hd);
-static void int_modem(hd_data_t *hd_data);
-static void int_wlan(hd_data_t *hd_data);
-static void int_udev(hd_data_t *hd_data);
-static void int_devicenames(hd_data_t *hd_data);
-#if defined(__i386__) || defined (__x86_64__)
-static void int_softraid(hd_data_t *hd_data);
-#endif
-#if defined(__i386__) || defined (__x86_64__)
-static void int_system(hd_data_t *hd_data);
-static void int_legacy_geo(hd_data_t *hd_data);
-#endif
-
-void hd_scan_int(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- if(!hd_probe_feature(hd_data, pr_int)) return;
-
- hd_data->module = mod_int;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(2, 0, "cdrom");
- int_cdrom(hd_data);
-
- PROGRESS(3, 0, "media");
- int_media_check(hd_data);
-
- PROGRESS(4, 0, "floppy");
- int_floppy(hd_data);
-
-#if defined(__i386__) || defined (__x86_64__)
- PROGRESS(5, 0, "bios");
- int_bios(hd_data);
-#endif
-
- PROGRESS(6, 0, "mouse");
- int_mouse(hd_data);
-
-#if defined(__i386__) || defined (__x86_64__)
- PROGRESS(15, 0, "system info");
- int_system(hd_data);
-#endif
-
- PROGRESS(7, 0, "hdb");
- hd_data->flags.keep_kmods = 1;
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hddb_add_info(hd_data, hd);
- }
- hd_data->flags.keep_kmods = 0;
-
- PROGRESS(8, 0, "usbscsi");
- int_fix_usb_scsi(hd_data);
-
- PROGRESS(9, 0, "hotplug");
- int_hotplug(hd_data);
-
- PROGRESS(10, 0, "modem");
- int_modem(hd_data);
-
- PROGRESS(11, 0, "wlan");
- int_wlan(hd_data);
-
- PROGRESS(12, 0, "udev");
- int_udev(hd_data);
-
- PROGRESS(13, 0, "device names");
- int_devicenames(hd_data);
-
-#if defined(__i386__) || defined (__x86_64__)
- PROGRESS(14, 0, "soft raid");
- int_softraid(hd_data);
-
- PROGRESS(15, 0, "geo");
- int_legacy_geo(hd_data);
-#endif
-
-}
-
-/*
- * Identify hotpluggable devices.
- */
-void int_hotplug(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->bus.id == bus_usb || hd->usb_guid) {
- hd->hotplug = hp_usb;
- }
- }
-}
-
-/*
- * Add more info to CDROM entries.
- */
-void int_cdrom(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_cdrom &&
- !hd->prog_if.id
- ) {
- if(hd->device.name && strstr(hd->device.name, "DVD")) {
- hd->prog_if.id = 3;
- }
- }
- }
-}
-
-#if defined(__i386__) || defined (__x86_64__)
-
-int set_bios_id(hd_data_t *hd_data, hd_t *hd_ref, int bios_id)
-{
- int found = 0;
- hd_t *hd;
-
- if(!hd_ref || !hd_ref->unix_dev_name) return 0;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk &&
- hd->unix_dev_name &&
- !strcmp(hd->unix_dev_name, hd_ref->unix_dev_name)
- ) {
- str_printf(&hd->rom_id, 0, "0x%02x", bios_id);
- found = 1;
- }
- }
-
- return found;
-}
-
-
-int bios_ctrl_order(hd_data_t *hd_data, unsigned *sctrl, int sctrl_len)
-{
- hd_t *hd;
- bios_info_t *bt;
- int i, j, k, sctrl2_len = 0;
- unsigned pci_slot, pci_func;
- unsigned *sctrl2 = NULL, *sctrl3 = NULL;
- int order_info = 0;
-
- for(bt = NULL, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal &&
- hd->sub_class.id == sc_int_bios &&
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- (bt = hd->detail->bios.data)
- ) {
- break;
- }
- }
-
- if(!bt || !bt->bios32.ok || !bt->bios32.compaq) return 0;
-
- sctrl2 = new_mem((sizeof bt->bios32.cpq_ctrl / sizeof *bt->bios32.cpq_ctrl) * sizeof *sctrl2);
-
- for(i = 0; (unsigned) i < sizeof bt->bios32.cpq_ctrl / sizeof *bt->bios32.cpq_ctrl; i++) {
- if(
- bt->bios32.cpq_ctrl[i].id &&
- !(bt->bios32.cpq_ctrl[i].misc & 0x40) /* bios support ??????? */
- ) {
- pci_slot = PCI_SLOT(bt->bios32.cpq_ctrl[i].devfn) + (bt->bios32.cpq_ctrl[i].bus << 8);
- pci_func = PCI_FUNC(bt->bios32.cpq_ctrl[i].devfn);
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->bus.id == bus_pci && hd->slot == pci_slot && hd->func == pci_func) {
- sctrl2[sctrl2_len++] = hd->idx;
- break;
- }
- }
- }
- }
-
- if(sctrl2_len) order_info = 1;
-
- for(i = 0; i < sctrl2_len; i++) {
- ADD2LOG(" bios ord %d: %d\n", i, sctrl2[i]);
- }
-
- /* sort list */
-
- sctrl3 = new_mem(sctrl_len * sizeof *sctrl3);
-
- k = 0 ;
- for(i = 0; i < sctrl2_len; i++) {
- for(j = 0; j < sctrl_len; j++) {
- if(sctrl[j] == sctrl2[i]) {
- sctrl3[k++] = sctrl[j];
- sctrl[j] = 0;
- break;
- }
- }
- }
-
- for(i = 0; i < sctrl_len; i++) {
- if(sctrl[i] && k < sctrl_len) sctrl3[k++] = sctrl[i];
- }
-
- memcpy(sctrl, sctrl3, sctrl_len * sizeof *sctrl);
-
- free_mem(sctrl2);
- free_mem(sctrl3);
-
- return order_info;
-}
-
-
-void int_bios(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_boot;
- unsigned *sctrl, *sctrl2;
- int sctrl_len, i, j;
- int bios_id, list_sorted;
-
- /* don't do anything if there is useful edd info */
- if(hd_data->flags.edd_used) return;
-
- for(i = 0, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- i++;
- }
- }
-
- if(!i) return;
-
- sctrl = new_mem(i * sizeof *sctrl);
-
- /* sctrl: list of storage controllers with disks */
-
- for(sctrl_len = 0, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- for(i = 0; i < sctrl_len; i++) {
- if(sctrl[i] == hd->attached_to) break;
- }
- if(i == sctrl_len) sctrl[sctrl_len++] = hd->attached_to;
- }
- }
-
- /* sort list, if possible */
-
- list_sorted = bios_ctrl_order(hd_data, sctrl, sctrl_len);
-
- hd_boot = hd_get_device_by_idx(hd_data, hd_boot_disk(hd_data, &i));
-
- /* if we know the boot device, make this controller the first */
-
- if(hd_boot && hd_boot->attached_to && i == 1) {
- for(i = 0; i < sctrl_len; i++) {
- if(sctrl[i] == hd_boot->attached_to) break;
- }
- if(i < sctrl_len) {
- sctrl2 = new_mem(sctrl_len * sizeof *sctrl2);
- *sctrl2 = hd_boot->attached_to;
- for(i = 0, j = 1; i < sctrl_len; i++) {
- if(sctrl[i] != hd_boot->attached_to) sctrl2[j++] = sctrl[i];
- }
- free_mem(sctrl);
- sctrl = sctrl2;
- }
- }
- else {
- hd_boot = NULL;
- }
-
- if(hd_boot) ADD2LOG(" bios boot dev: %d\n", hd_boot->idx);
- for(i = 0; i < sctrl_len; i++) {
- ADD2LOG(" bios ctrl %d: %d\n", i, sctrl[i]);
- }
-
- /* remove existing entries */
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- hd->rom_id = free_mem(hd->rom_id);
- }
- }
-
- if(!list_sorted && !hd_boot && sctrl_len > 1) {
- /* we have no info at all */
- sctrl_len = 0;
- }
- else if(!list_sorted && hd_boot && sctrl_len > 2) {
- /* we know which controller has the boot device */
- sctrl_len = 1;
- }
-
- bios_id = 0x80;
-
- /* rely on it */
-
- if(hd_boot) {
- bios_id += set_bios_id(hd_data, hd_boot, bios_id);
- }
-
- /* assign all the others */
-
- for(i = 0; i < sctrl_len; i++) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk &&
- hd->attached_to == sctrl[i] &&
- !hd->rom_id
- ) {
- bios_id += set_bios_id(hd_data, hd, bios_id);
- }
- }
- }
-
- free_mem(sctrl);
-}
-
-
-#if 0
-void int_bios(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_boot;
- int i, start, bios = 0x80;
- int ide_1st;
- char ide_name[] = "/dev/hda";
- char scsi_name[] = "/dev/sda";
- char *s;
-
- hd_boot = hd_get_device_by_idx(hd_data, hd_boot_disk(hd_data, &i));
-
- if(hd_boot) {
- free_mem(hd_boot->rom_id);
- hd_boot->rom_id = new_str("0x80");
- }
-
- if(!hd_boot || i != 1) return;
-
- if(strstr(hd_boot->unix_dev_name, "/dev/sd") == hd_boot->unix_dev_name) {
- ide_1st = 0;
- start = hd_boot->unix_dev_name[sizeof "/dev/sd" - 1] - 'a';
- }
- else if(strstr(hd_boot->unix_dev_name, "/dev/hd") == hd_boot->unix_dev_name) {
- ide_1st = 1;
- start = hd_boot->unix_dev_name[sizeof "/dev/hd" - 1] - 'a';
- }
- else {
- return;
- }
-
- if(start < 0) return;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- hd->rom_id = free_mem(hd->rom_id);
- }
- }
-
- s = ide_1st ? ide_name : scsi_name;
-
- for(i = start; i < 26; i++) {
- s[strlen(s) - 1] = 'a' + i;
- bios += set_bios_id(hd_data, s, bios);
- }
-
- for(i = 0; i < start; i++) {
- s[strlen(s) - 1] = 'a' + i;
- bios += set_bios_id(hd_data, s, bios);
- }
-
- s = ide_1st ? scsi_name : ide_name;
-
- for(i = 0; i < 26; i++) {
- s[strlen(s) - 1] = 'a' + i;
- bios += set_bios_id(hd_data, s, bios);
- }
-}
-#endif /* 0 */
-#endif /* defined(__i386__) || defined (__x86_64__) */
-
-/*
- * Try to read block 0 for block devices.
- */
-void int_media_check(hd_data_t *hd_data)
-{
- hd_t *hd;
- int i, j = 0;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(!hd_report_this(hd_data, hd)) continue;
- if(
- hd->base_class.id == bc_storage_device &&
- (
- /* hd->sub_class.id == sc_sdev_cdrom || */ /* cf. cdrom.c */
- hd->sub_class.id == sc_sdev_disk ||
- hd->sub_class.id == sc_sdev_floppy
- ) &&
- hd->unix_dev_name &&
- !hd->block0 &&
- !hd->is.notready &&
- hd->status.available != status_no
- ) {
- i = 5;
- PROGRESS(4, ++j, hd->unix_dev_name);
- hd->block0 = read_block0(hd_data, hd->unix_dev_name, &i);
- hd->is.notready = hd->block0 ? 0 : 1;
- }
- }
-}
-
-
-/*
- * Check if str has str2 in it.
- */
-int contains_word(char *str, char *str2)
-{
- int i, len, len2, found = 0;
- char *s;
-
- if(!str2 || !*str2 || !str || !*str) return 0;
-
- str = new_str(str);
-
- len = strlen(str);
- len2 = strlen(str2);
-
- for(i = 0; i < len; i++) {
- if(str[i] >= 'a' && str[i] <= 'z') str[i] -= 'a' - 'A';
- }
-
- for(s = str; (s = strstr(s, str2)); s++) {
- if(
- (s == str || s[-1] < 'A' || s[-1] > 'Z') &&
- (s[len2] < 'A' || s[len2] > 'Z')
- ) {
- found = 1;
- break;
- }
- }
-
- free_mem(str);
-
- return found;
-}
-
-
-/*
- * Check for zip drive.
- */
-int is_zip(hd_t *hd)
-{
- if(
- hd->base_class.id == bc_storage_device &&
- (
- hd->sub_class.id == sc_sdev_disk ||
- hd->sub_class.id == sc_sdev_floppy
- )
- ) {
- if(
- (
- contains_word(hd->vendor.name, "IOMEGA") ||
- contains_word(hd->sub_vendor.name, "IOMEGA") ||
- contains_word(hd->device.name, "IOMEGA") ||
- contains_word(hd->sub_device.name, "IOMEGA")
- ) && (
- contains_word(hd->device.name, "ZIP") ||
- contains_word(hd->sub_device.name, "ZIP")
- )
- ) {
- return 1;
- }
- }
-
- return 0;
-}
-
-
-/*
- * Turn some drives into floppies.
- */
-void int_floppy(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(is_zip(hd)) hd->is.zip = 1;
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk
- ) {
- if(hd->is.zip) {
- hd->sub_class.id = sc_sdev_floppy;
- new_id(hd_data, hd);
- }
- else {
- /* make everything a floppy that is 1440k */
- for(res = hd->res; res; res = res->next) {
- if(
- res->any.type == res_size &&
- res->size.unit == size_unit_sectors &&
- res->size.val1 == 2880 &&
- res->size.val2 == 512
- ) {
- hd->sub_class.id = sc_sdev_floppy;
- new_id(hd_data, hd);
- break;
- }
- }
- }
- }
- }
-}
-
-
-#define COPY_ENTRY(a) if(hd_scsi->a) { free_mem(hd_usb->a); hd_usb->a = new_str(hd_scsi->a); }
-/*
- * Remove usb entries that are handled by usb-storage.
- */
-void int_fix_usb_scsi(hd_data_t *hd_data)
-{
- hd_t *hd_scsi, *hd_usb;
-
- for(hd_usb = hd_data->hd; hd_usb; hd_usb= hd_usb->next) {
- if(
- hd_usb->bus.id == bus_usb &&
- hd_usb->sysfs_id &&
- search_str_list(hd_usb->drivers, "usb-storage")
- ) {
- for(hd_scsi = hd_data->hd; hd_scsi; hd_scsi = hd_scsi->next) {
- if(
- hd_scsi->bus.id == bus_scsi &&
- hd_scsi->sysfs_device_link &&
- search_str_list(hd_scsi->drivers, "usb-storage")
- ) {
- if(!strncmp(hd_scsi->sysfs_device_link, hd_usb->sysfs_id, strlen(hd_usb->sysfs_id))) {
- hd_set_hw_class(hd_scsi, hw_usb);
-
- free_mem(hd_scsi->unique_id);
- hd_scsi->unique_id = hd_usb->unique_id;
- hd_usb->unique_id = NULL;
-
- add_res_entry(&hd_scsi->res, hd_usb->res);
- hd_usb->res = NULL;
-
- new_id(hd_data, hd_scsi);
-
- hd_usb->tag.remove = 1;
- }
- }
- }
- }
-
- }
-
-
-
-#if 0
- for(hd_scsi = hd_data->hd; hd_scsi; hd_scsi = hd_scsi->next) {
- if(
- hd_scsi->bus.id == bus_scsi &&
- hd_scsi->usb_guid &&
- search_str_list(hd_scsi->drivers, "usb-storage")
- ) {
- for(hd_usb = hd_data->hd; hd_usb ; hd_usb = hd_usb->next) {
- if(
- hd_usb->bus.id == bus_usb &&
- hd_usb->usb_guid &&
- !hd_usb->tag.remove &&
- !strcmp(hd_usb->usb_guid, hd_scsi->usb_guid) &&
- hd_usb->detail &&
- hd_usb->detail->type == hd_detail_usb &&
- (usb = hd_usb->detail->usb.data) &&
- usb->driver &&
- !strcmp(usb->driver, "usb-storage")
- ) {
- hd_scsi->tag.remove = 1;
-
- /* join usb & scsi info */
- hd_usb->bus.id = hd_scsi->bus.id;
- COPY_ENTRY(bus.name);
- hd_usb->base_class.id = hd_scsi->base_class.id;
- COPY_ENTRY(base_class.name);
- hd_usb->sub_class.id = hd_scsi->sub_class.id;
- COPY_ENTRY(sub_class.name);
- hd_usb->prog_if.id = hd_scsi->prog_if.id;
- COPY_ENTRY(prog_if.name);
- COPY_ENTRY(unix_dev_name);
- COPY_ENTRY(model);
- // ###### FIXME?: COPY_ENTRY(driver)
-
- hd_usb->vendor.id = hd_scsi->vendor.id;
- COPY_ENTRY(vendor.name);
- hd_usb->device.id = hd_scsi->device.id;
- COPY_ENTRY(device.name);
- hd_usb->sub_vendor.name = free_mem(hd_usb->sub_vendor.name);
- COPY_ENTRY(sub_vendor.name);
- hd_usb->sub_device.name = free_mem(hd_usb->sub_device.name);
- COPY_ENTRY(sub_device.name);
- COPY_ENTRY(revision.name);
- COPY_ENTRY(serial);
-
- hd_usb->is.notready = hd_scsi->is.notready;
- if(hd_usb->block0) free_mem(hd_usb->block0);
- hd_usb->block0 = hd_scsi->block0;
- hd_scsi->block0 = NULL;
- add_res_entry(&hd_usb->res, hd_scsi->res);
- hd_scsi->res = NULL;
-
- new_id(hd_data, hd_usb);
- }
- }
- }
- }
-#endif
-
-
-
- remove_tagged_hd_entries(hd_data);
-}
-#undef COPY_ENTRY
-
-
-/*
- * Improve mouse info.
- */
-void int_mouse(hd_data_t *hd_data)
-{
- hd_t *hd;
- bios_info_t *bt = NULL;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- (bt = hd->detail->bios.data) &&
- bt->mouse.type
- ) break;
- }
-
- if(!bt) return;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_mouse &&
- hd->sub_class.id == sc_mou_ps2 &&
- hd->bus.id == bt->mouse.bus &&
- hd->vendor.id == MAKE_ID(TAG_SPECIAL, 0x0200) &&
- hd->device.id == MAKE_ID(TAG_SPECIAL, 0x0002)
- ) {
- hd->vendor.name = free_mem(hd->vendor.name);
- hd->device.name = free_mem(hd->device.name);
- hd->vendor.id = hd->device.id = 0;
-#if 0
- hd->vendor.id = bt->mouse.compat_vend;
- hd->device.id = bt->mouse.compat_dev;
-#else
- hd->vendor.name = new_str(bt->mouse.vendor);
- hd->device.name = new_str(bt->mouse.type);
- hd->compat_vendor.id = bt->mouse.compat_vend;
- hd->compat_device.id = bt->mouse.compat_dev;
-#endif
- new_id(hd_data, hd);
- }
- }
-}
-
-
-void new_id(hd_data_t *hd_data, hd_t *hd)
-{
-#if 0
- hd->unique_id = free_mem(hd->unique_id);
- hd->unique_id1 = free_mem(hd->unique_id1);
- hd->old_unique_id = free_mem(hd->old_unique_id);
- hd_add_id(hd_data, hd);
-#endif
-}
-
-
-/*
- * Assign device names to (win-)modems.
- */
-void int_modem(hd_data_t *hd_data)
-{
- hd_t *hd;
- char *s;
- hd_dev_num_t dev_num = { type: 'c', range: 1 };
- unsigned cnt4 = 0;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_modem
- ) {
- s = NULL;
- switch(hd->sub_class.id) {
- case sc_mod_win1:
- s = new_str("/dev/ham");
- dev_num.major = 240;
- dev_num.minor = 1;
- break;
- case sc_mod_win2:
- s = new_str("/dev/536ep0");
- dev_num.major = 240;
- dev_num.minor = 1;
- break;
- case sc_mod_win3:
- s = new_str("/dev/ttyLT0");
- dev_num.major = 62;
- dev_num.minor = 64;
- break;
- case sc_mod_win4:
- if(cnt4 < 4) {
- str_printf(&s, 0, "/dev/ttySL%u", cnt4);
- dev_num.major = 212;
- dev_num.minor = cnt4++;
- }
- break;
- }
- if(s) {
- free_mem(hd->unix_dev_name);
- hd->unix_dev_name = s;
- s = NULL;
- hd->unix_dev_num = dev_num;
- }
- }
- }
-}
-
-
-/*
- * Look for WLAN cards by checking module info.
- */
-void int_wlan(hd_data_t *hd_data)
-{
- hd_t *hd;
- driver_info_t *di;
- str_list_t *sl;
- unsigned u, found;
- static char *wlan_mods[] = {
- "acx_pci",
- "airo",
- "airo_cs",
- "aironet4500_card",
- "aironet4500_cs",
- "airport",
- "adm8211",
- "arlan",
- "at76c503",
- "at76c503-i3861",
- "at76c503-i3863",
- "at76c503-rfmd",
- "at76c503-rfmd-acc",
- "at76c505-rfmd",
- "at76c505-rfmd2958",
- "ath_hal",
- "ath_pci",
- "atmel",
- "atmel_cs",
- "atmel_pci",
- "hermes",
- "hostap",
- "hostap_pci",
- "hostap_plx",
- "ipw2100",
- "ipw2200",
- "netwave_cs",
- "orinoco_cs",
- "orinoco_pci",
- "orinoco_plx",
- "p80211",
- "prism2_cs",
- "prism2_pci",
- "prism2_plx",
- "prism2_usb",
- "prism54",
- "ray_cs",
- "rt2400",
- "rt2500",
- "usbdfu",
- "wavelan",
- "wavelan_cs",
- "wl3501_cs"
- };
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- for(found = 0, di = hd->driver_info; di && !found; di = di->next) {
- if(di->any.type == di_module) {
- for(sl = di->module.names; sl && !found; sl = sl->next) {
- for(u = 0; u < sizeof wlan_mods / sizeof *wlan_mods; u++) {
- if(!strcmp(sl->str, wlan_mods[u])) {
- found = 1;
- break;
- }
- }
- }
- }
- }
- if(found) {
- hd->is.wlan = 1;
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x82; /* wlan */
- hddb_add_info(hd_data, hd);
- }
- }
-}
-
-
-/*
- * Add udev info.
- */
-void int_udev(hd_data_t *hd_data)
-{
- hd_udevinfo_t *ui;
- hd_t *hd;
- char *s = NULL;
- str_list_t *sl;
-
- if(!hd_data->udevinfo) read_udevinfo(hd_data);
-
- if(!hd_data->udevinfo) return;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(!hd->sysfs_id) continue;
-
- for(ui = hd_data->udevinfo; ui; ui = ui->next) {
- if(ui->name && !strcmp(ui->sysfs, hd->sysfs_id)) {
- hd->unix_dev_names = free_str_list(hd->unix_dev_names);
- hd->unix_dev_name = free_mem(hd->unix_dev_name);
- str_printf(&s, 0, "%s%s", ui->type == 'n' ? "" : "/dev/", ui->name);
- add_str_list(&hd->unix_dev_names, s);
- for(sl = ui->links; sl; sl = sl->next) {
- str_printf(&s, 0, "%s%s", ui->type == 'n' ? "" : "/dev/", sl->str);
- add_str_list(&hd->unix_dev_names, s);
- }
- s = free_mem(s);
-
- sl = hd->unix_dev_names;
-
- if(hd_data->flags.udev) {
- /* use first link as canonical device name */
- if(ui->links) sl = sl->next;
- }
-
- hd->unix_dev_name = new_str(sl->str);
-
- break;
- }
- }
- }
-}
-
-
-/*
- * If hd->unix_dev_name is not in hd->unix_dev_names, add it.
- */
-void int_devicenames(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->unix_dev_name &&
- !search_str_list(hd->unix_dev_names, hd->unix_dev_name)
- ) {
- add_str_list(&hd->unix_dev_names, hd->unix_dev_name);
- }
- }
-}
-
-
-#if defined(__i386__) || defined (__x86_64__)
-/*
- * Tag ide soft raid disks.
- */
-void int_softraid(hd_data_t *hd_data)
-{
- hd_t *hd;
- str_list_t *raid, *sl, *raid_sysfs = NULL, *sl1;
- size_t len;
- char *s;
-
- if(hd_data->flags.fast) return;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->status.available != status_no
- ) break;
- }
-
- /* no disks -> no check necessary */
- if(!hd) return;
-
- raid = read_file("| /sbin/dmraid -rc 2>/dev/null", 0, 0);
-
- for(sl = raid; sl; sl = sl->next) {
- s = *sl->str ? strchr(sl->str + 1, '/') : NULL;
- if(s) {
- sl1 = add_str_list(&raid_sysfs, NULL);
- str_printf(&sl1->str, 0, "/block%s", s);
- len = strlen(sl1->str);
- if(len) sl1->str[len - 1] = 0;
- }
- }
-
- free_str_list(raid);
-
- ADD2LOG("----- soft raid devices -----\n");
- for(sl = raid_sysfs; sl; sl = sl->next) {
- ADD2LOG(" %s\n", sl->str);
- }
- ADD2LOG("----- soft raid devices end -----\n");
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(search_str_list(raid_sysfs, hd->sysfs_id)) {
- hd->is.softraiddisk = 1;
- }
- }
-
- free_str_list(raid_sysfs);
-
-}
-
-
-/*
- *
- */
-void int_system(hd_data_t *hd_data)
-{
- hd_t *hd_sys;
- hd_smbios_t *sm;
- struct {
- unsigned notebook:1;
- unsigned acpi_mods:1; /* *** evil hack *** */
- enum { v_none = 0, v_ibm = 1, v_toshiba, v_sony } vendor;
- } is = { };
- char *s;
-
- for(hd_sys = hd_data->hd; hd_sys; hd_sys = hd_sys->next) {
- if(
- hd_sys->base_class.id == bc_internal &&
- hd_sys->sub_class.id == sc_int_sys
- ) break;
- }
-
- if(!hd_sys) return;
-
- if(
- hd_sys->vendor.name &&
- !strncasecmp(hd_sys->vendor.name, "sony", sizeof "sony" - 1)
- ) {
- is.vendor = v_sony;
- }
-
- if(
- hd_sys->device.name &&
- !strncmp(hd_sys->device.name, "PCG-", sizeof "PCG-" - 1)
- ) {
- is.notebook = 1;
- }
-
- for(sm = hd_data->smbios; sm; sm = sm->next) {
- if(
- sm->any.type == sm_sysinfo &&
- sm->sysinfo.manuf &&
- sm->sysinfo.product &&
- !strcasecmp(sm->sysinfo.manuf, "Hewlett-Packard") &&
- !strcasecmp(sm->sysinfo.product, "HP Compaq nc6220")
- ) {
- is.acpi_mods = 1;
- }
-
- if(
- sm->any.type == sm_sysinfo &&
- sm->sysinfo.manuf &&
- !strcasecmp(sm->sysinfo.manuf, "ibm")
- ) {
- is.vendor = v_ibm;
- }
-
- if(
- sm->any.type == sm_sysinfo &&
- sm->sysinfo.manuf &&
- !strcasecmp(sm->sysinfo.manuf, "toshiba")
- ) {
- is.vendor = v_toshiba;
-
- if(!hd_sys->device.name && !hd_sys->device.id && sm->sysinfo.product) {
- hd_sys->device.name = new_str(sm->sysinfo.product);
- }
- if(!hd_sys->vendor.name && !hd_sys->vendor.id) {
- hd_sys->vendor.name = new_str("Toshiba");
- }
- }
-
- if(
- sm->any.type == sm_sysinfo &&
- sm->sysinfo.manuf &&
- !strncasecmp(sm->sysinfo.manuf, "sony", sizeof "sony" - 1)
- ) {
- is.vendor = v_sony;
-
- if(!hd_sys->device.name && !hd_sys->device.id && sm->sysinfo.product) {
- hd_sys->device.name = new_str(sm->sysinfo.product);
- if(
- (s = strchr(hd_sys->device.name, '(')) &&
- hd_sys->device.name[strlen(hd_sys->device.name) - 1] == ')'
- ) {
- *s = 0;
- }
- }
- if(!hd_sys->vendor.name && !hd_sys->vendor.id) {
- hd_sys->vendor.name = new_str("Sony");
- }
- }
-
- if(
- sm->any.type == sm_chassis &&
- (
- (sm->chassis.ch_type.id >= 8 && sm->chassis.ch_type.id <= 11) ||
- sm->chassis.ch_type.id == 14
- )
- ) {
- is.notebook = 1;
- }
- }
-
- ADD2LOG(
- " system type:%s%s\n",
- is.vendor == v_ibm ? " ibm" :
- is.vendor == v_toshiba ? " toshiba" :
- is.vendor == v_sony ? " sony" :
- "",
- is.notebook ? " notebook" : ""
- );
-
- if(is.notebook && is.vendor) {
- hd_sys->compat_vendor.id = MAKE_ID(TAG_SPECIAL, 0xf001);
- hd_sys->compat_device.id = MAKE_ID(TAG_SPECIAL, is.vendor);
- }
- else if(is.acpi_mods) {
- hd_sys->compat_vendor.id = MAKE_ID(TAG_SPECIAL, 0xf001);
- hd_sys->compat_device.id = MAKE_ID(TAG_SPECIAL, 4);
- }
-}
-
-
-void int_legacy_geo(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
- int id;
- char *s;
- edd_info_t *ei;
-
- if(!hd_data->edd) return;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_disk &&
- hd->rom_id
- ) {
- id = strtol(hd->rom_id, &s, 0) - 0x80;
- if(*s || id < 0 || id >= sizeof hd_data->edd / sizeof *hd_data->edd) continue;
-
- ei = hd_data->edd + id;
-
- if(ei->edd.cyls) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = ei->edd.cyls;
- res->disk_geo.heads = ei->edd.heads;
- res->disk_geo.sectors = ei->edd.sectors;
- res->disk_geo.size = ei->sectors;
- res->disk_geo.geotype = geo_bios_edd;
- }
-
- if(ei->legacy.cyls) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = ei->legacy.cyls;
- res->disk_geo.heads = ei->legacy.heads;
- res->disk_geo.sectors = ei->legacy.sectors;
- res->disk_geo.geotype = geo_bios_legacy;
- }
-
- }
- }
-
-
-}
-
-#endif
-
-
+++ /dev/null
-void hd_scan_int(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "isa.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * isa cards
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if defined(__i386__)
-
-static void scan_isa_isdn(hd_data_t *hd_data);
-static isa_isdn_t *free_isa_isdn(isa_isdn_t *ii);
-
-static void dump_isa_isdn_data(hd_data_t *hd_data, isa_isdn_t *ii);
-
-void hd_scan_isa(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_isa)) return;
-
- hd_data->module = mod_isa;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- // hd_data->isa = NULL;
-
- if(hd_probe_feature(hd_data, pr_isa_isdn)) {
- scan_isa_isdn(hd_data);
- }
-
-}
-
-void scan_isa_isdn(hd_data_t *hd_data)
-{
- isa_isdn_t *ii0, *ii;
- hd_t *hd;
- hd_res_t *res;
-
- PROGRESS(1, 0, "isdn");
-
- ii0 = isdn_detect();
-
- dump_isa_isdn_data(hd_data, ii0);
-
- PROGRESS(1, 1, "isdn");
-
- for(ii = ii0; ii; ii = ii->next) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x3000 + ii->type);
- hd->device.id = MAKE_ID(TAG_SPECIAL, ((ii->type << 8) + (ii->subtype & 0xff)) & 0xffff);
-
- if(ii->has_io) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = ii->io;
- res->io.access = acc_rw;
- }
-
- if(ii->has_irq) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = ii->irq;
- }
-
- // #### ask libihw? -> isdn.c
-
- }
-
- free_isa_isdn(ii0);
-}
-
-isa_isdn_t *new_isa_isdn(isa_isdn_t **ii)
-{
- while(*ii) ii = &(*ii)->next;
-
- return *ii = new_mem(sizeof **ii);
-}
-
-isa_isdn_t *free_isa_isdn(isa_isdn_t *ii)
-{
- isa_isdn_t *l;
-
- for(; ii; ii = (l = ii)->next, free_mem(l));
-
- return NULL;
-}
-
-void dump_isa_isdn_data(hd_data_t *hd_data, isa_isdn_t *ii)
-{
- ADD2LOG("---------- ISA ISDN raw data ----------\n");
-
- for(; ii; ii = ii->next) {
- ADD2LOG(" type %d, subtype %d", ii->type, ii->subtype);
- if(ii->has_mem) ADD2LOG(", mem 0x%04x", ii->mem);
- if(ii->has_io) ADD2LOG(", io 0x%04x", ii->io);
- if(ii->has_irq) ADD2LOG(", irq %d", ii->irq);
- ADD2LOG("\n");
- }
-
- ADD2LOG("---------- ISA ISDN raw data end ----------\n");
-}
-
-
-#endif /* defined(__i386__) */
-
+++ /dev/null
-
-typedef struct isa_isdn_s {
- struct isa_isdn_s *next;
- unsigned has_mem:1, has_io:1, has_irq:1;
- unsigned type, subtype, mem, io, irq;
-} isa_isdn_t;
-
-isa_isdn_t *new_isa_isdn(isa_isdn_t **ii);
-
-void hd_scan_isa(hd_data_t *hd_data);
-
-isa_isdn_t *isdn_detect(void);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "isapnp.h"
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * isapnp stuff
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if defined(__i386__) || defined(__alpha__)
-
-static void get_pnp_devs(hd_data_t *hd_data);
-
-#if 0
-static void get_read_port(hd_data_t *hd_data, isapnp_t *);
-static void build_list(hd_data_t *hd_data, str_list_t *isapnp_list);
-#endif
-
-void hd_scan_isapnp(hd_data_t *hd_data)
-{
-#if 0
- hd_t *hd;
- hd_res_t *res;
- int isapnp_ok;
- str_list_t *isapnp_list = NULL, *sl;
-#endif
-
- if(!hd_probe_feature(hd_data, pr_isapnp)) return;
-
- hd_data->module = mod_isapnp;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "pnp devices");
-
- get_pnp_devs(hd_data);
-
-#if 0
- PROGRESS(1, 0, "read port");
-
- if(!hd_data->isapnp) {
- hd_data->isapnp = new_mem(sizeof *hd_data->isapnp);
- }
- else {
- hd_data->isapnp->cards = 0;
- /* just in case... */
- hd_data->isapnp->card = free_mem(hd_data->isapnp->card);
- /* keep the port */
- }
-
- if(!hd_data->isapnp->read_port) get_read_port(hd_data, hd_data->isapnp);
-
- PROGRESS(3, 0, "get pnp data");
-
- isapnp_list = read_file(PROC_ISAPNP, 0, 0);
-
- if((hd_data->debug & HD_DEB_ISAPNP)) {
- ADD2LOG("----- %s -----\n", PROC_ISAPNP);
- for(sl = isapnp_list; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- %s end -----\n", PROC_ISAPNP);
- }
-
- isapnp_ok = isapnp_list && hd_data->isapnp->read_port ? 1 : 1;
-
- PROGRESS(4, 0, "build list");
-
- if(isapnp_ok) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_isapnp_if;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = ISAPNP_ADDR_PORT;
- res->io.range = 1;
- res->io.access = acc_wo;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = ISAPNP_DATA_PORT;
- res->io.range = 1;
- res->io.access = acc_wo;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = hd_data->isapnp->read_port;
- res->io.range = 1;
- res->io.access = acc_ro;
- }
-
- build_list(hd_data, isapnp_list);
-
- free_str_list(isapnp_list);
-#endif
-
-}
-
-
-void get_pnp_devs(hd_data_t *hd_data)
-{
- hd_t *hd;
- char *s, *t, buf[4];
- unsigned u1, u2, u3;
-
- struct sysfs_bus *sf_bus;
- struct dlist *sf_dev_list;
- struct sysfs_device *sf_dev;
- struct sysfs_device *sf_dev_2;
-
- sf_bus = sysfs_open_bus("pnp");
-
- if(!sf_bus) {
- ADD2LOG("sysfs: no such bus: pnp\n");
- return;
- }
-
- sf_dev_list = sysfs_get_bus_devices(sf_bus);
-
-
- if(sf_dev_list) dlist_for_each_data(sf_dev_list, sf_dev, struct sysfs_device) {
- ADD2LOG(
- " pnp device: name = %s, bus_id = %s, bus = %s\n path = %s\n",
- sf_dev->name,
- sf_dev->bus_id,
- sf_dev->bus,
- hd_sysfs_id(sf_dev->path)
- );
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev, "id")))) {
- if(sscanf(s, "%3s%4x", buf, &u1) == 2 && (u2 = name2eisa_id(buf))) {
- ADD2LOG(" id = %s %04x\n", eisa_vendor_str(u2), u1);
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- hd->sysfs_id = new_str(hd_sysfs_id(sf_dev->path));
- hd->sysfs_bus_id = new_str(sf_dev->bus_id);
-
- hd->bus.id = bus_isa;
- hd->is.isapnp = 1;
-
- hd->sub_vendor.id = u2;
- hd->sub_device.id = MAKE_ID(TAG_EISA, u1);
-
- if(sscanf(hd->sysfs_bus_id, "%2x:%2x.%2x", &u1, &u2, &u3) == 3) {
- hd->slot = u2;
- hd->func = u3;
- }
-
- s = new_str(sf_dev->path);
- if((t = strrchr(s, '/'))) *t = 0;
-
- sf_dev_2 = sysfs_open_device_path(s);
- if(sf_dev_2) {
- if((t = hd_attr_str(sysfs_get_device_attr(sf_dev_2, "card_id")))) {
- if(sscanf(t, "%3s%4x", buf, &u1) == 2 && (u2 = name2eisa_id(buf))) {
- ADD2LOG(" card id = %s %04x\n", eisa_vendor_str(u2), u1);
-
- hd->vendor.id = u2;
- hd->device.id = MAKE_ID(TAG_EISA, u1);
- }
- }
- if((t = hd_attr_str(sysfs_get_device_attr(sf_dev_2, "name")))) {
- hd->device.name = canon_str(t, strlen(t));
- if(!strcasecmp(hd->device.name, "unknown")) {
- hd->device.name = free_mem(hd->device.name);
- }
- }
-
- sysfs_close_device(sf_dev_2);
- }
-
-
- free_mem(s);
-
-
- if(hd->sub_vendor.id == hd->vendor.id && hd->sub_device.id == hd->device.id) {
- hd->sub_vendor.id = hd->sub_device.id = 0;
- }
-
- }
- }
-
- }
-
-
- sysfs_close_bus(sf_bus);
-
-}
-
-
-#if 0
-unsigned char *add_isapnp_card_res(isapnp_card_t *ic, int len, int type)
-{
- ic->res = add_mem(ic->res, sizeof *ic->res, ic->res_len);
-
- ic->res[ic->res_len].len = len;
- ic->res[ic->res_len].type = type;
- ic->res[ic->res_len].data = new_mem(len);
-
- if(type == RES_LOG_DEV_ID) { /* logical device id */
- ic->log_devs++;
- }
-
- return ic->res[ic->res_len++].data;
-}
-
-
-isapnp_card_t *add_isapnp_card(isapnp_t *ip, int csn)
-{
- isapnp_card_t *c;
-
- ip->card = add_mem(ip->card, sizeof *ip->card, ip->cards);
- c = ip->card + ip->cards++;
-
- c->csn = csn;
- c->serial = new_mem(sizeof *c->serial * 8);
- c->card_regs = new_mem(sizeof *c->card_regs * 0x30);
-
- return c;
-}
-
-
-void get_read_port(hd_data_t *hd_data, isapnp_t *p)
-{
- hd_res_t *res;
-
- p->read_port = 0;
-
- res = NULL;
- gather_resources(hd_data->misc, &res, "ISAPnP", W_IO);
- if(res && res->any.type == res_io) p->read_port = res->io.base;
- free_res_list(res);
-}
-
-
-void build_list(hd_data_t *hd_data, str_list_t *isapnp_list)
-{
- hd_t *hd = NULL;
- str_list_t *sl;
- char s1[4], s2[100];
- int card, ldev, cdev_id, ldev_active = 0;
- char *dev_name = NULL, *ldev_name = NULL;
- unsigned dev_id = 0, vend_id = 0, base_class = 0, sub_class = 0, ldev_id;
- unsigned u, ux[5];
- int i, j;
- hd_res_t *res;
-
- for(sl = isapnp_list; sl; sl = sl->next) {
-
- if(sscanf(sl->str, "Card %d '%3s%4x:%99[^']", &card, s1, &dev_id, s2) == 4) {
-// ADD2LOG("\n\n** card %d >%s< %04x >%s<**\n", card, s1, dev_id, s2);
-
- dev_name = free_mem(dev_name);
- if(strcmp(s2, "Unknown")) dev_name = new_str(s2);
-
- dev_id = MAKE_ID(TAG_EISA, dev_id);
- vend_id = name2eisa_id(s1);
-
- base_class = sub_class = 0;
- if((u = device_class(hd_data, vend_id, dev_id))) {
- base_class = u >> 8;
- sub_class = u & 0xff;
- }
-
-#if 0
-// ########## FIXME
- if(
- (ID_VALUE(vend_id) || ID_VALUE(dev_id)) &&
- !((db_name = hd_device_name(hd_data, vend_id, dev_id)) && *db_name)
- ) {
- if(dev_name) {
- add_device_name(hd_data, vend_id, dev_id, dev_name);
- }
- }
-#endif
-
- continue;
- }
-
- if(sscanf(sl->str, " Logical device %d '%3s%4x:%99[^']", &ldev, s1, &ldev_id, s2) == 4) {
-// ADD2LOG("\n\n** ldev %d >%s< %04x >%s<**\n", ldev, s1, ldev_id, s2);
-
- ldev_name = free_mem(ldev_name);
- if(strcmp(s2, "Unknown")) ldev_name = new_str(s2);
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- hd->bus.id = bus_isa;
- hd->is.isapnp = 1;
- hd->slot = card;
- hd->func = ldev;
-
- hd->vendor.id = vend_id;
- hd->device.id = dev_id;
-
- hd->base_class.id = base_class;
- hd->sub_class.id = sub_class;
-
- hd->sub_device.id = MAKE_ID(TAG_EISA, ldev_id);
- hd->sub_vendor.id = name2eisa_id(s1);
-
- if(hd->sub_vendor.id == hd->vendor.id && hd->sub_device.id == hd->device.id) {
- hd->sub_vendor.id = hd->sub_device.id = 0;
- }
-
- if((u = sub_device_class(hd_data, hd->vendor.id, hd->device.id, hd->sub_vendor.id, hd->sub_device.id))) {
- hd->base_class.id = u >> 8;
- hd->sub_class.id = u & 0xff;
- }
-
-#if 0
-# ############# FIXME
- if(
- (ID_VALUE(hd->sub_vendor.id) || ID_VALUE(hd->sub_device.id)) &&
- !hd_sub_device_name(hd_data, hd->vend, hd->dev, hd->sub_vend, hd->sub_device.id)
- ) {
- if(ldev_name) {
- add_sub_device_name(hd_data, hd->vend, hd->dev, hd->sub_vend, hd->sub_device.id, ldev_name);
- }
- }
-#endif
-
- continue;
- }
-
- if(strstr(sl->str, "Device is not active")) {
- ldev_active = 0;
- continue;
- }
-
- if(strstr(sl->str, "Device is active")) {
- ldev_active = 1;
- continue;
- }
-
- if(hd && sscanf(sl->str, " Compatible device %3s%4x", s1, &cdev_id) == 2) {
-// ADD2LOG("\n\n** cdev >%s< %04x **\n", s1, cdev_id);
-
- hd->compat_device.id = MAKE_ID(TAG_EISA, cdev_id);
- hd->compat_vendor.id = name2eisa_id(s1);
-
- if(!(hd->base_class.id || hd->sub_class.id)) {
- if((u = device_class(hd_data, hd->compat_vendor.id, hd->compat_device.id))) {
- hd->base_class.id = u >> 8;
- hd->sub_class.id = u & 0xff;
- }
- else if(hd->compat_vendor.id == MAKE_ID(TAG_EISA, 0x41d0)) {
- /* 0x41d0 is 'PNP' */
- switch((hd->compat_device.id >> 12) & 0xf) {
- case 8:
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x80;
- break;
- case 0xa:
- hd->base_class.id = bc_storage;
- hd->sub_class.id = 0x80;
- break;
- case 0xb:
- hd->base_class.id = bc_multimedia;
- hd->sub_class.id = 0x80;
- break;
- case 0xc:
- case 0xd:
- hd->base_class.id = bc_modem;
- break;
- }
- }
- }
-
- continue;
- }
-
- if(
- hd &&
- (j = sscanf(sl->str,
- " Active port %x, %x, %x, %x, %x, %x",
- ux, ux + 1, ux + 2, ux + 3, ux + 4, ux + 5
- )) >= 1
- ) {
-
- for(i = 0; i < j; i++) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = ldev_active ? 1 : 0;
- res->io.base = ux[i];
- res->io.access = acc_rw;
- }
-
- continue;
- }
-
- if(hd && (j = sscanf(sl->str, " Active IRQ %d [%x], %d [%x]", ux, ux + 1, ux + 2, ux + 3)) >= 1) {
- for(i = 0; i < j; i += 2) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = ldev_active ? 1 : 0;
- res->irq.base = ux[i];
- }
-
- continue;
- }
-
- if(hd && (j = sscanf(sl->str, " Active DMA %d, %d", ux, ux + 1)) >= 1) {
- for(i = 0; i < j; i++) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->dma.type = res_dma;
- res->dma.enabled = ldev_active ? 1 : 0;
- res->dma.base = ux[i];
- }
-
- continue;
- }
-
-
- }
-
- free_mem(dev_name);
- free_mem(ldev_name);
-}
-#endif
-
-
-#endif /* defined(__i386__) || defined(__alpha__) */
-
+++ /dev/null
-/*
- * These are fixed and write only. Reads are done from a port with a
- * relocatable address...
- */
-#define ISAPNP_ADDR_PORT 0x279
-#define ISAPNP_DATA_PORT 0xa79
-
-
-/*
- * ISA PnP resource types
- */
-#define RES_PNP_VERSION 0x01
-#define RES_LOG_DEV_ID 0x02
-#define RES_COMPAT_DEV_ID 0x03
-#define RES_IRQ 0x04
-#define RES_DMA 0x05
-#define RES_START_DEP 0x06
-#define RES_END_DEP 0x07
-#define RES_IO 0x08
-#define RES_FIXED_IO 0x09
-#define RES_VENDOR_SMALL 0x0e
-#define RES_END 0x0f
-
-#define RES_MEM_RANGE 0x81
-#define RES_ANSI_NAME 0x82
-#define RES_UNICODE_NAME 0x83
-#define RES_VENDOR_LARGE 0x84
-#define RES_MEM32_RANGE 0x85
-#define RES_FIXED_MEM32_RANGE 0x86
-
-
-/*
- * ISA PnP configuration regs
- */
-#define CFG_MEM24 0x40
-#define CFG_MEM32_0 0x76
-#define CFG_MEM32_1 0x80
-#define CFG_MEM32_2 0x90
-#define CFG_MEM32_3 0xa0
-#define CFG_IO_HI_BASE 0x60
-#define CFG_IO_LO_BASE 0x61
-#define CFG_IRQ 0x70
-#define CFG_IRQ_TYPE 0x71
-#define CFG_DMA 0x74
-
-
-/* gather ISA-PnP info */
-void hd_scan_isapnp(hd_data_t *hd_data);
-
-
-/*
- * Interface functions to the pnpdump lib.
- */
-int pnpdump(hd_data_t *hd_data, int read_boards);
-unsigned char *add_isapnp_card_res(isapnp_card_t *, int, int);
-isapnp_card_t *add_isapnp_card(isapnp_t *, int);
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "isdn.h"
-
-#undef ISDN_TEST
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * identify isdn cards
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifndef LIBHD_TINY
-
-#if !defined(__s390__) && !defined(__s390x__) && !defined(__alpha__)
-
-void hd_scan_isdn(hd_data_t *hd_data)
-{
- hd_t *hd;
- cdb_isdn_card *cic;
-
- if(!hd_probe_feature(hd_data, pr_isdn)) return;
-
- hd_data->module = mod_isdn;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "list");
-
-#ifdef ISDN_TEST
- {
- hd_res_t *res;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x3005);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0500); // type, subtype
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0x0300;
- res->io.access = acc_rw;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_EISA, 0x1593);
- hd->device.id = MAKE_ID(TAG_EISA, 0x0133); // type, subtype
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0x0240;
- res->io.access = acc_rw;
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = 99;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_EISA, 0x0e98);
- hd->device.id = MAKE_ID(TAG_EISA, 0x0000); // type, subtype
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0x0180;
- res->io.access = acc_rw;
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0x0540;
- res->io.access = acc_rw;
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = 77;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_pci;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_PCI, 0x1244);
- hd->device.id = MAKE_ID(TAG_PCI, 0x0a00); // type, subtype
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0xe000;
- res->io.access = acc_rw;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x3001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0100); // type, subtype
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0xe80;
- res->io.access = acc_rw;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_isa;
- hd->base_class.id = bc_isdn;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x3000);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1a00); // type, subtype
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = 0x400;
- res->io.access = acc_rw;
-
-
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if((cic = get_isdn_info(hd))) {
- hd->base_class.id = bc_isdn;
- hd->sub_class.id = 0;
- free_mem(cic);
- }
- }
-
-
-}
-
-cdb_isdn_card *get_isdn_info(hd_t *hd)
-{
- cdb_isdn_card *cic0, *cic;
- unsigned u0, u1;
-
- if(hd->bus.id == bus_pci ||
- hd->bus.id == bus_isa ||
- hd->bus.id == bus_usb ||
- hd->bus.id == bus_pcmcia ||
- hd->bus.id == bus_cardbus) {
-
- cic = NULL;
- u0 = ID_VALUE(hd->vendor.id);
- if(
- hd->bus.id == bus_isa &&
- ID_TAG(hd->vendor.id) == TAG_SPECIAL &&
- u0 >= 0x3000 && u0 <= 0x3006 &&
- ID_TAG(hd->device.id) == TAG_SPECIAL
- ) {
- u0 = ID_VALUE(hd->device.id);
- cic = hd_cdbisdn_get_card_from_type(u0 >> 8, u0 & 0xff);
- }
-
- if(
- hd->bus.id == bus_isa &&
- ID_TAG(hd->vendor.id) == TAG_EISA &&
- ID_TAG(hd->device.id) == TAG_EISA
- ) {
- u0 = ID_VALUE(hd->vendor.id);
- u1 = ID_VALUE(hd->device.id);
- cic = hd_cdbisdn_get_card_from_id(((u0 & 0xff) << 8) + ((u0 >> 8) & 0xff),
- ((u1 & 0xff) << 8) + ((u1 >> 8) & 0xff),
- 0xffff,0xffff);
- }
-
- if(hd->bus.id == bus_pci) {
- cic = hd_cdbisdn_get_card_from_id(ID_VALUE(hd->vendor.id), ID_VALUE(hd->device.id),
- ID_VALUE(hd->sub_vendor.id), ID_VALUE(hd->sub_device.id));
- }
-
- if(hd->bus.id == bus_usb &&
- ID_TAG(hd->vendor.id) == TAG_USB &&
- ID_TAG(hd->device.id) == TAG_USB) {
-
- if (hd->revision.id == 0 && hd->revision.name) {
- /* the revision is usually saved as string (1.00) */
- sscanf(hd->revision.name, "%x.%x", &u1, &u0);
- u0 = u0 | u1 << 8;
- } else
- u0 = ID_VALUE(hd->revision.id);
-
- cic = hd_cdbisdn_get_card_from_id(ID_VALUE(hd->vendor.id), ID_VALUE(hd->device.id),
- u0, 0xffff);
- if (!cic) /* to get cards without revision info in database */
- cic = hd_cdbisdn_get_card_from_id(ID_VALUE(hd->vendor.id), ID_VALUE(hd->device.id),
- 0xffff, 0xffff);
- }
-
- if((hd->bus.id == bus_pcmcia || hd->bus.id == bus_cardbus) &&
- (hd->base_class.id == bc_network || hd->base_class.id == bc_isdn)) {
- if (hd->drivers && hd->drivers->str) {
- if (0 == strcmp(hd->drivers->str, "teles_cs")) {
- cic = hd_cdbisdn_get_card_from_type(8, 0);
- } else if (0 == strcmp(hd->drivers->str, "sedlbauer_cs")) {
- cic = hd_cdbisdn_get_card_from_type(22, 2);
- } else if (0 == strcmp(hd->drivers->str, "avma1_cs")) {
- cic = hd_cdbisdn_get_card_from_type(26, 0);
- } else if (0 == strcmp(hd->drivers->str, "fcpcmcia_cs")) {
- cic = hd_cdbisdn_get_card_from_type(8002, 5);
- } else if (0 == strcmp(hd->drivers->str, "elsa_cs")) {
- cic = hd_cdbisdn_get_card_from_type(10, 11);
- } else if (0 == strcmp(hd->drivers->str, "avm_cs")) {
- cic = hd_cdbisdn_get_card_from_type(8001, 2);
- }
- }
- }
-
- if (cic && cic->Class && strcmp(cic->Class, "DSL")) {
- cic0 = new_mem(sizeof *cic0);
- memcpy(cic0, cic, sizeof *cic0);
- return cic0;
- }
- }
- return NULL;
-}
-
-void hd_scan_dsl(hd_data_t *hd_data)
-{
- hd_t *hd;
- cdb_isdn_card *cic;
-
- if(!hd_probe_feature(hd_data, pr_isdn)) return;
-
- hd_data->module = mod_dsl;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "list");
-
-#ifdef DSL_TEST
- {
- hd_res_t *res;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_pci;
- hd->base_class.id = bc_dsl;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x1244);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x2700); // type, subtype
-
- }
-#endif
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if((cic = get_dsl_info(hd))) {
- free_mem(cic);
- }
- }
-
-
-}
-
-cdb_isdn_card *get_dsl_info(hd_t *hd)
-{
- cdb_isdn_card *cic0, *cic;
- cdb_isdn_vario *civ;
- unsigned u0, u1;
-
- if(hd->bus.id == bus_pci ||
- hd->bus.id == bus_usb) {
-
- cic = NULL;
-
- if(hd->bus.id == bus_pci) {
- cic = hd_cdbisdn_get_card_from_id(ID_VALUE(hd->vendor.id), ID_VALUE(hd->device.id),
- ID_VALUE(hd->sub_vendor.id), ID_VALUE(hd->sub_device.id));
- }
-
- if(hd->bus.id == bus_usb &&
- ID_TAG(hd->vendor.id) == TAG_USB &&
- ID_TAG(hd->device.id) == TAG_USB) {
-
- if (hd->revision.id == 0 && hd->revision.name) {
- /* the revision is usually saved as string (1.00) */
- sscanf(hd->revision.name, "%x.%x", &u1, &u0);
- u0 = u0 | u1 << 8;
- } else
- u0 = ID_VALUE(hd->revision.id);
-
- cic = hd_cdbisdn_get_card_from_id(ID_VALUE(hd->vendor.id), ID_VALUE(hd->device.id),
- u0, 0xffff);
- if (!cic) /* to get cards without revision info in database */
- cic = hd_cdbisdn_get_card_from_id(ID_VALUE(hd->vendor.id), ID_VALUE(hd->device.id),
- 0xffff, 0xffff);
- }
-
- if (cic && cic->Class && !strcmp(cic->Class, "DSL")) {
- hd->base_class.id = bc_dsl;
- hd->sub_class.id = sc_dsl_unknown;
- civ = hd_cdbisdn_get_vario(cic->vario);
- if (civ && civ->interface) {
- if (0 == strncmp(civ->interface, "CAPI20", 6)) {
- hd->sub_class.id = sc_dsl_capi;
- } else if (0 == strncmp(civ->interface, "pppoe", 5)) {
- hd->sub_class.id = sc_dsl_pppoe;
- }
- }
- cic0 = new_mem(sizeof *cic0);
- memcpy(cic0, cic, sizeof *cic0);
- return cic0;
- }
- }
- return NULL;
-}
-
-#endif /* !defined(__s390__) && !defined(__s390x__) && !defined(__alpha__) */
-
-#endif /* !defined(LIBHD_TINY) */
-
+++ /dev/null
-void hd_scan_isdn(hd_data_t *hd_data);
-void hd_scan_dsl(hd_data_t *hd_data);
-cdb_isdn_card *get_isdn_info(hd_t *hd);
-cdb_isdn_card *get_dsl_info(hd_t *hd);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <termios.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <linux/serial.h>
-
-#ifdef __sparc__
-
-struct serial_struct {
- int type;
- int line;
- unsigned long port;
- int irq;
- int flags;
- int xmit_fifo_size;
- int custom_divisor;
- int baud_base;
- unsigned short close_delay;
- char io_type;
- char reserved_char[1];
- int hub6;
- unsigned short closing_wait; /* time to wait before closing */
- unsigned short closing_wait2; /* no longer used... */
- unsigned char *iomem_base;
- unsigned short iomem_reg_shift;
- int reserved[2];
-};
-
-#ifdef DIET
-typedef unsigned int u_int;
-#endif
-
-#include <asm/kbio.h>
-#include <asm/openpromio.h>
-#endif
-
-#include "hd.h"
-#include "hd_int.h"
-#include "kbd.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- *
- * Look for keyboards not covered by kernel input device driver, mainly
- * some sort of serial consoles.
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifdef __sparc__
-static void add_sun_console(hd_data_t *hd_data);
-#else
-static void add_serial_console(hd_data_t *hd_data);
-#endif
-
-
-void hd_scan_kbd(hd_data_t *hd_data)
-{
- hd_t *hd;
-
- if(!hd_probe_feature(hd_data, pr_kbd)) return;
-
- hd_data->module = mod_kbd;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(2, 0, "uml");
-
- if(hd_is_uml(hd_data)) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_kbd;
- hd->bus.id = bus_none;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0201);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 2);
- }
-
- PROGRESS(3, 0, "serial console");
-
-#ifdef __sparc__
- add_sun_console(hd_data);
-#else
- add_serial_console(hd_data);
-#endif
-}
-
-
-#ifndef __sparc__
-
-void add_serial_console(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res = NULL;
- int fd, i;
- str_list_t *cmd, *cmd0, *sl;
- unsigned u, u1;
- struct serial_struct ser_info;
- unsigned tty_major = 0, tty_minor = 0;
- char c, *dev = NULL, *s;
-
- /* first, try console= option */
- cmd = cmd0 = get_cmdline(hd_data, "console");
-
- /* use last console entry */
- if(cmd) while(cmd->next) cmd = cmd->next;
-
- if(
- cmd &&
- (
- /* everything != "ttyN" */
- strncmp(cmd->str, "tty", 3) ||
- !(cmd->str[3] == 0 || (cmd->str[3] >= '0' && cmd->str[3] <= '9'))
- )
- ) {
- sl = hd_split(',', cmd->str);
- s = sl->str;
- if(!strncmp(s, "/dev/", sizeof "/dev/" - 1)) s += sizeof "/dev/" - 1;
- dev = new_str(s);
- if(sl->next && (i = sscanf(sl->next->str, "%u%c%u", &u, &c, &u1)) >= 1) {
- res = add_res_entry(&res, new_mem(sizeof *res));
- res->baud.type = res_baud;
- res->baud.speed = u;
- if(i >= 2) res->baud.parity = c;
- if(i >= 3) res->baud.bits = u1;
- }
- free_str_list(sl);
- }
-
-#ifdef __UCLIBC__
- if(!dev && (fd = open(DEV_CONSOLE, O_RDWR | O_NONBLOCK | O_NOCTTY)) >= 0) {
-/*
- if(ioctl(fd, TIOCGDEV, &u) != -1) {
- tty_major = (u >> 8) & 0xfff;
- tty_minor = (u & 0xff) | ((u >> 12) & 0xfff00);
- ADD2LOG(DEV_CONSOLE ": major %u, minor %u\n", tty_major, tty_minor);
- }
-*/
-
- if(tty_major == 229 /* iseries hvc */) {
- if (tty_minor >= 128) {
- str_printf(&dev, 0, "hvsi%u", tty_minor-128);
- } else {
- str_printf(&dev, 0, "hvc%u", tty_minor);
- }
- }
- else if(!ioctl(fd, TIOCGSERIAL, &ser_info)) {
- ADD2LOG("serial console at line %d\n", ser_info.line);
- str_printf(&dev, 0, "ttyS%d", ser_info.line);
- }
- close(fd);
- }
-#endif
-
- if(dev) {
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_console;
- hd->bus.id = bus_serial;
- hd->device.name = new_str("serial console");
-
- if(*dev) str_printf(&hd->unix_dev_name, 0, "/dev/%s", dev);
-
- hd->res = res;
-
- free_mem(dev);
- }
-
- free_str_list(cmd0);
-}
-
-
-#else /* defined(__sparc__) */
-
-
-void add_sun_console(hd_data_t *hd_data)
-{
- int fd, kid, kid2, klay, ser_cons, i;
- unsigned u, u1, u2;
- char c1, c2;
- struct serial_struct ser_info;
- unsigned char buf[OPROMMAXPARAM];
- struct openpromio *opio = (struct openpromio *) buf;
- hd_t *hd;
- hd_res_t *res;
-
- if((fd = open(DEV_CONSOLE, O_RDWR | O_NONBLOCK | O_NOCTTY)) >= 0)
- {
- if(ioctl(fd, TIOCGSERIAL, &ser_info))
- {
- ser_cons = -1;
- }
- else
- {
- ser_cons = ser_info.line;
- ADD2LOG("serial console at line %d\n", ser_cons);
- }
- close(fd);
-
- if(ser_cons >= 0 && (fd = open(DEV_OPENPROM, O_RDWR | O_NONBLOCK)) >= 0)
- {
- sprintf(opio->oprom_array, "tty%c-mode", (ser_cons & 1) + 'a');
- opio->oprom_size = sizeof buf - 0x100;
- if(!ioctl(fd, OPROMGETOPT, opio))
- {
- if(opio->oprom_size < 0x100)
- {
- opio->oprom_array[opio->oprom_size] = 0;
- ADD2LOG(
- "prom(tty%c-mode) = \"%s\" (%d bytes)\n",
- (ser_cons & 1) + 'a', opio->oprom_array,
- opio->oprom_size
- );
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_console;
- hd->bus.id = bus_serial;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0203);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0000);
- str_printf(&hd->unix_dev_name, 0, "/dev/ttyS%d", ser_cons);
- if((i = sscanf(opio->oprom_array, "%u,%u,%c,%u,%c",
- &u, &u1, &c1, &u2, &c2)) >= 1)
- {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->baud.type = res_baud;
- res->baud.speed = u;
- if(i >= 2) res->baud.bits = u1;
- if(i >= 3) res->baud.parity = c1;
- if(i >= 4) res->baud.stopbits = u2;
- if(i >= 5) res->baud.handshake = c2;
- }
- }
- }
- close(fd);
- /* We have a serial console, so don't test for keyboard. Else
- we will always find a PS/2 keyboard */
- return;
- }
- }
-
- PROGRESS(1, 0, "sun kbd");
-
- if((fd = open(DEV_KBD, O_RDWR | O_NONBLOCK | O_NOCTTY)) >= 0)
- {
- if(ioctl(fd, KIOCTYPE, &kid)) kid = -1;
- if(ioctl(fd, KIOCLAYOUT, &klay)) klay = -1;
- close(fd);
-
- if(kid != -1)
- {
- ADD2LOG("sun keyboard: type %d, layout %d\n", kid, klay);
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_kbd;
- hd->bus.id = bus_serial;
- if(kid == 4 && klay >= 0)
- hd->prog_if.id = klay;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0202);
- kid2 = kid;
- if(kid == 4 && klay > 0x20)
- kid2 = 5;
- hd->device.id = MAKE_ID(TAG_SPECIAL, kid2);
- if(kid2 == 5) {
- if(klay == 0x22 || klay == 0x51)
- {
- hd->sub_vendor.id = MAKE_ID(TAG_SPECIAL, 0x0202);
- hd->sub_device.id = MAKE_ID(TAG_SPECIAL, 0x0001);
- }
- else if(!(
- klay == 0x21 || (klay >= 0x2f && klay <= 0x31) ||
- klay == 0x50 || (klay >= 0x5e && klay <= 0x60)
- ))
- {
- hd->sub_vendor.id = MAKE_ID(TAG_SPECIAL, 0x0202);
- hd->sub_device.id = MAKE_ID(TAG_SPECIAL, 0x0002);
- }
- }
- }
- }
- else
- {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_keyboard) break;
- }
- if(!hd) {
- /* We must have a PS/2 Keyboard */
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_kbd;
- hd->bus.id = bus_ps2;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0201);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 1);
- }
- }
-}
-
-#endif /* __sparc__ */
-
-
+++ /dev/null
-void hd_scan_kbd(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/klog.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "klog.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * kernel log info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static int str_ok(str_list_t *sl);
-static int str_list_cmp(str_list_t *sl1, str_list_t *sl2);
-
-
-/*
- * Check if a string starts with '<[0-9]>'.
- */
-int str_ok(str_list_t *sl)
-{
- return sl->str[0] == '<' && sl->str[2] == '>' && sl->str[1] >= '0' && sl->str[1] <= '9';
-}
-
-/*
- * Check if sl1 is idential to sl2; sl1 may be shorter as sl2.
- *
- * Returns 0/1 if they are equal/not equal. If sl1 is NULL, 0 is returned.
- */
-int str_list_cmp(str_list_t *sl1, str_list_t *sl2)
-{
- for(; sl1; sl1 = sl1->next, sl2 = sl2->next) {
- if(!sl2 || strcmp(sl1->str, sl2->str)) return 1;
- }
-
- return 0;
-}
-
-/*
- * Read kernel log info. Combine with /var/log/boot.msg.
- */
-void read_klog(hd_data_t *hd_data)
-{
- char buf[0x2000 + 1], *s;
- int i, j, len, n;
- str_list_t *sl, *sl1, *sl2, *sl_last, **ssl, *sl_next;
-
- /* some clean-up */
- hd_data->klog = free_str_list(hd_data->klog);
-
- sl1 = read_file(KLOG_BOOT, 0, 0);
- sl2 = NULL;
-
- /*
- * remove non-canonical lines (not starting with <[0-9]>) at the start and
- * at the end
- */
-
- /* note: the implementations assumes that at least *one* line is ok */
- for(sl_last = NULL, sl = sl1; sl; sl = (sl_last = sl)->next) {
- if(str_ok(sl)) {
- if(sl_last) {
- sl_last->next = NULL;
- free_str_list(sl1);
- sl1 = sl;
- }
- break;
- }
- }
-
- for(sl_last = NULL, sl = sl1; sl; sl = (sl_last = sl)->next) {
- if(!str_ok(sl)) {
- if(sl_last) {
- sl_last->next = NULL;
- free_str_list(sl);
- }
- break;
- }
- }
-
- n = klogctl(3, buf, sizeof buf - 1);
- if(n <= 0) {
- hd_data->klog = sl1;
- return;
- }
-
- if(n > (int) sizeof buf - 1) n = sizeof buf - 1;
- buf[n] = 0;
- for(i = j = 0; i < n; i++) {
- if(buf[i] == '\n') {
- len = i - j + 1;
- s = new_mem(len + 1);
- memcpy(s, buf + j, len);
- add_str_list(&sl2, s);
- s = free_mem(s);
- j = i + 1;
- }
- }
-
- /* the 1st line may be incomplete */
- if(sl2 && !str_ok(sl2)) {
- sl_next = sl2->next;
- sl2->next = NULL;
- free_str_list(sl2);
- sl2 = sl_next;
- }
-
- if(!sl1) {
- hd_data->klog = sl2;
- return;
- }
-
- if(sl1 && !sl2) {
- hd_data->klog = sl1;
- return;
- }
-
- /* now, try to join sl1 & sl2 */
- for(sl_last = NULL, sl = sl1; sl; sl = (sl_last = sl)->next) {
- if(!str_list_cmp(sl, sl2)) {
- free_str_list(sl);
- if(sl_last)
- sl_last->next = NULL;
- else
- sl1 = NULL;
- break;
- }
- }
-
- /* append sl2 to sl1 */
- for(ssl = &sl1; *ssl; ssl = &(*ssl)->next);
- *ssl = sl2;
-
- hd_data->klog = sl1;
-}
-
-
-/*
- * Add some klog data to the global log.
- */
-void dump_klog(hd_data_t *hd_data)
-{
- str_list_t *sl;
-
- ADD2LOG("----- kernel log -----\n");
- for(sl = hd_data->klog; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- kernel log end -----\n");
-}
+++ /dev/null
-void read_klog(hd_data_t *hd_data);
-void dump_klog(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "manual.h"
-#include "hddb.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- *
- * hardware in /var/lib/hardware/
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-typedef struct {
- int key;
- char *value;
-} hash_t;
-
-/* corresponds to hd_status_value_t */
-static hash_t status_names[] = {
- { status_no, "no" },
- { status_yes, "yes" },
- { status_unknown, "unknown" },
- { status_new, "new" },
- { 0, NULL }
-};
-
-/* corresponds to hd_hw_item_t */
-static hash_t hw_items[] = {
- { hw_sys, "system" },
- { hw_cpu, "cpu" },
- { hw_keyboard, "keyboard" },
- { hw_braille, "braille" },
- { hw_mouse, "mouse" },
- { hw_joystick, "joystick" },
- { hw_printer, "printer" },
- { hw_scanner, "scanner" },
- { hw_chipcard, "chipcard" },
- { hw_monitor, "monitor" },
- { hw_tv, "tv card" },
- { hw_display, "graphics card" },
- { hw_framebuffer, "framebuffer" },
- { hw_camera, "camera" },
- { hw_sound, "sound" },
- { hw_storage_ctrl, "storage" },
- { hw_network_ctrl, "network" },
- { hw_isdn, "isdn adapter" },
- { hw_modem, "modem" },
- { hw_network, "network interface" },
- { hw_disk, "disk" },
- { hw_partition, "partition" },
- { hw_cdrom, "cdrom" },
- { hw_floppy, "floppy" },
- { hw_manual, "manual" },
- { hw_usb_ctrl, "usb controller" },
- { hw_usb, "usb" },
- { hw_bios, "bios" },
- { hw_pci, "pci" },
- { hw_isapnp, "isapnp" },
- { hw_bridge, "bridge" },
- { hw_hub, "hub" },
- { hw_scsi, "scsi" },
- { hw_ide, "ide" },
- { hw_memory, "memory" },
- { hw_dvb, "dvb card" },
- { hw_pcmcia, "pcmcia" },
- { hw_pcmcia_ctrl, "pcmcia controller" },
- { hw_ieee1394, "firewire" },
- { hw_ieee1394_ctrl, "firewire controller" },
- { hw_hotplug, "hotplug" },
- { hw_hotplug_ctrl, "hotplug controller" },
- { hw_zip, "zip" },
- { hw_pppoe, "pppoe" },
- { hw_wlan, "wlan card" },
- { hw_dsl, "DSL adapter" },
- { hw_block, "block device" },
- { hw_tape, "tape" },
- { hw_vbe, "vesa bios" },
- { hw_bluetooth, "bluetooth" },
- { hw_unknown, "unknown" },
- { 0, NULL }
-};
-
-typedef enum {
- hw_id_unique = 1, hw_id_parent, hw_id_child, hw_id_hwclass, hw_id_model,
- hw_id_configured, hw_id_available, hw_id_needed, hw_id_cfgstring, hw_id_active
-} hw_id_t;
-
-#ifndef LIBHD_TINY
-
-#define MAN_SECT_GENERAL "General"
-#define MAN_SECT_STATUS "Status"
-#define MAN_SECT_HARDWARE "Hardware"
-
-static hash_t hw_ids_general[] = {
- { hw_id_unique, "UniqueID" },
- { hw_id_parent, "ParentID" },
- { hw_id_child, "ChildIDs" },
- { hw_id_hwclass, "HWClass" },
- { hw_id_model, "Model" },
- { 0, NULL }
-};
-
-static hash_t hw_ids_status[] = {
- { hw_id_configured, "Configured" },
- { hw_id_available, "Available" },
- { hw_id_needed, "Needed" },
- { hw_id_cfgstring, "ConfigString" },
- { hw_id_active, "Active" },
- { 0, NULL }
-};
-
-/* structure elements from hd_t */
-typedef enum {
- hwdi_bus = 1, hwdi_slot, hwdi_func, hwdi_base_class, hwdi_sub_class,
- hwdi_prog_if, hwdi_dev, hwdi_vend, hwdi_sub_dev, hwdi_sub_vend, hwdi_rev,
- hwdi_compat_dev, hwdi_compat_vend, hwdi_dev_name, hwdi_vend_name,
- hwdi_sub_dev_name, hwdi_sub_vend_name, hwdi_rev_name, hwdi_serial,
- hwdi_unix_dev_name, hwdi_unix_dev_name2, hwdi_unix_dev_names, hwdi_rom_id,
- hwdi_broken, hwdi_usb_guid, hwdi_res_mem, hwdi_res_phys_mem, hwdi_res_io,
- hwdi_res_irq, hwdi_res_dma, hwdi_res_size, hwdi_res_baud, hwdi_res_cache,
- hwdi_res_disk_geo, hwdi_res_monitor, hwdi_res_framebuffer, hwdi_features,
- hwdi_hotplug, hwdi_class_list, hwdi_drivers, hwdi_sysfs_id,
- hwdi_sysfs_busid, hwdi_sysfs_link
-} hw_hd_items_t;
-
-static hash_t hw_ids_hd_items[] = {
- { hwdi_bus, "Bus" },
- { hwdi_slot, "Slot" },
- { hwdi_func, "Function" },
- { hwdi_base_class, "BaseClass" },
- { hwdi_sub_class, "SubClass" },
- { hwdi_prog_if, "ProgIF" },
- { hwdi_dev, "DeviceID" },
- { hwdi_vend, "VendorID" },
- { hwdi_sub_dev, "SubDeviceID" },
- { hwdi_sub_vend, "SubVendorID" },
- { hwdi_rev, "RevisionID" },
- { hwdi_compat_dev, "CompatDeviceID" },
- { hwdi_compat_vend, "CompatVendorID" },
- { hwdi_dev_name, "DeviceName" },
- { hwdi_vend_name, "VendorName" },
- { hwdi_sub_dev_name, "SubDeviceName" },
- { hwdi_sub_vend_name, "SubVendorName" },
- { hwdi_rev_name, "RevisionName" },
- { hwdi_serial, "Serial" },
- { hwdi_unix_dev_name, "UnixDevice" },
- { hwdi_unix_dev_name2, "UnixDeviceAlt" },
- { hwdi_unix_dev_names, "UnixDeviceList" },
- { hwdi_rom_id, "ROMID" },
- { hwdi_broken, "Broken" },
- { hwdi_usb_guid, "USBGUID" },
- { hwdi_res_phys_mem, "Res.PhysMemory" },
- { hwdi_res_mem, "Res.Memory" },
- { hwdi_res_io, "Res.IO" },
- { hwdi_res_irq, "Res.Interrupts" },
- { hwdi_res_dma, "Res.DMA" },
- { hwdi_res_size, "Res.Size" },
- { hwdi_res_baud, "Res.Baud" },
- { hwdi_res_cache, "Res.Cache" },
- { hwdi_res_disk_geo, "Res.DiskGeometry" },
- { hwdi_res_monitor, "Res.Monitor" },
- { hwdi_res_framebuffer, "Res.Framebuffer" },
- { hwdi_features, "Features" },
- { hwdi_hotplug, "Hotplug" },
- { hwdi_class_list, "HWClassList" },
- { hwdi_drivers, "Drivers" },
- { hwdi_sysfs_id, "SysfsID" },
- { hwdi_sysfs_busid, "SysfsBusID" },
- { hwdi_sysfs_link, "SysfsLink" },
- { 0, NULL }
-};
-#endif
-
-static char *key2value(hash_t *hash, int id);
-
-#ifndef LIBHD_TINY
-
-static int value2key(hash_t *hash, char *str);
-static void dump_manual(hd_data_t *hd_data);
-static unsigned str2id(char *str);
-static void manual2hd(hd_data_t *hd_data, hd_manual_t *entry, hd_t *hd);
-static void hd2manual(hd_t *hd, hd_manual_t *entry);
-
-void hd_scan_manual(hd_data_t *hd_data)
-{
- DIR *dir;
- struct dirent *de;
- hd_manual_t *entry, **entry_next;
- int i;
- hd_t *hd, *hd1;
-
- if(!hd_probe_feature(hd_data, pr_manual)) return;
-
- hd_data->module = mod_manual;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- hd_data->manual = hd_free_manual(hd_data->manual);
- entry_next = &hd_data->manual;
-
- if((dir = opendir(HARDWARE_UNIQUE_KEYS))) {
- i = 0;
- while((de = readdir(dir))) {
- if(*de->d_name == '.') continue;
- PROGRESS(1, ++i, "read");
- if((entry = hd_manual_read_entry(hd_data, de->d_name))) {
- ADD2LOG(" got %s\n", entry->unique_id);
- *entry_next = entry;
- entry_next = &entry->next;
- }
- }
- closedir(dir);
- }
-
- /* for compatibility: read old files, too */
- if((dir = opendir(HARDWARE_DIR))) {
- i = 0;
- while((de = readdir(dir))) {
- if(*de->d_name == '.') continue;
- for(entry = hd_data->manual; entry; entry = entry->next) {
- if(entry->unique_id && !strcmp(entry->unique_id, de->d_name)) break;
- }
- if(entry) continue;
- PROGRESS(2, ++i, "read");
- if((entry = hd_manual_read_entry(hd_data, de->d_name))) {
- ADD2LOG(" got %s\n", entry->unique_id);
- *entry_next = entry;
- entry_next = &entry->next;
- }
- }
- closedir(dir);
- }
-
- if(hd_data->debug) dump_manual(hd_data);
-
- /* initialize some useful status value */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- !hd->status.configured &&
- !hd->status.available &&
- !hd->status.needed &&
- !hd->status.active &&
- !hd->status.invalid
- ) {
- hd->status.configured = status_new;
- hd->status.available = hd->module == mod_manual ? status_unknown : status_yes;
- hd->status.needed = status_no;
- hd->status.active = status_unknown;
- }
- }
-
- hd_data->flags.keep_kmods = 1;
- for(entry = hd_data->manual; entry; entry = entry->next) {
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->unique_id && !strcmp(hd->unique_id, entry->unique_id)) break;
- }
-
- if(hd) {
- /* just update config status */
- hd->status = entry->status;
- hd->status.available = status_yes;
-
- hd->config_string = new_str(entry->config_string);
- }
- else {
- /* add new entry */
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- manual2hd(hd_data, entry, hd);
-
- if(hd->status.available != status_unknown) hd->status.available = status_no;
-
- if(hd->parent_id) {
- for(hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->unique_id && !strcmp(hd1->unique_id, hd->parent_id)) {
- hd->attached_to = hd1->idx;
- break;
- }
- }
- }
- }
- }
- hd_data->flags.keep_kmods = 0;
-
-}
-
-
-void hd_scan_manual2(hd_data_t *hd_data)
-{
- hd_t *hd, *hd1;
-
- /* check if it's necessary to reconfigure this hardware */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- hd->status.reconfig = status_no;
-
- if(hd->status.needed != status_yes) continue;
-
- if(hd->status.available == status_no) {
- hd->status.reconfig = status_yes;
- continue;
- }
-
- if(hd->status.available != status_unknown) continue;
-
- for(hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1 == hd) continue;
-
- if(
- hd1->hw_class == hd->hw_class &&
- hd1->status.configured == status_new &&
- hd1->status.available == status_yes
- ) break;
- }
-
- if(hd1) hd->status.reconfig = status_yes;
- }
-}
-
-
-int value2key(hash_t *hash, char *str)
-{
- for(; hash->value; hash++) {
- if(!strcmp(hash->value, str)) break;
- }
-
- return hash->key;
-}
-
-#endif
-
-char *key2value(hash_t *hash, int id)
-{
- for(; hash->value; hash++) {
- if(hash->key == id) break;
- }
-
- return hash->value;
-}
-
-char *hd_hw_item_name(hd_hw_item_t item)
-{
- return key2value(hw_items, item);
-}
-
-
-#ifndef LIBHD_TINY
-
-char *hd_status_value_name(hd_status_value_t status)
-{
- return key2value(status_names, status);
-}
-
-/*
- * read an entry
- */
-hd_manual_t *hd_manual_read_entry(hd_data_t *hd_data, const char *id)
-{
- char path[PATH_MAX];
- int i, j, line;
- str_list_t *sl, *sl0;
- hd_manual_t *entry;
- hash_t *sect;
- char *s, *s1, *s2;
- int err = 0;
-
- snprintf(path, sizeof path, "%s/%s", HARDWARE_UNIQUE_KEYS, id);
-
- if(!(sl0 = read_file(path, 0, 0))) {
- /* try old location, too */
- snprintf(path, sizeof path, "%s/%s", HARDWARE_DIR, id);
- if(!(sl0 = read_file(path, 0, 0))) return NULL;
- }
-
- entry = new_mem(sizeof *entry);
-
- // default list: no valid entries
- sect = hw_ids_general + sizeof hw_ids_general / sizeof *hw_ids_general - 1;
-
- for(line = 1, sl = sl0; sl; sl = sl->next, line++) {
- s = sl->str;
- while(isspace(*s)) s++;
- if(!*s || *s == '#' || *s == ';') continue; /* empty lines & comments */
-
- s2 = s;
- s1 = strsep(&s2, "=");
-
- if(!s2 && *s == '[') {
- s2 = s + 1;
- s1 = strsep(&s2, "]");
- if(s1) {
- if(!strcmp(s1, MAN_SECT_GENERAL)) {
- sect = hw_ids_general;
- continue;
- }
- if(!strcmp(s1, MAN_SECT_STATUS)) {
- sect = hw_ids_status;
- continue;
- }
- if(!strcmp(s1, MAN_SECT_HARDWARE)) {
- sect = NULL;
- continue;
- }
- }
- s2 = NULL;
- }
-
- if(!s2) {
- ADD2LOG(" %s: invalid line %d\n", id, line);
- err = 1;
- break;
- }
-
- if(sect) {
- i = value2key(sect, s1);
- if(!i) {
- ADD2LOG(" %s: invalid line %d\n", id, line);
- err = 1;
- break;
- }
- s = canon_str(s2, strlen(s2));
- switch(i) {
- case hw_id_unique:
- entry->unique_id = s;
- s = NULL;
- break;
-
- case hw_id_parent:
- entry->parent_id = s;
- s = NULL;
- break;
-
- case hw_id_child:
- entry->child_ids = s;
- s = NULL;
- break;
-
- case hw_id_hwclass:
- j = value2key(hw_items, s);
- entry->hw_class = j;
- if(!j) err = 1;
- break;
-
- case hw_id_model:
- entry->model = s;
- s = NULL;
- break;
-
- case hw_id_configured:
- j = value2key(status_names, s);
- entry->status.configured = j;
- if(!j) err = 1;
- break;
-
- case hw_id_available:
- j = value2key(status_names, s);
- entry->status.available_orig =
- entry->status.available = j;
- if(!j) err = 1;
- break;
-
- case hw_id_needed:
- j = value2key(status_names, s);
- entry->status.needed = j;
- if(!j) err = 1;
- break;
-
- case hw_id_active:
- j = value2key(status_names, s);
- entry->status.active = j;
- if(!j) err = 1;
- break;
-
- case hw_id_cfgstring:
- entry->config_string = s;
- s = NULL;
- break;
-
- default:
- err = 1;
- }
-
- free_mem(s);
-
- if(err) {
- ADD2LOG(" %s: invalid line %d\n", id, line);
- break;
- }
- }
- else {
- add_str_list(&entry->key, s1);
- s = canon_str(s2, strlen(s2));
- add_str_list(&entry->value, s);
- free_mem(s);
- }
- }
-
- free_str_list(sl0);
-
- /*
- * do some basic consistency checks
- */
-
- if(!entry->unique_id || strcmp(entry->unique_id, id)) {
- ADD2LOG(" %s: unique id does not match file name\n", id);
- err = 1;
- }
-
- /*
- * if the status info is completely missing, fake some:
- * new hardware, not autodetectable, not needed
- */
- if(
- !entry->status.configured &&
- !entry->status.available &&
- !entry->status.needed &&
- !entry->status.invalid
- ) {
- entry->status.configured = status_new;
- entry->status.available = status_unknown;
- entry->status.needed = status_no;
- }
-
- if(!entry->status.active) entry->status.active = status_unknown;
-
- if(
- !entry->status.configured ||
- !entry->status.available ||
- !entry->status.needed ||
- !entry->status.active
- ) {
- ADD2LOG(" %s: incomplete status\n", id);
- err = 1;
- }
-
- if(!entry->hw_class) {
- ADD2LOG(" %s: no class\n", id);
- err = 1;
- }
-
- if(!entry->model) {
- ADD2LOG(" %s: no model\n", id);
- err = 1;
- }
-
- if(err) {
- entry = hd_free_manual(entry);
- }
-
- return entry;
-}
-
-
-/*
- * write an entry
- */
-
-int hd_manual_write_entry(hd_data_t *hd_data, hd_manual_t *entry)
-{
- FILE *f;
- char path[PATH_MAX];
- int error = 0;
- struct stat sbuf;
- str_list_t *sl1, *sl2;
-
- if(!entry) return 0;
- if(!entry->unique_id || entry->status.invalid) return 1;
-
- snprintf(path, sizeof path, "%s/%s", HARDWARE_UNIQUE_KEYS, entry->unique_id);
-
- if(!(f = fopen(path, "w"))) {
- /* maybe we have to create the HARDWARE_UNIQUE_KEYS directory first... */
-
- if(lstat(HARDWARE_DIR, &sbuf)) {
- mkdir(HARDWARE_DIR, 0755);
- }
-
- if(lstat(HARDWARE_UNIQUE_KEYS, &sbuf)) {
- mkdir(HARDWARE_UNIQUE_KEYS, 0755);
- }
-
- if(!(f = fopen(path, "w"))) return 2;
- }
-
- fprintf(f, "[%s]\n", MAN_SECT_GENERAL);
-
- if(
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_general, hw_id_unique),
- entry->unique_id
- )
- ) error = 3;
-
- if(
- entry->parent_id &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_general, hw_id_parent),
- entry->parent_id
- )
- ) error = 3;
-
- if(
- entry->child_ids &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_general, hw_id_child),
- entry->child_ids
- )
- ) error = 3;
-
- if(
- (entry->hw_class && key2value(hw_items, entry->hw_class)) &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_general, hw_id_hwclass),
- key2value(hw_items, entry->hw_class)
- )
- ) error = 3;
-
- if(
- entry->model &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_general, hw_id_model),
- entry->model
- )
- ) error = 3;
-
- fprintf(f, "\n[%s]\n", MAN_SECT_STATUS);
-
- if(
- (entry->status.configured && key2value(status_names, entry->status.configured)) &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_status, hw_id_configured),
- key2value(status_names, entry->status.configured)
- )
- ) error = 4;
-
- if(
- (entry->status.available && key2value(status_names, entry->status.available)) &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_status, hw_id_available),
- key2value(status_names, entry->status.available)
- )
- ) error = 4;
-
- if(
- (entry->status.needed && key2value(status_names, entry->status.needed)) &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_status, hw_id_needed),
- key2value(status_names, entry->status.needed)
- )
- ) error = 4;
-
- if(
- (entry->status.active && key2value(status_names, entry->status.active)) &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_status, hw_id_active),
- key2value(status_names, entry->status.active)
- )
- ) error = 4;
-
- if(
- entry->config_string &&
- !fprintf(f, "%s=%s\n",
- key2value(hw_ids_status, hw_id_cfgstring),
- entry->config_string
- )
- ) error = 4;
-
- fprintf(f, "\n[%s]\n", MAN_SECT_HARDWARE);
-
- for(
- sl1 = entry->key, sl2 = entry->value;
- sl1 && sl2;
- sl1 = sl1->next, sl2 = sl2->next
- ) {
- if(!fprintf(f, "%s=%s\n", sl1->str, sl2->str)) {
- error = 5;
- break;
- }
- }
-
- fputs("\n", f);
-
- fclose(f);
-
- /* remove old file */
- if(!error) {
- snprintf(path, sizeof path, "%s/%s", HARDWARE_DIR, entry->unique_id);
- unlink(path);
- }
-
- return error;
-}
-
-
-void dump_manual(hd_data_t *hd_data)
-{
- hd_manual_t *entry;
- static const char *txt = "manually configured hardware";
- str_list_t *sl1, *sl2;
-
- if(!hd_data->manual) return;
-
- ADD2LOG("----- %s -----\n", txt);
- for(entry = hd_data->manual; entry; entry = entry->next) {
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_general, hw_id_unique),
- entry->unique_id
- );
- if(entry->parent_id)
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_general, hw_id_parent),
- entry->parent_id
- );
- if(entry->child_ids)
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_general, hw_id_child),
- entry->child_ids
- );
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_general, hw_id_hwclass),
- key2value(hw_items, entry->hw_class)
- );
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_general, hw_id_model),
- entry->model
- );
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_status, hw_id_configured),
- key2value(status_names, entry->status.configured)
- );
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_status, hw_id_available),
- key2value(status_names, entry->status.available)
- );
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_status, hw_id_needed),
- key2value(status_names, entry->status.needed)
- );
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_status, hw_id_active),
- key2value(status_names, entry->status.active)
- );
- if(entry->config_string)
- ADD2LOG(" %s=%s\n",
- key2value(hw_ids_status, hw_id_cfgstring),
- entry->config_string
- );
- for(
- sl1 = entry->key, sl2 = entry->value;
- sl1 && sl2;
- sl1 = sl1->next, sl2 = sl2->next
- ) {
- ADD2LOG(" %s=%s\n", sl1->str, sl2->str);
- }
- }
- ADD2LOG("----- %s end -----\n", txt);
-}
-
-
-unsigned str2id(char *str)
-{
- unsigned id;
- unsigned tag = 0;
-
- if(strlen(str) == 3) return name2eisa_id(str);
-
- switch(*str) {
- case 'p':
- tag = TAG_PCI; str++; break;
-
- case 'r':
- str++; break;
-
- case 'u':
- tag = TAG_USB; str++; break;
-
- case 's':
- tag = TAG_SPECIAL; str++; break;
-
- case 'P':
- tag = TAG_PCMCIA; str++; break;
-
- }
-
- id = strtoul(str, &str, 16);
- if(*str) return 0;
-
- return MAKE_ID(tag, ID_VALUE(id));
-}
-
-
-/*
- * move info from hd_manual_t to hd_t
- */
-void manual2hd(hd_data_t *hd_data, hd_manual_t *entry, hd_t *hd)
-{
- str_list_t *sl1, *sl2;
- hw_hd_items_t item;
- unsigned tag, u0, u1, u2, u3, u4;
- hd_res_t *res;
- uint64_t u64_0, u64_1;
- char *s;
- int i;
-
- if(!hd || !entry) return;
-
- hd->unique_id = new_str(entry->unique_id);
- hd->parent_id = new_str(entry->parent_id);
- hd->child_ids = hd_split(',', entry->child_ids);
- hd->model = new_str(entry->model);
- hd->hw_class = entry->hw_class;
-
- hd->config_string = new_str(entry->config_string);
-
- hd->status = entry->status;
-
- for(
- sl1 = entry->key, sl2 = entry->value;
- sl1 && sl2;
- sl1 = sl1->next, sl2 = sl2->next
- ) {
- switch(item = value2key(hw_ids_hd_items, sl1->str)) {
- case hwdi_bus:
- hd->bus.id = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_slot:
- hd->slot = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_func:
- hd->func = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_base_class:
- hd->base_class.id = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_sub_class:
- hd->sub_class.id = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_prog_if:
- hd->prog_if.id = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_dev:
- hd->device.id = str2id(sl2->str);
- break;
-
- case hwdi_vend:
- hd->vendor.id = str2id(sl2->str);
- break;
-
- case hwdi_sub_dev:
- hd->sub_device.id = str2id(sl2->str);
- break;
-
- case hwdi_sub_vend:
- hd->sub_vendor.id = str2id(sl2->str);
- break;
-
- case hwdi_rev:
- hd->revision.id = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_compat_dev:
- hd->compat_device.id = str2id(sl2->str);
- break;
-
- case hwdi_compat_vend:
- hd->compat_vendor.id = str2id(sl2->str);
- break;
-
- case hwdi_dev_name:
- hd->device.name = new_str(sl2->str);
- break;
-
- case hwdi_vend_name:
- hd->vendor.name = new_str(sl2->str);
- break;
-
- case hwdi_sub_dev_name:
- hd->sub_device.name = new_str(sl2->str);
- break;
-
- case hwdi_sub_vend_name:
- hd->sub_vendor.name = new_str(sl2->str);
- break;
-
- case hwdi_rev_name:
- hd->revision.name = new_str(sl2->str);
- break;
-
- case hwdi_serial:
- hd->serial = new_str(sl2->str);
- break;
-
- case hwdi_unix_dev_name:
- hd->unix_dev_name = new_str(sl2->str);
- break;
-
- case hwdi_unix_dev_name2:
- hd->unix_dev_name2 = new_str(sl2->str);
- break;
-
- case hwdi_unix_dev_names:
- hd->unix_dev_names = hd_split(' ', sl2->str);
- break;
-
- case hwdi_drivers:
- hd->drivers = hd_split('|', sl2->str);
- break;
-
- case hwdi_sysfs_id:
- hd->sysfs_id = new_str(sl2->str);
- break;
-
- case hwdi_sysfs_busid:
- hd->sysfs_bus_id = new_str(sl2->str);
- break;
-
- case hwdi_sysfs_link:
- hd->sysfs_device_link = new_str(sl2->str);
- break;
-
- case hwdi_rom_id:
- hd->rom_id = new_str(sl2->str);
- break;
-
- case hwdi_broken:
- hd->broken = strtoul(sl2->str, NULL, 0);
- break;
-
- case hwdi_usb_guid:
- hd->usb_guid = new_str(sl2->str);
- break;
-
- case hwdi_hotplug:
- hd->hotplug = strtol(sl2->str, NULL, 0);
- break;
-
- case hwdi_class_list:
- for(
- u0 = 0, s = sl2->str;
- u0 < sizeof hd->hw_class_list / sizeof *hd->hw_class_list;
- u0++
- ) {
- if(*s && s[1] && (i = hex(s, 2)) >= 0) {
- hd->hw_class_list[u0] = i;
- s += 2;
- }
- else {
- break;
- }
- }
- break;
-
- case hwdi_res_mem:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_mem;
- if(sscanf(sl2->str, "0x%"SCNx64",0x%"SCNx64",%u,%u,%u", &u64_0, &u64_1, &u0, &u1, &u2) == 5) {
- res->mem.base = u64_0;
- res->mem.range = u64_1;
- res->mem.enabled = u0;
- res->mem.access = u1;
- res->mem.prefetch = u2;
- }
- break;
-
- case hwdi_res_phys_mem:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_phys_mem;
- if(sscanf(sl2->str, "0x%"SCNx64"", &u64_0) == 1) {
- res->phys_mem.range = u64_0;
- }
- break;
-
- case hwdi_res_io:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_io;
- if(sscanf(sl2->str, "0x%"SCNx64",0x%"SCNx64",%u,%u", &u64_0, &u64_1, &u0, &u1) == 4) {
- res->io.base = u64_0;
- res->io.range = u64_1;
- res->io.enabled = u0;
- res->io.access = u1;
- }
- break;
-
- case hwdi_res_irq:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_irq;
- if(sscanf(sl2->str, "%u,%u,%u", &u0, &u1, &u2) == 3) {
- res->irq.base = u0;
- res->irq.triggered = u1;
- res->irq.enabled = u2;
- }
- break;
-
- case hwdi_res_dma:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_dma;
- if(sscanf(sl2->str, "%u,%u", &u0, &u1) == 2) {
- res->dma.base = u0;
- res->dma.enabled = u1;
- }
- break;
-
- case hwdi_res_size:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_size;
- if(sscanf(sl2->str, "%u,%u,%u", &u0, &u1, &u2) == 3) {
- res->size.unit = u0;
- res->size.val1 = u1;
- res->size.val2 = u2;
- }
- break;
-
- case hwdi_res_baud:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_baud;
- if(sscanf(sl2->str, "%u,%u,%u,%u,%u", &u0, &u1, &u2, &u3, &u4) == 5) {
- res->baud.speed = u0;
- res->baud.bits = u1;
- res->baud.stopbits = u2;
- res->baud.parity = (char) u3;
- res->baud.handshake = (char) u4;
- }
- break;
-
- case hwdi_res_cache:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_cache;
- if(sscanf(sl2->str, "%u", &u0) == 1) {
- res->cache.size = u0;
- }
- break;
-
- case hwdi_res_disk_geo:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_disk_geo;
- if(sscanf(sl2->str, "%u,%u,%u,%u", &u0, &u1, &u2, &u3) == 4) {
- res->disk_geo.cyls = u0;
- res->disk_geo.heads = u1;
- res->disk_geo.sectors = u2;
- res->disk_geo.geotype = u3;
- }
- break;
-
- case hwdi_res_monitor:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_monitor;
- if(sscanf(sl2->str, "%u,%u,%u,%u", &u0, &u1, &u2, &u3) == 4) {
- res->monitor.width = u0;
- res->monitor.height = u1;
- res->monitor.vfreq = u2;
- res->monitor.interlaced = u3;
- }
- break;
-
- case hwdi_res_framebuffer:
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->any.type = res_framebuffer;
- if(sscanf(sl2->str, "%u,%u,%u,%u,%u", &u0, &u1, &u2, &u3, &u4) == 5) {
- res->framebuffer.width = u0;
- res->framebuffer.height = u1;
- res->framebuffer.bytes_p_line = u2;
- res->framebuffer.colorbits = u3;
- res->framebuffer.mode = u4;
- }
- break;
-
- case hwdi_features:
- u0 = strtoul(sl2->str, NULL, 0);
- if(u0 & (1 << 0)) hd->is.agp = 1;
- if(u0 & (1 << 1)) hd->is.isapnp = 1;
- if(u0 & (1 << 2)) hd->is.softraiddisk = 1;
- if(u0 & (1 << 3)) hd->is.zip = 1;
- if(u0 & (1 << 4)) hd->is.cdr = 1;
- if(u0 & (1 << 5)) hd->is.cdrw = 1;
- if(u0 & (1 << 6)) hd->is.dvd = 1;
- if(u0 & (1 << 7)) hd->is.dvdr = 1;
- if(u0 & (1 << 8)) hd->is.dvdram = 1;
- if(u0 & (1 << 9)) hd->is.pppoe = 1;
- if(u0 & (1 << 10)) hd->is.wlan = 1;
- break;
- }
- }
-
- if(hd->device.id || hd->vendor.id) {
- tag = ID_TAG(hd->device.id);
- tag = tag ? tag : ID_TAG(hd->vendor.id);
- tag = tag ? tag : TAG_PCI;
- hd->device.id = MAKE_ID(tag, ID_VALUE(hd->device.id));
- hd->vendor.id = MAKE_ID(tag, ID_VALUE(hd->vendor.id));
- }
-
- if(hd->sub_device.id || hd->sub_vendor.id) {
- tag = ID_TAG(hd->sub_device.id);
- tag = tag ? tag : ID_TAG(hd->sub_vendor.id);
- tag = tag ? tag : TAG_PCI;
- hd->sub_device.id = MAKE_ID(tag, ID_VALUE(hd->sub_device.id));
- hd->sub_vendor.id = MAKE_ID(tag, ID_VALUE(hd->sub_vendor.id));
- }
-
- if(hd->compat_device.id || hd->compat_vendor.id) {
- tag = ID_TAG(hd->compat_device.id);
- tag = tag ? tag : ID_TAG(hd->compat_vendor.id);
- tag = tag ? tag : TAG_PCI;
- hd->compat_device.id = MAKE_ID(tag, ID_VALUE(hd->compat_device.id));
- hd->compat_vendor.id = MAKE_ID(tag, ID_VALUE(hd->compat_vendor.id));
- }
-
- if(hd->status.available == status_unknown) hd->is.manual = 1;
-
- /* create some entries, if missing */
-
- if(!hd->device.id && !hd->vendor.id && !hd->device.name) {
- hd->device.name = new_str(hd->model);
- }
-
- if(hd->hw_class && !hd->base_class.id) {
- switch(hd->hw_class) {
- case hw_cdrom:
- hd->base_class.id = bc_storage_device;
- hd->sub_class.id = sc_sdev_cdrom;
- break;
-
- case hw_mouse:
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_other;
- break;
-
- default:
- break;
- }
- }
-
- hddb_add_info(hd_data, hd);
-}
-
-
-void hd2manual(hd_t *hd, hd_manual_t *entry)
-{
- char *s, *t;
- hd_res_t *res;
- str_list_t *sl;
- unsigned u;
-
- if(!hd || !entry) return;
-
- entry->unique_id = new_str(hd->unique_id);
- entry->parent_id = new_str(hd->parent_id);
- entry->child_ids = hd_join(",", hd->child_ids);
- entry->model = new_str(hd->model);
- entry->hw_class = hd->hw_class;
-
- entry->config_string = new_str(hd->config_string);
-
- entry->status = hd->status;
-
- if(
- !entry->status.configured &&
- !entry->status.available &&
- !entry->status.needed &&
- !entry->status.active &&
- !entry->status.invalid
- ) {
- entry->status.configured = status_new;
- entry->status.available = hd->module == mod_manual ? status_unknown : status_yes;
- entry->status.needed = status_no;
- entry->status.active = status_unknown;
- }
-
- s = NULL;
-
- if(hd->broken) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_broken));
- str_printf(&s, 0, "0x%x", hd->broken);
- add_str_list(&entry->value, s);
- }
-
- if(hd->bus.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_bus));
- str_printf(&s, 0, "0x%x", hd->bus.id);
- add_str_list(&entry->value, s);
- }
-
- if(hd->slot) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_slot));
- str_printf(&s, 0, "0x%x", hd->slot);
- add_str_list(&entry->value, s);
- }
-
- if(hd->func) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_func));
- str_printf(&s, 0, "0x%x", hd->func);
- add_str_list(&entry->value, s);
- }
-
- if(hd->base_class.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_base_class));
- str_printf(&s, 0, "0x%x", hd->base_class.id);
- add_str_list(&entry->value, s);
- }
-
- if(hd->sub_class.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sub_class));
- str_printf(&s, 0, "0x%x", hd->sub_class.id);
- add_str_list(&entry->value, s);
- }
-
- if(hd->prog_if.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_prog_if));
- str_printf(&s, 0, "0x%x", hd->prog_if.id);
- add_str_list(&entry->value, s);
- }
-
- if(hd->device.id || hd->vendor.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_vend));
- add_str_list(&entry->value, vend_id2str(hd->vendor.id));
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_dev));
- str_printf(&s, 0, "%04x", ID_VALUE(hd->device.id));
- add_str_list(&entry->value, s);
- }
-
- if(hd->sub_device.id || hd->sub_vendor.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sub_vend));
- add_str_list(&entry->value, vend_id2str(hd->sub_vendor.id));
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sub_dev));
- str_printf(&s, 0, "%04x", ID_VALUE(hd->sub_device.id));
- add_str_list(&entry->value, s);
- }
-
- if(hd->revision.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_rev));
- str_printf(&s, 0, "0x%x", hd->revision.id);
- add_str_list(&entry->value, s);
- }
-
- if(hd->compat_device.id || hd->compat_vendor.id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_compat_vend));
- add_str_list(&entry->value, vend_id2str(hd->compat_vendor.id));
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_compat_dev));
- str_printf(&s, 0, "%04x", ID_VALUE(hd->compat_device.id));
- add_str_list(&entry->value, s);
- }
-
- if(hd->device.name) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_dev_name));
- add_str_list(&entry->value, hd->device.name);
- }
-
- if(hd->vendor.name) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_vend_name));
- add_str_list(&entry->value, hd->vendor.name);
- }
-
- if(hd->sub_device.name) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sub_dev_name));
- add_str_list(&entry->value, hd->sub_device.name);
- }
-
- if(hd->sub_vendor.name) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sub_vend_name));
- add_str_list(&entry->value, hd->sub_vendor.name);
- }
-
- if(hd->revision.name) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_rev_name));
- add_str_list(&entry->value, hd->revision.name);
- }
-
- if(hd->serial) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_serial));
- add_str_list(&entry->value, hd->serial);
- }
-
- if(hd->unix_dev_name) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_unix_dev_name));
- add_str_list(&entry->value, hd->unix_dev_name);
- }
-
- if(hd->unix_dev_name2) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_unix_dev_name2));
- add_str_list(&entry->value, hd->unix_dev_name2);
- }
-
- if(hd->unix_dev_names) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_unix_dev_names));
- s = free_mem(s);
- s = hd_join(" ", hd->unix_dev_names);
- add_str_list(&entry->value, s);
- }
-
- if(hd->drivers) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_drivers));
- s = free_mem(s);
- s = hd_join("|", hd->drivers);
- add_str_list(&entry->value, s);
- }
-
- if(hd->sysfs_id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sysfs_id));
- add_str_list(&entry->value, hd->sysfs_id);
- }
-
- if(hd->sysfs_bus_id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sysfs_busid));
- add_str_list(&entry->value, hd->sysfs_bus_id);
- }
-
- if(hd->sysfs_device_link) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_sysfs_link));
- add_str_list(&entry->value, hd->sysfs_device_link);
- }
-
- if(hd->rom_id) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_rom_id));
- add_str_list(&entry->value, hd->rom_id);
- }
-
- if(hd->usb_guid) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_usb_guid));
- add_str_list(&entry->value, hd->usb_guid);
- }
-
- if(hd->hotplug) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_hotplug));
- str_printf(&s, 0, "%d", hd->hotplug);
- add_str_list(&entry->value, s);
- }
-
- s = free_mem(s);
- for(u = 0; u < sizeof hd->hw_class_list / sizeof *hd->hw_class_list; u++) {
- str_printf(&s, -1, "%02x", hd->hw_class_list[u]);
- }
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_class_list));
- add_str_list(&entry->value, s);
-
- u = 0;
- if(hd->is.agp) u |= 1 << 0;
- if(hd->is.isapnp) u |= 1 << 1;
- if(hd->is.softraiddisk) u |= 1 << 2;
- if(hd->is.zip) u |= 1 << 3;
- if(hd->is.cdr) u |= 1 << 4;
- if(hd->is.cdrw) u |= 1 << 5;
- if(hd->is.dvd) u |= 1 << 6;
- if(hd->is.dvdr) u |= 1 << 7;
- if(hd->is.dvdram) u |= 1 << 8;
- if(hd->is.pppoe) u |= 1 << 9;
- if(hd->is.wlan) u |= 1 << 10;
-
- if(u) {
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_features));
- str_printf(&s, 0, "0x%x", u);
- add_str_list(&entry->value, s);
- }
-
- for(res = hd->res; res; res = res->next) {
- sl = NULL;
- switch(res->any.type) {
- case res_mem:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_mem));
- str_printf(&s, 0, "0x%"PRIx64"", res->mem.base);
- add_str_list(&sl, s);
- str_printf(&s, 0, "0x%"PRIx64"", res->mem.range);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->mem.enabled);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->mem.access);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->mem.prefetch);
- add_str_list(&sl, s);
- break;
-
- case res_phys_mem:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_phys_mem));
- str_printf(&s, 0, "0x%"PRIx64"", res->phys_mem.range);
- add_str_list(&sl, s);
- break;
-
- case res_io:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_io));
- str_printf(&s, 0, "0x%"PRIx64"", res->io.base);
- add_str_list(&sl, s);
- str_printf(&s, 0, "0x%"PRIx64"", res->io.range);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->io.enabled);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->io.access);
- add_str_list(&sl, s);
- break;
-
- case res_irq:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_irq));
- str_printf(&s, 0, "%u", res->irq.base);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->irq.triggered);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->irq.enabled);
- add_str_list(&sl, s);
- break;
-
- case res_dma:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_dma));
- str_printf(&s, 0, "%u", res->dma.base);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->dma.enabled);
- add_str_list(&sl, s);
- break;
-
- case res_size:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_size));
- str_printf(&s, 0, "%u", res->size.unit);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%"PRIu64, res->size.val1);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%"PRIu64, res->size.val2);
- add_str_list(&sl, s);
- break;
-
- case res_baud:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_baud));
- str_printf(&s, 0, "%u", res->baud.speed);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->baud.bits);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->baud.stopbits);
- add_str_list(&sl, s);
- str_printf(&s, 0, "0x%02x", (unsigned) res->baud.parity);
- add_str_list(&sl, s);
- str_printf(&s, 0, "0x%02x", (unsigned) res->baud.handshake);
- add_str_list(&sl, s);
- break;
-
- case res_cache:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_cache));
- str_printf(&s, 0, "%u", res->cache.size);
- add_str_list(&sl, s);
- break;
-
- case res_disk_geo:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_disk_geo));
- str_printf(&s, 0, "%u", res->disk_geo.cyls);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->disk_geo.heads);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->disk_geo.sectors);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->disk_geo.geotype);
- add_str_list(&sl, s);
- break;
-
- case res_monitor:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_monitor));
- str_printf(&s, 0, "%u", res->monitor.width);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->monitor.height);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->monitor.vfreq);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->monitor.interlaced);
- add_str_list(&sl, s);
- break;
-
- case res_framebuffer:
- add_str_list(&entry->key, key2value(hw_ids_hd_items, hwdi_res_framebuffer));
- str_printf(&s, 0, "%u", res->framebuffer.width);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->framebuffer.height);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->framebuffer.bytes_p_line);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->framebuffer.colorbits);
- add_str_list(&sl, s);
- str_printf(&s, 0, "%u", res->framebuffer.mode);
- add_str_list(&sl, s);
- break;
-
- default:
- break;
- }
- /* keep entry->key & entry->value symmetrical! */
- if(sl) {
- t = hd_join(",", sl);
- add_str_list(&entry->value, t);
- free_mem(t);
- free_str_list(sl);
- }
- }
-
- free_mem(s);
-}
-
-
-hd_t *hd_read_config(hd_data_t *hd_data, const char *id)
-{
- hd_t *hd = NULL;
- hd_manual_t *entry;
-
- hddb_init(hd_data);
-
- entry = hd_manual_read_entry(hd_data, id);
-
- if(entry) {
- hd = new_mem(sizeof *hd);
- hd->module = hd_data->module;
- hd->line = __LINE__;
- hd->tag.freeit = 1; /* make it a 'stand alone' entry */
- manual2hd(hd_data, entry, hd);
- hd_free_manual(entry);
- }
-
- return hd;
-}
-
-
-int hd_write_config(hd_data_t *hd_data, hd_t *hd)
-{
- int err = 0;
- hd_manual_t *entry;
-
- if(!hd_report_this(hd_data, hd)) return 0;
-
- entry = new_mem(sizeof *entry);
-
- hd2manual(hd, entry);
-
- err = entry->unique_id ? hd_manual_write_entry(hd_data, entry) : 5;
-
- hd_free_manual(entry);
-
- return err;
-}
-
-
-#endif /* LIBHD_TINY */
-
+++ /dev/null
-void hd_scan_manual(hd_data_t *hd_data);
-void hd_scan_manual2(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "memory.h"
-#include "klog.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * memory stuff
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-uint64_t kcore_mem(hd_data_t *hd_data);
-uint64_t klog_mem(hd_data_t *hd_data, uint64_t *alt);
-uint64_t klog_mem2(hd_data_t *hd_data);
-uint64_t meminfo_mem(hd_data_t *hd_data);
-
-void hd_scan_memory(hd_data_t *hd_data)
-{
- hd_t *hd;
- uint64_t kcore, klog, klog_alt, klog2, meminfo, msize0, msize1, u;
- hd_res_t *res;
- int i;
- int exact;
-
- if(!hd_probe_feature(hd_data, pr_memory)) return;
-
- hd_data->module = mod_memory;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "main memory size");
-
- kcore = kcore_mem(hd_data);
- klog = klog_mem(hd_data, &klog_alt);
- klog2 = klog_mem2(hd_data);
- if(klog2 > klog) klog = klog2;
- meminfo = meminfo_mem(hd_data);
-
- msize0 = meminfo > klog ? meminfo : klog;
- if(!msize0) msize0 = kcore;
-
- exact = 0;
- if(msize0 && kcore >= msize0 && ((kcore - msize0) << 4) / msize0 == 0) {
- /* trust kcore value if it's approx. msize0 */
- msize0 = kcore;
- exact = 1;
- }
- msize1 = msize0;
- if(meminfo > msize1) { msize1 = meminfo; exact = 0; }
- if(klog_alt > msize0) msize0 = klog_alt;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_main_mem;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->mem.type = res_mem;
- res->mem.range = msize0;
- res->mem.access = acc_rw;
- res->mem.enabled = 1;
-
- /* round it somewhat */
- for(i = 0, u = msize1; u; i++) {
- u >>= 1;
- }
- if(i > 10) { /* We *do* have at least 1k memory, do we? */
- msize1 >>= i - (exact ? 8 : 5);
- msize1++;
- msize1 >>= 1;
- msize1 <<= i - (exact ? 7 : 4);
- }
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->phys_mem.type = res_phys_mem;
- res->phys_mem.range = msize1;
-}
-
-uint64_t kcore_mem(hd_data_t *hd_data)
-{
- uint64_t u = 0;
- size_t ps = getpagesize();
- struct stat sb;
-
- if(!stat(PROC_KCORE, &sb)) {
- u = sb.st_size;
- if(u > ps) u -= ps;
-
-#if 0
- /* we'll assume no mem modules with less than 256k */
- u += 1 << 17;
- u &= -1 << 18;
-#endif
- }
-
- ADD2LOG(" kcore mem: 0x%"PRIx64"\n", u);
-
- return u;
-}
-
-
-uint64_t klog_mem(hd_data_t *hd_data, uint64_t *alt)
-{
- uint64_t u = 0, u0, u1, u2, u3, mem0 = 0, mem1 = 0;
- str_list_t *sl;
- char *s;
- int i;
-
- if(!hd_data->klog) read_klog(hd_data);
-
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(strstr(sl->str, "<6>Memory: ") == sl->str) {
- if(sscanf(sl->str, "<6>Memory: %"SCNu64"k/%"SCNu64"k", &u0, &u1) == 2) {
- mem0 = u1 << 10;
- }
- if(
- (i = sscanf(sl->str, "<6>Memory: %"SCNu64"k available (%"SCNu64"k kernel code, %"SCNu64"k data, %"SCNu64"k", &u0, &u1, &u2, &u3)) == 4 || i == 1
- ) {
- mem0 = (i == 1 ? u0 : u0 + u1 + u2 + u3) << 10;
- }
- if(
- (s = strstr(sl->str, "[")) &&
- sscanf(s, "[%"SCNx64",%"SCNx64"]", &u0, &u1) == 2 &&
- u1 > u0
- ) {
- mem1 = u1 - u0;
- }
- break;
- }
- }
-
- u = mem0 ? mem0 : mem1;
-
-#if 0
- /* round it somewhat */
- for(i = 0, u0 = u; u0; i++) {
- u0 >>= 1;
- }
- if(i > 10) { /* We *do* have at least 1k memory, do we? */
- u >>= i - 6;
- u++;
- u >>= 1;
- u <<= i - 5;
- }
-#endif
-
- ADD2LOG(" klog mem 0: 0x%"PRIx64"\n", mem0);
- ADD2LOG(" klog mem 1: 0x%"PRIx64"\n", mem1);
- ADD2LOG(" klog mem: 0x%"PRIx64"\n", u);
-
- *alt = mem1;
-
- return u;
-}
-
-uint64_t klog_mem2(hd_data_t *hd_data)
-{
- uint64_t u0, u1, mem = 0;
- str_list_t *sl;
- char buf[64];
-
- if(!hd_data->klog) read_klog(hd_data);
-
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(strstr(sl->str, "<6>BIOS-provided physical RAM map:") == sl->str) {
- for(sl = sl->next ; sl; sl = sl->next) {
- ADD2LOG(" -- %s", sl->str);
- if(sscanf(sl->str, "<4> BIOS-e820: %"SCNx64" - %"SCNx64" (%63s", &u0, &u1, buf) != 3) break;
- if(strcmp(buf, "usable)")) continue;
- if(u1 < u0) break;
- mem += u1 - u0;
- }
- break;
- }
- }
-
- ADD2LOG(" bios mem: 0x%"PRIx64"\n", mem);
-
- return mem;
-}
-
-uint64_t meminfo_mem(hd_data_t *hd_data)
-{
- uint64_t u = 0, u0;
- str_list_t *sl;
-
- sl = read_file(PROC_MEMINFO, 0, 1);
-
- if(sl && sscanf(sl->str, "MemTotal: %"SCNu64"", &u0) == 1) {
- u = u0 << 10;
- }
-
- free_str_list(sl);
-
- ADD2LOG(" meminfo: 0x%"PRIx64"\n", u);
-
- return u;
-}
-
-
+++ /dev/null
-void hd_scan_memory(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-
-#include <linux/hdreg.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "misc.h"
-#include "klog.h"
-
-static void read_ioports(misc_t *m);
-static void read_dmas(misc_t *m);
-static void read_irqs(misc_t *m);
-static int active_vga_card(hd_t *);
-
-static void dump_misc_proc_data(hd_data_t *hd_data);
-static void dump_misc_data(hd_data_t *hd_data);
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * misc info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-void hd_scan_misc(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
- int fd, i;
- char *s = NULL;
- bios_info_t *bt = NULL;
- char par[] = "parport0";
- int fd_ser0, fd_ser1;
-
- if(!hd_probe_feature(hd_data, pr_misc)) return;
-
- hd_data->module = mod_misc;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->misc = free_misc(hd_data->misc);
-
- PROGRESS(9, 0, "kernel log");
- read_klog(hd_data);
- if((hd_data->debug & HD_DEB_MISC)) dump_klog(hd_data);
-
- PROGRESS(1, 0, "misc data");
- hd_data->misc = new_mem(sizeof *hd_data->misc);
-
- /* this is enough to load the module */
- fd_ser0 = fd_ser1 = -1;
-
-#if !defined(__sparc__)
- /* On sparc, the close needs too long */
- if(hd_probe_feature(hd_data, pr_misc_serial)) {
- PROGRESS(1, 1, "open serial");
- fd_ser0 = open("/dev/ttyS0", O_RDONLY | O_NONBLOCK);
- fd_ser1 = open("/dev/ttyS1", O_RDONLY | O_NONBLOCK);
- /* keep the devices open until the resources have been read */
- }
-#endif
-
- /* this is enough to load the module */
- if(!hd_data->flags.no_parport && hd_probe_feature(hd_data, pr_misc_par)) {
- PROGRESS(1, 2, "open parallel");
- /* what can the BIOS tell us? */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_internal &&
- hd->sub_class.id == sc_int_bios &&
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- hd->detail->bios.data
- ) break;
- }
- if(hd) {
- bt = hd->detail->bios.data;
- if(bt->par_port0) {
- str_printf(&s, 0, "io=0x%x", bt->par_port0);
- if(bt->par_port1) {
- str_printf(&s, -1, ",0x%x", bt->par_port1);
- if(bt->par_port2) str_printf(&s, -1, ",0x%x", bt->par_port2);
- }
- str_printf(&s, -1, " irq=none,none,none");
- }
- unload_module(hd_data, "parport_probe");
- unload_module(hd_data, "lp");
- unload_module(hd_data, "parport_pc");
- unload_module(hd_data, "parport");
-
- /* now load it with the right io */
- load_module(hd_data, "parport");
- load_module_with_params(hd_data, "parport_pc", s);
- free_mem(s);
- }
- /* now load the rest of the modules */
- fd = open("/dev/lp0", O_RDONLY | O_NONBLOCK);
- if(fd >= 0) close(fd);
- }
-
- /*
- * floppy driver resources are allocated only temporarily,
- * so we access it just before we read the resources
- */
- if(hd_probe_feature(hd_data, pr_misc_floppy)) {
- /* look for a floppy *device* entry... */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage_device &&
- hd->sub_class.id == sc_sdev_floppy &&
- hd->unix_dev_name &&
- !strncmp(hd->unix_dev_name, "/dev/fd", sizeof "/dev/fd" - 1)
- ) {
-
- PROGRESS(1, 3, "read floppy");
- i = 5;
- hd->block0 = read_block0(hd_data, hd->unix_dev_name, &i);
- hd->is.notready = hd->block0 ? 0 : 1;
- if(i < 0) {
- hd->tag.remove = 1;
- ADD2LOG("misc.floppy: removing floppy entry %u (timed out)\n", hd->idx);
- }
-
- if(!hd->is.notready) {
- struct hd_geometry geo;
- int fd;
- unsigned size, blk_size = 0x200;
-
- fd = open(hd->unix_dev_name, O_RDONLY | O_NONBLOCK);
- if(fd >= 0) {
- if(!ioctl(fd, HDIO_GETGEO, &geo)) {
- ADD2LOG("floppy ioctl(geo) ok\n");
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->disk_geo.type = res_disk_geo;
- res->disk_geo.cyls = geo.cylinders;
- res->disk_geo.heads = geo.heads;
- res->disk_geo.sectors = geo.sectors;
- res->disk_geo.geotype = geo_logical;
- size = geo.cylinders * geo.heads * geo.sectors;
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_size && res->size.unit == size_unit_sectors) {
- res->size.val1 = size; res->size.val2 = blk_size;
- break;
- }
- }
- if(!res) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.unit = size_unit_sectors;
- res->size.val1 = size; res->size.val2 = blk_size;
- }
- }
- close(fd);
- }
- }
-
- break;
- }
- }
- remove_tagged_hd_entries(hd_data);
- }
-
- PROGRESS(2, 1, "io");
- read_ioports(hd_data->misc);
-
- PROGRESS(2, 2, "dma");
- read_dmas(hd_data->misc);
-
- PROGRESS(2, 3, "irq");
- read_irqs(hd_data->misc);
-
- if((hd_data->debug & HD_DEB_MISC)) dump_misc_proc_data(hd_data);
-
- if(fd_ser0 >= 0) close(fd_ser0);
- if(fd_ser1 >= 0) close(fd_ser1);
-
- /* now create some system generic entries */
-
- /* FPU */
- PROGRESS(3, 0, "FPU");
- res = NULL;
- gather_resources(hd_data->misc, &res, "fpu", 0);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_fpu;
- hd->res = res;
- }
-
- /* DMA */
- PROGRESS(3, 1, "DMA");
- res = NULL;
- gather_resources(hd_data->misc, &res, "dma1", 0);
- gather_resources(hd_data->misc, &res, "dma2", 0);
- gather_resources(hd_data->misc, &res, "dma page reg", 0);
- gather_resources(hd_data->misc, &res, "cascade", W_DMA);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_system;
- hd->sub_class.id = sc_sys_dma;
- hd->res = res;
- }
-
- /* PIC */
- PROGRESS(3, 2, "PIC");
- res = NULL;
- gather_resources(hd_data->misc, &res, "pic1", 0);
- gather_resources(hd_data->misc, &res, "pic2", 0);
- gather_resources(hd_data->misc, &res, "cascade", W_IRQ);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_system;
- hd->sub_class.id = sc_sys_pic;
- hd->res = res;
- }
-
- /* timer */
- PROGRESS(3, 3, "timer");
- res = NULL;
- gather_resources(hd_data->misc, &res, "timer", 0);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_system;
- hd->sub_class.id = sc_sys_timer;
- hd->res = res;
- }
-
- /* real time clock */
- PROGRESS(3, 4, "RTC");
- res = NULL;
- gather_resources(hd_data->misc, &res, "rtc", 0);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_system;
- hd->sub_class.id = sc_sys_rtc;
- hd->res = res;
- }
-
- /* keyboard */
- res = NULL;
- gather_resources(hd_data->misc, &res, "keyboard", 0);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_input;
- hd->sub_class.id = sc_inp_keyb;
- hd->res = res;
- }
-
- /* parallel ports */
- for(i = 0; i < 1; i++, par[sizeof par - 2]++) {
- res = NULL;
- gather_resources(hd_data->misc, &res, par, 0);
- if(res) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_par;
- str_printf(&hd->unix_dev_name, 0, "/dev/lp%d", i);
- hd->res = res;
- }
- }
-
- /* floppy controller */
- res = NULL;
- gather_resources(hd_data->misc, &res, "floppy", 0);
- gather_resources(hd_data->misc, &res, "floppy DIR", 0);
- if(res) {
- /* look for an existing entry */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_storage && hd->sub_class.id == sc_sto_floppy) break;
- }
-
- /* missing, so create one */
- if(!hd) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_floppy;
- }
-
- hd->res = res;
- }
-
- /*
- * look for PS/2 port
- *
- * The catch is, that sometimes /dev/psaux is accessible only for root,
- * so the open() may fail but there are irq events registered.
- *
- */
- fd = open(DEV_PSAUX, O_RDONLY | O_NONBLOCK);
- if(fd >= 0) close(fd);
-
- res = NULL;
- gather_resources(hd_data->misc, &res, "PS/2 Mouse", 0);
-
- if(res || fd >= 0) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_ps2;
-
- if(res) {
- hd->res = res;
- }
- }
-}
-
-
-void hd_scan_misc2(hd_data_t *hd_data)
-{
- hd_t *hd, *hd1;
- misc_t *m;
- hd_res_t *res, *res1, *res2;
- int i;
-
- if(!hd_probe_feature(hd_data, pr_misc)) return;
-
- hd_data->module = mod_misc;
-
- PROGRESS(5, 0, "misc data");
-
- /* create some more system generic entries */
-
- /* IDE */
-
-// ###### add special ide detail to hd_t!!!
- res = NULL;
- gather_resources(hd_data->misc, &res, "ide0", 0);
- gather_resources(hd_data->misc, &res, "ide1", 0);
- gather_resources(hd_data->misc, &res, "ide2", 0);
- gather_resources(hd_data->misc, &res, "ide3", 0);
- if(res) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_storage &&
- hd->sub_class.id == sc_sto_ide &&
- have_common_res(hd->res, res)
- ) break;
- }
- if(!hd) {
- /* eg. non-PCI IDE controller */
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_ide;
- /* use join_res to join the i/o ranges of ide0/1 */
- join_res_io(&hd->res, res);
- join_res_irq(&hd->res, res);
- join_res_dma(&hd->res, res);
- free_res_list(res);
- }
- else {
- /* eg. PCI IDE controller, add resources */
- join_res_io(&hd->res, res);
- join_res_irq(&hd->res, res);
- join_res_dma(&hd->res, res);
- free_res_list(res);
- }
- }
-
- /* VGA */
- res = NULL;
- gather_resources(hd_data->misc, &res, "vga+", 0);
- gather_resources(hd_data->misc, &res, "vesafb", 0);
- if(res) {
- for(i = 0, hd1 = NULL, hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_display && hd->sub_class.id == sc_dis_vga) {
- i++;
- hd1 = hd;
- }
- }
- if(i == 0) {
- /* non-PCI VGA card ??? - really, we shouldn't care... */
- /* FIX THIS !!! ############### */
-#ifdef __alpha__
- free_res_list(res);
-#else
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->res = res;
-#endif
- }
- else if(i == 1) {
- /* 1 PCI vga card, add resources */
- join_res_io(&hd1->res, res);
- join_res_irq(&hd1->res, res);
- join_res_dma(&hd1->res, res);
- free_res_list(res);
- hd_data->display = hd1->idx;
- }
- else {
- /* more than 1: look again, now only 'active' cards */
- for(i = 0, hd1 = NULL, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_display &&
- hd->sub_class.id == sc_dis_vga &&
- active_vga_card(hd)
- ) {
- i++;
- hd1 = hd;
- }
- }
- if(i == 1) {
- /* 'the' active PCI vga card, add resources */
- join_res_io(&hd1->res, res);
- join_res_irq(&hd1->res, res);
- join_res_dma(&hd1->res, res);
- hd_data->display = hd1->idx;
- }
- else {
- /* now, what??? */
- ADD2LOG("Oopy, could not figure out *the* active display adapter!\n");
- }
- free_res_list(res);
- }
- }
-
- /* serial ports */
- res = NULL;
- gather_resources(hd_data->misc, &res, "serial(auto)", 0);
- gather_resources(hd_data->misc, &res, "serial(set)", 0);
- gather_resources(hd_data->misc, &res, "serial", 0);
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_comm && hd->sub_class.id == sc_com_ser) {
- for(res1 = hd->res; res1; res1 = res1->next) {
- for(res2 = res; res2; res2 = res2->next) {
- if(res1->any.type == res2->any.type) {
- switch(res1->any.type) {
- case res_irq:
- if(res1->irq.base == res2->irq.base) {
- res2->any.type = res_any;
- }
- break;
- case res_io:
- if(
- res1->io.base == res2->io.base &&
- (!res1->io.range || res1->io.range == res2->io.range)
- ) {
- res1->io.range = res2->io.range;
- res2->any.type = res_any;
- }
- break;
- default: /* gcc -Wall */
- break;
- }
- }
- }
- }
- }
- }
-
- /* if any of the serial resources are unaccounted for, make an extra entry */
- for(res2 = res; res2; res2 = res2->next) {
- if(res2->any.type != res_any) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_ser;
- hd->prog_if.id = 0x80;
- for(; res2; res2 = res2->next) {
- if(res2->any.type != res_any) {
- res1 = add_res_entry(&hd->res, new_mem(sizeof *res));
- *res1 = *res2;
- res1->next = NULL;
- }
- }
- break;
- }
- }
- free_res_list(res);
-
- /* go through our list and assign event counts to irq entries */
- m = hd_data->misc;
- for(hd = hd_data->hd; hd; hd = hd->next) {
- for(res = hd->res; res; res = res->next) {
- if(res->irq.type == res_irq) {
- for(i = 0; (unsigned) i < m->irq_len; i++) {
- if(res->irq.base == m->irq[i].irq) {
- res->irq.triggered = m->irq[i].events;
- break;
- }
- }
- }
- }
- }
-
- /* look for entries with matching start address */
- m = hd_data->misc;
- for(hd = hd_data->hd; hd; hd = hd->next) {
- for(res = hd->res; res; res = res->next) {
- if(res->io.type == res_io) {
- for(i = 0; (unsigned) i < m->io_len; i++) {
- if(res->io.base == m->io[i].addr && res->io.range < m->io[i].size) {
- res->io.range = m->io[i].size;
- break;
- }
- }
- }
- }
- }
-
- if((hd_data->debug & HD_DEB_MISC)) dump_misc_data(hd_data);
-}
-
-
-/*
- * read /proc/ioports
- */
-void read_ioports(misc_t *m)
-{
- char buf[100];
- misc_io_t *r;
- uint64_t u, v;
- str_list_t *sl;
-
- if(!(m->proc_io = read_file(PROC_IOPORTS, 0, 0))) return;
-
- for(sl = m->proc_io; sl; sl = sl->next) {
- if(sscanf(sl->str, " %"PRIx64" - %"PRIx64" : %99[^\n]", &u, &v, buf) == 3) {
- m->io = add_mem(m->io, sizeof *m->io, m->io_len);
- r = m->io + m->io_len++;
- r->addr = u;
- r->size = v >= u ? v - u + 1 : 0;
- r->dev = new_str(buf);
- }
- }
-}
-
-/*
- * read /proc/dma
- */
-void read_dmas(misc_t *m)
-{
- char buf[100];
- misc_dma_t *d;
- unsigned u;
- str_list_t *sl;
-
- if(!(m->proc_dma = read_file(PROC_DMA, 0, 0))) return;
-
- for(sl = m->proc_dma; sl; sl = sl->next) {
- if(sscanf(sl->str, " %u : %99[^\n]", &u, buf) == 2) {
- m->dma = add_mem(m->dma, sizeof *m->dma, m->dma_len);
- d = m->dma + m->dma_len++;
- d->channel = u;
- d->dev = new_str(buf);
- }
- }
-}
-
-
-/*
- * read /proc/interrupts
- *
- * This is somewhat more tricky, as the irq event counts are done separately
- * per cpu *and* there may be irq sharing.
- */
-void read_irqs(misc_t *m)
-{
- char buf[100], buf2[100], *s;
- misc_irq_t *ir;
- int i, j;
- unsigned u, v, k;
- str_list_t *sl;
-
- if(!(m->proc_irq = read_file(PROC_INTERRUPTS, 1, 0))) return;
-
- for(sl = m->proc_irq; sl; sl = sl->next) {
- /* irq */
- i = 0;
- if(sscanf(sl->str, " %u: %n", &u, &i) < 1) continue;
- v = 0;
- j = i;
- /* add up all event counters */
- while(j < (int) strlen(sl->str) && sscanf(sl->str + j, " %u %n", &k, &i) >= 1) {
- if(!i) break;
- v += k;
- j += i;
- }
- /* device driver name string */
-#if defined(__PPC__)
- if(
- sscanf(sl->str + j, " %*s Edge %99[^\n]", buf) == 1 ||
- sscanf(sl->str + j, " %*s Level %99[^\n]", buf) == 1 ||
- sscanf(sl->str + j, " %*s %99[^\n]", buf) == 1
- ) {
-#else
-#if defined(__alpha__) || defined(__sparc__)
- if(sscanf(sl->str + j, " %99[^\n]", buf) == 1) {
-#else /* __i386__ || __x86_64__ || __ia64__ */
- if(sscanf(sl->str + j, " %*s %99[^\n]", buf) == 1) {
-#endif
-#endif
- m->irq = add_mem(m->irq, sizeof *m->irq, m->irq_len);
- ir = m->irq + m->irq_len++;
- ir->irq = u;
- ir->events = v;
-
- /* split device driver names (separated by ',') */
- s = buf;
- while(*s && sscanf(s, " %99[^,] %n", buf2, &j) >= 1) {
- ir->dev = add_mem(ir->dev, sizeof *ir->dev, ir->devs);
- ir->dev[ir->devs++] = new_str(buf2);
- s += j;
- if(*s) s++; /* skip ',' */
- }
- }
- }
-}
-
-void gather_resources(misc_t *m, hd_res_t **r, char *name, unsigned which)
-{
- int i, j;
- hd_res_t *res;
-
- if(!m) return;
-
- if(!which) which = W_IO | W_DMA | W_IRQ;
-
- if((which & W_IO)) for(i = 0; (unsigned) i < m->io_len; i++) {
- if(!strcmp(name, m->io[i].dev)) {
- res = add_res_entry(r, new_mem(sizeof **r));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = m->io[i].addr;
- res->io.range = m->io[i].size;
- res->io.access = acc_rw;
- m->io[i].tag++;
- }
- }
-
- if((which & W_DMA)) for(i = 0; (unsigned) i < m->dma_len; i++) {
- if(!strcmp(name, m->dma[i].dev)) {
- res = add_res_entry(r, new_mem(sizeof **r));
- res->dma.type = res_dma;
- res->dma.enabled = 1;
- res->dma.base = m->dma[i].channel;
- m->dma[i].tag++;
- }
- }
-
- if((which & W_IRQ)) for(i = 0; (unsigned) i < m->irq_len; i++) {
- for(j = 0; j < m->irq[i].devs; j++) {
- if(!strcmp(name, m->irq[i].dev[j])) {
- res = add_res_entry(r, new_mem(sizeof **r));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = m->irq[i].irq;
- res->irq.triggered = m->irq[i].events;
- m->irq[i].tag++;
- }
- }
- }
-}
-
-
-int active_vga_card(hd_t *hd)
-{
- hd_res_t *res;
-
- if(hd->bus.id != bus_pci) return 1;
-
- for(res = hd->res; res; res = res->next) {
- if(
- (res->mem.type == res_mem && res->mem.enabled) ||
- (res->io.type == res_io && res->io.enabled)
- ) return 1;
- }
-
- return 0;
-}
-
-
-/*
- * Add some proc info to the global log.
- */
-void dump_misc_proc_data(hd_data_t *hd_data)
-{
- str_list_t *sl;
-
- ADD2LOG("----- /proc/ioports -----\n");
- for(sl = hd_data->misc->proc_io; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/ioports end -----\n");
-
- ADD2LOG("----- /proc/interrupts -----\n");
- for(sl = hd_data->misc->proc_irq; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/interrupts end -----\n");
-
- ADD2LOG("----- /proc/dma -----\n");
- for(sl = hd_data->misc->proc_dma; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- /proc/dma end -----\n");
-
-}
-
-
-/*
- * Add the resource usage to the global log.
- */
-void dump_misc_data(hd_data_t *hd_data)
-{
- misc_t *m = hd_data->misc;
- int i, j;
-
- ADD2LOG("----- misc resources -----\n");
-
- for(i = 0; (unsigned) i < m->io_len; i++) {
- ADD2LOG(
- "i/o:%u 0x%04"PRIx64" - 0x%04"PRIx64" (0x%02"PRIx64") \"%s\"\n",
- m->io[i].tag,
- m->io[i].addr, m->io[i].addr + m->io[i].size - 1,
- m->io[i].size, m->io[i].dev
- );
- }
-
- for(i = 0; (unsigned) i < m->irq_len; i++) {
- ADD2LOG(
- "irq:%u %2u (%9u)",
- m->irq[i].tag, m->irq[i].irq, m->irq[i].events
- );
- for(j = 0; j < m->irq[i].devs; j++) {
- ADD2LOG(" \"%s\"", m->irq[i].dev[j]);
- }
- ADD2LOG("\n");
- }
-
- for(i = 0; (unsigned) i < m->dma_len; i++) {
- ADD2LOG(
- "dma:%u %u \"%s\"\n",
- m->dma[i].tag, m->dma[i].channel, m->dma[i].dev
- );
- }
-
- ADD2LOG("----- misc resources end -----\n");
-}
+++ /dev/null
-void hd_scan_misc(hd_data_t *hd_data);
-void hd_scan_misc2(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <termios.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "modem.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * modem info
- *
- *
- * Note: what about modem speed?
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifndef LIBHD_TINY
-
-static struct speeds_s {
- unsigned baud;
- speed_t mask;
-} speeds[] = {
- { 1200, B1200 },
- { 1800, B1800 },
- { 2400, B2400 },
- { 4800, B4800 },
- { 9600, B9600 },
- { 19200, B19200 },
- { 38400, B38400 },
- { 57600, B57600 },
- { 115200, B115200 }
-#if !defined(__sparc__)
- ,{ 230400, B230400 }
- ,{ 460800, B460800 }
- ,{ 500000, B500000 }
- ,{ 1000000, B1000000 }
- ,{ 2000000, B2000000 }
- ,{ 4000000, B4000000 }
-#endif
-};
-
-#define MAX_SPEED (sizeof speeds / sizeof *speeds)
-
-static char *init_strings[] = {
- "Q0 V1 E1",
- "S0=0",
- "&C1",
- "&D2",
- "+FCLASS=0"
-};
-
-#define MAX_INIT_STRING (sizeof init_strings / sizeof *init_strings)
-
-static void get_serial_modem(hd_data_t* hd_data);
-static void add_serial_modem(hd_data_t* hd_data);
-static int dev_name_duplicate(hd_data_t *hd_data, char *dev_name);
-static void guess_modem_name(hd_data_t *hd_data, ser_device_t *sm);
-static void at_cmd(hd_data_t *hd_data, char *at, int raw, int log_it);
-static void write_modem(hd_data_t *hd_data, char *msg);
-static void read_modem(hd_data_t *hd_data);
-static ser_device_t *add_ser_modem_entry(ser_device_t **sm, ser_device_t *new_sm);
-static int set_modem_speed(ser_device_t *sm, unsigned baud);
-static int init_modem(ser_device_t *mi);
-static unsigned chk4id(ser_device_t *mi);
-static void dump_ser_modem_data(hd_data_t *hd_data);
-
-void hd_scan_modem(hd_data_t *hd_data)
-{
- ser_device_t *sm, *sm_next;
-
- if(!hd_probe_feature(hd_data, pr_modem)) return;
-
- hd_data->module = mod_modem;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->ser_modem = NULL;
-
- PROGRESS(1, 0, "serial");
-
- hd_fork(hd_data, 15, 120);
-
- if(hd_data->flags.forked) {
- get_serial_modem(hd_data);
- hd_move_to_shm(hd_data);
- if((hd_data->debug & HD_DEB_MODEM)) dump_ser_modem_data(hd_data);
- }
- else {
- /* take data from shm */
- hd_data->ser_modem = ((hd_data_t *) (hd_data->shm.data))->ser_modem;
- if((hd_data->debug & HD_DEB_MODEM)) dump_ser_modem_data(hd_data);
- }
-
- hd_fork_done(hd_data);
-
- add_serial_modem(hd_data);
-
- hd_shm_clean(hd_data);
-
- for(sm = hd_data->ser_modem; sm; sm = sm_next) {
- sm_next = sm->next;
-
- free_str_list(sm->at_resp);
-
- free_mem(sm->dev_name);
- free_mem(sm->serial);
- free_mem(sm->class_name);
- free_mem(sm->dev_id);
- free_mem(sm->user_name);
- free_mem(sm->vend);
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
-
- free_mem(sm);
- }
- hd_data->ser_modem = NULL;
-
-}
-
-int check_for_responce(str_list_t *str_list, char *str, int len)
-{
- for(; str_list != NULL; str_list = str_list->next) {
- if(!strncmp(str_list->str, str, len)) return 1;
- }
-
- return 0;
-}
-
-str_list_t *str_list_dup(str_list_t *orig)
-{
- str_list_t *dup = NULL;
-
- for(; orig != NULL; orig = orig->next) {
- add_str_list(&dup, orig->str);
- }
-
- return dup;
-}
-
-void get_serial_modem(hd_data_t *hd_data)
-{
- hd_t *hd;
- int i, j, fd;
- unsigned modem_info, baud;
- char *command;
- ser_device_t *sm;
- int chk_usb = hd_probe_feature(hd_data, pr_modem_usb);
-
- /* serial modems & usb modems */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- (
- (
- hd->base_class.id == bc_comm &&
- hd->sub_class.id == sc_com_ser &&
- !hd->tag.ser_skip &&
- hd->tag.ser_device != 2 && /* cf. serial.c */
- !has_something_attached(hd_data, hd)
- ) ||
- (
- chk_usb &&
- hd->bus.id == bus_usb &&
- hd->base_class.id == bc_modem
- )
- ) && hd->unix_dev_name
- ) {
- if(dev_name_duplicate(hd_data, hd->unix_dev_name)) continue;
- if((fd = open(hd->unix_dev_name, O_RDWR | O_NONBLOCK)) >= 0) {
- sm = add_ser_modem_entry(&hd_data->ser_modem, new_mem(sizeof *sm));
- sm->dev_name = new_str(hd->unix_dev_name);
- sm->fd = fd;
- sm->hd_idx = hd->idx;
- sm->do_io = 1;
- init_modem(sm);
- }
- }
- }
-
- if(!hd_data->ser_modem) return;
-
- PROGRESS(2, 0, "init");
-
- usleep(300000); /* PnP protocol; 200ms seems to be too fast */
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- modem_info = TIOCM_DTR | TIOCM_RTS;
- ioctl(sm->fd, TIOCMBIS, &modem_info);
- ioctl(sm->fd, TIOCMGET, &modem_info);
- if(!(modem_info & (TIOCM_DSR | TIOCM_CD))) {
- sm->do_io = 0;
- }
- }
-
- /* just a quick test if we get a response to an AT command */
-
- for(i = 0; i < 4; i++) {
- PROGRESS(3, i + 1, "at test");
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(!sm->is_modem)
- set_modem_speed(sm, i == 0 ? 115200 : i == 1 ? 38400 : i == 2 ? 9600 : 1200);
- }
-
- at_cmd(hd_data, "AT\r", 1, 1);
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(strstr(sm->buf, "OK") || strstr(sm->buf, "0")) {
- sm->is_modem = 1;
- sm->do_io = 0;
- }
- sm->buf_len = 0; /* clear buffer */
- }
- }
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if((sm->do_io = sm->is_modem)) {
- sm->max_baud = sm->cur_baud;
- }
- }
-
- /* check for init string */
- PROGRESS(4, 0, "init string");
-
- command = NULL;
- for(i = 0; (unsigned) i < MAX_INIT_STRING; i++) {
- str_printf(&command, 0, "AT %s\r", init_strings[i]);
- at_cmd(hd_data, command, 1, 1);
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(strstr(sm->buf, "OK") || strstr(sm->buf, "0")) {
- str_printf(&sm->init_string2, -1,
- "%s %s", sm->init_string2 ? "" : "AT", init_strings[i]
- );
- }
- }
- }
- command = free_mem(command);
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next)
- if(sm->is_modem)
- str_printf(&sm->init_string1, -1, "ATZ");
-
- {
- int cmds[] = { 1, 3, 4, 5, 6 };
- char at[10];
- int i, j, ModemsCount = 0;
- str_list_t **responces = NULL;
- for(sm = hd_data->ser_modem; sm; sm = sm->next)
- if(sm->is_modem)
- ModemsCount++;
- responces = new_mem(ModemsCount * sizeof *responces);
-
- at_cmd(hd_data, "ATI\r", 0, 1);
- for(j = 0, sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->is_modem)
- responces[j++] = str_list_dup(sm->at_resp);
- }
-
- for(i = 0; (unsigned) i < sizeof cmds / sizeof *cmds; i++) {
- int atx = cmds[i];
- sprintf(at, "ATI%d\r", atx);
- at_cmd(hd_data, at, 0, 1);
- for(j = 0, sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->is_modem) {
- if(atx == 1 && check_for_responce(responces[j], "Hagenuk", 7) &&
- (check_for_responce(sm->at_resp, "Speed Dragon", 12) ||
- check_for_responce(sm->at_resp, "Power Dragon", 12))) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("ATB8");
- }
- if(atx == 3 && check_for_responce(responces[j], "346900", 6) &&
- check_for_responce(sm->at_resp, "3Com U.S. Robotics ISDN", 23)) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("AT*PPP=1");
- }
- if(atx == 4 && check_for_responce(responces[j], "SP ISDN", 7) &&
- check_for_responce(sm->at_resp, "Sportster ISDN TA", 17)) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("ATB3");
- }
- if(atx == 6 && check_for_responce(responces[j], "644", 3) &&
- check_for_responce(sm->at_resp, "ELSA MicroLink ISDN", 19)) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("AT$IBP=HDLCP");
- free_mem(sm->pppd_option);
- sm->pppd_option = new_str("default-asyncmap");
- }
- if(atx == 6 && check_for_responce(responces[j], "643", 3) &&
- check_for_responce(sm->at_resp, "MicroLink ISDN/TLV.34", 21)) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("AT\\N10%P1");
- }
- if(atx == 5 && check_for_responce(responces[j], "ISDN TA", 6) &&
- check_for_responce(sm->at_resp, "ISDN TA;ASU", 4)) {
- free_mem(sm->vend);
- sm->vend = new_str("ASUS");
- free_mem(sm->user_name);
- sm->user_name = new_str("ISDNLink TA");
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("ATB40");
- }
- if(atx==3 && check_for_responce(responces[j], "128000", 6) &&
- check_for_responce(sm->at_resp, "Lasat Speed", 11)) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("AT\\P1&B2X3");
- }
- if(atx == 1 &&
- (check_for_responce(responces[j], "28642", 5) ||
- check_for_responce(responces[j], "1281", 4) ||
- check_for_responce(responces[j], "1282", 4) ||
- check_for_responce(responces[j], "1283", 4) ||
- check_for_responce(responces[j], "1291", 4) ||
- check_for_responce(responces[j], "1292", 4) ||
- check_for_responce(responces[j], "1293", 4)) &&
- (check_for_responce(sm->at_resp, "Elite 2864I", 11) ||
- check_for_responce(sm->at_resp, "ZyXEL omni", 10))) {
- free_mem(sm->init_string1);
- free_mem(sm->init_string2);
- sm->init_string1 = new_str("AT&F");
- sm->init_string2 = new_str("AT&O2B40");
- }
- j++;
- }
- }
- }
-
- for(i = 0; i < ModemsCount; i++) free_str_list(responces[i]);
- free_mem(responces);
- }
-
- /* now, go for the maximum speed... */
- PROGRESS(5, 0, "speed");
-
- for(i = MAX_SPEED - 1; i >= 0; i--) {
- baud = speeds[i].baud;
- for(j = 0, sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->is_modem) {
- if(baud > sm->max_baud) {
- sm->do_io = set_modem_speed(sm, baud) ? 0 : 1;
- if(sm->do_io) j++;
- }
- }
- }
-
- /* no modems */
- if(!j) continue;
-
- at_cmd(hd_data, "AT\r", 1, 0);
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(strstr(sm->buf, "OK") || strstr(sm->buf, "0")) {
- sm->max_baud = sm->cur_baud;
- }
- else {
- sm->do_io = 0;
- }
- sm->buf_len = 0; /* clear buffer */
- }
- }
-
- /* now, fix it all up... */
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->is_modem) {
- set_modem_speed(sm, sm->max_baud);
- sm->do_io = 1;
- }
- }
-
-#if 0
- /* just for testing */
- if((hd_data->debug & HD_DEB_MODEM)) {
- int i;
- int cmds[] = { 0, 1, 2, 3, 6 };
- char at[10];
-
- PROGRESS(8, 0, "testing");
-
- at_cmd(hd_data, "ATI\r", 0, 1);
- for(i = 0; (unsigned) i < sizeof cmds / sizeof *cmds; i++) {
- sprintf(at, "ATI%d\r", cmds[i]);
- at_cmd(hd_data, at, 0, 1);
- }
- at_cmd(hd_data, "AT\r", 0, 1);
- }
-#endif
-
- PROGRESS(5, 0, "pnp id");
-
- at_cmd(hd_data, "ATI9\r", 1, 1);
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->is_modem) {
- chk4id(sm);
-
- if(!sm->user_name) guess_modem_name(hd_data, sm);
- }
-
- /* reset serial lines */
- tcflush(sm->fd, TCIOFLUSH);
- tcsetattr(sm->fd, TCSAFLUSH, &sm->tio);
- close(sm->fd);
- }
-}
-
-
-void add_serial_modem(hd_data_t *hd_data)
-{
- hd_t *hd;
- char buf[4];
- ser_device_t *sm;
- hd_res_t *res;
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(!sm->is_modem) continue;
-
- hd = hd_get_device_by_idx(hd_data, sm->hd_idx);
- if(hd && hd->base_class.id == bc_modem) {
- /* just *add* info */
-
- }
- else {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_modem;
- hd->bus.id = bus_serial;
- hd->unix_dev_name = new_str(sm->dev_name);
- hd->attached_to = sm->hd_idx;
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->baud.type = res_baud;
- res->baud.speed = sm->max_baud;
- if(sm->pppd_option) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->pppd_option.type = res_pppd_option;
- res->pppd_option.option = new_str(sm->pppd_option);
- }
- if(*sm->pnp_id) {
- strncpy(buf, sm->pnp_id, 3);
- buf[3] = 0;
- hd->vendor.id = name2eisa_id(buf);
- hd->device.id = MAKE_ID(TAG_EISA, strtol(sm->pnp_id + 3, NULL, 16));
- }
- hd->serial = new_str(sm->serial);
- if(sm->user_name) hd->device.name = new_str(sm->user_name);
- if(sm->vend) hd->vendor.name = new_str(sm->vend);
-
- if(sm->dev_id && strlen(sm->dev_id) >= 7) {
- char buf[5], *s;
- unsigned u1, u2;
-
- u1 = name2eisa_id(sm->dev_id);
- if(u1) {
- strncpy(buf, sm->dev_id + 3, 4);
- buf[4] = 0;
- u2 = strtol(sm->dev_id + 3, &s, 16);
- if(!*s) {
- hd->compat_vendor.id = u1;
- hd->compat_device.id = MAKE_ID(TAG_EISA, u2);
- }
- }
- }
-
- if(!(hd->device.id || hd->device.name || hd->vendor.id || hd->vendor.name)) {
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x2000);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0001);
- }
- }
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->init_strings.type = res_init_strings;
- res->init_strings.init1 = new_str(sm->init_string1);
- res->init_strings.init2 = new_str(sm->init_string2);
- }
-}
-
-
-int dev_name_duplicate(hd_data_t *hd_data, char *dev_name)
-{
- ser_device_t *sm;
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(!strcmp(sm->dev_name, dev_name)) return 1;
- }
-
- return 0;
-}
-
-void guess_modem_name(hd_data_t *hd_data, ser_device_t *modem)
-{
- ser_device_t *sm;
- str_list_t *sl;
- char *s;
-#ifdef __PPC__
- char *s1, *s2;
- unsigned u;
-#endif
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) sm->do_io = 0;
-
- (sm = modem)->do_io = 1;
-
-#ifdef __PPC__
- at_cmd(hd_data, "ATI0\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI0")) sl = sl->next; /* skip AT cmd echo */
-
- s1 = NULL;
- if(sl) {
- if(strstr(sl->str, "PowerBook")) {
- sm->vend = new_str("Apple");
- sm->user_name = new_str(sl->str);
-
- return;
- }
- s1 = new_str(sl->str);
- }
-
- at_cmd(hd_data, "ATI1\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI1")) sl = sl->next; /* skip AT cmd echo */
-
- if(sl) {
- if(strstr(sl->str, "APPLE")) {
- sm->vend = new_str("Apple");
- str_printf(&sm->user_name, 0, "AT Modem");
- if(s1) {
- u = strtoul(s1, &s2, 10);
- if(u && !*s2 && !(u % 1000)) {
- str_printf(&sm->user_name, 0, "%uk AT Modem", u / 1000);
- }
- }
- s1 = free_mem(s1);
-
- return;
- }
- }
- s1 = free_mem(s1);
-
-#endif
-
- /* ATI3 command */
- at_cmd(hd_data, "ATI3\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI3")) sl = sl->next; /* skip AT cmd echo */
-
- if(sl) {
- if(*sl->str == 'U' && strstr(sl->str, "Robotics ")) {
- /* looks like an U.S. Robotics... */
-
- sm->vend = new_str("U.S. Robotics, Inc.");
- /* strip revision code */
- if((s = strstr(sl->str, " Rev. "))) *s = 0;
- sm->user_name = canon_str(sl->str, strlen(sl->str));
-
- return;
- }
-
- if(strstr(sl->str, "3Com U.S. Robotics ") == sl->str) {
- /* looks like an 3Com U.S. Robotics... */
-
- sm->vend = new_str("3Com U.S. Robotics, Inc.");
- sm->user_name = canon_str(sl->str, strlen(sl->str));
-
- return;
- }
-
- if(strstr(sl->str, "-V34_DS -d Z201 2836")) {
- /* looks like a Zoom V34X */
-
- sm->vend = new_str("Zoom Telephonics, Inc.");
- sm->user_name = new_str("Zoom FaxModem V.34X Plus Model 2836");
-
- return;
- }
-
- if(strstr(sl->str, "FM560 VER 3.01 V.90")) {
- /* looks like a Microcom DeskPorte 56K Voice ... */
-
- sm->vend = new_str("Microcom");
- sm->user_name = new_str("TravelCard 56K");
-
- return;
- }
-
- if(strstr(sl->str, "Compaq Microcom 550 56K Modem")) {
- /* looks like a Microcom DeskPorte Pocket ... */
-
- sm->vend = new_str("Compaq");
- sm->user_name = new_str("Microcom 550 56K Modem");
-
- return;
- }
- }
-
- /* ATI0 command */
- at_cmd(hd_data, "ATI0\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI0")) sl = sl->next; /* skip AT cmd echo */
-
- if(sl) {
- if(strstr(sl->str, "DP Pocket")) {
- /* looks like a Microcom DeskPorte Pocket ... */
-
- sm->vend = new_str("Microcom");
- sm->user_name = new_str("DeskPorte Pocket");
-
- return;
- }
- }
-
- /* ATI6 command */
- at_cmd(hd_data, "ATI6\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI6")) sl = sl->next; /* skip AT cmd echo */
-
- if(sl) {
- if(strstr(sl->str, "RCV56DPF-PLL L8571A")) {
- /* looks like a Microcom DeskPorte 56K Voice ... */
-
- sm->vend = new_str("Microcom");
- sm->user_name = new_str("DeskPorte 56K Voice");
-
- return;
- }
- }
-
- /* ATI2 command */
- at_cmd(hd_data, "ATI2\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI2")) sl = sl->next; /* skip AT cmd echo */
-
- if(sl) {
- if(strstr(sl->str, "ZyXEL ")) {
- /* looks like a ZyXEL... */
-
- sm->vend = new_str("ZyXEL");
-
- at_cmd(hd_data, "ATI1\r", 0, 1);
- sl = sm->at_resp;
- if(sl && !strcmp(sl->str, "ATI1")) sl = sl->next;
-
- if(sl && sl->next) {
- sl = sl->next;
- if((s = strstr(sl->str, " V "))) *s = 0;
- sm->user_name = canon_str(sl->str, strlen(sl->str));
- }
-
- return;
- }
- }
-
-}
-
-void at_cmd(hd_data_t *hd_data, char *at, int raw, int log_it)
-{
- static unsigned u = 1;
- char *s, *s0;
- ser_device_t *sm;
- str_list_t *sl;
- int modems = 0;
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->do_io) {
- sm->buf_len = 0;
- modems++;
- }
- }
-
- if(modems == 0) return;
-
- PROGRESS(9, u, "write at cmd");
- write_modem(hd_data, at);
- PROGRESS(9, u, "read at resp");
- usleep (200000);
- read_modem(hd_data);
- PROGRESS(9, u, "read ok");
- u++;
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->do_io) {
- sm->at_resp = free_str_list(sm->at_resp);
- if(sm->buf_len == 0 || raw) continue;
- s0 = sm->buf;
- while((s = strsep(&s0, "\r\n"))) {
- if(*s) add_str_list(&sm->at_resp, s);
- }
- }
- }
-
- if(!(hd_data->debug & HD_DEB_MODEM) || !log_it) return;
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->do_io) {
- ADD2LOG("%s@%u: %s\n", sm->dev_name, sm->cur_baud, at);
- if(raw) {
- ADD2LOG(" ");
- hexdump(&hd_data->log, 1, sm->buf_len, sm->buf);
- ADD2LOG("\n");
- }
- else {
- for(sl = sm->at_resp; sl; sl = sl->next) ADD2LOG(" %s\n", sl->str);
- }
- }
- }
-}
-
-
-void write_modem(hd_data_t *hd_data, char *msg)
-{
- ser_device_t *sm;
- int i, len = strlen(msg);
-
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->do_io) {
- i = write(sm->fd, msg, len);
- if(i != len) {
- ADD2LOG("%s write oops: %d/%d (\"%s\")\n", sm->dev_name, i, len, msg);
- }
- }
- }
-}
-
-void read_modem(hd_data_t *hd_data)
-{
- int i, sel, fd_max = -1;
- fd_set set, set0;
- struct timeval to;
- ser_device_t *sm;
-
- FD_ZERO(&set0);
-
- for(i = 0, sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->do_io) {
- FD_SET(sm->fd, &set0);
- if(sm->fd > fd_max) fd_max = sm->fd;
- i++;
- }
- }
-
- if(!i) return; /* nothing selected */
-
- for(;;) {
- to.tv_sec = 0; to.tv_usec = 1000000;
- set = set0;
- if((sel = select(fd_max + 1, &set, NULL, NULL, &to)) > 0) {
-// fprintf(stderr, "sel: %d\n", sel);
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(FD_ISSET(sm->fd, &set)) {
- if((i = read(sm->fd, sm->buf + sm->buf_len, sizeof sm->buf - sm->buf_len)) > 0)
- sm->buf_len += i;
-// fprintf(stderr, "%s: got %d\n", sm->dev_name, i);
- if(i <= 0) FD_CLR(sm->fd, &set0);
- }
- }
- }
- else {
- break;
- }
- }
-
- /* make the strings \000 terminated */
- for(sm = hd_data->ser_modem; sm; sm = sm->next) {
- if(sm->buf_len == sizeof sm->buf) sm->buf_len--;
- sm->buf[sm->buf_len] = 0;
- }
-}
-
-int set_modem_speed(ser_device_t *sm, unsigned baud)
-{
- int i;
- speed_t st;
- struct termios tio;
-
- for(i = 0; (unsigned) i < MAX_SPEED; i++) if(speeds[i].baud == baud) break;
-
- if(i == MAX_SPEED) return 1;
-
- if(tcgetattr(sm->fd, &tio)) return errno;
-
- cfsetospeed(&tio, speeds[i].mask);
- cfsetispeed(&tio, speeds[i].mask);
-
- if(tcsetattr(sm->fd, TCSAFLUSH, &tio)) return errno;
-
- /* tcsetattr() returns ok even if it couldn't set the speed... */
-
- if(tcgetattr(sm->fd, &tio)) return errno;
-
- st = cfgetospeed(&tio);
-
- for(i = 0; (unsigned) i < MAX_SPEED; i++) if(speeds[i].mask == st) break;
-
- if(i == MAX_SPEED) return 2;
-
- sm->cur_baud = speeds[i].baud;
-
- return baud == speeds[i].baud ? 0 : 3;
-}
-
-
-int init_modem(ser_device_t *sm)
-{
- struct termios tio;
-
- if(tcgetattr(sm->fd, &tio)) return errno;
-
- sm->tio = tio;
-
- tio.c_iflag = IGNBRK | IGNPAR;
- tio.c_oflag = 0;
- tio.c_lflag = 0;
- tio.c_line = 0;
- tio.c_cc[VTIME] = 0;
- tio.c_cc[VMIN] = 1;
-
- tio.c_cflag = CREAD | CLOCAL | HUPCL | B1200 | CS8;
-
- if(tcsetattr(sm->fd, TCSAFLUSH, &tio)) return errno;
-
- return 0;
-}
-
-
-/*
- * Check for a PnP info field starting at ofs;
- * returns either the length of the field or 0 if none was found.
- *
- * the minfo_t struct is updated with the PnP data
- */
-int is_pnpinfo(ser_device_t *mi, int ofs)
-{
- int i, j, k, l;
- unsigned char c, *s = mi->buf + ofs, *t;
- int len = mi->buf_len - ofs;
- unsigned serial, class_name, dev_id, user_name;
-
- if(len <= 0) return 0;
-
- switch(*s) {
- case 0x08:
- mi->bits = 6; break;
- case 0x28:
- mi->bits = 7; break;
- default:
- return 0;
- }
-
- if(len < 11) return 0;
-
- i = 1;
-
- /* six bit values */
- if((s[i] & ~0x3f) || (s[i + 1] & ~0x3f)) return 0;
- mi->pnp_rev = (s[i] << 6) + s[i + 1];
-
- /* pnp_rev may *optionally* be given as a string!!! (e.g. "1.0")*/
- if(mi->bits == 7) {
- j = 0;
- if(s[i + 2] < 'A') {
- j++;
- if(s[i + 3] < 'A') j++;
- }
- if(j) {
- if(s[i] < '0' || s[i] > '9') return 0;
- if(s[i + 1] != '.') return 0;
- for(k = 0; k < j; k++)
- if(s[i + 2 + k] < '0' || s[i + 2 + k] > '9') return 0;
- mi->pnp_rev = (s[i] - '0') * 100;
- mi->pnp_rev += s[i + 2] * 10;
- if(j == 2) mi->pnp_rev += s[i + 3];
- i += j;
- }
- }
-
- i += 2;
-
- /* the eisa id */
- for(j = 0; j < 7; j++) {
- mi->pnp_id[j] = s[i + j];
- if(mi->bits == 6) mi->pnp_id[j] += 0x20;
- }
- mi->pnp_id[7] = 0;
-
- i += 7;
-
- /* now check the id */
- for(j = 0; j < 3; j++) {
- if(
- /* numbers are not really allowed, but... */
- (mi->pnp_id[j] < '0' || mi->pnp_id[j] > '9') &&
- (mi->pnp_id[j] < 'A' || mi->pnp_id[j] > 'Z') &&
- mi->pnp_id[j] != '_'
- ) return 0;
- }
-
- for(j = 3; j < 7; j++) {
- if(
- (mi->pnp_id[j] < '0' || mi->pnp_id[j] > '9') &&
- (mi->pnp_id[j] < 'A' || mi->pnp_id[j] > 'F')
- ) return 0;
- }
-
-
- if((mi->bits == 6 && s[i] == 0x09) || (mi->bits == 7 && s[i] == 0x29)) {
- return i + 1;
- }
-
- if((mi->bits != 6 || s[i] != 0x3c) && (mi->bits != 7 || s[i] != 0x5c)) {
- return 0;
- }
-
- /* parse extended info */
- serial = class_name = dev_id = user_name = 0;
- for(j = 0; i < len; i++) {
- if((mi->bits == 6 && s[i] == 0x09) || (mi->bits == 7 && s[i] == 0x29)) {
-
- if(serial) for(k = serial; k < len; k++) {
- c = s[k];
- if(mi->bits == 6) c += 0x20;
- if(c == '\\') break;
- str_printf(&mi->serial, -1, "%c", c);
- }
-
- if(class_name) for(k = class_name; k < len; k++) {
- c = s[k];
- if(mi->bits == 6) c += 0x20;
- if(c == '\\') break;
- str_printf(&mi->class_name, -1, "%c", c);
- }
-
- if(dev_id) for(k = dev_id; k < len; k++) {
- c = s[k];
- if(mi->bits == 6) c += 0x20;
- if(c == '\\') break;
- str_printf(&mi->dev_id, -1, "%c", c);
- }
-
- if(user_name) {
- for(k = user_name; k < len; k++) {
- c = s[k];
- if(mi->bits == 6) c += 0x20;
- if(c == '\\' || c == ')') break;
- str_printf(&mi->user_name, -1, "%c", c);
- }
- if(mi->user_name && (l = strlen(mi->user_name)) >= 2) {
- /* skip *optional*(!!!) 2 char checksum */
- t = mi->user_name + l - 2;
- if(
- ((t[0] >= '0' && t[0] <= '9') || (t[0] >= 'A' && t[0] <= 'F')) &&
- ((t[1] >= '0' && t[1] <= '9') || (t[1] >= 'A' && t[1] <= 'F'))
- ) {
- /* OK, *might* be a hex number... */
- mi->user_name[l - 2] = 0;
-
- /*
- * A better check would be to look for the complete name string
- * in the output from another AT command, e.g AT3, AT6 or AT11.
- * If it's there -> no checksum field.
- */
- }
- }
- }
-
- return i + 1;
- }
-
- if(((mi->bits == 6 && s[i] == 0x3c) || (mi->bits == 7 && s[i] == 0x5c)) && i < len - 1) {
- switch(j) {
- case 0:
- serial = i + 1; j++; break;
- case 1:
- class_name = i + 1; j++; break;
- case 2:
- dev_id = i + 1; j++; break;
- case 3:
- user_name = i + 1; j++; break;
- default:
- fprintf(stderr, "PnP-ID oops\n");
- }
- }
- }
-
- /* no end token... */
-
- return 0;
-}
-
-
-unsigned chk4id(ser_device_t *mi)
-{
- int i;
-
- if(!mi->buf_len) return 0;
-
- for(i = 0; i < mi->buf_len; i++) {
- if((mi->pnp = is_pnpinfo(mi, i))) break;
- }
- if(i == mi->buf_len) return 0;
-
- mi->garbage = i;
-
- return 1;
-}
-
-ser_device_t *add_ser_modem_entry(ser_device_t **sm, ser_device_t *new_sm)
-{
- while(*sm) sm = &(*sm)->next;
- return *sm = new_sm;
-}
-
-void dump_ser_modem_data(hd_data_t *hd_data)
-{
- int j;
- ser_device_t *sm;
-
- if(!(sm = hd_data->ser_modem)) return;
-
- ADD2LOG("----- serial modems -----\n");
-
- for(; sm; sm = sm->next) {
- ADD2LOG("%s\n", sm->dev_name);
- if(sm->serial) ADD2LOG("serial: \"%s\"\n", sm->serial);
- if(sm->class_name) ADD2LOG("class_name: \"%s\"\n", sm->class_name);
- if(sm->dev_id) ADD2LOG("dev_id: \"%s\"\n", sm->dev_id);
- if(sm->user_name) ADD2LOG("user_name: \"%s\"\n", sm->user_name);
-
- if(sm->garbage) {
- ADD2LOG(" pre_garbage[%u]: ", sm->garbage);
- hexdump(&hd_data->log, 1, sm->garbage, sm->buf);
- ADD2LOG("\n");
- }
-
- if(sm->pnp) {
- ADD2LOG(" pnp[%u]: ", sm->pnp);
- hexdump(&hd_data->log, 1, sm->pnp, sm->buf + sm->garbage);
- ADD2LOG("\n");
- }
-
- if((j = sm->buf_len - (sm->garbage + sm->pnp))) {
- ADD2LOG(" post_garbage[%u]: ", j);
- hexdump(&hd_data->log, 1, j, sm->buf + sm->garbage + sm->pnp);
- ADD2LOG("\n");
- }
-
- if(sm->is_modem)
- ADD2LOG(" is modem\n");
- else
- ADD2LOG(" not a modem\n");
-
- if(sm->pnp) {
- ADD2LOG(" bits: %u\n", sm->bits);
- ADD2LOG(" PnP Rev: %u.%02u\n", sm->pnp_rev / 100, sm->pnp_rev % 100);
- ADD2LOG(" PnP ID: \"%s\"\n", sm->pnp_id);
- }
-
- if(sm->next) ADD2LOG("\n");
- }
-
- ADD2LOG("----- serial modems end -----\n");
-}
-
-#endif /* ifndef LIBHD_TINY */
+++ /dev/null
-void hd_scan_modem(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "monitor.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * monitor info
- *
- * Read the info out of the 'SuSE=' entry in /proc/cmdline. It contains
- * (among others) info from the EDID record got by our syslinux extension.
- *
- * We will try to look up our monitor id in the id file to get additional
- * info.
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifdef __PPC__
-static void add_old_mac_monitor(hd_data_t *hd_data);
-static void add_monitor(hd_data_t *hd_data, devtree_t *dt);
-#endif
-static int chk_edid_info(hd_data_t *hd_data, unsigned char *edid);
-#if !defined(__PPC__)
-static void add_lcd_info(hd_data_t *hd_data, hd_t *hd, bios_info_t *bt);
-#endif
-static void add_edid_info(hd_data_t *hd_data, hd_t *hd, unsigned char *edid);
-static void add_monitor_res(hd_t *hd, unsigned x, unsigned y, unsigned hz, unsigned il);
-static void fix_edid_info(hd_data_t *hd_data, unsigned char *edid);
-
-#if !defined(__PPC__)
-void hd_scan_monitor(hd_data_t *hd_data)
-{
- hd_t *hd;
- int i, j, k;
- char *s, *s0, *s1, *se, m[8], *t;
- unsigned u;
- hd_res_t *res;
- monitor_info_t *mi = NULL;
- bios_info_t *bt;
-
- if(!hd_probe_feature(hd_data, pr_monitor)) return;
-
- hd_data->module = mod_monitor;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "ddc");
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_internal && hd->sub_class.id == sc_int_bios) break;
- }
-
- /* first, see if we got the full edid record from bios */
- bt = NULL;
-
-#if 0
- /* for testing: LIBHD_EDID points to a file with valid edid record */
- {
- char *s = getenv("LIBHD_EDID");
- unsigned char edid[0x80];
- FILE *f;
-
- if(s && (f = fopen(s, "r"))) {
- if(fread(edid, sizeof edid, 1, f) == 1) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_monitor;
- add_edid_info(hd_data, hd, edid);
- }
- fclose(f);
- return;
- }
- }
-#endif
-
- if(
- hd &&
- hd->detail &&
- hd->detail->type == hd_detail_bios &&
- (bt = hd->detail->bios.data) &&
- bt->vbe.ok
- ) {
- if(chk_edid_info(hd_data, bt->vbe.ddc)) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_monitor;
-
- hd_set_hw_class(hd, hw_vbe);
-
- add_edid_info(hd_data, hd, bt->vbe.ddc);
-
- return;
- }
- }
-
- /* Maybe a LCD panel? */
- if(bt && bt->lcd.width) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_monitor;
- hd->sub_class.id = sc_mon_lcd;
-
- hd_set_hw_class(hd, hw_vbe);
-
- add_lcd_info(hd_data, hd, bt);
-
- return;
- }
-
- /* Maybe we have hidden edid info here? */
- if(!(s = s0 = t = get_cmd_param(hd_data, 0))) return; /* no :-( */
-
- s = strsep(&t, "^");
-
- se = s + strlen(s);
-
- if(se - s < 7 + 2 * 4) {
- free_mem(s0);
- return;
- }
-
- /* Ok, we've got it. Now we split the fields. */
-
- memcpy(m, s, 7); m[7] = 0; s += 7;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- hd->base_class.id = bc_monitor;
- hd->vendor.id = name2eisa_id(m);
- if(sscanf(m + 3, "%x", &u) == 1) hd->device.id = MAKE_ID(TAG_EISA, u);
- if((u = device_class(hd_data, hd->vendor.id, hd->device.id))) {
- if((u >> 8) == bc_monitor) hd->sub_class.id = u & 0xff;
- }
-
- i = hex(s, 2); j = hex(s + 2, 2); s += 4;
- if(i > 0 && j > 0) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.unit = size_unit_cm;
- res->size.val1 = i; /* width */
- res->size.val2 = j; /* height */
- }
-
- i = hex(s, 2); s+= 2;
- if(i & (1 << 7)) add_monitor_res(hd, 720, 400, 70, 0);
- if(i & (1 << 6)) add_monitor_res(hd, 720, 400, 88, 0);
- if(i & (1 << 5)) add_monitor_res(hd, 640, 480, 60, 0);
- if(i & (1 << 4)) add_monitor_res(hd, 640, 480, 67, 0);
- if(i & (1 << 3)) add_monitor_res(hd, 640, 480, 72, 0);
- if(i & (1 << 2)) add_monitor_res(hd, 640, 480, 75, 0);
- if(i & (1 << 1)) add_monitor_res(hd, 800, 600, 56, 0);
- if(i & (1 << 0)) add_monitor_res(hd, 800, 600, 60, 0);
-
- i = hex(s, 2); s+= 2;
- if(i & (1 << 7)) add_monitor_res(hd, 800, 600, 72, 0);
- if(i & (1 << 6)) add_monitor_res(hd, 800, 600, 75, 0);
- if(i & (1 << 5)) add_monitor_res(hd, 832, 624, 75, 0);
- if(i & (1 << 4)) add_monitor_res(hd, 1024, 768, 87, 1);
- if(i & (1 << 3)) add_monitor_res(hd, 1024, 768, 60, 0);
- if(i & (1 << 2)) add_monitor_res(hd, 1024, 768, 70, 0);
- if(i & (1 << 1)) add_monitor_res(hd, 1024, 768, 75, 0);
- if(i & (1 << 0)) add_monitor_res(hd, 1280, 1024, 75, 0);
-
- if(((se - s) & 1) || se - s > 8 * 4 + 2) {
- ADD2LOG(" ddc oops: %d bytes left?\n", (int) (se - s));
- free_mem(s0);
- return;
- }
-
- while(s + 4 <= se) {
- i = (hex(s, 2) + 31) * 8; j = hex(s + 2, 2); s += 4;
- k = 0;
- switch((j >> 6) & 3) {
- case 1: k = (i * 3) / 4; break;
- case 2: k = (i * 4) / 5; break;
- case 3: k = (i * 9) / 16; break;
- }
- if(k) add_monitor_res(hd, i, k, (j & 0x3f) + 60, 0);
- }
-
- u = 0;
- if(se - s == 2) u = hex(s, 2) + 1990;
-
- if(u || t) {
- mi = new_mem(sizeof *mi);
- if(u) mi->manu_year = u;
- while((s = strsep(&t, "^"))) {
- for(s1 = s; *s1++; ) if(*s1 == '_') *s1 = ' ';
- switch(*s) {
- case '0':
- if(!mi->name && s[1]) mi->name = canon_str(s + 1, strlen(s + 1));
- break;
- case '1':
- u = 0;
- if(strlen(s) == 9) {
- i = hex(s + 1, 2);
- j = hex(s + 3, 2);
- if(i > j || !i) u = 1;
- mi->min_vsync = i;
- mi->max_vsync = j;
- i = hex(s + 5, 2);
- j = hex(s + 7, 2);
- if(i > j || !i) u = 1;
- mi->min_hsync = i;
- mi->max_hsync = j;
- }
- else {
- u = 1;
- }
- if(u) {
- mi->min_vsync = mi->max_vsync = mi->min_hsync = mi->max_hsync = 0;
- ADD2LOG(" ddc oops: invalid freq data\n");
- }
- break;
- case '2':
- if(!mi->vendor && s[1]) mi->vendor = canon_str(s + 1, strlen(s + 1));
- break;
- case '3':
- if(!mi->serial && s[1]) mi->serial = canon_str(s + 1, strlen(s + 1));
- break;
- default:
- ADD2LOG(" ddc oops: invalid tag 0x%02x\n", *s);
- }
- }
- }
-
- if(mi) {
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_monitor;
- hd->detail->monitor.data = mi;
-
- hd->serial = new_str(mi->serial);
-
-#if 0
-// ########### FIXME
- if(
- mi->vendor &&
- ID_VALUE(hd->vendor.id) &&
- !hd_vendor_name(hd_data, hd->vendor.id)
- ) {
- add_vendor_name(hd_data, hd->vend, mi->vendor);
- }
-#endif
-
-#if 0
-// ########### FIXME
- if(
- mi->name &&
- (ID_VALUE(hd->vendor.id) || ID_VALUE(hd->device.id)) &&
- !hd_device_name(hd_data, hd->vend, hd->device.id)
- ) {
- add_device_name(hd_data, hd->vend, hd->dev, mi->name);
- }
-#endif
-
- if(hd_data->debug) {
- ADD2LOG("----- DDC info -----\n");
- if(mi->vendor) {
- ADD2LOG(" vendor: \"%s\"\n", mi->vendor);
- }
- if(mi->name) {
- ADD2LOG(" model: \"%s\"\n", mi->name);
- }
- if(mi->serial) {
- ADD2LOG(" serial: \"%s\"\n", mi->serial);
- }
- if(mi->min_hsync) {
- ADD2LOG(" hsync: %u-%u kHz\n", mi->min_hsync, mi->max_hsync);
- }
- if(mi->min_vsync) {
- ADD2LOG(" vsync: %u-%u Hz\n", mi->min_vsync, mi->max_vsync);
- }
- if(mi->manu_year) {
- ADD2LOG(" manu. year: %u\n", mi->manu_year);
- }
- ADD2LOG("----- DDC info end -----\n");
- }
- }
-
- free_mem(s0);
-}
-#endif /* !defined(__PPC__) */
-
-#if defined(__PPC__)
-void hd_scan_monitor(hd_data_t *hd_data)
-{
- devtree_t *dt;
- int found;
-
- if(!hd_probe_feature(hd_data, pr_monitor)) return;
-
- hd_data->module = mod_monitor;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "prom");
-
- found = 0;
- for(dt = hd_data->devtree; dt; dt = dt->next) {
- if(dt->edid) {
- add_monitor(hd_data, dt);
- found = 1;
- }
- }
-
- if(!found) {
- add_old_mac_monitor(hd_data);
- }
-}
-
-void add_old_mac_monitor(hd_data_t *hd_data)
-{
- hd_t *hd;
- unsigned u1, u2;
- str_list_t *sl;
- static struct {
- unsigned width, height, vfreq, interlaced;
- } mode_list[20] = {
- { 512, 384, 60, 1 },
- { 512, 384, 60, 0 },
- { 640, 480, 50, 1 },
- { 640, 480, 60, 1 },
- { 640, 480, 60, 0 },
- { 640, 480, 67, 0 },
- { 640, 870, 75, 0 },
- { 768, 576, 50, 1 },
- { 800, 600, 56, 0 },
- { 800, 600, 60, 0 },
- { 800, 600, 72, 0 },
- { 800, 600, 75, 0 },
- { 832, 624, 75, 0 },
- { 1024, 768, 60, 0 },
- { 1024, 768, 70, 0 },
- { 1024, 768, 75, 0 },
- { 1024, 768, 75, 0 },
- { 1152, 870, 75, 0 },
- { 1280, 960, 75, 0 },
- { 1280, 1024, 75, 0 }
- };
-
- for(sl = hd_data->klog; sl; sl = sl->next) {
- if(sscanf(sl->str, "<%*d>Monitor sense value = %i, using video mode %i", &u1, &u2) == 2) {
- u2--;
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_monitor;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0401);
- hd->device.id = MAKE_ID(TAG_SPECIAL, (u1 & 0xfff) + 0x1000);
-
- if((u1 = hd_display_adapter(hd_data))) {
- hd->attached_to = u1;
- }
-
- if(u2 < sizeof mode_list / sizeof *mode_list) {
- add_monitor_res(hd, mode_list[u2].width, mode_list[u2].height, mode_list[u2].vfreq, mode_list[u2].interlaced);
- }
-
- break;
- }
- }
-
-}
-
-void add_monitor(hd_data_t *hd_data, devtree_t *dt)
-{
- hd_t *hd, *hd2;
- unsigned char *edid = dt->edid;
-
- if(!chk_edid_info(hd_data, edid)) return;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- hd->base_class.id = bc_monitor;
-
- for(hd2 = hd_data->hd; hd2; hd2 = hd2->next) {
- if(
- hd2->detail &&
- hd2->detail->type == hd_detail_devtree &&
- hd2->detail->devtree.data == dt
- ) {
- hd->attached_to = hd2->idx;
- break;
- }
- }
-
- add_edid_info(hd_data, hd, edid);
-}
-
-#endif /* defined(__PPC__) */
-
-/* do some checks to ensure we got a reasonable block */
-int chk_edid_info(hd_data_t *hd_data, unsigned char *edid)
-{
- // no vendor or model info
- if(!(edid[0x08] || edid[0x09] || edid[0x0a] || edid[0x0b])) return 0;
-
- // no edid version or revision
- if(!(edid[0x12] || edid[0x13])) return 0;
-
- return 1;
-}
-
-#if !defined(__PPC__)
-void add_lcd_info(hd_data_t *hd_data, hd_t *hd, bios_info_t *bt)
-{
- monitor_info_t *mi = NULL;
-
- hd->vendor.name = new_str(bt->lcd.vendor);
- hd->device.name = new_str(bt->lcd.name);
-
- add_monitor_res(hd, bt->lcd.width, bt->lcd.height, 60, 0);
-
- mi = new_mem(sizeof *mi);
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_monitor;
- hd->detail->monitor.data = mi;
-
- mi->min_vsync = 50;
- mi->min_hsync = 31;
- mi->max_vsync = 75;
- mi->max_hsync = (mi->max_vsync * bt->lcd.height * 12) / 10000;
-}
-#endif
-
-void add_edid_info(hd_data_t *hd_data, hd_t *hd, unsigned char *edid)
-{
- hd_res_t *res;
- monitor_info_t *mi = NULL;
- int i;
- unsigned u, u1, u2;
-
- fix_edid_info(hd_data, edid);
-
- u = (edid[8] << 8) + edid[9];
- hd->vendor.id = MAKE_ID(TAG_EISA, u);
- u = (edid[0xb] << 8) + edid[0xa];
- hd->device.id = MAKE_ID(TAG_EISA, u);
- if((u = device_class(hd_data, hd->vendor.id, hd->device.id))) {
- if((u >> 8) == bc_monitor) hd->sub_class.id = u & 0xff;
- }
-
- if(edid[0x15] > 0 && edid[0x16] > 0) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.unit = size_unit_cm;
- res->size.val1 = edid[0x15]; /* width */
- res->size.val2 = edid[0x16]; /* height */
- }
-
- u = edid[0x23];
- if(u & (1 << 7)) add_monitor_res(hd, 720, 400, 70, 0);
- if(u & (1 << 6)) add_monitor_res(hd, 720, 400, 88, 0);
- if(u & (1 << 5)) add_monitor_res(hd, 640, 480, 60, 0);
- if(u & (1 << 4)) add_monitor_res(hd, 640, 480, 67, 0);
- if(u & (1 << 3)) add_monitor_res(hd, 640, 480, 72, 0);
- if(u & (1 << 2)) add_monitor_res(hd, 640, 480, 75, 0);
- if(u & (1 << 1)) add_monitor_res(hd, 800, 600, 56, 0);
- if(u & (1 << 0)) add_monitor_res(hd, 800, 600, 60, 0);
-
- u = edid[0x24];
- if(u & (1 << 7)) add_monitor_res(hd, 800, 600, 72, 0);
- if(u & (1 << 6)) add_monitor_res(hd, 800, 600, 75, 0);
- if(u & (1 << 5)) add_monitor_res(hd, 832, 624, 75, 0);
- if(u & (1 << 4)) add_monitor_res(hd, 1024, 768, 87, 1);
- if(u & (1 << 3)) add_monitor_res(hd, 1024, 768, 60, 0);
- if(u & (1 << 2)) add_monitor_res(hd, 1024, 768, 70, 0);
- if(u & (1 << 1)) add_monitor_res(hd, 1024, 768, 75, 0);
- if(u & (1 << 0)) add_monitor_res(hd, 1280, 1024, 75, 0);
-
- for(i = 0; i < 4; i++) {
- u1 = (edid[0x26 + 2 * i] + 31) * 8;
- u2 = edid[0x27 + 2 * i];
- u = 0;
- switch((u2 >> 6) & 3) {
- case 1: u = (u1 * 3) / 4; break;
- case 2: u = (u1 * 4) / 5; break;
- case 3: u = (u1 * 9) / 16; break;
- }
- if(u) add_monitor_res(hd, u1, u, (u2 & 0x3f) + 60, 0);
- }
-
- mi = new_mem(sizeof *mi);
- mi->manu_year = 1990 + edid[0x11];
-
- for(i = 0x36; i < 0x36 + 4 * 0x12; i += 0x12) {
- if(!(edid[i] || edid[i + 1] || edid[i + 2])) {
- switch(edid[i + 3]) {
- case 0xfc:
- if(edid[i + 5]) {
- /* the name entry is splitted some times */
- str_printf(&mi->name, -1, "%s%s", mi->name ? " " : "", canon_str(edid + i + 5, 0xd));
- }
- break;
-
- case 0xfd:
- u = 0;
- u1 = edid[i + 5];
- u2 = edid[i + 6];
- if(u1 > u2 || !u1) u = 1;
- mi->min_vsync = u1;
- mi->max_vsync = u2;
- u1 = edid[i + 7];
- u2 = edid[i + 8];
- if(u1 > u2 || !u1) u = 1;
- mi->min_hsync = u1;
- mi->max_hsync = u2;
- if(u) {
- mi->min_vsync = mi->max_vsync = mi->min_hsync = mi->max_hsync = 0;
- ADD2LOG(" ddc oops: invalid freq data\n");
- }
- break;
-
- case 0xfe:
- if(!mi->vendor && edid[i + 5]) mi->vendor = canon_str(edid + i + 5, 0xd);
- break;
-
- case 0xff:
- if(!mi->serial && edid[i + 5]) mi->serial = canon_str(edid + i + 5, 0xd);
- break;
-
- default:
- ADD2LOG(" ddc oops: invalid tag 0x%02x\n", edid[i + 3]);
- }
- }
- }
-
- if(mi) {
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_monitor;
- hd->detail->monitor.data = mi;
-
- hd->serial = new_str(mi->serial);
- hd->vendor.name = new_str(mi->vendor);
- hd->device.name = new_str(mi->name);
-
- if(hd_data->debug) {
- ADD2LOG("----- DDC info -----\n");
- if(mi->vendor) {
- ADD2LOG(" vendor: \"%s\"\n", mi->vendor);
- }
- if(mi->name) {
- ADD2LOG(" model: \"%s\"\n", mi->name);
- }
- if(mi->serial) {
- ADD2LOG(" serial: \"%s\"\n", mi->serial);
- }
- if(mi->min_hsync) {
- ADD2LOG(" hsync: %u-%u kHz\n", mi->min_hsync, mi->max_hsync);
- }
- if(mi->min_vsync) {
- ADD2LOG(" vsync: %u-%u Hz\n", mi->min_vsync, mi->max_vsync);
- }
- if(mi->manu_year) {
- ADD2LOG(" manu. year: %u\n", mi->manu_year);
- }
- ADD2LOG("----- DDC info end -----\n");
- }
- }
-}
-
-void add_monitor_res(hd_t *hd, unsigned width, unsigned height, unsigned vfreq, unsigned il)
-{
- hd_res_t *res;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->monitor.type = res_monitor;
- res->monitor.width = width;
- res->monitor.height = height;
- res->monitor.vfreq = vfreq;
- res->monitor.interlaced = il;
-}
-
-/*
- * This looks evil, but some Mac displays really lie at us.
- */
-void fix_edid_info(hd_data_t *hd_data, unsigned char *edid)
-{
- unsigned vend, dev;
- unsigned timing;
- int fix = 0;
-
- vend = (edid[8] << 8) + edid[9];
- dev = (edid[0xb] << 8) + edid[0xa];
-
- timing = (edid[0x24] << 8) + edid[0x23];
-
- /* APP9214: Apple Studio Display */
- if(vend == 0x0610 && dev == 0x9214 && timing == 0x0800) {
- timing = 0x1000;
- fix = 1;
- }
-
- if(fix) {
- edid[0x23] = timing & 0xff;
- edid[0x24] = (timing >> 8) & 0xff;
- }
-}
-
+++ /dev/null
-void hd_scan_monitor(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <termios.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "mouse.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * mouse info
- *
- * TODO: reset serial lines to old values (cf. modem.c)
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifndef LIBHD_TINY
-
-#if 0
-static unsigned read_data(hd_data_t *hd_data, int fd, unsigned char *buf, unsigned buf_size);
-static void get_ps2_mouse(hd_data_t *hd_data);
-static void test_ps2_open(void *arg);
-#endif
-
-static void get_serial_mouse(hd_data_t* hd_data);
-static void add_serial_mouse(hd_data_t* hd_data);
-static int _setspeed(int fd, int old, int new, int needtowrite, unsigned short flags);
-static void setspeed(int fd, int new, int needtowrite, unsigned short flags);
-static unsigned chk4id(ser_device_t *mi);
-static ser_device_t *add_ser_mouse_entry(ser_device_t **sm, ser_device_t *new_sm);
-static void dump_ser_mouse_data(hd_data_t *hd_data);
-#if 0
-static void get_sunmouse(hd_data_t *hd_data);
-#endif
-
-void hd_scan_mouse(hd_data_t *hd_data)
-{
- ser_device_t *sm, *sm_next;
-
- if(!hd_probe_feature(hd_data, pr_mouse)) return;
-
- hd_data->module = mod_mouse;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->ser_mouse = NULL;
-
-#if 0
- PROGRESS(1, 0, "ps/2");
-
- get_ps2_mouse(hd_data);
-#endif
-
- PROGRESS(2, 0, "serial");
-
- hd_fork(hd_data, 20, 20);
-
- if(hd_data->flags.forked) {
- get_serial_mouse(hd_data);
- hd_move_to_shm(hd_data);
- if((hd_data->debug & HD_DEB_MOUSE)) dump_ser_mouse_data(hd_data);
- }
- else {
- /* take data from shm */
- hd_data->ser_mouse = ((hd_data_t *) (hd_data->shm.data))->ser_mouse;
- if((hd_data->debug & HD_DEB_MOUSE)) dump_ser_mouse_data(hd_data);
- }
-
- hd_fork_done(hd_data);
-
- add_serial_mouse(hd_data);
-
- hd_shm_clean(hd_data);
-
- for(sm = hd_data->ser_mouse; sm; sm = sm_next) {
- sm_next = sm->next;
-
- free_mem(sm->dev_name);
- free_mem(sm);
- }
- hd_data->ser_mouse = NULL;
-
-#if 0
- PROGRESS(3, 0, "sunmouse");
-
- get_sunmouse(hd_data);
-#endif
-}
-
-
-#if 0
-unsigned read_data(hd_data_t *hd_data, int fd, unsigned char *buf, unsigned buf_size)
-{
- int k, len = 0;
- unsigned char *bp;
-
- while(
- (unsigned) len < buf_size &&
- (k = read(fd, buf + len, buf_size - len)) >= 0
- ) len += k;
-
- bp = buf;
- if(len && (*bp == 0xfe || *bp == 0xfa)) { bp++; len--; }
-
- for(k = 0; k < len; k++) buf[k] = bp[k];
-
- if((hd_data->debug & HD_DEB_MOUSE)) {
- ADD2LOG("ps/2[%d]: ", len);
- hexdump(&hd_data->log, 1, len, buf);
- ADD2LOG("\n");
- }
-
- return len;
-}
-
-
-/*
- * How it works:
- *
- * 1. There must exist a PS/2 controller entry (-> there is a PS/2 port).
- * 2. If there are PS/2 mouse irq events, assume a PS/2 mouse is attached.
- * 3. Otherwise:
- * - open /dev/psaux
- * - write the "get mouse info" command (0xe9)
- * - read back the response, which should be either 0xfe "resend data"
- * or, e.g. (0xfa) 0x20 0x02 0x3c (0xfa = "ACK" (should be swallowed
- * by the psaux driver, but isn't), the rest are settings)
- * - ignore the first byte if it is 0xfa or 0xfe
- * - if there are at least 2 bytes left, assume a mouse is attached.
- *
- * Note1: we could use the command 0xfe "get mouse ID" instead. But that turned
- * out to be less reliable, as this command returns only one byte, which
- * is even 0.
- * Note2: step 2 is mainly relevant if the mouse is already in use. In that
- * case we would have problems reading back the respose of our command.
- * (Typically the mouse driver will get it (and choke on it).)
- */
-
-static void get_ps2_mouse(hd_data_t *hd_data)
-{
- hd_t *hd, *hd1;
- hd_res_t *res;
- int fd;
- fd_set set;
- struct timeval tv;
- unsigned char cmd_mouse_info = 0xe9; /* read mouse info (3 bytes) */
- unsigned char cmd_mouse_id = 0xf2; /* read mouse id (1 byte) */
- unsigned char buf[100];
- unsigned mouse_id = -1;
- static unsigned char intelli_init[] = { 0xf3, 200, 0xf3, 100, 0xf3, 80 };
- int buf_len = 0;
-#ifdef __PPC__
- int always_ps2_mouse = 0;
-#endif
-
- for(hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- /* look for a PS/2 controller entry... */
- if(hd1->base_class.id == bc_ps2) {
- /* ...and see if there were irq events... */
- for(res = hd1->res; res; res = res->next) {
- if(res->irq.type == res_irq && res->irq.triggered) break;
- }
-
-#ifdef __PPC__
- /*
- * On PReP & CHRP, assume a PS/2 mouse to be attached.
- * There seems to be no way to actually *detect* it.
- */
- if(!res) {
- hd_t *hd;
- sys_info_t *st;
-
- if((hd = hd_list(hd_data, hw_sys, 0, NULL))) {
- if(
- hd->detail &&
- hd->detail->type == hd_detail_sys &&
- (st = hd->detail->sys.data) &&
- (
- !strcmp(st->system_type, "PReP") ||
- strstr(st->system_type, "CHRP") == st->system_type /* CHRP && CHRP64 */
- )
- ) {
- always_ps2_mouse = 1;
- }
- }
- }
-#endif
-
- PROGRESS(1, 1, "ps/2");
-
- /* open the mouse device... */
- if(hd_timeout(test_ps2_open, NULL, 2) > 0) {
- ADD2LOG("ps/2: open(%s) timed out\n", DEV_PSAUX);
- fd = -2;
- }
- else {
- fd = open(DEV_PSAUX, O_RDWR | O_NONBLOCK);
- }
-
- PROGRESS(1, 2, "ps/2");
-
- if(fd >= 0) {
- /* ...write the id command... */
-
- PROGRESS(1, 3, "ps/2");
-
- write(fd, intelli_init, sizeof intelli_init);
- usleep(25000);
- read_data(hd_data, fd, buf, sizeof buf);
-
- if(write(fd, &cmd_mouse_id, 1) == 1) {
-
- PROGRESS(1, 4, "ps/2");
- usleep(50000); /* ...give it a chance to react... */
-
- /* ...read the response... */
- buf_len = read_data(hd_data, fd, buf, sizeof buf);
-
- if(buf_len >= 1) mouse_id = buf[buf_len - 1];
-
- // if we didn't get any response, try this
- if(buf_len == 0 || (hd_data->debug & HD_DEB_MOUSE)) {
- PROGRESS(1, 5, "ps/2");
- if(write(fd, &cmd_mouse_info, 1) == 1) {
- usleep(50000);
- buf_len = read_data(hd_data, fd, buf, sizeof buf);
- /*
- * Assume a mouse to be attached if at least 2 bytes are
- * returned.
- */
- if(mouse_id == -1u && buf_len >= 2) mouse_id = 0;
- }
- }
-
- PROGRESS(1, 6, "ps/2");
- }
- close(fd);
-
- PROGRESS(1, 7, "ps/2");
-
- /*
- * The following code is apparently necessary on some board/mouse
- * combinations. Otherwise the PS/2 mouse won't work.
- */
- if((fd = open(DEV_PSAUX, O_RDONLY | O_NONBLOCK)) >= 0) {
- PROGRESS(1, 8, "ps/2");
-
- FD_ZERO(&set);
- FD_SET(fd, &set);
- tv.tv_sec = 0; tv.tv_usec = 1;
- if(select(fd + 1, &set, NULL, NULL, &tv) == 1) {
- PROGRESS(1, 9, "ps/2");
-
- read(fd, buf, sizeof buf);
-
- PROGRESS(1, 10, "ps/2");
- }
- PROGRESS(1, 11, "ps/2");
-
- close(fd);
-
- PROGRESS(1, 12, "ps/2");
- }
- }
- else {
- ADD2LOG("open(" DEV_PSAUX "): %s\n", fd == -1 ? strerror(errno) : "timeout");
- }
-
- if(mouse_id == -1u) {
-
- /*
- * Assume a PS/2 mouse is attached if the ps/2 controller has
- * genetrated some events.
- */
-
- if(
- res
-#ifdef __PPC__
- || always_ps2_mouse
-#endif
- ) {
- PROGRESS(1, 13, "ps/2");
- mouse_id = 0;
- }
- }
-
- if(mouse_id != -1u) {
- PROGRESS(1, 14, "ps/2");
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_ps2;
- hd->bus.id = bus_ps2;
- hd->unix_dev_name = new_str(DEV_MICE);
- hd->attached_to = hd1->idx;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0200);
- switch(mouse_id) {
- case 3: /* 3 buttons + wheel */
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0004);
- break;
-
- case 4: /* 5 buttons + wheel */
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0005);
- break;
-
- default: /* 0 */
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0002);
- }
- }
-
- /* there can only be one... */
- break;
- }
- }
-}
-
-void test_ps2_open(void *arg)
-{
- open(DEV_PSAUX, O_RDWR | O_NONBLOCK);
-}
-#endif
-
-#if 0
-static void get_sunmouse(hd_data_t *hd_data)
-{
- hd_t *hd;
- int fd;
- int found;
-
- found = 0;
-
- /* Only search for Sun mouse if we have a Sun keyboard */
- for(hd = hd_data->hd; hd; hd = hd->next)
- {
- if(hd->base_class.id == bc_keyboard &&
- hd->sub_class.id == sc_keyboard_kbd &&
- ID_TAG(hd->vendor.id) == TAG_SPECIAL && ID_VALUE(hd->vendor.id) == 0x0202)
- found = 1;
- }
-
- if (found)
- {
- if ((fd = open(DEV_SUNMOUSE, O_RDONLY)) != -1)
- {
- /* FIXME: Should probably talk to the mouse to see
- if the connector is not empty. */
- close (fd);
-
- PROGRESS(1, 1, "Sun Mouse");
-
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_sun;
- hd->bus.id = bus_serial;
- hd->unix_dev_name = new_str(DEV_SUNMOUSE);
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0202);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0000);
- }
- }
-}
-#endif
-
-/*
- * Gather serial mouse data and put it into hd_data->ser_mouse.
- */
-void get_serial_mouse(hd_data_t *hd_data)
-{
- hd_t *hd;
- int j, fd, fd_max = 0, sel, max_len;
- unsigned modem_info;
- fd_set set, set0;
- struct timeval to;
- ser_device_t *sm;
- struct termios tio;
-
- FD_ZERO(&set);
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_comm &&
- hd->sub_class.id == sc_com_ser &&
- hd->unix_dev_name &&
- !hd->tag.ser_skip &&
- !has_something_attached(hd_data, hd)
- ) {
- if((fd = open(hd->unix_dev_name, O_RDWR | O_NONBLOCK)) >= 0) {
- if(tcgetattr(fd, &tio)) continue;
- sm = add_ser_mouse_entry(&hd_data->ser_mouse, new_mem(sizeof *sm));
- sm->dev_name = new_str(hd->unix_dev_name);
- sm->fd = fd;
- sm->tio = tio;
- sm->hd_idx = hd->idx;
- if(fd > fd_max) fd_max = fd;
- FD_SET(fd, &set);
-
- /*
- * PnP COM spec black magic...
- */
- setspeed(fd, 1200, 1, CS7);
- modem_info = TIOCM_DTR | TIOCM_RTS;
- ioctl(fd, TIOCMBIC, &modem_info);
- }
- }
- }
-
- if(!hd_data->ser_mouse) return;
-
- /*
- * 200 ms seems to be too fast for some mice...
- */
- usleep(300000); /* PnP protocol */
-
- for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
- modem_info = TIOCM_DTR | TIOCM_RTS;
- ioctl(sm->fd, TIOCMBIS, &modem_info);
- }
-
- /* smaller buffer size, otherwise we might wait really long... */
- max_len = sizeof sm->buf < 128 ? sizeof sm->buf : 128;
-
- to.tv_sec = 0; to.tv_usec = 300000;
-
- set0 = set;
- for(;;) {
- to.tv_sec = 0; to.tv_usec = 300000;
- set = set0;
- if((sel = select(fd_max + 1, &set, NULL, NULL, &to)) > 0) {
- for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
- if(FD_ISSET(sm->fd, &set)) {
- if((j = read(sm->fd, sm->buf + sm->buf_len, max_len - sm->buf_len)) > 0)
- sm->buf_len += j;
- if(j <= 0) FD_CLR(sm->fd, &set0); // #####
- }
- }
- }
- else {
- break;
- }
- }
-
- for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
- chk4id(sm);
- /* reset serial lines */
- tcflush(sm->fd, TCIOFLUSH);
- tcsetattr(sm->fd, TCSAFLUSH, &sm->tio);
- close(sm->fd);
- }
-}
-
-
-/*
- * Go through serial mouse data and add hd entries.
- */
-void add_serial_mouse(hd_data_t *hd_data)
-{
- hd_t *hd;
- char buf[4];
- ser_device_t *sm;
-
- for(sm = hd_data->ser_mouse; sm; sm = sm->next) {
- if(sm->is_mouse) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_ser;
- hd->bus.id = bus_serial;
- hd->unix_dev_name = new_str(sm->dev_name);
- hd->attached_to = sm->hd_idx;
- if(*sm->pnp_id) {
- strncpy(buf, sm->pnp_id, 3);
- buf[3] = 0;
- hd->vendor.id = name2eisa_id(buf);
- if(!hd->vendor.id) { /* in case it's a really strange one... */
- hd->vendor.name = new_str(buf);
- }
- hd->device.id = MAKE_ID(TAG_EISA, strtol(sm->pnp_id + 3, NULL, 16));
-
- hd->serial = new_str(sm->serial);
- if(sm->user_name) hd->device.name = new_str(sm->user_name);
- if(sm->vend) {
- free_mem(hd->vendor.name);
- hd->vendor.name = new_str(sm->vend);
- }
-
- if(sm->dev_id && strlen(sm->dev_id) >= 7) {
- char buf[5], *s;
- unsigned u1, u2;
-
- u1 = name2eisa_id(sm->dev_id);
- if(u1) {
- strncpy(buf, sm->dev_id + 3, 4);
- buf[4] = 0;
- u2 = strtol(sm->dev_id + 3, &s, 16);
- if(!*s) {
- hd->compat_vendor.id = u1;
- hd->compat_device.id = MAKE_ID(TAG_EISA, u2);
- }
- }
- }
- }
- else {
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0200);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0003);
- }
- }
- }
-}
-
-
-/*
- * Baud setting magic taken from gpm.
- */
-
-int _setspeed(int fd, int old, int new, int needtowrite, unsigned short flags)
-{
- struct termios tty;
- char *c;
- int err = 0;
-
- flags |= CREAD | CLOCAL | HUPCL;
-
- if(tcgetattr(fd, &tty)) return errno;
-
- tty.c_iflag = IGNBRK | IGNPAR;
- tty.c_oflag = 0;
- tty.c_lflag = 0;
- tty.c_line = 0;
- tty.c_cc[VTIME] = 0;
- tty.c_cc[VMIN] = 1;
-
- switch (old)
- {
- case 9600: tty.c_cflag = flags | B9600; break;
- case 4800: tty.c_cflag = flags | B4800; break;
- case 2400: tty.c_cflag = flags | B2400; break;
- case 1200:
- default: tty.c_cflag = flags | B1200; break;
- }
-
- if(tcsetattr(fd, TCSAFLUSH, &tty)) return errno;
-
- switch (new)
- {
- case 9600: c = "*q"; tty.c_cflag = flags | B9600; break;
- case 4800: c = "*p"; tty.c_cflag = flags | B4800; break;
- case 2400: c = "*o"; tty.c_cflag = flags | B2400; break;
- case 1200:
- default: c = "*n"; tty.c_cflag = flags | B1200; break;
- }
-
- if(needtowrite) {
- err = 2 - write(fd, c, 2);
- }
-
- usleep(100000);
-
- if(tcsetattr(fd, TCSAFLUSH, &tty)) return errno;
-
- return err;
-}
-
-
-void setspeed(int fd, int new, int needtowrite, unsigned short flags)
-{
- int i, err;
-
- for(i = 9600; i >= 1200; i >>= 1) {
- err = _setspeed(fd, i, new, needtowrite, flags);
-#if 0
- if(err) {
- fprintf(stderr, "%d, %d ", i, err);
- perror("");
- }
-#endif
- }
-}
-
-
-#if 0
-/*
- * Check for a PnP info field starting at ofs;
- * returns either the length of the field or 0 if none was found.
- *
- * the minfo_t struct is updated with the PnP data
- */
-int is_pnpinfo(ser_device_t *mi, int ofs)
-{
- int i;
- unsigned char *s = mi->buf + ofs;
- int len = mi->buf_len - ofs;
-
- if(len <= 0) return 0;
-
- switch(*s) {
- case 0x08:
- mi->bits = 6; break;
- case 0x28:
- mi->bits = 7; break;
- default:
- return 0;
- }
-
- if(len < 11) return 0;
-
- /* six bit values */
- if((s[1] & ~0x3f) || (s[2] & ~0x3f)) return 0;
- mi->pnp_rev = (s[1] << 6) + s[2];
-
- /* the eisa id */
- for(i = 0; i < 7; i++) {
- mi->pnp_id[i] = s[i + 3];
- if(mi->bits == 6) mi->pnp_id[i] += 0x20;
- }
- mi->pnp_id[7] = 0;
-
- /* now check the id */
- for(i = 0; i < 3; i++) {
- if(
- (mi->pnp_id[i] < 'A' || mi->pnp_id[i] > 'Z') &&
- mi->pnp_id[i] != '_'
- ) return 0;
- }
-
- for(i = 3; i < 7; i++) {
- if(
- (mi->pnp_id[i] < '0' || mi->pnp_id[i] > '9') &&
- (mi->pnp_id[i] < 'A' || mi->pnp_id[i] > 'F')
- ) return 0;
- }
-
- if(
- (mi->bits == 6 && s[10] == 0x09) ||
- (mi->bits == 7 && s[10] == 0x29)
- ) {
- return 11;
- }
-
- if(
- (mi->bits != 6 || s[10] != 0x3c) &&
- (mi->bits != 7 || s[10] != 0x5c)
- ) {
- return 0;
- }
-
- /* skip extended info */
- for(i = 11; i < len; i++) {
- if(
- (mi->bits == 6 && s[i] == 0x09) ||
- (mi->bits == 7 && s[i] == 0x29)
- ) {
- return i + 1;
- }
- }
-
- /*
- * some mice have problems providing the extended info -> return ok in
- * these cases too
- */
- if(
- (mi->bits == 6 && s[10] == 0x3c) ||
- (mi->bits == 7 && s[10] == 0x5c)
- ) {
- return 11;
- }
-
- /* no end token... */
-
- return 0;
-}
-#endif
-
-unsigned chk4id(ser_device_t *mi)
-{
- int i;
-
-#if 0
- unsigned char fake[] =
- {
- // fake pnp data
- };
-
- mi->buf_len = sizeof fake;
- memcpy(mi->buf, fake, mi->buf_len);
- // for(i = 0; i < mi->buf_len; i++) mi->buf[i] += ' ';
-#endif
-
- if(!mi->buf_len) return 0;
-
- for(i = 0; i < mi->buf_len; i++) {
- if((mi->pnp = is_pnpinfo(mi, i))) break;
- }
- if(i == mi->buf_len) {
- /* non PnP, but MS compatible */
- if(*mi->buf == 'M')
- mi->non_pnp = mi->buf_len - 1;
- else
- return 0;
- }
-
- mi->garbage = i;
-
- for(i = 0; i < mi->garbage; i++) {
- if(mi->buf[i] == 'M') {
- mi->non_pnp = mi->garbage - i;
- mi->garbage = i;
- break;
- }
- }
-
- if(mi->non_pnp || mi->bits == 6) mi->is_mouse = 1;
-
- return mi->is_mouse;
-}
-
-ser_device_t *add_ser_mouse_entry(ser_device_t **sm, ser_device_t *new_sm)
-{
- while(*sm) sm = &(*sm)->next;
- return *sm = new_sm;
-}
-
-
-void dump_ser_mouse_data(hd_data_t *hd_data)
-{
- int j;
- ser_device_t *sm;
-
- if(!(sm = hd_data->ser_mouse)) return;
-
- ADD2LOG("----- serial mice -----\n");
-
- for(; sm; sm = sm->next) {
- ADD2LOG("%s\n", sm->dev_name);
- if(sm->serial) ADD2LOG("serial: \"%s\"\n", sm->serial);
- if(sm->class_name) ADD2LOG("class_name: \"%s\"\n", sm->class_name);
- if(sm->dev_id) ADD2LOG("dev_id: \"%s\"\n", sm->dev_id);
- if(sm->user_name) ADD2LOG("user_name: \"%s\"\n", sm->user_name);
-
- if(sm->garbage) {
- ADD2LOG(" garbage[%u]: ", sm->garbage);
- hexdump(&hd_data->log, 1, sm->garbage, sm->buf);
- ADD2LOG("\n");
- }
-
- if(sm->non_pnp) {
- ADD2LOG(" non-pnp[%u]: ", sm->non_pnp);
- hexdump(&hd_data->log, 1, sm->non_pnp, sm->buf + sm->garbage);
- ADD2LOG("\n");
- }
-
- if(sm->pnp) {
- ADD2LOG(" pnp[%u]: ", sm->pnp);
- hexdump(&hd_data->log, 1, sm->pnp, sm->buf + sm->garbage + sm->non_pnp);
- ADD2LOG("\n");
- }
-
- if((j = sm->buf_len - (sm->garbage + sm->non_pnp + sm->pnp))) {
- ADD2LOG(" moves[%u]: ", j);
- hexdump(&hd_data->log, 1, j, sm->buf + sm->garbage + sm->non_pnp + sm->pnp);
- ADD2LOG("\n");
- }
-
- if(sm->is_mouse) ADD2LOG(" is mouse\n");
-
- if(sm->pnp) {
- ADD2LOG(" bits: %u\n", sm->bits);
- ADD2LOG(" PnP Rev: %u.%02u\n", sm->pnp_rev / 100, sm->pnp_rev % 100);
- ADD2LOG(" PnP ID: \"%s\"\n", sm->pnp_id);
- }
-
- if(sm->next) ADD2LOG("\n");
- }
-
- ADD2LOG("----- serial mice end -----\n");
-}
-
-#endif /* !defined(LIBHD_TINY) */
+++ /dev/null
-void hd_scan_mouse(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-
-#define u8 uint8_t
-#define u16 uint16_t
-#define u32 uint32_t
-#define u64 uint64_t
-#include <linux/if.h>
-#include <linux/sockios.h>
-#include <linux/ethtool.h>
-#include <linux/if_arp.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "net.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * gather network interface info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static void get_driverinfo(hd_data_t *hd_data, hd_t *hd);
-static void get_linkstate(hd_data_t *hd_data, hd_t *hd);
-static void add_xpnet(hd_data_t *hdata);
-static void add_iseries(hd_data_t *hdata);
-static void add_uml(hd_data_t *hdata);
-
-/*
- * This is independent of the other scans.
- */
-
-void hd_scan_net(hd_data_t *hd_data)
-{
- unsigned u;
- int if_type;
- hd_t *hd, *hd_card;
- char *s, *hw_addr;
- hd_res_t *res, *res1;
- uint64_t ul0;
-
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct sysfs_driver *sf_drv;
- struct dlist *sf_cdev_list;
-
- if(!hd_probe_feature(hd_data, pr_net)) return;
-
- hd_data->module = mod_net;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->net = free_str_list(hd_data->net);
-
- PROGRESS(1, 0, "get network data");
-
- sf_class = sysfs_open_class("net");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: net\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- hd_card = NULL;
-
- ADD2LOG(
- " net interface: name = %s, classname = %s, path = %s\n",
- sf_cdev->name,
- sf_cdev->classname,
- hd_sysfs_id(sf_cdev->path)
- );
-
- if_type = -1;
- if(hd_attr_uint(sysfs_get_classdev_attr(sf_cdev, "type"), &ul0, 0)) {
- if_type = ul0;
- ADD2LOG(" type = %d\n", if_type);
- }
-
- hw_addr = NULL;
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "address")))) {
- hw_addr = canon_str(s, strlen(s));
- ADD2LOG(" hw_addr = %s\n", hw_addr);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- ADD2LOG(" net device: path = %s\n", hd_sysfs_id(sf_dev->path));
- }
-
- sf_drv = sysfs_get_classdev_driver(sf_cdev);
- if(sf_drv) {
- ADD2LOG(
- " net driver: name = %s, path = %s\n",
- sf_drv->name,
- hd_sysfs_id(sf_drv->path)
- );
- }
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_network_interface;
- hd->sub_class.id = sc_nif_other;
-
- res1 = NULL;
- if(hw_addr && strspn(hw_addr, "0:") != strlen(hw_addr)) {
- res1 = new_mem(sizeof *res1);
- res1->hwaddr.type = res_hwaddr;
- res1->hwaddr.addr = new_str(hw_addr);
- add_res_entry(&hd->res, res1);
- }
-
- hw_addr = free_mem(hw_addr);
-
- hd->unix_dev_name = new_str(sf_cdev->name);
- hd->sysfs_id = new_str(hd_sysfs_id(sf_cdev->path));
-
- if(sf_drv) {
- add_str_list(&hd->drivers, sf_drv->name);
- }
- else if(hd->res) {
- get_driverinfo(hd_data, hd);
- }
-
- if(sf_dev) {
- hd->sysfs_device_link = new_str(hd_sysfs_id(sf_dev->path));
-
- hd_card = hd_find_sysfs_id(hd_data, hd_sysfs_id(sf_dev->path));
- if(hd_card) {
- hd->attached_to = hd_card->idx;
-
- /* for cards with strange pci classes */
- hd_set_hw_class(hd_card, hw_network_ctrl);
-
- /* add hw addr to network card */
- if(res1) {
- u = 0;
- for(res = hd_card->res; res; res = res->next) {
- if(
- res->any.type == res_hwaddr &&
- !strcmp(res->hwaddr.addr, res1->hwaddr.addr)
- ) {
- u = 1;
- break;
- }
- }
- if(!u) {
- res = new_mem(sizeof *res);
- res->hwaddr.type = res_hwaddr;
- res->hwaddr.addr = new_str(res1->hwaddr.addr);
- add_res_entry(&hd_card->res, res);
- }
- }
- /* add interface names */
- if(hd->unix_dev_name) {
- if(!search_str_list(hd_card->unix_dev_names, hd->unix_dev_name)) {
- add_str_list(&hd_card->unix_dev_names, hd->unix_dev_name);
- }
- if(!hd_card->unix_dev_name) {
- hd_card->unix_dev_name = new_str(hd->unix_dev_name);
- }
- }
- }
- }
-
-#if 0
- "ctc" sc_nif_ctc
- "iucv" sc_nif_iucv
- "hsi" sc_nif_hsi
- "qeth" sc_nif_qeth
- "escon" sc_nif_escon
- "myri" sc_nif_myrinet
- "wlan" sc_nif_wlan
- "xp" sc_nif_xp
- "usb" sc_nif_usb
-#endif
- switch(if_type) {
- case ARPHRD_ETHER: /* eth */
- hd->sub_class.id = sc_nif_ethernet;
- break;
- case ARPHRD_LOOPBACK: /* lo */
- hd->sub_class.id = sc_nif_loopback;
- break;
- case ARPHRD_SIT: /* sit */
- hd->sub_class.id = sc_nif_sit;
- break;
- case ARPHRD_FDDI: /* fddi */
- hd->sub_class.id = sc_nif_fddi;
- break;
- case ARPHRD_IEEE802_TR: /* tr */
- hd->sub_class.id = sc_nif_tokenring;
- break;
-#if 0
- case ARPHRD_IEEE802: /* fc */
- hd->sub_class.id = sc_nif_fc;
- break;
-#endif
- }
-
- if(!strcmp(hd->unix_dev_name, "lo")) {
- hd->sub_class.id = sc_nif_loopback;
- }
- else if(sscanf(hd->unix_dev_name, "eth%u", &u) == 1) {
- hd->sub_class.id = sc_nif_ethernet;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "tr%u", &u) == 1) {
- hd->sub_class.id = sc_nif_tokenring;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "fddi%u", &u) == 1) {
- hd->sub_class.id = sc_nif_fddi;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "ctc%u", &u) == 1) {
- hd->sub_class.id = sc_nif_ctc;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "iucv%u", &u) == 1) {
- hd->sub_class.id = sc_nif_iucv;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "hsi%u", &u) == 1) {
- hd->sub_class.id = sc_nif_hsi;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "qeth%u", &u) == 1) {
- hd->sub_class.id = sc_nif_qeth;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "escon%u", &u) == 1) {
- hd->sub_class.id = sc_nif_escon;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "myri%u", &u) == 1) {
- hd->sub_class.id = sc_nif_myrinet;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "sit%u", &u) == 1) {
- hd->sub_class.id = sc_nif_sit; /* ipv6 over ipv4 tunnel */
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "wlan%u", &u) == 1) {
- hd->sub_class.id = sc_nif_wlan;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "xp%u", &u) == 1) {
- hd->sub_class.id = sc_nif_xp;
- hd->slot = u;
- }
- else if(sscanf(hd->unix_dev_name, "usb%u", &u) == 1) {
- hd->sub_class.id = sc_nif_usb;
- hd->slot = u;
- }
- /* ##### add more interface names here */
-
- hd->bus.id = bus_none;
-
- /* fix card type */
- if(hd_card) {
- if(
- (hd_card->base_class.id == 0 && hd_card->sub_class.id == 0) ||
- (hd_card->base_class.id == bc_network && hd_card->sub_class.id == 0x80)
- ) {
- switch(hd->sub_class.id) {
- case sc_nif_ethernet:
- hd_card->base_class.id = bc_network;
- hd_card->sub_class.id = 0;
- break;
-
- case sc_nif_usb:
- hd_card->base_class.id = bc_network;
- hd_card->sub_class.id = 0x91;
- break;
- }
- }
- }
- }
-
- sysfs_close_class(sf_class);
-
- if(hd_is_sgi_altix(hd_data)) add_xpnet(hd_data);
- if(hd_is_iseries(hd_data)) add_iseries(hd_data);
- add_uml(hd_data);
-
- /* add link status info */
- for(hd = hd_data->hd ; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->base_class.id == bc_network_interface
- ) {
- get_linkstate(hd_data, hd);
-
- if(!(hd_card = hd_get_device_by_idx(hd_data, hd->attached_to))) continue;
-
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_link) break;
- }
-
- if(res) {
- for(res1 = hd_card->res; res1; res1 = res1->next) {
- if(res1->any.type == res_link) break;
- }
- if(res && !res1) {
- res1 = new_mem(sizeof *res1);
- res1->link.type = res_link;
- res1->link.state = res->link.state;
- add_res_entry(&hd_card->res, res1);
- }
- }
- }
- }
-}
-
-
-/*
- * Get it the classical way, for drivers that don't support sysfs (veth).
- */
-void get_driverinfo(hd_data_t *hd_data, hd_t *hd)
-{
- int fd;
- struct ethtool_drvinfo drvinfo = { cmd:ETHTOOL_GDRVINFO };
- struct ifreq ifr;
-
- if(!hd->unix_dev_name) return;
-
- if(strlen(hd->unix_dev_name) > sizeof ifr.ifr_name - 1) return;
-
- if((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) return;
-
- /* get driver info */
- memset(&ifr, 0, sizeof ifr);
- strcpy(ifr.ifr_name, hd->unix_dev_name);
- ifr.ifr_data = (caddr_t) &drvinfo;
- if(ioctl(fd, SIOCETHTOOL, &ifr) == 0) {
- ADD2LOG(" ethtool driver: %s\n", drvinfo.driver);
- ADD2LOG(" ethtool bus: %s\n", drvinfo.bus_info);
-
- add_str_list(&hd->drivers, drvinfo.driver);
- }
- else {
- ADD2LOG(" GDRVINFO ethtool error: %s\n", strerror(errno));
- }
-
- close(fd);
-}
-
-
-/*
- * Check network link status.
- */
-void get_linkstate(hd_data_t *hd_data, hd_t *hd)
-{
- int fd;
- struct ethtool_value linkstatus = { cmd:ETHTOOL_GLINK };
- struct ifreq ifr;
- hd_res_t *res;
-
- if(!hd->unix_dev_name) return;
-
- if(strlen(hd->unix_dev_name) > sizeof ifr.ifr_name - 1) return;
-
- if((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) return;
-
- /* get driver info */
- memset(&ifr, 0, sizeof ifr);
- strcpy(ifr.ifr_name, hd->unix_dev_name);
- ifr.ifr_data = (caddr_t) &linkstatus;
- if(ioctl(fd, SIOCETHTOOL, &ifr) == 0) {
- ADD2LOG(" %s: ethtool link state: %d\n", hd->unix_dev_name, linkstatus.data);
- res = new_mem(sizeof *res);
- res->link.type = res_link;
- res->link.state = linkstatus.data ? 1 : 0;
- add_res_entry(&hd->res, res);
- }
- else {
- ADD2LOG(" %s: GLINK ethtool error: %s\n", hd->unix_dev_name, strerror(errno));
- }
-
- close(fd);
-}
-
-
-/*
- * SGI Altix cross partition network.
- */
-void add_xpnet(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_card;
- hd_res_t *res, *res2;
-
- hd_card = add_hd_entry(hd_data, __LINE__, 0);
- hd_card->base_class.id = bc_network;
- hd_card->sub_class.id = 0x83;
-
- hd_card->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4002);
- hd_card->device.id = MAKE_ID(TAG_SPECIAL, 1);
-
- if(hd_module_is_active(hd_data, "xpnet")) {
- add_str_list(&hd_card->drivers, "xpnet");
- }
-
- for(hd = hd_data->hd ; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->base_class.id == bc_network_interface &&
- hd->sub_class.id == sc_nif_xp
- ) {
- hd->attached_to = hd_card->idx;
-
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_hwaddr) break;
- }
-
- if(res) {
- res2 = new_mem(sizeof *res2);
- res2->hwaddr.type = res_hwaddr;
- res2->hwaddr.addr = new_str(res->hwaddr.addr);
- add_res_entry(&hd_card->res, res2);
- }
-
- break;
- }
- }
-}
-
-
-/*
- * iSeries veth devices.
- */
-void add_iseries(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_card;
- hd_res_t *res, *res2;
- unsigned i, cardmask = 0, card_cnt = 0;
- str_list_t *sl0, *sl;
-
- for(hd = hd_data->hd ; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->base_class.id == bc_network_interface &&
- search_str_list(hd->drivers, "veth")
- ) {
- hd_card = add_hd_entry(hd_data, __LINE__, 0);
- hd_card->base_class.id = bc_network;
- hd_card->sub_class.id = 0x00;
- hd_card->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6001); // IBM
- hd_card->device.id = MAKE_ID(TAG_SPECIAL, 0x1000);
- add_str_list(&hd_card->drivers, "iseries_veth");
- hd_card->slot = card_cnt++;
- str_printf(&hd_card->device.name, 0, "Virtual Ethernet card");
- hd->attached_to = hd_card->idx;
-
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_hwaddr) break;
- }
-
- if(res) {
- unsigned int slotno;
-
- res2 = new_mem(sizeof *res2);
- res2->hwaddr.type = res_hwaddr;
- res2->hwaddr.addr = new_str(res->hwaddr.addr);
- add_res_entry(&hd_card->res, res2);
- if (sscanf(res->hwaddr.addr, "02:01:ff:%x:ff:", &slotno)) {
- hd_card->slot = slotno;
- str_printf(&hd_card->device.name, 0, "Virtual Ethernet card %d", hd_card->slot);
- }
- }
- }
- }
-
- if(!card_cnt) {
- sl0 = read_file("/proc/iSeries/config", 0, 0);
- for(sl = sl0; sl; sl = sl->next) {
- if(sscanf(sl->str, "AVAILABLE_VETH=%x", &cardmask) == 1)
- break;
- }
- free_str_list(sl0);
-
- for (i = 0; i < 16; i++) {
- if ((0x8000 >> i) & cardmask) {
- hd_card = add_hd_entry(hd_data, __LINE__, 0);
- hd_card->base_class.id = bc_network;
- hd_card->sub_class.id = 0x00;
- hd_card->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6001); // IBM
- hd_card->device.id = MAKE_ID(TAG_SPECIAL, 0x1000);
- hd_card->slot = i;
- str_printf(&hd_card->device.name, 0, "Virtual Ethernet card %d", i);
- }
- }
- }
-}
-
-
-/*
- * UML veth devices.
- */
-void add_uml(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_card;
- hd_res_t *res, *res2;
- unsigned card_cnt = 0;
-
- for(hd = hd_data->hd ; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->base_class.id == bc_network_interface &&
- search_str_list(hd->drivers, "uml virtual ethernet")
- ) {
- hd_card = add_hd_entry(hd_data, __LINE__, 0);
- hd_card->base_class.id = bc_network;
- hd_card->sub_class.id = 0x00;
- hd_card->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6010); // UML
- hd_card->device.id = MAKE_ID(TAG_SPECIAL, 0x0001);
- hd_card->slot = card_cnt++;
- str_printf(&hd_card->device.name, 0, "Virtual Ethernet card %d", hd_card->slot);
-// add_str_list(&hd_card->drivers, "veth");
-
- hd->attached_to = hd_card->idx;
-
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_hwaddr) break;
- }
-
- if(res) {
- res2 = new_mem(sizeof *res2);
- res2->hwaddr.type = res_hwaddr;
- res2->hwaddr.addr = new_str(res->hwaddr.addr);
- add_res_entry(&hd_card->res, res2);
- }
- }
- }
-}
-
-
+++ /dev/null
-void hd_scan_net(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "parallel.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * parallel port device info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#ifndef LIBHD_TINY
-
-static void do_lp(hd_data_t *hd_data);
-static void do_zip(hd_data_t *hd_data);
-static void dump_parallel_data(hd_data_t *hd_data, str_list_t *sl);
-
-void hd_scan_parallel(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_parallel)) return;
-
- hd_data->module = mod_parallel;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- if(hd_probe_feature(hd_data, pr_parallel_lp)) do_lp(hd_data);
-
- if(hd_probe_feature(hd_data, pr_parallel_zip)) do_zip(hd_data);
-}
-
-void do_lp(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_i;
- str_list_t *sl, *sl0;
- hd_res_t *res;
- char *pp = NULL, buf[256], unix_dev[] = "/dev/lp0", *s = NULL;
- char *base_class, *device, *vendor, *cmd_set;
- int i, j, port;
- str_list_t *log = NULL;
-
- PROGRESS(1, 0, "pp mod");
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_comm && hd->sub_class.id == sc_com_par) break;
- }
-
- /* ... if there seems to be a parallel interface, try to load it */
- if(hd || 1) { /* always load it */
- if(hd_data->kernel_version == KERNEL_22) {
- unload_module(hd_data, "parport_probe");
- probe_module(hd_data, "parport_probe");
- } else {
- unload_module(hd_data, "lp");
- unload_module(hd_data, "parport_pc");
- probe_module(hd_data, "parport_pc");
- }
- }
-
- for(i = 0; i < 3; i++, unix_dev[sizeof unix_dev - 2]++) {
- PROGRESS(2, 1 + i, "lp read info");
-
- port = 0;
- // ##### read modes as well? (e.g: SPP,ECP,ECPEPP,ECPPS2)
- if(hd_data->kernel_version == KERNEL_22)
- str_printf(&pp, 0, PROC_PARPORT_22 "%d/hardware", i);
- else
- str_printf(&pp, 0, PROC_PARPORT_24 "%d/base-addr", i);
- sl0 = read_file(pp, 0, 0);
- if(!sl0) continue; /* file doesn't exist -> no parport entry */
- str_printf(&s, 0, "%s\n", pp);
- add_str_list(&log, s);
- for(sl = sl0; sl; sl = sl->next) {
- str_printf(&s, 0, " %s", sl->str);
- add_str_list(&log, s);
- if(hd_data->kernel_version == KERNEL_22) {
- if(sscanf(sl->str, "base: %i", &j) == 1) port = j;
- } else {
- if(sscanf(sl->str, "%i", &j) == 1) port = j;
- }
- }
- free_str_list(sl0);
-
- if(hd_data->kernel_version == KERNEL_22)
- str_printf(&pp, 0, PROC_PARPORT_22 "%d/autoprobe", i);
- else
- str_printf(&pp, 0, PROC_PARPORT_24 "%d/autoprobe", i);
- sl0 = read_file(pp, 0, 0);
- str_printf(&s, 0, "%s\n", pp);
- add_str_list(&log, s);
- base_class = device = vendor = cmd_set = NULL;
- for(sl = sl0; sl; sl = sl->next) {
- str_printf(&s, 0, " %s", sl->str);
- add_str_list(&log, s);
-// fprintf(stderr, "str = \"%s\"\n", sl->str);
- if(sscanf(sl->str, "CLASS: %255[^\n;]", buf) == 1) base_class = new_str(buf);
- if(sscanf(sl->str, "MODEL: %255[^\n;]", buf) == 1) device = new_str(buf);
- if(sscanf(sl->str, "MANUFACTURER: %255[^\n;]", buf) == 1) vendor = new_str(buf);
- if(sscanf(sl->str, "COMMAND SET: %255[^\n;]", buf) == 1) cmd_set = new_str(buf);
- }
- free_str_list(sl0);
-
- /* default to printer */
- if(!base_class && vendor && device) base_class = new_str("printer");
-
- s = free_mem(s);
-
-// fprintf(stderr, "port <0x%x\n", port);
-// fprintf(stderr, "class <%s>\n", base_class);
-// fprintf(stderr, "device <%s>\n", device);
-// fprintf(stderr, "vendor <%s>\n", vendor);
-// fprintf(stderr, "cmds <%s>\n", cmd_set);
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_comm &&
- hd->sub_class.id == sc_com_par &&
- hd->unix_dev_name &&
- !strcmp(hd->unix_dev_name, unix_dev)
- ) break;
- }
-
- if(!hd) {
- /* no entry ??? */
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_par;
- hd->unix_dev_name = new_str(unix_dev);
- if(port) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = port;
- res->io.access = acc_rw;
- }
- }
-
- // ##### check if ports match?
-
- if(
- base_class ||
- (device && strcmp(device, "Unknown device")) ||
- (vendor && strcmp(vendor, "Unknown vendor"))
- ) {
- hd_i = hd;
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->attached_to = hd_i->idx;
- hd->unix_dev_name = new_str(hd_i->unix_dev_name);
- hd->base_class.id = bc_none;
- if(base_class && !strcasecmp(base_class, "printer")) hd->base_class.id = bc_printer;
- hd->bus.id = bus_parallel;
-
- hd->vendor.name = new_str(vendor);
- hd->device.name = new_str(device);
- }
-
- free_mem(base_class);
- free_mem(device);
- free_mem(vendor);
- free_mem(cmd_set);
- }
-
- pp = free_mem(pp);
-
- if((hd_data->debug & HD_DEB_PARALLEL)) dump_parallel_data(hd_data, log);
-
- free_str_list(log);
-
-}
-
-void do_zip(hd_data_t *hd_data)
-{
- hd_t *hd, *hd_i;
- int i, j, port, is_imm, is_ppa, is_imm0, is_ppa0;
- char *pp = NULL, *s = NULL, *unix_dev = NULL;
- str_list_t *log = NULL, *sl, *sl0;
- int do_imm = hd_probe_feature(hd_data, pr_parallel_imm);
-
- is_imm = is_imm0 = hd_module_is_active(hd_data, "imm");
- is_ppa = is_ppa0 = hd_module_is_active(hd_data, "ppa");
-
- if(!(is_imm || is_ppa)) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->base_class.id == bc_comm && hd->sub_class.id == sc_com_par) break;
- }
- /* ... if there seems to be a parallel interface, try to load it */
- if(hd) {
- if(do_imm) {
- PROGRESS(5, 0, "imm mod");
- load_module(hd_data, "imm");
- }
- PROGRESS(5, 0, "ppa mod");
- load_module(hd_data, "ppa");
- is_imm = hd_module_is_active(hd_data, "imm");
- is_ppa = hd_module_is_active(hd_data, "ppa");
- if(do_imm && !is_imm) {
- int fd;
- char flush[2] = { 4, 12 };
-
- fd = open("/dev/lp0", O_NONBLOCK | O_WRONLY);
- if(fd != -1) {
- write(fd, flush, sizeof flush);
- close(fd);
- }
- }
- }
- }
-
- if(!(is_imm || is_ppa)) return;
-
- PROGRESS(6, 0, "zip read info");
-
- for(i = 0; i < 16; i++) {
- str_printf(&pp, 0, PROC_SCSI "/%s/%d", (i % 2) ? "ppa" : "imm", i / 2);
- sl0 = read_file(pp, 0, 0);
- if(!sl0) continue;
- str_printf(&s, 0, "%s\n", pp);
- add_str_list(&log, s);
- port = -1;
- for(sl = sl0; sl; sl = sl->next) {
- str_printf(&s, 0, " %s", sl->str);
- add_str_list(&log, s);
- if(sscanf(sl->str, "Parport : parport%d", &j) == 1) port = j;
- }
- free_str_list(sl0);
- pp = free_mem(pp);
- s = free_mem(s);
-
- unix_dev = free_mem(unix_dev);
- if(port >= 0) {
- str_printf(&unix_dev, 0, "/dev/lp%d", port);
- }
-
- hd = NULL;
- if(unix_dev) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_comm &&
- hd->sub_class.id == sc_com_par &&
- hd->unix_dev_name &&
- !strcmp(hd->unix_dev_name, unix_dev)
- ) break;
- }
-
- if(!hd) {
- /* no entry ??? */
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_par;
- hd->unix_dev_name = new_str(unix_dev);
- }
- }
-
- hd_i = hd;
- hd = add_hd_entry(hd_data, __LINE__, 0);
- if(hd_i) {
- hd->attached_to = hd_i->idx;
- hd->unix_dev_name = new_str(hd_i->unix_dev_name);
- }
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_parallel;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x1800);
- hd->device.id = MAKE_ID(TAG_SPECIAL, (i % 2) ? 2 : 1);
- }
-
- if(!is_imm0) unload_module(hd_data, "imm");
- if(!is_ppa0) unload_module(hd_data, "ppa");
-
- if((hd_data->debug & HD_DEB_PARALLEL)) dump_parallel_data(hd_data, log);
-
- free_mem(unix_dev);
-
- free_str_list(log);
-
-}
-
-void dump_parallel_data(hd_data_t *hd_data, str_list_t *sl)
-{
- ADD2LOG("----- parallel info -----\n");
- for(; sl; sl = sl->next) {
- ADD2LOG("%s", sl->str);
- }
- ADD2LOG("----- parallel info end -----\n");
-}
-
-#endif /* ifndef LIBHD_TINY */
-
+++ /dev/null
-void hd_scan_parallel(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-typedef unsigned long kernel_ulong_t;
-#include <linux/types.h>
-#ifdef __UCLIBC__
-#include <linux/pci.h>
-#else
-#include <sys/pci.h>
-#endif
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "pci.h"
-
-/*
- * linux/ioport.h
- */
-#define IORESOURCE_BITS 0x000000ff
-#define IORESOURCE_IO 0x00000100
-#define IORESOURCE_MEM 0x00000200
-#define IORESOURCE_IRQ 0x00000400
-#define IORESOURCE_DMA 0x00000800
-#define IORESOURCE_PREFETCH 0x00001000
-#define IORESOURCE_READONLY 0x00002000
-#define IORESOURCE_CACHEABLE 0x00004000
-#define IORESOURCE_DISABLED 0x10000000
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * pci stuff
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-static struct sysfs_attribute *hd_read_single_sysfs_attribute(char *path, char *name);
-static void get_pci_data(hd_data_t *hd_data);
-static void add_pci_data(hd_data_t *hd_data);
-static void add_driver_info(hd_data_t *hd_data);
-static pci_t *add_pci_entry(hd_data_t *hd_data, pci_t *new_pci);
-static unsigned char pci_cfg_byte(pci_t *pci, int fd, unsigned idx);
-static void dump_pci_data(hd_data_t *hd_data);
-
-void hd_scan_sysfs_pci(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_pci)) return;
-
- hd_data->module = mod_pci;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->pci = NULL;
-
- PROGRESS(1, 0, "sysfs drivers");
-
- hd_sysfs_driver_list(hd_data);
-
- PROGRESS(2, 0, "get sysfs pci data");
-
- get_pci_data(hd_data);
- if(hd_data->debug) dump_pci_data(hd_data);
-
- add_pci_data(hd_data);
-}
-
-
-/*
- * sysfs_get_device_attr() reads *all* device attributes, then returns the
- * requested one.
- *
- * This leads to problems where some attribute *must not* be read.
- */
-struct sysfs_attribute *hd_read_single_sysfs_attribute(char *path, char *name)
-{
- char *attr_path = NULL;
- struct sysfs_attribute *attr;
-
- str_printf(&attr_path, 0, "%s/%s", path, name);
- attr = sysfs_open_attribute(attr_path);
- free_mem(attr_path);
-
- sysfs_read_attribute(attr);
-
- return attr;
-}
-
-
-/*
- * Get the (raw) PCI data, taken from /sys/bus/pci/.
- *
- * Note: non-root users can only read the first 64 bytes (of 256)
- * of the device headers.
- */
-void get_pci_data(hd_data_t *hd_data)
-{
- uint64_t ul0, ul1, ul2;
- unsigned u, u0, u1, u2, u3;
- unsigned char nxt;
- str_list_t *sl;
- char *s;
- pci_t *pci;
- int fd;
-
- struct sysfs_bus *sf_bus;
- struct dlist *sf_dev_list;
- struct sysfs_device *sf_dev;
- struct sysfs_attribute *attr;
-
- sf_bus = sysfs_open_bus("pci");
-
- if(!sf_bus) {
- ADD2LOG("sysfs: no such bus: pci\n");
- return;
- }
-
- sf_dev_list = sysfs_get_bus_devices(sf_bus);
- if(sf_dev_list) dlist_for_each_data(sf_dev_list, sf_dev, struct sysfs_device) {
- ADD2LOG(
- " pci device: name = %s, bus_id = %s, bus = %s\n path = %s\n",
- sf_dev->name,
- sf_dev->bus_id,
- sf_dev->bus,
- hd_sysfs_id(sf_dev->path)
- );
-
- if(sscanf(sf_dev->bus_id, "%x:%x:%x.%x", &u0, &u1, &u2, &u3) != 4) continue;
-
- pci = add_pci_entry(hd_data, new_mem(sizeof *pci));
-
- pci->sysfs_id = new_str(sf_dev->path);
- pci->sysfs_bus_id = new_str(sf_dev->bus_id);
-
- pci->bus = (u0 << 8) + u1;
- pci->slot = u2;
- pci->func = u3;
-
- if(hd_attr_uint(attr = hd_read_single_sysfs_attribute(sf_dev->path, "class"), &ul0, 0)) {
- ADD2LOG(" class = 0x%x\n", (unsigned) ul0);
- pci->prog_if = ul0 & 0xff;
- pci->sub_class = (ul0 >> 8) & 0xff;
- pci->base_class = (ul0 >> 16) & 0xff;
- }
- sysfs_close_attribute(attr);
-
- if(hd_attr_uint(attr = hd_read_single_sysfs_attribute(sf_dev->path, "vendor"), &ul0, 0)) {
- ADD2LOG(" vendor = 0x%x\n", (unsigned) ul0);
- pci->vend = ul0 & 0xffff;
- }
- sysfs_close_attribute(attr);
-
- if(hd_attr_uint(attr = hd_read_single_sysfs_attribute(sf_dev->path, "device"), &ul0, 0)) {
- ADD2LOG(" device = 0x%x\n", (unsigned) ul0);
- pci->dev = ul0 & 0xffff;
- }
- sysfs_close_attribute(attr);
-
- if(hd_attr_uint(attr = hd_read_single_sysfs_attribute(sf_dev->path, "subsystem_vendor"), &ul0, 0)) {
- ADD2LOG(" subvendor = 0x%x\n", (unsigned) ul0);
- pci->sub_vend = ul0 & 0xffff;
- }
- sysfs_close_attribute(attr);
-
- if(hd_attr_uint(attr = hd_read_single_sysfs_attribute(sf_dev->path, "subsystem_device"), &ul0, 0)) {
- ADD2LOG(" subdevice = 0x%x\n", (unsigned) ul0);
- pci->sub_dev = ul0 & 0xffff;
- }
- sysfs_close_attribute(attr);
-
- if(hd_attr_uint(attr = hd_read_single_sysfs_attribute(sf_dev->path, "irq"), &ul0, 0)) {
- ADD2LOG(" irq = %d\n", (unsigned) ul0);
- pci->irq = ul0;
- }
- sysfs_close_attribute(attr);
-
- sl = hd_attr_list(attr = hd_read_single_sysfs_attribute(sf_dev->path, "resource"));
- for(u = 0; sl; sl = sl->next, u++) {
- if(
- sscanf(sl->str, "0x%"SCNx64" 0x%"SCNx64" 0x%"SCNx64, &ul0, &ul1, &ul2) == 3 &&
- ul1 &&
- u < sizeof pci->base_addr / sizeof *pci->base_addr
- ) {
- ADD2LOG(" res[%u] = 0x%"PRIx64" 0x%"PRIx64" 0x%"PRIx64"\n", u, ul0, ul1, ul2);
- pci->base_addr[u] = ul0;
- pci->base_len[u] = ul1 + 1 - ul0;
- pci->addr_flags[u] = ul2;
- }
- }
- sysfs_close_attribute(attr);
-
- s = NULL;
- str_printf(&s, 0, "%s/config", sf_dev->path);
- if((fd = open(s, O_RDONLY)) != -1) {
- pci->data_len = pci->data_ext_len = read(fd, pci->data, 0x40);
- ADD2LOG(" config[%u]\n", pci->data_len);
-
- if(pci->data_len >= 0x40) {
- pci->hdr_type = pci->data[PCI_HEADER_TYPE] & 0x7f;
- pci->cmd = pci->data[PCI_COMMAND] + (pci->data[PCI_COMMAND + 1] << 8);
-
- if(pci->hdr_type == 1 || pci->hdr_type == 2) { /* PCI or CB bridge */
- pci->secondary_bus = pci->data[PCI_SECONDARY_BUS];
- /* PCI_SECONDARY_BUS == PCI_CB_CARD_BUS */
- }
-
- for(u = 0; u < sizeof pci->base_addr / sizeof *pci->base_addr; u++) {
- if((pci->addr_flags[u] & IORESOURCE_IO)) {
- if(!(pci->cmd & PCI_COMMAND_IO)) pci->addr_flags[u] |= IORESOURCE_DISABLED;
- }
-
- if((pci->addr_flags[u] & IORESOURCE_MEM)) {
- if(!(pci->cmd & PCI_COMMAND_MEMORY)) pci->addr_flags[u] |= IORESOURCE_DISABLED;
- }
- }
-
- /* let's get through the capability list */
- if(
- pci->hdr_type == PCI_HEADER_TYPE_NORMAL &&
- (nxt = pci->data[PCI_CAPABILITY_LIST])
- ) {
- /*
- * Cut out after 16 capabilities to avoid infinite recursion due
- * to (potentially) malformed data. 16 is more or less
- * arbitrary, though (the capabilities are bits in a byte, so 8 entries
- * should suffice).
- */
- for(u = 0; u < 16 && nxt && nxt <= 0xfe; u++) {
- switch(pci_cfg_byte(pci, fd, nxt)) {
- case PCI_CAP_ID_PM:
- pci->flags |= (1 << pci_flag_pm);
- break;
-
- case PCI_CAP_ID_AGP:
- pci->flags |= (1 << pci_flag_agp);
- break;
- }
- nxt = pci_cfg_byte(pci, fd, nxt + 1);
- }
- }
- }
-
- close(fd);
- }
- s = free_mem(s);
-
- pci->rev = pci->data[PCI_REVISION_ID];
-
- if((pci->addr_flags[6] & IORESOURCE_MEM)) {
- if(!(pci->data[PCI_ROM_ADDRESS] & PCI_ROM_ADDRESS_ENABLE)) {
- pci->addr_flags[6] |= IORESOURCE_DISABLED;
- }
- }
-
- pci->flags |= (1 << pci_flag_ok);
- }
-
- sysfs_close_bus(sf_bus);
-}
-
-
-void add_pci_data(hd_data_t *hd_data)
-{
- hd_t *hd, *hd2;
- pci_t *pci, *pnext;
- hd_res_t *res;
- unsigned u;
- char *s, *t;
-
- PROGRESS(4, 0, "build list");
-
- for(pci = hd_data->pci; pci; pci = pnext) {
- pnext = pci->next;
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- hd->sysfs_id = new_str(hd_sysfs_id(pci->sysfs_id));
- s = hd_sysfs_find_driver(hd_data, hd->sysfs_id, 1);
- if(s) add_str_list(&hd->drivers, s);
-
- if(pci->sysfs_bus_id && *pci->sysfs_bus_id) {
- hd->sysfs_bus_id = new_str(pci->sysfs_bus_id);
- }
-
- hd->bus.id = bus_pci;
- hd->slot = pci->slot + (pci->bus << 8);
- hd->func = pci->func;
- hd->base_class.id = pci->base_class;
- hd->sub_class.id = pci->sub_class;
- hd->prog_if.id = pci->prog_if;
-
- /* fix up old VGA's entries */
- if(hd->base_class.id == bc_none && hd->sub_class.id == 0x01) {
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- }
-
- if(pci->dev || pci->vend) {
- hd->device.id = MAKE_ID(TAG_PCI, pci->dev);
- hd->vendor.id = MAKE_ID(TAG_PCI, pci->vend);
- }
- if(pci->sub_dev || pci->sub_vend) {
- hd->sub_device.id = MAKE_ID(TAG_PCI, pci->sub_dev);
- hd->sub_vendor.id = MAKE_ID(TAG_PCI, pci->sub_vend);
- }
- hd->revision.id = pci->rev;
-
- if((u = device_class(hd_data, hd->vendor.id, hd->device.id))) {
- hd->base_class.id = u >> 8;
- hd->sub_class.id = u & 0xff;
- }
-
- for(u = 0; u < sizeof pci->base_addr / sizeof *pci->base_addr; u++) {
- if((pci->addr_flags[u] & IORESOURCE_IO)) {
- res = new_mem(sizeof *res);
- res->io.type = res_io;
- res->io.enabled = pci->addr_flags[u] & IORESOURCE_DISABLED ? 0 : 1;
- res->io.base = pci->base_addr[u];
- res->io.range = pci->base_len[u];
- res->io.access = pci->addr_flags[u] & IORESOURCE_READONLY ? acc_ro : acc_rw;
- add_res_entry(&hd->res, res);
- }
-
- if((pci->addr_flags[u] & IORESOURCE_MEM)) {
- res = new_mem(sizeof *res);
- res->mem.type = res_mem;
- res->mem.enabled = pci->addr_flags[u] & IORESOURCE_DISABLED ? 0 : 1;
- res->mem.base = pci->base_addr[u];
- res->mem.range = pci->base_len[u];
- res->mem.access = pci->addr_flags[u] & IORESOURCE_READONLY ? acc_ro : acc_rw;
- res->mem.prefetch = pci->addr_flags[u] & IORESOURCE_PREFETCH ? flag_yes : flag_no;
- add_res_entry(&hd->res, res);
- }
- }
-
- if(pci->irq) {
- res = new_mem(sizeof *res);
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = pci->irq;
- add_res_entry(&hd->res, res);
- }
-
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_pci;
- hd->detail->pci.data = pci;
- if(pci->flags & (1 << pci_flag_agp)) hd->is.agp = 1;
- pci->next = NULL;
- }
- hd_data->pci = NULL;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->bus.id == bus_pci && hd->sysfs_id) {
- s = new_str(hd->sysfs_id);
-
- if((t = strrchr(s, '/'))) {
- *t = 0;
- if((hd2 = hd_find_sysfs_id(hd_data, s))) {
- hd->attached_to = hd2->idx;
- }
- }
- free_mem(s);
- }
- }
-
- add_driver_info(hd_data);
-}
-
-
-/*
- * Add driver info in some special cases.
- */
-void add_driver_info(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->bus.id != bus_pci) continue;
-
- if(
- (
- hd->base_class.id == bc_serial &&
- hd->sub_class.id == sc_ser_fire
- ) ||
- (
- hd->base_class.id == bc_serial &&
- hd->sub_class.id == sc_ser_usb
- )
- ) {
- for(res = hd->res; res; res = res->next) {
- if(res->any.type == res_irq) break;
- }
- if(!res) hd->is.notready = 1;
- continue;
- }
- }
-}
-
-
-#if 1
-/*
- * Store a raw PCI entry; just for convenience.
- */
-pci_t *add_pci_entry(hd_data_t *hd_data, pci_t *new_pci)
-{
- pci_t **pci = &hd_data->pci;
-
- while(*pci) pci = &(*pci)->next;
-
- return *pci = new_pci;
-}
-
-#else
-
-/*
- * Store a raw PCI entry; just for convenience.
- *
- * Reverse order.
- */
-pci_t *add_pci_entry(hd_data_t *hd_data, pci_t *new_pci)
-{
- new_pci->next = hd_data->pci;
-
- return hd_data->pci = new_pci;
-}
-#endif
-
-
-/*
- * get a byte from pci config space
- */
-unsigned char pci_cfg_byte(pci_t *pci, int fd, unsigned idx)
-{
- unsigned char uc;
-
- if(idx >= sizeof pci->data) return 0;
- if(idx < pci->data_len) return pci->data[idx];
- if(idx < pci->data_ext_len && pci->data[idx]) return pci->data[idx];
- if(lseek(fd, idx, SEEK_SET) != (off_t) idx) return 0;
- if(read(fd, &uc, 1) != 1) return 0;
- pci->data[idx] = uc;
-
- if(idx >= pci->data_ext_len) pci->data_ext_len = idx + 1;
-
- return uc;
-}
-/*
- * Add a dump of all raw PCI data to the global log.
- */
-void dump_pci_data(hd_data_t *hd_data)
-{
- pci_t *pci;
- char *s = NULL;
- char buf[32];
- int i, j;
-
- ADD2LOG("---------- PCI raw data ----------\n");
-
- for(pci = hd_data->pci; pci; pci = pci->next) {
-
- if(!(pci->flags & (1 << pci_flag_ok))) str_printf(&s, -1, "oops");
- if(pci->flags & (1 << pci_flag_pm)) str_printf(&s, -1, ",pm");
- if(pci->flags & (1 << pci_flag_agp)) str_printf(&s, -1, ",agp");
- if(!s) str_printf(&s, 0, "%s", "");
-
- *buf = 0;
- if(pci->secondary_bus) {
- sprintf(buf, "->%02x", pci->secondary_bus);
- }
-
- ADD2LOG(
- "bus %02x%s, slot %02x, func %x, vend:dev:s_vend:s_dev:rev %04x:%04x:%04x:%04x:%02x\n",
- pci->bus, buf, pci->slot, pci->func, pci->vend, pci->dev, pci->sub_vend, pci->sub_dev, pci->rev
- );
- ADD2LOG(
- "class %02x, sub_class %02x prog_if %02x, hdr %x, flags <%s>, irq %u\n",
- pci->base_class, pci->sub_class, pci->prog_if, pci->hdr_type, *s == ',' ? s + 1 : s, pci->irq
- );
-
- s = free_mem(s);
-
- for(i = 0; i < 6; i++) {
- if(pci->base_addr[i] || pci->base_len[i])
- ADD2LOG(" addr%d %08"PRIx64", size %08"PRIx64"\n", i, pci->base_addr[i], pci->base_len[i]);
- }
- if(pci->rom_base_addr)
- ADD2LOG(" rom %08"PRIx64"\n", pci->rom_base_addr);
-
- if(pci->log) ADD2LOG("%s", pci->log);
-
- for(i = 0; (unsigned) i < pci->data_ext_len; i += 0x10) {
- ADD2LOG(" %02x: ", i);
- j = pci->data_ext_len - i;
- hexdump(&hd_data->log, 1, j > 0x10 ? 0x10 : j, pci->data + i);
- ADD2LOG("\n");
- }
-
- if(pci->next) ADD2LOG("\n");
- }
-
- ADD2LOG("---------- PCI raw data end ----------\n");
-}
-
-
-/*
- * Parse attribute and return integer value.
- */
-int hd_attr_uint(struct sysfs_attribute *attr, uint64_t *u, int base)
-{
- char *s;
- uint64_t u2;
- int ok;
-
- if(!(s = hd_attr_str(attr))) return 0;
-
- u2 = strtoull(s, &s, base);
- ok = !*s || isspace(*s) ? 1 : 0;
-
- if(ok && u) *u = u2;
-
- return ok;
-}
-
-
-/*
- * Return attribute as string list.
- */
-str_list_t *hd_attr_list(struct sysfs_attribute *attr)
-{
- static str_list_t *sl = NULL;
-
- free_str_list(sl);
-
- return sl = hd_split('\n', hd_attr_str(attr));
-}
-
-
-/*
- * Return attribute as string.
- */
-char *hd_attr_str(struct sysfs_attribute *attr)
-{
- return attr ? attr->value : NULL;
-}
-
-
-/*
- * Remove leading "/sys" from path.
- */
-char *hd_sysfs_id(char *path)
-{
- if(!path || !*path) return NULL;
-
- return strchr(path + 1, '/');
-}
-
-
-/*
- * Convert '!' to '/'.
- */
-char *hd_sysfs_name2_dev(char *str)
-{
- static char *s = NULL;
-
- if(!str) return NULL;
-
- free_mem(s);
- s = str = new_str(str);
-
- while(*str) {
- if(*str == '!') *str = '/';
- str++;
- }
-
- return s;
-}
-
-
-/*
- * Convert '/' to '!'.
- */
-char *hd_sysfs_dev2_name(char *str)
-{
- static char *s = NULL;
-
- if(!str) return NULL;
-
- free_mem(s);
- s = str = new_str(str);
-
- while(*str) {
- if(*str == '/') *str = '!';
- str++;
- }
-
- return s;
-}
-
-
+++ /dev/null
-void hd_scan_sysfs_pci(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <linux/hdreg.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "pcmcia.h"
-
-static void read_cardinfo(hd_data_t *hd_data);
-static void assign_bridges(hd_data_t *hd_data);
-static void add_sysfs_stuff(hd_data_t *hd_data, hd_t *hd);
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * PCMCIA info via cardctl
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-
-void hd_scan_pcmcia(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_pcmcia)) return;
-
- hd_data->module = mod_pcmcia;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- read_cardinfo(hd_data);
-
- assign_bridges(hd_data);
-
-}
-
-
-void read_cardinfo(hd_data_t *hd_data)
-{
- str_list_t *sl, *sl0, *sl1;
- int i0, i1, pcmcia_sock, manf_id0, manf_id1, func, prod_info;
- char buf0[256], buf1[256], buf2[256], buf3[256];
- hd_t *hd;
- unsigned cardbus = 0; /* bitmask: cardbus vs. pc-card */
-
- sl0 = read_file("| /sbin/cardctl status 2>/dev/null", 0, 0);
-
- ADD2LOG("----- cardctl status -----\n");
- for(sl = sl0; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- cardctl status end -----\n");
-
- for(pcmcia_sock = -1, sl = sl0; sl; sl = sl->next) {
- if(sscanf(sl->str, " Socket %d:", &i0) == 1) {
- pcmcia_sock = i0;
- continue;
- }
-
- if(strstr(sl->str, " CardBus card")) {
- if(pcmcia_sock >= 0 && pcmcia_sock < 8 * (int) sizeof cardbus) {
- cardbus |= 1 << pcmcia_sock;
- }
- pcmcia_sock = -1;
- continue;
- }
- }
-
- free_str_list(sl0);
-
- sl0 = read_file("| /sbin/cardctl ident 2>/dev/null", 0, 0);
-
- ADD2LOG("----- cardctl ident -----\n");
- for(sl = sl0; sl; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- cardctl ident end -----\n");
-
- for(
- pcmcia_sock = manf_id0 = manf_id1 = func = prod_info = -1, sl = sl0;
- sl;
- sl = sl->next
- ) {
- if(sscanf(sl->str, " manfid: %i, %i", &i0, &i1) == 2) {
- manf_id0 = i0;
- manf_id1 = i1;
- }
-
- if(sscanf(sl->str, " function: %d", &i0) == 1) {
- /*
- * "multifunction", "memory", "serial", "parallel",
- * "fixed disk", "video", "network", "AIMS",
- * "SCSI"
- */
- func = i0;
- }
-
- if(
- (i0 = sscanf(
- sl->str,
- " product info: \"%255[^\"]\", \"%255[^\"]\", \"%255[^\"]\", \"%255[^\"]\"",
- buf0, buf1, buf2, buf3
- )) >= 1
- ) {
- prod_info = i0;
- }
-
- if(sscanf(sl->str, " Socket %d:", &i0) == 1) {
- i1 = 1;
- }
- else {
- i1 = 0;
- }
-
- if(i1 || !sl->next) {
- if(pcmcia_sock >= 0 && (prod_info >= 1 || manf_id0 != -1)) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_pcmcia;
- hd->slot = pcmcia_sock;
- hd->hotplug_slot = pcmcia_sock + 1;
- if(manf_id0 != -1 && manf_id1 != -1) {
- hd->vendor.id = MAKE_ID(TAG_PCMCIA, manf_id0);
- hd->device.id = MAKE_ID(TAG_PCMCIA, manf_id1);
- }
- if(pcmcia_sock < 8 * (int) sizeof cardbus && (cardbus & (1 << pcmcia_sock))) {
- hd->hotplug = hp_cardbus;
- }
- else {
- hd->hotplug = hp_pcmcia;
- }
-
- if(func == 6) {
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x80; /* other */
- }
- if(prod_info >= 1) add_str_list(&hd->extra_info, buf0);
- if(prod_info >= 2) add_str_list(&hd->extra_info, buf1);
- if(prod_info >= 3) add_str_list(&hd->extra_info, buf2);
- if(prod_info >= 4) add_str_list(&hd->extra_info, buf3);
- if(prod_info >= 2) {
- hd->vendor.name = new_str(buf0);
- hd->device.name = new_str(buf1);
- }
- for(sl1 = hd->extra_info; sl1 ; sl1 = sl1->next) {
- if(strstr(sl1->str, "Ethernet")) hd->sub_class.id = 0; /* ethernet */
- if(
- !hd->revision.name &&
- !sl1->next &&
- (
- !strncasecmp(sl1->str, "rev.", sizeof "rev." - 1) ||
- (
- (sl1->str[0] == 'V' || sl1->str[0] == 'v') &&
- (sl1->str[1] >= '0' && sl1->str[1] <= '9')
- )
- )
- ) {
- hd->revision.name = new_str(sl1->str);
- }
- }
- }
-
- manf_id0 = manf_id1 = func = prod_info = -1;
- }
-
- if(i1) pcmcia_sock = i0;
-
- }
-
- free_str_list(sl0);
-}
-
-
-/*
- * Identify hotpluggable devices.
- */
-void assign_bridges(hd_data_t *hd_data)
-{
- hd_t *hd, *hd1, *bridge_hd;
- unsigned p_sock[8], p_socks, u = 0;
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if((bridge_hd = hd_get_device_by_idx(hd_data, hd->attached_to))) {
- if(
- bridge_hd->base_class.id == bc_bridge &&
- bridge_hd->sub_class.id == sc_bridge_cardbus
- ) {
- hd->hotplug = hp_cardbus;
- }
- else if(
- bridge_hd->base_class.id == bc_bridge &&
- bridge_hd->sub_class.id == sc_bridge_pcmcia
- ) {
- hd->hotplug = hp_pcmcia;
- }
- }
- }
-
- for(p_socks = 0, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- u < sizeof p_sock / sizeof *p_sock &&
- is_pcmcia_ctrl(hd_data, hd)
- ) {
- p_sock[p_socks++] = hd->idx;
- }
- }
-
- if(p_socks) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- !hd->tag.remove &&
- hd->bus.id == bus_pcmcia &&
- hd->slot < p_socks &&
- p_sock[hd->slot]
- ) {
- for(u = p_sock[hd->slot], hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->tag.remove) continue;
- if(hd1->status.available == status_no) continue;
- if(hd1->attached_to == u) break;
- }
- if(hd1) {
- hd1->hotplug = hd->hotplug;
- hd1->hotplug_slot = hd->hotplug_slot;
- if(!hd1->extra_info) {
- hd1->extra_info = hd->extra_info;
- hd->extra_info = NULL;
- }
- hd->tag.remove = 1;
- }
- else {
- hd->attached_to = p_sock[hd->slot];
- add_sysfs_stuff(hd_data, hd);
- }
- p_sock[hd->slot] = 0;
- }
- }
-
- remove_tagged_hd_entries(hd_data);
- }
-}
-
-
-void add_sysfs_stuff(hd_data_t *hd_data, hd_t *hd)
-{
- hd_t *hd_par;
- char *s = NULL, *s1;
- struct sysfs_device *sf_dev;
-
- hd_par = hd_get_device_by_idx(hd_data, hd->attached_to);
-
- if(!hd_par || !hd_par->sysfs_id || hd->sysfs_id) return;
-
- str_printf(&s, 0, "/sys%s/%d.0", hd_par->sysfs_id, hd->slot);
-
- sf_dev = sysfs_open_device_path(s);
-
- if(sf_dev) {
- hd->sysfs_id = new_str(hd_sysfs_id(s));
- s1 = hd_sysfs_find_driver(hd_data, hd->sysfs_id, 1);
- if(s1) add_str_list(&hd->drivers, s1);
- }
-
- sysfs_close_device(sf_dev);
-
- s = free_mem(s);
-}
-
+++ /dev/null
-void hd_scan_pcmcia(hd_data_t *hd_data);
+++ /dev/null
-
-/*
- * License: GPL
- *
- * Much inspired by rp-pppoe from Roaring Penguin Software Inc.
- * which itself is inspired by earlier code from Luke Stras.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <linux/if.h>
-#include <net/ethernet.h>
-#include <net/if_arp.h>
-#include <netinet/in.h>
-#include <netpacket/packet.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "pppoe.h"
-
-static hd_data_t *hd_data;
-
-/* Ethernet Frame Types */
-#define ETH_PPPOE_DISCOVERY 0x8863
-#define ETH_PPPOE_SESSION 0x8864
-
-/* PPPoE Codes */
-#define CODE_PADI 0x09
-#define CODE_PADO 0x07
-#define CODE_PADR 0x19
-#define CODE_PADS 0x65
-#define CODE_PADT 0xA7
-
-/* PPPoE Tags */
-#define TAG_END_OF_LIST 0x0000
-#define TAG_SERVICE_NAME 0x0101
-#define TAG_AC_NAME 0x0102
-#define TAG_HOST_UNIQ 0x0103
-#define TAG_AC_COOKIE 0x0104
-#define TAG_VENDOR_SPECIFIC 0x0105
-#define TAG_RELAY_SESSION_ID 0x0110
-#define TAG_SERVICE_NAME_ERROR 0x0201
-#define TAG_AC_SYSTEM_ERROR 0x0202
-#define TAG_GENERIC_ERROR 0x0203
-
-/* Number of Attempts */
-#define MAX_ATTEMPTS 2
-
-/* Timeout for PADO Packets */
-#define PADO_TIMEOUT 3
-
-/* A PPPoE Packet, including Ethernet headers */
-typedef struct PPPoEPacketStruct {
- struct ethhdr ethHdr; /* Ethernet header */
- unsigned int ver:4; /* PPPoE Version (must be 1) */
- unsigned int type:4; /* PPPoE Type (must be 1) */
- unsigned int code:8; /* PPPoE code */
- unsigned int session:16; /* PPPoE session */
- unsigned int length:16; /* Payload length */
- unsigned char payload[ETH_DATA_LEN]; /* A bit of room to spare */
-} PPPoEPacket;
-
-/* Header size of a PPPoE Packet */
-#define PPPOE_OVERHEAD 6 /* type, code, session, length */
-#define HDR_SIZE (sizeof (struct ethhdr) + PPPOE_OVERHEAD)
-#define MAX_PPPOE_PAYLOAD (ETH_DATA_LEN - PPPOE_OVERHEAD)
-
-/* PPPoE Tag */
-typedef struct PPPoETagStruct {
- unsigned int type:16; /* tag type */
- unsigned int length:16; /* Length of payload */
- unsigned char payload[ETH_DATA_LEN]; /* A LOT of room to spare */
-} PPPoETag;
-
-/* Header size of a PPPoE Tag */
-#define TAG_HDR_SIZE 4
-
-/* Function passed to parse_packet */
-typedef void parse_func (uint16_t type, uint16_t len,
- unsigned char* data, void* extra);
-
-/* Keep track of the state of a connection */
-typedef struct PPPoEConnectionStruct {
- char* ifname; /* Interface name */
- int fd; /* Raw socket for discovery frames */
- int received_pado; /* Where we are in discovery */
- unsigned char my_mac[ETH_ALEN]; /* My MAC address */
- unsigned char peer_mac[ETH_ALEN]; /* Peer's MAC address */
- hd_t *hd;
-} PPPoEConnection;
-
-/* Structure used to determine acceptable PADO packet */
-typedef struct PacketCriteriaStruct {
- PPPoEConnection* conn;
- int acname_ok;
- int servicename_ok;
- int error;
-} PacketCriteria;
-
-/* True if Ethernet address is broadcast or multicast */
-#define NOT_UNICAST(e) ((e[0] & 0x01) != 0)
-
-
-static int
-check_room (PPPoEConnection* conn, unsigned char* cursor, unsigned char* start,
- uint16_t len)
-{
- if (cursor - start + len > MAX_PPPOE_PAYLOAD) {
- ADD2LOG ("%s: Would create too-long packet\n", conn->ifname);
- return 0;
- }
- return 1;
-}
-
-
-static int
-parse_packet (PPPoEConnection* conn, PPPoEPacket* packet, parse_func* func,
- void* extra)
-{
- uint16_t len = ntohs (packet->length);
- unsigned char* curTag;
- uint16_t tagType, tagLen;
-
- if (packet->ver != 1) {
- ADD2LOG ("%s: Invalid PPPoE version (%d)\n", conn->ifname,
- (int) packet->ver);
- return 0;
- }
-
- if (packet->type != 1) {
- ADD2LOG ("%s: Invalid PPPoE type (%d)\n", conn->ifname,
- (int) packet->type);
- return 0;
- }
-
- /* Do some sanity checks on packet. */
- if (len > ETH_DATA_LEN - 6) { /* 6-byte overhead for PPPoE header */
- ADD2LOG ("%s: Invalid PPPoE packet length (%u)\n", conn->ifname, len);
- return 0;
- }
-
- /* Step through the tags. */
- curTag = packet->payload;
- while (curTag - packet->payload < len) {
- /* Alignment is not guaranteed, so do this by hand. */
- tagType = (((uint16_t) curTag[0]) << 8) + (uint16_t) curTag[1];
- tagLen = (((uint16_t) curTag[2]) << 8) + (uint16_t) curTag[3];
- if (tagType == TAG_END_OF_LIST)
- break;
- if ((curTag - packet->payload) + tagLen + TAG_HDR_SIZE > len) {
- ADD2LOG ("%s: Invalid PPPoE tag length (%u)\n", conn->ifname,
- tagLen);
- return 0;
- }
- func (tagType, tagLen, curTag + TAG_HDR_SIZE, extra);
- curTag = curTag + TAG_HDR_SIZE + tagLen;
- }
-
- return 1;
-}
-
-
-static int
-open_interfaces (int n, PPPoEConnection* conns)
-{
- int ret = 0, i;
-
- for (i = 0; i < n; i++)
- {
- PPPoEConnection* conn = &conns[i];
-
- conn->fd = socket (PF_PACKET, SOCK_RAW, htons (ETH_PPPOE_DISCOVERY));
- if (conn->fd < 0) {
- ADD2LOG ("%s: socket failed: %m\n", conn->ifname);
- continue;
- }
-
- int one = 1;
- if (setsockopt (conn->fd, SOL_SOCKET, SO_BROADCAST, &one,
- sizeof (one)) < 0) {
- ADD2LOG ("%s: setsockopt failed: %m\n", conn->ifname);
- goto error;
- }
-
- /* Fill in hardware address */
- struct ifreq ifr;
- struct sockaddr_ll sa;
- memset (&sa, 0, sizeof (sa));
- strncpy (ifr.ifr_name, conn->ifname, sizeof (ifr.ifr_name));
- if (ioctl (conn->fd, SIOCGIFHWADDR, &ifr) < 0) {
- ADD2LOG ("%s: ioctl (SIOCGIFHWADDR) failed: %m\n", conn->ifname);
- goto error;
- }
-
- memcpy (conn->my_mac, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
- if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
- ADD2LOG ("%s: Interface is not ethernet\n", conn->ifname);
- goto error;
- }
-
- if (NOT_UNICAST (conn->my_mac)) {
- ADD2LOG ("%s: Interface has broadcast/multicast MAC address?\n",
- conn->ifname);
- goto error;
- }
-
- /* Sanity check on MTU */
- strncpy (ifr.ifr_name, conn->ifname, sizeof (ifr.ifr_name));
- if (ioctl (conn->fd, SIOCGIFMTU, &ifr) < 0) {
- ADD2LOG ("%s: ioctl (SIOCGIFMTU) failed: %m\n", conn->ifname);
- goto error;
- }
- if (ifr.ifr_mtu < ETH_DATA_LEN) {
- ADD2LOG ("%s: Interface has to low MTU\n", conn->ifname);
- goto error;
- }
-
- /* Get interface index */
- sa.sll_family = AF_PACKET;
- sa.sll_protocol = htons (ETH_PPPOE_DISCOVERY);
- strncpy (ifr.ifr_name, conn->ifname, sizeof (ifr.ifr_name));
- if (ioctl (conn->fd, SIOCGIFINDEX, &ifr) < 0) {
- ADD2LOG ("%s: ioctl (SIOCFIGINDEX) failed: Could not get interface "
- "index\n", conn->ifname);
- goto error;
- }
- sa.sll_ifindex = ifr.ifr_ifindex;
-
- /* We're only interested in packets on specified interface */
- if (bind (conn->fd, (struct sockaddr*) &sa, sizeof (sa)) < 0) {
- ADD2LOG ("%s: bind failed: %m\n", conn->ifname);
- goto error;
- }
-
- ret = 1;
- continue;
-
-error:
-
- close (conn->fd);
- conn->fd = -1;
-
- }
-
- return ret;
-}
-
-
-static void
-close_intefaces (int n, PPPoEConnection* conns)
-{
- int i;
-
- for (i = 0; i < n; i++)
- {
- PPPoEConnection* conn = &conns[i];
-
- if (conn->fd != -1) {
- close (conn->fd);
- conn->fd = -1;
- }
- }
-}
-
-
-static int
-send_packet (int fd, PPPoEPacket* pkt, size_t size)
-{
- if (send (fd, pkt, size, 0) < 0) {
- ADD2LOG ("send failed: %m\n");
- return 0;
- }
-
- return 1;
-}
-
-
-static int
-receive_packet (int fd, PPPoEPacket* pkt, size_t* size)
-{
- int r = recv (fd, pkt, sizeof (PPPoEPacket), 0);
- if (r < 0) {
- ADD2LOG ("recv failed: %m\n");
- return 0;
- }
-
- *size = r;
- return 1;
-}
-
-
-static void
-parse_hostuniq (uint16_t type, uint16_t len, unsigned char* data, void* extra)
-{
- if (type == TAG_HOST_UNIQ && len == sizeof (pid_t)) {
- pid_t tmp;
- memcpy (&tmp, data, len);
- if (tmp == getpid ()) {
- int* val = (int*) extra;
- *val = 1;
- }
- }
-}
-
-
-static int
-packet_for_me (PPPoEConnection* conn, PPPoEPacket* packet)
-{
- /* If packet is not directed to our MAC address, forget it. */
- if (memcmp (packet->ethHdr.h_dest, conn->my_mac, ETH_ALEN))
- return 0;
-
- /* Check for HostUniq tag. */
- int for_me = 0;
- parse_packet (conn, packet, parse_hostuniq, &for_me);
- return for_me;
-}
-
-
-static void
-parse_pado_tags (uint16_t type, uint16_t len, unsigned char* data, void* extra)
-{
- PacketCriteria* pc = (PacketCriteria*) extra;
- PPPoEConnection *conn = pc->conn;
-
- switch (type) {
- case TAG_AC_NAME:
- pc->acname_ok = 1;
- ADD2LOG ("%s: Service-Name is: %.*s\n", conn->ifname, (int) len,
- data);
- break;
- case TAG_SERVICE_NAME:
- pc->servicename_ok = len == 0;
- break;
- case TAG_SERVICE_NAME_ERROR:
- ADD2LOG ("%s: Service-Name-Error: %.*s\n", conn->ifname, (int) len,
- data);
- pc->error = 1;
- break;
- case TAG_AC_SYSTEM_ERROR:
- ADD2LOG ("%s: System-Error: %.*s\n", conn->ifname, (int) len, data);
- pc->error = 1;
- break;
- case TAG_GENERIC_ERROR:
- ADD2LOG ("%s: Generic-Error: %.*s\n", conn->ifname, (int) len, data);
- pc->error = 1;
- break;
- }
-}
-
-
-static int
-send_padi (int n, PPPoEConnection* conns)
-{
- int ret = 0, i;
-
- for (i = 0; i < n; i++)
- {
- PPPoEConnection* conn = &conns[i];
-
- if (conn->fd == -1 || conn->received_pado)
- continue;
-
- PPPoEPacket packet;
- unsigned char* cursor = packet.payload;
- PPPoETag* svc = (PPPoETag*) (&packet.payload);
- uint16_t namelen = 0;
- uint16_t plen;
-
- namelen = 0;
- plen = TAG_HDR_SIZE + namelen;
- if (!check_room (conn, cursor, packet.payload, TAG_HDR_SIZE))
- continue;
-
- /* Set destination to Ethernet broadcast address */
- memset (packet.ethHdr.h_dest, 0xFF, ETH_ALEN);
- memcpy (packet.ethHdr.h_source, conn->my_mac, ETH_ALEN);
-
- packet.ethHdr.h_proto = htons (ETH_PPPOE_DISCOVERY);
- packet.ver = 1;
- packet.type = 1;
- packet.code = CODE_PADI;
- packet.session = 0;
-
- svc->type = TAG_SERVICE_NAME;
- svc->length = htons (0);
- if (!check_room (conn, cursor, packet.payload, namelen + TAG_HDR_SIZE))
- continue;
-
- cursor += namelen + TAG_HDR_SIZE;
-
- PPPoETag hostUniq;
- pid_t pid = getpid ();
- hostUniq.type = htons (TAG_HOST_UNIQ);
- hostUniq.length = htons (sizeof (pid));
- memcpy (hostUniq.payload, &pid, sizeof (pid));
- if (!check_room (conn, cursor, packet.payload, sizeof (pid) + TAG_HDR_SIZE))
- continue;
- memcpy (cursor, &hostUniq, sizeof (pid) + TAG_HDR_SIZE);
- cursor += sizeof (pid) + TAG_HDR_SIZE;
- plen += sizeof (pid) + TAG_HDR_SIZE;
-
- packet.length = htons (plen);
-
- ADD2LOG ("%s: Sending PADI packet\n", conn->ifname);
-
- if (send_packet (conn->fd, &packet, (int) (plen + HDR_SIZE)))
- ret = 1;
- }
-
- return ret;
-}
-
-
-static int
-wait_for_pado (int n, PPPoEConnection* conns)
-{
- int r, i, all;
- size_t len;
- fd_set readable;
- PPPoEPacket packet;
- PacketCriteria pc;
-
- struct timeval tv;
- tv.tv_sec = PADO_TIMEOUT;
- tv.tv_usec = 0;
-
- while (1)
- {
- FD_ZERO (&readable);
- for (i = 0; i < n; i++)
- if (conns[i].fd != -1)
- FD_SET (conns[i].fd, &readable);
-
- do {
- r = select (FD_SETSIZE, &readable, NULL, NULL, &tv);
- } while (r == -1 && errno == EINTR);
-
- if (r < 0) {
- ADD2LOG ("select: %m\n");
- return 0;
- }
-
- if (r == 0) {
- ADD2LOG ("Timeout waiting for PADO packets\n");
- return 0;
- }
-
- for (i = 0; i < n; i++)
- {
- PPPoEConnection* conn = &conns[i];
-
- if (conn->fd == -1 || !FD_ISSET (conn->fd, &readable))
- continue;
-
- pc.conn = conn;
- pc.acname_ok = 0;
- pc.servicename_ok = 0;
- pc.error = 0;
-
- /* Get the packet */
- if (!receive_packet (conn->fd, &packet, &len))
- continue;
-
- /* Check length */
- if (ntohs (packet.length) + HDR_SIZE > len) {
- ADD2LOG ("%s: Bogus PPPoE length field (%u)\n", conn->ifname,
- (unsigned int) ntohs (packet.length));
- continue;
- }
-
- /* If it's not for us, loop again */
- if (!packet_for_me (conn, &packet))
- continue;
-
- if (packet.code != CODE_PADO)
- continue;
-
- if (NOT_UNICAST (packet.ethHdr.h_source)) {
- ADD2LOG ("%s: Ignoring PADO packet from non-unicast MAC "
- "address\n", conn->ifname);
- continue;
- }
-
- parse_packet (conn, &packet, parse_pado_tags, &pc);
-
- if (!pc.acname_ok) {
- ADD2LOG ("%s: Wrong or missing AC-Name tag\n", conn->ifname);
- continue;
- }
-
- if (!pc.servicename_ok) {
- ADD2LOG ("%s: Wrong or missing Service-Name tag\n",
- conn->ifname);
- continue;
- }
-
- if (pc.error) {
- ADD2LOG ("%s: Ignoring PADO packet with some Error tag\n",
- conn->ifname);
- continue;
- }
-
- memcpy (conn->peer_mac, packet.ethHdr.h_source, ETH_ALEN);
- ADD2LOG ("%s: Received correct PADO packet\n", conn->ifname);
- conn->received_pado = 1;
- }
-
- all = 1;
- for (i = 0; i < n; i++)
- if (conns[i].fd != -1 && !conns[i].received_pado)
- all = 0;
- if (all)
- return 1;
- }
-}
-
-
-static void
-discovery (int n, PPPoEConnection* conns)
-{
- int a;
-
- if (open_interfaces (n, conns))
- {
- for (a = 0; a < MAX_ATTEMPTS; a++)
- {
- ADD2LOG ("Attempt number %d\n", a + 1);
-
- if (!send_padi (n, conns))
- break;
-
- if (wait_for_pado (n, conns))
- break;
- }
- }
-
- close_intefaces (n, conns);
-}
-
-
-void hd_scan_pppoe(hd_data_t *hd_data2)
-{
- hd_t *hd;
- int cnt, interfaces;
- PPPoEConnection *conn;
-
- hd_data = hd_data2;
-
- if(!hd_probe_feature(hd_data, pr_pppoe)) return;
-
- hd_data->module = mod_pppoe;
-
- PROGRESS(1, 0, "looking for pppoe");
-
- for(interfaces = 0, hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_network_interface &&
- hd->sub_class.id == sc_nif_ethernet &&
- hd->unix_dev_name
- ) {
- interfaces++;
- }
- }
-
- if(!interfaces) return;
-
- conn = new_mem(interfaces * sizeof *conn);
-
- for(cnt = 0, hd = hd_data->hd; hd && cnt < interfaces; hd = hd->next) {
- if(
- hd->base_class.id == bc_network_interface &&
- hd->sub_class.id == sc_nif_ethernet &&
- hd->unix_dev_name
- ) {
- conn[cnt].hd = hd;
- conn[cnt].fd = -1;
- conn[cnt].ifname = hd->unix_dev_name;
- cnt++;
- }
- }
-
- PROGRESS(2, 0, "discovery");
-
- discovery(interfaces, conn);
-
- for(cnt = 0; cnt < interfaces; cnt++) {
- conn[cnt].hd->is.pppoe = 0;
-
- if(conn[cnt].received_pado) {
- conn[cnt].hd->is.pppoe = 1;
- ADD2LOG(
- "pppoe %s: my mac %02x:%02x:%02x:%02x:%02x:%02x, "
- "peer mac %02x:%02x:%02x:%02x:%02x:%02x\n",
- conn[cnt].ifname,
- conn[cnt].my_mac[0], conn[cnt].my_mac[1], conn[cnt].my_mac[2],
- conn[cnt].my_mac[3], conn[cnt].my_mac[4], conn[cnt].my_mac[5],
- conn[cnt].peer_mac[0], conn[cnt].peer_mac[1], conn[cnt].peer_mac[2],
- conn[cnt].peer_mac[3], conn[cnt].peer_mac[4], conn[cnt].peer_mac[5]
- );
- }
- }
-}
+++ /dev/null
-void hd_scan_pppoe(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <sys/stat.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "prom.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * prom info
- *
- * Note: make sure that hd_scan_sysfs_pci() has been run!
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if defined(__PPC__)
-
-static devtree_t *add_devtree_entry(devtree_t **devtree, devtree_t *new);
-static devtree_t *new_devtree_entry(devtree_t *parent);
-static void read_str(char *path, char *name, char **str);
-static void read_mem(char *path, char *name, unsigned char **mem, unsigned len);
-static void read_int(char *path, char *name, int *val);
-static void read_devtree(hd_data_t *hd_data);
-static void add_pci_prom_devices(hd_data_t *hd_data, hd_t *hd_parent, devtree_t *parent);
-static void add_legacy_prom_devices(hd_data_t *hd_data, devtree_t *dt);
-static int add_prom_display(hd_data_t *hd_data, devtree_t *dt);
-static int add_prom_vscsi(hd_data_t *hd_data, devtree_t *dt);
-static int add_prom_veth(hd_data_t *hd_data, devtree_t *dt);
-static void add_devices(hd_data_t *hd_data);
-static void dump_devtree_data(hd_data_t *hd_data);
-
-static unsigned veth_cnt, vscsi_cnt;
-
-int detect_smp_prom(hd_data_t *hd_data)
-{
- unsigned cpus;
- devtree_t *devtree;
-
- if(!(devtree = hd_data->devtree)) return -1; /* hd_scan_prom() not called */
-
- for(cpus = 0; devtree; devtree = devtree->next) {
- if(devtree->device_type && !strcmp(devtree->device_type, "cpu")) cpus++;
- }
-
- return cpus > 1 ? cpus : 0;
-}
-
-void hd_scan_prom(hd_data_t *hd_data)
-{
- hd_t *hd;
- unsigned char buf[16];
- FILE *f;
- prom_info_t *pt;
-
- if(!hd_probe_feature(hd_data, pr_prom)) return;
-
- hd_data->module = mod_prom;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->devtree = free_devtree(hd_data);
-
- veth_cnt = vscsi_cnt = 0;
-
- PROGRESS(1, 0, "devtree");
-
- read_devtree(hd_data);
- if(hd_data->debug) dump_devtree_data(hd_data);
- add_devices(hd_data);
-
- PROGRESS(2, 0, "color");
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_prom;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_prom;
- hd->detail->prom.data = pt = new_mem(sizeof *pt);
-
- if((f = fopen(PROC_PROM "/color-code", "r"))) {
- if(fread(buf, 1, 2, f) == 2) {
- pt->has_color = 1;
- pt->color = buf[1];
- hd_data->color_code = pt->color | 0x10000;
- ADD2LOG("color-code: 0x%04x\n", (buf[0] << 8) + buf[1]);
- }
-
- fclose(f);
- }
-
-}
-
-/* store a device tree entry */
-devtree_t *add_devtree_entry(devtree_t **devtree, devtree_t *new)
-{
- while(*devtree) devtree = &(*devtree)->next;
- return *devtree = new;
-}
-
-/* create a new device tree entry */
-devtree_t *new_devtree_entry(devtree_t *parent)
-{
- static unsigned idx = 0;
- devtree_t *devtree = new_mem(sizeof *devtree);
-
- if(!parent) idx = 0;
- devtree->idx = ++idx;
- devtree->parent = parent;
-
- devtree->interrupt = devtree->class_code =
- devtree->device_id = devtree->vendor_id =
- devtree->subdevice_id = devtree->subvendor_id =
- devtree->revision_id = -1;
-
- return devtree;
-}
-
-void read_str(char *path, char *name, char **str)
-{
- char *s = NULL;
- str_list_t *sl;
-
- str_printf(&s, 0, "%s/%s", path, name);
- if((sl = read_file(s, 0, 1))) {
- *str = sl->str;
- sl->str = NULL;
- sl = free_str_list(sl);
- }
- free_mem(s);
-}
-
-void read_mem(char *path, char *name, unsigned char **mem, unsigned len)
-{
- FILE *f;
- char *s = NULL;
- unsigned char *m = new_mem(len);
-
- str_printf(&s, 0, "%s/%s", path, name);
- if((f = fopen(s, "r"))) {
- if(fread(m, len, 1, f) == 1) {
- *mem = m;
- m = NULL;
- }
- fclose(f);
- }
- free_mem(s);
- free_mem(m);
-}
-
-void read_int(char *path, char *name, int *val)
-{
- unsigned char *p = NULL;
-
- read_mem(path, name, &p, sizeof (int));
- if(p) memcpy(val, p, sizeof (int));
- free_mem(p);
-}
-
-void read_devtree_entry(hd_data_t *hd_data, devtree_t *parent, char *dirname)
-{
- DIR *dir;
- struct dirent *de;
- struct stat sbuf;
- char *path, *s;
- devtree_t *devtree, *dt2;
-
- devtree = add_devtree_entry(&hd_data->devtree, new_devtree_entry(parent));
-
- devtree->filename = new_str(dirname);
-
- str_printf(&devtree->path, 0, "%s%s%s",
- parent ? parent->path : "", parent && *parent->path ? "/" : "", dirname
- );
-
- path = 0;
- str_printf(&path, 0, PROC_PROM "/%s", devtree->path);
-
- if((dir = opendir(path))) {
- while((de = readdir(dir))) {
- if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
- s = NULL;
- str_printf(&s, 0, "%s/%s", path, de->d_name);
- if(!lstat(s, &sbuf)) {
- if(S_ISDIR(sbuf.st_mode)) {
- /* prom entries don't always have unique names, unfortunately... */
- for(dt2 = hd_data->devtree; dt2; dt2 = dt2->next) {
- if(
- dt2->parent == devtree &&
- !strcmp(dt2->filename, de->d_name)
- ) break;
- }
- if(!dt2) read_devtree_entry(hd_data, devtree, de->d_name);
- }
- }
- s = free_mem(s);
- }
- closedir(dir);
- }
-
- read_str(path, "name", &devtree->name);
- read_str(path, "model", &devtree->model);
- read_str(path, "device_type", &devtree->device_type);
- read_str(path, "compatible", &devtree->compatible);
-
- read_int(path, "interrupts", &devtree->interrupt);
- read_int(path, "AAPL,interrupts", &devtree->interrupt);
- read_int(path, "class-code", &devtree->class_code);
- read_int(path, "vendor-id", &devtree->vendor_id);
- read_int(path, "device-id", &devtree->device_id);
- read_int(path, "subsystem-vendor-id", &devtree->subvendor_id);
- read_int(path, "subsystem-id", &devtree->subdevice_id);
- read_int(path, "revision-id", &devtree->revision_id);
-
- read_mem(path, "EDID", &devtree->edid, 0x80);
- if(!devtree->edid) read_mem(path, "DFP,EDID", &devtree->edid, 0x80);
-
- if(
- devtree->class_code != -1 && devtree->vendor_id != -1 &&
- devtree->device_id != -1
- ) {
- devtree->pci = 1;
- }
-
- path = free_mem(path);
-}
-
-void read_devtree(hd_data_t *hd_data)
-{
- read_devtree_entry(hd_data, NULL, "");
-
-}
-
-void add_pci_prom_devices(hd_data_t *hd_data, hd_t *hd_parent, devtree_t *parent)
-{
- hd_t *hd;
- hd_res_t *res;
- devtree_t *dt, *dt2;
- int irq, floppy_ctrl_idx;
- unsigned sound_ok = 0, net_ok = 0, scsi_ok = 0;
- unsigned id;
- char *s;
-
- for(dt = hd_data->devtree; dt; dt = dt->next) {
- if(
- dt->parent == parent ||
- (
- /* special magic to reach some sound chips */
- dt->parent &&
- dt->parent->parent == parent &&
- !dt->parent->pci
- )
- ) {
-
- if(
- dt->device_type &&
- (!strcmp(dt->device_type, "block") || !strcmp(dt->device_type, "swim3"))
- ) {
- /* block devices */
-
- s = dt->compatible ? dt->compatible : dt->name;
- id = 0;
-
- if(s) {
- if(strstr(s, "swim3")) {
- id = MAKE_ID(TAG_SPECIAL, 0x0040);
- }
- }
-
- if(id) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_floppy;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0401);
- hd->device.id = id;
- hd->attached_to = hd_parent->idx;
- hd->rom_id = new_str(dt->path);
- if(dt->interrupt) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = dt->interrupt;
- }
- floppy_ctrl_idx = hd->idx;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage_device;
- hd->sub_class.id = sc_sdev_floppy;
- hd->bus.id = bus_floppy;
- hd->unix_dev_name = new_str("/dev/fd0");
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.val1 = str2float("3.5", 2);
- res->size.unit = size_unit_cinch;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->size.type = res_size;
- res->size.val1 = 2880;
- res->size.val2 = 0x200;
- res->size.unit = size_unit_sectors;
-
- hd->attached_to = floppy_ctrl_idx;
- }
- }
-
- if(
- !scsi_ok &&
- dt->device_type &&
- !strcmp(dt->device_type, "scsi")
- ) {
- /* scsi */
- scsi_ok = 1; /* max. 1 controller */
-
- s = dt->compatible ? dt->compatible : dt->name;
- id = 0;
-
- if(s) {
- if(strstr(s, "mesh")) { /* mesh || chrp,mesh0 */
- id = MAKE_ID(TAG_SPECIAL, 0x0030);
- }
- else if(!strcmp(s, "53c94")) {
- id = MAKE_ID(TAG_SPECIAL, 0x0031);
- }
- }
-
- if(id) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0401);
- hd->device.id = id;
- hd->attached_to = hd_parent->idx;
- hd->rom_id = new_str(dt->path);
- if(dt->interrupt) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = dt->interrupt;
- }
- }
- }
-
- if(
- !net_ok &&
- dt->device_type &&
- !strcmp(dt->device_type, "network")
- ) {
- /* network */
- net_ok = 1; /* max. 1 controller */
-
- s = dt->compatible ? dt->compatible : dt->name;
- id = 0;
-
- if(s) {
- if(!strcmp(s, "mace")) {
- id = MAKE_ID(TAG_SPECIAL, 0x0020);
- }
- else if(!strcmp(s, "bmac")) {
- id = MAKE_ID(TAG_SPECIAL, 0x0021);
- }
- else if(!strcmp(s, "bmac+")) {
- id = MAKE_ID(TAG_SPECIAL, 0x0022);
- }
- }
-
- if(id) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0; /* ethernet */
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0401);
- hd->device.id = id;
- hd->attached_to = hd_parent->idx;
- hd->rom_id = new_str(dt->path);
- if(dt->interrupt) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = dt->interrupt;
- }
- }
- }
-
- if(
- !sound_ok &&
- dt->device_type &&
- strstr(dt->device_type, "sound") == dt->device_type
- ) {
- /* sound */
- sound_ok = 1; /* max 1 controller */
-
- for(dt2 = dt; dt2; dt2 = dt2->next) {
- if(
- (
- dt2 == dt ||
- (dt2->parent && dt2->parent == dt)
- ) &&
- (
- !strcmp(dt2->device_type, "sound") ||
- !strcmp(dt2->device_type, "soundchip")
- )
- ) break;
- }
- if(!dt2) dt2 = dt;
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_multimedia;
- hd->sub_class.id = sc_multi_audio;
- hd->attached_to = hd_parent->idx;
- hd->rom_id = new_str(dt2->path);
- irq = dt2->interrupt;
- if(irq <= 1 && dt2->parent && !dt2->parent->pci) {
- irq = dt2->parent->interrupt;
- }
- if(irq > 1) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = irq;
- }
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x401); /* Apple */
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0010);
-
- if(dt2->compatible) {
- if(!strcmp(dt2->compatible, "screamer")) {
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0011);
- }
- else if(!strcmp(dt2->compatible, "burgundy")) {
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0012);
- }
- else if(!strcmp(dt2->compatible, "daca")) {
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0013);
- }
- else if(!strcmp(dt2->compatible, "CRUS,CS4236B")) {
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x402); /* IBM */
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0014);
- }
- }
- }
- }
- }
-}
-
-
-void add_legacy_prom_devices(hd_data_t *hd_data, devtree_t *dt)
-{
- if(dt->pci) return;
-
- if(add_prom_display(hd_data, dt)) return;
- if(add_prom_vscsi(hd_data, dt)) return;
- if(add_prom_veth(hd_data, dt)) return;
-}
-
-int add_prom_display(hd_data_t *hd_data, devtree_t *dt)
-{
- hd_t *hd;
- hd_res_t *res;
- unsigned id;
-
- if(
- dt->device_type &&
- !strcmp(dt->device_type, "display")
- ) {
- /* display devices */
-
- id = 0;
-
- if(dt->name) {
- if(!strcmp(dt->name, "valkyrie")) {
- id = MAKE_ID(TAG_SPECIAL, 0x3000);
- }
- else if(!strcmp(dt->name, "platinum")) {
- id = MAKE_ID(TAG_SPECIAL, 0x3001);
- }
- }
-
- if(id) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_other;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x0401);
- hd->device.id = id;
- hd->rom_id = new_str(dt->path);
- if(dt->interrupt) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = dt->interrupt;
- }
-
- return 1;
- }
- }
-
- return 0;
-}
-
-int add_prom_vscsi(hd_data_t *hd_data, devtree_t *dt)
-{
- hd_t *hd;
- char *s, *id;
-
- if(
- dt->path &&
- dt->device_type &&
- !strcmp(dt->device_type, "vscsi")
- ) {
- /* vscsi storage */
-
- if(
- (s = strstr(dt->path, "v-scsi@")) &&
- *(id = s + sizeof "v-scsi@" - 1)
- ) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->slot = veth_cnt++;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1001);
- str_printf(&hd->device.name, 0, "Virtual SCSI %d", hd->slot);
- hd->rom_id = new_str(dt->path);
-
- str_printf(&hd->sysfs_id, 0, "/devices/vio/%s", id);
-
- return 1;
- }
- }
-
- return 0;
-}
-
-int add_prom_veth(hd_data_t *hd_data, devtree_t *dt)
-{
- hd_t *hd;
- char *s, *id;
-
- if(
- dt->path &&
- dt->device_type &&
- dt->compatible &&
- !strcmp(dt->device_type, "network") &&
- !strcmp(dt->compatible, "IBM,l-lan")
- ) {
- /* veth network */
-
- if(
- (s = strstr(dt->path, "l-lan@")) &&
- *(id = s + sizeof "l-lan@" - 1)
- ) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->bus.id = bus_none;
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x00;
- hd->slot = veth_cnt++;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1002);
- str_printf(&hd->device.name, 0, "Virtual Ethernet card %d", hd->slot);
- hd->rom_id = new_str(dt->path);
-
- str_printf(&hd->sysfs_id, 0, "/devices/vio/%s", id);
-
- return 1;
- }
- }
-
- return 0;
-}
-
-void add_devices(hd_data_t *hd_data)
-{
- hd_t *hd;
- devtree_t *dt;
-#if 0
- hd_res_t *res;
- unsigned pci_slot = 0, u;
-#endif
-
- /* remove old assignments */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(ID_TAG(hd->device.id) == TAG_PCI && ID_TAG(hd->vendor.id) == TAG_PCI) {
- hd->rom_id = free_mem(hd->rom_id);
- hd->detail = free_hd_detail(hd->detail);
- }
- }
-
- for(dt = hd_data->devtree; dt; dt = dt->next) {
- if(dt->pci) {
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- /* do *not* compare class ids */
- /* It would be better to check the slot numbers instead but
- * as they are not stored within /proc/device-tree in a consistent
- * way, we can't do that.
- */
- !hd->rom_id &&
- ID_TAG(hd->device.id) == TAG_PCI &&
- ID_TAG(hd->vendor.id) == TAG_PCI &&
- ID_VALUE(hd->device.id) == dt->device_id &&
- ID_VALUE(hd->vendor.id) == dt->vendor_id &&
- (dt->subvendor_id == -1 || ID_VALUE(hd->sub_vendor.id) == dt->subvendor_id) &&
- (dt->subdevice_id == -1 || ID_VALUE(hd->sub_device.id) == dt->subdevice_id) &&
- hd->revision.id == dt->revision_id
- ) break;
- }
-
- if(hd) {
- hd->rom_id = new_str(dt->path);
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_devtree;
- hd->detail->devtree.data = dt;
- add_pci_prom_devices(hd_data, hd, dt);
- }
- }
- else {
- add_legacy_prom_devices(hd_data, dt);
- }
- }
-}
-
-void dump_devtree_data(hd_data_t *hd_data)
-{
- unsigned u;
- devtree_t *devtree;
-
- devtree = hd_data->devtree;
- if(!devtree) return;
-
- ADD2LOG("----- /proc device tree -----\n");
-
- for(; devtree; devtree = devtree->next) {
- u = devtree->parent ? devtree->parent->idx : 0;
- ADD2LOG(" %02u @%02u %s", devtree->idx, u, devtree->path);
- if(devtree->pci) ADD2LOG(" [pci]");
- ADD2LOG("\n");
-
- ADD2LOG(
- " name \"%s\", model \"%s\", dtype \"%s\", compat \"%s\"\n",
- devtree->name ? devtree->name : "",
- devtree->model ? devtree->model : "",
- devtree->device_type ? devtree->device_type : "",
- devtree->compatible ? devtree->compatible : ""
- );
-
- if(
- devtree->class_code != -1 || devtree->vendor_id != -1 ||
- devtree->device_id != -1 || devtree->revision_id != -1 ||
- devtree->subdevice_id != -1 || devtree->subvendor_id != -1 ||
- devtree->interrupt != -1
- ) {
- ADD2LOG(" ");
- if(devtree->class_code != -1) ADD2LOG(" class 0x%06x", devtree->class_code);
- if(devtree->vendor_id != -1) ADD2LOG(" vend 0x%04x", devtree->vendor_id);
- if(devtree->device_id != -1) ADD2LOG(" dev 0x%04x", devtree->device_id);
- if(devtree->subvendor_id != -1) ADD2LOG(" svend 0x%04x", devtree->subvendor_id);
- if(devtree->subdevice_id != -1) ADD2LOG(" sdev 0x%04x", devtree->subdevice_id);
- if(devtree->revision_id != -1) ADD2LOG(" rev 0x%02x", devtree->revision_id);
- if(devtree->interrupt != -1) ADD2LOG(" irq %d", devtree->interrupt);
- ADD2LOG("\n");
- }
-
- if(devtree->edid) {
- ADD2LOG(" EDID record:\n");
- for(u = 0; u < 0x80; u += 0x10) {
- ADD2LOG(" %02x ", u);
- hexdump(&hd_data->log, 1, 0x10, devtree->edid + u);
- ADD2LOG("\n");
- }
- }
-
- if(devtree->next) ADD2LOG("\n");
- }
-
- ADD2LOG("----- /proc device tree end -----\n");
-}
-
-
-#endif /* defined(__PPC__) */
-
+++ /dev/null
-void hd_scan_prom(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "s390.h"
-
-#if defined(__s390__) || defined(__s390x__)
-
-#include <sysfs/libsysfs.h>
-#include <sysfs/dlist.h>
-
-#define BUSNAME "ccw"
-#define BUSNAME_GROUP "ccwgroup"
-#define BUSNAME_IUCV "iucv"
-
-static void hd_scan_s390_ex(hd_data_t *hd_data, int disks_only)
-{
- hd_t* hd;
- hd_res_t* res;
- struct sysfs_bus *bus;
- struct sysfs_bus *bus_group;
- struct sysfs_device *curdev = NULL;
- struct dlist *attributes = NULL;
- struct sysfs_attribute *curattr = NULL;
- struct dlist *devlist = NULL;
- struct dlist *devlist_group = NULL;
- int virtual_machine=0;
-
- unsigned int devtype=0,devmod=0,cutype=0,cumod=0;
-
- /* list of each channel's cutype, used for finding multichannel devices */
- int cutypes[1<<16]={0};
- int i;
-
- hd_data->module=mod_s390;
-
- remove_hd_entries(hd_data);
-
- bus=sysfs_open_bus(BUSNAME);
- bus_group=sysfs_open_bus(BUSNAME_GROUP);
-
- if (!bus)
- {
- ADD2LOG("unable to open" BUSNAME "bus");
- return;
- }
-
- devlist=sysfs_get_bus_devices(bus);
- if(bus_group) devlist_group=sysfs_get_bus_devices(bus_group);
-
- if(!devlist)
- {
- ADD2LOG("unable to get devices on bus " BUSNAME);
- return;
- }
-
- /* build cutypes list */
- dlist_for_each_data(devlist, curdev, struct sysfs_device)
- {
- int channel=strtol(rindex(curdev->bus_id,'.')+1,NULL,16);
- attributes = sysfs_get_device_attributes(curdev);
- dlist_for_each_data(attributes,curattr,struct sysfs_attribute)
- {
- if(strcmp("cutype",curattr->name)==0)
- cutype=strtol(curattr->value,NULL,16);
- }
- cutypes[channel]=cutype;
- }
- /* check for each channel if it must be skipped and identify virtual reader/punch */
- for(i=0;i<(1<<16);i++)
- {
- if(cutypes[i]==0x3088) /* It seems that QDIO devices only appear once */
- cutypes[i+1]*=-1; /* negative cutype -> skip */
-
- if(cutypes[i]==0x2540)
- {
- virtual_machine=1; /* we are running in VM */
- cutypes[i]=-2; /* reader */
- cutypes[i+1]=-3; /* punch */
- }
- }
-
- /* identify grouped channels */
- if(devlist_group) dlist_for_each_data(devlist_group, curdev, struct sysfs_device)
- {
- struct sysfs_directory* d;
- struct dlist* dl;
- struct sysfs_link* cl;
- //printf("ccwg %s\n",curdev->path);
- d=sysfs_open_directory(curdev->path);
- dl=sysfs_get_dir_links(d);
- dlist_for_each_data(dl,cl,struct sysfs_link) /* iterate over this channel group */
- {
- if(!rindex(cl->target,'.')) continue;
- int channel=strtol(rindex(cl->target,'.')+1,NULL,16);
- //printf("channel %x name %s target %s\n",channel,cl->name,cl->target);
- if(strncmp("cdev",cl->name,4)==0)
- {
- if(cl->name[4]=='0') /* first channel in group gets an entry */
- {
- if(cutypes[channel]<0) cutypes[channel]*=-1; /* make sure its positive */
- }
- else /* other channels in group are skipped */
- if(cutypes[channel]>0) cutypes[channel]*=-1; /* make sure its negative */
- }
-
- }
- }
-
- dlist_for_each_data(devlist, curdev, struct sysfs_device)
- {
- int readonly=0;
- res=new_mem(sizeof *res);
-
- attributes = sysfs_get_device_attributes(curdev);
- dlist_for_each_data(attributes,curattr, struct sysfs_attribute)
- {
- if (strcmp("online",curattr->name)==0)
- res->io.enabled=atoi(curattr->value);
- else if (strcmp("cutype",curattr->name)==0)
- {
- cutype=strtol(curattr->value,NULL,16);
- cumod=strtol(index(curattr->value,'/')+1,NULL,16);
- } else if (strcmp("devtype",curattr->name)==0)
- {
- devtype=strtol(curattr->value,NULL,16);
- devmod=strtol(index(curattr->value,'/')+1,NULL,16);
- } else if (strcmp("readonly",curattr->name)==0)
- {
- readonly=atoi(curattr->value);
- }
- }
-
- res->io.type=res_io;
- res->io.access=readonly?acc_ro:acc_rw;
- res->io.base=strtol(rindex(curdev->bus_id,'.')+1,NULL,16);
-
- /* Skip additional channels for multi-channel devices */
- if(cutypes[res->io.base] < -3)
- continue;
-
- if(disks_only && cutype!=0x3990 && cutype!=0x2105 && cutype!=0x3880 && cutype!=0x9343 && cutype!=0x6310 &&
- (cutype != 0x1731 || devtype != 0x1732 || cumod != 3))
- continue;
-
- res->io.range=1;
- switch (cutype)
- {
- /* three channels */
- case 0x1731: /* QDIO (QETH, HSI, zFCP) */
- res->io.range++;
- /* two channels */
- case 0x3088: /* CU3088 (CTC, LCS) */
- res->io.range++;
- }
-
- hd=add_hd_entry(hd_data,__LINE__,0);
- add_res_entry(&hd->res,res);
- hd->vendor.id=MAKE_ID(TAG_SPECIAL,0x6001); /* IBM */
- hd->device.id=MAKE_ID(TAG_SPECIAL,cutype);
- hd->sub_device.id=MAKE_ID(TAG_SPECIAL,devtype);
- hd->bus.id=bus_ccw;
- hd->sysfs_device_link = new_str(hd_sysfs_id(curdev->path));
- hd->sysfs_bus_id = new_str(strrchr(curdev->path,'/')+1);
-
- if(cutypes[res->io.base]==-2) /* virtual reader */
- {
- hd->base_class.id=bc_scanner;
- }
- if(cutypes[res->io.base]==-3) /* virtual punch */
- {
- hd->base_class.id=bc_printer;
- }
- /* all other device data (names, classes etc.) comes from the s390 ID file */
-
- hd->detail=free_hd_detail(hd->detail);
- hd->detail=new_mem(sizeof *hd->detail);
- hd->detail->ccw.type=hd_detail_ccw;
- hd->detail->ccw.data=new_mem(sizeof(ccw_t));
- hd->detail->ccw.data->cu_model=cumod;
- hd->detail->ccw.data->dev_model=devmod;
- hd->detail->ccw.data->lcss=(strtol(curdev->bus_id,0,16) << 8) + strtol(curdev->bus_id+2,0,16);
- hddb_add_info(hd_data,hd);
- }
-
- if(virtual_machine)
- {
- /* add an unactivated IUCV device */
- hd=add_hd_entry(hd_data,__LINE__,0);
- hd->vendor.id=MAKE_ID(TAG_SPECIAL,0x6001); /* IBM */
- hd->device.id=MAKE_ID(TAG_SPECIAL,0x0005); /* IUCV */
- hd->bus.id=bus_iucv;
- hd->base_class.id=bc_network;
- hd->status.active=status_no;
- hd->status.available=status_yes;
- hddb_add_info(hd_data,hd);
-
- /* add activated IUCV devices */
- bus=sysfs_open_bus(BUSNAME_IUCV);
- if(bus)
- {
- devlist=sysfs_get_bus_devices(bus);
- if(devlist)
- {
- dlist_for_each_data(devlist, curdev, struct sysfs_device)
- {
- hd=add_hd_entry(hd_data,__LINE__,0);
- hd->vendor.id=MAKE_ID(TAG_SPECIAL,0x6001); /* IBM */
- hd->device.id=MAKE_ID(TAG_SPECIAL,0x0005); /* IUCV */
- hd->bus.id=bus_iucv;
- hd->base_class.id=bc_network;
- hd->status.active=status_yes;
- hd->status.available=status_yes;
- attributes = sysfs_get_device_attributes(curdev);
- dlist_for_each_data(attributes,curattr,struct sysfs_attribute)
- {
- if(strcmp("user",curattr->name)==0)
- hd->rom_id=new_str(curattr->value);
- }
- hd->sysfs_device_link = new_str(hd_sysfs_id(curdev->path));
- hd->sysfs_bus_id = new_str(strrchr(curdev->path,'/')+1);
- hddb_add_info(hd_data,hd);
- }
- }
- }
-
- }
-}
-
-void hd_scan_s390(hd_data_t *hd_data)
-{
- if (!hd_probe_feature(hd_data, pr_s390)) return;
- hd_scan_s390_ex(hd_data, 0);
-}
-
-void hd_scan_s390disks(hd_data_t *hd_data)
-{
- if (!hd_probe_feature(hd_data, pr_s390disks)) return;
- hd_scan_s390_ex(hd_data, 1);
-}
-
-#endif
-
+++ /dev/null
-/** register all S/390 devices */
-void hd_scan_s390(hd_data_t *hd_data);
-/** register only S/390 disks */
-void hd_scan_s390disks(hd_data_t *hd_data);
-
+++ /dev/null
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "sbus.h"
-
-#ifdef __sparc__
-
-#ifdef DIET
-typedef unsigned int u_int;
-#endif
-
-#include <asm/openpromio.h>
-
-#define MAX_VAL (4096-128-4)
-
-static int prom_fd;
-
-static int
-prom_nextnode (int node)
-{
- char buf[OPROMMAXPARAM];
- struct openpromio *op = (struct openpromio *)buf;
-
- op->oprom_size = sizeof (int);
- if (node == -1)
- return 0;
-
- *(int *)op->oprom_array = node;
- if (ioctl (prom_fd, OPROMNEXT, op) < 0)
- return 0;
-
- return *(int *)op->oprom_array;
-}
-
-static int
-prom_getchild (int node)
-{
- char buf[OPROMMAXPARAM];
- struct openpromio *op = (struct openpromio *)buf;
-
- op->oprom_size = sizeof (int);
-
- if (!node || node == -1)
- return 0;
-
- *(int *)op->oprom_array = node;
- if (ioctl (prom_fd, OPROMCHILD, op) < 0)
- return 0;
-
- return *(int *)op->oprom_array;
-}
-
-static char
-*prom_getproperty (char *prop, int *lenp, char *buf)
-{
- struct openpromio *op = (struct openpromio *)buf;
-
- op->oprom_size = MAX_VAL;
-
- strcpy (op->oprom_array, prop);
-
- if (ioctl (prom_fd, OPROMGETPROP, op) < 0)
- return 0;
-
- if (lenp)
- *lenp = op->oprom_size;
-
- if (strncmp ("SUNW,", op->oprom_array, 5) == 0)
- return op->oprom_array + 5;
- else
- return op->oprom_array;
-}
-
-static int
-prom_getbool (char *prop)
-{
- char buf[OPROMMAXPARAM];
- struct openpromio *op = (struct openpromio *)buf;
-
- op->oprom_size = 0;
-
- *(int *)op->oprom_array = 0;
- for (;;) {
- op->oprom_size = 128; /* MAX_PROP */
- if (ioctl (prom_fd, OPROMNXTPROP, op) < 0)
- return 0;
- if (!op->oprom_size)
- return 0;
- if (!strcmp (op->oprom_array, prop))
- return 1;
- }
-}
-
-static void
-prom_parse (int node, int sbus, int ebus, hd_data_t *hd_data)
-{
- hd_t *hd;
- char buf1[OPROMMAXPARAM], buf2[OPROMMAXPARAM];
- int nextnode;
- int len, nsbus = sbus, nebus = ebus;
- char *prop1 = prom_getproperty ("device_type", &len, buf1);
-
- if (strcmp (prop1, "network") == 0)
- {
- char *prop2 = prom_getproperty ("name", &len, buf2);
- if (prop2 && len >= 0)
- {
- if (strcmp (prop2, "hme") == 0)
- {
- ADD2LOG ("NETWORK: type=Sun Happy Meal Ethernet, module=sunhme\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x00;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x3001);
- }
- else if (strcmp (prop2, "le") == 0)
- {
- ADD2LOG ("NETWORK: type=Sun Lance Ethernet, module=ignore\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x00;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x3002);
- }
- else if (strcmp (prop2, "qe") == 0)
- {
- prop2 = prom_getproperty("channel#", &len, buf2);
- if (prop2 && len == 4 && *(int *)prop2 == 0)
- {
- ADD2LOG ("NETWORK: type=Sun Quad Ethernet, module=sunqe\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x00;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x3003);
- }
- }
- else if (strcmp (prop2, "qfe") == 0)
- {
- ADD2LOG ("NETWORK: type=Sun Quad Ethernet (qfe), module=sunhme\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x00;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x3001);
- }
- else if (strcmp (prop2, "mlanai") == 0 || strcmp (prop2, "myri") == 0)
- {
- ADD2LOG ("NETWORK: type=MyriCOM MyriNET Gigabit Ethernet, module=myri_sbus\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x00;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x3004);
- }
- else
- ADD2LOG ("NETWORK: Unknown device \"%s\"\n", prop2);
- }
- }
- else if (strcmp (prop1, "scsi") == 0)
- {
- char *prop2 = prom_getproperty ("name", &len, buf2);
- if (prop2 && len >= 0)
- {
- if (sbus)
- {
- if (strcmp (prop2, "esp") == 0)
- {
- ADD2LOG ("SCSI: type=Sun Enhanced SCSI Processor (ESP), module=ignore\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1001);
- }
- else if (strcmp (prop2, "soc") == 0)
- {
- ADD2LOG ("SCSI: type=Sun SPARCStorage Array, module=fc4:soc:pluto\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1101);
- }
- else if (strcmp (prop2, "socal") == 0)
- {
- ADD2LOG ("SCSI: type=Sun Enterprise Network Array, module=fc4:socal:fcal\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1102);
- }
- else if (strcmp (prop2, "fas") == 0)
- {
- ADD2LOG ("SCSI: type=Sun Swift (ESP), module=ignore\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1002);
- }
- else if (strcmp (prop2, "ptisp") == 0)
- {
- ADD2LOG ("SCSI: type=Performance Technologies ISP, module=qlogicpti\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1003);
- }
- else if (strcmp (prop2, "isp") == 0)
- {
- ADD2LOG ("SCSI: type=QLogic ISP, module=qlogicpti\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1004);
- }
- else
- ADD2LOG ("SCSI: Unknown SBUS device \"%s\"\n", prop2);
- }
- else
- ADD2LOG ("SCSI: Unknown device \"%s\"\n", prop2);
- }
- }
- else if (strcmp (prop1, "display") == 0)
- {
- char *prop2 = prom_getproperty ("name", &len, buf2);
- if (prop2 && len >= 0)
- if (sbus || strcmp (prop2, "ffb") == 0 ||
- strcmp (prop2, "afb") == 0 || strcmp (prop2, "cgfourteen") == 0)
- {
- if (strcmp (prop2, "bwtwo") == 0)
- {
- ADD2LOG ("DISPLAY: Sun|Monochrome (bwtwo), depth=1\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0001);
- }
- else if (strcmp (prop2, "cgthree") == 0)
- {
- ADD2LOG ("DISPLAY: Sun|Color3 (cgthree), depth=8\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0002);
- }
- else if (strcmp (prop2, "cgeight") == 0)
- {
- ADD2LOG ("DISPLAY: Sun|CG8/RasterOps, depth=8\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0003);
- }
- else if (strcmp (prop2, "cgtwelve") == 0)
- {
- ADD2LOG ("DISPLAY: Sun|GS (cgtwelve), depth=24\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0004);
- }
- else if (strcmp (prop2, "gt") == 0)
- {
- ADD2LOG ("DISPLAY: Sun|Graphics Tower (gt), depth=24\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0005);
- }
- else if (strcmp (prop2, "mgx") == 0)
- {
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- prop2 = prom_getproperty ("fb_size", &len, buf2);
- if (prop2 && len == 4 && *(int *)prop2 == 0x400000)
- {
- ADD2LOG ("DISPLAY: Quantum 3D MGXplus with 4M VRAM (mgx), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0006);
- }
- else
- {
- ADD2LOG ("DISPLAY: Quantum 3D MGXplus (mgx), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0007);
- }
- }
- else if (strcmp (prop2, "cgsix") == 0)
- {
- int chiprev = 0;
- int vmsize = 0;
-
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
-
- prop2 = prom_getproperty("chiprev", &len, buf2);
- if (prop2 && len == 4)
- chiprev = *(int *)prop2;
- prop2 = prom_getproperty("vmsize", &len, buf2);
- if (prop2 && len == 4)
- vmsize = *(int *)prop2;
- switch (chiprev)
- {
- case 1 ... 4:
- ADD2LOG ("DISPLAY: Sun|Double width GX (cgsix), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0008);
- break;
- case 5 ... 9:
- ADD2LOG ("DISPLAY: Sun|Single width GX (cgsix), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0009);
- break;
- case 11:
- switch (vmsize)
- {
- case 2:
- ADD2LOG ("DISPLAY: Sun|Turbo GX with 1M VSIMM (cgsix), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x000a);
- break;
- case 4:
- ADD2LOG ("DISPLAY: Sun|Turbo GX Plus (cgsix), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x000b);
- break;
- default:
- ADD2LOG ("DISPLAY: Sun|Turbo GX (cgsix), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x000c);
- break;
- }
- break;
- default:
- ADD2LOG ("DISPLAY: Sun|Unknown GX (cgsix), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x000d);
- break;
- }
- }
- else if (strcmp (prop2, "cgfourteen") == 0)
- {
- int size = 0;
-
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
-
- prop2 = prom_getproperty ("reg", &len, buf2);
- if (prop2 && !(len % 12) && len > 0)
- size = *(int *)(prop2 + len - 4);
- switch (size)
- {
- case 0x400000:
- ADD2LOG ("DISPLAY: Sun|SX with 4M VSIMM (cgfourteen), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x000e);
- break;
- case 0x800000:
- ADD2LOG ("DISPLAY: Sun|SX with 8M VSIMM (cgfourteen), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x000f);
- break;
- default:
- ADD2LOG ("DISPLAY: Sun|SX (cgfourteen), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0010);
- break;
- }
- }
- else if (strcmp (prop2, "leo") == 0)
- {
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
-
- prop2 = prom_getproperty("model", &len, buf2);
- if (prop2 && len > 0 && !strstr(prop2, "501-2503"))
- {
- ADD2LOG ("DISPLAY: Sun|Turbo ZX (leo), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0012);
- }
- else
- {
- ADD2LOG ("DISPLAY: Sun|ZX or Turbo ZX (leo), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0011);
- }
- }
- else if (strcmp (prop2, "tcx") == 0)
- {
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
-
- if (prom_getbool ("tcx-8-bit"))
- {
- ADD2LOG ("DISPLAY: Sun|TCX (8bit), depth=8\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0013);
- }
- else
- {
- ADD2LOG ("DISPLAY: Sun|TCX (S24), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0014);
- }
- }
- else if (strcmp (prop2, "afb") == 0)
- {
- int btype = 0;
-
- prop2 = prom_getproperty("board_type", &len, buf2);
- if (prop2 && len == 4)
- btype = *(int *)prop2;
-
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
-
- if (btype == 3)
- {
- ADD2LOG ("DISPLAY: Sun|Elite3D-M6 Horizontal (afb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0015);
- }
- else
- {
- ADD2LOG ("DISPLAY: Sun|Elite3D (afb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0016);
- }
- }
- else if (strcmp (prop2, "ffb") == 0)
- {
- int btype = 0;
-
- prop2 = prom_getproperty("board_type", &len, buf2);
- if (prop2 && len == 4)
- btype = *(int *)prop2;
-
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_display;
- hd->sub_class.id = sc_dis_vga;
- hd->bus.id = bus_sbus;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
-
- switch (btype)
- {
- case 0x08:
- ADD2LOG ("DISPLAY: Sun|FFB 67MHz Creator (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0017);
- break;
- case 0x0b:
- ADD2LOG ("DISPLAY: Sun|FFB 67MHz Creator 3D (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0018);
- break;
- case 0x1b:
- ADD2LOG ("DISPLAY: Sun|FFB 75MHz Creator 3D (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0019);
- break;
- case 0x20:
- case 0x28:
- ADD2LOG ("DISPLAY: Sun|FFB2 Vertical Creator (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x001a);
- break;
- case 0x23:
- case 0x2b:
- ADD2LOG ("DISPLAY: Sun|FFB2 Vertical Creator 3D (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x001b);
- break;
- case 0x30:
- ADD2LOG ("DISPLAY: Sun|FFB2+ Vertical Creator (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x001c);
- break;
- case 0x33:
- ADD2LOG ("DISPLAY: Sun|FFB2+ Vertical Creator 3D (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x001d);
- break;
- case 0x40:
- case 0x48:
- ADD2LOG ("DISPLAY: Sun|FFB2 Horizontal Creator (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x001e);
- break;
- case 0x43:
- case 0x4b:
- ADD2LOG ("DISPLAY: Sun|FFB2 Horizontal Creator 3D (ffb), depth=24\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x001f);
- break;
- default:
- ADD2LOG ("DISPLAY: Sun|FFB (ffb), type=%xi, depth=24\n",
- btype);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0020);
- break;
- }
- }
- else
- ADD2LOG ("DISPLAY: Unknown SBUS device \"%s\"\n", prop2);
- }
- else
- ADD2LOG ("DISPLAY: Unknown device \"%s\"\n", prop2);
- }
- else if (strcmp (prop1, "cpu") == 0)
- {
- char *prop2 = prom_getproperty ("name", &len, buf2);
-
- if (prop2 && len >= 0)
- ADD2LOG ("CPU: %s\n", prop2);
- }
- else
- {
- char *prop2 = prom_getproperty ("name", &len, buf2);
-
- if (prop2 && len >= 0)
- {
- if (strcmp (prop2, "audio") == 0)
- {
- ADD2LOG ("AUDIO: type=AMD7930, module=amd7930\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_multimedia;
- hd->sub_class.id = sc_multi_audio;
- hd->bus.id = bus_sbus;
- hd->unix_dev_name = new_str ("/dev/audio");
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x2001);
- }
- else if (strcmp (prop2, "CS4231") == 0)
- {
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_multimedia;
- hd->sub_class.id = sc_multi_audio;
- hd->bus.id = bus_sbus;
- hd->unix_dev_name = new_str ("/dev/audio");
-
- if (ebus)
- {
- ADD2LOG ("AUDIO: type=CS4231 EB2 DMA (PCI), module=cs4231\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x2002);
- }
- else
- {
- ADD2LOG ("AUDIO: type=CS4231 APC DMA (SBUS), module=cs4231\n");
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x2003);
- }
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- }
- else if (strcmp (prop2, "DBRIe") == 0)
- {
- ADD2LOG ("AUDIO: type=SS10/SS20 DBRI, module=dbri\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_multimedia;
- hd->sub_class.id = sc_multi_audio;
- hd->bus.id = bus_sbus;
- hd->unix_dev_name = new_str ("/dev/audio");
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x2004);
- }
- else if (strcmp (prop2, "bpp") == 0)
- {
- ADD2LOG ("PARPORT: type=bpp, module=unknown\n");
- }
- else if (strcmp (prop2, "soc") == 0)
- {
- ADD2LOG ("SCSI: type=Sun SPARCStorage Array, module=fc4:soc:pluto\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1101);
- }
- else if (strcmp (prop2, "socal") == 0)
- {
- ADD2LOG ("SCSI: type=Sun Enterprise Network Array, module=fc4:socal:fcal\n");
- hd = add_hd_entry (hd_data, __LINE__, 0);
- hd->base_class.id = bc_storage;
- hd->sub_class.id = sc_sto_scsi;
- hd->bus.id = bus_sbus;
-
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x4001);
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1102);
- }
- else if (strcmp(prop2, "sbus") == 0 || strcmp(prop2, "sbi") == 0)
- nsbus = 1;
- else if (!strcmp(prop2, "ebus"))
- nebus = 1;
- else
- ADD2LOG ("%s: unknown device \"%s\"\n", prop1, prop2);
- }
- }
-
-
- nextnode = prom_getchild (node);
- if (nextnode)
- prom_parse (nextnode, nsbus, nebus, hd_data);
- nextnode = prom_nextnode (node);
- if (nextnode)
- prom_parse (nextnode, sbus, ebus, hd_data);
-
- return;
-}
-
-void
-hd_scan_sbus (hd_data_t *hd_data)
-{
- int prom_root_node;
-
- if(!hd_probe_feature(hd_data, pr_sbus))
- return;
-
- hd_data->module = mod_sbus;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "sun sbus");
-
- if((prom_fd = open(DEV_OPENPROM, O_RDWR | O_NONBLOCK | O_NOCTTY)) < 0)
- return;
-
- prom_root_node = prom_nextnode(0);
- if (!prom_root_node)
- goto failed;
-
- prom_parse (prom_root_node, 0, 0, hd_data);
-
- failed:
- close (prom_fd);
-
- return;
-}
-
-#else
-
-void
-hd_scan_sbus (hd_data_t *hd_data)
-{
- return;
-}
-
-#endif
+++ /dev/null
-void hd_scan_sbus (hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "serial.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * serial interface
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-
-static char *ser_names[] = {
- "8250", "16450", "16550", "16650", "16750", "16850", "16950"
-};
-
-static void get_serial_info(hd_data_t *hd_data);
-static serial_t *add_serial_entry(serial_t **ser, serial_t *new_ser);
-static void dump_serial_data(hd_data_t *hd_data);
-
-void hd_scan_serial(hd_data_t *hd_data)
-{
- hd_t *hd;
- serial_t *ser, *next;
- hd_res_t *res;
- int i;
- char buf[4], *skip_dev[16];
- str_list_t *sl, *cmd;
- unsigned skip_devs = 0;
-
- if(!hd_probe_feature(hd_data, pr_serial)) return;
-
- hd_data->module = mod_serial;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->serial = NULL;
-
- PROGRESS(1, 0, "read info");
-
- get_serial_info(hd_data);
- if((hd_data->debug & HD_DEB_SERIAL)) dump_serial_data(hd_data);
-
- for(i = 0; i < 2; i++) {
- cmd = get_cmdline(hd_data, i == 0 ? "yast2ser" : "console");
- for(sl = cmd; sl; sl = sl->next) {
- if(sscanf(sl->str, "tty%3[^,]", buf) == 1) {
- if(buf[1] == 0) {
- switch(*buf) {
- case 'a': strcpy(buf, "S0"); break;
- case 'b': strcpy(buf, "S1"); break;
- }
- }
- if(skip_devs < sizeof skip_dev / sizeof *skip_dev) {
- skip_dev[skip_devs] = NULL;
- str_printf(&skip_dev[skip_devs++], 0, "/dev/tty%s", buf);
- }
- }
- }
- free_str_list(cmd);
- }
-
- PROGRESS(2, 0, "build list");
-
- for(ser = hd_data->serial; ser; ser = ser->next) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_ser;
- hd->prog_if.id = 0x80;
- for(i = 0; (unsigned) i < sizeof ser_names / sizeof *ser_names; i++) {
- if(strstr(ser->name, ser_names[i])) hd->prog_if.id = i;
- }
- hd->device.name = new_str(ser->name);
- hd->func = ser->line;
- str_printf(&hd->unix_dev_name, 0, "/dev/ttyS%u", ser->line);
- for(i = 0; i < (int) skip_devs; i++) {
- if(!strcmp(skip_dev[i], hd->unix_dev_name)) {
- hd->tag.ser_skip = 1;
- break;
- }
- }
- if(ser->device) {
- if(strstr(ser->device, "modem-printer")) {
- hd->tag.ser_device = 1;
- }
- else if(strstr(ser->device, "infrared")) {
- hd->tag.ser_device = 2;
- }
- else if(strstr(ser->device, "modem")) {
- hd->tag.ser_device = 3;
- }
- }
- if(ser->baud) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->baud.type = res_baud;
- res->baud.speed = ser->baud;
- }
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->io.type = res_io;
- res->io.enabled = 1;
- res->io.base = ser->port;
- res->io.access = acc_rw;
-
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->irq.type = res_irq;
- res->irq.enabled = 1;
- res->irq.base = ser->irq;
- }
-
- for(ser = hd_data->serial; ser; ser = next) {
- next = ser->next;
-
- free_mem(ser->name);
- free_mem(ser->device);
- free_mem(ser);
- }
- hd_data->serial = NULL;
-
-#if 0
- if(hd_module_is_active(hd_data, "irda")) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_ser;
- hd->prog_if.id = 0x80;
- hd->device.name = new_str("IrDA Serial");
- hd->unix_dev_name = new_str("/dev/ircomm0");
- }
-#endif
-}
-
-void get_serial_info(hd_data_t *hd_data)
-{
- char buf[64];
- unsigned u0, u1, u2;
-#if !defined(__PPC__)
- unsigned u3;
-#endif
- int i;
- str_list_t *sl, *sl0;
- serial_t *ser;
-
-#if !defined(__PPC__)
- /*
- * Max. 44 serial lines at the moment; the serial proc interface is
- * somewhat buggy at the moment (2.2.13), hence the explicit 44 lines
- * limit. That may be dropped later.
- */
- sl0 = read_file(PROC_DRIVER_SERIAL, 1, 44);
-
- // ########## FIX !!!!!!!! ########
- if(sl0) {
- for(sl = sl0; sl; sl = sl->next) {
- i = 0;
- if(
- sscanf(sl->str, "%u: uart:%31s port:%x irq:%u baud:%u", &u0, buf, &u1, &u2, &u3) == 5 ||
- (i = 1, sscanf(sl->str, "%u: uart:%31s port:%x irq:%u tx:%u", &u0, buf, &u1, &u2, &u3) == 5)
- ) {
- /*
- * The 'baud' or 'tx' entries are only present for real interfaces.
- */
- ser = add_serial_entry(&hd_data->serial, new_mem(sizeof *ser));
- ser->line = u0;
- ser->port = u1;
- ser->irq = u2;
- if(!i) ser->baud = u3;
- ser->name = new_str(buf);
- }
- }
-
- if((hd_data->debug & HD_DEB_SERIAL)) {
- /* log just the first 16 entries */
- ADD2LOG("----- "PROC_DRIVER_SERIAL" -----\n");
- for(sl = sl0, i = 16; sl && i--; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- "PROC_DRIVER_SERIAL" end -----\n");
- }
- }
-#endif /* !defined(__PPC__) */
-
-#if defined(__PPC__)
- sl0 = read_file(PROC_DRIVER_MACSERIAL, 1, 0);
-
- if(sl0) {
- for(sl = sl0; sl; sl = sl->next) {
- if(
- (i = sscanf(sl->str, "%u: port:%x irq:%u con:%63[^\n]", &u0, &u1, &u2, buf)) >= 3
- ) {
- ser = add_serial_entry(&hd_data->serial, new_mem(sizeof *ser));
- ser->line = u0;
- ser->port = u1;
- ser->irq = u2;
- ser->name = new_str("SCC");
- if(i == 4) ser->device = new_str(buf);
- }
- }
-
- if((hd_data->debug & HD_DEB_SERIAL)) {
- /* log just the first 16 entries */
- ADD2LOG("----- "PROC_DRIVER_MACSERIAL" -----\n");
- for(sl = sl0, i = 16; sl && i--; sl = sl->next) {
- ADD2LOG(" %s", sl->str);
- }
- ADD2LOG("----- "PROC_DRIVER_MACSERIAL" end -----\n");
- }
- }
-#endif /* defined(__PPC__) */
-
-
- free_str_list(sl0);
-}
-
-serial_t *add_serial_entry(serial_t **ser, serial_t *new_ser)
-{
- while(*ser) ser = &(*ser)->next;
- return *ser = new_ser;
-}
-
-void dump_serial_data(hd_data_t *hd_data)
-{
- serial_t *ser;
-
- ADD2LOG("----- serial info -----\n");
- for(ser = hd_data->serial; ser; ser = ser->next) {
- ADD2LOG(
- " uart %s, line %d, port 0x%03x, irq %d, baud %d\n",
- ser->name, ser->line, ser->port, ser->irq, ser->baud
- );
- }
- ADD2LOG("----- serial info end -----\n");
-}
-
+++ /dev/null
-void hd_scan_serial(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "smbios.h"
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-enum sm_map_type { sm_map_str, sm_map_num2str };
-
-typedef struct { unsigned num; char *str; } sm_num2str_t;
-
-typedef struct {
- enum sm_map_type type;
- unsigned len;
- union {
- char **str;
- sm_num2str_t *num2str;
- } list;
-} sm_str_map_t;
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-static char *get_string(str_list_t *sl, int index);
-static void smbios_bitmap_print(FILE *f, hd_bitmap_t *hbm, char *label, int style);
-static void smbios_id_print(FILE *f, hd_id_t *hid, char *label);
-static void smbios_str_print(FILE *f, char *str, char *label);
-static void smbios_id2str(hd_id_t *hid, sm_str_map_t *map, unsigned def);
-static void smbios_bitmap2str(hd_bitmap_t *hbm, sm_str_map_t *map);
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-#define SMBIOS_PRINT_ID(a, b) smbios_id_print(f, &sm->a, b)
-#define SMBIOS_PRINT_STR(a, b) smbios_str_print(f, sm->a, b)
-#define SMBIOS_PRINT_BITMAP_SHORT(a, b) smbios_bitmap_print(f, &sm->a, b, 0)
-#define SMBIOS_PRINT_BITMAP_LONG(a, b) smbios_bitmap_print(f, &sm->a, b, 1)
-
-#define SMBIOS_DEF_MAP(a) \
- static sm_str_map_t a = { \
- sizeof *a ## _ == sizeof (sm_num2str_t) ? sm_map_num2str : sm_map_str, \
- sizeof a ## _ / sizeof *a ## _, \
- { (void *) a ## _ } \
- };
-
-/* ptr is (unsigned char *) */
-#define READ_MEM16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
-#define READ_MEM32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
-#define READ_MEM64(ptr) (READ_MEM32(ptr) + ((uint64_t) READ_MEM32(ptr + 4) << 32))
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-static sm_num2str_t smbios_bios_feature_[] = {
- { 4, "ISA supported" },
- { 5, "MCA supported" },
- { 6, "EISA supported" },
- { 7, "PCI supported" },
- { 8, "PCMCIA supported" },
- { 9, "PnP supported" },
- { 10, "APM supported" },
- { 11, "BIOS flashable" },
- { 12, "BIOS shadowing allowed" },
- { 13, "VL-VESA supported" },
- { 14, "ESCD supported" },
- { 15, "CD boot supported" },
- { 16, "Selectable boot supported" },
- { 17, "BIOS ROM socketed" },
- { 18, "PCMCIA boot supported" },
- { 19, "EDD spec supported" },
- { 20, "1.2MB NEC 9800 Japanese Floppy supported" },
- { 21, "1.2MB Toshiba Japanese Floppy supported" },
- { 22, "360kB Floppy supported" },
- { 23, "1.2MB Floppy supported" },
- { 24, "720kB Floppy supported" },
- { 25, "2.88MB Floppy supported" },
- { 26, "Print Screen supported" },
- { 27, "8042 Keyboard Services supported" },
- { 28, "Serial Services supported" },
- { 29, "Printer Services supported" },
- { 30, "CGA/Mono Video supported" },
- { 31, "NEC PC-98" },
- { 64 + 0, "ACPI supported" },
- { 64 + 1, "USB Legacy supported" },
- { 64 + 2, "AGP supported" },
- { 64 + 3, "I2O boot supported" },
- { 64 + 4, "LS-120 boot supported" },
- { 64 + 5, "ATAPI ZIP boot supported" },
- { 64 + 6, "IEEE1394 boot supported" },
- { 64 + 7, "Smart Battery supported" },
- { 64 + 8, "BIOS Boot Spec supported" },
- { 64 + 9, "F12 Network boot supported" }
-};
-SMBIOS_DEF_MAP(smbios_bios_feature);
-
-
-static char *smbios_system_wakeups_[] = {
- "Reserved", "Other", "Unknown", "APM Timer",
- "Modem Ring", "LAN Remote", "Power Switch", "PCI PME#",
- "AC Power Restored"
-};
-SMBIOS_DEF_MAP(smbios_system_wakeups);
-
-
-static char *smbios_board_feature_[] = {
- "Hosting Board", "Needs One Daughter Board", "Removable", "Replaceable",
- "Hot Swappable"
-};
-SMBIOS_DEF_MAP(smbios_board_feature);
-
-
-static char *smbios_board_types_[] = {
- NULL, "Other", "Unknown", "Server Blade",
- "Connectivity Switch", "System Management Module", "Processor Module", "I/O Module",
- "Memory Module", "Daughter Board", "Motherboard", "Processor/Memory Module",
- "Processor/IO Module", "Interconnect Board"
-};
-SMBIOS_DEF_MAP(smbios_board_types);
-
-
-static char *smbios_chassis_types_[] = {
- NULL, "Other", "Unknown", "Desktop",
- "Low Profile Desktop", "Pizza Box", "Mini Tower", "Tower",
- "Portable", "LapTop", "Notebook", "Hand Held",
- "Docking Station", "All in One", "Sub Notebook", "Space Saving",
- "Lunch Box", "Main Server Chassis", "Expansion Chassis", "SubChassis",
- "Bus Expansion Chassis", "Peripheral Chassis", "RAID Chassis", "Rack Mount Chassis",
- "Sealed-case PC", "Multi-System Chassis"
-};
-SMBIOS_DEF_MAP(smbios_chassis_types);
-
-
-static char *smbios_chassis_states_[] = {
- NULL, "Other", "Unknown", "Safe",
- "Warning", "Critical", "Non-recoverable"
-};
-SMBIOS_DEF_MAP(smbios_chassis_states);
-
-
-static char *smbios_chassis_sec_states_[] = {
- NULL, "Other", "Unknown", "None",
- "External interface locked out", "External interface enabled"
-};
-SMBIOS_DEF_MAP(smbios_chassis_sec_states);
-
-
-static char *smbios_proc_upgrades_[] = {
- NULL, "Other", "Unknown", "Daughter Board",
- "ZIF Socket", "Replaceable Piggy Back", "None", "LIF Socket",
- "Slot 1", "Slot 2", "370-Pin Socket", "Slot A",
- "Slot M", "Socket 423", "Socket A (Socket 462)", "Socket 478",
- "Socket 754", "Socket 940"
-};
-SMBIOS_DEF_MAP(smbios_proc_upgrades);
-
-
-static char *smbios_proc_cpu_status_[8] = {
- "Unknown", "Enabled", "Disabled by User", "Disabled by BIOS",
- "Idle", "Reserved", "Reserved", "Other"
-};
-SMBIOS_DEF_MAP(smbios_proc_cpu_status);
-
-
-static char *smbios_proc_types_[] = {
- NULL, "Other", "Unknown", "CPU",
- "Math", "DSP", "Video"
-};
-SMBIOS_DEF_MAP(smbios_proc_types);
-
-
-static sm_num2str_t smbios_proc_families_[] = {
- { 0x00, NULL },
- { 0x01, "Other" },
- { 0x02, "Unknown" },
- { 0x03, "8086" },
- { 0x04, "80286" },
- { 0x05, "Intel386" },
- { 0x06, "Intel486" },
- { 0x07, "8087" },
- { 0x08, "80287" },
- { 0x09, "80387" },
- { 0x0a, "80487" },
- { 0x0b, "Pentium" },
- { 0x0c, "Pentium Pro" },
- { 0x0d, "Pentium II" },
- { 0x0e, "Pentium MMX" },
- { 0x0f, "Celeron" },
- { 0x10, "Pentium II Xeon" },
- { 0x11, "Pentium III" },
- { 0x12, "M1" },
- { 0x13, "M2" },
- { 0x18, "Duron" },
- { 0x19, "K5" },
- { 0x1a, "K6" },
- { 0x1b, "K6-2" },
- { 0x1c, "K6-3" },
- { 0x1d, "Athlon" },
- { 0x1e, "AMD2900" },
- { 0x1f, "K6-2+" },
- { 0x78, "Crusoe TM5000" },
- { 0x79, "Crusoe TM3000" },
- { 0x82, "Itanium" },
- { 0x83, "Athlon 64" },
- { 0x84, "Opteron Processor" },
- { 0xb0, "Pentium III Xeon" },
- { 0xb1, "Pentium III with SpeedStep" },
- { 0xb2, "Pentium 4" },
- { 0xb3, "Xeon" },
- { 0xb4, "AS400" },
- { 0xb5, "Xeon MP" },
- { 0xb6, "Athlon XP" },
- { 0xb7, "Athlon MP" },
- { 0xb8, "Itanium 2" }
-};
-SMBIOS_DEF_MAP(smbios_proc_families);
-
-
-static char *smbios_cache_mode_[] = {
- "Write Through", "Write Back", "Varies with Memory Address", "Unknown"
-};
-SMBIOS_DEF_MAP(smbios_cache_mode);
-
-
-static char *smbios_cache_location_[] = {
- "Internal", "External", "Reserved", "Unknown"
-};
-SMBIOS_DEF_MAP(smbios_cache_location);
-
-
-static char *smbios_cache_ecc_[] = {
- NULL, "Other", "Unknown", "None",
- "Parity", "Single-bit", "Multi-bit", "CRC"
-};
-SMBIOS_DEF_MAP(smbios_cache_ecc);
-#define smbios_memarray_ecc smbios_cache_ecc
-
-
-static char *smbios_cache_type_[] = {
- NULL, "Other", "Unknown", "Instruction",
- "Data", "Unified"
-};
-SMBIOS_DEF_MAP(smbios_cache_type);
-
-
-static char *smbios_cache_assoc_[] = {
- NULL, "Other", "Unknown", "Direct Mapped",
- "2-way Set-Associative", "4-way Set-Associative", "Fully Associative", "8-way Set-Associative",
- "16-way Set-Associative"
-};
-SMBIOS_DEF_MAP(smbios_cache_assoc);
-
-
-static char *smbios_cache_sram_[] = {
- "Other", "Unknown", "Non-Burst", "Burst",
- "Pipeline Burst", "Synchronous", "Asynchronous"
-};
-SMBIOS_DEF_MAP(smbios_cache_sram);
-
-
-static sm_num2str_t smbios_connect_conn_type_[] = {
- { 0x00, NULL },
- { 0x01, "Centronics" },
- { 0x02, "Mini Centronics" },
- { 0x03, "Proprietary" },
- { 0x04, "DB-25 pin male" },
- { 0x05, "DB-25 pin female" },
- { 0x06, "DB-15 pin male" },
- { 0x07, "DB-15 pin female" },
- { 0x08, "DB-9 pin male" },
- { 0x09, "DB-9 pin female" },
- { 0x0a, "RJ-11" },
- { 0x0b, "RJ-45" },
- { 0x0c, "50 Pin MiniSCSI" },
- { 0x0d, "Mini-DIN" },
- { 0x0e, "Micro-DIN" },
- { 0x0f, "PS/2" },
- { 0x10, "Infrared" },
- { 0x11, "HP-HIL" },
- { 0x12, "Access Bus [USB]" },
- { 0x13, "SSA SCSI" },
- { 0x14, "Circular DIN-8 male" },
- { 0x15, "Circular DIN-8 female" },
- { 0x16, "On Board IDE" },
- { 0x17, "On Board Floppy" },
- { 0x18, "9 Pin Dual Inline [pin 10 cut]" },
- { 0x19, "25 Pin Dual Inline [pin 26 cut]" },
- { 0x1a, "50 Pin Dual Inline" },
- { 0x1b, "68 Pin Dual Inline" },
- { 0x1c, "On Board Sound Input from CD-ROM" },
- { 0x1d, "Mini-Centronics Type-14" },
- { 0x1e, "Mini-Centronics Type-26" },
- { 0x1f, "Mini-jack [headphones]" },
- { 0x20, "BNC" },
- { 0x21, "1394" },
- { 0xa0, "PC-98" },
- { 0xa1, "PC-98Hireso" },
- { 0xa2, "PC-H98" },
- { 0xa3, "PC-98Note" },
- { 0xa4, "PC-98Full" },
- { 0xff, "Other" }
-};
-SMBIOS_DEF_MAP(smbios_connect_conn_type);
-
-
-static sm_num2str_t smbios_connect_port_type_[] = {
- { 0x00, NULL },
- { 0x01, "Parallel Port XT/AT Compatible" },
- { 0x02, "Parallel Port PS/2" },
- { 0x03, "Parallel Port ECP" },
- { 0x04, "Parallel Port EPP" },
- { 0x05, "Parallel Port ECP/EPP" },
- { 0x06, "Serial Port XT/AT Compatible" },
- { 0x07, "Serial Port 16450 Compatible" },
- { 0x08, "Serial Port 16550 Compatible" },
- { 0x09, "Serial Port 16550A Compatible" },
- { 0x0a, "SCSI Port" },
- { 0x0b, "MIDI Port" },
- { 0x0c, "Joy Stick Port" },
- { 0x0d, "Keyboard Port" },
- { 0x0e, "Mouse Port" },
- { 0x0f, "SSA SCSI" },
- { 0x10, "USB" },
- { 0x11, "FireWire [IEEE P1394]" },
- { 0x12, "PCMCIA Type I" },
- { 0x13, "PCMCIA Type II" },
- { 0x14, "PCMCIA Type III" },
- { 0x15, "Cardbus" },
- { 0x16, "Access Bus Port" },
- { 0x17, "SCSI II" },
- { 0x18, "SCSI Wide" },
- { 0x19, "PC-98" },
- { 0x1a, "PC-98-Hireso" },
- { 0x1b, "PC-H98" },
- { 0x1c, "Video Port" },
- { 0x1d, "Audio Port" },
- { 0x1e, "Modem Port" },
- { 0x1f, "Network Port" },
- { 0xa0, "8251 Compatible" },
- { 0xa1, "8251 FIFO Compatible" },
- { 0xff, "Other" }
-};
-SMBIOS_DEF_MAP(smbios_connect_port_type);
-
-
-static sm_num2str_t smbios_slot_type_[] = {
- { 0x00, NULL },
- { 0x01, "Other" },
- { 0x02, "Unknown" },
- { 0x03, "ISA" },
- { 0x04, "MCA" },
- { 0x05, "EISA" },
- { 0x06, "PCI" },
- { 0x07, "PC Card [PCMCIA]" },
- { 0x08, "VL-VESA" },
- { 0x09, "Proprietary" },
- { 0x0a, "Processor Card" },
- { 0x0b, "Proprietary Memory Card" },
- { 0x0c, "I/O Riser Card" },
- { 0x0d, "NuBus" },
- { 0x0e, "PCI - 66MHz Capable" },
- { 0x0f, "AGP" },
- { 0x10, "AGP 2X" },
- { 0x11, "AGP 4X" },
- { 0x12, "PCI-X" },
- { 0x13, "AGP 8X" },
- { 0xa0, "PC-98/C20" },
- { 0xa1, "PC-98/C24" },
- { 0xa2, "PC-98/E" },
- { 0xa3, "PC-98/Local Bus" },
- { 0xa4, "PC-98/Card" }
-};
-SMBIOS_DEF_MAP(smbios_slot_type);
-
-
-static char *smbios_slot_bus_width_[] = {
- NULL, "Other", "Unknown", "8 bit",
- "16 bit", "32 bit", "64 bit", "128 bit"
-};
-SMBIOS_DEF_MAP(smbios_slot_bus_width);
-
-
-static char *smbios_slot_usage_[] = {
- NULL, "Other", "Unknown", "Available",
- "In Use"
-};
-SMBIOS_DEF_MAP(smbios_slot_usage);
-
-
-static char *smbios_slot_length_[] = {
- NULL, "Other", "Unknown", "Short",
- "Long"
-};
-SMBIOS_DEF_MAP(smbios_slot_length);
-
-
-static char *smbios_slot_feature_[] = {
- "Unknown", "5.0 V", "3.3 V", "Shared",
- "PC Card-16", "CardBus", "Zoom Video", "Modem Ring Resume",
- "PME#", "Hot-Plug"
-};
-SMBIOS_DEF_MAP(smbios_slot_feature);
-
-
-static char *smbios_onboard_type_[] = {
- "Other", "Other", "Unknown", "Video",
- "SCSI Controller", "Ethernet", "Token Ring", "Sound"
-};
-SMBIOS_DEF_MAP(smbios_onboard_type);
-
-
-static sm_num2str_t smbios_memarray_location_[] = {
- { 0x00, NULL },
- { 0x01, "Other" },
- { 0x02, "Unknown" },
- { 0x03, "Motherboard" },
- { 0x04, "ISA add-on card" },
- { 0x05, "EISA add-on card" },
- { 0x06, "PCI add-on card" },
- { 0x07, "MCA add-on card" },
- { 0x08, "PCMCIA add-on card" },
- { 0x09, "Proprietary add-on card" },
- { 0x0a, "NuBus" },
- { 0xa0, "PC-98/C20 add-on card" },
- { 0xa1, "PC-98/C24 add-on card" },
- { 0xa2, "PC-98/E add-on card" },
- { 0xa3, "PC-98/Local bus add-on card" }
-};
-SMBIOS_DEF_MAP(smbios_memarray_location);
-
-
-static char *smbios_memarray_use_[] = {
- NULL, "Other", "Unknown", "System memory",
- "Video memory", "Flash memory", "Non-volatile RAM", "Cache memory"
-};
-SMBIOS_DEF_MAP(smbios_memarray_use);
-
-
-static char *smbios_mouse_type_[] = {
- NULL, "Other", "Unknown", "Mouse",
- "Track Ball", "Track Point", "Glide Point", "Touch Pad",
- "Touch Screen", "Optical Sensor"
-};
-SMBIOS_DEF_MAP(smbios_mouse_type);
-
-
-static sm_num2str_t smbios_mouse_interface_[] = {
- { 0x00, NULL },
- { 0x01, "Other" },
- { 0x02, "Unknown" },
- { 0x03, "Serial" },
- { 0x04, "PS/2" },
- { 0x05, "Infrared" },
- { 0x06, "HP-HIL" },
- { 0x07, "Bus Mouse" },
- { 0x08, "ADB" },
- { 0xa0, "Bus mouse DB-9" },
- { 0xa1, "Bus mouse micro-DIN" },
- { 0xa2, "USB" }
-};
-SMBIOS_DEF_MAP(smbios_mouse_interface);
-
-
-static char *smbios_memdevice_form_[] = {
- NULL, "Other", "Unknown", "SIMM",
- "SIP", "Chip", "DIP", "ZIP",
- "Proprietary Card", "DIMM", "TSOP", "Row of Chips",
- "RIMM", "SODIMM", "SRIMM"
-};
-SMBIOS_DEF_MAP(smbios_memdevice_form);
-
-
-static char *smbios_memdevice_type_[] = {
- NULL, "Other", "Unknown", "DRAM",
- "EDRAM", "VRAM", "SRAM", "RAM",
- "ROM", "FLASH", "EEPROM", "FEPROM",
- "EPROM", "CDRAM", "3DRAM", "SDRAM",
- "SGRAM", "RDRAM", "DDR"
-};
-SMBIOS_DEF_MAP(smbios_memdevice_type);
-
-
-static char *smbios_memdevice_detail_[] = {
- NULL, "Other", "Unknown", "Fast-paged",
- "Static column", "Pseudo-static", "RAMBUS", "Synchronous",
- "CMOS", "EDO", "Window DRAM", "Cache DRAM",
- "Non-volatile"
-};
-SMBIOS_DEF_MAP(smbios_memdevice_detail);
-
-
-static char *smbios_memerror_type_[] = {
- NULL, "Other", "Unknown", "OK",
- "Bad read", "Parity error", "Single-bit error", "Double-bit error",
- "Multi-bit error", "Nibble error", "Checksum error", "CRC error",
- "Corrected single-bit error", "Corrected error", "Uncorrectable error"
-};
-SMBIOS_DEF_MAP(smbios_memerror_type);
-
-
-static char *smbios_memerror_granularity_[] = {
- NULL, "Other", "Unknown", "Device level",
- "Memory partition level"
-};
-SMBIOS_DEF_MAP(smbios_memerror_granularity);
-
-
-static char *smbios_memerror_operation_[] = {
- NULL, "Other", "Unknown", "Read",
- "Write", "Partial write"
-};
-SMBIOS_DEF_MAP(smbios_memerror_operation);
-
-
-static char *smbios_secure_state_[] = {
- "Disabled", "Enabled", "Not Implemented", "Unknown"
-};
-SMBIOS_DEF_MAP(smbios_secure_state);
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-/*
- * return the index'th string from sl
- */
-char *get_string(str_list_t *sl, int index)
-{
- if(!sl || !index) return NULL;
-
- for(; sl; sl = sl->next, index--) {
- if(index == 1) return new_str(sl->str && *sl->str ? sl->str : NULL);
- }
-
- return NULL;
-}
-
-
-/*
- * Print a bitmap.
- * Style: 0: short, 1: long.
- */
-void smbios_bitmap_print(FILE *f, hd_bitmap_t *hbm, char *label, int style)
-{
- unsigned u;
- str_list_t *sl;
-
- if(hbm->not_empty) {
- fprintf(f, " %s: 0x", label);
- for(u = (hbm->bits + 7) >> 3; u; u--) {
- fprintf(f, "%02x", hbm->bitmap[u - 1]);
- }
- fprintf(f, style ? "\n" : " (");
- for(sl = hbm->str; sl; sl = sl->next) {
- if(style) {
- fprintf(f, " %s\n", sl->str);
- }
- else {
- fprintf(f, "%s%s", sl->str, sl->next ? ", " : "");
- }
- }
- if(!style) fprintf(f, ")\n");
- }
-}
-
-
-/*
- * Print id/name pair.
- */
-void smbios_id_print(FILE *f, hd_id_t *hid, char *label)
-{
- if(hid->name) fprintf(f, " %s: 0x%02x (%s)\n", label, hid->id, hid->name);
-}
-
-
-/*
- * Print a string.
- */
-void smbios_str_print(FILE *f, char *str, char *label)
-{
- if(str) fprintf(f, " %s: \"%s\"\n", label, str);
-}
-
-
-/*
- * Look up the name that corresponds to the id (if any).
- */
-void smbios_id2str(hd_id_t *hid, sm_str_map_t *map, unsigned def)
-{
- unsigned u;
- char *str, *def_str;
-
- if(map->type == sm_map_str) {
- str = map->list.str[hid->id < map->len ? hid->id : def];
- if(hid->id && !str) str = map->list.str[def];
- }
- else {
- for(str = def_str = NULL, u = 0; u < map->len; u++) {
- if(map->list.num2str[u].num == hid->id) str = map->list.num2str[u].str;
- if(str) break;
- if(map->list.num2str[u].num == def) def_str = map->list.num2str[u].str;
- }
- if(hid->id && !str) str = def_str;
- }
- hid->name = new_str(str);
-}
-
-
-/*
- * Convert a bitmap into a list of strings. (That is, interpret the
- * bitmap.)
- */
-void smbios_bitmap2str(hd_bitmap_t *hbm, sm_str_map_t *map)
-{
- unsigned u, bit;
- char *str;
-
- for(u = 0; u < (hbm->bits + 7) >> 3; u++) {
- if(hbm->bitmap[u]) {
- hbm->not_empty = 1;
- break;
- }
- }
-
- if(map->type == sm_map_str) {
- for(u = 0; u < map->len; u++) {
- if(u < hbm->bits && hbm->bitmap[u >> 3] & (1 << (u & 7))) {
- str = map->list.str[u];
- if(str) add_str_list(&hbm->str, str);
- }
- }
- }
- else {
- for(u = 0; u < map->len; u++) {
- bit = map->list.num2str[u].num;
- if(bit < hbm->bits && hbm->bitmap[bit >> 3] & (1 << (bit & 7))) {
- str = map->list.num2str[u].str;
- if(str) add_str_list(&hbm->str, str);
- }
- }
- }
-}
-
-
-/*
- * Interpret raw smbios data.
- */
-void smbios_parse(hd_data_t *hd_data)
-{
- hd_smbios_t *sm;
- str_list_t *sl_any, *sl;
- int cnt, data_len;
- unsigned char *sm_data;
- unsigned u, v;
-
- if(!hd_data->smbios) return;
-
- for(cnt = 0, sm = hd_data->smbios; sm; sm = sm->next, cnt++) {
- sm_data = sm->any.data;
- data_len = sm->any.data_len;
- sl_any = sm->any.strings;
- switch(sm->any.type) {
- case sm_biosinfo:
- if(data_len >= 0x12) {
- sm->biosinfo.start = READ_MEM16(sm_data + 6) << 4;
- sm->biosinfo.rom_size = (sm_data[9] + 1) << 16;
- sm->biosinfo.vendor = get_string(sl_any, sm_data[4]);
- sm->biosinfo.version = get_string(sl_any, sm_data[5]);
- sm->biosinfo.date = get_string(sl_any, sm_data[8]);
- memcpy(sm->biosinfo.feature.bitmap, sm_data + 0xa, 8);
- }
- if(data_len >= 0x13) {
- sm->biosinfo.feature.bitmap[8] = sm_data[0x12];
- }
- if(data_len >= 0x14) {
- sm->biosinfo.feature.bitmap[9] = sm_data[0x13];
- }
- sm->biosinfo.feature.bits = 80;
- smbios_bitmap2str(&sm->biosinfo.feature, &smbios_bios_feature);
- break;
-
- case sm_sysinfo:
- if(data_len >= 8) {
- sm->sysinfo.manuf = get_string(sl_any, sm_data[4]);
- sm->sysinfo.product = get_string(sl_any, sm_data[5]);
- sm->sysinfo.version = get_string(sl_any, sm_data[6]);
- sm->sysinfo.serial = get_string(sl_any, sm_data[7]);
- }
- if(data_len >= 0x19) {
- memcpy(sm->sysinfo.uuid, sm_data + 8, 16);
- sm->sysinfo.wake_up.id = sm_data[0x18];
- smbios_id2str(&sm->sysinfo.wake_up, &smbios_system_wakeups, 1);
- }
- break;
-
- case sm_boardinfo:
- if(data_len >= 8) {
- sm->boardinfo.manuf = get_string(sl_any, sm_data[4]);
- sm->boardinfo.product = get_string(sl_any, sm_data[5]);
- sm->boardinfo.version = get_string(sl_any, sm_data[6]);
- sm->boardinfo.serial = get_string(sl_any, sm_data[7]);
- }
- if(data_len >= 9) {
- sm->boardinfo.asset = get_string(sl_any, sm_data[8]);
- }
- if(data_len >= 0x0e) {
- sm->boardinfo.feature.bitmap[0] = sm_data[9];
- sm->boardinfo.feature.bits = 8;
- smbios_bitmap2str(&sm->boardinfo.feature, &smbios_board_feature);
- sm->boardinfo.location = get_string(sl_any, sm_data[0x0a]);
- sm->boardinfo.chassis = READ_MEM16(sm_data + 0x0b);
- sm->boardinfo.board_type.id = sm_data[0x0d];
- smbios_id2str(&sm->boardinfo.board_type, &smbios_board_types, 1);
- }
- if(data_len >= 0x0f) {
- u = sm_data[0x0e];
- if(u && data_len >= 0x0f + 2 * u) {
- sm->boardinfo.objects_len = u;
- sm->boardinfo.objects = new_mem(u * sizeof *sm->boardinfo.objects);
- for(u = 0; u < sm->boardinfo.objects_len; u++) {
- sm->boardinfo.objects[u] = READ_MEM16(sm_data + 0x0f + 2 * u);
- }
- }
- }
- break;
-
- case sm_chassis:
- if(data_len >= 6) {
- sm->chassis.manuf = get_string(sl_any, sm_data[4]);
- sm->chassis.lock = sm_data[5] >> 7;
- sm->chassis.ch_type.id = sm_data[5] & 0x7f;
- smbios_id2str(&sm->chassis.ch_type, &smbios_chassis_types, 1);
- }
- if(data_len >= 9) {
- sm->chassis.version = get_string(sl_any, sm_data[6]);
- sm->chassis.serial = get_string(sl_any, sm_data[7]);
- sm->chassis.asset = get_string(sl_any, sm_data[8]);
- }
- if(data_len >= 0x0d) {
- sm->chassis.bootup.id = sm_data[9];
- sm->chassis.power.id = sm_data[0x0a];
- sm->chassis.thermal.id = sm_data[0x0b];
- sm->chassis.security.id = sm_data[0x0c];
- smbios_id2str(&sm->chassis.bootup, &smbios_chassis_states, 1);
- smbios_id2str(&sm->chassis.power, &smbios_chassis_states, 1);
- smbios_id2str(&sm->chassis.thermal, &smbios_chassis_states, 1);
- smbios_id2str(&sm->chassis.security, &smbios_chassis_sec_states, 1);
- }
- if(data_len >= 0x11) {
- sm->chassis.oem = READ_MEM32(sm_data + 0x0d);
- }
- break;
-
- case sm_processor:
- if(data_len >= 0x1a) {
- sm->processor.socket = get_string(sl_any, sm_data[4]);
- sm->processor.manuf = get_string(sl_any, sm_data[7]);
- sm->processor.version = get_string(sl_any, sm_data[0x10]);
- sm->processor.voltage = sm_data[0x11];
- if(sm->processor.voltage & 0x80) {
- sm->processor.voltage &= 0x7f;
- }
- else {
- switch(sm->processor.voltage) {
- case 0x01:
- sm->processor.voltage = 50;
- break;
- case 0x02:
- sm->processor.voltage = 33;
- break;
- case 0x04:
- sm->processor.voltage = 29;
- break;
- default:
- sm->processor.voltage = 0;
- }
- }
- sm->processor.pr_type.id = sm_data[5];
- sm->processor.family.id = sm_data[6];
- sm->processor.cpu_id = READ_MEM64(sm_data + 8);
- sm->processor.ext_clock = READ_MEM16(sm_data + 0x12);
- sm->processor.max_speed = READ_MEM16(sm_data + 0x14);
- sm->processor.current_speed = READ_MEM16(sm_data + 0x16);
- sm->processor.sock_status = (sm_data[0x18] >> 6) & 1;
- sm->processor.cpu_status.id = sm_data[0x18] & 7;
- sm->processor.upgrade.id = sm_data[0x19];
- smbios_id2str(&sm->processor.pr_type, &smbios_proc_types, 1);
- smbios_id2str(&sm->processor.family, &smbios_proc_families, 1);
- smbios_id2str(&sm->processor.cpu_status, &smbios_proc_cpu_status, 0);
- smbios_id2str(&sm->processor.upgrade, &smbios_proc_upgrades, 1);
- }
- if(data_len >= 0x20) {
- sm->processor.l1_cache = READ_MEM16(sm_data + 0x1a);
- sm->processor.l2_cache = READ_MEM16(sm_data + 0x1c);
- sm->processor.l3_cache = READ_MEM16(sm_data + 0x1e);
- if(sm->processor.l1_cache == 0xffff) sm->processor.l1_cache = 0;
- if(sm->processor.l2_cache == 0xffff) sm->processor.l2_cache = 0;
- if(sm->processor.l3_cache == 0xffff) sm->processor.l3_cache = 0;
- }
- if(data_len >= 0x21) {
- sm->processor.serial = get_string(sl_any, sm_data[0x20]);
- }
- if(data_len >= 0x22) {
- sm->processor.asset = get_string(sl_any, sm_data[0x21]);
- sm->processor.part = get_string(sl_any, sm_data[0x22]);
- }
- break;
-
- case sm_cache:
- if(data_len >= 0x0f) {
- sm->cache.socket = get_string(sl_any, sm_data[4]);
- u = READ_MEM16(sm_data + 7);
- if((u & 0x8000)) u = (u & 0x7fff) << 6;
- sm->cache.max_size = u;
- u = READ_MEM16(sm_data + 9);
- if((u & 0x8000)) u = (u & 0x7fff) << 6;
- sm->cache.current_size = u;
- u = READ_MEM16(sm_data + 5);
- sm->cache.mode.id = (u >> 8) & 3;
- sm->cache.state = (u >> 7) & 1;
- sm->cache.location.id = (u >> 5) & 3;
- sm->cache.socketed = (u >> 3) & 1;
- sm->cache.level = u & 7;
- smbios_id2str(&sm->cache.mode, &smbios_cache_mode, 0);
- smbios_id2str(&sm->cache.location, &smbios_cache_location, 0);
- sm->cache.supp_sram.bitmap[0] = sm_data[0x0b];
- sm->cache.supp_sram.bitmap[1] = sm_data[0x0c];
- sm->cache.supp_sram.bits = 16;
- sm->cache.sram.bitmap[0] = sm_data[0x0d];
- sm->cache.sram.bitmap[1] = sm_data[0x0e];
- sm->cache.sram.bits = 16;
- smbios_bitmap2str(&sm->cache.supp_sram, &smbios_cache_sram);
- smbios_bitmap2str(&sm->cache.sram, &smbios_cache_sram);
- }
- if(data_len >= 0x13) {
- sm->cache.speed = sm_data[0x0f];
- sm->cache.ecc.id = sm_data[0x10];
- sm->cache.cache_type.id = sm_data[0x11];
- sm->cache.assoc.id = sm_data[0x12];
- smbios_id2str(&sm->cache.ecc, &smbios_cache_ecc, 1);
- smbios_id2str(&sm->cache.cache_type, &smbios_cache_type, 1);
- smbios_id2str(&sm->cache.assoc, &smbios_cache_assoc, 1);
- }
- break;
-
- case sm_connect:
- if(data_len >= 9) {
- sm->connect.i_des = get_string(sl_any, sm_data[4]);
- sm->connect.x_des = get_string(sl_any, sm_data[6]);
- sm->connect.i_type.id = sm_data[5];
- sm->connect.x_type.id = sm_data[7];
- sm->connect.port_type.id = sm_data[8];
- smbios_id2str(&sm->connect.port_type, &smbios_connect_conn_type, 0xff);
- smbios_id2str(&sm->connect.x_type, &smbios_connect_conn_type, 0xff);
- smbios_id2str(&sm->connect.port_type, &smbios_connect_port_type, 0xff);
- }
- break;
-
- case sm_slot:
- if(data_len >= 0x0c) {
- sm->slot.desig = get_string(sl_any, sm_data[4]);
- sm->slot.slot_type.id = sm_data[5];
- sm->slot.bus_width.id = sm_data[6];
- sm->slot.usage.id = sm_data[7];
- sm->slot.length.id = sm_data[8];
- sm->slot.id = READ_MEM16(sm_data + 9);
- sm->slot.feature.bitmap[0] = sm_data[0x0b];
- }
- if(data_len >= 0x0d) {
- sm->slot.feature.bitmap[1] = sm_data[0x0c];
- }
- sm->slot.feature.bits = 16;
- smbios_id2str(&sm->slot.slot_type, &smbios_slot_type, 1);
- smbios_id2str(&sm->slot.bus_width, &smbios_slot_bus_width, 1);
- smbios_id2str(&sm->slot.usage, &smbios_slot_usage, 1);
- smbios_id2str(&sm->slot.length, &smbios_slot_length, 1);
- smbios_bitmap2str(&sm->slot.feature, &smbios_slot_feature);
- break;
-
- case sm_onboard:
- if(data_len >= 4) {
- u = data_len - 4;
- if(!(u & 1)) {
- u >>= 1;
- if(u) {
- sm->onboard.dev_len = u;
- sm->onboard.dev = new_mem(u * sizeof *sm->onboard.dev);
- }
- for(u = 0; u < sm->onboard.dev_len; u++) {
- sm->onboard.dev[u].name = get_string(sl_any, sm_data[4 + (u << 1) + 1]);
- v = sm_data[4 + (u << 1)];
- sm->onboard.dev[u].status = v >> 7;
- sm->onboard.dev[u].type.id = v & 0x7f;
- smbios_id2str(&sm->onboard.dev[u].type, &smbios_onboard_type, 1);
- }
- }
- }
- break;
-
- case sm_oem:
- for(sl = sl_any; sl; sl = sl->next) {
- if(sl->str && *sl->str) add_str_list(&sm->oem.oem_strings, sl->str);
- }
- break;
-
- case sm_config:
- for(sl = sl_any; sl; sl = sl->next) {
- if(sl->str && *sl->str) add_str_list(&sm->config.options, sl->str);
- }
- break;
-
- case sm_lang:
- if(data_len >= 0x16) {
- sm->lang.current = get_string(sl_any, sm_data[0x15]);
- }
- break;
-
- case sm_group:
- if(data_len >= 5) {
- sm->group.name = get_string(sl_any, sm_data[4]);
- u = (data_len - 5) / 3;
- if(u) {
- sm->group.items_len = u;
- sm->group.item_handles = new_mem(u * sizeof *sm->group.item_handles);
- for(u = 0; u < sm->group.items_len; u++) {
- sm->group.item_handles[u] = READ_MEM16(sm_data + 6 + 3 * u);
- }
- }
- }
- break;
-
- case sm_memarray:
- if(data_len >= 0x0f) {
- sm->memarray.location.id = sm_data[4];
- sm->memarray.use.id = sm_data[5];
- sm->memarray.ecc.id = sm_data[6];
- sm->memarray.max_size = READ_MEM32(sm_data + 7);
- if(sm->memarray.max_size == 0x80000000) sm->memarray.max_size = 0;
- sm->memarray.error_handle = READ_MEM16(sm_data + 0x0b);
- sm->memarray.slots = READ_MEM16(sm_data + 0x0d);
- smbios_id2str(&sm->memarray.location, &smbios_memarray_location, 1);
- smbios_id2str(&sm->memarray.use, &smbios_memarray_use, 1);
- smbios_id2str(&sm->memarray.ecc, &smbios_memarray_ecc, 1);
- }
- break;
-
- case sm_memdevice:
- if(data_len >= 0x15) {
- sm->memdevice.array_handle = READ_MEM16(sm_data + 0x04);
- sm->memdevice.error_handle = READ_MEM16(sm_data + 0x06);
- sm->memdevice.eccbits = READ_MEM16(sm_data + 8);
- sm->memdevice.width = READ_MEM16(sm_data + 0xa);
- if(sm->memdevice.width == 0xffff) sm->memdevice.width = 0;
- if(sm->memdevice.eccbits == 0xffff) sm->memdevice.eccbits = 0;
- if(sm->memdevice.eccbits >= sm->memdevice.width) {
- sm->memdevice.eccbits -= sm->memdevice.width;
- }
- else {
- sm->memdevice.eccbits = 0;
- }
- sm->memdevice.size = READ_MEM16(sm_data + 0xc);
- if(sm->memdevice.size == 0xffff) sm->memdevice.size = 0;
- if((sm->memdevice.size & 0x8000)) {
- sm->memdevice.size &= 0x7fff;
- }
- else {
- sm->memdevice.size <<= 10;
- }
- sm->memdevice.form.id = sm_data[0xe];
- sm->memdevice.set = sm_data[0xf];
- sm->memdevice.location = get_string(sl_any, sm_data[0x10]);
- sm->memdevice.bank = get_string(sl_any, sm_data[0x11]);
- sm->memdevice.mem_type.id = sm_data[0x12];
- smbios_id2str(&sm->memdevice.form, &smbios_memdevice_form, 1);
- smbios_id2str(&sm->memdevice.mem_type, &smbios_memdevice_type, 1);
- sm->memdevice.type_detail.bitmap[0] = sm_data[0x13];
- sm->memdevice.type_detail.bitmap[1] = sm_data[0x14];
- sm->memdevice.type_detail.bits = 16;
- smbios_bitmap2str(&sm->memdevice.type_detail, &smbios_memdevice_detail);
- }
- if(data_len >= 0x17) {
- sm->memdevice.speed = READ_MEM16(sm_data + 0x15);
- }
- if(data_len >= 0x1b) {
- sm->memdevice.manuf = get_string(sl_any, sm_data[0x17]);
- sm->memdevice.serial = get_string(sl_any, sm_data[0x18]);
- sm->memdevice.asset = get_string(sl_any, sm_data[0x19]);
- sm->memdevice.part = get_string(sl_any, sm_data[0x1a]);
- }
- break;
-
- case sm_memerror:
- if(data_len >= 0x17) {
- sm->memerror.err_type.id = sm_data[4];
- sm->memerror.granularity.id = sm_data[5];
- sm->memerror.operation.id = sm_data[6];
- sm->memerror.syndrome = READ_MEM32(sm_data + 7);
- sm->memerror.array_addr = READ_MEM32(sm_data + 0xb);
- sm->memerror.device_addr = READ_MEM32(sm_data + 0xf);
- sm->memerror.range = READ_MEM32(sm_data + 0x13);
- smbios_id2str(&sm->memerror.err_type, &smbios_memerror_type, 1);
- smbios_id2str(&sm->memerror.granularity, &smbios_memerror_granularity, 1);
- smbios_id2str(&sm->memerror.operation, &smbios_memerror_operation, 1);
- }
- break;
-
- case sm_memarraymap:
- if(data_len >= 0x0f) {
- sm->memarraymap.start_addr = READ_MEM32(sm_data + 4);
- sm->memarraymap.start_addr <<= 10;
- sm->memarraymap.end_addr = 1 + READ_MEM32(sm_data + 8);
- sm->memarraymap.end_addr <<= 10;
- sm->memarraymap.array_handle = READ_MEM16(sm_data + 0xc);
- sm->memarraymap.part_width = sm_data[0x0e];
- }
- break;
-
- case sm_memdevicemap:
- if(data_len >= 0x13) {
- sm->memdevicemap.start_addr = READ_MEM32(sm_data + 4);
- sm->memdevicemap.start_addr <<= 10;
- sm->memdevicemap.end_addr = 1 + READ_MEM32(sm_data + 8);
- sm->memdevicemap.end_addr <<= 10;
- sm->memdevicemap.memdevice_handle = READ_MEM16(sm_data + 0xc);
- sm->memdevicemap.arraymap_handle = READ_MEM16(sm_data + 0xe);
- sm->memdevicemap.row_pos = sm_data[0x10];
- sm->memdevicemap.interleave_pos = sm_data[0x11];
- sm->memdevicemap.interleave_depth = sm_data[0x12];
- }
- break;
-
- case sm_mouse:
- if(data_len >= 7) {
- sm->mouse.mtype.id = sm_data[4];
- sm->mouse.interface.id = sm_data[5];
- sm->mouse.buttons = sm_data[6];
- smbios_id2str(&sm->mouse.mtype, &smbios_mouse_type, 1);
- smbios_id2str(&sm->mouse.interface, &smbios_mouse_interface, 1);
- }
- break;
-
- case sm_secure:
- if(data_len >= 5) {
- u = sm_data[4];
- sm->secure.power.id = u >> 6;
- sm->secure.keyboard.id = (u >> 4) & 3;
- sm->secure.admin.id = (u >> 2) & 3;
- sm->secure.reset.id = u & 3;
- smbios_id2str(&sm->secure.power, &smbios_secure_state, 3);
- smbios_id2str(&sm->secure.keyboard, &smbios_secure_state, 3);
- smbios_id2str(&sm->secure.admin, &smbios_secure_state, 3);
- smbios_id2str(&sm->secure.reset, &smbios_secure_state, 3);
- }
- break;
-
- case sm_power:
- if(data_len >= 9) {
- sm->power.month = sm_data[4];
- sm->power.day = sm_data[5];
- sm->power.hour = sm_data[6];
- sm->power.minute = sm_data[7];
- sm->power.second = sm_data[8];
- }
- break;
-
- case sm_mem64error:
- if(data_len >= 0x1f) {
- sm->mem64error.err_type.id = sm_data[4];
- sm->mem64error.granularity.id = sm_data[5];
- sm->mem64error.operation.id = sm_data[6];
- sm->mem64error.syndrome = READ_MEM32(sm_data + 7);
- sm->mem64error.array_addr = READ_MEM64(sm_data + 0xb);
- sm->mem64error.device_addr = READ_MEM64(sm_data + 0x13);
- sm->mem64error.range = READ_MEM32(sm_data + 0x1b);
- smbios_id2str(&sm->mem64error.err_type, &smbios_memerror_type, 1);
- smbios_id2str(&sm->mem64error.granularity, &smbios_memerror_granularity, 1);
- smbios_id2str(&sm->mem64error.operation, &smbios_memerror_operation, 1);
- }
- break;
-
- default:
- break;
- }
- }
-}
-
-
-/*
- * Note: new_sm is directly inserted into the list, so you *must* make sure
- * that new_sm points to a malloc'ed pice of memory.
- */
-hd_smbios_t *smbios_add_entry(hd_smbios_t **sm, hd_smbios_t *new_sm)
-{
- while(*sm) sm = &(*sm)->next;
-
- return *sm = new_sm;
-}
-
-
-/*
- * Free the memory allocated by a smbios list.
- */
-hd_smbios_t *smbios_free(hd_smbios_t *sm)
-{
- hd_smbios_t *next;
- unsigned u;
-
- for(; sm; sm = next) {
- next = sm->next;
-
- free_mem(sm->any.data);
- free_str_list(sm->any.strings);
-
- switch(sm->any.type) {
- case sm_biosinfo:
- free_mem(sm->biosinfo.vendor);
- free_mem(sm->biosinfo.version);
- free_mem(sm->biosinfo.date);
- free_str_list(sm->biosinfo.feature.str);
- break;
-
- case sm_sysinfo:
- free_mem(sm->sysinfo.manuf);
- free_mem(sm->sysinfo.product);
- free_mem(sm->sysinfo.version);
- free_mem(sm->sysinfo.serial);
- free_mem(sm->sysinfo.wake_up.name);
- break;
-
- case sm_boardinfo:
- free_mem(sm->boardinfo.manuf);
- free_mem(sm->boardinfo.product);
- free_mem(sm->boardinfo.version);
- free_mem(sm->boardinfo.serial);
- free_mem(sm->boardinfo.asset);
- free_mem(sm->boardinfo.location);
- free_mem(sm->boardinfo.board_type.name);
- free_str_list(sm->boardinfo.feature.str);
- free_mem(sm->boardinfo.objects);
- break;
-
- case sm_chassis:
- free_mem(sm->chassis.manuf);
- free_mem(sm->chassis.version);
- free_mem(sm->chassis.serial);
- free_mem(sm->chassis.asset);
- free_mem(sm->chassis.ch_type.name);
- free_mem(sm->chassis.bootup.name);
- free_mem(sm->chassis.power.name);
- free_mem(sm->chassis.thermal.name);
- free_mem(sm->chassis.security.name);
- break;
-
- case sm_processor:
- free_mem(sm->processor.socket);
- free_mem(sm->processor.manuf);
- free_mem(sm->processor.version);
- free_mem(sm->processor.serial);
- free_mem(sm->processor.asset);
- free_mem(sm->processor.part);
- free_mem(sm->processor.upgrade.name);
- free_mem(sm->processor.pr_type.name);
- free_mem(sm->processor.family.name);
- free_mem(sm->processor.cpu_status.name);
- break;
-
- case sm_cache:
- free_mem(sm->cache.socket);
- free_mem(sm->cache.mode.name);
- free_mem(sm->cache.location.name);
- free_mem(sm->cache.ecc.name);
- free_mem(sm->cache.cache_type.name);
- free_mem(sm->cache.assoc.name);
- free_str_list(sm->cache.supp_sram.str);
- free_str_list(sm->cache.sram.str);
- break;
-
- case sm_connect:
- free_mem(sm->connect.port_type.name);
- free_mem(sm->connect.i_des);
- free_mem(sm->connect.x_des);
- free_mem(sm->connect.i_type.name);
- free_mem(sm->connect.x_type.name);
- break;
-
- case sm_slot:
- free_mem(sm->slot.desig);
- free_mem(sm->slot.slot_type.name);
- free_mem(sm->slot.bus_width.name);
- free_mem(sm->slot.usage.name);
- free_mem(sm->slot.length.name);
- free_str_list(sm->slot.feature.str);
- break;
-
- case sm_onboard:
- for(u = 0; u < sm->onboard.dev_len; u++) {
- free_mem(sm->onboard.dev[u].name);
- free_mem(sm->onboard.dev[u].type.name);
- }
- free_mem(sm->onboard.dev);
- break;
-
- case sm_oem:
- free_str_list(sm->oem.oem_strings);
- break;
-
- case sm_config:
- free_str_list(sm->config.options);
- break;
-
- case sm_lang:
- free_mem(sm->lang.current);
- break;
-
- case sm_group:
- free_mem(sm->group.name);
- free_mem(sm->group.item_handles);
- break;
-
- case sm_memarray:
- free_mem(sm->memarray.location.name);
- free_mem(sm->memarray.use.name);
- free_mem(sm->memarray.ecc.name);
- break;
-
- case sm_memdevice:
- free_mem(sm->memdevice.location);
- free_mem(sm->memdevice.bank);
- free_mem(sm->memdevice.manuf);
- free_mem(sm->memdevice.serial);
- free_mem(sm->memdevice.asset);
- free_mem(sm->memdevice.part);
- free_mem(sm->memdevice.form.name);
- free_mem(sm->memdevice.mem_type.name);
- free_str_list(sm->memdevice.type_detail.str);
- break;
-
- case sm_memerror:
- free_mem(sm->memerror.err_type.name);
- free_mem(sm->memerror.granularity.name);
- free_mem(sm->memerror.operation.name);
- break;
-
- case sm_mouse:
- free_mem(sm->mouse.mtype.name);
- free_mem(sm->mouse.interface.name);
- break;
-
- case sm_secure:
- free_mem(sm->secure.power.name);
- free_mem(sm->secure.keyboard.name);
- free_mem(sm->secure.admin.name);
- free_mem(sm->secure.reset.name);
- break;
-
- case sm_mem64error:
- free_mem(sm->mem64error.err_type.name);
- free_mem(sm->mem64error.granularity.name);
- free_mem(sm->mem64error.operation.name);
- break;
-
- default:
- break;
- }
-
- free_mem(sm);
- }
-
- return NULL;
-}
-
-
-/*
- * print SMBIOS entries
- */
-void smbios_dump(hd_data_t *hd_data, FILE *f)
-{
- hd_smbios_t *sm;
- str_list_t *sl;
- char c, *s;
- unsigned u;
- int i;
-
- if(!hd_data->smbios) return;
-
- for(sm = hd_data->smbios; sm; sm = sm->next) {
- switch(sm->any.type) {
- case sm_biosinfo:
- fprintf(f, " BIOS Info: #%d\n", sm->any.handle);
- if(sm->biosinfo.vendor) fprintf(f, " Vendor: \"%s\"\n", sm->biosinfo.vendor);
- if(sm->biosinfo.version) fprintf(f, " Version: \"%s\"\n", sm->biosinfo.version);
- if(sm->biosinfo.date) fprintf(f, " Date: \"%s\"\n", sm->biosinfo.date);
- fprintf(f, " Start Address: 0x%05x\n", sm->biosinfo.start);
- fprintf(f, " ROM Size: %d kB\n", sm->biosinfo.rom_size >> 10);
- SMBIOS_PRINT_BITMAP_LONG(biosinfo.feature, "Features");
- break;
-
- case sm_sysinfo:
- fprintf(f, " System Info: #%d\n", sm->any.handle);
- if(sm->sysinfo.manuf) fprintf(f, " Manufacturer: \"%s\"\n", sm->sysinfo.manuf);
- if(sm->sysinfo.product) fprintf(f, " Product: \"%s\"\n", sm->sysinfo.product);
- if(sm->sysinfo.version) fprintf(f, " Version: \"%s\"\n", sm->sysinfo.version);
- if(sm->sysinfo.serial) fprintf(f, " Serial: \"%s\"\n", sm->sysinfo.serial);
- for(i = u = 0; (unsigned) i < sizeof sm->sysinfo.uuid / sizeof *sm->sysinfo.uuid; i++) {
- u |= sm->sysinfo.uuid[i];
- }
- fprintf(f, " UUID: ");
- if(u == 0 || u == 0xff) {
- fprintf(f, "undefined");
- if(u == 0xff) fprintf(f, ", but settable");
- }
- else {
- for(i = sizeof sm->sysinfo.uuid / sizeof *sm->sysinfo.uuid - 1; i >= 0; i--) {
- fprintf(f, "%02x", sm->sysinfo.uuid[i]);
- }
- }
- fprintf(f, "\n");
- SMBIOS_PRINT_ID(sysinfo.wake_up, "Wake-up");
- break;
-
- case sm_boardinfo:
- fprintf(f, " Board Info: #%d\n", sm->any.handle);
- if(sm->boardinfo.manuf) fprintf(f, " Manufacturer: \"%s\"\n", sm->boardinfo.manuf);
- if(sm->boardinfo.product) fprintf(f, " Product: \"%s\"\n", sm->boardinfo.product);
- if(sm->boardinfo.version) fprintf(f, " Version: \"%s\"\n", sm->boardinfo.version);
- if(sm->boardinfo.serial) fprintf(f, " Serial: \"%s\"\n", sm->boardinfo.serial);
- if(sm->boardinfo.asset) fprintf(f, " Asset Tag: \"%s\"\n", sm->boardinfo.asset);
- SMBIOS_PRINT_ID(boardinfo.board_type, "Type");
- SMBIOS_PRINT_BITMAP_LONG(boardinfo.feature, "Features");
- if(sm->boardinfo.location) fprintf(f, " Location: \"%s\"\n", sm->boardinfo.location);
- if(sm->boardinfo.chassis) fprintf(f, " Chassis: #%d\n", sm->boardinfo.chassis);
- if(sm->boardinfo.objects_len) {
- fprintf(f, " Contained Objects: ");
- for(i = 0; i < sm->boardinfo.objects_len; i++) {
- fprintf(f, "%s#%d", i ? ", " : "", sm->boardinfo.objects[i]);
- }
- fprintf(f, "\n");
- }
- break;
-
- case sm_chassis:
- fprintf(f, " Chassis Info: #%d\n", sm->any.handle);
- if(sm->chassis.manuf) fprintf(f, " Manufacturer: \"%s\"\n", sm->chassis.manuf);
- if(sm->chassis.version) fprintf(f, " Version: \"%s\"\n", sm->chassis.version);
- if(sm->chassis.serial) fprintf(f, " Serial: \"%s\"\n", sm->chassis.serial);
- if(sm->chassis.asset) fprintf(f, " Asset Tag: \"%s\"\n", sm->chassis.asset);
- SMBIOS_PRINT_ID(chassis.ch_type, "Type");
- if(sm->chassis.lock) fprintf(f, " Lock: present\n");
- SMBIOS_PRINT_ID(chassis.bootup, "Bootup State");
- SMBIOS_PRINT_ID(chassis.power, "Power Supply State");
- SMBIOS_PRINT_ID(chassis.thermal, "Thermal State");
- SMBIOS_PRINT_ID(chassis.security, "Security Status");
- if(sm->chassis.oem) fprintf(f, " OEM Info: 0x%08x\n", sm->chassis.oem);
- break;
-
- case sm_processor:
- fprintf(f, " Processor Info: #%d\n", sm->any.handle);
- SMBIOS_PRINT_STR(processor.socket, "Socket");
- SMBIOS_PRINT_ID(processor.upgrade, "Socket Type");
- fprintf(f, " Socket Status: %s\n", sm->processor.sock_status ? "Populated" : "Empty");
- SMBIOS_PRINT_ID(processor.pr_type, "Type");
- SMBIOS_PRINT_ID(processor.family, "Family");
- SMBIOS_PRINT_STR(processor.manuf, "Manufacturer");
- SMBIOS_PRINT_STR(processor.version, "Version");
- SMBIOS_PRINT_STR(processor.serial, "Serial");
- SMBIOS_PRINT_STR(processor.asset, "Asset Tag");
- SMBIOS_PRINT_STR(processor.part, "Part Number");
- if(sm->processor.cpu_id) {
- fprintf(f, " Processor ID: 0x%016"PRIx64"\n", sm->processor.cpu_id);
- }
- SMBIOS_PRINT_ID(processor.cpu_status, "Status");
- if(sm->processor.voltage) {
- fprintf(f, " Voltage: %u.%u V\n", sm->processor.voltage / 10, sm->processor.voltage % 10);
- }
- if(sm->processor.ext_clock) fprintf(f, " External Clock: %u MHz\n", sm->processor.ext_clock);
- if(sm->processor.max_speed) fprintf(f, " Max. Speed: %u MHz\n", sm->processor.max_speed);
- if(sm->processor.current_speed) fprintf(f, " Current Speed: %u MHz\n", sm->processor.current_speed);
-
- if(sm->processor.l1_cache) fprintf(f, " L1 Cache: #%d\n", sm->processor.l1_cache);
- if(sm->processor.l2_cache) fprintf(f, " L2 Cache: #%d\n", sm->processor.l2_cache);
- if(sm->processor.l3_cache) fprintf(f, " L3 Cache: #%d\n", sm->processor.l3_cache);
- break;
-
- case sm_cache:
- fprintf(f, " Cache Info: #%d\n", sm->any.handle);
- SMBIOS_PRINT_STR(cache.socket, "Designation");
- fprintf(f, " Level: L%u\n", sm->cache.level + 1);
- fprintf(f, " State: %s\n", sm->cache.state ? "Enabled" : "Disabled");
- SMBIOS_PRINT_ID(cache.mode, "Mode");
- if(sm->cache.location.name) {
- fprintf(f, " Location: 0x%02x (%s, %sSocketed)\n",
- sm->cache.location.id,
- sm->cache.location.name,
- sm->cache.socketed ? "" : "Not "
- );
- }
- SMBIOS_PRINT_ID(cache.ecc, "ECC");
- SMBIOS_PRINT_ID(cache.cache_type, "Type");
- SMBIOS_PRINT_ID(cache.assoc, "Associativity");
- if(sm->cache.max_size) fprintf(f, " Max. Size: %u kB\n", sm->cache.max_size);
- if(sm->cache.current_size) fprintf(f, " Current Size: %u kB\n", sm->cache.current_size);
- if(sm->cache.speed) fprintf(f, " Speed: %u ns\n", sm->cache.speed);
- SMBIOS_PRINT_BITMAP_SHORT(cache.supp_sram, "Supported SRAM Types");
- SMBIOS_PRINT_BITMAP_SHORT(cache.sram, "Current SRAM Type");
- break;
-
- case sm_connect:
- fprintf(f, " Port Connector: #%d\n", sm->any.handle);
- SMBIOS_PRINT_ID(connect.port_type, "Type");
- SMBIOS_PRINT_STR(connect.i_des, "Internal Designator");
- SMBIOS_PRINT_ID(connect.i_type, "Internal Connector");
- SMBIOS_PRINT_STR(connect.x_des, "External Designator");
- SMBIOS_PRINT_ID(connect.x_type, "External Connector");
- break;
-
- case sm_slot:
- fprintf(f, " System Slot: #%d\n", sm->any.handle);
- SMBIOS_PRINT_STR(slot.desig, "Designation");
- SMBIOS_PRINT_ID(slot.slot_type, "Type");
- SMBIOS_PRINT_ID(slot.bus_width, "Bus Width");
- SMBIOS_PRINT_ID(slot.usage, "Status");
- SMBIOS_PRINT_ID(slot.length, "Length");
- fprintf(f, " Slot ID: %u\n", sm->slot.id);
- SMBIOS_PRINT_BITMAP_SHORT(slot.feature, "Characteristics");
- break;
-
- case sm_onboard:
- fprintf(f, " On Board Devices: #%d\n", sm->any.handle);
- for(u = 0; u < sm->onboard.dev_len; u++) {
- fprintf(f, " %s: \"%s\"%s\n",
- sm->onboard.dev[u].type.name,
- sm->onboard.dev[u].name,
- sm->onboard.dev[u].status ? "" : " (disabled)"
- );
- }
- break;
-
- case sm_oem:
- fprintf(f, " OEM Strings: #%d\n", sm->any.handle);
- for(sl = sm->oem.oem_strings; sl; sl = sl->next) {
- fprintf(f, " %s\n", sl->str);
- }
- break;
-
- case sm_config:
- fprintf(f, " System Config Options (Jumpers & Switches) #%d:\n", sm->any.handle);
- for(sl = sm->config.options; sl; sl = sl->next) {
- fprintf(f, " %s\n", sl->str);
- }
- break;
-
- case sm_lang:
- fprintf(f, " Language Info: #%d\n", sm->any.handle);
- if((sl = sm->lang.strings)) {
- fprintf(f, " Languages: ");
- for(; sl; sl = sl->next) {
- fprintf(f, "%s%s", sl->str, sl->next ? ", " : "");
- }
- fprintf(f, "\n");
- }
- if(sm->lang.current) fprintf(f, " Current: %s\n", sm->lang.current);
- break;
-
- case sm_group:
- fprintf(f, " Group Associations: #%d\n", sm->any.handle);
- if(sm->group.name) fprintf(f, " Group Name: \"%s\"\n", sm->group.name);
- if(sm->group.items_len) {
- fprintf(f, " Items: ");
- for(i = 0; i < sm->group.items_len; i++) {
- fprintf(f, "%s#%d", i ? ", " : "", sm->group.item_handles[i]);
- }
- fprintf(f, "\n");
- }
- break;
-
- case sm_memarray:
- fprintf(f, " Physical Memory Array: #%d\n", sm->any.handle);
- SMBIOS_PRINT_ID(memarray.use, "Use");
- SMBIOS_PRINT_ID(memarray.location, "Location");
- fprintf(f, " Slots: %u\n", sm->memarray.slots);
- if(sm->memarray.max_size) {
- u = sm->memarray.max_size;
- c = 'k';
- if(!(u & 0x3ff)) { u >>= 10; c = 'M'; }
- if(!(u & 0x3ff)) { u >>= 10; c = 'G'; }
- fprintf(f, " Max. Size: %u %cB\n", u, c);
- }
- SMBIOS_PRINT_ID(memarray.ecc, "ECC");
- if(sm->memarray.error_handle != 0xfffe) {
- fprintf(f, " Error Info: ");
- if(sm->memarray.error_handle != 0xffff) {
- fprintf(f, "#%d\n", sm->memarray.error_handle);
- }
- else {
- fprintf(f, "No Error\n");
- }
- }
- break;
-
- case sm_memdevice:
- fprintf(f, " Memory Device: #%d\n", sm->any.handle);
- SMBIOS_PRINT_STR(memdevice.location, "Location");
- SMBIOS_PRINT_STR(memdevice.bank, "Bank");
- SMBIOS_PRINT_STR(memdevice.manuf, "Manufacturer");
- SMBIOS_PRINT_STR(memdevice.serial, "Serial");
- SMBIOS_PRINT_STR(memdevice.asset, "Asset Tag");
- SMBIOS_PRINT_STR(memdevice.part, "Part Number");
- fprintf(f, " Memory Array: #%d\n", sm->memdevice.array_handle);
- if(sm->memdevice.error_handle != 0xfffe) {
- fprintf(f, " Error Info: ");
- if(sm->memdevice.error_handle != 0xffff) {
- fprintf(f, "#%d\n", sm->memdevice.error_handle);
- }
- else {
- fprintf(f, "No Error\n");
- }
- }
- SMBIOS_PRINT_ID(memdevice.form, "Form Factor");
- SMBIOS_PRINT_ID(memdevice.mem_type, "Type");
- SMBIOS_PRINT_BITMAP_SHORT(memdevice.type_detail, "Type Detail");
- fprintf(f, " Data Width: %u bits", sm->memdevice.width);
- if(sm->memdevice.eccbits) fprintf(f, " (+%u ECC bits)", sm->memdevice.eccbits);
- fprintf(f, "\n");
- if(sm->memdevice.size) {
- u = sm->memdevice.size;
- c = 'k';
- if(!(u & 0x3ff)) { u >>= 10; c = 'M'; }
- if(!(u & 0x3ff)) { u >>= 10; c = 'G'; }
- fprintf(f, " Size: %u %cB\n", u, c);
- }
- else {
- fprintf(f, " Size: No Memory Installed\n");
- }
- if(sm->memdevice.speed) fprintf(f, " Speed: %u MHz\n", sm->memdevice.speed);
- break;
-
- case sm_memerror:
- fprintf(f, " 32bit-Memory Error Info: #%d\n", sm->any.handle);
- SMBIOS_PRINT_ID(memerror.err_type, "Type");
- SMBIOS_PRINT_ID(memerror.granularity, "Granularity");
- SMBIOS_PRINT_ID(memerror.operation, "Operation");
- if(sm->memerror.syndrome) fprintf(f, " Syndrome: 0x%08x\n", sm->memerror.syndrome);
- if(sm->memerror.array_addr != (1 << 31)) fprintf(f, " Mem Array Addr: 0x%08x\n", sm->memerror.array_addr);
- if(sm->memerror.device_addr != (1 << 31)) fprintf(f, " Mem Device Addr: 0x%08x\n", sm->memerror.device_addr);
- if(sm->memerror.range != (1 << 31)) fprintf(f, " Range: 0x%08x\n", sm->memerror.range);
- break;
-
- case sm_memarraymap:
- fprintf(f, " Memory Array Mapping: #%d\n", sm->any.handle);
- fprintf(f, " Memory Array: #%d\n", sm->memarraymap.array_handle);
- fprintf(f, " Partition Width: %u\n", sm->memarraymap.part_width);
- if((sm->memarraymap.start_addr | sm->memarraymap.end_addr) >> 32) {
- fprintf(f, " Start Address: 0x%016"PRIx64"\n", sm->memarraymap.start_addr);
- fprintf(f, " End Address: 0x%016"PRIx64"\n", sm->memarraymap.end_addr);
- }
- else {
- fprintf(f, " Start Address: 0x%08x\n", (unsigned) sm->memarraymap.start_addr);
- fprintf(f, " End Address: 0x%08x\n", (unsigned) sm->memarraymap.end_addr);
- }
- break;
-
- case sm_memdevicemap:
- fprintf(f, " Memory Device Mapping: #%d\n", sm->any.handle);
- fprintf(f, " Memory Device: #%d\n", sm->memdevicemap.memdevice_handle);
- fprintf(f, " Array Mapping: #%d\n", sm->memdevicemap.arraymap_handle);
- if(sm->memdevicemap.row_pos != 0xff) fprintf(f, " Row: %u\n", sm->memdevicemap.row_pos);
- if(
- !sm->memdevicemap.interleave_pos ||
- sm->memdevicemap.interleave_pos != 0xff
- ) {
- fprintf(f, " Interleave Pos: %u\n", sm->memdevicemap.interleave_pos);
- }
- if(
- !sm->memdevicemap.interleave_depth ||
- sm->memdevicemap.interleave_depth != 0xff
- ) {
- fprintf(f, " Interleaved Depth: %u\n", sm->memdevicemap.interleave_depth);
- }
- if((sm->memdevicemap.start_addr | sm->memdevicemap.end_addr) >> 32) {
- fprintf(f, " Start Address: 0x%016"PRIx64"\n", sm->memdevicemap.start_addr);
- fprintf(f, " End Address: 0x%016"PRIx64"\n", sm->memdevicemap.end_addr);
- }
- else {
- fprintf(f, " Start Address: 0x%08x\n", (unsigned) sm->memdevicemap.start_addr);
- fprintf(f, " End Address: 0x%08x\n", (unsigned) sm->memdevicemap.end_addr);
- }
- break;
-
- case sm_mouse:
- fprintf(f, " Pointing Device: #%d\n", sm->any.handle);
- SMBIOS_PRINT_ID(mouse.mtype, "Type");
- SMBIOS_PRINT_ID(mouse.interface, "Interface");
- if(sm->mouse.buttons) fprintf(f, " Buttons: %u\n", sm->mouse.buttons);
- break;
-
- case sm_secure:
- fprintf(f, " Hardware Security: #%d\n", sm->any.handle);
- SMBIOS_PRINT_ID(secure.power, "Power-on Password");
- SMBIOS_PRINT_ID(secure.keyboard, "Keyboard Password");
- SMBIOS_PRINT_ID(secure.admin, "Admin Password");
- SMBIOS_PRINT_ID(secure.reset, "Front Panel Reset");
- break;
-
- case sm_power:
- fprintf(f, " System Power Controls: #%d\n", sm->any.handle);
- fprintf(f,
- " Next Power-on: %02x:%02x:%02x %02x/%02x\n",
- sm->power.hour, sm->power.minute, sm->power.second,
- sm->power.day, sm->power.month
- );
- break;
-
- case sm_mem64error:
- fprintf(f, " 64bit-Memory Error Info: #%d\n", sm->any.handle);
- SMBIOS_PRINT_ID(mem64error.err_type, "Type");
- SMBIOS_PRINT_ID(mem64error.granularity, "Granularity");
- SMBIOS_PRINT_ID(mem64error.operation, "Operation");
- if(sm->mem64error.syndrome) fprintf(f, " Syndrome: 0x%08x\n", sm->mem64error.syndrome);
- if(
- sm->mem64error.array_addr != (1ll << 63) &&
- sm->mem64error.array_addr != (1ll << 31)
- ) {
- fprintf(f, " Mem Array Addr: 0x%016"PRIx64"\n", sm->mem64error.array_addr);
- }
- if(
- sm->mem64error.device_addr != (1ll << 63) &&
- sm->mem64error.device_addr != (1ll << 31)
- ) {
- fprintf(f, " Mem Device Addr: 0x%016"PRIx64"\n", sm->mem64error.device_addr);
- }
- if(sm->mem64error.range != (1 << 31)) fprintf(f, " Range: 0x%08x\n", sm->mem64error.range);
- break;
-
- case sm_end:
- break;
-
- default:
- if(sm->any.type == sm_inactive) {
- fprintf(f, " Inactive Record: #%d\n", sm->any.handle);
- }
- else {
- fprintf(f, " Type %d Record: #%d\n", sm->any.type, sm->any.handle);
- }
- if(sm->any.data_len) {
- for(i = 0; i < sm->any.data_len; i += 0x10) {
- u = sm->any.data_len - i;
- if(u > 0x10) u = 0x10;
- s = NULL;
- hexdump(&s, 0, u, sm->any.data + i);
- fprintf(f, " Data %02x: %s\n", i, s);
- s = free_mem(s);
- }
- }
- for(u = 1, sl = sm->any.strings; sl; sl = sl->next, u++) {
- if(sl->str && *sl->str) fprintf(f, " String %u: \"%s\"\n", u, sl->str);
- }
- break;
- }
- }
-}
-
+++ /dev/null
-hd_smbios_t *smbios_free(hd_smbios_t *sm);
-hd_smbios_t *smbios_add_entry(hd_smbios_t **sm, hd_smbios_t *new_sm);
-void smbios_dump(hd_data_t *hd_data, FILE *f);
-void smbios_parse(hd_data_t *hd_data);
+++ /dev/null
-#define _GNU_SOURCE /* we want memmem() */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <signal.h>
-#include <ctype.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "sys.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * general system info
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if defined(__i386__)
-static void sigsegv_handler(int signum);
-static void chk_vmware(hd_data_t *hd_data, sys_info_t *st);
-#endif
-
-#if defined(__i386__) || defined(__x86_64__)
-static int is_txt(char c);
-static int is_decimal(char c);
-static int txt_len(char *s);
-static int decimal_len(char *s);
-static int chk_vaio(hd_data_t *hd_data, sys_info_t *st);
-#ifdef UCLIBC
-void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen);
-#endif
-#endif
-
-void hd_scan_sys(hd_data_t *hd_data)
-{
- hd_t *hd;
- sys_info_t *st;
-#if defined(__PPC__) || defined(__sparc__)
- char buf0[80], *s, *t;
- str_list_t *sl;
-#endif
-
- if(!hd_probe_feature(hd_data, pr_sys)) return;
-
- hd_data->module = mod_sys;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "cpu");
-
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_internal;
- hd->sub_class.id = sc_int_sys;
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_sys;
- hd->detail->sys.data = st = new_mem(sizeof *st);
-
- if(!hd_data->cpu) {
- hd_data->cpu = read_file(PROC_CPUINFO, 0, 0);
- }
-
-#ifdef __PPC__
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "motherboard : %79[^\n]", buf0) == 1) {
- if((s = strstr(buf0, "MacRISC"))) {
- for(t = s + sizeof "MacRISC" - 1; isalnum(*t); t++);
- *t = 0;
- st->system_type = new_str(s);
- hd_data->flags.no_parport = 1;
- }
- }
- if(sscanf(sl->str, "machine : %79[^\n]", buf0) == 1) {
- if(strstr(buf0, "PReP")) {
- st->system_type = new_str("PReP");
- }
- else if(strstr(buf0, "CHRP")) {
- st->system_type = new_str(/* is_64 ? "CHRP64" : */ "CHRP");
- }
- else if(strstr(buf0, "iSeries")) {
- st->system_type = new_str("iSeries");
- hd_data->flags.iseries = 1;
- }
- if(strstr(buf0, "PowerBook2,")) {
- st->model = new_str("iBook");
- }
- else if(strstr(buf0, "PowerBook")) {
- st->model = new_str("PowerBook");
- }
- }
- if(sscanf(sl->str, "pmac-generation : %79[^\n]", buf0) == 1) {
- st->generation = new_str(buf0);
- }
- }
-#endif /* __PPC__ */
-
-#ifdef __sparc__
- for(sl = hd_data->cpu; sl; sl = sl->next) {
- if(sscanf(sl->str, "type : %79[^\n]", buf0) == 1) {
- st->system_type = new_str(buf0);
- }
- }
-#endif
-
-#if defined(__i386__) || defined(__x86_64__)
- chk_vaio(hd_data, st);
-#endif
-
-#if defined(__i386__)
- chk_vmware(hd_data, st);
-#endif
-
- if(st->vendor) hd->vendor.name = new_str(st->vendor);
- if(st->model) hd->device.name = new_str(st->model);
- if(st->serial) hd->serial = new_str(st->serial);
-}
-
-#if defined(__i386__)
-void sigsegv_handler(int signum) { exit(77); }
-
-void chk_vmware(hd_data_t *hd_data, sys_info_t *st)
-{
- static int is_vmware = -1;
- int child, status;
-
- /* do the check only once */
- if(is_vmware < 0) {
-
- child = fork();
-
- if(child == 0) {
- signal(SIGSEGV, sigsegv_handler);
-
- asm(
- "push %ebx\n"
- "\tpush %edx\n"
- "\tpush %eax\n"
- "\tpush %ecx\n"
- "\tmov $0x564d5868,%eax\n"
- "\tmov $0xa,%ecx\n"
- "\tmov $0x5658,%edx\n"
- "\tin (%dx),%eax\n"
- "\tpop %ecx\n"
- "\tpop %eax\n"
- "\tpop %edx\n"
- "\tpop %ebx\n"
- );
-
- _exit(66);
- }
- else {
- if(waitpid(child, &status, 0) == child) {
- status = WEXITSTATUS(status);
- if(status == 66) is_vmware = 1;
- if(status == 77) is_vmware = 0;
- }
- }
-
- ADD2LOG(" vmware check: %d\n", is_vmware);
- }
-
- if(is_vmware == 1) {
- st->model = new_str("VMWare");
- }
-
- hd_data->in_vmware = is_vmware;
-}
-
-#endif /* __i386__ */
-
-
-#if defined(__i386__) || defined(__x86_64__)
-int is_txt(char c)
-{
- if(c < ' ' || c == 0x7f) return 0;
-
- return 1;
-}
-
-int is_decimal(char c)
-{
- if(c < '0' || c > '9') return 0;
-
- return 1;
-}
-
-int txt_len(char *s)
-{
- int i;
-
- for(i = 0; i < 0x100; i++) {
- if(!is_txt(s[i])) break;
- }
-
- return i;
-}
-
-int decimal_len(char *s)
-{
- int i;
-
- for(i = 0; i < 0x100; i++) {
- if(!is_decimal(s[i])) break;
- }
-
- return i;
-}
-
-int chk_vaio(hd_data_t *hd_data, sys_info_t *st)
-{
- int i;
- unsigned char *data, *s, *s0, *s1;
-
- if(!hd_data->bios_rom.data) return 0;
-
- data = hd_data->bios_rom.data + 0xe8000 - hd_data->bios_rom.start;
-
- if(!(s = memmem(data, 0x10000, "Sony Corp", sizeof "Sony Corp" - 1))) return 0;
-
- if((i = txt_len(s))) st->vendor = canon_str(s, i);
- s += i;
-
- if(!(s = memmem(s, 0x1000, "PCG-", sizeof "PCG-" - 1))) return 0;
-
- if((i = txt_len(s))) {
- st->model = canon_str(s, i);
- }
- s += i;
-
- ADD2LOG(" vaio: %s\n", st->model);
-
- for(i = 0; i < 0x1000; i++) {
- if(is_decimal(s[i]) && txt_len(s + i) >= 10 && decimal_len(s + i) >= 5) {
- st->serial = canon_str(s + i, txt_len(s + i));
- break;
- }
- }
-
- if(st->model) {
- s0 = strrchr(st->model, '(');
- s1 = strrchr(st->model, ')');
-
- if(s0 && s1 && s1 - s0 >= 3 && s1[1] == 0) {
- st->lang = canon_str(s0 + 1, s1 - s0 - 1);
- for(s = st->lang; *s; s++) {
- if(*s >= 'A' && *s <= 'Z') *s += 'a' - 'A';
- }
- if(!strcmp(st->lang, "uc")) strcpy(st->lang, "en");
- *s0 = 0; /* cut the model entry */
- }
- }
-
- return st->model ? 1 : 0;
-}
-#endif /* __i386__ || __x86_64__ */
-
+++ /dev/null
-void hd_scan_sys(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "hddb.h"
-#include "usb.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * usb
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#define IOCNR_GET_DEVICE_ID 1
-#define IOCNR_GET_BUS_ADDRESS 5
-#define IOCNR_GET_VID_PID 6
-
-/* Get device_id string: */
-#define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
-/* Get two-int array: [0]=bus number, [1]=device address: */
-#define LPIOC_GET_BUS_ADDRESS(len) _IOC(_IOC_READ, 'P', IOCNR_GET_BUS_ADDRESS, len)
-/* Get two-int array: [0]=vendor ID, [1]=product ID: */
-#define LPIOC_GET_VID_PID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_VID_PID, len)
-
-
-static void get_usb_devs(hd_data_t *hd_data);
-static void set_class_entries(hd_data_t *hd_data, hd_t *hd, usb_t *usb);
-static void get_input_devs(hd_data_t *hd_data);
-static void get_printer_devs(hd_data_t *hd_data);
-static void read_usb_lp(hd_data_t *hd_data, hd_t *hd);
-static void get_serial_devs(hd_data_t *hd_data);
-
-void hd_scan_sysfs_usb(hd_data_t *hd_data)
-{
- if(!hd_probe_feature(hd_data, pr_usb)) return;
-
- hd_data->module = mod_usb;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
- hd_data->proc_usb = free_str_list(hd_data->proc_usb);
- hd_data->usb = NULL;
-
- PROGRESS(1, 0, "sysfs drivers");
-
- hd_sysfs_driver_list(hd_data);
-
- PROGRESS(2, 0, "usb");
-
- get_usb_devs(hd_data);
-
- PROGRESS(3, 1, "joydev mod");
- load_module(hd_data, "joydev");
-
- PROGRESS(3, 2, "evdev mod");
- load_module(hd_data, "evdev");
-
- PROGRESS(3, 3, "input");
- get_input_devs(hd_data);
-
- PROGRESS(3, 4, "lp");
- get_printer_devs(hd_data);
-
- PROGRESS(3, 5, "serial");
- get_serial_devs(hd_data);
-
-}
-
-
-void get_usb_devs(hd_data_t *hd_data)
-{
- uint64_t ul0;
- unsigned u1, u2, u3;
- hd_t *hd, *hd1;
- usb_t *usb;
- str_list_t *sl, *usb_devs = NULL;
- char *s, *s1, *t;
- hd_res_t *res;
- size_t l;
-
- struct sysfs_bus *sf_bus;
- struct dlist *sf_dev_list;
- struct sysfs_device *sf_dev;
- struct sysfs_device *sf_dev_2;
-
- sf_bus = sysfs_open_bus("usb");
-
- if(!sf_bus) {
- ADD2LOG("sysfs: no such bus: usb\n");
- return;
- }
-
- sf_dev_list = sysfs_get_bus_devices(sf_bus);
-
- if(sf_dev_list) dlist_for_each_data(sf_dev_list, sf_dev, struct sysfs_device) {
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "bNumInterfaces"), &ul0, 0)) {
- add_str_list(&usb_devs, sf_dev->path);
- ADD2LOG(" usb dev: %s\n", hd_sysfs_id(sf_dev->path));
- }
- }
-
- if(sf_dev_list) dlist_for_each_data(sf_dev_list, sf_dev, struct sysfs_device) {
- ADD2LOG(
- " usb device: name = %s, bus_id = %s, bus = %s\n path = %s\n",
- sf_dev->name,
- sf_dev->bus_id,
- sf_dev->bus,
- hd_sysfs_id(sf_dev->path)
- );
-
- if(
- hd_attr_uint(sysfs_get_device_attr(sf_dev, "bInterfaceNumber"), &ul0, 16)
- ) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
-
- hd->detail = new_mem(sizeof *hd->detail);
- hd->detail->type = hd_detail_usb;
- hd->detail->usb.data = usb = new_mem(sizeof *usb);
-
- hd->sysfs_id = new_str(hd_sysfs_id(sf_dev->path));
- hd->sysfs_bus_id = new_str(sf_dev->bus_id);
-
- hd->bus.id = bus_usb;
- hd->func = ul0;
-
- usb->ifdescr = ul0;
-
- ADD2LOG(" bInterfaceNumber = %u\n", hd->func);
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "bInterfaceClass"), &ul0, 16)) {
- usb->i_cls = ul0;
- ADD2LOG(" bInterfaceClass = %u\n", usb->i_cls);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "bInterfaceSubClass"), &ul0, 16)) {
- usb->i_sub = ul0;
- ADD2LOG(" bInterfaceSubClass = %u\n", usb->i_sub);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev, "bInterfaceProtocol"), &ul0, 16)) {
- usb->i_prot = ul0;
- ADD2LOG(" bInterfaceProtocol = %u\n", usb->i_prot);
- }
-
- /* device has longest matching sysfs id */
- u2 = strlen(sf_dev->path);
- s = NULL;
- for(u3 = 0, sl = usb_devs; sl; sl = sl->next) {
- u1 = strlen(sl->str);
- if(u1 > u3 && u1 <= u2 && !strncmp(sf_dev->path, sl->str, u1)) {
- u3 = u1;
- s = sl->str;
- }
- }
-
- if(s) {
- ADD2LOG(" if: %s @ %s\n", hd->sysfs_bus_id, hd_sysfs_id(s));
- sf_dev_2 = sysfs_open_device_path(s);
- if(sf_dev_2) {
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev_2, "bDeviceClass"), &ul0, 16)) {
- usb->d_cls = ul0;
- ADD2LOG(" bDeviceClass = %u\n", usb->d_cls);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev_2, "bDeviceSubClass"), &ul0, 16)) {
- usb->d_sub = ul0;
- ADD2LOG(" bDeviceSubClass = %u\n", usb->d_sub);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev_2, "bDeviceProtocol"), &ul0, 16)) {
- usb->d_prot = ul0;
- ADD2LOG(" bDeviceProtocol = %u\n", usb->d_prot);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev_2, "idVendor"), &ul0, 16)) {
- usb->vendor = ul0;
- ADD2LOG(" idVendor = 0x%04x\n", usb->vendor);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev_2, "idProduct"), &ul0, 16)) {
- usb->device = ul0;
- ADD2LOG(" idProduct = 0x%04x\n", usb->device);
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev_2, "manufacturer")))) {
- usb->manufact = canon_str(s, strlen(s));
- ADD2LOG(" manufacturer = \"%s\"\n", usb->manufact);
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev_2, "product")))) {
- usb->product = canon_str(s, strlen(s));
- ADD2LOG(" product = \"%s\"\n", usb->product);
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev_2, "serial")))) {
- usb->serial = canon_str(s, strlen(s));
- ADD2LOG(" serial = \"%s\"\n", usb->serial);
- }
-
- if(hd_attr_uint(sysfs_get_device_attr(sf_dev_2, "bcdDevice"), &ul0, 16)) {
- usb->rev = ul0;
- ADD2LOG(" bcdDevice = %04x\n", usb->rev);
- }
-
- if((s = hd_attr_str(sysfs_get_device_attr(sf_dev_2, "speed")))) {
- s = canon_str(s, strlen(s));
- if(strcmp(s, "1.5")) usb->speed = 15*100000;
- else if(strcmp(s, "12")) usb->speed = 12*1000000;
- else if(strcmp(s, "240")) usb->speed = 240*1000000;
- ADD2LOG(" speed = \"%s\"\n", s);
- s = free_mem(s);
- }
-
- sysfs_close_device(sf_dev_2);
- }
- }
-
- if(usb->vendor || usb->device) {
- hd->vendor.id = MAKE_ID(TAG_USB, usb->vendor);
- hd->device.id = MAKE_ID(TAG_USB, usb->device);
- }
-
- if(usb->manufact) hd->vendor.name = new_str(usb->manufact);
- if(usb->product) hd->device.name = new_str(usb->product);
- if(usb->serial) hd->serial = new_str(usb->serial);
-
- if(usb->rev) str_printf(&hd->revision.name, 0, "%x.%02x", usb->rev >> 8, usb->rev & 0xff);
-
- if(usb->speed) {
- res = add_res_entry(&hd->res, new_mem(sizeof *res));
- res->baud.type = res_baud;
- res->baud.speed = usb->speed;
- }
-
- s = hd_sysfs_find_driver(hd_data, hd->sysfs_id, 1);
- if(s) add_str_list(&hd->drivers, s);
-
- set_class_entries(hd_data, hd, usb);
-
- if(!hd_data->scanner_db) {
- hd_data->scanner_db = hd_module_list(hd_data, 1);
- }
-
- if(
- hd->drivers &&
- search_str_list(hd_data->scanner_db, hd->drivers->str)
- ) {
- hd->base_class.id = bc_scanner;
- }
-
- // ###### FIXME
- if(hd->base_class.id == bc_modem) {
- hd->unix_dev_name = new_str("/dev/ttyACM0");
- }
-
- }
- }
-
- sysfs_close_bus(sf_bus);
-
- /* connect usb devices to each other */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(hd->module == hd_data->module && hd->sysfs_id) {
-
- s = new_str(hd->sysfs_id);
- t = strrchr(s, '/');
- if(t) *t = 0;
-
- /* parent has longest matching sysfs id */
- u2 = strlen(s);
- for(u3 = 0, hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(hd1->sysfs_id) {
- s1 = new_str(hd1->sysfs_id);
-
- if(hd1->module == hd_data->module) {
- t = strrchr(s1, ':');
- if(t) *t = 0;
- l = strlen(s1);
- if(l > 2 && s1[l-2] == '-' && s1[l-1] == '0') {
- /* root hub */
- s1[l-2] = 0 ;
- }
- }
-
- u1 = strlen(s1);
- if(u1 > u3 && u1 <= u2 && !strncmp(s, s1, u1)) {
- u3 = u1;
- hd->attached_to = hd1->idx;
- }
-
- s1 = free_mem(s1);
- }
- }
-
- s = free_mem(s);
- }
- }
-
- /* remove some entries */
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->sysfs_id &&
- !hd->tag.remove
- ) {
-
- s = new_str(hd->sysfs_id);
- t = strrchr(s, ':');
- if(t) *t = 0;
-
- for(hd1 = hd_data->hd; hd1; hd1 = hd1->next) {
- if(
- hd1 != hd &&
- hd1->module == hd_data->module &&
- hd1->sysfs_id &&
- !hd1->tag.remove &&
- hd1->base_class.id == hd->base_class.id
- ) {
-
- s1 = new_str(hd1->sysfs_id);
- t = strrchr(s1, ':');
- if(t) *t = 0;
-
- /* same usb device */
- if(!strcmp(s, s1)) {
- hd1->tag.remove = 1;
- ADD2LOG("removed: %s\n", hd1->sysfs_id);
- }
-
- s1 = free_mem(s1);
- }
- }
-
- s = free_mem(s);
- }
- }
-
- remove_tagged_hd_entries(hd_data);
-
-
-}
-
-
-void set_class_entries(hd_data_t *hd_data, hd_t *hd, usb_t *usb)
-{
- int cls, sub, prot;
- unsigned u;
-
- if(usb->d_cls) {
- cls = usb->d_cls; sub = usb->d_sub; prot = usb->d_prot;
- }
- else {
- cls = usb->i_cls; sub = usb->i_sub; prot = usb->i_prot;
- }
-
- switch(cls) {
- case 2:
- if(usb->i_sub == 6 && usb->i_prot == 0) {
- hd->base_class.id = bc_network;
- hd->sub_class.id = 0x91;
- }
- else if(usb->i_sub == 2 && usb->i_prot >= 1 && usb->i_prot <= 6) {
- hd->base_class.id = bc_modem;
- }
- break;
-
- case 3:
- if(sub == 1 && prot == 1) {
- hd->base_class.id = bc_keyboard;
- hd->sub_class.id = sc_keyboard_kbd;
- break;
- }
- if(sub == 1 && prot == 2) {
- if(!(
- (usb->vendor == 0x056a && usb->device == 0x0022) /* Wacom Tablet */
-// || (usb->vendor == 0x08ca && usb->device == 0x0020) /* AIPTEK APT-6000U tablet */
- )) {
- hd->base_class.id = bc_mouse;
- hd->sub_class.id = sc_mou_usb;
- hd->compat_vendor.id = MAKE_ID(TAG_SPECIAL, 0x0200);
- hd->compat_device.id = MAKE_ID(TAG_SPECIAL, 0x001);
- }
- break;
- }
- break;
-
- case 6:
- if(sub == 1 && prot == 1) { /* PTP camera */
- hd->base_class.id = bc_camera;
- hd->sub_class.id = sc_camera_digital;
- break;
- }
- break;
-
- case 7:
- hd->base_class.id = bc_printer;
- break;
-
- case 8:
- hd->base_class.id = bc_storage_device;
- switch(sub) {
- case 1: /* flash devices & removable media */
- case 5:
- case 6:
- hd->sub_class.id = sc_sdev_disk;
- break;
- case 2:
- hd->sub_class.id = sc_sdev_cdrom;
- break;
- case 3:
- hd->sub_class.id = sc_sdev_tape;
- break;
- case 4:
- hd->sub_class.id = sc_sdev_floppy;
- break;
- default:
- hd->sub_class.id = sc_sdev_other;
- }
- break;
-
- case 9:
- hd->base_class.id = bc_hub;
- break;
-
- case 0xe0:
- if(sub == 1 && prot == 1) {
- hd->base_class.id = bc_bluetooth;
- hd->sub_class.id = 0;
- }
- break;
-
- case 0xff:
- /* hp psc 2100, 2200, 2150, officejet 6100 */
- if(
- sub == 0xcc &&
- (
- usb->vendor == 0x03f0 &&
- (
- usb->device == 0x2811 ||
- usb->device == 0x2911 ||
- usb->device == 0x2a11 ||
- usb->device == 0x2d11
- )
- )
- ) {
- hd->base_class.id = bc_scanner;
- hd->sub_class.id = 1;
- }
- break;
- }
-
- if((u = device_class(hd_data, hd->vendor.id, hd->device.id))) {
- hd->base_class.id = u >> 8;
- hd->sub_class.id = u & 0xff;
- }
-
- /* FIXME: hack for bt isdn box */
- if(
- hd->vendor.id == MAKE_ID(TAG_USB, 0x057c) &&
- hd->device.id == MAKE_ID(TAG_USB, 0x2200)
- ) {
- hd_set_hw_class(hd, hw_bluetooth);
- }
-
-}
-
-
-void get_input_devs(hd_data_t *hd_data)
-{
- hd_t *hd;
- char *s, *t;
- hd_dev_num_t dev_num;
- unsigned u1, u2;
-
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct dlist *sf_cdev_list;
-
- sf_class = sysfs_open_class("input");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: input\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- ADD2LOG(
- " input: name = %s, path = %s\n",
- sf_cdev->name,
- hd_sysfs_id(sf_cdev->path)
- );
-
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "dev")))) {
- if(sscanf(s, "%u:%u", &u1, &u2) == 2) {
- dev_num.type = 'c';
- dev_num.major = u1;
- dev_num.minor = u2;
- dev_num.range = 1;
- }
- ADD2LOG(" dev = %u:%u\n", u1, u2);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- s = hd_sysfs_id(sf_dev->path);
-
- ADD2LOG(
- " input device: bus = %s, bus_id = %s driver = %s\n path = %s\n",
- sf_dev->bus,
- sf_dev->bus_id,
- sf_dev->driver_name,
- s
- );
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->sysfs_id &&
- s &&
- !strcmp(s, hd->sysfs_id)
- ) {
- t = NULL;
- str_printf(&t, 0, "/dev/input/%s", sf_cdev->name);
-
- if(strncmp(sf_cdev->name, "mouse", sizeof "mouse" - 1)) {
- hd->unix_dev_name = t;
- hd->unix_dev_num = dev_num;
- }
- else {
- hd->unix_dev_name2 = t;
- hd->unix_dev_num2 = dev_num;
-
- dev_num.major = 13;
- dev_num.minor = 63;
- hd->unix_dev_name = new_str(DEV_MICE);
- hd->unix_dev_num = dev_num;
- }
- }
- }
- }
- }
-
- sysfs_close_class(sf_class);
-}
-
-
-void get_printer_devs(hd_data_t *hd_data)
-{
- hd_t *hd;
- char *s, *t;
- hd_dev_num_t dev_num;
- unsigned u1, u2;
-
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct dlist *sf_cdev_list;
-
- sf_class = sysfs_open_class("usb");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: usb\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- if(strncmp(sf_cdev->name, "lp", 2)) continue;
-
- ADD2LOG(
- " usb: name = %s, path = %s\n",
- sf_cdev->name,
- hd_sysfs_id(sf_cdev->path)
- );
-
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "dev")))) {
- if(sscanf(s, "%u:%u", &u1, &u2) == 2) {
- dev_num.type = 'c';
- dev_num.major = u1;
- dev_num.minor = u2;
- dev_num.range = 1;
- }
- ADD2LOG(" dev = %u:%u\n", u1, u2);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- s = hd_sysfs_id(sf_dev->path);
-
- ADD2LOG(
- " usb device: bus = %s, bus_id = %s driver = %s\n path = %s\n",
- sf_dev->bus,
- sf_dev->bus_id,
- sf_dev->driver_name,
- s
- );
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->sysfs_id &&
- s &&
- !strcmp(s, hd->sysfs_id)
- ) {
- t = NULL;
- str_printf(&t, 0, "/dev/usb/%s", sf_cdev->name);
-
- hd->unix_dev_name = t;
- hd->unix_dev_num = dev_num;
-
- read_usb_lp(hd_data, hd);
- }
- }
- }
- }
-
- sysfs_close_class(sf_class);
-}
-
-
-#define MATCH_FIELD(field, var) \
- if(!strncasecmp(sl->str, field, sizeof field - 1)) var = sl->str + sizeof field - 1
-
-/*
- * assign /dev/usb/lp* to usb printers.
- */
-void read_usb_lp(hd_data_t *hd_data, hd_t *hd)
-{
- char *s;
- char buf[1024];
- int fd, two_ints[2];
- unsigned bus;
- str_list_t *sl0, *sl;
- char *vend, *prod, *serial, *descr;
-
- if((fd = open(hd->unix_dev_name, O_RDWR)) < 0) return;
-
- if(ioctl(fd, LPIOC_GET_BUS_ADDRESS(sizeof two_ints), two_ints) == -1) {
- close(fd);
- return;
- }
-
- ADD2LOG(" usb/lp: bus = %d, dev_nr = %d\n", two_ints[0], two_ints[1]);
- bus = ((two_ints[0] & 0xff) << 8) + (two_ints[1] & 0xff);
-
- if(ioctl(fd, LPIOC_GET_VID_PID(sizeof two_ints), two_ints) != -1) {
- /* just for the record */
- ADD2LOG(" usb/lp: vend = 0x%04x, prod = 0x%04x\n", two_ints[0], two_ints[1]);
- }
-
- memset(buf, 0, sizeof buf);
- if(!ioctl(fd, LPIOC_GET_DEVICE_ID(sizeof buf), buf)) {
- buf[sizeof buf - 1] = 0;
- s = canon_str(buf + 2, sizeof buf - 3);
- ADD2LOG(" usb/lp: \"%s\"\n", s);
- sl0 = hd_split(';', s);
- free_mem(s);
- vend = prod = serial = descr = NULL;
- for(sl = sl0; sl; sl = sl->next) {
- MATCH_FIELD("MFG:", vend);
- MATCH_FIELD("MANUFACTURER:", vend);
- MATCH_FIELD("MDL:", prod);
- MATCH_FIELD("MODEL:", prod);
- MATCH_FIELD("DES:", descr);
- MATCH_FIELD("DESCRIPTION:", descr);
- MATCH_FIELD("SERN:", serial);
- MATCH_FIELD("SERIALNUMBER:", serial);
- }
- ADD2LOG(
- " usb/lp: vend = %s, prod = %s, descr = %s, serial = %s\n",
- vend ?: "", prod ?: "", descr ?: "", serial ?: ""
- );
- if(descr) {
- str_printf(&hd->model, 0, "%s", descr);
- }
- if(vend && prod) {
- str_printf(&hd->sub_vendor.name, 0, "%s", vend);
- str_printf(&hd->sub_device.name, 0, "%s", prod);
- }
- if(serial && !hd->serial) {
- hd->serial = new_str(serial);
- }
-
- free_str_list(sl0);
- }
-
- close(fd);
-}
-#undef MATCH_FIELD
-
-
-void get_serial_devs(hd_data_t *hd_data)
-{
- hd_t *hd;
- char *s, *t;
- hd_dev_num_t dev_num;
- unsigned u1, u2;
-
- struct sysfs_class *sf_class;
- struct sysfs_class_device *sf_cdev;
- struct sysfs_device *sf_dev;
- struct dlist *sf_cdev_list;
-
- sf_class = sysfs_open_class("tty");
-
- if(!sf_class) {
- ADD2LOG("sysfs: no such class: tty\n");
- return;
- }
-
- sf_cdev_list = sysfs_get_class_devices(sf_class);
- if(sf_cdev_list) dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) {
- if(strncmp(sf_cdev->name, "ttyUSB", 6)) continue;
-
- ADD2LOG(
- " usb: name = %s, path = %s\n",
- sf_cdev->name,
- hd_sysfs_id(sf_cdev->path)
- );
-
- if((s = hd_attr_str(sysfs_get_classdev_attr(sf_cdev, "dev")))) {
- if(sscanf(s, "%u:%u", &u1, &u2) == 2) {
- dev_num.type = 'c';
- dev_num.major = u1;
- dev_num.minor = u2;
- dev_num.range = 1;
- }
- ADD2LOG(" dev = %u:%u\n", u1, u2);
- }
-
- sf_dev = sysfs_get_classdev_device(sf_cdev);
- if(sf_dev) {
- s = hd_sysfs_id(sf_dev->path);
-
- if((t = strrchr(s, '/')) && !strncmp(t + 1, "ttyUSB", sizeof "ttyUSB" - 1)) *t =0;
-
- ADD2LOG(
- " usb device: bus = %s, bus_id = %s driver = %s\n path = %s\n",
- sf_dev->bus,
- sf_dev->bus_id,
- sf_dev->driver_name,
- s
- );
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->module == hd_data->module &&
- hd->sysfs_id &&
- s &&
- !strcmp(s, hd->sysfs_id)
- ) {
- t = NULL;
- str_printf(&t, 0, "/dev/%s", sf_cdev->name);
-
- hd->unix_dev_name = t;
- hd->unix_dev_num = dev_num;
-
- hd->base_class.id = bc_comm;
- hd->sub_class.id = sc_com_ser;
- hd->prog_if.id = 0x80;
- }
- }
- }
- }
-
- sysfs_close_class(sf_class);
-}
-
-
+++ /dev/null
-void hd_scan_sysfs_usb(hd_data_t *hd_data);
+++ /dev/null
-#define HD_VERSION_STRING "10.16"
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "veth.h"
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * iSeries veth devices
- *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- */
-
-#if defined(__PPC__)
-
-void hd_scan_veth(hd_data_t *hd_data)
-{
- unsigned u;
- hd_t *hd;
- DIR *dir;
- struct dirent *de;
-
- if(!hd_probe_feature(hd_data, pr_veth)) return;
-
- hd_data->module = mod_veth;
-
- /* some clean-up */
- remove_hd_entries(hd_data);
-
- PROGRESS(1, 0, "read data");
-
- if((dir = opendir(PROC_ISERIES_VETH))) {
- while((de = readdir(dir))) {
- if(sscanf(de->d_name, "veth%u", &u) == 1) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->slot = u;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6001); // IBM
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1000);
- str_printf(&hd->device.name, 0, "Virtual Ethernet card %d", hd->slot);
- }
- }
- closedir(dir);
- return;
- }
- if((dir = opendir(PROC_ISERIES))) {
- hd = add_hd_entry(hd_data, __LINE__, 0);
- hd->base_class.id = bc_network;
- hd->slot = 0;
- hd->vendor.id = MAKE_ID(TAG_SPECIAL, 0x6001); // IBM
- hd->device.id = MAKE_ID(TAG_SPECIAL, 0x1000);
- str_printf(&hd->device.name, 0, "Virtual Ethernet card %d", hd->slot);
- }
-
-}
-
-#endif /* __PPC__ */
+++ /dev/null
-void hd_scan_veth(hd_data_t *hd_data);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <linux/wireless.h>
-#include <net/ethernet.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "wlan.h"
-
-#ifndef LIBHD_TINY
-
-#define AUTH_ALG_OPEN_SYSTEM 0x01
-#define AUTH_ALG_SHARED_KEY 0x02
-#define AUTH_ALG_LEAP 0x04
-
-typedef enum { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP } wpa_alg;
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
-
-struct wpa_driver_ops {
- int (*set_wpa)(const char *ifnmae, int enabled);
- int (*set_auth_alg)(const char *ifname, int auth_alg);
- int (*set_key)(const char *ifname, wpa_alg alg, unsigned char *addr,
- int key_idx, int set_tx, u8 *seq, size_t seq_len,
- u8 *key, size_t key_len);
-};
-
-struct wpa_driver_ops wpa_driver_hostap_ops;
-struct wpa_driver_ops wpa_driver_prism54_ops;
-struct wpa_driver_ops wpa_driver_hermes_ops;
-struct wpa_driver_ops wpa_driver_madwifi_ops;
-struct wpa_driver_ops wpa_driver_atmel_ops;
-struct wpa_driver_ops wpa_driver_wext_ops;
-struct wpa_driver_ops wpa_driver_ndiswrapper_ops;
-struct wpa_driver_ops wpa_driver_ipw_ops;
-
-/* the iw_ functions are copied from libiw, so we do not need to
- link against it */
-
-int iw_sockets_open(void)
-{
- static const int families[] = {
- AF_INET, AF_IPX, AF_AX25, AF_APPLETALK
- };
- unsigned int i;
- int sock;
-
- /*
- * Now pick any (exisiting) useful socket family for generic queries
- * Note : don't open all the socket, only returns when one matches,
- * all protocols might not be valid.
- * Workaround by Jim Kaba <jkaba@sarnoff.com>
- * Note : in 99% of the case, we will just open the inet_sock.
- * The remaining 1% case are not fully correct...
- */
-
- /* Try all families we support */
- for(i = 0; i < sizeof(families)/sizeof(int); ++i)
- {
- /* Try to open the socket, if success returns it */
- sock = socket(families[i], SOCK_DGRAM, 0);
- if(sock >= 0)
- return sock;
- }
-
- return -1;
-}
-
-static inline int
-iw_get_ext(int skfd, /* Socket to the kernel */
- const char * ifname, /* Device name */
- int request, /* WE ID */
- struct iwreq * pwrq) /* Fixed part of the request */
-{
- /* Set device name */
- strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
- /* Do the request */
- return(ioctl(skfd, request, pwrq));
-}
-
-int iw_get_range_info(int skfd,
- const char * ifname,
- struct iw_range * range)
-{
- struct iwreq wrq;
- char buffer[sizeof(struct iw_range) * 2]; /* Large enough */
- struct iw_range * range_raw;
-
- /* Cleanup */
- bzero(buffer, sizeof(buffer));
-
- wrq.u.data.pointer = (caddr_t) buffer;
- wrq.u.data.length = sizeof(buffer);
- wrq.u.data.flags = 0;
- if(iw_get_ext(skfd, ifname, SIOCGIWRANGE, &wrq) < 0)
- return(-1);
-
- /* Point to the buffer */
- range_raw = (struct iw_range *) buffer;
-
- /* For new versions, we can check the version directly, for old versions
- * we use magic. 300 bytes is a also magic number, don't touch... */
- if(wrq.u.data.length < 300) {
- /* That's v10 or earlier. Ouch ! Let's make a guess...*/
- range_raw->we_version_compiled = 9;
- }
-
- /* Check how it needs to be processed */
- if(range_raw->we_version_compiled > 15) {
- /* This is our native format, that's easy... */
- /* Copy stuff at the right place, ignore extra */
- memcpy((char *) range, buffer, sizeof(struct iw_range));
- }
- else {
- /* not supported */
- return(-1);
- }
-
- return(0);
-}
-
-double iw_freq2float(const struct iw_freq * in)
-{
- int i;
- double res = (double) in->m;
- for(i = 0; i < in->e; i++)
- res *= 10;
- return(res);
-}
-
-void hd_scan_wlan(hd_data_t *hd_data)
-{
- hd_t *hd;
- hd_res_t *res;
- struct iw_range range;
- int k;
- int skfd;
- struct wpa_driver_ops *wpa_drv=NULL;
-
- if(!hd_probe_feature(hd_data, pr_wlan)) return;
-
- hd_data->module = mod_wlan;
-
- PROGRESS(1, 0, "detecting wlan features");
-
- if ((skfd = iw_sockets_open()) < 0) {
- ADD2LOG( "could not open socket, wlan feature query failed\n" );
- return;
- }
-
- for(hd = hd_data->hd; hd; hd = hd->next) {
- if(
- hd->base_class.id == bc_network &&
- hd->unix_dev_name ) {
- /* Get list of frequencies / channels */
- if(iw_get_range_info(skfd, hd->unix_dev_name, &range) < 0) {
- /* this failed, maybe device does not support wireless extensions */
- continue;
- }
- ADD2LOG("*** device %s is wireless ***\n", hd->unix_dev_name);
- hd->is.wlan = 1;
- res = new_mem(sizeof *res);
- res->any.type = res_wlan;
-
- if(range.num_frequency > 0) {
- char buff[20];
- for(k = 0; k < range.num_frequency; k++) {
- snprintf(buff, 19, "%i", range.freq[k].i);
- add_str_list(&res->wlan.channels, buff);
- snprintf(buff, 19, "%g", (float)iw_freq2float(&(range.freq[k]))/1000000000);
- add_str_list(&res->wlan.frequencies, buff);
- }
- for(k = 0; k < range.num_bitrates; k++) {
- snprintf(buff, 19, "%g", (float)range.bitrate[k]/1000000);
- add_str_list(&res->wlan.bitrates, buff);
- }
- for(k = 0; k < range.num_encoding_sizes; k++) {
- snprintf(buff, 19, "WEP%i", range.encoding_size[k]*8);
- add_str_list(&res->wlan.enc_modes, buff);
- }
-
- /* open mode is always supported */
- add_str_list(&res->wlan.auth_modes, "open");
- /* if WEP is supported, be assume shared key auth support */
- if(range.num_encoding_sizes) {
- add_str_list(&res->wlan.auth_modes, "sharedkey");
- }
-
- /* detect WPA capabilities */
- if (hd->drivers) {
- if (search_str_list(hd->drivers, "hostap_cs") ||
- search_str_list(hd->drivers, "hostap_pci") ||
- search_str_list(hd->drivers, "hostap_plx") )
- wpa_drv = &wpa_driver_hostap_ops;
- /* prism54 is not ready yet
- else if (search_str_list(hd->drivers, "prism54")==0)
- wpa_drv = &wpa_driver_prism54_ops;
- */
- else if (search_str_list(hd->drivers, "ath_pci"))
- wpa_drv = &wpa_driver_madwifi_ops;
- else if (strncmp(hd->drivers->str, "at76", 4)==0)
- wpa_drv = &wpa_driver_atmel_ops;
- else if (search_str_list(hd->drivers, "ndiswrapper"))
- wpa_drv = &wpa_driver_ndiswrapper_ops;
- else if ((search_str_list(hd->drivers, "ipw2100")) ||
- (search_str_list(hd->drivers, "ipw2200")) )
- wpa_drv = &wpa_driver_ipw_ops;
- }
-
- if (wpa_drv) {
- if (wpa_drv->set_wpa(hd->unix_dev_name, 1) == 0) {
- add_str_list(&res->wlan.auth_modes, "wpa-psk");
- add_str_list(&res->wlan.auth_modes, "wpa-eap");
- if (wpa_drv->set_auth_alg &&
- wpa_drv->set_auth_alg(hd->unix_dev_name, AUTH_ALG_LEAP)==0)
- add_str_list(&res->wlan.auth_modes, "wpa-leap");
- if (wpa_drv->set_key(hd->unix_dev_name, WPA_ALG_TKIP, "ff:ff:ff:ff:ff:ff",
- 0, 0, 0, 0,
- "00000000000000000000000000000000", 32) ==0)
- add_str_list(&res->wlan.enc_modes, "TKIP");
- if (wpa_drv->set_key(hd->unix_dev_name, WPA_ALG_CCMP, "ff:ff:ff:ff:ff:ff",
- 0, 0, 0, 0,
- "0000000000000000", 16) ==0)
- add_str_list(&res->wlan.enc_modes, "CCMP");
- wpa_drv->set_wpa(hd->unix_dev_name, 0);
- }
- }
- }
- add_res_entry(&hd->res, res);
- }
- }
-}
-
-/* following functions are copied from wpa_supplicant
- they are used to detect WPA capabilities */
-
-/* begin hostap */
-
-#define PRISM2_IOCTL_PRISM2_PARAM (SIOCIWFIRSTPRIV + 0)
-#define PRISM2_IOCTL_HOSTAPD (SIOCDEVPRIVATE + 14)
-#define HOSTAP_CRYPT_ALG_NAME_LEN 16
-#define HOSTAP_CRYPT_FLAG_SET_TX_KEY (1 << (0))
-#define PRISM2_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \
- ((int) (&((struct prism2_hostapd_param *) 0)->u.generic_elem.data))
-
-enum {
- PRISM2_SET_ENCRYPTION = 6,
- PRISM2_HOSTAPD_SET_GENERIC_ELEMENT = 12,
- PRISM2_PARAM_AP_AUTH_ALGS = 15,
- PRISM2_PARAM_HOST_ROAMING = 21,
- PRISM2_PARAM_WPA = 36,
- PRISM2_PARAM_PRIVACY_INVOKED = 37,
-};
-
-struct prism2_hostapd_param {
- u32 cmd;
- u8 sta_addr[ETH_ALEN];
- union {
- struct {
- u16 aid;
- u16 capability;
- u8 tx_supp_rates;
- } add_sta;
- struct {
- u32 inactive_sec;
- } get_info_sta;
- struct {
- u8 alg[HOSTAP_CRYPT_ALG_NAME_LEN];
- u32 flags;
- u32 err;
- u8 idx;
- u8 seq[8]; /* sequence counter (set: RX, get: TX) */
- u16 key_len;
- u8 key[0];
- } crypt;
- struct {
- u32 flags_and;
- u32 flags_or;
- } set_flags_sta;
- struct {
- u16 rid;
- u16 len;
- u8 data[0];
- } rid;
- struct {
- u8 len;
- u8 data[0];
- } generic_elem;
- struct {
- u16 cmd;
- u16 reason_code;
- } mlme;
- struct {
- u8 ssid_len;
- u8 ssid[32];
- } scan_req;
- } u;
-};
-
-
-int hostapd_ioctl(const char *dev, struct prism2_hostapd_param *param,
- int len, int show_err)
-{
- int s;
- int ret =0;
- struct iwreq iwr;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, dev, IFNAMSIZ);
- iwr.u.data.pointer = (caddr_t) param;
- iwr.u.data.length = len;
-
- if (ioctl(s, PRISM2_IOCTL_HOSTAPD, &iwr) < 0) {
- ret=1;
- }
- close(s);
-
- return 0;
-}
-
-int prism2param(const char *ifname, int param, int value)
-{
- struct iwreq iwr;
- int *i, s, ret = 0;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, ifname, IFNAMSIZ);
- i = (int *) iwr.u.name;
- *i++ = param;
- *i++ = value;
-
- if (ioctl(s, PRISM2_IOCTL_PRISM2_PARAM, &iwr) < 0) {
- ret = -1;
- }
- close(s);
- return ret;
-}
-
-int wpa_driver_hostap_set_auth_alg(const char *ifname, int auth_alg)
-{
- int algs = 0;
-
- if (auth_alg & AUTH_ALG_OPEN_SYSTEM)
- algs |= 1;
- if (auth_alg & AUTH_ALG_SHARED_KEY)
- algs |= 2;
- if (auth_alg & AUTH_ALG_LEAP)
- algs |= 4;
- if (algs == 0)
- algs = 1; /* at least one algorithm should be set */
-
- return prism2param(ifname, PRISM2_PARAM_AP_AUTH_ALGS, algs);
-}
-
-int wpa_driver_hostap_set_wpa(const char *ifname, int enabled)
-{
- int ret = 0;
-
- if (prism2param(ifname, PRISM2_PARAM_HOST_ROAMING,
- enabled ? 2 : 0) < 0)
- ret = -1;
- if (prism2param(ifname, PRISM2_PARAM_PRIVACY_INVOKED, enabled) < 0)
- ret = -1;
- if (prism2param(ifname, PRISM2_PARAM_WPA, enabled) < 0)
- ret = -1;
-
- return ret;
-}
-
-int wpa_driver_hostap_set_key(const char *ifname, wpa_alg alg,
- unsigned char *addr, int key_idx,
- int set_tx, u8 *seq, size_t seq_len,
- u8 *key, size_t key_len)
-{
- struct prism2_hostapd_param *param;
- u8 *buf;
- size_t blen;
- int ret = 0;
- char *alg_name;
-
- switch (alg) {
- case WPA_ALG_NONE:
- alg_name = "none";
- break;
- case WPA_ALG_WEP:
- alg_name = "WEP";
- break;
- case WPA_ALG_TKIP:
- alg_name = "TKIP";
- break;
- case WPA_ALG_CCMP:
- alg_name = "CCMP";
- break;
- default:
- return -1;
- }
-
- if (seq_len > 8)
- return -2;
-
- blen = sizeof(*param) + key_len;
- buf = malloc(blen);
- if (buf == NULL)
- return -1;
- memset(buf, 0, blen);
-
- param = (struct prism2_hostapd_param *) buf;
- param->cmd = PRISM2_SET_ENCRYPTION;
- memset(param->sta_addr, 0xff, ETH_ALEN);
-
- strncpy(param->u.crypt.alg, alg_name, HOSTAP_CRYPT_ALG_NAME_LEN);
- param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0;
- param->u.crypt.idx = key_idx;
- memcpy(param->u.crypt.seq, seq, seq_len);
- param->u.crypt.key_len = key_len;
- memcpy((u8 *) (param + 1), key, key_len);
-
- if (hostapd_ioctl(ifname, param, blen, 1)) {
- ret = -1;
- }
- free(buf);
-
- return ret;
-}
-
-struct wpa_driver_ops wpa_driver_hostap_ops = {
- .set_wpa = wpa_driver_hostap_set_wpa,
- .set_key = wpa_driver_hostap_set_key,
- .set_auth_alg = wpa_driver_hostap_set_auth_alg,
-};
-
-/* end hostap */
-
-/* begin madwifi */
-
-#define IEEE80211_IOCTL_SETPARAM (SIOCIWFIRSTPRIV+0)
-#define IEEE80211_IOCTL_SETKEY (SIOCIWFIRSTPRIV+2)
-#define IEEE80211_CIPHER_WEP 0
-#define IEEE80211_CIPHER_TKIP 1
-#define IEEE80211_CIPHER_AES_CCM 3
-#define IEEE80211_ADDR_LEN 6
-#define IEEE80211_KEY_XMIT 0x01
-#define IEEE80211_KEY_RECV 0x02
-#define IEEE80211_KEYBUF_SIZE 16
-#define IEEE80211_MICBUF_SIZE 16
-
-enum {
- IEEE80211_PARAM_WPA = 10, /* WPA mode (0,1,2) */
- IEEE80211_PARAM_ROAMING = 12, /* roaming mode */
- IEEE80211_PARAM_PRIVACY = 13, /* privacy invoked */
-};
-
-struct ieee80211req_key {
- u_int8_t ik_type; /* key/cipher type */
- u_int8_t ik_pad;
- u_int16_t ik_keyix; /* key index */
- u_int8_t ik_keylen; /* key length in bytes */
- u_int8_t ik_flags;
-#define IEEE80211_KEY_DEFAULT 0x80 /* default xmit key */
- u_int8_t ik_macaddr[IEEE80211_ADDR_LEN];
- u_int64_t ik_keyrsc; /* key receive sequence counter */
- u_int64_t ik_keytsc; /* key transmit sequence counter */
- u_int8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
-};
-
-int
-set80211param(const char *dev, int op, int arg)
-{
- struct iwreq iwr;
- int s=-1;
-
- if (s < 0 ? (s = socket(AF_INET, SOCK_DGRAM, 0)) == -1 : 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, dev, IFNAMSIZ);
- iwr.u.mode = op;
- memcpy(iwr.u.name+sizeof(__u32), &arg, sizeof(arg));
-
- if (ioctl(s, IEEE80211_IOCTL_SETPARAM, &iwr) < 0) {
- return -1;
- }
- return 0;
-}
-
-static int
-wpa_driver_madwifi_set_wpa(const char *ifname, int enabled)
-{
- int ret = 0;
-
- if (set80211param(ifname, IEEE80211_PARAM_ROAMING, enabled ? 2 : 0) < 0)
- ret = -1;
- if (set80211param(ifname, IEEE80211_PARAM_PRIVACY, enabled) < 0)
- ret = -1;
- if (set80211param(ifname, IEEE80211_PARAM_WPA, enabled ? 3 : 0) < 0)
- ret = -1;
-
- return ret;
-}
-
-static int
-set80211priv(const char *dev, int op, void *data, int len)
-{
- struct iwreq iwr;
- int s=-1;
-
- if (s < 0 ? (s = socket(AF_INET, SOCK_DGRAM, 0)) == -1 : 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, dev, IFNAMSIZ);
- if (len < IFNAMSIZ) {
- /*
- * Argument data fits inline; put it there.
- */
- memcpy(iwr.u.name, data, len);
- } else {
- /*
- * Argument data too big for inline transfer; setup a
- * parameter block instead; the kernel will transfer
- * the data for the driver.
- */
- iwr.u.data.pointer = data;
- iwr.u.data.length = len;
- }
-
- if (ioctl(s, op, &iwr) < 0) {
- return -1;
- }
- return 0;
-}
-
-static int
-wpa_driver_madwifi_set_key(const char *ifname, wpa_alg alg,
- unsigned char *addr, int key_idx,
- int set_tx, u8 *seq, size_t seq_len,
- u8 *key, size_t key_len)
-{
- struct ieee80211req_key wk;
- char *alg_name;
- u_int8_t cipher;
-
- if (alg == WPA_ALG_NONE)
- return 0;
-
- switch (alg) {
- case WPA_ALG_WEP:
- alg_name = "WEP";
- cipher = IEEE80211_CIPHER_WEP;
- break;
- case WPA_ALG_TKIP:
- alg_name = "TKIP";
- cipher = IEEE80211_CIPHER_TKIP;
- break;
- case WPA_ALG_CCMP:
- alg_name = "CCMP";
- cipher = IEEE80211_CIPHER_AES_CCM;
- break;
- default:
- return -1;
- }
-
- if (seq_len > sizeof(u_int64_t)) {
- return -2;
- }
- if (key_len > sizeof(wk.ik_keydata)) {
- return -3;
- }
-
- memset(&wk, 0, sizeof(wk));
- wk.ik_type = cipher;
- wk.ik_flags = IEEE80211_KEY_RECV;
- if (set_tx) {
- wk.ik_flags |= IEEE80211_KEY_XMIT | IEEE80211_KEY_DEFAULT;
- memcpy(wk.ik_macaddr, addr, IEEE80211_ADDR_LEN);
- } else
- memset(wk.ik_macaddr, 0, IEEE80211_ADDR_LEN);
- wk.ik_keyix = key_idx;
- wk.ik_keylen = key_len;
- memcpy(&wk.ik_keyrsc, seq, seq_len);
- memcpy(wk.ik_keydata, key, key_len);
-
- return set80211priv(ifname, IEEE80211_IOCTL_SETKEY, &wk, sizeof(wk));
-}
-
-struct wpa_driver_ops wpa_driver_madwifi_ops = {
- .set_wpa = wpa_driver_madwifi_set_wpa,
- .set_key = wpa_driver_madwifi_set_key,
-};
-
-/* end madwifi */
-
-/* begin ipw */
-
-#define IPW_IOCTL_WPA_SUPPLICANT SIOCIWFIRSTPRIV+30
-#define IPW_CMD_SET_WPA_PARAM 1
-#define IPW_CMD_SET_ENCRYPTION 3
-#define IPW_PARAM_WPA_ENABLED 1
-#define IPW_PARAM_AUTH_ALGS 5
-#define IPW_CRYPT_ALG_NAME_LEN 16
-
-struct ipw_param {
- u32 cmd;
- u8 sta_addr[ETH_ALEN];
- union {
- struct {
- u8 name;
- u32 value;
- } wpa_param;
- struct {
- u32 len;
- u8 *data;
- } wpa_ie;
- struct{
- int command;
- int reason_code;
- } mlme;
- struct {
- u8 alg[IPW_CRYPT_ALG_NAME_LEN];
- u8 set_tx;
- u32 err;
- u8 idx;
- u8 seq[8];
- u16 key_len;
- u8 key[0];
- } crypt;
-
- } u;
-};
-
-int ipw_ioctl(const char *dev, struct ipw_param *param, int len)
-{
- struct iwreq iwr;
- int s;
- int ret = 0;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, dev, IFNAMSIZ);
- iwr.u.data.pointer = (caddr_t) param;
- iwr.u.data.length = len;
-
- if (ioctl(s, IPW_IOCTL_WPA_SUPPLICANT, &iwr) < 0) {
- ret = -1;
- }
-
- close(s);
- return ret;
-}
-
-int wpa_driver_ipw_set_wpa(const char *ifname, int enabled)
-{
- int ret = 0;
- struct ipw_param param;
-
- memset(¶m, 0, sizeof(param));
- param.cmd = IPW_CMD_SET_WPA_PARAM;
- param.u.wpa_param.name = IPW_PARAM_WPA_ENABLED;
- param.u.wpa_param.value = enabled;
-
- if (ipw_ioctl(ifname, ¶m, sizeof(param)) < 0)
- ret = -1;
-
- return ret;
-}
-
-int wpa_driver_ipw_set_key(const char *ifname, wpa_alg alg,
- unsigned char *addr, int key_idx, int set_tx,
- u8 *seq, size_t seq_len,
- u8 *key, size_t key_len)
-{
- struct ipw_param *param;
- u8 *buf;
- size_t blen;
- int ret = 0;
- char *alg_name;
-
- switch (alg) {
- case WPA_ALG_NONE:
- alg_name = "none";
- break;
- case WPA_ALG_WEP:
- alg_name = "WEP";
- break;
- case WPA_ALG_TKIP:
- alg_name = "TKIP";
- break;
- case WPA_ALG_CCMP:
- alg_name = "CCMP";
- break;
- default:
- return -1;
- }
-
- if (seq_len > 8)
- return -2;
-
- blen = sizeof(*param) + key_len;
- buf = malloc(blen);
- if (buf == NULL)
- return -1;
- memset(buf, 0, blen);
-
- param = (struct ipw_param *) buf;
- param->cmd = IPW_CMD_SET_ENCRYPTION;
- memset(param->sta_addr, 0xff, ETH_ALEN);
- strncpy(param->u.crypt.alg, alg_name, IPW_CRYPT_ALG_NAME_LEN);
- param->u.crypt.set_tx = set_tx ? 1 : 0;
- param->u.crypt.idx = key_idx;
- memcpy(param->u.crypt.seq, seq, seq_len);
- param->u.crypt.key_len = key_len;
- memcpy((u8 *) (param + 1), key, key_len);
-
- if (ipw_ioctl(ifname, param, blen)) {
- ret = -1;
- }
- free(buf);
-
- return ret;
-}
-
-int wpa_driver_ipw_set_auth_alg(const char *ifname, int auth_alg)
-{
- int algs = 0;
- struct ipw_param param;
-
- if (auth_alg & AUTH_ALG_OPEN_SYSTEM)
- algs |= 1;
- if (auth_alg & AUTH_ALG_SHARED_KEY)
- algs |= 2;
- if (auth_alg & AUTH_ALG_LEAP)
- algs |= 4;
- if (algs == 0)
- algs = 1; /* at least one algorithm should be set */
-
- memset(¶m, 0, sizeof(param));
- param.cmd = IPW_CMD_SET_WPA_PARAM;
- param.u.wpa_param.name = IPW_PARAM_AUTH_ALGS;
- param.u.wpa_param.value = algs;
-
- return ipw_ioctl(ifname, ¶m, sizeof(param));
-}
-
-struct wpa_driver_ops wpa_driver_ipw_ops = {
- .set_wpa = wpa_driver_ipw_set_wpa,
- .set_key = wpa_driver_ipw_set_key,
- .set_auth_alg = wpa_driver_ipw_set_auth_alg
-};
-
-/* end ipw */
-
-/* begin atmel */
-
-#define ATMEL_WPA_IOCTL (SIOCIWFIRSTPRIV + 2)
-#define ATMEL_WPA_IOCTL_PARAM (SIOCIWFIRSTPRIV + 3)
-#define ATMEL_WPA_IOCTL_GET_PARAM (SIOCIWFIRSTPRIV + 4)
-
-#define MAX_KEY_LENGTH 40
-
-/* ATMEL_WPA_IOCTL ioctl() cmd: */
-enum {
- SET_WPA_ENCRYPTION = 1,
- SET_CIPHER_SUITES = 2,
-};
-
-/* ATMEL_WPA_IOCTL_PARAM ioctl() cmd: */
-enum {
- ATMEL_PARAM_WPA = 1,
- ATMEL_PARAM_PRIVACY_INVOKED = 2,
- ATMEL_PARAM_WPA_TYPE = 3,
-};
-
-struct atmel_param{
- unsigned char sta_addr[6];
- int cmd;
- u8 alg;
- u8 key_idx;
- u8 set_tx;
- u8 seq[8];
- u8 seq_len;
- u16 key_len;
- u8 key[MAX_KEY_LENGTH];
- struct{
- int reason_code;
- u8 state;
- }mlme;
- u8 pairwise_suite;
- u8 group_suite;
- u8 key_mgmt_suite;
-};
-
-int atmel_ioctl(const char *dev, struct atmel_param *param, int len)
-{
- int s;
- int ret=0;
- struct iwreq iwr;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, dev, IFNAMSIZ);
- iwr.u.data.pointer = (caddr_t) param;
- iwr.u.data.length = len;
-
- if (ioctl(s, ATMEL_WPA_IOCTL, &iwr) < 0) {
- ret = -1;
- }
- close(s);
-
- return 0;
-}
-
-int atmel2param(const char *ifname, int param, int value)
-{
- struct iwreq iwr;
- int *i, s, ret = 0;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- return -1;
- }
-
- memset(&iwr, 0, sizeof(iwr));
- strncpy(iwr.ifr_name, ifname, IFNAMSIZ);
- i = (int *) iwr.u.name;
- *i++ = param;
- *i++ = value;
-
- if (ioctl(s, ATMEL_WPA_IOCTL_PARAM, &iwr) < 0) {
- ret = -1;
- }
- close(s);
- return ret;
-}
-
-int wpa_driver_atmel_set_wpa(const char *ifname, int enabled)
-{
- int ret = 0;
-
- if (atmel2param(ifname, ATMEL_PARAM_PRIVACY_INVOKED, enabled) < 0)
- ret = -1;
- if (atmel2param(ifname, ATMEL_PARAM_WPA, enabled) < 0)
- ret = -1;
-
- return ret;
-}
-
-int wpa_driver_atmel_set_key(const char *ifname, wpa_alg alg,
- unsigned char *addr, int key_idx,
- int set_tx, u8 *seq, size_t seq_len,
- u8 *key, size_t key_len)
-{
- int ret = 0;
- struct atmel_param *param;
- u8 *buf;
- u8 alg_type;
-
- size_t blen;
- char *alg_name;
-
- switch (alg) {
- case WPA_ALG_NONE:
- alg_name = "none";
- alg_type = 0;
- break;
- case WPA_ALG_WEP:
- alg_name = "WEP";
- alg_type = 1;
- break;
- case WPA_ALG_TKIP:
- alg_name = "TKIP";
- alg_type = 2;
- break;
- case WPA_ALG_CCMP:
- alg_name = "CCMP";
- alg_type = 3;
- break;
- default:
- return -1;
- }
-
- if (seq_len > 8)
- return -2;
-
- blen = sizeof(*param) + key_len;
- buf = malloc(blen);
- if (buf == NULL)
- return -1;
- memset(buf, 0, blen);
-
- param = (struct atmel_param *) buf;
-
- param->cmd = SET_WPA_ENCRYPTION;
-
- if (addr == NULL)
- memset(param->sta_addr, 0xff, ETH_ALEN);
- else
- memcpy(param->sta_addr, addr, ETH_ALEN);
-
- param->alg = alg_type;
- param->key_idx = key_idx;
- param->set_tx = set_tx;
- memcpy(param->seq, seq, seq_len);
- param->seq_len = seq_len;
- param->key_len = key_len;
- memcpy((u8 *)param->key, key, key_len);
-
- if (atmel_ioctl(ifname, param, blen)) {
- ret = -1;
- }
- free(buf);
-
- return ret;
-}
-
-struct wpa_driver_ops wpa_driver_atmel_ops = {
- .set_wpa = wpa_driver_atmel_set_wpa,
- .set_key = wpa_driver_atmel_set_key,
-};
-
-/* end atmel */
-
-/* begin ndiswrapper */
-
-#define WPA_SET_WPA SIOCIWFIRSTPRIV+1
-#define WPA_SET_KEY SIOCIWFIRSTPRIV+2
-#define WPA_SET_AUTH_ALG SIOCIWFIRSTPRIV+8
-
-struct wpa_key
-{
- wpa_alg alg;
- u8 *addr;
- int key_index;
- int set_tx;
- u8 *seq;
- size_t seq_len;
- u8 *key;
- size_t key_len;
-};
-
-int wpa_ndiswrapper_set_ext(const char *ifname, int request, struct iwreq *pwrq)
-{
- int s;
- int ret;
-
- s = socket( AF_INET, SOCK_DGRAM, 0);
- if (s < 0)
- return -1;
-
- strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
- ret = ioctl(s, request, pwrq);
- close(s);
- return ret;
-}
-
-int wpa_ndiswrapper_set_wpa(const char *ifname, int enabled)
-{
- struct iwreq priv_req;
- int ret = 0;
-
- memset(&priv_req, 0, sizeof(priv_req));
-
- priv_req.u.data.flags = enabled;
- if (wpa_ndiswrapper_set_ext(ifname, WPA_SET_WPA, &priv_req) < 0)
- ret = -1;
- return ret;
-}
-
-int wpa_ndiswrapper_set_key(const char *ifname, wpa_alg alg, u8 *addr,
- int key_idx, int set_tx, u8 *seq,
- size_t seq_len, u8 *key, size_t key_len)
-{
- struct wpa_key wpa_key;
- int ret = 0;
- struct iwreq priv_req;
-
- memset(&priv_req, 0, sizeof(priv_req));
-
- wpa_key.alg = alg;
- wpa_key.addr = addr;
- wpa_key.key_index = key_idx;
- wpa_key.set_tx = set_tx;
- wpa_key.seq = seq;
- wpa_key.seq_len = seq_len;
- wpa_key.key = key;
- wpa_key.key_len = key_len;
-
- priv_req.u.data.pointer = (void *)&wpa_key;
-
- if (wpa_ndiswrapper_set_ext(ifname, WPA_SET_KEY, &priv_req) < 0)
- ret = -1;
- return ret;
-}
-
-static int wpa_ndiswrapper_set_auth_alg(const char *ifname, int auth_alg)
-{
- int ret = 0;
- struct iwreq priv_req;
-
- memset(&priv_req, 0, sizeof(priv_req));
-
- priv_req.u.param.value = auth_alg;
- if (wpa_ndiswrapper_set_ext(ifname, WPA_SET_AUTH_ALG, &priv_req) < 0)
- ret = -1;
- return ret;
-}
-
-struct wpa_driver_ops wpa_driver_ndiswrapper_ops = {
- .set_wpa = wpa_ndiswrapper_set_wpa,
- .set_key = wpa_ndiswrapper_set_key,
- .set_auth_alg = wpa_ndiswrapper_set_auth_alg,
-};
-
-/* end ndiswrapper */
-
-#endif /* !defined(LIBHD_TINY) */
-
+++ /dev/null
-void hd_scan_wlan(hd_data_t *hd_data);
+++ /dev/null
-TOPDIR = ../..
-TARGETS = $(LIBHD_D)
-CLEANFILES = *.log src/*~
-DISTCLEANFILES = *.h *.xml *.ids check_hd
-
-include $(TOPDIR)/Makefile.common
-
-ifeq "$(ARCH)" "ppc"
-IDFILES += src/ppc
-endif
-
-ifeq "$(ARCH)" "ppc64"
-IDFILES += src/ppc
-endif
-
-IDFILES += src/bus src/class src/extra src/special src/scanner src/network \
- src/usb src/usb2 src/isapnp src/monitor src/camera src/tv src/dvb \
- src/chipcard src/modem src/pcmcia src/s390
-
-ifeq "$(ARCH)" "i386"
-IDFILES += src/x11.i386 src/modem.i386
-endif
-
-ifeq "$(ARCH)" "ppc"
-IDFILES += src/x11.ppc src/x11.ppc.special
-endif
-
-ifeq "$(ARCH)" "alpha"
-IDFILES += src/x11.axp
-endif
-
-ifeq "$(ARCH)" "sparc"
-IDFILES += src/x11.sparc
-endif
-
-ifeq "$(ARCH)" "sparc64"
-IDFILES += src/x11.sparc
-endif
-
-ifeq "$(ARCH)" "ia64"
-IDFILES += src/x11.ia64
-endif
-
-ifeq "$(ARCH)" "x86_64"
-IDFILES += src/x11.amd64
-endif
-
-IDFILES += src/pci src/storage src/sound src/mouse src/braille
-
-$(LIBHD_D): hd_ids.o
- ar r $(LIBHD) $?
-
-check_hd: check_hd.c
- $(CC) $(CFLAGS) $< -o $@
-
-hd_ids.c: hd_ids.h hd_ids_tiny.h
-
-hd_ids.h hd.ids: check_hd $(IDFILES)
- ./check_hd --check --sort --cfile hd_ids.h $(IDFILES)
-
-hd_ids_tiny.h: check_hd hd.ids
- ./check_hd --mini --cfile hd_ids_tiny.h --log=hd_tiny.log --out=hd_tiny.ids hd.ids
-
+++ /dev/null
-#!/usr/bin/perl -w
-# Copyright (c) 1996 SuSE GmbH Nuernberg, Germany. All rights reserved.
-#
-# Author: Dirk Hessing <dhess@suse.de>, 08/2001
-#
-# Exporting hw-data for x11 from developer-CDB
-
-
-use DBI;
-use strict;
-use IO::Handle;
-use Getopt::Long;
-
-# MySQL-Host / MySQL-User
-my $hostname = "cdbintern.suse.de";
-my $mysql_user = "cdbclient";
-my $mysql_passwd = "cdb";
-my $target = "cdb";
-
-my $driver = DBI->install_driver('mysql');
-my $dbh = DBI->connect('DBI:mysql:'.$target.':'.$hostname,$mysql_user,$mysql_passwd)
- or die "Can't connect to the MySQL Database, table $target";
-
-### Log-Handle und STDOUT-Handle auf ungepufferte Ausgabe setzten (schlechtere Performance ;-)
-STDOUT->autoflush();
-
-
-my $dist_name = "Stable";
-my $date = localtime();
-
-my (@query,$x,$result,$arch_name,@arch_names,$filename,$count);
-my ($product_id,$product_name,$vendor_name,$bus_name,$subclass_name);
-my ($vId,$dId,$sdId,$svId);
-my (%tooltopics,$tooltopic_name,$vario_name,$charvalue);
-
-my $opt_dir = "tmp";
-
-
-# convert to new id format
-sub new_id
-{
- my ($old_id, $id_class, $tag, $id);
-
- ($old_id, $id_class) = @_;
-
- if($old_id =~ /^([us]?)(\S{4})$/) {
- $tag = $1;
- $id = $2;
- }
- else {
- die "invalid id format: \"$old_id\"\n";
- }
-
- if($tag eq "" && $id_class && $id_class =~ /^([us]?)(\S{4})$/) {
- $tag = $1;
- }
-
- if($tag eq "s") {
- $tag = "special ";
- }
- elsif($tag eq "u") {
- $tag = "usb ";
- }
- elsif($tag eq "") {
- $tag = "pci ";
- }
- else {
- die "invalid id format: \"$old_id\"\n";
- }
-
- return "${tag}0x$id";
-}
-
-
-# write data to FH
-sub write_info
-{
- my ($arch, $xfree, $has3d, $vId, $dId, $svId, $sdId, $vName, $dName, $tt, $raw, @raw);
-
- ($arch, $xfree, $has3d, $vId, $dId, $svId, $sdId, $vName, $dName, $tt) = @_;
-
- return unless $vId ne "" && $dId ne "";
-
- # print FH "\n# vId = $vId, dId = $dId, svId = $svId, sdId = $sdId, vName = \"$vName\", dName = \"$dName\"\n";
-
- if($svId ne "" && $sdId ne "") {
- print FH "\n vendor.id\t\t${\new_id $vId}\n";
- print FH "+vendor.name\t\t$vName\n";
-
- print FH "\n vendor.id\t\t${\new_id $vId}\n";
- print FH "&device.id\t\t${\new_id $dId, $vId}\n";
- print FH "&subvendor.id\t\t${\new_id $svId, $vId}\n";
- print FH "&subdevice.id\t\t${\new_id $sdId, $vId}\n";
- print FH "+subdevice.name\t\t$dName\n";
- }
- else {
- print FH "\n vendor.id\t\t${\new_id $vId}\n";
- print FH "+vendor.name\t\t$vName\n";
-
- print FH "\n vendor.id\t\t${\new_id $vId}\n";
- print FH "&device.id\t\t${\new_id $dId, $vId}\n";
- print FH "+device.name\t\t$dName\n";
- }
-
- if($$tt{resol} ne "") {
- $$tt{resol} =~ s/bpp//g;
- }
-
- # Teste ob mehr als ein driver- oder installscript-topic vorhanden ist:
- if(($$tt{driver} =~ /,/) || ($$tt{installscript} =~ /,/)) {
- warn
- "\nMore than one driver- or installscript-topic.\n" .
- " Product-id = $product_id, Vario = $vario_name, Arch = $arch\n" .
- " Id = (${\new_id $vId}, ${\new_id $dId, $vId}), Name = $dName\n" .
- " Driver = \"$$tt{driver}\", script = \"$$tt{installscript}\"\n";
- }
-
- print FH
- "+driver.xfree\t\t$xfree|$$tt{driver}|" .
- ($has3d ? "3d" : "") .
- "|$$tt{package}|$$tt{extension}|$$tt{option}|$$tt{resol}||$$tt{installscript}|\n";
-
- if ($$tt{raw} ne "") {
- @raw = (split(',',$$tt{raw}));
- foreach $raw (@raw) {
- print FH "+driver.xfree.config\t$raw\n";
- }
- }
-}
-
-
-# get product info and write everything to FH
-sub get_info
-{
- my ($arch_name, $xfree, $has3d);
-
- ($arch_name, $vario_name) = @_;
-
- $xfree = $vario_name =~ /XFree3/ ? 3 : 4;
- $has3d = $vario_name =~ /3D/ ? 1 : 0;
-
- $tooltopics{driver} = "";
- $tooltopics{package} = "";
- $tooltopics{extension} = "";
- $tooltopics{option} = "";
- $tooltopics{resol} = "";
- $tooltopics{installscript} = "";
- $tooltopics{raw} = "";
-
- # Product supported=full?
- $query[2] = $dbh->prepare("SELECT toolproperty.charvalue FROM toolproperty
- LEFT JOIN tooltopic ON toolproperty.tooltopic_id=tooltopic.id
- LEFT JOIN arch_dist_l_vario ON toolproperty.arch_dist_l_vario_id=arch_dist_l_vario.id
- LEFT JOIN arch ON arch_dist_l_vario.arch_id=arch.id
- LEFT JOIN distribution ON arch_dist_l_vario.distribution_id=distribution.id
- LEFT JOIN vario ON arch_dist_l_vario.vario_id=vario.id
- WHERE toolproperty.product_id=$product_id
- AND tooltopic.name='supported'
- AND arch.name='$arch_name'
- AND distribution.name='$dist_name'
- AND vario.name='$vario_name'
- AND toolproperty.valid=1
- AND tooltopic.valid=1
- AND arch_dist_l_vario.valid=1")
- or die "Can\'t select table toolproperty";
- $query[2]->execute or die "Can\'t select table toolproperty";
-
- undef $result;
- $count = 0;
- while ($x = $query[2]->fetchrow_array) {
- $result = $x if defined $x;
- multiple_supportedtopics($dbh,$product_id,$product_name,$arch_name,$dist_name,$vario_name) if $count > 0;
- $count++;
- }
- $result = "" if not defined $result;
-
- if ($result eq "full") {
- $query[2] = $dbh->prepare("SELECT tooltopic.name,toolproperty.charvalue FROM toolproperty
- LEFT JOIN tooltopic ON toolproperty.tooltopic_id=tooltopic.id
- LEFT JOIN arch_dist_l_vario ON toolproperty.arch_dist_l_vario_id=arch_dist_l_vario.id
- LEFT JOIN arch ON arch_dist_l_vario.arch_id=arch.id
- LEFT JOIN distribution ON arch_dist_l_vario.distribution_id=distribution.id
- LEFT JOIN language ON arch_dist_l_vario.lang_id=language.id
- LEFT JOIN vario ON arch_dist_l_vario.vario_id=vario.id
- WHERE arch.name='$arch_name'
- AND distribution.name='$dist_name'
- AND vario.name='$vario_name'
- AND toolproperty.product_id=$product_id
- AND tooltopic.name != 'supported'
- AND toolproperty.valid=1
- AND tooltopic.valid=1
- AND arch_dist_l_vario.valid=1")
- or die "Can\'t select table toolproperty";
- $query[2]->execute or die "Can\'t select table toolproperty";
-
- while ( ($tooltopic_name,$charvalue) = ($query[2]->fetchrow_array) ) {
- if (($charvalue eq "none") || ($charvalue eq "None")) {
- $charvalue = "";
- }
- next if $charvalue eq "";
- if (!$tooltopics{"$tooltopic_name"}) {
- $tooltopics{"$tooltopic_name"} = $charvalue;
- } else {
- $tooltopics{"$tooltopic_name"} .= ",".$charvalue;
- }
- }
-
- write_info $arch_name, $xfree, $has3d, $vId, $dId, $svId, $sdId, $vendor_name, $product_name, \%tooltopics;
- }
-}
-
-
-GetOptions(
- 'dir=s' => \$opt_dir
-) ;
-
-
-print "\n\nGenerating x11.hwinfo-files, one for each architecture.\n";
-mkdir($opt_dir, 0755) || die "\nmkdir: $opt_dir: $!\n" unless -d $opt_dir;
-
-print "\nStoring files in \"$opt_dir\"\n\n";
-
-$query[0] = $dbh->prepare("SELECT name FROM arch WHERE valid=1")
- or die "Can\'t select table arch";
-$query[0]->execute or die "Can\'t select table arch";
-while ($result = $query[0]->fetchrow_array) {
- push(@arch_names,$result);
-}
-
-# Für jede Architektur wird eine eigene Datei geschrieben
-foreach $arch_name (@arch_names) {
- $filename = "$opt_dir/x11.hwinfo.$arch_name";
- open(FH,"> $filename") or die "Can\'t open $filename";
- print FH "#\n";
- print FH "# x11.hwinfo-file for architecture $arch_name\n";
- print FH "#\n";
- print FH "# generated at: $date\n";
- print FH "# data source: CDB\n";
- print FH "# distribution: $dist_name\n";
- print FH "#\n\n\n";
-
- $query[0] = $dbh->prepare("SELECT product.id,product.name,
- product.vId,product.dId,product.svId,product.sdId,
- vendor.longname,product.vId,
- bus.name,subclass.name FROM product
- LEFT JOIN product_area ON product.id=product_area.product_id
- LEFT JOIN groups ON product_area.group_id=groups.id
- LEFT JOIN vendor ON product.vendor_id=vendor.id
- LEFT JOIN bus ON product.bus_id=bus.id
- LEFT JOIN subclass ON product.subclass_id=subclass.id
- WHERE groups.name='graphic-developer'
- AND product_area.valid=1
- AND product.valid=1")
- or die "Can\'t select table product";
- $query[0]->execute or die "Can\'t select table product";
- while ( ($product_id,$product_name,$vId,$dId,$svId,$sdId,$vendor_name,$vId,$bus_name,$subclass_name) = ($query[0]->fetchrow_array) ) {
- # Postinitialisierung, falls undefinierte Werte
- $vId = "----" if !defined($vId);
- $dId = "----" if !defined($dId);
- $svId = "----" if !defined($svId);
- $sdId = "----" if !defined($sdId);
-
- $vId = "" if $vId eq "----";
- $dId = "" if $dId eq "----";
- $svId = "" if $svId eq "----";
- $sdId = "" if $sdId eq "----";
-
- # Step 1: Erzeuge Zeilen für XFree 3 ohne 3D
- get_info $arch_name, "XFree3";
-
- # Step 2: Erzeuge Zeilen für XFree 3 mit 3D
- get_info $arch_name, "XFree3 with 3D";
-
- # Step 2: Erzeuge Zeilen für XFree 4 ohne 3D
- get_info $arch_name, "XFree4";
-
- # Step 2: Erzeuge Zeilen für XFree 4 mit 3D
- get_info $arch_name, "XFree4 with 3D";
-
- } # Ende der Produktschleife
- close(FH);
-} # Ende der Arch-Schleife
-
-
-
-
-sub multiple_supportedtopics {
- my $handle = shift;
- my $product_id = shift;
- my $product_name = shift;
- my $arch_name = shift;
- my $dist_name = shift;
- my $vario_name = shift;
- my ($query,$id,$value,$name,$time,$htime,%topic,$key,$answer,%key);
-
- my $min_key = "0";
- undef %key;
-
- print "\n *********** Unconsistency registered *******************";
- print "\nMultiple supported-topics:";
- print "\nProduct_name: $product_name ID=$product_id";
- print "\nArch=$arch_name Dist=$dist_name Vario=$vario_name";
- print "\n";
-
- $query = $handle->prepare("SELECT toolproperty.id,tooltopic.name,
- toolproperty.charvalue,toolproperty.createtime
- FROM toolproperty
- LEFT JOIN tooltopic ON toolproperty.tooltopic_id=tooltopic.id
- LEFT JOIN arch_dist_l_vario ON toolproperty.arch_dist_l_vario_id=arch_dist_l_vario.id
- LEFT JOIN arch ON arch_dist_l_vario.arch_id=arch.id
- LEFT JOIN distribution ON arch_dist_l_vario.distribution_id=distribution.id
- LEFT JOIN vario ON arch_dist_l_vario.vario_id=vario.id
- WHERE toolproperty.product_id=$product_id
- AND tooltopic.name='supported'
- AND toolproperty.valid=1
- AND arch.name='$arch_name'
- AND distribution.name='$dist_name'
- AND vario.name='$vario_name'")
- or die "Can\'t select table toolproperty";
- $query->execute or die "Can\'t select table toolproperty";
- while (($id,$name,$value,$time) = ($query->fetchrow_array)) {
- $htime = localtime($time);
- $topic{$id} = $htime." ".$value;
- $min_key = $id;
- }
- foreach $key (sort keys %topic) {
- $min_key = $key if $key<$min_key;
- }
- foreach $key (sort keys %topic) {
- print "\nD toolproperty-ID $key: $topic{$key}" if $key != $min_key;
- }
- print "\n* toolproperty-ID $min_key:$topic{$min_key}";
- print "\n\nDeleting doublettes marked with D (* will be left the valid one) [N|y] ?";
- $answer = <STDIN>;
- chop($answer);
- if ( ($answer eq "y") || ($answer eq "Y") ) {
- print "\n\nDeleting supported-doublettes.... done\n";
- foreach $key (keys %topic) {
- if ($key != $min_key) {
- $query = $handle->prepare("DELETE FROM toolproperty
- WHERE id=$key")
- or die "Can\'t delete from toolproperty";
- $query->execute or die "Can\'t delete from toolproperty";
- }
- }
- }
- return;
-}
-
+++ /dev/null
-#define _GNU_SOURCE /* memmem */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <inttypes.h>
-#include <unistd.h>
-#include <time.h>
-#include <getopt.h>
-
-#include "../hd/hddb_int.h"
-
-#define TAG_PCI 1 /* pci ids */
-#define TAG_EISA 2 /* eisa ids */
-#define TAG_USB 3 /* usb ids */
-#define TAG_SPECIAL 4 /* internally used ids */
-#define TAG_PCMCIA 5 /* pcmcia ids */
-
-#define ID_VALUE(id) ((id) & 0xffff)
-#define ID_TAG(id) (((id) >> 16) & 0xf)
-#define MAKE_ID(tag, id_val) ((tag << 16) | (id_val))
-
-typedef uint32_t hddb_entry_mask_t;
-
-typedef enum {
- match_any, match_all
-} match_t;
-
-typedef enum {
- pref_empty, pref_new, pref_and, pref_or, pref_add
-} prefix_t;
-
-typedef struct line_s {
- prefix_t prefix;
- hddb_entry_t key;
- char *value;
-} line_t;
-
-typedef struct str_s {
- struct str_s *next;
- char *str;
-} str_t;
-
-typedef struct list_any_s {
- struct list_any_s *next;
-} list_any_t;
-
-typedef struct {
- void *first;
- void *last;
-} list_t;
-
-typedef struct {
- unsigned flag;
- unsigned remove;
-} hid_any_t;
-
-typedef struct {
- unsigned flag;
- unsigned remove;
- unsigned tag;
- unsigned id;
- unsigned range;
- unsigned mask;
- struct {
- unsigned range:1;
- unsigned mask:1;
- } has;
-} hid_num_t;
-
-typedef struct {
- unsigned flag;
- unsigned remove;
- list_t list;
-} hid_str_t;
-
-typedef union {
- hid_any_t any;
- hid_num_t num;
- hid_str_t str;
-} hid_t;
-
-typedef struct skey_s {
- struct skey_s *next;
- hid_t *hid[he_nomask];
-} skey_t;
-
-typedef struct item_s {
- struct item_s *next;
- unsigned remove:1;
- char *pos;
- list_t key; /* skey_t */
- skey_t *value;
-} item_t;
-
-
-typedef struct hddb_list_s {
- hddb_entry_mask_t key_mask;
- hddb_entry_mask_t value_mask;
- unsigned key;
- unsigned value;
-} hddb_list_t;
-
-typedef struct {
- unsigned list_len, list_max;
- hddb_list_t *list;
- unsigned ids_len, ids_max;
- unsigned *ids;
- unsigned strings_len, strings_max;
- char *strings;
-} hddb_data_t;
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-#ifdef UCLIBC
-void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen);
-#endif
-void *new_mem(size_t size);
-void *free_mem(void *ptr);
-char *new_str(char *str);
-void *add_list(list_t *list, void *entry);
-void sort_list(list_t *list, int (*cmp_func)(const void *, const void *));
-unsigned eisa_id(char *s);
-char *eisa_str(unsigned id);
-void write_stats(FILE *f);
-
-void read_items(char *file);
-line_t *parse_line(char *str);
-hddb_entry_mask_t add_entry(skey_t *skey, hddb_entry_t idx, char *val);
-
-void write_items(char *file, list_t *hd);
-void write_item(FILE *f, item_t *item);
-void write_skey(FILE *f, prefix_t pre, skey_t *skey);
-void write_ent_name(FILE *f, hid_t *hid, char pre, hddb_entry_t ent);
-void write_id(FILE *f, hddb_entry_t ent, hid_t *hid);
-void write_drv(FILE *f, char pre, hid_t *hid);
-void write_drv1(FILE *f, hid_t *hid, char pre, char *val);
-void log_items(FILE *f, item_t *item0, item_t *item1);
-
-int count_common_hids(skey_t *skey0, skey_t *skey1);
-int strip_skey(skey_t *skey0, skey_t *skey1, int do_it);
-void remove_deleted_hids(skey_t *skey);
-void undelete_hids(skey_t *skey);
-str_t *split(char del, char *s);
-char *join(char del, str_t *str);
-
-int cmp_driver_info(char *str0, char *str1);
-int cmp_str_s(const void *p0, const void *p1);
-int cmp_hid(hid_t *hid0, hid_t *hid1);
-int cmp_skey(skey_t *skey0, skey_t *skey1);
-int cmp_skey_s(const void *p0, const void *p1);
-int cmp_item(item_t *item0, item_t *item1);
-int cmp_item_s(const void *p0, const void *p1);
-
-int match_hid(hid_t *hid0, hid_t *hid1, match_t match);
-int match_skey(skey_t *skey0, skey_t *skey1, match_t match);
-int match_item(item_t *item0, item_t *item1, match_t match);
-
-int combine_keys(skey_t *skey0, skey_t *skey1);
-
-str_t *clone_str(str_t *str);
-hid_t *clone_hid(hid_t *hid);
-skey_t *clone_skey(skey_t *skey);
-item_t *clone_item(item_t *item);
-
-str_t *free_str(str_t *str, int follow_next);
-hid_t *free_hid(hid_t *hid);
-skey_t *free_skey(skey_t *skey, int follow_next);
-item_t *free_item(item_t *item, int follow_next);
-
-unsigned driver_entry_types(hid_t *hid);
-
-void remove_items(list_t *hd);
-void remove_nops(list_t *hd);
-void check_items(list_t *hd);
-void split_items(list_t *hd);
-void combine_driver(list_t *hd);
-void combine_requires(list_t *hd);
-void join_items_by_value(list_t *hd);
-void join_items_by_key(list_t *hd);
-void remove_unimportant_items(list_t *hd);
-
-void write_cfile(FILE *f, list_t *hd);
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-struct option options[] = {
- { "help", 0, NULL, 1 },
-// { "debug", 1, NULL, 2 },
- { "log", 1, NULL, 3 },
- { "mini", 0, NULL, 4 },
- { "sort", 0, NULL, 5 },
- { "reverse", 0, NULL, 6 }, /* for debugging */
- { "random", 0, NULL, 7 }, /* dto */
- { "check", 0, NULL, 8 },
- { "with-source", 0, NULL, 9 },
- { "out", 1, NULL, 10},
- { "split", 0, NULL, 11},
- { "cfile", 1, NULL, 12},
- { "no-compact", 0, NULL, 13},
- { "join-keys-first", 0, NULL, 14},
- { "combine", 0, NULL, 15},
- { }
-};
-
-list_t hd;
-
-char *item_ind = NULL;
-FILE *logfh = NULL;
-
-struct {
- int debug;
- unsigned sort:1;
- unsigned reverse:1;
- unsigned random:1;
- unsigned check:1;
- unsigned with_source:1;
- unsigned mini:1;
- unsigned split:1;
- unsigned no_compact:1;
- unsigned join_keys_first:1;
- unsigned combine:1; /* always combine driver info */
- char *logfile;
- char *outfile;
- char *cfile;
-} opt = {
- logfile: "hd.log",
- outfile: "hd.ids"
-};
-
-struct {
- unsigned items_in, items_out;
- unsigned diffs, errors, errors_res;
-} stats;
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-int main(int argc, char **argv)
-{
- int i, close_log = 0, close_cfile = 0;
- item_t *item;
- FILE *cfile;
-
- for(opterr = 0; (i = getopt_long(argc, argv, "", options, NULL)) != -1; ) {
- switch(i) {
-#if 0
- case 2:
- opt.debug = strtol(optarg, NULL, 0);
- break;
-#endif
-
- case 3:
- opt.logfile = optarg;
- if(!*opt.logfile) opt.logfile = NULL;
- break;
-
- case 4:
- opt.mini = 1;
- break;
-
- case 5:
- opt.sort = 1;
- break;
-
- case 6:
- opt.reverse = 1;
- break;
-
- case 7:
- opt.random = 1;
- srand(time(NULL));
- break;
-
- case 8:
- opt.check = 1;
- break;
-
- case 9:
- opt.with_source = 1;
- break;
-
- case 10:
- opt.outfile = optarg;
- if(!*opt.outfile) opt.outfile = NULL;
- break;
-
- case 11:
- opt.split = 1;
- break;
-
- case 12:
- opt.cfile = optarg;
- if(!*opt.cfile) opt.cfile = NULL;
- break;
-
- case 13:
- opt.no_compact = 1;
- break;
-
- case 14:
- opt.join_keys_first = 1;
- break;
-
- case 15:
- opt.combine = 1;
- break;
-
- default:
- fprintf(stderr,
- "Usage: check_hd [options] files\n"
- "Try to put hardware data into a consistent form.\n"
- " --check\t\tdo a lot of checks and remove unnecessary data\n"
- " --sort\t\tsort data\n"
- " --reverse\t\treverse sorting order\n"
- " --split\t\twrite separate entries for each key\n"
- " --with-source\t\tadd comment to each item indicating info source\n"
- " --mini\t\tminimal data base (basically driver info only)\n"
- " --join-keys-first\twhen combining similar items, join entries with\n"
- " \t\t\tcommon keys first (default is common values first)\n"
- " --cfile file\t\tcreate C file to be included in libhd\n"
- " --no-compact\t\tdon't try to make C version as small as possible\n"
- " --out file\t\twrite results to file, default is \"hd.ids\"\n"
- " --log file\t\twrite log info to file, default is \"hd.log\"\n\n"
- " Note: check_hd works with libhd/hwinfo internal format only;\n"
- " to convert to other formats, use convert_hd\n"
- );
- return 1;
- }
- }
-
- if(opt.logfile && strcmp(opt.logfile, "-")) {
- logfh = fopen(opt.logfile, "w");
- if(!logfh) {
- perror(opt.logfile);
- return 3;
- }
- close_log = 1;
- }
- else {
- logfh = stdout;
- }
-
- for(argv += optind; *argv; argv++) {
- read_items(*argv);
- }
-
- for(item = hd.first; item; item = item->next) stats.items_in++;
-
- fprintf(logfh, "- removing useless entries\n");
- fflush(logfh);
- remove_nops(&hd);
-
- if(opt.mini) {
- fprintf(logfh, "- building mini version\n");
- fflush(logfh);
- remove_unimportant_items(&hd);
- }
-
- if(opt.check || opt.split) {
- fprintf(logfh, "- splitting entries\n");
- fflush(logfh);
- split_items(&hd);
- }
-
- if(opt.check) {
- fprintf(logfh, "- combining driver info\n");
- fflush(logfh);
- combine_driver(&hd);
-
- fprintf(logfh, "- combining requires info\n");
- fflush(logfh);
- combine_requires(&hd);
-
- fprintf(logfh, "- checking for consistency\n");
- fflush(logfh);
- check_items(&hd);
-
- fprintf(logfh, "- join items\n");
- fflush(logfh);
- if(opt.join_keys_first) {
- join_items_by_key(&hd);
- join_items_by_value(&hd);
- }
- else {
- join_items_by_value(&hd);
- join_items_by_key(&hd);
- }
-
- if(opt.split) split_items(&hd);
- }
-
- if(opt.sort) {
- fprintf(logfh, "- sorting\n");
- fflush(logfh);
- sort_list(&hd, cmp_item_s);
- }
-
- for(item = hd.first; item; item = item->next) stats.items_out++;
-
- write_items(opt.outfile, &hd);
-
- if(opt.cfile) {
- if(opt.cfile && strcmp(opt.cfile, "-")) {
- cfile = fopen(opt.cfile, "w");
- if(!cfile) {
- perror(opt.cfile);
- return 3;
- }
- close_cfile = 1;
- }
- else {
- cfile = stdout;
- }
-
- split_items(&hd);
-
- write_cfile(cfile, &hd);
-
- if(close_cfile) fclose(cfile);
- }
-
- fprintf(logfh, "- statistics\n");
- write_stats(logfh);
- if(logfh != stdout) {
- if(opt.outfile && strcmp(opt.outfile, "-")) {
- fprintf(stderr, "data written to \"%s\"\n", opt.outfile);
- }
- if(opt.logfile && strcmp(opt.logfile, "-")) {
- fprintf(stderr, "log written to \"%s\"\n", opt.logfile);
- }
- fprintf(stderr, "statistics:\n");
- write_stats(stderr);
- }
-
- free_item(hd.first, 1);
-
- if(close_log) fclose(logfh);
-
- return 0;
-}
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void *new_mem(size_t size)
-{
- if(size == 0) return NULL;
-
- return calloc(size, 1);
-}
-
-
-void *free_mem(void *ptr)
-{
- if(ptr) free(ptr);
-
- return NULL;
-}
-
-
-char *new_str(char *str)
-{
- if(!str) return NULL;
-
- return strdup(str);
-}
-
-
-void *add_list(list_t *list, void *entry)
-{
- if(list->last) {
- ((list_any_t *) list->last)->next = entry;
- }
- list->last = entry;
-
- if(!list->first) {
- list->first = entry;
- }
-
- return entry;
-}
-
-
-void sort_list(list_t *list, int (*cmp_func)(const void *, const void *))
-{
- int i, list_len = 0;
- list_any_t *list_entry;
- list_t new_list = {};
- list_any_t **list_array;
-
- for(list_entry = list->first; list_entry; list_entry = list_entry->next) list_len++;
- if(list_len < 2) return;
-
- list_array = new_mem(list_len * sizeof *list_array);
- for(i = 0, list_entry = list->first; list_entry; list_entry = list_entry->next) {
- list_array[i++] = list_entry;
- }
-
- qsort(list_array, list_len, sizeof *list_array, cmp_func);
-
- for(i = 0; i < list_len; i++) {
- add_list(&new_list, list_array[i]);
- }
-
- if(new_list.last) {
- ((list_any_t *) new_list.last)->next = NULL;
- }
-
- *list = new_list;
-
- free_mem(list_array);
-}
-
-
-unsigned eisa_id(char *s)
-{
- int i;
- unsigned u = 0;
-
- for(i = 0; i < 3; i++) {
- u <<= 5;
- if(s[i] < 'A' - 1 || s[i] > 'A' - 1 + 0x1f) return 0;
- u += s[i] - 'A' + 1;
- }
-
- return MAKE_ID(TAG_EISA, u);
-}
-
-
-char *eisa_str(unsigned id)
-{
- static char s[4];
-
- s[0] = ((id >> 10) & 0x1f) + 'A' - 1;
- s[1] = ((id >> 5) & 0x1f) + 'A' - 1;
- s[2] = ( id & 0x1f) + 'A' - 1;
- s[3] = 0;
-
- return s;
-}
-
-
-void write_stats(FILE *f)
-{
- fprintf(f, " %u inconsistencies%s\n", stats.diffs, stats.diffs ? " fixed" : "");
- fprintf(f, " %u errors", stats.errors + stats.errors_res);
- if(stats.errors_res) fprintf(f, ", %u resolved", stats.errors_res);
- fprintf(f, "\n");
- fprintf(f, " %u items in\n", stats.items_in);
- fprintf(f, " %u items out\n", stats.items_out);
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void read_items(char *file)
-{
- FILE *f;
- char buf[1024], fpos[256];
- unsigned u, state, l_nr;
- hddb_entry_mask_t entry_mask = 0;
- line_t *l;
- item_t *item;
- skey_t *skey;
-
- if(!(f = fopen(file, "r"))) {
- perror(file);
- return;
- }
-
- item = new_mem(sizeof *item);
- skey = new_mem(sizeof *skey);
-
- sprintf(fpos, "%s(1)", file);
- item->pos = new_str(fpos);
-
- for(l_nr = 1, state = 0; fgets(buf, sizeof buf, f); l_nr++) {
- l = parse_line(buf);
- if(!l) {
- fprintf(stderr, "%s: invalid line\n", fpos);
- state = 4;
- break;
- };
- if(l->prefix == pref_empty) continue;
- switch(l->prefix) {
- case pref_new:
- if(state == 1) {
- add_list(&item->key, skey);
- skey = new_mem(sizeof *skey);
- }
- else if(state == 2) {
- item->value = skey;
- skey = new_mem(sizeof *skey);
- }
- if(state == 2 || state == 1) {
- add_list(&hd, item);
- item = new_mem(sizeof *item);
- if(!item->pos) {
- sprintf(fpos, "%s(%d)", file, l_nr);
- item->pos = new_str(fpos);
- }
- }
- entry_mask = 0;
- state = 1;
- break;
-
- case pref_and:
- if(state != 1) {
- fprintf(stderr, "%s: must start item first\n", fpos);
- state = 4;
- break;
- }
- break;
-
- case pref_or:
- if(state != 1 || !entry_mask) {
- fprintf(stderr, "%s: must start item first\n", fpos);
- state = 4;
- break;
- }
- add_list(&item->key, skey);
- skey = new_mem(sizeof *skey);
- entry_mask = 0;
- break;
-
- case pref_add:
- if(state == 1 && !entry_mask) {
- fprintf(stderr, "%s: driver info not allowed\n", fpos);
- state = 4;
- break;
- }
- if(state == 1) {
- add_list(&item->key, skey);
- skey = new_mem(sizeof *skey);
- entry_mask = 0;
- state = 2;
- }
- if(state != 2) {
- fprintf(stderr, "%s: driver info not allowed\n", fpos);
- state = 4;
- break;
- }
- break;
-
- default:
- state = 4;
- }
-
- if(state != 4) {
- u = add_entry(skey, l->key, l->value);
- if(u) {
- entry_mask |= u;
- }
- else {
- fprintf(stderr, "%s: invalid info\n", fpos);
- state = 4;
- }
- }
-
- if(state == 4) break; /* error */
-
- }
-
- /* finalize last item */
- if(entry_mask && (state == 1 || state == 2)) {
- if(state == 1) {
- add_list(&item->key, skey);
- skey = NULL;
- }
- else if(state == 2) {
- item->value = skey;
- skey = NULL;
- }
- add_list(&hd, item);
- item = NULL;
- }
-
- free_mem(skey);
- free_mem(item);
-
- fclose(f);
-}
-
-
-line_t *parse_line(char *str)
-{
- static line_t l;
- char *s;
- int i;
-
- /* drop leading spaces */
- while(isspace(*str)) str++;
-
- /* skip emtpy lines and comments */
- if(!*str || *str == ';' || *str == '#') {
- l.prefix = pref_empty;
- return &l;
- }
-
- l.prefix = pref_new;
-
- switch(*str) {
- case '&':
- l.prefix = pref_and;
- str++;
- break;
-
- case '|':
- l.prefix = pref_or;
- str++;
- break;
-
- case '+':
- l.prefix = pref_add;
- str++;
- break;
- }
-
- /* skip spaces */
- while(isspace(*str)) str++;
-
- s = str;
- while(*str && !isspace(*str)) str++;
- if(*str) *str++ = 0;
- while(isspace(*str)) str++;
-
- for(i = 0; (unsigned) i < sizeof hddb_entry_strings / sizeof *hddb_entry_strings; i++) {
- if(!strcmp(s, hddb_entry_strings[i])) {
- l.key = i;
- break;
- }
- }
-
- if((unsigned) i >= sizeof hddb_entry_strings / sizeof *hddb_entry_strings) return NULL;
-
- l.value = str;
-
- /* drop trailing white space */
- i = strlen(str);
- while(i > 0) {
- if(isspace(str[i - 1]))
- str[--i] = 0;
- else
- break;
- }
-
- /* special case: drop leading and final double quotes, if any */
- i = strlen(l.value);
- if(i >= 2 && l.value[0] == '"' && l.value[i - 1] == '"') {
- l.value[i - 1] = 0;
- l.value++;
- }
-
- // fprintf(stderr, "pre = %d, key = %d, val = \"%s\"\n", l.prefix, l.key, l.value);
-
- return &l;
-}
-
-
-int parse_id(char *str, unsigned *id, unsigned *tag, unsigned *range, unsigned *mask)
-{
- static unsigned id0, val;
- char c = 0, *s, *t = NULL;
-
- *id = *tag = *range = *mask = 0;
-
- if(!str || !*str) return 0;
-
- for(s = str; *str && !isspace(*str); str++);
- if(*str) {
- c = *(t = str); /* remember for later */
- *str++ = 0;
- }
- while(isspace(*str)) str++;
-
- if(*s) {
- if(!strcmp(s, "pci")) *tag = TAG_PCI;
- else if(!strcmp(s, "usb")) *tag = TAG_USB;
- else if(!strcmp(s, "special")) *tag = TAG_SPECIAL;
- else if(!strcmp(s, "eisa")) *tag = TAG_EISA;
- else if(!strcmp(s, "isapnp")) *tag = TAG_EISA;
- else if(!strcmp(s, "pcmcia")) *tag = TAG_PCMCIA;
- else {
- str = s;
- if(t) *t = c; /* restore */
- }
- }
-
- id0 = strtoul(str, &s, 0);
-
- if(s == str) {
- id0 = eisa_id(str);
- if(!id0) return 0;
- s = str + 3;
- id0 = ID_VALUE(id0);
- if(!*tag) *tag = TAG_EISA;
- }
-
- while(isspace(*s)) s++;
- if(*s && *s != '&' && *s != '+') return 0;
-
- *id = id0;
-
- if(!*s) return 1;
-
- c = *s++;
-
- while(isspace(*s)) s++;
-
- val = strtoul(s, &str, 0);
-
- if(s == str) return 0;
-
- while(isspace(*str)) str++;
-
- if(*str) return 0;
-
- if(c == '+') *range = val; else *mask = val;
-
- return c == '+' ? 2 : 3;
-}
-
-
-hddb_entry_mask_t add_entry(skey_t *skey, hddb_entry_t idx, char *val)
-{
- hddb_entry_mask_t e_mask = 0;
- int i;
- unsigned id, tag, range, mask;
- char *s, *s1, *s2, c;
- hid_t *hid;
- str_t *str;
-
- for(i = 0; (unsigned) i < sizeof hddb_is_numeric / sizeof *hddb_is_numeric; i++) {
- if(idx == hddb_is_numeric[i]) break;
- }
-
- // printf("i = %d, idx = %d, val = >%s<\n", i, idx, val);
-
- if((unsigned) i < sizeof hddb_is_numeric / sizeof *hddb_is_numeric) {
- /* numeric id */
- e_mask |= 1 << idx;
-
- i = parse_id(val, &id, &tag, &range, &mask);
-
- // printf("parse_id = %d\n", i);
-
- if(i) {
- skey->hid[idx] = hid = new_mem(sizeof *hid);
- hid->num.flag = FLAG_ID;
- hid->num.tag = tag;
- hid->num.id = id;
- }
- else {
- return 0;
- }
-
- switch(i) {
- case 1:
- break;
-
- case 2:
- hid->num.range = range;
- hid->num.has.range = 1;
- break;
-
- case 3:
- hid->num.mask = mask;
- hid->num.has.mask = 1;
- break;
-
- default:
- return 0;
- }
- }
- else {
- if(idx < he_nomask) {
- /* strings */
-
- e_mask |= 1 << idx;
- skey->hid[idx] = hid = new_mem(sizeof *hid);
- hid->str.flag = FLAG_STRING;
- str = add_list(&hid->str.list, new_mem(sizeof *str));
- str->str = new_str(val);
- }
- else {
- /* special */
-
- if(idx == he_class_id) {
- i = parse_id(val, &id, &tag, &range, &mask);
- if(i != 1) return 0;
-
- skey->hid[he_baseclass_id] = hid = new_mem(sizeof *hid);
- hid->num.flag = FLAG_ID;
- hid->num.tag = tag;
- hid->num.id = id >> 8;
-
- skey->hid[he_subclass_id] = hid = new_mem(sizeof *hid);
- hid->num.flag = FLAG_ID;
- hid->num.tag = tag;
- hid->num.id = id & 0xff;
-
- e_mask |= (1 << he_baseclass_id) + (1 << he_subclass_id) /* + (1 << he_progif_id) */;
- }
- else {
- switch(idx) {
- case he_driver_module_insmod:
- c = 'i';
- break;
-
- case he_driver_module_modprobe:
- c = 'm';
- break;
-
- case he_driver_module_config:
- c = 'M';
- break;
-
- case he_driver_xfree:
- c = 'x';
- break;
-
- case he_driver_xfree_config:
- c = 'X';
- break;
-
- case he_driver_mouse:
- c = 'p';
- break;
-
- case he_driver_display:
- c = 'd';
- break;
-
- case he_driver_any:
- c = 'a';
- break;
-
- default:
- c = 0;
- break;
- }
- if(c) {
- s = new_mem(strlen(val) + 3);
- s[0] = c;
- s[1] = '\t';
- strcpy(s + 2, val);
- hid = skey->hid[he_driver];
- if(!hid) {
- skey->hid[he_driver] = hid = new_mem(sizeof *hid);
- hid->str.flag = FLAG_STRING;
- }
- if(
- (c == 'X' || c == 'M') &&
- hid->str.list.last &&
- (s1 = ((str_t *) hid->str.list.last)->str)
- ) {
- s2 = new_mem(strlen(s1) + strlen(s) + 2);
- sprintf(s2, "%s\001%s", s1, s);
- free_mem(s1);
- ((str_t *) hid->str.list.last)->str = s2;
- }
- else {
- str = add_list(&hid->str.list, new_mem(sizeof *str));
- str->str = new_str(s);
- }
- e_mask |= (1 << he_driver);
- s = free_mem(s);
- }
- }
- }
- }
-
- return e_mask;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void write_items(char *file, list_t *hd)
-{
- FILE *f;
- item_t *item;
- int close_it = 0;
-
- if(file && strcmp(file, "-")) {
- f = fopen(file, "w");
- if(!f) {
- perror(file);
- return;
- }
- close_it = 1;
- }
- else {
- f = stdout;
- }
-
- for(item = hd->first; item; item = item->next) {
- if(opt.with_source) fprintf(f, "# %s\n", item->pos);
- write_item(f, item);
- fputc('\n', f);
- }
-
- if(close_it) fclose(f);
-}
-
-
-void write_item(FILE *f, item_t *item)
-{
- skey_t *skey;
- prefix_t pre;
-
- pre = pref_new;
- for(skey = item->key.first; skey; skey = skey->next) {
- write_skey(f, pre, skey);
- pre = pref_or;
- }
- write_skey(f, pref_add, item->value);
-}
-
-
-void write_skey(FILE *f, prefix_t pre, skey_t *skey)
-{
- static char pref_char[5] = { ' ', ' ', '&', '|', '+' };
- int i;
-
- if(pre >= sizeof pref_char) {
- fprintf(stderr, "internal oops\n");
- exit(2);
- }
-
- if(!skey) return;
-
- for(i = 0; (unsigned) i < sizeof skey->hid / sizeof *skey->hid; i++) {
- if(skey->hid[i]) {
- if(i != he_driver) {
- write_ent_name(f, skey->hid[i], pref_char[pre], i);
- write_id(f, i, skey->hid[i]);
- fputc('\n', f);
- }
- else {
- write_drv(f, pref_char[pre], skey->hid[i]);
- }
- if(pre != pref_add) pre = pref_and;
- }
- }
-}
-
-
-void write_ent_name(FILE *f, hid_t *hid, char pre, hddb_entry_t ent)
-{
- int len, tab_ind = 24;
- char c;
-
- if(ent >= sizeof hddb_entry_strings / sizeof *hddb_entry_strings) {
- fprintf(stderr, "internal oops\n");
- exit(2);
- }
-
- len = item_ind ? strlen(item_ind) : 0;
-
- if(!len) {
- fprintf(f, "%c%s\t", pre, hddb_entry_strings[ent]);
- }
- else {
- c = hid->any.remove ? '*' : ':';
- fprintf(f, "%s%c %c%s\t", item_ind, c, pre, hddb_entry_strings[ent]);
- len += 2;
- tab_ind += 8;
- }
-
- len += strlen(hddb_entry_strings[ent]) + 1;
-
- for(len = (len & ~7) + 8; len < tab_ind; len += 8) {
- fputc('\t', f);
- }
-}
-
-
-void write_id(FILE *f, hddb_entry_t ent, hid_t *hid)
-{
- static char *tag_name[6] = { "", "pci ", "eisa ", "usb ", "special ", "pcmcia " };
- int tag;
- unsigned u;
- char c;
-
- switch(hid->any.flag) {
- case FLAG_ID:
- tag = hid->num.tag;
- if((unsigned) tag >= sizeof tag_name / sizeof *tag_name) {
- fprintf(stderr, "internal oops\n");
- exit(2);
- }
- if(tag == TAG_EISA && (ent == he_vendor_id || ent == he_subvendor_id)) {
- fprintf(f, "%s", eisa_str(hid->num.id));
- }
- else {
- u = 4;
- if(ent == he_bus_id || ent == he_subclass_id || ent == he_progif_id) {
- u = 2;
- }
- else if(ent == he_baseclass_id) {
- u = 3;
- }
- fprintf(f, "%s0x%0*x", tag_name[tag], u, hid->num.id);
- }
- if(hid->num.has.range || hid->num.has.mask) {
- if(hid->num.has.range) {
- u = hid->num.range;
- c = '+';
- }
- else {
- u = hid->num.mask;
- c = '&';
- }
- fprintf(f, "%c0x%04x", c, u);
- }
- break;
-
- case FLAG_STRING:
- if( /* not exactly 1 string */
- !hid->str.list.first ||
- ((str_t *) hid->str.list.first)->next
- ) {
- fprintf(stderr, "internal oops\n");
- exit(2);
- }
- fprintf(f, "%s", ((str_t *) hid->str.list.first)->str);
- break;
-
- default:
- fprintf(stderr, "internal oops\n");
- exit(2);
- break;
- }
-}
-
-
-void write_drv(FILE *f, char pre, hid_t *hid)
-{
- str_t *str;
- char *s, *t;
-
- if(hid->any.flag != FLAG_STRING) {
- fprintf(stderr, "internal oops\n");
- exit(2);
- }
-
- for(str = hid->str.list.first; str; str = str->next) {
- for(s = str->str; (t = strchr(s, '\001')); s = t + 1) {
- *t = 0;
- write_drv1(f, hid, pre, s);
- *t = '\001';
- }
- write_drv1(f, hid, pre, s);
- }
-}
-
-
-void write_drv1(FILE *f, hid_t *hid, char pre, char *val)
-{
- char type;
- int ent;
-
- type = val[0];
- if(!type || val[1] != '\t') {
- fprintf(stderr, "internal oops\n");
- exit(2);
- }
-
- switch(type) {
- case 'x':
- ent = he_driver_xfree;
- break;
-
- case 'X':
- ent = he_driver_xfree_config;
- break;
-
- case 'i':
- ent = he_driver_module_insmod;
- break;
-
- case 'm':
- ent = he_driver_module_modprobe;
- break;
-
- case 'M':
- ent = he_driver_module_config;
- break;
-
- case 'p':
- ent = he_driver_mouse;
- break;
-
- case 'd':
- ent = he_driver_display;
- break;
-
- case 'a':
- ent = he_driver_any;
- break;
-
- default:
- fprintf(stderr, "internal oops\n");
- exit(2);
- break;
- }
-
- write_ent_name(f, hid, pre, ent);
- fprintf(f, "%s\n", val + 2);
-
-}
-
-
-void log_items(FILE *f, item_t *item0, item_t *item1)
-{
- char *save_ind = item_ind;
-
- if(item0) {
- item_ind = " 0";
- write_item(f, item0);
- }
-
- if(item1) {
- item_ind = " 1";
- write_item(f, item1);
- }
-
- item_ind = save_ind;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-/* count common defined hid entries */
-int count_common_hids(skey_t *skey0, skey_t *skey1)
-{
- int i, cnt = 0;
-
- if(!skey0 || !skey1) return 0;
-
- for(i = 0; (unsigned) i < sizeof skey0->hid / sizeof *skey0->hid; i++) {
- if(skey0->hid[i] && skey1->hid[i]) cnt++;
- }
-
- return cnt;
-}
-
-
-/*
- * remove hid entries from skey0 that are defined in skey1
- *
- * do_it:
- * 0: don't remove anything, just count
- * 1: remove identical entries
- * 2: remove differing entries
- * 3: both of the above
- *
- * return
- * bits 0- 7: identical entries
- * 8-15: different entries
- * 16-23: critical conflicts
- */
-int strip_skey(skey_t *skey0, skey_t *skey1, int do_it)
-{
- int i, cnt;
-
- for(i = cnt = 0; (unsigned) i < sizeof skey0->hid / sizeof *skey0->hid; i++) {
- if(!skey0->hid[i] || !skey1->hid[i]) continue;
- if(cmp_hid(skey0->hid[i], skey1->hid[i])) {
- cnt += 1 << 8;
- if(i == he_driver || i == he_requires) {
- cnt += 1 << 16;
- }
- if((do_it & 2)) skey0->hid[i]->any.remove = 1;
- }
- else {
- cnt++;
- if((do_it & 1)) skey0->hid[i]->any.remove = 1;
- }
- }
-
- return cnt;
-}
-
-
-/*
- * remove deleted hid entries from skey
- */
-void remove_deleted_hids(skey_t *skey)
-{
- int i;
-
- for(i = 0; (unsigned) i < sizeof skey->hid / sizeof *skey->hid; i++) {
- if(skey->hid[i] && skey->hid[i]->any.remove) {
- skey->hid[i] = free_hid(skey->hid[i]);
- }
- }
-}
-
-
-/*
- * undeleted hid entries from skey
- */
-void undelete_hids(skey_t *skey)
-{
- int i;
-
- for(i = 0; (unsigned) i < sizeof skey->hid / sizeof *skey->hid; i++) {
- if(skey->hid[i]) skey->hid[i]->any.remove = 0;
- }
-}
-
-
-str_t *split(char del, char *s)
-{
- char *t, *s0;
- list_t list = {};
- str_t *str;
-
- if(!s) return NULL;
-
- for(s0 = s = new_str(s); (t = strchr(s, del)); s = t + 1) {
- *t = 0;
- str = add_list(&list, new_mem(sizeof *str));
- str->str = new_str(s);
- }
- str = add_list(&list, new_mem(sizeof *str));
- str->str = new_str(s);
-
- free_mem(s0);
-
- return list.first;
-}
-
-
-char *join(char del, str_t *str)
-{
- char *s, t[2];
- str_t *str0;
- int len = 0;
-
- for(str0 = str; str0; str0 = str0->next) {
- len += strlen(str0->str) + 1;
- }
-
- if(!len) return NULL;
-
- s = new_mem(len);
-
- t[0] = del; t[1] = 0;
-
- for(; str; str = str->next) {
- strcat(s, str->str);
- if(str->next) strcat(s, t);
- }
-
- return s;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-/*
- * str0 & str1 _must_ hold valid driver info
- */
-int cmp_driver_info(char *str0, char *str1)
-{
- char type0, type1;
- str_t *sl0, *sl1;
- int _3d0, _3d1, res;
-
- type0 = *str0;
- type1 = *str1;
-
- if(type0 == 'a' || type1 == 'a') {
- if(type0 == 'a' && type1 == 'a') return 0;
- if(type0 == 'a') return 1;
- return -1;
- }
-
- if(type0 != 'x' || type1 != 'x') return 0;
-
- str0 += 2;
- str1 += 2;
-
- sl0 = split('|', str0);
- sl1 = split('|', str1);
-
- res = 0;
-
- if(sl0 && sl1) {
-
- /* xfree v4 first, then xfree v3 */
- if(*sl0->str != *sl1->str) res = *sl0->str < *sl1->str ? 1 : -1;
-
- if(!res) {
- _3d0 = _3d1 = 0;
-
- if(sl0->next && sl0->next->next && *sl0->next->next->str) _3d0 = 1;
- if(sl1->next && sl1->next->next && *sl1->next->next->str) _3d1 = 1;
-
- /* entries without 3d support first */
- res = _3d0 - _3d1;
- }
- }
-
- free_str(sl0, 1);
- free_str(sl1, 1);
-
- return res;
-}
-
-
-/* wrapper for qsort */
-int cmp_str_s(const void *p0, const void *p1)
-{
- str_t **str0, **str1;
-
- str0 = (str_t **) p0;
- str1 = (str_t **) p1;
-
- return strcmp((*str0)->str, (*str1)->str);
-}
-
-
-int cmp_hid(hid_t *hid0, hid_t *hid1)
-{
- int i = 0;
- str_t *str0, *str1;
-
- if(!hid0 && !hid1) return 0;
- if(!hid0) return -1;
- if(!hid1) return 1;
-
- if(hid0->any.flag != hid1->any.flag) {
- return hid0->any.flag < hid1->any.flag ? -1 : 1;
- }
-
- if(hid0->any.flag == FLAG_STRING) {
- str0 = hid0->str.list.first;
- str1 = hid1->str.list.first;
- for(; str0 && str1; str0 = str0->next, str1 = str1->next) {
- i = strcmp(str0->str, str1->str);
- if(i) {
- i = i > 0 ? 1 : -1;
- break;
- }
- }
- if(!i) {
- if(str0) i = 1; else if(str1) i = -1;
- }
- }
- else if(hid0->any.flag == FLAG_ID) {
- if(hid0->num.tag != hid1->num.tag) {
- i = hid0->num.tag < hid1->num.tag ? -1 : 1;
- }
- else if(hid0->num.id != hid1->num.id) {
- i = hid0->num.id < hid1->num.id ? -1 : 1;
- }
- else if(hid0->num.has.range || hid1->num.has.range) {
- if(!hid0->num.has.range) {
- i = -1;
- }
- else if(!hid1->num.has.range) {
- i = 1;
- }
- else if(hid0->num.range != hid1->num.range) {
- i = hid0->num.range < hid1->num.range ? -1 : 1;
- }
- }
- else if(hid0->num.has.mask || hid1->num.has.mask) {
- if(!hid0->num.has.mask) {
- i = -1;
- }
- else if(!hid1->num.has.mask) {
- i = 1;
- }
- else if(hid0->num.mask != hid1->num.mask) {
- i = hid0->num.mask < hid1->num.mask ? -1 : 1;
- }
- }
- }
-
- return i;
-}
-
-
-int cmp_skey(skey_t *skey0, skey_t *skey1)
-{
- int i, j, len0, len1, len;
-
- if(!skey0 && !skey1) return 0;
- if(!skey0) return -1;
- if(!skey1) return 1;
-
- for(i = len0 = len1 = 0; (unsigned) i < sizeof skey0->hid / sizeof *skey0->hid; i++) {
- if(skey0->hid[i]) len0 = i;
- if(skey1->hid[i]) len1 = i;
- }
- len0++;
- len1++;
-
- // printf("len0 = %d, len1 = %d\n", len0, len1);
-
- len = len0 < len1 ? len0 : len1;
-
- for(i = j = 0; j < len; j++) {
- // printf("0: j = %d\n", j);
-
- if(!skey0->hid[j] && !skey1->hid[j]) continue;
-
- /* note: this looks reversed, but is intentional! */
- if(!skey0->hid[j]) { i = 1; break; }
- if(!skey1->hid[j]) { i = -1; break; }
-
- i = cmp_hid(skey0->hid[j], skey1->hid[j]);
- // printf("1: j = %d, i = %d\n", j, i);
-
- if(i) break;
- }
-
- if(!i && len0 != len1) {
- i = len0 > len1 ? 1 : -1;
- }
-
- return i;
-}
-
-
-/* wrapper for qsort */
-int cmp_skey_s(const void *p0, const void *p1)
-{
- skey_t **skey0, **skey1;
-
- skey0 = (skey_t **) p0;
- skey1 = (skey_t **) p1;
-
- return cmp_skey(*skey0, *skey1);
-}
-
-
-int cmp_item(item_t *item0, item_t *item1)
-{
- int i;
- skey_t *skey0, *skey1;
-
- skey0 = item0->key.first;
- skey1 = item1->key.first;
- for(i = 0; skey0 && skey1; skey0 = skey0->next, skey1 = skey1->next) {
- if((i = cmp_skey(skey0, skey1))) break;
- }
- if(!i) i = cmp_skey(skey0, skey1);
-
- if(!i) i = 2 * cmp_skey(item0->value, item1->value);
-
- // printf("%s -- %s : %d\n", item0->pos, item1->pos, i);
-
- return i;
-}
-
-
-/* wrapper for qsort */
-int cmp_item_s(const void *p0, const void *p1)
-{
- int i;
- item_t **item0, **item1;
-
- item0 = (item_t **) p0;
- item1 = (item_t **) p1;
-
- if(opt.random) {
- i = ((rand() / 317) % 3) - 1;
- }
- else if(opt.reverse) {
- i = cmp_item(*item1, *item0);
- }
- else {
- i = cmp_item(*item0, *item1);
- }
-
- return i;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-/*
- * Does hid1 match if hid0 does?
- * > 0: yes, 0: no, < 0: maybe
- *
- * match:
- * match_any: at least one common id in hid1 & hid0
- * match_all: hid1 matches whenever hid0 does (hid0 is special case of hid1))
- */
-int match_hid(hid_t *hid0, hid_t *hid1, match_t match)
-{
- int i, m = -1;
- str_t *str0, *str1;
-
- if(!hid1) return 1;
- if(!hid0) return 0;
-
- if(hid0->any.flag != hid1->any.flag) return 0;
-
- if(hid0->any.flag == FLAG_STRING) {
- str0 = hid0->str.list.first;
- str1 = hid1->str.list.first;
- for(; str0 && str1; str0 = str0->next, str1 = str1->next) {
- i = strcmp(str0->str, str1->str);
- if(i) return 0;
- }
- m = str0 || str1 ? 0 : 1;
- }
- else if(hid0->any.flag == FLAG_ID) {
- if(hid0->num.tag != hid1->num.tag) return 0;
-
- if(match == match_any) {
-
- if(hid0->num.has.range) {
- if(hid1->num.has.range) {
- m =
- (
- hid1->num.id >= hid0->num.id &&
- hid1->num.id < hid0->num.id + hid0->num.range
- ) ||
- (
- hid0->num.id >= hid1->num.id &&
- hid0->num.id < hid1->num.id + hid1->num.range
- ) ? 1 : 0;
-
- }
- else if(hid1->num.has.mask) {
-
- }
- else {
- m =
- (
- hid1->num.id >= hid0->num.id &&
- hid1->num.id < hid0->num.id + hid0->num.range
- ) ? 1 : 0;
- }
- }
- else if(hid0->num.has.mask) {
- if(hid1->num.has.range) {
-
- }
- else if(hid1->num.has.mask) {
-
- }
- else {
- m = (hid1->num.id & ~hid0->num.mask) == hid0->num.id ? 1 : 0;
- }
- }
- else {
- if(hid1->num.has.range) {
- m =
- (
- hid0->num.id >= hid1->num.id &&
- hid0->num.id < hid1->num.id + hid1->num.range
- ) ? 1 : 0;
- }
- else if(hid1->num.has.mask) {
- m = (hid0->num.id & ~hid1->num.mask) == hid1->num.id ? 1 : 0;
- }
- else {
- m = hid0->num.id == hid1->num.id ? 1 : 0;
- }
- }
-
- }
- else { /* match_all */
-
- if(hid0->num.has.range) {
- if(hid1->num.has.range) {
- m =
- (
- hid0->num.id >= hid1->num.id &&
- hid0->num.id + hid0->num.range <= hid1->num.id + hid1->num.range
- ) ? 1 : 0;
-// fprintf(logfh, "id0 = 0x%x, id1 = 0x%x, m = %d\n", hid0->num.id, hid1->num.id, m);
- }
- else if(hid1->num.has.mask) {
-
- }
- else {
- m = hid1->num.id == hid0->num.id && hid0->num.range == 1 ? 1 : 0;
- }
- }
- else if(hid0->num.has.mask) {
- if(hid1->num.has.range) {
-
- }
- else if(hid1->num.has.mask) {
-
- }
- else {
- m = (hid1->num.id & ~hid0->num.mask) == hid0->num.id && hid0->num.mask == 0 ? 1 : 0;
- }
- }
- else {
- if(hid1->num.has.range) {
- m =
- (
- hid0->num.id >= hid1->num.id &&
- hid0->num.id < hid1->num.id + hid1->num.range
- ) ? 1 : 0;
- }
- else if(hid1->num.has.mask) {
- m = (hid0->num.id & ~hid1->num.mask) == hid1->num.id ? 1 : 0;
- }
- else {
- m = hid0->num.id == hid1->num.id ? 1 : 0;
- }
- }
-
- }
- }
-
- return m;
-}
-
-
-/*
- * Does skey1 match if skey0 does?
- * > 0: yes, 0: no, < 0: maybe
- */
-int match_skey(skey_t *skey0, skey_t *skey1, match_t match)
-{
- int i, k, m = 1;
-
- for(i = k = 0; (unsigned) i < sizeof skey0->hid / sizeof *skey0->hid; i++) {
- k = match_hid(skey0->hid[i], skey1->hid[i], match);
- if(k > 0) continue;
- if(!k) return 0;
- m = k;
- }
-
- return m;
-}
-
-
-/*
- * Does item1 match if item0 does?
- * > 0: yes, 0: no, < 0: maybe
- */
-int match_item(item_t *item0, item_t *item1, match_t match)
-{
- int i, k = 0;
- skey_t *skey0, *skey1;
-
- skey0 = item0->key.first;
- skey1 = item1->key.first;
-
- for(skey0 = item0->key.first; skey0; skey0 = skey0->next) {
- for(skey1 = item1->key.first; skey1; skey1 = skey1->next) {
- i = match_skey(skey0, skey1, match);
- if(i > 0) return i;
- if(i) k = i;
- }
- }
-
- return k;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-int combine_keys(skey_t *skey0, skey_t *skey1)
-{
- int i, ind;
- unsigned r0, r1;
- hid_t *hid0, *hid1;
-
- for(ind = -1, i = 0; (unsigned) i < sizeof skey0->hid / sizeof *skey0->hid; i++) {
- if(!skey0->hid[i] && !skey1->hid[i]) continue;
- if(!skey0->hid[i] || !skey1->hid[i]) return 0;
- if(!cmp_hid(skey0->hid[i], skey1->hid[i])) continue;
- if(ind >= 0) return 0;
- ind = i;
- }
-
- if(ind < 0) return 0;
-
- /* ok, exactly one hid differs */
- hid0 = skey0->hid[ind];
- hid1 = skey1->hid[ind];
-
- /* must be numerical */
- if(hid0->any.flag != FLAG_ID || hid1->any.flag != FLAG_ID) return 0;
-
- /* no mask value */
- if(hid0->num.has.mask || hid1->num.has.mask) return 0;
-
- /* must be adjacent ranges, can overlap */
- r0 = hid0->num.has.range ? hid0->num.range : 1;
- r1 = hid1->num.has.range ? hid1->num.range : 1;
-
- if(hid1->num.id >= hid0->num.id && hid1->num.id <= hid0->num.id + r0) {
- i = hid1->num.id + r1 - hid0->num.id;
- if((unsigned) i < r0) i = r0;
- if(i != 1) {
- hid0->num.range = i;
- hid0->num.has.range = 1;
- }
- else {
- hid0->num.range = 0;
- hid0->num.has.range = 0;
- }
- }
- else {
- return 0;
- }
-
- return 1;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-str_t *clone_str(str_t *str)
-{
- str_t *n_str;
-
- if(!str) return NULL;
-
- n_str = new_mem(sizeof *n_str);
- n_str->str = new_str(str->str);
-
- return n_str;
-}
-
-
-hid_t *clone_hid(hid_t *hid)
-{
- hid_t *new_hid;
- str_t *str;
-
- if(!hid) return NULL;
-
- new_hid = new_mem(sizeof *new_hid);
-
- *new_hid = *hid;
-
- if(hid->any.flag == FLAG_STRING) {
- memset(&new_hid->str.list, 0, sizeof new_hid->str.list);
- for(str = hid->str.list.first; str; str = str->next) {
- add_list(&new_hid->str.list, clone_str(str));
- }
- }
-
- return new_hid;
-}
-
-
-skey_t *clone_skey(skey_t *skey)
-{
- int i;
- skey_t *new_skey;
-
- if(!skey) return NULL;
-
- new_skey = new_mem(sizeof *new_skey);
-
- for(i = 0; (unsigned) i < sizeof skey->hid / sizeof *skey->hid; i++) {
- new_skey->hid[i] = clone_hid(skey->hid[i]);
- }
-
- return new_skey;
-}
-
-
-item_t *clone_item(item_t *item)
-{
- item_t *new_item;
- skey_t *skey;
-
- if(!item) return NULL;
-
- new_item = new_mem(sizeof *new_item);
-
- new_item->pos = new_str(item->pos);
-
- for(skey = item->key.first; skey; skey = skey->next) {
- add_list(&new_item->key, clone_skey(skey));
- }
-
- new_item->value = clone_skey(item->value);
-
- return new_item;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-str_t *free_str(str_t *str, int follow_next)
-{
- str_t *next;
-
- for(; str; str = next) {
- next = str->next;
-
- free_mem(str->str);
- free_mem(str);
-
- if(!follow_next) break;
- }
-
- return NULL;
-}
-
-
-hid_t *free_hid(hid_t *hid)
-{
- if(!hid) return NULL;
-
- if(hid->any.flag == FLAG_STRING) {
- free_str(hid->str.list.first, 1);
- }
- free_mem(hid);
-
- return NULL;
-}
-
-
-skey_t *free_skey(skey_t *skey, int follow_next)
-{
- skey_t *next;
- int i;
-
- for(; skey; skey = next) {
- next = skey->next;
-
- for(i = 0; (unsigned) i < sizeof skey->hid / sizeof *skey->hid; i++) {
- free_hid(skey->hid[i]);
- }
-
- free_mem(skey);
-
- if(!follow_next) break;
- }
-
- return NULL;
-}
-
-
-item_t *free_item(item_t *item, int follow_next)
-{
- item_t *next;
-
- for(; item; item = next) {
- next = item->next;
-
- free_mem(item->pos);
-
- free_skey(item->key.first, 1);
- free_skey(item->value, 0);
-
- free_mem(item);
-
- if(!follow_next) break;
- }
-
- return NULL;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-unsigned driver_entry_types(hid_t *hid)
-{
- str_t *str;
- unsigned ent = 0;
-
- for(str = hid->str.list.first; str; str = str->next) {
- if(!str->str[0] || str->str[1] != '\t') break;
- switch(str->str[0]) {
- case 'a':
- ent |= 1;
- break;
-
- case 'x':
- case 'X':
- ent |= 2;
- break;
-
- default:
- ent |= 4;
- }
- }
-
- return ent;
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-void remove_items(list_t *hd)
-{
- item_t *item, *next;
- list_t hd_new = {};
-
- for(item = hd->first; item; item = next) {
- next = item->next;
- if(item->remove) {
- free_item(item, 0);
- }
- else {
- add_list(&hd_new, item);
- }
- }
-
- if(hd_new.last) {
- ((list_any_t *) hd_new.last)->next = NULL;
- }
-
- *hd = hd_new;
-}
-
-
-void remove_nops(list_t *hd)
-{
- item_t *item;
- int cnt = 0;
-
- for(item = hd->first; item; item = item->next) {
- if(!item->value || !item->key.first) {
- item->remove = 1;
- cnt++;
- }
- }
-
- if(cnt) remove_items(hd);
-}
-
-
-void split_items(list_t *hd)
-{
- item_t *item, *new_item, *next_item;
- skey_t *skey, *next;
- list_t hd_new = {};
- int cnt, l;
- char buf[16];
-
- for(item = hd->first; item; item = next_item) {
- next_item = item->next;
- skey = item->key.first;
- if(skey && skey->next) {
- for(cnt = 0, skey = item->key.first; skey; skey = next) {
- next = skey->next;
- new_item = add_list(&hd_new, new_mem(sizeof *new_item));
- if(item->pos && (l = strlen(item->pos))) {
- sprintf(buf, ",%d)", cnt++);
- new_item->pos = new_mem(l - 1 + strlen(buf) + 1);
- strcpy(new_item->pos, item->pos);
- strcpy(new_item->pos + l - 1, buf);
- }
- new_item->value = clone_skey(item->value);
- add_list(&new_item->key, clone_skey(skey));
- }
- free_item(item, 0);
- }
- else {
- add_list(&hd_new, item);
- }
- }
-
- if(hd_new.last) {
- ((list_any_t *) hd_new.last)->next = NULL;
- }
-
- *hd = hd_new;
-}
-
-
-void check_items(list_t *hd)
-{
- int i, j, k, m, mr, m_all, mr_all, c_ident, c_diff, c_crit;
- char *s;
- item_t *item0, *item1, *item_a, *item_b;
- unsigned *stat_cnt;
-
- for(item0 = hd->first; item0; item0 = item0->next) {
- if(item0->remove) continue;
- for(item1 = item0->next; item1 && !item0->remove; item1 = item1->next) {
- if(item1->remove) continue;
-
- item_a = item0; item_b = item1;
-
- m = match_item(item0, item1, match_any);
- mr = match_item(item1, item0, match_any);
-
- m_all = mr_all = 0;
-
- if(m && mr) {
- m_all = match_item(item0, item1, match_all);
- mr_all = match_item(item1, item0, match_all);
- if(mr_all) {
- item_a = item1; item_b = item0;
- i = m_all; m_all = mr_all; mr_all = i;
- i = m; m = mr; mr = i;
- }
- }
- else if(mr && !m) {
- item_a = item1; item_b = item0;
- m = mr; mr = 0;
- }
-
- if(m && !mr) {
- m_all = match_item(item_a, item_b, match_all);
- mr_all = match_item(item_b, item_a, match_all);
- }
-
- if(m) {
-#if 0
- fprintf(
- logfh, "a = %s, b = %s, m = %d, mr = %d, m_all = %d, mr_all = %d\n",
- item_a->pos, item_b->pos,
- m, mr, m_all, mr_all
- );
-#endif
-
- if(m_all) {
- /*
- * item_b matches (at least) everything that item_a does
- * (item_a is a special case of item_b)
- */
-
- i = cmp_item(item_a, item_b); /* just informational */
- if(!i) {
- /* identical keys and values */
- fprintf(logfh,
- "%s: duplicate of %s, item removed\n",
- item_a->pos, item_b->pos
- );
- item_a->remove = 1;
- }
- else {
- /* matching keys, differing values */
-
- j = count_common_hids(item_a->key.first, item_b->key.first);
- k = (
- j == count_common_hids(item_b->key.first, item_b->key.first) &&
- j < count_common_hids(item_a->key.first, item_a->key.first)
- ) ? 1 : 0;
-
- if(k) {
- /*
- * item_a is a special case of item_b _and_ item_a has more hid fields
- * --> libhd can handle differing info in this case
- */
- j = strip_skey(item_a->value, item_b->value, 1);
- if(j) {
- c_ident = j & 0xff;
- c_diff = (j >> 8) & 0xff;
- if(c_diff && c_ident) {
- fprintf(logfh,
- "%s: some info identical to %s, identical info removed\n",
- item_a->pos, item_b->pos
- );
- log_items(logfh, item_a, item_b);
- }
- else if(!c_diff) {
- fprintf(logfh,
- "%s: info is identical to %s, info removed\n",
- item_a->pos, item_b->pos
- );
- log_items(logfh, item_a, item_b);
- }
- remove_deleted_hids(item_a->value);
- }
- }
- else {
- j = strip_skey(item_a->value, item_b->value, 3);
- if(j) {
- c_ident = j & 0xff;
- c_diff = (j >> 8) & 0xff;
- c_crit = (j >> 16) & 0xff;
- if(c_crit || cmp_skey(item_a->key.first, item_b->key.first)) {
- s = "conflicts with";
- stat_cnt = &stats.errors_res;
- }
- else {
- s = "differs from";
- stat_cnt = &stats.diffs;
- }
- /*
- * if the keys are identical, make it a warning,
- * else make it an error
- */
- if(c_diff && !c_ident) {
- (*stat_cnt)++;
- fprintf(logfh,
- "%s: info %s %s, info removed\n",
- item_a->pos, s, item_b->pos
- );
- }
- else if(c_diff && c_ident) {
- (*stat_cnt)++;
- fprintf(logfh,
- "%s: info %s/is identical to %s, info removed\n",
- item_a->pos, s, item_b->pos
- );
- }
- else {
- fprintf(logfh,
- "%s: info is identical to %s, info removed\n",
- item_a->pos, item_b->pos
- );
- }
- log_items(logfh, item_a, item_b);
- remove_deleted_hids(item_a->value);
- }
- }
-
- if(!count_common_hids(item_a->value, item_a->value)) {
- /* remove if no values left */
- item_a->remove = 1;
- fprintf(logfh, "%s: no info left, item removed\n", item_a->pos);
- }
-
- }
- }
- else if(count_common_hids(item_a->value, item_b->value)) {
- /* different keys, potentially conflicting values */
- k = cmp_skey(item_a->value, item_b->value);
- if(k) {
- /* differing keys, differing values */
- j = strip_skey(item_b->value, item_a->value, 2);
- c_diff = (j >> 8) & 0xff;
- if(c_diff) {
- /* different keys, conflicting values --> error */
- stats.errors++;
- fprintf(logfh,
- "%s: info conflicts with %s\n",
- item_b->pos, item_a->pos
- );
- log_items(logfh, item_b, item_a);
- }
- undelete_hids(item_b->value);
- }
- }
- }
- }
- }
-
- remove_items(hd);
-}
-
-
-void combine_driver(list_t *hd)
-{
- int i;
- item_t *item0, *item1, *item_a, *item_b;
- hid_t *hid0, *hid1, *new_hid, *hid_a, *hid_b;
- str_t *str0, *str1, *tmp_str, *last_str;
- unsigned type0, type1;
-
- for(item0 = hd->first; item0; item0 = item0->next) {
- if(
- item0->remove ||
- !item0->value ||
- !(hid0 = item0->value->hid[he_driver]) ||
- hid0->any.flag != FLAG_STRING
- ) continue;
- for(item1 = item0->next; item1 && !item0->remove; item1 = item1->next) {
- hid0 = item0->value->hid[he_driver];
- if(
- item1->remove ||
- !item1->value ||
- !(hid1 = item1->value->hid[he_driver]) ||
- hid1->any.flag != FLAG_STRING
- ) continue;
-
- i = cmp_item(item0, item1);
-
- /* remove duplicate entries */
- if(!i) {
- item1->remove = 1;
- continue;
- }
-
- /* work only on entries with identical keys */
- if(i == -1 || i == 1) continue;
-
- /* ensure these are proper driver entries */
- if(!(type0 = driver_entry_types(hid0))) continue;
- if(!(type1 = driver_entry_types(hid1))) continue;
-
- /*
- * Allow only (x11 + x11) & (!any + any)
- * unless --combine option was used.
- */
- if(!opt.combine && (((type0 & type1) & 5) || ((type0 | type1) & 6) == 6)) {
- fprintf(logfh,
- "%s: can't combine driver info with %s %d %d\n",
- item0->pos, item1->pos, type0, type1
- );
- log_items(logfh, item0, item1);
- continue;
- }
-
- item_a = item0;
- item_b = item1;
- hid_a = hid0;
- hid_b = hid1;
-
- if(type0 == 1) {
- item_a = item1;
- item_b = item0;
- hid_a = hid1;
- hid_b = hid0;
- }
-
- fprintf(logfh, "%s: combine with %s\n", item_a->pos, item_b->pos);
- log_items(logfh, item_a, item_b);
-
- new_hid = clone_hid(hid_a);
-
- for(str1 = hid_b->str.list.first; str1; str1 = str1->next) {
- last_str = NULL;
- for(str0 = new_hid->str.list.first; str0; last_str = str0, str0 = str0->next) {
- i = cmp_driver_info(str1->str, str0->str);
- if(i < 0) break;
- }
- if(last_str) {
- tmp_str = last_str->next;
- last_str->next = clone_str(str1);
- last_str->next->next = tmp_str;
- if(!tmp_str) {
- new_hid->str.list.last = last_str->next;
- }
- }
- else {
- /* smaller than first entry */
- tmp_str = clone_str(str1);
- tmp_str->next = new_hid->str.list.first;
- new_hid->str.list.first = tmp_str;
- }
- }
-
- free_hid(item_a->value->hid[he_driver]);
- item_a->value->hid[he_driver] = new_hid;
- item_b->value->hid[he_driver] = free_hid(item_b->value->hid[he_driver]);
-
- fprintf(logfh, " --\n");
- log_items(logfh, item_a, item_b);
-
- if(!count_common_hids(item_b->value, item_b->value)) {
- /* remove if no values left */
- item_b->remove = 1;
- fprintf(logfh, "%s: no info left, item removed\n", item_b->pos);
- }
-
- }
- }
-
- remove_items(hd);
-}
-
-
-void combine_requires(list_t *hd)
-{
- int i;
- item_t *item0, *item1;
- hid_t *hid0, *hid1;
- list_t slist = {};
- str_t *str, *str0, *str1;
-
- for(item0 = hd->first; item0; item0 = item0->next) {
- if(
- item0->remove ||
- !item0->value ||
- !(hid0 = item0->value->hid[he_requires]) ||
- hid0->any.flag != FLAG_STRING
- ) continue;
- for(item1 = item0->next; item1; item1 = item1->next) {
- if(
- item1->remove ||
- !item1->value ||
- !(hid1 = item1->value->hid[he_requires]) ||
- hid1->any.flag != FLAG_STRING
- ) continue;
-
- i = cmp_item(item0, item1);
-
- /* remove duplicate entries */
- if(!i) {
- item1->remove = 1;
- continue;
- }
-
- /* work only on entries with identical keys */
- if(i == -1 || i == 1) continue;
-
- if(!cmp_hid(hid0, hid1)) {
- hid1->any.remove = 1;
- fprintf(logfh,
- "%s: info is identical to %s, info removed\n",
- item1->pos, item0->pos
- );
- log_items(logfh, item1, item0);
- item1->value->hid[he_requires] = free_hid(item1->value->hid[he_requires]);
- }
- else {
- slist.first = split('|', ((str_t *) hid0->str.list.first)->str);
-
- /* add pointer to last element */
- for(str = slist.first; str; str = str->next) {
- if(!str->next) slist.last = str;
- }
-
- str1 = split('|', ((str_t *) hid1->str.list.first)->str);
- for(str = str1; str; str = str->next) {
- for(str0 = slist.first; str0; str0 = str0->next) {
- if(!strcmp(str->str, str0->str)) break;
- }
- if(!str0) add_list(&slist, clone_str(str));
- }
- free_str(str1, 1);
-
- sort_list(&slist, cmp_str_s);
-
- free_str(hid0->str.list.first, 1);
- hid0->str.list.last = NULL;
- hid0->str.list.first = add_list(&hid0->str.list, new_mem(sizeof (str_t)));
- ((str_t *) hid0->str.list.first)->str = join('|', slist.first);
-
- free_str(slist.first, 1);
-
- hid1->any.remove = 1;
-
- fprintf(logfh,
- "%s: combine with %s, info removed\n",
- item1->pos, item0->pos
- );
- log_items(logfh, item1, item0);
- item1->value->hid[he_requires] = free_hid(item1->value->hid[he_requires]);
- }
-
- if(!count_common_hids(item1->value, item1->value)) {
- /* remove if no values left */
- item1->remove = 1;
- fprintf(logfh, "%s: no info left, item removed\n", item1->pos);
- }
- }
- }
-
- remove_items(hd);
-}
-
-
-void join_items_by_value(list_t *hd)
-{
- item_t *item0, *item1;
- skey_t *skey, *next;
- int i;
-
- for(item0 = hd->first; item0; item0 = item0->next) {
- if(item0->remove) continue;
- for(item1 = item0->next; item1; item1 = item1->next) {
- if(item1->remove) continue;
-
- if(!cmp_skey(item0->value, item1->value)) {
- for(skey = item1->key.first; skey; skey = next) {
- next = skey->next;
- add_list(&item0->key, skey);
- }
- memset(&item1->key, 0, sizeof item1->key);
- item1->remove = 1;
- fprintf(logfh, "%s: info added to %s, item removed\n", item1->pos, item0->pos);
- }
- }
- }
-
- remove_items(hd);
-
- for(item0 = hd->first; item0; item0 = item0->next) {
-
- /* sort key entries */
- sort_list(&item0->key, cmp_skey_s);
-
- /* try to join adjacent keys */
- for(skey = item0->key.first; skey && (next = skey->next); ) {
- i = combine_keys(skey, next);
- if(!i) {
- skey = next;
- continue;
- }
- if(!(skey->next = next->next)) {
- /* last element has changed */
- item0->key.last = skey;
- }
- free_skey(next, 0);
- }
- }
-}
-
-
-void join_items_by_key(list_t *hd)
-{
- item_t *item0, *item1;
- skey_t *val0, *val1;
- int i;
-
- for(item0 = hd->first; item0; item0 = item0->next) {
- if(item0->remove) continue;
- val0 = item0->value;
- for(item1 = item0->next; item1; item1 = item1->next) {
- if(item1->remove) continue;
-
- i = cmp_item(item0, item1);
-
- if(i == 2 || i == -2) {
- /* identical keys, values differ */
- val1 = item1->value;
- if(!count_common_hids(val0, val1)) {
- /* move everything from item1 to item0 */
-
- for(i = 0; (unsigned) i < sizeof val1->hid / sizeof *val1->hid; i++) {
- if(val1->hid[i]) {
- val0->hid[i] = val1->hid[i];
- val1->hid[i] = NULL;
- }
- }
- item1->remove = 1;
- fprintf(logfh, "%s: info added to %s, item removed\n", item1->pos, item0->pos);
- }
- }
- }
- }
-
- remove_items(hd);
-}
-
-
-void remove_unimportant_items(list_t *hd)
-{
- item_t *item;
- skey_t *val;
- str_t *str;
- int i, cnt;
-
- for(item = hd->first; item; item = item->next) {
- val = item->value;
- cnt = 0;
- if(val) {
- for(i = 0; (unsigned) i < sizeof val->hid / sizeof *val->hid; i++) {
- if(i == he_driver && val->hid[i]) {
- if(!(
- val->hid[i]->any.flag == FLAG_STRING &&
- (str = val->hid[i]->str.list.first) &&
- str->str &&
- (*str->str == 'i' || *str->str == 'm')
- )) {
- val->hid[i] = free_hid(val->hid[i]);
- }
- }
- else if(val->hid[i]) {
- if(val->hid[i]->any.flag != FLAG_ID) val->hid[i] = free_hid(val->hid[i]);
- }
- if(val->hid[i]) cnt++;
- }
- }
- /* no values left */
- if(!cnt) item->remove = 1;
- }
-
- remove_items(hd);
-}
-
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-#if 0
-/* returns index in hddb2->ids */
-unsigned store_entry(hddb2_data_t *x, tmp_entry_t *te)
-{
- int i, j;
- unsigned ent = -1, u, v;
-
- for(i = 0; i < he_nomask; i++) {
- if(te[i].len) {
- for(j = 0; j < te[i].len; j++) {
- v = te[i].val[j] | (1 << 31);
- if(j == te[i].len - 1) v &= ~(1 << 31);
- u = store_value(x, v);
- if(ent == -1) ent = u;
- }
- }
- }
-
- return ent;
-}
-
-void add_value(tmp_entry_t *te, hddb_entry_t idx, unsigned val)
-{
- if(idx >= he_nomask) return;
- te += idx;
-
- if(te->len >= sizeof te->val / sizeof *te->val) return;
-
- te->val[te->len++] = val;
-}
-
-#endif
-
-
-
-unsigned hddb_store_string(hddb_data_t *hddb, char *str)
-{
- unsigned l = strlen(str), u;
- char *s;
-
- if(!opt.no_compact) {
- /* maybe we already have it... */
- if(l && l < hddb->strings_len) {
- s = memmem(hddb->strings, hddb->strings_len, str, l + 1);
- if(s) return s - hddb->strings;
- }
- }
-
- if(hddb->strings_len + l >= hddb->strings_max) {
- hddb->strings_max += l + 0x1000; /* >4k steps */
- hddb->strings = realloc(hddb->strings, hddb->strings_max * sizeof *hddb->strings);
- }
-
- /* make sure the 1st byte is 0 */
- if(hddb->strings_len == 0) {
- *hddb->strings = 0; /* realloc does _not_ clear memory */
- hddb->strings_len = 1;
- }
-
- if(l == 0) return 0; /* 1st byte is always 0 */
-
- strcpy(hddb->strings + (u = hddb->strings_len), str);
- hddb->strings_len += l + 1;
-
- return u;
-}
-
-
-unsigned hddb_store_value(hddb_data_t *hddb, unsigned val)
-{
- if(hddb->ids_len == hddb->ids_max) {
- hddb->ids_max += 0x400; /* 4k steps */
- hddb->ids = realloc(hddb->ids, hddb->ids_max * sizeof *hddb->ids);
- }
-
- hddb->ids[hddb->ids_len++] = val;
-
- return hddb->ids_len - 1;
-}
-
-
-unsigned hddb_store_hid(hddb_data_t *hddb, hid_t *hid, hddb_entry_t entry)
-{
- unsigned u, idx = -1;
- str_t *str, *str0, *str1;
-
- if(!hid) return idx;
-
- if(hid->any.flag == FLAG_ID) {
- if(hid->num.has.range) {
- idx = hddb_store_value(hddb, MAKE_DATA(FLAG_RANGE, hid->num.range) | (1 << 31));
- }
- else if(hid->num.has.mask) {
- idx = hddb_store_value(hddb, MAKE_DATA(FLAG_MASK, hid->num.mask) | (1 << 31));
- }
- u = hddb_store_value(hddb, MAKE_DATA(FLAG_ID, hid->num.id + (hid->num.tag << 16)));
- if(idx == -1u) idx = u;
- }
- else if(hid->any.flag == FLAG_STRING) {
- if(entry == he_driver ) {
- for(str = hid->str.list.first; str; str = str->next) {
- str0 = split('\001', str->str);
- for(str1 = str0; str1; str1 = str1->next) {
- u = hddb_store_string(hddb, str1->str);
- if(str->next || str1->next) u |= 1 << 31;
- u = hddb_store_value(hddb, MAKE_DATA(FLAG_STRING, u));
- if(idx == -1u) idx = u;
- }
- free_str(str0, 1);
- }
- }
- else {
- u = hddb_store_string(hddb, ((str_t *) hid->str.list.first)->str);
- idx = hddb_store_value(hddb, MAKE_DATA(FLAG_STRING, u));
- }
- }
-
- return idx;
-}
-
-
-void hddb_store_skey(hddb_data_t *hddb, skey_t *skey, unsigned *mask, unsigned *idx)
-{
- int i, j, end;
- unsigned ent;
- hddb_data_t save_db = *hddb;
-
- *mask = 0;
- *idx = 0;
-
- if(!skey) return;
-
- for(i = 0; (unsigned) i < sizeof skey->hid / sizeof *skey->hid; i++) {
- if(skey->hid[i]) {
- ent = hddb_store_hid(hddb, skey->hid[i], i);
- if(!*mask) *idx = ent;
- *mask |= (1 << i);
- }
- }
-
- if(!opt.no_compact) {
- /* maybe there was an identical skey before... */
- if(save_db.ids_len && hddb->ids_len > save_db.ids_len) {
- j = hddb->ids_len - save_db.ids_len;
- end = save_db.ids_len - j;
- /* this is pretty slow, but avoids memmem() alignment problems */
- for(i = 0; i < end; i++) {
- if(!memcmp(hddb->ids + i, hddb->ids + save_db.ids_len, j * sizeof *hddb->ids)) {
- /* remove new id entries and return existing entry */
- hddb->ids_len = save_db.ids_len;
- *idx = i;
- break;
- }
- }
- }
- }
-}
-
-
-void hddb_store_list(hddb_data_t *hddb, hddb_list_t *list)
-{
- if(!list || !list->key_mask || !list->value_mask) return;
-
- if(hddb->list_len == hddb->list_max) {
- hddb->list_max += 0x100; /* 4k steps */
- hddb->list = realloc(hddb->list, hddb->list_max * sizeof *hddb->list);
- }
-
- hddb->list[hddb->list_len++] = *list;
-}
-
-
-void hddb_init(hddb_data_t *hddb, list_t *hd)
-{
- item_t *item;
- hddb_list_t db_list = {};
- unsigned item_cnt;
-
- for(item_cnt = 0, item = hd->first; item; item = item->next, item_cnt++) {
-
- hddb_store_skey(hddb, item->key.first, &db_list.key_mask, &db_list.key);
- hddb_store_skey(hddb, item->value, &db_list.value_mask, &db_list.value);
-
- hddb_store_list(hddb, &db_list);
- }
-}
-
-
-unsigned char *quote_string(unsigned char *str, int len)
-{
- unsigned char *qstr;
- int i, j;
-
- if(!str || !len) return NULL;
-
- qstr = new_mem(4 * len + 1); /* enough */
-
- for(i = j = 0; i < len; i++) {
- if(str[i] == '\\' || str[i] == '"' || str[i] == '?') {
- qstr[j++] = '\\';
- qstr[j++] = str[i];
- }
- else if(str[i] == '\n') {
- qstr[j++] = '\\';
- qstr[j++] = 'n';
- }
- else if(str[i] == '\t') {
- qstr[j++] = '\\';
- qstr[j++] = 't';
- }
- else if(str[i] < ' ') {
- qstr[j++] = '\\';
- qstr[j++] = (str[i] >> 6) + '0';
- qstr[j++] = ((str[i] >> 3) & 7) + '0';
- qstr[j++] = (str[i] & 7) + '0';
- }
- else {
- qstr[j++] = str[i];
- }
- }
-
- return qstr;
-}
-
-
-void write_cfile(FILE *f, list_t *hd)
-{
- hddb_data_t hddb = {};
- char *qstr;
- unsigned u, qstr_len, len;
-
- fprintf(logfh, "- building C version\n");
- fflush(logfh);
-
- hddb_init(&hddb, hd);
-
- fprintf(logfh, " db size: %u bytes\n",
- (unsigned) (sizeof hddb +
- hddb.strings_len +
- hddb.ids_len * sizeof *hddb.ids +
- hddb.list_len * sizeof *hddb.list)
- );
-
- fprintf(f,
- "static hddb_list_t hddb_internal_list[];\n"
- "static unsigned hddb_internal_ids[];\n"
- "static char hddb_internal_strings[];\n\n"
- "hddb2_data_t hddb_internal = {\n"
- " %u, %u, hddb_internal_list,\n"
- " %u, %u, hddb_internal_ids,\n"
- " %u, %u, hddb_internal_strings\n"
- "};\n\n",
- hddb.list_len, hddb.list_len,
- hddb.ids_len, hddb.ids_len,
- hddb.strings_len, hddb.strings_len
- );
-
- fprintf(f, "static hddb_list_t hddb_internal_list[%u] = {\n", hddb.list_len);
- for(u = 0; u < hddb.list_len; u++) {
- fprintf(f,
- " { 0x%08x, 0x%08x, 0x%08x, 0x%08x }%s\n",
- hddb.list[u].key_mask, hddb.list[u].value_mask,
- hddb.list[u].key, hddb.list[u].value,
- u + 1 == hddb.list_len ? "" : ","
- );
- }
- fprintf(f, "};\n\n");
-
- fprintf(f, "static unsigned hddb_internal_ids[%u] = {\n", hddb.ids_len);
- for(u = 0; u < hddb.ids_len; u++) {
- if((u % 6) == 0) fputc(' ', f);
- fprintf(f, " 0x%08x", hddb.ids[u]);
- if(u + 1 != hddb.ids_len) fputc(',', f);
- if(u % 6 == 6 - 1 || u + 1 == hddb.ids_len) fputc('\n', f);
- }
- fprintf(f, "};\n\n");
-
- qstr = quote_string(hddb.strings, hddb.strings_len);
- qstr_len = qstr ? strlen(qstr) : 0;
- fprintf(f, "static char hddb_internal_strings[%u] = \"\\\n", hddb.strings_len);
- for(u = 0; u < qstr_len; ) {
- len = qstr_len - u;
- if(len > 72) len = 72;
- while(len--) fputc(qstr[u++], f);
- fprintf(f, "\\\n");
- }
- fprintf(f, "\";\n\n");
-
- free_mem(qstr);
-
- free_mem(hddb.list);
- free_mem(hddb.ids);
- free_mem(hddb.strings);
-}
-
-
+++ /dev/null
-#! /usr/bin/perl
-
-use Getopt::Long;
-use XML::Writer;
-use XML::Parser;
-use IO;
-use Dumpvalue;
-
-sub help;
-
-sub read_name_file;
-sub read_driver_file;
-sub read_id_file;
-sub read_pcimap_file;
-sub read_usbmap_file;
-sub read_alias_file;
-sub read_modinfo_file;
-sub eisa_id;
-sub eisa_str;
-
-sub remove_nops;
-sub remove_duplicates;
-sub fix_driver_info;
-
-sub cmp_id;
-sub cmp_skey;
-sub cmp_item;
-
-sub match_id;
-sub match_skey;
-sub match_item;
-
-sub join_skey;
-
-sub split_item;
-
-sub get_xml_data;
-sub parse_xml_item;
-sub parse_xml_key;
-sub parse_xml_id;
-sub parse_xml_id_id;
-sub parse_xml_id_range;
-sub parse_xml_id_mask;
-sub parse_xml_driver;
-sub parse_xml_driver_display;
-sub parse_xml_driver_module;
-sub parse_xml_driver_mouse;
-sub parse_xml_driver_xfree;
-sub parse_xml_pair;
-sub parse_xml_cdata;
-sub idstr2value;
-
-sub dump2ids;
-sub dump2xml;
-sub dump_xml_item;
-sub dump_xml_names;
-sub dump_xml_drivers;
-sub id2xml;
-
-sub hd_dtd;
-sub hd_dtd_internal;
-
-$dump = new Dumpvalue();
-
-(
- $he_other, $he_bus_id, $he_baseclass_id, $he_subclass_id, $he_progif_id,
- $he_vendor_id, $he_device_id, $he_subvendor_id, $he_subdevice_id, $he_rev_id,
- $he_bus_name, $he_baseclass_name, $he_subclass_name, $he_progif_name,
- $he_vendor_name, $he_device_name, $he_subvendor_name, $he_subdevice_name,
- $he_rev_name, $he_serial, $he_driver, $he_requires,
- $he_nomask,
- $he_driver_module_insmod, $he_driver_module_modprobe,
- $he_driver_module_config, $he_driver_xfree, $he_driver_xfree_config,
- $he_driver_mouse, $he_driver_display, $he_driver_any
-) = ( 0 .. 100 );
-$he_class_id = $he_nomask;
-
-@ent_names = (
- "other", "bus.id", "baseclass.id", "subclass.id", "progif.id",
- "vendor.id", "device.id", "subvendor.id", "subdevice.id", "rev.id",
- "bus.name", "baseclass.name", "subclass.name", "progif.name",
- "vendor.name", "device.name", "subvendor.name", "subdevice.name",
- "rev.name", "serial", "driver", "requires",
- "class.id", "driver.module.insmod", "driver.module.modprobe",
- "driver.module.config", "driver.xfree", "driver.xfree.config",
- "driver.mouse", "driver.display", "driver.any"
-);
-@ent_values{@ent_names} = ( 0 .. 100 );
-
-@xml_names = (
- "other", "bus", "baseclass", "subclass", "progif",
- "vendor", "device", "subvendor", "subdevice", "revision",
- "bus", "baseclass", "subclass", "progif",
- "vendor", "device", "subvendor", "subdevice",
- "revision", "serial", "driver", "requires"
-);
-@xml_values{@xml_names} = ( 0 .. 100 );
-
-( $tag_none, $tag_pci, $tag_eisa, $tag_usb, $tag_special, $tag_pcmcia ) = ( 0 .. 5 );
-
-@tag_name = ( "", "pci", "eisa", "usb", "special", "pcmcia" );
-@tag_values{@tag_name} = ( 0 .. 5 );
-$tag_values{none} = 0;
-
-( $flag_id, $flag_range, $flag_mask, $flag_string, $flag_regexp ) = ( 0 .. 4 );
-$flag_cont = 8;
-
-# map usb modules to device classes
-%usbmod2class = (
- 'ov511' => [ 0x10f, 0 ],
- 'pwc' => [ 0x10f, 0 ],
- 'hpusbscsi' => [ 0x10c, 0 ],
- 'microtek' => [ 0x10c, 0 ],
- 'scanner' => [ 0x10c, 0 ]
-);
-
-
-# options
-$opt_write_ids = 1;
-$opt_write_xml = 0;
-$opt_sort_ids = 0;
-$opt_sort_reverse = 0;
-$opt_sort_random = 0; # for testing
-$opt_split = 0;
-$opt_with_source = 0;
-$opt_fix_driver = 1;
-$opt_help = 0;
-$opt_internal_dtd = 0;
-
-$opt_ok = GetOptions(
- 'ids' => \$opt_write_ids,
- 'no-ids' => sub { $opt_write_ids = 0 },
- 'xml' => \$opt_write_xml,
- 'no-xml' => sub { $opt_write_xml = 0 },
- 'sort' => \$opt_sort,
- 'reverse' => \$opt_sort_reverse,
- 'random' => \$opt_sort_random,
- 'split' => \$opt_split,
- 'with-source' => \$opt_with_source,
- 'fix-driver' => \$opt_fix_driver,
- 'no-fix-driver' => sub { $opt_fix_driver = 0 },
- 'internal-dtd' => \$opt_internal_dtd,
- 'help' => \&help
-) ;
-
-for $f (@ARGV) {
- if(open F, $f) {
- @f = (<F>);
- close F;
-
- # file format check
-
- undef $format;
-
- for (@f) {
- if(/^\s*\<\?xml\s/) {
- $format = 'xml';
- last;
- }
-
- if(/^#\s+pci\s+module\s+vendor\s+device\s+subvendor\s+subdevice\s+class\s+class_mask\s+driver_data\s*$/) {
- $format = 'pcimap';
- last;
- }
-
- if(/^#\s+usb\s+module\s+match_flags\s+idVendor\s+idProduct\s+/) {
- $format = 'usbmap';
- last;
- }
-
- if(/^\s*alias\s+(pci|pnp|usb):\S+\s+\S+$/) {
- $format = 'alias';
- last;
- }
-
- if(/^\s*alias:\s+(pci|pnp|usb):\S+\s*$/) {
- $format = 'modinfo';
- last;
- }
-
- }
-
- if(!$format) {
- $i = join "|", map "\Q$_", @ent_names;
- for (@f) {
- if(/^\s*[+&|]?($i)\s/) {
- $format = 'ids';
- last;
- }
- }
- }
-
- if(!$format) {
- for (@f) {
- if(/^\t[a-z]\s/) {
- $format = 'drivers';
- last;
- }
- }
- }
-
- $format = 'names' if !$format;
-
- if($format eq 'names') {
-
- print STDERR "====== \"$f\": name info ======\n";
- read_name_file $f, \@f;
-
- }
- elsif($format eq 'drivers') {
-
- print STDERR "====== \"$f\": driver info ======\n";
- read_driver_file $f, \@f;
-
- }
- elsif($format eq 'xml') {
-
- print STDERR "====== \"$f\": xml info ======\n";
- $xmlp = new XML::Parser(Style => 'Tree', ParseParamEnt => 1);
- get_xml_data $xmlp->parsefile($f);
-
- }
- elsif($format eq 'ids') {
-
- print STDERR "====== \"$f\": id info ======\n";
- read_id_file $f, \@f;
-
- }
- elsif($format eq 'pcimap') {
-
- print STDERR "====== \"$f\": pcimap info ======\n";
- read_pcimap_file $f, \@f;
-
- }
- elsif($format eq 'usbmap') {
-
- print STDERR "====== \"$f\": usbmap info ======\n";
- read_usbmap_file $f, \@f;
-
- }
- elsif($format eq 'alias') {
-
- print STDERR "====== \"$f\": alias info ======\n";
- read_alias_file $f, \@f;
-
- }
- elsif($format eq 'modinfo') {
-
- print STDERR "====== \"$f\": module info ======\n";
- read_modinfo_file $f, \@f;
-
- }
- }
- else {
- die "$f: $!\n"
- }
-}
-
-print STDERR "removing unnecessary items\n";
-remove_nops;
-
-print STDERR "got ${\scalar @hd} items\n";
-
-if($opt_fix_driver) {
- fix_driver_info;
-}
-
-if($opt_split) {
- print STDERR "splitting items\n";
- for (@hd) {
- push @hd_new, split_item($_);
- }
- @hd = @hd_new;
- undef @hd_new;
-}
-
-if($opt_sort_ids) {
- print STDERR "sorting\n";
- if($opt_sort_random) {
- @hd = sort { $cmp_item_cnt++, rand() <=> rand() } @hd;
- }
- elsif($opt_sort_reverse) {
- @hd = sort { cmp_item $b, $a } @hd;
- }
- else {
- @hd = sort { cmp_item $a, $b } @hd;
- }
-}
-
-if($opt_write_ids) {
- print STDERR "writing \"hd.ids\"\n";
- dump2ids;
-}
-
-if($opt_write_xml) {
- print STDERR "writing \"hd.xml\"\n";
- dump2xml;
-}
-
-print STDERR "cmps: $cmp_item_cnt\n" if $cmp_item_cnt;
-
-# $dump->dumpValue( \@hd );
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-sub help
-{
- print STDERR
- "Usage: convert_hd [options] files\n" .
- "Convert various hardware info to libhd/hwinfo internal format or to XML.\n" .
- " --ids write internal format (default) to \"hd.ids\"\n" .
- " --no-ids do not write internal format\n" .
- " --xml write XML to \"hd.xml\", DTD to \"hd.dtd\"\n" .
- " --no-xml do not write XML (default)\n" .
- " --with-source add comment to each item indicating info source\n" .
- " --internal-dtd generate internal dtd\n\n" .
- " Note: for more sophisticated operations on hardware data use check_hd.\n";
-
- exit 0;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub num
-{
- return $_[0] =~ /^0/ ? oct $_[0] : return $_[0] + 0;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read file with name/class info
-#
-# (either pciutils or SaX/SaX2 format)
-#
-
-sub read_name_file
-{
- my ( $file_name, $file, $line, $sax_version, $tag, $id, $val, $ent );
- my ( @id0, @id1, @id2, @id3, @id4, $raw, $opt, $ext, $srv, $str );
- local $_;
-
- my $rnf_add_id0 = sub
- {
- my ( $id0, $name0, $ent_id0, $ent_name0, $id, $val );
-
- # note: $tag belongs to read_name_file()
- ( $ent_id0, $ent_name0, $tag, $id0, $name0 ) = @_;
-
- $ent = $ent_id0;
-
- @id0 = ( $flag_id, $tag, $id0 );
- undef @id1; undef @id2; undef @id3;
-
- $id->[$ent_id0] = [ @id0 ];
- $val->[$ent_name0] = [ $flag_string, $name0 ];
-
- push @hd, [ "$file_name($line)", [ $id ], $val ];
- };
-
- my $rnf_add_bus = sub
- {
- $rnf_add_id0->($he_bus_id, $he_bus_name, 0, @_);
- };
-
- my $rnf_add_baseclass = sub
- {
- $rnf_add_id0->($he_baseclass_id, $he_baseclass_name, 0, @_);
- };
-
- my $rnf_add_vendor = sub
- {
- $rnf_add_id0->($he_vendor_id, $he_vendor_name, @_);
- };
-
- my $rnf_add_subdevice = sub
- {
- my ( $id2, $id3, $range, $name, $class, $id, $val );
-
- ( $id2, $id3, $range, $name, $class ) = @_;
-
- @id2 = ( $flag_id, $tag, $id2 );
- @id3 = ( $flag_id, $tag, $id3 );
- $id3[3] = $range if defined $range;
-
- if($ent == $he_device_id || $ent == $he_subdevice_id) {
- $ent = $he_subdevice_id;
-
- $id->[$he_vendor_id] = [ @id0 ];
- $id->[$he_device_id] = [ @id1 ];
- $id->[$he_subvendor_id] = [ @id2 ];
- $id->[$he_subdevice_id] = [ @id3 ];
- $val->[$he_subdevice_name] = [ $flag_string, $name ];
- if(defined $class) {
- $val->[$he_baseclass_id] = [ $flag_id, $tag_none, $class >> 8 ];
- $val->[$he_subclass_id] = [ $flag_id, $tag_none, $class & 0xff ];
- }
- }
- else {
- die "oops $file_name($line): subdevice id expected\n";
- }
-
- push @hd, [ "$file_name($line)", [ $id ], $val ];
- };
-
- ( $file_name, $file ) = @_;
-
- $line = 0;
- undef $sax_version;
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^\s*[#;]/;
- next if /^$/;
-
- # SaX Identity file
- if(/^NAME=(.+?)§DEVICE=(.+?)§VID=0x([0-9a-fA-F]+?)§DID=0x([0-9a-fA-F]+?)§SERVER=([^§]+)(§EXT=([^§]*))?(§OPT=([^§]*))?(§RAW=([^§]*))?$/) {
- # 1 2 3 4 5 6 7 8 9 10 11
-
- $rnf_add_vendor->($tag_pci, hex($3), $1);
-
- @id0 = ( $flag_id, $tag, hex($3) );
- @id1 = ( $flag_id, $tag, hex($4) );
- @id3 = ( $flag_string, $2 );
-
- $id = [];
- $val = [];
-
- $id->[$he_vendor_id] = [ @id0 ];
- $id->[$he_device_id] = [ @id1 ];
- $val->[$he_device_name] = [ @id3 ];
-
- push @hd, [ "$file_name($line)", [ $id ], $val ];
-
- ( $srv, $ext, $opt, $raw ) = ( $5, $7, $9, $11 );
- $sax_tmp = $srv =~ /^3DLABS|MACH64|P9000|RUSH|S3|SVGA|TGA$/ ? 1 : 2;
- $sax_version = $sax_tmp unless defined $sax_version;
- die "line has SaX$sax_tmp format (expected SaX$sax_version): $file_name($line)\n" if $sax_tmp != $sax_version;
-
- $id = [];
- $val = [];
-
- $id->[$he_vendor_id] = [ @id0 ];
- $id->[$he_device_id] = [ @id1 ];
-
- if($opt) {
- $str = join "|", ( $sax_version == 1 ? 3 : 4, $srv, undef, undef, $ext, $opt );
- }
- elsif($ext) {
- $str = join "|", ( $sax_version == 1 ? 3 : 4, $srv, undef, undef, $ext );
- }
- else {
- $str = join "|", ( $sax_version == 1 ? 3 : 4, $srv );
- }
-
- @id4 = ( "x\t$str" );
- if($raw) {
- for $str (split /,/, $raw) { $id4[0] .= "\x00X\t$str" }
- }
-
- $val->[$he_driver] = [ $flag_string, @id4 ];
-
- push @hd, [ "$file_name($line)", [ $id ], $val ];
- }
-
- elsif(/^B\s+([0-9a-fA-F]+)\s+(.*?)\s*$/) {
-
- $rnf_add_bus->(hex($1), $2);
-
- }
-
- elsif(/^C\s+([0-9a-fA-F]+)\s+(.*?)\s*$/) {
-
- $rnf_add_baseclass->(hex($1), $2);
-
- }
-
- elsif(/^([0-9a-fA-F]{4})(\s+(.*?))?\s*$/) {
-
- $rnf_add_vendor->($tag_pci, hex($1), $3);
-
- }
-
- elsif(/^u([0-9a-fA-F]{4})(\s+(.*?))?\s*$/) {
-
- $rnf_add_vendor->($tag_usb, hex($1), $3);
-
- }
-
- elsif(/^s([0-9a-fA-F]{4})(\s+(.*?))?\s*$/) {
-
- $rnf_add_vendor->($tag_special, hex($1), $3);
-
- }
-
- elsif(/^([A-Z_@]{3})(\s+(.*?))?\s*$/) {
-
- $rnf_add_vendor->($tag_eisa, eisa_id($1), $3);
-
- }
-
- elsif(/^\t([0-9a-fA-F]{1,4})(\+([0-9a-fA-F]+))?(\.([0-9a-fA-F]+))?(\s+(.*?))?\s*$/) {
-
- $range = $3 ? hex($3) : undef;
- $class = $5 ? hex($5) : undef;
-
- @id1 = ( $flag_id, $tag, hex($1) );
- $id1[3] = $range if defined $range;
- undef @id2; undef @id3;
-
- $id = [];
- $val = [];
-
- if($ent == $he_baseclass_id || $ent == $he_subclass_id) {
- $ent = $he_subclass_id;
-
- $id->[$he_baseclass_id] = [ @id0 ];
- $id->[$he_subclass_id] = [ @id1 ];
- $val->[$he_subclass_name] = [ $flag_string, $7 ];
- }
- elsif($ent == $he_vendor_id || $ent == $he_device_id || $ent == $he_subdevice_id) {
- $ent = $he_device_id;
-
- $id->[$he_vendor_id] = [ @id0 ];
- $id->[$he_device_id] = [ @id1 ];
- $val->[$he_device_name] = [ $flag_string, $7 ];
- if(defined $class) {
- $val->[$he_baseclass_id] = [ $flag_id, $tag_none, $class >> 8 ];
- $val->[$he_subclass_id] = [ $flag_id, $tag_none, $class & 0xff ];
- }
- }
- else {
- die "oops $file_name($line): device id expected\n";
- }
-
- push @hd, [ "$file_name($line)", [ $id ], $val ];
-
- }
-
- elsif($ent == $he_subclass_id && /^\t\t([0-9a-fA-F]+)\s+(.*?)\s*$/) {
-
- @id2 = ( $flag_id, $tag, hex($1) );
- undef @id3;
-
- $id = [];
- $val = [];
-
- $id->[$he_baseclass_id] = [ @id0 ];
- $id->[$he_subclass_id] = [ @id1 ];
- $id->[$he_progif_id] = [ @id2 ];
- $val->[$he_progif_name] = [ $flag_string, $2 ];
-
- push @hd, [ "$file_name($line)", [ $id ], $val ];
-
- }
-
- elsif(/^\t\t([0-9a-fA-F]{4})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?(\.([0-9a-fA-F]+))?(\s+(.*?))?\s*$/) {
-
- $rnf_add_subdevice->(hex($1), hex($2), $4 ? hex($4) : undef, $8, $6 ? hex($6) : undef);
-
- }
-
- elsif(/^\t\t([A-Z_@]{3})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?(\.([0-9a-fA-F]+))?(\s+(.*?))?\s*$/) {
-
- $rnf_add_subdevice->(eisa_id($1), hex($2), $4 ? hex($4) : undef, $8, $6 ? hex($6) : undef);
-
- }
-
- elsif(/^\t\t([0-9a-fA-F]{4})([0-9a-fA-F]{4})\s+(.*?)\s*$/) {
-
- # NOTE: subvendor & subdevice ids are reversed!
- $rnf_add_subdevice->(hex($2), hex($1), undef, $3);
-
- }
-
- else {
- die "invalid line: $file_name($line)\n";
- }
- }
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read file with driver info
-#
-
-sub read_driver_file
-{
- my ( $line, @drv, $file, $file_name, $drv_type, $tag );
- local $_;
-
- my $rdf_save_drv = sub
- {
- if($drv_type) {
- push @hd, [ @drv ] if defined @drv;
- @drv = ( "$file_name($line)" );
- $drv[2][$he_driver] = [ $flag_string ];
- $drv_type = undef;
- }
- };
-
- my $rdf_add_id = sub
- {
- my ( $tag, $id0, $id1, $range1, $id2, $id3, $range3, $id );
-
- ( $tag, $id0, $id1, $range1, $id2, $id3, $range3 ) = @_;
-
- $rdf_save_drv->();
-
- $id = [];
-
- @id0 = ( $flag_id, $tag, $id0 );
- @id1 = ( $flag_id, $tag, $id1 );
- $id1[3] = $range1 if defined $range1;
-
- $id->[$he_vendor_id] = [ @id0 ];
- $id->[$he_device_id] = [ @id1 ];
-
- if(defined $id2) {
- @id2 = ( $flag_id, $tag, $id2 );
- @id3 = ( $flag_id, $tag, $id3 );
- $id3[3] = $range3 if defined $range3;
-
- $id->[$he_subvendor_id] = [ @id2 ];
- $id->[$he_subdevice_id] = [ @id3 ];
- }
- push @{$drv[1]}, $id;
- };
-
- ( $file_name, $file ) = @_;
-
- $drv_type = 1;
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^[#;]/;
- next if /^$/;
-
- if(/^([us]?)([0-9a-fA-F]{4})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?\s*$/) {
-
- $tag = $tag_pci;
- $tag = $tag_usb if $1 eq 'u';
- $tag = $tag_special if $1 eq 's';
-
- $rdf_add_id->($tag, hex($2), hex($3), $5 ? hex($5) : undef);
-
- }
-
- elsif(/^([A-Z_@]{3})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?\s*$/) {
-
- $rdf_add_id->($tag_eisa, eisa_id($1), hex($2), $4 ? hex($4) : undef);
-
- }
-
- elsif(/^([us]?)([0-9a-fA-F]{4})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?\s+([us]?)([0-9a-fA-F]{4})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?\s*$/) {
-
- $tag = $tag_pci;
- $tag = $tag_usb if $1 eq 'u';
- $tag = $tag_special if $1 eq 's';
-
- $rdf_add_id->($tag, hex($2), hex($3), $5 ? hex($5) : undef, hex($7), hex($8), $10 ? hex($10) : undef);
-
- }
-
- elsif(/^([A-Z_@]{3})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?\s+([A-Z_@]{3})\s+([0-9a-fA-F]{4})(\+([0-9a-fA-F]+))?\s*$/) {
-
- $rdf_add_id->($tag_eisa, eisa_id($1), hex($2), $4 ? hex($4) : undef, eisa_id($5), hex($6), $8 ? hex($8) : undef);
-
- }
-
- elsif(/^\t([a-z])\s+(.*?)\s*$/) {
-
- push @{$drv[2][$he_driver]}, "$1\t$2";
- $drv_type = $1;
-
- }
-
- elsif($drv_type && /^\t\t\s*(.*)$/) {
-
- $drv_type = "X" if $drv_type eq "x";
- $drv_type = "M" if $drv_type eq "m";
- $drv[2][$he_driver][-1] .= "\x00$drv_type\t$1";
-
- }
-
- else {
- die "invalid line: $file_name($line)\n";
- }
- }
-
- $rdf_save_drv->();
-}
-
-
-sub num
-{
- return $_[0] =~ /^0/ ? oct $_[0] : return $_[0] + 0;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read file with id info
-#
-
-sub read_id_file
-{
- my ( $line, $file, $file_name, $tag, $pre, $fields, @item, @id, $state, $keyid );
- my ( $is_id, $i );
- local $_;
-
- my $rif_save_item = sub
- {
- if(@item > 1) {
- push @hd, [ @item ];
- }
- @item = ( "$file_name($line)" );
- };
-
- # parse id field
- my $str2id = sub
- {
- my ($val, $id, $tag, $mask, $range, @id);
-
- $val = shift;
-
- if($val =~ s/^(${\join '|', @tag_name})\s+//o) {
- die "internal oops: $file_name($line)\n" unless exists $tag_values{$1};
- $tag = $tag_values{$1};
- }
- else {
- $tag = 0;
- }
-
- if($val =~ /^\s*(\S+)\s*([&+])\s*(\S+)\s*$/) {
- $id = $1;
- if($2 eq "+") {
- $range = $3;
- }
- else {
- $mask = $3;
- }
- }
- else {
- $id = $val;
- }
-
- if(defined $range) {
- if($range =~ /^(0x[0-9a-zA-Z]+|\d+)$/) {
- $range = num $range;
- }
- else {
- die "$file_name($line): invalid range\n"
- }
- }
-
- if(defined $mask) {
- if($mask =~ /^(0x[0-9a-zA-Z]+|\d+)$/) {
- $mask = num $mask;
- }
- else {
- die "$file_name($line): invalid mask\n"
- }
- }
-
- if($id =~ /^(0x[0-9a-zA-Z]+|\d+)$/) {
- $id = num $id;
- }
- elsif(($tag == $tag_none || $tag == $tag_eisa) && $id =~ /^[A-Z_@]{3}$/) {
- $id = eisa_id $id;
- $tag = $tag_eisa;
- }
- else {
- die "$file_name($line): invalid id\n"
- }
-
- @id = ( $flag_id, $tag, $id );
- $id[3] = $range if defined $range;
- $id[4] = $mask if defined $mask;
-
- return \@id;
- };
-
- ( $file_name, $file ) = @_;
-
- $fields = join "|", map "\Q$_", @ent_names;
-
- $state = 0;
-
- $rif_save_item->();
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^\s*[#;]/;
- next if /^$/;
-
- if(/^\s*([+&|]?)($fields)\s+(.+)/) {
- ($pre, $key, $val) = ($1, $2, $3);
- # print ">$pre< $is_id>$key< >$val<\n";
- die "internal oops: $file_name($line)\n" unless exists $ent_values{$key};
- $keyid = $ent_values{$key};
- $is_id = $keyid < $he_nomask && $key =~ /\.id$/ ? 1 : 0;
- }
- else {
- die "invalid line: $file_name($line)\n";
- }
-
- if($pre eq "") {
- die "invalid line: $file_name($line)\n" unless $state == 0 || $state == 2;
- if($state == 2) {
- $item[2] = [ @id ];
- undef @id;
- }
- $rif_save_item->();
- $state = 1;
- }
- elsif($pre eq "|") {
- die "invalid line: $file_name($line)\n" unless $state == 1;
- push @{$item[1]}, [ @id ];
- undef @id;
- }
- elsif($pre eq "&") {
- die "invalid line: $file_name($line)\n" unless $state == 1;
- }
- elsif($pre eq "+") {
- die "invalid line: $file_name($line)\n" unless $state == 1 || $state == 2;
- if($state == 1) {
- push @{$item[1]}, [ @id ];
- undef @id;
- }
- $state = 2;
- }
- else {
- die "internal oops: $file_name($line)\n";
- }
-
- if($is_id) {
- $id[$keyid] = $str2id->($val);
- }
- elsif($keyid < $he_nomask) {
- $id[$keyid] = [ $flag_string, $val ];
- }
- elsif($keyid == $he_class_id) {
- $i = ${$str2id->($val)}[2];
- $id[$he_baseclass_id] = [ $flag_id, $tag_none, $i >> 8 ];
- $id[$he_subclass_id] = [ $flag_id, $tag_none, $i & 0xff ];
- }
- else {
- undef $i;
- if($keyid == $he_driver_module_insmod) {
- $i = "i";
- }
- elsif($keyid == $he_driver_module_modprobe) {
- $i = "m";
- }
- elsif($keyid == $he_driver_module_config) {
- $i = "M";
- }
- elsif($keyid == $he_driver_xfree) {
- $i = "x";
- }
- elsif($keyid == $he_driver_xfree_config) {
- $i = "X";
- }
- elsif($keyid == $he_driver_mouse) {
- $i = "p";
- }
- elsif($keyid == $he_driver_display) {
- $i = "d";
- }
- elsif($keyid == $he_driver_any) {
- $i = "a";
- }
- else {
- die "unhandled entry: $file_name($line)\n"
- }
- $val = "$i\t$val";
- if(!defined $id[$he_driver]) {
- $id[$he_driver] = [ $flag_string ];
- }
- if($i eq "X" || $i eq "M") {
- $id[$he_driver]->[-1] .= "\x00$val"
- }
- else {
- push @{$id[$he_driver]}, $val;
- }
- }
- }
-
- if($state == 2) {
- $item[2] = [ @id ];
- undef @id;
- }
-
- $rif_save_item->();
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read pcimap file
-#
-
-sub read_pcimap_file
-{
- my (@l, $id, $n, $key, $val, $mask);
- local $_;
-
- ( $file_name, $file ) = @_;
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^\s*#/;
- next if /^$/;
-
- @l = split;
-
- die "invalid line: $file_name($line)\n" unless @l == 8;
-
- $val = [];
-
- $val->[$he_driver] = [ $flag_string, "m\t$l[0]" ];
-
- $key = [];
-
- $key->[$he_vendor_id] = [ $flag_id, $tag_pci, $n ] if ($n = num $l[1]) != 0xffffffff;
- $key->[$he_device_id] = [ $flag_id, $tag_pci, $n ] if ($n = num $l[2]) != 0xffffffff;
- $key->[$he_subvendor_id] = [ $flag_id, $tag_pci, $n ] if ($n = num $l[3]) != 0xffffffff;
- $key->[$he_subdevice_id] = [ $flag_id, $tag_pci, $n ] if ($n = num $l[4]) != 0xffffffff;
-
- $n = num $l[6];
-
- if($mask = ($n >> 16) & 0xff) {
- $key->[$he_baseclass_id] = [ $flag_id, $tag_none, (num($l[5]) >> 16) & 0xff ];
- if($mask != 0xff) {
- $key->[$he_baseclass_id][4] = (~$mask & 0xff);
- }
- }
-
- if($mask = ($n >> 8) & 0xff) {
- $key->[$he_subclass_id] = [ $flag_id, $tag_none, (num($l[5]) >> 8) & 0xff ];
- if($mask != 0xff) {
- $key->[$he_subclass_id][4] = (~$mask & 0xff);
- }
- }
-
- if($mask = $n & 0xff) {
- $key->[$he_progif_id] = [ $flag_id, $tag_none, num($l[5]) & 0xff ];
- if($mask != 0xff) {
- $key->[$he_progif_id][4] = (~$mask & 0xff);
- }
- }
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read usbmap file
-#
-
-sub read_usbmap_file
-{
- my (@l, $id, $n, $key, $val, $mask);
- local $_;
-
- ( $file_name, $file ) = @_;
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^\s*#/;
- next if /^$/;
-
- @l = split;
-
- die "invalid line: $file_name($line)\n" unless @l == 13;
-
- next if num($l[1]) != 3; # match_flags != 3
-
- $val = [];
-
- $key = [];
-
- $key->[$he_vendor_id] = [ $flag_id, $tag_usb, num($l[2]) ];
- $key->[$he_device_id] = [ $flag_id, $tag_usb, num($l[3]) ];
-
- $val->[$he_driver] = [ $flag_string, "m\t$l[0]" ];
-
- if($usbmod2class{$l[0]}) {
- $val->[$he_baseclass_id] = [ $flag_id, $tag_none, $usbmod2class{$l[0]}[0] ] if defined $usbmod2class{$l[0]}[0];
- $val->[$he_subclass_id] = [ $flag_id, $tag_none, $usbmod2class{$l[0]}[1] ] if defined $usbmod2class{$l[0]}[1];
- }
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read alias file
-#
-
-sub read_alias_file
-{
- my ($f, $id, $n, $key, $val, $mask, $tag, $module, $spec, $t1, $t2);
- local $_;
-
- $f = '[0-9A-F*]+';
-
- ( $file_name, $file ) = @_;
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^\s*#/;
- next if /^$/;
-
- next unless /^\s*alias\s+(pci|pnp|usb):(\S+)\s+(\S+)/;
-
- $tag = $tag_pci if $1 eq 'pci';
- $tag = $tag_eisa if $1 eq 'pnp';
- $tag = $tag_usb if $1 eq 'usb';
-
- $spec = $2;
- $module = $3;
-
- $val = [];
-
- $val->[$he_driver] = [ $flag_string, "m\t$module" ];
-
- $key = [];
-
- if($spec =~ /^v($f)d($f)sv($f)sd($f)bc($f)sc($f)i($f)$/ ) {
- $key->[$he_vendor_id] = [ $flag_id, $tag, hex $1 ] if $1 ne '*';
- $key->[$he_device_id] = [ $flag_id, $tag, hex $2 ] if $2 ne '*';
- $key->[$he_subvendor_id] = [ $flag_id, $tag, hex $3 ] if $3 ne '*';
- $key->[$he_subdevice_id] = [ $flag_id, $tag, hex $4 ] if $4 ne '*';
- $key->[$he_baseclass_id] = [ $flag_id, $tag_none, hex $5 ] if $5 ne '*';
- $key->[$he_subclass_id] = [ $flag_id, $tag_none, hex $6 ] if $6 ne '*';
- $key->[$he_progif_id] = [ $flag_id, $tag_none, hex $7 ] if $7 ne '*';
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
- elsif($spec =~ /^v($f)p($f)dl($f)dh($f)dc($f)dsc($f)dp($f)ic($f)isc($f)ip($f)$/ ) {
-
- if(
- $3 == '*' && $4 == '*' && $5 == '*' &&
- $6 == '*' && $7 == '*' && $8 == '*' &&
- $9 == '*' && $10 == '*'
- ) {
- $key->[$he_vendor_id] = [ $flag_id, $tag, hex $1 ] if $1 ne '*';
- $key->[$he_device_id] = [ $flag_id, $tag, hex $2 ] if $2 ne '*';
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
- }
- elsif($spec =~ /^[c|d](\S{3})([0-9a-fA-FX]{4})/ ) {
- $t1 = $1;
- $t2 = $2;
-
- if($t1 =~ /[\@A-Z\[\\\]\^_]{3}/ && $t2 ne 'XXXX') {
- $key->[$he_vendor_id] = [ $flag_id, $tag, eisa_id $t1 ];
- $key->[$he_device_id] = [ $flag_id, $tag, hex $t2 ];
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
- }
- else {
- die "invalid line: $file_name($line)\n"
- }
- }
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# read modinfo data
-#
-
-sub read_modinfo_file
-{
- my ($f, $id, $n, $key, $val, $mask, $tag, $module, $spec, $t1, $t2);
- local $_;
-
- $f = '[0-9A-F*]+';
-
- ( $file_name, $file ) = @_;
-
- for (@$file) {
- $line++;
- chomp;
- s/\s*$//;
- next if /^\s*#/;
- next if /^$/;
-
- if(m#([^/]+)\.ko:$#) {
- $module = $1;
- next;
- }
-
- next unless /^\s*alias:\s+(pci|pnp|usb):(\S+)\s*$/;
-
- $tag = $tag_pci if $1 eq 'pci';
- $tag = $tag_eisa if $1 eq 'pnp';
- $tag = $tag_usb if $1 eq 'usb';
-
- $spec = $2;
-
- $val = [];
-
- $val->[$he_driver] = [ $flag_string, "m\t$module" ];
-
- $key = [];
-
- if($spec =~ /^v($f)d($f)sv($f)sd($f)bc($f)sc($f)i($f)$/ ) {
- $key->[$he_vendor_id] = [ $flag_id, $tag, hex $1 ] if $1 ne '*';
- $key->[$he_device_id] = [ $flag_id, $tag, hex $2 ] if $2 ne '*';
- $key->[$he_subvendor_id] = [ $flag_id, $tag, hex $3 ] if $3 ne '*';
- $key->[$he_subdevice_id] = [ $flag_id, $tag, hex $4 ] if $4 ne '*';
- $key->[$he_baseclass_id] = [ $flag_id, $tag_none, hex $5 ] if $5 ne '*';
- $key->[$he_subclass_id] = [ $flag_id, $tag_none, hex $6 ] if $6 ne '*';
- $key->[$he_progif_id] = [ $flag_id, $tag_none, hex $7 ] if $7 ne '*';
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
- elsif($spec =~ /^v($f)p($f)dl($f)dh($f)dc($f)dsc($f)dp($f)ic($f)isc($f)ip($f)$/ ) {
-
- if(
- $3 == '*' && $4 == '*' && $5 == '*' &&
- $6 == '*' && $7 == '*' && $8 == '*' &&
- $9 == '*' && $10 == '*'
- ) {
- $key->[$he_vendor_id] = [ $flag_id, $tag, hex $1 ] if $1 ne '*';
- $key->[$he_device_id] = [ $flag_id, $tag, hex $2 ] if $2 ne '*';
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
- }
- elsif($spec =~ /^[c|d](\S{3})([0-9a-fA-FX]{4})/ ) {
- $t1 = $1;
- $t2 = $2;
-
- if($t1 =~ /[\@A-Z\[\\\]\^_]{3}/ && $t2 ne 'XXXX') {
- $key->[$he_vendor_id] = [ $flag_id, $tag, eisa_id $t1 ];
- $key->[$he_device_id] = [ $flag_id, $tag, hex $t2 ];
-
- push @hd, [ "$file_name($line)", [ $key ], $val ];
- }
- }
- else {
- die "invalid line: $file_name($line)\n"
- }
- }
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# convert 3-letter eisa id to number
-#
-
-sub eisa_id
-{
- my ( $str, $id, $i, $j );
-
- $str = shift;
- $id = 0;
-
- die "internal oops" unless length($str) == 3;
- for($i = 0; $i < 3; $i++) {
- $id <<= 5;
- $j = ord substr $str, $i, 1;
- $j -= ord('A') - 1;
- die "internal oops" unless $j >= 0 && $j <= 0x1f;
- $id += $j;
- }
-
- return $id;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# convert numerical eisa id to 3-letter string
-#
-
-sub eisa_str
-{
- my ( $id, $str );
-
- $id = shift;
-
- die "internal oops: eisa id \"$id\"" unless $id >= 0 && $id <= 0x7fff;
-
- $str = chr((($id >> 10) & 0x1f) + ord('A') - 1);
- $str .= chr((($id >> 5) & 0x1f) + ord('A') - 1);
- $str .= chr(( $id & 0x1f) + ord('A') - 1);
-
- return $str;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# remove entries that have no effect
-#
-
-sub remove_nops
-{
- my ($hd, $id, $f, $i, $cf);
- local $_;
-
- for $hd (@hd) {
- if(!defined($hd->[1]) || !@{$hd->[1]} || !defined($hd->[2]) || !@{$hd->[2]}) {
- undef $hd;
- next;
- }
- for $id (@{$hd->[1]}, $hd->[2]) {
- if(defined($id)) {
- $cf = 0;
- for $f (@$id) {
- if(defined $f) {
- $cf++;
- if(@$f == 2 && $f->[0] == $flag_string && $f->[1] eq "") {
- undef $f;
- $cf--;
- }
- }
- }
- undef $id if !$cf;
- }
- }
- if(!defined($hd->[1]) || !@{$hd->[1]} || !defined($hd->[2]) || !@{$hd->[2]}) {
- print STDERR "$hd->[0] has no info, dropped\n";
- undef $hd;
- next;
- }
- }
-
- @hd = grep { defined } @hd;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# remove duplicate entries
-#
-
-sub remove_duplicates
-{
- my ($hd, $hd0, $hd1, $len, $i, $j, $m, $v, $buf, $errors, $drop);
- local $_;
-
- $len = @hd;
-
- for($j = 0; $j < $len; $j++) {
- print STDERR ">> $j\r";
- $hd0 = \$hd[$j];
- for($i = $j + 1; $i < $len; $i++) {
- $hd1 = \$hd[$i];
- $m = match_item $$hd0, $$hd1;
- # print "$$hd0->[0] -- $$hd1->[0]: $m\n";
- if($m) {
- $drop = cmp_item $$hd0, $$hd1;
- $drop = !$drop || abs($drop) == 2 ? ", dropped" : undef;
- undef $buf;
- # print STDERR "j: $$hd0->[0], $$hd1->[0]\n";
- $v = join_skey $$hd0->[2], $$hd1->[2], \$buf, \$errors;
- if($errors) {
- print STDERR "$$hd1->[0] conflicts with $$hd0->[0]$drop:\n$buf\n";
- $$hd1 = undef if $drop;
- }
- else {
- if($drop) {
- print STDERR "$$hd1->[0] added to $$hd0->[0] and dropped\n";
- $$hd0->[2] = $v;
-# $$hd1 = undef;
- }
- else {
- print STDERR "$$hd1->[0] shadowed by $$hd0->[0]\n";
- $$hd0->[2] = $v;
- }
- }
- }
- }
- }
-
- @hd = grep { defined } @hd;
-
- for $hd (@hd) {
- if(
- !defined($hd->[2]) ||
- !defined($hd->[2][$he_driver]) ||
- !(defined($hd->[2][$he_device_name]) || defined($hd->[2][$he_subdevice_name]))
- ) {
- undef $hd;
- next;
- }
- }
-
- @hd = grep { defined } @hd;
-
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# remove duplicate entries
-#
-
-sub remove_duplicatesx
-{
- my ($hd0, $hd1, $len, $i, $j, $m, $v, $buf, $errors, $drop);
- local $_;
-
- $len = @hd;
-
- for($j = 0; $j < $len; $j++) {
- print STDERR ">> $j\r";
- $hd0 = \$hd[$j];
- for($i = $j + 1; $i < $len; $i++) {
- $hd1 = \$hd[$i];
- $m = match_item $$hd0, $$hd1;
- # print "$$hd0->[0] -- $$hd1->[0]: $m\n";
- if($m) {
- $drop = cmp_item $$hd0, $$hd1;
- $drop = !$drop || abs($drop) == 2 ? ", dropped" : undef;
- undef $buf;
- $v = join_skey $$hd0->[2], $$hd1->[2], \$buf, \$errors;
- if($errors) {
- print STDERR "$$hd1->[0] conflicts with $$hd0->[0]$drop:\n$buf\n";
- $$hd1 = undef if $drop;
- }
- else {
- if($drop) {
- print STDERR "$$hd1->[0] added to $$hd0->[0] and dropped\n";
- $$hd0->[2] = $v;
- $$hd1 = undef;
- }
- else {
- print STDERR "$$hd1->[0] shadowed by $$hd0->[0]\n";
- }
- }
- }
- }
- }
-
- @hd = grep { defined } @hd;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# fix drive info
-#
-
-sub fix_driver_info
-{
- my ($hd, $hid, $drv, $i, @i, @info, @req, %req);
-
- for $hd (@hd) {
- if(
- !defined($hd->[2]) ||
- !defined($hd->[2][$he_driver])
- ) {
- next;
- }
- $hid = $hd->[2][$he_driver];
- next unless $hid->[0] == $flag_string;
-
- undef @req;
-
- for $drv (@$hid[1 .. @$hid - 1]) {
- @i = split /\x00/, $drv;
- for $i (@i) {
- next if $i =~ /^[MX]\t/;
- $i =~ s/\|+$//;
- next unless $i =~ /^x\t/;
- @info = split /\|/, $i;
- # remove leasding 'XF86_' from server name
- $info[1] =~ s/^XF86_// if $info[1];
- # sort package, extension and option lists
- push @req, split /,/, $info[3] if $info[3];
- # $info[3] = join ',', sort split /,/, $info[3] if $info[3];
- $info[3] = undef if $info[3];
- $info[4] = join ',', sort split /,/, $info[4] if $info[4];
- $info[5] = join ',', sort split /,/, $info[5] if $info[5];
- $info[6] = join ',', sort { $a <=> $b } split /,/, $info[6] if $info[6];
- $i = join '|', @info;
- }
- $drv = join "\x00", @i;
- # print ">$drv<\n"
- }
-
- if(@req) {
- $hid = $hd->[2][$he_requires];
- if($hid) {
- if($hid->[0] != $flag_string) {
- die "oops, invalid data"
- }
- push @req, split /\|/, $hid->[1];
- $hid->[1] = join '|', @req;
- }
- else {
- $hd->[2][$he_requires] = [ $flag_string, join('|', @req) ];
- }
- }
- }
-
- for $hd (@hd) {
- if(
- !defined($hd->[2]) ||
- !defined($hd->[2][$he_requires])
- ) {
- next;
- }
- $hid = $hd->[2][$he_requires];
- next unless $hid->[0] == $flag_string;
-
- undef @req;
- undef %req;
-
- @req = split /\|/, $hid->[1];
- @req{@req} = @req;
-
- $hid->[1] = join '|', sort keys %req;
- }
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# hd: [ "source", [ skey, skey, ... ], [ val ] ]
-# skey/val: [ ... , id, ..., id, ... ]
-# id: [ $flag_id, $tag, $value, $range, $mask ]
-# id: [ $flag_string, "str", "str", ... ]
-
-sub cmp_id
-{
- my ($id0, $id1, $len0, $len1, $len, $i, $k);
-
- ($id0, $id1) = @_;
-
- return 0 if !defined($id0) && !defined($id1);
- return -1 if !defined($id0);
- return 1 if !defined($id1);
-
- if($id0->[0] != $id1->[0]) {
- return $id0->[0] <=> $id1->[0];
- }
-
- $len0 = @$id0;
- $len1 = @$id1;
- $len = $len0 < $len1 ? $len0 : $len1;
-
- if($id0->[0] == $flag_string) {
- for($i = 1; $i < $len; $i++) {
- $k = $id0->[$i] cmp $id1->[$i];
- return $k if $k;
- }
- return $len0 <=> $len1;
- }
-
- if($id0->[0] == $flag_id) {
- $k = $id0->[1] <=> $id1->[1];
- return $k if $k;
- $k = $id0->[2] <=> $id1->[2];
- return $k if $k;
- $k = $len0 <=> $len1;
- return $k if $k || $len <= 3;
- # print "-\n";
- # $dump->dumpValue( $id0 );
- # $dump->dumpValue( $id1 );
- # die "internal oops: strange id" if $len < 4;
- $i = $len - 1;
- return -1 if !defined($id0->[$i]);
- return 1 if !defined($id1->[$i]);
- return $id0->[$i] <=> $id1->[$i];
- }
-
- die "internal oops: can't compare that!";
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-sub cmp_skey
-{
- my ($skey0, $skey1, $len0, $len1, $len, $i, $k);
-
- ($skey0, $skey1) = @_;
-
- return 0 if !defined($skey0) && !defined($skey1);
- return -1 if !defined($skey0);
- return 1 if !defined($skey1);
-
- $len0 = @$skey0;
- $len1 = @$skey1;
- $len = $len0 < $len1 ? $len0 : $len1;
-
- # $dump->dumpValue( $skey0 );
- # $dump->dumpValue( $skey1 );
-
- for($i = 0; $i < $len; $i++) {
- next unless defined($skey0->[$i]) || defined($skey1->[$i]);
-
- # note: this looks reversed, but is intentional!
- return 1 if !defined($skey0->[$i]);
- return -1 if !defined($skey1->[$i]);
-
- $k = cmp_id $skey0->[$i], $skey1->[$i];
-
- return $k if $k;
- }
-
- return $len0 <=> $len1;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# 0: equal
-# +-1: differing keys
-# +-2: differing values
-#
-sub cmp_item
-{
- my ($item0, $item1, $len0, $len1, $len, $i, $k);
-
- ($item0, $item1) = @_;
-
- $cmp_item_cnt++;
-
- return 0 if !defined($item0) && !defined($item1);
- return -1 if !defined($item0);
- return 1 if !defined($item1);
-
- $len0 = @{$item0->[1]};
- $len1 = @{$item1->[1]};
- $len = $len0 < $len1 ? $len0 : $len1;
-
-# $dump->dumpValue( $item0 );
-
- for($i = 0; $i < $len; $i++) {
- return -1 if !defined($item0->[1][$i]);
- return 1 if !defined($item1->[1][$i]);
- $k = cmp_skey $item0->[1][$i], $item1->[1][$i];
- # print " skey: $k\n";
- return $k if $k;
- }
- $k = $len0 <=> $len1;
- return $k if $k;
-
- return 0 if !defined($item0->[2]) && !defined($item1->[2]);
- return -2 if !defined($item0->[2]);
- return 2 if !defined($item1->[2]);
-
- $k = cmp_skey $item0->[2], $item1->[2];
- # print " val: $k\n";
- return 2 * $k;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# check if id1 is part of id0
-#
-# return:
-# 1: yes
-# 0: no
-# undef: don't know
-#
-# hd: [ "source", [ skey, skey, ... ], [ val ] ]
-# skey/val: [ ... , id, ..., id, ... ]
-# id: [ $flag_id, $tag, $value, $range, $mask ]
-# id: [ $flag_string, "str", "str", ... ]
-
-sub match_id
-{
- my ($id0, $id1, $len0, $len1, $len, $i, $k);
-
- ($id0, $id1) = @_;
-
- return 0 if !defined($id0) || !defined($id1);
-
- return 0 if $id0->[0] != $id1->[0];
-
- $len0 = @$id0;
- $len1 = @$id1;
- $len = $len0 < $len1 ? $len0 : $len1;
-
- if($id0->[0] == $flag_string) {
- for($i = 1; $i < $len; $i++) {
- return 0 if $id0->[$i] cmp $id1->[$i];
- }
- return $len0 != $len1 ? 0 : 1;
- }
-
- if($id0->[0] == $flag_id) {
- return 0 if $id0->[1] != $id1->[1];
- if($len1 == 3) {
- if($len0 == 3) {
- return $id0->[2] != $id1->[2] ? 0 : 1;
- }
- elsif($len0 == 4) {
- return $id1->[2] >= $id0->[2] && $id1->[2] < $id0->[2] + $id0->[3] ? 1 : 0;
- }
- elsif($len0 == 5) {
- return ($id1->[2] & ~$id0->[4]) == $id0->[2] ? 1 : 0;
- }
- else {
- die "invalid id";
- }
- }
- elsif($len1 == 4) {
- return undef;
- }
- elsif($len1 == 5) {
- return undef;
- }
- else {
- die "invalid id";
- }
- }
-
- die "internal oops: can't match that!";
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# skey1 part of skey0?
-#
-sub match_skey
-{
- my ($skey0, $skey1, $len0, $len1, $len, $i, $k);
-
- ($skey0, $skey1) = @_;
-
- return 0 if !defined($skey0) || !defined($skey1);
-
- $len0 = @$skey0;
- $len1 = @$skey1;
-
- $len = $len0 > $len1 ? $len0 : $len1;
-
- # $dump->dumpValue( $skey0 );
- # $dump->dumpValue( $skey1 );
-
- for($i = 0; $i < $len; $i++) {
- next unless defined($skey1->[$i]);
-
- return 0 if !defined($skey0->[$i]) && defined($skey1->[$i]);
-
- $k = match_id $skey0->[$i], $skey1->[$i];
-
- return $k if !$k;
- }
-
- return 1;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# item1 part of item0?
-#
-sub match_item
-{
- my ($item0, $item1, $len0, $len1, $i, $j, $k, $m);
-
- ($item0, $item1) = @_;
-
- $match_item_cnt++;
-
- return 0 if !defined($item0) || !defined($item1);
-
- $len0 = @{$item0->[1]};
- $len1 = @{$item1->[1]};
-
- for($j = 0; $j < $len1; $j++) {
- for($i = 0; $i < $len0; $i++) {
- $k = match_skey $item0->[1][$i], $item1->[1][$j];
- $m = $k if defined $k;
- return $k if $k;
- }
- }
-
- return $m
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# add skey1 to skey0
-#
-sub join_skey
-{
- my ($skey0, $skey1, $len, $i, $k, $n, $buf, $err);
-
- ($skey0, $skey1, $buf, $errors) = @_;
-
- $$errors = 0;
-
- return undef if !defined($skey0) && !defined($skey1);
- return [ @$skey0 ] if !defined($skey1);
- return [ @$skey1 ] if !defined($skey0);
-
- $n = [ @$skey0 ];
-
- $len = @$skey1;
-
- for($i = 0; $i < $len; $i++) {
- next unless defined $skey1->[$i];
-
- $n->[$i] = $skey1->[$i];
-
- next unless defined $skey0->[$i];
-
- $k = cmp_id $skey0->[$i], $skey1->[$i];
-
- if($k) {
- if(defined $buf) {
- if($i != $he_driver) {
- $$buf .= ent_name_pr(" 0:", $ent_names[$i]);
- $$buf .= id_dump($i, $skey0->[$i]) . "\n";
- $$buf .= ent_name_pr(" 1:", $ent_names[$i]);
- $$buf .= id_dump($i, $skey1->[$i]) . "\n";
- }
- else {
- $$buf .= drv_dump(" 0:", $skey0->[$i]);
- $$buf =~ s/\n&/\n 0:/;
- $$buf .= drv_dump(" 1:", $skey1->[$i]);
- $$buf =~ s/\n&/\n 1:/;
- }
- }
- $$errors++ if defined $errors;
- }
- }
-
- return $n;
-}
-
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-# split key fields
-#
-sub split_item
-{
- my ($item, @items, $tmp);
- local $_;
-
- $item = shift;
-
- return $item if !defined($item) || !defined($item->[1]);
-
- for (@{$item->[1]}) {
- $tmp = [ @$item ];
- $tmp->[1] = [ $_ ];
- push @items, $tmp;
- }
-
- return @items;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-sub get_xml_data
-{
- my ($xml, $i, $j);
-
- $xml = shift;
-
- if($xml->[0] ne 'hwdata') {
- die "invalid XML root element (expected 'hwdata')\n"
- }
-
- for($i = 1; $i < @{$xml->[1]}; $i += 2) {
- if($xml->[1][$i] eq 'item') {
- push @hd, parse_xml_item($xml->[1][$i + 1]);
- }
- }
-}
-
-
-sub parse_xml_item
-{
- my (@xml, %attr, $i, $item);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- if($xml[$i] eq 'key') {
- push @{$item->[1]}, parse_xml_key($xml[$i + 1]);
- }
- else {
- $item->[2] = parse_xml_key($_[0]);
- }
- }
-
- return $item;
-}
-
-
-sub parse_xml_key
-{
- my (@xml, %attr, $i, @key, $val, $id, $is_id, $keyid, $keyid2, $tmp);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0' || $xml[$i] eq 'key';
-
- $keyid = $xml_values{$xml[$i]};
- $is_id = $keyid < $he_nomask && $ent_names[$keyid] =~ /\.(id|name)$/ ? 1 : 0;
-
- if(!defined($keyid)) {
- die "invalid key element \"$xml[$i]\"\n";
- }
-
- if($keyid == $he_driver) {
- $id = parse_xml_driver($xml[$i + 1]);
- if(!defined($key[$keyid])) {
- $key[$keyid] = $id;
- }
- else {
- push @{$key[$keyid]}, $id->[1];
- }
- }
- elsif($is_id) {
- $id = parse_xml_id($xml[$i + 1]);
- if($id->[0] == $flag_id) {
- $tmp = $ent_names[$keyid];
- $tmp =~ s/\.name$/.id/;
- $keyid2 = $ent_values{$tmp};
- if(!defined($keyid2)) {
- die "oops, no .id for $xml[$i]?";
- }
- }
- else {
- $tmp = $ent_names[$keyid];
- $tmp =~ s/\.id$/.name/;
- $keyid2 = $ent_values{$tmp};
- if(!defined($keyid2)) {
- die "oops, no .name for $xml[$i]?";
- }
- }
- $key[$keyid2] = $id;
- }
- else {
- $val = parse_xml_cdata($xml[$i + 1]);
- if(defined($key[$keyid]) && $keyid == $he_requires) {
- $key[$keyid][1] .= "|$val";
- }
- else {
- $key[$keyid] = [ $flag_string, $val ];
- }
- }
- }
-
- return [ @key ];
-}
-
-
-sub parse_xml_id
-{
- my (@xml, %attr, $i, $id, $val);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
-
- if($xml[$i] eq 'id') {
- $id = parse_xml_id_id($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'idrange') {
- $id = parse_xml_id_range($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'idmask') {
- $id = parse_xml_id_mask($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'name') {
- $val = parse_xml_cdata($xml[$i + 1]);
- $id = [ $flag_string, $val ];
- }
- else {
- die "invalid id element \"$xml[$i]\"\n";
- }
- }
-
- return $id;
-}
-
-
-sub parse_xml_id_id
-{
- my (@xml, %attr, $i, $tag, $value);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- $tag = $tag_values{$attr{type}};
-
- if(!defined($tag)) {
- die "missing/unsupported id attribute \"$attr{type}\"\n";
- }
-
- for($i = 0; $i < @xml; $i += 2) {
- if($xml[$i] eq '0') {
- $value = idstr2value $tag, $xml[$i + 1];
- }
- else {
- die "cdata expected, got \"$xml[$i]\"\n";
- }
- }
-
- return [ $flag_id, $tag, $value ];
-}
-
-
-sub parse_xml_id_range
-{
- my (@xml, %attr, $i, $tag, $value, $range);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- $tag = $tag_values{$attr{type}};
-
- if(!defined($tag)) {
- die "missing/unsupported id attribute \"$attr{type}\"\n";
- }
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
- if($xml[$i] eq 'first') {
- $value = idstr2value $tag, parse_xml_cdata($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'last') {
- $range = idstr2value $tag, parse_xml_cdata($xml[$i + 1]);
- }
- else {
- die "invalid idrange element \"$xml[$i]\"\n";
- }
- }
-
- if(!defined($value) || !defined($range)) {
- die "invalid idrange\n";
- }
-
- return [ $flag_id, $tag, $value, $range - $value + 1 ];
-}
-
-
-sub parse_xml_id_mask
-{
- my (@xml, %attr, $i, $tag, $value, $mask);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- $tag = $tag_values{$attr{type}};
-
- if(!defined($tag)) {
- die "missing/unsupported id attribute \"$attr{type}\"\n";
- }
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
- if($xml[$i] eq 'value') {
- $value = idstr2value $tag, parse_xml_cdata($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'mask') {
- $mask = idstr2value $tag, parse_xml_cdata($xml[$i + 1]);
- }
- else {
- die "invalid idmask element \"$xml[$i]\"\n";
- }
- }
-
- if(!defined($value) || !defined($mask)) {
- die "invalid idmask\n";
- }
-
- return [ $flag_id, $tag, $value, undef, $mask ];
-}
-
-
-sub parse_xml_driver
-{
- my (@xml, %attr, $i, $val);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
-
- if($xml[$i] eq 'any') {
- $val = "a\t" . parse_xml_cdata($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'display') {
- $val = parse_xml_driver_display($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'module') {
- $val = parse_xml_driver_module($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'mouse') {
- $val = parse_xml_driver_mouse($xml[$i + 1]);
- }
- elsif($xml[$i] eq 'xfree') {
- $val = parse_xml_driver_xfree($xml[$i + 1]);
- }
- else {
- die "invalid driver element \"$xml[$i]\"\n";
- }
- }
-
- return [ $flag_string, $val ];
-}
-
-
-sub parse_xml_driver_display
-{
- my (@xml, %attr, $i, @val);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
-
- if($xml[$i] eq 'resolution') {
- $val[0] = join('x', parse_xml_pair($xml[$i + 1], 'width', 'height'));
- }
- elsif($xml[$i] eq 'vsync') {
- $val[1] = join('-', parse_xml_pair($xml[$i + 1], 'min', 'max'));
- }
- elsif($xml[$i] eq 'hsync') {
- $val[2] = join('-', parse_xml_pair($xml[$i + 1], 'min', 'max'));
- }
- elsif($xml[$i] eq 'bandwidth') {
- $val[3] = parse_xml_cdata($xml[$i + 1]);
- }
- else {
- die "invalid display element \"$xml[$i]\"\n";
- }
- }
-
- if(!@val) {
- die "invalid display info\n";
- }
-
- return "d\t" . join('|', @val);
-}
-
-
-sub parse_xml_driver_module
-{
- my (@xml, %attr, $i, $val, $type, @conf, @mods);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
-
- $val = parse_xml_cdata($xml[$i + 1]);
-
- if($xml[$i] eq 'modprobe') {
- if($type && $type ne 'm') {
- die "invalid module info: \"$xml[$i]\"\n";
- }
- $type = 'm';
- push @mods, $val;
- }
- elsif($xml[$i] eq 'insmod') {
- if($type && $type ne 'i') {
- die "invalid module info: \"$xml[$i]\"\n";
- }
- $type = 'i';
- push @mods, $val;
- }
- elsif($xml[$i] eq 'modconf') {
- if($type && $type ne 'm') {
- die "invalid module info: \"$xml[$i]\"\n";
- }
- push @conf, "\x00M\t$val";
- }
- else {
- die "invalid module element \"$xml[$i]\"\n";
- }
- }
-
- if(!$type && !@mods) {
- die "invalid module info\n";
- }
-
- $val = "$type\t" . join('|', @mods);
-
- if(@conf) {
- $val .= join('', @conf);
- }
-
- return $val;
-}
-
-
-sub parse_xml_driver_mouse
-{
- my (@xml, %attr, $i, $val, @val);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
-
- $val = parse_xml_cdata($xml[$i + 1]);
-
- if($xml[$i] eq 'xf86') {
- $val[0] = $val;
- }
- elsif($xml[$i] eq 'gpm') {
- $val[1] = $val;
- }
- elsif($xml[$i] eq 'buttons') {
- $val[2] = $val;
- }
- elsif($xml[$i] eq 'wheels') {
- $val[3] = $val;
- }
- else {
- die "invalid mouse element \"$xml[$i]\"\n";
- }
- }
-
- if(!@val) {
- die "invalid mouse info\n";
- }
-
- return "p\t" . join('|', @val);
-}
-
-
-sub parse_xml_driver_xfree
-{
- my (@xml, %attr, $i, $val, @val, @conf);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
-
- if($xml[$i] eq 'has3d') {
- $val[2] = '3d';
- }
- else {
- $val = parse_xml_cdata($xml[$i + 1]);
-
- if($xml[$i] eq 'version') {
- $val[0] = $val;
- }
- elsif($xml[$i] eq 'server') {
- $val[1] = $val;
- }
- elsif($xml[$i] eq 'extension') {
- $val[4] .= "," if defined $val[4];
- $val[4] .= $val;
- }
- elsif($xml[$i] eq 'option') {
- $val[5] .= "," if defined $val[5];
- $val[5] .= $val;
- }
- elsif($xml[$i] eq 'bpp') {
- $val[6] .= "," if defined $val[6];
- $val[6] .= $val;
- }
- elsif($xml[$i] eq 'dacspeed') {
- $val[7] = $val;
- }
- elsif($xml[$i] eq 'script') {
- $val[8] = $val;
- }
- elsif($xml[$i] eq 'xf86conf') {
- push @conf, "\x00X\t$val";
- }
- else {
- die "invalid xfree element \"$xml[$i]\"\n";
- }
- }
- }
-
- if(!@val) {
- die "invalid xfree info\n";
- }
-
- $val = "x\t" . join('|', @val);
-
- if(@conf) {
- $val .= join('', @conf);
- }
-
- return $val;
-}
-
-
-sub parse_xml_pair
-{
- my (@xml, %attr, $i, $val0, $val1, $elem0, $elem1);
-
- $elem0 = $_[1];
- $elem1 = $_[2];
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- next if $xml[$i] eq '0';
- if($xml[$i] eq $elem0) {
- $val0 = parse_xml_cdata($xml[$i + 1]);
- }
- elsif($xml[$i] eq $elem1) {
- $val1 = parse_xml_cdata($xml[$i + 1]);
- }
- else {
- die "invalid element \"$xml[$i]\"\n";
- }
- }
-
- if(!defined($val0) || !defined($val1)) {
- die "invalid element\n";
- }
-
- return ($val0, $val1);
-}
-
-
-sub parse_xml_cdata
-{
- my (@xml, %attr, $i);
-
- @xml = @{$_[0]};
- %attr = %{shift @xml};
-
- for($i = 0; $i < @xml; $i += 2) {
- if($xml[$i] eq '0') {
- return $xml[$i + 1]
- }
- }
-}
-
-
-sub idstr2value
-{
- my ($tag, $value);
-
- ($tag, $value) = @_;
-
- if($tag == $tag_eisa && length($value) == 3 && $value !~ /^[0-9]/) {
- $value = eisa_id $value;
- }
- else {
- $value = num $value;
- }
-
- return $value;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-sub ent_name_pr
-{
- my ($str, $len);
-
- $str = $_[0] . $_[1];
-
- $len = length $str;
-
- $str .= "\t";
- $len = ($len & ~7) + 8;
- $str .= "\t" x ((24 - $len)/8) if $len < 24;
-
- return $str;
-}
-
-
-sub id_dump
-{
- my ($id, $ent, $str, $tag, $format);
-
- ($ent, $id) = @_;
-
- if($id->[0] == $flag_id) {
- $tag = $id->[1];
- if($tag == $tag_eisa && ($ent == $he_vendor_id || $ent == $he_subvendor_id)) {
- $str = eisa_str $id->[2];
- }
- else {
- $str .= $tag_name[$tag];
- $str .= " " if $tag;
- $format = "0x%04x";
- $format = "0x%02x" if $ent == $he_bus_id || $ent == $he_subclass_id || $ent == $he_progif_id;
- $format = "0x%03x" if $ent == $he_baseclass_id;
- $str .= sprintf $format, $id->[2];
- }
- if(defined $id->[3]) {
- $str .= sprintf "+0x%04x", $id->[3];
- }
- elsif(defined $id->[4]) {
- $str .= sprintf "&0x%04x", $id->[4];
- }
- }
- elsif($id->[0] == $flag_string) {
- if(defined($id->[2])) {
- die "oops: strage string data\n";
- }
- $str = $id->[1];
- }
- else {
- die "oops: unknown id flag\n"
- }
-
- return $str;
-}
-
-
-sub drv_dump
-{
- my ($id, $str, $i, $pre, $type, $drv, $buf);
-
- ($pre, $id) = @_;
-
- die "oops: invalid driver data\n" if $id->[0] != $flag_string;
-
- for($i = 1; $i < @{$id}; $i++) {
- for $drv (split /\x00/, $id->[$i]) {
- $type = substr $drv, 0, 2;
-
- if($type eq "x\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_xfree]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "X\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_xfree_config]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "i\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_module_insmod]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "m\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_module_modprobe]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "M\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_module_config]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "p\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_mouse]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "d\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_display]);
- $buf .= substr($drv, 2) . "\n";
- }
- elsif($type eq "a\t") {
- $buf .= ent_name_pr($pre, $ent_names[$he_driver_any]);
- $buf .= substr($drv, 2) . "\n";
- }
- else {
- die "oops: unhandled driver info type: $drv\n";
- }
-
- $pre = "&" if $pre ne "+";
- }
- }
-
- return $buf;
-}
-
-
-sub ent_dump
-{
- my ($pre, $id, $ent, $buf);
-
- ($buf, $pre, $id) = @_;
-
- $pre = defined($pre) ? "|" : " " if $pre ne "+";
- for($ent = 0; $ent < @{$id}; $ent++) {
- if(defined $id->[$ent]) {
- if($ent != $he_driver) {
- $$buf .= ent_name_pr($pre, $ent_names[$ent]);
- $$buf .= id_dump($ent, $id->[$ent]);
- $$buf .= "\n";
- }
- else {
- $$buf .= drv_dump($pre, $id->[$ent]);
- }
- $pre = "&" if $pre ne "+";
- }
- }
-
- return $pre;
-}
-
-
-sub dump2ids
-{
- my ($item, $id, $ent, $pre, $buf);
-
- # $dump->dumpValue( \@hd );
-
- open F, ">hd.ids";
-
- for $item (@hd) {
- undef $buf;
- undef $pre;
- print F "# $item->[0]\n" if $opt_with_source;
- for $id (@{$item->[1]}) {
- $pre = ent_dump \$buf, $pre, $id;
- }
- $pre = "+";
- ent_dump \$buf, $pre, $item->[2];
- $buf .= "\n";
-
- print F $buf;
- }
-
- close F;
-}
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-sub dump2xml
-{
- my ($item, $dtd);
-
- if($opt_internal_dtd) {
- $dtd = hd_dtd_internal;
- }
- else {
- $dtd = "<!DOCTYPE hwdata SYSTEM \"hd.dtd\">\n";
- }
-
- $xml_file = new IO::File(">hd.xml");
- $xml = new XML::Writer(OUTPUT => $xml_file, DATA_MODE => 1, DATA_INDENT => 2);
-
- $xml->xmlDecl("utf-8");
-
- print $xml_file "\n$dtd";
-
- $xml->startTag("hwdata");
-
- print $xml_file "\n";
-
- for $item (@hd) {
- dump_xml_item $item;
- }
-
- $xml->endTag("hwdata");
- $xml->end();
-
- if(!$opt_internal_dtd) {
- print STDERR "writing \"hd.dtd\"\n";
- open DTD, ">hd.dtd";
- print DTD hd_dtd;
- close DTD;
- }
-}
-
-
-sub dump_xml_id
-{
- my ($ent, $id, $i, $tag, $str, $format, $range, $mask);
-
- ($ent, $id) = @_;
-
- $i = $xml_names[$ent];
-
- die "oops: entry $ent not allowed here\n" unless $i;
-
- if($ent == $he_requires) {
- if($id->[0] == $flag_string) {
- die "oops: strange string data\n" if defined $id->[2];
- for $str (split /\|/, $id->[1]) {
- $xml->dataElement("requires", $str);
- }
- }
- else {
- die "oops: requires _id_???\n"
- }
- }
- else {
- $xml->startTag($i);
-
- if($ent == $he_serial) {
- if($id->[0] == $flag_string) {
- die "oops: strange string data\n" if defined $id->[2];
- $xml->characters($id->[1]);
- }
- else {
- die "oops: serial _id_???\n"
- }
- }
- else {
- if($id->[0] == $flag_id) {
- $tag = $id->[1];
- if($tag == $tag_eisa && ($ent == $he_vendor_id || $ent == $he_subvendor_id)) {
- $str = eisa_str $id->[2];
- }
- else {
- $format = "0x%04x";
- $format = "0x%02x" if $ent == $he_bus_id || $ent == $he_subclass_id || $ent == $he_progif_id;
- $format = "0x%03x" if $ent == $he_baseclass_id;
- $str = sprintf $format, $id->[2];
- }
- if(defined $id->[3]) {
- if($tag == $tag_eisa && ($ent == $he_vendor_id || $ent == $he_subvendor_id)) {
- $range = eisa_str $id->[2] + $id->[3] - 1;
- }
- else {
- $range = sprintf "0x%04x", $id->[2] + $id->[3] - 1;
- }
- }
- elsif(defined $id->[4]) {
- $mask = sprintf "0x%04x", $id->[4];
- }
- $tag = $tag_name[$tag];
-
- if(defined $range) {
- if($tag) {
- $xml->startTag("idrange", "type" => $tag);
- }
- else {
- $xml->startTag("idrange");
- }
- $xml->dataElement("first", $str);
- $xml->dataElement("last", $range);
- $xml->endTag();
- }
- elsif(defined $mask) {
- if($tag) {
- $xml->startTag("idmask", "type" => $tag);
- }
- else {
- $xml->startTag("idmask");
- }
- $xml->dataElement("value", $str);
- $xml->dataElement("mask", $mask);
- $xml->endTag();
- }
- else {
- if($tag) {
- $xml->dataElement("id", $str, "type" => $tag);
- }
- else {
- $xml->dataElement("id", $str);
- }
- }
- }
- elsif($id->[0] == $flag_string) {
- die "oops: strage string data\n" if defined $id->[2];
- $xml->dataElement("name", $id->[1]);
- }
- else {
- die "oops: unknown id flag\n"
- }
- }
-
- $xml->endTag();
- }
-}
-
-
-sub dump_xml_drv
-{
- my ($id, $str, $i, $j, $k, $type, $drv, $info, @info, $current);
-
- $id = shift;
-
- die "oops: invalid driver data\n" if $id->[0] != $flag_string;
-
- for($i = 1; $i < @{$id}; $i++) {
-
- $xml->startTag('driver');
-
- undef $current;
-
- for $drv (split /\x00/, $id->[$i]) {
- $type = substr $drv, 0, 2;
- $info = substr $drv, 2;
- @info = split /\|/, $info;
-
- if($type eq "i\t") {
- $xml->endTag() if $current; $current = $type;
- $xml->startTag('module');
- for $j (@info) {
- $xml->dataElement('insmod', $j);
- }
- }
- elsif($type eq "m\t") {
- $xml->endTag() if $current; $current = $type;
- $xml->startTag('module');
- for $j (@info) {
- $xml->dataElement('modprobe', $j);
- }
- }
- elsif($type eq "M\t") {
- die "oops: incorrect driver info: $drv\n" unless $current eq "m\t";
- $xml->dataElement('modconf', $info);
- }
- elsif($type eq "a\t") {
- $xml->endTag() if $current; $current = undef;;
- $xml->dataElement('any', $info);
- }
- elsif($type eq "d\t") {
- $xml->endTag() if $current; $current = undef;
- $xml->startTag('display');
- if($info[0] =~ /^(\d+)x(\d+)$/) {
- ($j, $k) = ($1, $2);
- $xml->startTag('resolution');
- $xml->dataElement('width', $j);
- $xml->dataElement('height', $k);
- $xml->endTag('resolution');
- }
- if($info[1] =~ /^(\d+)-(\d+)$/) {
- ($j, $k) = ($1, $2);
- $xml->startTag('vsync');
- $xml->dataElement('min', $j);
- $xml->dataElement('max', $k);
- $xml->endTag('vsync');
- }
- if($info[2] =~ /^(\d+)-(\d+)$/) {
- ($j, $k) = ($1, $2);
- $xml->startTag('hsync');
- $xml->dataElement('min', $j);
- $xml->dataElement('max', $k);
- $xml->endTag('hsync');
- }
- if($info[3] =~ /^\d+$/) {
- $xml->dataElement('bandwidth', $info[3]);
- }
- $xml->endTag('display');
- }
- elsif($type eq "x\t") {
- $xml->endTag() if $current; $current = $type;
- $xml->startTag('xfree');
- if(defined $info[0]) {
- $xml->dataElement('version', $info[0]);
- }
- if($info[1]) {
- $xml->dataElement('server', $info[1]);
- }
- if($info[2]) {
- $xml->emptyTag('has3d');
- }
-# if($info[3]) {
-# for $j (split /,/, $info[3]) {
-# $xml->dataElement('package', $j);
-# }
-# }
- if($info[4]) {
- for $j (split /,/, $info[4]) {
- $xml->dataElement('extension', $j);
- }
- }
- if($info[5]) {
- for $j (split /,/, $info[5]) {
- $xml->dataElement('option', $j);
- }
- }
- if($info[6]) {
- for $j (split /,/, $info[6]) {
- $xml->dataElement('bpp', $j);
- }
- }
- if($info[7] =~ /^\d+$/) {
- $xml->dataElement('dacspeed', $info[7]);
- }
- if($info[8]) {
- $xml->dataElement('script', $info[8]);
- }
- }
- elsif($type eq "X\t") {
- die "oops: incorrect driver info: $drv\n" unless $current eq "x\t";
- $xml->dataElement('xf86conf', $info);
- }
- elsif($type eq "p\t") {
- $xml->endTag() if $current; $current = undef;
- $xml->startTag('mouse');
- if($info[0]) {
- $xml->dataElement('xf86', $info[0]);
- }
- if($info[1]) {
- $xml->dataElement('gpm', $info[1]);
- }
- if($info[2] ne "") {
- $xml->dataElement('buttons', $info[2]);
- }
- if($info[3] ne "") {
- $xml->dataElement('wheels', $info[3]);
- }
- $xml->endTag('mouse');
- }
- else {
- $xml->endTag() if $current; $current = undef;
- # die "oops: unhandled driver info type: $drv\n";
- }
- }
-
- $xml->endTag() if $current;
-
- $xml->endTag('driver');
-
- }
-}
-
-
-sub dump_xml_ent
-{
- my ($id, $ent);
-
- $id = shift;
-
- for($ent = 0; $ent < @{$id}; $ent++) {
- if(defined $id->[$ent]) {
- if($ent != $he_driver) {
- dump_xml_id $ent, $id->[$ent];
- }
- else {
- dump_xml_drv $id->[$ent];
- }
- }
- }
-
-}
-
-
-sub dump_xml_item
-{
- my ($item, $id);
-
- $item = shift;
-
- $xml->startTag('item');
-
- for $id (@{$item->[1]}) {
- $xml->startTag('key');
- dump_xml_ent $id;
- $xml->endTag('key');
- }
-
- dump_xml_ent $item->[2];
-
- $xml->endTag('item');
- print $xml_file "\n";
-}
-
-
-sub hd_dtd
-{
- my $dtd = <<'EOF'
-<!-- libhd DTD V0.2 -->
-
-<!ENTITY % keyfields "bus|baseclass|subclass|progif|vendor|device|subvendor|subdevice|revision|serial|driver|requires">
-<!ENTITY % idelements "id|idrange|idmask|name">
-<!ENTITY % idtypes "none|pci|eisa|usb|pcmcia|special">
-
-<!ELEMENT hwdata (item*)>
-
-<!ELEMENT item (key+,(%keyfields;)*)>
-
-<!ELEMENT key (%keyfields;)+>
-
- <!ELEMENT bus (%idelements;)>
- <!ELEMENT baseclass (%idelements;)>
- <!ELEMENT subclass (%idelements;)>
- <!ELEMENT progif (%idelements;)>
- <!ELEMENT vendor (%idelements;)>
- <!ELEMENT device (%idelements;)>
- <!ELEMENT subvendor (%idelements;)>
- <!ELEMENT subdevice (%idelements;)>
- <!ELEMENT revision (%idelements;)>
- <!ELEMENT serial (#PCDATA)>
- <!ELEMENT requires (#PCDATA)>
- <!ELEMENT id (#PCDATA)>
- <!ELEMENT idrange (first,last)>
- <!ELEMENT first (#PCDATA)>
- <!ELEMENT last (#PCDATA)>
- <!ELEMENT idmask (value,mask)>
- <!ELEMENT value (#PCDATA)>
- <!ELEMENT mask (#PCDATA)>
- <!ATTLIST id type (%idtypes;) "none">
- <!ATTLIST idrange type (%idtypes;) "none">
- <!ATTLIST idmask type (%idtypes;) "none">
- <!ELEMENT name (#PCDATA)>
-
-<!ELEMENT driver (any|display|module|mouse|xfree)?>
-
- <!ELEMENT any (#PCDATA)>
-
- <!ELEMENT display (resolution?,vsync?,hsync?,bandwidth?)>
- <!ELEMENT resolution (width,height)>
- <!ELEMENT width (#PCDATA)>
- <!ELEMENT height (#PCDATA)>
- <!ELEMENT vsync (min,max)>
- <!ELEMENT hsync (min,max)>
- <!ELEMENT min (#PCDATA)>
- <!ELEMENT max (#PCDATA)>
- <!ELEMENT bandwidth (#PCDATA)>
-
- <!ELEMENT module (insmod+|(modprobe+,modconf*))>
- <!ELEMENT insmod (#PCDATA)>
- <!ELEMENT modprobe (#PCDATA)>
- <!ELEMENT modconf (#PCDATA)>
-
- <!ELEMENT mouse (xf86?,gpm?,buttons?,wheels?)>
- <!ELEMENT xf86 (#PCDATA)>
- <!ELEMENT gpm (#PCDATA)>
- <!ELEMENT buttons (#PCDATA)>
- <!ELEMENT wheels (#PCDATA)>
-
- <!ELEMENT xfree (version,server?,has3d?,extension*,option*,bpp*,dacspeed?,script?,xf86conf*)>
- <!ELEMENT version (#PCDATA)>
- <!ELEMENT server (#PCDATA)>
- <!ELEMENT has3d EMPTY>
- <!ELEMENT extension (#PCDATA)>
- <!ELEMENT option (#PCDATA)>
- <!ELEMENT bpp (#PCDATA)>
- <!ELEMENT dacspeed (#PCDATA)>
- <!ELEMENT script (#PCDATA)>
- <!ELEMENT xf86conf (#PCDATA)>
-EOF
-;
-
- return $dtd;
-}
-
-
-sub hd_dtd_internal
-{
- my $dtd = <<'EOF'
-<!DOCTYPE hwdata [
- <!ELEMENT hwdata (item*)>
- <!ELEMENT item (key+,(bus|baseclass|subclass|progif|vendor|device|subvendor|subdevice|revision|serial|driver|requires)*)>
- <!ELEMENT key (bus|baseclass|subclass|progif|vendor|device|subvendor|subdevice|revision|serial|driver|requires)+>
- <!ELEMENT bus (id|idrange|idmask|name)>
- <!ELEMENT baseclass (id|idrange|idmask|name)>
- <!ELEMENT subclass (id|idrange|idmask|name)>
- <!ELEMENT progif (id|idrange|idmask|name)>
- <!ELEMENT vendor (id|idrange|idmask|name)>
- <!ELEMENT device (id|idrange|idmask|name)>
- <!ELEMENT subvendor (id|idrange|idmask|name)>
- <!ELEMENT subdevice (id|idrange|idmask|name)>
- <!ELEMENT revision (id|idrange|idmask|name)>
- <!ELEMENT serial (#PCDATA)>
- <!ELEMENT requires (#PCDATA)>
- <!ELEMENT id (#PCDATA)>
- <!ELEMENT idrange (first,last)>
- <!ELEMENT first (#PCDATA)>
- <!ELEMENT last (#PCDATA)>
- <!ELEMENT idmask (value,mask)>
- <!ELEMENT value (#PCDATA)>
- <!ELEMENT mask (#PCDATA)>
- <!ATTLIST id type (none|pci|eisa|usb|pcmcia|special) "none">
- <!ATTLIST idrange type (none|pci|eisa|usb|special) "none">
- <!ATTLIST idmask type (none|pci|eisa|usb|special) "none">
- <!ELEMENT name (#PCDATA)>
- <!ELEMENT driver (any|display|module|mouse|xfree)?>
- <!ELEMENT any (#PCDATA)>
- <!ELEMENT display (resolution?,vsync?,hsync?,bandwidth?)>
- <!ELEMENT resolution (width,height)>
- <!ELEMENT width (#PCDATA)>
- <!ELEMENT height (#PCDATA)>
- <!ELEMENT vsync (min,max)>
- <!ELEMENT hsync (min,max)>
- <!ELEMENT min (#PCDATA)>
- <!ELEMENT max (#PCDATA)>
- <!ELEMENT bandwidth (#PCDATA)>
- <!ELEMENT module (insmod+|(modprobe+,modconf*))>
- <!ELEMENT insmod (#PCDATA)>
- <!ELEMENT modprobe (#PCDATA)>
- <!ELEMENT modconf (#PCDATA)>
- <!ELEMENT mouse (xf86?,gpm?,buttons?,wheels?)>
- <!ELEMENT xf86 (#PCDATA)>
- <!ELEMENT gpm (#PCDATA)>
- <!ELEMENT buttons (#PCDATA)>
- <!ELEMENT wheels (#PCDATA)>
- <!ELEMENT xfree (version,server?,has3d?,extension*,option*,bpp*,dacspeed?,script?,xf86conf*)>
- <!ELEMENT version (#PCDATA)>
- <!ELEMENT server (#PCDATA)>
- <!ELEMENT has3d EMPTY>
- <!ELEMENT extension (#PCDATA)>
- <!ELEMENT option (#PCDATA)>
- <!ELEMENT bpp (#PCDATA)>
- <!ELEMENT dacspeed (#PCDATA)>
- <!ELEMENT script (#PCDATA)>
- <!ELEMENT xf86conf (#PCDATA)>
-]>
-EOF
-;
-
- return $dtd;
-}
-
+++ /dev/null
-#! /usr/bin/perl
-
-#
-# read gcc -E {aic79xx_pci.c,aic7xxx_pci.c} and extract module info
-#
-
-sub add_range;
-sub add_entry;
-
-while(<>) {
- if(/^struct.*ah[cd]_pci_ident_table\s*\[\s*\]\s*=\s*$/ .. /^\}/) {
- if(/^struct.*ah([cd])_pci_ident_table\s*\[\s*\]\s*=\s*$/) {
- $mod = $1 eq "c" ? "aic7xxx" : "aic79xx";
- }
-
- if(/^\s+\{/ .. /^\s+\}/) {
- if(/^\s+\}/) {
- if($field && $field != 4) {
- die "oops, unexpected line $.: $_";
- }
- if($field) {
- # print "id = $id, id_mask = $id_mask, mask = $mask, name = $name, func = $func\n";
- add_entry;
- }
-
- undef $field;
- undef $id;
- undef $id_mask;
- undef $mask;
- undef $name;
- undef $func;
- }
-
- if($field == 0 && /^\s+0x([0-9A-Fa-f]{16})ull\s*,\s*$/) {
- $id = $1;
- $field++;
- }
- elsif($field == 0 && /^\s+0x([0-9A-Fa-f]{16})ull\s*\&\s*0x([0-9A-Fa-f]{16})ull\s*,\s*$/) {
- $id = $1;
- $id_mask = $2;
- $field++;
- }
- elsif($field == 1 && /^\s+0x([0-9A-Fa-f]{16})ull\s*,\s*$/) {
- $mask = $1;
- $field++;
- }
- elsif($field == 2 && /^\s+((NULL|\(\(void\s*\*\)\s*0\))|(\".+\"))\s*,\s*$/) {
- $name = $1;
- $field++;
- }
- elsif($field == 3 && /^\s+((NULL|\(\(void\s*\*\)\s*0\))|([a-z].+))\s*,?\s*$/) {
- $func = $1;
- $field++;
- }
- }
-
- }
-}
-
-sub add_range
-{
- my ($r);
-
- $r = 0xffff - $_[0];
-
- return unless $r;
-
- if($r != 15) {
- printf " & 0x%04x", $r;
- }
- else {
- printf " + 0x0010";
- }
-}
-
-
-sub add_entry
-{
- local $_;
- my ($v, $d, $sv, $sd);
- my ($vm, $dm, $svm, $sdm);
- my ($tag);
-
- $id_mask = "F" x 16 unless defined $id_mask;
-
- $d = hex(substr $id, 0, 4) & hex(substr $id_mask, 0, 4);
- $v = hex(substr $id, 4, 4) & hex(substr $id_mask, 4, 4);
- $sd = hex(substr $id, 8, 4) & hex(substr $id_mask, 8, 4);
- $sv = hex(substr $id, 12, 4) & hex(substr $id_mask, 12, 4);
-
- $dm = hex(substr $mask, 0, 4);
- $vm = hex(substr $mask, 4, 4);
- $sdm = hex(substr $mask, 8, 4);
- $svm = hex(substr $mask, 12, 4);
-
- $name =~ s/^"|"$//g;
-
- if($func !~ /^[a-z]/) {
- print STDERR "entry \"$name\" dropped\n";
- return;
- }
-
- print "\n# $name\n";
-
- $tag = " ";
-
- if($vm) {
- printf "${tag}vendor.id\t\tpci 0x%04x", $v;
- add_range $vm;
- print "\n";
-
- $tag = "&";
- }
-
- if($dm) {
- printf "${tag}device.id\t\tpci 0x%04x", $d;
- add_range $dm;
- print "\n";
-
- $tag = "&";
- }
-
- if($svm) {
- printf "${tag}subvendor.id\t\tpci 0x%04x", $sv;
- add_range $svm;
- print "\n";
-
- $tag = "&";
- }
-
- if($sdm) {
- printf "${tag}subdevice.id\t\tpci 0x%04x", $sd;
- add_range $sdm;
- print "\n";
-
- $tag = "&";
- }
-
- printf "+driver.module.modprobe\t%s\n", $mod;
-
-}
-
+++ /dev/null
-#! /usr/bin/perl
-
-#
-# read /etc/pcmcia/config file
-#
-
-while(<>) {
- if(/^\s*card\s+"(.*)"\s*$/) {
- push @cards, $card;
- undef $card;
- $card->{name} = $1;
- next;
- }
-
- if(/^\s*bind\s+"(\S+)"\s*$/) {
- push @{$card->{modules}}, $1;
- next;
- }
-
- if(/^\s*bind\s+"(\S+)"\s*to\s*\d,\s*"(\S+)"\s*to\s*\d\s*$/) {
- push @{$card->{modules}}, $1;
- push @{$card->{modules}}, $2;
- next;
- }
-
- if(/^\s*manfid\s+(0x\S+),\s*(0x\S+)\s*$/) {
- $card->{vendor} = sprintf("0x%04x", hex $1);
- $card->{device} = sprintf("0x%04x", hex $2);
- next;
- }
-
-}
-
-for (@cards) {
- next unless $_->{modules};
- next unless $_->{name} =~ /ethernet/i;
- for $mods (@{$_->{modules}}) {
- $eth{$mods} = 1;
- }
-}
-
-
-for (@cards) {
- next unless $_->{vendor};
- next unless $_->{modules};
- print "# $_->{name}\n";
- print " vendor.id\t\tpcmcia $_->{vendor}\n";
- print "&device.id\t\tpcmcia $_->{device}\n";
- if($_->{modules}) {
- $eth = 1;
- for $mods (@{$_->{modules}}) {
- $eth = 0 unless $eth{$mods};
- print "+driver.module.modprobe\t$mods\n";
- }
- if($eth) {
- print "+baseclass.id\t\t0x002\n";
- print "+subclass.id\t\t0x00\n";
- }
- }
- print "\n";
-}
-
+++ /dev/null
-#include <stdio.h>
-#include "hd.h"
-
-#ifndef LIBHD_TINY
-#include "hd_ids.h"
-#else
-#include "hd_ids_tiny.h"
-#endif
+++ /dev/null
-# braille displays
-
- vendor.id special 0x5001
-+vendor.name Alva
-
- vendor.id special 0x5001
-&device.id special 0x0000
-+device.name abt320
-+driver.any abt320
-
- vendor.id special 0x5001
-&device.id special 0x0001
-+device.name abt340
-+driver.any abt340
-
- vendor.id special 0x5001
-&device.id special 0x0002
-+device.name abt34d
-+driver.any abt34d
-
- vendor.id special 0x5001
-&device.id special 0x0003
-+device.name abt380
-+driver.any abt380
-
- vendor.id special 0x5001
-&device.id special 0x0004
-+device.name abt38d
-+driver.any abt38d
-
- vendor.id special 0x5001
-&device.id special 0x000b
-+device.name del440
-+driver.any del440
-
- vendor.id special 0x5001
-&device.id special 0x000d
-+device.name del480
-+driver.any del480
-
- vendor.id special 0x5001
-&device.id special 0x000e
-+device.name sat540
-+driver.any sat540
-
- vendor.id special 0x5002
-+vendor.name Papenmeier
-
- vendor.id special 0x5002
-&device.id special 0x0001
-+device.name 2dlite
-+driver.any 2dlite
-
- vendor.id special 0x5002
-&device.id special 0x0002
-+device.name tiny
-+driver.any tiny
-
- vendor.id special 0x5002
-&device.id special 0x0003
-+device.name 2d
-+driver.any 2d
-
- vendor.id special 0x5002
-&device.id special 0x0040
-+device.name el40
-+driver.any el40
-
- vendor.id special 0x5002
-&device.id special 0x0041
-+device.name el66
-+driver.any el66
-
- vendor.id special 0x5002
-&device.id special 0x0042
-+device.name el80
-+driver.any el80
-
- vendor.id special 0x5002
-&device.id special 0x0043
-+device.name el2d
-+driver.any el2d
-
- vendor.id special 0x5002
-&device.id special 0x0044
-+device.name el40p
-+driver.any el40p
-
- vendor.id special 0x5003
-+vendor.name Handy Tech
-
- vendor.id special 0x5003
-&device.id special 0x0005
-|vendor.id special 0x5003
-&device.id special 0x0009
-+device.name brlwave
-+driver.any brlwave
-
- vendor.id special 0x5003
-&device.id special 0x0044
-+device.name vario40-ht
-+driver.any vario40-ht
-
- vendor.id special 0x5003
-&device.id special 0x0074
-+device.name brlstar40
-+driver.any brlstar40
-
- vendor.id special 0x5003
-&device.id special 0x0080
-+device.name ht20
-+driver.any ht20
-
- vendor.id special 0x5003
-&device.id special 0x0084
-+device.name vario80-ht
-+driver.any vario80-ht
-
- vendor.id special 0x5003
-&device.id special 0x0088
-+device.name ht80
-+driver.any ht80
-
- vendor.id special 0x5003
-&device.id special 0x0089
-+device.name ht40
-+driver.any ht40
-
- vendor.id special 0x5004
-+vendor.name Baum
-
- vendor.id special 0x5004
-&device.id special 0x0001
-+device.name Vario40
-+driver.any vario40
-
- vendor.id special 0x5004
-&device.id special 0x0002
-+device.name Vario80
-+driver.any vario80
-
+++ /dev/null
-# bus types
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# 0x00 - 0x7f are PCI types
-
- bus.id 0x00
-+bus.name None
-
- bus.id 0x01
-+bus.name ISA
-
- bus.id 0x02
-+bus.name EISA
-
- bus.id 0x03
-+bus.name MC
-
- bus.id 0x04
-+bus.name PCI
-
- bus.id 0x05
-+bus.name PCMCIA
-
- bus.id 0x06
-+bus.name NuBUS
-
- bus.id 0x07
-+bus.name CardBus
-
- bus.id 0x08
-+bus.name Unknown
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# >0x80 are our own bus/interface types
-
- bus.id 0x80
-+bus.name PS/2
-
- bus.id 0x81
-+bus.name Serial
-
- bus.id 0x82
-+bus.name Parallel
-
- bus.id 0x83
-+bus.name Floppy
-
- bus.id 0x84
-+bus.name SCSI
-
- bus.id 0x85
-+bus.name IDE
-
- bus.id 0x86
-+bus.name USB
-
- bus.id 0x87
-+bus.name ADB
-
- bus.id 0x88
-+bus.name RAID
-
- bus.id 0x89
-+bus.name SBUS
-
- bus.id 0x8a
-+bus.name I2O
-
- bus.id 0x8b
-+bus.name Virtual IO
-
- bus.id 0x8c
-+bus.name CCW
-
- bus.id 0x8d
-+bus.name IUCV
+++ /dev/null
-# digital cameras
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# digital (usb) still cams
-
- vendor.id usb 0x03f0
-+vendor.name HP
-
- vendor.id usb 0x03f0
-&device.id usb 0x4102
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 618
-
- vendor.id usb 0x03f0
-&device.id usb 0x4202
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 812
-
- vendor.id usb 0x03f0
-&device.id usb 0x4302
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 850
-
- vendor.id usb 0x03f0
-&device.id usb 0x4402
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 935
-
- vendor.id usb 0x03f0
-&device.id usb 0x6302
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 318
-
- vendor.id usb 0x03f0
-&device.id usb 0x6402
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 715
-
- vendor.id usb 0x03f0
-&device.id usb 0x6502
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 120
-
- vendor.id usb 0x03f0
-&device.id usb 0x6602
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 320
-
- vendor.id usb 0x03f0
-&device.id usb 0x6702
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 720
-
- vendor.id usb 0x03f0
-&device.id usb 0x6802
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 620
-
- vendor.id usb 0x03f0
-&device.id usb 0x6a02
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoSmart 735
-
- vendor.id usb 0x040a
-+vendor.name Kodak
-
- vendor.id usb 0x040a
-&device.id usb 0x0100
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DC220
-
- vendor.id usb 0x040a
-&device.id usb 0x0110
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DC260
-
- vendor.id usb 0x040a
-&device.id usb 0x0111
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DC265
-
- vendor.id usb 0x040a
-&device.id usb 0x0112
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DC290
-
- vendor.id usb 0x041e
-+vendor.name Creative
-
- vendor.id usb 0x041e
-&device.id usb 0x400a
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PC-CAM 300
-
- vendor.id usb 0x041e
-&device.id usb 0x400b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PC-CAM 600
-
- vendor.id usb 0x04a5
-+vendor.name Benq
-
- vendor.id usb 0x04a5
-&device.id usb 0x3003
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DC1300
-
- vendor.id usb 0x04a9
-+vendor.name Canon
-
- vendor.id usb 0x04a9
-&device.id usb 0x3041
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S10
-
- vendor.id usb 0x04a9
-&device.id usb 0x3043
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S20
-
- vendor.id usb 0x04a9
-&device.id usb 0x3044
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name EOS D30
-
- vendor.id usb 0x04a9
-&device.id usb 0x3045
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S100
-
- vendor.id usb 0x04a9
-&device.id usb 0x3046
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXY DIGITAL
-
- vendor.id usb 0x04a9
-&device.id usb 0x3047
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Digital IXUS
-
- vendor.id usb 0x04a9
-&device.id usb 0x3048
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot G1
-
- vendor.id usb 0x04a9
-&device.id usb 0x3049
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot Pro90 IS
-
- vendor.id usb 0x04a9
-&device.id usb 0x304b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXY DIGITAL 300
-
- vendor.id usb 0x04a9
-&device.id usb 0x304c
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S300
-
- vendor.id usb 0x04a9
-&device.id usb 0x304d
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Digital IXUS 300
-
- vendor.id usb 0x04a9
-&device.id usb 0x304e
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A20
-
- vendor.id usb 0x04a9
-&device.id usb 0x304f
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A10
-
- vendor.id usb 0x04a9
-&device.id usb 0x3051
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S110
-
- vendor.id usb 0x04a9
-&device.id usb 0x3052
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DIGITAL IXUS V
-
- vendor.id usb 0x04a9
-&device.id usb 0x3055
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot G2
-
- vendor.id usb 0x04a9
-&device.id usb 0x3056
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S40
-
- vendor.id usb 0x04a9
-&device.id usb 0x3057
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S30
-
- vendor.id usb 0x04a9
-&device.id usb 0x3058
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A40
-
- vendor.id usb 0x04a9
-&device.id usb 0x3059
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A30
-
- vendor.id usb 0x04a9
-&device.id usb 0x3060
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name EOS D60
-
- vendor.id usb 0x04a9
-&device.id usb 0x3061
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A100
-
- vendor.id usb 0x04a9
-&device.id usb 0x3062
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A200
-
- vendor.id usb 0x04a9
-&device.id usb 0x3065
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS v2
-
- vendor.id usb 0x04a9
-&device.id usb 0x3066
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS 330
-
- vendor.id usb 0x04a9
-&device.id usb 0x306a
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S45
-
- vendor.id usb 0x04a9
-&device.id usb 0x306b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Optura 200 MC
-
- vendor.id usb 0x04a9
-&device.id usb 0x306c
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S45
-
- vendor.id usb 0x04a9
-&device.id usb 0x306d
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S45
-
- vendor.id usb 0x04a9
-&device.id usb 0x306e
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot G3
-
- vendor.id usb 0x04a9
-&device.id usb 0x306f
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot G3
-
- vendor.id usb 0x04a9
-&device.id usb 0x3070
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS v3
-
- vendor.id usb 0x04a9
-&device.id usb 0x3071
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS v3
-
- vendor.id usb 0x04a9
-&device.id usb 0x3072
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS II
-
- vendor.id usb 0x04a9
-&device.id usb 0x3073
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A70
-
- vendor.id usb 0x04a9
-&device.id usb 0x3074
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A60
-
- vendor.id usb 0x04a9
-&device.id usb 0x3075
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS 400
-
- vendor.id usb 0x04a9
-&device.id usb 0x3076
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A300
-
- vendor.id usb 0x04a9
-&device.id usb 0x3077
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot S50
-
- vendor.id usb 0x04a9
-&device.id usb 0x3078
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name ZR70MC
-
- vendor.id usb 0x04a9
-&device.id usb 0x307b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name MV630i
-
- vendor.id usb 0x04a9
-&device.id usb 0x307f
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Optura 20
-
- vendor.id usb 0x04a9
-&device.id usb 0x3081
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Optura 10
-
- vendor.id usb 0x04a9
-&device.id usb 0x3083
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name EOS 10D
-
- vendor.id usb 0x04a9
-&device.id usb 0x3084
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name EOS 300D
-
- vendor.id usb 0x04a9
-&device.id usb 0x3085
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot G5
-
- vendor.id usb 0x04a9
-&device.id usb 0x3099
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name EOS 300D
-
- vendor.id usb 0x04a9
-&device.id usb 0x309a
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PowerShot A80
-
- vendor.id usb 0x04a9
-&device.id usb 0x309b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name IXUS i
-
- vendor.id usb 0x04b0
-+vendor.name Nikon
-
- vendor.id usb 0x04b0
-&device.id usb 0x0102
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 990
-
- vendor.id usb 0x04b0
-&device.id usb 0x0103
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 880
-
- vendor.id usb 0x04b0
-&device.id usb 0x0104
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 995
-
- vendor.id usb 0x04b0
-&device.id usb 0x0109
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 2500
-
- vendor.id usb 0x04b0
-&device.id usb 0x010b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 4500
-
- vendor.id usb 0x04b0
-&device.id usb 0x010d
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 5700
-
- vendor.id usb 0x04b0
-&device.id usb 0x010f
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 4300
-
- vendor.id usb 0x04b0
-&device.id usb 0x0111
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 3500
-
- vendor.id usb 0x04b0
-&device.id usb 0x0112
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 885
-
- vendor.id usb 0x04b0
-&device.id usb 0x0113
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 5000
-
- vendor.id usb 0x04b0
-&device.id usb 0x0115
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 3100
-
- vendor.id usb 0x04b0
-&device.id usb 0x0117
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 2100
-
- vendor.id usb 0x04b0
-&device.id usb 0x0119
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 5400
-
- vendor.id usb 0x04b0
-&device.id usb 0x0202
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix SQ
-
- vendor.id usb 0x04b0
-&device.id usb 0x0302
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Coolpix 2000
-
- vendor.id usb 0x04b0
-&device.id usb 0x0402
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DSC D100
-
-
- vendor.id usb 0x04b8
-+vendor.name Epson
-
- vendor.id usb 0x04fc
-+vendor.name Sunplus
-
- vendor.id usb 0x04fc
-&device.id usb 0x504a
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SPCA 504a camera
-
- vendor.id usb 0x04fc
-&device.id usb 0x504b
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SPCA 504b camera
-
-
- vendor.id usb 0x04b8
-&device.id usb 0x0403
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PhotoPC 3000z
-
- vendor.id usb 0x0553
-+vendor.name STM
-
- vendor.id usb 0x0553
-&device.id usb 0x0202
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name STV680 based camera
-
- vendor.id usb 0x054c
-+vendor.name Sony
-
- vendor.id usb 0x054c
-&device.id usb 0x004e
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Digital Camera
-
- vendor.id usb 0x055f
-+vendor.name Mustek
-
- vendor.id usb 0x055f
-&device.id usb 0xa350
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name gSmart 350
-
- vendor.id usb 0x055f
-&device.id usb 0xc200
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name gSmart 300
-
- vendor.id usb 0x055f
-&device.id usb 0xc220
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name gSmart mini
-
- vendor.id usb 0x055f
-&device.id usb 0xc420
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name gSmart mini 2
-
- vendor.id usb 0x055f
-&device.id usb 0xc520
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name gSmart mini 3
-
- vendor.id usb 0x06bd
-+vendor.name Agfa
-
- vendor.id usb 0x06bd
-&device.id usb 0x0403
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name CL18
-
- vendor.id usb 0x06bd
-&device.id usb 0x0404
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name CL20
-
- vendor.id usb 0x0797
-+vendor.name Grandtech
-
- vendor.id usb 0x0797
-&device.id usb 0x801a
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name 891a
-
- vendor.id usb 0x0797
-&device.id usb 0x801c
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name 891c
-
- vendor.id usb 0x0797
-&device.id usb 0x8901
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SX-35
-
- vendor.id usb 0x0797
-&device.id usb 0x8909
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SX-35
-
- vendor.id usb 0x0797
-&device.id usb 0x8911
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SX-35
-
-
- vendor.id usb 0x0784
-+vendor.name Polaroid
-
- vendor.id usb 0x0784
-&device.id usb 0x0784
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name DC700
-
- vendor.id usb 0x07b4
-+vendor.name Olympus
-
- vendor.id usb 0x07b4
-&device.id usb 0x0100
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name C-2100UZ
-
- vendor.id usb 0x07b4
-&device.id usb 0x0105
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name C-2040Z
-
- vendor.id usb 0x07b4
-&device.id usb 0x0114
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name PTP Camera
-
-# vendor.id usb 0x07cf
-#+vendor.name Casio
-
-# vendor.id usb 0x07cf
-#&device.id usb 0x1001
-#+baseclass.id 0x10f
-#+subclass.id 0x02
-
- vendor.id usb 0x084d
-+vendor.name Minton
-
- vendor.id usb 0x084d
-&device.id usb 0x0003
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name S-Cam F5
-
-
- vendor.id usb 0x084e
-+vendor.name KBGear
-
- vendor.id usb 0x084e
-&device.id usb 0x0001
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name JamCam v3
-
- vendor.id usb 0x0919
-+vendor.name Tiger
-
- vendor.id usb 0x0919
-&device.id usb 0x0100
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Fast Flicks
-
- vendor.id usb 0x0d64
-+vendor.name DXG
-
- vendor.id usb 0x0d94
-&device.id usb 0x1021
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name D-Link DSC 350F
-
- vendor.id usb 0x0d94
-&device.id usb 0x1001
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SiPix Stylecam
-
- vendor.id usb 0x0d96
-+vendor.name Traveller
-
- vendor.id usb 0x0d96
-&device.id usb 0x3300
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SX 330z
-
- vendor.id usb 0x0d96
-&device.id usb 0x4100
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name SX 410z
-
- vendor.id usb 0x0d96
-&device.id usb 0x4102
-+baseclass.id 0x10f
-+subclass.id 0x01
-+vendor.name Medion
-+device.name MD 9700
-
- vendor.id usb 0x0d96
-&device.id usb 0x0000
-+baseclass.id 0x10f
-+subclass.id 0x01
-+vendor.name Jenoptik
-+device.name JD350v
-
- vendor.id usb 0x2770
-+vendor.name NHJ
-
- vendor.id usb 0x2770
-&device.id usb 0x9120
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name 9120 based camera
-
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# webcams
-
- vendor.id usb 0x05a9
-+vendor.name OmniVision
-
- vendor.id usb 0x05a9
-&device.id usb 0x0511
-+baseclass.id 0x10f
-+subclass.id 0x00
-+device.name OV511 WebCam
-
- vendor.id usb 0x05a9
-&device.id usb 0xa511
-+baseclass.id 0x10f
-+subclass.id 0x00
-+device.name OV511+ WebCam
-
- vendor.id usb 0x0813
-+vendor.name Mattel
-
- vendor.id usb 0x0813
-&device.id usb 0x0002
-+baseclass.id 0x10f
-+subclass.id 0x00
-+device.name OV511 based WebCam
-
- vendor.id usb 0x06a5
-&device.id usb 0x0000
-+baseclass.id 0x10f
-+subclass.id 0x00
-+device.name Typhoon Webcam 100k
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# usbmap: ov511.o
- vendor.id usb 0x05a9
-&device.id usb 0x0511
-|vendor.id usb 0x05a9
-&device.id usb 0x0518
-|vendor.id usb 0x05a9
-&device.id usb 0xa511
-|vendor.id usb 0x05a9
-&device.id usb 0xa518
-|vendor.id usb 0x0813
-&device.id usb 0x0002
-+baseclass.id 0x10f
-+subclass.id 0x00
-
-# usbmap: pwc.o
- vendor.id usb 0x041e
-&device.id usb 0x400c
-|vendor.id usb 0x041e
-&device.id usb 0x4011
-|vendor.id usb 0x046d
-&device.id usb 0x08b0+0x0009
-|vendor.id usb 0x0471
-&device.id usb 0x0302+0x0003
-|vendor.id usb 0x0471
-&device.id usb 0x0307+0x0002
-|vendor.id usb 0x0471
-&device.id usb 0x030c
-|vendor.id usb 0x0471
-&device.id usb 0x0310+0x0004
-|vendor.id usb 0x04cc
-&device.id usb 0x8116
-|vendor.id usb 0x055d
-&device.id usb 0x9000+0x0002
-|vendor.id usb 0x069a
-&device.id usb 0x0001
-|vendor.id usb 0x0d81
-&device.id usb 0x1900
-|vendor.id usb 0x0d81
-&device.id usb 0x1910
-+baseclass.id 0x10f
-+subclass.id 0x00
-
+++ /dev/null
-# chipcard reader
-
-
- vendor.id TWK
-+vendor.name Towitoko
-
- vendor.id TWK
-&device.id eisa 0x5542
-+baseclass.id 0x10e
-+subclass.id 0x00
-+device.name Smartcard reader
-+requires pcsc-towitoko
-
- vendor.id usb 0x0c4b
-&device.id usb 0x0100
-+baseclass.id 0x10e
-+subclass.id 0x00
-+device.name Cyberjack USB
-+driver.module.modprobe cyberjack
-+requires ctapi-cyberjack
-
+++ /dev/null
-# device classes
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# PCI device classes and subclasses
-
- baseclass.id 0x000
-+baseclass.name Unclassified device
-
- baseclass.id 0x000
-&subclass.id 0x00
-+subclass.name Unclassified device
-
- baseclass.id 0x000
-&subclass.id 0x01
-+subclass.name VGA compatible unclassified device
-
- baseclass.id 0x001
-+baseclass.name Mass storage controller
-
- baseclass.id 0x001
-&subclass.id 0x00
-+subclass.name SCSI storage controller
-
- baseclass.id 0x001
-&subclass.id 0x01
-+subclass.name IDE interface
-
- baseclass.id 0x001
-&subclass.id 0x02
-+subclass.name Floppy disk controller
-
- baseclass.id 0x001
-&subclass.id 0x03
-+subclass.name IPI bus controller
-
- baseclass.id 0x001
-&subclass.id 0x04
-+subclass.name RAID bus controller
-
- baseclass.id 0x001
-&subclass.id 0x80
-+subclass.name Unknown mass storage controller
-
- baseclass.id 0x002
-+baseclass.name Network controller
-
- baseclass.id 0x002
-&subclass.id 0x00
-+subclass.name Ethernet controller
-
- baseclass.id 0x002
-&subclass.id 0x01
-+subclass.name Token ring network controller
-
- baseclass.id 0x002
-&subclass.id 0x02
-+subclass.name FDDI network controller
-
- baseclass.id 0x002
-&subclass.id 0x03
-+subclass.name ATM network controller
-
- baseclass.id 0x002
-&subclass.id 0x04
-+subclass.name ISDN controller
-
- baseclass.id 0x002
-&subclass.id 0x80
-+subclass.name Network controller
-
- baseclass.id 0x002
-&subclass.id 0x81
-+subclass.name Myrinet controller
-
- baseclass.id 0x002
-&subclass.id 0x82
-+subclass.name WLAN controller
-
- baseclass.id 0x002
-&subclass.id 0x83
-+subclass.name XPNET controller
-
- baseclass.id 0x002
-&subclass.id 0x86
-+subclass.name OSA-Express controller
-
- baseclass.id 0x002
-&subclass.id 0x87
-+subclass.name HiperSocket controller
-
- baseclass.id 0x002
-&subclass.id 0x88
-+subclass.name CTC controller
-
- baseclass.id 0x002
-&subclass.id 0x89
-+subclass.name OSA-2 controller
-
- baseclass.id 0x002
-&subclass.id 0x8e
-+subclass.name FICON controller
-
- baseclass.id 0x002
-&subclass.id 0x8f
-+subclass.name ESCON controller
-
- baseclass.id 0x002
-&subclass.id 0x90
-+subclass.name IUCV connection
-
- baseclass.id 0x002
-&subclass.id 0x91
-+subclass.name USB Host-to-Host link
-
- baseclass.id 0x003
-+baseclass.name Display controller
-
- baseclass.id 0x003
-&subclass.id 0x00
-+subclass.name VGA compatible controller
-
- baseclass.id 0x003
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name VGA
-
- baseclass.id 0x003
-&subclass.id 0x00
-&progif.id 0x01
-+progif.name 8514
-
- baseclass.id 0x003
-&subclass.id 0x01
-+subclass.name XGA compatible controller
-
- baseclass.id 0x003
-&subclass.id 0x02
-+subclass.name 3D controller
-
- baseclass.id 0x003
-&subclass.id 0x80
-+subclass.name Display controller
-
- baseclass.id 0x004
-+baseclass.name Multimedia controller
-
- baseclass.id 0x004
-&subclass.id 0x00
-+subclass.name Multimedia video controller
-
- baseclass.id 0x004
-&subclass.id 0x01
-+subclass.name Multimedia audio controller
-
- baseclass.id 0x004
-&subclass.id 0x02
-+subclass.name Computer telephony device
-
- baseclass.id 0x004
-&subclass.id 0x80
-+subclass.name Multimedia controller
-
- baseclass.id 0x005
-+baseclass.name Memory controller
-
- baseclass.id 0x005
-&subclass.id 0x00
-+subclass.name RAM memory
-
- baseclass.id 0x005
-&subclass.id 0x01
-+subclass.name FLASH memory
-
- baseclass.id 0x005
-&subclass.id 0x80
-+subclass.name Memory controller
-
- baseclass.id 0x006
-+baseclass.name Bridge
-
- baseclass.id 0x006
-&subclass.id 0x00
-+subclass.name Host bridge
-
- baseclass.id 0x006
-&subclass.id 0x01
-+subclass.name ISA bridge
-
- baseclass.id 0x006
-&subclass.id 0x02
-+subclass.name EISA bridge
-
- baseclass.id 0x006
-&subclass.id 0x03
-+subclass.name MicroChannel bridge
-
- baseclass.id 0x006
-&subclass.id 0x04
-+subclass.name PCI bridge
-
- baseclass.id 0x006
-&subclass.id 0x04
-&progif.id 0x00
-+progif.name Normal decode
-
- baseclass.id 0x006
-&subclass.id 0x04
-&progif.id 0x01
-+progif.name Subtractive decode
-
- baseclass.id 0x006
-&subclass.id 0x05
-+subclass.name PCMCIA bridge
-
- baseclass.id 0x006
-&subclass.id 0x06
-+subclass.name NuBus bridge
-
- baseclass.id 0x006
-&subclass.id 0x07
-+subclass.name CardBus bridge
-
- baseclass.id 0x006
-&subclass.id 0x08
-+subclass.name RACEway bridge
-
- baseclass.id 0x006
-&subclass.id 0x08
-&progif.id 0x00
-+progif.name Transparent mode
-
- baseclass.id 0x006
-&subclass.id 0x08
-&progif.id 0x01
-+progif.name Endpoint mode
-
- baseclass.id 0x006
-&subclass.id 0x09
-+subclass.name Semi-transparent PCI-to-PCI bridge
-
- baseclass.id 0x006
-&subclass.id 0x09
-&progif.id 0x40
-+progif.name Primary bus towards host CPU
-
- baseclass.id 0x006
-&subclass.id 0x09
-&progif.id 0x80
-+progif.name Secondary bus towards host CPU
-
- baseclass.id 0x006
-&subclass.id 0x0a
-+subclass.name InfiniBand to PCI host bridge
-
- baseclass.id 0x006
-&subclass.id 0x80
-+subclass.name Bridge
-
- baseclass.id 0x007
-+baseclass.name Communication controller
-
- baseclass.id 0x007
-&subclass.id 0x00
-+subclass.name Serial controller
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name 8250
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x01
-+progif.name 16450
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x02
-+progif.name 16550
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x03
-+progif.name 16650
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x04
-+progif.name 16750
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x05
-+progif.name 16850
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x06
-+progif.name 16950
-
- baseclass.id 0x007
-&subclass.id 0x01
-+subclass.name Parallel controller
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x00
-+progif.name SPP
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x01
-+progif.name BiDir
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x02
-+progif.name ECP
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x03
-+progif.name IEEE1284
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0xfe
-+progif.name IEEE1284 Target
-
- baseclass.id 0x007
-&subclass.id 0x02
-+subclass.name Multiport serial controller
-
- baseclass.id 0x007
-&subclass.id 0x03
-+subclass.name Modem
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x01
-+progif.name Hayes/16450
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x02
-+progif.name Hayes/16550
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x03
-+progif.name Hayes/16650
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x04
-+progif.name Hayes/16750
-
- baseclass.id 0x007
-&subclass.id 0x80
-+subclass.name Communication controller
-
- baseclass.id 0x007+0x0002
-&subclass.id 0x03
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x008
-+baseclass.name Generic system peripheral
-
- baseclass.id 0x008
-&subclass.id 0x00
-+subclass.name PIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name 8259
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x01
-+progif.name ISA PIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x02
-+progif.name EISA PIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x10
-+progif.name IO-APIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x20
-+progif.name IO(X)-APIC
-
- baseclass.id 0x008
-&subclass.id 0x01
-+subclass.name DMA controller
-
- baseclass.id 0x008
-&subclass.id 0x01
-&progif.id 0x00
-+progif.name 8237
-
- baseclass.id 0x008
-&subclass.id 0x01
-&progif.id 0x01
-+progif.name ISA DMA
-
- baseclass.id 0x008
-&subclass.id 0x01
-&progif.id 0x02
-+progif.name EISA DMA
-
- baseclass.id 0x008
-&subclass.id 0x02
-+subclass.name Timer
-
- baseclass.id 0x008
-&subclass.id 0x02
-&progif.id 0x00
-+progif.name 8254
-
- baseclass.id 0x008
-&subclass.id 0x02
-&progif.id 0x01
-+progif.name ISA Timer
-
- baseclass.id 0x008
-&subclass.id 0x02
-&progif.id 0x02
-+progif.name EISA Timers
-
- baseclass.id 0x008
-&subclass.id 0x03
-+subclass.name RTC
-
- baseclass.id 0x008
-&subclass.id 0x03
-&progif.id 0x01
-+progif.name ISA RTC
-
- baseclass.id 0x008
-&subclass.id 0x04
-+subclass.name PCI Hot-plug controller
-
- baseclass.id 0x008
-&subclass.id 0x80
-+subclass.name System peripheral
-
- baseclass.id 0x009
-+baseclass.name Input device controller
-
- baseclass.id 0x009
-&subclass.id 0x00
-+subclass.name Keyboard controller
-
- baseclass.id 0x009
-&subclass.id 0x01
-+subclass.name Digitizer Pen
-
- baseclass.id 0x009
-&subclass.id 0x02
-+subclass.name Mouse controller
-
- baseclass.id 0x009
-&subclass.id 0x03
-+subclass.name Scanner controller
-
- baseclass.id 0x009
-&subclass.id 0x04
-+subclass.name Gameport controller
-
- baseclass.id 0x009
-&subclass.id 0x04
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x009
-&subclass.id 0x04
-&progif.id 0x10
-+progif.name Extended
-
- baseclass.id 0x009
-&subclass.id 0x80
-+subclass.name Input device controller
-
- baseclass.id 0x00a
-+baseclass.name Docking station
-
- baseclass.id 0x00a
-&subclass.id 0x00
-+subclass.name Generic Docking Station
-
- baseclass.id 0x00a
-&subclass.id 0x80
-+subclass.name Docking Station
-
- baseclass.id 0x00b
-+baseclass.name Processor
-
- baseclass.id 0x00b
-&subclass.id 0x00
-+subclass.name 386
-
- baseclass.id 0x00b
-&subclass.id 0x01
-+subclass.name 486
-
- baseclass.id 0x00b
-&subclass.id 0x02
-+subclass.name Pentium
-
- baseclass.id 0x00b
-&subclass.id 0x10
-+subclass.name Alpha
-
- baseclass.id 0x00b
-&subclass.id 0x20
-+subclass.name Power PC
-
- baseclass.id 0x00b
-&subclass.id 0x30
-+subclass.name MIPS
-
- baseclass.id 0x00b
-&subclass.id 0x40
-+subclass.name Co-processor
-
- baseclass.id 0x00c
-+baseclass.name Serial bus controller
-
- baseclass.id 0x00c
-&subclass.id 0x00
-+subclass.name FireWire (IEEE 1394)
-
- baseclass.id 0x00c
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x00c
-&subclass.id 0x00
-&progif.id 0x10
-+progif.name OHCI
-
- baseclass.id 0x00c
-&subclass.id 0x01
-+subclass.name ACCESS Bus
-
- baseclass.id 0x00c
-&subclass.id 0x02
-+subclass.name SSA
-
- baseclass.id 0x00c
-&subclass.id 0x03
-+subclass.name USB Controller
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x00
-+progif.name UHCI
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x10
-+progif.name OHCI
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x20
-+progif.name EHCI
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x80
-+progif.name Unspecified
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0xfe
-+progif.name USB Device
-
- baseclass.id 0x00c
-&subclass.id 0x04
-+subclass.name Fibre Channel
-
- baseclass.id 0x00c
-&subclass.id 0x05
-+subclass.name SMBus
-
- baseclass.id 0x00c
-&subclass.id 0x06
-+subclass.name InfiniBand
-
- baseclass.id 0x00d
-+baseclass.name Wireless controller
-
- baseclass.id 0x00d
-&subclass.id 0x00
-+subclass.name IRDA controller
-
- baseclass.id 0x00d
-&subclass.id 0x01
-+subclass.name Consumer IR controller
-
- baseclass.id 0x00d
-&subclass.id 0x10
-+subclass.name RF controller
-
- baseclass.id 0x00d
-&subclass.id 0x80
-+subclass.name Wireless controller
-
- baseclass.id 0x00e
-+baseclass.name Intelligent controller
-
- baseclass.id 0x00e
-&subclass.id 0x00
-+subclass.name I2O
-
- baseclass.id 0x00f
-+baseclass.name Satellite communications controller
-
- baseclass.id 0x00f
-&subclass.id 0x00
-+subclass.name Satellite TV controller
-
- baseclass.id 0x00f
-&subclass.id 0x01
-+subclass.name Satellite audio communication controller
-
- baseclass.id 0x00f
-&subclass.id 0x03
-+subclass.name Satellite voice communication controller
-
- baseclass.id 0x00f
-&subclass.id 0x04
-+subclass.name Satellite data communication controller
-
- baseclass.id 0x010
-+baseclass.name Encryption controller
-
- baseclass.id 0x010
-&subclass.id 0x00
-+subclass.name Network and computing encryption device
-
- baseclass.id 0x010
-&subclass.id 0x10
-+subclass.name Entertainment encryption device
-
- baseclass.id 0x010
-&subclass.id 0x80
-+subclass.name Encryption controller
-
- baseclass.id 0x011
-+baseclass.name Signal processing controller
-
- baseclass.id 0x011
-&subclass.id 0x00
-+subclass.name DPIO module
-
- baseclass.id 0x011
-&subclass.id 0x01
-+subclass.name Performance counters
-
- baseclass.id 0x011
-&subclass.id 0x10
-+subclass.name Communication synchronizer
-
- baseclass.id 0x011
-&subclass.id 0x80
-+subclass.name Signal processing controller
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# our own class definitions
-
- baseclass.id 0x0ff
-+baseclass.name Unclassified device
-
- baseclass.id 0x100
-+baseclass.name Monitor
-
- baseclass.id 0x100
-&subclass.id 0x01
-+subclass.name CRT Monitor
-
- baseclass.id 0x100
-&subclass.id 0x02
-+subclass.name LCD Monitor
-
- baseclass.id 0x101
-+baseclass.name Internally Used Class
-
- baseclass.id 0x101
-&subclass.id 0x01
-+subclass.name ISA PnP Interface
-
- baseclass.id 0x101
-&subclass.id 0x02
-+subclass.name Main Memory
-
- baseclass.id 0x101
-&subclass.id 0x03
-+subclass.name CPU
-
- baseclass.id 0x101
-&subclass.id 0x04
-+subclass.name FPU
-
- baseclass.id 0x101
-&subclass.id 0x05
-+subclass.name BIOS
-
- baseclass.id 0x101
-&subclass.id 0x06
-+subclass.name PROM
-
- baseclass.id 0x101
-&subclass.id 0x07
-+subclass.name System
-
- baseclass.id 0x102
-+baseclass.name Modem
-
- baseclass.id 0x102
-&subclass.id 0x00
-+subclass.name Modem
-
- baseclass.id 0x102
-&subclass.id 0x01+4
-+subclass.name LinModem
-
- baseclass.id 0x103
-+baseclass.name ISDN Adapter
-
- baseclass.id 0x104
-+baseclass.name PS/2 Controller
-
- baseclass.id 0x105
-+baseclass.name Mouse
-
- baseclass.id 0x105
-&subclass.id 0x00
-+subclass.name PS/2 Mouse
-
- baseclass.id 0x105
-&subclass.id 0x01
-+subclass.name Serial Mouse
-
- baseclass.id 0x105
-&subclass.id 0x02
-+subclass.name Bus Mouse
-
- baseclass.id 0x105
-&subclass.id 0x03
-+subclass.name USB Mouse
-
- baseclass.id 0x105
-&subclass.id 0x80
-+subclass.name Mouse
-
- baseclass.id 0x106
-+baseclass.name Mass Storage Device
-
- baseclass.id 0x106
-&subclass.id 0x00
-+subclass.name Disk
-
- baseclass.id 0x106
-&subclass.id 0x01
-+subclass.name Tape
-
- baseclass.id 0x106
-&subclass.id 0x02
-+subclass.name CD-ROM
-
- baseclass.id 0x106
-&subclass.id 0x02
-&progif.id 0x01
-+progif.name CD-R
-
- baseclass.id 0x106
-&subclass.id 0x02
-&progif.id 0x02
-+progif.name CD-RW
-
- baseclass.id 0x106
-&subclass.id 0x02
-&progif.id 0x03
-+progif.name DVD
-
- baseclass.id 0x106
-&subclass.id 0x02
-&progif.id 0x04
-+progif.name DVD-R
-
- baseclass.id 0x106
-&subclass.id 0x02
-&progif.id 0x05
-+progif.name DVD-RAM
-
- baseclass.id 0x106
-&subclass.id 0x03
-+subclass.name Floppy Disk
-
- baseclass.id 0x106
-&subclass.id 0x80
-+subclass.name Storage Device
-
- baseclass.id 0x107
-+baseclass.name Network Interface
-
- baseclass.id 0x107
-&subclass.id 0x00
-+subclass.name Loopback
-
- baseclass.id 0x107
-&subclass.id 0x01
-+subclass.name Ethernet
-
- baseclass.id 0x107
-&subclass.id 0x02
-+subclass.name Tokenring
-
- baseclass.id 0x107
-&subclass.id 0x03
-+subclass.name FDDI
-
- baseclass.id 0x107
-&subclass.id 0x04
-+subclass.name CTC
-
- baseclass.id 0x107
-&subclass.id 0x05
-+subclass.name IUCV
-
- baseclass.id 0x107
-&subclass.id 0x06
-+subclass.name HSI
-
- baseclass.id 0x107
-&subclass.id 0x07
-+subclass.name QETH
-
- baseclass.id 0x107
-&subclass.id 0x08
-+subclass.name ESCON
-
- baseclass.id 0x107
-&subclass.id 0x09
-+subclass.name Myrinet
-
- baseclass.id 0x107
-&subclass.id 0x0a
-+subclass.name WLAN
-
- baseclass.id 0x107
-&subclass.id 0x0b
-+subclass.name XPNET
-
- baseclass.id 0x107
-&subclass.id 0x0c
-+subclass.name USB-Link
-
- baseclass.id 0x107
-&subclass.id 0x80
-+subclass.name Network Interface
-
- baseclass.id 0x108
-+baseclass.name Keyboard
-
- baseclass.id 0x108
-&subclass.id 0x00
-+subclass.name Keyboard
-
- baseclass.id 0x108
-&subclass.id 0x01
-+subclass.name Console
-
- baseclass.id 0x109
-+baseclass.name Printer
-
- baseclass.id 0x10a
-+baseclass.name Hub
-
- baseclass.id 0x10a
-&subclass.id 0x01
-+subclass.name USB Hub
-
- baseclass.id 0x10b
-+baseclass.name Braille Display
-
- baseclass.id 0x10c
-+baseclass.name Scanner
-
- baseclass.id 0x10c
-&subclass.id 0x01
-+subclass.name HP OfficeJet Scanner
-
- baseclass.id 0x10d
-+baseclass.name Joystick
-
- baseclass.id 0x10d
-&subclass.id 0x01
-+subclass.name Gamepad
-
- baseclass.id 0x10e
-+baseclass.name Chipcard Reader
-
- baseclass.id 0x10f
-+baseclass.name Camera
-
- baseclass.id 0x10f
-&subclass.id 0x01
-+subclass.name WebCam
-
- baseclass.id 0x10f
-&subclass.id 0x02
-+subclass.name Digital Camera
-
- baseclass.id 0x110
-+baseclass.name Framebuffer
-
- baseclass.id 0x110
-&subclass.id 0x01
-+subclass.name VESA Framebuffer
-
- baseclass.id 0x111
-+baseclass.name DVB Card
-
- baseclass.id 0x111
-&subclass.id 0x01
-+subclass.name DVB-C Card
-
- baseclass.id 0x111
-&subclass.id 0x02
-+subclass.name DVB-S Card
-
- baseclass.id 0x111
-&subclass.id 0x03
-+subclass.name DVB-T Card
-
- baseclass.id 0x112
-+baseclass.name TV Card
-
- baseclass.id 0x113
-+baseclass.name Partition
-
- baseclass.id 0x114
-+baseclass.name DSL Card
-
- baseclass.id 0x115
-+baseclass.name Bluetooth Device
-
+++ /dev/null
-# dvb cards
-
- vendor.id pci 0x13d0
-&device.id pci 0x2103
-|vendor.id pci 0x13d0
-&device.id pci 0x2200
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe skystar2
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-+driver.module.modprobe bt878
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x0071
-&subdevice.id pci 0x0101
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "Nebula Electronics DigiTV"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0761
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "AverMedia AverTV DVB-T"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0026
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "Pinnacle PCTV SAT CI"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1822
-&subdevice.id pci 0x0001
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "Twinhan VisionPlus DVB-T"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x270f
-&subdevice.id pci 0xfc00
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "ChainTech digitop DST-1000 DVB-S"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0771
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "AVermedia DVB-T 771"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x18ac
-&subdevice.id pci 0xdb10
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "DVICO FusionHDTV DVB-T Lite"
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x001c
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe bt878
-+subdevice.name "Pinnacle PCTV Sat"
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x00a1
-&subdevice.id pci 0x00a1
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x00a1
-&subdevice.id pci 0xa1a0
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x0000
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x110a
-&subdevice.id pci 0xffff
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0000+0x0005
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0006
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0008
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x000a
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1002
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1102
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0xffc2
-&subdevice.id pci 0x0000
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe dvb-ttpci
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x1131
-&subdevice.id pci 0x4f56
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe budget-av
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1003+0x0003
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1013
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe budget
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x100c
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x100f
-|vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1011
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe budget-ci
-
-
- vendor.id pci 0x14f1
-&device.id pci 0x8802
-&subvendor.id pci 0x17de
-&subdevice.id pci 0x08a6
-|vendor.id pci 0x14f1
-&device.id pci 0x8802
-&subvendor.id pci 0x18AC
-&subdevice.id pci 0xDB00
-|vendor.id pci 0x14f1
-&device.id pci 0x8802
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x9002
-|vendor.id pci 0x14f1
-&device.id pci 0x8802
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0187
-+baseclass.id 0x111
-+subclass.id 0x00
-+driver.module.modprobe cx88-dvb
-
-
+++ /dev/null
-# some special entries
-# drop most of them???
-
-
- vendor.id pci 0x1000
-&device.id pci 0x0001
-+baseclass.id 0x001
-+subclass.id 0x00
-+device.name 53c810
-
- vendor.id pci 0x1000
-&device.id pci 0x000a
-+device.name 53C1510D
-
- vendor.id pci 0x1011
-&device.id pci 0x1065
-+device.name DAC960
-
- vendor.id pci 0x1039
-&device.id pci 0x7016
-+device.name SiS 7016 (RealTek RTL8139) Fast Ethernet
-
- vendor.id pci 0x103c
-&device.id pci 0x100a
-+device.name HP FX6 OpenGL
-
- vendor.id pci 0x1050
-&device.id pci 0x5a5a
-+device.name Winbond
-
- vendor.id pci 0x106b
-&device.id pci 0x0003
-+baseclass.id 0x003
-+subclass.id 0x80
-
- vendor.id pci 0x106b
-&device.id pci 0x0021
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name GMAC Ethernet Controller
-
- vendor.id pci 0x106b
-&device.id pci 0x0024
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name GMAC Ethernet Controller
-
- vendor.id pci 0x106b
-&device.id pci 0x0022
-+device.name Keylargo Mac I/O
-
- vendor.id pci 0x1077
-&device.id pci 0x1016
-+device.name QLA10160
-
- vendor.id pci 0x1077
-&device.id pci 0x1080
-+device.name QLA1080
-
- vendor.id pci 0x1077
-&device.id pci 0x1216
-+device.name QLA12160
-
- vendor.id pci 0x1077
-&device.id pci 0x1240
-+device.name QLA1240
-
- vendor.id pci 0x1077
-&device.id pci 0x1280
-+device.name QLA1280
-
- vendor.id pci 0x10b7
-&device.id pci 0x5055
-+device.name 3c555 Laptop Hurricane
-
- vendor.id pci 0x10b7
-&device.id pci 0x6560
-+device.name 3CCFE656 Cyclone CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x7646
-+device.name 3cSOHO100-TX Hurricane
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name Riva TNT
-
- vendor.id pci 0x10ec
-&device.id pci 0x8138
-+device.name RTL8139B
-
- vendor.id pci 0x1101
-&device.id pci 0x0002
-+device.name INI-A100U2W
-
- vendor.id pci 0x1101
-&device.id pci 0x1060
-+device.name INI-A100U2W
-
- vendor.id pci 0x1179
-&device.id pci 0x0601
-+device.name Pentium Host Bridge for Notebooks
-
- vendor.id pci 0x11ad
-&device.id pci 0xc115
-+device.name Lite-On LC82C115 PNIC-II
-
- vendor.id pci 0x12c3
-&device.id pci 0x0058
-+device.name HT80232
-
- vendor.id pci 0x12c3
-&device.id pci 0x5598
-+device.name HT80229
-
- vendor.id pci 0x12eb
-+vendor.name Aureal Semiconductor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-+device.name AU8820 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x5053
-&subdevice.id pci 0x3355
-+subdevice.name TBS Montego A3D
-
- vendor.id pci 0x134a
-&device.id pci 0x0002
-+device.name INI-920
-
- vendor.id pci 0x15ad
-+vendor.name VMWare, Inc.
-
- vendor.id pci 0x15ad
-&device.id pci 0x0405
-+baseclass.id 0x003
-+subclass.id 0x00
-
- vendor.id pci 0x15ad
-&device.id pci 0x0710
-+baseclass.id 0x003
-+subclass.id 0x00
-
-
-# internal modems
-# (just started...)
- vendor.id pci 0x127a
-+vendor.name Rockwell International
-
- vendor.id pci 0x127a
-&device.id pci 0x1004
-+device.name HCF 56k V90 FaxModem
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-+device.name PCI56RVP Modem
-
- vendor.id pci 0x12b9
-+vendor.name U.S. Robotics, Inc.
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-+device.name 56k voice modem
-
- vendor.id pci 0x1318
-&device.id pci 0x0911
-+device.name Hamachi GNIC-II
-
-
-# new gdth.o (21/06/2001)
- vendor.id pci 0x1119
-&device.id pci 0x0136
-+device.name GDT6x13RS
-
- vendor.id pci 0x1119
-&device.id pci 0x0137
-+device.name GDT6x23RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013c
-+device.name GDT6x33RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013d
-+device.name GDT6x43RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013e
-+device.name GDT6x53RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013f
-+device.name GDT6x63RS
-
- vendor.id pci 0x1119
-&device.id pci 0x01d6
-+device.name GDT4x13RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01d7
-+device.name GDT4x23RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01f6
-+device.name GDT8x13RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01f7
-+device.name GDT8x23RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01fc
-+device.name GDT8x33RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01fd
-+device.name GDT8x43RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01fe
-+device.name GDT8x53RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01ff
-+device.name GDT8x63RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x0300
-+device.name ICP vortex GDT RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x0600
-+device.name RAID Controller
-
-
-# cf #9638
- vendor.id pci 0x14e4
-+vendor.name Broadcom
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0099
-+subdevice.name NC7780 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x009a
-+subdevice.name NC7770 Gigabit Server Adapter
-
-
-# IBM ServeRAID adapters (#20268)
- vendor.id pci 0x1014
-&device.id pci 0x002e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x022e
-+subdevice.name ServeRAID 4H
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01be
-+subdevice.name ServeRAID 4M
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01bf
-+subdevice.name ServeRAID 4L
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0208
-+subdevice.name ServeRAID 4Mx
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x020e
-+subdevice.name ServeRAID 4Lx
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0258
-+subdevice.name ServeRAID 5i
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0259
-+subdevice.name ServeRAID 5i
-
- vendor.id pci 0x1022
-+vendor.name AMD
-
-# 63973
- vendor.id pci 0x10a9
-+vendor.name SGI
-
+++ /dev/null
- vendor.id ACC
-+vendor.name Accton
-
- vendor.id ADD
-+vendor.name Addtron
-
- vendor.id ADP
-+vendor.name Adaptec
-
- vendor.id ADP
-&device.id eisa 0x1505
-+baseclass.id 0x001
-+subclass.id 0x00
-+device.name Adaptec AVA-1505AE
-
- vendor.id ADS
-+vendor.name Analog Devices
-
- vendor.id ADS
-&device.id eisa 0x7150
-|vendor.id ADS
-&device.id eisa 0x7181
-|vendor.id ADV
-&device.id eisa 0x550a
-|vendor.id ADV
-&device.id eisa 0x55ff
-|vendor.id ALS
-&device.id eisa 0x0001
-|vendor.id ALS
-&device.id eisa 0x0110
-|vendor.id ALS
-&device.id eisa 0x0120
-|vendor.id ALS
-&device.id eisa 0x0200
-|vendor.id AZT
-&device.id eisa 0x1008
-|vendor.id AZT
-&device.id eisa 0x2320
-|vendor.id AZT
-&device.id eisa 0x3000
-|vendor.id AZT
-&device.id eisa 0x3002
-|vendor.id AZT
-&device.id eisa 0x3005
-|vendor.id AZT
-&device.id eisa 0x3011
-|vendor.id CDC
-&device.id eisa 0x1111
-|vendor.id CMI
-&device.id eisa 0x0001
-|vendor.id CSC
-&device.id eisa 0x0000
-|vendor.id CSC
-&device.id eisa 0x0225
-|vendor.id CSC
-&device.id eisa 0x0437
-|vendor.id CSC
-&device.id eisa 0x0b35
-|vendor.id CSC
-&device.id eisa 0x0d32
-|vendor.id CSC
-&device.id eisa 0x1425
-|vendor.id CSC
-&device.id eisa 0x1525
-|vendor.id CSC
-&device.id eisa 0x1a32
-|vendor.id CSC
-&device.id eisa 0x1e37
-|vendor.id CSC
-&device.id eisa 0x4232
-|vendor.id CSC
-&device.id eisa 0x4236+0x0002
-|vendor.id CSC
-&device.id eisa 0x4336
-|vendor.id CSC
-&device.id eisa 0x4536
-|vendor.id CSC
-&device.id eisa 0x4637
-|vendor.id CSC
-&device.id eisa 0x4837
-|vendor.id CSC
-&device.id eisa 0x6835+0x0002
-|vendor.id CSC
-&device.id eisa 0x7532
-|vendor.id CSC
-&device.id eisa 0x7537
-|vendor.id CSC
-&device.id eisa 0x7632
-|vendor.id CSC
-&device.id eisa 0x8025
-|vendor.id CSC
-&device.id eisa 0x8037
-|vendor.id CSC
-&device.id eisa 0x9836+0x0002
-|vendor.id CSC
-&device.id eisa 0xa836
-|vendor.id CSC
-&device.id eisa 0xc835
-|vendor.id CSC
-&device.id eisa 0xd925
-|vendor.id CSC
-&device.id eisa 0xd937
-|vendor.id CSC
-&device.id eisa 0xe825
-|vendor.id CSC
-&device.id eisa 0xf032
-|vendor.id CSC
-&device.id eisa 0xf235
-|vendor.id CSC
-&device.id eisa 0xf238
-|vendor.id CTL
-&device.id eisa 0x002a
-|vendor.id CTL
-&device.id eisa 0x002c
-|vendor.id CTL
-&device.id eisa 0x0035
-|vendor.id CTL
-&device.id eisa 0x0045
-|vendor.id CTL
-&device.id eisa 0x009a
-|vendor.id CTL
-&device.id eisa 0x009f
-|vendor.id CTL
-&device.id eisa 0x00ed
-|vendor.id DXP
-&device.id eisa 0x3201
-|vendor.id ESS
-&device.id eisa 0x0003
-|vendor.id ESS
-&device.id eisa 0x0968
-|vendor.id ESS
-&device.id eisa 0x1868+0x0002
-|vendor.id ESS
-&device.id eisa 0x1878+0x0002
-|vendor.id LWC
-&device.id eisa 0x1060+0x0002
-|vendor.id MDK
-&device.id eisa 0x1605
-|vendor.id NMX
-&device.id eisa 0x2200
-|vendor.id OPT
-&device.id eisa 0x0924+0x0002
-|vendor.id OPT
-&device.id eisa 0x0931
-|vendor.id RTL
-&device.id eisa 0x3000
-|vendor.id RWB
-&device.id eisa 0x1688
-|vendor.id SMM
-&device.id eisa 0x7180
-|vendor.id STB
-&device.id eisa 0x011a
-|vendor.id YMH
-&device.id eisa 0x0020
-|vendor.id YMH
-&device.id eisa 0x0030
-|vendor.id YMH
-&device.id eisa 0x0800
-+baseclass.id 0x004
-+subclass.id 0x01
-
- vendor.id ADV
-+vendor.name Advanced Micro Devices
-
- vendor.id ALN
-+vendor.name Acer
-
- vendor.id ALS
-+vendor.name Avance Logic, Inc.
-
- vendor.id ATI
-|vendor.id ATK
-+vendor.name Allied Telesyn
-
- vendor.id AVM
-+vendor.name AVM
-
- vendor.id AVM
-&device.id eisa 0x0900
-+baseclass.id 0x103
-+subclass.id 0x00
-+device.name AVM ISDN-Controller FRITZ!Card
-
- vendor.id AZT
-+vendor.name Aztech Systems
-
- vendor.id BRI
-+vendor.name Boca Research
-
- vendor.id CSC
-+vendor.name Crystal Semiconductor
-
- vendor.id CTL
-+vendor.name Creative Technology Ltd.
-
- vendor.id CTL
-&device.id eisa 0x0024
-|vendor.id CTL
-&device.id eisa 0x0026+0x0004
-|vendor.id CTL
-&device.id eisa 0x002b
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Sound Blaster 16
-
- vendor.id CTL
-&device.id eisa 0x0039
-|vendor.id CTL
-&device.id eisa 0x0042+0x0003
-|vendor.id CTL
-&device.id eisa 0x0047
-|vendor.id CTL
-&device.id eisa 0x0054
-|vendor.id CTL
-&device.id eisa 0x009c
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Sound Blaster AWE 32
-
- vendor.id CTL
-&device.id eisa 0x0048
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Creative SB32
-
- vendor.id CTL
-&device.id eisa 0x0051
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Sound Blaster Vibra16S
-
- vendor.id CTL
-&device.id eisa 0x0070
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Sound Blaster Vibra16C
-
- vendor.id CTL
-&device.id eisa 0x0080
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Sound Blaster Vibra16CL
-
- vendor.id CTL
-&device.id eisa 0x009d
-|vendor.id CTL
-&device.id eisa 0x00c1
-|vendor.id CTL
-&device.id eisa 0x00c3
-|vendor.id CTL
-&device.id eisa 0x00c5
-|vendor.id CTL
-&device.id eisa 0x00c7
-|vendor.id CTL
-&device.id eisa 0x00e4
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Sound Blaster AWE 64
-
- vendor.id CTL
-&device.id eisa 0x009e
-|vendor.id CTL
-&device.id eisa 0x00b2
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Creative SB AWE64 Gold
-
- vendor.id CTL
-&device.id eisa 0x00f0
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Creative ViBRA16X
-
- vendor.id DLK
-+vendor.name D-Link Corporation
-
- vendor.id ELS
-+vendor.name ELSA International
-
- vendor.id ELS
-&device.id eisa 0x0133
-+baseclass.id 0x103
-+subclass.id 0x00
-+device.name ELSA QuickStep 1000
-
- vendor.id ELS
-&device.id eisa 0x0213
-+device.name MicroLink 33.6TQV
-
- vendor.id ELS
-&device.id eisa 0x0754
-+device.name MicroLink 56k basic
-
- vendor.id ESS
-+vendor.name ESS Technology, Inc.
-
- vendor.id GRV
-&device.id eisa 0x0001
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Gravis Ultrasound
-
- vendor.id GWY
-+vendor.name Gateway
-
- vendor.id GWY
-&device.id eisa 0x001c
-+baseclass.id 0x102
-+subclass.id 0x01
-+device.name Telepath for Windows with x2
-
- vendor.id JQE
-+vendor.name Cnet
-
- vendor.id KYE
-+vendor.name Genius
-
- vendor.id KYE
-&device.id eisa 0x0001
-+device.name Genius PnP Mouse
-
- vendor.id LGI
-+vendor.name Logitech
-
- vendor.id LGI
-&device.id eisa 0x8001
-+device.name Logitech First/Pilot Mouse
-
- vendor.id LGI
-&device.id eisa 0x800b+0x0002
-+device.name Logitech MouseMan
-
- vendor.id MDY
-+vendor.name Microdyne
-
- vendor.id NDC
-+vendor.name NDC
-
- vendor.id PNP
-+vendor.name PnP
-
- vendor.id PNP
-&device.id eisa 0x0500
-+device.name Standard PC COM port
-
- vendor.id PNP
-&device.id eisa 0x0501
-+device.name 16550A-compatible COM port
-
- vendor.id PNP
-&device.id eisa 0x0f00
-+device.name Microsoft Bus Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f01
-+device.name Microsoft Serial Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f02
-+device.name Microsoft InPort Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f03
-+device.name Microsoft PS/2-style Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f04
-+device.name Mouse Systems Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f05
-+device.name Mouse Systems 3-Button Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f06
-+device.name Genius Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f07
-+device.name Genius Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f08
-+device.name Logitech Serial Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f09
-+device.name Microsoft BallPoint Serial Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f0a
-+device.name Microsoft Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f0b
-+device.name Microsoft Plug and Play BallPoint Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f0c
-+device.name MS-compatible Serial Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f0d
-+device.name MS-compatible InPort-compatible Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f0e
-+device.name Generic PS/2 Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f0f
-+device.name MS-compatible Serial BallPoint-compatible Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f10
-+device.name Texas Instruments QuickPort Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f11
-+device.name MS-compatible Bus Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f12
-+device.name Logitech PS/2-style Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f13
-+device.name PS/2 Port for PS/2-style Mice
-
- vendor.id PNP
-&device.id eisa 0x0f14
-+device.name Microsoft Kids Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f15
-+device.name Logitech bus mouse
-
- vendor.id PNP
-&device.id eisa 0x0f16
-+device.name Logitech SWIFT device
-
- vendor.id PNP
-&device.id eisa 0x0f17
-+device.name Logitech-compatible serial mouse
-
- vendor.id PNP
-&device.id eisa 0x0f18
-+device.name Logitech-compatible bus mouse
-
- vendor.id PNP
-&device.id eisa 0x0f19
-+device.name Logitech-compatible PS/2-style Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f1a
-+device.name Logitech-compatible SWIFT Device
-
- vendor.id PNP
-&device.id eisa 0x0f1b
-+device.name HP Omnibook Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f1c
-+device.name Compaq LTE Trackball PS/2-style Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f1d
-+device.name Compaq LTE Trackball Serial Mouse
-
- vendor.id PNP
-&device.id eisa 0x0f1e
-+device.name Microsoft Kids Trackball Mouse
-
- vendor.id PNP
-&device.id eisa 0x80d6
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name NE2000 Compatible
-
- vendor.id PNP
-&device.id eisa 0x80f7
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name 3Com EtherLink III
-
- vendor.id PNP
-&device.id eisa 0x80f8
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name 3Com Generic Etherlink PnP Device
-
- vendor.id PNP
-&device.id eisa 0xb006
-+device.name MPU401 compatible
-
- vendor.id PNP
-&device.id eisa 0xb02f
-+device.name Joystick/Game port
-
- vendor.id RPT
-+vendor.name RPTI
-
- vendor.id RTL
-+vendor.name Realtek
-
- vendor.id SKD
-+vendor.name SysKonnect
-
- vendor.id SMC
-+vendor.name SMC
-
- vendor.id SVE
-+vendor.name SVEC
-
- vendor.id TCM
-+vendor.name 3Com
-
- vendor.id TCM
-&device.id eisa 0x5090+0x0002
-|vendor.id TCM
-&device.id eisa 0x5094+0x0002
-|vendor.id TCM
-&device.id eisa 0x5098
-+baseclass.id 0x002
-+subclass.id 0x00
-
- vendor.id TER
-+vendor.name Terratec
-
- vendor.id TER
-&device.id eisa 0x1411
-+baseclass.id 0x004
-+subclass.id 0x01
-+device.name Soundsystem Base 1
-
- vendor.id USR
-+vendor.name U.S. Robotics, Inc.
-
- vendor.id USR
-&device.id eisa 0x9100
-+device.name U.S. Robotics 56K Message
-
- vendor.id YMH
-+vendor.name Yamaha
-
+++ /dev/null
- vendor.id pci 0x8086
-&device.id pci 0x1040
-+baseclass.id 0x102
-+subclass.id 0x02
-+requires Intel-536ep
-
- vendor.id pci 0x115d
-&device.id pci 0x0101
-|vendor.id pci 0x115d
-&device.id pci 0x0440+0x001d
-|vendor.id pci 0x11c1
-&device.id pci 0x0440+0x001d
-+baseclass.id 0x102
-+subclass.id 0x03
-+requires ltmodem
-+driver.module.modprobe lt_serial
-
+++ /dev/null
-# modinfo
- subclass.id 0x03
-&vendor.id pci 0x1039
-&device.id pci 0x7013
-|subclass.id 0x03
-&vendor.id pci 0x1039
-&device.id pci 0x7018
-|vendor.id pci 0x1022
-&device.id pci 0x7446
-|vendor.id pci 0x1055
-&device.id pci 0x9178
-|vendor.id pci 0x10a5
-&device.id pci 0x3052
-|vendor.id pci 0x10a5
-&device.id pci 0x5459
-|vendor.id pci 0x10b9
-&device.id pci 0x5457
-|vendor.id pci 0x10b9
-&device.id pci 0x5459+0x0002
-|vendor.id pci 0x10de
-&device.id pci 0x01c1
-|vendor.id pci 0x10ec
-&device.id pci 0x8197
-|vendor.id pci 0x1106
-&device.id pci 0x3068
-|vendor.id pci 0x1131
-&device.id pci 0x3400
-|vendor.id pci 0x163c
-&device.id pci 0x3052
-|vendor.id pci 0x163c
-&device.id pci 0x5459
-|vendor.id pci 0x2000
-&device.id pci 0x2800
-|vendor.id pci 0x2003
-&device.id pci 0x8800
-|vendor.id pci 0x8086
-&device.id pci 0x2416
-|vendor.id pci 0x8086
-&device.id pci 0x2426
-|vendor.id pci 0x8086
-&device.id pci 0x2446
-|vendor.id pci 0x8086
-&device.id pci 0x2486
-|vendor.id pci 0x8086
-&device.id pci 0x24c6
-|vendor.id pci 0x8086
-&device.id pci 0x24d6
-|vendor.id pci 0x8086
-&device.id pci 0x7196
-+driver.module.modprobe slamr
-+baseclass.id 0x102
-+subclass.id 0x04
-+requires kernel-nongpl|smartlink-softmodem
-
- vendor.id pci 0x1131
-&device.id pci 0x5402
-&subvendor.id pci 0x1244
-&subdevice.id pci 0x0f00
-+driver.module.modprobe fcdsl
-+requires kernel-nongpl
-
- vendor.id pci 0x1244
-&device.id pci 0x0a00
-|vendor.id pci 0x1244
-&device.id pci 0x0e00
-+driver.module.modprobe fcpci
-+requires kernel-nongpl
-
- vendor.id pci 0x1244
-&device.id pci 0x2700
-+driver.module.modprobe fcdslsl
-+requires kernel-nongpl
-
- vendor.id pci 0x1244
-&device.id pci 0x2900
-+driver.module.modprobe fcdsl2
-+requires kernel-nongpl
-
- vendor.id AVM
-&device.id eisa 0x0900
-+driver.module.modprobe fcpnp
-+requires kernel-nongpl
-
- vendor.id usb 0x0483
-&device.id usb 0x7554
-+driver.module.modprobe slusb
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x0c00
-+driver.module.modprobe fcusb
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x1000
-|vendor.id usb 0x057c
-&device.id usb 0x1900
-+driver.module.modprobe fcusb2
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x2000
-+driver.module.modprobe fxusb
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x2300
-+driver.module.modprobe fcdslusb
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x2800
-+driver.module.modprobe fxusb_CZ
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x2805
-|vendor.id usb 0x057c
-&device.id usb 0x4401
-+driver.module.modprobe e2220pc
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x2806
-|vendor.id usb 0x057c
-&device.id usb 0x4601
-+driver.module.modprobe e5520pc
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x3000
-+driver.module.modprobe fcdslusba
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x3500
-+driver.module.modprobe fcdslslusb
-+requires kernel-nongpl
-
- vendor.id usb 0x057c
-&device.id usb 0x3600
-+driver.module.modprobe fcdslusb2
-+requires kernel-nongpl
+++ /dev/null
-# monitors, LCDs
-
-
- vendor.id AOC
-+vendor.name AOC
-
- vendor.id AOC
-&device.id eisa 0xa566
-+device.name SPECTRUM 5NLR
-+driver.display 1280x1024|30-64|50-100|85
-
- vendor.id AOC
-&device.id eisa 0xa782
-+device.name SPECTRUM 7NLR
-+driver.display |50-110|30-82
-
- vendor.id AOC
-&device.id eisa 0xd350
-+device.name 4VA
-
- vendor.id AOC
-&device.id eisa 0xd566
-+device.name SPECTRUM 5VLR & 5VLRA
-+driver.display |50-100|30-66
-
- vendor.id AOC
-&device.id eisa 0xe570
-+device.name SPECTRUM 5GLR
-+driver.display |50-120|30-64
-
- vendor.id AOC
-&device.id eisa 0xe750
-+device.name SPECTRUM 7DLRA
-+driver.display |50-120|30-68
-
- vendor.id API
-+vendor.name ACER
-
- vendor.id API
-&device.id eisa 0x0037
-+device.name ACERVIEW 55
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x424c
-+device.name ACERVIEW 76IE
-+driver.display |50-110|30-69
-
- vendor.id API
-&device.id eisa 0x440b
-+device.name ACERVIEW 11D
-+driver.display |55-90|31-40
-
- vendor.id API
-&device.id eisa 0x4421
-+device.name ACERVIEW 33D
-+driver.display |55-90|31-40
-
- vendor.id API
-&device.id eisa 0x4522
-+device.name ACERVIEW 7134E
-+driver.display |55-90|31-60
-
- vendor.id API
-&device.id eisa 0x4536
-+device.name ACERVIEW 7154E
-+driver.display |55-90|31-60
-
- vendor.id API
-&device.id eisa 0x4538
-+device.name ACERVIEW 7156E
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x454c
-+device.name ACERVIEW 7176IE
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x454e
-+device.name ACERVIEW 7178IE
-+driver.display |55-90|31-90
-
- vendor.id API
-&device.id eisa 0x4938
-+device.name ACERVIEW 7156I
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x494c
-+device.name ACERVIEW 76I
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x494e
-+device.name ACERVIEW 78I
-+driver.display |55-90|31-90
-
- vendor.id API
-&device.id eisa 0x4962
-+device.name ACERVIEW 98I
-+driver.display |55-90|31-90
-
- vendor.id API
-&device.id eisa 0x4c21
-+device.name ACERVIEW 33DL
-+driver.display |55-90|31-40
-
- vendor.id API
-&device.id eisa 0x4c22
-+device.name ACERVIEW 34TL
-+driver.display |55-90|31-50
-
- vendor.id API
-&device.id eisa 0x4c37
-+device.name ACERVIEW 55L
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x4c38
-+device.name ACERVIEW 56L
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x4e4c
-+device.name ACERVIEW 76N
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x5321
-+device.name ACERVIEW 7133S
-+driver.display |55-90|31-40
-
- vendor.id API
-&device.id eisa 0x5322
-+device.name ACERVIEW 7134S
-+driver.display |55-90|31-60
-
- vendor.id API
-&device.id eisa 0x5336
-+device.name ACERVIEW 7154S
-+driver.display |55-90|31-60
-
- vendor.id API
-&device.id eisa 0x5338
-+device.name ACERVIEW 7156IS
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x534c
-+device.name ACERVIEW 7176IS
-+driver.display |55-90|31-70
-
- vendor.id API
-&device.id eisa 0x5422
-+device.name ACERVIEW 34T
-+driver.display |55-90|31-50
-
- vendor.id APP
-+vendor.name Apple
-
- vendor.id APP
-&device.id eisa 0x0352
-+device.name AppleVision 850
-
- vendor.id APP
-&device.id eisa 0x9214
-+driver.display |50-78|31-65
-
- vendor.id APP
-&device.id eisa 0x9d03
-+driver.display |58-75|31-60
-
- vendor.id AST
-+vendor.name AST
-
- vendor.id AST
-&device.id eisa 0x8001
-+device.name 4V
-
- vendor.id AST
-&device.id eisa 0x8002
-+device.name 4I
-+driver.display |50-90|30-38
-
- vendor.id AST
-&device.id eisa 0x8003
-+device.name 4N
-+driver.display |50-90|30-64
-
- vendor.id AST
-&device.id eisa 0x8004
-+device.name ASTVISION 4L
-+driver.display |50-90|30-64
-
- vendor.id AST
-&device.id eisa 0x8005
-+device.name ASTVISION 5L
-+driver.display |50-90|30-64
-
- vendor.id AST
-&device.id eisa 0x8006
-+device.name ASTVISION 7L
-+driver.display |50-90|30-64
-
- vendor.id AST
-&device.id eisa 0x8007
-+device.name ASTVISION 7H
-+driver.display |50-90|30-82
-
- vendor.id AST
-&device.id eisa 0x8008
-+device.name ASTVISION 20H
-+driver.display |50-150|29-82
-
- vendor.id AST
-&device.id eisa 0x8009
-+device.name SABRE
-+driver.display |50-90|30-64
-
- vendor.id AST
-&device.id eisa 0x800a
-+device.name ASTVISION 5V
-+driver.display |50-120|30-50
-
- vendor.id BRG
-+vendor.name BRIDGE
-
- vendor.id BRG
-&device.id eisa 0x00ab
-+device.name BM17C
-+driver.display |50-160|30-70
-
- vendor.id CPL
-+vendor.name Alpha
-
- vendor.id CPL
-&device.id eisa 0x096b
-+device.name TH-450
-
- vendor.id CPQ
-+vendor.name COMPAQ
-
- vendor.id CPQ
-&device.id eisa 0x0011+0x0006
-+device.name COMPAQ 1024
-
- vendor.id CPQ
-&device.id eisa 0x0017+0x0004
-+device.name COMPAQ PRB
-
- vendor.id CPQ
-&device.id eisa 0x0020+0x0002
-+device.name COMPAQ PRB
-
- vendor.id CPQ
-&device.id eisa 0x0022+0x0007
-+device.name 151FS
-
- vendor.id CPQ
-&device.id eisa 0x0029+0x0004
-+device.name COMPAQ PRB
-
- vendor.id CPQ
-&device.id eisa 0x002d+0x0007
-+device.name 171FS
-
- vendor.id CPQ
-&device.id eisa 0x0040+0x0002
-+device.name QVISION 200
-
- vendor.id CPQ
-&device.id eisa 0x0042
-+device.name QVISION 172
-
- vendor.id CPQ
-&device.id eisa 0x0043+0x0006
-+device.name QVISION 200
-
- vendor.id CPQ
-&device.id eisa 0x0049
-+device.name QVISION 210
-
- vendor.id CPQ
-&device.id eisa 0x0100
-+device.name COMPAQ 1024
-
- vendor.id CPQ
-&device.id eisa 0x0146
-+device.name COMPAQ 1024
-
- vendor.id CPQ
-&device.id eisa 0x0147
-+device.name 1024
-
- vendor.id CPQ
-&device.id eisa 0x0346+0x0006
-+device.name 151FS
-
- vendor.id CPQ
-&device.id eisa 0x0546+0x0004
-+device.name 171FS
-
- vendor.id CPQ
-&device.id eisa 0x0746+0x0002
-+device.name COMPAQ PRB
-
- vendor.id CPQ
-&device.id eisa 0x0846+0x0007
-+device.name COMPAQ PRA
-
- vendor.id CPQ
-&device.id eisa 0x084d
-+device.name PRESARIO 140
-+driver.display |48-80|31-49
-
- vendor.id CPQ
-&device.id eisa 0x0946+0x0004
-+device.name COMPAQ PRB
-
- vendor.id CPQ
-&device.id eisa 0x0a46+0x0007
-+device.name COMPAQ PRA
-
- vendor.id CPQ
-&device.id eisa 0x0a4d
-+device.name PRESARIO 150
-+driver.display |48-80|31-49
-
- vendor.id CPQ
-&device.id eisa 0x0d46+0x0007
-+device.name COMPAQ 140
-
- vendor.id CPQ
-&device.id eisa 0x0d4d
-+device.name 140
-+driver.display |48-80|31-49
-
- vendor.id CPQ
-&device.id eisa 0x0f46+0x0007
-+device.name COMPAQ 150
-
- vendor.id CPQ
-&device.id eisa 0x0f4d
-+device.name 150
-+driver.display |48-80|31-49
-
- vendor.id CPQ
-&device.id eisa 0x1320
-+device.name P70
-+driver.display |48-150|30-92
-
- vendor.id CPQ
-&device.id eisa 0x1321
-+device.name P110
-+driver.display |48-160|30-107
-
- vendor.id CPQ
-&device.id eisa 0x1322
-+device.name V50
-+driver.display |50-125|30-60
-
- vendor.id CPQ
-&device.id eisa 0x1324
-+device.name TFT500
-+driver.display |57-85|32-60
-
- vendor.id CPQ
-&device.id eisa 0x1325
-+device.name V900-
-+driver.display |48-160|30-96
-
- vendor.id CPQ
-&device.id eisa 0x1327
-+device.name P1610
-+driver.display |48-160|30-96
-
- vendor.id CPQ
-&device.id eisa 0x1329
-+device.name TFT8000-
-+driver.display |58-85|31-80
-
- vendor.id CPQ
-&device.id eisa 0x1330
-+device.name P75
-+driver.display |50-150|30-85
-
- vendor.id CPQ
-&device.id eisa 0x1331
-+device.name V55
-+driver.display |48-125|30-60
-
- vendor.id CPQ
-&device.id eisa 0x1332
-+device.name V75
-+driver.display |48-125|30-69
-
- vendor.id CPQ
-&device.id eisa 0x1333
-+device.name TFT450
-+driver.display |57-85|32-60
-
- vendor.id CPQ
-&device.id eisa 0x1334
-+device.name V40
-+driver.display |50-100|31-48
-
- vendor.id CPQ
-&device.id eisa 0x1338
-+device.name V45
-+driver.display |50-100|31-48
-
- vendor.id CPQ
-&device.id eisa 0x1349
-+device.name S700-
-+driver.display |50-160|30-70
-
- vendor.id CPQ
-&device.id eisa 0x1350
-+device.name S900-
-+driver.display |50-160|30-95
-
- vendor.id CPQ
-&device.id eisa 0x170a
-+device.name V70
-+driver.display |50-125|30-69
-
- vendor.id CPQ
-&device.id eisa 0x1730
-+device.name V90
-+driver.display |48-160|30-94
-
- vendor.id CPQ
-&device.id eisa 0x3012
-+device.name PRESARIO MV500-
-+driver.display |50-90|31-54
-
- vendor.id CPQ
-&device.id eisa 0x3013
-+device.name PRESARIO MV700-
-+driver.display |50-100|30-70
-
- vendor.id CPQ
-&device.id eisa 0x3014
-+device.name PRESARIO MV400-
-+driver.display |50-90|31-50
-
- vendor.id CTX
-+vendor.name CTX
-
- vendor.id CTX
-&device.id eisa 0x0150
-+device.name 1569
-+driver.display |50-130|30-70
-
- vendor.id CTX
-&device.id eisa 0x1451
-+device.name 1451
-+driver.display |45-90|30-50
-
- vendor.id CTX
-&device.id eisa 0x1551
-+device.name 1551
-+driver.display |45-90|30-50
-
- vendor.id CTX
-&device.id eisa 0x1562
-+device.name 1562
-+driver.display |45-90|30-62
-
- vendor.id CTX
-&device.id eisa 0x1565
-+device.name 1565
-+driver.display |45-90|30-65
-
- vendor.id CTX
-&device.id eisa 0x1569
-+device.name CTX 1569S 15-inch
-
- vendor.id CTX
-&device.id eisa 0x1765
-+device.name 1765
-+driver.display |45-110|30-65
-
- vendor.id CTX
-&device.id eisa 0x1785
-+device.name 1785
-+driver.display |45-110|30-85
-
- vendor.id CTX
-&device.id eisa 0x2085
-+device.name 2085
-+driver.display |45-110|30-85
-
- vendor.id CTX
-&device.id eisa 0x2185
-+device.name 2185
-+driver.display |45-110|30-85
-
- vendor.id CTX
-&device.id eisa 0x3621
-+device.name VL700
-+driver.display |50-120|30-70
-
- vendor.id DEC
-+vendor.name DIGITAL
-
- vendor.id DEC
-&device.id eisa 0x043a
-+device.name (FR-PCXAV-AZ) (24 ZOLL)
-+driver.display |50-160|30-96
-
- vendor.id DEC
-&device.id eisa 0x0479
-+device.name 19 ZOLL (FR-PCXAV-CY)
-+driver.display |48-160|30-95
-
- vendor.id DEC
-&device.id eisa 0x047a
-+device.name 19 ZOLL (FR-PCXAV-CZ)
-+driver.display |48-160|30-95
-
- vendor.id DEC
-&device.id eisa 0x06fa
-+device.name 21 ZOLL (FR-PCXAV-WZ)
-+driver.display |50-152|30-95
-
- vendor.id DEC
-&device.id eisa 0x073a
-+device.name 17 ZOLL (FR-PCXAV-YZ)
-+driver.display |48-150|30-85
-
- vendor.id DEC
-&device.id eisa 0x770c
-+device.name 14 ZOLL (FR-PCXCV-C*)
-+driver.display |50-90|30-54
-
- vendor.id DEC
-&device.id eisa 0x970c
-+device.name 15 ZOLL (FR-PCXCV-D*)
-+driver.display |50-90|30-54
-
- vendor.id DEC
-&device.id eisa 0x9a06
-+device.name (FR-PCXAV-TZ) (19 ZOLL)
-+driver.display |50-160|30-96
-
- vendor.id DEC
-&device.id eisa 0xba08
-+device.name 15 ZOLL (FR-PCXBV-E*)
-+driver.display |50-110|30-69
-
- vendor.id DEC
-&device.id eisa 0xda08
-+device.name 17 ZOLL (FR-PCXBV-F*)
-+driver.display |50-120|30-69
-
- vendor.id DEL
-+vendor.name DELL
-
- vendor.id DEL
-&device.id eisa 0x139a+0x0003
-+device.name Dell Ultrascan 14XE
-
- vendor.id DEL
-&device.id eisa 0x139d
-+device.name ULTRASCAN 14XE
-+driver.display |50-120|30-62
-
- vendor.id DEL
-&device.id eisa 0x1569
-+device.name 1569
-+driver.display |50-110|30-69
-
- vendor.id DEL
-&device.id eisa 0x2210+0x0003
-+device.name Dell Ultrascan V17X
-
- vendor.id DEL
-&device.id eisa 0x2213
-+device.name ULTRASCAN V17X
-+driver.display |50-130|30-85
-
- vendor.id DEL
-&device.id eisa 0x2214+0x0003
-+device.name Dell Ultrascan 21TE
-
- vendor.id DEL
-&device.id eisa 0x2217
-+device.name ULTRASCAN 21TE
-+driver.display |50-152|30-93
-
- vendor.id DEL
-&device.id eisa 0x3024+0x0003
-+device.name Dell VS17X
-
- vendor.id DEL
-&device.id eisa 0x3027
-+device.name VS17X
-+driver.display |50-120|30-65
-
- vendor.id DEL
-&device.id eisa 0x3276
-+device.name D1428L
-+driver.display |43-75|31-48
-
- vendor.id DEL
-&device.id eisa 0x32fe
-+device.name D828L
-+driver.display |50-120|31-54
-
- vendor.id DEL
-&device.id eisa 0x3319
-+device.name 828FI
-+driver.display |50-120|31-70
-
- vendor.id DEL
-&device.id eisa 0x4273
-+device.name V15X
-+driver.display |55-90|47-64
-
- vendor.id DEL
-&device.id eisa 0x5033
-+device.name D825HT
-+driver.display |50-120|31-70
-
- vendor.id DEL
-&device.id eisa 0x5062
-+device.name D1025HTX
-+driver.display |50-120|31-70
-
- vendor.id DEL
-&device.id eisa 0x50dd
-+device.name P990
-+driver.display |48-120|30-96
-
- vendor.id DEL
-&device.id eisa 0x512c
-+device.name D825TM
-+driver.display |50-120|30-70
-
- vendor.id DEL
-&device.id eisa 0x5155
-+device.name D1025TM
-+driver.display |50-160|31-85
-
- vendor.id DEL
-&device.id eisa 0x515b
-+device.name D1626HT
-+driver.display |50-160|31-107
-
- vendor.id DEL
-&device.id eisa 0x5314
-+device.name D2026T
-+driver.display |50-100|31-96
-
- vendor.id DEL
-&device.id eisa 0x5319
-+device.name 1726T-HS/D1025HT
-+driver.display |50-100|31-85
-
- vendor.id DEL
-&device.id eisa 0x5697
-+device.name 800M
-+driver.display |50-120|30-70
-
- vendor.id DEL
-&device.id eisa 0x602f
-+device.name D2128-TCO
-+driver.display |50-150|31-102
-
- vendor.id DEL
-&device.id eisa 0x6124
-+device.name D1025HE
-+driver.display |50-120|31-92
-
- vendor.id DEL
-&device.id eisa 0x62ff
-+device.name D825HR
-+driver.display |50-120|31-70
-
- vendor.id DEL
-&device.id eisa 0x635e
-+device.name ES-17
-+driver.display |50-100|31-85
-
- vendor.id DEL
-&device.id eisa 0x7077
-+device.name D1226H
-+driver.display |50-160|30-95
-
- vendor.id DEL
-&device.id eisa 0x715d
-+device.name 1500FP
-+driver.display |56-75|30-61
-
- vendor.id DEL
-&device.id eisa 0x71a5
-+device.name M770
-+driver.display |48-160|30-69
-
- vendor.id DEL
-&device.id eisa 0x730b
-+device.name D1028L
-+driver.display |50-120|31-70
-
- vendor.id DEL
-&device.id eisa 0x8162
-+device.name TFT 1400FP
-+driver.display |55-86|31-60
-
- vendor.id DEL
-&device.id eisa 0x93d5
-+device.name M1110
-+driver.display |50-160|30-107
-
- vendor.id DPC
-+vendor.name DELTA
-
- vendor.id DPC
-&device.id eisa 0x0456
-+device.name Delta DA-456
-
- vendor.id DPC
-&device.id eisa 0x0570
-+device.name DA-570
-+driver.display |50-100|30-70
-
- vendor.id DPC
-&device.id eisa 0x0770
-+device.name DB-770
-+driver.display |50-100|30-70
-
- vendor.id DPC
-&device.id eisa 0x0995
-+device.name DA-995
-+driver.display |50-180|30-95
-
- vendor.id DPC
-&device.id eisa 0x1565
-+device.name DA-1565
-+driver.display |50-100|30-65
-
- vendor.id DPC
-&device.id eisa 0x1765
-+device.name DB-1765
-+driver.display |50-100|30-65
-
- vendor.id DPC
-&device.id eisa 0x1770
-+device.name DC-770
-+driver.display |50-120|30-70
-
- vendor.id DPC
-&device.id eisa 0x4570
-+device.name DE-570
-+driver.display |50-120|30-70
-
- vendor.id DWE
-+vendor.name DAEWOO
-
- vendor.id DWE
-&device.id eisa 0x1423
-+device.name CMC-1423B1
-+driver.display |50-120|30-64
-
- vendor.id DWE
-&device.id eisa 0x1427
-+device.name CMC-1427X1
-+driver.display |50-100|30-48
-
- vendor.id DWE
-&device.id eisa 0x1502
-+device.name CMC-1502B1
-+driver.display |50-120|30-64
-
- vendor.id DWE
-&device.id eisa 0x1505
-+device.name CMC-1505X
-+driver.display |50-100|30-50
-
- vendor.id DWE
-&device.id eisa 0x1507
-+device.name CMC-1507X1
-+driver.display |50-100|30-48
-
- vendor.id DWE
-&device.id eisa 0x1703
-+device.name CMC-1703B
-+driver.display |50-120|30-64
-
- vendor.id DWE
-&device.id eisa 0x4312
-+device.name 431X
-+driver.display |50-120|30-54
-
- vendor.id DWE
-&device.id eisa 0x5093
-+device.name 1509B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x5113
-+device.name 511B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x5123
-+device.name 512B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x5133
-+device.name Daewoo CMC-1511B
-
- vendor.id DWE
-&device.id eisa 0x5182
-+device.name 518X
-+driver.display |50-120|30-54
-
- vendor.id DWE
-&device.id eisa 0x5183
-+device.name 518B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x5193
-+device.name 519B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x7044
-+device.name CMC-1704C
-+driver.display |50-150|24-86
-
- vendor.id DWE
-&device.id eisa 0x7053
-+device.name 1705B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x7073
-+device.name 707B
-+driver.display |50-120|30-69
-
- vendor.id DWE
-&device.id eisa 0x7103
-+device.name 710B
-+driver.display |50-160|30-69
-
- vendor.id DWE
-&device.id eisa 0x7104
-+device.name 710C
-+driver.display |50-160|30-86
-
- vendor.id DWE
-&device.id eisa 0x9015
-+device.name 901D
-+driver.display |50-160|30-95
-
- vendor.id ECS
-+vendor.name ECS
-
- vendor.id ECS
-&device.id eisa 0x0001
-+device.name VERTOS 1401
-+driver.display |50-100|30-50
-
- vendor.id ECS
-&device.id eisa 0x0002
-+device.name VERTOS 1501
-+driver.display |50-100|24-64
-
- vendor.id ECS
-&device.id eisa 0x0003
-+device.name VERTOS 1502
-+driver.display |50-100|24-64
-
- vendor.id ECS
-&device.id eisa 0x0004
-+device.name VERTOS 1503
-+driver.display |50-100|24-64
-
- vendor.id ECS
-&device.id eisa 0x0005
-+device.name VERTOS 1700
-+driver.display |50-100|24-64
-
- vendor.id ECS
-&device.id eisa 0x0006
-+device.name VERTOS 1701
-+driver.display |50-100|24-82
-
- vendor.id ECS
-&device.id eisa 0x0007
-+device.name VERTOS 1702
-+driver.display |50-100|24-64
-
- vendor.id ECS
-&device.id eisa 0x0008
-+device.name VERTOS 2101
-+driver.display |50-100|24-90
-
- vendor.id ECS
-&device.id eisa 0x0009
-+device.name VERTOS 2102
-+driver.display |50-100|24-90
-
- vendor.id EIZ
-+vendor.name EIZO
-
- vendor.id EIZ
-&device.id eisa 0x0200
-+device.name FLEXSCAN F351
-
- vendor.id EIZ
-&device.id eisa 0x0201
-+device.name FLEXSCAN F553
-
- vendor.id EIZ
-&device.id eisa 0x0202
-+device.name FLEXSCAN F563
-
- vendor.id EIZ
-&device.id eisa 0x0203
-+device.name FLEXSCAN F764
-+driver.display |55-160|30-90
-
- vendor.id EIZ
-&device.id eisa 0x0204
-+device.name FLEXSCAN F784
-
- vendor.id EIZ
-&device.id eisa 0x0206
-+device.name FLEXSCAN 6600
-+driver.display |70-90|56-110
-
- vendor.id EIZ
-&device.id eisa 0x0300
-+device.name FLEXSCAN 6500
-+driver.display |55-90|56-80
-
- vendor.id EIZ
-&device.id eisa 0x0302
-+device.name 9060S
-
- vendor.id EIZ
-&device.id eisa 0x0303
-+device.name 9065S
-+driver.display |50-90|30-50
-
- vendor.id EIZ
-&device.id eisa 0x0305
-+device.name FLEXSCAN T563
-
- vendor.id EIZ
-&device.id eisa 0x0306
-+device.name 9070S
-+driver.display |50-90|20-50
-
- vendor.id EIZ
-&device.id eisa 0x0307
-+device.name 9080I
-+driver.display |55-90|30-64
-
- vendor.id EIZ
-&device.id eisa 0x0308
-+device.name 9400I
-+driver.display |55-90|30-65
-
- vendor.id EIZ
-&device.id eisa 0x0309
-+device.name 9500
-+driver.display |55-90|30-78
-
- vendor.id EIZ
-&device.id eisa 0x030a
-+device.name FLEXSCAN F340IW
-
- vendor.id EIZ
-&device.id eisa 0x030c
-+device.name FLEXSCAN F552
-
- vendor.id EIZ
-&device.id eisa 0x030d
-+device.name FLEXSCAN F560IW
-+driver.display |55-90|30-82
-
- vendor.id EIZ
-&device.id eisa 0x030e
-+device.name FLEXSCAN F750I
-+driver.display |55-90|30-80
-
- vendor.id EIZ
-&device.id eisa 0x030f
-+device.name FLEXSCAN F760IW
-+driver.display |55-90|30-78
-
- vendor.id EIZ
-&device.id eisa 0x0310
-+device.name FLEXSCAN F780IW
-+driver.display |55-120|45-100
-
- vendor.id EIZ
-&device.id eisa 0x0311
-+device.name FLEXSCAN T560I
-+driver.display |55-90|30-82
-
- vendor.id EIZ
-&device.id eisa 0x0312
-+device.name FLEXSCAN T660I
-+driver.display |55-90|30-78
-
- vendor.id EIZ
-&device.id eisa 0x0313
-+device.name FLEXSCAN T562
-+driver.display |55-90|30-82
-
- vendor.id EIZ
-&device.id eisa 0x0314
-+device.name FLEXSCAN T662
-+driver.display |55-160|30-85
-
- vendor.id EIZ
-&device.id eisa 0x038c
-+device.name FLEXSCAN F550IW
-+driver.display |55-90|30-65
-
- vendor.id EIZ
-&device.id eisa 0x1012
-+device.name FLEXSCAN L34
-+driver.display |50-85|24-61
-
- vendor.id EIZ
-&device.id eisa 0x1018
-+device.name FLEXSCAN F77S
-+driver.display |50-160|30-110
-
- vendor.id EIZ
-&device.id eisa 0x1020
-+device.name FLEXSCAN F57
-+driver.display |50-160|30-96
-
- vendor.id EIZ
-&device.id eisa 0x1418
-+device.name NANAO FLEXSCAN FX-E7S
-+driver.display |50-160|30-110
-
- vendor.id EIZ
-&device.id eisa 0x1420
-+device.name NANAO FLEXSCAN FX-C7
-+driver.display |50-160|30-96
-
- vendor.id ELS
-+vendor.name ELSA
-
- vendor.id ELS
-&device.id eisa 0x4160
-+device.name ECOMO OFFICE
-+driver.display |50-130|30-86
-
- vendor.id ELS
-&device.id eisa 0x7617
-+device.name ECOMO 22H99
-+driver.display |50-160|31-121
-
- vendor.id FCM
-+vendor.name FUNAI
-
- vendor.id FCM
-&device.id eisa 0x3313
-+device.name 17GD
-+driver.display |50-120|30-70
-
- vendor.id FPA
-+vendor.name FUJITSU
-
- vendor.id FPA
-&device.id eisa 0x0612
-+device.name 1554G+
-+driver.display |50-120|30-54
-
- vendor.id FPA
-&device.id eisa 0x2d30
-+device.name 1568G1
-+driver.display |50-120|30-69
-
- vendor.id FPA
-&device.id eisa 0x2df9
-+device.name 1769G
-+driver.display |50-120|30-69
-
- vendor.id FUJ
-+vendor.name FUJITSU
-
- vendor.id FUJ
-&device.id eisa 0x0119
-+device.name X150F
-+driver.display |56-75|31-60
-
- vendor.id FUJ
-&device.id eisa 0x2118
-+device.name X176
-+driver.display |50-200|30-100
-
- vendor.id FUJ
-&device.id eisa 0x2218
-+device.name X177
-+driver.display |50-150|30-92
-
- vendor.id FUJ
-&device.id eisa 0x2318
-+device.name X177A
-+driver.display |50-150|30-92
-
- vendor.id FUJ
-&device.id eisa 0x3118
-+device.name E155
-+driver.display |50-100|30-54
-
- vendor.id FUJ
-&device.id eisa 0x5110
-+device.name FMV-DP98X1
-+driver.display |50-180|30-95
-
- vendor.id FUJ
-&device.id eisa 0x6110
-+device.name FMV-DP97X4
-+driver.display |50-120|30-92
-
- vendor.id FUJ
-&device.id eisa 0x6210
-+device.name FMVDP97X5(G)/FMVDP97X6
-+driver.display |50-150|30-92
-
- vendor.id FUJ
-&device.id eisa 0x7110
-+device.name FMV-DP84X2
-+driver.display |50-100|30-70
-
- vendor.id FUJ
-&device.id eisa 0x7210
-+device.name FMV-DP84X3(G)
-+driver.display |50-120|30-70
-
- vendor.id FUJ
-&device.id eisa 0x8111
-+device.name VL-15TX1(G)
-
- vendor.id FUJ
-&device.id eisa 0x9111
-+device.name VL-14TX1
-
- vendor.id FUJ
-&device.id eisa 0xa901
-+device.name FMV-DP97X2
-+driver.display |50-120|30-92
-
- vendor.id FUJ
-&device.id eisa 0xaa01
-+device.name FMV-DP97X3
-+driver.display |50-150|30-70
-
- vendor.id FUJ
-&device.id eisa 0xb801
-+device.name FMV-DP84X1
-+driver.display |50-100|30-70
-
- vendor.id GSM
-+vendor.name LG ELECTRONICS
-
- vendor.id GSM
-&device.id eisa 0x36b4
-+device.name STUDIOWORKS 44M
-+driver.display |50-90|30-50
-
- vendor.id GSM
-&device.id eisa 0x36b9
-+device.name STUDIOWORKS 44I
-+driver.display |50-89|30-50
-
- vendor.id GSM
-&device.id eisa 0x36bb
-+device.name STUDIOWORKS 45I
-+driver.display |50-90|30-54
-
- vendor.id GSM
-&device.id eisa 0x3aa0
-+device.name 1505S
-+driver.display |50-90|30-50
-
- vendor.id GSM
-&device.id eisa 0x3aa2
-+device.name STUDIOWORKS 56M
-+driver.display |50-110|30-65
-
- vendor.id GSM
-&device.id eisa 0x3aa8
-+device.name STUDIOWORKS 56I
-+driver.display |50-120|30-65
-
- vendor.id GSM
-&device.id eisa 0x3aaf
-+device.name STUDIOWORKS 56T
-+driver.display |50-120|30-65
-
- vendor.id GSM
-&device.id eisa 0x3ab0
-+device.name LG StudioWorks 5D
-
- vendor.id GSM
-&device.id eisa 0x3ab6
-+device.name STUDIOWORKS 5D
-+driver.display |50-120|30-65
-
- vendor.id GSM
-&device.id eisa 0x3abd
-+device.name STUDIOWORKS 55I
-+driver.display |50-90|30-54
-
- vendor.id GSM
-&device.id eisa 0x426c
-+device.name STUDIOWORKS 78I
-
- vendor.id GSM
-&device.id eisa 0x426d
-+device.name STUDIOWORKS 78T
-+driver.display |50-120|30-85
-
- vendor.id GSM
-&device.id eisa 0x426e
-+device.name STUDIOWORKS 76I
-+driver.display |50-110|30-65
-
- vendor.id GSM
-&device.id eisa 0x4273
-+device.name LG StudioWorks 76m
-
- vendor.id GSM
-&device.id eisa 0x4274
-+device.name LG StudioWorks 78m
-
- vendor.id GSM
-&device.id eisa 0x4277
-+device.name LG StudioWorks 74m
-
- vendor.id GSM
-&device.id eisa 0x4278
-+device.name LG StudioWorks 74i
-
- vendor.id GSM
-&device.id eisa 0x427e
-+device.name STUDIOWORKS 7D
-+driver.display |50-120|30-65
-
- vendor.id GSM
-&device.id eisa 0x427f
-+device.name STUDIOWORKS 78D
-+driver.display |50-120|30-85
-
- vendor.id GSM
-&device.id eisa 0x4280
-+device.name LG StudioWorks 78DT
-
- vendor.id GSM
-&device.id eisa 0x4281
-+device.name LG StudioWorks 7DT
-
- vendor.id GSM
-&device.id eisa 0x4284
-+device.name LG StudioWorks 76T
-
- vendor.id GSM
-&device.id eisa 0x42cf
-+device.name 1725S
-+driver.display |50-120|30-65
-
- vendor.id GSM
-&device.id eisa 0x4e21
-+device.name STUDIOWORKS 20I
-+driver.display |50-120|30-85
-
- vendor.id GWY
-+vendor.name GATEWAY
-
- vendor.id GWY
-&device.id eisa 0x00c0
-+device.name VX900T
-+driver.display |48-120|30-96
-
- vendor.id GWY
-&device.id eisa 0x044d
-+device.name VX700
-+driver.display |50-130|30-86
-
- vendor.id GWY
-&device.id eisa 0x0454
-+device.name VX1100
-+driver.display |50-152|30-108
-
- vendor.id GWY
-&device.id eisa 0x0a8d
-+device.name DESTINATION DL27
-+driver.display |50-90|24-40
-
- vendor.id GWY
-&device.id eisa 0x0e11
-+device.name DESTINATION DL36
-+driver.display |50-90|24-40
-
- vendor.id GWY
-&device.id eisa 0x138a
-+device.name EV500
-+driver.display |50-110|30-70
-
- vendor.id GWY
-&device.id eisa 0x1b5c
-+device.name EV700
-+driver.display |50-120|30-70
-
- vendor.id GWY
-&device.id eisa 0x7659
-+device.name EV700-H
-+driver.display |50-120|30-70
-
- vendor.id GWY
-&device.id eisa 0x8883
-+device.name EV900
-+driver.display |50-160|30-95
-
- vendor.id GWY
-&device.id eisa 0x9095
-+device.name VX900
-+driver.display |50-160|30-95
-
- vendor.id HEI
-+vendor.name HYUNDAI
-
- vendor.id HEI
-&device.id eisa 0x0b42
-+device.name DELUXSCAN 21
-+driver.display |45-100|30-82
-
- vendor.id HEI
-&device.id eisa 0x12f0
-+device.name DELUXSCAN 14S
-+driver.display |50-120|30-48
-
- vendor.id HEI
-&device.id eisa 0x16d8
-+device.name DELUXSCAN 15B
-+driver.display |50-120|30-48
-
- vendor.id HEI
-&device.id eisa 0x16e8
-+device.name DELUXSCAN 15G
-+driver.display |50-90|30-64
-
- vendor.id HEI
-&device.id eisa 0x16ee
-+device.name DELUXSCAN 15G+
-+driver.display |50-120|30-70
-
- vendor.id HEI
-&device.id eisa 0x1e02
-+device.name DELUXSCAN 17 PRO
-+driver.display |45-100|30-82
-
- vendor.id HEI
-&device.id eisa 0x1eb8
-+device.name DELUXSCAN 17B
-+driver.display |50-100|30-64
-
- vendor.id HEI
-&device.id eisa 0x1ebe
-+device.name DELUXSCAN 17B+
-+driver.display |50-120|30-70
-
- vendor.id HEI
-&device.id eisa 0x5864
-+device.name DELUXSCAN 15 PRO
-+driver.display |50-120|30-64
-
- vendor.id HEI
-&device.id eisa 0x768b
-+device.name 7687
-+driver.display |50-150|30-87
-
- vendor.id HEI
-&device.id eisa 0xb81e
-+device.name DELUXSCAN 17
-+driver.display |50-90|30-64
-
- vendor.id HIG
-+vendor.name HIGHSCREEN
-
- vendor.id HIG
-&device.id eisa 0x5620
-+device.name DX1595
-+driver.display |50-120|30-65
-
- vendor.id HIG
-&device.id eisa 0x5624
-+device.name DX15T
-+driver.display |50-100|30-64
-
- vendor.id HIG
-&device.id eisa 0x5626
-+device.name DX1795
-+driver.display |50-120|30-65
-
- vendor.id HIT
-+vendor.name HITACHI
-
- vendor.id HIT
-&device.id eisa 0x1717
-+device.name ACCUVUE GX17L
-+driver.display |50-100|30-64
-
- vendor.id HIT
-&device.id eisa 0x1727
-+device.name HM1764
-+driver.display |50-100|30-64
-
- vendor.id HIT
-&device.id eisa 0x1827
-+device.name HM1782
-+driver.display |50-100|30-82
-
- vendor.id HIT
-&device.id eisa 0x2147
-+device.name HM4721
-+driver.display |50-152|30-95
-
- vendor.id HIT
-&device.id eisa 0x2149
-+device.name HM4921
-+driver.display |50-152|30-107
-
- vendor.id HIT
-&device.id eisa 0x4020
-+device.name HM4020
-+driver.display |60-120|60-85
-
- vendor.id HIT
-&device.id eisa 0x4021
-+device.name HM4021
-+driver.display |60-120|60-85
-
- vendor.id HIT
-&device.id eisa 0x4711
-+device.name ACCUVUE UX4721
-+driver.display |50-152|30-95
-
- vendor.id HIT
-&device.id eisa 0x4810
-+device.name ACCUVUE GX20
-+driver.display |50-152|28-90
-
- vendor.id HIT
-&device.id eisa 0x4811
-+device.name ACCUVUE GX21
-+driver.display |50-152|28-90
-
- vendor.id HIT
-&device.id eisa 0x4820
-+device.name HM4820
-+driver.display |50-152|28-90
-
- vendor.id HIT
-&device.id eisa 0x4821
-+device.name HM4821
-+driver.display |50-152|28-90
-
- vendor.id HIT
-&device.id eisa 0x4830
-+device.name ACCUVUE GX20H
-+driver.display |50-152|28-90
-
- vendor.id HIT
-&device.id eisa 0x4911
-+device.name ACCUVUE UX4921
-+driver.display |50-152|30-107
-
- vendor.id HIT
-&device.id eisa 0x6421
-+device.name HM6421
-+driver.display |72-77|100-102
-
- vendor.id HIT
-&device.id eisa 0x6811
-+device.name ACCUVUE UX6821
-+driver.display |50-152|30-107
-
- vendor.id HIT
-&device.id eisa 0x6821
-+device.name HM6821
-+driver.display |50-152|30-107
-
- vendor.id HSL
-+vendor.name HANSOL
-
- vendor.id HSL
-&device.id eisa 0x0579
-+device.name ELECTRONICS MAZELLAN14PX
-+driver.display |50-120|30-54
-
- vendor.id HSL
-&device.id eisa 0x057a
-+device.name ELECTRONICS MAZELLAN400A
-+driver.display |50-120|30-50
-
- vendor.id HSL
-&device.id eisa 0x05dd
-+device.name ELECTRONICS MAZELLAN15AX
-+driver.display |50-120|30-54
-
- vendor.id HSL
-&device.id eisa 0x05de
-+device.name ELECTRONICS MAZELLAN500P
-+driver.display |50-120|30-69
-
- vendor.id HSL
-&device.id eisa 0x06a5
-+device.name ELECTRONICS MAZELLAN700P
-+driver.display |50-120|30-85
-
- vendor.id HSL
-&device.id eisa 0x06a6
-+device.name ELECTRONICS MAZELLAN700A
-+driver.display |50-120|30-69
-
- vendor.id HSL
-&device.id eisa 0xa605
-+device.name ELECTRONICS MAZELLAN17PX
-+driver.display |50-120|30-85
-
- vendor.id HTC
-+vendor.name HITACHI
-
- vendor.id HTC
-&device.id eisa 0xab6f
-+device.name LTD CM-1711M
-
- vendor.id HTC
-&device.id eisa 0xabc2
-+device.name LTD CM-2112M
-+driver.display |50-160|31-107
-
- vendor.id HTC
-&device.id eisa 0xabc7
-+device.name LTD CM-2111M
-+driver.display |50-160|31-95
-
- vendor.id HTC
-&device.id eisa 0xabcc
-+device.name LTD CM-2110M
-+driver.display |50-160|31-85
-
- vendor.id HTC
-&device.id eisa 0xabe0
-+device.name LTD CM802
-+driver.display |50-160|31-100
-
- vendor.id HTC
-&device.id eisa 0xabe2
-+device.name LTD CM801
-+driver.display |50-160|31-96
-
- vendor.id HTC
-&device.id eisa 0xabe3
-+device.name LTD CM800
-+driver.display |50-160|31-89
-
- vendor.id HTC
-&device.id eisa 0xabea
-+device.name LTD CM803
-+driver.display |50-160|31-115
-
- vendor.id HTC
-&device.id eisa 0xabf4
-+device.name LTD CM701
-+driver.display |50-160|31-96
-
- vendor.id HTC
-&device.id eisa 0xac13
-+device.name CM751
-+driver.display |50-160|30-94
-
- vendor.id HTC
-&device.id eisa 0xac15
-+device.name CM752
-+driver.display |50-160|31-101
-
- vendor.id HTC
-&device.id eisa 0xac22
-+device.name CM753
-+driver.display |50-160|31-107
-
- vendor.id HTC
-&device.id eisa 0xac46
-+device.name CM811
-+driver.display |50-160|31-96
-
- vendor.id HTC
-&device.id eisa 0xac47
-+device.name CM812
-+driver.display |50-160|31-107
-
- vendor.id HTC
-&device.id eisa 0xac48
-+device.name CM813
-+driver.display |50-160|31-115
-
- vendor.id HTC
-&device.id eisa 0xac49
-+device.name CM814
-+driver.display |50-160|31-125
-
- vendor.id HTC
-&device.id eisa 0xafc8
-+device.name LTD CM500
-+driver.display |50-100|30-69
-
- vendor.id HTC
-&device.id eisa 0xafce
-+device.name CM500E
-+driver.display |50-100|30-69
-
- vendor.id HTC
-&device.id eisa 0xafd2
-+device.name LTD CM600
-+driver.display |47-104|30-64
-
- vendor.id HTC
-&device.id eisa 0xafd7
-+device.name LTD CM611
-+driver.display 1152x870|50-120|31-92
-
- vendor.id HTC
-&device.id eisa 0xafdd
-+device.name CM620
-+driver.display |47-130|31-69
-
- vendor.id HTC
-&device.id eisa 0xafe2
-+device.name CM630
-+driver.display |47-130|31-86
-
- vendor.id HTC
-&device.id eisa 0xafec
-+device.name CM641
-+driver.display |50-130|31-95
-
- vendor.id HWP
-+vendor.name HP
-
- vendor.id HWP
-&device.id eisa 0x0af0
-+device.name D2800A 21
-+driver.display |50-160|30-82
-
- vendor.id HWP
-&device.id eisa 0x0af6
-+device.name D2806A 15
-+driver.display |50-100|30-64
-
- vendor.id HWP
-&device.id eisa 0x0af8
-+device.name HP D2808 1024 Low Emission
-
- vendor.id HWP
-&device.id eisa 0x0aff
-+device.name D1815A 14 1024
-
- vendor.id HWP
-&device.id eisa 0x0b0a
-+device.name D2826-MONITOR (15 ZOLL)
-+driver.display |50-120|31-54
-
- vendor.id HWP
-&device.id eisa 0x0b10
-+device.name D2832A
-+driver.display |50-120|30-70
-
- vendor.id HWP
-&device.id eisa 0x0b13
-+device.name D2835
-+driver.display |50-160|30-69
-
- vendor.id HWP
-&device.id eisa 0x0b16
-+device.name HP D2838 M700 17"
-+driver.display |50-160|30-86
-
- vendor.id HWP
-&device.id eisa 0x0b18
-+device.name D2840 ERGO 1280
-+driver.display |50-150|31-92
-
- vendor.id HWP
-&device.id eisa 0x0b1d
-+device.name D2845 ERGO 1600
-
- vendor.id HWP
-&device.id eisa 0x0b1e
-+device.name HP D2846 21
-+driver.display 1600x1200|50-160|30-107|230
-
- vendor.id HWP
-&device.id eisa 0x0f11
-+device.name D3857A 15
-
- vendor.id HWP
-&device.id eisa 0x0f12
-+device.name D3858A 14
-
- vendor.id IBM
-+vendor.name IBM
-
- vendor.id IBM
-&device.id eisa 0x0844
-+device.name 2116 MM55 MULTIMEDIA
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x0850
-+device.name 2128 MM75 MULTIMEDIA
-+driver.display |50-160|30-69
-
- vendor.id IBM
-&device.id eisa 0x08bb
-+device.name 2235 C50
-+driver.display |50-120|30-54
-
- vendor.id IBM
-&device.id eisa 0x08bd
-+device.name 2237 C71
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x0a2e
-+device.name THINKPAD TFT
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x0a41
-+device.name THINKPAD DSTN
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x0a4b
-+device.name THINKPAD TFT
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x0a50
-+device.name THINKPAD DSTN
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x0a55
-+device.name THINKPAD TFT
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x198c
-+device.name 6540 G42
-+driver.display |55-100|30-50
-
- vendor.id IBM
-&device.id eisa 0x198d
-+device.name 6541 G51
-+driver.display |55-100|30-54
-
- vendor.id IBM
-&device.id eisa 0x198e
-+device.name G41
-
- vendor.id IBM
-&device.id eisa 0x198f
-+device.name G50
-
- vendor.id IBM
-&device.id eisa 0x1990
-+device.name G70
-+driver.display |50-105|31-64
-
- vendor.id IBM
-&device.id eisa 0x1991
-+device.name G200
-+driver.display |50-120|31-82
-
- vendor.id IBM
-&device.id eisa 0x1992
-+device.name 6546 G52
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x1993
-+device.name 6547 G72
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x1995
-+device.name 6549 G94
-+driver.display |50-160|30-95
-
- vendor.id IBM
-&device.id eisa 0x1999
-+device.name P50
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x199a
-+device.name P70
-+driver.display |50-120|29-82
-
- vendor.id IBM
-&device.id eisa 0x199b
-+device.name P200
-+driver.display |50-120|29-90
-
- vendor.id IBM
-&device.id eisa 0x199c
-+device.name 6556 P72
-+driver.display |50-150|30-85
-
- vendor.id IBM
-&device.id eisa 0x199d
-+device.name 6557 P92
-+driver.display |50-160|30-94
-
- vendor.id IBM
-&device.id eisa 0x199e
-+device.name 6558 P202
-+driver.display |50-160|30-107
-
- vendor.id IBM
-&device.id eisa 0x1bb7
-+device.name 7095
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x1bb9
-+device.name 7097
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x2112
-+device.name 2112
-+driver.display |50-80|31-38
-
- vendor.id IBM
-&device.id eisa 0x2113
-+device.name 2113
-+driver.display |50-80|31-38
-
- vendor.id IBM
-&device.id eisa 0x2114
-+device.name 2114
-+driver.display |50-120|31-62
-
- vendor.id IBM
-&device.id eisa 0x2115
-+device.name 2115
-+driver.display |50-120|31-62
-
- vendor.id IBM
-&device.id eisa 0x2117
-+device.name 2117
-+driver.display |50-120|31-65
-
- vendor.id IBM
-&device.id eisa 0x2215
-+device.name 2215
-+driver.display |50-120|31-64
-
- vendor.id IBM
-&device.id eisa 0x2221
-+device.name 2122
-+driver.display |50-120|30-54
-
- vendor.id IBM
-&device.id eisa 0x2236
-+device.name 2236
-+driver.display |50-120|30-70
-
- vendor.id IBM
-&device.id eisa 0x2238
-+device.name 2238
-+driver.display |50-80|31-38
-
- vendor.id IBM
-&device.id eisa 0x2248
-+device.name 2248
-+driver.display |50-100|31-48
-
- vendor.id IBM
-&device.id eisa 0x2264
-+device.name 2264
-+driver.display |50-120|31-64
-
- vendor.id IBM
-&device.id eisa 0x2421
-+device.name 2124
-+driver.display |50-120|30-54
-
- vendor.id IBM
-&device.id eisa 0x2529
-+device.name 9513 T55A TFT-MONITOR
-+driver.display |56-75|30-61
-
- vendor.id IBM
-&device.id eisa 0x252a
-+device.name 9514-B TFT
-+driver.display |55-75|31-65
-
- vendor.id IBM
-&device.id eisa 0x2535
-+device.name 9525-0X1
-+driver.display |50-110|30-64
-
- vendor.id IBM
-&device.id eisa 0x254a
-+device.name THINKPAD LCD
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x254c
-+device.name THINKPAD TFT
-+driver.display |50-65|40-60
-
- vendor.id IBM
-&device.id eisa 0x2621
-+device.name 2126
-+driver.display |50-110|30-69
-
- vendor.id IBM
-&device.id eisa 0x26ac
-+device.name APTIVA 9900
-+driver.display |50-120|30-54
-
- vendor.id IBM
-&device.id eisa 0x2721
-+device.name 2127
-+driver.display |50-120|30-72
-
- vendor.id IBM
-&device.id eisa 0x27ad
-+device.name APTIVA 9901
-+driver.display |50-120|30-54
-
- vendor.id IBM
-&device.id eisa 0x3121
-+device.name 2131
-+driver.display |50-120|30-69
-
- vendor.id IBM
-&device.id eisa 0x3221
-+device.name 2132
-+driver.display |50-120|30-72
-
- vendor.id IBM
-&device.id eisa 0x6312
-+device.name 6312
-+driver.display |47-100|31-50
-
- vendor.id IBM
-&device.id eisa 0x6314
-+device.name 6314
-+driver.display |50-120|30-60
-
- vendor.id IBM
-&device.id eisa 0x6315
-+device.name 6315
-
- vendor.id IBM
-&device.id eisa 0x6317
-+device.name 6317
-+driver.display |50-110|30-64
-
- vendor.id IBM
-&device.id eisa 0x6319
-+device.name 6319
-+driver.display |50-120|30-60
-
- vendor.id IBM
-&device.id eisa 0x6321
-+device.name 6321
-
- vendor.id IBM
-&device.id eisa 0x6322
-+device.name 6322
-
- vendor.id IBM
-&device.id eisa 0x6324
-+device.name 6324
-+driver.display |50-110|30-64
-
- vendor.id IBM
-&device.id eisa 0x6325
-+device.name 6325
-+driver.display |50-110|30-64
-
- vendor.id IBM
-&device.id eisa 0x6327
-+device.name 6327
-+driver.display |50-130|30-64
-
- vendor.id IBM
-&device.id eisa 0x7234
-+device.name 2122-XXL
-+driver.display |50-110|30-54
-
- vendor.id IBM
-&device.id eisa 0x7254
-+device.name 2124-XXL
-+driver.display |50-110|30-54
-
- vendor.id IBM
-&device.id eisa 0x8504
-+device.name 8504
-
- vendor.id IBM
-&device.id eisa 0x8511
-+device.name 8511
-
- vendor.id IBM
-&device.id eisa 0x8512
-+device.name 8512
-
- vendor.id IBM
-&device.id eisa 0x8513
-+device.name 8513
-
- vendor.id IBM
-&device.id eisa 0x8514
-+device.name 8514
-
- vendor.id IBM
-&device.id eisa 0x8515
-+device.name 8515
-
- vendor.id IBM
-&device.id eisa 0x8517
-+device.name 8517
-
- vendor.id IBM
-&device.id eisa 0x8518
-+device.name 8518
-
- vendor.id IBM
-&device.id eisa 0x9504
-+device.name 9504
-
- vendor.id IBM
-&device.id eisa 0x9515
-+device.name 9515
-
- vendor.id IBM
-&device.id eisa 0x9517
-+device.name 9517
-+driver.display |50-90|27-59
-
- vendor.id IBM
-&device.id eisa 0x9518
-+device.name 9518
-
- vendor.id IBM
-&device.id eisa 0x9521
-+device.name 9521
-+driver.display |50-110|30-82
-
- vendor.id IBM
-&device.id eisa 0x9524
-+device.name 9524
-+driver.display |50-110|30-64
-
- vendor.id IBM
-&device.id eisa 0x9525
-+device.name 9525
-+driver.display |50-110|30-64
-
- vendor.id IBM
-&device.id eisa 0x9527
-+device.name 9527
-+driver.display |50-110|30-82
-
- vendor.id ICL
-+vendor.name FUJITSU
-
- vendor.id ICL
-&device.id eisa 0x0100
-+device.name ICL ERGOPRO 211V
-+driver.display |50-120|24-82
-
- vendor.id ICL
-&device.id eisa 0x0200
-+device.name ICL ERGOPRO 171P
-+driver.display |50-110|30-82
-
- vendor.id ICL
-&device.id eisa 0x0400
-+device.name ICL ERGOPRO 171V
-+driver.display |50-100|30-64
-
- vendor.id ICL
-&device.id eisa 0x0700
-+device.name ICL ERGOPRO 151P
-+driver.display |48-100|30-64
-
- vendor.id ICL
-&device.id eisa 0x0800
-+device.name ICL ERGOPRO 151P AUTOBRITE
-+driver.display |48-100|30-64
-
- vendor.id ICL
-&device.id eisa 0x0a00
-+device.name ICL ERGOPRO 151V
-+driver.display |50-100|30-64
-
- vendor.id ICL
-&device.id eisa 0x0b00
-+device.name ICL ERGOPRO 141V
-
- vendor.id ICL
-&device.id eisa 0x0d00
-+device.name ICL ERGOPRO 141P
-
- vendor.id ICL
-&device.id eisa 0x0f00
-+device.name ICL ERGOPRO 152V
-+driver.display |50-100|30-64
-
- vendor.id ICL
-&device.id eisa 0x1400
-+device.name ICL ERGOPRO 142V
-
- vendor.id ICL
-&device.id eisa 0x1600
-+device.name ICL ERGOPRO E153
-+driver.display |50-100|30-66
-
- vendor.id ICL
-&device.id eisa 0x1900
-+device.name ICL ERGOPRO X173
-+driver.display |48-100|31-85
-
- vendor.id ICL
-&device.id eisa 0x1a00
-+device.name ICL ERGOPRO X173A
-+driver.display |48-100|31-85
-
- vendor.id ICL
-&device.id eisa 0x1c00
-+device.name ICL ERGOPRO X152
-+driver.display |50-100|30-65
-
- vendor.id ICL
-&device.id eisa 0x1d00
-+device.name ICL ERGOPRO E173
-+driver.display |50-120|30-65
-
- vendor.id ICL
-&device.id eisa 0x2100
-+device.name ERGOPRO X153
-+driver.display |50-160|30-69
-
- vendor.id ICL
-&device.id eisa 0x2200
-+device.name ERGOPRO E154
-+driver.display |50-100|30-54
-
- vendor.id ICL
-&device.id eisa 0x2300
-+device.name ERGOPRO E174
-+driver.display |50-160|30-69
-
- vendor.id ICL
-&device.id eisa 0x2400
-+device.name ERGOPRO X174
-+driver.display |50-150|30-92
-
- vendor.id ICL
-&device.id eisa 0x2500
-+device.name E175
-+driver.display |50-120|30-85
-
- vendor.id ICL
-&device.id eisa 0x2700
-+device.name E213
-+driver.display |50-150|30-107
-
- vendor.id ICL
-&device.id eisa 0x2800
-+device.name X191
-+driver.display |50-160|30-96
-
- vendor.id ICL
-&device.id eisa 0x2900
-+device.name X154
-+driver.display |50-120|30-70
-
- vendor.id ICL
-&device.id eisa 0x2a00
-+device.name E176
-+driver.display |50-120|30-70
-
- vendor.id IVM
-+vendor.name IIYAMA
-
- vendor.id IVM
-&device.id eisa 0x1501
-+device.name VISION MASTER
-+driver.display |50-160|27-69
-
- vendor.id IVM
-&device.id eisa 0x1700
-+device.name VISION MASTER (1700)
-+driver.display |50-160|27-86
-
- vendor.id IVM
-&device.id eisa 0x1701
-+device.name VISION MASTER (1701)
-+driver.display |50-160|27-86
-
- vendor.id IVM
-&device.id eisa 0x1702
-+device.name VISION MASTER 400 (2)
-+driver.display |50-160|27-96
-
- vendor.id IVM
-&device.id eisa 0x1703
-+device.name VISION MASTER 400
-+driver.display |50-160|27-96
-
- vendor.id IVM
-&device.id eisa 0x1711
-+device.name VISION MASTER PRO 400
-+driver.display |50-160|27-96
-
- vendor.id IVM
-&device.id eisa 0x1740
-+device.name VISION MASTER PRO 410
-+driver.display |50-160|27-96
-
- vendor.id IVM
-&device.id eisa 0x17a8
-+device.name S700JT1
-+driver.display |50-100|27-90
-
- vendor.id IVM
-&device.id eisa 0x1900
-+device.name VISION MASTER 450
-+driver.display |50-160|27-102
-
- vendor.id IVM
-&device.id eisa 0x1901
-+device.name VISION MASTER PRO 450
-+driver.display 1600x1200|50-160|25-115|230
-
- vendor.id IVM
-&device.id eisa 0x1918
-+device.name VISION MASTER PRO 451
-+driver.display |50-160|27-110
-
- vendor.id IVM
-&device.id eisa 0x2110
-+device.name VISION MASTER 501
-+driver.display |50-160|27-96
-
- vendor.id IVM
-&device.id eisa 0x2118
-+device.name VISION MASTER PRO 501
-+driver.display |50-160|27-96
-
- vendor.id IVM
-&device.id eisa 0x2120
-+device.name VISION MASTER 502
-+driver.display |50-160|27-110
-
- vendor.id IVM
-&device.id eisa 0x2128
-+device.name VISION MASTER PRO 502
-+driver.display |50-160|27-110
-
- vendor.id IVM
-&device.id eisa 0x2130
-+device.name VISION MASTER PRO
-+driver.display |50-160|24-94
-
- vendor.id IVM
-&device.id eisa 0x3601
-+device.name PROLITE36 (3601)
-
- vendor.id IVM
-&device.id eisa 0x3602
-+device.name PROLITE36
-
- vendor.id IVM
-&device.id eisa 0x3801
-+device.name PROLITE38
-
- vendor.id IVM
-&device.id eisa 0x3808
-+device.name PROLITE38C
-
- vendor.id IVM
-&device.id eisa 0x3900
-+device.name PROLITE39
-
- vendor.id IVM
-&device.id eisa 0x4600
-+device.name PROLITE46
-
- vendor.id KDS
-+vendor.name KOREA
-
- vendor.id KDS
-&device.id eisa 0x05ac
-+device.name DATA SYSTEMS VISUAL SENSATION VS-4(KD-1452)
-+driver.display |40-120|28-50
-
- vendor.id KDS
-&device.id eisa 0x05af
-+device.name DATA SYSTEMS VISUAL SENSATION VS-4D
-+driver.display |40-120|28-55
-
- vendor.id KDS
-&device.id eisa 0x05e6
-+device.name DATA SYSTEMS VISUAL SENSATION VS-5/VS-51/VSX-5
-+driver.display |50-120|30-70
-
- vendor.id KDS
-&device.id eisa 0x05f5
-+device.name DATA SYSTEMS VISUAL SENSATION VS-55
-+driver.display |40-120|28-55
-
- vendor.id KDS
-&device.id eisa 0x06c2
-+device.name DATA SYSTEMS VISUAL SENSATION VS-7/VSX-7
-+driver.display |50-120|30-70
-
- vendor.id KDS
-&device.id eisa 0x06d6
-+device.name DATA SYSTEMS VISUAL SENSATION VS-9
-+driver.display |50-120|31-95
-
- vendor.id KDS
-&device.id eisa 0x07d0
-+device.name DATA SYSTEMS VISUAL SENSATION VS-19
-+driver.display |50-120|31-95
-
- vendor.id KDS
-&device.id eisa 0x0834
-+device.name DATA SYSTEMS VISUAL SENSATION VS-21
-+driver.display |50-160|30-117
-
- vendor.id KDS
-&device.id eisa 0x1540
-+device.name DATA SYSTEMS AVITRON AV-5T
-+driver.display |50-120|30-70
-
- vendor.id KDS
-&device.id eisa 0x1740
-+device.name DATA SYSTEMS AVITRON AV-7T
-+driver.display |50-120|30-70
-
- vendor.id KDS
-&device.id eisa 0x1980
-+device.name DATA SYSTEMS VISUAL SENSATION VS-195
-+driver.display |50-120|30-95
-
- vendor.id KDS
-&device.id eisa 0x1981
-+device.name DATA SYSTEMS VISUAL SENSATION VS-19SN
-+driver.display |50-120|30-95
-
- vendor.id LKM
-+vendor.name AZALEA
-
- vendor.id LNK
-+vendor.name LINK Technologies, Inc.
-
- vendor.id MAG
-+vendor.name MAGIC
-
- vendor.id MAG
-&device.id eisa 0x4577
-+device.name D410
-+driver.display |50-100|30-54
-
- vendor.id MAG
-&device.id eisa 0x5620
-+device.name DX-1595
-+driver.display |50-120|30-64
-
- vendor.id MAG
-&device.id eisa 0x5624
-+device.name DX-15T
-+driver.display |50-120|30-64
-
- vendor.id MAG
-&device.id eisa 0x5626
-+device.name DX1795
-
- vendor.id MAG
-&device.id eisa 0x5775
-+device.name DJ530
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x5776
-+device.name XJ530
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x5779
-+device.name XJ500T
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x5781
-+device.name DX500T
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x5801
-+device.name XJ500
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x7626
-+device.name DX-1795
-+driver.display |50-120|30-64
-
- vendor.id MAG
-&device.id eisa 0x7740
-+device.name DX-700T
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x7752
-+device.name DJ707
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x7771
-+device.name XJ700
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x7772
-+device.name XJ707
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x7780
-+device.name XJ700T
-+driver.display |50-120|30-70
-
- vendor.id MAG
-&device.id eisa 0x7842
-+device.name DX715T
-+driver.display |50-120|30-86
-
- vendor.id MAG
-&device.id eisa 0x7854
-+device.name DJ717
-+driver.display |50-160|30-86
-
- vendor.id MAG
-&device.id eisa 0x7874
-+device.name XJ717
-+driver.display |50-160|30-86
-
- vendor.id MAG
-&device.id eisa 0x8997
-+device.name XJ810
-+driver.display |50-160|30-95
-
- vendor.id MAX
-+vendor.name BELINEA
-
- vendor.id MAX
-&device.id eisa 0x0582
-+device.name 101410
-+driver.display |50-77|24-61
-
- vendor.id MAX
-&device.id eisa 0x05e6
-+device.name 101510
-+driver.display |50-77|30-61
-
- vendor.id MAX
-&device.id eisa 0x05f0
-+device.name 101520
-
- vendor.id MAX
-&device.id eisa 0x05fa
-+device.name 101530
-+driver.display |50-85|30-70
-
- vendor.id MAX
-&device.id eisa 0x060e
-+device.name 101550
-+driver.display |50-85|30-70
-
- vendor.id MAX
-&device.id eisa 0x0712
-+device.name 101810
-+driver.display |50-85|31-80
-
- vendor.id MAX
-&device.id eisa 0x07e4
-+device.name 102020
-+driver.display 1152x864|50-120|30-70|86
-
- vendor.id MAX
-&device.id eisa 0x07ee
-+device.name 102030
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x07fa
-+device.name 102010
-+driver.display |50-120|30-54
-
- vendor.id MAX
-&device.id eisa 0x0bc2
-+device.name 103010
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x0bc7
-+device.name 103015
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x0bcc
-+device.name 103020
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x0bd6
-+device.name 103030
-+driver.display |50-150|30-70
-
- vendor.id MAX
-&device.id eisa 0x0be0
-+device.name 103040
-+driver.display |50-150|30-86
-
- vendor.id MAX
-&device.id eisa 0x0bea
-+device.name 103050
-+driver.display 1280x1024|50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x0bf4
-+device.name 103060
-+driver.display |50-150|30-95
-
- vendor.id MAX
-&device.id eisa 0x0bfe
-+device.name 103070
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x0faa
-+device.name 104010
-+driver.display |50-120|30-54
-
- vendor.id MAX
-&device.id eisa 0x0fc8
-+device.name 104040
-+driver.display |50-90|30-38
-
- vendor.id MAX
-&device.id eisa 0x0fe1
-+device.name 104065
-+driver.display |50-120|30-50
-
- vendor.id MAX
-&device.id eisa 0x13a6
-+device.name 105030
-+driver.display |50-100|30-64
-
- vendor.id MAX
-&device.id eisa 0x13ab
-+device.name 105035
-+driver.display 1024x768|50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x13b5
-+device.name 105045
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x13b6
-+device.name 105046
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x13ba
-+device.name 105050
-+driver.display |50-100|30-64
-
- vendor.id MAX
-&device.id eisa 0x13d3
-+device.name 105075
-+driver.display |50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x13d4
-+device.name 105076
-+driver.display |50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x13d8
-+device.name 105080
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x15ae
-+device.name 105550
-+driver.display |50-120|24-69
-
- vendor.id MAX
-&device.id eisa 0x15c2
-+device.name 105570
-+driver.display |50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x15c7
-+device.name 105575
-+driver.display |50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x15c8
-+device.name 105576
-+driver.display |50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x15d2
-+device.name 105586
-+driver.display |50-120|30-69
-
- vendor.id MAX
-&device.id eisa 0x15d6
-+device.name 105590
-+driver.display |50-120|30-85
-
- vendor.id MAX
-&device.id eisa 0x15db
-+device.name 105595
-+driver.display |50-120|30-85
-
- vendor.id MAX
-&device.id eisa 0x15dc
-+device.name 105596
-+driver.display |50-120|30-85
-
- vendor.id MAX
-&device.id eisa 0x1784
-+device.name 106020
-+driver.display |50-150|30-95
-
- vendor.id MAX
-&device.id eisa 0x17a2
-+device.name 106050
-+driver.display |50-120|30-85
-
- vendor.id MAX
-&device.id eisa 0x17ac
-+device.name 106060
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x17b6
-+device.name 106070
-+driver.display |50-180|30-95
-
- vendor.id MAX
-&device.id eisa 0x17ca
-+device.name 106090
-+driver.display |50-150|30-95
-
- vendor.id MAX
-&device.id eisa 0x1b62
-+device.name 107010
-+driver.display |50-160|30-69
-
- vendor.id MAX
-&device.id eisa 0x1b67
-+device.name 107015
-+driver.display |50-160|30-70
-
- vendor.id MAX
-&device.id eisa 0x1b6c
-+device.name 107020
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x1b71
-+device.name 107025
-+driver.display |50-180|30-70
-
- vendor.id MAX
-&device.id eisa 0x1b76
-+device.name 107030
-+driver.display |50-160|30-86
-
- vendor.id MAX
-&device.id eisa 0x1b7b
-+device.name 107035
-+driver.display |50-180|30-95
-
- vendor.id MAX
-&device.id eisa 0x1b80
-+device.name 107040
-+driver.display |50-120|30-85
-
- vendor.id MAX
-&device.id eisa 0x1b8a
-+device.name 107050
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x1b94
-+device.name 107060
-+driver.display |50-120|30-70
-
- vendor.id MAX
-&device.id eisa 0x1b99
-+device.name 107065
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x1f4a
-+device.name 108010
-+driver.display |50-160|30-115
-
- vendor.id MAX
-&device.id eisa 0x1f4f
-+device.name 108015
-+driver.display |50-160|30-115
-
- vendor.id MAX
-&device.id eisa 0x1f54
-+device.name 108020
-+driver.display |50-160|30-107
-
- vendor.id MAX
-&device.id eisa 0x1f72
-+device.name 108050
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x1f7c
-+device.name 108060
-+driver.display |50-160|30-115
-
- vendor.id MAX
-&device.id eisa 0x1f9a
-+device.name 108090
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x1f9f
-+device.name 108095
-+driver.display |50-160|30-95
-
- vendor.id MAX
-&device.id eisa 0x3430
-+device.name 105540
-+driver.display |50-90|30-64
-
- vendor.id MAX
-&device.id eisa 0x3539
-+device.name 105095
-+driver.display |55-90|30-64
-
- vendor.id MAX
-&device.id eisa 0x4065
-+device.name 10 40 65
-+driver.display |50-120|30-50
-
- vendor.id MAX
-&device.id eisa 0x5620
-+device.name 105065
-+driver.display |50-100|30-64
-
- vendor.id MAX
-&device.id eisa 0x5624
-+device.name 105066
-+driver.display |50-120|30-64
-
- vendor.id MAX
-&device.id eisa 0x7555
-+device.name 10 55 75
-+driver.display |50-120|30-69
-
- vendor.id MEI
-+vendor.name PANASONIC
-
- vendor.id MEI
-&device.id eisa 0x0c81
-+device.name P70
-+driver.display |50-180|30-95
-
- vendor.id MEI
-&device.id eisa 0x0c96
-+device.name SL70I(TX-D7S36)
-+driver.display |50-180|30-70
-
- vendor.id MEI
-&device.id eisa 0x0c9b
-+device.name PL70I(TX-D7S55)
-+driver.display |50-180|30-97
-
- vendor.id MEI
-&device.id eisa 0x1007
-+device.name PF70
-+driver.display |50-160|30-86
-
- vendor.id MEI
-&device.id eisa 0x120d
-+device.name SL90 (TX-D9S54)
-+driver.display |50-180|30-95
-
- vendor.id MEI
-&device.id eisa 0x1604
-+device.name TX-D2151W-ES
-+driver.display |50-160|30-82
-
- vendor.id MEI
-&device.id eisa 0x1610
-+device.name TX-D2151NM
-+driver.display |50-160|30-82
-
- vendor.id MEI
-&device.id eisa 0x1649
-+device.name S110
-+driver.display |50-180|30-95
-
- vendor.id MEI
-&device.id eisa 0x1e02
-+device.name LC40
-+driver.display |50-77|24-61
-
- vendor.id MEI
-&device.id eisa 0x1e07
-+device.name LC50S (TX-D5L31F)
-+driver.display |50-77|30-61
-
- vendor.id MEI
-&device.id eisa 0x2622
-+device.name S15
-+driver.display |50-120|30-67
-
- vendor.id MEI
-&device.id eisa 0x2632
-+device.name P50
-+driver.display |50-180|30-69
-
- vendor.id MEI
-&device.id eisa 0x2637
-+device.name E50
-+driver.display |50-120|30-61
-
- vendor.id MEL
-+vendor.name MITSUBISHI
-
- vendor.id MEL
-&device.id eisa 0x0040
-+device.name DIAMOND PRO 21TX (THN9105)
-+driver.display |50-152|30-93
-
- vendor.id MEL
-&device.id eisa 0x1040
-+device.name RD21G
-+driver.display |50-152|30-93
-
- vendor.id MEL
-&device.id eisa 0x2040
-+device.name DIAMOND PRO 20X (FR8905)
-+driver.display |50-120|30-82
-
- vendor.id MEL
-&device.id eisa 0x4040
-+device.name DIAMOND PRO 17TX (TFG8705)
-+driver.display |50-152|30-86
-
- vendor.id MEL
-&device.id eisa 0x4064
-+device.name DIAMOND PRO 67TXV (TFV6705)
-+driver.display |50-130|30-69
-
- vendor.id MEL
-&device.id eisa 0x4065
-+device.name RD17GR
-+driver.display |55-125|30-69
-
- vendor.id MEL
-&device.id eisa 0x408f
-+device.name DIAMOND SCAN 15VX (SD58XX)
-+driver.display |50-100|30-65
-
- vendor.id MEL
-&device.id eisa 0x409f
-+device.name RD15M
-+driver.display |50-100|30-65
-
- vendor.id MEL
-&device.id eisa 0x40c0
-+device.name DIAMOND PRO 87TXM (TFM8705)
-+driver.display |50-130|30-86
-
- vendor.id MEL
-&device.id eisa 0x40e0
-+device.name DIAMOND PRO 91TXM (TFW9105)
-+driver.display |50-130|30-95
-
- vendor.id MEL
-&device.id eisa 0x40e1
-+device.name DIAMOND PLUS 100 (TFW1105)
-+driver.display |50-152|30-108
-
- vendor.id MEL
-&device.id eisa 0x40f0
-+device.name RD21GII
-+driver.display |50-152|30-95
-
- vendor.id MEL
-&device.id eisa 0x40f1
-+device.name RD21GX
-+driver.display |50-132|30-86
-
- vendor.id MEL
-&device.id eisa 0x4100
-+device.name DIAMOND PRO 1000 (TFX1105)
-+driver.display |50-152|30-115
-
- vendor.id MEL
-&device.id eisa 0x4101
-+device.name DIAMOND PRO 1010 (TUX1107)
-+driver.display |50-152|30-115
-
- vendor.id MEL
-&device.id eisa 0x4120
-+device.name SPECTRAVIEW 1000
-+driver.display |50-130|30-95
-
- vendor.id MEL
-&device.id eisa 0x4140
-+device.name RD21GIII
-+driver.display |50-152|30-115
-
- vendor.id MEL
-&device.id eisa 0x4141
-+device.name RD21GH
-+driver.display |50-152|30-115
-
- vendor.id MEL
-&device.id eisa 0x4150
-+device.name RD17GZ
-+driver.display |50-130|30-86
-
- vendor.id MEL
-&device.id eisa 0x4160
-+device.name DIAMOND PLUS 72 (TFV-8705)
-+driver.display |50-130|30-86
-
- vendor.id MEL
-&device.id eisa 0x4190
-+device.name DIAMOND PLUS 70 (TF-7700P)
-+driver.display |50-180|30-70
-
- vendor.id MEL
-&device.id eisa 0x41b0
-+device.name RDT151
-
- vendor.id MEL
-&device.id eisa 0x41b3
-+device.name TFT MONITOR RDT150S
-
- vendor.id MEL
-&device.id eisa 0x41f0
-+device.name DIAMOND SCAN 50 (SD5904)
-+driver.display |50-100|30-70
-
- vendor.id MEL
-&device.id eisa 0x4210
-+device.name DIAMOND SCAN 70 (SD7704)
-+driver.display |50-100|30-70
-
- vendor.id MEL
-&device.id eisa 0x42d0
-+device.name TFT MONITOR RDT180S
-
- vendor.id MEL
-&device.id eisa 0x5040
-+device.name RD17GII
-+driver.display |50-152|24-86
-
- vendor.id MEL
-&device.id eisa 0x6040
-+device.name RD17F
-+driver.display |50-130|30-82
-
- vendor.id MEL
-&device.id eisa 0x6140
-+device.name DIAMOND SCAN 17HX (FFF8705)
-+driver.display |50-130|30-82
-
- vendor.id MEL
-&device.id eisa 0x8040
-+device.name DIAMOND SCAN 15HX (SD57XXC)
-
- vendor.id MEL
-&device.id eisa 0x9040
-+device.name RD15G
-+driver.display |50-120|30-65
-
- vendor.id MIR
-+vendor.name MIRO
-
- vendor.id MIR
-&device.id eisa 0x0721
-+device.name PROOFSCREEN MIROC21107
-
- vendor.id MIR
-&device.id eisa 0x6815
-+device.name miroD1568
-
- vendor.id MIR
-&device.id eisa 0x6817
-+device.name PROOFSCREEN MIROC1768
-+driver.display |50-100|29-68
-
- vendor.id MIR
-&device.id eisa 0x6917
-+device.name miroD1769
-
- vendor.id MIR
-&device.id eisa 0x8217
-+device.name PROOFSCREEN MIROC1782
-+driver.display |50-120|29-82
-
- vendor.id MIR
-&device.id eisa 0x8520
-+device.name PROOFSCREEN MIROC2085 E
-+driver.display |50-160|29-85
-
- vendor.id MIR
-&device.id eisa 0x8521
-+device.name PROOFSCREEN MIROC2185
-+driver.display |50-152|30-85
-
- vendor.id MIR
-&device.id eisa 0x9321
-+device.name PROOFSCREEN MIROC2193
-+driver.display |50-150|30-93
-
- vendor.id MIR
-&device.id eisa 0xa785
-+device.name A1785F
-+driver.display |50-100|30-85
-
- vendor.id MTC
-+vendor.name MITAC
-
- vendor.id MTC
-&device.id eisa 0x0001
-+device.name 1450FV
-+driver.display |50-90|31-50
-
- vendor.id MTC
-&device.id eisa 0x0002
-+device.name 1564FD/1564FS
-+driver.display |50-100|30-66
-
- vendor.id MTC
-&device.id eisa 0x0003
-+device.name 1450FD
-+driver.display |50-90|31-50
-
- vendor.id NAN
-+vendor.name NANAO
-
- vendor.id NAN
-&device.id eisa 0x0000
-+device.name USA FLEXSCAN T2-20
-+driver.display |55-160|30-85
-
- vendor.id NAN
-&device.id eisa 0x0400
-+device.name USA F2-15
-
- vendor.id NAN
-&device.id eisa 0x0401
-+device.name USA F2-17
-
- vendor.id NAN
-&device.id eisa 0x0402
-+device.name USA F2-17EX
-
- vendor.id NAN
-&device.id eisa 0x0403
-+device.name USA F2-21
-
- vendor.id NAN
-&device.id eisa 0x0404
-+device.name USA FX2-21
-
- vendor.id NAN
-&device.id eisa 0x0405
-+device.name USA FLEXSCAN T2-17TS
-
- vendor.id NAN
-&device.id eisa 0x0406
-+device.name FLEXSCAN 6600
-+driver.display |70-90|56-110
-
- vendor.id NAN
-&device.id eisa 0x0502
-+device.name NANAO 9060S
-
- vendor.id NAN
-&device.id eisa 0x0503
-+device.name 9065S
-+driver.display |50-90|30-50
-
- vendor.id NAN
-&device.id eisa 0x0506
-+device.name NANAO 9070U
-
- vendor.id NAN
-&device.id eisa 0x0507
-+device.name NANAO 9080i
-
- vendor.id NAN
-&device.id eisa 0x0508
-+device.name 9400I
-+driver.display |55-90|30-65
-
- vendor.id NAN
-&device.id eisa 0x0509
-+device.name 9500
-+driver.display |55-90|30-78
-
- vendor.id NAN
-&device.id eisa 0x050a
-+device.name FLEXSCAN F340IW
-
- vendor.id NAN
-&device.id eisa 0x050b
-+device.name NANAO FlexScan F550i
-
- vendor.id NAN
-&device.id eisa 0x050c
-+device.name FLEXSCAN F550IW
-+driver.display |55-90|30-65
-
- vendor.id NAN
-&device.id eisa 0x050d
-+device.name FLEXSCAN F560IW
-+driver.display |55-90|30-82
-
- vendor.id NAN
-&device.id eisa 0x050e
-+device.name FLEXSCAN F750I
-+driver.display |55-90|30-80
-
- vendor.id NAN
-&device.id eisa 0x050f
-+device.name FLEXSCAN F760IW
-+driver.display |55-90|30-78
-
- vendor.id NAN
-&device.id eisa 0x0510
-+device.name FLEXSCAN F780IW
-+driver.display |55-120|45-100
-
- vendor.id NAN
-&device.id eisa 0x0511
-+device.name FLEXSCAN T560I
-+driver.display |55-90|30-82
-
- vendor.id NAN
-&device.id eisa 0x0512
-+device.name FLEXSCAN T660I
-+driver.display |55-90|30-78
-
- vendor.id NAN
-&device.id eisa 0x0513
-+device.name USA FLEXSCAN T2-17
-+driver.display |55-160|30-85
-
- vendor.id NAN
-&device.id eisa 0x0514
-+device.name NANAO USA FlexScan T2-20
-
- vendor.id NAN
-&device.id eisa 0x0580
-+device.name USA FLEXSCAN 6300
-+driver.display |55-90|56-80
-
- vendor.id NAN
-&device.id eisa 0x0800
-+device.name FLEXSCAN 33F
-
- vendor.id NAN
-&device.id eisa 0x0802
-+device.name FLEXSCAN 88F
-
- vendor.id NAN
-&device.id eisa 0x0805
-+device.name FLEXSCAN 54T
-
- vendor.id NAN
-&device.id eisa 0x0882
-+device.name FLEXSCAN 52F
-
- vendor.id NAN
-&device.id eisa 0x0900
-+device.name FLEXSCAN 6500
-+driver.display |55-90|56-80
-
- vendor.id NAN
-&device.id eisa 0x0902
-+device.name 9060S
-
- vendor.id NAN
-&device.id eisa 0x0906
-+device.name 9070U
-+driver.display |50-90|20-50
-
- vendor.id NAN
-&device.id eisa 0x0907
-+device.name 9080I
-+driver.display |55-90|30-64
-
- vendor.id NAN
-&device.id eisa 0x090a
-+device.name FLEXSCAN F347
-
- vendor.id NAN
-&device.id eisa 0x090b
-+device.name FLEXSCAN F550I
-+driver.display |55-90|30-65
-
- vendor.id NAN
-&device.id eisa 0x090c
-+device.name FLEXSCAN F557
-
- vendor.id NAN
-&device.id eisa 0x090f
-+device.name FLEXSCAN 77F
-
- vendor.id NAN
-&device.id eisa 0x0910
-+device.name FLEXSCAN F780IJ
-+driver.display |55-120|45-100
-
- vendor.id NAN
-&device.id eisa 0x0911
-+device.name FLEXSCAN T560IJ
-+driver.display |55-90|30-82
-
- vendor.id NAN
-&device.id eisa 0x0912
-+device.name FLEXSCAN T660IJ
-+driver.display |55-90|30-82
-
- vendor.id NAN
-&device.id eisa 0x0913
-+device.name FLEXSCAN 56T
-+driver.display |55-160|30-85
-
- vendor.id NAN
-&device.id eisa 0x0914
-+device.name FLEXSCAN 68T
-+driver.display |55-160|30-85
-
- vendor.id NAN
-&device.id eisa 0x098a
-+device.name FLEXSCAN F347II
-
- vendor.id NAN
-&device.id eisa 0x098c
-+device.name FLEXSCAN 55F
-
- vendor.id NAN
-&device.id eisa 0x098f
-+device.name FLEXSCAN 76F
-+driver.display |55-90|30-78
-
- vendor.id NAN
-&device.id eisa 0x0991
-+device.name FLEXSCAN T567
-+driver.display |55-90|30-82
-
- vendor.id NAN
-&device.id eisa 0x0993
-+device.name FLEXSCAN 53T
-+driver.display |55-160|30-85
-
- vendor.id NAN
-&device.id eisa 0x1212
-+device.name FLEXSCAN E151L
-+driver.display |50-85|24-61
-
- vendor.id NAN
-&device.id eisa 0x1218
-+device.name FLEXSCAN E76F
-+driver.display |50-160|30-110
-
- vendor.id NAN
-&device.id eisa 0x1220
-+device.name FLEXSCAN E54F
-+driver.display |50-160|30-96
-
- vendor.id NEC
-+vendor.name NEC
-
- vendor.id NEC
-&device.id eisa 0x000a
-+device.name INTEGRIERTER PC-9821XC13/S5
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x0014
-+device.name D171
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x001e
-+device.name NEC INTEGRIERTER PC-9821CT16
-+driver.display |50-70|27-59
-
- vendor.id NEC
-&device.id eisa 0x0032
-+device.name D17A1
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x0046
-+device.name D17C2
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x0050
-+device.name D15A1
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x005a
-+device.name D17B1
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x006e
-+device.name DV15A1
-+driver.display |60-75|30-63
-
- vendor.id NEC
-&device.id eisa 0x0078
-+device.name DV17A1
-+driver.display |60-75|30-67
-
- vendor.id NEC
-&device.id eisa 0x0082
-+device.name DV17B1
-+driver.display |60-75|30-67
-
- vendor.id NEC
-&device.id eisa 0x008c
-+device.name DV17C1
-+driver.display |60-75|30-67
-
- vendor.id NEC
-&device.id eisa 0x0096
-+device.name DV17C2
-+driver.display |60-75|30-83
-
- vendor.id NEC
-&device.id eisa 0x00a0
-+device.name F14T1
-+driver.display |60-75|24-63
-
- vendor.id NEC
-&device.id eisa 0x00aa
-+device.name DV15D1
-+driver.display |60-75|30-63
-
- vendor.id NEC
-&device.id eisa 0x00c8
-+device.name PK-DH172
-+driver.display |60-85|30-63
-
- vendor.id NEC
-&device.id eisa 0x00dc
-+device.name F14T2H
-+driver.display |59-76|31-61
-
- vendor.id NEC
-&device.id eisa 0x00e6
-+device.name F14T2L
-+driver.display |59-76|31-61
-
- vendor.id NEC
-&device.id eisa 0x0190
-+device.name D172
-+driver.display |50-63|27-59
-
- vendor.id NEC
-&device.id eisa 0x019a
-+device.name DV15A2
-+driver.display |59-86|30-71
-
- vendor.id NEC
-&device.id eisa 0x01a4
-+device.name DV17C3
-+driver.display |59-86|30-71
-
- vendor.id NEC
-&device.id eisa 0x01ae
-+device.name DV17B2
-+driver.display |59-86|30-71
-
- vendor.id NEC
-&device.id eisa 0x0320
-+device.name MULTISYNC LT80
-+driver.display |50-85|15-60
-
- vendor.id NEC
-&device.id eisa 0x0afa
-+device.name DH28W2
-+driver.display |60-75|30-38
-
- vendor.id NEC
-&device.id eisa 0x0c8a
-+device.name DH32W2
-+driver.display |60-75|30-38
-
- vendor.id NEC
-&device.id eisa 0x1d4d
-+device.name MULTISYNC 50
-+driver.display |55-120|31-69
-
- vendor.id NEC
-&device.id eisa 0x1e15
-+device.name MULTISYNC 70
-+driver.display |55-120|31-69
-
- vendor.id NEC
-&device.id eisa 0x1fa4
-+device.name MULTISYNC MT810
-+driver.display |50-85|15-60
-
- vendor.id NEC
-&device.id eisa 0x2710
-+device.name MULTISYNC MT1000
-+driver.display |50-85|15-80
-
- vendor.id NEC
-&device.id eisa 0x2fb2
-+device.name LCD200
-+driver.display |53-85|24-62
-
- vendor.id NEC
-&device.id eisa 0x3782
-+device.name MULTISYNC LCD400
-+driver.display |55-86|24-60
-
- vendor.id NEC
-&device.id eisa 0x378c
-+device.name MULTISYNC LCD400V
-+driver.display |55-86|24-60
-
- vendor.id NEC
-&device.id eisa 0x37fa
-+device.name NEC MultiSync XV14
-
- vendor.id NEC
-&device.id eisa 0x37fb
-+device.name MULTISYNC XV14
-+driver.display |55-100|30-57
-
- vendor.id NEC
-&device.id eisa 0x3a66
-+device.name MULTISYNC C400
-+driver.display |47-120|30-64
-
- vendor.id NEC
-&device.id eisa 0x3c00
-+device.name NEC MultiSync XE15
-
- vendor.id NEC
-&device.id eisa 0x3c0a
-+device.name MULTISYNC XP15
-+driver.display |55-160|31-65
-
- vendor.id NEC
-&device.id eisa 0x3c14
-+device.name MULTISYNC XV15
-+driver.display |55-100|31-65
-
- vendor.id NEC
-&device.id eisa 0x3c1e
-+device.name MULTISYNC XE15
-+driver.display |55-120|31-65
-
- vendor.id NEC
-&device.id eisa 0x3d5e
-+device.name MULTISYNC XV15+
-+driver.display |55-100|31-65
-
- vendor.id NEC
-&device.id eisa 0x3d68
-+device.name MULTISYNC M500
-+driver.display |55-120|30-69
-
- vendor.id NEC
-&device.id eisa 0x3d7c
-+device.name MULTISYNC V500
-+driver.display |55-100|31-65
-
- vendor.id NEC
-&device.id eisa 0x3d86
-+device.name MULTISYNC E500
-+driver.display |55-120|31-69
-
- vendor.id NEC
-&device.id eisa 0x3d90
-+device.name MULTISYNC A500
-+driver.display |55-120|31-65
-
- vendor.id NEC
-&device.id eisa 0x3e4e
-+device.name MULTISYNC C500
-+driver.display |47-120|30-64
-
- vendor.id NEC
-&device.id eisa 0x3e53
-+device.name CS500-MULTIMEDIAMONITOR
-+driver.display |50-120|30-64
-
- vendor.id NEC
-&device.id eisa 0x43a8
-+device.name NEC MultiSync XE17
-
- vendor.id NEC
-&device.id eisa 0x43b2
-+device.name MULTISYNC XE17
-+driver.display |55-120|31-65
-
- vendor.id NEC
-&device.id eisa 0x43bc
-+device.name MULTISYNC XV17
-+driver.display |55-100|31-65
-
- vendor.id NEC
-&device.id eisa 0x43c6
-+device.name MULTISYNC M700
-+driver.display |55-120|30-69
-
- vendor.id NEC
-&device.id eisa 0x43d0
-+device.name MULTISYNC A700
-+driver.display |55-120|31-65
-
- vendor.id NEC
-&device.id eisa 0x4416
-+device.name MULTISYNC XP17
-+driver.display |55-160|31-82
-
- vendor.id NEC
-&device.id eisa 0x4420
-+device.name MULTISYNC P750
-+driver.display |55-160|31-94
-
- vendor.id NEC
-&device.id eisa 0x442a
-+device.name MULTISYNC XV17+ (-2)
-+driver.display |55-100|31-82
-
- vendor.id NEC
-&device.id eisa 0x4434
-+device.name MULTISYNC E700
-+driver.display |55-120|31-82
-
- vendor.id NEC
-&device.id eisa 0x4bd2
-+device.name MULTISYNC E900
-+driver.display |55-120|31-92
-
- vendor.id NEC
-&device.id eisa 0x4bdc
-+device.name MULTISYNC E900+
-+driver.display |55-160|31-96
-
- vendor.id NEC
-&device.id eisa 0x4be6
-+device.name MULTISYNC A900
-+driver.display |55-160|31-92
-
- vendor.id NEC
-&device.id eisa 0x4bf0
-+device.name MULTISYNC 90
-+driver.display |55-160|31-92
-
- vendor.id NEC
-&device.id eisa 0x4f56
-+device.name MULTISYNC LCD2000
-+driver.display |55-85|24-81
-
- vendor.id NEC
-&device.id eisa 0x4f60
-+device.name MULTISYNC LCD2010
-+driver.display |55-85|24-81
-
- vendor.id NEC
-&device.id eisa 0x533e
-+device.name MULTISYNC XE21
-+driver.display |55-120|31-69
-
- vendor.id NEC
-&device.id eisa 0x53b6
-+device.name MULTISYNC XP21
-+driver.display |55-160|31-89
-
- vendor.id NEC
-&device.id eisa 0x53c0
-+device.name MULTISYNC E1100
-+driver.display |55-120|31-82
-
- vendor.id NEC
-&device.id eisa 0x53ca
-+device.name MULTISYNC P1150
-+driver.display |55-160|31-94
-
- vendor.id NEC
-&device.id eisa 0x53de
-+device.name MULTISYNC E1100+
-+driver.display |55-160|31-96
-
- vendor.id NEC
-&device.id eisa 0x53e8
-+device.name MULTISYNC P1250+
-+driver.display |55-160|31-110
-
- vendor.id NEC
-&device.id eisa 0xea69
-+device.name C900
-+driver.display |50-150|30-95
-
- vendor.id NEC
-&device.id eisa 0xea8b
-+device.name VISTASCAN 7000
-+driver.display |50-120|30-69
-
- vendor.id NOK
-+vendor.name NOKIA
-
- vendor.id NOK
-&device.id eisa 0x008d
-+device.name NOKIA 449M
-
- vendor.id NOK
-&device.id eisa 0x0098
-+device.name NOKIA 449X
-
- vendor.id NOK
-&device.id eisa 0x00a3
-+device.name NOKIA 447KC
-
- vendor.id NOK
-&device.id eisa 0x00a9
-+device.name 447XI
-+driver.display |45-150|31-92
-
- vendor.id NOK
-&device.id eisa 0x00ab
-+device.name NOKIA 447KA
-
- vendor.id NOK
-&device.id eisa 0x00ad
-+device.name 447M
-+driver.display |55-110|31-64
-
- vendor.id NOK
-&device.id eisa 0x00b7
-+device.name 447W
-+driver.display |48-100|31-85
-
- vendor.id NOK
-&device.id eisa 0x00b8
-+device.name NOKIA 447X
-
- vendor.id NOK
-&device.id eisa 0x00bb
-+device.name NOKIA 447XAV
-
- vendor.id NOK
-&device.id eisa 0x00bc
-+device.name NOKIA 447K
-
- vendor.id NOK
-&device.id eisa 0x00d2
-+device.name NOKIA 445R
-
- vendor.id OQI
-+vendor.name OPTIQUEST
-
- vendor.id OQI
-&device.id eisa 0x3138
-+device.name VA656
-+driver.display |50-120|30-69
-
- vendor.id OQI
-&device.id eisa 0x3141
-+device.name OPTIQUEST 14ES
-
- vendor.id OQI
-&device.id eisa 0x3232
-+device.name 1562A-2
-
- vendor.id OQI
-&device.id eisa 0x3233
-+device.name OPTIQUEST 1769DC
-
- vendor.id OQI
-&device.id eisa 0x3234
-+device.name 1000S
-
- vendor.id OQI
-&device.id eisa 0x3332
-+device.name V655
-+driver.display |50-100|30-66
-
- vendor.id OQI
-&device.id eisa 0x3333
-+device.name V775
-+driver.display |50-130|30-82
-
- vendor.id OQI
-&device.id eisa 0x3432
-+device.name OPTIQUEST V650
-
- vendor.id OQI
-&device.id eisa 0x3832
-+device.name OPTIQUEST V665
-
- vendor.id OQI
-&device.id eisa 0x4132
-+device.name V641
-
- vendor.id OQI
-&device.id eisa 0x4136
-+device.name Q41
-+driver.display |50-90|30-48
-
- vendor.id OQI
-&device.id eisa 0x4432
-+device.name V655-2
-+driver.display |50-100|30-65
-
- vendor.id OQI
-&device.id eisa 0x4433
-+device.name Q53
-+driver.display |50-100|30-70
-
- vendor.id OQI
-&device.id eisa 0x4434
-+device.name V655-3
-+driver.display |50-100|30-70
-
- vendor.id OQI
-&device.id eisa 0x4435
-+device.name Q51
-+driver.display |50-100|30-54
-
- vendor.id OQI
-&device.id eisa 0x4436
-+device.name V55
-+driver.display |50-160|30-70
-
- vendor.id OQI
-&device.id eisa 0x4637
-+device.name 1769DC
-+driver.display |50-120|30-69
-
- vendor.id OQI
-&device.id eisa 0x4732
-+device.name V775-2
-+driver.display |50-120|30-85
-
- vendor.id OQI
-&device.id eisa 0x4733
-+device.name V773
-+driver.display |50-160|30-69
-
- vendor.id OQI
-&device.id eisa 0x4735
-+device.name Q71
-+driver.display |50-120|30-70
-
- vendor.id OQI
-&device.id eisa 0x4736
-+device.name V773-2
-+driver.display |50-180|30-70
-
- vendor.id OQI
-&device.id eisa 0x4738
-+device.name Q71-2
-+driver.display |50-120|30-70
-
- vendor.id OQI
-&device.id eisa 0x4739
-+device.name V75
-+driver.display |50-160|30-96
-
- vendor.id OQI
-&device.id eisa 0x4a31
-+device.name Q100
-+driver.display |50-120|30-86
-
- vendor.id OQI
-&device.id eisa 0x4a32
-+device.name V95
-+driver.display |50-150|30-95
-
- vendor.id OQI
-&device.id eisa 0x4d31
-+device.name V115
-+driver.display |50-160|30-95
-
- vendor.id OQI
-&device.id eisa 0x4d32
-+device.name V115T
-+driver.display |50-150|30-96
-
- vendor.id OQI
-&device.id eisa 0x5634
-+device.name V73
-+driver.display |50-160|30-70
-
- vendor.id PBN
-+vendor.name PACKARD
-
- vendor.id PBN
-&device.id eisa 0x4234
-+device.name BELL 1024S
-+driver.display |50-90|30-50
-
- vendor.id PBN
-&device.id eisa 0x4483
-+device.name BELL PLUG & PLAY 4480
-+driver.display |55-75|30-50
-
- vendor.id PBN
-&device.id eisa 0x5234
-+device.name BELL PLUG & PLAY 2024S
-+driver.display |50-90|30-54
-
- vendor.id PBN
-&device.id eisa 0x5483
-+device.name BELL PLUG & PLAY 5480
-+driver.display |50-90|30-69
-
- vendor.id PBN
-&device.id eisa 0x7483
-+device.name BELL PLUG & PLAY 7480
-+driver.display |50-90|30-69
-
- vendor.id PGS
-+vendor.name PRINCETON
-
- vendor.id PGS
-&device.id eisa 0x003b
-+device.name GRAPHIC SYSTEMS EO15
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x003c
-+device.name GRAPHIC SYSTEMS EO75
-+driver.display |50-120|30-95
-
- vendor.id PGS
-&device.id eisa 0x003d
-+device.name GRAPHIC SYSTEMS EO17
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x004d
-+device.name GRAPHIC SYSTEMS ULTRA 50
-+driver.display |50-90|30-50
-
- vendor.id PGS
-&device.id eisa 0x004e
-+device.name GRAPHIC SYSTEMS EO40
-+driver.display |50-90|30-50
-
- vendor.id PGS
-&device.id eisa 0x004f
-+device.name GRAPHIC SYSTEMS EO50
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x0050
-+device.name GRAPHIC SYSTEMS EO70
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x0051
-+device.name GRAPHIC SYSTEMS ULTRA 40
-+driver.display |50-90|30-50
-
- vendor.id PGS
-&device.id eisa 0x0052
-+device.name GRAPHIC SYSTEMS EO72
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x008b
-+device.name GRAPHIC SYSTEMS C2001
-+driver.display |50-160|30-107
-
- vendor.id PGS
-&device.id eisa 0x008e
-+device.name GRAPHIC SYSTEMS EO500
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x008f
-+device.name GRAPHIC SYSTEMS EO710
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x009d
-+device.name GRAPHIC SYSTEMS EO400
-+driver.display |50-90|30-54
-
- vendor.id PGS
-&device.id eisa 0x00b6
-+device.name GRAPHIC SYSTEMS EO700
-+driver.display |50-120|30-70
-
- vendor.id PGS
-&device.id eisa 0x00b7
-+device.name GRAPHIC SYSTEMS EO720
-+driver.display |50-120|30-70
-
- vendor.id PHL
-+vendor.name PHILIPS
-
- vendor.id PHL
-&device.id eisa 0x0107
-+device.name BRILLIANCE 107 (17 ZOLL/CM8800)
-+driver.display |50-160|30-86
-
- vendor.id PHL
-&device.id eisa 0x0200
-+device.name CM0200 (15C)
-+driver.display |50-100|31-48
-
- vendor.id PHL
-&device.id eisa 0x0201
-+device.name BRILLIANCE 201CS
-+driver.display |50-170|30-107
-
- vendor.id PHL
-&device.id eisa 0x0500
-+device.name CM0500 (20C)
-+driver.display |50-120|31-64
-
- vendor.id PHL
-&device.id eisa 0x0700
-+device.name CM0700 (20T)
-+driver.display |50-160|30-90
-
- vendor.id PHL
-&device.id eisa 0x0800
-+device.name CM0800 (15B)
-+driver.display |50-100|30-58
-
- vendor.id PHL
-&device.id eisa 0x104b
-+device.name 104B (14 ZOLL/CM1300)
-+driver.display |50-110|30-54
-
- vendor.id PHL
-&device.id eisa 0x105a
-+device.name BRILLIANCE 105 (15 ZOLL/CM2200)
-+driver.display |50-120|30-69
-
- vendor.id PHL
-&device.id eisa 0x105c
-+device.name 105S (15 ZOLL/CM1300)
-+driver.display |50-110|30-54
-
- vendor.id PHL
-&device.id eisa 0x107c
-+device.name 107S (17 ZOLL/CM6800)
-+driver.display |50-130|30-66
-
- vendor.id PHL
-&device.id eisa 0x1107
-+device.name BRILLIANCE 107 (PRODUCT ID 17A58...)
-+driver.display |50-160|30-95
-
- vendor.id PHL
-&device.id eisa 0x1109
-+device.name BRILLIANCE 109 (PRODUCT ID 19A58...)
-+driver.display |50-160|30-95
-
- vendor.id PHL
-&device.id eisa 0x1200
-+device.name CM1200 (15A)
-+driver.display |50-110|31-66
-
- vendor.id PHL
-&device.id eisa 0x1800
-+device.name CM1800 (15A)
-+driver.display |50-110|31-66
-
- vendor.id PHL
-&device.id eisa 0x2000
-+device.name CM0200 (14B)
-+driver.display |50-100|31-48
-
- vendor.id PHL
-&device.id eisa 0x200d
-+device.name 200T (20 ZOLL/CM0700)
-+driver.display |50-160|30-90
-
- vendor.id PHL
-&device.id eisa 0x201a
-+device.name BRILLIANCE 201 (21 ZOLL/CM1700)
-
- vendor.id PHL
-&device.id eisa 0x201b
-+device.name 201B (21 ZOLL/CM0770)
-+driver.display |48-160|30-94
-
- vendor.id PHL
-&device.id eisa 0x2600
-+device.name 17TCM26
-+driver.display |50-100|30-66
-
- vendor.id PHL
-&device.id eisa 0x2800
-+device.name 17BCM28
-+driver.display |50-130|30-66
-
- vendor.id PHL
-&device.id eisa 0x3109
-+device.name MAGNAVOX 109S
-+driver.display |50-160|30-95
-
- vendor.id PHL
-&device.id eisa 0x3800
-+device.name 17ACM38
-+driver.display |50-160|30-82
-
- vendor.id PHL
-&device.id eisa 0x4109
-+device.name 109S
-+driver.display |50-160|30-95
-
- vendor.id PHL
-&device.id eisa 0x4500
-+device.name BRILLIANCE AX4500 (14.5 LCD-MONITOR)
-+driver.display |56-75|30-60
-
- vendor.id PHL
-&device.id eisa 0x5600
-+device.name CM5600 (20B)
-+driver.display |50-120|31-82
-
- vendor.id PHL
-&device.id eisa 0x5f1f
-+device.name 29PX8031 MONITOR/TV
-
- vendor.id PHL
-&device.id eisa 0x6800
-+device.name 107B (17 ZOLL/CM6800)
-+driver.display |50-130|30-69
-
- vendor.id PHL
-&device.id eisa 0x700b
-+device.name CM0700 (21B)
-+driver.display |50-160|30-94
-
- vendor.id PHL
-&device.id eisa 0x8000
-+device.name CM0800 (14A)
-+driver.display |50-100|30-58
-
- vendor.id PHL
-&device.id eisa 0xa15b
-+device.name 105B (15 ZOLL/CM1200)
-+driver.display |50-110|30-66
-
- vendor.id PHL
-&device.id eisa 0xa17b
-+device.name MAGNAVOX MB7000 (17 ZOLL/CM6800)
-+driver.display |50-130|30-66
-
- vendor.id PHL
-&device.id eisa 0xa17c
-+device.name 107S (17 ZOLL/CM1300)
-+driver.display |50-120|30-69
-
- vendor.id PHL
-&device.id eisa 0xa513
-+device.name PD5029S MONITOR/TV
-
- vendor.id PHL
-&device.id eisa 0xb14b
-+device.name 104B (14-ZOLL/CM2300)
-+driver.display |50-120|30-54
-
- vendor.id PHL
-&device.id eisa 0xb15c
-+device.name 105S (15 ZOLL/CM2300)
-+driver.display |50-120|30-60
-
- vendor.id PLB
-+vendor.name PLB
-
- vendor.id PLB
-&device.id eisa 0x1410
-+device.name 1410 MODEL
-+driver.display |50-120|30-54
-
- vendor.id PLB
-&device.id eisa 0x1510
-+device.name 1510 MODEL
-+driver.display |50-120|30-69
-
- vendor.id PLB
-&device.id eisa 0x1710
-+device.name 1710
-+driver.display |50-120|30-70
-
- vendor.id PLB
-&device.id eisa 0x1910
-+device.name 1910
-+driver.display |50-150|30-95
-
- vendor.id PTS
-+vendor.name PROVIEW
-
- vendor.id PTS
-&device.id eisa 0x023a
-+device.name 570
-+driver.display |50-150|30-70
-
- vendor.id PTS
-&device.id eisa 0x0302
-+device.name 770
-+driver.display |50-150|30-76
-
- vendor.id PTS
-&device.id eisa 0x035c
-+device.name 860
-+driver.display |50-150|30-54
-
- vendor.id REL
-+vendor.name RELISYS
-
- vendor.id REL
-&device.id eisa 0x0451
-+device.name RE451
-+driver.display |50-100|30-54
-
- vendor.id REL
-&device.id eisa 0x0518
-+device.name RE518
-+driver.display |50-100|30-69
-
- vendor.id REL
-&device.id eisa 0x0550
-+device.name RE550
-+driver.display |50-100|30-50
-
- vendor.id REL
-&device.id eisa 0x0551
-+device.name RE551
-+driver.display |50-100|30-54
-
- vendor.id REL
-&device.id eisa 0x0767
-+device.name RE767
-+driver.display |50-100|30-69
-
- vendor.id SAM
-+vendor.name SAMSUNG
-
- vendor.id SAM
-&device.id eisa 0x0000
-+device.name SYNCMASTER 3NE
-
- vendor.id SAM
-&device.id eisa 0x0100
-+device.name SYNCMASTER 4S
-
- vendor.id SAM
-&device.id eisa 0x0cf1
-+device.name SYNCMASTER 1000S (CGP1607*)
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x0d65
-+device.name SYNCMASTER 500(M)S PLUS (CKE5507*)
-+driver.display |50-120|30-60
-
- vendor.id SAM
-&device.id eisa 0x0d66
-+device.name SYNCMASTER 500B PLUS (CKF5607*)
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x0d67
-+device.name SYNCMASTER 700(M)S PLUS (CKG7507*)
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x1530
-+device.name 15GLSI
-+driver.display |50-100|24-66
-
- vendor.id SAM
-&device.id eisa 0x1c53
-+device.name SYNCMASTER 500B
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x1c54
-+device.name SAMTRON 5(M)B (CGB5617*)
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x1c73
-+device.name SYNCMASTER 500(M)P (CGC5607*)
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x1cb3
-+device.name SYNCMASTER 700(M)S (CGE7507*)
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x1d73
-+device.name SYNCMASTER 500(M)S (CGK5507*)
-+driver.display |50-120|30-54
-
- vendor.id SAM
-&device.id eisa 0x1d74
-+device.name SAMTRON 5(M)E (CGK5517*)
-+driver.display |50-120|30-54
-
- vendor.id SAM
-&device.id eisa 0x1db3
-+device.name SYNCMASTER 700(M)B (CGM7607*)
-+driver.display |50-160|30-69
-
- vendor.id SAM
-&device.id eisa 0x1f13
-+device.name SYNCMASTER 1000P
-+driver.display |50-160|30-107
-
- vendor.id SAM
-&device.id eisa 0x1f14
-+device.name SYNCMASTER 1000B (CGX1607*)
-+driver.display |50-160|30-107
-
- vendor.id SAM
-&device.id eisa 0x202e
-+device.name SAMTRON 40BN
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2033
-+device.name SYNCMASTER 410B(CHA4217*)
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2034
-+device.name SAMTRON 40B
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2035
-+device.name SYNCMASTER 510(M)S (CHA5807*)
-+driver.display |50-120|30-61
-
- vendor.id SAM
-&device.id eisa 0x2036
-+device.name SAMTRON 50(M)E
-+driver.display |50-120|30-61
-
- vendor.id SAM
-&device.id eisa 0x2041
-+device.name SYNCMASTER 610(M)B(CHB6107*)
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2042
-+device.name SAMTRON 60(M)B
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2055
-+device.name SYNCMASTER 510B(CHB5707*)
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2056
-+device.name SAMTRON 50B
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2057
-+device.name SYNCMASTER 710(M)S (CHB7707*)
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2058
-+device.name SAMTRON 70(M)E
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2059
-+device.name SYNCMASTER 710(M)B (CHB7709*)
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x2c33
-+device.name SAMTRON 4BI
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2c34
-+device.name SYNCMASTER 400B (CKA4217*)
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2c35
-+device.name SAMTRON 5EI
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2c36
-+device.name 5E (CKA52*)
-+driver.display |50-120|30-55
-
- vendor.id SAM
-&device.id eisa 0x2c55
-+device.name SAMTRON 5BI
-+driver.display |50-120|30-70
-
- vendor.id SAM
-&device.id eisa 0x2c56
-+device.name 5B (CKB52*)
-+driver.display |50-120|30-70
-
- vendor.id SAM
-&device.id eisa 0x2c57
-+device.name SAMTRON 7EI
-+driver.display |50-120|30-70
-
- vendor.id SAM
-&device.id eisa 0x2c58
-+device.name 7E (CKB72*)
-+driver.display |50-120|30-70
-
- vendor.id SAM
-&device.id eisa 0x2cf8
-+device.name SYNCMASTER 700B PLUS
-+driver.display |50-160|30-70
-
- vendor.id SAM
-&device.id eisa 0x4610
-+device.name SYNCMASTER 21GLS
-+driver.display |50-160|30-85
-
- vendor.id SAM
-&device.id eisa 0x4690
-+device.name SYNCMASTER 20GLSI
-+driver.display |50-120|30-82
-
- vendor.id SAM
-&device.id eisa 0x49d5
-+device.name SYNCMASTER 570 B TFT
-+driver.display |50-75|30-61
-
- vendor.id SAM
-&device.id eisa 0x4d50
-+device.name SYNCMASTER 15GLE
-
- vendor.id SAM
-&device.id eisa 0x4d51
-+device.name SYNCMASTER 15GLI
-+driver.display |50-120|30-65
-
- vendor.id SAM
-&device.id eisa 0x4d52
-+device.name SYNCMASTER 15M
-+driver.display |50-120|30-65
-
- vendor.id SAM
-&device.id eisa 0x4d70
-+device.name SYNCMASTER 17GLI
-+driver.display |50-120|30-65
-
- vendor.id SAM
-&device.id eisa 0x4d71
-+device.name SYNCMASTER 17GLSI
-+driver.display |50-120|30-85
-
- vendor.id SAM
-&device.id eisa 0x4d72
-+device.name SYNCMASTER 6NE
-+driver.display |50-100|30-65
-
- vendor.id SAM
-&device.id eisa 0x4d73
-+device.name 17GLI
-+driver.display |50-120|24-65
-
- vendor.id SAM
-&device.id eisa 0x4d74
-+device.name 17GLSI
-+driver.display |50-120|24-85
-
- vendor.id SAM
-&device.id eisa 0x4db9
-+device.name SYNCMASTER 900SL (CSM92*)
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x4ee6
-+device.name SYNCMASTER 700P PLUS (CSH7839*)
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x4ee9
-+device.name SYNCMASTER 700IFT (CSH780B*)
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x4f26
-+device.name SYNCMASTER 900P (CSH9839*)
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x4f27
-+device.name SAMTRON 9P
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x4f29
-+device.name SYNCMASTER 900IFT
-+driver.display |50-160|30-96
-
- vendor.id SAM
-&device.id eisa 0x5450
-+device.name SYNCMASTER 15ME
-+driver.display |50-120|30-50
-
- vendor.id SAM
-&device.id eisa 0x6053
-+device.name SYNCMASTER 320TFT (LXB310*)
-+driver.display |50-75|30-61
-
- vendor.id SAM
-&device.id eisa 0x6054
-+device.name SYNCMASTER 330/331TFT (LXB350*)
-+driver.display |50-75|30-61
-
- vendor.id SAM
-&device.id eisa 0x6055
-+device.name SYNCMASTER 520TFT (LXB530*)
-+driver.display |50-75|30-61
-
- vendor.id SAM
-&device.id eisa 0x6056
-+device.name SYNCMASTER 530/531TFT (LXB550*)
-+driver.display |50-75|30-61
-
- vendor.id SAM
-&device.id eisa 0x6d20
-+device.name SYNCMASTER 15GLE
-+driver.display |50-120|30-50
-
- vendor.id SDI
-+vendor.name SAMTRON
-
- vendor.id SDI
-&device.id eisa 0x1428
-+device.name 428PT/PTL
-
- vendor.id SDI
-&device.id eisa 0x1528
-+device.name SC-528TXL
-+driver.display |50-100|30-48
-
- vendor.id SDI
-&device.id eisa 0x1529
-+device.name SC-528UXL
-+driver.display |50-120|30-65
-
- vendor.id SDI
-&device.id eisa 0x1530
-+device.name SC-528MXLJ
-+driver.display |50-100|24-66
-
- vendor.id SDI
-&device.id eisa 0x4690
-+device.name SC-208DXL+
-+driver.display |50-120|30-82
-
- vendor.id SDI
-&device.id eisa 0x4d70
-+device.name SC-728FXL
-+driver.display |50-120|30-65
-
- vendor.id SDI
-&device.id eisa 0x4d71
-+device.name SC-726GXL
-+driver.display |50-120|30-85
-
- vendor.id SDI
-&device.id eisa 0x4d73
-+device.name SC-728FXLJ
-+driver.display |50-120|24-65
-
- vendor.id SDI
-&device.id eisa 0x5451
-+device.name SC-528MDL
-+driver.display |50-120|30-48
-
- vendor.id SML
-+vendor.name SMILE
-
- vendor.id SML
-&device.id eisa 0x6425
-+device.name CA6425DL/CB6425DL
-+driver.display |50-100|30-54
-
- vendor.id SML
-&device.id eisa 0x6525
-+device.name CA6525DL/CB6525DL
-+driver.display |50-100|30-54
-
- vendor.id SML
-&device.id eisa 0x6546
-+device.name CA6546SL/CB6546SL
-+driver.display |50-120|30-69
-
- vendor.id SML
-&device.id eisa 0x6719
-+device.name CA6719SL/CB6719SL
-+driver.display |50-150|30-95
-
- vendor.id SML
-&device.id eisa 0x6738
-+device.name 85KHZ-MONITOR
-+driver.display |50-150|30-86
-
- vendor.id SML
-&device.id eisa 0x6746
-+device.name CA6746SL/CB6746SL
-+driver.display |50-120|30-69
-
- vendor.id SML
-&device.id eisa 0x6748
-+device.name CA6748SL/CB6748SL
-+driver.display |50-150|30-86
-
- vendor.id SML
-&device.id eisa 0x6919
-+device.name CA6919SL/CB6919SL
-+driver.display |50-150|30-95
-
- vendor.id SNI
-+vendor.name Siemens Nixdorf
-
- vendor.id SNY
-+vendor.name SONY
-
- vendor.id SNY
-&device.id eisa 0x0030
-+device.name CPD-L133
-+driver.display |50-65|30-70
-
- vendor.id SNY
-&device.id eisa 0x0071
-+device.name CPD-220GS
-+driver.display |48-120|30-85
-
- vendor.id SNY
-&device.id eisa 0x0090
-+device.name GDM-400PS/400PST/19PS
-+driver.display |48-160|30-95
-
- vendor.id SNY
-&device.id eisa 0x0091
-+device.name CPD-420GS
-+driver.display |48-120|30-96
-
- vendor.id SNY
-&device.id eisa 0x00b0
-+device.name GDM-500PS
-+driver.display |48-160|30-107
-
- vendor.id SNY
-&device.id eisa 0x00e0
-+device.name GDM-W900
-+driver.display |50-160|30-96
-
- vendor.id SNY
-&device.id eisa 0x0150
-+device.name CPD-100SF
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0170
-+device.name GDM-17SE2T
-+driver.display |48-150|30-85
-
- vendor.id SNY
-&device.id eisa 0x017b
-+device.name CPD-2003GT
-+driver.display |50-120|30-85
-
- vendor.id SNY
-&device.id eisa 0x0270
-+device.name CPD-200SF
-+driver.display |50-120|30-80
-
- vendor.id SNY
-&device.id eisa 0x02b0
-+device.name CPD-520GS/520GST/21GS2
-+driver.display |48-160|30-96
-
- vendor.id SNY
-&device.id eisa 0x0370
-+device.name CPD-200SFT
-+driver.display |50-120|30-80
-
- vendor.id SNY
-&device.id eisa 0x03a0
-+device.name CPD-300SFT
-+driver.display |48-150|30-86
-
- vendor.id SNY
-&device.id eisa 0x0450
-+device.name CPD-100ES
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0470
-+device.name CPD-17SF9
-+driver.display |50-120|24-80
-
- vendor.id SNY
-&device.id eisa 0x0550
-+device.name CPD-100GS
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0570
-+device.name CPD-200SX
-+driver.display |50-150|30-70
-
- vendor.id SNY
-&device.id eisa 0x0650
-+device.name CPD-120VS
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0670
-+device.name CPD-220VS
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0770
-+device.name CPD-200ES
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0950
-+device.name CPD-L150
-+driver.display |50-65|30-70
-
- vendor.id SNY
-&device.id eisa 0x0a50
-+device.name CPD-101VS IGPE
-+driver.display |50-120|30-70
-
- vendor.id SNY
-&device.id eisa 0x0a70
-+device.name CPD-200GS
-+driver.display |50-120|30-85
-
- vendor.id SNY
-&device.id eisa 0x0c70
-+device.name GDM-200PS
-+driver.display |48-160|30-92
-
- vendor.id SNY
-&device.id eisa 0x8050
-+device.name CPD-100SX
-+driver.display |50-120|30-65
-
- vendor.id STC
-+vendor.name ALPHASCAN
-
- vendor.id STC
-&device.id eisa 0x02c7
-+device.name 711
-+driver.display |50-120|30-70
-
- vendor.id STC
-&device.id eisa 0x02c8
-+device.name 712
-+driver.display |50-120|30-70
-
- vendor.id STC
-&device.id eisa 0x032b
-+device.name 811
-+driver.display |50-150|30-95
-
- vendor.id STC
-&device.id eisa 0x0800
-+device.name 800S
-+driver.display |50-150|30-95
-
- vendor.id SUN
-+vendor.name Sun
-
- vendor.id SUN
-&device.id eisa 0x0567
-+device.name 21" Premium Color Monitor
-
- vendor.id TAT
-+vendor.name TATUNG
-
- vendor.id TAT
-&device.id eisa 0x1f65
-+device.name TM651X SERIE
-+driver.display |50-90|31-65
-
- vendor.id TAT
-&device.id eisa 0x1f67
-+device.name TM671X SERIE
-+driver.display |50-110|31-65
-
- vendor.id TAT
-&device.id eisa 0x2f44
-+device.name TM442X SERIE
-+driver.display |50-100|30-50
-
- vendor.id TAT
-&device.id eisa 0x2f45
-+device.name TM452X SERIE
-+driver.display |50-100|30-50
-
- vendor.id TAT
-&device.id eisa 0x3044
-+device.name C5D
-+driver.display |50-100|30-54
-
- vendor.id TAT
-&device.id eisa 0x3054
-+device.name PC DIVISION V70 (XJ63754)
-+driver.display |50-100|30-70
-
- vendor.id TAT
-&device.id eisa 0x434d
-+device.name CM-17MC
-
- vendor.id TAT
-&device.id eisa 0x4855
-+device.name CM-14UH
-
- vendor.id TAX
-+vendor.name ERGOVISION
-
- vendor.id TAX
-&device.id eisa 0xe430
-+device.name 430LR
-+driver.display |50-110|30-54
-
- vendor.id TAX
-&device.id eisa 0xe550
-+device.name 550TCO95/TCO95-S
-+driver.display |55-110|30-69
-
- vendor.id TAX
-&device.id eisa 0xe730
-+device.name 730TCO95/TCO95-S
-+driver.display |50-120|30-69
-
- vendor.id TAX
-&device.id eisa 0xe740
-+device.name 740TCO95/TCO95-S
-+driver.display |55-120|30-85
-
- vendor.id TAX
-&device.id eisa 0xe750
-+device.name 750TCO95
-+driver.display |50-130|30-86
-
- vendor.id TAX
-&device.id eisa 0xe760
-+device.name 760TCO95/TCO95-S
-+driver.display |50-120|30-70
-
- vendor.id TAX
-&device.id eisa 0xe975
-+device.name 975TCO95
-+driver.display |50-150|30-95
-
- vendor.id TOS
-+vendor.name TOSHIBA
-
- vendor.id TOS
-&device.id eisa 0x5000
-+device.name CRT17002
-+driver.display |50-130|30-66
-
- vendor.id TOS
-&device.id eisa 0x5001
-+device.name CRT15003
-+driver.display |50-110|30-66
-
- vendor.id TOS
-&device.id eisa 0x5002
-+device.name CRT21002
-+driver.display |50-152|30-95
-
- vendor.id TRL
-+vendor.name TRL/RIC
-
- vendor.id TRL
-&device.id eisa 0x0010
-+device.name RH-1450
-+driver.display |47-90|29-50
-
- vendor.id TRL
-&device.id eisa 0x0110
-+device.name DL-1564M/DL-1564
-+driver.display |47-120|29-64
-
- vendor.id TRL
-&device.id eisa 0x0310
-+device.name DL-1750MU
-+driver.display |47-120|29-70
-
- vendor.id TRL
-&device.id eisa 0x0410
-+device.name DH-1570M/DH-1570
-+driver.display |47-120|29-70
-
- vendor.id TRL
-&device.id eisa 0x0510
-+device.name DH-1764M/DH-1764
-+driver.display |47-120|29-70
-
- vendor.id TRL
-&device.id eisa 0x0610
-+device.name DH-1764UM/DH-1764U
-+driver.display |47-120|29-85
-
- vendor.id TRL
-&device.id eisa 0x061c
-+device.name DL-1564
-+driver.display |47-100|29-64
-
- vendor.id TRL
-&device.id eisa 0x0622
-+device.name DH-1570
-+driver.display |47-120|29-64
-
- vendor.id TSB
-+vendor.name TOSHIBA
-
- vendor.id TSB
-&device.id eisa 0x5002
-+device.name EQUIUM 15-ZOLL MONITOR
-+driver.display |50-100|30-66
-
- vendor.id TSB
-&device.id eisa 0x5003
-+device.name EQUIUM 17-ZOLL MONITOR
-+driver.display |50-160|30-82
-
- vendor.id TSB
-&device.id eisa 0x5004
-+device.name DR569M (PV2001U)
-+driver.display |50-110|30-69
-
- vendor.id TSB
-&device.id eisa 0x5005
-+device.name DR769MF (PV2002U)
-+driver.display |50-110|30-69
-
- vendor.id TVM
-+vendor.name TVM
-
- vendor.id TVM
-&device.id eisa 0x0487
-+device.name AS4DP/LR4DP-MODELL
-+driver.display |50-120|30-55
-
- vendor.id TVM
-&device.id eisa 0x0588
-+device.name AS5S-MODELL
-+driver.display |50-120|30-69
-
- vendor.id TVM
-&device.id eisa 0x0589
-+device.name TCO5S-MODELL
-+driver.display |50-120|30-69
-
- vendor.id TVM
-&device.id eisa 0x0688
-+device.name TCO6S-MODELL
-+driver.display |50-120|30-69
-
- vendor.id UNM
-+vendor.name UNISYS
-
- vendor.id UNM
-&device.id eisa 0x1002
-+device.name EVG1000-E2
-+driver.display |50-65|30-50
-
- vendor.id UNM
-&device.id eisa 0x2001
-+device.name EVG2000-E
-+driver.display |50-130|30-54
-
- vendor.id UNM
-&device.id eisa 0x2002
-+device.name EVG2000-P
-+driver.display |50-150|30-70
-
- vendor.id UNM
-&device.id eisa 0x2014
-+device.name EVG-142-COL
-+driver.display |50-120|30-48
-
- vendor.id UNM
-&device.id eisa 0x2015
-+device.name EVG-152-COL
-+driver.display |50-130|30-48
-
- vendor.id UNM
-&device.id eisa 0x2101
-+device.name EVG2100-E
-+driver.display |50-130|30-54
-
- vendor.id UNM
-&device.id eisa 0x2102
-+device.name EVG2100-P
-+driver.display |50-150|30-70
-
- vendor.id UNM
-&device.id eisa 0x3001
-+device.name EVG3000-E
-+driver.display |50-160|30-69
-
- vendor.id UNM
-&device.id eisa 0x3002
-+device.name EVG3000-P
-+driver.display |50-160|30-95
-
- vendor.id UNM
-&device.id eisa 0x3015
-+device.name EVG-153-COL
-+driver.display |50-120|30-65
-
- vendor.id UNM
-&device.id eisa 0x3101
-+device.name EVG3100-E
-+driver.display |50-75|30-65
-
- vendor.id UNM
-&device.id eisa 0x3102
-+device.name EVG3100-P
-+driver.display |50-160|30-95
-
- vendor.id UNM
-&device.id eisa 0x4002
-+device.name EVG4000-P
-+driver.display |50-160|30-95
-
- vendor.id UNM
-&device.id eisa 0x4017
-+device.name EVG-174-COL
-+driver.display |50-120|30-85
-
- vendor.id UNM
-&device.id eisa 0x5002
-+device.name EVG5000-P
-+driver.display |50-160|30-95
-
- vendor.id UNM
-&device.id eisa 0x5021
-+device.name EVG-215-COL
-+driver.display |50-160|30-95
-
- vendor.id VSC
-+vendor.name VIEWSONIC
-
- vendor.id VSC
-&device.id eisa 0x0c00
-+device.name 17GS
-+driver.display |50-160|30-69
-
- vendor.id VSC
-&device.id eisa 0x0c0f
-+device.name 17PS
-+driver.display |50-160|30-82
-
- vendor.id VSC
-&device.id eisa 0x0c1f
-+device.name 17GA
-+driver.display |50-160|30-69
-
- vendor.id VSC
-&device.id eisa 0x1600
-+device.name 21PS
-+driver.display |50-160|30-82
-
- vendor.id VSC
-&device.id eisa 0x2600
-+device.name ViewSonic 15GS-2
-
- vendor.id VSC
-&device.id eisa 0x2601
-+device.name ViewSonic 15GS
-
- vendor.id VSC
-&device.id eisa 0x3141
-+device.name 14ES
-+driver.display |50-75|31-51
-
- vendor.id VSC
-&device.id eisa 0x3142+0x0002
-+device.name ViewSonic 14ES
-
- vendor.id VSC
-&device.id eisa 0x3145
-+device.name 15GS-3
-+driver.display |50-120|30-69
-
- vendor.id VSC
-&device.id eisa 0x3252+0x0002
-+device.name ViewSonic 21PS-2
-
- vendor.id VSC
-&device.id eisa 0x3254
-+device.name PJ800
-
- vendor.id VSC
-&device.id eisa 0x334b+0x0002
-+device.name ViewSonic 17GS-2
-
- vendor.id VSC
-&device.id eisa 0x3351
-+device.name PT810
-+driver.display |50-130|30-86
-
- vendor.id VSC
-&device.id eisa 0x3441
-+device.name E641
-+driver.display |50-100|30-54
-
- vendor.id VSC
-&device.id eisa 0x344b+0x0002
-+device.name ViewSonic 17PS-2
-
- vendor.id VSC
-&device.id eisa 0x3451
-+device.name PT810-2
-+driver.display |50-130|30-95
-
- vendor.id VSC
-&device.id eisa 0x3454
-+device.name PJ1000
-+driver.display |50-85|31-64
-
- vendor.id VSC
-&device.id eisa 0x354d
-+device.name GT800
-+driver.display |50-150|30-85
-
- vendor.id VSC
-&device.id eisa 0x354e
-+device.name ViewSonic GT800
-
- vendor.id VSC
-&device.id eisa 0x3550
-+device.name ViewSonic GT800
-
- vendor.id VSC
-&device.id eisa 0x3551
-+device.name P810
-+driver.display |50-160|30-95
-
- vendor.id VSC
-&device.id eisa 0x3552
-+device.name P810-E
-+driver.display |50-160|30-95
-
- vendor.id VSC
-&device.id eisa 0x3554
-+device.name PJL802
-+driver.display |50-85|31-61
-
- vendor.id VSC
-&device.id eisa 0x3641
-+device.name E641-2
-+driver.display |50-100|30-54
-
- vendor.id VSC
-&device.id eisa 0x3644
-+device.name 15GA
-+driver.display |50-160|30-69
-
- vendor.id VSC
-&device.id eisa 0x3645
-+device.name G653
-+driver.display |50-120|30-70
-
- vendor.id VSC
-&device.id eisa 0x3646
-+device.name ViewSonic 15GA
-
- vendor.id VSC
-&device.id eisa 0x3648
-+device.name ViewSonic 15GA
-
- vendor.id VSC
-&device.id eisa 0x364a
-+device.name PT770
-+driver.display |50-130|30-82
-
- vendor.id VSC
-&device.id eisa 0x364b+0x0002
-+device.name ViewSonic PT770
-
- vendor.id VSC
-&device.id eisa 0x3651
-+device.name P815
-+driver.display |50-160|30-115
-
- vendor.id VSC
-&device.id eisa 0x3744
-+device.name 15G-2
-+driver.display |50-100|30-66
-
- vendor.id VSC
-&device.id eisa 0x3745
-+device.name E655-2
-+driver.display |50-100|30-70
-
- vendor.id VSC
-&device.id eisa 0x3746
-+device.name ViewSonic 15G-2
-
- vendor.id VSC
-&device.id eisa 0x3748
-+device.name ViewSonic 15G-2
-
- vendor.id VSC
-&device.id eisa 0x374b+0x0002
-+device.name ViewSonic 17GA
-
- vendor.id VSC
-&device.id eisa 0x374d
-+device.name G800
-+driver.display |50-120|30-86
-
- vendor.id VSC
-&device.id eisa 0x3751
-+device.name G810
-+driver.display |50-160|30-89
-
- vendor.id VSC
-&device.id eisa 0x3844
-+device.name 15ES-2
-+driver.display |50-100|31-62
-
- vendor.id VSC
-&device.id eisa 0x3845
-+device.name VP150
-+driver.display |50-77|30-61
-
- vendor.id VSC
-&device.id eisa 0x3846
-+device.name ViewSonic 15ES-2
-
- vendor.id VSC
-&device.id eisa 0x3848
-+device.name ViewSonic 15ES-2
-
- vendor.id VSC
-&device.id eisa 0x384a
-+device.name 17EA
-+driver.display |50-120|30-65
-
- vendor.id VSC
-&device.id eisa 0x384b+0x0002
-+device.name ViewSonic 17EA
-
- vendor.id VSC
-&device.id eisa 0x384d
-+device.name G790
-+driver.display |50-180|30-95
-
- vendor.id VSC
-&device.id eisa 0x3851
-+device.name PT810-3
-+driver.display |50-160|30-96
-
- vendor.id VSC
-&device.id eisa 0x3854
-+device.name PJ820
-+driver.display |50-85|30-69
-
- vendor.id VSC
-&device.id eisa 0x3944
-+device.name ViewSonic 15GS-2
-
- vendor.id VSC
-&device.id eisa 0x3946
-+device.name ViewSonic 15GS-2
-
- vendor.id VSC
-&device.id eisa 0x3948
-+device.name ViewSonic 15GS-2
-
- vendor.id VSC
-&device.id eisa 0x394a
-+device.name 17GS-2
-+driver.display |50-160|30-69
-
- vendor.id VSC
-&device.id eisa 0x394b+0x0002
-+device.name ViewSonic 17GS-2
-
- vendor.id VSC
-&device.id eisa 0x4145
-+device.name GA655
-+driver.display |50-180|30-70
-
- vendor.id VSC
-&device.id eisa 0x4151
-+device.name PT813
-+driver.display |50-160|30-107
-
- vendor.id VSC
-&device.id eisa 0x4244
-+device.name EA771B
-+driver.display |50-120|30-70
-
- vendor.id VSC
-&device.id eisa 0x4245
-+device.name P655
-+driver.display |50-180|30-70
-
- vendor.id VSC
-&device.id eisa 0x424a
-+device.name GT770
-+driver.display |50-120|30-65
-
- vendor.id VSC
-&device.id eisa 0x424b+0x0002
-+device.name ViewSonic GT770
-
- vendor.id VSC
-&device.id eisa 0x434a
-+device.name 17PS-2
-+driver.display |50-160|30-86
-
- vendor.id VSC
-&device.id eisa 0x434b+0x0002
-+device.name ViewSonic 17PS-2
-
- vendor.id VSC
-&device.id eisa 0x434d
-+device.name PS790
-+driver.display |50-180|30-95
-
- vendor.id VSC
-&device.id eisa 0x4439
-+device.name ViewSonic 15GS-2
-
- vendor.id VSC
-&device.id eisa 0x444a
-+device.name 17GA-2
-+driver.display |50-160|30-69
-
- vendor.id VSC
-&device.id eisa 0x4637
-+device.name ViewSonic 1769DC
-
- vendor.id VSC
-&device.id eisa 0x474a
-+device.name PT775
-+driver.display |50-160|30-96
-
- vendor.id VSC
-&device.id eisa 0x4851
-+device.name P810-3
-+driver.display |50-180|30-95
-
- vendor.id VSC
-&device.id eisa 0x4951
-+device.name G810-2
-+driver.display |50-180|30-92
-
- vendor.id VSC
-&device.id eisa 0x4b4a
-+device.name GT775
-+driver.display |50-160|30-86
-
- vendor.id VSC
-&device.id eisa 0x4c4a
-+device.name G771
-+driver.display |50-180|30-70
-
- vendor.id VSC
-&device.id eisa 0x4d4a
-+device.name EA771
-+driver.display |50-120|30-70
-
- vendor.id VSC
-&device.id eisa 0x504a
-+device.name P775
-+driver.display |50-180|30-95
-
- vendor.id VSC
-&device.id eisa 0x514a
-+device.name GA771
-+driver.display |50-180|30-70
-
- vendor.id VSC
-&device.id eisa 0x524a
-+device.name G773
-+driver.display |50-160|30-70
-
- vendor.id VSC
-&device.id eisa 0x564a
-+device.name E771
-+driver.display |50-120|30-70
-
- vendor.id VSC
-&device.id eisa 0x594a
-+device.name GS771
-+driver.display |50-180|30-70
-
- vendor.id VSC
-&device.id eisa 0x5a4a
-+device.name PT771
-+driver.display |50-160|30-92
-
+++ /dev/null
-# mice
-
-
-# KYE: protocol info not verified
- vendor.id KYE
-&device.id eisa 0x0001
-|vendor.id LGI
-&device.id eisa 0x8001
-+driver.mouse microsoft|ms|3|0
-
- vendor.id LGI
-&device.id eisa 0x800b+0x0002
-+driver.mouse mouseman|mman|3|0
-
- vendor.id PNP
-&device.id eisa 0x0f04
-|vendor.id PNP
-&device.id eisa 0x0f05
-+driver.mouse mousesystems|msc|3|0
-
- vendor.id PNP
-&device.id eisa 0x0f01
-|vendor.id PNP
-&device.id eisa 0x0f02
-|vendor.id PNP
-&device.id eisa 0x0f0a
-|vendor.id PNP
-&device.id eisa 0x0f0b
-|vendor.id PNP
-&device.id eisa 0x0f0c
-|vendor.id PNP
-&device.id eisa 0x0f0d
-|vendor.id special 0x0200
-&device.id special 0x0003
-+driver.mouse microsoft|ms
-
- vendor.id PNP
-&device.id eisa 0x0f0e
-+driver.mouse ps/2|ps2||0
-
- vendor.id special 0x0200
-&device.id special 0x0002
-+driver.mouse explorerps/2|exps2||0
-
-# genius usb netmouse pro
- vendor.id usb 0x0458
-&device.id usb 0x0002
-+driver.mouse explorerps/2|exps2|4|0
-
-# MS IntelliMouse Explorer
- vendor.id usb 0x045e
-&device.id usb 0x001e
-# Logitech Wheelmouse Model M-BB48
-|vendor.id usb 0x046d
-&device.id usb 0xc001
-# Optical(?) Logitech Wheel Mouse
-|vendor.id usb 0x046d
-&device.id usb 0xc00c
-# Optical Logitech Wheel Mouse (#16003)
-|vendor.id usb 0x046d
-&device.id usb 0xc00e
-# Optical Logitech Wheel Mouse (#22797)
-|vendor.id usb 0x046d
-&device.id usb 0xc030
-# some mouse (#29468)
-|vendor.id usb 0x046d
-&device.id usb 0xc404
-# some mouse (#29719)
-|vendor.id usb 0x0461
-&device.id usb 0x4d03
-+driver.mouse explorerps/2|exps2|3|1
-
-# MouseMan Dual Optical (#18296)
-# http://www.logitech.com/index.cfm?page=products/details&CRID=3&CONTENTID=4984&countryid=7&languageid=4
- vendor.id usb 0x046d
-&device.id usb 0xc012
-+driver.mouse explorerps/2|exps2|4|1
-
- vendor.id usb 0x05fe
-&device.id usb 0x0005
-+driver.mouse explorerps/2|exps2|3|1
-
-# apple/logitech usb mouse
- vendor.id usb 0x05ac
-&device.id usb 0x0301
-+driver.mouse explorerps/2|exps2|1|0
-
-# Razer Boomslang USB Mouse
- vendor.id usb 0x05e3
-&device.id usb 0x000b
-+driver.mouse explorerps/2|exps2|5|1
-
-# ADB mice
- vendor.id special 0x0100
-&device.id special 0x0300+0x0100
-+driver.mouse explorerps/2|exps2|1|0
-
-# general USB mice
- vendor.id special 0x0200
-&device.id special 0x0001
-+driver.mouse explorerps/2|exps2
-
- vendor.id special 0x0200
-&device.id special 0x0004
-+driver.mouse explorerps/2|exps2|3|1
-
- vendor.id special 0x0200
-&device.id special 0x0005
-+driver.mouse explorerps/2|exps2|5|1
-
- vendor.id special 0x0200
-&device.id special 0x0006
-+driver.mouse ps/2|ps2|2|0
-
- vendor.id special 0x0200
-&device.id special 0x0007
-+driver.mouse ps/2|ps2|3|0
-
-# Sun Mouse (/dev/sunmouse)
- vendor.id special 0x0202
-&device.id special 0x0000
-+driver.mouse mousesystems|sun|3|0
-
-# very special (mouse devices)
- vendor.id special 0x0210
-&device.id special 0x0000+0x0100
-+driver.mouse explorerps/2|exps2
-
-# A4Tech 4D++ super whatever mouse (#24137)
- vendor.name A4W
-+vendor.name A4Tech
-
- device.id eisa 0x0005
-&vendor.name A4Tech
-+device.name Serial Wheel Mouse
-+driver.mouse intellimouse|ms3|3|2
-
+++ /dev/null
-# network adapter
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# pci/isapnp/sbus adapter
-
-# modinfo
- vendor.id pci 0x14e4
-&device.id pci 0x4401+2
-|vendor.id pci 0x14e4
-&device.id pci 0x170c
-+driver.module.modprobe b44
-
-# pcimap
- vendor.id pci 0x10de
-&device.id pci 0x0066
-|vendor.id pci 0x10de
-&device.id pci 0x00d6
-|vendor.id pci 0x10de
-&device.id pci 0x01c3
-+driver.module.modprobe forcedeth
-
-# net/r8169.c
- vendor.id pci 0x10ec
-&device.id pci 0x8169
-+driver.module.modprobe r8169
-
-# net/tokenring/tmspci.c
- vendor.id pci 0x0e11
-&device.id pci 0x0508
-|vendor.id pci 0x10b7
-&device.id pci 0x3390
-|vendor.id pci 0x10da
-&device.id pci 0x0508
-|vendor.id pci 0x1148
-&device.id pci 0x4200
-+driver.module.modprobe tmspci
-
-# net/tlan.c
- vendor.id pci 0x0e11
-&device.id pci 0xae32
-|vendor.id pci 0x0e11
-&device.id pci 0xae34+0x0002
-|vendor.id pci 0x0e11
-&device.id pci 0xae40
-|vendor.id pci 0x0e11
-&device.id pci 0xae43
-|vendor.id pci 0x0e11
-&device.id pci 0xb011+0x0002
-|vendor.id pci 0x0e11
-&device.id pci 0xb030
-|vendor.id pci 0x0e11
-&device.id pci 0xf130
-|vendor.id pci 0x0e11
-&device.id pci 0xf150
-|vendor.id pci 0x108d
-&device.id pci 0x0012+0x0003
-+driver.module.modprobe tlan
-
-# net/yellowfin.c
- vendor.id pci 0x1000
-&device.id pci 0x0701+0x0002
-+driver.module.modprobe yellowfin
-
-# net/natsemi.c
- vendor.id pci 0x100b
-&device.id pci 0x0020
-+driver.module.modprobe natsemi
-
-# net/ns83820.c
- vendor.id pci 0x100b
-&device.id pci 0x0022
-+driver.module.modprobe ns83820
-
-# for an overview of de4x5 vs. tulip see bugs:
-# #7317, #11093, #15303, #16036, #17303, #39127
-
-# net/de4x5.c
-# net/tulip.c
- vendor.id pci 0x1011
-&device.id pci 0x0014
-|vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x1207
-|vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x146c
-&subdevice.id pci 0x1430
-+driver.module.modprobe de4x5
-+driver.module.modprobe tulip
-
- vendor.id pci 0x1011
-&device.id pci 0x0002
-|vendor.id pci 0x1011
-&device.id pci 0x0009
-|vendor.id pci 0x1011
-&device.id pci 0x0019
-+driver.module.modprobe tulip
-+driver.module.modprobe de4x5
-
-#pcimap
- vendor.id pci 0x1011
-&device.id pci 0x0002
-|vendor.id pci 0x1011
-&device.id pci 0x0009
-|vendor.id pci 0x1011
-&device.id pci 0x0014
-|vendor.id pci 0x1011
-&device.id pci 0x0019
-|vendor.id pci 0x104a
-&device.id pci 0x0981
-|vendor.id pci 0x104a
-&device.id pci 0x2774
-|vendor.id pci 0x10d9
-&device.id pci 0x0512
-|vendor.id pci 0x10d9
-&device.id pci 0x0531
-|vendor.id pci 0x1113
-&device.id pci 0x1216+0x0002
-|vendor.id pci 0x1113
-&device.id pci 0x9511
-|vendor.id pci 0x1186
-&device.id pci 0x1561
-|vendor.id pci 0x11ad
-&device.id pci 0x0002
-|vendor.id pci 0x11ad
-&device.id pci 0xc115
-|vendor.id pci 0x11f6
-&device.id pci 0x9881
-|vendor.id pci 0x1259
-&device.id pci 0xa120
-|vendor.id pci 0x125b
-&device.id pci 0x1400
-|vendor.id pci 0x1317
-&device.id pci 0x0981
-|vendor.id pci 0x1317
-&device.id pci 0x0985
-|vendor.id pci 0x1317
-&device.id pci 0x1985
-|vendor.id pci 0x1317
-&device.id pci 0x9511
-|vendor.id pci 0x13d1
-&device.id pci 0xab02+0x0002
-|vendor.id pci 0x13d1
-&device.id pci 0xab08
-|vendor.id pci 0x14f1
-&device.id pci 0x1803
-|vendor.id pci 0x1626
-&device.id pci 0x8410
-|vendor.id pci 0x1737
-&device.id pci 0xab09
-|vendor.id pci 0x17b3
-&device.id pci 0xab08
-|vendor.id pci 0x8086
-&device.id pci 0x0039
-+driver.module.modprobe tulip
-
-# pcimap
- vendor.id pci 0x10b9
-&device.id pci 0x5261
-|vendor.id pci 0x1282
-&device.id pci 0x9009
-|vendor.id pci 0x1282
-&device.id pci 0x9132
-+driver.module.modprobe dmfe
-
-# see #19271
- vendor.id pci 0x1282
-&device.id pci 0x9102
-+driver.module.modprobe dmfe
-+driver.module.modprobe tulip
-
- vendor.id pci 0x1282
-&device.id pci 0x9100
-+driver.module.modprobe tulip
-+driver.module.modprobe dmfe
-
-# net/wan/lmc/lmc_main.c
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1379
-+driver.module.modprobe lmc
-
-# net/defxx.c
- vendor.id pci 0x1011
-&device.id pci 0x000f
-+driver.module.modprobe defxx
-
-# pcimap
- vendor.id pci 0x1011
-&device.id pci 0x001a
-|vendor.id pci 0x10a9
-&device.id pci 0x0009
-|vendor.id pci 0x10b7
-&device.id pci 0x0001
-|vendor.id pci 0x12ae
-&device.id pci 0x0001+0x0002
-|vendor.id pci 0x12ae
-&device.id pci 0x00fa
-|vendor.id pci 0x1385
-&device.id pci 0x620a
-|vendor.id pci 0x1385
-&device.id pci 0x630a
-+driver.module.modprobe acenic
-
-# net/tokenring/lanstreamer.c
- vendor.id pci 0x1014
-&device.id pci 0x0018
-+driver.module.modprobe lanstreamer
-
-# net/olympic.c
- vendor.id pci 0x1014
-&device.id pci 0x003e
-+driver.module.modprobe olympic
-
-# net/hp100.c
- vendor.id pci 0x101a
-&device.id pci 0x0005
-|vendor.id pci 0x103c
-&device.id pci 0x1030+0x0002
-|vendor.id pci 0x11f6
-&device.id pci 0x0112
-+driver.module.modprobe hp100
-
-# net/pcnet32.c
- vendor.id pci 0x1022
-&device.id pci 0x2000+0x0002
-+driver.module.modprobe pcnet32
-
-# net/amd8111e.c
- vendor.id pci 0x1022
-&device.id pci 0x7462
-+driver.module.modprobe amd8111e
-
-# net/sis900.c
- vendor.id pci 0x1039
-&device.id pci 0x0900
-|vendor.id pci 0x1039
-&device.id pci 0x7016
-+driver.module.modprobe sis900
-
-# net/winbond-840.c
- vendor.id pci 0x1050
-&device.id pci 0x0840
-|vendor.id pci 0x11f6
-&device.id pci 0x2011
-+driver.module.modprobe winbond-840
-
-# net/ne2k-pci.c
- vendor.id pci 0x1050
-&device.id pci 0x0940
-|vendor.id pci 0x1050
-&device.id pci 0x5a5a
-|vendor.id pci 0x10bd
-&device.id pci 0x0e34
-|vendor.id pci 0x10ec
-&device.id pci 0x8029
-|vendor.id pci 0x1106
-&device.id pci 0x0926
-|vendor.id pci 0x11f6
-&device.id pci 0x1401
-|vendor.id pci 0x12c3
-&device.id pci 0x0058
-|vendor.id pci 0x12c3
-&device.id pci 0x5598
-|vendor.id pci 0x4a14
-&device.id pci 0x5000
-|vendor.id pci 0x8e2e
-&device.id pci 0x3000
-+driver.module.modprobe ne2k-pci
-
-# net/sungem.c (pci)
-# (used to be gmac)
- vendor.id pci 0x106b
-&device.id pci 0x0021
-|vendor.id pci 0x106b
-&device.id pci 0x0024
-|vendor.id pci 0x108e
-&device.id pci 0x1101
-|vendor.id pci 0x108e
-&device.id pci 0x2bad
-+driver.module.modprobe sungem
-
-# net/fc/iph5526.c
- vendor.id pci 0x107e
-&device.id pci 0x0004+0x0002
-+driver.module.modprobe iph5526
-
-# net/sunhme.c (pci, sbus)
- vendor.id pci 0x108e
-&device.id pci 0x1001
-|vendor.id special 0x4001
-&device.id special 0x3001
-+driver.module.modprobe sunhme
-
-# net/tokenring/abyss.c
- vendor.id pci 0x10b6
-&device.id pci 0x0002
-+driver.module.modprobe abyss
-
-# pcimap
- vendor.id pci 0x10b7
-&device.id pci 0x4500
-|vendor.id pci 0x10b7
-&device.id pci 0x5055
-|vendor.id pci 0x10b7
-&device.id pci 0x5057
-|vendor.id pci 0x10b7
-&device.id pci 0x5157
-|vendor.id pci 0x10b7
-&device.id pci 0x5257
-|vendor.id pci 0x10b7
-&device.id pci 0x5900
-|vendor.id pci 0x10b7
-&device.id pci 0x5920
-|vendor.id pci 0x10b7
-&device.id pci 0x5950+0x0003
-|vendor.id pci 0x10b7
-&device.id pci 0x5970
-|vendor.id pci 0x10b7
-&device.id pci 0x5b57
-|vendor.id pci 0x10b7
-&device.id pci 0x6055+0x0002
-|vendor.id pci 0x10b7
-&device.id pci 0x6560
-|vendor.id pci 0x10b7
-&device.id pci 0x6562
-|vendor.id pci 0x10b7
-&device.id pci 0x6564
-|vendor.id pci 0x10b7
-&device.id pci 0x7646
-|vendor.id pci 0x10b7
-&device.id pci 0x9000+0x0002
-|vendor.id pci 0x10b7
-&device.id pci 0x9004+0x0003
-|vendor.id pci 0x10b7
-&device.id pci 0x900a
-|vendor.id pci 0x10b7
-&device.id pci 0x9050+0x0002
-|vendor.id pci 0x10b7
-&device.id pci 0x9055
-|vendor.id pci 0x10b7
-&device.id pci 0x9058
-|vendor.id pci 0x10b7
-&device.id pci 0x905a
-|vendor.id pci 0x10b7
-&device.id pci 0x9200+0x0002
-|vendor.id pci 0x10b7
-&device.id pci 0x9800
-|vendor.id pci 0x10b7
-&device.id pci 0x9805
-+driver.module.modprobe 3c59x
-
-# net/epic100.c
- vendor.id pci 0x10b8
-&device.id pci 0x0005+0x0002
-+driver.module.modprobe epic100
-
-# modules.alias
- vendor.id pci 0x018a
-&device.id pci 0x0106
-|vendor.id pci 0x021b
-&device.id pci 0x8139
-|vendor.id pci 0x02ac
-&device.id pci 0x1012
-|vendor.id pci 0x10ec
-&device.id pci 0x8129
-|vendor.id pci 0x10ec
-&device.id pci 0x8138
-|vendor.id pci 0x10ec
-&device.id pci 0x8139
-&rev.id 0x0000+0x0020
-|vendor.id pci 0x1113
-&device.id pci 0x1211
-|vendor.id pci 0x1186
-&device.id pci 0x1300
-|vendor.id pci 0x1186
-&device.id pci 0x1340
-|vendor.id pci 0x11db
-&device.id pci 0x1234
-|vendor.id pci 0x1259
-&device.id pci 0xa117
-|vendor.id pci 0x1259
-&device.id pci 0xa11e
-|vendor.id pci 0x126c
-&device.id pci 0x1211
-|vendor.id pci 0x13d1
-&device.id pci 0xab06
-|vendor.id pci 0x1432
-&device.id pci 0x9130
-|vendor.id pci 0x14ea
-&device.id pci 0xab06+0x0002
-|vendor.id pci 0x1500
-&device.id pci 0x1360
-|vendor.id pci 0x1743
-&device.id pci 0x8139
-|vendor.id pci 0x4033
-&device.id pci 0x1360
-|device.id pci 0x8139
-&subvendor.id pci 0x10ec
-&subdevice.id pci 0x8139
-|device.id pci 0x8139
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1300
-|device.id pci 0x8139
-&subvendor.id pci 0x13d1
-&subdevice.id pci 0xab06
-+driver.module.modprobe 8139too
-
-# modules.alias
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&rev.id 0x0020+0x00e0
-+driver.module.modprobe 8139cp
-
-# net/via_rhine.c
- vendor.id pci 0x1106
-&device.id pci 0x3043
-|vendor.id pci 0x1106
-&device.id pci 0x3065
-|vendor.id pci 0x1106
-&device.id pci 0x6100
-+driver.module.modprobe via-rhine
-
-# net/skfp/
- vendor.id pci 0x1148
-&device.id pci 0x4000
-+driver.module.modprobe skfp
-
-# net/sk98lin/h/skdrv2nd.h::SK_PCI_ISCOMPLIANT()
- vendor.id pci 0x1148
-&device.id pci 0x4300
-|vendor.id pci 0x1148
-&device.id pci 0x4320
-|vendor.id pci 0x10b7
-&device.id pci 0x1700
-|vendor.id pci 0x1186
-&device.id pci 0x4c00
-|vendor.id pci 0x11ab
-&device.id pci 0x4320
-|vendor.id pci 0x1371
-&device.id pci 0x434e
-|vendor.id pci 0x1737
-&device.id pci 0x1032
-|vendor.id pci 0x1737
-&device.id pci 0x1064
-+driver.module.modprobe sk98lin
-
-# net/dgrs.c
- vendor.id pci 0x114f
-&device.id pci 0x0003
-+driver.module.modprobe dgrs
-
-# net/irda/toshoboe.c
- vendor.id pci 0x1179
-&device.id pci 0x0701
-+driver.module.modprobe toshoboe
-
-# net/sundance.c
- vendor.id pci 0x1186
-&device.id pci 0x1002
-|vendor.id pci 0x13f0
-&device.id pci 0x0201
-+driver.module.modprobe sundance
-
-# net/dl2k.c
- vendor.id pci 0x1186
-&device.id pci 0x4000
-+driver.module.modprobe dl2k
-
-# net/wan/sdladrv.c
- vendor.id pci 0x11b0
-&device.id pci 0x0002
-+driver.module.modprobe sdladrv
-
-# net/rrunner.c
- vendor.id pci 0x120f
-&device.id pci 0x0001
-+driver.module.modprobe rrunner
-
-# net/hamachi.c
- vendor.id pci 0x1318
-&device.id pci 0x0911
-+driver.module.modprobe hamachi
-
-# see #14848
- vendor.id pci 0x1385
-&device.id pci 0x4100
-+driver.module.modprobe prism2_plx
-
-# net/aironet4500_card.c
- vendor.id pci 0x14b9
-&device.id pci 0x0001
-|vendor.id pci 0x14b9
-&device.id pci 0x4500
-|vendor.id pci 0x14b9
-&device.id pci 0x4800
-+driver.module.modprobe aironet4500
-
-# modules.alias
- vendor.id pci 0x106b
-&device.id pci 0x1645
-|vendor.id pci 0x1148
-&device.id pci 0x4400
-|vendor.id pci 0x1148
-&device.id pci 0x4500
-|vendor.id pci 0x14e4
-&device.id pci 0x164d
-|vendor.id pci 0x173b
-&device.id pci 0x03e8+0x0004
-+driver.module.modprobe tg3
-
-# modules.alias
-# tg3 vs. bcm5700: #34486, #36992
- vendor.id pci 0x14e4
-&device.id pci 0x1644+0x0006
-|vendor.id pci 0x14e4
-&device.id pci 0x1653+0x0002
-|vendor.id pci 0x14e4
-&device.id pci 0x165d+0x0002
-|vendor.id pci 0x14e4
-&device.id pci 0x166e
-|vendor.id pci 0x14e4
-&device.id pci 0x1696
-|vendor.id pci 0x14e4
-&device.id pci 0x169c
-|vendor.id pci 0x14e4
-&device.id pci 0x16a6+0x0003
-|vendor.id pci 0x14e4
-&device.id pci 0x16c6+0x0002
-|vendor.id pci 0x14e4
-&device.id pci 0x170d+0x0002
-+driver.module.modprobe tg3
-+driver.module.modprobe bcm5700
-
- vendor.id pci 0x14e4
-&device.id pci 0x4401
-+driver.module.modprobe bcm4400
-
-# net/arcnet/com20020-pci.c
- vendor.id pci 0x1571
-&device.id pci 0xa001+0x0013
-|vendor.id pci 0x1571
-&device.id pci 0xa201+0x0006
-+driver.module.modprobe om20020-pci
-
-# net/rcpci45.c
- vendor.id pci 0x4916
-&device.id pci 0x1960
-+driver.module.modprobe rcpci45
-
-# pcimap
- vendor.id pci 0x8086
-&device.id pci 0x1050+0x0006
-+driver.module.modprobe e100
-
-# pcimap
- vendor.id pci 0x8086
-&device.id pci 0x1035+0x0003
-|vendor.id pci 0x8086
-&device.id pci 0x1227+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x5200+0x0002
-+driver.module.modprobe eepro100
-
-# pcimap
- vendor.id pci 0x8086
-&device.id pci 0x1029
-|vendor.id pci 0x8086
-&device.id pci 0x1030+0x0005
-|vendor.id pci 0x8086
-&device.id pci 0x1038+0x0007
-|vendor.id pci 0x8086
-&device.id pci 0x1059
-|vendor.id pci 0x8086
-&device.id pci 0x1209
-|vendor.id pci 0x8086
-&device.id pci 0x1229
-|vendor.id pci 0x8086
-&device.id pci 0x2449
-|vendor.id pci 0x8086
-&device.id pci 0x2459
-|vendor.id pci 0x8086
-&device.id pci 0x245d
-+driver.module.modprobe e100
-+driver.module.modprobe eepro100
-
-# pcimap
- vendor.id pci 0x8086
-&device.id pci 0x1000+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1004
-|vendor.id pci 0x8086
-&device.id pci 0x1008+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x100c+0x000e
-|vendor.id pci 0x8086
-&device.id pci 0x101d+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1026+0x0003
-|vendor.id pci 0x8086
-&device.id pci 0x1075+0x0007
-+driver.module.modprobe e1000
-
-# net/starfire.c
- vendor.id pci 0x9004
-&device.id pci 0x6915
-+driver.module.modprobe starfire
-
-
- vendor.id pci 0x8086
-&device.id pci 0x1043
-+driver.module.modprobe ipw2100
-
-
-# make it an ethernet card explicitly (#65852)
- vendor.id pci 0x10de
-&device.id pci 0x0037+0x0002
-|vendor.id pci 0x10de
-&device.id pci 0x0056+0x0002
-|vendor.id pci 0x10de
-&device.id pci 0x0066
-|vendor.id pci 0x10de
-&device.id pci 0x0086
-|vendor.id pci 0x10de
-&device.id pci 0x008c
-|vendor.id pci 0x10de
-&device.id pci 0x00d6
-|vendor.id pci 0x10de
-&device.id pci 0x00df
-|vendor.id pci 0x10de
-&device.id pci 0x00e6
-|vendor.id pci 0x10de
-&device.id pci 0x01c3
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe forcedeth
-
-
-# net/ne.c
- vendor.id AXE
-&device.id eisa 0x2201
-|vendor.id PNP
-&device.id eisa 0x80d6
-+driver.module.modprobe ne
-+driver.module.config options ne io=<io0> irq=<irq0>
-+driver.module.insmod 8390|ne io=<io0> irq=<irq0>
-
-# net/3c509.c
- vendor.id PNP
-&device.id eisa 0x80f7+0x0002
-|vendor.id TCM
-&device.id eisa 0x5090+0x0002
-|vendor.id TCM
-&device.id eisa 0x5094+0x0002
-|vendor.id TCM
-&device.id eisa 0x5098
-+driver.module.modprobe 3c509
-
-# mac ethernet controller
- vendor.id special 0x0401
-&device.id special 0x0020
-+driver.module.modprobe mace
-
-# mac ethernet controller
- vendor.id special 0x0401
-&device.id special 0x0021+0x0002
-+driver.module.modprobe bmac
-
-# net/sunqe.c (sbus)
- vendor.id special 0x4001
-&device.id special 0x3003
-+driver.module.modprobe sunqe
-
-# net/myri_sbus.c (sbus)
- vendor.id special 0x4001
-&device.id special 0x3004
-+driver.module.modprobe myri_sbus
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# usb network adapter
-
- vendor.id usb 0x0411
-+vendor.name MELCO
-
- vendor.id usb 0x0411
-&device.id usb 0x0001
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name BUFFALO LUA-TX
-
- vendor.id usb 0x04bb
-+vendor.name IO Data
-
- vendor.id usb 0x04bb
-&device.id usb 0x0904
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name USB ET/TX
-
- vendor.id usb 0x056e
-+vendor.name LANEED
-
- vendor.id usb 0x056e
-&device.id usb 0x4002
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name LD-USB/TX
-
- vendor.id usb 0x05e9
-+vendor.name SONY
-
- vendor.id usb 0x05e9
-&device.id usb 0x0009
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name Ethernet USB
-
- vendor.id usb 0x066b
-+vendor.name Linksys
-
- vendor.id usb 0x066b
-&device.id usb 0x2203+0x0002
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name USB100TX
-
- vendor.id usb 0x066b
-&device.id usb 0x2206
-+baseclass.id 0x002
-+subclass.id 0x00
-
- vendor.id usb 0x0707
-+vendor.name SMC
-
- vendor.id usb 0x0707
-&device.id usb 0x0100
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name 2102 EZ Ethernet USB
-
- vendor.id usb 0x0707
-&device.id usb 0x0200
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name 202 USB Ethernet
-
- vendor.id usb 0x07a6
-+vendor.name ADMtek
-
- vendor.id usb 0x07a6
-&device.id usb 0x0986
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name AN986 USB Ethernet
-
- vendor.id usb 0x07aa
-+vendor.name Corega
-
- vendor.id usb 0x07aa
-&device.id usb 0x0001
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name FEther USB-T
-
- vendor.id usb 0x07aa
-&device.id usb 0x0004
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name FEther USB-TX
-
- vendor.id usb 0x07b8
-|vendor.id usb 0x2001
-+vendor.name D-Link
-
- vendor.id usb 0x07b8
-&device.id usb 0x4002
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name DRU-E100
-
- vendor.id usb 0x07b8
-&device.id usb 0xabc1
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name DU-10
-
- vendor.id usb 0x083a
-+vendor.name Accton
-
- vendor.id usb 0x083a
-&device.id usb 0x1046
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name USB 10/100 Ethernet Adapter
-
- vendor.id usb 0x08dd
-+vendor.name Billionton
-
- vendor.id usb 0x08dd
-&device.id usb 0x0986
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name USB-100
-
- vendor.id usb 0x2001
-&device.id usb 0x4001+0x0002
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name DSB-650X
-
- vendor.id usb 0x2001
-&device.id usb 0x4003
-+baseclass.id 0x002
-+subclass.id 0x00
-+device.name DSB-650X(PNA)
-
-
- vendor.id usb 0x03e8
-&device.id usb 0x0008
-|vendor.id usb 0x04bb
-&device.id usb 0x0901
-|vendor.id usb 0x0506
-&device.id usb 0x03e8
-|vendor.id usb 0x0506
-&device.id usb 0x11f8
-|vendor.id usb 0x0557
-&device.id usb 0x2002
-|vendor.id usb 0x0557
-&device.id usb 0x4000
-|vendor.id usb 0x0565
-&device.id usb 0x0002+0x0002
-|vendor.id usb 0x0565
-&device.id usb 0x0005
-|vendor.id usb 0x05e9
-&device.id usb 0x0008+0x0002
-|vendor.id usb 0x06e1
-&device.id usb 0x0008+0x0002
-|vendor.id usb 0x0707
-&device.id usb 0x0100
-|vendor.id usb 0x07aa
-&device.id usb 0x0001
-|vendor.id usb 0x07b8
-&device.id usb 0x4000
-|vendor.id usb 0x0846
-&device.id usb 0x1001+0x0002
-|vendor.id usb 0x085a
-&device.id usb 0x0008+0x0002
-|vendor.id usb 0x087d
-&device.id usb 0x5704
-|vendor.id usb 0x0951
-&device.id usb 0x0008
-|vendor.id usb 0x095a
-&device.id usb 0x3003
-|vendor.id usb 0x10bd
-&device.id usb 0x1427
-|vendor.id usb 0x1342
-&device.id usb 0x0204
-|vendor.id usb 0x13d2
-&device.id usb 0x0400
-|vendor.id usb 0x1485
-&device.id usb 0x0001
-|vendor.id usb 0x1645
-&device.id usb 0x0005
-|vendor.id usb 0x1645
-&device.id usb 0x0008
-|vendor.id usb 0x1645
-&device.id usb 0x8005
-|vendor.id usb 0x2001
-&device.id usb 0x4000
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe kaweth
-
- vendor.id usb 0x03f0
-&device.id usb 0x811c
-|vendor.id usb 0x0411
-&device.id usb 0x0001
-|vendor.id usb 0x0411
-&device.id usb 0x0005
-|vendor.id usb 0x0411
-&device.id usb 0x0009
-|vendor.id usb 0x045e
-&device.id usb 0x007a
-|vendor.id usb 0x049f
-&device.id usb 0x8511
-|vendor.id usb 0x04bb
-&device.id usb 0x0904
-|vendor.id usb 0x04bb
-&device.id usb 0x0913
-|vendor.id usb 0x0506
-&device.id usb 0x4601
-|vendor.id usb 0x050d
-&device.id usb 0x0121
-|vendor.id usb 0x0557
-&device.id usb 0x2007
-|vendor.id usb 0x056e
-&device.id usb 0x200c
-|vendor.id usb 0x056e
-&device.id usb 0x4002
-|vendor.id usb 0x056e
-&device.id usb 0x400b
-|vendor.id usb 0x056e
-&device.id usb 0xabc1
-|vendor.id usb 0x05cc
-&device.id usb 0x3000
-|vendor.id usb 0x066b
-&device.id usb 0x200c
-|vendor.id usb 0x066b
-&device.id usb 0x2203+0x0002
-|vendor.id usb 0x066b
-&device.id usb 0x2206
-|vendor.id usb 0x066b
-&device.id usb 0x400b
-|vendor.id usb 0x067c
-&device.id usb 0x1001
-|vendor.id usb 0x0707
-&device.id usb 0x0200+0x0002
-|vendor.id usb 0x07a6
-&device.id usb 0x07c2
-|vendor.id usb 0x07a6
-&device.id usb 0x0986
-|vendor.id usb 0x07a6
-&device.id usb 0x8511
-|vendor.id usb 0x07a6
-&device.id usb 0x8513
-|vendor.id usb 0x07a6
-&device.id usb 0x8515
-|vendor.id usb 0x07aa
-&device.id usb 0x0004
-|vendor.id usb 0x07aa
-&device.id usb 0x000d
-|vendor.id usb 0x07b8
-&device.id usb 0x110c
-|vendor.id usb 0x07b8
-&device.id usb 0x200c
-|vendor.id usb 0x07b8
-&device.id usb 0x4002
-|vendor.id usb 0x07b8
-&device.id usb 0x4004
-|vendor.id usb 0x07b8
-&device.id usb 0x4007
-|vendor.id usb 0x07b8
-&device.id usb 0x400b+0x0002
-|vendor.id usb 0x07b8
-&device.id usb 0x4102
-|vendor.id usb 0x07b8
-&device.id usb 0x4104
-|vendor.id usb 0x07b8
-&device.id usb 0xabc1
-|vendor.id usb 0x07c9
-&device.id usb 0xb100
-|vendor.id usb 0x083a
-&device.id usb 0x1046
-|vendor.id usb 0x083a
-&device.id usb 0x5046
-|vendor.id usb 0x0846
-&device.id usb 0x1020
-|vendor.id usb 0x08d1
-&device.id usb 0x0003
-|vendor.id usb 0x08dd
-&device.id usb 0x0986+0x0003
-|vendor.id usb 0x08dd
-&device.id usb 0x8511
-|vendor.id usb 0x0951
-&device.id usb 0x000a
-|vendor.id usb 0x0b39
-&device.id usb 0x0109
-|vendor.id usb 0x0b39
-&device.id usb 0x0901
-|vendor.id usb 0x0db7
-&device.id usb 0x0002
-|vendor.id usb 0x0e66
-&device.id usb 0x400c
-|vendor.id usb 0x1044
-&device.id usb 0x8002
-|vendor.id usb 0x1342
-&device.id usb 0x0304
-|vendor.id usb 0x15e8
-&device.id usb 0x9100
-|vendor.id usb 0x15e8
-&device.id usb 0x9110
-|vendor.id usb 0x2001
-&device.id usb 0x200c
-|vendor.id usb 0x2001
-&device.id usb 0x4001+0x0003
-|vendor.id usb 0x2001
-&device.id usb 0x400b
-|vendor.id usb 0x2001
-&device.id usb 0x4102
-|vendor.id usb 0x2001
-&device.id usb 0xabc1
-|vendor.id usb 0x3334
-&device.id usb 0x1701
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe pegasus
-
- vendor.id usb 0x0411
-&device.id usb 0x0012
-|vendor.id usb 0x07b8
-&device.id usb 0x401a
-|vendor.id usb 0x0bda
-&device.id usb 0x8150
-|vendor.id usb 0x3980
-&device.id usb 0x0003
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe rtl8150
-
- vendor.id usb 0x0423
-&device.id usb 0x000a
-|vendor.id usb 0x0423
-&device.id usb 0x000c
-|vendor.id usb 0x08d1
-&device.id usb 0x0001
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe catc
-
- vendor.id usb 0x066b
-&device.id usb 0x2202
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe pegasus
-+driver.module.modprobe kaweth
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# myrinet adapter
-
- vendor.id pci 0x14c1
-+vendor.name Myricom, Inc.
-
- vendor.id pci 0x14c1
-&device.id pci 0x8043
-+baseclass.id 0x002
-+subclass.id 0x81
-+driver.module.modprobe gm
-+device.name Myrinet Adapter
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# bluetooth usb devices
- vendor.id usb 0x044e
-&device.id usb 0x3001+0x0002
-|vendor.id usb 0x04bf
-&device.id usb 0x030a
-|vendor.id usb 0x057c
-&device.id usb 0x3800
-|vendor.id usb 0x0bdb
-&device.id usb 0x1002
-+driver.module.modprobe hci_usb
-+baseclass.id 0x115
-+subclass.id 0x00
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# firmware
-
- vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x2741
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2701+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2711+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2721+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2731+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2741+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2751+0x0004
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2761+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x104f
-|vendor.id pci 0x8086
-&device.id pci 0x4220
-|vendor.id pci 0x8086
-&device.id pci 0x4223
-+driver.module.modprobe ipw2200
-+requires ipw-firmware
-
- vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2520+0x000a
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x252b+0x0003
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2550+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2553+0x0003
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2560+0x0004
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2565+0x0003
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2570
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2580+0x0004
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2585+0x0003
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2590+0x0004
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2596
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2598
-|vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x25a0
-+driver.module.modprobe ipw2100
-+requires ipw-firmware
-
-
- vendor.id usb 0x03eb
-&device.id usb 0x4102
-|vendor.id usb 0x03eb
-&device.id usb 0x7605
-|vendor.id usb 0x049f
-&device.id usb 0x0032
-|vendor.id usb 0x04a5
-&device.id usb 0x9001
-|vendor.id usb 0x0506
-&device.id usb 0x0a01
-|vendor.id usb 0x050d
-&device.id usb 0x0050
-|vendor.id usb 0x0681
-&device.id usb 0x001b
-|vendor.id usb 0x069a
-&device.id usb 0x0321
-|vendor.id usb 0x077b
-&device.id usb 0x2219
-|vendor.id usb 0x077b
-&device.id usb 0x2227
-|vendor.id usb 0x07b8
-&device.id usb 0xb000
-|vendor.id usb 0x0864
-&device.id usb 0x4102
-|vendor.id usb 0x1044
-&device.id usb 0x8003
-|vendor.id usb 0x1371
-&device.id usb 0x0002
-|vendor.id usb 0x1371
-&device.id usb 0x5743
-|vendor.id usb 0x1668
-&device.id usb 0x7605
-|vendor.id usb 0x2001
-&device.id usb 0x3200
-|vendor.id usb 0x2019
-&device.id usb 0x3220
-+driver.module.modprobe at76c503-rfmd
-+requires atmel-firmware
-
- vendor.id usb 0x03eb
-&device.id usb 0x7603
-|vendor.id usb 0x03f0
-&device.id usb 0x011c
-|vendor.id usb 0x04a5
-&device.id usb 0x9000
-|vendor.id usb 0x04bb
-&device.id usb 0x0919
-|vendor.id usb 0x05dd
-&device.id usb 0xff31
-|vendor.id usb 0x066b
-&device.id usb 0x2211
-|vendor.id usb 0x069a
-&device.id usb 0x0320
-|vendor.id usb 0x069a
-&device.id usb 0x0821
-|vendor.id usb 0x0864
-&device.id usb 0x4100
-|vendor.id usb 0x0b3b
-&device.id usb 0x1612
-|vendor.id usb 0x0cde
-&device.id usb 0x0001
-|vendor.id usb 0x0d5c
-&device.id usb 0xa001
-|vendor.id usb 0x0d8e
-&device.id usb 0x7100
-|vendor.id usb 0x0d8e
-&device.id usb 0x7110
-|vendor.id usb 0x8086
-&device.id usb 0x0200
-+driver.module.modprobe at76c503-i3861
-+requires atmel-firmware
-
- vendor.id usb 0x03eb
-&device.id usb 0x7604
-|vendor.id usb 0x055d
-&device.id usb 0xa000
-+driver.module.modprobe at76c503-i3863
-+requires atmel-firmware
-
- vendor.id usb 0x03eb
-&device.id usb 0x7606
-+driver.module.modprobe at76c505-rfmd
-+requires atmel-firmware
-
- vendor.id usb 0x03eb
-&device.id usb 0x7613
-|vendor.id usb 0x07aa
-&device.id usb 0x7613
-|vendor.id usb 0x0db0
-&device.id usb 0x1020
-|vendor.id usb 0x12fd
-&device.id usb 0x1001
-|vendor.id usb 0x1371
-&device.id usb 0x0013+0x0002
-|vendor.id usb 0x1915
-&device.id usb 0x2233
-+driver.module.modprobe at76c505-rfmd2958
-+requires atmel-firmware
-
- vendor.id usb 0x03eb
-&device.id usb 0x7614
-|vendor.id usb 0x03eb
-&device.id usb 0x7617
-+driver.module.modprobe at76c505a-rfmd2958
-+requires atmel-firmware
-
- vendor.id usb 0x083a
-&device.id usb 0x3501
-|vendor.id usb 0x0d5c
-&device.id usb 0xa002
-+driver.module.modprobe at76c503-rfmd-acc
-+requires atmel-firmware
-
- vendor.id usb 0x0a5c
-&device.id usb 0x2033
-+requires bluez-firmware
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# usbnet devices
-
- vendor.id usb 0x0402
-&device.id usb 0x5632
-|vendor.id usb 0x0411
-&device.id usb 0x003d
-|vendor.id usb 0x049f
-&device.id usb 0x505a
-|vendor.id usb 0x050d
-&device.id usb 0x0004
-|vendor.id usb 0x0525
-&device.id usb 0x1080
-|vendor.id usb 0x0525
-&device.id usb 0x2888
-|vendor.id usb 0x0525
-&device.id usb 0x9901
-|vendor.id usb 0x0547
-&device.id usb 0x2720
-|vendor.id usb 0x0547
-&device.id usb 0x2727
-|vendor.id usb 0x0557
-&device.id usb 0x2009
-|vendor.id usb 0x056c
-&device.id usb 0x8100
-|vendor.id usb 0x05e3
-&device.id usb 0x0502
-|vendor.id usb 0x067b
-&device.id usb 0x0000+0x0002
-|vendor.id usb 0x06d0
-&device.id usb 0x0622
-|vendor.id usb 0x077b
-&device.id usb 0x2226
-|vendor.id usb 0x07b8
-&device.id usb 0x420a
-|vendor.id usb 0x0846
-&device.id usb 0x1040
-|vendor.id usb 0x08dd
-&device.id usb 0x90ff
-|vendor.id usb 0x0b95
-&device.id usb 0x1720
-|vendor.id usb 0x0e7e
-&device.id usb 0x1001
-|vendor.id usb 0x2001
-&device.id usb 0x1a00
-|vendor.id usb 0x6189
-&device.id usb 0x182d
-|vendor.id usb 0x8086
-&device.id usb 0x07d3
-+driver.module.modprobe usbnet
-+baseclass.id 0x002
-+subclass.id 0x91
-
+++ /dev/null
- vendor.id pci 0x0000
-+vendor.name Gammagraphx, Inc.
-
- vendor.id pci 0x001a
-+vendor.name Ascend Communications, Inc.
-
- vendor.id pci 0x0033
-+vendor.name Paradyne corp.
-
- vendor.id pci 0x003d
-+vendor.name Lockheed Martin-Marietta Corp
-
- vendor.id pci 0x0059
-+vendor.name Tiger Jet Network Inc. (Wrong ID)
-
- vendor.id pci 0x0070
-+vendor.name Hauppauge computer works Inc.
-
- vendor.id pci 0x0070
-&device.id pci 0x4000
-+device.name WinTV PVR-350
-
- vendor.id pci 0x0070
-&device.id pci 0x4001
-+device.name WinTV PVR-250 (v1)
-
- vendor.id pci 0x0070
-&device.id pci 0x4009
-+device.name WinTV PVR-250
-
- vendor.id pci 0x0070
-&device.id pci 0x4801
-+device.name WinTV PVR-250 MCE
-
- vendor.id pci 0x0071
-+vendor.name Nebula Electronics Ltd.
-
- vendor.id pci 0x0095
-+vendor.name Silicon Image, Inc. (Wrong ID)
-
- vendor.id pci 0x0095
-&device.id pci 0x0680
-+device.name Ultra ATA/133 IDE RAID CONTROLLER CARD
-
- vendor.id pci 0x0100
-+vendor.name Ncipher Corp Ltd
-
- vendor.id pci 0x018a
-+vendor.name LevelOne
-
- vendor.id pci 0x018a
-&device.id pci 0x0106
-+device.name FPC-0106TX misprogrammed [RTL81xx]
-
- vendor.id pci 0x021b
-+vendor.name Compaq Computer Corporation
-
- vendor.id pci 0x021b
-&device.id pci 0x8139
-+device.name HNE-300 (RealTek RTL8139c) [iPaq Networking]
-
- vendor.id pci 0x0291
-+vendor.name Davicom Semiconductor, Inc.
-
- vendor.id pci 0x0291
-&device.id pci 0x8212
-+device.name DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)
-
- vendor.id pci 0x02ac
-+vendor.name SpeedStream
-
- vendor.id pci 0x02ac
-&device.id pci 0x1012
-+device.name 1012 PCMCIA 10/100 Ethernet Card [RTL81xx]
-
- vendor.id pci 0x0357
-+vendor.name TTTech AG
-
- vendor.id pci 0x0357
-&device.id pci 0x000a
-+device.name TTP-Monitoring Card V2.0
-
- vendor.id pci 0x0432
-+vendor.name SCM Microsystems, Inc.
-
- vendor.id pci 0x05e3
-+vendor.name CyberDoor
-
- vendor.id pci 0x05e3
-&device.id pci 0x0701
-+device.name CBD516
-
- vendor.id pci 0x0675
-+vendor.name Dynalink
-
- vendor.id pci 0x0675
-&device.id pci 0x1700
-+device.name IS64PH ISDN Adapter
-
- vendor.id pci 0x0675
-&device.id pci 0x1702
-+device.name IS64PH ISDN Adapter
-
- vendor.id pci 0x0925
-+vendor.name VIA Technologies, Inc. (Wrong ID)
-
- vendor.id pci 0x09c1
-+vendor.name Arris
-
- vendor.id pci 0x09c1
-&device.id pci 0x0704
-+device.name CM 200E Cable Modem
-
- vendor.id pci 0x0a89
-+vendor.name BREA Technologies Inc
-
- vendor.id pci 0x0b49
-+vendor.name ASCII Corporation
-
- vendor.id pci 0x0b49
-&device.id pci 0x064f
-+device.name Trance Vibrator
-
- vendor.id pci 0x0e11
-+vendor.name Compaq Computer Corporation
-
- vendor.id pci 0x0e11
-&device.id pci 0x0001
-+device.name PCI to EISA Bridge
-
- vendor.id pci 0x0e11
-&device.id pci 0x0002
-+device.name PCI to ISA Bridge
-
- vendor.id pci 0x0e11
-&device.id pci 0x0046
-+device.name Smart Array 64xx
-
- vendor.id pci 0x0e11
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x409a
-+subdevice.name Smart Array 641
-
- vendor.id pci 0x0e11
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x409b
-+subdevice.name Smart Array 642
-
- vendor.id pci 0x0e11
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x409c
-+subdevice.name Smart Array 6400
-
- vendor.id pci 0x0e11
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x409d
-+subdevice.name Smart Array 6400 EM
-
- vendor.id pci 0x0e11
-&device.id pci 0x0049
-+device.name NC7132 Gigabit Upgrade Module
-
- vendor.id pci 0x0e11
-&device.id pci 0x004a
-+device.name NC6136 Gigabit Server Adapter
-
- vendor.id pci 0x0e11
-&device.id pci 0x007c
-+device.name NC7770 1000BaseTX
-
- vendor.id pci 0x0e11
-&device.id pci 0x007d
-+device.name NC6770 1000BaseTX
-
- vendor.id pci 0x0e11
-&device.id pci 0x0085
-+device.name NC7780 1000BaseTX
-
- vendor.id pci 0x0e11
-&device.id pci 0x00bb
-+device.name NC7760
-
- vendor.id pci 0x0e11
-&device.id pci 0x00ca
-+device.name NC7771
-
- vendor.id pci 0x0e11
-&device.id pci 0x00cb
-+device.name NC7781
-
- vendor.id pci 0x0e11
-&device.id pci 0x00cf
-+device.name NC7772
-
- vendor.id pci 0x0e11
-&device.id pci 0x00d0
-+device.name NC7782
-
- vendor.id pci 0x0e11
-&device.id pci 0x00d1
-+device.name NC7783
-
- vendor.id pci 0x0e11
-&device.id pci 0x00e3
-+device.name NC7761
-
- vendor.id pci 0x0e11
-&device.id pci 0x0508
-+device.name Netelligent 4/16 Token Ring
-
- vendor.id pci 0x0e11
-&device.id pci 0x1000
-+device.name Triflex/Pentium Bridge, Model 1000
-
- vendor.id pci 0x0e11
-&device.id pci 0x2000
-+device.name Triflex/Pentium Bridge, Model 2000
-
- vendor.id pci 0x0e11
-&device.id pci 0x3032
-+device.name QVision 1280/p
-
- vendor.id pci 0x0e11
-&device.id pci 0x3033
-+device.name QVision 1280/p
-
- vendor.id pci 0x0e11
-&device.id pci 0x3034
-+device.name QVision 1280/p
-
- vendor.id pci 0x0e11
-&device.id pci 0x4000
-+device.name 4000 [Triflex]
-
- vendor.id pci 0x0e11
-&device.id pci 0x4030
-+device.name SMART-2/P
-
- vendor.id pci 0x0e11
-&device.id pci 0x4031
-+device.name SMART-2SL
-
- vendor.id pci 0x0e11
-&device.id pci 0x4032
-+device.name Smart Array 3200
-
- vendor.id pci 0x0e11
-&device.id pci 0x4033
-+device.name Smart Array 3100ES
-
- vendor.id pci 0x0e11
-&device.id pci 0x4034
-+device.name Smart Array 221
-
- vendor.id pci 0x0e11
-&device.id pci 0x4040
-+device.name Integrated Array
-
- vendor.id pci 0x0e11
-&device.id pci 0x4048
-+device.name Compaq Raid LC2
-
- vendor.id pci 0x0e11
-&device.id pci 0x4050
-+device.name Smart Array 4200
-
- vendor.id pci 0x0e11
-&device.id pci 0x4051
-+device.name Smart Array 4250ES
-
- vendor.id pci 0x0e11
-&device.id pci 0x4058
-+device.name Smart Array 431
-
- vendor.id pci 0x0e11
-&device.id pci 0x4070
-+device.name Smart Array 5300
-
- vendor.id pci 0x0e11
-&device.id pci 0x4080
-+device.name Smart Array 5i
-
- vendor.id pci 0x0e11
-&device.id pci 0x4082
-+device.name Smart Array 532
-
- vendor.id pci 0x0e11
-&device.id pci 0x4083
-+device.name Smart Array 5312
-
- vendor.id pci 0x0e11
-&device.id pci 0x4091
-+device.name Smart Array 6i
-
- vendor.id pci 0x0e11
-&device.id pci 0x409a
-+device.name Smart Array 641
-
- vendor.id pci 0x0e11
-&device.id pci 0x409b
-+device.name Smart Array 642
-
- vendor.id pci 0x0e11
-&device.id pci 0x409c
-+device.name Smart Array 6400
-
- vendor.id pci 0x0e11
-&device.id pci 0x409d
-+device.name Smart Array 6400 EM
-
- vendor.id pci 0x0e11
-&device.id pci 0x6010
-+device.name HotPlug PCI Bridge 6010
-
- vendor.id pci 0x0e11
-&device.id pci 0x7020
-+device.name USB Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0ec
-+device.name Fibre Channel Host Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0f0
-+device.name Advanced System Management Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0f3
-+device.name Triflex PCI to ISA Bridge
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0f7
-+device.name PCI Hotplug Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0f7
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x002a
-+subdevice.name PCI Hotplug Controller A
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0f7
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x002b
-+subdevice.name PCI Hotplug Controller B
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0f8
-+device.name ZFMicro Chipset USB
-
- vendor.id pci 0x0e11
-&device.id pci 0xa0fc
-+device.name FibreChannel HBA Tachyon
-
- vendor.id pci 0x0e11
-&device.id pci 0xae10
-+device.name Smart-2/P RAID Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae10
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4030
-+subdevice.name Smart-2/P Array Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae10
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4031
-+subdevice.name Smart-2SL Array Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae10
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4032
-+subdevice.name Smart Array Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae10
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4033
-+subdevice.name Smart 3100ES Array Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae29
-+device.name MIS-L
-
- vendor.id pci 0x0e11
-&device.id pci 0xae2a
-+device.name MPC
-
- vendor.id pci 0x0e11
-&device.id pci 0xae2b
-+device.name MIS-E
-
- vendor.id pci 0x0e11
-&device.id pci 0xae31
-+device.name System Management Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae32
-+device.name Compaq Netelligent 10/100 TX PCI UTP TLAN 2.3
-
- vendor.id pci 0x0e11
-&device.id pci 0xae33
-+device.name Triflex Dual EIDE Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xae34
-+device.name Compaq Netelligent 10 T PCI UTP TLAN 2.3
-
- vendor.id pci 0x0e11
-&device.id pci 0xae35
-+device.name Compaq Integrated NetFlex-3/P ThunderLAN 2.3
-
- vendor.id pci 0x0e11
-&device.id pci 0xae40
-+device.name Compaq Netelligent Dual 10/100 TX PCI TLAN 3.03
-
- vendor.id pci 0x0e11
-&device.id pci 0xae43
-+device.name Compaq Integrated Netelligent 10/100 TX PCI TLAN 2.3
-
- vendor.id pci 0x0e11
-&device.id pci 0xae69
-+device.name CETUS-L
-
- vendor.id pci 0x0e11
-&device.id pci 0xae6c
-+device.name Northstar
-
- vendor.id pci 0x0e11
-&device.id pci 0xae6d
-+device.name NorthStar CPU to PCI Bridge
-
- vendor.id pci 0x0e11
-&device.id pci 0xb011
-+device.name Netelligent 10/100 TX Embedded UTP
-
- vendor.id pci 0x0e11
-&device.id pci 0xb012
-+device.name Compaq Netelligent 10 T/2 UTP/Coax PCI
-
- vendor.id pci 0x0e11
-&device.id pci 0xb01e
-+device.name NC3120 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb01f
-+device.name NC3122 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb02f
-+device.name NC1120 Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb030
-+device.name Compaq Netelligent 10/100 TX Embedded UTP/Coax Controller (5100)
-
- vendor.id pci 0x0e11
-&device.id pci 0xb04a
-+device.name 10/100 TX PCI Intel WOL UTP Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xb060
-+device.name Smart Array 5300 Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0c6
-+device.name NC3161 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0c7
-+device.name NC3160 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0d7
-+device.name NC3121 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0dd
-+device.name NC3131 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0de
-+device.name NC3132 Fast Ethernet Module
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0df
-+device.name NC6132 Gigabit Module
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0e0
-+device.name NC6133 Gigabit Module
-
- vendor.id pci 0x0e11
-&device.id pci 0xb0e1
-+device.name NC3133 Fast Ethernet Module
-
- vendor.id pci 0x0e11
-&device.id pci 0xb123
-+device.name NC6134 Gigabit NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb134
-+device.name NC3163 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb13c
-+device.name NC3162 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb144
-+device.name NC3123 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb163
-+device.name NC3134 Fast Ethernet NIC
-
- vendor.id pci 0x0e11
-&device.id pci 0xb164
-+device.name NC3165 Fast Ethernet Upgrade Module
-
- vendor.id pci 0x0e11
-&device.id pci 0xb178
-+device.name Smart Array 5i/532
-
- vendor.id pci 0x0e11
-&device.id pci 0xb178
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4080
-+subdevice.name Smart Array 5i
-
- vendor.id pci 0x0e11
-&device.id pci 0xb178
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4082
-+subdevice.name Smart Array 532
-
- vendor.id pci 0x0e11
-&device.id pci 0xb178
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4083
-+subdevice.name Smart Array 5312
-
- vendor.id pci 0x0e11
-&device.id pci 0xb1a4
-+device.name NC7131 Gigabit Server Adapter
-
- vendor.id pci 0x0e11
-&device.id pci 0xb200
-+device.name Memory Hot-Plug Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xb203
-+device.name Integrated Lights Out Controller
-
- vendor.id pci 0x0e11
-&device.id pci 0xb204
-+device.name Integrated Lights Out Processor
-
- vendor.id pci 0x0e11
-&device.id pci 0xf130
-+device.name Compaq NetFlex-3/P ThunderLAN 1.0
-
- vendor.id pci 0x0e11
-&device.id pci 0xf150
-+device.name Compaq NetFlex-3/P ThunderLAN 2.3
-
- vendor.id pci 0x0e55
-+vendor.name HaSoTec GmbH
-
- vendor.id pci 0x1000
-+vendor.name LSI Logic / Symbios Logic
-
- vendor.id pci 0x1000
-&device.id pci 0x0001
-+device.name 53c810
-
- vendor.id pci 0x1000
-&device.id pci 0x0001
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C810AE PCI to SCSI I/O Processor
-
- vendor.id pci 0x1000
-&device.id pci 0x0002
-+device.name 53c820
-
- vendor.id pci 0x1000
-&device.id pci 0x0003
-+device.name 53c825
-
- vendor.id pci 0x1000
-&device.id pci 0x0003
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide)
-
- vendor.id pci 0x1000
-&device.id pci 0x0004
-+device.name 53c815
-
- vendor.id pci 0x1000
-&device.id pci 0x0005
-+device.name 53c810AP
-
- vendor.id pci 0x1000
-&device.id pci 0x0006
-+device.name 53c860
-
- vendor.id pci 0x1000
-&device.id pci 0x0006
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C860E PCI to Ultra SCSI I/O Processor
-
- vendor.id pci 0x1000
-&device.id pci 0x000a
-+device.name 53c1510
-
- vendor.id pci 0x1000
-&device.id pci 0x000a
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode)
-
- vendor.id pci 0x1000
-&device.id pci 0x000b
-+device.name 53C896/897
-
- vendor.id pci 0x1000
-&device.id pci 0x000b
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x6004
-+subdevice.name EOB003 Series SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000b
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x000b
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1010
-+subdevice.name LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000b
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1020
-+subdevice.name LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000b
-&subvendor.id pci 0x13e9
-&subdevice.id pci 0x1000
-+subdevice.name 6221L-4U
-
- vendor.id pci 0x1000
-&device.id pci 0x000c
-+device.name 53c895
-
- vendor.id pci 0x1000
-&device.id pci 0x000c
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1010
-+subdevice.name LSI8951U PCI to Ultra2 SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000c
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1020
-+subdevice.name LSI8952U PCI to Ultra2 SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000c
-&subvendor.id pci 0x1de1
-&subdevice.id pci 0x3906
-+subdevice.name DC-390U2B SCSI adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000c
-&subvendor.id pci 0x1de1
-&subdevice.id pci 0x3907
-+subdevice.name DC-390U2W
-
- vendor.id pci 0x1000
-&device.id pci 0x000d
-+device.name 53c885
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-+device.name 53c875
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x7004
-+subdevice.name Embedded Ultra Wide SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C876/E PCI to Dual Channel SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1010
-+subdevice.name LSI22801 PCI to Dual Channel Ultra SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1020
-+subdevice.name LSI22802 PCI to Dual Channel Ultra SCSI host adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8760
-+subdevice.name FirePort 40 Dual SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x1de1
-&subdevice.id pci 0x3904
-+subdevice.name DC390F/U Ultra Wide SCSI Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1000
-+subdevice.name CC7/CR7/CP7/VC7/VP7/VR7 mainboard
-
- vendor.id pci 0x1000
-&device.id pci 0x000f
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x1000
-&device.id pci 0x0010
-+device.name 53C1510
-
- vendor.id pci 0x1000
-&device.id pci 0x0010
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4040
-+subdevice.name Integrated Array Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0010
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4048
-+subdevice.name RAID LC2 Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0010
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name 53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode)
-
- vendor.id pci 0x1000
-&device.id pci 0x0012
-+device.name 53c895a
-
- vendor.id pci 0x1000
-&device.id pci 0x0012
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C895A PCI to Ultra2 SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0013
-+device.name 53c875a
-
- vendor.id pci 0x1000
-&device.id pci 0x0013
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C875A PCI to Ultra SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0020
-+device.name 53c1010 Ultra3 SCSI Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0020
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0020
-&subvendor.id pci 0x1de1
-&subdevice.id pci 0x1020
-+subdevice.name DC-390U3W
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-+device.name 53c1010 66MHz Ultra3 SCSI Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1010
-+subdevice.name Asus TR-DLS onboard 53C1010-66
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-&subvendor.id pci 0x124b
-&subdevice.id pci 0x1070
-+subdevice.name PMC-USCSI3
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1300
-+subdevice.name P017 mezzanine (32-bit PMC)
-
- vendor.id pci 0x1000
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1310
-+subdevice.name P017 mezzanine (64-bit PMC)
-
- vendor.id pci 0x1000
-&device.id pci 0x0030
-+device.name 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
-
- vendor.id pci 0x1000
-&device.id pci 0x0030
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0123
-+subdevice.name PowerEdge 2600
-
- vendor.id pci 0x1000
-&device.id pci 0x0030
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x014a
-+subdevice.name PowerEdge 1750
-
- vendor.id pci 0x1000
-&device.id pci 0x0030
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x016c
-+subdevice.name PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4)
-
- vendor.id pci 0x1000
-&device.id pci 0x0030
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x1010
-+subdevice.name LSI U320 SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0031
-+device.name 53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
-
- vendor.id pci 0x1000
-&device.id pci 0x0032
-+device.name 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI
-
- vendor.id pci 0x1000
-&device.id pci 0x0032
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1000
-+subdevice.name LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0033
-+device.name 1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI
-
- vendor.id pci 0x1000
-&device.id pci 0x0040
-+device.name 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI
-
- vendor.id pci 0x1000
-&device.id pci 0x0040
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0033
-+subdevice.name MegaRAID SCSI 320-2XR
-
- vendor.id pci 0x1000
-&device.id pci 0x0040
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0066
-+subdevice.name MegaRAID SCSI 320-2XRWS
-
- vendor.id pci 0x1000
-&device.id pci 0x0041
-+device.name 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
-
- vendor.id pci 0x1000
-&device.id pci 0x008f
-+device.name 53c875J
-
- vendor.id pci 0x1000
-&device.id pci 0x008f
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8000
-+subdevice.name FirePort 40 SCSI Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x008f
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8760
-+subdevice.name FirePort 40 Dual SCSI Host Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-+device.name MegaRAID
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0530
-+subdevice.name MegaRAID 530 SCSI 320-0X RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0531
-+subdevice.name MegaRAID 531 SCSI 320-4X RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0532
-+subdevice.name MegaRAID 532 SCSI 320-2X RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0531
-+subdevice.name PowerEdge Expandable RAID Controller 4/QC
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0533
-+subdevice.name PowerEdge Expandable RAID Controller 4/QC
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0530
-+subdevice.name MegaRAID Intel RAID Controller SRCZCRX
-
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0532
-+subdevice.name MegaRAID Intel RAID Controller SRCU42X
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-+device.name MegaRAID
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0001
-+subdevice.name MegaRAID SCSI 320-1E RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0002
-+subdevice.name MegaRAID SCSI 320-2E RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x004d
-+subdevice.name MegaRAID ACER ROMB-2E RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0001
-+subdevice.name PowerEdge RAID Controller PERC4e/SC
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0002
-+subdevice.name PowerEdge RAID Controller PERC4e/DC
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1734
-&subdevice.id pci 0x1065
-+subdevice.name FSC MegaRAID PCI Express ROMB
-
- vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0002
-+subdevice.name MegaRAID Intel RAID Controller SRCU42E
-
- vendor.id pci 0x1000
-&device.id pci 0x0409
-+device.name MegaRAID
-
- vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x3004
-+subdevice.name MegaRAID SATA 300-4X RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x3008
-+subdevice.name MegaRAID SATA 300-8X RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3008
-+subdevice.name MegaRAID RAID Controller SRCS28X
-
- vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3431
-+subdevice.name MegaRAID RAID Controller Alief SROMBU42E
-
- vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3499
-+subdevice.name MegaRAID RAID Controller Harwich SROMBU42E
-
- vendor.id pci 0x1000
-&device.id pci 0x0621
-+device.name FC909 Fibre Channel Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0622
-+device.name FC929 Fibre Channel Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0622
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1020
-+subdevice.name 44929 O Dual Fibre Channel card
-
- vendor.id pci 0x1000
-&device.id pci 0x0623
-+device.name FC929 LAN
-
- vendor.id pci 0x1000
-&device.id pci 0x0624
-+device.name FC919 Fibre Channel Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0625
-+device.name FC919 LAN
-
- vendor.id pci 0x1000
-&device.id pci 0x0626
-+device.name FC929X Fibre Channel Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0626
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x1010
-+subdevice.name 7202-XP-LC Dual Fibre Channel card
-
- vendor.id pci 0x1000
-&device.id pci 0x0627
-+device.name FC929X LAN
-
- vendor.id pci 0x1000
-&device.id pci 0x0628
-+device.name FC919X Fibre Channel Adapter
-
- vendor.id pci 0x1000
-&device.id pci 0x0629
-+device.name FC919X LAN
-
- vendor.id pci 0x1000
-&device.id pci 0x0701
-+device.name 83C885 NT50 DigitalScape Fast Ethernet
-
- vendor.id pci 0x1000
-&device.id pci 0x0702
-+device.name Yellowfin G-NIC gigabit ethernet
-
- vendor.id pci 0x1000
-&device.id pci 0x0702
-&subvendor.id pci 0x1318
-&subdevice.id pci 0x0000
-+subdevice.name PEI100X
-
- vendor.id pci 0x1000
-&device.id pci 0x0804
-+device.name SA2010
-
- vendor.id pci 0x1000
-&device.id pci 0x0805
-+device.name SA2010ZC
-
- vendor.id pci 0x1000
-&device.id pci 0x0806
-+device.name SA2020
-
- vendor.id pci 0x1000
-&device.id pci 0x0807
-+device.name SA2020ZC
-
- vendor.id pci 0x1000
-&device.id pci 0x0901
-+device.name 61C102
-
- vendor.id pci 0x1000
-&device.id pci 0x1000
-+device.name 63C815
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-+device.name MegaRAID
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0518
-+subdevice.name MegaRAID 518 SCSI 320-2 Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0520
-+subdevice.name MegaRAID 520 SCSI 320-1 Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0522
-+subdevice.name MegaRAID 522 i4 133 RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0523
-+subdevice.name MegaRAID SATA 150-6 RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x4523
-+subdevice.name MegaRAID SATA 150-4 RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0xa520
-+subdevice.name MegaRAID ZCR SCSI 320-0 Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0518
-+subdevice.name MegaRAID 518 DELL PERC 4/DC RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0520
-+subdevice.name MegaRAID 520 DELL PERC 4/SC RAID Controller
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0531
-+subdevice.name PowerEdge Expandable RAID Controller 4/QC
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0533
-+subdevice.name PowerEdge Expandable RAID Controller 4/QC
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0520
-+subdevice.name MegaRAIDRAID Controller SRCU41L
-
- vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0523
-+subdevice.name MegaRAID RAID Controller SRCS16
-
- vendor.id pci 0x1001
-+vendor.name Kolter Electronic
-
- vendor.id pci 0x1001
-&device.id pci 0x0010
-+device.name PCI 1616 Measurement card with 32 digital I/O lines
-
- vendor.id pci 0x1001
-&device.id pci 0x0011
-+device.name OPTO-PCI Opto-Isolated digital I/O board
-
- vendor.id pci 0x1001
-&device.id pci 0x0012
-+device.name PCI-AD/DA Analogue I/O board
-
- vendor.id pci 0x1001
-&device.id pci 0x0013
-+device.name PCI-OPTO-RELAIS Digital I/O board with relay outputs
-
- vendor.id pci 0x1001
-&device.id pci 0x0014
-+device.name PCI-Counter/Timer Counter Timer board
-
- vendor.id pci 0x1001
-&device.id pci 0x0015
-+device.name PCI-DAC416 Analogue output board
-
- vendor.id pci 0x1001
-&device.id pci 0x0016
-+device.name PCI-MFB Analogue I/O board
-
- vendor.id pci 0x1001
-&device.id pci 0x0017
-+device.name PROTO-3 PCI Prototyping board
-
- vendor.id pci 0x1001
-&device.id pci 0x9100
-+device.name INI-9100/9100W SCSI Host
-
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x3150
-+device.name M24 1P [Radeon Mobility X600]
-
- vendor.id pci 0x1002
-&device.id pci 0x3154
-+device.name M24 1T [FireGL M24 GL]
-
- vendor.id pci 0x1002
-&device.id pci 0x3e50
-+device.name RV380 0x3e50 [Radeon X600]
-
- vendor.id pci 0x1002
-&device.id pci 0x3e54
-+device.name RV380 0x3e54 [FireGL V3200]
-
- vendor.id pci 0x1002
-&device.id pci 0x3e70
-+device.name RV380 [Radeon X600] Secondary
-
- vendor.id pci 0x1002
-&device.id pci 0x4136
-+device.name Radeon IGP 320 M
-
- vendor.id pci 0x1002
-&device.id pci 0x4137
-+device.name Radeon IGP330/340/350
-
- vendor.id pci 0x1002
-&device.id pci 0x4144
-+device.name R300 AD [Radeon 9500 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4145
-+device.name R300 AE [Radeon 9700 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4146
-+device.name R300 AF [Radeon 9700 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4147
-+device.name R300 AG [FireGL Z1/X1]
-
- vendor.id pci 0x1002
-&device.id pci 0x4148
-+device.name R350 AH [Radeon 9800]
-
- vendor.id pci 0x1002
-&device.id pci 0x4149
-+device.name R350 AI [Radeon 9800]
-
- vendor.id pci 0x1002
-&device.id pci 0x414a
-+device.name R350 AJ [Radeon 9800]
-
- vendor.id pci 0x1002
-&device.id pci 0x414b
-+device.name R350 AK [Fire GL X2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-+device.name RV350 AP [Radeon 9600]
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name R9600 Pro primary (Asus OEM for HP)
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0003
-+subdevice.name R9600 Pro secondary (Asus OEM for HP)
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4024
-+subdevice.name Giga-Byte GV-R96128D Primary
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2064
-+subdevice.name PowerColor R96A-C3N
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2066
-+subdevice.name PowerColor R96A-C3N
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c19
-+subdevice.name Sapphire Atlantis Radeon 9600 Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c29
-+subdevice.name GC-R9600PRO Primary [Sapphire]
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x17ee
-&subdevice.id pci 0x2002
-+subdevice.name Radeon 9600 256Mb Primary
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0101
-+subdevice.name GC-R9600PRO Primary
-
- vendor.id pci 0x1002
-&device.id pci 0x4151
-+device.name RV350 AQ [Radeon 9600]
-
- vendor.id pci 0x1002
-&device.id pci 0x4151
-&subvendor.id pci 0x1043
-&subdevice.id pci 0xc004
-+subdevice.name A9600SE
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-+device.name RV350 AR [Radeon 9600]
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9600XT
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-&subvendor.id pci 0x1043
-&subdevice.id pci 0xc002
-+subdevice.name Radeon 9600 XT TVD
-
- vendor.id pci 0x1002
-&device.id pci 0x4153
-+device.name RV350 AS [Radeon 9600 AS]
-
- vendor.id pci 0x1002
-&device.id pci 0x4154
-+device.name RV350 AT [Fire GL T2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4155
-+device.name RV350 AU [Fire GL T2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4156
-+device.name RV350 AV [Fire GL T2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4157
-+device.name RV350 AW [Fire GL T2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4158
-+device.name 68800AX [Mach32]
-
- vendor.id pci 0x1002
-&device.id pci 0x4164
-+device.name R300 AD [Radeon 9500 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4165
-+device.name R300 AE [Radeon 9700 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4166
-+device.name R300 AF [Radeon 9700 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4168
-+device.name Radeon R350 [Radeon 9800] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4170
-+device.name RV350 AP [Radeon 9600] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4170
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4025
-+subdevice.name Giga-Byte GV-R96128D Secondary
-
- vendor.id pci 0x1002
-&device.id pci 0x4170
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2067
-+subdevice.name PowerColor R96A-C3N (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4170
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c28
-+subdevice.name GC-R9600PRO Secondary [Sapphire]
-
- vendor.id pci 0x1002
-&device.id pci 0x4170
-&subvendor.id pci 0x17ee
-&subdevice.id pci 0x2003
-+subdevice.name Radeon 9600 256Mb Secondary
-
- vendor.id pci 0x1002
-&device.id pci 0x4170
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0100
-+subdevice.name GC-R9600PRO Secondary
-
- vendor.id pci 0x1002
-&device.id pci 0x4171
-+device.name RV350 AQ [Radeon 9600] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4171
-&subvendor.id pci 0x1043
-&subdevice.id pci 0xc005
-+subdevice.name A9600SE (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4172
-+device.name RV350 AR [Radeon 9600] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4172
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0003
-+subdevice.name Radeon 9600XT (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4172
-&subvendor.id pci 0x1043
-&subdevice.id pci 0xc003
-+subdevice.name A9600XT (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4173
-+device.name RV350 ?? [Radeon 9550] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4237
-+device.name Radeon 7000 IGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4242
-+device.name R200 BB [Radeon All in Wonder 8500DV]
-
- vendor.id pci 0x1002
-&device.id pci 0x4242
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x02aa
-+subdevice.name Radeon 8500 AIW DV Edition
-
- vendor.id pci 0x1002
-&device.id pci 0x4243
-+device.name R200 BC [Radeon All in Wonder 8500]
-
- vendor.id pci 0x1002
-&device.id pci 0x4336
-+device.name Radeon Mobility U1
-
- vendor.id pci 0x1002
-&device.id pci 0x4336
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400 builtin Video
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-+device.name Radeon IGP 330M/340M/350M
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x053a
-+subdevice.name ThinkPad R40e (2684-HVG) builtin VGA controller
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0850
-+subdevice.name Radeon IGP 345M
-
- vendor.id pci 0x1002
-&device.id pci 0x4341
-+device.name IXP150 AC'97 Audio Controller
-
- vendor.id pci 0x1002
-&device.id pci 0x4345
-+device.name EHCI USB Controller
-
- vendor.id pci 0x1002
-&device.id pci 0x4347
-+device.name OHCI USB Controller #1
-
- vendor.id pci 0x1002
-&device.id pci 0x4348
-+device.name OHCI USB Controller #2
-
- vendor.id pci 0x1002
-&device.id pci 0x434d
-+device.name IXP AC'97 Modem
-
- vendor.id pci 0x1002
-&device.id pci 0x4353
-+device.name ATI SMBus
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-
- vendor.id pci 0x1002
-&device.id pci 0x4437
-+device.name Radeon Mobility 7000 IGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-
- vendor.id pci 0x1002
-&device.id pci 0x4654
-+device.name Mach64 VT
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-+device.name 3D Rage Pro AGP 1X/2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0040
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0061
-+subdevice.name Rage Pro AIW AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0062
-+subdevice.name Rage Pro AIW AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0063
-+subdevice.name Rage Pro AIW AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0080
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0084
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4742
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x8001
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0082
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x4082
-+subdevice.name Optiplex GX1 Onboard Display Adapter
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x8082
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x1028
-&subdevice.id pci 0xc082
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4152
-+subdevice.name Xpert 98D AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x464a
-+subdevice.name Rage Pro Turbo AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4744
-+device.name 3D Rage Pro AGP 1X
-
- vendor.id pci 0x1002
-&device.id pci 0x4744
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4744
-+subdevice.name Rage Pro Turbo AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4747
-+device.name 3D Rage Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-+device.name 3D Rage Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0061
-+subdevice.name Rage Pro AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0062
-+subdevice.name Rage Pro AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x474c
-+device.name Rage XC
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-+device.name Rage XL AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0004
-+subdevice.name Xpert 98 RXL AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Xpert 98 RXL AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0080
-+subdevice.name Rage XL AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0084
-+subdevice.name Xpert 98 AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x474d
-+subdevice.name Rage XL AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x806a
-+subdevice.name Rage XL AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-+device.name Rage XC AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x474e
-+subdevice.name Rage XC AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-+device.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x474f
-+subdevice.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-+device.name 3D Rage Pro 215GP
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0040
-+subdevice.name Rage Pro Turbo
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name Rage Pro Turbo
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0080
-+subdevice.name Rage Pro Turbo
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0084
-+subdevice.name Rage Pro Turbo
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4750
-+subdevice.name Rage Pro Turbo
-
- vendor.id pci 0x1002
-&device.id pci 0x4751
-+device.name 3D Rage Pro 215GQ
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-+device.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4752
-+subdevice.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x8008
-+subdevice.name Rage XL
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00ce
-+subdevice.name PowerEdge 1400
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d1
-+subdevice.name PowerEdge 2550
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d9
-+subdevice.name PowerEdge 2500
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3411
-+subdevice.name SDS2 Mainboard
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x1002
-&device.id pci 0x4753
-+device.name Rage XC
-
- vendor.id pci 0x1002
-&device.id pci 0x4753
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4753
-+subdevice.name Rage XC
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-
- vendor.id pci 0x1002
-&device.id pci 0x4755
-+device.name 3D Rage II+ 215GTB [Mach64 GTB]
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4756
-+subdevice.name Rage IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-+device.name 3D Rage IIC AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4757
-+subdevice.name Rage IIC AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0089
-+subdevice.name Rage 3D IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x4082
-+subdevice.name Rage 3D IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x8082
-+subdevice.name Rage 3D IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-&subvendor.id pci 0x1028
-&subdevice.id pci 0xc082
-+subdevice.name Rage 3D IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x4758
-+device.name 210888GX [Mach64 GX]
-
- vendor.id pci 0x1002
-&device.id pci 0x4759
-+device.name 3D Rage IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-+device.name 3D Rage IIC AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0084
-+subdevice.name Rage 3D Pro AGP 2x XPERT 98
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0087
-+subdevice.name Rage 3D IIC
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x475a
-+subdevice.name Rage IIC AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4964
-+device.name Radeon RV250 Id [Radeon 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x4965
-+device.name Radeon RV250 Ie [Radeon 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-+device.name Radeon RV250 If [Radeon 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x10f1
-&subdevice.id pci 0x0002
-+subdevice.name RV250 If [Tachyon G9000 PRO]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2039
-+subdevice.name RV250 If [Radeon 9000 Pro "Evil Commando"]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x9a00
-+subdevice.name RV250 If [Radeon 9000 "AT009"]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x1681
-&subdevice.id pci 0x0040
-+subdevice.name RV250 If [3D prophet 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7176
-+subdevice.name RV250 If [Sapphire Radeon 9000 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7192
-+subdevice.name RV250 If [Radeon 9000 "Atlantis"]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2005
-+subdevice.name RV250 If [Excalibur Radeon 9000 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2006
-+subdevice.name RV250 If [Excalibur Radeon 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x4967
-+device.name Radeon RV250 Ig [Radeon 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x496e
-+device.name Radeon RV250 [Radeon 9000] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4a48
-+device.name R420 JH [Radeon X800]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a49
-+device.name R420 JI [Radeon X800PRO]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4a
-+device.name R420 JJ [Radeon X800SE]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4b
-+device.name R420 JK [Radeon X800]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4c
-+device.name R420 JL [Radeon X800]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4d
-+device.name R420 JM [FireGL X3]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4e
-+device.name M18 JN [Radeon Mobility 9800]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a50
-+device.name R420 JP [Radeon X800XT]
-
- vendor.id pci 0x1002
-&device.id pci 0x4a70
-+device.name R420 [X800XT-PE] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-+device.name 3D Rage LT Pro AGP-133
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0e7
-+subdevice.name Rage LT Pro (Compaq Presario 5240)
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0e8
-+subdevice.name Rage 3D LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb10e
-+subdevice.name 3D Rage LT Pro (Compaq Armada 1750)
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0040
-+subdevice.name Rage LT Pro AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name Rage LT Pro AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4c42
-+subdevice.name Rage LT Pro AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x8001
-+subdevice.name Rage LT Pro AGP 2X
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0085
-+subdevice.name Rage 3D LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c44
-+device.name 3D Rage LT Pro AGP-66
-
- vendor.id pci 0x1002
-&device.id pci 0x4c45
-+device.name Rage Mobility M3 AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-+device.name Rage Mobility M3 AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00b1
-+subdevice.name Latitude C600
-
- vendor.id pci 0x1002
-&device.id pci 0x4c47
-+device.name 3D Rage LT-G 215LG
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-+device.name 3D Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0004
-+subdevice.name Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0040
-+subdevice.name Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4c49
-+subdevice.name Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-+device.name Rage Mobility P/M AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb111
-+subdevice.name Armada M700
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb160
-+subdevice.name Armada E500
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0084
-+subdevice.name Xpert 98 AGP 2X (Mobility)
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0154
-+subdevice.name ThinkPad A20m
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00aa
-+subdevice.name Latitude CPt
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4e
-+device.name Rage Mobility L AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-+device.name 3D Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x4c50
-+subdevice.name Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c51
-+device.name 3D Rage LT Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name Rage Mobility P/M
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8112
-+subdevice.name Versa Note VXi
-
- vendor.id pci 0x1002
-&device.id pci 0x4c53
-+device.name Rage Mobility L
-
- vendor.id pci 0x1002
-&device.id pci 0x4c54
-+device.name 264LT [Mach64 LT]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-+device.name Radeon Mobility M7 LW [Radeon Mobility 7500]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0517
-+subdevice.name ThinkPad T30
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00e6
-+subdevice.name Radeon Mobility M7 LW (Dell Inspiron 8100)
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x012a
-+subdevice.name Latitude C640
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc006
-+subdevice.name Radeon Mobility M7 LW in vpr Matrix 170B4
-
- vendor.id pci 0x1002
-&device.id pci 0x4c58
-+device.name Radeon RV200 LX [Mobility FireGL 7800 M7]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-+device.name Radeon Mobility M6 LY
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0235
-+subdevice.name ThinkPad A30/A30p (2652/2653)
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0239
-+subdevice.name ThinkPad X22/X23/X24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x1002
-&device.id pci 0x4c5a
-+device.name Radeon Mobility M6 LZ
-
- vendor.id pci 0x1002
-&device.id pci 0x4c64
-+device.name Radeon R250 Ld [Radeon Mobility 9000 M9]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c65
-+device.name Radeon R250 Le [Radeon Mobility 9000 M9]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c66
-+device.name Radeon R250 Lf [FireGL 9000]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c67
-+device.name Radeon R250 Lg [Radeon Mobility 9000 M9]
-
- vendor.id pci 0x1002
-&device.id pci 0x4c6e
-+device.name Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary]
-
- vendor.id pci 0x1002
-&device.id pci 0x4d46
-+device.name Rage Mobility M4 AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4d4c
-+device.name Rage Mobility M4 AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-+device.name Radeon R300 ND [Radeon 9700 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-+device.name Radeon R300 NE [Radeon 9500 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon R300 NE [Radeon 9500 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-&subvendor.id pci 0x1681
-&subdevice.id pci 0x0002
-+subdevice.name Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e46
-+device.name RV350 NF [Radeon 9600]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-+device.name Radeon R300 NG [FireGL X1]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e48
-+device.name Radeon R350 [Radeon 9800 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e49
-+device.name Radeon R350 [Radeon 9800]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4a
-+device.name RV350 NJ [Radeon 9800 XT]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4b
-+device.name R350 NK [Fire GL X2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-+device.name RV350 [Mobility Radeon 9600 M10]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-&subvendor.id pci 0x1734
-&subdevice.id pci 0x1055
-+subdevice.name Amilo M1420W
-
- vendor.id pci 0x1002
-&device.id pci 0x4e51
-+device.name M10 NQ [Radeon Mobility 9600]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e52
-+device.name RV350 [Mobility Radeon 9600 M10]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e53
-+device.name M10 NS [Radeon Mobility 9600]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e54
-+device.name M10 NT [FireGL Mobility T2]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e56
-+device.name M11 NV [FireGL Mobility T2e]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e64
-+device.name Radeon R300 [Radeon 9700 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e65
-+device.name Radeon R300 [Radeon 9500 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e65
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0003
-+subdevice.name Radeon R300 NE [Radeon 9500 Pro]
-
- vendor.id pci 0x1002
-&device.id pci 0x4e65
-&subvendor.id pci 0x1681
-&subdevice.id pci 0x0003
-+subdevice.name Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e66
-+device.name RV350 NF [Radeon 9600] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e67
-+device.name Radeon R300 [FireGL X1] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e68
-+device.name Radeon R350 [Radeon 9800 Pro] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e69
-+device.name Radeon R350 [Radeon 9800] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x4e6a
-+device.name RV350 NJ [Radeon 9800 XT] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5041
-+device.name Rage 128 PA/PRO
-
- vendor.id pci 0x1002
-&device.id pci 0x5042
-+device.name Rage 128 PB/PRO AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x5043
-+device.name Rage 128 PC/PRO AGP 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-+device.name Rage 128 PD/PRO TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0028
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0029
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5045
-+device.name Rage 128 PE/PRO AGP 2x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-+device.name Rage 128 PF/PRO AGP 4x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0004
-+subdevice.name Rage Fury Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Rage Fury Pro/Xpert 2000 Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0014
-+subdevice.name Rage Fury Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0018
-+subdevice.name Rage Fury Pro/Xpert 2000 Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0028
-+subdevice.name Rage 128 Pro AIW AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x002a
-+subdevice.name Rage 128 Pro AIW AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0048
-+subdevice.name Rage Fury Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x2000
-+subdevice.name Rage Fury MAXX AGP 4x (TMDS) (VGA device)
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x2001
-+subdevice.name Rage Fury MAXX AGP 4x (TMDS) (Extra device?!)
-
- vendor.id pci 0x1002
-&device.id pci 0x5047
-+device.name Rage 128 PG/PRO
-
- vendor.id pci 0x1002
-&device.id pci 0x5048
-+device.name Rage 128 PH/PRO AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x5049
-+device.name Rage 128 PI/PRO AGP 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x504a
-+device.name Rage 128 PJ/PRO TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x504b
-+device.name Rage 128 PK/PRO AGP 2x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x504c
-+device.name Rage 128 PL/PRO AGP 4x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x504d
-+device.name Rage 128 PM/PRO
-
- vendor.id pci 0x1002
-&device.id pci 0x504e
-+device.name Rage 128 PN/PRO AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x504f
-+device.name Rage 128 PO/PRO AGP 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-+device.name Rage 128 PP/PRO TMDS [Xpert 128]
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Xpert 128
-
- vendor.id pci 0x1002
-&device.id pci 0x5051
-+device.name Rage 128 PQ/PRO AGP 2x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5052
-+device.name Rage 128 PR/PRO AGP 4x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5053
-+device.name Rage 128 PS/PRO
-
- vendor.id pci 0x1002
-&device.id pci 0x5054
-+device.name Rage 128 PT/PRO AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x5055
-+device.name Rage 128 PU/PRO AGP 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x5056
-+device.name Rage 128 PV/PRO TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5057
-+device.name Rage 128 PW/PRO AGP 2x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5058
-+device.name Rage 128 PX/PRO AGP 4x TMDS
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-+device.name Radeon R100 QD [Radeon 7200]
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Radeon 7000/Radeon VE
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0009
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x000a
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x001a
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0029
-+subdevice.name Radeon AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0038
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0039
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x008a
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x00ba
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0139
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x028a
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x02aa
-+subdevice.name Radeon AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x053a
-+subdevice.name Radeon 7000/Radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5145
-+device.name Radeon R100 QE
-
- vendor.id pci 0x1002
-&device.id pci 0x5146
-+device.name Radeon R100 QF
-
- vendor.id pci 0x1002
-&device.id pci 0x5147
-+device.name Radeon R100 QG
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-+device.name Radeon R200 QH [Radeon 8500]
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x010a
-+subdevice.name FireGL 8800 64Mb
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0152
-+subdevice.name FireGL 8800 128Mb
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0162
-+subdevice.name FireGL 8700 32Mb
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL 8700 64Mb
-
- vendor.id pci 0x1002
-&device.id pci 0x5149
-+device.name Radeon R200 QI
-
- vendor.id pci 0x1002
-&device.id pci 0x514a
-+device.name Radeon R200 QJ
-
- vendor.id pci 0x1002
-&device.id pci 0x514b
-+device.name Radeon R200 QK
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-+device.name Radeon R200 QL [Radeon 8500 LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x003a
-+subdevice.name Radeon R200 QL [Radeon 8500 LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 8500
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2026
-+subdevice.name R200 QL [Radeon 8500 Evil Master II Multi Display Edition]
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-&subvendor.id pci 0x1681
-&subdevice.id pci 0x0010
-+subdevice.name Radeon 8500 [3D Prophet 8500 128Mb]
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7149
-+subdevice.name Radeon R200 QL [Sapphire Radeon 8500 LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x514d
-+device.name Radeon R200 QM [Radeon 9100]
-
- vendor.id pci 0x1002
-&device.id pci 0x514e
-+device.name Radeon R200 QN [Radeon 8500LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x514f
-+device.name Radeon R200 QO [Radeon 8500LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5154
-+device.name R200 QT [Radeon 8500]
-
- vendor.id pci 0x1002
-&device.id pci 0x5155
-+device.name R200 QU [Radeon 9100]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-+device.name Radeon RV200 QW [Radeon 7500]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 7500
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x103a
-+subdevice.name Dell Optiplex GX260
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4000
-+subdevice.name RV200 QW [RADEON 7500 PRO MAYA AR]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2024
-+subdevice.name RV200 QW [Radeon 7500LE Dual Display]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2025
-+subdevice.name RV200 QW [Radeon 7500 Evil Master Multi Display Edition]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2036
-+subdevice.name RV200 QW [Radeon 7500 PCI Dual Display]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7146
-+subdevice.name RV200 QW [Radeon 7500 LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7147
-+subdevice.name RV200 QW [Sapphire Radeon 7500LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7161
-+subdevice.name Radeon RV200 QW [Radeon 7500 LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x0202
-+subdevice.name RV200 QW [Excalibur Radeon 7500LE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5158
-+device.name Radeon RV200 QX [Radeon 7500]
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-+device.name Radeon RV100 QY [Radeon 7000/VE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x000a
-+subdevice.name Radeon 7000/Radeon VE
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x000b
-+subdevice.name Radeon 7000
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0038
-+subdevice.name Radeon 7000/Radeon VE
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x003a
-+subdevice.name Radeon 7000/Radeon VE
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x00ba
-+subdevice.name Radeon 7000/Radeon VE
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 7000/Radeon VE
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4002
-+subdevice.name RV100 QY [RADEON 7000 PRO MAYA AV Series]
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2003
-+subdevice.name RV100 QY [Radeon 7000 Multi-Display Edition]
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2023
-+subdevice.name RV100 QY [Radeon 7000 Evil Master Multi-Display]
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7112
-+subdevice.name RV100 QY [Sapphire Radeon VE 7000]
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c28
-+subdevice.name Sapphire Radeon VE 7000 DDR
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1787
-&subdevice.id pci 0x0202
-+subdevice.name RV100 QY [Excalibur Radeon 7000]
-
- vendor.id pci 0x1002
-&device.id pci 0x515a
-+device.name Radeon RV100 QZ [Radeon 7000/VE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5168
-+device.name Radeon R200 Qh
-
- vendor.id pci 0x1002
-&device.id pci 0x5169
-+device.name Radeon R200 Qi
-
- vendor.id pci 0x1002
-&device.id pci 0x516a
-+device.name Radeon R200 Qj
-
- vendor.id pci 0x1002
-&device.id pci 0x516b
-+device.name Radeon R200 Qk
-
- vendor.id pci 0x1002
-&device.id pci 0x516c
-+device.name Radeon R200 Ql
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-+device.name Rage 128 RE/SG
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Xpert 128
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0028
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0029
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0068
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-+device.name Rage 128 RF/SG AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0004
-+subdevice.name Magnum/Xpert 128/Xpert 99
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Magnum/Xpert128/X99/Xpert2000
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0028
-+subdevice.name Rage 128 AIW AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name Rage Fury/Xpert 128/Xpert 2000
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0068
-+subdevice.name Rage 128 AIW AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0448
-+subdevice.name Rage Fury
-
- vendor.id pci 0x1002
-&device.id pci 0x5247
-+device.name Rage 128 RG
-
- vendor.id pci 0x1002
-&device.id pci 0x524b
-+device.name Rage 128 RK/VR
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-+device.name Rage 128 RL/VR AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Xpert 99/Xpert 2000
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0088
-+subdevice.name Xpert 99
-
- vendor.id pci 0x1002
-&device.id pci 0x5345
-+device.name Rage 128 SE/4x
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-+device.name Rage 128 SF/4x AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0048
-+subdevice.name RAGE 128 16MB VGA TVOUT AMC PAL
-
- vendor.id pci 0x1002
-&device.id pci 0x5347
-+device.name Rage 128 SG/4x AGP 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x5348
-+device.name Rage 128 SH
-
- vendor.id pci 0x1002
-&device.id pci 0x534b
-+device.name Rage 128 SK/4x
-
- vendor.id pci 0x1002
-&device.id pci 0x534c
-+device.name Rage 128 SL/4x AGP 2x
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-+device.name Rage 128 SM/4x AGP 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Xpert 99/Xpert 2000
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0018
-+subdevice.name Xpert 2000
-
- vendor.id pci 0x1002
-&device.id pci 0x534e
-+device.name Rage 128 4x
-
- vendor.id pci 0x1002
-&device.id pci 0x5354
-+device.name Mach 64 VT
-
- vendor.id pci 0x1002
-&device.id pci 0x5354
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x5654
-+subdevice.name Mach 64 reference
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-+device.name Rage 128 Pro Ultra TF
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0004
-+subdevice.name Rage Fury Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0008
-+subdevice.name Rage Fury Pro/Xpert 2000 Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0018
-+subdevice.name Rage Fury Pro/Xpert 2000 Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0028
-+subdevice.name Rage 128 AIW Pro AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0029
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x002a
-+subdevice.name Rage 128 AIW Pro AGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x002b
-+subdevice.name Rage 128 AIW
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0048
-+subdevice.name Xpert 2000 Pro
-
- vendor.id pci 0x1002
-&device.id pci 0x544c
-+device.name Rage 128 Pro Ultra TL
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-+device.name Rage 128 Pro Ultra TR
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x001c
-+subdevice.name Rage 128 Pro 4XL
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1279
-+subdevice.name Rage 128 Pro 4XL
-
- vendor.id pci 0x1002
-&device.id pci 0x5453
-+device.name Rage 128 Pro Ultra TS
-
- vendor.id pci 0x1002
-&device.id pci 0x5454
-+device.name Rage 128 Pro Ultra TT
-
- vendor.id pci 0x1002
-&device.id pci 0x5455
-+device.name Rage 128 Pro Ultra TU
-
- vendor.id pci 0x1002
-&device.id pci 0x5460
-+device.name M22 [Radeon Mobility M300]
-
- vendor.id pci 0x1002
-&device.id pci 0x5464
-+device.name M22 [FireGL GL]
-
- vendor.id pci 0x1002
-&device.id pci 0x5548
-+device.name R423 UH [Radeon X800 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5549
-+device.name R423 UI [Radeon X800PRO (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x554a
-+device.name R423 UJ [Radeon X800LE (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x554b
-+device.name R423 UK [Radeon X800SE (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5551
-+device.name R423 UQ [FireGL V7200 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5552
-+device.name R423 UR [FireGL V5100 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5554
-+device.name R423 UT [FireGL V7100 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x556b
-+device.name Radeon R423 UK (PCIE) [X800 SE] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5654
-+device.name 264VT [Mach64 VT]
-
- vendor.id pci 0x1002
-&device.id pci 0x5654
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x5654
-+subdevice.name Mach64VT Reference
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-
- vendor.id pci 0x1002
-&device.id pci 0x5830
-+device.name RS300 Host Bridge
-
- vendor.id pci 0x1002
-&device.id pci 0x5831
-+device.name RS300 Host Bridge
-
- vendor.id pci 0x1002
-&device.id pci 0x5832
-+device.name RS300 Host Bridge
-
- vendor.id pci 0x1002
-&device.id pci 0x5833
-+device.name Radeon 9100 IGP Host Bridge
-
- vendor.id pci 0x1002
-&device.id pci 0x5834
-+device.name Radeon 9100 IGP
-
- vendor.id pci 0x1002
-&device.id pci 0x5835
-+device.name RS300M AGP [Radeon Mobility 9100IGP]
-
- vendor.id pci 0x1002
-&device.id pci 0x5838
-+device.name Radeon 9100 IGP AGP Bridge
-
- vendor.id pci 0x1002
-&device.id pci 0x5941
-+device.name RV280 [Radeon 9200] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5941
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c12
-+subdevice.name Sapphire Radeon 9200
-
- vendor.id pci 0x1002
-&device.id pci 0x5941
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x200d
-+subdevice.name Excalibur Radeon 9200
-
- vendor.id pci 0x1002
-&device.id pci 0x5941
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0050
-+subdevice.name GeXcube GC-R9200-C3 (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5944
-+device.name RV280 [Radeon 9200 SE (PCI)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5960
-+device.name RV280 [Radeon 9200 PRO]
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-+device.name RV280 [Radeon 9200]
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x2f72
-+subdevice.name All-in-Wonder 9200 Series
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x12ab
-&subdevice.id pci 0x5961
-+subdevice.name YUAN SMARTVGA Radeon 9200
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4018
-+subdevice.name Gigabyte Radeon 9200
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c13
-+subdevice.name Sapphire Radeon 9200
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x200c
-+subdevice.name Excalibur Radeon 9200
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0050
-+subdevice.name Radeon 9200 Game Buster
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0051
-+subdevice.name GeXcube GC-R9200-C3
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0053
-+subdevice.name Radeon 9200 Game Buster VIVO
-
- vendor.id pci 0x1002
-&device.id pci 0x5962
-+device.name RV280 [Radeon 9200]
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-+device.name RV280 [Radeon 9200 SE]
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x1043
-&subdevice.id pci 0xc006
-+subdevice.name ASUS Radeon 9200 SE / TD / 128M
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4018
-+subdevice.name Radeon 9200 SE
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x148c
-&subdevice.id pci 0x2073
-+subdevice.name CN-AG92E
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c13
-+subdevice.name Sapphire Radeon 9200 SE
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x1787
-&subdevice.id pci 0x5964
-+subdevice.name Excalibur 9200SE VIVO 128M
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2012
-+subdevice.name Radeon 9200 SE Excalibur
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0170
-+subdevice.name Sapphire Radeon 9200 SE 128MB Game Buster
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0173
-+subdevice.name GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
-
- vendor.id pci 0x1002
-&device.id pci 0x5b60
-+device.name RV370 5B60 [Radeon X300 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5b60
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x002a
-+subdevice.name EAX300SE
-
- vendor.id pci 0x1002
-&device.id pci 0x5b62
-+device.name RV370 5B62 [Radeon X600 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5b64
-+device.name RV370 5B64 [FireGL V3100 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5b65
-+device.name RV370 5B65 [FireGL D1100 (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5c61
-+device.name M9+ 5C61 [Radeon Mobility 9200 (AGP)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5c63
-+device.name M9+ 5C63 [Radeon Mobility 9200 (AGP)]
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-+device.name RV280 [Radeon 9200 SE] (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x4019
-+subdevice.name Radeon 9200 SE (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7c12
-+subdevice.name Sapphire Radeon 9200 SE (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-&subvendor.id pci 0x1787
-&subdevice.id pci 0x5965
-+subdevice.name Excalibur 9200SE VIVO 128M (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2013
-+subdevice.name Radeon 9200 SE Excalibur (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0171
-+subdevice.name Radeon 9200 SE 128MB Game Buster (Secondary)
-
- vendor.id pci 0x1002
-&device.id pci 0x5d44
-&subvendor.id pci 0x18bc
-&subdevice.id pci 0x0172
-+subdevice.name GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
-
- vendor.id pci 0x1002
-&device.id pci 0x5d57
-+device.name R423 5F57 [Radeon X800XT (PCIE)]
-
- vendor.id pci 0x1002
-&device.id pci 0x700f
-+device.name PCI Bridge [IGP 320M]
-
- vendor.id pci 0x1002
-&device.id pci 0x7010
-+device.name PCI Bridge [IGP 340M]
-
- vendor.id pci 0x1002
-&device.id pci 0x7834
-+device.name Radeon 9100 PRO IGP
-
- vendor.id pci 0x1002
-&device.id pci 0x7835
-+device.name Radeon Mobility 9200 IGP
-
- vendor.id pci 0x1002
-&device.id pci 0x7c37
-+device.name RV350 AQ [Radeon 9600 SE]
-
- vendor.id pci 0x1002
-&device.id pci 0xcab0
-+device.name AGP Bridge [IGP 320M]
-
- vendor.id pci 0x1002
-&device.id pci 0xcab2
-+device.name RS200/RS200M AGP Bridge [IGP 340M]
-
- vendor.id pci 0x1002
-&device.id pci 0xcbb2
-+device.name RS200/RS200M AGP Bridge [IGP 340M]
-
- vendor.id pci 0x1003
-+vendor.name ULSI Systems
-
- vendor.id pci 0x1003
-&device.id pci 0x0201
-+device.name US201
-
- vendor.id pci 0x1004
-+vendor.name VLSI Technology Inc
-
- vendor.id pci 0x1004
-&device.id pci 0x0005
-+device.name 82C592-FC1
-
- vendor.id pci 0x1004
-&device.id pci 0x0006
-+device.name 82C593-FC1
-
- vendor.id pci 0x1004
-&device.id pci 0x0007
-+device.name 82C594-AFC2
-
- vendor.id pci 0x1004
-&device.id pci 0x0008
-+device.name 82C596/7 [Wildcat]
-
- vendor.id pci 0x1004
-&device.id pci 0x0009
-+device.name 82C597-AFC2
-
- vendor.id pci 0x1004
-&device.id pci 0x000c
-+device.name 82C541 [Lynx]
-
- vendor.id pci 0x1004
-&device.id pci 0x000d
-+device.name 82C543 [Lynx]
-
- vendor.id pci 0x1004
-&device.id pci 0x0101
-+device.name 82C532
-
- vendor.id pci 0x1004
-&device.id pci 0x0102
-+device.name 82C534 [Eagle]
-
- vendor.id pci 0x1004
-&device.id pci 0x0103
-+device.name 82C538
-
- vendor.id pci 0x1004
-&device.id pci 0x0104
-+device.name 82C535
-
- vendor.id pci 0x1004
-&device.id pci 0x0105
-+device.name 82C147
-
- vendor.id pci 0x1004
-&device.id pci 0x0200
-+device.name 82C975
-
- vendor.id pci 0x1004
-&device.id pci 0x0280
-+device.name 82C925
-
- vendor.id pci 0x1004
-&device.id pci 0x0304
-+device.name QSound ThunderBird PCI Audio
-
- vendor.id pci 0x1004
-&device.id pci 0x0304
-&subvendor.id pci 0x1004
-&subdevice.id pci 0x0304
-+subdevice.name QSound ThunderBird PCI Audio
-
- vendor.id pci 0x1004
-&device.id pci 0x0304
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x1206
-+subdevice.name DSP368 Audio
-
- vendor.id pci 0x1004
-&device.id pci 0x0304
-&subvendor.id pci 0x1483
-&subdevice.id pci 0x5020
-+subdevice.name XWave Thunder 3D Audio
-
- vendor.id pci 0x1004
-&device.id pci 0x0305
-+device.name QSound ThunderBird PCI Audio Gameport
-
- vendor.id pci 0x1004
-&device.id pci 0x0305
-&subvendor.id pci 0x1004
-&subdevice.id pci 0x0305
-+subdevice.name QSound ThunderBird PCI Audio Gameport
-
- vendor.id pci 0x1004
-&device.id pci 0x0305
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x1207
-+subdevice.name DSP368 Audio Gameport
-
- vendor.id pci 0x1004
-&device.id pci 0x0305
-&subvendor.id pci 0x1483
-&subdevice.id pci 0x5021
-+subdevice.name XWave Thunder 3D Audio Gameport
-
- vendor.id pci 0x1004
-&device.id pci 0x0306
-+device.name QSound ThunderBird PCI Audio Support Registers
-
- vendor.id pci 0x1004
-&device.id pci 0x0306
-&subvendor.id pci 0x1004
-&subdevice.id pci 0x0306
-+subdevice.name QSound ThunderBird PCI Audio Support Registers
-
- vendor.id pci 0x1004
-&device.id pci 0x0306
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x1208
-+subdevice.name DSP368 Audio Support Registers
-
- vendor.id pci 0x1004
-&device.id pci 0x0306
-&subvendor.id pci 0x1483
-&subdevice.id pci 0x5022
-+subdevice.name XWave Thunder 3D Audio Support Registers
-
- vendor.id pci 0x1004
-&device.id pci 0x0307
-+device.name Thunderbird
-
- vendor.id pci 0x1004
-&device.id pci 0x0308
-+device.name Thunderbird
-
- vendor.id pci 0x1004
-&device.id pci 0x0702
-+device.name VAS96011 [Golden Gate II]
-
- vendor.id pci 0x1004
-&device.id pci 0x0703
-+device.name Tollgate
-
- vendor.id pci 0x1005
-+vendor.name Avance Logic Inc. [ALI]
-
- vendor.id pci 0x1005
-&device.id pci 0x2064
-+device.name ALG2032/2064
-
- vendor.id pci 0x1005
-&device.id pci 0x2128
-+device.name ALG2364A
-
- vendor.id pci 0x1005
-&device.id pci 0x2301
-+device.name ALG2301
-
- vendor.id pci 0x1005
-&device.id pci 0x2302
-+device.name ALG2302
-
- vendor.id pci 0x1005
-&device.id pci 0x2364
-+device.name ALG2364
-
- vendor.id pci 0x1005
-&device.id pci 0x2464
-+device.name ALG2364A
-
- vendor.id pci 0x1005
-&device.id pci 0x2501
-+device.name ALG2564A/25128A
-
- vendor.id pci 0x1006
-+vendor.name Reply Group
-
- vendor.id pci 0x1007
-+vendor.name NetFrame Systems Inc
-
- vendor.id pci 0x1008
-+vendor.name Epson
-
- vendor.id pci 0x100a
-+vendor.name Phoenix Technologies
-
- vendor.id pci 0x100b
-+vendor.name National Semiconductor Corporation
-
- vendor.id pci 0x100b
-&device.id pci 0x0001
-+device.name DP83810
-
- vendor.id pci 0x100b
-&device.id pci 0x0002
-+device.name 87415/87560 IDE
-
- vendor.id pci 0x100b
-&device.id pci 0x000e
-+device.name 87560 Legacy I/O
-
- vendor.id pci 0x100b
-&device.id pci 0x000f
-+device.name FireWire Controller
-
- vendor.id pci 0x100b
-&device.id pci 0x0011
-+device.name NS87560 National PCI System I/O
-
- vendor.id pci 0x100b
-&device.id pci 0x0012
-+device.name USB Controller
-
- vendor.id pci 0x100b
-&device.id pci 0x0020
-+device.name DP83815 (MacPhyter) Ethernet Controller
-
- vendor.id pci 0x100b
-&device.id pci 0x0020
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400 builtin Network
-
- vendor.id pci 0x100b
-&device.id pci 0x0020
-&subvendor.id pci 0x1385
-&subdevice.id pci 0xf311
-+subdevice.name FA311 / FA312 (FA311 with WoL HW)
-
- vendor.id pci 0x100b
-&device.id pci 0x0022
-+device.name DP83820 10/100/1000 Ethernet Controller
-
- vendor.id pci 0x100b
-&device.id pci 0x0028
-+device.name CS5535 Host bridge
-
- vendor.id pci 0x100b
-&device.id pci 0x002b
-+device.name CS5535 ISA bridge
-
- vendor.id pci 0x100b
-&device.id pci 0x002d
-+device.name CS5535 IDE
-
- vendor.id pci 0x100b
-&device.id pci 0x002e
-+device.name CS5535 Audio
-
- vendor.id pci 0x100b
-&device.id pci 0x002f
-+device.name CS5535 USB
-
- vendor.id pci 0x100b
-&device.id pci 0x0030
-+device.name CS5535 Video
-
- vendor.id pci 0x100b
-&device.id pci 0x0035
-+device.name DP83065 [Saturn] 10/100/1000 Ethernet Controller
-
- vendor.id pci 0x100b
-&device.id pci 0x0500
-+device.name SCx200 Bridge
-
- vendor.id pci 0x100b
-&device.id pci 0x0501
-+device.name SCx200 SMI
-
- vendor.id pci 0x100b
-&device.id pci 0x0502
-+device.name SCx200 IDE
-
- vendor.id pci 0x100b
-&device.id pci 0x0503
-+device.name SCx200 Audio
-
- vendor.id pci 0x100b
-&device.id pci 0x0504
-+device.name SCx200 Video
-
- vendor.id pci 0x100b
-&device.id pci 0x0505
-+device.name SCx200 XBus
-
- vendor.id pci 0x100b
-&device.id pci 0x0510
-+device.name SC1100 Bridge
-
- vendor.id pci 0x100b
-&device.id pci 0x0511
-+device.name SC1100 SMI
-
- vendor.id pci 0x100b
-&device.id pci 0x0515
-+device.name SC1100 XBus
-
- vendor.id pci 0x100b
-&device.id pci 0xd001
-+device.name 87410 IDE
-
- vendor.id pci 0x100c
-+vendor.name Tseng Labs Inc
-
- vendor.id pci 0x100c
-&device.id pci 0x3202
-+device.name ET4000/W32p rev A
-
- vendor.id pci 0x100c
-&device.id pci 0x3205
-+device.name ET4000/W32p rev B
-
- vendor.id pci 0x100c
-&device.id pci 0x3206
-+device.name ET4000/W32p rev C
-
- vendor.id pci 0x100c
-&device.id pci 0x3207
-+device.name ET4000/W32p rev D
-
- vendor.id pci 0x100c
-&device.id pci 0x3208
-+device.name ET6000
-
- vendor.id pci 0x100c
-&device.id pci 0x4702
-+device.name ET6300
-
- vendor.id pci 0x100d
-+vendor.name AST Research Inc
-
- vendor.id pci 0x100e
-+vendor.name Weitek
-
- vendor.id pci 0x100e
-&device.id pci 0x9000
-+device.name P9000 Viper
-
- vendor.id pci 0x100e
-&device.id pci 0x9001
-+device.name P9000 Viper
-
- vendor.id pci 0x100e
-&device.id pci 0x9002
-+device.name P9000 Viper
-
- vendor.id pci 0x100e
-&device.id pci 0x9100
-+device.name P9100 Viper Pro/SE
-
- vendor.id pci 0x1010
-+vendor.name Video Logic, Ltd.
-
- vendor.id pci 0x1011
-+vendor.name Digital Equipment Corporation
-
- vendor.id pci 0x1011
-&device.id pci 0x0001
-+device.name DECchip 21050
-
- vendor.id pci 0x1011
-&device.id pci 0x0002
-+device.name DECchip 21040 [Tulip]
-
- vendor.id pci 0x1011
-&device.id pci 0x0004
-+device.name DECchip 21030 [TGA]
-
- vendor.id pci 0x1011
-&device.id pci 0x0007
-+device.name NVRAM [Zephyr NVRAM]
-
- vendor.id pci 0x1011
-&device.id pci 0x0008
-+device.name KZPSA [KZPSA]
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-+device.name DECchip 21140 [FasterNet]
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x0310
-+subdevice.name 21140 Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2001
-+subdevice.name SMC9332BDT EtherPower 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2002
-+subdevice.name SMC9332BVT EtherPower T4 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2003
-+subdevice.name SMC9334BDT EtherPower 10/100 (1-port)
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1109
-&subdevice.id pci 0x2400
-+subdevice.name ANA-6944A/TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1112
-&subdevice.id pci 0x2300
-+subdevice.name RNS2300 Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1112
-&subdevice.id pci 0x2320
-+subdevice.name RNS2320 Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1112
-&subdevice.id pci 0x2340
-+subdevice.name RNS2340 Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x1207
-+subdevice.name EN-1207-TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1100
-+subdevice.name DFE-500TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1112
-+subdevice.name DFE-570TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1140
-+subdevice.name DFE-660 Cardbus Ethernet 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1142
-+subdevice.name DFE-660 Cardbus Ethernet 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x11f6
-&subdevice.id pci 0x0503
-+subdevice.name Freedomline Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1282
-&subdevice.id pci 0x9100
-+subdevice.name AEF-380TXD Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x1385
-&subdevice.id pci 0x1100
-+subdevice.name FA310TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0009
-&subvendor.id pci 0x2646
-&subdevice.id pci 0x0001
-+subdevice.name KNE100TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x000a
-+device.name 21230 Video Codec
-
- vendor.id pci 0x1011
-&device.id pci 0x000d
-+device.name PBXGB [TGA2]
-
- vendor.id pci 0x1011
-&device.id pci 0x000f
-+device.name DEFPA
-
- vendor.id pci 0x1011
-&device.id pci 0x0014
-+device.name DECchip 21041 [Tulip Pass 3]
-
- vendor.id pci 0x1011
-&device.id pci 0x0014
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x0100
-+subdevice.name DE-530+
-
- vendor.id pci 0x1011
-&device.id pci 0x0016
-+device.name DGLPB [OPPO]
-
- vendor.id pci 0x1011
-&device.id pci 0x0017
-+device.name PV-PCI Graphics Controller (ZLXp-L)
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-+device.name DECchip 21142/43
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1011
-&subdevice.id pci 0x500a
-+subdevice.name DE500A Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1011
-&subdevice.id pci 0x500b
-+subdevice.name DE500B Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0001
-+subdevice.name 10/100 EtherJet Cardbus
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x0315
-+subdevice.name ALN315 Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x800c
-+subdevice.name PC-9821-CS01 100BASE-TX Interface Card
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x800d
-+subdevice.name PC-9821NR-B06 100BASE-TX Interface Card
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0016
-+subdevice.name Rapidfire 2327 10/100 Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0017
-+subdevice.name GoCard 2250 Ethernet 10/100 Cardbus
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2005
-+subdevice.name SMC8032DT Extreme Ethernet 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x8034
-+subdevice.name SMC8034 Extreme Ethernet 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x10ef
-&subdevice.id pci 0x8169
-+subdevice.name Cardbus Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1109
-&subdevice.id pci 0x2a00
-+subdevice.name ANA-6911A/TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1109
-&subdevice.id pci 0x2b00
-+subdevice.name ANA-6911A/TXC Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1109
-&subdevice.id pci 0x3000
-+subdevice.name ANA-6922/TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x1207
-+subdevice.name Cheetah Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x2220
-+subdevice.name Cardbus Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x0002
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0203
-+subdevice.name Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0204
-+subdevice.name Cardbus Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1100
-+subdevice.name DFE-500TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1101
-+subdevice.name DFE-500TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1102
-+subdevice.name DFE-500TX Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1112
-+subdevice.name DFE-570TX Quad Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2800
-+subdevice.name AT-2800Tx Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1266
-&subdevice.id pci 0x0004
-+subdevice.name Eagle Fast EtherMAX
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x12af
-&subdevice.id pci 0x0019
-+subdevice.name NetFlyer Cardbus Fast Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1374
-&subdevice.id pci 0x0001
-+subdevice.name Cardbus Ethernet Card 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1374
-&subdevice.id pci 0x0002
-+subdevice.name Cardbus Ethernet Card 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1374
-&subdevice.id pci 0x0007
-+subdevice.name Cardbus Ethernet Card 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1374
-&subdevice.id pci 0x0008
-+subdevice.name Cardbus Ethernet Card 10/100
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1385
-&subdevice.id pci 0x2100
-+subdevice.name FA510
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x1395
-&subdevice.id pci 0x0001
-+subdevice.name 10/100 Ethernet CardBus PC Card
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x13d1
-&subdevice.id pci 0xab01
-+subdevice.name EtherFast 10/100 Cardbus (PCMPC200)
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x14cb
-&subdevice.id pci 0x0100
-+subdevice.name LNDL-100N 100Base-TX Ethernet PC Card
-
- vendor.id pci 0x1011
-&device.id pci 0x0019
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0001
-+subdevice.name EtherExpress PRO/100 Mobile CardBus 32
-
- vendor.id pci 0x1011
-&device.id pci 0x001a
-+device.name Farallon PN9000SX Gigabit Ethernet
-
- vendor.id pci 0x1011
-&device.id pci 0x0021
-+device.name DECchip 21052
-
- vendor.id pci 0x1011
-&device.id pci 0x0022
-+device.name DECchip 21150
-
- vendor.id pci 0x1011
-&device.id pci 0x0023
-+device.name DECchip 21150
-
- vendor.id pci 0x1011
-&device.id pci 0x0024
-+device.name DECchip 21152
-
- vendor.id pci 0x1011
-&device.id pci 0x0025
-+device.name DECchip 21153
-
- vendor.id pci 0x1011
-&device.id pci 0x0026
-+device.name DECchip 21154
-
- vendor.id pci 0x1011
-&device.id pci 0x0034
-+device.name 56k Modem Cardbus
-
- vendor.id pci 0x1011
-&device.id pci 0x0034
-&subvendor.id pci 0x1374
-&subdevice.id pci 0x0003
-+subdevice.name 56k Modem Cardbus
-
- vendor.id pci 0x1011
-&device.id pci 0x0045
-+device.name DECchip 21553
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-+device.name DECchip 21554
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4050
-+subdevice.name Integrated Smart Array
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4051
-+subdevice.name Integrated Smart Array
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4058
-+subdevice.name Integrated Smart Array
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10c2
-+subdevice.name Hewlett-Packard NetRAID-4M
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x12d9
-&subdevice.id pci 0x000a
-+subdevice.name IP Telephony card
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0364
-+subdevice.name 5400S (Mustang)
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0365
-+subdevice.name 5400S (Mustang)
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x1364
-+subdevice.name Dell PowerEdge RAID Controller 2
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x1365
-+subdevice.name Dell PowerEdge RAID Controller 2
-
- vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1000
-+subdevice.name CC8-1-BLUES
-
- vendor.id pci 0x1011
-&device.id pci 0x1065
-+device.name StrongARM DC21285
-
- vendor.id pci 0x1011
-&device.id pci 0x1065
-&subvendor.id pci 0x1069
-&subdevice.id pci 0x0020
-+subdevice.name DAC960P / DAC1164P
-
- vendor.id pci 0x1012
-+vendor.name Micronics Computers Inc
-
- vendor.id pci 0x1013
-+vendor.name Cirrus Logic
-
- vendor.id pci 0x1013
-&device.id pci 0x0038
-+device.name GD 7548
-
- vendor.id pci 0x1013
-&device.id pci 0x0040
-+device.name GD 7555 Flat Panel GUI Accelerator
-
- vendor.id pci 0x1013
-&device.id pci 0x004c
-+device.name GD 7556 Video/Graphics LCD/CRT Ctrlr
-
- vendor.id pci 0x1013
-&device.id pci 0x00a0
-+device.name GD 5430/40 [Alpine]
-
- vendor.id pci 0x1013
-&device.id pci 0x00a2
-+device.name GD 5432 [Alpine]
-
- vendor.id pci 0x1013
-&device.id pci 0x00a4
-+device.name GD 5434-4 [Alpine]
-
- vendor.id pci 0x1013
-&device.id pci 0x00a8
-+device.name GD 5434-8 [Alpine]
-
- vendor.id pci 0x1013
-&device.id pci 0x00ac
-+device.name GD 5436 [Alpine]
-
- vendor.id pci 0x1013
-&device.id pci 0x00b0
-+device.name GD 5440
-
- vendor.id pci 0x1013
-&device.id pci 0x00b8
-+device.name GD 5446
-
- vendor.id pci 0x1013
-&device.id pci 0x00bc
-+device.name GD 5480
-
- vendor.id pci 0x1013
-&device.id pci 0x00bc
-&subvendor.id pci 0x1013
-&subdevice.id pci 0x00bc
-+subdevice.name CL-GD5480
-
- vendor.id pci 0x1013
-&device.id pci 0x00d0
-+device.name GD 5462
-
- vendor.id pci 0x1013
-&device.id pci 0x00d2
-+device.name GD 5462 [Laguna I]
-
- vendor.id pci 0x1013
-&device.id pci 0x00d4
-+device.name GD 5464 [Laguna]
-
- vendor.id pci 0x1013
-&device.id pci 0x00d5
-+device.name GD 5464 BD [Laguna]
-
- vendor.id pci 0x1013
-&device.id pci 0x00d6
-+device.name GD 5465 [Laguna]
-
- vendor.id pci 0x1013
-&device.id pci 0x00d6
-&subvendor.id pci 0x13ce
-&subdevice.id pci 0x8031
-+subdevice.name Barco Metheus 2 Megapixel, Dual Head
-
- vendor.id pci 0x1013
-&device.id pci 0x00d6
-&subvendor.id pci 0x13cf
-&subdevice.id pci 0x8031
-+subdevice.name Barco Metheus 2 Megapixel, Dual Head
-
- vendor.id pci 0x1013
-&device.id pci 0x00e8
-+device.name GD 5436U
-
- vendor.id pci 0x1013
-&device.id pci 0x1100
-+device.name CL 6729
-
- vendor.id pci 0x1013
-&device.id pci 0x1110
-+device.name PD 6832 PCMCIA/CardBus Ctrlr
-
- vendor.id pci 0x1013
-&device.id pci 0x1112
-+device.name PD 6834 PCMCIA/CardBus Ctrlr
-
- vendor.id pci 0x1013
-&device.id pci 0x1113
-+device.name PD 6833 PCMCIA/CardBus Ctrlr
-
- vendor.id pci 0x1013
-&device.id pci 0x1200
-+device.name GD 7542 [Nordic]
-
- vendor.id pci 0x1013
-&device.id pci 0x1202
-+device.name GD 7543 [Viking]
-
- vendor.id pci 0x1013
-&device.id pci 0x1204
-+device.name GD 7541 [Nordic Light]
-
- vendor.id pci 0x1013
-&device.id pci 0x4400
-+device.name CD 4400
-
- vendor.id pci 0x1013
-&device.id pci 0x6001
-+device.name CS 4610/11 [CrystalClear SoundFusion Audio Accelerator]
-
- vendor.id pci 0x1013
-&device.id pci 0x6001
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x1010
-+subdevice.name CS4610 SoundFusion Audio Accelerator
-
- vendor.id pci 0x1013
-&device.id pci 0x6003
-+device.name CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
-
- vendor.id pci 0x1013
-&device.id pci 0x6003
-&subvendor.id pci 0x1013
-&subdevice.id pci 0x4280
-+subdevice.name Crystal SoundFusion PCI Audio Accelerator
-
- vendor.id pci 0x1013
-&device.id pci 0x6003
-&subvendor.id pci 0x1681
-&subdevice.id pci 0x0050
-+subdevice.name Game Theater XP
-
- vendor.id pci 0x1013
-&device.id pci 0x6003
-&subvendor.id pci 0x1681
-&subdevice.id pci 0xa011
-+subdevice.name Fortissimo III 7.1
-
- vendor.id pci 0x1013
-&device.id pci 0x6004
-+device.name CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-+device.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x1013
-&subdevice.id pci 0x4281
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10a8
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10a9
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10aa
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10ab
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10ac
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10ad
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x10b4
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1013
-&device.id pci 0x6005
-&subvendor.id pci 0x14c0
-&subdevice.id pci 0x000c
-+subdevice.name Crystal CS4281 PCI Audio
-
- vendor.id pci 0x1014
-+vendor.name IBM
-
- vendor.id pci 0x1014
-&device.id pci 0x0002
-+device.name PCI to MCA Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x0005
-+device.name Alta Lite
-
- vendor.id pci 0x1014
-&device.id pci 0x0007
-+device.name Alta MP
-
- vendor.id pci 0x1014
-&device.id pci 0x000a
-+device.name Fire Coral
-
- vendor.id pci 0x1014
-&device.id pci 0x0017
-+device.name CPU to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x0018
-+device.name TR Auto LANstreamer
-
- vendor.id pci 0x1014
-&device.id pci 0x001b
-+device.name GXT-150P
-
- vendor.id pci 0x1014
-&device.id pci 0x001c
-+device.name Carrera
-
- vendor.id pci 0x1014
-&device.id pci 0x001d
-+device.name 82G2675
-
- vendor.id pci 0x1014
-&device.id pci 0x0020
-+device.name GXT1000 Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0022
-+device.name IBM27-82351
-
- vendor.id pci 0x1014
-&device.id pci 0x002d
-+device.name Python
-
- vendor.id pci 0x1014
-&device.id pci 0x002e
-+device.name SCSI RAID Adapter [ServeRAID]
-
- vendor.id pci 0x1014
-&device.id pci 0x002e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x002e
-+subdevice.name ServeRAID-3x
-
- vendor.id pci 0x1014
-&device.id pci 0x002e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x022e
-+subdevice.name ServeRAID-4H
-
- vendor.id pci 0x1014
-&device.id pci 0x0031
-+device.name 2 Port Serial Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0031
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0031
-+subdevice.name 2721 WAN IOA - 2 Port Sync Serial Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0036
-+device.name Miami
-
- vendor.id pci 0x1014
-&device.id pci 0x0037
-+device.name 82660 CPU to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x003a
-+device.name CPU to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x003c
-+device.name GXT250P/GXT255P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-+device.name 16/4 Token ring UTP/STP controller
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x003e
-+subdevice.name Token-Ring Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00cd
-+subdevice.name Token-Ring Adapter + Wake-On-LAN
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00ce
-+subdevice.name 16/4 Token-Ring Adapter 2
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00cf
-+subdevice.name 16/4 Token-Ring Adapter Special
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00e4
-+subdevice.name High-Speed 100/16/4 Token-Ring Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00e5
-+subdevice.name 16/4 Token-Ring Adapter 2 + Wake-On-LAN
-
- vendor.id pci 0x1014
-&device.id pci 0x003e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x016d
-+subdevice.name iSeries 2744 Card
-
- vendor.id pci 0x1014
-&device.id pci 0x0045
-+device.name SSA Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0046
-+device.name MPIC interrupt controller
-
- vendor.id pci 0x1014
-&device.id pci 0x0047
-+device.name PCI to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x0048
-+device.name PCI to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x0049
-+device.name Warhead SCSI Controller
-
- vendor.id pci 0x1014
-&device.id pci 0x004e
-+device.name ATM Controller (14104e00)
-
- vendor.id pci 0x1014
-&device.id pci 0x004f
-+device.name ATM Controller (14104f00)
-
- vendor.id pci 0x1014
-&device.id pci 0x0050
-+device.name ATM Controller (14105000)
-
- vendor.id pci 0x1014
-&device.id pci 0x0053
-+device.name 25 MBit ATM Controller
-
- vendor.id pci 0x1014
-&device.id pci 0x0054
-+device.name GXT500P/GXT550P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0057
-+device.name MPEG PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x005c
-+device.name i82557B 10/100
-
- vendor.id pci 0x1014
-&device.id pci 0x005e
-+device.name GXT800P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x007c
-+device.name ATM Controller (14107c00)
-
- vendor.id pci 0x1014
-&device.id pci 0x007d
-+device.name 3780IDSP [MWave]
-
- vendor.id pci 0x1014
-&device.id pci 0x008b
-+device.name EADS PCI to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x008e
-+device.name GXT3000P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0090
-+device.name GXT 3000P
-
- vendor.id pci 0x1014
-&device.id pci 0x0090
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x008e
-+subdevice.name GXT-3000P
-
- vendor.id pci 0x1014
-&device.id pci 0x0091
-+device.name SSA Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0095
-+device.name 20H2999 PCI Docking Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x0096
-+device.name Chukar chipset SCSI controller
-
- vendor.id pci 0x1014
-&device.id pci 0x0096
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0097
-+subdevice.name iSeries 2778 DASD IOA
-
- vendor.id pci 0x1014
-&device.id pci 0x0096
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0098
-+subdevice.name iSeries 2763 DASD IOA
-
- vendor.id pci 0x1014
-&device.id pci 0x0096
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0099
-+subdevice.name iSeries 2748 DASD IOA
-
- vendor.id pci 0x1014
-&device.id pci 0x009f
-+device.name PCI 4758 Cryptographic Accelerator
-
- vendor.id pci 0x1014
-&device.id pci 0x00a5
-+device.name ATM Controller (1410a500)
-
- vendor.id pci 0x1014
-&device.id pci 0x00a6
-+device.name ATM 155MBPS MM Controller (1410a600)
-
- vendor.id pci 0x1014
-&device.id pci 0x00b7
-+device.name 256-bit Graphics Rasterizer [Fire GL1]
-
- vendor.id pci 0x1014
-&device.id pci 0x00b7
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x00b8
-+subdevice.name FireGL1 AGP 32Mb
-
- vendor.id pci 0x1014
-&device.id pci 0x00b8
-+device.name GXT2000P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x00be
-+device.name ATM 622MBPS Controller (1410be00)
-
- vendor.id pci 0x1014
-&device.id pci 0x00dc
-+device.name Advanced Systems Management Adapter (ASMA)
-
- vendor.id pci 0x1014
-&device.id pci 0x00fc
-+device.name CPC710 Dual Bridge and Memory Controller (PCI-64)
-
- vendor.id pci 0x1014
-&device.id pci 0x0104
-+device.name Gigabit Ethernet-SX Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0105
-+device.name CPC710 Dual Bridge and Memory Controller (PCI-32)
-
- vendor.id pci 0x1014
-&device.id pci 0x010f
-+device.name Remote Supervisor Adapter (RSA)
-
- vendor.id pci 0x1014
-&device.id pci 0x0142
-+device.name Yotta Video Compositor Input
-
- vendor.id pci 0x1014
-&device.id pci 0x0142
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0143
-+subdevice.name Yotta Input Controller (ytin)
-
- vendor.id pci 0x1014
-&device.id pci 0x0144
-+device.name Yotta Video Compositor Output
-
- vendor.id pci 0x1014
-&device.id pci 0x0144
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0145
-+subdevice.name Yotta Output Controller (ytout)
-
- vendor.id pci 0x1014
-&device.id pci 0x0156
-+device.name 405GP PLB to PCI Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x015e
-+device.name 622Mbps ATM PCI Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0160
-+device.name 64bit/66MHz PCI ATM 155 MMF
-
- vendor.id pci 0x1014
-&device.id pci 0x016e
-+device.name GXT4000P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0170
-+device.name GXT6000P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x017d
-+device.name GXT300P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0180
-+device.name Snipe chipset SCSI controller
-
- vendor.id pci 0x1014
-&device.id pci 0x0180
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0241
-+subdevice.name iSeries 2757 DASD IOA
-
- vendor.id pci 0x1014
-&device.id pci 0x0180
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0264
-+subdevice.name Quad Channel PCI-X U320 SCSI RAID Adapter (2780)
-
- vendor.id pci 0x1014
-&device.id pci 0x0188
-+device.name EADS-X PCI-X to PCI-X Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x01a7
-+device.name PCI-X to PCI-X Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-+device.name ServeRAID Controller
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01be
-+subdevice.name ServeRAID-4M
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01bf
-+subdevice.name ServeRAID-4L
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0208
-+subdevice.name ServeRAID-4Mx
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x020e
-+subdevice.name ServeRAID-4Lx
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x022e
-+subdevice.name ServeRAID-4H
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0258
-+subdevice.name ServeRAID-5i
-
- vendor.id pci 0x1014
-&device.id pci 0x01bd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0259
-+subdevice.name ServeRAID-5i
-
- vendor.id pci 0x1014
-&device.id pci 0x01c1
-+device.name 64bit/66MHz PCI ATM 155 UTP
-
- vendor.id pci 0x1014
-&device.id pci 0x01e6
-+device.name Cryptographic Accelerator
-
- vendor.id pci 0x1014
-&device.id pci 0x01ff
-+device.name 10/100 Mbps Ethernet
-
- vendor.id pci 0x1014
-&device.id pci 0x0219
-+device.name Multiport Serial Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0219
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x021a
-+subdevice.name Dual RVX
-
- vendor.id pci 0x1014
-&device.id pci 0x0219
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0251
-+subdevice.name Internal Modem/RVX
-
- vendor.id pci 0x1014
-&device.id pci 0x0219
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0252
-+subdevice.name Quad Internal Modem
-
- vendor.id pci 0x1014
-&device.id pci 0x021b
-+device.name GXT6500P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x021c
-+device.name GXT4500P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0233
-+device.name GXT135P Graphics Adapter
-
- vendor.id pci 0x1014
-&device.id pci 0x0266
-+device.name PCI-X Dual Channel SCSI
-
- vendor.id pci 0x1014
-&device.id pci 0x0268
-+device.name Gigabit Ethernet-SX Adapter (PCI-X)
-
- vendor.id pci 0x1014
-&device.id pci 0x0269
-+device.name 10/100/1000 Base-TX Ethernet Adapter (PCI-X)
-
- vendor.id pci 0x1014
-&device.id pci 0x0302
-+device.name Winnipeg PCI-X Host Bridge
-
- vendor.id pci 0x1014
-&device.id pci 0x0314
-+device.name ZISC 036 Neural accelerator card
-
- vendor.id pci 0x1014
-&device.id pci 0xffff
-+device.name MPIC-2 interrupt controller
-
- vendor.id pci 0x1015
-+vendor.name LSI Logic Corp of Canada
-
- vendor.id pci 0x1016
-+vendor.name ICL Personal Systems
-
- vendor.id pci 0x1017
-+vendor.name SPEA Software AG
-
- vendor.id pci 0x1017
-&device.id pci 0x5343
-+device.name SPEA 3D Accelerator
-
- vendor.id pci 0x1018
-+vendor.name Unisys Systems
-
- vendor.id pci 0x1019
-+vendor.name Elitegroup Computer Systems
-
- vendor.id pci 0x101a
-+vendor.name AT&T GIS (NCR)
-
- vendor.id pci 0x101a
-&device.id pci 0x0005
-+device.name 100VG ethernet
-
- vendor.id pci 0x101b
-+vendor.name Vitesse Semiconductor
-
- vendor.id pci 0x101c
-+vendor.name Western Digital
-
- vendor.id pci 0x101c
-&device.id pci 0x0193
-+device.name 33C193A
-
- vendor.id pci 0x101c
-&device.id pci 0x0196
-+device.name 33C196A
-
- vendor.id pci 0x101c
-&device.id pci 0x0197
-+device.name 33C197A
-
- vendor.id pci 0x101c
-&device.id pci 0x0296
-+device.name 33C296A
-
- vendor.id pci 0x101c
-&device.id pci 0x3193
-+device.name 7193
-
- vendor.id pci 0x101c
-&device.id pci 0x3197
-+device.name 7197
-
- vendor.id pci 0x101c
-&device.id pci 0x3296
-+device.name 33C296A
-
- vendor.id pci 0x101c
-&device.id pci 0x4296
-+device.name 34C296
-
- vendor.id pci 0x101c
-&device.id pci 0x9710
-+device.name Pipeline 9710
-
- vendor.id pci 0x101c
-&device.id pci 0x9712
-+device.name Pipeline 9712
-
- vendor.id pci 0x101c
-&device.id pci 0xc24a
-+device.name 90C
-
- vendor.id pci 0x101e
-+vendor.name American Megatrends Inc.
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-+device.name MegaRAID
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0471
-+subdevice.name MegaRAID 471 Enterprise 1600 RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0475
-+subdevice.name MegaRAID 475 Express 500/500LC RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0477
-+subdevice.name MegaRAID 477 Elite 3100 RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0493
-+subdevice.name MegaRAID 493 Elite 1600 RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0494
-+subdevice.name MegaRAID 494 Elite 1650 RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0503
-+subdevice.name MegaRAID 503 Enterprise 1650 RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0511
-+subdevice.name MegaRAID 511 i4 IDE RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0522
-+subdevice.name MegaRAID 522 i4133 RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0471
-+subdevice.name PowerEdge RAID Controller 3/QC
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0475
-+subdevice.name PowerEdge RAID Controller 3/SC
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0493
-+subdevice.name PowerEdge RAID Controller 3/DC
-
- vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0511
-+subdevice.name PowerEdge Cost Effective RAID Controller ATA100/4Ch
-
- vendor.id pci 0x101e
-&device.id pci 0x9010
-+device.name MegaRAID 428 Ultra RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x9030
-+device.name EIDE Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x9031
-+device.name EIDE Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x9032
-+device.name EIDE & SCSI Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x9033
-+device.name SCSI Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x9040
-+device.name Multimedia card
-
- vendor.id pci 0x101e
-&device.id pci 0x9060
-+device.name MegaRAID 434 Ultra GT RAID Controller
-
- vendor.id pci 0x101e
-&device.id pci 0x9063
-+device.name MegaRAC
-
- vendor.id pci 0x101e
-&device.id pci 0x9063
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0767
-+subdevice.name Dell Remote Assistant Card 2
-
- vendor.id pci 0x101f
-+vendor.name PictureTel
-
- vendor.id pci 0x1020
-+vendor.name Hitachi Computer Products
-
- vendor.id pci 0x1021
-+vendor.name OKI Electric Industry Co. Ltd.
-
- vendor.id pci 0x1022
-+vendor.name Advanced Micro Devices [AMD]
-
- vendor.id pci 0x1022
-&device.id pci 0x1100
-+device.name K8 [Athlon64/Opteron] HyperTransport Technology Configuration
-
- vendor.id pci 0x1022
-&device.id pci 0x1101
-+device.name K8 [Athlon64/Opteron] Address Map
-
- vendor.id pci 0x1022
-&device.id pci 0x1102
-+device.name K8 [Athlon64/Opteron] DRAM Controller
-
- vendor.id pci 0x1022
-&device.id pci 0x1103
-+device.name K8 [Athlon64/Opteron] Miscellaneous Control
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-+device.name 79c970 [PCnet32 LANCE]
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x2000
-+subdevice.name NetFinity 10/100 Fast Ethernet
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1022
-&subdevice.id pci 0x2000
-+subdevice.name PCnet - Fast 79C971
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x104c
-+subdevice.name Ethernet with LAN remote power Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1064
-+subdevice.name Ethernet with LAN remote power Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1065
-+subdevice.name Ethernet with LAN remote power Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x106c
-+subdevice.name Ethernet with LAN remote power Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x106e
-+subdevice.name Ethernet with LAN remote power Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10ea
-+subdevice.name Ethernet with LAN remote power Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x1220
-+subdevice.name EN1220 10/100 Fast Ethernet
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2450
-+subdevice.name AT-2450 10/100 Fast Ethernet
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2454
-+subdevice.name AT-2450v4 10Mb Ethernet Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2700
-+subdevice.name AT-2700TX 10/100 Fast Ethernet
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2701
-+subdevice.name AT-2700FX 100Mb Ethernet
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1000
-+subdevice.name CC7/CR7/CP7/VC7/VP7/VR7 mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1010
-+subdevice.name CP5/CR6 mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1020
-+subdevice.name VR6 mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1030
-+subdevice.name PC5 mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1040
-+subdevice.name CL7 mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x2000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1060
-+subdevice.name PC7 mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x2001
-+device.name 79c978 [HomePNA]
-
- vendor.id pci 0x1022
-&device.id pci 0x2001
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0a78
-+subdevice.name Multimedia Home Network Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2001
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x0299
-+subdevice.name ActionLink Home Network Adapter
-
- vendor.id pci 0x1022
-&device.id pci 0x2003
-+device.name Am 1771 MBW [Alchemy]
-
- vendor.id pci 0x1022
-&device.id pci 0x2020
-+device.name 53c974 [PCscsi]
-
- vendor.id pci 0x1022
-&device.id pci 0x2040
-+device.name 79c974
-
- vendor.id pci 0x1022
-&device.id pci 0x3000
-+device.name ELanSC520 Microcontroller
-
- vendor.id pci 0x1022
-&device.id pci 0x7006
-+device.name AMD-751 [Irongate] System Controller
-
- vendor.id pci 0x1022
-&device.id pci 0x7007
-+device.name AMD-751 [Irongate] AGP Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x700a
-+device.name AMD-IGR4 AGP Host to PCI Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x700b
-+device.name AMD-IGR4 PCI to PCI Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x700c
-+device.name AMD-760 MP [IGD4-2P] System Controller
-
- vendor.id pci 0x1022
-&device.id pci 0x700d
-+device.name AMD-760 MP [IGD4-2P] AGP Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x700e
-+device.name AMD-760 [IGD4-1P] System Controller
-
- vendor.id pci 0x1022
-&device.id pci 0x700f
-+device.name AMD-760 [IGD4-1P] AGP Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x7400
-+device.name AMD-755 [Cobra] ISA
-
- vendor.id pci 0x1022
-&device.id pci 0x7401
-+device.name AMD-755 [Cobra] IDE
-
- vendor.id pci 0x1022
-&device.id pci 0x7403
-+device.name AMD-755 [Cobra] ACPI
-
- vendor.id pci 0x1022
-&device.id pci 0x7404
-+device.name AMD-755 [Cobra] USB
-
- vendor.id pci 0x1022
-&device.id pci 0x7408
-+device.name AMD-756 [Viper] ISA
-
- vendor.id pci 0x1022
-&device.id pci 0x7409
-+device.name AMD-756 [Viper] IDE
-
- vendor.id pci 0x1022
-&device.id pci 0x740b
-+device.name AMD-756 [Viper] ACPI
-
- vendor.id pci 0x1022
-&device.id pci 0x740c
-+device.name AMD-756 [Viper] USB
-
- vendor.id pci 0x1022
-&device.id pci 0x7410
-+device.name AMD-766 [ViperPlus] ISA
-
- vendor.id pci 0x1022
-&device.id pci 0x7411
-+device.name AMD-766 [ViperPlus] IDE
-
- vendor.id pci 0x1022
-&device.id pci 0x7413
-+device.name AMD-766 [ViperPlus] ACPI
-
- vendor.id pci 0x1022
-&device.id pci 0x7414
-+device.name AMD-766 [ViperPlus] USB
-
- vendor.id pci 0x1022
-&device.id pci 0x7440
-+device.name AMD-768 [Opus] ISA
-
- vendor.id pci 0x1022
-&device.id pci 0x7440
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8044
-+subdevice.name A7M-D Mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x7441
-+device.name AMD-768 [Opus] IDE
-
- vendor.id pci 0x1022
-&device.id pci 0x7443
-+device.name AMD-768 [Opus] ACPI
-
- vendor.id pci 0x1022
-&device.id pci 0x7443
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8044
-+subdevice.name A7M-D Mainboard
-
- vendor.id pci 0x1022
-&device.id pci 0x7445
-+device.name AMD-768 [Opus] Audio
-
- vendor.id pci 0x1022
-&device.id pci 0x7446
-+device.name AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible)
-
- vendor.id pci 0x1022
-&device.id pci 0x7448
-+device.name AMD-768 [Opus] PCI
-
- vendor.id pci 0x1022
-&device.id pci 0x7449
-+device.name AMD-768 [Opus] USB
-
- vendor.id pci 0x1022
-&device.id pci 0x7450
-+device.name AMD-8131 PCI-X Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x7451
-+device.name AMD-8131 PCI-X APIC
-
- vendor.id pci 0x1022
-&device.id pci 0x7454
-+device.name AMD-8151 System Controller
-
- vendor.id pci 0x1022
-&device.id pci 0x7455
-+device.name AMD-8151 AGP Bridge
-
- vendor.id pci 0x1022
-&device.id pci 0x7460
-+device.name AMD-8111 PCI
-
- vendor.id pci 0x1022
-&device.id pci 0x7460
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x3017
-+subdevice.name HDAMB
-
- vendor.id pci 0x1022
-&device.id pci 0x7461
-+device.name AMD-8111 USB
-
- vendor.id pci 0x1022
-&device.id pci 0x7462
-+device.name AMD-8111 Ethernet
-
- vendor.id pci 0x1022
-&device.id pci 0x7464
-+device.name AMD-8111 USB
-
- vendor.id pci 0x1022
-&device.id pci 0x7464
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x3017
-+subdevice.name HDAMB
-
- vendor.id pci 0x1022
-&device.id pci 0x7468
-+device.name AMD-8111 LPC
-
- vendor.id pci 0x1022
-&device.id pci 0x7468
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x3017
-+subdevice.name HDAMB
-
- vendor.id pci 0x1022
-&device.id pci 0x7469
-+device.name AMD-8111 IDE
-
- vendor.id pci 0x1022
-&device.id pci 0x7469
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x3017
-+subdevice.name HDAMB
-
- vendor.id pci 0x1022
-&device.id pci 0x746a
-+device.name AMD-8111 SMBus 2.0
-
- vendor.id pci 0x1022
-&device.id pci 0x746b
-+device.name AMD-8111 ACPI
-
- vendor.id pci 0x1022
-&device.id pci 0x746b
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x3017
-+subdevice.name HDAMB
-
- vendor.id pci 0x1022
-&device.id pci 0x746d
-+device.name AMD-8111 AC97 Audio
-
- vendor.id pci 0x1022
-&device.id pci 0x746d
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x3017
-+subdevice.name HDAMB
-
- vendor.id pci 0x1022
-&device.id pci 0x746e
-+device.name AMD-8111 MC97 Modem
-
- vendor.id pci 0x1022
-&device.id pci 0x756b
-+device.name AMD-8111 ACPI
-
- vendor.id pci 0x1023
-+vendor.name Trident Microsystems
-
- vendor.id pci 0x1023
-&device.id pci 0x0194
-+device.name 82C194
-
- vendor.id pci 0x1023
-&device.id pci 0x2000
-+device.name 4DWave DX
-
- vendor.id pci 0x1023
-&device.id pci 0x2001
-+device.name 4DWave NX
-
- vendor.id pci 0x1023
-&device.id pci 0x2001
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x1400
-+subdevice.name Trident PCI288-Q3DII (NX)
-
- vendor.id pci 0x1023
-&device.id pci 0x2100
-+device.name CyberBlade XP4m32
-
- vendor.id pci 0x1023
-&device.id pci 0x8400
-+device.name CyberBlade/i7
-
- vendor.id pci 0x1023
-&device.id pci 0x8400
-&subvendor.id pci 0x1023
-&subdevice.id pci 0x8400
-+subdevice.name CyberBlade i7 AGP
-
- vendor.id pci 0x1023
-&device.id pci 0x8420
-+device.name CyberBlade/i7d
-
- vendor.id pci 0x1023
-&device.id pci 0x8420
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb15a
-+subdevice.name CyberBlade i7 AGP
-
- vendor.id pci 0x1023
-&device.id pci 0x8500
-+device.name CyberBlade/i1
-
- vendor.id pci 0x1023
-&device.id pci 0x8520
-+device.name CyberBlade i1
-
- vendor.id pci 0x1023
-&device.id pci 0x8520
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb16e
-+subdevice.name CyberBlade i1 AGP
-
- vendor.id pci 0x1023
-&device.id pci 0x8520
-&subvendor.id pci 0x1023
-&subdevice.id pci 0x8520
-+subdevice.name CyberBlade i1 AGP
-
- vendor.id pci 0x1023
-&device.id pci 0x8620
-+device.name CyberBlade/i1
-
- vendor.id pci 0x1023
-&device.id pci 0x8620
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0502
-+subdevice.name ThinkPad R30/T30
-
- vendor.id pci 0x1023
-&device.id pci 0x8820
-+device.name CyberBlade XPAi1
-
- vendor.id pci 0x1023
-&device.id pci 0x9320
-+device.name TGUI 9320
-
- vendor.id pci 0x1023
-&device.id pci 0x9350
-+device.name GUI Accelerator
-
- vendor.id pci 0x1023
-&device.id pci 0x9360
-+device.name Flat panel GUI Accelerator
-
- vendor.id pci 0x1023
-&device.id pci 0x9382
-+device.name Cyber 9382 [Reference design]
-
- vendor.id pci 0x1023
-&device.id pci 0x9383
-+device.name Cyber 9383 [Reference design]
-
- vendor.id pci 0x1023
-&device.id pci 0x9385
-+device.name Cyber 9385 [Reference design]
-
- vendor.id pci 0x1023
-&device.id pci 0x9386
-+device.name Cyber 9386
-
- vendor.id pci 0x1023
-&device.id pci 0x9388
-+device.name Cyber 9388
-
- vendor.id pci 0x1023
-&device.id pci 0x9397
-+device.name Cyber 9397
-
- vendor.id pci 0x1023
-&device.id pci 0x939a
-+device.name Cyber 9397DVD
-
- vendor.id pci 0x1023
-&device.id pci 0x9420
-+device.name TGUI 9420
-
- vendor.id pci 0x1023
-&device.id pci 0x9430
-+device.name TGUI 9430
-
- vendor.id pci 0x1023
-&device.id pci 0x9440
-+device.name TGUI 9440
-
- vendor.id pci 0x1023
-&device.id pci 0x9460
-+device.name TGUI 9460
-
- vendor.id pci 0x1023
-&device.id pci 0x9470
-+device.name TGUI 9470
-
- vendor.id pci 0x1023
-&device.id pci 0x9520
-+device.name Cyber 9520
-
- vendor.id pci 0x1023
-&device.id pci 0x9525
-+device.name Cyber 9525
-
- vendor.id pci 0x1023
-&device.id pci 0x9525
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1094
-+subdevice.name Lifebook C6155
-
- vendor.id pci 0x1023
-&device.id pci 0x9540
-+device.name Cyber 9540
-
- vendor.id pci 0x1023
-&device.id pci 0x9660
-+device.name TGUI 9660/938x/968x
-
- vendor.id pci 0x1023
-&device.id pci 0x9680
-+device.name TGUI 9680
-
- vendor.id pci 0x1023
-&device.id pci 0x9682
-+device.name TGUI 9682
-
- vendor.id pci 0x1023
-&device.id pci 0x9683
-+device.name TGUI 9683
-
- vendor.id pci 0x1023
-&device.id pci 0x9685
-+device.name ProVIDIA 9685
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-+device.name 3DImage 9750
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x9750
-+subdevice.name 3DImage 9750
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-&subvendor.id pci 0x1023
-&subdevice.id pci 0x9750
-+subdevice.name 3DImage 9750
-
- vendor.id pci 0x1023
-&device.id pci 0x9753
-+device.name TGUI 9753
-
- vendor.id pci 0x1023
-&device.id pci 0x9754
-+device.name TGUI 9754
-
- vendor.id pci 0x1023
-&device.id pci 0x9759
-+device.name TGUI 975
-
- vendor.id pci 0x1023
-&device.id pci 0x9783
-+device.name TGUI 9783
-
- vendor.id pci 0x1023
-&device.id pci 0x9785
-+device.name TGUI 9785
-
- vendor.id pci 0x1023
-&device.id pci 0x9850
-+device.name 3DImage 9850
-
- vendor.id pci 0x1023
-&device.id pci 0x9880
-+device.name Blade 3D PCI/AGP
-
- vendor.id pci 0x1023
-&device.id pci 0x9880
-&subvendor.id pci 0x1023
-&subdevice.id pci 0x9880
-+subdevice.name Blade 3D
-
- vendor.id pci 0x1023
-&device.id pci 0x9910
-+device.name CyberBlade/XP
-
- vendor.id pci 0x1023
-&device.id pci 0x9930
-+device.name CyberBlade/XPm
-
- vendor.id pci 0x1024
-+vendor.name Zenith Data Systems
-
- vendor.id pci 0x1025
-+vendor.name Acer Incorporated [ALI]
-
- vendor.id pci 0x1025
-&device.id pci 0x1435
-+device.name M1435
-
- vendor.id pci 0x1025
-&device.id pci 0x1445
-+device.name M1445
-
- vendor.id pci 0x1025
-&device.id pci 0x1449
-+device.name M1449
-
- vendor.id pci 0x1025
-&device.id pci 0x1451
-+device.name M1451
-
- vendor.id pci 0x1025
-&device.id pci 0x1461
-+device.name M1461
-
- vendor.id pci 0x1025
-&device.id pci 0x1489
-+device.name M1489
-
- vendor.id pci 0x1025
-&device.id pci 0x1511
-+device.name M1511
-
- vendor.id pci 0x1025
-&device.id pci 0x1512
-+device.name ALI M1512 Aladdin
-
- vendor.id pci 0x1025
-&device.id pci 0x1513
-+device.name M1513
-
- vendor.id pci 0x1025
-&device.id pci 0x1521
-+device.name ALI M1521 Aladdin III CPU Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1521
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1521
-+subdevice.name ALI M1521 Aladdin III CPU Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1523
-+device.name ALI M1523 ISA Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1523
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1523
-+subdevice.name ALI M1523 ISA Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1531
-+device.name M1531 Northbridge [Aladdin IV/IV+]
-
- vendor.id pci 0x1025
-&device.id pci 0x1533
-+device.name M1533 PCI-to-ISA Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1533
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1533
-+subdevice.name ALI M1533 Aladdin IV/V ISA South Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1535
-+device.name M1535 PCI Bridge + Super I/O + FIR
-
- vendor.id pci 0x1025
-&device.id pci 0x1541
-+device.name M1541 Northbridge [Aladdin V]
-
- vendor.id pci 0x1025
-&device.id pci 0x1541
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1541
-+subdevice.name ALI M1541 Aladdin V/V+ AGP+PCI North Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1542
-+device.name M1542 Northbridge [Aladdin V]
-
- vendor.id pci 0x1025
-&device.id pci 0x1543
-+device.name M1543 PCI-to-ISA Bridge + Super I/O + FIR
-
- vendor.id pci 0x1025
-&device.id pci 0x1561
-+device.name M1561 Northbridge [Aladdin 7]
-
- vendor.id pci 0x1025
-&device.id pci 0x1621
-+device.name M1621 Northbridge [Aladdin-Pro II]
-
- vendor.id pci 0x1025
-&device.id pci 0x1631
-+device.name M1631 Northbridge+3D Graphics [Aladdin TNT2]
-
- vendor.id pci 0x1025
-&device.id pci 0x1641
-+device.name M1641 Northbridge [Aladdin-Pro IV]
-
- vendor.id pci 0x1025
-&device.id pci 0x1647
-+device.name M1647 [MaGiK1] PCI North Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x1671
-+device.name M1671 Northbridge [ALADDiN-P4]
-
- vendor.id pci 0x1025
-&device.id pci 0x1672
-+device.name Northbridge [CyberALADDiN-P4]
-
- vendor.id pci 0x1025
-&device.id pci 0x3141
-+device.name M3141
-
- vendor.id pci 0x1025
-&device.id pci 0x3143
-+device.name M3143
-
- vendor.id pci 0x1025
-&device.id pci 0x3145
-+device.name M3145
-
- vendor.id pci 0x1025
-&device.id pci 0x3147
-+device.name M3147
-
- vendor.id pci 0x1025
-&device.id pci 0x3149
-+device.name M3149
-
- vendor.id pci 0x1025
-&device.id pci 0x3151
-+device.name M3151
-
- vendor.id pci 0x1025
-&device.id pci 0x3307
-+device.name M3307 MPEG-I Video Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x3309
-+device.name M3309 MPEG-II Video w/ Software Audio Decoder
-
- vendor.id pci 0x1025
-&device.id pci 0x3321
-+device.name M3321 MPEG-II Audio/Video Decoder
-
- vendor.id pci 0x1025
-&device.id pci 0x5212
-+device.name M4803
-
- vendor.id pci 0x1025
-&device.id pci 0x5215
-+device.name ALI PCI EIDE Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5217
-+device.name M5217H
-
- vendor.id pci 0x1025
-&device.id pci 0x5219
-+device.name M5219
-
- vendor.id pci 0x1025
-&device.id pci 0x5225
-+device.name M5225
-
- vendor.id pci 0x1025
-&device.id pci 0x5229
-+device.name M5229
-
- vendor.id pci 0x1025
-&device.id pci 0x5235
-+device.name M5235
-
- vendor.id pci 0x1025
-&device.id pci 0x5237
-+device.name M5237 PCI USB Host Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5240
-+device.name EIDE Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5241
-+device.name PCMCIA Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x5242
-+device.name General Purpose Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5243
-+device.name PCI to PCI Bridge Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5244
-+device.name Floppy Disk Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5247
-+device.name M1541 PCI to PCI Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x5251
-+device.name M5251 P1394 Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x5427
-+device.name PCI to AGP Bridge
-
- vendor.id pci 0x1025
-&device.id pci 0x5451
-+device.name M5451 PCI AC-Link Controller Audio Device
-
- vendor.id pci 0x1025
-&device.id pci 0x5453
-+device.name M5453 PCI AC-Link Controller Modem Device
-
- vendor.id pci 0x1025
-&device.id pci 0x7101
-+device.name M7101 PCI PMU Power Management Controller
-
- vendor.id pci 0x1025
-&device.id pci 0x7101
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x7101
-+subdevice.name M7101 PCI PMU Power Management Controller
-
- vendor.id pci 0x1028
-+vendor.name Dell
-
- vendor.id pci 0x1028
-&device.id pci 0x0001
-+device.name PowerEdge Expandable RAID Controller 2/Si
-
- vendor.id pci 0x1028
-&device.id pci 0x0001
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0001
-+subdevice.name PowerEdge 2400
-
- vendor.id pci 0x1028
-&device.id pci 0x0002
-+device.name PowerEdge Expandable RAID Controller 3/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0002
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0002
-+subdevice.name PowerEdge 4400
-
- vendor.id pci 0x1028
-&device.id pci 0x0003
-+device.name PowerEdge Expandable RAID Controller 3/Si
-
- vendor.id pci 0x1028
-&device.id pci 0x0003
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0003
-+subdevice.name PowerEdge 2450
-
- vendor.id pci 0x1028
-&device.id pci 0x0006
-+device.name PowerEdge Expandable RAID Controller 3/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0007
-+device.name Remote Access Card III
-
- vendor.id pci 0x1028
-&device.id pci 0x0008
-+device.name Remote Access Card III
-
- vendor.id pci 0x1028
-&device.id pci 0x0009
-+device.name Remote Access Card III: BMC/SMIC device not present
-
- vendor.id pci 0x1028
-&device.id pci 0x000a
-+device.name PowerEdge Expandable RAID Controller 3/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x000c
-+device.name Embedded Remote Access or ERA/O
-
- vendor.id pci 0x1028
-&device.id pci 0x000d
-+device.name Embedded Remote Access: BMC/SMIC device
-
- vendor.id pci 0x1028
-&device.id pci 0x000e
-+device.name PowerEdge Expandable RAID controller 4/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x000f
-+device.name PowerEdge Expandable RAID controller 4/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0010
-+device.name Remote Access Card 4
-
- vendor.id pci 0x1028
-&device.id pci 0x0011
-+device.name Remote Access Card 4 Daughter Card
-
- vendor.id pci 0x1028
-&device.id pci 0x0012
-+device.name Remote Access Card 4 Daughter Card Virtual UART
-
- vendor.id pci 0x1028
-&device.id pci 0x0013
-+device.name PowerEdge Expandable RAID controller 4
-
- vendor.id pci 0x1028
-&device.id pci 0x0013
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x016c
-+subdevice.name PowerEdge Expandable RAID Controller 4e/Si
-
- vendor.id pci 0x1028
-&device.id pci 0x0013
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x016d
-+subdevice.name PowerEdge Expandable RAID Controller 4e/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0013
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x016e
-+subdevice.name PowerEdge Expandable RAID Controller 4e/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0013
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x016f
-+subdevice.name PowerEdge Expandable RAID Controller 4e/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0013
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0170
-+subdevice.name PowerEdge Expandable RAID Controller 4e/Di
-
- vendor.id pci 0x1028
-&device.id pci 0x0014
-+device.name Remote Access Card 4 Daughter Card SMIC interface
-
- vendor.id pci 0x1029
-+vendor.name Siemens Nixdorf IS
-
- vendor.id pci 0x102a
-+vendor.name LSI Logic
-
- vendor.id pci 0x102a
-&device.id pci 0x0000
-+device.name HYDRA
-
- vendor.id pci 0x102a
-&device.id pci 0x0010
-+device.name ASPEN
-
- vendor.id pci 0x102a
-&device.id pci 0x001f
-+device.name AHA-2940U2/U2W /7890/7891 SCSI Controllers
-
- vendor.id pci 0x102a
-&device.id pci 0x001f
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x000f
-+subdevice.name 2940U2W SCSI Controller
-
- vendor.id pci 0x102a
-&device.id pci 0x001f
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0106
-+subdevice.name 2940U2W SCSI Controller
-
- vendor.id pci 0x102a
-&device.id pci 0x001f
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xa180
-+subdevice.name 2940U2W SCSI Controller
-
- vendor.id pci 0x102a
-&device.id pci 0x00c5
-+device.name AIC-7899 U160/m SCSI Controller
-
- vendor.id pci 0x102a
-&device.id pci 0x00c5
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00c5
-+subdevice.name PowerEdge 2550/2650/4600
-
- vendor.id pci 0x102a
-&device.id pci 0x00cf
-+device.name AIC-7899P U160/m
-
- vendor.id pci 0x102a
-&device.id pci 0x00cf
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0106
-+subdevice.name PowerEdge 4600
-
- vendor.id pci 0x102a
-&device.id pci 0x00cf
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0121
-+subdevice.name PowerEdge 2650
-
- vendor.id pci 0x102b
-+vendor.name Matrox Graphics, Inc.
-
- vendor.id pci 0x102b
-&device.id pci 0x0010
-+device.name MGA-I [Impression?]
-
- vendor.id pci 0x102b
-&device.id pci 0x0100
-+device.name MGA 1064SG [Mystique]
-
- vendor.id pci 0x102b
-&device.id pci 0x0518
-+device.name MGA-II [Athena]
-
- vendor.id pci 0x102b
-&device.id pci 0x0519
-+device.name MGA 2064W [Millennium]
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-+device.name MGA 1064SG [Mystique]
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0100
-+subdevice.name MGA-1064SG Mystique
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1100
-+subdevice.name MGA-1084SG Mystique
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1200
-+subdevice.name MGA-1084SG Mystique
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-&subvendor.id pci 0x1100
-&subdevice.id pci 0x102b
-+subdevice.name MGA-1084SG Mystique
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x0018
-+subdevice.name Scenic Pro C5 (D1025)
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-+device.name MGA 2164W [Millennium II]
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x051b
-+subdevice.name MGA-2164W Millennium II
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1100
-+subdevice.name MGA-2164W Millennium II
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1200
-+subdevice.name MGA-2164W Millennium II
-
- vendor.id pci 0x102b
-&device.id pci 0x051e
-+device.name MGA 1064SG [Mystique] AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x051f
-+device.name MGA 2164W [Millennium II] AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-+device.name MGA G200
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbc2
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbc8
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbe2
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbe8
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff03
-+subdevice.name Millennium G200 SD
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff04
-+subdevice.name Marvel G200
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-+device.name MGA G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x1014
-&subdevice.id pci 0xff03
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x48e9
-+subdevice.name Mystique G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x48f8
-+subdevice.name Millennium G200 SD AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x4a60
-+subdevice.name Millennium G200 LE AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x4a64
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xc93c
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xc9b0
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xc9bc
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xca60
-+subdevice.name Millennium G250 LE AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xca6c
-+subdevice.name Millennium G250 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbbc
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbc2
-+subdevice.name Millennium G200 MMS (Dual G200)
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbc3
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbc8
-+subdevice.name Millennium G200 MMS (Dual G200)
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbd2
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbd3
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbd4
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbd5
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbd8
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbd9
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbe2
-+subdevice.name Millennium G200 MMS (Quad G200)
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbe3
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbe8
-+subdevice.name Millennium G200 MMS (Quad G200)
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbf2
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbf3
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbf4
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbf5
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbf8
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xdbf9
-+subdevice.name G200 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xf806
-+subdevice.name Mystique G200 Video AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff00
-+subdevice.name MGA-G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff02
-+subdevice.name Mystique G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff03
-+subdevice.name Millennium G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff04
-+subdevice.name Marvel G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x0032
-+subdevice.name MGA-G200 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-+device.name MGA G400 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb16f
-+subdevice.name MGA-G400 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0328
-+subdevice.name Millennium G400 16Mb SDRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0338
-+subdevice.name Millennium G400 16Mb SDRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0378
-+subdevice.name Millennium G400 32Mb SDRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0541
-+subdevice.name Millennium G450 Dual Head
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0542
-+subdevice.name Millennium G450 Dual Head LX
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0543
-+subdevice.name Millennium G450 Single Head LX
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0641
-+subdevice.name Millennium G450 32Mb SDRAM Dual Head
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0642
-+subdevice.name Millennium G450 32Mb SDRAM Dual Head LX
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0643
-+subdevice.name Millennium G450 32Mb SDRAM Single Head LX
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x07c0
-+subdevice.name Millennium G450 Dual Head LE
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x07c1
-+subdevice.name Millennium G450 SDR Dual Head LE
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d41
-+subdevice.name Millennium G450 Dual Head PCI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d42
-+subdevice.name Millennium G450 Dual Head LX PCI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d43
-+subdevice.name Millennium G450 32Mb Dual Head PCI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0e00
-+subdevice.name Marvel G450 eTV
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0e01
-+subdevice.name Marvel G450 eTV
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0e02
-+subdevice.name Marvel G450 eTV
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0e03
-+subdevice.name Marvel G450 eTV
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0f80
-+subdevice.name Millennium G450 Low Profile
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0f81
-+subdevice.name Millennium G450 Low Profile
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0f82
-+subdevice.name Millennium G450 Low Profile DVI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0f83
-+subdevice.name Millennium G450 Low Profile DVI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x19d8
-+subdevice.name Millennium G400 16Mb SGRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x19f8
-+subdevice.name Millennium G400 32Mb SGRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2159
-+subdevice.name Millennium G400 Dual Head 16Mb
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2179
-+subdevice.name Millennium G400 MAX/Dual Head 32Mb
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x217d
-+subdevice.name Millennium G400 Dual Head Max
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c0
-+subdevice.name Millennium G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c1
-+subdevice.name Millennium G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c2
-+subdevice.name Millennium G450 DVI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c3
-+subdevice.name Millennium G450 DVI
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2f58
-+subdevice.name Millennium G400
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2f78
-+subdevice.name Millennium G400
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x3693
-+subdevice.name Marvel G400 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x5dd0
-+subdevice.name 4Sight II
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x5f50
-+subdevice.name 4Sight II
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x5f51
-+subdevice.name 4Sight II
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x5f52
-+subdevice.name 4Sight II
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x9010
-+subdevice.name Millennium G400 Dual Head
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x0400
-+subdevice.name GA-G400
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x1705
-&subdevice.id pci 0x0001
-+subdevice.name Millennium G450 32MB SGRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x1705
-&subdevice.id pci 0x0002
-+subdevice.name Millennium G450 16MB SGRAM
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x1705
-&subdevice.id pci 0x0003
-+subdevice.name Millennium G450 32MB
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x1705
-&subdevice.id pci 0x0004
-+subdevice.name Millennium G450 16MB
-
- vendor.id pci 0x102b
-&device.id pci 0x0527
-+device.name MGA Parhelia AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x0527
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0840
-+subdevice.name Parhelia 128Mb
-
- vendor.id pci 0x102b
-&device.id pci 0x0d10
-+device.name MGA Ultima/Impression
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-+device.name MGA G100 [Productiva]
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff01
-+subdevice.name Productiva G100
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff05
-+subdevice.name Productiva G100 Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-+device.name MGA G100 [Productiva] AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1001
-+subdevice.name MGA-G100 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff00
-+subdevice.name MGA-G100 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff01
-+subdevice.name MGA-G100 Productiva AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff03
-+subdevice.name Millennium G100 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff04
-+subdevice.name MGA-G100 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x102b
-&subdevice.id pci 0xff05
-+subdevice.name MGA-G100 Productiva AGP Multi-Monitor
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x001e
-+subdevice.name MGA-G100 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x2007
-+device.name MGA Mistral
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-+device.name MGA G550 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0f83
-+subdevice.name Millennium G550
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0f84
-+subdevice.name Millennium G550 Dual Head DDR 32Mb
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1e41
-+subdevice.name Millennium G550
-
- vendor.id pci 0x102b
-&device.id pci 0x2537
-+device.name MGA G650 AGP
-
- vendor.id pci 0x102b
-&device.id pci 0x4536
-+device.name VIA Framegrabber
-
- vendor.id pci 0x102b
-&device.id pci 0x6573
-+device.name Shark 10/100 Multiport SwitchNIC
-
- vendor.id pci 0x102c
-+vendor.name Chips and Technologies
-
- vendor.id pci 0x102c
-&device.id pci 0x00b8
-+device.name F64310
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-+device.name F69000 HiQVideo
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x102c
-&subdevice.id pci 0x00c0
-+subdevice.name F69000 HiQVideo
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1000
-+subdevice.name CC7/CR7/CP7/VC7/VP7/VR7 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1010
-+subdevice.name CP5/CR6 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1020
-+subdevice.name VR6 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1030
-+subdevice.name PC5 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x00d0
-+device.name F65545
-
- vendor.id pci 0x102c
-&device.id pci 0x00d8
-+device.name F65545
-
- vendor.id pci 0x102c
-&device.id pci 0x00dc
-+device.name F65548
-
- vendor.id pci 0x102c
-&device.id pci 0x00e0
-+device.name F65550
-
- vendor.id pci 0x102c
-&device.id pci 0x00e4
-+device.name F65554
-
- vendor.id pci 0x102c
-&device.id pci 0x00e5
-+device.name F65555 HiQVPro
-
- vendor.id pci 0x102c
-&device.id pci 0x00e5
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb049
-+subdevice.name Armada 1700 Laptop Display Controller
-
- vendor.id pci 0x102c
-&device.id pci 0x00f0
-+device.name F68554
-
- vendor.id pci 0x102c
-&device.id pci 0x00f4
-+device.name F68554 HiQVision
-
- vendor.id pci 0x102c
-&device.id pci 0x00f5
-+device.name F68555
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-+device.name F69030
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1000
-+subdevice.name CC7/CR7/CP7/VC7/VP7/VR7 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x102d
-+vendor.name Wyse Technology Inc.
-
- vendor.id pci 0x102d
-&device.id pci 0x50dc
-+device.name 3328 Audio
-
- vendor.id pci 0x102e
-+vendor.name Olivetti Advanced Technology
-
- vendor.id pci 0x102f
-+vendor.name Toshiba America
-
- vendor.id pci 0x102f
-&device.id pci 0x0009
-+device.name r4x00
-
- vendor.id pci 0x102f
-&device.id pci 0x000a
-+device.name TX3927 MIPS RISC PCI Controller
-
- vendor.id pci 0x102f
-&device.id pci 0x0020
-+device.name ATM Meteor 155
-
- vendor.id pci 0x102f
-&device.id pci 0x0020
-&subvendor.id pci 0x102f
-&subdevice.id pci 0x00f8
-+subdevice.name ATM Meteor 155
-
- vendor.id pci 0x102f
-&device.id pci 0x0030
-+device.name TC35815CF PCI 10/100 Mbit Ethernet Controller
-
- vendor.id pci 0x102f
-&device.id pci 0x0031
-+device.name TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL
-
- vendor.id pci 0x102f
-&device.id pci 0x0105
-+device.name TC86C001 [goku-s] IDE
-
- vendor.id pci 0x102f
-&device.id pci 0x0106
-+device.name TC86C001 [goku-s] USB 1.1 Host
-
- vendor.id pci 0x102f
-&device.id pci 0x0107
-+device.name TC86C001 [goku-s] USB Device Controller
-
- vendor.id pci 0x102f
-&device.id pci 0x0108
-+device.name TC86C001 [goku-s] I2C/SIO/GPIO Controller
-
- vendor.id pci 0x102f
-&device.id pci 0x0180
-+device.name TX4927/38 MIPS RISC PCI Controller
-
- vendor.id pci 0x102f
-&device.id pci 0x0181
-+device.name TX4925 MIPS RISC PCI Controller
-
- vendor.id pci 0x102f
-&device.id pci 0x0182
-+device.name TX4937 MIPS RISC PCI Controller
-
- vendor.id pci 0x1030
-+vendor.name TMC Research
-
- vendor.id pci 0x1031
-+vendor.name Miro Computer Products AG
-
- vendor.id pci 0x1031
-&device.id pci 0x5601
-+device.name DC20 ASIC
-
- vendor.id pci 0x1031
-&device.id pci 0x5607
-+device.name Video I/O & motion JPEG compressor
-
- vendor.id pci 0x1031
-&device.id pci 0x5631
-+device.name Media 3D
-
- vendor.id pci 0x1031
-&device.id pci 0x6057
-+device.name MiroVideo DC10/DC30+
-
- vendor.id pci 0x1032
-+vendor.name Compaq
-
- vendor.id pci 0x1033
-+vendor.name NEC Corporation
-
- vendor.id pci 0x1033
-&device.id pci 0x0000
-+device.name Vr4181A USB Host or Function Control Unit
-
- vendor.id pci 0x1033
-&device.id pci 0x0001
-+device.name PCI to 486-like bus Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0002
-+device.name PCI to VL98 Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0003
-+device.name ATM Controller
-
- vendor.id pci 0x1033
-&device.id pci 0x0004
-+device.name R4000 PCI Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0005
-+device.name PCI to 486-like bus Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0006
-+device.name PC-9800 Graphic Accelerator
-
- vendor.id pci 0x1033
-&device.id pci 0x0007
-+device.name PCI to UX-Bus Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0008
-+device.name PC-9800 Graphic Accelerator
-
- vendor.id pci 0x1033
-&device.id pci 0x0009
-+device.name PCI to PC9800 Core-Graph Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0016
-+device.name PCI to VL Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x001a
-+device.name [Nile II]
-
- vendor.id pci 0x1033
-&device.id pci 0x0021
-+device.name Vrc4373 [Nile I]
-
- vendor.id pci 0x1033
-&device.id pci 0x0029
-+device.name PowerVR PCX1
-
- vendor.id pci 0x1033
-&device.id pci 0x002a
-+device.name PowerVR 3D
-
- vendor.id pci 0x1033
-&device.id pci 0x002c
-+device.name Star Alpha 2
-
- vendor.id pci 0x1033
-&device.id pci 0x002d
-+device.name PCI to C-bus Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x0035
-+device.name USB
-
- vendor.id pci 0x1033
-&device.id pci 0x0035
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name USB
-
- vendor.id pci 0x1033
-&device.id pci 0x0035
-&subvendor.id pci 0x12ee
-&subdevice.id pci 0x7000
-+subdevice.name Root Hub
-
- vendor.id pci 0x1033
-&device.id pci 0x0035
-&subvendor.id pci 0x1799
-&subdevice.id pci 0x0001
-+subdevice.name Root Hub
-
- vendor.id pci 0x1033
-&device.id pci 0x0035
-&subvendor.id pci 0x807d
-&subdevice.id pci 0x0035
-+subdevice.name PCI-USB2 (OHCI subsystem)
-
- vendor.id pci 0x1033
-&device.id pci 0x003b
-+device.name PCI to C-bus Bridge
-
- vendor.id pci 0x1033
-&device.id pci 0x003e
-+device.name NAPCCARD Cardbus Controller
-
- vendor.id pci 0x1033
-&device.id pci 0x0046
-+device.name PowerVR PCX2 [midas]
-
- vendor.id pci 0x1033
-&device.id pci 0x005a
-+device.name Vrc5074 [Nile 4]
-
- vendor.id pci 0x1033
-&device.id pci 0x0063
-+device.name Firewarden
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-+device.name PowerVR Neon 250 Chipset
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x0020
-+subdevice.name PowerVR Neon 250 AGP 32Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x0080
-+subdevice.name PowerVR Neon 250 AGP 16Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x0088
-+subdevice.name PowerVR Neon 250 16Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x0090
-+subdevice.name PowerVR Neon 250 AGP 16Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x0098
-+subdevice.name PowerVR Neon 250 16Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x00a0
-+subdevice.name PowerVR Neon 250 AGP 32Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x00a8
-+subdevice.name PowerVR Neon 250 32Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0067
-&subvendor.id pci 0x1010
-&subdevice.id pci 0x0120
-+subdevice.name PowerVR Neon 250 AGP 32Mb
-
- vendor.id pci 0x1033
-&device.id pci 0x0074
-+device.name 56k Voice Modem
-
- vendor.id pci 0x1033
-&device.id pci 0x0074
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8014
-+subdevice.name RCV56ACF 56k Voice Modem
-
- vendor.id pci 0x1033
-&device.id pci 0x009b
-+device.name Vrc5476
-
- vendor.id pci 0x1033
-&device.id pci 0x00a5
-+device.name VRC4173
-
- vendor.id pci 0x1033
-&device.id pci 0x00a6
-+device.name VRC5477 AC97
-
- vendor.id pci 0x1033
-&device.id pci 0x00cd
-+device.name IEEE 1394 [OrangeLink] Host Controller
-
- vendor.id pci 0x1033
-&device.id pci 0x00cd
-&subvendor.id pci 0x12ee
-&subdevice.id pci 0x8011
-+subdevice.name Root hub
-
- vendor.id pci 0x1033
-&device.id pci 0x00ce
-+device.name IEEE 1394 Host Controller
-
- vendor.id pci 0x1033
-&device.id pci 0x00df
-+device.name Vr4131
-
- vendor.id pci 0x1033
-&device.id pci 0x00e0
-+device.name USB 2.0
-
- vendor.id pci 0x1033
-&device.id pci 0x00e0
-&subvendor.id pci 0x0ee4
-&subdevice.id pci 0x3383
-+subdevice.name Sitecom IEEE 1394 / USB2.0 Combo Card
-
- vendor.id pci 0x1033
-&device.id pci 0x00e0
-&subvendor.id pci 0x12ee
-&subdevice.id pci 0x7001
-+subdevice.name Root hub
-
- vendor.id pci 0x1033
-&device.id pci 0x00e0
-&subvendor.id pci 0x1799
-&subdevice.id pci 0x0002
-+subdevice.name Root Hub
-
- vendor.id pci 0x1033
-&device.id pci 0x00e0
-&subvendor.id pci 0x807d
-&subdevice.id pci 0x1043
-+subdevice.name PCI-USB2 (EHCI subsystem)
-
- vendor.id pci 0x1033
-&device.id pci 0x00e7
-+device.name IEEE 1394 Host Controller
-
- vendor.id pci 0x1033
-&device.id pci 0x00f2
-+device.name uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr
-
- vendor.id pci 0x1033
-&device.id pci 0x00f3
-+device.name uPD6113x Multimedia Decoder/Processor [EMMA2]
-
- vendor.id pci 0x1033
-&device.id pci 0x010c
-+device.name VR7701
-
- vendor.id pci 0x1034
-+vendor.name Framatome Connectors USA Inc.
-
- vendor.id pci 0x1035
-+vendor.name Comp. & Comm. Research Lab
-
- vendor.id pci 0x1036
-+vendor.name Future Domain Corp.
-
- vendor.id pci 0x1036
-&device.id pci 0x0000
-+device.name TMC-18C30 [36C70]
-
- vendor.id pci 0x1037
-+vendor.name Hitachi Micro Systems
-
- vendor.id pci 0x1038
-+vendor.name AMP, Inc
-
- vendor.id pci 0x1039
-+vendor.name Silicon Integrated Systems [SiS]
-
- vendor.id pci 0x1039
-&device.id pci 0x0001
-+device.name Virtual PCI-to-PCI bridge (AGP)
-
- vendor.id pci 0x1039
-&device.id pci 0x0002
-+device.name SG86C202
-
- vendor.id pci 0x1039
-&device.id pci 0x0006
-+device.name 85C501/2/3
-
- vendor.id pci 0x1039
-&device.id pci 0x0008
-+device.name SiS85C503/5513 (LPC Bridge)
-
- vendor.id pci 0x1039
-&device.id pci 0x0009
-+device.name ACPI
-
- vendor.id pci 0x1039
-&device.id pci 0x0016
-+device.name SiS961/2 SMBus Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x0018
-+device.name SiS85C503/5513 (LPC Bridge)
-
- vendor.id pci 0x1039
-&device.id pci 0x0180
-+device.name RAID bus controller 180 SATA/PATA [SiS]
-
- vendor.id pci 0x1039
-&device.id pci 0x0181
-+device.name SiS SATA
-
- vendor.id pci 0x1039
-&device.id pci 0x0200
-+device.name 5597/5598/6326 VGA
-
- vendor.id pci 0x1039
-&device.id pci 0x0200
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x0000
-+subdevice.name SiS5597 SVGA (Shared RAM)
-
- vendor.id pci 0x1039
-&device.id pci 0x0204
-+device.name 82C204
-
- vendor.id pci 0x1039
-&device.id pci 0x0205
-+device.name SG86C205
-
- vendor.id pci 0x1039
-&device.id pci 0x0300
-+device.name 300/305 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x0300
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2720
-+subdevice.name Leadtek WinFast VR300
-
- vendor.id pci 0x1039
-&device.id pci 0x0310
-+device.name 315H PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x0315
-+device.name 315 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x0325
-+device.name 315PRO PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x0330
-+device.name 330 [Xabre] PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x0406
-+device.name 85C501/2
-
- vendor.id pci 0x1039
-&device.id pci 0x0496
-+device.name 85C496
-
- vendor.id pci 0x1039
-&device.id pci 0x0530
-+device.name 530 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0540
-+device.name 540 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0550
-+device.name 550 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0597
-+device.name 5513C
-
- vendor.id pci 0x1039
-&device.id pci 0x0601
-+device.name 85C601
-
- vendor.id pci 0x1039
-&device.id pci 0x0620
-+device.name 620 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0630
-+device.name 630 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0633
-+device.name 633 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0635
-+device.name 635 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0645
-+device.name SiS645 Host & Memory & AGP Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x0646
-+device.name SiS645DX Host & Memory & AGP Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x0648
-+device.name SiS 645xx
-
- vendor.id pci 0x1039
-&device.id pci 0x0650
-+device.name 650/M650 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0651
-+device.name 651 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0655
-+device.name 655 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0660
-+device.name 660 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0661
-+device.name 661FX/M661FX/M661MX Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0730
-+device.name 730 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0733
-+device.name 733 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0735
-+device.name 735 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0740
-+device.name 740 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0741
-+device.name 741/741GX/M741 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0745
-+device.name 745 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0746
-+device.name 746 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0755
-+device.name 755 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0760
-+device.name 760/M760 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x0900
-+device.name SiS900 PCI Fast Ethernet
-
- vendor.id pci 0x1039
-&device.id pci 0x0900
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a14
-+subdevice.name K7S5A motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x0900
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x0900
-+subdevice.name SiS900 10/100 Ethernet Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x0900
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8035
-+subdevice.name CUSI-FX motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x0961
-+device.name SiS961 [MuTIOL Media IO]
-
- vendor.id pci 0x1039
-&device.id pci 0x0962
-+device.name SiS962 [MuTIOL Media IO]
-
- vendor.id pci 0x1039
-&device.id pci 0x0963
-+device.name SiS963 [MuTIOL Media IO]
-
- vendor.id pci 0x1039
-&device.id pci 0x0964
-+device.name SiS964 [MuTIOL Media IO]
-
- vendor.id pci 0x1039
-&device.id pci 0x0965
-+device.name SiS965 [MuTIOL Media IO]
-
- vendor.id pci 0x1039
-&device.id pci 0x3602
-+device.name 83C602
-
- vendor.id pci 0x1039
-&device.id pci 0x5107
-+device.name 5107
-
- vendor.id pci 0x1039
-&device.id pci 0x5300
-+device.name SiS540 PCI Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x5315
-+device.name 550 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x5401
-+device.name 486 PCI Chipset
-
- vendor.id pci 0x1039
-&device.id pci 0x5511
-+device.name 5511/5512
-
- vendor.id pci 0x1039
-&device.id pci 0x5513
-+device.name 5513 [IDE]
-
- vendor.id pci 0x1039
-&device.id pci 0x5513
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0970
-+subdevice.name P6STP-FL motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x5513
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x5513
-+subdevice.name SiS5513 EIDE Controller (A,B step)
-
- vendor.id pci 0x1039
-&device.id pci 0x5513
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8035
-+subdevice.name CUSI-FX motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x5517
-+device.name 5517
-
- vendor.id pci 0x1039
-&device.id pci 0x5571
-+device.name 5571
-
- vendor.id pci 0x1039
-&device.id pci 0x5581
-+device.name 5581 Pentium Chipset
-
- vendor.id pci 0x1039
-&device.id pci 0x5582
-+device.name 5582
-
- vendor.id pci 0x1039
-&device.id pci 0x5591
-+device.name 5591/5592 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x5596
-+device.name 5596 Pentium Chipset
-
- vendor.id pci 0x1039
-&device.id pci 0x5597
-+device.name 5597 [SiS5582]
-
- vendor.id pci 0x1039
-&device.id pci 0x5600
-+device.name 5600 Host
-
- vendor.id pci 0x1039
-&device.id pci 0x6204
-+device.name Video decoder & MPEG interface
-
- vendor.id pci 0x1039
-&device.id pci 0x6205
-+device.name VGA Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x6236
-+device.name 6236 3D-AGP
-
- vendor.id pci 0x1039
-&device.id pci 0x6300
-+device.name 630/730 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x6300
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0970
-+subdevice.name P6STP-FL motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x6300
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8035
-+subdevice.name CUSI-FX motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x6306
-+device.name 530/620 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x6306
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x6306
-+subdevice.name SiS530,620 GUI Accelerator+3D
-
- vendor.id pci 0x1039
-&device.id pci 0x6325
-+device.name 65x/M650/740 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-+device.name 86C326 5598/6326
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x6326
-+subdevice.name SiS6326 GUI Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0a50
-+subdevice.name SpeedStar A50
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0a70
-+subdevice.name SpeedStar A70
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4910
-+subdevice.name SpeedStar A70
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4920
-+subdevice.name SpeedStar A70
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-&subvendor.id pci 0x1569
-&subdevice.id pci 0x6326
-+subdevice.name SiS6326 GUI Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x6330
-+device.name 661/741/760 PCI/AGP VGA Display Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x6330
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x6330
-+subdevice.name [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x7001
-+device.name USB 1.0 Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7001
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a14
-+subdevice.name K7S5A motherboard
-
- vendor.id pci 0x1039
-&device.id pci 0x7001
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x7000
-+subdevice.name Onboard USB Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7002
-+device.name USB 2.0 Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7002
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x7002
-+subdevice.name Onboard USB Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7007
-+device.name FireWire Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7012
-+device.name Sound Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7013
-+device.name AC'97 Modem Controller
-
- vendor.id pci 0x1039
-&device.id pci 0x7016
-+device.name SiS7016 PCI Fast Ethernet Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x7016
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x7016
-+subdevice.name SiS7016 10/100 Ethernet Adapter
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-+device.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01b6
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01b7
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x7018
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x000e
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x0018
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1039
-&subdevice.id pci 0x7018
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x800b
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1054
-&subdevice.id pci 0x7018
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x5330
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x5350
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1170
-&subdevice.id pci 0x3209
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x400a
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2089
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x14cd
-&subdevice.id pci 0x2194
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x14ff
-&subdevice.id pci 0x1100
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x152d
-&subdevice.id pci 0x8808
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1558
-&subdevice.id pci 0x1103
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1558
-&subdevice.id pci 0x2200
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x1563
-&subdevice.id pci 0x7018
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x15c5
-&subdevice.id pci 0x0111
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0x270f
-&subdevice.id pci 0xa171
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7018
-&subvendor.id pci 0xa0a0
-&subdevice.id pci 0x0022
-+subdevice.name SiS PCI Audio Accelerator
-
- vendor.id pci 0x1039
-&device.id pci 0x7019
-+device.name SiS7019 Audio Accelerator
-
- vendor.id pci 0x103a
-+vendor.name Seiko Epson Corporation
-
- vendor.id pci 0x103b
-+vendor.name Tatung Co. of America
-
- vendor.id pci 0x103c
-+vendor.name Hewlett-Packard Company
-
- vendor.id pci 0x103c
-&device.id pci 0x1005
-+device.name A4977A Visualize EG
-
- vendor.id pci 0x103c
-&device.id pci 0x1006
-+device.name Visualize FX6
-
- vendor.id pci 0x103c
-&device.id pci 0x1008
-+device.name Visualize FX4
-
- vendor.id pci 0x103c
-&device.id pci 0x100a
-+device.name Visualize FX2
-
- vendor.id pci 0x103c
-&device.id pci 0x1028
-+device.name Tach TL Fibre Channel Host Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x1029
-+device.name Tach XL2 Fibre Channel Host Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x1029
-&subvendor.id pci 0x107e
-&subdevice.id pci 0x000f
-+subdevice.name Interphase 5560 Fibre Channel Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x1029
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x9210
-+subdevice.name 1Gb/2Gb Family Fibre Channel Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x1029
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x9211
-+subdevice.name 1Gb/2Gb Family Fibre Channel Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x102a
-+device.name Tach TS Fibre Channel Host Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x102a
-&subvendor.id pci 0x107e
-&subdevice.id pci 0x000e
-+subdevice.name Interphase 5540/5541 Fibre Channel Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x102a
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x9110
-+subdevice.name 1Gb/2Gb Family Fibre Channel Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x102a
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x9111
-+subdevice.name 1Gb/2Gb Family Fibre Channel Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x1030
-+device.name J2585A DeskDirect 10/100VG NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1031
-+device.name J2585B HP 10/100VG PCI LAN Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x1031
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1040
-+subdevice.name J2973A DeskDirect 10BaseT NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1031
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1041
-+subdevice.name J2585B DeskDirect 10/100VG NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1031
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1042
-+subdevice.name J2970A DeskDirect 10BaseT/2 NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1040
-+device.name J2973A DeskDirect 10BaseT NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1041
-+device.name J2585B DeskDirect 10/100 NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1042
-+device.name J2970A DeskDirect 10BaseT/2 NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-+device.name Diva Serial [GSP] Multiport UART
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1049
-+subdevice.name Tosca Console
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x104a
-+subdevice.name Tosca Secondary
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x104b
-+subdevice.name Maestro SP2
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1223
-+subdevice.name Superdome Console
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1226
-+subdevice.name Keystone SP2
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1227
-+subdevice.name Powerbar SP2
-
- vendor.id pci 0x103c
-&device.id pci 0x1048
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1282
-+subdevice.name Everest SP2
-
- vendor.id pci 0x103c
-&device.id pci 0x1054
-+device.name PCI Local Bus Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x1064
-+device.name 79C970 PCnet Ethernet Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x108b
-+device.name Visualize FXe
-
- vendor.id pci 0x103c
-&device.id pci 0x10c1
-+device.name NetServer Smart IRQ Router
-
- vendor.id pci 0x103c
-&device.id pci 0x10ed
-+device.name TopTools Remote Control
-
- vendor.id pci 0x103c
-&device.id pci 0x1200
-+device.name 82557B 10/100 NIC
-
- vendor.id pci 0x103c
-&device.id pci 0x1219
-+device.name NetServer PCI Hot-Plug Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x121a
-+device.name NetServer SMIC Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x121b
-+device.name NetServer Legacy COM Port Decoder
-
- vendor.id pci 0x103c
-&device.id pci 0x121c
-+device.name NetServer PCI COM Port Decoder
-
- vendor.id pci 0x103c
-&device.id pci 0x1229
-+device.name zx1 System Bus Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x122a
-+device.name zx1 I/O Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x122e
-+device.name zx1 Local Bus Adapter
-
- vendor.id pci 0x103c
-&device.id pci 0x127c
-+device.name sx1000 I/O Controller
-
- vendor.id pci 0x103c
-&device.id pci 0x1290
-+device.name Auxiliary Diva Serial Port
-
- vendor.id pci 0x103c
-&device.id pci 0x1291
-+device.name Auxiliary Diva Serial Port
-
- vendor.id pci 0x103c
-&device.id pci 0x2910
-+device.name E2910A PCIBus Exerciser
-
- vendor.id pci 0x103c
-&device.id pci 0x2925
-+device.name E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
-
- vendor.id pci 0x103e
-+vendor.name Solliday Engineering
-
- vendor.id pci 0x103f
-+vendor.name Synopsys/Logic Modeling Group
-
- vendor.id pci 0x1040
-+vendor.name Accelgraphics Inc.
-
- vendor.id pci 0x1041
-+vendor.name Computrend
-
- vendor.id pci 0x1042
-+vendor.name Micron
-
- vendor.id pci 0x1042
-&device.id pci 0x1000
-+device.name PC Tech RZ1000
-
- vendor.id pci 0x1042
-&device.id pci 0x1001
-+device.name PC Tech RZ1001
-
- vendor.id pci 0x1042
-&device.id pci 0x3000
-+device.name Samurai_0
-
- vendor.id pci 0x1042
-&device.id pci 0x3010
-+device.name Samurai_1
-
- vendor.id pci 0x1042
-&device.id pci 0x3020
-+device.name Samurai_IDE
-
- vendor.id pci 0x1043
-+vendor.name ASUSTeK Computer Inc.
-
- vendor.id pci 0x1043
-&device.id pci 0x0675
-+device.name ISDNLink P-IN100-ST-D
-
- vendor.id pci 0x1043
-&device.id pci 0x4015
-+device.name v7100 SDRAM [GeForce2 MX]
-
- vendor.id pci 0x1043
-&device.id pci 0x4021
-+device.name v7100 Combo Deluxe [GeForce2 MX + TV tuner]
-
- vendor.id pci 0x1043
-&device.id pci 0x4057
-+device.name v8200 GeForce 3
-
- vendor.id pci 0x1043
-&device.id pci 0x8043
-+device.name v8240 PAL 128M [P4T] Motherboard
-
- vendor.id pci 0x1043
-&device.id pci 0x807b
-+device.name v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI]
-
- vendor.id pci 0x1043
-&device.id pci 0x80bb
-+device.name v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out]
-
- vendor.id pci 0x1044
-+vendor.name Adaptec (formerly DPT)
-
- vendor.id pci 0x1044
-&device.id pci 0x1012
-+device.name Domino RAID Engine
-
- vendor.id pci 0x1044
-&device.id pci 0xa400
-+device.name SmartCache/Raid I-IV Controller
-
- vendor.id pci 0x1044
-&device.id pci 0xa500
-+device.name PCI Bridge
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-+device.name SmartRAID V Controller
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc001
-+subdevice.name PM1554U2 Ultra2 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc002
-+subdevice.name PM1654U2 Ultra2 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc003
-+subdevice.name PM1564U3 Ultra3 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc004
-+subdevice.name PM1564U3 Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc005
-+subdevice.name PM1554U2 Ultra2 Single Channel (NON ACPI)
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc00a
-+subdevice.name PM2554U2 Ultra2 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc00b
-+subdevice.name PM2654U2 Ultra2 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc00c
-+subdevice.name PM2664U3 Ultra3 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc00d
-+subdevice.name PM2664U3 Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc00e
-+subdevice.name PM2554U2 Ultra2 Single Channel (NON ACPI)
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc00f
-+subdevice.name PM2654U2 Ultra2 Single Channel (NON ACPI)
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc014
-+subdevice.name PM3754U2 Ultra2 Single Channel (NON ACPI)
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc015
-+subdevice.name PM3755U2B Ultra2 Single Channel (NON ACPI)
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc016
-+subdevice.name PM3755F Fibre Channel (NON ACPI)
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc01e
-+subdevice.name PM3757U2 Ultra2 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc01f
-+subdevice.name PM3757U2 Ultra2 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc020
-+subdevice.name PM3767U3 Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc021
-+subdevice.name PM3767U3 Ultra3 Quad Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc028
-+subdevice.name PM2865U3 Ultra3 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc029
-+subdevice.name PM2865U3 Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc02a
-+subdevice.name PM2865F Fibre Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc03c
-+subdevice.name 2000S Ultra3 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc03d
-+subdevice.name 2000S Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc03e
-+subdevice.name 2000F Fibre Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc046
-+subdevice.name 3000S Ultra3 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc047
-+subdevice.name 3000S Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc048
-+subdevice.name 3000F Fibre Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc050
-+subdevice.name 5000S Ultra3 Single Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc051
-+subdevice.name 5000S Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc052
-+subdevice.name 5000F Fibre Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc05a
-+subdevice.name 2400A UDMA Four Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc05b
-+subdevice.name 2400A UDMA Four Channel DAC
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc064
-+subdevice.name 3010S Ultra3 Dual Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc065
-+subdevice.name 3010S Ultra3 Four Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa501
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc066
-+subdevice.name 3010S Fibre Channel
-
- vendor.id pci 0x1044
-&device.id pci 0xa511
-+device.name SmartRAID V Controller
-
- vendor.id pci 0x1044
-&device.id pci 0xa511
-&subvendor.id pci 0x1044
-&subdevice.id pci 0xc032
-+subdevice.name ASR-2005S I2O Zero Channel
-
- vendor.id pci 0x1045
-+vendor.name OPTi Inc.
-
- vendor.id pci 0x1045
-&device.id pci 0xa0f8
-+device.name 82C750 [Vendetta] USB Controller
-
- vendor.id pci 0x1045
-&device.id pci 0xc101
-+device.name 92C264
-
- vendor.id pci 0x1045
-&device.id pci 0xc178
-+device.name 92C178
-
- vendor.id pci 0x1045
-&device.id pci 0xc556
-+device.name 82X556 [Viper]
-
- vendor.id pci 0x1045
-&device.id pci 0xc557
-+device.name 82C557 [Viper-M]
-
- vendor.id pci 0x1045
-&device.id pci 0xc558
-+device.name 82C558 [Viper-M ISA+IDE]
-
- vendor.id pci 0x1045
-&device.id pci 0xc567
-+device.name 82C750 [Vendetta], device 0
-
- vendor.id pci 0x1045
-&device.id pci 0xc568
-+device.name 82C750 [Vendetta], device 1
-
- vendor.id pci 0x1045
-&device.id pci 0xc569
-+device.name 82C579 [Viper XPress+ Chipset]
-
- vendor.id pci 0x1045
-&device.id pci 0xc621
-+device.name 82C621 [Viper-M/N+]
-
- vendor.id pci 0x1045
-&device.id pci 0xc700
-+device.name 82C700 [FireStar]
-
- vendor.id pci 0x1045
-&device.id pci 0xc701
-+device.name 82C701 [FireStar Plus]
-
- vendor.id pci 0x1045
-&device.id pci 0xc814
-+device.name 82C814 [Firebridge 1]
-
- vendor.id pci 0x1045
-&device.id pci 0xc822
-+device.name 82C822
-
- vendor.id pci 0x1045
-&device.id pci 0xc824
-+device.name 82C824
-
- vendor.id pci 0x1045
-&device.id pci 0xc825
-+device.name 82C825 [Firebridge 2]
-
- vendor.id pci 0x1045
-&device.id pci 0xc832
-+device.name 82C832
-
- vendor.id pci 0x1045
-&device.id pci 0xc861
-+device.name 82C861
-
- vendor.id pci 0x1045
-&device.id pci 0xc895
-+device.name 82C895
-
- vendor.id pci 0x1045
-&device.id pci 0xc935
-+device.name EV1935 ECTIVA MachOne PCIAudio
-
- vendor.id pci 0x1045
-&device.id pci 0xd568
-+device.name 82C825 [Firebridge 2]
-
- vendor.id pci 0x1045
-&device.id pci 0xd721
-+device.name IDE [FireStar]
-
- vendor.id pci 0x1046
-+vendor.name IPC Corporation, Ltd.
-
- vendor.id pci 0x1047
-+vendor.name Genoa Systems Corp
-
- vendor.id pci 0x1048
-+vendor.name Elsa AG
-
- vendor.id pci 0x1048
-&device.id pci 0x0c60
-+device.name Gladiac MX
-
- vendor.id pci 0x1048
-&device.id pci 0x0d22
-+device.name Quadro4 900XGL [ELSA GLoria4 900XGL]
-
- vendor.id pci 0x1048
-&device.id pci 0x1000
-+device.name QuickStep 1000
-
- vendor.id pci 0x1048
-&device.id pci 0x3000
-+device.name QuickStep 3000
-
- vendor.id pci 0x1048
-&device.id pci 0x8901
-+device.name Gloria XL
-
- vendor.id pci 0x1049
-+vendor.name Fountain Technologies, Inc.
-
- vendor.id pci 0x104a
-+vendor.name STMicroelectronics
-
- vendor.id pci 0x104a
-&device.id pci 0x0008
-+device.name STG 2000X
-
- vendor.id pci 0x104a
-&device.id pci 0x0009
-+device.name STG 1764X
-
- vendor.id pci 0x104a
-&device.id pci 0x0010
-+device.name STG4000 [3D Prophet Kyro Series]
-
- vendor.id pci 0x104a
-&device.id pci 0x0209
-+device.name STPC Consumer/Industrial North- and Southbridge
-
- vendor.id pci 0x104a
-&device.id pci 0x020a
-+device.name STPC Atlas/ConsumerS/Consumer IIA Northbridge
-
- vendor.id pci 0x104a
-&device.id pci 0x0210
-+device.name STPC Atlas ISA Bridge
-
- vendor.id pci 0x104a
-&device.id pci 0x021a
-+device.name STPC Consumer S Southbridge
-
- vendor.id pci 0x104a
-&device.id pci 0x021b
-+device.name STPC Consumer IIA Southbridge
-
- vendor.id pci 0x104a
-&device.id pci 0x0500
-+device.name ST70137 [Unicorn] ADSL DMT Transceiver
-
- vendor.id pci 0x104a
-&device.id pci 0x0564
-+device.name STPC Client Northbridge
-
- vendor.id pci 0x104a
-&device.id pci 0x0981
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x104a
-&device.id pci 0x1746
-+device.name STG 1764X
-
- vendor.id pci 0x104a
-&device.id pci 0x2774
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x104a
-&device.id pci 0x3520
-+device.name MPEG-II decoder card
-
- vendor.id pci 0x104a
-&device.id pci 0x55cc
-+device.name STPC Client Southbridge
-
- vendor.id pci 0x104b
-+vendor.name BusLogic
-
- vendor.id pci 0x104b
-&device.id pci 0x0140
-+device.name BT-946C (old) [multimaster 01]
-
- vendor.id pci 0x104b
-&device.id pci 0x1040
-+device.name BT-946C (BA80C30) [MultiMaster 10]
-
- vendor.id pci 0x104b
-&device.id pci 0x8130
-+device.name Flashpoint LT
-
- vendor.id pci 0x104c
-+vendor.name Texas Instruments
-
- vendor.id pci 0x104c
-&device.id pci 0x0500
-+device.name 100 MBit LAN Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x0508
-+device.name TMS380C2X Compressor Interface
-
- vendor.id pci 0x104c
-&device.id pci 0x1000
-+device.name Eagle i/f AS
-
- vendor.id pci 0x104c
-&device.id pci 0x104c
-+device.name PCI1510 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x3d04
-+device.name TVP4010 [Permedia]
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-+device.name TVP4020 [Permedia 2]
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1011
-&subdevice.id pci 0x4d10
-+subdevice.name Comet
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1040
-&subdevice.id pci 0x000f
-+subdevice.name AccelStar II
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1040
-&subdevice.id pci 0x0011
-+subdevice.name AccelStar II
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0a31
-+subdevice.name WINNER 2000
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0a32
-+subdevice.name GLoria Synergy
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0a35
-+subdevice.name GLoria Synergy
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2633
-+subdevice.name WinFast 3D L2300
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0127
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0136
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0141
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0146
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0148
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0149
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0152
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0154
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0155
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0156
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0157
-+subdevice.name FIRE GL 1000 PRO
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1097
-&subdevice.id pci 0x3d01
-+subdevice.name Jeronimo Pro
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x100f
-+subdevice.name Graphics Blaster Extreme
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0100
-+subdevice.name Reference Permedia 2 3D
-
- vendor.id pci 0x104c
-&device.id pci 0x8000
-+device.name PCILynx/PCILynx2 IEEE 1394 Link Layer Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8000
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1010
-+subdevice.name CF1-1-SNARE
-
- vendor.id pci 0x104c
-&device.id pci 0x8000
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1020
-+subdevice.name CF1-2-SNARE
-
- vendor.id pci 0x104c
-&device.id pci 0x8009
-+device.name FireWire Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8009
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8032
-+subdevice.name 8032 OHCI i.LINK (IEEE 1394) Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8017
-+device.name PCI4410 FireWire Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8019
-+device.name TSB12LV23 IEEE-1394 Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8019
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x000a
-+subdevice.name Studio DV500-1394
-
- vendor.id pci 0x104c
-&device.id pci 0x8019
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x000e
-+subdevice.name Studio DV
-
- vendor.id pci 0x104c
-&device.id pci 0x8019
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1010
-+subdevice.name CF2-1-CYMBAL
-
- vendor.id pci 0x104c
-&device.id pci 0x8020
-+device.name TSB12LV26 IEEE-1394 Controller (Link)
-
- vendor.id pci 0x104c
-&device.id pci 0x8021
-+device.name TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated)
-
- vendor.id pci 0x104c
-&device.id pci 0x8021
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x104c
-&device.id pci 0x8021
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x104c
-&device.id pci 0x8022
-+device.name TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link)
-
- vendor.id pci 0x104c
-&device.id pci 0x8023
-+device.name TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
-
- vendor.id pci 0x104c
-&device.id pci 0x8024
-+device.name TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
-
- vendor.id pci 0x104c
-&device.id pci 0x8025
-+device.name TSB82AA2 IEEE-1394b Link Layer Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8025
-&subvendor.id pci 0x55aa
-&subdevice.id pci 0x55aa
-+subdevice.name FireWire 800 PCI Card
-
- vendor.id pci 0x104c
-&device.id pci 0x8026
-+device.name TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)
-
- vendor.id pci 0x104c
-&device.id pci 0x8027
-+device.name PCI4451 IEEE-1394 Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8027
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00e6
-+subdevice.name PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)
-
- vendor.id pci 0x104c
-&device.id pci 0x8029
-+device.name PCI4510 IEEE-1394 Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8029
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x104c
-&device.id pci 0x8029
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2900
-
- vendor.id pci 0x104c
-&device.id pci 0x802e
-+device.name PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller
-
- vendor.id pci 0x104c
-&device.id pci 0x8201
-+device.name PCI1620 Firmware Loading Function
-
- vendor.id pci 0x104c
-&device.id pci 0x8400
-+device.name ACX 100 22Mbps Wireless Interface
-
- vendor.id pci 0x104c
-&device.id pci 0x8400
-&subvendor.id pci 0x00fc
-&subdevice.id pci 0x16ec
-+subdevice.name U.S. Robotics 22 Mbps Wireless PC Card (model 2210)
-
- vendor.id pci 0x104c
-&device.id pci 0x8400
-&subvendor.id pci 0x00fd
-&subdevice.id pci 0x16ec
-+subdevice.name U.S. Robotics 22Mbps Wireless PCI Adapter (model 2216)
-
- vendor.id pci 0x104c
-&device.id pci 0x8400
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3b00
-+subdevice.name DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus]
-
- vendor.id pci 0x104c
-&device.id pci 0x8400
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3b01
-+subdevice.name DWL-520+ 22Mbps PCI Wireless Adapter
-
- vendor.id pci 0x104c
-&device.id pci 0x8401
-+device.name ACX 100 22Mbps Wireless Interface
-
- vendor.id pci 0x104c
-&device.id pci 0x9000
-+device.name Wireless Interface (of unknown type)
-
- vendor.id pci 0x104c
-&device.id pci 0x9066
-+device.name ACX 111 54Mbps Wireless Interface
-
- vendor.id pci 0x104c
-&device.id pci 0xa001
-+device.name TDC1570
-
- vendor.id pci 0x104c
-&device.id pci 0xa100
-+device.name TDC1561
-
- vendor.id pci 0x104c
-&device.id pci 0xa102
-+device.name TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f
-
- vendor.id pci 0x104c
-&device.id pci 0xa106
-+device.name TMS320C6205 Fixed Point DSP
-
- vendor.id pci 0x104c
-&device.id pci 0xa106
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x5000
-+subdevice.name ASI50xx Audio Adapter
-
- vendor.id pci 0x104c
-&device.id pci 0xa106
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x8700
-+subdevice.name ASI87xx Radio Tuner card
-
- vendor.id pci 0x104c
-&device.id pci 0xac10
-+device.name PCI1050
-
- vendor.id pci 0x104c
-&device.id pci 0xac11
-+device.name PCI1053
-
- vendor.id pci 0x104c
-&device.id pci 0xac12
-+device.name PCI1130
-
- vendor.id pci 0x104c
-&device.id pci 0xac13
-+device.name PCI1031
-
- vendor.id pci 0x104c
-&device.id pci 0xac15
-+device.name PCI1131
-
- vendor.id pci 0x104c
-&device.id pci 0xac16
-+device.name PCI1250
-
- vendor.id pci 0x104c
-&device.id pci 0xac16
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0092
-+subdevice.name ThinkPad 600
-
- vendor.id pci 0x104c
-&device.id pci 0xac17
-+device.name PCI1220
-
- vendor.id pci 0x104c
-&device.id pci 0xac18
-+device.name PCI1260
-
- vendor.id pci 0x104c
-&device.id pci 0xac19
-+device.name PCI1221
-
- vendor.id pci 0x104c
-&device.id pci 0xac1a
-+device.name PCI1210
-
- vendor.id pci 0x104c
-&device.id pci 0xac1b
-+device.name PCI1450
-
- vendor.id pci 0x104c
-&device.id pci 0xac1b
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb113
-+subdevice.name Armada M700
-
- vendor.id pci 0x104c
-&device.id pci 0xac1c
-+device.name PCI1225
-
- vendor.id pci 0x104c
-&device.id pci 0xac1c
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb121
-+subdevice.name Armada E500
-
- vendor.id pci 0x104c
-&device.id pci 0xac1c
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0088
-+subdevice.name Dell Computer Corporation Latitude CPi A400XT
-
- vendor.id pci 0x104c
-&device.id pci 0xac1d
-+device.name PCI1251A
-
- vendor.id pci 0x104c
-&device.id pci 0xac1e
-+device.name PCI1211
-
- vendor.id pci 0x104c
-&device.id pci 0xac1f
-+device.name PCI1251B
-
- vendor.id pci 0x104c
-&device.id pci 0xac20
-+device.name TI 2030
-
- vendor.id pci 0x104c
-&device.id pci 0xac21
-+device.name PCI2031
-
- vendor.id pci 0x104c
-&device.id pci 0xac22
-+device.name PCI2032 PCI Docking Bridge
-
- vendor.id pci 0x104c
-&device.id pci 0xac23
-+device.name PCI2250 PCI-to-PCI Bridge
-
- vendor.id pci 0x104c
-&device.id pci 0xac28
-+device.name PCI2050 PCI-to-PCI Bridge
-
- vendor.id pci 0x104c
-&device.id pci 0xac30
-+device.name PCI1260 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac40
-+device.name PCI4450 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac41
-+device.name PCI4410 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac42
-+device.name PCI4451 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac42
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00e6
-+subdevice.name PCI4451 PC card CardBus Controller (Dell Inspiron 8100)
-
- vendor.id pci 0x104c
-&device.id pci 0xac44
-+device.name PCI4510 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac44
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x104c
-&device.id pci 0xac44
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x104c
-&device.id pci 0xac46
-+device.name PCI4520 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac50
-+device.name PCI1410 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-+device.name PCI1420
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x023b
-+subdevice.name ThinkPad T23 (2647-4MG)
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00b1
-+subdevice.name Latitude C600
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x012a
-+subdevice.name Latitude C640
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x80cd
-+subdevice.name Versa Note VXi
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1095
-+subdevice.name Lifebook C6155
-
- vendor.id pci 0x104c
-&device.id pci 0xac51
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1000
-+subdevice.name CP2-2-HIPHOP
-
- vendor.id pci 0x104c
-&device.id pci 0xac52
-+device.name PCI1451 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac53
-+device.name PCI1421 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac54
-+device.name PCI1620 PC Card Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac55
-+device.name PCI1520 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac55
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0512
-+subdevice.name ThinkPad T30/T40
-
- vendor.id pci 0x104c
-&device.id pci 0xac56
-+device.name PCI1510 PC card Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac56
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0528
-+subdevice.name ThinkPad R40e (2684-HVG) Cardbus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac60
-+device.name PCI2040 PCI to DSP Bridge Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac60
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x5100
-+subdevice.name ASI51xx Audio Adapter
-
- vendor.id pci 0x104c
-&device.id pci 0xac60
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x6100
-+subdevice.name ASI61xx Audio Adapter
-
- vendor.id pci 0x104c
-&device.id pci 0xac60
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x6200
-+subdevice.name ASI62xx Audio Adapter
-
- vendor.id pci 0x104c
-&device.id pci 0xac8d
-+device.name PCI 7620
-
- vendor.id pci 0x104c
-&device.id pci 0xac8e
-+device.name PCI7420 CardBus Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xac8f
-+device.name PCI7420/PCI7620 Dual Socket CardBus and Smart Card Cont. w/ 1394a-2000 OHCI Two-Port PHY/Link-Layer Cont. and SD/MS-Pro Sockets
-
- vendor.id pci 0x104c
-&device.id pci 0xfe00
-+device.name FireWire Host Controller
-
- vendor.id pci 0x104c
-&device.id pci 0xfe03
-+device.name 12C01A FireWire Host Controller
-
- vendor.id pci 0x104d
-+vendor.name Sony Corporation
-
- vendor.id pci 0x104d
-&device.id pci 0x8009
-+device.name CXD1947Q i.LINK Controller
-
- vendor.id pci 0x104d
-&device.id pci 0x8039
-+device.name CXD3222 i.LINK Controller
-
- vendor.id pci 0x104d
-&device.id pci 0x8056
-+device.name Rockwell HCF 56K modem
-
- vendor.id pci 0x104d
-&device.id pci 0x808a
-+device.name Memory Stick Controller
-
- vendor.id pci 0x104e
-+vendor.name Oak Technology, Inc
-
- vendor.id pci 0x104e
-&device.id pci 0x0017
-+device.name OTI-64017
-
- vendor.id pci 0x104e
-&device.id pci 0x0107
-+device.name OTI-107 [Spitfire]
-
- vendor.id pci 0x104e
-&device.id pci 0x0109
-+device.name Video Adapter
-
- vendor.id pci 0x104e
-&device.id pci 0x0111
-+device.name OTI-64111 [Spitfire]
-
- vendor.id pci 0x104e
-&device.id pci 0x0217
-+device.name OTI-64217
-
- vendor.id pci 0x104e
-&device.id pci 0x0317
-+device.name OTI-64317
-
- vendor.id pci 0x104f
-+vendor.name Co-time Computer Ltd
-
- vendor.id pci 0x1050
-+vendor.name Winbond Electronics Corp
-
- vendor.id pci 0x1050
-&device.id pci 0x0000
-+device.name NE2000
-
- vendor.id pci 0x1050
-&device.id pci 0x0001
-+device.name W83769F
-
- vendor.id pci 0x1050
-&device.id pci 0x0105
-+device.name W82C105
-
- vendor.id pci 0x1050
-&device.id pci 0x0840
-+device.name W89C840
-
- vendor.id pci 0x1050
-&device.id pci 0x0840
-&subvendor.id pci 0x1050
-&subdevice.id pci 0x0001
-+subdevice.name W89C840 Ethernet Adapter
-
- vendor.id pci 0x1050
-&device.id pci 0x0840
-&subvendor.id pci 0x1050
-&subdevice.id pci 0x0840
-+subdevice.name W89C840 Ethernet Adapter
-
- vendor.id pci 0x1050
-&device.id pci 0x0940
-+device.name W89C940
-
- vendor.id pci 0x1050
-&device.id pci 0x5a5a
-+device.name W89C940F
-
- vendor.id pci 0x1050
-&device.id pci 0x6692
-+device.name W6692
-
- vendor.id pci 0x1050
-&device.id pci 0x9921
-+device.name W99200F MPEG-1 Video Encoder
-
- vendor.id pci 0x1050
-&device.id pci 0x9922
-+device.name W99200F/W9922PF MPEG-1/2 Video Encoder
-
- vendor.id pci 0x1050
-&device.id pci 0x9970
-+device.name W9970CF
-
- vendor.id pci 0x1051
-+vendor.name Anigma, Inc.
-
- vendor.id pci 0x1052
-+vendor.name ?Young Micro Systems
-
- vendor.id pci 0x1053
-+vendor.name Young Micro Systems
-
- vendor.id pci 0x1054
-+vendor.name Hitachi, Ltd
-
- vendor.id pci 0x1055
-+vendor.name Efar Microsystems
-
- vendor.id pci 0x1055
-&device.id pci 0x9130
-+device.name SLC90E66 [Victory66] IDE
-
- vendor.id pci 0x1055
-&device.id pci 0x9460
-+device.name SLC90E66 [Victory66] ISA
-
- vendor.id pci 0x1055
-&device.id pci 0x9462
-+device.name SLC90E66 [Victory66] USB
-
- vendor.id pci 0x1055
-&device.id pci 0x9463
-+device.name SLC90E66 [Victory66] ACPI
-
- vendor.id pci 0x1056
-+vendor.name ICL
-
- vendor.id pci 0x1057
-+vendor.name Motorola
-
- vendor.id pci 0x1057
-&device.id pci 0x0001
-+device.name MPC105 [Eagle]
-
- vendor.id pci 0x1057
-&device.id pci 0x0002
-+device.name MPC106 [Grackle]
-
- vendor.id pci 0x1057
-&device.id pci 0x0003
-+device.name MPC8240 [Kahlua]
-
- vendor.id pci 0x1057
-&device.id pci 0x0004
-+device.name MPC107
-
- vendor.id pci 0x1057
-&device.id pci 0x0006
-+device.name MPC8245 [Unity]
-
- vendor.id pci 0x1057
-&device.id pci 0x0008
-+device.name MPC8540
-
- vendor.id pci 0x1057
-&device.id pci 0x0009
-+device.name MPC8560
-
- vendor.id pci 0x1057
-&device.id pci 0x0100
-+device.name MC145575 [HFC-PCI]
-
- vendor.id pci 0x1057
-&device.id pci 0x0431
-+device.name KTI829c 100VG
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-+device.name DSP56301 Digital Signal Processor
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0101
-+subdevice.name Transas Radar Imitator Board [RIM]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0102
-+subdevice.name Transas Radar Imitator Board [RIM-2]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0202
-+subdevice.name Transas Radar Integrator Board [RIB-2]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0611
-+subdevice.name 1 channel CAN bus Controller [CanPci-1]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0612
-+subdevice.name 2 channels CAN bus Controller [CanPci-2]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0613
-+subdevice.name 3 channels CAN bus Controller [CanPci-3]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0614
-+subdevice.name 4 channels CAN bus Controller [CanPci-4]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0621
-+subdevice.name 1 channel CAN bus Controller [CanPci2-1]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0622
-+subdevice.name 2 channels CAN bus Controller [CanPci2-2]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x14fb
-&subdevice.id pci 0x0810
-+subdevice.name Transas VTS Radar Integrator Board [RIB-4]
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x4200
-+subdevice.name ASI4215 Audio Adapter
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x4300
-+subdevice.name ASI43xx Audio Adapter
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0x175c
-&subdevice.id pci 0x4400
-+subdevice.name ASI4401 Audio Adapter
-
- vendor.id pci 0x1057
-&device.id pci 0x1801
-&subvendor.id pci 0xecc0
-&subdevice.id pci 0x0030
-+subdevice.name Layla
-
- vendor.id pci 0x1057
-&device.id pci 0x18c0
-+device.name MPC8265A/MPC8266
-
- vendor.id pci 0x1057
-&device.id pci 0x18c1
-+device.name MPC8271/MPC8272
-
- vendor.id pci 0x1057
-&device.id pci 0x4801
-+device.name Raven
-
- vendor.id pci 0x1057
-&device.id pci 0x4802
-+device.name Falcon
-
- vendor.id pci 0x1057
-&device.id pci 0x4803
-+device.name Hawk
-
- vendor.id pci 0x1057
-&device.id pci 0x4806
-+device.name CPX8216
-
- vendor.id pci 0x1057
-&device.id pci 0x4d68
-+device.name 20268
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-+device.name SM56 PCI Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1057
-&subdevice.id pci 0x0300
-+subdevice.name SM56 PCI Speakerphone Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1057
-&subdevice.id pci 0x0301
-+subdevice.name SM56 PCI Voice Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1057
-&subdevice.id pci 0x0302
-+subdevice.name SM56 PCI Fax Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1057
-&subdevice.id pci 0x5600
-+subdevice.name SM56 PCI Voice modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x13d2
-&subdevice.id pci 0x0300
-+subdevice.name SM56 PCI Speakerphone Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x13d2
-&subdevice.id pci 0x0301
-+subdevice.name SM56 PCI Voice modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x13d2
-&subdevice.id pci 0x0302
-+subdevice.name SM56 PCI Fax Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x0300
-+subdevice.name SM56 PCI Speakerphone Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x0301
-+subdevice.name SM56 PCI Voice modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x0302
-+subdevice.name SM56 PCI Fax Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x100c
-+subdevice.name SM56 PCI Fax Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1494
-&subdevice.id pci 0x0300
-+subdevice.name SM56 PCI Speakerphone Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1494
-&subdevice.id pci 0x0301
-+subdevice.name SM56 PCI Voice modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x14c8
-&subdevice.id pci 0x0300
-+subdevice.name SM56 PCI Speakerphone Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x14c8
-&subdevice.id pci 0x0302
-+subdevice.name SM56 PCI Fax Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x0300
-+subdevice.name SM56 PCI Speakerphone Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5600
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x0302
-+subdevice.name SM56 PCI Fax Modem
-
- vendor.id pci 0x1057
-&device.id pci 0x5803
-+device.name MPC5200
-
- vendor.id pci 0x1057
-&device.id pci 0x6400
-+device.name MPC190 Security Processor (S1 family, encryption)
-
- vendor.id pci 0x1057
-&device.id pci 0x6405
-+device.name MPC184 Security Processor (S1 family)
-
- vendor.id pci 0x1058
-+vendor.name Electronics & Telecommunications RSH
-
- vendor.id pci 0x1059
-+vendor.name Teknor Industrial Computers Inc
-
- vendor.id pci 0x105a
-+vendor.name Promise Technology, Inc.
-
- vendor.id pci 0x105a
-&device.id pci 0x0d30
-+device.name PDC20265 (FastTrak100 Lite/Ultra100)
-
- vendor.id pci 0x105a
-&device.id pci 0x0d30
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d33
-+subdevice.name Ultra100
-
- vendor.id pci 0x105a
-&device.id pci 0x0d38
-+device.name 20263
-
- vendor.id pci 0x105a
-&device.id pci 0x0d38
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d39
-+subdevice.name Fasttrak66
-
- vendor.id pci 0x105a
-&device.id pci 0x1275
-+device.name 20275
-
- vendor.id pci 0x105a
-&device.id pci 0x3318
-+device.name PDC20318 (SATA150 TX4)
-
- vendor.id pci 0x105a
-&device.id pci 0x3319
-+device.name PDC20319 (FastTrak S150 TX4)
-
- vendor.id pci 0x105a
-&device.id pci 0x3319
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x105a
-&device.id pci 0x3371
-+device.name PDC20371 (FastTrak S150 TX2plus)
-
- vendor.id pci 0x105a
-&device.id pci 0x3373
-+device.name PDC20378 (FastTrak 378/SATA 378)
-
- vendor.id pci 0x105a
-&device.id pci 0x3373
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80f5
-+subdevice.name PC-DL Deluxe motherboard
-
- vendor.id pci 0x105a
-&device.id pci 0x3373
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x702e
-+subdevice.name K8T NEO FIS2R motherboard
-
- vendor.id pci 0x105a
-&device.id pci 0x3375
-+device.name PDC20375 (SATA150 TX2plus)
-
- vendor.id pci 0x105a
-&device.id pci 0x3376
-+device.name PDC20376 (FastTrak 376)
-
- vendor.id pci 0x105a
-&device.id pci 0x3376
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x809e
-+subdevice.name A7V8X motherboard
-
- vendor.id pci 0x105a
-&device.id pci 0x3574
-+device.name PDC20579 SATAII 150 IDE Controller
-
- vendor.id pci 0x105a
-&device.id pci 0x3d18
-+device.name PDC20518 SATAII 150 IDE Controller
-
- vendor.id pci 0x105a
-&device.id pci 0x4d30
-+device.name PDC20267 (FastTrak100/Ultra100)
-
- vendor.id pci 0x105a
-&device.id pci 0x4d30
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d33
-+subdevice.name Ultra100
-
- vendor.id pci 0x105a
-&device.id pci 0x4d30
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d39
-+subdevice.name FastTrak100
-
- vendor.id pci 0x105a
-&device.id pci 0x4d33
-+device.name 20246
-
- vendor.id pci 0x105a
-&device.id pci 0x4d33
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d33
-+subdevice.name 20246 IDE Controller
-
- vendor.id pci 0x105a
-&device.id pci 0x4d38
-+device.name PDC20262 (FastTrak66/Ultra66)
-
- vendor.id pci 0x105a
-&device.id pci 0x4d38
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d30
-+subdevice.name Ultra Device on SuperTrak
-
- vendor.id pci 0x105a
-&device.id pci 0x4d38
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d33
-+subdevice.name Ultra66
-
- vendor.id pci 0x105a
-&device.id pci 0x4d38
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d39
-+subdevice.name FastTrak66
-
- vendor.id pci 0x105a
-&device.id pci 0x4d68
-+device.name PDC20268 (Ultra100 TX2)
-
- vendor.id pci 0x105a
-&device.id pci 0x4d68
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d68
-+subdevice.name Ultra100TX2
-
- vendor.id pci 0x105a
-&device.id pci 0x4d69
-+device.name 20269
-
- vendor.id pci 0x105a
-&device.id pci 0x4d69
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d68
-+subdevice.name Ultra133TX2
-
- vendor.id pci 0x105a
-&device.id pci 0x5275
-+device.name PDC20276 (MBFastTrak133 Lite)
-
- vendor.id pci 0x105a
-&device.id pci 0x5275
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x0275
-+subdevice.name SuperTrak SX6000 IDE
-
- vendor.id pci 0x105a
-&device.id pci 0x5275
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x1275
-+subdevice.name MBFastTrak133 Lite (tm) Controller (RAID mode)
-
- vendor.id pci 0x105a
-&device.id pci 0x5275
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xb001
-+subdevice.name MBUltra 133
-
- vendor.id pci 0x105a
-&device.id pci 0x5300
-+device.name DC5300
-
- vendor.id pci 0x105a
-&device.id pci 0x6268
-+device.name PDC20270 (FastTrak100 LP/TX2/TX4)
-
- vendor.id pci 0x105a
-&device.id pci 0x6268
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x4d68
-+subdevice.name FastTrak100 TX2
-
- vendor.id pci 0x105a
-&device.id pci 0x6269
-+device.name PDC20271 (FastTrak TX2000)
-
- vendor.id pci 0x105a
-&device.id pci 0x6269
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x6269
-+subdevice.name FastTrak TX2/TX2000
-
- vendor.id pci 0x105a
-&device.id pci 0x6621
-+device.name PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite)
-
- vendor.id pci 0x105a
-&device.id pci 0x6622
-+device.name PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller
-
- vendor.id pci 0x105a
-&device.id pci 0x6626
-+device.name PDC20618 (Ultra 618)
-
- vendor.id pci 0x105a
-&device.id pci 0x6629
-+device.name PDC20619 (FastTrak TX4000)
-
- vendor.id pci 0x105a
-&device.id pci 0x7275
-+device.name PDC20277 (SBFastTrak133 Lite)
-
- vendor.id pci 0x105b
-+vendor.name Foxconn International, Inc.
-
- vendor.id pci 0x105c
-+vendor.name Wipro Infotech Limited
-
- vendor.id pci 0x105d
-+vendor.name Number 9 Computer Company
-
- vendor.id pci 0x105d
-&device.id pci 0x2309
-+device.name Imagine 128
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-+device.name Imagine 128-II
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0000
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0001
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0002
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0003
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0004
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0005
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0006
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0007
-+subdevice.name Imagine 128 series 2 4Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0008
-+subdevice.name Imagine 128 series 2e 4Mb DRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0009
-+subdevice.name Imagine 128 series 2e 4Mb DRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x000a
-+subdevice.name Imagine 128 series 2 8Mb VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x000b
-+subdevice.name Imagine 128 series 2 8Mb H-VRAM
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x11a4
-&subdevice.id pci 0x000a
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0000
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0004
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0005
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0006
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0008
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0009
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x000a
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x000c
-+subdevice.name Barco Metheus 5 Megapixel
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-+device.name Imagine 128 T2R [Ticket to Ride]
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x11a4
-&subdevice.id pci 0x000a
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x11a4
-&subdevice.id pci 0x000b
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0002
-+subdevice.name Barco Metheus 4 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0003
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0007
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0008
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x0009
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-&subvendor.id pci 0x13cc
-&subdevice.id pci 0x000a
-+subdevice.name Barco Metheus 5 Megapixel, Dual Head
-
- vendor.id pci 0x105d
-&device.id pci 0x5348
-+device.name Revolution 4
-
- vendor.id pci 0x105d
-&device.id pci 0x5348
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0037
-+subdevice.name Revolution IV-FP AGP (For SGI 1600SW)
-
- vendor.id pci 0x105e
-+vendor.name Vtech Computers Ltd
-
- vendor.id pci 0x105f
-+vendor.name Infotronic America Inc
-
- vendor.id pci 0x1060
-+vendor.name United Microelectronics [UMC]
-
- vendor.id pci 0x1060
-&device.id pci 0x0001
-+device.name UM82C881
-
- vendor.id pci 0x1060
-&device.id pci 0x0002
-+device.name UM82C886
-
- vendor.id pci 0x1060
-&device.id pci 0x0101
-+device.name UM8673F
-
- vendor.id pci 0x1060
-&device.id pci 0x0881
-+device.name UM8881
-
- vendor.id pci 0x1060
-&device.id pci 0x0886
-+device.name UM8886F
-
- vendor.id pci 0x1060
-&device.id pci 0x0891
-+device.name UM8891A
-
- vendor.id pci 0x1060
-&device.id pci 0x1001
-+device.name UM886A
-
- vendor.id pci 0x1060
-&device.id pci 0x673a
-+device.name UM8886BF
-
- vendor.id pci 0x1060
-&device.id pci 0x673b
-+device.name EIDE Master/DMA
-
- vendor.id pci 0x1060
-&device.id pci 0x8710
-+device.name UM8710
-
- vendor.id pci 0x1060
-&device.id pci 0x886a
-+device.name UM8886A
-
- vendor.id pci 0x1060
-&device.id pci 0x8881
-+device.name UM8881F
-
- vendor.id pci 0x1060
-&device.id pci 0x8886
-+device.name UM8886F
-
- vendor.id pci 0x1060
-&device.id pci 0x888a
-+device.name UM8886A
-
- vendor.id pci 0x1060
-&device.id pci 0x8891
-+device.name UM8891A
-
- vendor.id pci 0x1060
-&device.id pci 0x9017
-+device.name UM9017F
-
- vendor.id pci 0x1060
-&device.id pci 0x9018
-+device.name UM9018
-
- vendor.id pci 0x1060
-&device.id pci 0x9026
-+device.name UM9026
-
- vendor.id pci 0x1060
-&device.id pci 0xe881
-+device.name UM8881N
-
- vendor.id pci 0x1060
-&device.id pci 0xe886
-+device.name UM8886N
-
- vendor.id pci 0x1060
-&device.id pci 0xe88a
-+device.name UM8886N
-
- vendor.id pci 0x1060
-&device.id pci 0xe891
-+device.name UM8891N
-
- vendor.id pci 0x1061
-+vendor.name I.I.T.
-
- vendor.id pci 0x1061
-&device.id pci 0x0001
-+device.name AGX016
-
- vendor.id pci 0x1061
-&device.id pci 0x0002
-+device.name IIT3204/3501
-
- vendor.id pci 0x1062
-+vendor.name Maspar Computer Corp
-
- vendor.id pci 0x1063
-+vendor.name Ocean Office Automation
-
- vendor.id pci 0x1064
-+vendor.name Alcatel
-
- vendor.id pci 0x1065
-+vendor.name Texas Microsystems
-
- vendor.id pci 0x1066
-+vendor.name PicoPower Technology
-
- vendor.id pci 0x1066
-&device.id pci 0x0000
-+device.name PT80C826
-
- vendor.id pci 0x1066
-&device.id pci 0x0001
-+device.name PT86C521 [Vesuvius v1] Host Bridge
-
- vendor.id pci 0x1066
-&device.id pci 0x0002
-+device.name PT86C523 [Vesuvius v3] PCI-ISA Bridge Master
-
- vendor.id pci 0x1066
-&device.id pci 0x0003
-+device.name PT86C524 [Nile] PCI-to-PCI Bridge
-
- vendor.id pci 0x1066
-&device.id pci 0x0004
-+device.name PT86C525 [Nile-II] PCI-to-PCI Bridge
-
- vendor.id pci 0x1066
-&device.id pci 0x0005
-+device.name National PC87550 System Controller
-
- vendor.id pci 0x1066
-&device.id pci 0x8002
-+device.name PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave
-
- vendor.id pci 0x1067
-+vendor.name Mitsubishi Electric
-
- vendor.id pci 0x1067
-&device.id pci 0x0301
-+device.name AccelGraphics AccelECLIPSE
-
- vendor.id pci 0x1067
-&device.id pci 0x0304
-+device.name AccelGALAXY A2100 [OEM Evans & Sutherland]
-
- vendor.id pci 0x1067
-&device.id pci 0x0308
-+device.name Tornado 3000 [OEM Evans & Sutherland]
-
- vendor.id pci 0x1067
-&device.id pci 0x1002
-+device.name VG500 [VolumePro Volume Rendering Accelerator]
-
- vendor.id pci 0x1068
-+vendor.name Diversified Technology
-
- vendor.id pci 0x1069
-+vendor.name Mylex Corporation
-
- vendor.id pci 0x1069
-&device.id pci 0x0001
-+device.name DAC960P
-
- vendor.id pci 0x1069
-&device.id pci 0x0002
-+device.name DAC960PD
-
- vendor.id pci 0x1069
-&device.id pci 0x0010
-+device.name DAC960PG
-
- vendor.id pci 0x1069
-&device.id pci 0x0020
-+device.name DAC960LA
-
- vendor.id pci 0x1069
-&device.id pci 0x0050
-+device.name AcceleRAID 352/170/160 support Device
-
- vendor.id pci 0x1069
-&device.id pci 0xb166
-+device.name Gemstone chipset SCSI controller
-
- vendor.id pci 0x1069
-&device.id pci 0xb166
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0242
-+subdevice.name iSeries 2872 DASD IOA
-
- vendor.id pci 0x1069
-&device.id pci 0xb166
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0266
-+subdevice.name Dual Channel PCI-X U320 SCSI Adapter
-
- vendor.id pci 0x1069
-&device.id pci 0xb166
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0278
-+subdevice.name Dual Channel PCI-X U320 SCSI RAID Adapter
-
- vendor.id pci 0x1069
-&device.id pci 0xba55
-+device.name eXtremeRAID 1100 support Device
-
- vendor.id pci 0x1069
-&device.id pci 0xba56
-+device.name eXtremeRAID 2000/3000 support Device
-
- vendor.id pci 0x106a
-+vendor.name Aten Research Inc
-
- vendor.id pci 0x106b
-+vendor.name Apple Computer Inc.
-
- vendor.id pci 0x106b
-&device.id pci 0x0001
-+device.name Bandit PowerPC host bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0002
-+device.name Grand Central I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0003
-+device.name Control Video
-
- vendor.id pci 0x106b
-&device.id pci 0x0004
-+device.name PlanB Video-In
-
- vendor.id pci 0x106b
-&device.id pci 0x0007
-+device.name O'Hare I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x000e
-+device.name Hydra Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0010
-+device.name Heathrow Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0017
-+device.name Paddington Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0018
-+device.name UniNorth FireWire
-
- vendor.id pci 0x106b
-&device.id pci 0x0019
-+device.name KeyLargo USB
-
- vendor.id pci 0x106b
-&device.id pci 0x001e
-+device.name UniNorth Internal PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x001f
-+device.name UniNorth PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x0020
-+device.name UniNorth AGP
-
- vendor.id pci 0x106b
-&device.id pci 0x0021
-+device.name UniNorth GMAC (Sun GEM)
-
- vendor.id pci 0x106b
-&device.id pci 0x0022
-+device.name KeyLargo Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0024
-+device.name UniNorth/Pangea GMAC (Sun GEM)
-
- vendor.id pci 0x106b
-&device.id pci 0x0025
-+device.name KeyLargo/Pangea Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0026
-+device.name KeyLargo/Pangea USB
-
- vendor.id pci 0x106b
-&device.id pci 0x0027
-+device.name UniNorth/Pangea AGP
-
- vendor.id pci 0x106b
-&device.id pci 0x0028
-+device.name UniNorth/Pangea PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x0029
-+device.name UniNorth/Pangea Internal PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x002d
-+device.name UniNorth 1.5 AGP
-
- vendor.id pci 0x106b
-&device.id pci 0x002e
-+device.name UniNorth 1.5 PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x002f
-+device.name UniNorth 1.5 Internal PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x0030
-+device.name UniNorth/Pangea FireWire
-
- vendor.id pci 0x106b
-&device.id pci 0x0031
-+device.name UniNorth 2 FireWire
-
- vendor.id pci 0x106b
-&device.id pci 0x0032
-+device.name UniNorth 2 GMAC (Sun GEM)
-
- vendor.id pci 0x106b
-&device.id pci 0x0033
-+device.name UniNorth 2 ATA/100
-
- vendor.id pci 0x106b
-&device.id pci 0x0034
-+device.name UniNorth 2 AGP
-
- vendor.id pci 0x106b
-&device.id pci 0x0035
-+device.name UniNorth 2 PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x0036
-+device.name UniNorth 2 Internal PCI
-
- vendor.id pci 0x106b
-&device.id pci 0x003b
-+device.name UniNorth/Intrepid ATA/100
-
- vendor.id pci 0x106b
-&device.id pci 0x003e
-+device.name KeyLargo/Intrepid Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x003f
-+device.name KeyLargo/Intrepid USB
-
- vendor.id pci 0x106b
-&device.id pci 0x0040
-+device.name K2 KeyLargo USB
-
- vendor.id pci 0x106b
-&device.id pci 0x0041
-+device.name K2 KeyLargo Mac/IO
-
- vendor.id pci 0x106b
-&device.id pci 0x0042
-+device.name K2 FireWire
-
- vendor.id pci 0x106b
-&device.id pci 0x0043
-+device.name K2 ATA/100
-
- vendor.id pci 0x106b
-&device.id pci 0x0045
-+device.name K2 HT-PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0046
-+device.name K2 HT-PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0047
-+device.name K2 HT-PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0048
-+device.name K2 HT-PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0049
-+device.name K2 HT-PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x004b
-+device.name U3 AGP
-
- vendor.id pci 0x106b
-&device.id pci 0x004c
-+device.name K2 GMAC (Sun GEM)
-
- vendor.id pci 0x106b
-&device.id pci 0x004f
-+device.name Shasta Mac I/O
-
- vendor.id pci 0x106b
-&device.id pci 0x0050
-+device.name Shasta IDE
-
- vendor.id pci 0x106b
-&device.id pci 0x0051
-+device.name Shasta (Sun GEM)
-
- vendor.id pci 0x106b
-&device.id pci 0x0052
-+device.name Shasta Firewire
-
- vendor.id pci 0x106b
-&device.id pci 0x0053
-+device.name Shasta PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0054
-+device.name Shasta PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0055
-+device.name Shasta PCI Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x0058
-+device.name U3L AGP Bridge
-
- vendor.id pci 0x106b
-&device.id pci 0x1645
-+device.name Tigon3 Gigabit Ethernet NIC (BCM5701)
-
- vendor.id pci 0x106c
-+vendor.name Hynix Semiconductor
-
- vendor.id pci 0x106c
-&device.id pci 0x8801
-+device.name Dual Pentium ISA/PCI Motherboard
-
- vendor.id pci 0x106c
-&device.id pci 0x8802
-+device.name PowerPC ISA/PCI Motherboard
-
- vendor.id pci 0x106c
-&device.id pci 0x8803
-+device.name Dual Window Graphics Accelerator
-
- vendor.id pci 0x106c
-&device.id pci 0x8804
-+device.name LAN Controller
-
- vendor.id pci 0x106c
-&device.id pci 0x8805
-+device.name 100-BaseT LAN
-
- vendor.id pci 0x106d
-+vendor.name Sequent Computer Systems
-
- vendor.id pci 0x106e
-+vendor.name DFI, Inc
-
- vendor.id pci 0x106f
-+vendor.name City Gate Development Ltd
-
- vendor.id pci 0x1070
-+vendor.name Daewoo Telecom Ltd
-
- vendor.id pci 0x1071
-+vendor.name Mitac
-
- vendor.id pci 0x1071
-&device.id pci 0x8160
-+device.name Mitac 8060B Mobile Platform
-
- vendor.id pci 0x1072
-+vendor.name GIT Co Ltd
-
- vendor.id pci 0x1073
-+vendor.name Yamaha Corporation
-
- vendor.id pci 0x1073
-&device.id pci 0x0001
-+device.name 3D GUI Accelerator
-
- vendor.id pci 0x1073
-&device.id pci 0x0002
-+device.name YGV615 [RPA3 3D-Graphics Controller]
-
- vendor.id pci 0x1073
-&device.id pci 0x0003
-+device.name YMF-740
-
- vendor.id pci 0x1073
-&device.id pci 0x0004
-+device.name YMF-724
-
- vendor.id pci 0x1073
-&device.id pci 0x0004
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0004
-+subdevice.name YMF724-Based PCI Audio Adapter
-
- vendor.id pci 0x1073
-&device.id pci 0x0005
-+device.name DS1 Audio
-
- vendor.id pci 0x1073
-&device.id pci 0x0005
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0005
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x0006
-+device.name DS1 Audio
-
- vendor.id pci 0x1073
-&device.id pci 0x0008
-+device.name DS1 Audio
-
- vendor.id pci 0x1073
-&device.id pci 0x0008
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0008
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x000a
-+device.name DS1L Audio
-
- vendor.id pci 0x1073
-&device.id pci 0x000a
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0004
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x000a
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x000a
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x000c
-+device.name YMF-740C [DS-1L Audio Controller]
-
- vendor.id pci 0x1073
-&device.id pci 0x000c
-&subvendor.id pci 0x107a
-&subdevice.id pci 0x000c
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x000d
-+device.name YMF-724F [DS-1 Audio Controller]
-
- vendor.id pci 0x1073
-&device.id pci 0x000d
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x000d
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x0010
-+device.name YMF-744B [DS-1S Audio Controller]
-
- vendor.id pci 0x1073
-&device.id pci 0x0010
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0006
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x0010
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0010
-+subdevice.name DS-XG PCI Audio CODEC
-
- vendor.id pci 0x1073
-&device.id pci 0x0012
-+device.name YMF-754 [DS-1E Audio Controller]
-
- vendor.id pci 0x1073
-&device.id pci 0x0012
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x0012
-+subdevice.name DS-XG PCI Audio Codec
-
- vendor.id pci 0x1073
-&device.id pci 0x0020
-+device.name DS-1 Audio
-
- vendor.id pci 0x1073
-&device.id pci 0x2000
-+device.name DS2416 Digital Mixing Card
-
- vendor.id pci 0x1073
-&device.id pci 0x2000
-&subvendor.id pci 0x1073
-&subdevice.id pci 0x2000
-+subdevice.name DS2416 Digital Mixing Card
-
- vendor.id pci 0x1074
-+vendor.name NexGen Microsystems
-
- vendor.id pci 0x1074
-&device.id pci 0x4e78
-+device.name 82c500/1
-
- vendor.id pci 0x1075
-+vendor.name Advanced Integrations Research
-
- vendor.id pci 0x1076
-+vendor.name Chaintech Computer Co. Ltd
-
- vendor.id pci 0x1077
-+vendor.name QLogic Corp.
-
- vendor.id pci 0x1077
-&device.id pci 0x1016
-+device.name ISP10160 Single Channel Ultra3 SCSI Processor
-
- vendor.id pci 0x1077
-&device.id pci 0x1020
-+device.name ISP1020 Fast-wide SCSI
-
- vendor.id pci 0x1077
-&device.id pci 0x1022
-+device.name ISP1022 Fast-wide SCSI
-
- vendor.id pci 0x1077
-&device.id pci 0x1080
-+device.name ISP1080 SCSI Host Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x1216
-+device.name ISP12160 Dual Channel Ultra3 SCSI Processor
-
- vendor.id pci 0x1077
-&device.id pci 0x1216
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x8471
-+subdevice.name QLA12160 on AMI MegaRAID
-
- vendor.id pci 0x1077
-&device.id pci 0x1216
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x8493
-+subdevice.name QLA12160 on AMI MegaRAID
-
- vendor.id pci 0x1077
-&device.id pci 0x1240
-+device.name ISP1240 SCSI Host Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x1280
-+device.name ISP1280 SCSI Host Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x2020
-+device.name ISP2020A Fast!SCSI Basic Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x2100
-+device.name QLA2100 64-bit Fibre Channel Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x2100
-&subvendor.id pci 0x1077
-&subdevice.id pci 0x0001
-+subdevice.name QLA2100 64-bit Fibre Channel Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x2200
-+device.name QLA2200 64-bit Fibre Channel Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x2200
-&subvendor.id pci 0x1077
-&subdevice.id pci 0x0002
-+subdevice.name QLA2200
-
- vendor.id pci 0x1077
-&device.id pci 0x2300
-+device.name QLA2300 64-bit Fibre Channel Adapter
-
- vendor.id pci 0x1077
-&device.id pci 0x2312
-+device.name QLA2312 Fibre Channel Adapter
-
- vendor.id pci 0x1078
-+vendor.name Cyrix Corporation
-
- vendor.id pci 0x1078
-&device.id pci 0x0000
-+device.name 5510 [Grappa]
-
- vendor.id pci 0x1078
-&device.id pci 0x0001
-+device.name PCI Master
-
- vendor.id pci 0x1078
-&device.id pci 0x0002
-+device.name 5520 [Cognac]
-
- vendor.id pci 0x1078
-&device.id pci 0x0100
-+device.name 5530 Legacy [Kahlua]
-
- vendor.id pci 0x1078
-&device.id pci 0x0101
-+device.name 5530 SMI [Kahlua]
-
- vendor.id pci 0x1078
-&device.id pci 0x0102
-+device.name 5530 IDE [Kahlua]
-
- vendor.id pci 0x1078
-&device.id pci 0x0103
-+device.name 5530 Audio [Kahlua]
-
- vendor.id pci 0x1078
-&device.id pci 0x0104
-+device.name 5530 Video [Kahlua]
-
- vendor.id pci 0x1078
-&device.id pci 0x0400
-+device.name ZFMicro PCI Bridge
-
- vendor.id pci 0x1078
-&device.id pci 0x0401
-+device.name ZFMicro Chipset SMI
-
- vendor.id pci 0x1078
-&device.id pci 0x0402
-+device.name ZFMicro Chipset IDE
-
- vendor.id pci 0x1078
-&device.id pci 0x0403
-+device.name ZFMicro Expansion Bus
-
- vendor.id pci 0x1079
-+vendor.name I-Bus
-
- vendor.id pci 0x107a
-+vendor.name NetWorth
-
- vendor.id pci 0x107b
-+vendor.name Gateway 2000
-
- vendor.id pci 0x107c
-+vendor.name LG Electronics [Lucky Goldstar Co. Ltd]
-
- vendor.id pci 0x107d
-+vendor.name LeadTek Research Inc.
-
- vendor.id pci 0x107d
-&device.id pci 0x0000
-+device.name P86C850
-
- vendor.id pci 0x107d
-&device.id pci 0x2134
-+device.name WinFast 3D S320 II
-
- vendor.id pci 0x107d
-&device.id pci 0x2971
-+device.name [GeForce FX 5900] WinFast A350 TDH MyViVo
-
- vendor.id pci 0x107e
-+vendor.name Interphase Corporation
-
- vendor.id pci 0x107e
-&device.id pci 0x0001
-+device.name 5515 ATM Adapter [Flipper]
-
- vendor.id pci 0x107e
-&device.id pci 0x0002
-+device.name 100 VG AnyLan Controller
-
- vendor.id pci 0x107e
-&device.id pci 0x0004
-+device.name 5526 Fibre Channel Host Adapter
-
- vendor.id pci 0x107e
-&device.id pci 0x0005
-+device.name x526 Fibre Channel Host Adapter
-
- vendor.id pci 0x107e
-&device.id pci 0x0008
-+device.name 5525/5575 ATM Adapter (155 Mbit) [Atlantic]
-
- vendor.id pci 0x107e
-&device.id pci 0x9003
-+device.name 5535-4P-BRI-ST
-
- vendor.id pci 0x107e
-&device.id pci 0x9007
-+device.name 5535-4P-BRI-U
-
- vendor.id pci 0x107e
-&device.id pci 0x9008
-+device.name 5535-1P-SR
-
- vendor.id pci 0x107e
-&device.id pci 0x900c
-+device.name 5535-1P-SR-ST
-
- vendor.id pci 0x107e
-&device.id pci 0x900e
-+device.name 5535-1P-SR-U
-
- vendor.id pci 0x107e
-&device.id pci 0x9011
-+device.name 5535-1P-PRI
-
- vendor.id pci 0x107e
-&device.id pci 0x9013
-+device.name 5535-2P-PRI
-
- vendor.id pci 0x107e
-&device.id pci 0x9023
-+device.name 5536-4P-BRI-ST
-
- vendor.id pci 0x107e
-&device.id pci 0x9027
-+device.name 5536-4P-BRI-U
-
- vendor.id pci 0x107e
-&device.id pci 0x9031
-+device.name 5536-1P-PRI
-
- vendor.id pci 0x107e
-&device.id pci 0x9033
-+device.name 5536-2P-PRI
-
- vendor.id pci 0x107f
-+vendor.name Data Technology Corporation
-
- vendor.id pci 0x107f
-&device.id pci 0x0802
-+device.name SL82C105
-
- vendor.id pci 0x1080
-+vendor.name Contaq Microsystems
-
- vendor.id pci 0x1080
-&device.id pci 0x0600
-+device.name 82C599
-
- vendor.id pci 0x1080
-&device.id pci 0xc691
-+device.name Cypress CY82C691
-
- vendor.id pci 0x1080
-&device.id pci 0xc693
-+device.name 82c693
-
- vendor.id pci 0x1081
-+vendor.name Supermac Technology
-
- vendor.id pci 0x1081
-&device.id pci 0x0d47
-+device.name Radius PCI to NuBUS Bridge
-
- vendor.id pci 0x1082
-+vendor.name EFA Corporation of America
-
- vendor.id pci 0x1083
-+vendor.name Forex Computer Corporation
-
- vendor.id pci 0x1083
-&device.id pci 0x0001
-+device.name FR710
-
- vendor.id pci 0x1084
-+vendor.name Parador
-
- vendor.id pci 0x1085
-+vendor.name Tulip Computers Int.B.V.
-
- vendor.id pci 0x1086
-+vendor.name J. Bond Computer Systems
-
- vendor.id pci 0x1087
-+vendor.name Cache Computer
-
- vendor.id pci 0x1088
-+vendor.name Microcomputer Systems (M) Son
-
- vendor.id pci 0x1089
-+vendor.name Data General Corporation
-
- vendor.id pci 0x108a
-+vendor.name SBS Technologies
-
- vendor.id pci 0x108a
-&device.id pci 0x0001
-+device.name VME Bridge Model 617
-
- vendor.id pci 0x108a
-&device.id pci 0x0010
-+device.name VME Bridge Model 618
-
- vendor.id pci 0x108a
-&device.id pci 0x0040
-+device.name dataBLIZZARD
-
- vendor.id pci 0x108a
-&device.id pci 0x3000
-+device.name VME Bridge Model 2706
-
- vendor.id pci 0x108c
-+vendor.name Oakleigh Systems Inc.
-
- vendor.id pci 0x108d
-+vendor.name Olicom
-
- vendor.id pci 0x108d
-&device.id pci 0x0001
-+device.name Token-Ring 16/4 PCI Adapter (3136/3137)
-
- vendor.id pci 0x108d
-&device.id pci 0x0002
-+device.name 16/4 Token Ring
-
- vendor.id pci 0x108d
-&device.id pci 0x0004
-+device.name RapidFire 3139 Token-Ring 16/4 PCI Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0004
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0004
-+subdevice.name OC-3139/3140 RapidFire Token-Ring 16/4 Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0005
-+device.name GoCard 3250 Token-Ring 16/4 CardBus PC Card
-
- vendor.id pci 0x108d
-&device.id pci 0x0006
-+device.name OC-3530 RapidFire Token-Ring 100
-
- vendor.id pci 0x108d
-&device.id pci 0x0007
-+device.name RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0007
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0007
-+subdevice.name OC-3141 RapidFire Token-Ring 16/4 Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0008
-+device.name RapidFire 3540 HSTR 100/16/4 PCI Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0008
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0008
-+subdevice.name OC-3540 RapidFire HSTR 100/16/4 Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0011
-+device.name OC-2315
-
- vendor.id pci 0x108d
-&device.id pci 0x0012
-+device.name OC-2325
-
- vendor.id pci 0x108d
-&device.id pci 0x0013
-+device.name OC-2183/2185
-
- vendor.id pci 0x108d
-&device.id pci 0x0014
-+device.name OC-2326
-
- vendor.id pci 0x108d
-&device.id pci 0x0019
-+device.name OC-2327/2250 10/100 Ethernet Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0019
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0016
-+subdevice.name OC-2327 Rapidfire 10/100 Ethernet Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0019
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0017
-+subdevice.name OC-2250 GoCard 10/100 Ethernet Adapter
-
- vendor.id pci 0x108d
-&device.id pci 0x0021
-+device.name OC-6151/6152 [RapidFire ATM 155]
-
- vendor.id pci 0x108d
-&device.id pci 0x0022
-+device.name ATM Adapter
-
- vendor.id pci 0x108e
-+vendor.name Sun Microsystems Computer Corp.
-
- vendor.id pci 0x108e
-&device.id pci 0x0001
-+device.name EBUS
-
- vendor.id pci 0x108e
-&device.id pci 0x1000
-+device.name EBUS
-
- vendor.id pci 0x108e
-&device.id pci 0x1001
-+device.name Happy Meal
-
- vendor.id pci 0x108e
-&device.id pci 0x1100
-+device.name RIO EBUS
-
- vendor.id pci 0x108e
-&device.id pci 0x1101
-+device.name RIO GEM
-
- vendor.id pci 0x108e
-&device.id pci 0x1102
-+device.name RIO 1394
-
- vendor.id pci 0x108e
-&device.id pci 0x1103
-+device.name RIO USB
-
- vendor.id pci 0x108e
-&device.id pci 0x2bad
-+device.name GEM
-
- vendor.id pci 0x108e
-&device.id pci 0x5000
-+device.name Simba Advanced PCI Bridge
-
- vendor.id pci 0x108e
-&device.id pci 0x5043
-+device.name SunPCI Co-processor
-
- vendor.id pci 0x108e
-&device.id pci 0x8000
-+device.name Psycho PCI Bus Module
-
- vendor.id pci 0x108e
-&device.id pci 0x8001
-+device.name Schizo PCI Bus Module
-
- vendor.id pci 0x108e
-&device.id pci 0xa000
-+device.name Ultra IIi
-
- vendor.id pci 0x108e
-&device.id pci 0xa001
-+device.name Ultra IIe
-
- vendor.id pci 0x108e
-&device.id pci 0xa801
-+device.name Tomatillo PCI Bus Module
-
- vendor.id pci 0x108e
-&device.id pci 0xabba
-+device.name Cassini 10/100/1000
-
- vendor.id pci 0x108f
-+vendor.name Systemsoft
-
- vendor.id pci 0x1090
-+vendor.name Encore Computer Corporation
-
- vendor.id pci 0x1091
-+vendor.name Intergraph Corporation
-
- vendor.id pci 0x1091
-&device.id pci 0x0020
-+device.name 3D graphics processor
-
- vendor.id pci 0x1091
-&device.id pci 0x0021
-+device.name 3D graphics processor w/Texturing
-
- vendor.id pci 0x1091
-&device.id pci 0x0040
-+device.name 3D graphics frame buffer
-
- vendor.id pci 0x1091
-&device.id pci 0x0041
-+device.name 3D graphics frame buffer
-
- vendor.id pci 0x1091
-&device.id pci 0x0060
-+device.name Proprietary bus bridge
-
- vendor.id pci 0x1091
-&device.id pci 0x00e4
-+device.name Powerstorm 4D50T
-
- vendor.id pci 0x1091
-&device.id pci 0x0720
-+device.name Motion JPEG codec
-
- vendor.id pci 0x1091
-&device.id pci 0x07a0
-+device.name Sun Expert3D-Lite Graphics Accelerator
-
- vendor.id pci 0x1091
-&device.id pci 0x1091
-+device.name Sun Expert3D Graphics Accelerator
-
- vendor.id pci 0x1092
-+vendor.name Diamond Multimedia Systems
-
- vendor.id pci 0x1092
-&device.id pci 0x00a0
-+device.name Speedstar Pro SE
-
- vendor.id pci 0x1092
-&device.id pci 0x00a8
-+device.name Speedstar 64
-
- vendor.id pci 0x1092
-&device.id pci 0x0550
-+device.name Viper V550
-
- vendor.id pci 0x1092
-&device.id pci 0x08d4
-+device.name Supra 2260 Modem
-
- vendor.id pci 0x1092
-&device.id pci 0x094c
-+device.name SupraExpress 56i Pro
-
- vendor.id pci 0x1092
-&device.id pci 0x1092
-+device.name Viper V330
-
- vendor.id pci 0x1092
-&device.id pci 0x6120
-+device.name Maximum DVD
-
- vendor.id pci 0x1092
-&device.id pci 0x8810
-+device.name Stealth SE
-
- vendor.id pci 0x1092
-&device.id pci 0x8811
-+device.name Stealth 64/SE
-
- vendor.id pci 0x1092
-&device.id pci 0x8880
-+device.name Stealth
-
- vendor.id pci 0x1092
-&device.id pci 0x8881
-+device.name Stealth
-
- vendor.id pci 0x1092
-&device.id pci 0x88b0
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88b1
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88c0
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88c1
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88d0
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88d1
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88f0
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x88f1
-+device.name Stealth 64
-
- vendor.id pci 0x1092
-&device.id pci 0x9999
-+device.name DMD-I0928-1 "Monster sound" sound chip
-
- vendor.id pci 0x1093
-+vendor.name National Instruments
-
- vendor.id pci 0x1093
-&device.id pci 0x0160
-+device.name PCI-DIO-96
-
- vendor.id pci 0x1093
-&device.id pci 0x0162
-+device.name PCI-MIO-16XE-50
-
- vendor.id pci 0x1093
-&device.id pci 0x1170
-+device.name PCI-MIO-16XE-10
-
- vendor.id pci 0x1093
-&device.id pci 0x1180
-+device.name PCI-MIO-16E-1
-
- vendor.id pci 0x1093
-&device.id pci 0x1190
-+device.name PCI-MIO-16E-4
-
- vendor.id pci 0x1093
-&device.id pci 0x1330
-+device.name PCI-6031E
-
- vendor.id pci 0x1093
-&device.id pci 0x1350
-+device.name PCI-6071E
-
- vendor.id pci 0x1093
-&device.id pci 0x14e0
-+device.name PCI-6110
-
- vendor.id pci 0x1093
-&device.id pci 0x14f0
-+device.name PCI-6111
-
- vendor.id pci 0x1093
-&device.id pci 0x17d0
-+device.name PCI-6503
-
- vendor.id pci 0x1093
-&device.id pci 0x1870
-+device.name PCI-6713
-
- vendor.id pci 0x1093
-&device.id pci 0x1880
-+device.name PCI-6711
-
- vendor.id pci 0x1093
-&device.id pci 0x18b0
-+device.name PCI-6052E
-
- vendor.id pci 0x1093
-&device.id pci 0x2410
-+device.name PCI-6733
-
- vendor.id pci 0x1093
-&device.id pci 0x2890
-+device.name PCI-6036E
-
- vendor.id pci 0x1093
-&device.id pci 0x2a60
-+device.name PCI-6023E
-
- vendor.id pci 0x1093
-&device.id pci 0x2a70
-+device.name PCI-6024E
-
- vendor.id pci 0x1093
-&device.id pci 0x2a80
-+device.name PCI-6025E
-
- vendor.id pci 0x1093
-&device.id pci 0x2c80
-+device.name PCI-6035E
-
- vendor.id pci 0x1093
-&device.id pci 0x2ca0
-+device.name PCI-6034E
-
- vendor.id pci 0x1093
-&device.id pci 0xb001
-+device.name IMAQ-PCI-1408
-
- vendor.id pci 0x1093
-&device.id pci 0xb011
-+device.name IMAQ-PXI-1408
-
- vendor.id pci 0x1093
-&device.id pci 0xb021
-+device.name IMAQ-PCI-1424
-
- vendor.id pci 0x1093
-&device.id pci 0xb031
-+device.name IMAQ-PCI-1413
-
- vendor.id pci 0x1093
-&device.id pci 0xb041
-+device.name IMAQ-PCI-1407
-
- vendor.id pci 0x1093
-&device.id pci 0xb051
-+device.name IMAQ-PXI-1407
-
- vendor.id pci 0x1093
-&device.id pci 0xb061
-+device.name IMAQ-PCI-1411
-
- vendor.id pci 0x1093
-&device.id pci 0xb071
-+device.name IMAQ-PCI-1422
-
- vendor.id pci 0x1093
-&device.id pci 0xb081
-+device.name IMAQ-PXI-1422
-
- vendor.id pci 0x1093
-&device.id pci 0xb091
-+device.name IMAQ-PXI-1411
-
- vendor.id pci 0x1093
-&device.id pci 0xc801
-+device.name PCI-GPIB
-
- vendor.id pci 0x1093
-&device.id pci 0xc831
-+device.name PCI-GPIB bridge
-
- vendor.id pci 0x1094
-+vendor.name First International Computers [FIC]
-
- vendor.id pci 0x1095
-+vendor.name Silicon Image, Inc. (formerly CMD Technology Inc)
-
- vendor.id pci 0x1095
-&device.id pci 0x0240
-+device.name Adaptec AAR-1210SA SATA HostRAID Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x0640
-+device.name PCI0640
-
- vendor.id pci 0x1095
-&device.id pci 0x0643
-+device.name PCI0643
-
- vendor.id pci 0x1095
-&device.id pci 0x0646
-+device.name PCI0646
-
- vendor.id pci 0x1095
-&device.id pci 0x0647
-+device.name PCI0647
-
- vendor.id pci 0x1095
-&device.id pci 0x0648
-+device.name PCI0648
-
- vendor.id pci 0x1095
-&device.id pci 0x0649
-+device.name SiI 0649 Ultra ATA/100 PCI to ATA Host Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x0649
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x005d
-+subdevice.name Integrated Ultra ATA-100 Dual Channel Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x0649
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x007e
-+subdevice.name Integrated Ultra ATA-100 IDE RAID Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x0649
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0649
-+subdevice.name AMI MegaRAID IDE 100 Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x0650
-+device.name PBC0650A
-
- vendor.id pci 0x1095
-&device.id pci 0x0670
-+device.name USB0670
-
- vendor.id pci 0x1095
-&device.id pci 0x0670
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x0670
-+subdevice.name USB0670
-
- vendor.id pci 0x1095
-&device.id pci 0x0673
-+device.name USB0673
-
- vendor.id pci 0x1095
-&device.id pci 0x0680
-+device.name PCI0680 Ultra ATA-133 Host Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x0680
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x3680
-+subdevice.name Winic W-680 (Silicon Image 680 based)
-
- vendor.id pci 0x1095
-&device.id pci 0x3112
-+device.name SiI 3112 [SATALink/SATARaid] Serial ATA Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3112
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x3112
-+subdevice.name SiI 3112 SATALink Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3112
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x6112
-+subdevice.name SiI 3112 SATARaid Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3114
-+device.name SiI 3114 [SATALink/SATARaid] Serial ATA Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3114
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x3114
-+subdevice.name SiI 3114 SATALink Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3114
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x6114
-+subdevice.name SiI 3114 SATARaid Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3124
-+device.name SiI 3124 PCI-X Serial ATA Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3124
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x3124
-+subdevice.name SiI 3124 PCI-X Serial ATA Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3512
-+device.name SiI 3512 [SATALink/SATARaid] Serial ATA Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3512
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x3512
-+subdevice.name SiI 3512 SATALink Controller
-
- vendor.id pci 0x1095
-&device.id pci 0x3512
-&subvendor.id pci 0x1095
-&subdevice.id pci 0x6512
-+subdevice.name SiI 3512 SATARaid Controller
-
- vendor.id pci 0x1096
-+vendor.name Alacron
-
- vendor.id pci 0x1097
-+vendor.name Appian Technology
-
- vendor.id pci 0x1098
-+vendor.name Quantum Designs (H.K.) Ltd
-
- vendor.id pci 0x1098
-&device.id pci 0x0001
-+device.name QD-8500
-
- vendor.id pci 0x1098
-&device.id pci 0x0002
-+device.name QD-8580
-
- vendor.id pci 0x1099
-+vendor.name Samsung Electronics Co., Ltd
-
- vendor.id pci 0x109a
-+vendor.name Packard Bell
-
- vendor.id pci 0x109b
-+vendor.name Gemlight Computer Ltd.
-
- vendor.id pci 0x109c
-+vendor.name Megachips Corporation
-
- vendor.id pci 0x109d
-+vendor.name Zida Technologies Ltd.
-
- vendor.id pci 0x109e
-+vendor.name Brooktree Corporation
-
- vendor.id pci 0x109e
-&device.id pci 0x0350
-+device.name Bt848 Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0351
-+device.name Bt849A Video capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0369
-+device.name Bt878 Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0369
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0001
-+subdevice.name TV-Wonder
-
- vendor.id pci 0x109e
-&device.id pci 0x0369
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0003
-+subdevice.name TV-Wonder/VE
-
- vendor.id pci 0x109e
-&device.id pci 0x036c
-+device.name Bt879(??) Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x036c
-&subvendor.id pci 0x13e9
-&subdevice.id pci 0x0070
-+subdevice.name Win/TV (Video Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-+device.name Bt878 Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x13eb
-+subdevice.name WinTV Series
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x0070
-&subdevice.id pci 0xff01
-+subdevice.name Viewcast Osprey 200
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x0071
-&subdevice.id pci 0x0101
-+subdevice.name DigiTV PCI
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x6606
-+subdevice.name WinFast TV 2000
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0012
-+subdevice.name PCTV pro (TV + FM stereo receiver)
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x001c
-+subdevice.name PCTV Sat (DBC receiver)
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0001
-+subdevice.name Bt878 Mediastream Controller NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0002
-+subdevice.name Bt878 Mediastream Controller PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0003
-+subdevice.name Bt878a Mediastream Controller PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0048
-+subdevice.name Bt878/832 Mediastream Controller
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x3000
-+subdevice.name MagicTView CPH060 - Video
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0002
-+subdevice.name TV98 Series (TV/No FM/Remote)
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0004
-+subdevice.name AVerTV WDM Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0761
-+subdevice.name AverTV DVB-T
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0001
-+subdevice.name Bt878 Mediastream Controller NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0002
-+subdevice.name Bt878 Mediastream Controller PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0003
-+subdevice.name Bt878a Mediastream Controller PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0048
-+subdevice.name Bt878/832 Mediastream Controller
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1822
-&subdevice.id pci 0x0001
-+subdevice.name VisionPlus DVB card
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1850
-+subdevice.name FlyVideo'98 - Video
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1851
-+subdevice.name FlyVideo II
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1852
-&subdevice.id pci 0x1852
-+subdevice.name FlyVideo'98 - Video (with FM Tuner)
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x270f
-&subdevice.id pci 0xfc00
-+subdevice.name Digitop DTT-1000
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0xbd11
-&subdevice.id pci 0x1200
-+subdevice.name PCTV pro (TV + FM stereo receiver)
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-+device.name Bt879 Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0044
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0122
-+subdevice.name Bt879 Video Capture PAL I
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0144
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0222
-+subdevice.name Bt879 Video Capture PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0244
-+subdevice.name Bt879a Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0322
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0422
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1122
-+subdevice.name Bt879 Video Capture PAL I
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1222
-+subdevice.name Bt879 Video Capture PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1322
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1522
-+subdevice.name Bt879a Video Capture PAL I
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1622
-+subdevice.name Bt879a Video Capture PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1722
-+subdevice.name Bt879a Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0044
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0122
-+subdevice.name Bt879 Video Capture PAL I
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0144
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0222
-+subdevice.name Bt879 Video Capture PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0244
-+subdevice.name Bt879a Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0322
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0422
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1122
-+subdevice.name Bt879 Video Capture PAL I
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1222
-+subdevice.name Bt879 Video Capture PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1322
-+subdevice.name Bt879 Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1522
-+subdevice.name Bt879a Video Capture PAL I
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1622
-+subdevice.name Bt879a Video Capture PAL BG
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1722
-+subdevice.name Bt879a Video Capture NTSC
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1850
-+subdevice.name FlyVideo'98 - Video
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1851
-+subdevice.name FlyVideo II
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x1852
-&subdevice.id pci 0x1852
-+subdevice.name FlyVideo'98 - Video (with FM Tuner)
-
- vendor.id pci 0x109e
-&device.id pci 0x0370
-+device.name Bt880 Video Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0370
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1850
-+subdevice.name FlyVideo'98
-
- vendor.id pci 0x109e
-&device.id pci 0x0370
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1851
-+subdevice.name FlyVideo'98 EZ - video
-
- vendor.id pci 0x109e
-&device.id pci 0x0370
-&subvendor.id pci 0x1852
-&subdevice.id pci 0x1852
-+subdevice.name FlyVideo'98 (with FM Tuner)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-+device.name Bt878 Audio Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x13eb
-+subdevice.name WinTV Series
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x0070
-&subdevice.id pci 0xff01
-+subdevice.name Viewcast Osprey 200
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x0071
-&subdevice.id pci 0x0101
-+subdevice.name DigiTV PCI
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0001
-+subdevice.name TV-Wonder
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0003
-+subdevice.name TV-Wonder/VE
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0012
-+subdevice.name PCTV pro (TV + FM stereo receiver, audio section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x001c
-+subdevice.name PCTV Sat (DBC receiver)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0001
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0002
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0003
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0048
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x13e9
-&subdevice.id pci 0x0070
-+subdevice.name Win/TV (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x3000
-+subdevice.name MagicTView CPH060 - Audio
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0004
-+subdevice.name AVerTV WDM Audio Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0761
-+subdevice.name AVerTV DVB-T
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0001
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0002
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0003
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0048
-+subdevice.name Bt878 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x1822
-&subdevice.id pci 0x0001
-+subdevice.name VisionPlus DVB Card
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0x270f
-&subdevice.id pci 0xfc00
-+subdevice.name Digitop DTT-1000
-
- vendor.id pci 0x109e
-&device.id pci 0x0878
-&subvendor.id pci 0xbd11
-&subdevice.id pci 0x1200
-+subdevice.name PCTV pro (TV + FM stereo receiver, audio section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-+device.name Bt879 Audio Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0044
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0122
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0144
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0222
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0244
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0322
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x0422
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1122
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1222
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1322
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1522
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1622
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1722
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0044
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0122
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0144
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0222
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0244
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0322
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x0422
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1122
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1222
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1322
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1522
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1622
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0879
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x1722
-+subdevice.name Bt879 Video Capture (Audio Section)
-
- vendor.id pci 0x109e
-&device.id pci 0x0880
-+device.name Bt880 Audio Capture
-
- vendor.id pci 0x109e
-&device.id pci 0x2115
-+device.name BtV 2115 Mediastream controller
-
- vendor.id pci 0x109e
-&device.id pci 0x2125
-+device.name BtV 2125 Mediastream controller
-
- vendor.id pci 0x109e
-&device.id pci 0x2164
-+device.name BtV 2164
-
- vendor.id pci 0x109e
-&device.id pci 0x2165
-+device.name BtV 2165
-
- vendor.id pci 0x109e
-&device.id pci 0x8230
-+device.name Bt8230 ATM Segment/Reassembly Ctrlr (SRC)
-
- vendor.id pci 0x109e
-&device.id pci 0x8472
-+device.name Bt8472
-
- vendor.id pci 0x109e
-&device.id pci 0x8474
-+device.name Bt8474
-
- vendor.id pci 0x109f
-+vendor.name Trigem Computer Inc.
-
- vendor.id pci 0x10a0
-+vendor.name Meidensha Corporation
-
- vendor.id pci 0x10a1
-+vendor.name Juko Electronics Ind. Co. Ltd
-
- vendor.id pci 0x10a2
-+vendor.name Quantum Corporation
-
- vendor.id pci 0x10a3
-+vendor.name Everex Systems Inc
-
- vendor.id pci 0x10a4
-+vendor.name Globe Manufacturing Sales
-
- vendor.id pci 0x10a5
-+vendor.name Smart Link Ltd.
-
- vendor.id pci 0x10a5
-&device.id pci 0x3052
-+device.name SmartPCI562 56K Modem
-
- vendor.id pci 0x10a5
-&device.id pci 0x5449
-+device.name SmartPCI561 modem
-
- vendor.id pci 0x10a6
-+vendor.name Informtech Industrial Ltd.
-
- vendor.id pci 0x10a7
-+vendor.name Benchmarq Microelectronics
-
- vendor.id pci 0x10a8
-+vendor.name Sierra Semiconductor
-
- vendor.id pci 0x10a8
-&device.id pci 0x0000
-+device.name STB Horizon 64
-
- vendor.id pci 0x10a9
-+vendor.name Silicon Graphics, Inc.
-
- vendor.id pci 0x10a9
-&device.id pci 0x0001
-+device.name Crosstalk to PCI Bridge
-
- vendor.id pci 0x10a9
-&device.id pci 0x0002
-+device.name Linc I/O controller
-
- vendor.id pci 0x10a9
-&device.id pci 0x0003
-+device.name IOC3 I/O controller
-
- vendor.id pci 0x10a9
-&device.id pci 0x0004
-+device.name O2 MACE
-
- vendor.id pci 0x10a9
-&device.id pci 0x0005
-+device.name RAD Audio
-
- vendor.id pci 0x10a9
-&device.id pci 0x0006
-+device.name HPCEX
-
- vendor.id pci 0x10a9
-&device.id pci 0x0007
-+device.name RPCEX
-
- vendor.id pci 0x10a9
-&device.id pci 0x0008
-+device.name DiVO VIP
-
- vendor.id pci 0x10a9
-&device.id pci 0x0009
-+device.name AceNIC Gigabit Ethernet
-
- vendor.id pci 0x10a9
-&device.id pci 0x0009
-&subvendor.id pci 0x10a9
-&subdevice.id pci 0x8002
-+subdevice.name AceNIC Gigabit Ethernet
-
- vendor.id pci 0x10a9
-&device.id pci 0x0010
-+device.name AMP Video I/O
-
- vendor.id pci 0x10a9
-&device.id pci 0x0011
-+device.name GRIP
-
- vendor.id pci 0x10a9
-&device.id pci 0x0012
-+device.name SGH PSHAC GSN
-
- vendor.id pci 0x10a9
-&device.id pci 0x1001
-+device.name Magic Carpet
-
- vendor.id pci 0x10a9
-&device.id pci 0x1002
-+device.name Lithium
-
- vendor.id pci 0x10a9
-&device.id pci 0x1003
-+device.name Dual JPEG 1
-
- vendor.id pci 0x10a9
-&device.id pci 0x1004
-+device.name Dual JPEG 2
-
- vendor.id pci 0x10a9
-&device.id pci 0x1005
-+device.name Dual JPEG 3
-
- vendor.id pci 0x10a9
-&device.id pci 0x1006
-+device.name Dual JPEG 4
-
- vendor.id pci 0x10a9
-&device.id pci 0x1007
-+device.name Dual JPEG 5
-
- vendor.id pci 0x10a9
-&device.id pci 0x1008
-+device.name Cesium
-
- vendor.id pci 0x10a9
-&device.id pci 0x100a
-+device.name IOC4 I/O controller
-
- vendor.id pci 0x10a9
-&device.id pci 0x2001
-+device.name Fibre Channel
-
- vendor.id pci 0x10a9
-&device.id pci 0x2002
-+device.name ASDE
-
- vendor.id pci 0x10a9
-&device.id pci 0x8001
-+device.name O2 1394
-
- vendor.id pci 0x10a9
-&device.id pci 0x8002
-+device.name G-net NT
-
- vendor.id pci 0x10aa
-+vendor.name ACC Microelectronics
-
- vendor.id pci 0x10aa
-&device.id pci 0x0000
-+device.name ACCM 2188
-
- vendor.id pci 0x10ab
-+vendor.name Digicom
-
- vendor.id pci 0x10ac
-+vendor.name Honeywell IAC
-
- vendor.id pci 0x10ad
-+vendor.name Symphony Labs
-
- vendor.id pci 0x10ad
-&device.id pci 0x0001
-+device.name W83769F
-
- vendor.id pci 0x10ad
-&device.id pci 0x0003
-+device.name SL82C103
-
- vendor.id pci 0x10ad
-&device.id pci 0x0005
-+device.name SL82C105
-
- vendor.id pci 0x10ad
-&device.id pci 0x0103
-+device.name SL82c103
-
- vendor.id pci 0x10ad
-&device.id pci 0x0105
-+device.name SL82c105
-
- vendor.id pci 0x10ad
-&device.id pci 0x0565
-+device.name W83C553
-
- vendor.id pci 0x10ae
-+vendor.name Cornerstone Technology
-
- vendor.id pci 0x10af
-+vendor.name Micro Computer Systems Inc
-
- vendor.id pci 0x10b0
-+vendor.name CardExpert Technology
-
- vendor.id pci 0x10b1
-+vendor.name Cabletron Systems Inc
-
- vendor.id pci 0x10b2
-+vendor.name Raytheon Company
-
- vendor.id pci 0x10b3
-+vendor.name Databook Inc
-
- vendor.id pci 0x10b3
-&device.id pci 0x3106
-+device.name DB87144
-
- vendor.id pci 0x10b3
-&device.id pci 0xb106
-+device.name DB87144
-
- vendor.id pci 0x10b4
-+vendor.name STB Systems Inc
-
- vendor.id pci 0x10b4
-&device.id pci 0x1b1d
-+device.name Velocity 128 3D
-
- vendor.id pci 0x10b4
-&device.id pci 0x1b1d
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x237e
-+subdevice.name Velocity 4400
-
- vendor.id pci 0x10b5
-+vendor.name PLX Technology, Inc.
-
- vendor.id pci 0x10b5
-&device.id pci 0x0001
-+device.name i960 PCI bus interface
-
- vendor.id pci 0x10b5
-&device.id pci 0x1076
-+device.name VScom 800 8 port serial adaptor
-
- vendor.id pci 0x10b5
-&device.id pci 0x1077
-+device.name VScom 400 4 port serial adaptor
-
- vendor.id pci 0x10b5
-&device.id pci 0x1078
-+device.name VScom 210 2 port serial and 1 port parallel adaptor
-
- vendor.id pci 0x10b5
-&device.id pci 0x1103
-+device.name VScom 200 2 port serial adaptor
-
- vendor.id pci 0x10b5
-&device.id pci 0x1146
-+device.name VScom 010 1 port parallel adaptor
-
- vendor.id pci 0x10b5
-&device.id pci 0x1147
-+device.name VScom 020 2 port parallel adaptor
-
- vendor.id pci 0x10b5
-&device.id pci 0x2724
-+device.name Thales PCSM Security Card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9030
-+device.name PCI <-> IOBus Bridge Hot Swap
-
- vendor.id pci 0x10b5
-&device.id pci 0x9030
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2862
-+subdevice.name Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board
-
- vendor.id pci 0x10b5
-&device.id pci 0x9030
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2906
-+subdevice.name Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board
-
- vendor.id pci 0x10b5
-&device.id pci 0x9030
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2940
-+subdevice.name Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board
-
- vendor.id pci 0x10b5
-&device.id pci 0x9030
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x1002
-+subdevice.name MCCS 8-port Serial Hot Swap
-
- vendor.id pci 0x10b5
-&device.id pci 0x9030
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x1003
-+subdevice.name MCCS 16-port Serial Hot Swap
-
- vendor.id pci 0x10b5
-&device.id pci 0x9036
-+device.name 9036
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-+device.name PCI <-> IOBus Bridge
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x1067
-+subdevice.name IXXAT CAN i165
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x1172
-+subdevice.name IK220 (Heidenhain)
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2036
-+subdevice.name SatPak GPS
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2221
-+subdevice.name Alpermann+Velte PCL PCI LV: Timecode Reader Board
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2273
-+subdevice.name SH-ARC SoHard ARCnet card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2431
-+subdevice.name Alpermann+Velte PCL PCI D: Timecode Reader Board
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2905
-+subdevice.name Alpermann+Velte PCI TS: Time Synchronisation Board
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x9050
-+subdevice.name MP9050
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1498
-&subdevice.id pci 0x0362
-+subdevice.name TPMC866 8 Channel Serial Card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0001
-+subdevice.name RockForce 4 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0002
-+subdevice.name RockForce 2 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0003
-+subdevice.name RockForce 6 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0004
-+subdevice.name RockForce 8 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0010
-+subdevice.name RockForce2000 4 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0020
-+subdevice.name RockForce2000 2 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x1000
-+subdevice.name Macrolink MCCS 8-port Serial
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x1001
-+subdevice.name Macrolink MCCS 16-port Serial
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x1002
-+subdevice.name Macrolink MCCS 8-port Serial Hot Swap
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x1003
-+subdevice.name Macrolink MCCS 16-port Serial Hot Swap
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x5654
-&subdevice.id pci 0x2036
-+subdevice.name OpenSwitch 6 Telephony card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x5654
-&subdevice.id pci 0x3132
-+subdevice.name OpenSwitch 12 Telephony card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0x5654
-&subdevice.id pci 0x5634
-+subdevice.name OpenLine4 Telephony Card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd531
-&subdevice.id pci 0xc002
-+subdevice.name PCIntelliCAN 2xSJA1000 CAN bus
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4006
-+subdevice.name EX-4006 1P
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4008
-+subdevice.name EX-4008 1P EPP/ECP
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4014
-+subdevice.name EX-4014 2P
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4018
-+subdevice.name EX-4018 3P EPP/ECP
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4025
-+subdevice.name EX-4025 1S(16C550) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4027
-+subdevice.name EX-4027 1S(16C650) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4028
-+subdevice.name EX-4028 1S(16C850) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4036
-+subdevice.name EX-4036 2S(16C650) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4037
-+subdevice.name EX-4037 2S(16C650) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4038
-+subdevice.name EX-4038 2S(16C850) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4052
-+subdevice.name EX-4052 1S(16C550) RS-422/485
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4053
-+subdevice.name EX-4053 2S(16C550) RS-422/485
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4055
-+subdevice.name EX-4055 4S(16C550) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4058
-+subdevice.name EX-4055 4S(16C650) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4065
-+subdevice.name EX-4065 8S(16C550) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4068
-+subdevice.name EX-4068 8S(16C650) RS-232
-
- vendor.id pci 0x10b5
-&device.id pci 0x9050
-&subvendor.id pci 0xd84d
-&subdevice.id pci 0x4078
-+subdevice.name EX-4078 2S(16C552) RS-232+1P
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-+device.name PCI <-> IOBus Bridge
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2455
-+subdevice.name Wessex Techology PHIL-PCI
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2696
-+subdevice.name Innes Corp AM Radcap card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2717
-+subdevice.name Innes Corp Auricon card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2844
-+subdevice.name Innes Corp TVS Encoder card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x12d9
-&subdevice.id pci 0x0002
-+subdevice.name PCI Prosody Card rev 1.5
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x16df
-&subdevice.id pci 0x0011
-+subdevice.name PIKA PrimeNet MM PCI
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x16df
-&subdevice.id pci 0x0012
-+subdevice.name PIKA PrimeNet MM cPCI 8
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x16df
-&subdevice.id pci 0x0013
-+subdevice.name PIKA PrimeNet MM cPCI 8 (without CAS Signaling Option)
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x16df
-&subdevice.id pci 0x0014
-+subdevice.name PIKA PrimeNet MM cPCI 4
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x16df
-&subdevice.id pci 0x0015
-+subdevice.name PIKA Daytona MM
-
- vendor.id pci 0x10b5
-&device.id pci 0x9054
-&subvendor.id pci 0x16df
-&subdevice.id pci 0x0016
-+subdevice.name PIKA InLine MM
-
- vendor.id pci 0x10b5
-&device.id pci 0x9056
-+device.name Francois
-
- vendor.id pci 0x10b5
-&device.id pci 0x9056
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x2979
-+subdevice.name CellinkBlade 11 - CPCI board VoATM AAL1
-
- vendor.id pci 0x10b5
-&device.id pci 0x9060
-+device.name 9060
-
- vendor.id pci 0x10b5
-&device.id pci 0x906d
-+device.name 9060SD
-
- vendor.id pci 0x10b5
-&device.id pci 0x906d
-&subvendor.id pci 0x125c
-&subdevice.id pci 0x0640
-+subdevice.name Aries 16000P
-
- vendor.id pci 0x10b5
-&device.id pci 0x906e
-+device.name 9060ES
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-+device.name 9080
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10eb
-+subdevice.name (Agilent) E2777B 83K Series PCI based Optical Communication Interface
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10ec
-+subdevice.name (Agilent) E6978-66442 PCI CIC
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-&subvendor.id pci 0x10b5
-&subdevice.id pci 0x9080
-+subdevice.name 9080 [real subsystem ID not set]
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-&subvendor.id pci 0x129d
-&subdevice.id pci 0x0002
-+subdevice.name Aculab PCI Prosidy card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-&subvendor.id pci 0x12d9
-&subdevice.id pci 0x0002
-+subdevice.name PCI Prosody Card
-
- vendor.id pci 0x10b5
-&device.id pci 0x9080
-&subvendor.id pci 0x12df
-&subdevice.id pci 0x4422
-+subdevice.name 4422PCI ["Do-All" Telemetry Data Aquisition System]
-
- vendor.id pci 0x10b5
-&device.id pci 0xbb04
-+device.name B&B 3PCIOSD1A Isolated PCI Serial
-
- vendor.id pci 0x10b6
-+vendor.name Madge Networks
-
- vendor.id pci 0x10b6
-&device.id pci 0x0001
-+device.name Smart 16/4 PCI Ringnode
-
- vendor.id pci 0x10b6
-&device.id pci 0x0002
-+device.name Smart 16/4 PCI Ringnode Mk2
-
- vendor.id pci 0x10b6
-&device.id pci 0x0002
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0002
-+subdevice.name Smart 16/4 PCI Ringnode Mk2
-
- vendor.id pci 0x10b6
-&device.id pci 0x0002
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0006
-+subdevice.name 16/4 CardBus Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x0003
-+device.name Smart 16/4 PCI Ringnode Mk3
-
- vendor.id pci 0x10b6
-&device.id pci 0x0003
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0fd
-+subdevice.name Compaq NC4621 PCI, 4/16, WOL
-
- vendor.id pci 0x10b6
-&device.id pci 0x0003
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0003
-+subdevice.name Smart 16/4 PCI Ringnode Mk3
-
- vendor.id pci 0x10b6
-&device.id pci 0x0003
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0007
-+subdevice.name Presto PCI Plus Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x0004
-+device.name Smart 16/4 PCI Ringnode Mk1
-
- vendor.id pci 0x10b6
-&device.id pci 0x0006
-+device.name 16/4 Cardbus Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x0006
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0006
-+subdevice.name 16/4 CardBus Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x0007
-+device.name Presto PCI Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x0007
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0007
-+subdevice.name Presto PCI
-
- vendor.id pci 0x10b6
-&device.id pci 0x0009
-+device.name Smart 100/16/4 PCI-HS Ringnode
-
- vendor.id pci 0x10b6
-&device.id pci 0x0009
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0009
-+subdevice.name Smart 100/16/4 PCI-HS Ringnode
-
- vendor.id pci 0x10b6
-&device.id pci 0x000a
-+device.name Smart 100/16/4 PCI Ringnode
-
- vendor.id pci 0x10b6
-&device.id pci 0x000a
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x000a
-+subdevice.name Smart 100/16/4 PCI Ringnode
-
- vendor.id pci 0x10b6
-&device.id pci 0x000b
-+device.name 16/4 CardBus Adapter Mk2
-
- vendor.id pci 0x10b6
-&device.id pci 0x000b
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x0008
-+subdevice.name 16/4 CardBus Adapter Mk2
-
- vendor.id pci 0x10b6
-&device.id pci 0x000b
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x000b
-+subdevice.name 16/4 Cardbus Adapter Mk2
-
- vendor.id pci 0x10b6
-&device.id pci 0x000c
-+device.name RapidFire 3140V2 16/4 TR Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x000c
-&subvendor.id pci 0x10b6
-&subdevice.id pci 0x000c
-+subdevice.name RapidFire 3140V2 16/4 TR Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x1000
-+device.name Collage 25/155 ATM Client Adapter
-
- vendor.id pci 0x10b6
-&device.id pci 0x1001
-+device.name Collage 155 ATM Server Adapter
-
- vendor.id pci 0x10b7
-+vendor.name 3Com Corporation
-
- vendor.id pci 0x10b7
-&device.id pci 0x0001
-+device.name 3c985 1000BaseSX (SX/TX)
-
- vendor.id pci 0x10b7
-&device.id pci 0x0013
-+device.name AR5212 802.11abg NIC (3CRDAG675)
-
- vendor.id pci 0x10b7
-&device.id pci 0x0013
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x2031
-+subdevice.name 3CRDAG675 11a/b/g Wireless PCI Adapter
-
- vendor.id pci 0x10b7
-&device.id pci 0x0910
-+device.name 3C910-A01
-
- vendor.id pci 0x10b7
-&device.id pci 0x1006
-+device.name MINI PCI type 3B Data Fax Modem
-
- vendor.id pci 0x10b7
-&device.id pci 0x1007
-+device.name Mini PCI 56k Winmodem
-
- vendor.id pci 0x10b7
-&device.id pci 0x1007
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x615c
-+subdevice.name Mini PCI 56K Modem
-
- vendor.id pci 0x10b7
-&device.id pci 0x1201
-+device.name 3c982-TXM 10/100baseTX Dual Port A [Hydra]
-
- vendor.id pci 0x10b7
-&device.id pci 0x1202
-+device.name 3c982-TXM 10/100baseTX Dual Port B [Hydra]
-
- vendor.id pci 0x10b7
-&device.id pci 0x1700
-+device.name 3c940 10/100/1000Base-T [Marvell]
-
- vendor.id pci 0x10b7
-&device.id pci 0x1700
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80eb
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x10b7
-&device.id pci 0x1700
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x0010
-+subdevice.name 3C940 Gigabit LOM Ethernet Adapter
-
- vendor.id pci 0x10b7
-&device.id pci 0x1700
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x0020
-+subdevice.name 3C941 Gigabit LOM Ethernet Adapter
-
- vendor.id pci 0x10b7
-&device.id pci 0x1700
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x10b7
-&device.id pci 0x3390
-+device.name 3c339 TokenLink Velocity
-
- vendor.id pci 0x10b7
-&device.id pci 0x3590
-+device.name 3c359 TokenLink Velocity XL
-
- vendor.id pci 0x10b7
-&device.id pci 0x3590
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x3590
-+subdevice.name TokenLink Velocity XL Adapter (3C359/359B)
-
- vendor.id pci 0x10b7
-&device.id pci 0x4500
-+device.name 3c450 HomePNA [Tornado]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5055
-+device.name 3c555 Laptop Hurricane
-
- vendor.id pci 0x10b7
-&device.id pci 0x5057
-+device.name 3c575 Megahertz 10/100 LAN CardBus [Boomerang]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5057
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x5a57
-+subdevice.name 3C575 Megahertz 10/100 LAN Cardbus PC Card
-
- vendor.id pci 0x10b7
-&device.id pci 0x5157
-+device.name 3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5157
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x5b57
-+subdevice.name 3C575 Megahertz 10/100 LAN Cardbus PC Card
-
- vendor.id pci 0x10b7
-&device.id pci 0x5257
-+device.name 3cCFE575CT CardBus [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5257
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x5c57
-+subdevice.name FE575C-3Com 10/100 LAN CardBus-Fast Ethernet
-
- vendor.id pci 0x10b7
-&device.id pci 0x5900
-+device.name 3c590 10BaseT [Vortex]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5920
-+device.name 3c592 EISA 10mbps Demon/Vortex
-
- vendor.id pci 0x10b7
-&device.id pci 0x5950
-+device.name 3c595 100BaseTX [Vortex]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5951
-+device.name 3c595 100BaseT4 [Vortex]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5952
-+device.name 3c595 100Base-MII [Vortex]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5970
-+device.name 3c597 EISA Fast Demon/Vortex
-
- vendor.id pci 0x10b7
-&device.id pci 0x5b57
-+device.name 3c595 Megahertz 10/100 LAN CardBus [Boomerang]
-
- vendor.id pci 0x10b7
-&device.id pci 0x5b57
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x5b57
-+subdevice.name 3C575 Megahertz 10/100 LAN Cardbus PC Card
-
- vendor.id pci 0x10b7
-&device.id pci 0x6000
-+device.name 3CRSHPW796 [OfficeConnect Wireless CardBus]
-
- vendor.id pci 0x10b7
-&device.id pci 0x6001
-+device.name 3com 3CRWE154G72 [Office Connect Wireless LAN Adapter]
-
- vendor.id pci 0x10b7
-&device.id pci 0x6055
-+device.name 3c556 Hurricane CardBus [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x6056
-+device.name 3c556B CardBus [Tornado]
-
- vendor.id pci 0x10b7
-&device.id pci 0x6056
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x6556
-+subdevice.name 10/100 Mini PCI Ethernet Adapter
-
- vendor.id pci 0x10b7
-&device.id pci 0x6560
-+device.name 3cCFE656 CardBus [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x6560
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x656a
-+subdevice.name 3CCFEM656 10/100 LAN+56K Modem CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x6561
-+device.name 3cCFEM656 10/100 LAN+56K Modem CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x6561
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x656b
-+subdevice.name 3CCFEM656 10/100 LAN+56K Modem CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x6562
-+device.name 3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x6562
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x656b
-+subdevice.name 3CCFEM656B 10/100 LAN+56K Modem CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x6563
-+device.name 3cCFEM656B 10/100 LAN+56K Modem CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x6563
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x656b
-+subdevice.name 3CCFEM656 10/100 LAN+56K Modem CardBus
-
- vendor.id pci 0x10b7
-&device.id pci 0x6564
-+device.name 3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado]
-
- vendor.id pci 0x10b7
-&device.id pci 0x7646
-+device.name 3cSOHO100-TX Hurricane
-
- vendor.id pci 0x10b7
-&device.id pci 0x7770
-+device.name 3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect]
-
- vendor.id pci 0x10b7
-&device.id pci 0x7940
-+device.name 3c803 FDDILink UTP Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x7980
-+device.name 3c804 FDDILink SAS Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x7990
-+device.name 3c805 FDDILink DAS Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x80eb
-+device.name 3c940B 10/100/1000Base-T
-
- vendor.id pci 0x10b7
-&device.id pci 0x8811
-+device.name Token ring
-
- vendor.id pci 0x10b7
-&device.id pci 0x9000
-+device.name 3c900 10BaseT [Boomerang]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9001
-+device.name 3c900 10Mbps Combo [Boomerang]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9004
-+device.name 3c900B-TPO Etherlink XL [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9004
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x9004
-+subdevice.name 3C900B-TPO Etherlink XL TPO 10Mb
-
- vendor.id pci 0x10b7
-&device.id pci 0x9005
-+device.name 3c900B-Combo Etherlink XL [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9005
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x9005
-+subdevice.name 3C900B-Combo Etherlink XL Combo
-
- vendor.id pci 0x10b7
-&device.id pci 0x9006
-+device.name 3c900B-TPC Etherlink XL [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x900a
-+device.name 3c900B-FL 10base-FL [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9050
-+device.name 3c905 100BaseTX [Boomerang]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9051
-+device.name 3c905 100BaseT4 [Boomerang]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-+device.name 3c905B 100BaseTX [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0080
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0081
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0082
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0083
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0084
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0085
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0086
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0087
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0088
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0089
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0090
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0091
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0092
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0093
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0094
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0095
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0096
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0097
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0098
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0099
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9055
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x9055
-+subdevice.name 3C905B Fast Etherlink XL 10/100
-
- vendor.id pci 0x10b7
-&device.id pci 0x9056
-+device.name 3c905B-T4 Fast EtherLink XL [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9058
-+device.name 3c905B Deluxe Etherlink 10/100/BNC [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x905a
-+device.name 3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-+device.name 3c905C-TX/TX-M [Tornado]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0095
-+subdevice.name 3C920 Integrated Fast Ethernet Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0097
-+subdevice.name 3C920 Integrated Fast Ethernet Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00fe
-+subdevice.name Optiplex GX240
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x012a
-+subdevice.name 3C920 Integrated Fast Ethernet Controller [Latitude C640]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1000
-+subdevice.name 3C905C-TX Fast Etherlink for PC Management NIC
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x7000
-+subdevice.name 10/100 Mini PCI Ethernet Adapter
-
- vendor.id pci 0x10b7
-&device.id pci 0x9200
-&subvendor.id pci 0x10f1
-&subdevice.id pci 0x2466
-+subdevice.name Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller)
-
- vendor.id pci 0x10b7
-&device.id pci 0x9201
-+device.name 3C920B-EMB Integrated Fast Ethernet Controller [Tornado]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9201
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ab
-+subdevice.name A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x9202
-+device.name 3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x9210
-+device.name 3C920B-EMB-WNM Integrated Fast Ethernet Controller
-
- vendor.id pci 0x10b7
-&device.id pci 0x9300
-+device.name 3CSOHO100B-TX 910-A01 [tulip]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9800
-+device.name 3c980-TX Fast Etherlink XL Server Adapter [Cyclone]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9800
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x9800
-+subdevice.name 3c980-TX Fast Etherlink XL Server Adapter
-
- vendor.id pci 0x10b7
-&device.id pci 0x9805
-+device.name 3c980-C 10/100baseTX NIC [Python-T]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9805
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1201
-+subdevice.name EtherLink Server 10/100 Dual Port A
-
- vendor.id pci 0x10b7
-&device.id pci 0x9805
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1202
-+subdevice.name EtherLink Server 10/100 Dual Port B
-
- vendor.id pci 0x10b7
-&device.id pci 0x9805
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x9805
-+subdevice.name 3c980 10/100baseTX NIC [Python-T]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9805
-&subvendor.id pci 0x10f1
-&subdevice.id pci 0x2462
-+subdevice.name Thunder K7 S2462
-
- vendor.id pci 0x10b7
-&device.id pci 0x9900
-+device.name 3C990-TX [Typhoon]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9902
-+device.name 3CR990-TX-95 [Typhoon 56-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9903
-+device.name 3CR990-TX-97 [Typhoon 168-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9904
-+device.name 3C990B-TX-M/3C990BSVR [Typhoon2]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9904
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1000
-+subdevice.name 3CR990B-TX-M [Typhoon2]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9904
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x2000
-+subdevice.name 3CR990BSVR [Typhoon2 Server]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9905
-+device.name 3CR990-FX-95/97/95 [Typhon Fiber]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9905
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1101
-+subdevice.name 3CR990-FX-95 [Typhoon Fiber 56-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9905
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1102
-+subdevice.name 3CR990-FX-97 [Typhoon Fiber 168-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9905
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x2101
-+subdevice.name 3CR990-FX-95 Server [Typhoon Fiber 56-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9905
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x2102
-+subdevice.name 3CR990-FX-97 Server [Typhoon Fiber 168-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9908
-+device.name 3CR990SVR95 [Typhoon Server 56-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x9909
-+device.name 3CR990SVR97 [Typhoon Server 168-bit]
-
- vendor.id pci 0x10b7
-&device.id pci 0x990a
-+device.name 3C990SVR [Typhoon Server]
-
- vendor.id pci 0x10b7
-&device.id pci 0x990b
-+device.name 3C990SVR [Typhoon Server]
-
- vendor.id pci 0x10b8
-+vendor.name Standard Microsystems Corp [SMC]
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-+device.name 83c170 EPIC/100 Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x1055
-&subdevice.id pci 0xe000
-+subdevice.name LANEPIC 10/100 [EVB171Q-PCI]
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x1055
-&subdevice.id pci 0xe002
-+subdevice.name LANEPIC 10/100 [EVB171G-PCI]
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa011
-+subdevice.name EtherPower II 10/100
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa014
-+subdevice.name EtherPower II 10/100
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa015
-+subdevice.name EtherPower II 10/100
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa016
-+subdevice.name EtherPower II 10/100
-
- vendor.id pci 0x10b8
-&device.id pci 0x0005
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa017
-+subdevice.name EtherPower II 10/100
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-+device.name 83c175 EPIC/100 Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x1055
-&subdevice.id pci 0xe100
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x1055
-&subdevice.id pci 0xe102
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x1055
-&subdevice.id pci 0xe300
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x1055
-&subdevice.id pci 0xe302
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa012
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x13a2
-&subdevice.id pci 0x8002
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x0006
-&subvendor.id pci 0x13a2
-&subdevice.id pci 0x8006
-+subdevice.name LANEPIC Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10b8
-&device.id pci 0x1000
-+device.name FDC 37c665
-
- vendor.id pci 0x10b8
-&device.id pci 0x1001
-+device.name FDC 37C922
-
- vendor.id pci 0x10b8
-&device.id pci 0x2802
-+device.name SMC2802W [EZ Connect g]
-
- vendor.id pci 0x10b8
-&device.id pci 0xa011
-+device.name 83C170QF
-
- vendor.id pci 0x10b8
-&device.id pci 0xb106
-+device.name SMC34C90
-
- vendor.id pci 0x10b9
-+vendor.name ALi Corporation
-
- vendor.id pci 0x10b9
-&device.id pci 0x0101
-+device.name CMI8338/C3DX PCI Audio Device
-
- vendor.id pci 0x10b9
-&device.id pci 0x0111
-+device.name C-Media CMI8738/C3DX Audio Device (OEM)
-
- vendor.id pci 0x10b9
-&device.id pci 0x0111
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x0111
-+subdevice.name C-Media CMI8738/C3DX Audio Device (OEM)
-
- vendor.id pci 0x10b9
-&device.id pci 0x0780
-+device.name Multi-IO Card
-
- vendor.id pci 0x10b9
-&device.id pci 0x0782
-+device.name Multi-IO Card
-
- vendor.id pci 0x10b9
-&device.id pci 0x1435
-+device.name M1435
-
- vendor.id pci 0x10b9
-&device.id pci 0x1445
-+device.name M1445
-
- vendor.id pci 0x10b9
-&device.id pci 0x1449
-+device.name M1449
-
- vendor.id pci 0x10b9
-&device.id pci 0x1451
-+device.name M1451
-
- vendor.id pci 0x10b9
-&device.id pci 0x1461
-+device.name M1461
-
- vendor.id pci 0x10b9
-&device.id pci 0x1489
-+device.name M1489
-
- vendor.id pci 0x10b9
-&device.id pci 0x1511
-+device.name M1511 [Aladdin]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1512
-+device.name M1512 [Aladdin]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1513
-+device.name M1513 [Aladdin]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1521
-+device.name M1521 [Aladdin III]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1521
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1521
-+subdevice.name ALI M1521 Aladdin III CPU Bridge
-
- vendor.id pci 0x10b9
-&device.id pci 0x1523
-+device.name M1523
-
- vendor.id pci 0x10b9
-&device.id pci 0x1523
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1523
-+subdevice.name ALI M1523 ISA Bridge
-
- vendor.id pci 0x10b9
-&device.id pci 0x1531
-+device.name M1531 [Aladdin IV]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1533
-+device.name M1533 PCI to ISA Bridge [Aladdin IV]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1533
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x053b
-+subdevice.name ThinkPad R40e (2684-HVG) PCI to ISA Bridge
-
- vendor.id pci 0x10b9
-&device.id pci 0x1533
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1533
-+subdevice.name ALI M1533 Aladdin IV ISA Bridge
-
- vendor.id pci 0x10b9
-&device.id pci 0x1541
-+device.name M1541
-
- vendor.id pci 0x10b9
-&device.id pci 0x1541
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x1541
-+subdevice.name ALI M1541 Aladdin V/V+ AGP System Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x1543
-+device.name M1543
-
- vendor.id pci 0x10b9
-&device.id pci 0x1563
-+device.name M1563 HyperTransport South Bridge
-
- vendor.id pci 0x10b9
-&device.id pci 0x1621
-+device.name M1621
-
- vendor.id pci 0x10b9
-&device.id pci 0x1631
-+device.name ALI M1631 PCI North Bridge Aladdin Pro III
-
- vendor.id pci 0x10b9
-&device.id pci 0x1632
-+device.name M1632M Northbridge+Trident
-
- vendor.id pci 0x10b9
-&device.id pci 0x1641
-+device.name ALI M1641 PCI North Bridge Aladdin Pro IV
-
- vendor.id pci 0x10b9
-&device.id pci 0x1644
-+device.name M1644/M1644T Northbridge+Trident
-
- vendor.id pci 0x10b9
-&device.id pci 0x1646
-+device.name M1646 Northbridge+Trident
-
- vendor.id pci 0x10b9
-&device.id pci 0x1647
-+device.name M1647 Northbridge [MAGiK 1 / MobileMAGiK 1]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1651
-+device.name M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1671
-+device.name M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1672
-+device.name M1672 Northbridge [CyberALADDiN-P4]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1681
-+device.name M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1687
-+device.name M1687 K8 Northbridge [AGP8X and HyperTransport]
-
- vendor.id pci 0x10b9
-&device.id pci 0x1689
-+device.name M1689 K8 Northbridge [Super K8 Single Chip]
-
- vendor.id pci 0x10b9
-&device.id pci 0x3141
-+device.name M3141
-
- vendor.id pci 0x10b9
-&device.id pci 0x3143
-+device.name M3143
-
- vendor.id pci 0x10b9
-&device.id pci 0x3145
-+device.name M3145
-
- vendor.id pci 0x10b9
-&device.id pci 0x3147
-+device.name M3147
-
- vendor.id pci 0x10b9
-&device.id pci 0x3149
-+device.name M3149
-
- vendor.id pci 0x10b9
-&device.id pci 0x3151
-+device.name M3151
-
- vendor.id pci 0x10b9
-&device.id pci 0x3307
-+device.name M3307
-
- vendor.id pci 0x10b9
-&device.id pci 0x3309
-+device.name M3309
-
- vendor.id pci 0x10b9
-&device.id pci 0x3323
-+device.name M3325 Video/Audio Decoder
-
- vendor.id pci 0x10b9
-&device.id pci 0x5212
-+device.name M4803
-
- vendor.id pci 0x10b9
-&device.id pci 0x5215
-+device.name MS4803
-
- vendor.id pci 0x10b9
-&device.id pci 0x5217
-+device.name M5217H
-
- vendor.id pci 0x10b9
-&device.id pci 0x5219
-+device.name M5219
-
- vendor.id pci 0x10b9
-&device.id pci 0x5225
-+device.name M5225
-
- vendor.id pci 0x10b9
-&device.id pci 0x5229
-+device.name M5229 IDE
-
- vendor.id pci 0x10b9
-&device.id pci 0x5229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x050f
-+subdevice.name ThinkPad R30
-
- vendor.id pci 0x10b9
-&device.id pci 0x5229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x053d
-+subdevice.name ThinkPad R40e (2684-HVG) builtin IDE
-
- vendor.id pci 0x10b9
-&device.id pci 0x5229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400 builtin IDE
-
- vendor.id pci 0x10b9
-&device.id pci 0x5229
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8053
-+subdevice.name A7A266 Motherboard IDE
-
- vendor.id pci 0x10b9
-&device.id pci 0x5235
-+device.name M5225
-
- vendor.id pci 0x10b9
-&device.id pci 0x5237
-+device.name USB 1.1 Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5237
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0540
-+subdevice.name ThinkPad R40e (2684-HVG) builtin USB
-
- vendor.id pci 0x10b9
-&device.id pci 0x5237
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400 builtin USB
-
- vendor.id pci 0x10b9
-&device.id pci 0x5239
-+device.name USB 2.0 Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5243
-+device.name M1541 PCI to AGP Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5246
-+device.name AGP8X Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5247
-+device.name PCI to AGP Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5249
-+device.name M5249 HTT to PCI Bridge
-
- vendor.id pci 0x10b9
-&device.id pci 0x5251
-+device.name M5251 P1394 OHCI 1.0 Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5253
-+device.name M5253 P1394 OHCI 1.1 Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5261
-+device.name M5261 Ethernet Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5263
-+device.name M5263 Ethernet Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5281
-+device.name ALi M5281 Serial ATA / RAID Host Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5450
-+device.name Lucent Technologies Soft Modem AMR
-
- vendor.id pci 0x10b9
-&device.id pci 0x5451
-+device.name M5451 PCI AC-Link Controller Audio Device
-
- vendor.id pci 0x10b9
-&device.id pci 0x5451
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0506
-+subdevice.name ThinkPad R30
-
- vendor.id pci 0x10b9
-&device.id pci 0x5451
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x053e
-+subdevice.name ThinkPad R40e (2684-HVG) builtin Audio
-
- vendor.id pci 0x10b9
-&device.id pci 0x5451
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400 builtin Audio
-
- vendor.id pci 0x10b9
-&device.id pci 0x5451
-&subvendor.id pci 0x10b9
-&subdevice.id pci 0x5451
-+subdevice.name HP Compaq nc4010 (DY885AA#ABN)
-
- vendor.id pci 0x10b9
-&device.id pci 0x5453
-+device.name M5453 PCI AC-Link Controller Modem Device
-
- vendor.id pci 0x10b9
-&device.id pci 0x5455
-+device.name M5455 PCI AC-Link Controller Audio Device
-
- vendor.id pci 0x10b9
-&device.id pci 0x5457
-+device.name M5457 AC'97 Modem Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5457
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0535
-+subdevice.name ThinkPad R40e (2684-HVG) builtin modem
-
- vendor.id pci 0x10b9
-&device.id pci 0x5457
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400 builtin Modem Device
-
- vendor.id pci 0x10b9
-&device.id pci 0x5459
-+device.name SmartLink SmartPCI561 56K Modem
-
- vendor.id pci 0x10b9
-&device.id pci 0x545a
-+device.name SmartLink SmartPCI563 56K Modem
-
- vendor.id pci 0x10b9
-&device.id pci 0x5471
-+device.name M5471 Memory Stick Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x5473
-+device.name M5473 SD-MMC Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x7101
-+device.name M7101 Power Management Controller [PMU]
-
- vendor.id pci 0x10b9
-&device.id pci 0x7101
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0510
-+subdevice.name ThinkPad R30
-
- vendor.id pci 0x10b9
-&device.id pci 0x7101
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x053c
-+subdevice.name ThinkPad R40e (2684-HVG) Power Management Controller
-
- vendor.id pci 0x10b9
-&device.id pci 0x7101
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0024
-+subdevice.name Pavilion ze4400
-
- vendor.id pci 0x10ba
-+vendor.name Mitsubishi Electric Corp.
-
- vendor.id pci 0x10ba
-&device.id pci 0x0301
-+device.name AccelGraphics AccelECLIPSE
-
- vendor.id pci 0x10ba
-&device.id pci 0x0304
-+device.name AccelGALAXY A2100 [OEM Evans & Sutherland]
-
- vendor.id pci 0x10ba
-&device.id pci 0x0308
-+device.name Tornado 3000 [OEM Evans & Sutherland]
-
- vendor.id pci 0x10ba
-&device.id pci 0x1002
-+device.name VG500 [VolumePro Volume Rendering Accelerator]
-
- vendor.id pci 0x10bb
-+vendor.name Dapha Electronics Corporation
-
- vendor.id pci 0x10bc
-+vendor.name Advanced Logic Research
-
- vendor.id pci 0x10bd
-+vendor.name Surecom Technology
-
- vendor.id pci 0x10bd
-&device.id pci 0x0e34
-+device.name NE-34
-
- vendor.id pci 0x10be
-+vendor.name Tseng Labs International Co.
-
- vendor.id pci 0x10bf
-+vendor.name Most Inc
-
- vendor.id pci 0x10c0
-+vendor.name Boca Research Inc.
-
- vendor.id pci 0x10c1
-+vendor.name ICM Co., Ltd.
-
- vendor.id pci 0x10c2
-+vendor.name Auspex Systems Inc.
-
- vendor.id pci 0x10c3
-+vendor.name Samsung Semiconductors, Inc.
-
- vendor.id pci 0x10c3
-&device.id pci 0x1100
-+device.name Smartether100 SC1100 LAN Adapter (i82557B)
-
- vendor.id pci 0x10c4
-+vendor.name Award Software International Inc.
-
- vendor.id pci 0x10c5
-+vendor.name Xerox Corporation
-
- vendor.id pci 0x10c6
-+vendor.name Rambus Inc.
-
- vendor.id pci 0x10c7
-+vendor.name Media Vision
-
- vendor.id pci 0x10c8
-+vendor.name Neomagic Corporation
-
- vendor.id pci 0x10c8
-&device.id pci 0x0001
-+device.name NM2070 [MagicGraph 128]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0002
-+device.name NM2090 [MagicGraph 128V]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0003
-+device.name NM2093 [MagicGraph 128ZV]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-+device.name NM2160 [MagicGraph 128XD]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00ba
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1007
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0074
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0075
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x007d
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x007e
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x802f
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x801b
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x802f
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x830b
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10ba
-&subdevice.id pci 0x0e00
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10c8
-&subdevice.id pci 0x0004
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1029
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x8308
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x8309
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x830b
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x830d
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x8312
-+subdevice.name MagicGraph 128XD
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-+device.name NM2200 [MagicGraph 256AV]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00dd
-+subdevice.name ThinkPad 570
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0088
-+subdevice.name Latitude CPi A
-
- vendor.id pci 0x10c8
-&device.id pci 0x0006
-+device.name NM2360 [MagicMedia 256ZX]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0016
-+device.name NM2380 [MagicMedia 256XL+]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0016
-&subvendor.id pci 0x10c8
-&subdevice.id pci 0x0016
-+subdevice.name MagicMedia 256XL+
-
- vendor.id pci 0x10c8
-&device.id pci 0x0025
-+device.name NM2230 [MagicGraph 256AV+]
-
- vendor.id pci 0x10c8
-&device.id pci 0x0083
-+device.name NM2093 [MagicGraph 128ZV+]
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-+device.name NM2200 [MagicMedia 256AV Audio]
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0d1
-+subdevice.name MagicMedia 256AV Audio Device on Discovery
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb126
-+subdevice.name MagicMedia 256AV Audio Device on Durango
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00dd
-+subdevice.name MagicMedia 256AV Audio Device on BlackTip Thinkpad
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1003
-+subdevice.name MagicMedia 256AV Audio Device on TravelMate 720
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0088
-+subdevice.name Latitude CPi A
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x008f
-+subdevice.name MagicMedia 256AV Audio Device on Colorado Inspiron
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0007
-+subdevice.name MagicMedia 256AV Audio Device on Voyager II
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0008
-+subdevice.name MagicMedia 256AV Audio Device on Voyager III
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x000d
-+subdevice.name MagicMedia 256AV Audio Device on Omnibook 900
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x10c8
-&subdevice.id pci 0x8005
-+subdevice.name MagicMedia 256AV Audio Device on FireAnt
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x8005
-+subdevice.name MagicMedia 256AV Audio Device
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x14c0
-&subdevice.id pci 0x0004
-+subdevice.name MagicMedia 256AV Audio Device
-
- vendor.id pci 0x10c8
-&device.id pci 0x8006
-+device.name NM2360 [MagicMedia 256ZX Audio]
-
- vendor.id pci 0x10c8
-&device.id pci 0x8016
-+device.name NM2380 [MagicMedia 256XL+ Audio]
-
- vendor.id pci 0x10c9
-+vendor.name Dataexpert Corporation
-
- vendor.id pci 0x10ca
-+vendor.name Fujitsu Microelectr., Inc.
-
- vendor.id pci 0x10cb
-+vendor.name Omron Corporation
-
- vendor.id pci 0x10cc
-+vendor.name Mai Logic Incorporated
-
- vendor.id pci 0x10cc
-&device.id pci 0x0660
-+device.name Articia S Host Bridge
-
- vendor.id pci 0x10cc
-&device.id pci 0x0661
-+device.name Articia S PCI Bridge
-
- vendor.id pci 0x10cd
-+vendor.name Advanced System Products, Inc
-
- vendor.id pci 0x10cd
-&device.id pci 0x1100
-+device.name ASC1100
-
- vendor.id pci 0x10cd
-&device.id pci 0x1200
-+device.name ASC1200 [(abp940) Fast SCSI-II]
-
- vendor.id pci 0x10cd
-&device.id pci 0x1300
-+device.name ABP940-U / ABP960-U
-
- vendor.id pci 0x10cd
-&device.id pci 0x1300
-&subvendor.id pci 0x10cd
-&subdevice.id pci 0x1310
-+subdevice.name ASC1300 SCSI Adapter
-
- vendor.id pci 0x10cd
-&device.id pci 0x2300
-+device.name ABP940-UW
-
- vendor.id pci 0x10cd
-&device.id pci 0x2500
-+device.name ABP940-U2W
-
- vendor.id pci 0x10ce
-+vendor.name Radius
-
- vendor.id pci 0x10cf
-+vendor.name Fujitsu Limited.
-
- vendor.id pci 0x10cf
-&device.id pci 0x2001
-+device.name mb86605
-
- vendor.id pci 0x10d1
-+vendor.name FuturePlus Systems Corp.
-
- vendor.id pci 0x10d2
-+vendor.name Molex Incorporated
-
- vendor.id pci 0x10d3
-+vendor.name Jabil Circuit Inc
-
- vendor.id pci 0x10d4
-+vendor.name Hualon Microelectronics
-
- vendor.id pci 0x10d5
-+vendor.name Autologic Inc.
-
- vendor.id pci 0x10d6
-+vendor.name Cetia
-
- vendor.id pci 0x10d7
-+vendor.name BCM Advanced Research
-
- vendor.id pci 0x10d8
-+vendor.name Advanced Peripherals Labs
-
- vendor.id pci 0x10d9
-+vendor.name Macronix, Inc. [MXIC]
-
- vendor.id pci 0x10d9
-&device.id pci 0x0512
-+device.name MX98713
-
- vendor.id pci 0x10d9
-&device.id pci 0x0531
-+device.name MX987x5
-
- vendor.id pci 0x10d9
-&device.id pci 0x0531
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1200
-+subdevice.name DFE-540TX ProFAST 10/100 Adapter
-
- vendor.id pci 0x10d9
-&device.id pci 0x8625
-+device.name MX86250
-
- vendor.id pci 0x10d9
-&device.id pci 0x8888
-+device.name MX86200
-
- vendor.id pci 0x10da
-+vendor.name Compaq IPG-Austin
-
- vendor.id pci 0x10da
-&device.id pci 0x0508
-+device.name TC4048 Token Ring 4/16
-
- vendor.id pci 0x10da
-&device.id pci 0x3390
-+device.name Tl3c3x9
-
- vendor.id pci 0x10db
-+vendor.name Rohm LSI Systems, Inc.
-
- vendor.id pci 0x10dc
-+vendor.name CERN/ECP/EDU
-
- vendor.id pci 0x10dc
-&device.id pci 0x0001
-+device.name STAR/RD24 SCI-PCI (PMC)
-
- vendor.id pci 0x10dc
-&device.id pci 0x0002
-+device.name TAR/RD24 SCI-PCI (PMC)
-
- vendor.id pci 0x10dc
-&device.id pci 0x0021
-+device.name HIPPI destination
-
- vendor.id pci 0x10dc
-&device.id pci 0x0022
-+device.name HIPPI source
-
- vendor.id pci 0x10dc
-&device.id pci 0x10dc
-+device.name ATT2C15-3 FPGA
-
- vendor.id pci 0x10dd
-+vendor.name Evans & Sutherland
-
- vendor.id pci 0x10de
-+vendor.name nVidia Corporation
-
- vendor.id pci 0x10de
-&device.id pci 0x0008
-+device.name NV1 [EDGE 3D]
-
- vendor.id pci 0x10de
-&device.id pci 0x0009
-+device.name NV1 [EDGE 3D]
-
- vendor.id pci 0x10de
-&device.id pci 0x0010
-+device.name NV2 [Mutara V08]
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name NV4 [RIVA TNT]
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0200
-+subdevice.name V3400 TNT
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c18
-+subdevice.name Erazor II SGRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c1b
-+subdevice.name Erazor II
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0550
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0552
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4804
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4808
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4810
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4812
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4815
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4820
-+subdevice.name Viper V550 with TV out
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4822
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4904
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4914
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8225
-+subdevice.name Viper V550
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x273d
-+subdevice.name Velocity 4400
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x273e
-+subdevice.name Velocity 4400
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x2740
-+subdevice.name Velocity 4400
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0020
-+subdevice.name Riva TNT
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1015
-+subdevice.name Graphics Blaster CT6710
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1016
-+subdevice.name Graphics Blaster RIVA TNT
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-+device.name NV5 [RIVA TNT2/TNT2 Pro]
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0200
-+subdevice.name AGP-V3800 SGRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0201
-+subdevice.name AGP-V3800 SDRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0205
-+subdevice.name PCI-V3800
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x4000
-+subdevice.name AGP-V3800PRO
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c21
-+subdevice.name Synergy II
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c31
-+subdevice.name Erazor III
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2134
-+subdevice.name WinFast 3D S320 II + TV-Out
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4804
-+subdevice.name Viper V770
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4a00
-+subdevice.name Viper V770
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4a02
-+subdevice.name Viper V770 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5a00
-+subdevice.name RIVA TNT2/TNT2 Pro
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x6a02
-+subdevice.name Viper V770 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x7a02
-+subdevice.name Viper V770 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0005
-+subdevice.name RIVA TNT2 Pro
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x000f
-+subdevice.name Compaq NVIDIA TNT2 Pro
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1020
-+subdevice.name 3D Blaster RIVA TNT2
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1026
-+subdevice.name 3D Blaster RIVA TNT2 Digital
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x5810
-+subdevice.name Maxi Gamer Xentor
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-+device.name NV5 [RIVA TNT2 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0200
-+subdevice.name AGP-V3800 Deluxe
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0201
-+subdevice.name AGP-V3800 Ultra SDRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0205
-+subdevice.name PCI-V3800 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1021
-+subdevice.name 3D Blaster RIVA TNT2 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1029
-+subdevice.name 3D Blaster RIVA TNT2 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x102f
-+subdevice.name 3D Blaster RIVA TNT2 Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x5820
-+subdevice.name Maxi Gamer Xentor 32
-
- vendor.id pci 0x10de
-&device.id pci 0x002a
-+device.name NV5 [Riva TnT2]
-
- vendor.id pci 0x10de
-&device.id pci 0x002b
-+device.name NV5 [Riva TnT2]
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-+device.name NV6 [Vanta/Vanta LT]
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0200
-+subdevice.name AGP-V3800 Combat SDRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0201
-+subdevice.name AGP-V3800 Combat
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x6820
-+subdevice.name Viper V730
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1031
-+subdevice.name CT6938 VANTA 8MB
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1034
-+subdevice.name CT6894 VANTA 16MB
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x5008
-+subdevice.name Maxi Gamer Phoenix 2
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-+device.name NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0200
-+subdevice.name AGP-V3800M
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0201
-+subdevice.name AGP-V3800M
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c3a
-+subdevice.name Erazor III LT
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x001e
-+subdevice.name M64 AGP4x
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1023
-+subdevice.name CT6892 RIVA TNT2 Value
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1024
-+subdevice.name CT6932 RIVA TNT2 Value 32Mb
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x102c
-+subdevice.name CT6931 RIVA TNT2 Value [Jumper]
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8808
-+subdevice.name MSI-8808
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-&subvendor.id pci 0x1554
-&subdevice.id pci 0x1041
-+subdevice.name Pixelview RIVA TNT2 M64
-
- vendor.id pci 0x10de
-&device.id pci 0x002e
-+device.name NV6 [Vanta]
-
- vendor.id pci 0x10de
-&device.id pci 0x002f
-+device.name NV6 [Vanta]
-
- vendor.id pci 0x10de
-&device.id pci 0x0034
-+device.name MCP04 SMBus
-
- vendor.id pci 0x10de
-&device.id pci 0x0035
-+device.name MCP04 IDE
-
- vendor.id pci 0x10de
-&device.id pci 0x0036
-+device.name MCP04 Serial ATA Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0037
-+device.name MCP04 Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0038
-+device.name MCP04 Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x003a
-+device.name MCP04 AC'97 Audio Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x003b
-+device.name MCP04 USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x003c
-+device.name MCP04 USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x003d
-+device.name MCP04 PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x003e
-+device.name MCP04 Serial ATA Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0040
-+device.name nv40 [GeForce 6800 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0041
-+device.name NV40 [GeForce 6800]
-
- vendor.id pci 0x10de
-&device.id pci 0x0042
-+device.name NV40.2
-
- vendor.id pci 0x10de
-&device.id pci 0x0043
-+device.name NV40.3
-
- vendor.id pci 0x10de
-&device.id pci 0x0045
-+device.name NV40 [GeForce 6800 GT]
-
- vendor.id pci 0x10de
-&device.id pci 0x0049
-+device.name NV40GL
-
- vendor.id pci 0x10de
-&device.id pci 0x004e
-+device.name NV40GL [Quadro FX 4000]
-
- vendor.id pci 0x10de
-&device.id pci 0x0052
-+device.name CK804 SMBus
-
- vendor.id pci 0x10de
-&device.id pci 0x0053
-+device.name CK804 IDE
-
- vendor.id pci 0x10de
-&device.id pci 0x0054
-+device.name CK804 Serial ATA Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0055
-+device.name CK804 Serial ATA Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0056
-+device.name CK804 Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0057
-+device.name CK804 Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0059
-+device.name CK804 AC'97 Audio Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x005a
-+device.name CK804 USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x005b
-+device.name CK804 USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x005c
-+device.name CK804 PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x005d
-+device.name CK804 PCIE Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x005e
-+device.name CK804 Memory Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0060
-+device.name nForce2 ISA Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x0060
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ad
-+subdevice.name A7N8X Mainboard
-
- vendor.id pci 0x10de
-&device.id pci 0x0064
-+device.name nForce2 SMBus (MCP)
-
- vendor.id pci 0x10de
-&device.id pci 0x0065
-+device.name nForce2 IDE
-
- vendor.id pci 0x10de
-&device.id pci 0x0066
-+device.name nForce2 Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0066
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a7
-+subdevice.name A7N8X Mainboard onboard nForce2 Ethernet
-
- vendor.id pci 0x10de
-&device.id pci 0x0067
-+device.name nForce2 USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0067
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0c11
-+subdevice.name A7N8X Mainboard
-
- vendor.id pci 0x10de
-&device.id pci 0x0068
-+device.name nForce2 USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0068
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0c11
-+subdevice.name A7N8X Mainboard
-
- vendor.id pci 0x10de
-&device.id pci 0x006a
-+device.name nForce2 AC97 Audio Controler (MCP)
-
- vendor.id pci 0x10de
-&device.id pci 0x006b
-+device.name nForce MultiMedia audio [Via VT82C686B]
-
- vendor.id pci 0x10de
-&device.id pci 0x006b
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x006b
-+subdevice.name nForce2 MCP Audio Processing Unit
-
- vendor.id pci 0x10de
-&device.id pci 0x006c
-+device.name nForce2 External PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x006d
-+device.name nForce2 PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x006e
-+device.name nForce2 FireWire (IEEE 1394) Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0084
-+device.name MCP2A SMBus
-
- vendor.id pci 0x10de
-&device.id pci 0x0085
-+device.name MCP2A IDE
-
- vendor.id pci 0x10de
-&device.id pci 0x0086
-+device.name MCP2A Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0087
-+device.name MCP2A USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x0088
-+device.name MCP2A USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x008a
-+device.name MCP2S AC'97 Audio Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x008b
-+device.name MCP2A PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x008c
-+device.name MCP2A Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x008e
-+device.name nForce2 Serial ATA Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-+device.name NV5 [Aladdin TNT2]
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x5810
-+subdevice.name Maxi Gamer Xentor
-
- vendor.id pci 0x10de
-&device.id pci 0x00c0
-+device.name NV41.0
-
- vendor.id pci 0x10de
-&device.id pci 0x00c1
-+device.name NV41.1
-
- vendor.id pci 0x10de
-&device.id pci 0x00c2
-+device.name NV41.2
-
- vendor.id pci 0x10de
-&device.id pci 0x00c8
-+device.name NV41.8
-
- vendor.id pci 0x10de
-&device.id pci 0x00ce
-+device.name NV41GL
-
- vendor.id pci 0x10de
-&device.id pci 0x00d0
-+device.name nForce3 LPC Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00d1
-+device.name nForce3 Host Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00d2
-+device.name nForce3 AGP Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00d3
-+device.name CK804 Memory Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00d4
-+device.name nForce3 SMBus
-
- vendor.id pci 0x10de
-&device.id pci 0x00d5
-+device.name nForce3 IDE
-
- vendor.id pci 0x10de
-&device.id pci 0x00d6
-+device.name nForce3 Ethernet
-
- vendor.id pci 0x10de
-&device.id pci 0x00d7
-+device.name nForce3 USB 1.1
-
- vendor.id pci 0x10de
-&device.id pci 0x00d8
-+device.name nForce3 USB 2.0
-
- vendor.id pci 0x10de
-&device.id pci 0x00da
-+device.name nForce3 Audio
-
- vendor.id pci 0x10de
-&device.id pci 0x00dd
-+device.name nForce3 PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00df
-+device.name CK8S Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00e1
-+device.name nForce3 250Gb Host Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00e2
-+device.name nForce3 250Gb AGP Host to PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00e3
-+device.name CK8S Serial ATA Controller (v2.5)
-
- vendor.id pci 0x10de
-&device.id pci 0x00e4
-+device.name nForce 250Gb PCI System Management
-
- vendor.id pci 0x10de
-&device.id pci 0x00e5
-+device.name CK8S Parallel ATA Controller (v2.5)
-
- vendor.id pci 0x10de
-&device.id pci 0x00e6
-+device.name CK8S Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00e7
-+device.name CK8S USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00e8
-+device.name CK8S USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00ea
-+device.name nForce3 250Gb AC'97 Audio Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x00ed
-+device.name nForce3 250Gb PCI-to-PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x00ee
-+device.name CK8S Serial ATA Controller (v2.5)
-
- vendor.id pci 0x10de
-&device.id pci 0x00f0
-+device.name NV40 [GeForce 6800/GeForce 6800 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x00f1
-+device.name NV43 [GeForce 6600/GeForce 6600 GT]
-
- vendor.id pci 0x10de
-&device.id pci 0x00f2
-+device.name NV43 [GeForce 6600 GT]
-
- vendor.id pci 0x10de
-&device.id pci 0x00f8
-+device.name NV45GL [Quadro FX 3400]
-
- vendor.id pci 0x10de
-&device.id pci 0x00f9
-+device.name NV40 [GeForce 6800 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x00fa
-+device.name NV36 [GeForce PCX 5750]
-
- vendor.id pci 0x10de
-&device.id pci 0x00fb
-+device.name NV35 [GeForce PCX 5900]
-
- vendor.id pci 0x10de
-&device.id pci 0x00fc
-+device.name NV37GL [Quadro FX 330/GeForce PCX 5300]
-
- vendor.id pci 0x10de
-&device.id pci 0x00fd
-+device.name NV37GL [Quadro FX 330]
-
- vendor.id pci 0x10de
-&device.id pci 0x00fe
-+device.name NV38GL [Quadro FX 1300]
-
- vendor.id pci 0x10de
-&device.id pci 0x00ff
-+device.name NV18 [GeForce PCX 4300]
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-+device.name NV10 [GeForce 256 SDR]
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0200
-+subdevice.name AGP-V6600 SGRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0201
-+subdevice.name AGP-V6600 SDRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x4008
-+subdevice.name AGP-V6600 SGRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x4009
-+subdevice.name AGP-V6600 SDRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x102d
-+subdevice.name CT6941 GeForce 256
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x5022
-+subdevice.name 3D Prophet SE
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-+device.name NV10DDR [GeForce 256 DDR]
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0202
-+subdevice.name AGP-V6800 DDR
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x400a
-+subdevice.name AGP-V6800 DDR SGRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x400b
-+subdevice.name AGP-V6800 DDR SDRAM
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2822
-+subdevice.name WinFast GeForce 256
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x102e
-+subdevice.name CT6971 GeForce 256 DDR
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x5021
-+subdevice.name 3D Prophet DDR-DVI
-
- vendor.id pci 0x10de
-&device.id pci 0x0103
-+device.name NV10GL [Quadro]
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-+device.name NV11 [GeForce2 MX/MX 400]
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x4015
-+subdevice.name AGP-V7100 Pro
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x4031
-+subdevice.name V7100 Pro with TV output
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0091
-+subdevice.name Dell OEM GeForce 2 MX 400
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8817
-+subdevice.name MSI GeForce2 MX400 Pro32S [MS-8817]
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x7102
-+subdevice.name 3D Prophet II MX
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x7103
-+subdevice.name 3D Prophet II MX Dual-Display
-
- vendor.id pci 0x10de
-&device.id pci 0x0111
-+device.name NV11DDR [GeForce2 MX 100 DDR/200 DDR]
-
- vendor.id pci 0x10de
-&device.id pci 0x0112
-+device.name NV11 [GeForce2 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x0113
-+device.name NV11GL [Quadro2 MXR/EX]
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-+device.name NV15 [GeForce2 GTS/Pro]
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x4016
-+subdevice.name V7700 AGP Video Card
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2840
-+subdevice.name WinFast GeForce2 GTS with TV output
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2842
-+subdevice.name WinFast GeForce 2 Pro
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8831
-+subdevice.name Creative GeForce2 Pro
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-+device.name NV15DDR [GeForce2 Ti]
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x405f
-+subdevice.name V7700Ti
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5506
-+subdevice.name Creative 3D Blaster Geforce2 Titanium
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-+device.name NV15BR [GeForce2 Ultra, Bladerunner]
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c56
-+subdevice.name GLADIAC Ultra
-
- vendor.id pci 0x10de
-&device.id pci 0x0153
-+device.name NV15GL [Quadro2 Pro]
-
- vendor.id pci 0x10de
-&device.id pci 0x0170
-+device.name NV17 [GeForce4 MX 460]
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-+device.name NV17 [GeForce4 MX 440]
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0002
-+subdevice.name Gainward Pro/600 TV
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8661
-+subdevice.name G4MX440-VTP
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8730
-+subdevice.name MX440SES-T (MS-8873)
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x8f00
-+subdevice.name Abit Siluro GeForce4MX440
-
- vendor.id pci 0x10de
-&device.id pci 0x0172
-+device.name NV17 [GeForce4 MX 420]
-
- vendor.id pci 0x10de
-&device.id pci 0x0173
-+device.name NV17 [GeForce4 MX 440-SE]
-
- vendor.id pci 0x10de
-&device.id pci 0x0174
-+device.name NV17 [GeForce4 440 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x0175
-+device.name NV17 [GeForce4 420 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-+device.name NV17 [GeForce4 420 Go 32M]
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x10de
-&device.id pci 0x0177
-+device.name NV17 [GeForce4 460 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-+device.name NV17GL [Quadro4 550 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x0179
-+device.name NV17 [GeForce4 440 Go 64M]
-
- vendor.id pci 0x10de
-&device.id pci 0x0179
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0179
-+subdevice.name GeForce4 MX (Mac)
-
- vendor.id pci 0x10de
-&device.id pci 0x017a
-+device.name NV17GL [Quadro4 200/400 NVS]
-
- vendor.id pci 0x10de
-&device.id pci 0x017b
-+device.name NV17GL [Quadro4 550 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x017c
-+device.name NV17GL [Quadro4 550 GoGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x017d
-+device.name NV17 [GeForce4 410 Go 16M]
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-+device.name NV18 [GeForce4 MX 440 AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x806f
-+subdevice.name V9180 Magic
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8880
-+subdevice.name MS-StarForce GeForce4 MX 440 with AGP8X
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8900
-+subdevice.name MS-8890 GeForce 4 MX440 AGP8X
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x9350
-+subdevice.name MSI Geforce4 MX T8X with AGP8X
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x8f0d
-+subdevice.name Siluro GF4 MX-8X
-
- vendor.id pci 0x10de
-&device.id pci 0x0182
-+device.name NV18 [GeForce4 MX 440SE AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x0183
-+device.name NV18 [GeForce4 MX 420 AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x0185
-+device.name NV18 [GeForce4 MX 4000 AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x0186
-+device.name NV18M [GeForce4 448 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x0187
-+device.name NV18M [GeForce4 488 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x0188
-+device.name NV18GL [Quadro4 580 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x018a
-+device.name NV18GL [Quadro4 NVS AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x018b
-+device.name NV18GL [Quadro4 380 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x018d
-+device.name NV18M [GeForce4 448 Go]
-
- vendor.id pci 0x10de
-&device.id pci 0x01a0
-+device.name NVCrush11 [GeForce2 MX Integrated Graphics]
-
- vendor.id pci 0x10de
-&device.id pci 0x01a4
-+device.name nForce CPU bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x01ab
-+device.name nForce 420 Memory Controller (DDR)
-
- vendor.id pci 0x10de
-&device.id pci 0x01ac
-+device.name nForce 220/420 Memory Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x01ad
-+device.name nForce 220/420 Memory Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x01b0
-+device.name nForce Audio
-
- vendor.id pci 0x10de
-&device.id pci 0x01b1
-+device.name nForce Audio
-
- vendor.id pci 0x10de
-&device.id pci 0x01b2
-+device.name nForce ISA Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x01b4
-+device.name nForce PCI System Management
-
- vendor.id pci 0x10de
-&device.id pci 0x01b7
-+device.name nForce AGP to PCI Bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x01b8
-+device.name nForce PCI-to-PCI bridge
-
- vendor.id pci 0x10de
-&device.id pci 0x01bc
-+device.name nForce IDE
-
- vendor.id pci 0x10de
-&device.id pci 0x01c1
-+device.name nForce AC'97 Modem Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x01c2
-+device.name nForce USB Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x01c3
-+device.name nForce Ethernet Controller
-
- vendor.id pci 0x10de
-&device.id pci 0x01e0
-+device.name nForce2 AGP (different version?)
-
- vendor.id pci 0x10de
-&device.id pci 0x01e8
-+device.name nForce2 AGP
-
- vendor.id pci 0x10de
-&device.id pci 0x01ea
-+device.name nForce2 Memory Controller 0
-
- vendor.id pci 0x10de
-&device.id pci 0x01eb
-+device.name nForce2 Memory Controller 1
-
- vendor.id pci 0x10de
-&device.id pci 0x01ec
-+device.name nForce2 Memory Controller 2
-
- vendor.id pci 0x10de
-&device.id pci 0x01ed
-+device.name nForce2 Memory Controller 3
-
- vendor.id pci 0x10de
-&device.id pci 0x01ee
-+device.name nForce2 Memory Controller 4
-
- vendor.id pci 0x10de
-&device.id pci 0x01ef
-+device.name nForce2 Memory Controller 5
-
- vendor.id pci 0x10de
-&device.id pci 0x01f0
-+device.name NV18 [GeForce4 MX - nForce GPU]
-
- vendor.id pci 0x10de
-&device.id pci 0x0200
-+device.name NV20 [GeForce3]
-
- vendor.id pci 0x10de
-&device.id pci 0x0200
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x402f
-+subdevice.name AGP-V8200 DDR
-
- vendor.id pci 0x10de
-&device.id pci 0x0201
-+device.name NV20 [GeForce3 Ti 200]
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-+device.name NV20 [GeForce3 Ti 500]
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x405b
-+subdevice.name V8200 T5
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-&subvendor.id pci 0x1545
-&subdevice.id pci 0x002f
-+subdevice.name Xtasy 6964
-
- vendor.id pci 0x10de
-&device.id pci 0x0203
-+device.name NV20DCC [Quadro DCC]
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-+device.name NV25 [GeForce4 Ti 4600]
-
- vendor.id pci 0x10de
-&device.id pci 0x0251
-+device.name NV25 [GeForce4 Ti 4400]
-
- vendor.id pci 0x10de
-&device.id pci 0x0251
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8023
-+subdevice.name v8440 GeForce 4 Ti4400
-
- vendor.id pci 0x10de
-&device.id pci 0x0252
-+device.name NV25 [GeForce4 Ti]
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-+device.name NV25 [GeForce4 Ti 4200]
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x2896
-+subdevice.name WinFast A250 LE TD (Dual VGA/TV-out/DVI)
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x8f09
-+subdevice.name Siluro (Dual VGA/TV-out/DVI)
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-+device.name NV25GL [Quadro4 900 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-+device.name NV25GL [Quadro4 750 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-+device.name NV25GL [Quadro4 700 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x0280
-+device.name NV28 [GeForce4 Ti 4800]
-
- vendor.id pci 0x10de
-&device.id pci 0x0281
-+device.name NV28 [GeForce4 Ti 4200 AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x0282
-+device.name NV28 [GeForce4 Ti 4800 SE]
-
- vendor.id pci 0x10de
-&device.id pci 0x0286
-+device.name NV28 [GeForce4 Ti 4200 Go AGP 8x]
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-+device.name NV28GL [Quadro4 980 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x0289
-+device.name NV28GL [Quadro4 780 XGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x028c
-+device.name NV28GLM [Quadro4 700 GoGL]
-
- vendor.id pci 0x10de
-&device.id pci 0x0300
-+device.name NV30 [GeForce FX]
-
- vendor.id pci 0x10de
-&device.id pci 0x0301
-+device.name NV30 [GeForce FX 5800 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0302
-+device.name NV30 [GeForce FX 5800]
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-+device.name NV30GL [Quadro FX 2000]
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-+device.name NV30GL [Quadro FX 1000]
-
- vendor.id pci 0x10de
-&device.id pci 0x0311
-+device.name NV31 [GeForce FX 5600 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0312
-+device.name NV31 [GeForce FX 5600]
-
- vendor.id pci 0x10de
-&device.id pci 0x0313
-+device.name NV31
-
- vendor.id pci 0x10de
-&device.id pci 0x0314
-+device.name NV31 [GeForce FX 5600XT]
-
- vendor.id pci 0x10de
-&device.id pci 0x0314
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x814a
-+subdevice.name V9560XT/TD
-
- vendor.id pci 0x10de
-&device.id pci 0x0316
-+device.name NV31
-
- vendor.id pci 0x10de
-&device.id pci 0x0317
-+device.name NV31
-
- vendor.id pci 0x10de
-&device.id pci 0x031a
-+device.name NV31M [GeForce FX Go 5600]
-
- vendor.id pci 0x10de
-&device.id pci 0x031b
-+device.name NV31M [GeForce FX Go5650]
-
- vendor.id pci 0x10de
-&device.id pci 0x031c
-+device.name NVIDIA Quadro FX 700 Go
-
- vendor.id pci 0x10de
-&device.id pci 0x031d
-+device.name NV31
-
- vendor.id pci 0x10de
-&device.id pci 0x031e
-+device.name NV31
-
- vendor.id pci 0x10de
-&device.id pci 0x031f
-+device.name NV31
-
- vendor.id pci 0x10de
-&device.id pci 0x0320
-+device.name NV34 [GeForce FX 5200]
-
- vendor.id pci 0x10de
-&device.id pci 0x0321
-+device.name NV34 [GeForce FX 5200 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-+device.name NV34 [GeForce FX 5200]
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x9171
-+subdevice.name MS-8917 (FX5200-T128)
-
- vendor.id pci 0x10de
-&device.id pci 0x0323
-+device.name NV34 [GeForce FX 5200LE]
-
- vendor.id pci 0x10de
-&device.id pci 0x0324
-+device.name NV34M [GeForce FX Go 5200]
-
- vendor.id pci 0x10de
-&device.id pci 0x0324
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x10de
-&device.id pci 0x0325
-+device.name NV34M [GeForce FX Go5250]
-
- vendor.id pci 0x10de
-&device.id pci 0x0326
-+device.name NV34 [GeForce FX 5500]
-
- vendor.id pci 0x10de
-&device.id pci 0x0327
-+device.name NV34 [GeForce FX 5100]
-
- vendor.id pci 0x10de
-&device.id pci 0x0328
-+device.name NV34M [GeForce FX Go 5200]
-
- vendor.id pci 0x10de
-&device.id pci 0x0329
-+device.name NV34M [GeForce FX Go5200]
-
- vendor.id pci 0x10de
-&device.id pci 0x032a
-+device.name NV34GL [Quadro NVS 280 PCI]
-
- vendor.id pci 0x10de
-&device.id pci 0x032b
-+device.name NV34GL [Quadro FX 500/600 PCI]
-
- vendor.id pci 0x10de
-&device.id pci 0x032c
-+device.name NV34GLM [GeForce FX Go 5300]
-
- vendor.id pci 0x10de
-&device.id pci 0x032d
-+device.name NV34 [GeForce FX Go5100]
-
- vendor.id pci 0x10de
-&device.id pci 0x032f
-+device.name NV34
-
- vendor.id pci 0x10de
-&device.id pci 0x0330
-+device.name NV35 [GeForce FX 5900 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0331
-+device.name NV35 [GeForce FX 5900]
-
- vendor.id pci 0x10de
-&device.id pci 0x0331
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8145
-+subdevice.name V9950GE
-
- vendor.id pci 0x10de
-&device.id pci 0x0332
-+device.name NV35 [GeForce FX 5900XT]
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-+device.name NV38 [GeForce FX 5950 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0334
-+device.name NV35 [GeForce FX 5900ZT]
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-+device.name NV35GL [Quadro FX 3000]
-
- vendor.id pci 0x10de
-&device.id pci 0x033f
-+device.name NV35GL [Quadro FX 700]
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-+device.name NV36.1 [GeForce FX 5700 Ultra]
-
- vendor.id pci 0x10de
-&device.id pci 0x0342
-+device.name NV36.2 [GeForce FX 5700]
-
- vendor.id pci 0x10de
-&device.id pci 0x0343
-+device.name NV36 [GeForce FX 5700LE]
-
- vendor.id pci 0x10de
-&device.id pci 0x0344
-+device.name NV36.4 [GeForce FX 5700VE]
-
- vendor.id pci 0x10de
-&device.id pci 0x0345
-+device.name NV36.5
-
- vendor.id pci 0x10de
-&device.id pci 0x0347
-+device.name NV36 [GeForce FX Go5700]
-
- vendor.id pci 0x10de
-&device.id pci 0x0348
-+device.name NV36 [GeForce FX Go5700]
-
- vendor.id pci 0x10de
-&device.id pci 0x0349
-+device.name NV36
-
- vendor.id pci 0x10de
-&device.id pci 0x034b
-+device.name NV36
-
- vendor.id pci 0x10de
-&device.id pci 0x034c
-+device.name NV36 [Quadro FX Go1000]
-
- vendor.id pci 0x10de
-&device.id pci 0x034e
-+device.name NV36GL [Quadro FX 1100]
-
- vendor.id pci 0x10de
-&device.id pci 0x034f
-+device.name NV36GL
-
- vendor.id pci 0x10df
-+vendor.name Emulex Corporation
-
- vendor.id pci 0x10df
-&device.id pci 0x1ae5
-+device.name LP6000 Fibre Channel Host Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0x1ae6
-+device.name LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
-
- vendor.id pci 0x10df
-&device.id pci 0x1ae7
-+device.name LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:2-3)
-
- vendor.id pci 0x10df
-&device.id pci 0xf015
-+device.name LP1150e
-
- vendor.id pci 0x10df
-&device.id pci 0xf085
-+device.name LP850 Fibre Channel Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf095
-+device.name LP952 Fibre Channel Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf098
-+device.name LP982 Fibre Channel Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf0a1
-+device.name LightPulse Fibre Channel Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf0a5
-+device.name LP1050
-
- vendor.id pci 0x10df
-&device.id pci 0xf0d5
-+device.name LP1150
-
- vendor.id pci 0x10df
-&device.id pci 0xf100
-+device.name LP11000e
-
- vendor.id pci 0x10df
-&device.id pci 0xf700
-+device.name LP7000 Fibre Channel Host Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf701
-+device.name LP 7000EFibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
-
- vendor.id pci 0x10df
-&device.id pci 0xf800
-+device.name LP8000 Fibre Channel Host Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf801
-+device.name LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
-
- vendor.id pci 0x10df
-&device.id pci 0xf900
-+device.name LP9000 Fibre Channel Host Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf901
-+device.name LP 9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
-
- vendor.id pci 0x10df
-&device.id pci 0xf980
-+device.name LP9802 Fibre Channel Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xf981
-+device.name LP 9802 Fibre Channel Host Adapter Alternate ID
-
- vendor.id pci 0x10df
-&device.id pci 0xf982
-+device.name LP 9802 Fibre Channel Host Adapter Alternate ID
-
- vendor.id pci 0x10df
-&device.id pci 0xfa00
-+device.name LP10000 Fibre Channel Host Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xfa01
-+device.name LP101
-
- vendor.id pci 0x10df
-&device.id pci 0xfb00
-+device.name LightPulse Fibre Channel Adapter
-
- vendor.id pci 0x10df
-&device.id pci 0xfd00
-+device.name LP11000
-
- vendor.id pci 0x10e0
-+vendor.name Integrated Micro Solutions Inc.
-
- vendor.id pci 0x10e0
-&device.id pci 0x5026
-+device.name IMS5026/27/28
-
- vendor.id pci 0x10e0
-&device.id pci 0x5027
-+device.name IMS5027
-
- vendor.id pci 0x10e0
-&device.id pci 0x5028
-+device.name IMS5028
-
- vendor.id pci 0x10e0
-&device.id pci 0x8849
-+device.name IMS8849
-
- vendor.id pci 0x10e0
-&device.id pci 0x8853
-+device.name IMS8853
-
- vendor.id pci 0x10e0
-&device.id pci 0x9128
-+device.name IMS9128 [Twin turbo 128]
-
- vendor.id pci 0x10e1
-+vendor.name Tekram Technology Co.,Ltd.
-
- vendor.id pci 0x10e1
-&device.id pci 0x0391
-+device.name TRM-S1040
-
- vendor.id pci 0x10e1
-&device.id pci 0x0391
-&subvendor.id pci 0x10e1
-&subdevice.id pci 0x0391
-+subdevice.name DC-315U SCSI-3 Host Adapter
-
- vendor.id pci 0x10e1
-&device.id pci 0x690c
-+device.name DC-690c
-
- vendor.id pci 0x10e1
-&device.id pci 0xdc29
-+device.name DC-290
-
- vendor.id pci 0x10e2
-+vendor.name Aptix Corporation
-
- vendor.id pci 0x10e3
-+vendor.name Tundra Semiconductor Corp.
-
- vendor.id pci 0x10e3
-&device.id pci 0x0000
-+device.name CA91C042 [Universe]
-
- vendor.id pci 0x10e3
-&device.id pci 0x0860
-+device.name CA91C860 [QSpan]
-
- vendor.id pci 0x10e3
-&device.id pci 0x0862
-+device.name CA91C862A [QSpan-II]
-
- vendor.id pci 0x10e3
-&device.id pci 0x8260
-+device.name CA91L8200B [Dual PCI PowerSpan II]
-
- vendor.id pci 0x10e3
-&device.id pci 0x8261
-+device.name CA91L8260B [Single PCI PowerSpan II]
-
- vendor.id pci 0x10e4
-+vendor.name Tandem Computers
-
- vendor.id pci 0x10e5
-+vendor.name Micro Industries Corporation
-
- vendor.id pci 0x10e6
-+vendor.name Gainbery Computer Products Inc.
-
- vendor.id pci 0x10e7
-+vendor.name Vadem
-
- vendor.id pci 0x10e8
-+vendor.name Applied Micro Circuits Corp.
-
- vendor.id pci 0x10e8
-&device.id pci 0x1072
-+device.name INES GPIB-PCI (AMCC5920 based)
-
- vendor.id pci 0x10e8
-&device.id pci 0x2011
-+device.name Q-Motion Video Capture/Edit board
-
- vendor.id pci 0x10e8
-&device.id pci 0x4750
-+device.name S5930 [Matchmaker]
-
- vendor.id pci 0x10e8
-&device.id pci 0x5920
-+device.name S5920
-
- vendor.id pci 0x10e8
-&device.id pci 0x8043
-+device.name LANai4.x [Myrinet LANai interface chip]
-
- vendor.id pci 0x10e8
-&device.id pci 0x8062
-+device.name S5933_PARASTATION
-
- vendor.id pci 0x10e8
-&device.id pci 0x807d
-+device.name S5933 [Matchmaker]
-
- vendor.id pci 0x10e8
-&device.id pci 0x8088
-+device.name Kongsberg Spacetec Format Synchronizer
-
- vendor.id pci 0x10e8
-&device.id pci 0x8089
-+device.name Kongsberg Spacetec Serial Output Board
-
- vendor.id pci 0x10e8
-&device.id pci 0x809c
-+device.name S5933_HEPC3
-
- vendor.id pci 0x10e8
-&device.id pci 0x80d7
-+device.name PCI-9112
-
- vendor.id pci 0x10e8
-&device.id pci 0x80d9
-+device.name PCI-9118
-
- vendor.id pci 0x10e8
-&device.id pci 0x80da
-+device.name PCI-9812
-
- vendor.id pci 0x10e8
-&device.id pci 0x811a
-+device.name PCI-IEEE1355-DS-DE Interface
-
- vendor.id pci 0x10e8
-&device.id pci 0x814c
-+device.name Fastcom ESCC-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x8170
-+device.name S5933 [Matchmaker] (Chipset Development Tool)
-
- vendor.id pci 0x10e8
-&device.id pci 0x81e6
-+device.name Multimedia video controller
-
- vendor.id pci 0x10e8
-&device.id pci 0x8291
-+device.name Fastcom 232/8-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x82c4
-+device.name Fastcom 422/4-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x82c5
-+device.name Fastcom 422/2-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x82c6
-+device.name Fastcom IG422/1-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x82c7
-+device.name Fastcom IG232/2-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x82ca
-+device.name Fastcom 232/4-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x82db
-+device.name AJA HDNTV HD SDI Framestore
-
- vendor.id pci 0x10e8
-&device.id pci 0x82e2
-+device.name Fastcom DIO24H-PCI (Commtech, Inc.)
-
- vendor.id pci 0x10e8
-&device.id pci 0x8851
-+device.name S5933 on Innes Corp FM Radio Capture card
-
- vendor.id pci 0x10e9
-+vendor.name Alps Electric Co., Ltd.
-
- vendor.id pci 0x10ea
-+vendor.name Intergraphics Systems
-
- vendor.id pci 0x10ea
-&device.id pci 0x1680
-+device.name IGA-1680
-
- vendor.id pci 0x10ea
-&device.id pci 0x1682
-+device.name IGA-1682
-
- vendor.id pci 0x10ea
-&device.id pci 0x1683
-+device.name IGA-1683
-
- vendor.id pci 0x10ea
-&device.id pci 0x2000
-+device.name CyberPro 2000
-
- vendor.id pci 0x10ea
-&device.id pci 0x2010
-+device.name CyberPro 2000A
-
- vendor.id pci 0x10ea
-&device.id pci 0x5000
-+device.name CyberPro 5000
-
- vendor.id pci 0x10ea
-&device.id pci 0x5050
-+device.name CyberPro 5050
-
- vendor.id pci 0x10ea
-&device.id pci 0x5202
-+device.name CyberPro 5202
-
- vendor.id pci 0x10ea
-&device.id pci 0x5252
-+device.name CyberPro5252
-
- vendor.id pci 0x10eb
-+vendor.name Artists Graphics
-
- vendor.id pci 0x10eb
-&device.id pci 0x0101
-+device.name 3GA
-
- vendor.id pci 0x10eb
-&device.id pci 0x8111
-+device.name Twist3 Frame Grabber
-
- vendor.id pci 0x10ec
-+vendor.name Realtek Semiconductor Co., Ltd.
-
- vendor.id pci 0x10ec
-&device.id pci 0x8029
-+device.name RTL-8029(AS)
-
- vendor.id pci 0x10ec
-&device.id pci 0x8029
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2011
-+subdevice.name EZ-Card (SMC1208)
-
- vendor.id pci 0x10ec
-&device.id pci 0x8029
-&subvendor.id pci 0x10ec
-&subdevice.id pci 0x8029
-+subdevice.name RTL-8029(AS)
-
- vendor.id pci 0x10ec
-&device.id pci 0x8029
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x1208
-+subdevice.name EN1208
-
- vendor.id pci 0x10ec
-&device.id pci 0x8029
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x0300
-+subdevice.name DE-528
-
- vendor.id pci 0x10ec
-&device.id pci 0x8029
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2400
-+subdevice.name AT-2400
-
- vendor.id pci 0x10ec
-&device.id pci 0x8129
-+device.name RTL-8129
-
- vendor.id pci 0x10ec
-&device.id pci 0x8129
-&subvendor.id pci 0x10ec
-&subdevice.id pci 0x8129
-+subdevice.name RT8129 Fast Ethernet Adapter
-
- vendor.id pci 0x10ec
-&device.id pci 0x8138
-+device.name RT8139 (B/C) Cardbus Fast Ethernet Adapter
-
- vendor.id pci 0x10ec
-&device.id pci 0x8138
-&subvendor.id pci 0x10ec
-&subdevice.id pci 0x8138
-+subdevice.name RT8139 (B/C) Fast Ethernet Adapter
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-+device.name RTL-8139/8139C/8139C+
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x0357
-&subdevice.id pci 0x000a
-+subdevice.name TTP-Monitoring Card V2.0
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x8920
-+subdevice.name ALN-325
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x8921
-+subdevice.name ALN-325
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x10bd
-&subdevice.id pci 0x0320
-+subdevice.name EP-320X-R
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x10ec
-&subdevice.id pci 0x8139
-+subdevice.name RT8139
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1113
-&subdevice.id pci 0xec01
-+subdevice.name FNC-0107TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1300
-+subdevice.name DFE-538TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1320
-+subdevice.name SN5200
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x8139
-+subdevice.name DRN-32TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x11f6
-&subdevice.id pci 0x8139
-+subdevice.name FN22-3(A) LinxPRO Ethernet Adapter
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2500
-+subdevice.name AT-2500TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2503
-+subdevice.name AT-2500TX/ACPI
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1429
-&subdevice.id pci 0xd010
-+subdevice.name ND010
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1432
-&subdevice.id pci 0x9130
-+subdevice.name EN-9130TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x8139
-+subdevice.name RT8139
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xe000
-+subdevice.name GA-7VM400M/7VT600 Motherboard
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x146c
-&subdevice.id pci 0x1439
-+subdevice.name FE-1439TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1489
-&subdevice.id pci 0x6001
-+subdevice.name GF100TXRII
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1489
-&subdevice.id pci 0x6002
-+subdevice.name GF100TXRA
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x149c
-&subdevice.id pci 0x139a
-+subdevice.name LFE-8139ATX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x149c
-&subdevice.id pci 0x8139
-+subdevice.name LFE-8139TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x14cb
-&subdevice.id pci 0x0200
-+subdevice.name LNR-100 Family 10/100 Base-TX Ethernet
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x1799
-&subdevice.id pci 0x5000
-+subdevice.name F5D5000 PCI Card/Desktop Network PCI Card
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x2646
-&subdevice.id pci 0x0001
-+subdevice.name EtheRx
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x8e2e
-&subdevice.id pci 0x7000
-+subdevice.name KF-230TX
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0x8e2e
-&subdevice.id pci 0x7100
-+subdevice.name KF-230TX/2
-
- vendor.id pci 0x10ec
-&device.id pci 0x8139
-&subvendor.id pci 0xa0a0
-&subdevice.id pci 0x0007
-+subdevice.name ALN-325C
-
- vendor.id pci 0x10ec
-&device.id pci 0x8169
-+device.name RTL-8169 Gigabit Ethernet
-
- vendor.id pci 0x10ec
-&device.id pci 0x8169
-&subvendor.id pci 0x1259
-&subdevice.id pci 0xc107
-+subdevice.name CG-LAPCIGT
-
- vendor.id pci 0x10ec
-&device.id pci 0x8169
-&subvendor.id pci 0x1371
-&subdevice.id pci 0x434e
-+subdevice.name ProG-2000L
-
- vendor.id pci 0x10ec
-&device.id pci 0x8169
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xe000
-+subdevice.name GA-K8VT800 Pro Motherboard
-
- vendor.id pci 0x10ec
-&device.id pci 0x8169
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x702c
-+subdevice.name K8T NEO 2 motherboard
-
- vendor.id pci 0x10ec
-&device.id pci 0x8180
-+device.name RTL8180L 802.11b MAC
-
- vendor.id pci 0x10ec
-&device.id pci 0x8197
-+device.name SmartLAN56 56K Modem
-
- vendor.id pci 0x10ed
-+vendor.name Ascii Corporation
-
- vendor.id pci 0x10ed
-&device.id pci 0x7310
-+device.name V7310
-
- vendor.id pci 0x10ee
-+vendor.name Xilinx Corporation
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc0
-+device.name RME Digi96
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc1
-+device.name RME Digi96/8
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc2
-+device.name RME Digi96/8 Pro
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc3
-+device.name RME Digi96/8 Pad
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc4
-+device.name RME Digi9652 (Hammerfall)
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc5
-+device.name RME Hammerfall DSP
-
- vendor.id pci 0x10ee
-&device.id pci 0x3fc6
-+device.name RME Hammerfall DSP MADI
-
- vendor.id pci 0x10ee
-&device.id pci 0x8381
-+device.name Ellips Santos Frame Grabber
-
- vendor.id pci 0x10ef
-+vendor.name Racore Computer Products, Inc.
-
- vendor.id pci 0x10ef
-&device.id pci 0x8154
-+device.name M815x Token Ring Adapter
-
- vendor.id pci 0x10f0
-+vendor.name Peritek Corporation
-
- vendor.id pci 0x10f1
-+vendor.name Tyan Computer
-
- vendor.id pci 0x10f2
-+vendor.name Achme Computer, Inc.
-
- vendor.id pci 0x10f3
-+vendor.name Alaris, Inc.
-
- vendor.id pci 0x10f4
-+vendor.name S-MOS Systems, Inc.
-
- vendor.id pci 0x10f5
-+vendor.name NKK Corporation
-
- vendor.id pci 0x10f5
-&device.id pci 0xa001
-+device.name NDR4000 [NR4600 Bridge]
-
- vendor.id pci 0x10f6
-+vendor.name Creative Electronic Systems SA
-
- vendor.id pci 0x10f7
-+vendor.name Matsushita Electric Industrial Co., Ltd.
-
- vendor.id pci 0x10f8
-+vendor.name Altos India Ltd
-
- vendor.id pci 0x10f9
-+vendor.name PC Direct
-
- vendor.id pci 0x10fa
-+vendor.name Truevision
-
- vendor.id pci 0x10fa
-&device.id pci 0x000c
-+device.name TARGA 1000
-
- vendor.id pci 0x10fb
-+vendor.name Thesys Gesellschaft fuer Mikroelektronik mbH
-
- vendor.id pci 0x10fb
-&device.id pci 0x186f
-+device.name TH 6255
-
- vendor.id pci 0x10fc
-+vendor.name I-O Data Device, Inc.
-
- vendor.id pci 0x10fc
-&device.id pci 0x0003
-+device.name Cardbus IDE Controller
-
- vendor.id pci 0x10fc
-&device.id pci 0x0005
-+device.name Cardbus SCSI CBSC II
-
- vendor.id pci 0x10fd
-+vendor.name Soyo Computer, Inc
-
- vendor.id pci 0x10fe
-+vendor.name Fast Multimedia AG
-
- vendor.id pci 0x10ff
-+vendor.name NCube
-
- vendor.id pci 0x1100
-+vendor.name Jazz Multimedia
-
- vendor.id pci 0x1101
-+vendor.name Initio Corporation
-
- vendor.id pci 0x1101
-&device.id pci 0x1060
-+device.name INI-A100U2W
-
- vendor.id pci 0x1101
-&device.id pci 0x9100
-+device.name INI-9100/9100W
-
- vendor.id pci 0x1101
-&device.id pci 0x9400
-+device.name INI-940
-
- vendor.id pci 0x1101
-&device.id pci 0x9401
-+device.name INI-950
-
- vendor.id pci 0x1101
-&device.id pci 0x9500
-+device.name 360P
-
- vendor.id pci 0x1101
-&device.id pci 0x9502
-+device.name Initio INI-9100UW Ultra Wide SCSI Controller INIC-950P chip
-
- vendor.id pci 0x1102
-+vendor.name Creative Labs
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-+device.name SB Live! EMU10k1
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0020
-+subdevice.name CT4850 SBLive! Value
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0021
-+subdevice.name CT4620 SBLive!
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x002f
-+subdevice.name SBLive! mainboard implementation
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x4001
-+subdevice.name E-mu APS
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8022
-+subdevice.name CT4780 SBLive! Value
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8023
-+subdevice.name CT4790 SoundBlaster PCI512
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8024
-+subdevice.name CT4760 SBLive!
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8025
-+subdevice.name SBLive! Mainboard Implementation
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8026
-+subdevice.name CT4830 SBLive! Value
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8027
-+subdevice.name CT4832 SBLive! Value
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8028
-+subdevice.name CT4760 SBLive! OEM version
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8031
-+subdevice.name CT4831 SBLive! Value
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8040
-+subdevice.name CT4760 SBLive!
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8051
-+subdevice.name CT4850 SBLive! Value
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8061
-+subdevice.name SBLive! Player 5.1
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8064
-+subdevice.name SB Live! 5.1 Model SB0100
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8065
-+subdevice.name SBLive! 5.1 Digital Model SB0220
-
- vendor.id pci 0x1102
-&device.id pci 0x0002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x8067
-+subdevice.name SBLive! 5.1 eMicro 28028
-
- vendor.id pci 0x1102
-&device.id pci 0x0004
-+device.name SB Audigy
-
- vendor.id pci 0x1102
-&device.id pci 0x0004
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0051
-+subdevice.name SB0090 Audigy Player
-
- vendor.id pci 0x1102
-&device.id pci 0x0004
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0053
-+subdevice.name SB0090 Audigy Player/OEM
-
- vendor.id pci 0x1102
-&device.id pci 0x0004
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0058
-+subdevice.name SB0090 Audigy Player/OEM
-
- vendor.id pci 0x1102
-&device.id pci 0x0004
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x2002
-+subdevice.name SB Audigy 2 ZS (SB0350)
-
- vendor.id pci 0x1102
-&device.id pci 0x0006
-+device.name [SB Live! Value] EMU10k1X
-
- vendor.id pci 0x1102
-&device.id pci 0x0007
-+device.name SB Audigy LS
-
- vendor.id pci 0x1102
-&device.id pci 0x0007
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1001
-+subdevice.name SB0310 Audigy LS
-
- vendor.id pci 0x1102
-&device.id pci 0x0007
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1002
-+subdevice.name SB0312 Audigy LS
-
- vendor.id pci 0x1102
-&device.id pci 0x0008
-+device.name SB0400 Audigy2 Value
-
- vendor.id pci 0x1102
-&device.id pci 0x4001
-+device.name SB Audigy FireWire Port
-
- vendor.id pci 0x1102
-&device.id pci 0x4001
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0010
-+subdevice.name SB Audigy FireWire Port
-
- vendor.id pci 0x1102
-&device.id pci 0x7002
-+device.name SB Live! MIDI/Game Port
-
- vendor.id pci 0x1102
-&device.id pci 0x7002
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0020
-+subdevice.name Gameport Joystick
-
- vendor.id pci 0x1102
-&device.id pci 0x7003
-+device.name SB Audigy MIDI/Game port
-
- vendor.id pci 0x1102
-&device.id pci 0x7003
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x0040
-+subdevice.name SB Audigy MIDI/Game Port
-
- vendor.id pci 0x1102
-&device.id pci 0x7004
-+device.name [SB Live! Value] Input device controller
-
- vendor.id pci 0x1102
-&device.id pci 0x7005
-+device.name SB Audigy LS MIDI/Game port
-
- vendor.id pci 0x1102
-&device.id pci 0x7005
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1001
-+subdevice.name SB0310 Audigy LS MIDI/Game port
-
- vendor.id pci 0x1102
-&device.id pci 0x7005
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1002
-+subdevice.name SB0312 Audigy LS MIDI/Game port
-
- vendor.id pci 0x1102
-&device.id pci 0x8064
-+device.name SB0100 [SBLive! 5.1 OEM]
-
- vendor.id pci 0x1102
-&device.id pci 0x8938
-+device.name Ectiva EV1938
-
- vendor.id pci 0x1103
-+vendor.name Triones Technologies, Inc.
-
- vendor.id pci 0x1103
-&device.id pci 0x0003
-+device.name HPT343
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-+device.name HPT366/368/370/370A/372
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0001
-+subdevice.name HPT370A
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0003
-+subdevice.name HPT343 / HPT345 / HPT363 UDMA33
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0004
-+subdevice.name HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4)
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0005
-+subdevice.name HPT370 UDMA100
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0006
-+subdevice.name HPT302
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0007
-+subdevice.name HPT371 UDMA133
-
- vendor.id pci 0x1103
-&device.id pci 0x0004
-&subvendor.id pci 0x1103
-&subdevice.id pci 0x0008
-+subdevice.name HPT374 UDMA/ATA133 RAID Controller
-
- vendor.id pci 0x1103
-&device.id pci 0x0005
-+device.name HPT372A
-
- vendor.id pci 0x1103
-&device.id pci 0x0006
-+device.name HPT302
-
- vendor.id pci 0x1103
-&device.id pci 0x0007
-+device.name HPT371
-
- vendor.id pci 0x1103
-&device.id pci 0x0008
-+device.name HPT374
-
- vendor.id pci 0x1103
-&device.id pci 0x0009
-+device.name HPT372N
-
- vendor.id pci 0x1104
-+vendor.name RasterOps Corp.
-
- vendor.id pci 0x1105
-+vendor.name Sigma Designs, Inc.
-
- vendor.id pci 0x1105
-&device.id pci 0x1105
-+device.name REALmagic Xcard MPEG 1/2/3/4 DVD Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8300
-+device.name REALmagic Hollywood Plus DVD Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8400
-+device.name EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8401
-+device.name EM8401 REALmagic DVD/MPEG-2 A/V Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8470
-+device.name EM8470 REALmagic DVD/MPEG-4 A/V Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8471
-+device.name EM8471 REALmagic DVD/MPEG-4 A/V Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8475
-+device.name EM8475 REALmagic DVD/MPEG-4 A/V Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8476
-+device.name EM8476 REALmagic DVD/MPEG-4 A/V Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8485
-+device.name EM8485 REALmagic DVD/MPEG-4 A/V Decoder
-
- vendor.id pci 0x1105
-&device.id pci 0x8486
-+device.name EM8486 REALmagic DVD/MPEG-4 A/V Decoder
-
- vendor.id pci 0x1106
-+vendor.name VIA Technologies, Inc.
-
- vendor.id pci 0x1106
-&device.id pci 0x0102
-+device.name Embedded VIA Ethernet Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x0130
-+device.name VT6305 1394.A Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x0305
-+device.name VT8363/8365 [KT133/KM133]
-
- vendor.id pci 0x1106
-&device.id pci 0x0305
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8033
-+subdevice.name A7V Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0305
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x803e
-+subdevice.name A7V-E Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0305
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8042
-+subdevice.name A7V133/A7V133-C Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0305
-&subvendor.id pci 0x147b
-&subdevice.id pci 0xa401
-+subdevice.name KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0391
-+device.name VT8371 [KX133]
-
- vendor.id pci 0x1106
-&device.id pci 0x0501
-+device.name VT8501 [Apollo MVP4]
-
- vendor.id pci 0x1106
-&device.id pci 0x0505
-+device.name VT82C505
-
- vendor.id pci 0x1106
-&device.id pci 0x0561
-+device.name VT82C576MV
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-+device.name VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a81
-+subdevice.name L7VTA v1.0 Motherboard (KT400-8235)
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8052
-+subdevice.name VT8233A Bus Master ATA100/66/33 IDE
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x808c
-+subdevice.name A7V8X motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a1
-+subdevice.name A7V8X-X motherboard rev. 1.01
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ed
-+subdevice.name A7V600 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0571
-+subdevice.name VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xf641
-+subdevice.name FX41 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5002
-+subdevice.name GA-7VAX Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7020
-+subdevice.name K8T NEO 2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0571
-&subvendor.id pci 0x1849
-&subdevice.id pci 0x0571
-+subdevice.name K7VT2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0576
-+device.name VT82C576 3V [Apollo Master]
-
- vendor.id pci 0x1106
-&device.id pci 0x0585
-+device.name VT82C585VP [Apollo VP1/VPX]
-
- vendor.id pci 0x1106
-&device.id pci 0x0586
-+device.name VT82C586/A/B PCI-to-ISA [Apollo VP]
-
- vendor.id pci 0x1106
-&device.id pci 0x0586
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0000
-+subdevice.name MVP3 ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x0595
-+device.name VT82C595 [Apollo VP2]
-
- vendor.id pci 0x1106
-&device.id pci 0x0596
-+device.name VT82C596 ISA [Mobile South]
-
- vendor.id pci 0x1106
-&device.id pci 0x0596
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0000
-+subdevice.name VT82C596/A/B PCI to ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x0596
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x0596
-+subdevice.name VT82C596/A/B PCI to ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x0597
-+device.name VT82C597 [Apollo VP3]
-
- vendor.id pci 0x1106
-&device.id pci 0x0598
-+device.name VT82C598 [Apollo MVP3]
-
- vendor.id pci 0x1106
-&device.id pci 0x0601
-+device.name VT8601 [Apollo ProMedia]
-
- vendor.id pci 0x1106
-&device.id pci 0x0605
-+device.name VT8605 [ProSavage PM133]
-
- vendor.id pci 0x1106
-&device.id pci 0x0605
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x802c
-+subdevice.name CUV4X mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0680
-+device.name VT82C680 [Apollo P6]
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-+device.name VT82C686 [Apollo Super South]
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x802c
-+subdevice.name CUV4X mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8033
-+subdevice.name A7V Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x803e
-+subdevice.name A7V-E Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8040
-+subdevice.name A7M266 Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8042
-+subdevice.name A7V133/A7V133-C Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0000
-+subdevice.name VT82C686/A PCI to ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0686
-+subdevice.name VT82C686/A PCI to ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x1106
-&device.id pci 0x0686
-&subvendor.id pci 0x147b
-&subdevice.id pci 0xa702
-+subdevice.name KG7-Lite Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0691
-+device.name VT82C693A/694x [Apollo PRO133x]
-
- vendor.id pci 0x1106
-&device.id pci 0x0691
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x0691
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x1106
-&device.id pci 0x0691
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x0691
-+subdevice.name VT82C691 Apollo Pro System Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x0693
-+device.name VT82C693 [Apollo Pro Plus]
-
- vendor.id pci 0x1106
-&device.id pci 0x0698
-+device.name VT82C693A [Apollo Pro133 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x0926
-+device.name VT82C926 [Amazon]
-
- vendor.id pci 0x1106
-&device.id pci 0x1000
-+device.name VT82C570MV
-
- vendor.id pci 0x1106
-&device.id pci 0x1106
-+device.name VT82C570MV
-
- vendor.id pci 0x1106
-&device.id pci 0x1571
-+device.name VT82C576M/VT82C586
-
- vendor.id pci 0x1106
-&device.id pci 0x1595
-+device.name VT82C595/97 [Apollo VP2/97]
-
- vendor.id pci 0x1106
-&device.id pci 0x3022
-+device.name CLE266
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-+device.name VT82xxxxx UHCI USB 1.1 Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x0925
-&subdevice.id pci 0x1234
-+subdevice.name USB Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a81
-+subdevice.name L7VTA v1.0 Motherboard (KT400-8235)
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x808c
-+subdevice.name VT6202 USB2.0 4 port controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a1
-+subdevice.name A7V8X-X motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ed
-+subdevice.name A7V600 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5004
-+subdevice.name GA-7VAX Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7020
-+subdevice.name K8T NEO 2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3038
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3040
-+device.name VT82C586B ACPI
-
- vendor.id pci 0x1106
-&device.id pci 0x3043
-+device.name VT86C100A [Rhine]
-
- vendor.id pci 0x1106
-&device.id pci 0x3043
-&subvendor.id pci 0x10bd
-&subdevice.id pci 0x0000
-+subdevice.name VT86C100A Fast Ethernet Adapter
-
- vendor.id pci 0x1106
-&device.id pci 0x3043
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0100
-+subdevice.name VT86C100A Fast Ethernet Adapter
-
- vendor.id pci 0x1106
-&device.id pci 0x3043
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1400
-+subdevice.name DFE-530TX rev A
-
- vendor.id pci 0x1106
-&device.id pci 0x3044
-+device.name IEEE 1394 Host Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3044
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x1106
-&device.id pci 0x3044
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x1000
-+subdevice.name GA-7VT600-1394 Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3044
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x702d
-+subdevice.name K8T NEO 2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3050
-+device.name VT82C596 Power Management
-
- vendor.id pci 0x1106
-&device.id pci 0x3051
-+device.name VT82C596 Power Management
-
- vendor.id pci 0x1106
-&device.id pci 0x3053
-+device.name VT6105M [Rhine-III]
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-+device.name VT82C686 [Apollo Super ACPI]
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8033
-+subdevice.name A7V Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x803e
-+subdevice.name A7V-E Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8040
-+subdevice.name A7M266 Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8042
-+subdevice.name A7V133/A7V133-C Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3057
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-+device.name VT82C686 AC97 Audio Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0097
-+subdevice.name SoundMax Digital Integrated Audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb194
-+subdevice.name Soundmax integrated digital audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x1106
-+subdevice.name A7V133/A7V133-C Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x4511
-+subdevice.name Onboard Audio on EP7KXA
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x7600
-+subdevice.name Onboard Audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x3091
-+subdevice.name MS-6309 Onboard Audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x3300
-+subdevice.name MS-6330 Onboard Audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3058
-&subvendor.id pci 0x15dd
-&subdevice.id pci 0x7609
-+subdevice.name Onboard Audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-+device.name VT8233/A/8235/8237 AC97 Audio Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a81
-+subdevice.name L7VTA v1.0 Motherboard (KT400-8235)
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8095
-+subdevice.name A7V8X Motherboard (Realtek ALC650 codec)
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a1
-+subdevice.name A7V8X-X Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80b0
-+subdevice.name A7V600 motherboard (ADI AD1980 codec [SoundMAX])
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x3059
-+subdevice.name L7VMM2 Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x4161
-+subdevice.name K7VT2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xc160
-+subdevice.name FX41 motherboard (Realtek ALC650 codec)
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xa002
-+subdevice.name GA-7VAX Onboard Audio (Realtek ALC650)
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x0080
-+subdevice.name K8T NEO 2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x3800
-+subdevice.name KT266 onboard audio
-
- vendor.id pci 0x1106
-&device.id pci 0x3059
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3065
-+device.name VT6102 [Rhine-II]
-
- vendor.id pci 0x1106
-&device.id pci 0x3065
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a1
-+subdevice.name A7V8X-X Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3065
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x0102
-+subdevice.name VT6102 [Rhine II] Embeded Ethernet Controller on VT8235
-
- vendor.id pci 0x1106
-&device.id pci 0x3065
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1400
-+subdevice.name DFE-530TX rev A
-
- vendor.id pci 0x1106
-&device.id pci 0x3065
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1401
-+subdevice.name DFE-530TX rev B
-
- vendor.id pci 0x1106
-&device.id pci 0x3065
-&subvendor.id pci 0x13b9
-&subdevice.id pci 0x1421
-+subdevice.name LD-10/100AL PCI Fast Ethernet Adapter (rev.B)
-
- vendor.id pci 0x1106
-&device.id pci 0x3068
-+device.name AC'97 Modem Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3068
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x309e
-+subdevice.name MS-6309 Saturn Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3074
-+device.name VT8233 PCI to ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3074
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8052
-+subdevice.name VT8233A
-
- vendor.id pci 0x1106
-&device.id pci 0x3091
-+device.name VT8633 [Apollo Pro266]
-
- vendor.id pci 0x1106
-&device.id pci 0x3099
-+device.name VT8366/A/7 [Apollo KT266/A/333]
-
- vendor.id pci 0x1106
-&device.id pci 0x3099
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8064
-+subdevice.name A7V266-E Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3099
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x807f
-+subdevice.name A7V333 Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3099
-&subvendor.id pci 0x1849
-&subdevice.id pci 0x3099
-+subdevice.name K7VT2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3101
-+device.name VT8653 Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3102
-+device.name VT8662 Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3103
-+device.name VT8615 Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-+device.name USB 2.0
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a81
-+subdevice.name L7VTA v1.0 Motherboard (KT400-8235)
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x808c
-+subdevice.name A7V8X motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a1
-+subdevice.name A7V8X-X motherboard rev 1.01
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ed
-+subdevice.name A7V600 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xf641
-+subdevice.name FX41 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5004
-+subdevice.name GA-7VAX Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7020
-+subdevice.name K8T NEO 2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3104
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3106
-+device.name VT6105 [Rhine-III]
-
- vendor.id pci 0x1106
-&device.id pci 0x3106
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1403
-+subdevice.name DFE-530TX rev C
-
- vendor.id pci 0x1106
-&device.id pci 0x3108
-+device.name S3 Unichrome Pro VGA Adapter
-
- vendor.id pci 0x1106
-&device.id pci 0x3109
-+device.name VT8233C PCI to ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3112
-+device.name VT8361 [KLE133] Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3116
-+device.name VT8375 [KM266/KL266] Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3116
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xf641
-+subdevice.name FX41 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3118
-+device.name S3 Unichrome Pro VGA Adapter
-
- vendor.id pci 0x1106
-&device.id pci 0x3119
-+device.name VT6120/VT6121/VT6122 Gigabit Ethernet Adapter
-
- vendor.id pci 0x1106
-&device.id pci 0x3122
-+device.name VT8623 [Apollo CLE266] integrated CastleRock graphics
-
- vendor.id pci 0x1106
-&device.id pci 0x3123
-+device.name VT8623 [Apollo CLE266]
-
- vendor.id pci 0x1106
-&device.id pci 0x3128
-+device.name VT8753 [P4X266 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x3133
-+device.name VT3133 Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3147
-+device.name VT8233A ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3148
-+device.name P4M266 Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3149
-+device.name VIA VT6420 SATA RAID Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3149
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ed
-+subdevice.name A7V600 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3149
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xb003
-+subdevice.name GA-7VM400AM(F) Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3149
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7020
-+subdevice.name K8T Neo 2 Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3156
-+device.name P/KN266 Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3164
-+device.name VT6410 ATA133 RAID controller
-
- vendor.id pci 0x1106
-&device.id pci 0x3168
-+device.name VT8374 P4X400 Host Controller/AGP Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-+device.name VT8235 ISA Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0a81
-+subdevice.name L7VTA v1.0 Motherboard (KT400-8235)
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x808c
-+subdevice.name A7V8X motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a1
-+subdevice.name A7V8X-X motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xf641
-+subdevice.name FX41 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5001
-+subdevice.name GA-7VAX Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3177
-&subvendor.id pci 0x1849
-&subdevice.id pci 0x3177
-+subdevice.name K7VT2 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3188
-+device.name VT8385 [K8T800 AGP] Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3188
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3189
-+device.name VT8377 [KT400/KT600 AGP] Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3189
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x807f
-+subdevice.name A7V8X motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3189
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5000
-+subdevice.name GA-7VAX Mainboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3204
-+device.name K8M800
-
- vendor.id pci 0x1106
-&device.id pci 0x3205
-+device.name VT8378 [KM400/A] Chipset Host Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0x3205
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5000
-+subdevice.name GA-7VM400M Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3227
-+device.name VT8237 ISA bridge [KT600/K8T800 South]
-
- vendor.id pci 0x1106
-&device.id pci 0x3227
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80ed
-+subdevice.name A7V600 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3227
-&subvendor.id pci 0x1106
-&subdevice.id pci 0x3227
-+subdevice.name DFI KT600-AL Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3227
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5001
-+subdevice.name GA-7VT600 Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x3227
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x4149
-+device.name VIA VT6420 (ATA133) Controller
-
- vendor.id pci 0x1106
-&device.id pci 0x5030
-+device.name VT82C596 ACPI [Apollo PRO]
-
- vendor.id pci 0x1106
-&device.id pci 0x6100
-+device.name VT85C100A [Rhine II]
-
- vendor.id pci 0x1106
-&device.id pci 0x7204
-+device.name K8M800
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-+device.name VT8378 [S3 UniChrome] Integrated Video
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xd000
-+subdevice.name Gigabyte GA-7VM400(A)M(F) Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x8231
-+device.name VT8231 [PCI-to-ISA Bridge]
-
- vendor.id pci 0x1106
-&device.id pci 0x8235
-+device.name VT8235 ACPI
-
- vendor.id pci 0x1106
-&device.id pci 0x8305
-+device.name VT8363/8365 [KT133/KM133 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8391
-+device.name VT8371 [KX133 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8501
-+device.name VT8501 [Apollo MVP4 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8596
-+device.name VT82C596 [Apollo PRO AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8597
-+device.name VT82C597 [Apollo VP3 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8598
-+device.name VT82C598/694x [Apollo MVP3/Pro133x AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8598
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0985
-+subdevice.name P6VXA Motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0x8601
-+device.name VT8601 [Apollo ProMedia AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8605
-+device.name VT8605 [PM133 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0x8691
-+device.name VT82C691 [Apollo Pro]
-
- vendor.id pci 0x1106
-&device.id pci 0x8693
-+device.name VT82C693 [Apollo Pro Plus] PCI Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xb091
-+device.name VT8633 [Apollo Pro266 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0xb099
-+device.name VT8366/A/7 [Apollo KT266/A/333 AGP]
-
- vendor.id pci 0x1106
-&device.id pci 0xb101
-+device.name VT8653 AGP Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xb102
-+device.name VT8362 AGP Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xb103
-+device.name VT8615 AGP Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xb112
-+device.name VT8361 [KLE133] AGP Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xb168
-+device.name VT8235 PCI Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xb188
-+device.name VT8237 PCI bridge [K8T800 South]
-
- vendor.id pci 0x1106
-&device.id pci 0xb188
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1407
-+subdevice.name KV8-MAX3 motherboard
-
- vendor.id pci 0x1106
-&device.id pci 0xb198
-+device.name VT8237 PCI Bridge
-
- vendor.id pci 0x1106
-&device.id pci 0xd104
-+device.name VT8237 Integrated Fast Ethernet Controller
-
- vendor.id pci 0x1107
-+vendor.name Stratus Computers
-
- vendor.id pci 0x1107
-&device.id pci 0x0576
-+device.name VIA VT82C570MV [Apollo] (Wrong vendor ID!)
-
- vendor.id pci 0x1108
-+vendor.name Proteon, Inc.
-
- vendor.id pci 0x1108
-&device.id pci 0x0100
-+device.name p1690plus_AA
-
- vendor.id pci 0x1108
-&device.id pci 0x0101
-+device.name p1690plus_AB
-
- vendor.id pci 0x1108
-&device.id pci 0x0105
-+device.name P1690Plus
-
- vendor.id pci 0x1108
-&device.id pci 0x0108
-+device.name P1690Plus
-
- vendor.id pci 0x1108
-&device.id pci 0x0138
-+device.name P1690Plus
-
- vendor.id pci 0x1108
-&device.id pci 0x0139
-+device.name P1690Plus
-
- vendor.id pci 0x1108
-&device.id pci 0x013c
-+device.name P1690Plus
-
- vendor.id pci 0x1108
-&device.id pci 0x013d
-+device.name P1690Plus
-
- vendor.id pci 0x1109
-+vendor.name Cogent Data Technologies, Inc.
-
- vendor.id pci 0x1109
-&device.id pci 0x1400
-+device.name EM110TX [EX110TX]
-
- vendor.id pci 0x110a
-+vendor.name Siemens Nixdorf AG
-
- vendor.id pci 0x110a
-&device.id pci 0x0002
-+device.name Pirahna 2-port
-
- vendor.id pci 0x110a
-&device.id pci 0x0005
-+device.name Tulip controller, power management, switch extender
-
- vendor.id pci 0x110a
-&device.id pci 0x0006
-+device.name FSC PINC (I/O-APIC)
-
- vendor.id pci 0x110a
-&device.id pci 0x0015
-+device.name FSC Multiprocessor Interrupt Controller
-
- vendor.id pci 0x110a
-&device.id pci 0x001d
-+device.name FSC Copernicus Management Controller
-
- vendor.id pci 0x110a
-&device.id pci 0x007b
-+device.name FSC Remote Service Controller, mailbox device
-
- vendor.id pci 0x110a
-&device.id pci 0x007c
-+device.name FSC Remote Service Controller, shared memory device
-
- vendor.id pci 0x110a
-&device.id pci 0x007d
-+device.name FSC Remote Service Controller, SMIC device
-
- vendor.id pci 0x110a
-&device.id pci 0x2102
-+device.name DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels
-
- vendor.id pci 0x110a
-&device.id pci 0x2104
-+device.name Eicon Diva 2.02 compatible passive ISDN card
-
- vendor.id pci 0x110a
-&device.id pci 0x3142
-+device.name SIMATIC NET CP 5613A1 (Profibus Adapter)
-
- vendor.id pci 0x110a
-&device.id pci 0x4021
-+device.name SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter)
-
- vendor.id pci 0x110a
-&device.id pci 0x4029
-+device.name SIMATIC NET CP 5613A2 (Profibus Adapter)
-
- vendor.id pci 0x110a
-&device.id pci 0x4942
-+device.name FPGA I-Bus Tracer for MBD
-
- vendor.id pci 0x110a
-&device.id pci 0x6120
-+device.name SZB6120
-
- vendor.id pci 0x110b
-+vendor.name Chromatic Research Inc.
-
- vendor.id pci 0x110b
-&device.id pci 0x0001
-+device.name Mpact Media Processor
-
- vendor.id pci 0x110b
-&device.id pci 0x0004
-+device.name Mpact 2
-
- vendor.id pci 0x110c
-+vendor.name Mini-Max Technology, Inc.
-
- vendor.id pci 0x110d
-+vendor.name Znyx Advanced Systems
-
- vendor.id pci 0x110e
-+vendor.name CPU Technology
-
- vendor.id pci 0x110f
-+vendor.name Ross Technology
-
- vendor.id pci 0x1110
-+vendor.name Powerhouse Systems
-
- vendor.id pci 0x1110
-&device.id pci 0x6037
-+device.name Firepower Powerized SMP I/O ASIC
-
- vendor.id pci 0x1110
-&device.id pci 0x6073
-+device.name Firepower Powerized SMP I/O ASIC
-
- vendor.id pci 0x1111
-+vendor.name Santa Cruz Operation
-
- vendor.id pci 0x1112
-+vendor.name Osicom Technologies Inc
-
- vendor.id pci 0x1112
-&device.id pci 0x2200
-+device.name FDDI Adapter
-
- vendor.id pci 0x1112
-&device.id pci 0x2300
-+device.name Fast Ethernet Adapter
-
- vendor.id pci 0x1112
-&device.id pci 0x2340
-+device.name 4 Port Fast Ethernet Adapter
-
- vendor.id pci 0x1112
-&device.id pci 0x2400
-+device.name ATM Adapter
-
- vendor.id pci 0x1113
-+vendor.name Accton Technology Corporation
-
- vendor.id pci 0x1113
-&device.id pci 0x1211
-+device.name SMC2-1211TX
-
- vendor.id pci 0x1113
-&device.id pci 0x1211
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1207
-+subdevice.name EN-1207D Fast Ethernet Adapter
-
- vendor.id pci 0x1113
-&device.id pci 0x1211
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x1211
-+subdevice.name EN-1207D Fast Ethernet Adapter
-
- vendor.id pci 0x1113
-&device.id pci 0x1216
-+device.name EN-1216 Ethernet Adapter
-
- vendor.id pci 0x1113
-&device.id pci 0x1216
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x2242
-+subdevice.name EN2242 10/100 Ethernet Mini-PCI Card
-
- vendor.id pci 0x1113
-&device.id pci 0x1216
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x1020
-+subdevice.name SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?]
-
- vendor.id pci 0x1113
-&device.id pci 0x1217
-+device.name EN-1217 Ethernet Adapter
-
- vendor.id pci 0x1113
-&device.id pci 0x5105
-+device.name 10Mbps Network card
-
- vendor.id pci 0x1113
-&device.id pci 0x9211
-+device.name EN-1207D Fast Ethernet Adapter
-
- vendor.id pci 0x1113
-&device.id pci 0x9211
-&subvendor.id pci 0x1113
-&subdevice.id pci 0x9211
-+subdevice.name EN-1207D Fast Ethernet Adapter
-
- vendor.id pci 0x1113
-&device.id pci 0x9511
-+device.name 21x4x DEC-Tulip compatible Fast Ethernet
-
- vendor.id pci 0x1113
-&device.id pci 0xd301
-+device.name CPWNA100 (Philips wireless PCMCIA)
-
- vendor.id pci 0x1113
-&device.id pci 0xec02
-+device.name SMC 1244TX v3
-
- vendor.id pci 0x1114
-+vendor.name Atmel Corporation
-
- vendor.id pci 0x1114
-&device.id pci 0x0506
-+device.name 802.11b Wireless Network Adaptor (at76c506)
-
- vendor.id pci 0x1115
-+vendor.name 3D Labs
-
- vendor.id pci 0x1116
-+vendor.name Data Translation
-
- vendor.id pci 0x1116
-&device.id pci 0x0022
-+device.name DT3001
-
- vendor.id pci 0x1116
-&device.id pci 0x0023
-+device.name DT3002
-
- vendor.id pci 0x1116
-&device.id pci 0x0024
-+device.name DT3003
-
- vendor.id pci 0x1116
-&device.id pci 0x0025
-+device.name DT3004
-
- vendor.id pci 0x1116
-&device.id pci 0x0026
-+device.name DT3005
-
- vendor.id pci 0x1116
-&device.id pci 0x0027
-+device.name DT3001-PGL
-
- vendor.id pci 0x1116
-&device.id pci 0x0028
-+device.name DT3003-PGL
-
- vendor.id pci 0x1117
-+vendor.name Datacube, Inc
-
- vendor.id pci 0x1117
-&device.id pci 0x9500
-+device.name Max-1C SVGA card
-
- vendor.id pci 0x1117
-&device.id pci 0x9501
-+device.name Max-1C image processing
-
- vendor.id pci 0x1118
-+vendor.name Berg Electronics
-
- vendor.id pci 0x1119
-+vendor.name ICP Vortex Computersysteme GmbH
-
- vendor.id pci 0x1119
-&device.id pci 0x0000
-+device.name GDT 6000/6020/6050
-
- vendor.id pci 0x1119
-&device.id pci 0x0001
-+device.name GDT 6000B/6010
-
- vendor.id pci 0x1119
-&device.id pci 0x0002
-+device.name GDT 6110/6510
-
- vendor.id pci 0x1119
-&device.id pci 0x0003
-+device.name GDT 6120/6520
-
- vendor.id pci 0x1119
-&device.id pci 0x0004
-+device.name GDT 6530
-
- vendor.id pci 0x1119
-&device.id pci 0x0005
-+device.name GDT 6550
-
- vendor.id pci 0x1119
-&device.id pci 0x0006
-+device.name GDT 6117/6517
-
- vendor.id pci 0x1119
-&device.id pci 0x0007
-+device.name GDT 6127/6527
-
- vendor.id pci 0x1119
-&device.id pci 0x0008
-+device.name GDT 6537
-
- vendor.id pci 0x1119
-&device.id pci 0x0009
-+device.name GDT 6557/6557-ECC
-
- vendor.id pci 0x1119
-&device.id pci 0x000a
-+device.name GDT 6115/6515
-
- vendor.id pci 0x1119
-&device.id pci 0x000b
-+device.name GDT 6125/6525
-
- vendor.id pci 0x1119
-&device.id pci 0x000c
-+device.name GDT 6535
-
- vendor.id pci 0x1119
-&device.id pci 0x000d
-+device.name GDT 6555
-
- vendor.id pci 0x1119
-&device.id pci 0x0010
-+device.name GDT 6115/6515
-
- vendor.id pci 0x1119
-&device.id pci 0x0011
-+device.name GDT 6125/6525
-
- vendor.id pci 0x1119
-&device.id pci 0x0012
-+device.name GDT 6535
-
- vendor.id pci 0x1119
-&device.id pci 0x0013
-+device.name GDT 6555/6555-ECC
-
- vendor.id pci 0x1119
-&device.id pci 0x0100
-+device.name GDT 6117RP/6517RP
-
- vendor.id pci 0x1119
-&device.id pci 0x0101
-+device.name GDT 6127RP/6527RP
-
- vendor.id pci 0x1119
-&device.id pci 0x0102
-+device.name GDT 6537RP
-
- vendor.id pci 0x1119
-&device.id pci 0x0103
-+device.name GDT 6557RP
-
- vendor.id pci 0x1119
-&device.id pci 0x0104
-+device.name GDT 6111RP/6511RP
-
- vendor.id pci 0x1119
-&device.id pci 0x0105
-+device.name GDT 6121RP/6521RP
-
- vendor.id pci 0x1119
-&device.id pci 0x0110
-+device.name GDT 6117RD/6517RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0111
-+device.name GDT 6127RD/6527RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0112
-+device.name GDT 6537RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0113
-+device.name GDT 6557RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0114
-+device.name GDT 6111RD/6511RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0115
-+device.name GDT 6121RD/6521RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0118
-+device.name GDT 6118RD/6518RD/6618RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0119
-+device.name GDT 6128RD/6528RD/6628RD
-
- vendor.id pci 0x1119
-&device.id pci 0x011a
-+device.name GDT 6538RD/6638RD
-
- vendor.id pci 0x1119
-&device.id pci 0x011b
-+device.name GDT 6558RD/6658RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0120
-+device.name GDT 6117RP2/6517RP2
-
- vendor.id pci 0x1119
-&device.id pci 0x0121
-+device.name GDT 6127RP2/6527RP2
-
- vendor.id pci 0x1119
-&device.id pci 0x0122
-+device.name GDT 6537RP2
-
- vendor.id pci 0x1119
-&device.id pci 0x0123
-+device.name GDT 6557RP2
-
- vendor.id pci 0x1119
-&device.id pci 0x0124
-+device.name GDT 6111RP2/6511RP2
-
- vendor.id pci 0x1119
-&device.id pci 0x0125
-+device.name GDT 6121RP2/6521RP2
-
- vendor.id pci 0x1119
-&device.id pci 0x0136
-+device.name GDT 6113RS/6513RS
-
- vendor.id pci 0x1119
-&device.id pci 0x0137
-+device.name GDT 6123RS/6523RS
-
- vendor.id pci 0x1119
-&device.id pci 0x0138
-+device.name GDT 6118RS/6518RS/6618RS
-
- vendor.id pci 0x1119
-&device.id pci 0x0139
-+device.name GDT 6128RS/6528RS/6628RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013a
-+device.name GDT 6538RS/6638RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013b
-+device.name GDT 6558RS/6658RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013c
-+device.name GDT 6533RS/6633RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013d
-+device.name GDT 6543RS/6643RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013e
-+device.name GDT 6553RS/6653RS
-
- vendor.id pci 0x1119
-&device.id pci 0x013f
-+device.name GDT 6563RS/6663RS
-
- vendor.id pci 0x1119
-&device.id pci 0x0166
-+device.name GDT 7113RN/7513RN/7613RN
-
- vendor.id pci 0x1119
-&device.id pci 0x0167
-+device.name GDT 7123RN/7523RN/7623RN
-
- vendor.id pci 0x1119
-&device.id pci 0x0168
-+device.name GDT 7118RN/7518RN/7518RN
-
- vendor.id pci 0x1119
-&device.id pci 0x0169
-+device.name GDT 7128RN/7528RN/7628RN
-
- vendor.id pci 0x1119
-&device.id pci 0x016a
-+device.name GDT 7538RN/7638RN
-
- vendor.id pci 0x1119
-&device.id pci 0x016b
-+device.name GDT 7558RN/7658RN
-
- vendor.id pci 0x1119
-&device.id pci 0x016c
-+device.name GDT 7533RN/7633RN
-
- vendor.id pci 0x1119
-&device.id pci 0x016d
-+device.name GDT 7543RN/7643RN
-
- vendor.id pci 0x1119
-&device.id pci 0x016e
-+device.name GDT 7553RN/7653RN
-
- vendor.id pci 0x1119
-&device.id pci 0x016f
-+device.name GDT 7563RN/7663RN
-
- vendor.id pci 0x1119
-&device.id pci 0x01d6
-+device.name GDT 4x13RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01d7
-+device.name GDT 4x23RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01f6
-+device.name GDT 8x13RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01f7
-+device.name GDT 8x23RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01fc
-+device.name GDT 8x33RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01fd
-+device.name GDT 8x43RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01fe
-+device.name GDT 8x53RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x01ff
-+device.name GDT 8x63RZ
-
- vendor.id pci 0x1119
-&device.id pci 0x0210
-+device.name GDT 6519RD/6619RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0211
-+device.name GDT 6529RD/6629RD
-
- vendor.id pci 0x1119
-&device.id pci 0x0260
-+device.name GDT 7519RN/7619RN
-
- vendor.id pci 0x1119
-&device.id pci 0x0261
-+device.name GDT 7529RN/7629RN
-
- vendor.id pci 0x1119
-&device.id pci 0x02ff
-+device.name GDT MAXRP
-
- vendor.id pci 0x1119
-&device.id pci 0x0300
-+device.name GDT NEWRX
-
- vendor.id pci 0x111a
-+vendor.name Efficient Networks, Inc
-
- vendor.id pci 0x111a
-&device.id pci 0x0000
-+device.name 155P-MF1 (FPGA)
-
- vendor.id pci 0x111a
-&device.id pci 0x0002
-+device.name 155P-MF1 (ASIC)
-
- vendor.id pci 0x111a
-&device.id pci 0x0003
-+device.name ENI-25P ATM
-
- vendor.id pci 0x111a
-&device.id pci 0x0003
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0000
-+subdevice.name ENI-25p Miniport ATM Adapter
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-+device.name SpeedStream (LANAI)
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0001
-+subdevice.name ENI-3010 ATM
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0009
-+subdevice.name ENI-3060 ADSL (VPI=0)
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0101
-+subdevice.name ENI-3010 ATM
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0109
-+subdevice.name ENI-3060CO ADSL (VPI=0)
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0809
-+subdevice.name ENI-3060 ADSL (VPI=0 or 8)
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0909
-+subdevice.name ENI-3060CO ADSL (VPI=0 or 8)
-
- vendor.id pci 0x111a
-&device.id pci 0x0005
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x0a09
-+subdevice.name ENI-3060 ADSL (VPI=<0..15>)
-
- vendor.id pci 0x111a
-&device.id pci 0x0007
-+device.name SpeedStream ADSL
-
- vendor.id pci 0x111a
-&device.id pci 0x0007
-&subvendor.id pci 0x111a
-&subdevice.id pci 0x1001
-+subdevice.name ENI-3061 ADSL [ASIC]
-
- vendor.id pci 0x111a
-&device.id pci 0x1203
-+device.name SpeedStream 1023 Wireless PCI Adapter
-
- vendor.id pci 0x111b
-+vendor.name Teledyne Electronic Systems
-
- vendor.id pci 0x111c
-+vendor.name Tricord Systems Inc.
-
- vendor.id pci 0x111c
-&device.id pci 0x0001
-+device.name Powerbis Bridge
-
- vendor.id pci 0x111d
-+vendor.name Integrated Device Technology, Inc.
-
- vendor.id pci 0x111d
-&device.id pci 0x0001
-+device.name IDT77201/77211 155Mbps ATM SAR Controller [NICStAR]
-
- vendor.id pci 0x111d
-&device.id pci 0x0003
-+device.name IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller
-
- vendor.id pci 0x111d
-&device.id pci 0x0004
-+device.name IDT77V252 155Mbps ATM MICRO ABR SAR Controller
-
- vendor.id pci 0x111d
-&device.id pci 0x0005
-+device.name IDT77V222 155Mbps ATM MICRO ABR SAR Controller
-
- vendor.id pci 0x111e
-+vendor.name Eldec
-
- vendor.id pci 0x111f
-+vendor.name Precision Digital Images
-
- vendor.id pci 0x111f
-&device.id pci 0x4a47
-+device.name Precision MX Video engine interface
-
- vendor.id pci 0x111f
-&device.id pci 0x5243
-+device.name Frame capture bus interface
-
- vendor.id pci 0x1120
-+vendor.name EMC Corporation
-
- vendor.id pci 0x1121
-+vendor.name Zilog
-
- vendor.id pci 0x1122
-+vendor.name Multi-tech Systems, Inc.
-
- vendor.id pci 0x1123
-+vendor.name Excellent Design, Inc.
-
- vendor.id pci 0x1124
-+vendor.name Leutron Vision AG
-
- vendor.id pci 0x1125
-+vendor.name Eurocore
-
- vendor.id pci 0x1126
-+vendor.name Vigra
-
- vendor.id pci 0x1127
-+vendor.name FORE Systems Inc
-
- vendor.id pci 0x1127
-&device.id pci 0x0200
-+device.name ForeRunner PCA-200 ATM
-
- vendor.id pci 0x1127
-&device.id pci 0x0210
-+device.name PCA-200PC
-
- vendor.id pci 0x1127
-&device.id pci 0x0250
-+device.name ATM
-
- vendor.id pci 0x1127
-&device.id pci 0x0300
-+device.name ForeRunner PCA-200EPC ATM
-
- vendor.id pci 0x1127
-&device.id pci 0x0310
-+device.name ATM
-
- vendor.id pci 0x1127
-&device.id pci 0x0400
-+device.name ForeRunnerHE ATM Adapter
-
- vendor.id pci 0x1127
-&device.id pci 0x0400
-&subvendor.id pci 0x1127
-&subdevice.id pci 0x0400
-+subdevice.name ForeRunnerHE ATM
-
- vendor.id pci 0x1129
-+vendor.name Firmworks
-
- vendor.id pci 0x112a
-+vendor.name Hermes Electronics Company, Ltd.
-
- vendor.id pci 0x112b
-+vendor.name Linotype - Hell AG
-
- vendor.id pci 0x112c
-+vendor.name Zenith Data Systems
-
- vendor.id pci 0x112d
-+vendor.name Ravicad
-
- vendor.id pci 0x112e
-+vendor.name Infomedia Microelectronics Inc.
-
- vendor.id pci 0x112f
-+vendor.name Imaging Technology Inc
-
- vendor.id pci 0x112f
-&device.id pci 0x0000
-+device.name MVC IC-PCI
-
- vendor.id pci 0x112f
-&device.id pci 0x0001
-+device.name MVC IM-PCI Video frame grabber/processor
-
- vendor.id pci 0x1130
-+vendor.name Computervision
-
- vendor.id pci 0x1131
-+vendor.name Philips Semiconductors
-
- vendor.id pci 0x1131
-&device.id pci 0x1561
-+device.name USB 1.1 Host Controller
-
- vendor.id pci 0x1131
-&device.id pci 0x1562
-+device.name USB 2.0 Host Controller
-
- vendor.id pci 0x1131
-&device.id pci 0x3400
-+device.name SmartPCI56(UCB1500) 56K Modem
-
- vendor.id pci 0x1131
-&device.id pci 0x5400
-+device.name TriMedia TM1000/1100
-
- vendor.id pci 0x1131
-&device.id pci 0x5402
-+device.name TriMedia TM-1300
-
- vendor.id pci 0x1131
-&device.id pci 0x7130
-+device.name SAA7130 Video Broadcast Decoder
-
- vendor.id pci 0x1131
-&device.id pci 0x7130
-&subvendor.id pci 0x5168
-&subdevice.id pci 0x0138
-+subdevice.name LiveView FlyVideo 2000
-
- vendor.id pci 0x1131
-&device.id pci 0x7133
-+device.name SAA713X Audio+video broadcast decoder
-
- vendor.id pci 0x1131
-&device.id pci 0x7133
-&subvendor.id pci 0x5168
-&subdevice.id pci 0x0138
-+subdevice.name LifeView FlyVideo 3000
-
- vendor.id pci 0x1131
-&device.id pci 0x7133
-&subvendor.id pci 0x5168
-&subdevice.id pci 0x0212
-+subdevice.name LifeView FlyTV Platinum mini
-
- vendor.id pci 0x1131
-&device.id pci 0x7134
-+device.name SAA7134
-
- vendor.id pci 0x1131
-&device.id pci 0x7135
-+device.name SAA7135 Audio+video broadcast decoder
-
- vendor.id pci 0x1131
-&device.id pci 0x7145
-+device.name SAA7145
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-+device.name SAA7146
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x0000
-+subdevice.name Fujitsu/Siemens DVB-C card rev1.5
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x110a
-&subdevice.id pci 0xffff
-+subdevice.name Fujitsu/Siemens DVB-C card rev1.5
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x1131
-&subdevice.id pci 0x4f56
-+subdevice.name KNC1 DVB-S Budget
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x1131
-&subdevice.id pci 0x4f61
-+subdevice.name Fujitsu-Siemens Activy DVB-S Budget
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x114b
-&subdevice.id pci 0x2003
-+subdevice.name DVRaptor Video Edit/Capture Card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0006
-+subdevice.name DV500 Overlay
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x000a
-+subdevice.name DV500 Overlay
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0000
-+subdevice.name Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0001
-+subdevice.name Technotrend/Hauppauge DVB card rev1.3 or rev1.6
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0002
-+subdevice.name Technotrend/Hauppauge DVB card rev2.1
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0003
-+subdevice.name Technotrend/Hauppauge DVB card rev2.1
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0004
-+subdevice.name Technotrend/Hauppauge DVB card rev2.1
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0006
-+subdevice.name Technotrend/Hauppauge DVB card rev1.3 or rev1.6
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x0008
-+subdevice.name Technotrend/Hauppauge DVB-T
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x000a
-+subdevice.name Octal/Technotrend DVB-C for iTV
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1003
-+subdevice.name Technotrend-Budget / Hauppauge WinTV-NOVA-S DVB card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1004
-+subdevice.name Technotrend-Budget / Hauppauge WinTV-NOVA-C DVB card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1005
-+subdevice.name Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x100c
-+subdevice.name Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x100f
-+subdevice.name Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1011
-+subdevice.name Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1013
-+subdevice.name SATELCO Multimedia DVB
-
- vendor.id pci 0x1131
-&device.id pci 0x7146
-&subvendor.id pci 0x13c2
-&subdevice.id pci 0x1102
-+subdevice.name Technotrend/Hauppauge DVB card rev2.1
-
- vendor.id pci 0x1132
-+vendor.name Mitel Corp.
-
- vendor.id pci 0x1133
-+vendor.name Eicon Networks Corporation
-
- vendor.id pci 0x1133
-&device.id pci 0x7901
-+device.name EiconCard S90
-
- vendor.id pci 0x1133
-&device.id pci 0x7902
-+device.name EiconCard S90
-
- vendor.id pci 0x1133
-&device.id pci 0x7911
-+device.name EiconCard S91
-
- vendor.id pci 0x1133
-&device.id pci 0x7912
-+device.name EiconCard S91
-
- vendor.id pci 0x1133
-&device.id pci 0x7941
-+device.name EiconCard S94
-
- vendor.id pci 0x1133
-&device.id pci 0x7942
-+device.name EiconCard S94
-
- vendor.id pci 0x1133
-&device.id pci 0x7943
-+device.name EiconCard S94
-
- vendor.id pci 0x1133
-&device.id pci 0x7944
-+device.name EiconCard S94
-
- vendor.id pci 0x1133
-&device.id pci 0xb921
-+device.name EiconCard P92
-
- vendor.id pci 0x1133
-&device.id pci 0xb922
-+device.name EiconCard P92
-
- vendor.id pci 0x1133
-&device.id pci 0xb923
-+device.name EiconCard P92
-
- vendor.id pci 0x1133
-&device.id pci 0xe001
-+device.name Diva Pro 2.0 S/T
-
- vendor.id pci 0x1133
-&device.id pci 0xe002
-+device.name Diva 2.0 S/T PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe003
-+device.name Diva Pro 2.0 U
-
- vendor.id pci 0x1133
-&device.id pci 0xe004
-+device.name Diva 2.0 U PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe005
-+device.name Diva 2.01 S/T PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe006
-+device.name Diva CT S/T PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe007
-+device.name Diva CT U PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe008
-+device.name Diva CT Lite S/T PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe009
-+device.name Diva CT Lite U PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe00a
-+device.name Diva ISDN+V.90 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe00b
-+device.name Diva 2.02 PCI S/T
-
- vendor.id pci 0x1133
-&device.id pci 0xe00c
-+device.name Diva 2.02 PCI U
-
- vendor.id pci 0x1133
-&device.id pci 0xe00d
-+device.name Diva ISDN Pro 3.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe00e
-+device.name Diva ISDN+CT S/T PCI Rev 2
-
- vendor.id pci 0x1133
-&device.id pci 0xe010
-+device.name Diva Server BRI-2M PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe010
-&subvendor.id pci 0x110a
-&subdevice.id pci 0x0021
-+subdevice.name Fujitsu Siemens ISDN S0
-
- vendor.id pci 0x1133
-&device.id pci 0xe010
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server BRI-2M PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe011
-+device.name Diva Server BRI S/T Rev 2
-
- vendor.id pci 0x1133
-&device.id pci 0xe012
-+device.name Diva Server 4BRI-8M PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe012
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server 4BRI-8M PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe013
-+device.name Diva Server 4BRI Rev 2
-
- vendor.id pci 0x1133
-&device.id pci 0xe013
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1300
-+subdevice.name Diva Server V-4BRI-8
-
- vendor.id pci 0x1133
-&device.id pci 0xe013
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe013
-+subdevice.name Diva Server 4BRI-8M 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe013
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server 4BRI-8M 2.0 PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe014
-+device.name Diva Server PRI-30M PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe014
-&subvendor.id pci 0x0008
-&subdevice.id pci 0x0100
-+subdevice.name Diva Server PRI-30M PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe014
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server PRI-30M PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe015
-+device.name DIVA Server PRI Rev 2
-
- vendor.id pci 0x1133
-&device.id pci 0xe015
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe015
-+subdevice.name Diva Server PRI 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe015
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server PRI 2.0 PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe016
-+device.name Diva Server Voice 4BRI PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe016
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server PRI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe017
-+device.name Diva Server Voice 4BRI Rev 2
-
- vendor.id pci 0x1133
-&device.id pci 0xe017
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe017
-+subdevice.name Diva Server Voice 4BRI-8M 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe017
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server Voice 4BRI-8M 2.0 PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe018
-+device.name Diva Server BRI-2M 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe018
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1800
-+subdevice.name Diva Server V-BRI-2
-
- vendor.id pci 0x1133
-&device.id pci 0xe018
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe018
-+subdevice.name Diva Server BRI-2M 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe018
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server BRI-2M 2.0 PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe019
-+device.name Diva Server Voice PRI Rev 2
-
- vendor.id pci 0x1133
-&device.id pci 0xe019
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe019
-+subdevice.name Diva Server Voice PRI 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe019
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server Voice PRI 2.0 PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01a
-+device.name Diva Server 2FX
-
- vendor.id pci 0x1133
-&device.id pci 0xe01b
-+device.name Diva Server Voice BRI-2M 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe01b
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe01b
-+subdevice.name Diva Server Voice BRI-2M 2.0 PCI
-
- vendor.id pci 0x1133
-&device.id pci 0xe01b
-&subvendor.id pci 0x8001
-&subdevice.id pci 0x0014
-+subdevice.name Diva Server Voice BRI-2M 2.0 PCI Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-+device.name Diva Server PRI Rev 3
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c01
-+subdevice.name Diva Server PRI/E1/T1-8
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c02
-+subdevice.name Diva Server PRI/T1-24
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c03
-+subdevice.name Diva Server PRI/E1-30
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c04
-+subdevice.name Diva Server PRI/E1/T1
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c05
-+subdevice.name Diva Server V-PRI/T1-24
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c06
-+subdevice.name Diva Server V-PRI/E1-30
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c07
-+subdevice.name Diva Server PRI/E1/T1-8 Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c08
-+subdevice.name Diva Server PRI/T1-24 Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c09
-+subdevice.name Diva Server PRI/E1-30 Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c0a
-+subdevice.name Diva Server PRI/E1/T1 Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c0b
-+subdevice.name Diva Server V-PRI/T1-24 Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01c
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1c0c
-+subdevice.name Diva Server V-PRI/E1-30 Cornet NQ
-
- vendor.id pci 0x1133
-&device.id pci 0xe01e
-+device.name Diva Server 2PRI
-
- vendor.id pci 0x1133
-&device.id pci 0xe01e
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1e00
-+subdevice.name Diva Server V-2PRI/E1-60
-
- vendor.id pci 0x1133
-&device.id pci 0xe01e
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1e01
-+subdevice.name Diva Server V-2PRI/T1-48
-
- vendor.id pci 0x1133
-&device.id pci 0xe01e
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1e02
-+subdevice.name Diva Server 2PRI/E1-60
-
- vendor.id pci 0x1133
-&device.id pci 0xe01e
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x1e03
-+subdevice.name Diva Server 2PRI/T1-48
-
- vendor.id pci 0x1133
-&device.id pci 0xe020
-+device.name Diva Server 4PRI
-
- vendor.id pci 0x1133
-&device.id pci 0xe020
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x2000
-+subdevice.name Diva Server V-4PRI/E1-120
-
- vendor.id pci 0x1133
-&device.id pci 0xe020
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x2001
-+subdevice.name Diva Server V-4PRI/T1-96
-
- vendor.id pci 0x1133
-&device.id pci 0xe020
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x2002
-+subdevice.name Diva Server 4PRI/E1-120
-
- vendor.id pci 0x1133
-&device.id pci 0xe020
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x2003
-+subdevice.name Diva Server 4PRI/T1-96
-
- vendor.id pci 0x1133
-&device.id pci 0xe024
-+device.name Diva Server Analog-4P
-
- vendor.id pci 0x1133
-&device.id pci 0xe024
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x2400
-+subdevice.name Diva Server V-Analog-4P
-
- vendor.id pci 0x1133
-&device.id pci 0xe024
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe024
-+subdevice.name Diva Server Analog-4P
-
- vendor.id pci 0x1133
-&device.id pci 0xe028
-+device.name Diva Server Analog-8P
-
- vendor.id pci 0x1133
-&device.id pci 0xe028
-&subvendor.id pci 0x1133
-&subdevice.id pci 0x2800
-+subdevice.name Diva Server V-Analog-8P
-
- vendor.id pci 0x1133
-&device.id pci 0xe028
-&subvendor.id pci 0x1133
-&subdevice.id pci 0xe028
-+subdevice.name Diva Server Analog-8P
-
- vendor.id pci 0x1134
-+vendor.name Mercury Computer Systems
-
- vendor.id pci 0x1134
-&device.id pci 0x0001
-+device.name Raceway Bridge
-
- vendor.id pci 0x1134
-&device.id pci 0x0002
-+device.name Dual PCI to RapidIO Bridge
-
- vendor.id pci 0x1135
-+vendor.name Fuji Xerox Co Ltd
-
- vendor.id pci 0x1135
-&device.id pci 0x0001
-+device.name Printer controller
-
- vendor.id pci 0x1136
-+vendor.name Momentum Data Systems
-
- vendor.id pci 0x1137
-+vendor.name Cisco Systems Inc
-
- vendor.id pci 0x1138
-+vendor.name Ziatech Corporation
-
- vendor.id pci 0x1138
-&device.id pci 0x8905
-+device.name 8905 [STD 32 Bridge]
-
- vendor.id pci 0x1139
-+vendor.name Dynamic Pictures, Inc
-
- vendor.id pci 0x1139
-&device.id pci 0x0001
-+device.name VGA Compatable 3D Graphics
-
- vendor.id pci 0x113a
-+vendor.name FWB Inc
-
- vendor.id pci 0x113b
-+vendor.name Network Computing Devices
-
- vendor.id pci 0x113c
-+vendor.name Cyclone Microsystems, Inc.
-
- vendor.id pci 0x113c
-&device.id pci 0x0000
-+device.name PCI-9060 i960 Bridge
-
- vendor.id pci 0x113c
-&device.id pci 0x0001
-+device.name PCI-SDK [PCI i960 Evaluation Platform]
-
- vendor.id pci 0x113c
-&device.id pci 0x0911
-+device.name PCI-911 [i960Jx-based Intelligent I/O Controller]
-
- vendor.id pci 0x113c
-&device.id pci 0x0912
-+device.name PCI-912 [i960CF-based Intelligent I/O Controller]
-
- vendor.id pci 0x113c
-&device.id pci 0x0913
-+device.name PCI-913
-
- vendor.id pci 0x113c
-&device.id pci 0x0914
-+device.name PCI-914 [I/O Controller w/ secondary PCI bus]
-
- vendor.id pci 0x113d
-+vendor.name Leading Edge Products Inc
-
- vendor.id pci 0x113e
-+vendor.name Sanyo Electric Co - Computer Engineering Dept
-
- vendor.id pci 0x113f
-+vendor.name Equinox Systems, Inc.
-
- vendor.id pci 0x113f
-&device.id pci 0x0808
-+device.name SST-64P Adapter
-
- vendor.id pci 0x113f
-&device.id pci 0x1010
-+device.name SST-128P Adapter
-
- vendor.id pci 0x113f
-&device.id pci 0x80c0
-+device.name SST-16P DB Adapter
-
- vendor.id pci 0x113f
-&device.id pci 0x80c4
-+device.name SST-16P RJ Adapter
-
- vendor.id pci 0x113f
-&device.id pci 0x80c8
-+device.name SST-16P Adapter
-
- vendor.id pci 0x113f
-&device.id pci 0x8888
-+device.name SST-4P Adapter
-
- vendor.id pci 0x113f
-&device.id pci 0x9090
-+device.name SST-8P Adapter
-
- vendor.id pci 0x1140
-+vendor.name Intervoice Inc
-
- vendor.id pci 0x1141
-+vendor.name Crest Microsystem Inc
-
- vendor.id pci 0x1142
-+vendor.name Alliance Semiconductor Corporation
-
- vendor.id pci 0x1142
-&device.id pci 0x3210
-+device.name AP6410
-
- vendor.id pci 0x1142
-&device.id pci 0x6422
-+device.name ProVideo 6422
-
- vendor.id pci 0x1142
-&device.id pci 0x6424
-+device.name ProVideo 6424
-
- vendor.id pci 0x1142
-&device.id pci 0x6425
-+device.name ProMotion AT25
-
- vendor.id pci 0x1142
-&device.id pci 0x643d
-+device.name ProMotion AT3D
-
- vendor.id pci 0x1143
-+vendor.name NetPower, Inc
-
- vendor.id pci 0x1144
-+vendor.name Cincinnati Milacron
-
- vendor.id pci 0x1144
-&device.id pci 0x0001
-+device.name Noservo controller
-
- vendor.id pci 0x1145
-+vendor.name Workbit Corporation
-
- vendor.id pci 0x1145
-&device.id pci 0x8007
-+device.name NinjaSCSI-32 Workbit
-
- vendor.id pci 0x1145
-&device.id pci 0xf007
-+device.name NinjaSCSI-32 KME
-
- vendor.id pci 0x1145
-&device.id pci 0xf010
-+device.name NinjaSCSI-32 Workbit
-
- vendor.id pci 0x1145
-&device.id pci 0xf012
-+device.name NinjaSCSI-32 Logitec
-
- vendor.id pci 0x1145
-&device.id pci 0xf013
-+device.name NinjaSCSI-32 Logitec
-
- vendor.id pci 0x1145
-&device.id pci 0xf015
-+device.name NinjaSCSI-32 Melco
-
- vendor.id pci 0x1146
-+vendor.name Force Computers
-
- vendor.id pci 0x1147
-+vendor.name Interface Corp
-
- vendor.id pci 0x1148
-+vendor.name SysKonnect
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-+device.name FDDI Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb03b
-+subdevice.name Netelligent 100 FDDI DAS Fibre SC
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb03c
-+subdevice.name Netelligent 100 FDDI SAS Fibre SC
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb03d
-+subdevice.name Netelligent 100 FDDI DAS UTP
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb03e
-+subdevice.name Netelligent 100 FDDI SAS UTP
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb03f
-+subdevice.name Netelligent 100 FDDI SAS Fibre MIC
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5521
-+subdevice.name FDDI SK-5521 (SK-NET FDDI-UP)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5522
-+subdevice.name FDDI SK-5522 (SK-NET FDDI-UP DAS)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5541
-+subdevice.name FDDI SK-5541 (SK-NET FDDI-FP)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5543
-+subdevice.name FDDI SK-5543 (SK-NET FDDI-LP)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5544
-+subdevice.name FDDI SK-5544 (SK-NET FDDI-LP DAS)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5821
-+subdevice.name FDDI SK-5821 (SK-NET FDDI-UP64)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5822
-+subdevice.name FDDI SK-5822 (SK-NET FDDI-UP64 DAS)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5841
-+subdevice.name FDDI SK-5841 (SK-NET FDDI-FP64)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5843
-+subdevice.name FDDI SK-5843 (SK-NET FDDI-LP64)
-
- vendor.id pci 0x1148
-&device.id pci 0x4000
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5844
-+subdevice.name FDDI SK-5844 (SK-NET FDDI-LP64 DAS)
-
- vendor.id pci 0x1148
-&device.id pci 0x4200
-+device.name Token Ring adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-+device.name SK-98xx Gigabit Ethernet Server Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9821
-+subdevice.name SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9822
-+subdevice.name SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9841
-+subdevice.name SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9842
-+subdevice.name SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9843
-+subdevice.name SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9844
-+subdevice.name SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9861
-+subdevice.name SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9862
-+subdevice.name SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9871
-+subdevice.name SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9872
-+subdevice.name SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2970
-+subdevice.name AT-2970SX Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2971
-+subdevice.name AT-2970LX Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2972
-+subdevice.name AT-2970TX Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2973
-+subdevice.name AT-2971SX Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2974
-+subdevice.name AT-2971T Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2975
-+subdevice.name AT-2970SX/2SC Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2976
-+subdevice.name AT-2970LX/2SC Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4300
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2977
-+subdevice.name AT-2970TX/2TX Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-+device.name SK-98xx V2.0 Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0121
-+subdevice.name Marvell RDK-8001 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0221
-+subdevice.name Marvell RDK-8002 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0321
-+subdevice.name Marvell RDK-8003 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0421
-+subdevice.name Marvell RDK-8004 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0621
-+subdevice.name Marvell RDK-8006 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0721
-+subdevice.name Marvell RDK-8007 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0821
-+subdevice.name Marvell RDK-8008 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x0921
-+subdevice.name Marvell RDK-8009 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x1121
-+subdevice.name Marvell RDK-8011 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x1221
-+subdevice.name Marvell RDK-8012 Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x3221
-+subdevice.name SK-9521 V2.0 10/100/1000Base-T Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5021
-+subdevice.name SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5041
-+subdevice.name SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5043
-+subdevice.name SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5051
-+subdevice.name SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5061
-+subdevice.name SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x5071
-+subdevice.name SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4320
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9521
-+subdevice.name SK-9521 10/100/1000Base-T Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4400
-+device.name SK-9Dxx Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x4500
-+device.name SK-9Mxx Gigabit Ethernet Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-+device.name SK-9Exx 10/100/1000Base-T Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x2100
-+subdevice.name SK-9E21 Server Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x21d0
-+subdevice.name SK-9E21D 10/100/1000Base-T Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x2200
-+subdevice.name SK-9E22 Server Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x8100
-+subdevice.name SK-9E81 Server Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x8200
-+subdevice.name SK-9E82 Server Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9100
-+subdevice.name SK-9E91 Server Adapter
-
- vendor.id pci 0x1148
-&device.id pci 0x9e00
-&subvendor.id pci 0x1148
-&subdevice.id pci 0x9200
-+subdevice.name SK-9E92 Server Adapter
-
- vendor.id pci 0x1149
-+vendor.name Win System Corporation
-
- vendor.id pci 0x114a
-+vendor.name VMIC
-
- vendor.id pci 0x114a
-&device.id pci 0x5579
-+device.name VMIPCI-5579 (Reflective Memory Card)
-
- vendor.id pci 0x114a
-&device.id pci 0x5587
-+device.name VMIPCI-5587 (Reflective Memory Card)
-
- vendor.id pci 0x114a
-&device.id pci 0x6504
-+device.name VMIC PCI 7755 FPGA
-
- vendor.id pci 0x114a
-&device.id pci 0x7587
-+device.name VMIVME-7587
-
- vendor.id pci 0x114b
-+vendor.name Canopus Co., Ltd
-
- vendor.id pci 0x114c
-+vendor.name Annabooks
-
- vendor.id pci 0x114d
-+vendor.name IC Corporation
-
- vendor.id pci 0x114e
-+vendor.name Nikon Systems Inc
-
- vendor.id pci 0x114f
-+vendor.name Digi International
-
- vendor.id pci 0x114f
-&device.id pci 0x0002
-+device.name AccelePort EPC
-
- vendor.id pci 0x114f
-&device.id pci 0x0003
-+device.name RightSwitch SE-6
-
- vendor.id pci 0x114f
-&device.id pci 0x0004
-+device.name AccelePort Xem
-
- vendor.id pci 0x114f
-&device.id pci 0x0005
-+device.name AccelePort Xr
-
- vendor.id pci 0x114f
-&device.id pci 0x0006
-+device.name AccelePort Xr,C/X
-
- vendor.id pci 0x114f
-&device.id pci 0x0009
-+device.name AccelePort Xr/J
-
- vendor.id pci 0x114f
-&device.id pci 0x000a
-+device.name AccelePort EPC/J
-
- vendor.id pci 0x114f
-&device.id pci 0x000c
-+device.name DataFirePRIme T1 (1-port)
-
- vendor.id pci 0x114f
-&device.id pci 0x000d
-+device.name SyncPort 2-Port (x.25/FR)
-
- vendor.id pci 0x114f
-&device.id pci 0x0011
-+device.name AccelePort 8r EIA-232 (IBM)
-
- vendor.id pci 0x114f
-&device.id pci 0x0012
-+device.name AccelePort 8r EIA-422
-
- vendor.id pci 0x114f
-&device.id pci 0x0013
-+device.name AccelePort Xr
-
- vendor.id pci 0x114f
-&device.id pci 0x0014
-+device.name AccelePort 8r EIA-422
-
- vendor.id pci 0x114f
-&device.id pci 0x0015
-+device.name AccelePort Xem
-
- vendor.id pci 0x114f
-&device.id pci 0x0016
-+device.name AccelePort EPC/X
-
- vendor.id pci 0x114f
-&device.id pci 0x0017
-+device.name AccelePort C/X
-
- vendor.id pci 0x114f
-&device.id pci 0x001a
-+device.name DataFirePRIme E1 (1-port)
-
- vendor.id pci 0x114f
-&device.id pci 0x001b
-+device.name AccelePort C/X (IBM)
-
- vendor.id pci 0x114f
-&device.id pci 0x001d
-+device.name DataFire RAS T1/E1/PRI
-
- vendor.id pci 0x114f
-&device.id pci 0x001d
-&subvendor.id pci 0x114f
-&subdevice.id pci 0x0050
-+subdevice.name DataFire RAS E1 Adapter
-
- vendor.id pci 0x114f
-&device.id pci 0x001d
-&subvendor.id pci 0x114f
-&subdevice.id pci 0x0051
-+subdevice.name DataFire RAS Dual E1 Adapter
-
- vendor.id pci 0x114f
-&device.id pci 0x001d
-&subvendor.id pci 0x114f
-&subdevice.id pci 0x0052
-+subdevice.name DataFire RAS T1 Adapter
-
- vendor.id pci 0x114f
-&device.id pci 0x001d
-&subvendor.id pci 0x114f
-&subdevice.id pci 0x0053
-+subdevice.name DataFire RAS Dual T1 Adapter
-
- vendor.id pci 0x114f
-&device.id pci 0x0023
-+device.name AccelePort RAS
-
- vendor.id pci 0x114f
-&device.id pci 0x0024
-+device.name DataFire RAS B4 ST/U
-
- vendor.id pci 0x114f
-&device.id pci 0x0024
-&subvendor.id pci 0x114f
-&subdevice.id pci 0x0030
-+subdevice.name DataFire RAS BRI U Adapter
-
- vendor.id pci 0x114f
-&device.id pci 0x0024
-&subvendor.id pci 0x114f
-&subdevice.id pci 0x0031
-+subdevice.name DataFire RAS BRI S/T Adapter
-
- vendor.id pci 0x114f
-&device.id pci 0x0026
-+device.name AccelePort 4r 920
-
- vendor.id pci 0x114f
-&device.id pci 0x0027
-+device.name AccelePort Xr 920
-
- vendor.id pci 0x114f
-&device.id pci 0x0028
-+device.name ClassicBoard 4
-
- vendor.id pci 0x114f
-&device.id pci 0x0029
-+device.name ClassicBoard 8
-
- vendor.id pci 0x114f
-&device.id pci 0x0034
-+device.name AccelePort 2r 920
-
- vendor.id pci 0x114f
-&device.id pci 0x0035
-+device.name DataFire DSP T1/E1/PRI cPCI
-
- vendor.id pci 0x114f
-&device.id pci 0x0040
-+device.name AccelePort Xp
-
- vendor.id pci 0x114f
-&device.id pci 0x0042
-+device.name AccelePort 2p
-
- vendor.id pci 0x114f
-&device.id pci 0x0043
-+device.name AccelePort 4p
-
- vendor.id pci 0x114f
-&device.id pci 0x0044
-+device.name AccelePort 8p
-
- vendor.id pci 0x114f
-&device.id pci 0x0045
-+device.name AccelePort 16p
-
- vendor.id pci 0x114f
-&device.id pci 0x004e
-+device.name AccelePort 32p
-
- vendor.id pci 0x114f
-&device.id pci 0x0070
-+device.name Datafire Micro V IOM2 (Europe)
-
- vendor.id pci 0x114f
-&device.id pci 0x0071
-+device.name Datafire Micro V (Europe)
-
- vendor.id pci 0x114f
-&device.id pci 0x0072
-+device.name Datafire Micro V IOM2 (North America)
-
- vendor.id pci 0x114f
-&device.id pci 0x0073
-+device.name Datafire Micro V (North America)
-
- vendor.id pci 0x114f
-&device.id pci 0x00b0
-+device.name Digi Neo 4
-
- vendor.id pci 0x114f
-&device.id pci 0x00b1
-+device.name Digi Neo 8
-
- vendor.id pci 0x114f
-&device.id pci 0x00c8
-+device.name Digi Neo 2 DB9
-
- vendor.id pci 0x114f
-&device.id pci 0x00c9
-+device.name Digi Neo 2 DB9 PRI
-
- vendor.id pci 0x114f
-&device.id pci 0x00ca
-+device.name Digi Neo 2 RJ45
-
- vendor.id pci 0x114f
-&device.id pci 0x00cb
-+device.name Digi Neo 2 RJ45 PRI
-
- vendor.id pci 0x114f
-&device.id pci 0x00d0
-+device.name ClassicBoard 4 422
-
- vendor.id pci 0x114f
-&device.id pci 0x00d1
-+device.name ClassicBoard 8 422
-
- vendor.id pci 0x114f
-&device.id pci 0x6001
-+device.name Avanstar
-
- vendor.id pci 0x1150
-+vendor.name Thinking Machines Corp
-
- vendor.id pci 0x1151
-+vendor.name JAE Electronics Inc.
-
- vendor.id pci 0x1152
-+vendor.name Megatek
-
- vendor.id pci 0x1153
-+vendor.name Land Win Electronic Corp
-
- vendor.id pci 0x1154
-+vendor.name Melco Inc
-
- vendor.id pci 0x1155
-+vendor.name Pine Technology Ltd
-
- vendor.id pci 0x1156
-+vendor.name Periscope Engineering
-
- vendor.id pci 0x1157
-+vendor.name Avsys Corporation
-
- vendor.id pci 0x1158
-+vendor.name Voarx R & D Inc
-
- vendor.id pci 0x1158
-&device.id pci 0x3011
-+device.name Tokenet/vg 1001/10m anylan
-
- vendor.id pci 0x1158
-&device.id pci 0x9050
-+device.name Lanfleet/Truevalue
-
- vendor.id pci 0x1158
-&device.id pci 0x9051
-+device.name Lanfleet/Truevalue
-
- vendor.id pci 0x1159
-+vendor.name Mutech Corp
-
- vendor.id pci 0x1159
-&device.id pci 0x0001
-+device.name MV-1000
-
- vendor.id pci 0x115a
-+vendor.name Harlequin Ltd
-
- vendor.id pci 0x115b
-+vendor.name Parallax Graphics
-
- vendor.id pci 0x115c
-+vendor.name Photron Ltd.
-
- vendor.id pci 0x115d
-+vendor.name Xircom
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-+device.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0181
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x1181
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x8181
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x9181
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x0181
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x1181
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0181
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x8181
-+subdevice.name EtherExpress PRO/100 Mobile CardBus 32 Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0003
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x9181
-+subdevice.name EtherExpress PRO/100 Mobile CardBus 32 Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0005
-+device.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0005
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0182
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0005
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x1182
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0005
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x0182
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0005
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x1182
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0007
-+device.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0007
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0182
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0007
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x1182
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x0007
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x0182
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x0007
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x1182
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x000b
-+device.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x000b
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0183
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x000b
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x0183
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x000c
-+device.name Mini-PCI V.90 56k Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x000f
-+device.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x000f
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0183
-+subdevice.name 10/100 EtherJet Cardbus Adapter
-
- vendor.id pci 0x115d
-&device.id pci 0x000f
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x0183
-+subdevice.name Cardbus Ethernet 10/100
-
- vendor.id pci 0x115d
-&device.id pci 0x00d4
-+device.name Mini-PCI K56Flex Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0101
-+device.name Cardbus 56k modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0101
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x1081
-+subdevice.name Cardbus 56k Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0103
-+device.name Cardbus Ethernet + 56k Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0103
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x9181
-+subdevice.name Cardbus 56k Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0103
-&subvendor.id pci 0x1115
-&subdevice.id pci 0x1181
-+subdevice.name Cardbus Ethernet 100 + 56k Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0103
-&subvendor.id pci 0x115d
-&subdevice.id pci 0x1181
-+subdevice.name CBEM56G-100 Ethernet + 56k Modem
-
- vendor.id pci 0x115d
-&device.id pci 0x0103
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x9181
-+subdevice.name PRO/100 LAN + Modem56 CardBus
-
- vendor.id pci 0x115e
-+vendor.name Peer Protocols Inc
-
- vendor.id pci 0x115f
-+vendor.name Maxtor Corporation
-
- vendor.id pci 0x1160
-+vendor.name Megasoft Inc
-
- vendor.id pci 0x1161
-+vendor.name PFU Limited
-
- vendor.id pci 0x1162
-+vendor.name OA Laboratory Co Ltd
-
- vendor.id pci 0x1163
-+vendor.name Rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x0001
-+device.name Verite 1000
-
- vendor.id pci 0x1163
-&device.id pci 0x2000
-+device.name Verite V2000/V2100/V2200
-
- vendor.id pci 0x1163
-&device.id pci 0x2000
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x2000
-+subdevice.name Stealth II S220
-
- vendor.id pci 0x1164
-+vendor.name Advanced Peripherals Technologies
-
- vendor.id pci 0x1165
-+vendor.name Imagraph Corporation
-
- vendor.id pci 0x1165
-&device.id pci 0x0001
-+device.name Motion TPEG Recorder/Player with audio
-
- vendor.id pci 0x1166
-+vendor.name ServerWorks
-
- vendor.id pci 0x1166
-&device.id pci 0x0000
-+device.name CMIC-LE
-
- vendor.id pci 0x1166
-&device.id pci 0x0005
-+device.name CNB20-LE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0006
-+device.name CNB20HE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0007
-+device.name CNB20-LE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0008
-+device.name CNB20HE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0009
-+device.name CNB20LE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0010
-+device.name CIOB30
-
- vendor.id pci 0x1166
-&device.id pci 0x0011
-+device.name CMIC-HE
-
- vendor.id pci 0x1166
-&device.id pci 0x0012
-+device.name CMIC-WS Host Bridge (GC-LE chipset)
-
- vendor.id pci 0x1166
-&device.id pci 0x0013
-+device.name CNB20-HE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0014
-+device.name CMIC-LE Host Bridge (GC-LE chipset)
-
- vendor.id pci 0x1166
-&device.id pci 0x0015
-+device.name CMIC-GC Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0016
-+device.name CMIC-GC Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0017
-+device.name GCNB-LE Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0101
-+device.name CIOB-X2 PCI-X I/O Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0110
-+device.name CIOB-E I/O Bridge with Gigabit Ethernet
-
- vendor.id pci 0x1166
-&device.id pci 0x0200
-+device.name OSB4 South Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0201
-+device.name CSB5 South Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0201
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x1166
-&device.id pci 0x0203
-+device.name CSB6 South Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0211
-+device.name OSB4 IDE Controller
-
- vendor.id pci 0x1166
-&device.id pci 0x0212
-+device.name CSB5 IDE Controller
-
- vendor.id pci 0x1166
-&device.id pci 0x0212
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x1166
-&device.id pci 0x0213
-+device.name CSB6 RAID/IDE Controller
-
- vendor.id pci 0x1166
-&device.id pci 0x0217
-+device.name CSB6 IDE Controller
-
- vendor.id pci 0x1166
-&device.id pci 0x0220
-+device.name OSB4/CSB5 OHCI USB Controller
-
- vendor.id pci 0x1166
-&device.id pci 0x0220
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x1166
-&device.id pci 0x0221
-+device.name CSB6 OHCI USB Controller
-
- vendor.id pci 0x1166
-&device.id pci 0x0225
-+device.name CSB5 LPC bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0225
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x1166
-&device.id pci 0x0227
-+device.name GCLE-2 Host Bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0230
-+device.name CSB5 LPC bridge
-
- vendor.id pci 0x1166
-&device.id pci 0x0230
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x1166
-&device.id pci 0x0240
-+device.name K2 SATA
-
- vendor.id pci 0x1167
-+vendor.name Mutoh Industries Inc
-
- vendor.id pci 0x1168
-+vendor.name Thine Electronics Inc
-
- vendor.id pci 0x1169
-+vendor.name Centre for Development of Advanced Computing
-
- vendor.id pci 0x116a
-+vendor.name Polaris Communications
-
- vendor.id pci 0x116a
-&device.id pci 0x6100
-+device.name Bus/Tag Channel
-
- vendor.id pci 0x116a
-&device.id pci 0x6800
-+device.name Escon Channel
-
- vendor.id pci 0x116a
-&device.id pci 0x7100
-+device.name Bus/Tag Channel
-
- vendor.id pci 0x116a
-&device.id pci 0x7800
-+device.name Escon Channel
-
- vendor.id pci 0x116b
-+vendor.name Connectware Inc
-
- vendor.id pci 0x116c
-+vendor.name Intelligent Resources Integrated Systems
-
- vendor.id pci 0x116d
-+vendor.name Martin-Marietta
-
- vendor.id pci 0x116e
-+vendor.name Electronics for Imaging
-
- vendor.id pci 0x116f
-+vendor.name Workstation Technology
-
- vendor.id pci 0x1170
-+vendor.name Inventec Corporation
-
- vendor.id pci 0x1171
-+vendor.name Loughborough Sound Images Plc
-
- vendor.id pci 0x1172
-+vendor.name Altera Corporation
-
- vendor.id pci 0x1173
-+vendor.name Adobe Systems, Inc
-
- vendor.id pci 0x1174
-+vendor.name Bridgeport Machines
-
- vendor.id pci 0x1175
-+vendor.name Mitron Computer Inc.
-
- vendor.id pci 0x1176
-+vendor.name SBE Incorporated
-
- vendor.id pci 0x1177
-+vendor.name Silicon Engineering
-
- vendor.id pci 0x1178
-+vendor.name Alfa, Inc.
-
- vendor.id pci 0x1178
-&device.id pci 0xafa1
-+device.name Fast Ethernet Adapter
-
- vendor.id pci 0x1179
-+vendor.name Toshiba America Info Systems
-
- vendor.id pci 0x1179
-&device.id pci 0x0103
-+device.name EX-IDE Type-B
-
- vendor.id pci 0x1179
-&device.id pci 0x0404
-+device.name DVD Decoder card
-
- vendor.id pci 0x1179
-&device.id pci 0x0406
-+device.name Tecra Video Capture device
-
- vendor.id pci 0x1179
-&device.id pci 0x0407
-+device.name DVD Decoder card (Version 2)
-
- vendor.id pci 0x1179
-&device.id pci 0x0601
-+device.name 601
-
- vendor.id pci 0x1179
-&device.id pci 0x0603
-+device.name ToPIC95 PCI to CardBus Bridge for Notebooks
-
- vendor.id pci 0x1179
-&device.id pci 0x060a
-+device.name ToPIC95
-
- vendor.id pci 0x1179
-&device.id pci 0x060f
-+device.name ToPIC97
-
- vendor.id pci 0x1179
-&device.id pci 0x0617
-+device.name ToPIC100 PCI to Cardbus Bridge with ZV Support
-
- vendor.id pci 0x1179
-&device.id pci 0x0618
-+device.name CPU to PCI and PCI to ISA bridge
-
- vendor.id pci 0x1179
-&device.id pci 0x0701
-+device.name FIR Port
-
- vendor.id pci 0x1179
-&device.id pci 0x0804
-+device.name TC6371AF SmartMedia Controller
-
- vendor.id pci 0x1179
-&device.id pci 0x0805
-+device.name SD TypA Controller
-
- vendor.id pci 0x1179
-&device.id pci 0x0d01
-+device.name FIR Port Type-DO
-
- vendor.id pci 0x1179
-&device.id pci 0x0d01
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name FIR Port Type-DO
-
- vendor.id pci 0x117a
-+vendor.name A-Trend Technology
-
- vendor.id pci 0x117b
-+vendor.name L G Electronics, Inc.
-
- vendor.id pci 0x117c
-+vendor.name Atto Technology
-
- vendor.id pci 0x117d
-+vendor.name Becton & Dickinson
-
- vendor.id pci 0x117e
-+vendor.name T/R Systems
-
- vendor.id pci 0x117f
-+vendor.name Integrated Circuit Systems
-
- vendor.id pci 0x1180
-+vendor.name Ricoh Co Ltd
-
- vendor.id pci 0x1180
-&device.id pci 0x0465
-+device.name RL5c465
-
- vendor.id pci 0x1180
-&device.id pci 0x0466
-+device.name RL5c466
-
- vendor.id pci 0x1180
-&device.id pci 0x0475
-+device.name RL5c475
-
- vendor.id pci 0x1180
-&device.id pci 0x0475
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc006
-+subdevice.name vpr Matrix 170B4 CardBus bridge
-
- vendor.id pci 0x1180
-&device.id pci 0x0476
-+device.name RL5c476 II
-
- vendor.id pci 0x1180
-&device.id pci 0x0476
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0185
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x1180
-&device.id pci 0x0476
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x1180
-&device.id pci 0x0476
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x1180
-&device.id pci 0x0476
-&subvendor.id pci 0x14ef
-&subdevice.id pci 0x0220
-+subdevice.name PCD-RP-220S
-
- vendor.id pci 0x1180
-&device.id pci 0x0477
-+device.name RL5c477
-
- vendor.id pci 0x1180
-&device.id pci 0x0478
-+device.name RL5c478
-
- vendor.id pci 0x1180
-&device.id pci 0x0478
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0184
-+subdevice.name ThinkPad A30p (2653-64G)
-
- vendor.id pci 0x1180
-&device.id pci 0x0522
-+device.name R5C522 IEEE 1394 Controller
-
- vendor.id pci 0x1180
-&device.id pci 0x0522
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01cf
-+subdevice.name ThinkPad A30p (2653-64G)
-
- vendor.id pci 0x1180
-&device.id pci 0x0551
-+device.name R5C551 IEEE 1394 Controller
-
- vendor.id pci 0x1180
-&device.id pci 0x0551
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc006
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x1180
-&device.id pci 0x0552
-+device.name R5C552 IEEE 1394 Controller
-
- vendor.id pci 0x1180
-&device.id pci 0x0552
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0511
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x1181
-+vendor.name Telmatics International
-
- vendor.id pci 0x1183
-+vendor.name Fujikura Ltd
-
- vendor.id pci 0x1184
-+vendor.name Forks Inc
-
- vendor.id pci 0x1185
-+vendor.name Dataworld International Ltd
-
- vendor.id pci 0x1186
-+vendor.name D-Link System Inc
-
- vendor.id pci 0x1186
-&device.id pci 0x0100
-+device.name DC21041
-
- vendor.id pci 0x1186
-&device.id pci 0x1002
-+device.name DL10050 Sundance Ethernet
-
- vendor.id pci 0x1186
-&device.id pci 0x1002
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1002
-+subdevice.name DFE-550TX
-
- vendor.id pci 0x1186
-&device.id pci 0x1002
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1012
-+subdevice.name DFE-580TX
-
- vendor.id pci 0x1186
-&device.id pci 0x1025
-+device.name AirPlus Xtreme G DWL-G650 Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x1026
-+device.name AirXpert DWL-AG650 Wireless Cardbus Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x1043
-+device.name AirXpert DWL-AG650 Wireless Cardbus Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x1300
-+device.name RTL8139 Ethernet
-
- vendor.id pci 0x1186
-&device.id pci 0x1300
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1300
-+subdevice.name DFE-538TX 10/100 Ethernet Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x1300
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x1301
-+subdevice.name DFE-530TX+ 10/100 Ethernet Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x1340
-+device.name DFE-690TXD CardBus PC Card
-
- vendor.id pci 0x1186
-&device.id pci 0x1541
-+device.name DFE-680TXD CardBus PC Card
-
- vendor.id pci 0x1186
-&device.id pci 0x1561
-+device.name DRP-32TXD Cardbus PC Card
-
- vendor.id pci 0x1186
-&device.id pci 0x2027
-+device.name AirPlus Xtreme G DWL-G520 Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3203
-+device.name AirPlus Xtreme G DWL-G520 Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3300
-+device.name DWL-510 2.4GHz Wireless PCI Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3a03
-+device.name AirPro DWL-A650 Wireless Cardbus Adapter(rev.B)
-
- vendor.id pci 0x1186
-&device.id pci 0x3a04
-+device.name AirPro DWL-AB650 Multimode Wireless Cardbus Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3a05
-+device.name AirPro DWL-AB520 Multimode Wireless PCI Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3a07
-+device.name AirXpert DWL-AG650 Wireless Cardbus Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3a08
-+device.name AirXpert DWL-AG520 Wireless PCI Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3a10
-+device.name AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B)
-
- vendor.id pci 0x1186
-&device.id pci 0x3a11
-+device.name AirXpert DWL-AG520 Wireless PCI Adapter(rev.B)
-
- vendor.id pci 0x1186
-&device.id pci 0x3a12
-+device.name AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)
-
- vendor.id pci 0x1186
-&device.id pci 0x3a13
-+device.name AirPlus DWL-G520 Wireless PCI Adapter(rev.B)
-
- vendor.id pci 0x1186
-&device.id pci 0x3a14
-+device.name AirPremier DWL-AG530 Wireless PCI Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3a63
-+device.name AirXpert DWL-AG660 Wireless Cardbus Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x3b05
-+device.name DWL-G650+ CardBus PC Card
-
- vendor.id pci 0x1186
-&device.id pci 0x4000
-+device.name DL2000-based Gigabit Ethernet
-
- vendor.id pci 0x1186
-&device.id pci 0x4c00
-+device.name Gigabit Ethernet Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x4c00
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x4c00
-+subdevice.name DGE-530T Gigabit Ethernet Adapter
-
- vendor.id pci 0x1186
-&device.id pci 0x8400
-+device.name D-Link DWL-650+ CardBus PC Card
-
- vendor.id pci 0x1187
-+vendor.name Advanced Technology Laboratories, Inc.
-
- vendor.id pci 0x1188
-+vendor.name Shima Seiki Manufacturing Ltd.
-
- vendor.id pci 0x1189
-+vendor.name Matsushita Electronics Co Ltd
-
- vendor.id pci 0x118a
-+vendor.name Hilevel Technology
-
- vendor.id pci 0x118b
-+vendor.name Hypertec Pty Limited
-
- vendor.id pci 0x118c
-+vendor.name Corollary, Inc
-
- vendor.id pci 0x118c
-&device.id pci 0x0014
-+device.name PCIB [C-bus II to PCI bus host bridge chip]
-
- vendor.id pci 0x118c
-&device.id pci 0x1117
-+device.name Intel 8-way XEON Profusion Chipset [Cache Coherency Filter]
-
- vendor.id pci 0x118d
-+vendor.name BitFlow Inc
-
- vendor.id pci 0x118d
-&device.id pci 0x0001
-+device.name Raptor-PCI framegrabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0012
-+device.name Model 12 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0014
-+device.name Model 14 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0024
-+device.name Model 24 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0044
-+device.name Model 44 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0112
-+device.name Model 12 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0114
-+device.name Model 14 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0124
-+device.name Model 24 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0144
-+device.name Model 44 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0212
-+device.name Model 12 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0214
-+device.name Model 14 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0224
-+device.name Model 24 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0244
-+device.name Model 44 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0312
-+device.name Model 12 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0314
-+device.name Model 14 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0324
-+device.name Model 24 Road Runner Frame Grabber
-
- vendor.id pci 0x118d
-&device.id pci 0x0344
-+device.name Model 44 Road Runner Frame Grabber
-
- vendor.id pci 0x118e
-+vendor.name Hermstedt GmbH
-
- vendor.id pci 0x118f
-+vendor.name Green Logic
-
- vendor.id pci 0x1190
-+vendor.name Tripace
-
- vendor.id pci 0x1190
-&device.id pci 0xc731
-+device.name TP-910/920/940 PCI Ultra(Wide) SCSI Adapter
-
- vendor.id pci 0x1191
-+vendor.name Artop Electronic Corp
-
- vendor.id pci 0x1191
-&device.id pci 0x0003
-+device.name SCSI Cache Host Adapter
-
- vendor.id pci 0x1191
-&device.id pci 0x0004
-+device.name ATP8400
-
- vendor.id pci 0x1191
-&device.id pci 0x0005
-+device.name ATP850UF
-
- vendor.id pci 0x1191
-&device.id pci 0x0006
-+device.name ATP860 NO-BIOS
-
- vendor.id pci 0x1191
-&device.id pci 0x0007
-+device.name ATP860
-
- vendor.id pci 0x1191
-&device.id pci 0x0008
-+device.name ATP865 NO-ROM
-
- vendor.id pci 0x1191
-&device.id pci 0x0009
-+device.name ATP865
-
- vendor.id pci 0x1191
-&device.id pci 0x8002
-+device.name AEC6710 SCSI-2 Host Adapter
-
- vendor.id pci 0x1191
-&device.id pci 0x8010
-+device.name AEC6712UW SCSI
-
- vendor.id pci 0x1191
-&device.id pci 0x8020
-+device.name AEC6712U SCSI
-
- vendor.id pci 0x1191
-&device.id pci 0x8030
-+device.name AEC6712S SCSI
-
- vendor.id pci 0x1191
-&device.id pci 0x8040
-+device.name AEC6712D SCSI
-
- vendor.id pci 0x1191
-&device.id pci 0x8050
-+device.name AEC6712SUW SCSI
-
- vendor.id pci 0x1192
-+vendor.name Densan Company Ltd
-
- vendor.id pci 0x1193
-+vendor.name Zeitnet Inc.
-
- vendor.id pci 0x1193
-&device.id pci 0x0001
-+device.name 1221
-
- vendor.id pci 0x1193
-&device.id pci 0x0002
-+device.name 1225
-
- vendor.id pci 0x1194
-+vendor.name Toucan Technology
-
- vendor.id pci 0x1195
-+vendor.name Ratoc System Inc
-
- vendor.id pci 0x1196
-+vendor.name Hytec Electronics Ltd
-
- vendor.id pci 0x1197
-+vendor.name Gage Applied Sciences, Inc.
-
- vendor.id pci 0x1197
-&device.id pci 0x010c
-+device.name CompuScope 82G 8bit 2GS/s Analog Input Card
-
- vendor.id pci 0x1198
-+vendor.name Lambda Systems Inc
-
- vendor.id pci 0x1199
-+vendor.name Attachmate Corporation
-
- vendor.id pci 0x119a
-+vendor.name Mind Share, Inc.
-
- vendor.id pci 0x119b
-+vendor.name Omega Micro Inc.
-
- vendor.id pci 0x119b
-&device.id pci 0x1221
-+device.name 82C092G
-
- vendor.id pci 0x119c
-+vendor.name Information Technology Inst.
-
- vendor.id pci 0x119d
-+vendor.name Bug, Inc. Sapporo Japan
-
- vendor.id pci 0x119e
-+vendor.name Fujitsu Microelectronics Ltd.
-
- vendor.id pci 0x119e
-&device.id pci 0x0001
-+device.name FireStream 155
-
- vendor.id pci 0x119e
-&device.id pci 0x0003
-+device.name FireStream 50
-
- vendor.id pci 0x119f
-+vendor.name Bull HN Information Systems
-
- vendor.id pci 0x11a0
-+vendor.name Convex Computer Corporation
-
- vendor.id pci 0x11a1
-+vendor.name Hamamatsu Photonics K.K.
-
- vendor.id pci 0x11a2
-+vendor.name Sierra Research and Technology
-
- vendor.id pci 0x11a3
-+vendor.name Deuretzbacher GmbH & Co. Eng. KG
-
- vendor.id pci 0x11a4
-+vendor.name Barco Graphics NV
-
- vendor.id pci 0x11a5
-+vendor.name Microunity Systems Eng. Inc
-
- vendor.id pci 0x11a6
-+vendor.name Pure Data Ltd.
-
- vendor.id pci 0x11a7
-+vendor.name Power Computing Corp.
-
- vendor.id pci 0x11a8
-+vendor.name Systech Corp.
-
- vendor.id pci 0x11a9
-+vendor.name InnoSys Inc.
-
- vendor.id pci 0x11a9
-&device.id pci 0x4240
-+device.name AMCC S933Q Intelligent Serial Card
-
- vendor.id pci 0x11aa
-+vendor.name Actel
-
- vendor.id pci 0x11ab
-+vendor.name Marvell Technology Group Ltd.
-
- vendor.id pci 0x11ab
-&device.id pci 0x0146
-+device.name GT-64010/64010A System Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x138f
-+device.name W8300 802.11 Adapter (rev 07)
-
- vendor.id pci 0x11ab
-&device.id pci 0x1fa6
-+device.name Marvell W8300 802.11 Adapter
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-+device.name Gigabit Ethernet Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0f38
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (ECS)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x8001
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (ECS)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x173c
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Asus)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x811a
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Asus)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x105b
-&subdevice.id pci 0x0c19
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Foxconn)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xb452
-+subdevice.name SMC EZ Card 1000 (SMC9452TXV.2)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x0121
-+subdevice.name Marvell RDK-8001
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x0321
-+subdevice.name Marvell RDK-8003
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x1021
-+subdevice.name Marvell RDK-8010
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x5021
-+subdevice.name Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x9521
-+subdevice.name Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xe000
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x1406
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Abit)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x15d4
-&subdevice.id pci 0x0047
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Iwill)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x1695
-&subdevice.id pci 0x9025
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Epox)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x17f2
-&subdevice.id pci 0x1c03
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Albatron)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4320
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x2803
-+subdevice.name Marvell 88E8001 Gigabit Ethernet Controller (Chaintech)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-+device.name Fast Ethernet Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (Toshiba)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x3521
-+subdevice.name Marvell RDK-8035
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000d
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000e
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000f
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0011
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0012
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0016
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0017
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0018
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0019
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001c
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001e
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4350
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0020
-+subdevice.name Marvell 88E8035 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-+device.name Fast Ethernet Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x4009
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (Wistron)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x8338
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (Panasonic)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (Toshiba)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1179
-&subdevice.id pci 0xff00
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (Compal)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1179
-&subdevice.id pci 0xff10
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (Inventec)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x3621
-+subdevice.name Marvell RDK-8036
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x13d1
-&subdevice.id pci 0xac12
-+subdevice.name Abocom EFE3K - 10/100 Ethernet Expresscard
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x203d
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (Arima)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000d
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000e
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000f
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0011
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0012
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0016
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0017
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0018
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0019
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001c
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001e
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4351
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0020
-+subdevice.name Marvell 88E8036 Fast Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-+device.name Gigabit Ethernet Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8134
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (Asus)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x4009
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (Wistron)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x5221
-+subdevice.name Marvell RDK-8052
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xe000
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x052c
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (MSI)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x1849
-&subdevice.id pci 0x8052
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (ASRock)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0x1940
-&subdevice.id pci 0xe000
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4360
-&subvendor.id pci 0xa0a0
-&subdevice.id pci 0x0509
-+subdevice.name Marvell 88E8052 Gigabit Ethernet Controller (Aopen)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4361
-+device.name Gigabit Ethernet Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4361
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x3015
-+subdevice.name Marvell 88E8050 Gigabit Ethernet Controller (Gateway)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4361
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x5021
-+subdevice.name Marvell 88E8050 Gigabit Ethernet Controller (Intel)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4361
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3063
-+subdevice.name D925XCVLK mainboard
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-+device.name Gigabit Ethernet Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x2a0d
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Asus)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8142
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Asus)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x109f
-&subdevice.id pci 0x3197
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Trigem)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x10f7
-&subdevice.id pci 0x8338
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Panasonic)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x10fd
-&subdevice.id pci 0xa430
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (SOYO)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Toshiba)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1179
-&subdevice.id pci 0xff00
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Compal)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1179
-&subdevice.id pci 0xff10
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Inventec)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x11ab
-&subdevice.id pci 0x5321
-+subdevice.name Marvell RDK-8053
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xc240
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xc241
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xc242
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xc243
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1297
-&subdevice.id pci 0xc244
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x13d1
-&subdevice.id pci 0xac11
-+subdevice.name Abocom EGE5K - Giga Ethernet Expresscard
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xe000
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x058c
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (MSI)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x14c0
-&subdevice.id pci 0x0012
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Compal)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1558
-&subdevice.id pci 0x04a0
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Clevo)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x15bd
-&subdevice.id pci 0x1003
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (DFI)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x203c
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Arima)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x161f
-&subdevice.id pci 0x203d
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Arima)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1695
-&subdevice.id pci 0x9029
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Epox)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x17f2
-&subdevice.id pci 0x2c08
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Albatron)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x17ff
-&subdevice.id pci 0x0585
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Quanta)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1849
-&subdevice.id pci 0x8053
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (ASRock)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000b
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x000c
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0010
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0013
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0014
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0015
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001a
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001b
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001d
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x001f
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0021
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1854
-&subdevice.id pci 0x0022
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (LGE)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x1940
-&subdevice.id pci 0xe000
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x2801
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Chaintech)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4362
-&subvendor.id pci 0xa0a0
-&subdevice.id pci 0x0506
-+subdevice.name Marvell 88E8053 Gigabit Ethernet Controller (Aopen)
-
- vendor.id pci 0x11ab
-&device.id pci 0x4611
-+device.name GT-64115 System Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4620
-+device.name GT-64120/64120A/64121A System Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x4801
-+device.name GT-48001
-
- vendor.id pci 0x11ab
-&device.id pci 0x5040
-+device.name MV88SX5040 4-port SATA I PCI-X Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x5041
-+device.name MV88SX5041 4-port SATA I PCI-X Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x5080
-+device.name MV88SX5080 8-port SATA I PCI-X Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x5081
-+device.name MV88SX5081 8-port SATA I PCI-X Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x6041
-+device.name MV88SX6041 4-port SATA II PCI-X Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x6081
-+device.name MV88SX6081 8-port SATA II PCI-X Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0x6460
-+device.name MV64360/64361/64362 System Controller
-
- vendor.id pci 0x11ab
-&device.id pci 0xf003
-+device.name GT-64010 Primary Image Piranha Image Generator
-
- vendor.id pci 0x11ac
-+vendor.name Canon Information Systems Research Aust.
-
- vendor.id pci 0x11ad
-+vendor.name Lite-On Communications Inc
-
- vendor.id pci 0x11ad
-&device.id pci 0x0002
-+device.name LNE100TX
-
- vendor.id pci 0x11ad
-&device.id pci 0x0002
-&subvendor.id pci 0x11ad
-&subdevice.id pci 0x0002
-+subdevice.name LNE100TX
-
- vendor.id pci 0x11ad
-&device.id pci 0x0002
-&subvendor.id pci 0x11ad
-&subdevice.id pci 0x0003
-+subdevice.name LNE100TX
-
- vendor.id pci 0x11ad
-&device.id pci 0x0002
-&subvendor.id pci 0x11ad
-&subdevice.id pci 0xf003
-+subdevice.name LNE100TX
-
- vendor.id pci 0x11ad
-&device.id pci 0x0002
-&subvendor.id pci 0x11ad
-&subdevice.id pci 0xffff
-+subdevice.name LNE100TX
-
- vendor.id pci 0x11ad
-&device.id pci 0x0002
-&subvendor.id pci 0x1385
-&subdevice.id pci 0xf004
-+subdevice.name FA310TX
-
- vendor.id pci 0x11ad
-&device.id pci 0xc115
-+device.name LNE100TX [Linksys EtherFast 10/100]
-
- vendor.id pci 0x11ad
-&device.id pci 0xc115
-&subvendor.id pci 0x11ad
-&subdevice.id pci 0xc001
-+subdevice.name LNE100TX [ver 2.0]
-
- vendor.id pci 0x11ae
-+vendor.name Aztech System Ltd
-
- vendor.id pci 0x11af
-+vendor.name Avid Technology Inc.
-
- vendor.id pci 0x11af
-&device.id pci 0x0001
-+device.name [Cinema]
-
- vendor.id pci 0x11b0
-+vendor.name V3 Semiconductor Inc.
-
- vendor.id pci 0x11b0
-&device.id pci 0x0002
-+device.name V300PSC
-
- vendor.id pci 0x11b0
-&device.id pci 0x0292
-+device.name V292PBC [Am29030/40 Bridge]
-
- vendor.id pci 0x11b0
-&device.id pci 0x0960
-+device.name V96xPBC
-
- vendor.id pci 0x11b0
-&device.id pci 0xc960
-+device.name V96DPC
-
- vendor.id pci 0x11b1
-+vendor.name Apricot Computers
-
- vendor.id pci 0x11b2
-+vendor.name Eastman Kodak
-
- vendor.id pci 0x11b3
-+vendor.name Barr Systems Inc.
-
- vendor.id pci 0x11b4
-+vendor.name Leitch Technology International
-
- vendor.id pci 0x11b5
-+vendor.name Radstone Technology Plc
-
- vendor.id pci 0x11b6
-+vendor.name United Video Corp
-
- vendor.id pci 0x11b7
-+vendor.name Motorola
-
- vendor.id pci 0x11b8
-+vendor.name XPoint Technologies, Inc
-
- vendor.id pci 0x11b8
-&device.id pci 0x0001
-+device.name Quad PeerMaster
-
- vendor.id pci 0x11b9
-+vendor.name Pathlight Technology Inc.
-
- vendor.id pci 0x11b9
-&device.id pci 0xc0ed
-+device.name SSA Controller
-
- vendor.id pci 0x11ba
-+vendor.name Videotron Corp
-
- vendor.id pci 0x11bb
-+vendor.name Pyramid Technology
-
- vendor.id pci 0x11bc
-+vendor.name Network Peripherals Inc
-
- vendor.id pci 0x11bc
-&device.id pci 0x0001
-+device.name NP-PCI
-
- vendor.id pci 0x11bd
-+vendor.name Pinnacle Systems Inc.
-
- vendor.id pci 0x11be
-+vendor.name International Microcircuits Inc
-
- vendor.id pci 0x11bf
-+vendor.name Astrodesign, Inc.
-
- vendor.id pci 0x11c0
-+vendor.name Hewlett Packard
-
- vendor.id pci 0x11c1
-+vendor.name Agere Systems (former Lucent Microelectronics)
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-+device.name 56k WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8015
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8047
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x804f
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x102c
-+subdevice.name LB LT Modem V.90 56k
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x104a
-+subdevice.name BIBLO LT Modem 56k
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x105f
-+subdevice.name LB2 LT Modem V.90 56k
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Internal V.90 Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4101
-+subdevice.name MDP7800-U Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4102
-+subdevice.name MDP7800SP-U Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0040
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0441
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0450
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0xf100
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0xf101
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2101
-+subdevice.name LT56PV Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0440
-&subvendor.id pci 0x149f
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-+device.name 56k WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x804d
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8065
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0440
-+subdevice.name Supra 56i
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Internal V.90 Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0x0441
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4100
-+subdevice.name MDP7800-U Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0040
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0100
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0410
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0420
-+subdevice.name TelePath Internet 56k WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0443
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0xf102
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1416
-&subdevice.id pci 0x9804
-+subdevice.name CommWave 56k Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x141d
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x0441
-+subdevice.name Lucent 56k V.90 DF Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x0449
-+subdevice.name Lucent 56k V.90 DF Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x110d
-+subdevice.name Lucent Win Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1468
-&subdevice.id pci 0x0441
-+subdevice.name Presario 56k V.90 DF Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0441
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x0440
-+subdevice.name Lucent Win Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-+device.name 56k WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0x0442
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0412
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0442
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x13fc
-&subdevice.id pci 0x2471
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2104
-+subdevice.name LT56PT Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1104
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x149f
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0442
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x0440
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0443
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0444
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0445
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0445
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2203
-+subdevice.name PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card)
-
- vendor.id pci 0x11c1
-&device.id pci 0x0445
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2204
-+subdevice.name PRO/100+ MiniPCI on Armada E500
-
- vendor.id pci 0x11c1
-&device.id pci 0x0446
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0447
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0448
-+device.name WinModem 56k
-
- vendor.id pci 0x11c1
-&device.id pci 0x0448
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0131
-+subdevice.name Lucent Win Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0448
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8066
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0448
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0030
-+subdevice.name 56k Voice Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0448
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0040
-+subdevice.name LT WinModem 56k Data+Fax+Voice+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x0448
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x2400
-+subdevice.name LT WinModem 56k (MiniPCI Ethernet+Modem)
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-+device.name WinModem 56k
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb14d
-+subdevice.name 56k V.90 Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0020
-+subdevice.name LT WinModem 56k Data+Fax
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0041
-+subdevice.name TelePath Internet 56k WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x0440
-+subdevice.name Lucent Win Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x0449
-+subdevice.name Lucent 56k V.90 DFi Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x1468
-&subdevice.id pci 0x0410
-+subdevice.name IBM ThinkPad T23 (2647-4MG)
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x1468
-&subdevice.id pci 0x0440
-+subdevice.name Lucent Win Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0449
-&subvendor.id pci 0x1468
-&subdevice.id pci 0x0449
-+subdevice.name Presario 56k V.90 DFi Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x044a
-+device.name F-1156IV WinModem (V90, 56KFlex)
-
- vendor.id pci 0x11c1
-&device.id pci 0x044a
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1072
-+subdevice.name LB Global LT Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x044a
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0012
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x044a
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0042
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x044a
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1005
-+subdevice.name LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
-
- vendor.id pci 0x11c1
-&device.id pci 0x044b
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x044c
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x044d
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x044e
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x044f
-+device.name V90 WildWire Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0450
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0450
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x80a8
-+subdevice.name Versa Note Vxi
-
- vendor.id pci 0x11c1
-&device.id pci 0x0450
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x4005
-+subdevice.name Magnia SG20
-
- vendor.id pci 0x11c1
-&device.id pci 0x0451
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0452
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0453
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0454
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0455
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0456
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0457
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0458
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0459
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x045a
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x045c
-+device.name LT WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0461
-+device.name V90 WildWire Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0462
-+device.name V90 WildWire Modem
-
- vendor.id pci 0x11c1
-&device.id pci 0x0480
-+device.name Venus Modem (V90, 56KFlex)
-
- vendor.id pci 0x11c1
-&device.id pci 0x048c
-+device.name V.92 56K WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x048f
-+device.name V.92 56k WinModem
-
- vendor.id pci 0x11c1
-&device.id pci 0x5801
-+device.name USB
-
- vendor.id pci 0x11c1
-&device.id pci 0x5802
-+device.name USS-312 USB Controller
-
- vendor.id pci 0x11c1
-&device.id pci 0x5803
-+device.name USS-344S USB Controller
-
- vendor.id pci 0x11c1
-&device.id pci 0x5811
-+device.name FW323
-
- vendor.id pci 0x11c1
-&device.id pci 0x5811
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x11c1
-&device.id pci 0x5811
-&subvendor.id pci 0xdead
-&subdevice.id pci 0x0800
-+subdevice.name FireWire Host Bus Adapter
-
- vendor.id pci 0x11c1
-&device.id pci 0xab10
-+device.name WL60010 Wireless LAN MAC
-
- vendor.id pci 0x11c1
-&device.id pci 0xab11
-+device.name WL60040 Multimode Wireles LAN MAC
-
- vendor.id pci 0x11c1
-&device.id pci 0xab11
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0xab12
-+subdevice.name WaveLAN 11abg Cardbus card (Model 1102)
-
- vendor.id pci 0x11c1
-&device.id pci 0xab11
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0xab13
-+subdevice.name WaveLAN 11abg MiniPCI card (Model 0512)
-
- vendor.id pci 0x11c1
-&device.id pci 0xab11
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0xab15
-+subdevice.name WaveLAN 11abg Cardbus card (Model 1106)
-
- vendor.id pci 0x11c1
-&device.id pci 0xab11
-&subvendor.id pci 0x11c1
-&subdevice.id pci 0xab16
-+subdevice.name WaveLAN 11abg MiniPCI card (Model 0516)
-
- vendor.id pci 0x11c1
-&device.id pci 0xab20
-+device.name ORiNOCO PCI Adapter
-
- vendor.id pci 0x11c1
-&device.id pci 0xab21
-+device.name Agere Wireless PCI Adapter
-
- vendor.id pci 0x11c1
-&device.id pci 0xab30
-+device.name Hermes2 Mini-PCI WaveLAN a/b/g
-
- vendor.id pci 0x11c1
-&device.id pci 0xab30
-&subvendor.id pci 0x14cd
-&subdevice.id pci 0x2012
-+subdevice.name Hermes2 Mini-PCI WaveLAN a/b/g
-
- vendor.id pci 0x11c2
-+vendor.name Sand Microelectronics
-
- vendor.id pci 0x11c3
-+vendor.name NEC Corporation
-
- vendor.id pci 0x11c4
-+vendor.name Document Technologies, Inc
-
- vendor.id pci 0x11c5
-+vendor.name Shiva Corporation
-
- vendor.id pci 0x11c6
-+vendor.name Dainippon Screen Mfg. Co. Ltd
-
- vendor.id pci 0x11c7
-+vendor.name D.C.M. Data Systems
-
- vendor.id pci 0x11c8
-+vendor.name Dolphin Interconnect Solutions AS
-
- vendor.id pci 0x11c8
-&device.id pci 0x0658
-+device.name PSB32 SCI-Adapter D31x
-
- vendor.id pci 0x11c8
-&device.id pci 0xd665
-+device.name PSB64 SCI-Adapter D32x
-
- vendor.id pci 0x11c8
-&device.id pci 0xd667
-+device.name PSB66 SCI-Adapter D33x
-
- vendor.id pci 0x11c9
-+vendor.name Magma
-
- vendor.id pci 0x11c9
-&device.id pci 0x0010
-+device.name 16-line serial port w/- DMA
-
- vendor.id pci 0x11c9
-&device.id pci 0x0011
-+device.name 4-line serial port w/- DMA
-
- vendor.id pci 0x11ca
-+vendor.name LSI Systems, Inc
-
- vendor.id pci 0x11cb
-+vendor.name Specialix Research Ltd.
-
- vendor.id pci 0x11cb
-&device.id pci 0x2000
-+device.name PCI_9050
-
- vendor.id pci 0x11cb
-&device.id pci 0x2000
-&subvendor.id pci 0x11cb
-&subdevice.id pci 0x0200
-+subdevice.name SX
-
- vendor.id pci 0x11cb
-&device.id pci 0x2000
-&subvendor.id pci 0x11cb
-&subdevice.id pci 0xb008
-+subdevice.name I/O8+
-
- vendor.id pci 0x11cb
-&device.id pci 0x4000
-+device.name SUPI_1
-
- vendor.id pci 0x11cb
-&device.id pci 0x8000
-+device.name T225
-
- vendor.id pci 0x11cc
-+vendor.name Michels & Kleberhoff Computer GmbH
-
- vendor.id pci 0x11cd
-+vendor.name HAL Computer Systems, Inc.
-
- vendor.id pci 0x11ce
-+vendor.name Netaccess
-
- vendor.id pci 0x11cf
-+vendor.name Pioneer Electronic Corporation
-
- vendor.id pci 0x11d0
-+vendor.name Lockheed Martin Federal Systems-Manassas
-
- vendor.id pci 0x11d1
-+vendor.name Auravision
-
- vendor.id pci 0x11d1
-&device.id pci 0x01f7
-+device.name VxP524
-
- vendor.id pci 0x11d2
-+vendor.name Intercom Inc.
-
- vendor.id pci 0x11d3
-+vendor.name Trancell Systems Inc
-
- vendor.id pci 0x11d4
-+vendor.name Analog Devices
-
- vendor.id pci 0x11d4
-&device.id pci 0x1535
-+device.name Blackfin BF535 processor
-
- vendor.id pci 0x11d4
-&device.id pci 0x1805
-+device.name SM56 PCI modem
-
- vendor.id pci 0x11d4
-&device.id pci 0x1889
-+device.name AD1889 sound chip
-
- vendor.id pci 0x11d5
-+vendor.name Ikon Corporation
-
- vendor.id pci 0x11d5
-&device.id pci 0x0115
-+device.name 10115
-
- vendor.id pci 0x11d5
-&device.id pci 0x0117
-+device.name 10117
-
- vendor.id pci 0x11d6
-+vendor.name Tekelec Telecom
-
- vendor.id pci 0x11d7
-+vendor.name Trenton Technology, Inc.
-
- vendor.id pci 0x11d8
-+vendor.name Image Technologies Development
-
- vendor.id pci 0x11d9
-+vendor.name TEC Corporation
-
- vendor.id pci 0x11da
-+vendor.name Novell
-
- vendor.id pci 0x11db
-+vendor.name Sega Enterprises Ltd
-
- vendor.id pci 0x11dc
-+vendor.name Questra Corporation
-
- vendor.id pci 0x11dd
-+vendor.name Crosfield Electronics Limited
-
- vendor.id pci 0x11de
-+vendor.name Zoran Corporation
-
- vendor.id pci 0x11de
-&device.id pci 0x6057
-+device.name ZR36057PQC Video cutting chipset
-
- vendor.id pci 0x11de
-&device.id pci 0x6057
-&subvendor.id pci 0x1031
-&subdevice.id pci 0x7efe
-+subdevice.name DC10 Plus
-
- vendor.id pci 0x11de
-&device.id pci 0x6057
-&subvendor.id pci 0x1031
-&subdevice.id pci 0xfc00
-+subdevice.name MiroVIDEO DC50, Motion JPEG Capture/CODEC Board
-
- vendor.id pci 0x11de
-&device.id pci 0x6057
-&subvendor.id pci 0x13ca
-&subdevice.id pci 0x4231
-+subdevice.name JPEG/TV Card
-
- vendor.id pci 0x11de
-&device.id pci 0x6120
-+device.name ZR36120
-
- vendor.id pci 0x11de
-&device.id pci 0x6120
-&subvendor.id pci 0x1328
-&subdevice.id pci 0xf001
-+subdevice.name Cinemaster C DVD Decoder
-
- vendor.id pci 0x11df
-+vendor.name New Wave PDG
-
- vendor.id pci 0x11e0
-+vendor.name Cray Communications A/S
-
- vendor.id pci 0x11e1
-+vendor.name GEC Plessey Semi Inc.
-
- vendor.id pci 0x11e2
-+vendor.name Samsung Information Systems America
-
- vendor.id pci 0x11e3
-+vendor.name Quicklogic Corporation
-
- vendor.id pci 0x11e3
-&device.id pci 0x5030
-+device.name PC Watchdog
-
- vendor.id pci 0x11e4
-+vendor.name Second Wave Inc
-
- vendor.id pci 0x11e5
-+vendor.name IIX Consulting
-
- vendor.id pci 0x11e6
-+vendor.name Mitsui-Zosen System Research
-
- vendor.id pci 0x11e7
-+vendor.name Toshiba America, Elec. Company
-
- vendor.id pci 0x11e8
-+vendor.name Digital Processing Systems Inc.
-
- vendor.id pci 0x11e9
-+vendor.name Highwater Designs Ltd.
-
- vendor.id pci 0x11ea
-+vendor.name Elsag Bailey
-
- vendor.id pci 0x11eb
-+vendor.name Formation Inc.
-
- vendor.id pci 0x11ec
-+vendor.name Coreco Inc
-
- vendor.id pci 0x11ed
-+vendor.name Mediamatics
-
- vendor.id pci 0x11ee
-+vendor.name Dome Imaging Systems Inc
-
- vendor.id pci 0x11ef
-+vendor.name Nicolet Technologies B.V.
-
- vendor.id pci 0x11f0
-+vendor.name Compu-Shack
-
- vendor.id pci 0x11f0
-&device.id pci 0x4231
-+device.name FDDI
-
- vendor.id pci 0x11f0
-&device.id pci 0x4232
-+device.name FASTline UTP Quattro
-
- vendor.id pci 0x11f0
-&device.id pci 0x4233
-+device.name FASTline FO
-
- vendor.id pci 0x11f0
-&device.id pci 0x4234
-+device.name FASTline UTP
-
- vendor.id pci 0x11f0
-&device.id pci 0x4235
-+device.name FASTline-II UTP
-
- vendor.id pci 0x11f0
-&device.id pci 0x4236
-+device.name FASTline-II FO
-
- vendor.id pci 0x11f0
-&device.id pci 0x4731
-+device.name GIGAline
-
- vendor.id pci 0x11f1
-+vendor.name Symbios Logic Inc
-
- vendor.id pci 0x11f2
-+vendor.name Picture Tel Japan K.K.
-
- vendor.id pci 0x11f3
-+vendor.name Keithley Metrabyte
-
- vendor.id pci 0x11f4
-+vendor.name Kinetic Systems Corporation
-
- vendor.id pci 0x11f4
-&device.id pci 0x2915
-+device.name CAMAC controller
-
- vendor.id pci 0x11f5
-+vendor.name Computing Devices International
-
- vendor.id pci 0x11f6
-+vendor.name Compex
-
- vendor.id pci 0x11f6
-&device.id pci 0x0112
-+device.name ENet100VG4
-
- vendor.id pci 0x11f6
-&device.id pci 0x0113
-+device.name FreedomLine 100
-
- vendor.id pci 0x11f6
-&device.id pci 0x1401
-+device.name ReadyLink 2000
-
- vendor.id pci 0x11f6
-&device.id pci 0x2011
-+device.name RL100-ATX 10/100
-
- vendor.id pci 0x11f6
-&device.id pci 0x2011
-&subvendor.id pci 0x11f6
-&subdevice.id pci 0x2011
-+subdevice.name RL100-ATX
-
- vendor.id pci 0x11f6
-&device.id pci 0x2201
-+device.name ReadyLink 100TX (Winbond W89C840)
-
- vendor.id pci 0x11f6
-&device.id pci 0x2201
-&subvendor.id pci 0x11f6
-&subdevice.id pci 0x2011
-+subdevice.name ReadyLink 100TX
-
- vendor.id pci 0x11f6
-&device.id pci 0x9881
-+device.name RL100TX Fast Ethernet
-
- vendor.id pci 0x11f7
-+vendor.name Scientific Atlanta
-
- vendor.id pci 0x11f8
-+vendor.name PMC-Sierra Inc.
-
- vendor.id pci 0x11f8
-&device.id pci 0x7375
-+device.name PM7375 [LASAR-155 ATM SAR]
-
- vendor.id pci 0x11f9
-+vendor.name I-Cube Inc
-
- vendor.id pci 0x11fa
-+vendor.name Kasan Electronics Company, Ltd.
-
- vendor.id pci 0x11fb
-+vendor.name Datel Inc
-
- vendor.id pci 0x11fc
-+vendor.name Silicon Magic
-
- vendor.id pci 0x11fd
-+vendor.name High Street Consultants
-
- vendor.id pci 0x11fe
-+vendor.name Comtrol Corporation
-
- vendor.id pci 0x11fe
-&device.id pci 0x0001
-+device.name RocketPort 32 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x0002
-+device.name RocketPort 8 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x0003
-+device.name RocketPort 16 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x0004
-+device.name RocketPort 4 port w/quad cable
-
- vendor.id pci 0x11fe
-&device.id pci 0x0005
-+device.name RocketPort 8 port w/octa cable
-
- vendor.id pci 0x11fe
-&device.id pci 0x0006
-+device.name RocketPort 8 port w/RJ11 connectors
-
- vendor.id pci 0x11fe
-&device.id pci 0x0007
-+device.name RocketPort 4 port w/RJ11 connectors
-
- vendor.id pci 0x11fe
-&device.id pci 0x0008
-+device.name RocketPort 8 port w/ DB78 SNI (Siemens) connector
-
- vendor.id pci 0x11fe
-&device.id pci 0x0009
-+device.name RocketPort 16 port w/ DB78 SNI (Siemens) connector
-
- vendor.id pci 0x11fe
-&device.id pci 0x000a
-+device.name RocketPort Plus 4 port
-
- vendor.id pci 0x11fe
-&device.id pci 0x000b
-+device.name RocketPort Plus 8 port
-
- vendor.id pci 0x11fe
-&device.id pci 0x000c
-+device.name RocketModem 6 port
-
- vendor.id pci 0x11fe
-&device.id pci 0x000d
-+device.name RocketModem 4-port
-
- vendor.id pci 0x11fe
-&device.id pci 0x000e
-+device.name RocketPort Plus 2 port RS232
-
- vendor.id pci 0x11fe
-&device.id pci 0x000f
-+device.name RocketPort Plus 2 port RS422
-
- vendor.id pci 0x11fe
-&device.id pci 0x0801
-+device.name RocketPort UPCI 32 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x0802
-+device.name RocketPort UPCI 8 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x0803
-+device.name RocketPort UPCI 16 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x0805
-+device.name RocketPort UPCI 8 port w/octa cable
-
- vendor.id pci 0x11fe
-&device.id pci 0x080c
-+device.name RocketModem III 8 port
-
- vendor.id pci 0x11fe
-&device.id pci 0x080d
-+device.name RocketModem III 4 port
-
- vendor.id pci 0x11fe
-&device.id pci 0x0903
-+device.name RocketPort Compact PCI 16 port w/external I/F
-
- vendor.id pci 0x11fe
-&device.id pci 0x8015
-+device.name RocketPort 4-port UART 16954
-
- vendor.id pci 0x11ff
-+vendor.name Scion Corporation
-
- vendor.id pci 0x11ff
-&device.id pci 0x0003
-+device.name AG-5
-
- vendor.id pci 0x1200
-+vendor.name CSS Corporation
-
- vendor.id pci 0x1201
-+vendor.name Vista Controls Corp
-
- vendor.id pci 0x1202
-+vendor.name Network General Corp.
-
- vendor.id pci 0x1202
-&device.id pci 0x4300
-+device.name Gigabit Ethernet Adapter
-
- vendor.id pci 0x1202
-&device.id pci 0x4300
-&subvendor.id pci 0x1202
-&subdevice.id pci 0x9841
-+subdevice.name SK-9841 LX
-
- vendor.id pci 0x1202
-&device.id pci 0x4300
-&subvendor.id pci 0x1202
-&subdevice.id pci 0x9842
-+subdevice.name SK-9841 LX dual link
-
- vendor.id pci 0x1202
-&device.id pci 0x4300
-&subvendor.id pci 0x1202
-&subdevice.id pci 0x9843
-+subdevice.name SK-9843 SX
-
- vendor.id pci 0x1202
-&device.id pci 0x4300
-&subvendor.id pci 0x1202
-&subdevice.id pci 0x9844
-+subdevice.name SK-9843 SX dual link
-
- vendor.id pci 0x1203
-+vendor.name Bayer Corporation, Agfa Division
-
- vendor.id pci 0x1204
-+vendor.name Lattice Semiconductor Corporation
-
- vendor.id pci 0x1205
-+vendor.name Array Corporation
-
- vendor.id pci 0x1206
-+vendor.name Amdahl Corporation
-
- vendor.id pci 0x1208
-+vendor.name Parsytec GmbH
-
- vendor.id pci 0x1208
-&device.id pci 0x4853
-+device.name HS-Link Device
-
- vendor.id pci 0x1209
-+vendor.name SCI Systems Inc
-
- vendor.id pci 0x120a
-+vendor.name Synaptel
-
- vendor.id pci 0x120b
-+vendor.name Adaptive Solutions
-
- vendor.id pci 0x120c
-+vendor.name Technical Corp.
-
- vendor.id pci 0x120d
-+vendor.name Compression Labs, Inc.
-
- vendor.id pci 0x120e
-+vendor.name Cyclades Corporation
-
- vendor.id pci 0x120e
-&device.id pci 0x0100
-+device.name Cyclom-Y below first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0101
-+device.name Cyclom-Y above first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0102
-+device.name Cyclom-4Y below first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0103
-+device.name Cyclom-4Y above first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0104
-+device.name Cyclom-8Y below first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0105
-+device.name Cyclom-8Y above first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0200
-+device.name Cyclades-Z below first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0201
-+device.name Cyclades-Z above first megabyte
-
- vendor.id pci 0x120e
-&device.id pci 0x0300
-+device.name PC300/RSV or /X21 (2 ports)
-
- vendor.id pci 0x120e
-&device.id pci 0x0301
-+device.name PC300/RSV or /X21 (1 port)
-
- vendor.id pci 0x120e
-&device.id pci 0x0310
-+device.name PC300/TE (2 ports)
-
- vendor.id pci 0x120e
-&device.id pci 0x0311
-+device.name PC300/TE (1 port)
-
- vendor.id pci 0x120e
-&device.id pci 0x0320
-+device.name PC300/TE-M (2 ports)
-
- vendor.id pci 0x120e
-&device.id pci 0x0321
-+device.name PC300/TE-M (1 port)
-
- vendor.id pci 0x120e
-&device.id pci 0x0400
-+device.name PC400
-
- vendor.id pci 0x120f
-+vendor.name Essential Communications
-
- vendor.id pci 0x120f
-&device.id pci 0x0001
-+device.name Roadrunner serial HIPPI
-
- vendor.id pci 0x1210
-+vendor.name Hyperparallel Technologies
-
- vendor.id pci 0x1211
-+vendor.name Braintech Inc
-
- vendor.id pci 0x1212
-+vendor.name Kingston Technology Corp.
-
- vendor.id pci 0x1213
-+vendor.name Applied Intelligent Systems, Inc.
-
- vendor.id pci 0x1214
-+vendor.name Performance Technologies, Inc.
-
- vendor.id pci 0x1215
-+vendor.name Interware Co., Ltd
-
- vendor.id pci 0x1216
-+vendor.name Purup Prepress A/S
-
- vendor.id pci 0x1217
-+vendor.name O2 Micro, Inc.
-
- vendor.id pci 0x1217
-&device.id pci 0x6729
-+device.name OZ6729
-
- vendor.id pci 0x1217
-&device.id pci 0x673a
-+device.name OZ6730
-
- vendor.id pci 0x1217
-&device.id pci 0x6832
-+device.name OZ6832/6833 Cardbus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x6836
-+device.name OZ6836/6860 Cardbus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x6872
-+device.name OZ6812 Cardbus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x6925
-+device.name OZ6922 Cardbus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x6933
-+device.name OZ6933 Cardbus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x6933
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x1217
-&device.id pci 0x6972
-+device.name OZ6912 Cardbus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x6972
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x020c
-+subdevice.name ThinkPad R30
-
- vendor.id pci 0x1217
-&device.id pci 0x6972
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x1217
-&device.id pci 0x7110
-+device.name OZ711Mx MultiMediaBay Accelerator
-
- vendor.id pci 0x1217
-&device.id pci 0x7110
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x1217
-&device.id pci 0x7112
-+device.name OZ711EC1/M1 SmartCardBus MultiMediaBay Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x7113
-+device.name OZ711EC1 SmartCardBus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x7114
-+device.name OZ711M1 SmartCardBus MultiMediaBay Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x71e2
-+device.name OZ711E2 SmartCardBus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x7212
-+device.name OZ711M2 SmartCardBus MultiMediaBay Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x7213
-+device.name OZ6933E CardBus Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x7223
-+device.name OZ711M3 SmartCardBus MultiMediaBay Controller
-
- vendor.id pci 0x1217
-&device.id pci 0x7223
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x1218
-+vendor.name Hybricon Corp.
-
- vendor.id pci 0x1219
-+vendor.name First Virtual Corporation
-
- vendor.id pci 0x121a
-+vendor.name 3Dfx Interactive, Inc.
-
- vendor.id pci 0x121a
-&device.id pci 0x0001
-+device.name Voodoo
-
- vendor.id pci 0x121a
-&device.id pci 0x0002
-+device.name Voodoo 2
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-+device.name Voodoo Banshee
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0003
-+subdevice.name Monster Fusion
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4000
-+subdevice.name Monster Fusion
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4002
-+subdevice.name Monster Fusion
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4801
-+subdevice.name Monster Fusion AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4803
-+subdevice.name Monster Fusion AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8030
-+subdevice.name Monster Fusion
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8035
-+subdevice.name Monster Fusion AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0001
-+subdevice.name Dragon 4000
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x1018
-+subdevice.name 3D Blaster Banshee VE
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0001
-+subdevice.name Voodoo Banshee AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0003
-+subdevice.name Voodoo Banshee AGP SGRAM
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0004
-+subdevice.name Voodoo Banshee
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x139c
-&subdevice.id pci 0x0016
-+subdevice.name Raven
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x139c
-&subdevice.id pci 0x0017
-+subdevice.name Raven
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-&subvendor.id pci 0x14af
-&subdevice.id pci 0x0002
-+subdevice.name Maxi Gamer Phoenix
-
- vendor.id pci 0x121a
-&device.id pci 0x0004
-+device.name Voodoo Banshee [Velocity 100]
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-+device.name Voodoo 3
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0004
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0030
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0031
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0034
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0036
-+subdevice.name Voodoo3 2000 PCI
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0037
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0038
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x003a
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0044
-+subdevice.name Voodoo3
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x004b
-+subdevice.name Velocity 100
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x004c
-+subdevice.name Velocity 200
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x004d
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x004e
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0051
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0052
-+subdevice.name Voodoo3 AGP
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0060
-+subdevice.name Voodoo3 3500 TV (NTSC)
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0061
-+subdevice.name Voodoo3 3500 TV (PAL)
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0062
-+subdevice.name Voodoo3 3500 TV (SECAM)
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-+device.name Voodoo 4 / Voodoo 5
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0003
-+subdevice.name Voodoo5 PCI 5500
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x0009
-+subdevice.name Voodoo5 AGP 5500/6000
-
- vendor.id pci 0x121a
-&device.id pci 0x0057
-+device.name Voodoo 3/3000 [Avenger]
-
- vendor.id pci 0x121b
-+vendor.name Advanced Telecommunications Modules
-
- vendor.id pci 0x121c
-+vendor.name Nippon Texaco., Ltd
-
- vendor.id pci 0x121d
-+vendor.name Lippert Automationstechnik GmbH
-
- vendor.id pci 0x121e
-+vendor.name CSPI
-
- vendor.id pci 0x121f
-+vendor.name Arcus Technology, Inc.
-
- vendor.id pci 0x1220
-+vendor.name Ariel Corporation
-
- vendor.id pci 0x1220
-&device.id pci 0x1220
-+device.name AMCC 5933 TMS320C80 DSP/Imaging board
-
- vendor.id pci 0x1221
-+vendor.name Contec Co., Ltd
-
- vendor.id pci 0x1222
-+vendor.name Ancor Communications, Inc.
-
- vendor.id pci 0x1223
-+vendor.name Artesyn Communication Products
-
- vendor.id pci 0x1223
-&device.id pci 0x0003
-+device.name PM/Link
-
- vendor.id pci 0x1223
-&device.id pci 0x0004
-+device.name PM/T1
-
- vendor.id pci 0x1223
-&device.id pci 0x0005
-+device.name PM/E1
-
- vendor.id pci 0x1223
-&device.id pci 0x0008
-+device.name PM/SLS
-
- vendor.id pci 0x1223
-&device.id pci 0x0009
-+device.name BajaSpan Resource Target
-
- vendor.id pci 0x1223
-&device.id pci 0x000a
-+device.name BajaSpan Section 0
-
- vendor.id pci 0x1223
-&device.id pci 0x000b
-+device.name BajaSpan Section 1
-
- vendor.id pci 0x1223
-&device.id pci 0x000c
-+device.name BajaSpan Section 2
-
- vendor.id pci 0x1223
-&device.id pci 0x000d
-+device.name BajaSpan Section 3
-
- vendor.id pci 0x1223
-&device.id pci 0x000e
-+device.name PM/PPC
-
- vendor.id pci 0x1224
-+vendor.name Interactive Images
-
- vendor.id pci 0x1225
-+vendor.name Power I/O, Inc.
-
- vendor.id pci 0x1227
-+vendor.name Tech-Source
-
- vendor.id pci 0x1227
-&device.id pci 0x0006
-+device.name Raptor GFX 8P
-
- vendor.id pci 0x1228
-+vendor.name Norsk Elektro Optikk A/S
-
- vendor.id pci 0x1229
-+vendor.name Data Kinesis Inc.
-
- vendor.id pci 0x122a
-+vendor.name Integrated Telecom
-
- vendor.id pci 0x122b
-+vendor.name LG Industrial Systems Co., Ltd
-
- vendor.id pci 0x122c
-+vendor.name Sican GmbH
-
- vendor.id pci 0x122d
-+vendor.name Aztech System Ltd
-
- vendor.id pci 0x122d
-&device.id pci 0x1206
-+device.name 368DSP
-
- vendor.id pci 0x122d
-&device.id pci 0x1400
-+device.name Trident PCI288-Q3DII (NX)
-
- vendor.id pci 0x122d
-&device.id pci 0x50dc
-+device.name 3328 Audio
-
- vendor.id pci 0x122d
-&device.id pci 0x50dc
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x0001
-+subdevice.name 3328 Audio
-
- vendor.id pci 0x122d
-&device.id pci 0x80da
-+device.name 3328 Audio
-
- vendor.id pci 0x122d
-&device.id pci 0x80da
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x0001
-+subdevice.name 3328 Audio
-
- vendor.id pci 0x122e
-+vendor.name Xyratex
-
- vendor.id pci 0x122f
-+vendor.name Andrew Corporation
-
- vendor.id pci 0x1230
-+vendor.name Fishcamp Engineering
-
- vendor.id pci 0x1231
-+vendor.name Woodward McCoach, Inc.
-
- vendor.id pci 0x1232
-+vendor.name GPT Limited
-
- vendor.id pci 0x1233
-+vendor.name Bus-Tech, Inc.
-
- vendor.id pci 0x1234
-+vendor.name Technical Corp.
-
- vendor.id pci 0x1235
-+vendor.name Risq Modular Systems, Inc.
-
- vendor.id pci 0x1236
-+vendor.name Sigma Designs Corporation
-
- vendor.id pci 0x1236
-&device.id pci 0x0000
-+device.name RealMagic64/GX
-
- vendor.id pci 0x1236
-&device.id pci 0x6401
-+device.name REALmagic 64/GX (SD 6425)
-
- vendor.id pci 0x1237
-+vendor.name Alta Technology Corporation
-
- vendor.id pci 0x1238
-+vendor.name Adtran
-
- vendor.id pci 0x1239
-+vendor.name 3DO Company
-
- vendor.id pci 0x123a
-+vendor.name Visicom Laboratories, Inc.
-
- vendor.id pci 0x123b
-+vendor.name Seeq Technology, Inc.
-
- vendor.id pci 0x123c
-+vendor.name Century Systems, Inc.
-
- vendor.id pci 0x123d
-+vendor.name Engineering Design Team, Inc.
-
- vendor.id pci 0x123d
-&device.id pci 0x0000
-+device.name EasyConnect 8/32
-
- vendor.id pci 0x123d
-&device.id pci 0x0002
-+device.name EasyConnect 8/64
-
- vendor.id pci 0x123d
-&device.id pci 0x0003
-+device.name EasyIO
-
- vendor.id pci 0x123e
-+vendor.name Simutech, Inc.
-
- vendor.id pci 0x123f
-+vendor.name C-Cube Microsystems
-
- vendor.id pci 0x123f
-&device.id pci 0x00e4
-+device.name MPEG
-
- vendor.id pci 0x123f
-&device.id pci 0x8120
-+device.name E4?
-
- vendor.id pci 0x123f
-&device.id pci 0x8120
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0006
-+subdevice.name DV500 E4
-
- vendor.id pci 0x123f
-&device.id pci 0x8120
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x000a
-+subdevice.name DV500 E4
-
- vendor.id pci 0x123f
-&device.id pci 0x8888
-+device.name Cinemaster C 3.0 DVD Decoder
-
- vendor.id pci 0x123f
-&device.id pci 0x8888
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0001
-+subdevice.name Cinemaster C 3.0 DVD Decoder
-
- vendor.id pci 0x123f
-&device.id pci 0x8888
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Cinemaster C 3.0 DVD Decoder
-
- vendor.id pci 0x123f
-&device.id pci 0x8888
-&subvendor.id pci 0x1328
-&subdevice.id pci 0x0001
-+subdevice.name Cinemaster C 3.0 DVD Decoder
-
- vendor.id pci 0x1240
-+vendor.name Marathon Technologies Corp.
-
- vendor.id pci 0x1241
-+vendor.name DSC Communications
-
- vendor.id pci 0x1242
-+vendor.name JNI Corporation
-
- vendor.id pci 0x1242
-&device.id pci 0x1560
-+device.name JNIC-1560 PCI-X Fibre Channel Controller
-
- vendor.id pci 0x1242
-&device.id pci 0x1560
-&subvendor.id pci 0x1242
-&subdevice.id pci 0x6562
-+subdevice.name FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter
-
- vendor.id pci 0x1242
-&device.id pci 0x1560
-&subvendor.id pci 0x1242
-&subdevice.id pci 0x656a
-+subdevice.name FCX-6562 PCI-X Fibre Channel Adapter
-
- vendor.id pci 0x1242
-&device.id pci 0x4643
-+device.name FCI-1063 Fibre Channel Adapter
-
- vendor.id pci 0x1242
-&device.id pci 0x6562
-+device.name FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter
-
- vendor.id pci 0x1242
-&device.id pci 0x656a
-+device.name FCX-6562 PCI-X Fibre Channel Adapter
-
- vendor.id pci 0x1243
-+vendor.name Delphax
-
- vendor.id pci 0x1244
-+vendor.name AVM Audiovisuelles MKTG & Computer System GmbH
-
- vendor.id pci 0x1244
-&device.id pci 0x0700
-+device.name B1 ISDN
-
- vendor.id pci 0x1244
-&device.id pci 0x0800
-+device.name C4 ISDN
-
- vendor.id pci 0x1244
-&device.id pci 0x0a00
-+device.name A1 ISDN [Fritz]
-
- vendor.id pci 0x1244
-&device.id pci 0x0a00
-&subvendor.id pci 0x1244
-&subdevice.id pci 0x0a00
-+subdevice.name FRITZ!Card ISDN Controller
-
- vendor.id pci 0x1244
-&device.id pci 0x0e00
-+device.name Fritz!PCI v2.0 ISDN
-
- vendor.id pci 0x1244
-&device.id pci 0x1100
-+device.name C2 ISDN
-
- vendor.id pci 0x1244
-&device.id pci 0x1200
-+device.name T1 ISDN
-
- vendor.id pci 0x1244
-&device.id pci 0x2700
-+device.name Fritz!Card DSL SL
-
- vendor.id pci 0x1244
-&device.id pci 0x2900
-+device.name Fritz!Card DSL v2.0
-
- vendor.id pci 0x1245
-+vendor.name A.P.D., S.A.
-
- vendor.id pci 0x1246
-+vendor.name Dipix Technologies, Inc.
-
- vendor.id pci 0x1247
-+vendor.name Xylon Research, Inc.
-
- vendor.id pci 0x1248
-+vendor.name Central Data Corporation
-
- vendor.id pci 0x1249
-+vendor.name Samsung Electronics Co., Ltd.
-
- vendor.id pci 0x124a
-+vendor.name AEG Electrocom GmbH
-
- vendor.id pci 0x124b
-+vendor.name SBS/Greenspring Modular I/O
-
- vendor.id pci 0x124b
-&device.id pci 0x0040
-+device.name PCI-40A or cPCI-200 Quad IndustryPack carrier
-
- vendor.id pci 0x124b
-&device.id pci 0x0040
-&subvendor.id pci 0x124b
-&subdevice.id pci 0x9080
-+subdevice.name PCI9080 Bridge
-
- vendor.id pci 0x124c
-+vendor.name Solitron Technologies, Inc.
-
- vendor.id pci 0x124d
-+vendor.name Stallion Technologies, Inc.
-
- vendor.id pci 0x124d
-&device.id pci 0x0000
-+device.name EasyConnection 8/32
-
- vendor.id pci 0x124d
-&device.id pci 0x0002
-+device.name EasyConnection 8/64
-
- vendor.id pci 0x124d
-&device.id pci 0x0003
-+device.name EasyIO
-
- vendor.id pci 0x124d
-&device.id pci 0x0004
-+device.name EasyConnection/RA
-
- vendor.id pci 0x124e
-+vendor.name Cylink
-
- vendor.id pci 0x124f
-+vendor.name Infortrend Technology, Inc.
-
- vendor.id pci 0x124f
-&device.id pci 0x0041
-+device.name IFT-2000 Series RAID Controller
-
- vendor.id pci 0x1250
-+vendor.name Hitachi Microcomputer System Ltd
-
- vendor.id pci 0x1251
-+vendor.name VLSI Solutions Oy
-
- vendor.id pci 0x1253
-+vendor.name Guzik Technical Enterprises
-
- vendor.id pci 0x1254
-+vendor.name Linear Systems Ltd.
-
- vendor.id pci 0x1255
-+vendor.name Optibase Ltd
-
- vendor.id pci 0x1255
-&device.id pci 0x1110
-+device.name MPEG Forge
-
- vendor.id pci 0x1255
-&device.id pci 0x1210
-+device.name MPEG Fusion
-
- vendor.id pci 0x1255
-&device.id pci 0x2110
-+device.name VideoPlex
-
- vendor.id pci 0x1255
-&device.id pci 0x2120
-+device.name VideoPlex CC
-
- vendor.id pci 0x1255
-&device.id pci 0x2130
-+device.name VideoQuest
-
- vendor.id pci 0x1256
-+vendor.name Perceptive Solutions, Inc.
-
- vendor.id pci 0x1256
-&device.id pci 0x4201
-+device.name PCI-2220I
-
- vendor.id pci 0x1256
-&device.id pci 0x4401
-+device.name PCI-2240I
-
- vendor.id pci 0x1256
-&device.id pci 0x5201
-+device.name PCI-2000
-
- vendor.id pci 0x1257
-+vendor.name Vertex Networks, Inc.
-
- vendor.id pci 0x1258
-+vendor.name Gilbarco, Inc.
-
- vendor.id pci 0x1259
-+vendor.name Allied Telesyn International
-
- vendor.id pci 0x1259
-&device.id pci 0x2560
-+device.name AT-2560 Fast Ethernet Adapter (i82557B)
-
- vendor.id pci 0x1259
-&device.id pci 0xa117
-+device.name RTL81xx Fast Ethernet
-
- vendor.id pci 0x1259
-&device.id pci 0xa120
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x125a
-+vendor.name ABB Power Systems
-
- vendor.id pci 0x125b
-+vendor.name Asix Electronics Corporation
-
- vendor.id pci 0x125b
-&device.id pci 0x1400
-+device.name ALFA GFC2204 Fast Ethernet
-
- vendor.id pci 0x125c
-+vendor.name Aurora Technologies, Inc.
-
- vendor.id pci 0x125c
-&device.id pci 0x0101
-+device.name Saturn 4520P
-
- vendor.id pci 0x125c
-&device.id pci 0x0640
-+device.name Aries 16000P
-
- vendor.id pci 0x125d
-+vendor.name ESS Technology
-
- vendor.id pci 0x125d
-&device.id pci 0x0000
-+device.name ES336H Fax Modem (Early Model)
-
- vendor.id pci 0x125d
-&device.id pci 0x1948
-+device.name Solo?
-
- vendor.id pci 0x125d
-&device.id pci 0x1968
-+device.name ES1968 Maestro 2
-
- vendor.id pci 0x125d
-&device.id pci 0x1968
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0085
-+subdevice.name ES1968 Maestro-2 PCI
-
- vendor.id pci 0x125d
-&device.id pci 0x1968
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8051
-+subdevice.name ES1968 Maestro-2 Audiodrive
-
- vendor.id pci 0x125d
-&device.id pci 0x1969
-+device.name ES1969 Solo-1 Audiodrive
-
- vendor.id pci 0x125d
-&device.id pci 0x1969
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0166
-+subdevice.name ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard
-
- vendor.id pci 0x125d
-&device.id pci 0x1969
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x8888
-+subdevice.name Solo-1 Audio Adapter
-
- vendor.id pci 0x125d
-&device.id pci 0x1978
-+device.name ES1978 Maestro 2E
-
- vendor.id pci 0x125d
-&device.id pci 0x1978
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb112
-+subdevice.name Armada M700/E500
-
- vendor.id pci 0x125d
-&device.id pci 0x1978
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x803c
-+subdevice.name ES1978 Maestro-2E Audiodrive
-
- vendor.id pci 0x125d
-&device.id pci 0x1978
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8058
-+subdevice.name ES1978 Maestro-2E Audiodrive
-
- vendor.id pci 0x125d
-&device.id pci 0x1978
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4000
-+subdevice.name Monster Sound MX400
-
- vendor.id pci 0x125d
-&device.id pci 0x1978
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name ES1978 Maestro-2E Audiodrive
-
- vendor.id pci 0x125d
-&device.id pci 0x1988
-+device.name ES1988 Allegro-1
-
- vendor.id pci 0x125d
-&device.id pci 0x1988
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4100
-+subdevice.name Sonic Impact S100
-
- vendor.id pci 0x125d
-&device.id pci 0x1988
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x1988
-+subdevice.name ESS Allegro-1 Audiodrive
-
- vendor.id pci 0x125d
-&device.id pci 0x1989
-+device.name ESS Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x1989
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x1989
-+subdevice.name ESS Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x1998
-+device.name ES1983S Maestro-3i PCI Audio Accelerator
-
- vendor.id pci 0x125d
-&device.id pci 0x1998
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00b1
-+subdevice.name Latitude C600
-
- vendor.id pci 0x125d
-&device.id pci 0x1998
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00e6
-+subdevice.name ES1983S Maestro-3i (Dell Inspiron 8100)
-
- vendor.id pci 0x125d
-&device.id pci 0x1999
-+device.name ES1983S Maestro-3i PCI Modem Accelerator
-
- vendor.id pci 0x125d
-&device.id pci 0x199a
-+device.name ES1983S Maestro-3i PCI Audio Accelerator
-
- vendor.id pci 0x125d
-&device.id pci 0x199b
-+device.name ES1983S Maestro-3i PCI Modem Accelerator
-
- vendor.id pci 0x125d
-&device.id pci 0x2808
-+device.name ES336H Fax Modem (Later Model)
-
- vendor.id pci 0x125d
-&device.id pci 0x2838
-+device.name ES2838/2839 SuperLink Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-+device.name ES2898 Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x0424
-+subdevice.name ES56-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x0425
-+subdevice.name ES56T-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x0426
-+subdevice.name ES56V-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x0427
-+subdevice.name VW-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x0428
-+subdevice.name ES56ST-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x125d
-&subdevice.id pci 0x0429
-+subdevice.name ES56SV-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x147a
-&subdevice.id pci 0xc001
-+subdevice.name ES56-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x14fe
-&subdevice.id pci 0x0428
-+subdevice.name ES56-PI Data Fax Modem
-
- vendor.id pci 0x125d
-&device.id pci 0x2898
-&subvendor.id pci 0x14fe
-&subdevice.id pci 0x0429
-+subdevice.name ES56-PI Data Fax Modem
-
- vendor.id pci 0x125e
-+vendor.name Specialvideo Engineering SRL
-
- vendor.id pci 0x125f
-+vendor.name Concurrent Technologies, Inc.
-
- vendor.id pci 0x1260
-+vendor.name Intersil Corporation
-
- vendor.id pci 0x1260
-&device.id pci 0x3872
-+device.name Prism 2.5 Wavelan chipset
-
- vendor.id pci 0x1260
-&device.id pci 0x3872
-&subvendor.id pci 0x1468
-&subdevice.id pci 0x0202
-+subdevice.name LAN-Express IEEE 802.11b Wireless LAN
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-+device.name Prism 2.5 Wavelan chipset
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3501
-+subdevice.name DWL-520 Wireless PCI Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3700
-+subdevice.name DWL-520 Wireless PCI Adapter, Rev E1
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x1385
-&subdevice.id pci 0x4105
-+subdevice.name MA311 802.11b wireless adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x0414
-+subdevice.name HWP01170-01 802.11b PCI Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x16a5
-&subdevice.id pci 0x1601
-+subdevice.name AIR.mate PC-400 PCI Wireless LAN Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x1737
-&subdevice.id pci 0x3874
-+subdevice.name WMP11 Wireless 802.11b PCI Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3873
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2513
-+subdevice.name Wireless 802.11b MiniPCI Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3886
-+device.name ISL3886 [Prism Javelin/Prism Xbow]
-
- vendor.id pci 0x1260
-&device.id pci 0x3886
-&subvendor.id pci 0x17cf
-&subdevice.id pci 0x0037
-+subdevice.name Z-Com XG-901 and clones Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-+device.name Intersil ISL3890 [Prism GT/Prism Duette]
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2802
-+subdevice.name SMC2802W Wireless PCI Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2835
-+subdevice.name SMC2835W Wireless Cardbus Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0xa835
-+subdevice.name SMC2835W V2 Wireless Cardbus Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x1113
-&subdevice.id pci 0xee03
-+subdevice.name SMC2802W V2 Wireless PCI Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3202
-+subdevice.name DWL-G650 A1 Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x1259
-&subdevice.id pci 0xc104
-+subdevice.name CG-WLCB54GT Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x1385
-&subdevice.id pci 0x4800
-+subdevice.name WG511 Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x16a5
-&subdevice.id pci 0x1605
-+subdevice.name ALLNET ALL0271 Wireless PCI Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x17cf
-&subdevice.id pci 0x0014
-+subdevice.name Z-Com XG-600 and clones Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x3890
-&subvendor.id pci 0x17cf
-&subdevice.id pci 0x0020
-+subdevice.name Z-Com XG-900 and clones Wireless Adapter
-
- vendor.id pci 0x1260
-&device.id pci 0x8130
-+device.name HMP8130 NTSC/PAL Video Decoder
-
- vendor.id pci 0x1260
-&device.id pci 0x8131
-+device.name HMP8131 NTSC/PAL Video Decoder
-
- vendor.id pci 0x1261
-+vendor.name Matsushita-Kotobuki Electronics Industries, Ltd.
-
- vendor.id pci 0x1262
-+vendor.name ES Computer Company, Ltd.
-
- vendor.id pci 0x1263
-+vendor.name Sonic Solutions
-
- vendor.id pci 0x1264
-+vendor.name Aval Nagasaki Corporation
-
- vendor.id pci 0x1265
-+vendor.name Casio Computer Co., Ltd.
-
- vendor.id pci 0x1266
-+vendor.name Microdyne Corporation
-
- vendor.id pci 0x1266
-&device.id pci 0x0001
-+device.name NE10/100 Adapter (i82557B)
-
- vendor.id pci 0x1266
-&device.id pci 0x1910
-+device.name NE2000Plus (RT8029) Ethernet Adapter
-
- vendor.id pci 0x1266
-&device.id pci 0x1910
-&subvendor.id pci 0x1266
-&subdevice.id pci 0x1910
-+subdevice.name NE2000Plus Ethernet Adapter
-
- vendor.id pci 0x1267
-+vendor.name S. A. Telecommunications
-
- vendor.id pci 0x1267
-&device.id pci 0x5352
-+device.name PCR2101
-
- vendor.id pci 0x1267
-&device.id pci 0x5a4b
-+device.name Telsat Turbo
-
- vendor.id pci 0x1268
-+vendor.name Tektronix
-
- vendor.id pci 0x1269
-+vendor.name Thomson-CSF/TTM
-
- vendor.id pci 0x126a
-+vendor.name Lexmark International, Inc.
-
- vendor.id pci 0x126b
-+vendor.name Adax, Inc.
-
- vendor.id pci 0x126c
-+vendor.name Northern Telecom
-
- vendor.id pci 0x126c
-&device.id pci 0x1211
-+device.name 10/100BaseTX [RTL81xx]
-
- vendor.id pci 0x126c
-&device.id pci 0x126c
-+device.name 802.11b Wireless Ethernet Adapter
-
- vendor.id pci 0x126d
-+vendor.name Splash Technology, Inc.
-
- vendor.id pci 0x126e
-+vendor.name Sumitomo Metal Industries, Ltd.
-
- vendor.id pci 0x126f
-+vendor.name Silicon Motion, Inc.
-
- vendor.id pci 0x126f
-&device.id pci 0x0501
-+device.name SM501 VoyagerGX
-
- vendor.id pci 0x126f
-&device.id pci 0x0710
-+device.name SM710 LynxEM
-
- vendor.id pci 0x126f
-&device.id pci 0x0712
-+device.name SM712 LynxEM+
-
- vendor.id pci 0x126f
-&device.id pci 0x0720
-+device.name SM720 Lynx3DM
-
- vendor.id pci 0x126f
-&device.id pci 0x0730
-+device.name SM731 Cougar3DR
-
- vendor.id pci 0x126f
-&device.id pci 0x0810
-+device.name SM810 LynxE
-
- vendor.id pci 0x126f
-&device.id pci 0x0811
-+device.name SM811 LynxE
-
- vendor.id pci 0x126f
-&device.id pci 0x0820
-+device.name SM820 Lynx3D
-
- vendor.id pci 0x126f
-&device.id pci 0x0910
-+device.name SM910
-
- vendor.id pci 0x1270
-+vendor.name Olympus Optical Co., Ltd.
-
- vendor.id pci 0x1271
-+vendor.name GW Instruments
-
- vendor.id pci 0x1272
-+vendor.name Telematics International
-
- vendor.id pci 0x1273
-+vendor.name Hughes Network Systems
-
- vendor.id pci 0x1273
-&device.id pci 0x0002
-+device.name DirecPC
-
- vendor.id pci 0x1274
-+vendor.name Ensoniq
-
- vendor.id pci 0x1274
-&device.id pci 0x1171
-+device.name ES1373 [AudioPCI] (also Creative Labs CT5803)
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-+device.name ES1371 [AudioPCI-97]
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0024
-+subdevice.name AudioPCI on Motherboard Compaq Deskpro
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb1a7
-+subdevice.name ES1371, ES1373 AudioPCI
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x80ac
-+subdevice.name ES1371, ES1373 AudioPCI
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1042
-&subdevice.id pci 0x1854
-+subdevice.name Tazer
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x8054
-+subdevice.name Tabor2
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1274
-&subdevice.id pci 0x1371
-+subdevice.name Creative Sound Blaster AudioPCI64V, AudioPCI128
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6470
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6560
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6630
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6631
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6632
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6633
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6820
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6822
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6830
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6880
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6900
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6910
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6191
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6930
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6193
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6990
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6991
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2077
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard KR639
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2105
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MR800
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2107
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard MR801
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2172
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard DR739
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x9902
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard KW11
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x9903
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard KW31
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x9904
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard KA11
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x9905
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard KC13
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x152d
-&subdevice.id pci 0x8801
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard CP810E
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x152d
-&subdevice.id pci 0x8802
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard CP810
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x152d
-&subdevice.id pci 0x8803
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard P3810E
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x152d
-&subdevice.id pci 0x8804
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard P3810-S
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x152d
-&subdevice.id pci 0x8805
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard P3820-S
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x2001
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard 6CTR
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x2200
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard 6WTX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x3000
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard 6WSV
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x3100
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard 6WIV2
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x3102
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard 6WIV
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x7060
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard 6ASA2
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4249
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard BI440ZX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x424c
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard BL440ZX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x425a
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard BZ440ZX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4341
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard Cayman
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4343
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard Cape Cod
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4649
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard Fire Island
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x464a
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard FJ440ZX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4d4f
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard Montreal
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4f43
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard OC440LX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x5243
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard RC440BX
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x5352
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard SunRiver
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x5643
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard Vancouver
-
- vendor.id pci 0x1274
-&device.id pci 0x1371
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x5753
-+subdevice.name ES1371, ES1373 AudioPCI On Motherboard WS440BX
-
- vendor.id pci 0x1274
-&device.id pci 0x5000
-+device.name ES1370 [AudioPCI]
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-+device.name 5880 AudioPCI
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x1274
-&subdevice.id pci 0x2000
-+subdevice.name Creative Sound Blaster AudioPCI128
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x1274
-&subdevice.id pci 0x2003
-+subdevice.name Creative SoundBlaster AudioPCI 128
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x1274
-&subdevice.id pci 0x5880
-+subdevice.name Creative Sound Blaster AudioPCI128
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x1274
-&subdevice.id pci 0x8001
-+subdevice.name Sound Blaster 16PCI 4.1ch
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xa000
-+subdevice.name 5880 AudioPCI On Motherboard 6OXET
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6880
-+subdevice.name 5880 AudioPCI On Motherboard MS-6188 1.00
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x2001
-+subdevice.name 5880 AudioPCI On Motherboard 6CTR
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x2200
-+subdevice.name 5880 AudioPCI On Motherboard 6WTX
-
- vendor.id pci 0x1274
-&device.id pci 0x5880
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x7040
-+subdevice.name 5880 AudioPCI On Motherboard 6ATA4
-
- vendor.id pci 0x1275
-+vendor.name Network Appliance Corporation
-
- vendor.id pci 0x1276
-+vendor.name Switched Network Technologies, Inc.
-
- vendor.id pci 0x1277
-+vendor.name Comstream
-
- vendor.id pci 0x1278
-+vendor.name Transtech Parallel Systems Ltd.
-
- vendor.id pci 0x1278
-&device.id pci 0x0701
-+device.name TPE3/TM3 PowerPC Node
-
- vendor.id pci 0x1278
-&device.id pci 0x0710
-+device.name TPE5 PowerPC PCI board
-
- vendor.id pci 0x1279
-+vendor.name Transmeta Corporation
-
- vendor.id pci 0x1279
-&device.id pci 0x0295
-+device.name Northbridge
-
- vendor.id pci 0x1279
-&device.id pci 0x0395
-+device.name LongRun Northbridge
-
- vendor.id pci 0x1279
-&device.id pci 0x0396
-+device.name SDRAM controller
-
- vendor.id pci 0x1279
-&device.id pci 0x0397
-+device.name BIOS scratchpad
-
- vendor.id pci 0x127a
-+vendor.name Rockwell International
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x094c
-+subdevice.name SupraExpress 56i PRO [Diamond SUP2380]
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4002
-+subdevice.name HPG / MDP3858-U
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4005
-+subdevice.name MDP3858-E
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4007
-+subdevice.name MDP3858-A/-NZ
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4012
-+subdevice.name MDP3858-SA
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4017
-+subdevice.name MDP3858-W
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4018
-+subdevice.name MDP3858-W
-
- vendor.id pci 0x127a
-&device.id pci 0x1002
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x1002
-+subdevice.name Rockwell 56K D/F HCF Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0bc
-+subdevice.name 229-DF Zephyr
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb114
-+subdevice.name 229-DF Cheetah
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x802b
-+subdevice.name 229-DF
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x13df
-&subdevice.id pci 0x1003
-+subdevice.name PCI56RX Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0117
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0147
-+subdevice.name IBM F-1156IV+/R3 Spain V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0197
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x01c7
-+subdevice.name IBM F-1156IV+/R3 WW V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x01f7
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1003
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1103
-+subdevice.name IBM 5614PM3G V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1003
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1602
-+subdevice.name Compaq 229-DF Ducati
-
- vendor.id pci 0x127a
-&device.id pci 0x1004
-+device.name HCF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1004
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x1500
-+subdevice.name MicroLink 56k Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1004
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1059
-+subdevice.name Fujitsu 229-DFRT
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8029
-+subdevice.name 229-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8054
-+subdevice.name Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x103c
-+subdevice.name Fujitsu
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1055
-+subdevice.name Fujitsu 229-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1056
-+subdevice.name Fujitsu 229-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4003
-+subdevice.name MDP3858SP-U
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4006
-+subdevice.name Packard Bell MDP3858V-E
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4008
-+subdevice.name MDP3858SP-A/SP-NZ
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4009
-+subdevice.name MDP3858SP-E
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4010
-+subdevice.name MDP3858V-U
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4011
-+subdevice.name MDP3858SP-SA
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4013
-+subdevice.name MDP3858V-A/V-NZ
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4015
-+subdevice.name MDP3858SP-W
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4016
-+subdevice.name MDP3858V-W
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4019
-+subdevice.name MDP3858V-SA
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x13df
-&subdevice.id pci 0x1005
-+subdevice.name PCI56RVP Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0187
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x01a7
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x01b7
-+subdevice.name IBM DF-1156IV+/R3 Spain V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x01d7
-+subdevice.name IBM DF-1156IV+/R3 WW V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1005
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1105
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1005
-&subvendor.id pci 0x1437
-&subdevice.id pci 0x1105
-+subdevice.name IBM 5614PS3G V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1022
-+device.name HCF 56k Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1022
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1303
-+subdevice.name M3-5614PM3G V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4020
-+subdevice.name Packard Bell MDP3858-WE
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4023
-+subdevice.name MDP3858-UE
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0247
-+subdevice.name IBM F-1156IV+/R6 Spain V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0297
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x02c7
-+subdevice.name IBM F-1156IV+/R6 WW V.90 Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1203
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1023
-&subvendor.id pci 0x1436
-&subdevice.id pci 0x1303
-+subdevice.name IBM
-
- vendor.id pci 0x127a
-&device.id pci 0x1024
-+device.name HCF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1025
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1025
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x106a
-+subdevice.name Fujitsu 235-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x1025
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4021
-+subdevice.name Packard Bell MDP3858V-WE
-
- vendor.id pci 0x127a
-&device.id pci 0x1025
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4022
-+subdevice.name MDP3858SP-WE
-
- vendor.id pci 0x127a
-&device.id pci 0x1025
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4024
-+subdevice.name MDP3858V-UE
-
- vendor.id pci 0x127a
-&device.id pci 0x1025
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4025
-+subdevice.name MDP3858SP-UE
-
- vendor.id pci 0x127a
-&device.id pci 0x1026
-+device.name HCF 56k PCI Speakerphone Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1032
-+device.name HCF 56k Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1033
-+device.name HCF 56k Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1034
-+device.name HCF 56k Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1035
-+device.name HCF 56k PCI Speakerphone Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1036
-+device.name HCF 56k Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x1085
-+device.name HCF 56k Volcano PCI Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8044
-+subdevice.name 229-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8045
-+subdevice.name 229-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8055
-+subdevice.name PBE/Aztech 235W-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8056
-+subdevice.name 235-DFSV
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x805a
-+subdevice.name Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x805f
-+subdevice.name Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2005
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8074
-+subdevice.name Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2013
-+device.name HSF 56k Data/Fax Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2013
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2013
-&subvendor.id pci 0x1179
-&subdevice.id pci 0xff00
-+subdevice.name Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2014
-+device.name HSF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2014
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1057
-+subdevice.name Fujitsu Citicorp III
-
- vendor.id pci 0x127a
-&device.id pci 0x2014
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4050
-+subdevice.name MSP3880-U
-
- vendor.id pci 0x127a
-&device.id pci 0x2014
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4055
-+subdevice.name MSP3880-W
-
- vendor.id pci 0x127a
-&device.id pci 0x2015
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2015
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1063
-+subdevice.name Fujitsu
-
- vendor.id pci 0x127a
-&device.id pci 0x2015
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1064
-+subdevice.name Fujitsu
-
- vendor.id pci 0x127a
-&device.id pci 0x2015
-&subvendor.id pci 0x1468
-&subdevice.id pci 0x2015
-+subdevice.name Fujitsu
-
- vendor.id pci 0x127a
-&device.id pci 0x2016
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x2016
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4051
-+subdevice.name MSP3880V-W
-
- vendor.id pci 0x127a
-&device.id pci 0x2016
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4052
-+subdevice.name MSP3880SP-W
-
- vendor.id pci 0x127a
-&device.id pci 0x2016
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4054
-+subdevice.name MSP3880V-U
-
- vendor.id pci 0x127a
-&device.id pci 0x2016
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4056
-+subdevice.name MSP3880SP-U
-
- vendor.id pci 0x127a
-&device.id pci 0x2016
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4057
-+subdevice.name MSP3880SP-A
-
- vendor.id pci 0x127a
-&device.id pci 0x4311
-+device.name Riptide HSF 56k PCI Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x4311
-&subvendor.id pci 0x127a
-&subdevice.id pci 0x4311
-+subdevice.name Ring Modular? Riptide HSF RT HP Dom
-
- vendor.id pci 0x127a
-&device.id pci 0x4311
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0210
-+subdevice.name HP-GVC
-
- vendor.id pci 0x127a
-&device.id pci 0x4320
-+device.name Riptide PCI Audio Controller
-
- vendor.id pci 0x127a
-&device.id pci 0x4320
-&subvendor.id pci 0x1235
-&subdevice.id pci 0x4320
-+subdevice.name Riptide PCI Audio Controller
-
- vendor.id pci 0x127a
-&device.id pci 0x4321
-+device.name Riptide HCF 56k PCI Modem
-
- vendor.id pci 0x127a
-&device.id pci 0x4321
-&subvendor.id pci 0x1235
-&subdevice.id pci 0x4321
-+subdevice.name Hewlett Packard DF
-
- vendor.id pci 0x127a
-&device.id pci 0x4321
-&subvendor.id pci 0x1235
-&subdevice.id pci 0x4324
-+subdevice.name Hewlett Packard DF
-
- vendor.id pci 0x127a
-&device.id pci 0x4321
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0210
-+subdevice.name Hewlett Packard DF
-
- vendor.id pci 0x127a
-&device.id pci 0x4321
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2321
-+subdevice.name Riptide
-
- vendor.id pci 0x127a
-&device.id pci 0x4322
-+device.name Riptide PCI Game Controller
-
- vendor.id pci 0x127a
-&device.id pci 0x4322
-&subvendor.id pci 0x1235
-&subdevice.id pci 0x4322
-+subdevice.name Riptide PCI Game Controller
-
- vendor.id pci 0x127a
-&device.id pci 0x8234
-+device.name RapidFire 616X ATM155 Adapter
-
- vendor.id pci 0x127a
-&device.id pci 0x8234
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0022
-+subdevice.name RapidFire 616X ATM155 Adapter
-
- vendor.id pci 0x127a
-&device.id pci 0x8234
-&subvendor.id pci 0x108d
-&subdevice.id pci 0x0027
-+subdevice.name RapidFire 616X ATM155 Adapter
-
- vendor.id pci 0x127b
-+vendor.name Pixera Corporation
-
- vendor.id pci 0x127c
-+vendor.name Crosspoint Solutions, Inc.
-
- vendor.id pci 0x127d
-+vendor.name Vela Research
-
- vendor.id pci 0x127e
-+vendor.name Winnov, L.P.
-
- vendor.id pci 0x127f
-+vendor.name Fujifilm
-
- vendor.id pci 0x1280
-+vendor.name Photoscript Group Ltd.
-
- vendor.id pci 0x1281
-+vendor.name Yokogawa Electric Corporation
-
- vendor.id pci 0x1282
-+vendor.name Davicom Semiconductor, Inc.
-
- vendor.id pci 0x1282
-&device.id pci 0x9009
-+device.name Ethernet 100/10 MBit
-
- vendor.id pci 0x1282
-&device.id pci 0x9100
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x1282
-&device.id pci 0x9102
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x1282
-&device.id pci 0x9132
-+device.name Ethernet 100/10 MBit
-
- vendor.id pci 0x1283
-+vendor.name Integrated Technology Express, Inc.
-
- vendor.id pci 0x1283
-&device.id pci 0x673a
-+device.name IT8330G
-
- vendor.id pci 0x1283
-&device.id pci 0x8212
-+device.name IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212)
-
- vendor.id pci 0x1283
-&device.id pci 0x8212
-&subvendor.id pci 0x1283
-&subdevice.id pci 0x0001
-+subdevice.name IT/ITE8212 Dual channel ATA RAID controller
-
- vendor.id pci 0x1283
-&device.id pci 0x8330
-+device.name IT8330G
-
- vendor.id pci 0x1283
-&device.id pci 0x8872
-+device.name IT8874F PCI Dual Serial Port Controller
-
- vendor.id pci 0x1283
-&device.id pci 0x8888
-+device.name IT8888F PCI to ISA Bridge with SMB
-
- vendor.id pci 0x1283
-&device.id pci 0x8889
-+device.name IT8889F PCI to ISA Bridge
-
- vendor.id pci 0x1283
-&device.id pci 0xe886
-+device.name IT8330G
-
- vendor.id pci 0x1284
-+vendor.name Sahara Networks, Inc.
-
- vendor.id pci 0x1285
-+vendor.name Platform Technologies, Inc.
-
- vendor.id pci 0x1285
-&device.id pci 0x0100
-+device.name AGOGO sound chip (aka ESS Maestro 1)
-
- vendor.id pci 0x1286
-+vendor.name Mazet GmbH
-
- vendor.id pci 0x1287
-+vendor.name M-Pact, Inc.
-
- vendor.id pci 0x1287
-&device.id pci 0x001e
-+device.name LS220D DVD Decoder
-
- vendor.id pci 0x1287
-&device.id pci 0x001f
-+device.name LS220C DVD Decoder
-
- vendor.id pci 0x1288
-+vendor.name Timestep Corporation
-
- vendor.id pci 0x1289
-+vendor.name AVC Technology, Inc.
-
- vendor.id pci 0x128a
-+vendor.name Asante Technologies, Inc.
-
- vendor.id pci 0x128b
-+vendor.name Transwitch Corporation
-
- vendor.id pci 0x128c
-+vendor.name Retix Corporation
-
- vendor.id pci 0x128d
-+vendor.name G2 Networks, Inc.
-
- vendor.id pci 0x128d
-&device.id pci 0x0021
-+device.name ATM155 Adapter
-
- vendor.id pci 0x128e
-+vendor.name Hoontech Corporation/Samho Multi Tech Ltd.
-
- vendor.id pci 0x128e
-&device.id pci 0x0008
-+device.name ST128 WSS/SB
-
- vendor.id pci 0x128e
-&device.id pci 0x0009
-+device.name ST128 SAM9407
-
- vendor.id pci 0x128e
-&device.id pci 0x000a
-+device.name ST128 Game Port
-
- vendor.id pci 0x128e
-&device.id pci 0x000b
-+device.name ST128 MPU Port
-
- vendor.id pci 0x128e
-&device.id pci 0x000c
-+device.name ST128 Ctrl Port
-
- vendor.id pci 0x128f
-+vendor.name Tateno Dennou, Inc.
-
- vendor.id pci 0x1290
-+vendor.name Sord Computer Corporation
-
- vendor.id pci 0x1291
-+vendor.name NCS Computer Italia
-
- vendor.id pci 0x1292
-+vendor.name Tritech Microelectronics Inc
-
- vendor.id pci 0x1293
-+vendor.name Media Reality Technology
-
- vendor.id pci 0x1294
-+vendor.name Rhetorex, Inc.
-
- vendor.id pci 0x1295
-+vendor.name Imagenation Corporation
-
- vendor.id pci 0x1296
-+vendor.name Kofax Image Products
-
- vendor.id pci 0x1297
-+vendor.name Holco Enterprise Co, Ltd/Shuttle Computer
-
- vendor.id pci 0x1298
-+vendor.name Spellcaster Telecommunications Inc.
-
- vendor.id pci 0x1299
-+vendor.name Knowledge Technology Lab.
-
- vendor.id pci 0x129a
-+vendor.name VMetro, inc.
-
- vendor.id pci 0x129a
-&device.id pci 0x0615
-+device.name PBT-615 PCI-X Bus Analyzer
-
- vendor.id pci 0x129b
-+vendor.name Image Access
-
- vendor.id pci 0x129c
-+vendor.name Jaycor
-
- vendor.id pci 0x129d
-+vendor.name Compcore Multimedia, Inc.
-
- vendor.id pci 0x129e
-+vendor.name Victor Company of Japan, Ltd.
-
- vendor.id pci 0x129f
-+vendor.name OEC Medical Systems, Inc.
-
- vendor.id pci 0x12a0
-+vendor.name Allen-Bradley Company
-
- vendor.id pci 0x12a1
-+vendor.name Simpact Associates, Inc.
-
- vendor.id pci 0x12a2
-+vendor.name Newgen Systems Corporation
-
- vendor.id pci 0x12a3
-+vendor.name Lucent Technologies
-
- vendor.id pci 0x12a3
-&device.id pci 0x8105
-+device.name T8105 H100 Digital Switch
-
- vendor.id pci 0x12a4
-+vendor.name NTT Electronics Technology Company
-
- vendor.id pci 0x12a5
-+vendor.name Vision Dynamics Ltd.
-
- vendor.id pci 0x12a6
-+vendor.name Scalable Networks, Inc.
-
- vendor.id pci 0x12a7
-+vendor.name AMO GmbH
-
- vendor.id pci 0x12a8
-+vendor.name News Datacom
-
- vendor.id pci 0x12a9
-+vendor.name Xiotech Corporation
-
- vendor.id pci 0x12aa
-+vendor.name SDL Communications, Inc.
-
- vendor.id pci 0x12ab
-+vendor.name Yuan Yuan Enterprise Co., Ltd.
-
- vendor.id pci 0x12ab
-&device.id pci 0x0002
-+device.name AU8830 [Vortex2] Based Sound Card With A3D Support
-
- vendor.id pci 0x12ab
-&device.id pci 0x3000
-+device.name MPG-200C PCI DVD Decoder Card
-
- vendor.id pci 0x12ac
-+vendor.name Measurex Corporation
-
- vendor.id pci 0x12ad
-+vendor.name Multidata GmbH
-
- vendor.id pci 0x12ae
-+vendor.name Alteon Networks Inc.
-
- vendor.id pci 0x12ae
-&device.id pci 0x0001
-+device.name AceNIC Gigabit Ethernet
-
- vendor.id pci 0x12ae
-&device.id pci 0x0001
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0104
-+subdevice.name Gigabit Ethernet-SX PCI Adapter
-
- vendor.id pci 0x12ae
-&device.id pci 0x0001
-&subvendor.id pci 0x12ae
-&subdevice.id pci 0x0001
-+subdevice.name Gigabit Ethernet-SX (Universal)
-
- vendor.id pci 0x12ae
-&device.id pci 0x0001
-&subvendor.id pci 0x1410
-&subdevice.id pci 0x0104
-+subdevice.name Gigabit Ethernet-SX PCI Adapter
-
- vendor.id pci 0x12ae
-&device.id pci 0x0002
-+device.name AceNIC Gigabit Ethernet (Copper)
-
- vendor.id pci 0x12ae
-&device.id pci 0x0002
-&subvendor.id pci 0x10a9
-&subdevice.id pci 0x8002
-+subdevice.name Acenic Gigabit Ethernet
-
- vendor.id pci 0x12ae
-&device.id pci 0x0002
-&subvendor.id pci 0x12ae
-&subdevice.id pci 0x0002
-+subdevice.name Gigabit Ethernet-T (3C986-T)
-
- vendor.id pci 0x12ae
-&device.id pci 0x00fa
-+device.name Farallon PN9100-T Gigabit Ethernet
-
- vendor.id pci 0x12af
-+vendor.name TDK USA Corp
-
- vendor.id pci 0x12b0
-+vendor.name Jorge Scientific Corp
-
- vendor.id pci 0x12b1
-+vendor.name GammaLink
-
- vendor.id pci 0x12b2
-+vendor.name General Signal Networks
-
- vendor.id pci 0x12b3
-+vendor.name Inter-Face Co Ltd
-
- vendor.id pci 0x12b4
-+vendor.name FutureTel Inc
-
- vendor.id pci 0x12b5
-+vendor.name Granite Systems Inc.
-
- vendor.id pci 0x12b6
-+vendor.name Natural Microsystems
-
- vendor.id pci 0x12b7
-+vendor.name Cognex Modular Vision Systems Div. - Acumen Inc.
-
- vendor.id pci 0x12b8
-+vendor.name Korg
-
- vendor.id pci 0x12b9
-+vendor.name 3Com Corp, Modem Division (formerly US Robotics)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-+device.name WinModem
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x005c
-+subdevice.name USR 56k Internal Voice WinModem (Model 3472)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x005e
-+subdevice.name USR 56k Internal WinModem (Models 662975)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x0062
-+subdevice.name USR 56k Internal Voice WinModem (Model 662978)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x0068
-+subdevice.name USR 56k Internal Voice WinModem (Model 5690)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x007a
-+subdevice.name USR 56k Internal Voice WinModem (Model 662974)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x007f
-+subdevice.name USR 56k Internal WinModem (Models 5698, 5699)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x0080
-+subdevice.name USR 56k Internal WinModem (Models 2975, 3528)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x0081
-+subdevice.name USR 56k Internal Voice WinModem (Models 2974, 3529)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1006
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x0091
-+subdevice.name USR 56k Internal Voice WinModem (Model 2978)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1007
-+device.name USR 56k Internal WinModem
-
- vendor.id pci 0x12b9
-&device.id pci 0x1007
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x00a3
-+subdevice.name USR 56k Internal WinModem (Model 3595)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1008
-+device.name 56K FaxModem Model 5610
-
- vendor.id pci 0x12b9
-&device.id pci 0x1008
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x00a2
-+subdevice.name USR 56k Internal FAX Modem (Model 2977)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1008
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x00aa
-+subdevice.name USR 56k Internal Voice Modem (Model 2976)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1008
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x00ab
-+subdevice.name USR 56k Internal Voice Modem (Model 5609)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1008
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x00ac
-+subdevice.name USR 56k Internal Voice Modem (Model 3298)
-
- vendor.id pci 0x12b9
-&device.id pci 0x1008
-&subvendor.id pci 0x12b9
-&subdevice.id pci 0x00ad
-+subdevice.name USR 56k Internal FAX Modem (Model 5610)
-
- vendor.id pci 0x12ba
-+vendor.name BittWare, Inc.
-
- vendor.id pci 0x12bb
-+vendor.name Nippon Unisoft Corporation
-
- vendor.id pci 0x12bc
-+vendor.name Array Microsystems
-
- vendor.id pci 0x12bd
-+vendor.name Computerm Corp.
-
- vendor.id pci 0x12be
-+vendor.name Anchor Chips Inc.
-
- vendor.id pci 0x12be
-&device.id pci 0x3041
-+device.name AN3041Q CO-MEM
-
- vendor.id pci 0x12be
-&device.id pci 0x3042
-+device.name AN3042Q CO-MEM Lite
-
- vendor.id pci 0x12be
-&device.id pci 0x3042
-&subvendor.id pci 0x12be
-&subdevice.id pci 0x3042
-+subdevice.name Anchor Chips Lite Evaluation Board
-
- vendor.id pci 0x12bf
-+vendor.name Fujifilm Microdevices
-
- vendor.id pci 0x12c0
-+vendor.name Infimed
-
- vendor.id pci 0x12c1
-+vendor.name GMM Research Corp
-
- vendor.id pci 0x12c2
-+vendor.name Mentec Limited
-
- vendor.id pci 0x12c3
-+vendor.name Holtek Microelectronics Inc
-
- vendor.id pci 0x12c3
-&device.id pci 0x0058
-+device.name PCI NE2K Ethernet
-
- vendor.id pci 0x12c3
-&device.id pci 0x5598
-+device.name PCI NE2K Ethernet
-
- vendor.id pci 0x12c4
-+vendor.name Connect Tech Inc
-
- vendor.id pci 0x12c5
-+vendor.name Picture Elements Incorporated
-
- vendor.id pci 0x12c5
-&device.id pci 0x007e
-+device.name Imaging/Scanning Subsystem Engine
-
- vendor.id pci 0x12c5
-&device.id pci 0x007f
-+device.name Imaging/Scanning Subsystem Engine
-
- vendor.id pci 0x12c5
-&device.id pci 0x0081
-+device.name PCIVST [Grayscale Thresholding Engine]
-
- vendor.id pci 0x12c5
-&device.id pci 0x0085
-+device.name Video Simulator/Sender
-
- vendor.id pci 0x12c5
-&device.id pci 0x0086
-+device.name THR2 Multi-scale Thresholder
-
- vendor.id pci 0x12c6
-+vendor.name Mitani Corporation
-
- vendor.id pci 0x12c7
-+vendor.name Dialogic Corp
-
- vendor.id pci 0x12c8
-+vendor.name G Force Co, Ltd
-
- vendor.id pci 0x12c9
-+vendor.name Gigi Operations
-
- vendor.id pci 0x12ca
-+vendor.name Integrated Computing Engines
-
- vendor.id pci 0x12cb
-+vendor.name Antex Electronics Corporation
-
- vendor.id pci 0x12cc
-+vendor.name Pluto Technologies International
-
- vendor.id pci 0x12cd
-+vendor.name Aims Lab
-
- vendor.id pci 0x12ce
-+vendor.name Netspeed Inc.
-
- vendor.id pci 0x12cf
-+vendor.name Prophet Systems, Inc.
-
- vendor.id pci 0x12d0
-+vendor.name GDE Systems, Inc.
-
- vendor.id pci 0x12d1
-+vendor.name PSITech
-
- vendor.id pci 0x12d2
-+vendor.name NVidia / SGS Thomson (Joint Venture)
-
- vendor.id pci 0x12d2
-&device.id pci 0x0008
-+device.name NV1
-
- vendor.id pci 0x12d2
-&device.id pci 0x0009
-+device.name DAC64
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-+device.name Riva128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x1048
-&subdevice.id pci 0x0c10
-+subdevice.name VICTORY Erazor
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x8030
-+subdevice.name STB Velocity 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0350
-+subdevice.name Viper V330
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x1092
-+subdevice.name Viper V330
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b1b
-+subdevice.name STB Velocity 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b1d
-+subdevice.name STB Velocity 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b1e
-+subdevice.name STB Velocity 128, PAL TV-Out
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b20
-+subdevice.name STB Velocity 128 Sapphire
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b21
-+subdevice.name STB Velocity 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b22
-+subdevice.name STB Velocity 128 AGP, NTSC TV-Out
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b23
-+subdevice.name STB Velocity 128 AGP, PAL TV-Out
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b27
-+subdevice.name STB Velocity 128 DVD
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1b88
-+subdevice.name MVP Pro 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x222a
-+subdevice.name STB Velocity 128 AGP
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x2230
-+subdevice.name STB Velocity 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x2232
-+subdevice.name STB Velocity 128
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x2235
-+subdevice.name STB Velocity 128 AGP
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-&subvendor.id pci 0x2a15
-&subdevice.id pci 0x54a3
-+subdevice.name 3DVision-SAGP / 3DexPlorer 3000
-
- vendor.id pci 0x12d2
-&device.id pci 0x0019
-+device.name Riva128ZX
-
- vendor.id pci 0x12d2
-&device.id pci 0x0020
-+device.name TNT
-
- vendor.id pci 0x12d2
-&device.id pci 0x0028
-+device.name TNT2
-
- vendor.id pci 0x12d2
-&device.id pci 0x0029
-+device.name UTNT2
-
- vendor.id pci 0x12d2
-&device.id pci 0x002c
-+device.name VTNT2
-
- vendor.id pci 0x12d2
-&device.id pci 0x00a0
-+device.name ITNT2
-
- vendor.id pci 0x12d3
-+vendor.name Vingmed Sound A/S
-
- vendor.id pci 0x12d4
-+vendor.name Ulticom (Formerly DGM&S)
-
- vendor.id pci 0x12d4
-&device.id pci 0x0200
-+device.name T1 Card
-
- vendor.id pci 0x12d5
-+vendor.name Equator Technologies Inc
-
- vendor.id pci 0x12d6
-+vendor.name Analogic Corp
-
- vendor.id pci 0x12d7
-+vendor.name Biotronic SRL
-
- vendor.id pci 0x12d8
-+vendor.name Pericom Semiconductor
-
- vendor.id pci 0x12d9
-+vendor.name Aculab PLC
-
- vendor.id pci 0x12d9
-&device.id pci 0x0002
-+device.name PCI Prosody
-
- vendor.id pci 0x12d9
-&device.id pci 0x0004
-+device.name cPCI Prosody
-
- vendor.id pci 0x12d9
-&device.id pci 0x0005
-+device.name Aculab E1/T1 PCI card
-
- vendor.id pci 0x12da
-+vendor.name True Time Inc.
-
- vendor.id pci 0x12db
-+vendor.name Annapolis Micro Systems, Inc
-
- vendor.id pci 0x12dc
-+vendor.name Symicron Computer Communication Ltd.
-
- vendor.id pci 0x12dd
-+vendor.name Management Graphics
-
- vendor.id pci 0x12de
-+vendor.name Rainbow Technologies
-
- vendor.id pci 0x12de
-&device.id pci 0x0200
-+device.name CryptoSwift CS200
-
- vendor.id pci 0x12df
-+vendor.name SBS Technologies Inc
-
- vendor.id pci 0x12e0
-+vendor.name Chase Research
-
- vendor.id pci 0x12e0
-&device.id pci 0x0010
-+device.name ST16C654 Quad UART
-
- vendor.id pci 0x12e0
-&device.id pci 0x0020
-+device.name ST16C654 Quad UART
-
- vendor.id pci 0x12e0
-&device.id pci 0x0030
-+device.name ST16C654 Quad UART
-
- vendor.id pci 0x12e1
-+vendor.name Nintendo Co, Ltd
-
- vendor.id pci 0x12e2
-+vendor.name Datum Inc. Bancomm-Timing Division
-
- vendor.id pci 0x12e3
-+vendor.name Imation Corp - Medical Imaging Systems
-
- vendor.id pci 0x12e4
-+vendor.name Brooktrout Technology Inc
-
- vendor.id pci 0x12e5
-+vendor.name Apex Semiconductor Inc
-
- vendor.id pci 0x12e6
-+vendor.name Cirel Systems
-
- vendor.id pci 0x12e7
-+vendor.name Sunsgroup Corporation
-
- vendor.id pci 0x12e8
-+vendor.name Crisc Corp
-
- vendor.id pci 0x12e9
-+vendor.name GE Spacenet
-
- vendor.id pci 0x12ea
-+vendor.name Zuken
-
- vendor.id pci 0x12eb
-+vendor.name Aureal Semiconductor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-+device.name Vortex 1
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8036
-+subdevice.name AU8820 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x2000
-+subdevice.name Sonic Impact A3D
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x2100
-+subdevice.name Sonic Impact A3D
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x2110
-+subdevice.name Sonic Impact A3D
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x2200
-+subdevice.name Sonic Impact A3D
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x1002
-+subdevice.name AU8820 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x12eb
-&subdevice.id pci 0x0001
-+subdevice.name AU8820 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0001
-&subvendor.id pci 0x5053
-&subdevice.id pci 0x3355
-+subdevice.name Montego
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-+device.name Vortex 2
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8049
-+subdevice.name AU8830 Vortex 3D Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x807b
-+subdevice.name AU8830 Vortex 3D Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x3000
-+subdevice.name Monster Sound II
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x3001
-+subdevice.name Monster Sound II
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x3002
-+subdevice.name Monster Sound II
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x3003
-+subdevice.name Monster Sound II
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x3004
-+subdevice.name Monster Sound II
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x12eb
-&subdevice.id pci 0x0001
-+subdevice.name AU8830 Vortex 3D Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x12eb
-&subdevice.id pci 0x0002
-+subdevice.name AU8830 Vortex 3D Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x12eb
-&subdevice.id pci 0x0088
-+subdevice.name AU8830 Vortex 3D Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x3510
-+subdevice.name AU8830 Vortex 3D Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0002
-&subvendor.id pci 0x5053
-&subdevice.id pci 0x3356
-+subdevice.name Montego II
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-+device.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8049
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8077
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x109f
-&subdevice.id pci 0x1000
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x12eb
-&subdevice.id pci 0x0003
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x6780
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2073
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2091
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2104
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x0003
-&subvendor.id pci 0x14a4
-&subdevice.id pci 0x2106
-+subdevice.name AU8810 Vortex Digital Audio Processor
-
- vendor.id pci 0x12eb
-&device.id pci 0x8803
-+device.name Vortex 56k Software Modem
-
- vendor.id pci 0x12eb
-&device.id pci 0x8803
-&subvendor.id pci 0x12eb
-&subdevice.id pci 0x8803
-+subdevice.name Vortex 56k Software Modem
-
- vendor.id pci 0x12ec
-+vendor.name 3A International, Inc.
-
- vendor.id pci 0x12ed
-+vendor.name Optivision Inc.
-
- vendor.id pci 0x12ee
-+vendor.name Orange Micro
-
- vendor.id pci 0x12ef
-+vendor.name Vienna Systems
-
- vendor.id pci 0x12f0
-+vendor.name Pentek
-
- vendor.id pci 0x12f1
-+vendor.name Sorenson Vision Inc
-
- vendor.id pci 0x12f2
-+vendor.name Gammagraphx, Inc.
-
- vendor.id pci 0x12f3
-+vendor.name Radstone Technology
-
- vendor.id pci 0x12f4
-+vendor.name Megatel
-
- vendor.id pci 0x12f5
-+vendor.name Forks
-
- vendor.id pci 0x12f6
-+vendor.name Dawson France
-
- vendor.id pci 0x12f7
-+vendor.name Cognex
-
- vendor.id pci 0x12f8
-+vendor.name Electronic Design GmbH
-
- vendor.id pci 0x12f8
-&device.id pci 0x0002
-+device.name VideoMaker
-
- vendor.id pci 0x12f9
-+vendor.name Four Fold Ltd
-
- vendor.id pci 0x12fb
-+vendor.name Spectrum Signal Processing
-
- vendor.id pci 0x12fc
-+vendor.name Capital Equipment Corp
-
- vendor.id pci 0x12fd
-+vendor.name I2S
-
- vendor.id pci 0x12fe
-+vendor.name ESD Electronic System Design GmbH
-
- vendor.id pci 0x12ff
-+vendor.name Lexicon
-
- vendor.id pci 0x1300
-+vendor.name Harman International Industries Inc
-
- vendor.id pci 0x1302
-+vendor.name Computer Sciences Corp
-
- vendor.id pci 0x1303
-+vendor.name Innovative Integration
-
- vendor.id pci 0x1304
-+vendor.name Juniper Networks
-
- vendor.id pci 0x1305
-+vendor.name Netphone, Inc
-
- vendor.id pci 0x1306
-+vendor.name Duet Technologies
-
- vendor.id pci 0x1307
-+vendor.name Measurement Computing
-
- vendor.id pci 0x1307
-&device.id pci 0x0001
-+device.name PCI-DAS1602/16
-
- vendor.id pci 0x1307
-&device.id pci 0x000b
-+device.name PCI-DIO48H
-
- vendor.id pci 0x1307
-&device.id pci 0x000c
-+device.name PCI-PDISO8
-
- vendor.id pci 0x1307
-&device.id pci 0x000d
-+device.name PCI-PDISO16
-
- vendor.id pci 0x1307
-&device.id pci 0x000f
-+device.name PCI-DAS1200
-
- vendor.id pci 0x1307
-&device.id pci 0x0010
-+device.name PCI-DAS1602/12
-
- vendor.id pci 0x1307
-&device.id pci 0x0014
-+device.name PCI-DIO24H
-
- vendor.id pci 0x1307
-&device.id pci 0x0015
-+device.name PCI-DIO24H/CTR3
-
- vendor.id pci 0x1307
-&device.id pci 0x0016
-+device.name PCI-DIO48H/CTR15
-
- vendor.id pci 0x1307
-&device.id pci 0x0017
-+device.name PCI-DIO96H
-
- vendor.id pci 0x1307
-&device.id pci 0x0018
-+device.name PCI-CTR05
-
- vendor.id pci 0x1307
-&device.id pci 0x0019
-+device.name PCI-DAS1200/JR
-
- vendor.id pci 0x1307
-&device.id pci 0x001a
-+device.name PCI-DAS1001
-
- vendor.id pci 0x1307
-&device.id pci 0x001b
-+device.name PCI-DAS1002
-
- vendor.id pci 0x1307
-&device.id pci 0x001c
-+device.name PCI-DAS1602JR/16
-
- vendor.id pci 0x1307
-&device.id pci 0x001d
-+device.name PCI-DAS6402/16
-
- vendor.id pci 0x1307
-&device.id pci 0x001e
-+device.name PCI-DAS6402/12
-
- vendor.id pci 0x1307
-&device.id pci 0x001f
-+device.name PCI-DAS16/M1
-
- vendor.id pci 0x1307
-&device.id pci 0x0020
-+device.name PCI-DDA02/12
-
- vendor.id pci 0x1307
-&device.id pci 0x0021
-+device.name PCI-DDA04/12
-
- vendor.id pci 0x1307
-&device.id pci 0x0022
-+device.name PCI-DDA08/12
-
- vendor.id pci 0x1307
-&device.id pci 0x0023
-+device.name PCI-DDA02/16
-
- vendor.id pci 0x1307
-&device.id pci 0x0024
-+device.name PCI-DDA04/16
-
- vendor.id pci 0x1307
-&device.id pci 0x0025
-+device.name PCI-DDA08/16
-
- vendor.id pci 0x1307
-&device.id pci 0x0026
-+device.name PCI-DAC04/12-HS
-
- vendor.id pci 0x1307
-&device.id pci 0x0027
-+device.name PCI-DAC04/16-HS
-
- vendor.id pci 0x1307
-&device.id pci 0x0028
-+device.name PCI-DIO24
-
- vendor.id pci 0x1307
-&device.id pci 0x0029
-+device.name PCI-DAS08
-
- vendor.id pci 0x1307
-&device.id pci 0x002c
-+device.name PCI-INT32
-
- vendor.id pci 0x1307
-&device.id pci 0x0033
-+device.name PCI-DUAL-AC5
-
- vendor.id pci 0x1307
-&device.id pci 0x0034
-+device.name PCI-DAS-TC
-
- vendor.id pci 0x1307
-&device.id pci 0x0035
-+device.name PCI-DAS64/M1/16
-
- vendor.id pci 0x1307
-&device.id pci 0x0036
-+device.name PCI-DAS64/M2/16
-
- vendor.id pci 0x1307
-&device.id pci 0x0037
-+device.name PCI-DAS64/M3/16
-
- vendor.id pci 0x1307
-&device.id pci 0x004c
-+device.name PCI-DAS1000
-
- vendor.id pci 0x1307
-&device.id pci 0x004d
-+device.name PCI-QUAD04
-
- vendor.id pci 0x1307
-&device.id pci 0x0052
-+device.name PCI-DAS4020/12
-
- vendor.id pci 0x1307
-&device.id pci 0x005e
-+device.name PCI-DAS6025
-
- vendor.id pci 0x1308
-+vendor.name Jato Technologies Inc.
-
- vendor.id pci 0x1308
-&device.id pci 0x0001
-+device.name NetCelerator Adapter
-
- vendor.id pci 0x1308
-&device.id pci 0x0001
-&subvendor.id pci 0x1308
-&subdevice.id pci 0x0001
-+subdevice.name NetCelerator Adapter
-
- vendor.id pci 0x1309
-+vendor.name AB Semiconductor Ltd
-
- vendor.id pci 0x130a
-+vendor.name Mitsubishi Electric Microcomputer
-
- vendor.id pci 0x130b
-+vendor.name Colorgraphic Communications Corp
-
- vendor.id pci 0x130c
-+vendor.name Ambex Technologies, Inc
-
- vendor.id pci 0x130d
-+vendor.name Accelerix Inc
-
- vendor.id pci 0x130e
-+vendor.name Yamatake-Honeywell Co. Ltd
-
- vendor.id pci 0x130f
-+vendor.name Advanet Inc
-
- vendor.id pci 0x1310
-+vendor.name Gespac
-
- vendor.id pci 0x1311
-+vendor.name Videoserver, Inc
-
- vendor.id pci 0x1312
-+vendor.name Acuity Imaging, Inc
-
- vendor.id pci 0x1313
-+vendor.name Yaskawa Electric Co.
-
- vendor.id pci 0x1316
-+vendor.name Teradyne Inc
-
- vendor.id pci 0x1317
-+vendor.name Linksys
-
- vendor.id pci 0x1317
-&device.id pci 0x0981
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x1317
-&device.id pci 0x0985
-+device.name NC100 Network Everywhere Fast Ethernet 10/100
-
- vendor.id pci 0x1317
-&device.id pci 0x1985
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x1317
-&device.id pci 0x2850
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x1317
-&device.id pci 0x8201
-+device.name ADMtek ADM8211 802.11b Wireless Interface
-
- vendor.id pci 0x1317
-&device.id pci 0x8201
-&subvendor.id pci 0x10b8
-&subdevice.id pci 0x2635
-+subdevice.name SMC2635W 802.11b (11Mbps) wireless lan pcmcia (cardbus) card
-
- vendor.id pci 0x1317
-&device.id pci 0x8201
-&subvendor.id pci 0x1317
-&subdevice.id pci 0x8201
-+subdevice.name SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card
-
- vendor.id pci 0x1317
-&device.id pci 0x8211
-+device.name ADMtek ADM8211 802.11b Wireless Interface
-
- vendor.id pci 0x1317
-&device.id pci 0x9511
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x1318
-+vendor.name Packet Engines Inc.
-
- vendor.id pci 0x1318
-&device.id pci 0x0911
-+device.name GNIC-II PCI Gigabit Ethernet [Hamachi]
-
- vendor.id pci 0x1319
-+vendor.name Fortemedia, Inc
-
- vendor.id pci 0x1319
-&device.id pci 0x0801
-+device.name Xwave QS3000A [FM801]
-
- vendor.id pci 0x1319
-&device.id pci 0x0802
-+device.name Xwave QS3000A [FM801 game port]
-
- vendor.id pci 0x1319
-&device.id pci 0x1000
-+device.name FM801 PCI Audio
-
- vendor.id pci 0x1319
-&device.id pci 0x1001
-+device.name FM801 PCI Joystick
-
- vendor.id pci 0x131a
-+vendor.name Finisar Corp.
-
- vendor.id pci 0x131c
-+vendor.name Nippon Electro-Sensory Devices Corp
-
- vendor.id pci 0x131d
-+vendor.name Sysmic, Inc.
-
- vendor.id pci 0x131e
-+vendor.name Xinex Networks Inc
-
- vendor.id pci 0x131f
-+vendor.name Siig Inc
-
- vendor.id pci 0x131f
-&device.id pci 0x1000
-+device.name CyberSerial (1-port) 16550
-
- vendor.id pci 0x131f
-&device.id pci 0x1001
-+device.name CyberSerial (1-port) 16650
-
- vendor.id pci 0x131f
-&device.id pci 0x1002
-+device.name CyberSerial (1-port) 16850
-
- vendor.id pci 0x131f
-&device.id pci 0x1010
-+device.name Duet 1S(16550)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x1011
-+device.name Duet 1S(16650)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x1012
-+device.name Duet 1S(16850)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x1020
-+device.name CyberParallel (1-port)
-
- vendor.id pci 0x131f
-&device.id pci 0x1021
-+device.name CyberParallel (2-port)
-
- vendor.id pci 0x131f
-&device.id pci 0x1030
-+device.name CyberSerial (2-port) 16550
-
- vendor.id pci 0x131f
-&device.id pci 0x1031
-+device.name CyberSerial (2-port) 16650
-
- vendor.id pci 0x131f
-&device.id pci 0x1032
-+device.name CyberSerial (2-port) 16850
-
- vendor.id pci 0x131f
-&device.id pci 0x1034
-+device.name Trio 2S(16550)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x1035
-+device.name Trio 2S(16650)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x1036
-+device.name Trio 2S(16850)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x1050
-+device.name CyberSerial (4-port) 16550
-
- vendor.id pci 0x131f
-&device.id pci 0x1051
-+device.name CyberSerial (4-port) 16650
-
- vendor.id pci 0x131f
-&device.id pci 0x1052
-+device.name CyberSerial (4-port) 16850
-
- vendor.id pci 0x131f
-&device.id pci 0x2000
-+device.name CyberSerial (1-port) 16550
-
- vendor.id pci 0x131f
-&device.id pci 0x2001
-+device.name CyberSerial (1-port) 16650
-
- vendor.id pci 0x131f
-&device.id pci 0x2002
-+device.name CyberSerial (1-port) 16850
-
- vendor.id pci 0x131f
-&device.id pci 0x2010
-+device.name Duet 1S(16550)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x2011
-+device.name Duet 1S(16650)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x2012
-+device.name Duet 1S(16850)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x2020
-+device.name CyberParallel (1-port)
-
- vendor.id pci 0x131f
-&device.id pci 0x2021
-+device.name CyberParallel (2-port)
-
- vendor.id pci 0x131f
-&device.id pci 0x2030
-+device.name CyberSerial (2-port) 16550
-
- vendor.id pci 0x131f
-&device.id pci 0x2030
-&subvendor.id pci 0x131f
-&subdevice.id pci 0x2030
-+subdevice.name PCI Serial Card
-
- vendor.id pci 0x131f
-&device.id pci 0x2031
-+device.name CyberSerial (2-port) 16650
-
- vendor.id pci 0x131f
-&device.id pci 0x2032
-+device.name CyberSerial (2-port) 16850
-
- vendor.id pci 0x131f
-&device.id pci 0x2040
-+device.name Trio 1S(16550)+2P
-
- vendor.id pci 0x131f
-&device.id pci 0x2041
-+device.name Trio 1S(16650)+2P
-
- vendor.id pci 0x131f
-&device.id pci 0x2042
-+device.name Trio 1S(16850)+2P
-
- vendor.id pci 0x131f
-&device.id pci 0x2050
-+device.name CyberSerial (4-port) 16550
-
- vendor.id pci 0x131f
-&device.id pci 0x2051
-+device.name CyberSerial (4-port) 16650
-
- vendor.id pci 0x131f
-&device.id pci 0x2052
-+device.name CyberSerial (4-port) 16850
-
- vendor.id pci 0x131f
-&device.id pci 0x2060
-+device.name Trio 2S(16550)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x2061
-+device.name Trio 2S(16650)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x2062
-+device.name Trio 2S(16850)+1P
-
- vendor.id pci 0x131f
-&device.id pci 0x2081
-+device.name CyberSerial (8-port) ST16654
-
- vendor.id pci 0x1320
-+vendor.name Crypto AG
-
- vendor.id pci 0x1321
-+vendor.name Arcobel Graphics BV
-
- vendor.id pci 0x1322
-+vendor.name MTT Co., Ltd
-
- vendor.id pci 0x1323
-+vendor.name Dome Inc
-
- vendor.id pci 0x1324
-+vendor.name Sphere Communications
-
- vendor.id pci 0x1325
-+vendor.name Salix Technologies, Inc
-
- vendor.id pci 0x1326
-+vendor.name Seachange international
-
- vendor.id pci 0x1327
-+vendor.name Voss scientific
-
- vendor.id pci 0x1328
-+vendor.name quadrant international
-
- vendor.id pci 0x1329
-+vendor.name Productivity Enhancement
-
- vendor.id pci 0x132a
-+vendor.name Microcom Inc.
-
- vendor.id pci 0x132b
-+vendor.name Broadband Technologies
-
- vendor.id pci 0x132c
-+vendor.name Micrel Inc
-
- vendor.id pci 0x132d
-+vendor.name Integrated Silicon Solution, Inc.
-
- vendor.id pci 0x1330
-+vendor.name MMC Networks
-
- vendor.id pci 0x1331
-+vendor.name Radisys Corp.
-
- vendor.id pci 0x1331
-&device.id pci 0x0030
-+device.name ENP-2611
-
- vendor.id pci 0x1331
-&device.id pci 0x8200
-+device.name 82600 Host Bridge
-
- vendor.id pci 0x1331
-&device.id pci 0x8201
-+device.name 82600 IDE
-
- vendor.id pci 0x1331
-&device.id pci 0x8202
-+device.name 82600 USB
-
- vendor.id pci 0x1331
-&device.id pci 0x8210
-+device.name 82600 PCI Bridge
-
- vendor.id pci 0x1332
-+vendor.name Micro Memory
-
- vendor.id pci 0x1332
-&device.id pci 0x5415
-+device.name MM-5415CN PCI Memory Module with Battery Backup
-
- vendor.id pci 0x1332
-&device.id pci 0x5425
-+device.name MM-5425CN PCI 64/66 Memory Module with Battery Backup
-
- vendor.id pci 0x1334
-+vendor.name Redcreek Communications, Inc
-
- vendor.id pci 0x1335
-+vendor.name Videomail, Inc
-
- vendor.id pci 0x1337
-+vendor.name Third Planet Publishing
-
- vendor.id pci 0x1338
-+vendor.name BT Electronics
-
- vendor.id pci 0x133a
-+vendor.name Vtel Corp
-
- vendor.id pci 0x133b
-+vendor.name Softcom Microsystems
-
- vendor.id pci 0x133c
-+vendor.name Holontech Corp
-
- vendor.id pci 0x133d
-+vendor.name SS Technologies
-
- vendor.id pci 0x133e
-+vendor.name Virtual Computer Corp
-
- vendor.id pci 0x133f
-+vendor.name SCM Microsystems
-
- vendor.id pci 0x1340
-+vendor.name Atalla Corp
-
- vendor.id pci 0x1341
-+vendor.name Kyoto Microcomputer Co
-
- vendor.id pci 0x1342
-+vendor.name Promax Systems Inc
-
- vendor.id pci 0x1343
-+vendor.name Phylon Communications Inc
-
- vendor.id pci 0x1344
-+vendor.name Crucial Technology
-
- vendor.id pci 0x1345
-+vendor.name Arescom Inc
-
- vendor.id pci 0x1347
-+vendor.name Odetics
-
- vendor.id pci 0x1349
-+vendor.name Sumitomo Electric Industries, Ltd.
-
- vendor.id pci 0x134a
-+vendor.name DTC Technology Corp.
-
- vendor.id pci 0x134a
-&device.id pci 0x0001
-+device.name Domex 536
-
- vendor.id pci 0x134a
-&device.id pci 0x0002
-+device.name Domex DMX3194UP SCSI Adapter
-
- vendor.id pci 0x134b
-+vendor.name ARK Research Corp.
-
- vendor.id pci 0x134c
-+vendor.name Chori Joho System Co. Ltd
-
- vendor.id pci 0x134d
-+vendor.name PCTel Inc
-
- vendor.id pci 0x134d
-&device.id pci 0x2189
-+device.name HSP56 MicroModem
-
- vendor.id pci 0x134d
-&device.id pci 0x2486
-+device.name 2304WT V.92 MDC Modem
-
- vendor.id pci 0x134d
-&device.id pci 0x7890
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7890
-&subvendor.id pci 0x134d
-&subdevice.id pci 0x0001
-+subdevice.name PCT789 adapter
-
- vendor.id pci 0x134d
-&device.id pci 0x7891
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7891
-&subvendor.id pci 0x134d
-&subdevice.id pci 0x0001
-+subdevice.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7892
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7893
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7894
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7895
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7896
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134d
-&device.id pci 0x7897
-+device.name HSP MicroModem 56
-
- vendor.id pci 0x134e
-+vendor.name CSTI
-
- vendor.id pci 0x134f
-+vendor.name Algo System Co Ltd
-
- vendor.id pci 0x1350
-+vendor.name Systec Co. Ltd
-
- vendor.id pci 0x1351
-+vendor.name Sonix Inc
-
- vendor.id pci 0x1353
-+vendor.name Thales Idatys
-
- vendor.id pci 0x1353
-&device.id pci 0x0002
-+device.name Proserver
-
- vendor.id pci 0x1353
-&device.id pci 0x0003
-+device.name PCI-FUT
-
- vendor.id pci 0x1353
-&device.id pci 0x0004
-+device.name PCI-S0
-
- vendor.id pci 0x1353
-&device.id pci 0x0005
-+device.name PCI-FUT-S0
-
- vendor.id pci 0x1354
-+vendor.name Dwave System Inc
-
- vendor.id pci 0x1355
-+vendor.name Kratos Analytical Ltd
-
- vendor.id pci 0x1356
-+vendor.name The Logical Co
-
- vendor.id pci 0x1359
-+vendor.name Prisa Networks
-
- vendor.id pci 0x135a
-+vendor.name Brain Boxes
-
- vendor.id pci 0x135b
-+vendor.name Giganet Inc
-
- vendor.id pci 0x135c
-+vendor.name Quatech Inc
-
- vendor.id pci 0x135c
-&device.id pci 0x0010
-+device.name QSC-100
-
- vendor.id pci 0x135c
-&device.id pci 0x0020
-+device.name DSC-100
-
- vendor.id pci 0x135c
-&device.id pci 0x0030
-+device.name DSC-200/300
-
- vendor.id pci 0x135c
-&device.id pci 0x0040
-+device.name QSC-200/300
-
- vendor.id pci 0x135c
-&device.id pci 0x0050
-+device.name ESC-100D
-
- vendor.id pci 0x135c
-&device.id pci 0x0060
-+device.name ESC-100M
-
- vendor.id pci 0x135c
-&device.id pci 0x00f0
-+device.name MPAC-100 Syncronous Serial Card (Zilog 85230)
-
- vendor.id pci 0x135c
-&device.id pci 0x0170
-+device.name QSCLP-100
-
- vendor.id pci 0x135c
-&device.id pci 0x0180
-+device.name DSCLP-100
-
- vendor.id pci 0x135c
-&device.id pci 0x0190
-+device.name SSCLP-100
-
- vendor.id pci 0x135c
-&device.id pci 0x01a0
-+device.name QSCLP-200/300
-
- vendor.id pci 0x135c
-&device.id pci 0x01b0
-+device.name DSCLP-200/300
-
- vendor.id pci 0x135c
-&device.id pci 0x01c0
-+device.name SSCLP-200/300
-
- vendor.id pci 0x135d
-+vendor.name ABB Network Partner AB
-
- vendor.id pci 0x135e
-+vendor.name Sealevel Systems Inc
-
- vendor.id pci 0x135e
-&device.id pci 0x5101
-+device.name Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32)
-
- vendor.id pci 0x135e
-&device.id pci 0x7101
-+device.name Single Port RS-232/422/485/530
-
- vendor.id pci 0x135e
-&device.id pci 0x7201
-+device.name Dual Port RS-232/422/485 Interface
-
- vendor.id pci 0x135e
-&device.id pci 0x7202
-+device.name Dual Port RS-232 Interface
-
- vendor.id pci 0x135e
-&device.id pci 0x7401
-+device.name Four Port RS-232 Interface
-
- vendor.id pci 0x135e
-&device.id pci 0x7402
-+device.name Four Port RS-422/485 Interface
-
- vendor.id pci 0x135e
-&device.id pci 0x7801
-+device.name Eight Port RS-232 Interface
-
- vendor.id pci 0x135e
-&device.id pci 0x8001
-+device.name 8001 Digital I/O Adapter
-
- vendor.id pci 0x135f
-+vendor.name I-Data International A-S
-
- vendor.id pci 0x1360
-+vendor.name Meinberg Funkuhren
-
- vendor.id pci 0x1360
-&device.id pci 0x0101
-+device.name PCI32 DCF77 Radio Clock
-
- vendor.id pci 0x1360
-&device.id pci 0x0102
-+device.name PCI509 DCF77 Radio Clock
-
- vendor.id pci 0x1360
-&device.id pci 0x0103
-+device.name PCI510 DCF77 Radio Clock
-
- vendor.id pci 0x1360
-&device.id pci 0x0201
-+device.name GPS167PCI GPS Receiver
-
- vendor.id pci 0x1360
-&device.id pci 0x0202
-+device.name GPS168PCI GPS Receiver
-
- vendor.id pci 0x1360
-&device.id pci 0x0203
-+device.name GPS169PCI GPS Receiver
-
- vendor.id pci 0x1360
-&device.id pci 0x0301
-+device.name TCR510PCI IRIG Receiver
-
- vendor.id pci 0x1361
-+vendor.name Soliton Systems K.K.
-
- vendor.id pci 0x1362
-+vendor.name Fujifacom Corporation
-
- vendor.id pci 0x1363
-+vendor.name Phoenix Technology Ltd
-
- vendor.id pci 0x1364
-+vendor.name ATM Communications Inc
-
- vendor.id pci 0x1365
-+vendor.name Hypercope GmbH
-
- vendor.id pci 0x1366
-+vendor.name Teijin Seiki Co. Ltd
-
- vendor.id pci 0x1367
-+vendor.name Hitachi Zosen Corporation
-
- vendor.id pci 0x1368
-+vendor.name Skyware Corporation
-
- vendor.id pci 0x1369
-+vendor.name Digigram
-
- vendor.id pci 0x136a
-+vendor.name High Soft Tech
-
- vendor.id pci 0x136b
-+vendor.name Kawasaki Steel Corporation
-
- vendor.id pci 0x136b
-&device.id pci 0xff01
-+device.name KL5A72002 Motion JPEG
-
- vendor.id pci 0x136c
-+vendor.name Adtek System Science Co Ltd
-
- vendor.id pci 0x136d
-+vendor.name Gigalabs Inc
-
- vendor.id pci 0x136f
-+vendor.name Applied Magic Inc
-
- vendor.id pci 0x1370
-+vendor.name ATL Products
-
- vendor.id pci 0x1371
-+vendor.name CNet Technology Inc
-
- vendor.id pci 0x1371
-&device.id pci 0x434e
-+device.name GigaCard Network Adapter
-
- vendor.id pci 0x1371
-&device.id pci 0x434e
-&subvendor.id pci 0x1371
-&subdevice.id pci 0x434e
-+subdevice.name N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)
-
- vendor.id pci 0x1373
-+vendor.name Silicon Vision Inc
-
- vendor.id pci 0x1374
-+vendor.name Silicom Ltd
-
- vendor.id pci 0x1375
-+vendor.name Argosystems Inc
-
- vendor.id pci 0x1376
-+vendor.name LMC
-
- vendor.id pci 0x1377
-+vendor.name Electronic Equipment Production & Distribution GmbH
-
- vendor.id pci 0x1378
-+vendor.name Telemann Co. Ltd
-
- vendor.id pci 0x1379
-+vendor.name Asahi Kasei Microsystems Co Ltd
-
- vendor.id pci 0x137a
-+vendor.name Mark of the Unicorn Inc
-
- vendor.id pci 0x137a
-&device.id pci 0x0001
-+device.name PCI-324 Audiowire Interface
-
- vendor.id pci 0x137b
-+vendor.name PPT Vision
-
- vendor.id pci 0x137c
-+vendor.name Iwatsu Electric Co Ltd
-
- vendor.id pci 0x137d
-+vendor.name Dynachip Corporation
-
- vendor.id pci 0x137e
-+vendor.name Patriot Scientific Corporation
-
- vendor.id pci 0x137f
-+vendor.name Japan Satellite Systems Inc
-
- vendor.id pci 0x1380
-+vendor.name Sanritz Automation Co Ltd
-
- vendor.id pci 0x1381
-+vendor.name Brains Co. Ltd
-
- vendor.id pci 0x1382
-+vendor.name Marian - Electronic & Software
-
- vendor.id pci 0x1382
-&device.id pci 0x0001
-+device.name ARC88 audio recording card
-
- vendor.id pci 0x1382
-&device.id pci 0x2088
-+device.name Marc-8 MIDI 8 channel audio card
-
- vendor.id pci 0x1383
-+vendor.name Controlnet Inc
-
- vendor.id pci 0x1384
-+vendor.name Reality Simulation Systems Inc
-
- vendor.id pci 0x1385
-+vendor.name Netgear
-
- vendor.id pci 0x1385
-&device.id pci 0x0013
-+device.name WG311T
-
- vendor.id pci 0x1385
-&device.id pci 0x4100
-+device.name 802.11b Wireless Adapter (MA301)
-
- vendor.id pci 0x1385
-&device.id pci 0x4105
-+device.name MA311 802.11b wireless adapter
-
- vendor.id pci 0x1385
-&device.id pci 0x4400
-+device.name WAG511 802.11a/b/g Dual Band Wireless PC Card
-
- vendor.id pci 0x1385
-&device.id pci 0x4600
-+device.name WAG511 802.11a/b/g Dual Band Wireless PC Card
-
- vendor.id pci 0x1385
-&device.id pci 0x4601
-+device.name WAG511 802.11a/b/g Dual Band Wireless PC Card
-
- vendor.id pci 0x1385
-&device.id pci 0x4610
-+device.name WAG511 802.11a/b/g Dual Band Wireless PC Card
-
- vendor.id pci 0x1385
-&device.id pci 0x4a00
-+device.name WAG311 802.11a/g Wireless PCI Adapter
-
- vendor.id pci 0x1385
-&device.id pci 0x4c00
-+device.name WG311v2 54 Mbps Wireless PCI Adapter
-
- vendor.id pci 0x1385
-&device.id pci 0x620a
-+device.name GA620 Gigabit Ethernet
-
- vendor.id pci 0x1385
-&device.id pci 0x622a
-+device.name GA622
-
- vendor.id pci 0x1385
-&device.id pci 0x630a
-+device.name GA630 Gigabit Ethernet
-
- vendor.id pci 0x1385
-&device.id pci 0xf004
-+device.name FA310TX
-
- vendor.id pci 0x1386
-+vendor.name Video Domain Technologies
-
- vendor.id pci 0x1387
-+vendor.name Systran Corp
-
- vendor.id pci 0x1388
-+vendor.name Hitachi Information Technology Co Ltd
-
- vendor.id pci 0x1389
-+vendor.name Applicom International
-
- vendor.id pci 0x1389
-&device.id pci 0x0001
-+device.name PCI1500PFB [Intelligent fieldbus adaptor]
-
- vendor.id pci 0x138a
-+vendor.name Fusion Micromedia Corp
-
- vendor.id pci 0x138b
-+vendor.name Tokimec Inc
-
- vendor.id pci 0x138c
-+vendor.name Silicon Reality
-
- vendor.id pci 0x138d
-+vendor.name Future Techno Designs pte Ltd
-
- vendor.id pci 0x138e
-+vendor.name Basler GmbH
-
- vendor.id pci 0x138f
-+vendor.name Patapsco Designs Inc
-
- vendor.id pci 0x1390
-+vendor.name Concept Development Inc
-
- vendor.id pci 0x1391
-+vendor.name Development Concepts Inc
-
- vendor.id pci 0x1392
-+vendor.name Medialight Inc
-
- vendor.id pci 0x1393
-+vendor.name Moxa Technologies Co Ltd
-
- vendor.id pci 0x1393
-&device.id pci 0x1040
-+device.name Smartio C104H/PCI
-
- vendor.id pci 0x1393
-&device.id pci 0x1141
-+device.name Industrio CP-114
-
- vendor.id pci 0x1393
-&device.id pci 0x1680
-+device.name Smartio C168H/PCI
-
- vendor.id pci 0x1393
-&device.id pci 0x2040
-+device.name Intellio CP-204J
-
- vendor.id pci 0x1393
-&device.id pci 0x2180
-+device.name Intellio C218 Turbo PCI
-
- vendor.id pci 0x1393
-&device.id pci 0x3200
-+device.name Intellio C320 Turbo PCI
-
- vendor.id pci 0x1394
-+vendor.name Level One Communications
-
- vendor.id pci 0x1394
-&device.id pci 0x0001
-+device.name LXT1001 Gigabit Ethernet
-
- vendor.id pci 0x1394
-&device.id pci 0x0001
-&subvendor.id pci 0x1394
-&subdevice.id pci 0x0001
-+subdevice.name NetCelerator Adapter
-
- vendor.id pci 0x1395
-+vendor.name Ambicom Inc
-
- vendor.id pci 0x1396
-+vendor.name Cipher Systems Inc
-
- vendor.id pci 0x1397
-+vendor.name Cologne Chip Designs GmbH
-
- vendor.id pci 0x1397
-&device.id pci 0x2bd0
-+device.name ISDN network controller [HFC-PCI]
-
- vendor.id pci 0x1397
-&device.id pci 0x2bd0
-&subvendor.id pci 0x1397
-&subdevice.id pci 0x2bd0
-+subdevice.name ISDN Board
-
- vendor.id pci 0x1397
-&device.id pci 0x2bd0
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1000
-+subdevice.name CI1-1-Harp
-
- vendor.id pci 0x1398
-+vendor.name Clarion co. Ltd
-
- vendor.id pci 0x1399
-+vendor.name Rios systems Co Ltd
-
- vendor.id pci 0x139a
-+vendor.name Alacritech Inc
-
- vendor.id pci 0x139a
-&device.id pci 0x0001
-+device.name Quad Port 10/100 Server Accelerator
-
- vendor.id pci 0x139a
-&device.id pci 0x0003
-+device.name Single Port 10/100 Server Accelerator
-
- vendor.id pci 0x139a
-&device.id pci 0x0005
-+device.name Single Port Gigabit Server Accelerator
-
- vendor.id pci 0x139b
-+vendor.name Mediasonic Multimedia Systems Ltd
-
- vendor.id pci 0x139c
-+vendor.name Quantum 3d Inc
-
- vendor.id pci 0x139d
-+vendor.name EPL limited
-
- vendor.id pci 0x139e
-+vendor.name Media4
-
- vendor.id pci 0x139f
-+vendor.name Aethra s.r.l.
-
- vendor.id pci 0x13a0
-+vendor.name Crystal Group Inc
-
- vendor.id pci 0x13a1
-+vendor.name Kawasaki Heavy Industries Ltd
-
- vendor.id pci 0x13a2
-+vendor.name Ositech Communications Inc
-
- vendor.id pci 0x13a3
-+vendor.name Hifn Inc.
-
- vendor.id pci 0x13a3
-&device.id pci 0x0005
-+device.name 7751 Security Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0006
-+device.name 6500 Public Key Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0007
-+device.name 7811 Security Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0012
-+device.name 7951 Security Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0014
-+device.name 78XX Security Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0016
-+device.name 8065 Security Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0017
-+device.name 8165 Security Processor
-
- vendor.id pci 0x13a3
-&device.id pci 0x0018
-+device.name 8154 Security Processor
-
- vendor.id pci 0x13a4
-+vendor.name Rascom Inc
-
- vendor.id pci 0x13a5
-+vendor.name Audio Digital Imaging Inc
-
- vendor.id pci 0x13a6
-+vendor.name Videonics Inc
-
- vendor.id pci 0x13a7
-+vendor.name Teles AG
-
- vendor.id pci 0x13a8
-+vendor.name Exar Corp.
-
- vendor.id pci 0x13a8
-&device.id pci 0x0154
-+device.name XR17C154 Quad UART
-
- vendor.id pci 0x13a8
-&device.id pci 0x0158
-+device.name XR17C158 Octal UART
-
- vendor.id pci 0x13a9
-+vendor.name Siemens Medical Systems, Ultrasound Group
-
- vendor.id pci 0x13aa
-+vendor.name Broadband Networks Inc
-
- vendor.id pci 0x13ab
-+vendor.name Arcom Control Systems Ltd
-
- vendor.id pci 0x13ac
-+vendor.name Motion Media Technology Ltd
-
- vendor.id pci 0x13ad
-+vendor.name Nexus Inc
-
- vendor.id pci 0x13ae
-+vendor.name ALD Technology Ltd
-
- vendor.id pci 0x13af
-+vendor.name T.Sqware
-
- vendor.id pci 0x13b0
-+vendor.name Maxspeed Corp
-
- vendor.id pci 0x13b1
-+vendor.name Tamura corporation
-
- vendor.id pci 0x13b2
-+vendor.name Techno Chips Co. Ltd
-
- vendor.id pci 0x13b3
-+vendor.name Lanart Corporation
-
- vendor.id pci 0x13b4
-+vendor.name Wellbean Co Inc
-
- vendor.id pci 0x13b5
-+vendor.name ARM
-
- vendor.id pci 0x13b6
-+vendor.name Dlog GmbH
-
- vendor.id pci 0x13b7
-+vendor.name Logic Devices Inc
-
- vendor.id pci 0x13b8
-+vendor.name Nokia Telecommunications oy
-
- vendor.id pci 0x13b9
-+vendor.name Elecom Co Ltd
-
- vendor.id pci 0x13ba
-+vendor.name Oxford Instruments
-
- vendor.id pci 0x13bb
-+vendor.name Sanyo Technosound Co Ltd
-
- vendor.id pci 0x13bc
-+vendor.name Bitran Corporation
-
- vendor.id pci 0x13bd
-+vendor.name Sharp corporation
-
- vendor.id pci 0x13be
-+vendor.name Miroku Jyoho Service Co. Ltd
-
- vendor.id pci 0x13bf
-+vendor.name Sharewave Inc
-
- vendor.id pci 0x13c0
-+vendor.name Microgate Corporation
-
- vendor.id pci 0x13c0
-&device.id pci 0x0010
-+device.name SyncLink Adapter v1
-
- vendor.id pci 0x13c0
-&device.id pci 0x0020
-+device.name SyncLink SCC Adapter
-
- vendor.id pci 0x13c0
-&device.id pci 0x0030
-+device.name SyncLink Multiport Adapter
-
- vendor.id pci 0x13c0
-&device.id pci 0x0210
-+device.name SyncLink Adapter v2
-
- vendor.id pci 0x13c1
-+vendor.name 3ware Inc
-
- vendor.id pci 0x13c1
-&device.id pci 0x1000
-+device.name 3ware Inc 3ware 5xxx/6xxx-series PATA-RAID
-
- vendor.id pci 0x13c1
-&device.id pci 0x1001
-+device.name 3ware Inc 3ware 7xxx/8xxx-series PATA/SATA-RAID
-
- vendor.id pci 0x13c1
-&device.id pci 0x1001
-&subvendor.id pci 0x13c1
-&subdevice.id pci 0x1001
-+subdevice.name 3ware Inc 3ware 7xxx/8xxx-series PATA/SATA-RAID
-
- vendor.id pci 0x13c1
-&device.id pci 0x1002
-+device.name 3ware Inc 3ware 9xxx-series SATA-RAID
-
- vendor.id pci 0x13c2
-+vendor.name Technotrend Systemtechnik GmbH
-
- vendor.id pci 0x13c3
-+vendor.name Janz Computer AG
-
- vendor.id pci 0x13c4
-+vendor.name Phase Metrics
-
- vendor.id pci 0x13c5
-+vendor.name Alphi Technology Corp
-
- vendor.id pci 0x13c6
-+vendor.name Condor Engineering Inc
-
- vendor.id pci 0x13c6
-&device.id pci 0x0520
-+device.name CEI-520 A429 Card
-
- vendor.id pci 0x13c6
-&device.id pci 0x0620
-+device.name CEI-620 A429 Card
-
- vendor.id pci 0x13c6
-&device.id pci 0x0820
-+device.name CEI-820 A429 Card
-
- vendor.id pci 0x13c7
-+vendor.name Blue Chip Technology Ltd
-
- vendor.id pci 0x13c8
-+vendor.name Apptech Inc
-
- vendor.id pci 0x13c9
-+vendor.name Eaton Corporation
-
- vendor.id pci 0x13ca
-+vendor.name Iomega Corporation
-
- vendor.id pci 0x13cb
-+vendor.name Yano Electric Co Ltd
-
- vendor.id pci 0x13cc
-+vendor.name Metheus Corporation
-
- vendor.id pci 0x13cd
-+vendor.name Compatible Systems Corporation
-
- vendor.id pci 0x13ce
-+vendor.name Cocom A/S
-
- vendor.id pci 0x13cf
-+vendor.name Studio Audio & Video Ltd
-
- vendor.id pci 0x13d0
-+vendor.name Techsan Electronics Co Ltd
-
- vendor.id pci 0x13d0
-&device.id pci 0x2103
-+device.name B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card
-
- vendor.id pci 0x13d0
-&device.id pci 0x2200
-+device.name B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card
-
- vendor.id pci 0x13d1
-+vendor.name Abocom Systems Inc
-
- vendor.id pci 0x13d1
-&device.id pci 0xab02
-+device.name ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter
-
- vendor.id pci 0x13d1
-&device.id pci 0xab03
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x13d1
-&device.id pci 0xab06
-+device.name RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter
-
- vendor.id pci 0x13d1
-&device.id pci 0xab08
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x13d2
-+vendor.name Shark Multimedia Inc
-
- vendor.id pci 0x13d3
-+vendor.name IMC Networks
-
- vendor.id pci 0x13d4
-+vendor.name Graphics Microsystems Inc
-
- vendor.id pci 0x13d5
-+vendor.name Media 100 Inc
-
- vendor.id pci 0x13d6
-+vendor.name K.I. Technology Co Ltd
-
- vendor.id pci 0x13d7
-+vendor.name Toshiba Engineering Corporation
-
- vendor.id pci 0x13d8
-+vendor.name Phobos corporation
-
- vendor.id pci 0x13d9
-+vendor.name Apex PC Solutions Inc
-
- vendor.id pci 0x13da
-+vendor.name Intresource Systems pte Ltd
-
- vendor.id pci 0x13db
-+vendor.name Janich & Klass Computertechnik GmbH
-
- vendor.id pci 0x13dc
-+vendor.name Netboost Corporation
-
- vendor.id pci 0x13dd
-+vendor.name Multimedia Bundle Inc
-
- vendor.id pci 0x13de
-+vendor.name ABB Robotics Products AB
-
- vendor.id pci 0x13df
-+vendor.name E-Tech Inc
-
- vendor.id pci 0x13df
-&device.id pci 0x0001
-+device.name PCI56RVP Modem
-
- vendor.id pci 0x13df
-&device.id pci 0x0001
-&subvendor.id pci 0x13df
-&subdevice.id pci 0x0001
-+subdevice.name PCI56RVP Modem
-
- vendor.id pci 0x13e0
-+vendor.name GVC Corporation
-
- vendor.id pci 0x13e1
-+vendor.name Silicom Multimedia Systems Inc
-
- vendor.id pci 0x13e2
-+vendor.name Dynamics Research Corporation
-
- vendor.id pci 0x13e3
-+vendor.name Nest Inc
-
- vendor.id pci 0x13e4
-+vendor.name Calculex Inc
-
- vendor.id pci 0x13e5
-+vendor.name Telesoft Design Ltd
-
- vendor.id pci 0x13e6
-+vendor.name Argosy research Inc
-
- vendor.id pci 0x13e7
-+vendor.name NAC Incorporated
-
- vendor.id pci 0x13e8
-+vendor.name Chip Express Corporation
-
- vendor.id pci 0x13e9
-+vendor.name Intraserver Technology Inc
-
- vendor.id pci 0x13ea
-+vendor.name Dallas Semiconductor
-
- vendor.id pci 0x13eb
-+vendor.name Hauppauge Computer Works Inc
-
- vendor.id pci 0x13ec
-+vendor.name Zydacron Inc
-
- vendor.id pci 0x13ed
-+vendor.name Raytheion E-Systems
-
- vendor.id pci 0x13ee
-+vendor.name Hayes Microcomputer Products Inc
-
- vendor.id pci 0x13ef
-+vendor.name Coppercom Inc
-
- vendor.id pci 0x13f0
-+vendor.name Sundance Technology Inc
-
- vendor.id pci 0x13f0
-&device.id pci 0x0201
-+device.name ST201 Sundance Ethernet
-
- vendor.id pci 0x13f1
-+vendor.name Oce' - Technologies B.V.
-
- vendor.id pci 0x13f2
-+vendor.name Ford Microelectronics Inc
-
- vendor.id pci 0x13f3
-+vendor.name Mcdata Corporation
-
- vendor.id pci 0x13f4
-+vendor.name Troika Networks, Inc.
-
- vendor.id pci 0x13f4
-&device.id pci 0x1401
-+device.name Zentai Fibre Channel Adapter
-
- vendor.id pci 0x13f5
-+vendor.name Kansai Electric Co. Ltd
-
- vendor.id pci 0x13f6
-+vendor.name C-Media Electronics Inc
-
- vendor.id pci 0x13f6
-&device.id pci 0x0011
-+device.name CMI8738
-
- vendor.id pci 0x13f6
-&device.id pci 0x0100
-+device.name CM8338A
-
- vendor.id pci 0x13f6
-&device.id pci 0x0100
-&subvendor.id pci 0x13f6
-&subdevice.id pci 0xffff
-+subdevice.name CMI8338/C3DX PCI Audio Device
-
- vendor.id pci 0x13f6
-&device.id pci 0x0101
-+device.name CM8338B
-
- vendor.id pci 0x13f6
-&device.id pci 0x0101
-&subvendor.id pci 0x13f6
-&subdevice.id pci 0x0101
-+subdevice.name CMI8338-031 PCI Audio Device
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-+device.name CM8738
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-&subvendor.id pci 0x1019
-&subdevice.id pci 0x0970
-+subdevice.name P6STP-FL motherboard
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8035
-+subdevice.name CUSI-FX motherboard
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8077
-+subdevice.name CMI8738 6-channel audio controller
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80e2
-+subdevice.name CMI8738 6ch-MX
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-&subvendor.id pci 0x13f6
-&subdevice.id pci 0x0111
-+subdevice.name CMI8738/C3DX PCI Audio Device
-
- vendor.id pci 0x13f6
-&device.id pci 0x0111
-&subvendor.id pci 0x1681
-&subdevice.id pci 0xa000
-+subdevice.name Gamesurround MUSE XL
-
- vendor.id pci 0x13f6
-&device.id pci 0x0211
-+device.name CM8738
-
- vendor.id pci 0x13f7
-+vendor.name Wildfire Communications
-
- vendor.id pci 0x13f8
-+vendor.name Ad Lib Multimedia Inc
-
- vendor.id pci 0x13f9
-+vendor.name NTT Advanced Technology Corp.
-
- vendor.id pci 0x13fa
-+vendor.name Pentland Systems Ltd
-
- vendor.id pci 0x13fb
-+vendor.name Aydin Corp
-
- vendor.id pci 0x13fc
-+vendor.name Computer Peripherals International
-
- vendor.id pci 0x13fd
-+vendor.name Micro Science Inc
-
- vendor.id pci 0x13fe
-+vendor.name Advantech Co. Ltd
-
- vendor.id pci 0x13fe
-&device.id pci 0x1240
-+device.name PCI-1240 4-channel stepper motor controller card w. Nova Electronics MCX314
-
- vendor.id pci 0x13fe
-&device.id pci 0x1600
-+device.name PCI-1612 4-port RS-232/422/485 PCI Communication Card
-
- vendor.id pci 0x13fe
-&device.id pci 0x1752
-+device.name PCI-1752
-
- vendor.id pci 0x13fe
-&device.id pci 0x1754
-+device.name PCI-1754
-
- vendor.id pci 0x13fe
-&device.id pci 0x1756
-+device.name PCI-1756
-
- vendor.id pci 0x13ff
-+vendor.name Silicon Spice Inc
-
- vendor.id pci 0x1400
-+vendor.name Artx Inc
-
- vendor.id pci 0x1400
-&device.id pci 0x1401
-+device.name 9432 TX
-
- vendor.id pci 0x1401
-+vendor.name CR-Systems A/S
-
- vendor.id pci 0x1402
-+vendor.name Meilhaus Electronic GmbH
-
- vendor.id pci 0x1403
-+vendor.name Ascor Inc
-
- vendor.id pci 0x1404
-+vendor.name Fundamental Software Inc
-
- vendor.id pci 0x1405
-+vendor.name Excalibur Systems Inc
-
- vendor.id pci 0x1406
-+vendor.name Oce' Printing Systems GmbH
-
- vendor.id pci 0x1407
-+vendor.name Lava Computer mfg Inc
-
- vendor.id pci 0x1407
-&device.id pci 0x0100
-+device.name Lava Dual Serial
-
- vendor.id pci 0x1407
-&device.id pci 0x0101
-+device.name Lava Quatro A
-
- vendor.id pci 0x1407
-&device.id pci 0x0102
-+device.name Lava Quatro B
-
- vendor.id pci 0x1407
-&device.id pci 0x0120
-+device.name Quattro-PCI A
-
- vendor.id pci 0x1407
-&device.id pci 0x0121
-+device.name Quattro-PCI B
-
- vendor.id pci 0x1407
-&device.id pci 0x0180
-+device.name Lava Octo A
-
- vendor.id pci 0x1407
-&device.id pci 0x0181
-+device.name Lava Octo B
-
- vendor.id pci 0x1407
-&device.id pci 0x0200
-+device.name Lava Port Plus
-
- vendor.id pci 0x1407
-&device.id pci 0x0201
-+device.name Lava Quad A
-
- vendor.id pci 0x1407
-&device.id pci 0x0202
-+device.name Lava Quad B
-
- vendor.id pci 0x1407
-&device.id pci 0x0220
-+device.name Lava Quattro PCI Ports A/B
-
- vendor.id pci 0x1407
-&device.id pci 0x0221
-+device.name Lava Quattro PCI Ports C/D
-
- vendor.id pci 0x1407
-&device.id pci 0x0500
-+device.name Lava Single Serial
-
- vendor.id pci 0x1407
-&device.id pci 0x0600
-+device.name Lava Port 650
-
- vendor.id pci 0x1407
-&device.id pci 0x8000
-+device.name Lava Parallel
-
- vendor.id pci 0x1407
-&device.id pci 0x8001
-+device.name Dual parallel port controller A
-
- vendor.id pci 0x1407
-&device.id pci 0x8002
-+device.name Lava Dual Parallel port A
-
- vendor.id pci 0x1407
-&device.id pci 0x8003
-+device.name Lava Dual Parallel port B
-
- vendor.id pci 0x1407
-&device.id pci 0x8800
-+device.name BOCA Research IOPPAR
-
- vendor.id pci 0x1408
-+vendor.name Aloka Co. Ltd
-
- vendor.id pci 0x1409
-+vendor.name Timedia Technology Co Ltd
-
- vendor.id pci 0x1409
-&device.id pci 0x7168
-+device.name PCI2S550 (Dual 16550 UART)
-
- vendor.id pci 0x140a
-+vendor.name DSP Research Inc
-
- vendor.id pci 0x140b
-+vendor.name Ramix Inc
-
- vendor.id pci 0x140c
-+vendor.name Elmic Systems Inc
-
- vendor.id pci 0x140d
-+vendor.name Matsushita Electric Works Ltd
-
- vendor.id pci 0x140e
-+vendor.name Goepel Electronic GmbH
-
- vendor.id pci 0x140f
-+vendor.name Salient Systems Corp
-
- vendor.id pci 0x1410
-+vendor.name Midas lab Inc
-
- vendor.id pci 0x1411
-+vendor.name Ikos Systems Inc
-
- vendor.id pci 0x1412
-+vendor.name VIA Technologies Inc.
-
- vendor.id pci 0x1412
-&device.id pci 0x1712
-+device.name ICE1712 [Envy24] PCI Multi-Channel I/O Controller
-
- vendor.id pci 0x1412
-&device.id pci 0x1712
-&subvendor.id pci 0x1412
-&subdevice.id pci 0xd638
-+subdevice.name M-Audio Delta 410
-
- vendor.id pci 0x1412
-&device.id pci 0x1724
-+device.name VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller
-
- vendor.id pci 0x1413
-+vendor.name Addonics
-
- vendor.id pci 0x1414
-+vendor.name Microsoft Corporation
-
- vendor.id pci 0x1415
-+vendor.name Oxford Semiconductor Ltd
-
- vendor.id pci 0x1415
-&device.id pci 0x8403
-+device.name VScom 011H-EP1 1 port parallel adaptor
-
- vendor.id pci 0x1415
-&device.id pci 0x9501
-+device.name OX16PCI954 (Quad 16950 UART) function 0
-
- vendor.id pci 0x1415
-&device.id pci 0x9501
-&subvendor.id pci 0x131f
-&subdevice.id pci 0x2050
-+subdevice.name CyberPro (4-port)
-
- vendor.id pci 0x1415
-&device.id pci 0x9501
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x2000
-+subdevice.name MCCR Serial p0-3 of 8
-
- vendor.id pci 0x1415
-&device.id pci 0x9501
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x2001
-+subdevice.name MCCR Serial p0-3 of 16
-
- vendor.id pci 0x1415
-&device.id pci 0x950a
-+device.name EXSYS EX-41092 Dual 16950 Serial adapter
-
- vendor.id pci 0x1415
-&device.id pci 0x950b
-+device.name OXCB950 Cardbus 16950 UART
-
- vendor.id pci 0x1415
-&device.id pci 0x9511
-+device.name OX16PCI954 (Quad 16950 UART) function 1
-
- vendor.id pci 0x1415
-&device.id pci 0x9511
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x2000
-+subdevice.name MCCR Serial p4-7 of 8
-
- vendor.id pci 0x1415
-&device.id pci 0x9511
-&subvendor.id pci 0x15ed
-&subdevice.id pci 0x2001
-+subdevice.name MCCR Serial p4-15 of 16
-
- vendor.id pci 0x1415
-&device.id pci 0x9521
-+device.name OX16PCI952 (Dual 16950 UART)
-
- vendor.id pci 0x1416
-+vendor.name Multiwave Innovation pte Ltd
-
- vendor.id pci 0x1417
-+vendor.name Convergenet Technologies Inc
-
- vendor.id pci 0x1418
-+vendor.name Kyushu electronics systems Inc
-
- vendor.id pci 0x1419
-+vendor.name Excel Switching Corp
-
- vendor.id pci 0x141a
-+vendor.name Apache Micro Peripherals Inc
-
- vendor.id pci 0x141b
-+vendor.name Zoom Telephonics Inc
-
- vendor.id pci 0x141d
-+vendor.name Digitan Systems Inc
-
- vendor.id pci 0x141e
-+vendor.name Fanuc Ltd
-
- vendor.id pci 0x141f
-+vendor.name Visiontech Ltd
-
- vendor.id pci 0x1420
-+vendor.name Psion Dacom plc
-
- vendor.id pci 0x1420
-&device.id pci 0x8002
-+device.name Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part)
-
- vendor.id pci 0x1420
-&device.id pci 0x8003
-+device.name Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part)
-
- vendor.id pci 0x1421
-+vendor.name Ads Technologies Inc
-
- vendor.id pci 0x1422
-+vendor.name Ygrec Systems Co Ltd
-
- vendor.id pci 0x1423
-+vendor.name Custom Technology Corp.
-
- vendor.id pci 0x1424
-+vendor.name Videoserver Connections
-
- vendor.id pci 0x1425
-+vendor.name Chelsio Communications Inc
-
- vendor.id pci 0x1426
-+vendor.name Storage Technology Corp.
-
- vendor.id pci 0x1427
-+vendor.name Better On-Line Solutions
-
- vendor.id pci 0x1428
-+vendor.name Edec Co Ltd
-
- vendor.id pci 0x1429
-+vendor.name Unex Technology Corp.
-
- vendor.id pci 0x142a
-+vendor.name Kingmax Technology Inc
-
- vendor.id pci 0x142b
-+vendor.name Radiolan
-
- vendor.id pci 0x142c
-+vendor.name Minton Optic Industry Co Ltd
-
- vendor.id pci 0x142d
-+vendor.name Pix stream Inc
-
- vendor.id pci 0x142e
-+vendor.name Vitec Multimedia
-
- vendor.id pci 0x142e
-&device.id pci 0x4020
-+device.name VM2-2 [Video Maker 2] MPEG1/2 Encoder
-
- vendor.id pci 0x142f
-+vendor.name Radicom Research Inc
-
- vendor.id pci 0x1430
-+vendor.name ITT Aerospace/Communications Division
-
- vendor.id pci 0x1431
-+vendor.name Gilat Satellite Networks
-
- vendor.id pci 0x1432
-+vendor.name Edimax Computer Co.
-
- vendor.id pci 0x1432
-&device.id pci 0x9130
-+device.name RTL81xx Fast Ethernet
-
- vendor.id pci 0x1433
-+vendor.name Eltec Elektronik GmbH
-
- vendor.id pci 0x1435
-+vendor.name Real Time Devices US Inc.
-
- vendor.id pci 0x1436
-+vendor.name CIS Technology Inc
-
- vendor.id pci 0x1437
-+vendor.name Nissin Inc Co
-
- vendor.id pci 0x1438
-+vendor.name Atmel-dream
-
- vendor.id pci 0x1439
-+vendor.name Outsource Engineering & Mfg. Inc
-
- vendor.id pci 0x143a
-+vendor.name Stargate Solutions Inc
-
- vendor.id pci 0x143b
-+vendor.name Canon Research Center, America
-
- vendor.id pci 0x143c
-+vendor.name Amlogic Inc
-
- vendor.id pci 0x143d
-+vendor.name Tamarack Microelectronics Inc
-
- vendor.id pci 0x143e
-+vendor.name Jones Futurex Inc
-
- vendor.id pci 0x143f
-+vendor.name Lightwell Co Ltd - Zax Division
-
- vendor.id pci 0x1440
-+vendor.name ALGOL Corp.
-
- vendor.id pci 0x1441
-+vendor.name AGIE Ltd
-
- vendor.id pci 0x1442
-+vendor.name Phoenix Contact GmbH & Co.
-
- vendor.id pci 0x1443
-+vendor.name Unibrain S.A.
-
- vendor.id pci 0x1444
-+vendor.name TRW
-
- vendor.id pci 0x1445
-+vendor.name Logical DO Ltd
-
- vendor.id pci 0x1446
-+vendor.name Graphin Co Ltd
-
- vendor.id pci 0x1447
-+vendor.name AIM GmBH
-
- vendor.id pci 0x1448
-+vendor.name Alesis Studio Electronics
-
- vendor.id pci 0x1449
-+vendor.name TUT Systems Inc
-
- vendor.id pci 0x144a
-+vendor.name Adlink Technology
-
- vendor.id pci 0x144a
-&device.id pci 0x7296
-+device.name PCI-7296
-
- vendor.id pci 0x144a
-&device.id pci 0x7432
-+device.name PCI-7432
-
- vendor.id pci 0x144a
-&device.id pci 0x7433
-+device.name PCI-7433
-
- vendor.id pci 0x144a
-&device.id pci 0x7434
-+device.name PCI-7434
-
- vendor.id pci 0x144a
-&device.id pci 0x7841
-+device.name PCI-7841
-
- vendor.id pci 0x144a
-&device.id pci 0x8133
-+device.name PCI-8133
-
- vendor.id pci 0x144a
-&device.id pci 0x8164
-+device.name PCI-8164
-
- vendor.id pci 0x144a
-&device.id pci 0x8554
-+device.name PCI-8554
-
- vendor.id pci 0x144a
-&device.id pci 0x9111
-+device.name PCI-9111
-
- vendor.id pci 0x144a
-&device.id pci 0x9113
-+device.name PCI-9113
-
- vendor.id pci 0x144a
-&device.id pci 0x9114
-+device.name PCI-9114
-
- vendor.id pci 0x144b
-+vendor.name Loronix Information Systems Inc
-
- vendor.id pci 0x144c
-+vendor.name Catalina Research Inc
-
- vendor.id pci 0x144d
-+vendor.name Samsung Electronics Co Ltd
-
- vendor.id pci 0x144e
-+vendor.name OLITEC
-
- vendor.id pci 0x144f
-+vendor.name Askey Computer Corp.
-
- vendor.id pci 0x1450
-+vendor.name Octave Communications Ind.
-
- vendor.id pci 0x1451
-+vendor.name SP3D Chip Design GmBH
-
- vendor.id pci 0x1453
-+vendor.name MYCOM Inc
-
- vendor.id pci 0x1454
-+vendor.name Altiga Networks
-
- vendor.id pci 0x1455
-+vendor.name Logic Plus Plus Inc
-
- vendor.id pci 0x1456
-+vendor.name Advanced Hardware Architectures
-
- vendor.id pci 0x1457
-+vendor.name Nuera Communications Inc
-
- vendor.id pci 0x1458
-+vendor.name Giga-byte Technology
-
- vendor.id pci 0x1459
-+vendor.name DOOIN Electronics
-
- vendor.id pci 0x145a
-+vendor.name Escalate Networks Inc
-
- vendor.id pci 0x145b
-+vendor.name PRAIM SRL
-
- vendor.id pci 0x145c
-+vendor.name Cryptek
-
- vendor.id pci 0x145d
-+vendor.name Gallant Computer Inc
-
- vendor.id pci 0x145e
-+vendor.name Aashima Technology B.V.
-
- vendor.id pci 0x145f
-+vendor.name Baldor Electric Company
-
- vendor.id pci 0x145f
-&device.id pci 0x0001
-+device.name NextMove PCI
-
- vendor.id pci 0x1460
-+vendor.name DYNARC INC
-
- vendor.id pci 0x1461
-+vendor.name Avermedia Technologies Inc
-
- vendor.id pci 0x1462
-+vendor.name Micro-Star International Co., Ltd.
-
- vendor.id pci 0x1462
-&device.id pci 0x6825
-+device.name PCI Card wireless 11g [PC54G]
-
- vendor.id pci 0x1462
-&device.id pci 0x8725
-+device.name NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter
-
- vendor.id pci 0x1462
-&device.id pci 0x9000
-+device.name NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter
-
- vendor.id pci 0x1462
-&device.id pci 0x9119
-+device.name NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter
-
- vendor.id pci 0x1463
-+vendor.name Fast Corporation
-
- vendor.id pci 0x1464
-+vendor.name Interactive Circuits & Systems Ltd
-
- vendor.id pci 0x1465
-+vendor.name GN NETTEST Telecom DIV.
-
- vendor.id pci 0x1466
-+vendor.name Designpro Inc.
-
- vendor.id pci 0x1467
-+vendor.name DIGICOM SPA
-
- vendor.id pci 0x1468
-+vendor.name AMBIT Microsystem Corp.
-
- vendor.id pci 0x1469
-+vendor.name Cleveland Motion Controls
-
- vendor.id pci 0x146a
-+vendor.name IFR
-
- vendor.id pci 0x146b
-+vendor.name Parascan Technologies Ltd
-
- vendor.id pci 0x146c
-+vendor.name Ruby Tech Corp.
-
- vendor.id pci 0x146c
-&device.id pci 0x1430
-+device.name FE-1430TX Fast Ethernet PCI Adapter
-
- vendor.id pci 0x146d
-+vendor.name Tachyon, INC.
-
- vendor.id pci 0x146e
-+vendor.name Williams Electronics Games, Inc.
-
- vendor.id pci 0x146f
-+vendor.name Multi Dimensional Consulting Inc
-
- vendor.id pci 0x1470
-+vendor.name Bay Networks
-
- vendor.id pci 0x1471
-+vendor.name Integrated Telecom Express Inc
-
- vendor.id pci 0x1472
-+vendor.name DAIKIN Industries, Ltd
-
- vendor.id pci 0x1473
-+vendor.name ZAPEX Technologies Inc
-
- vendor.id pci 0x1474
-+vendor.name Doug Carson & Associates
-
- vendor.id pci 0x1475
-+vendor.name PICAZO Communications
-
- vendor.id pci 0x1476
-+vendor.name MORTARA Instrument Inc
-
- vendor.id pci 0x1477
-+vendor.name Net Insight
-
- vendor.id pci 0x1478
-+vendor.name DIATREND Corporation
-
- vendor.id pci 0x1479
-+vendor.name TORAY Industries Inc
-
- vendor.id pci 0x147a
-+vendor.name FORMOSA Industrial Computing
-
- vendor.id pci 0x147b
-+vendor.name ABIT Computer Corp.
-
- vendor.id pci 0x147c
-+vendor.name AWARE, Inc.
-
- vendor.id pci 0x147d
-+vendor.name Interworks Computer Products
-
- vendor.id pci 0x147e
-+vendor.name Matsushita Graphic Communication Systems, Inc.
-
- vendor.id pci 0x147f
-+vendor.name NIHON UNISYS, Ltd.
-
- vendor.id pci 0x1480
-+vendor.name SCII Telecom
-
- vendor.id pci 0x1481
-+vendor.name BIOPAC Systems Inc
-
- vendor.id pci 0x1482
-+vendor.name ISYTEC - Integrierte Systemtechnik GmBH
-
- vendor.id pci 0x1483
-+vendor.name LABWAY Corporation
-
- vendor.id pci 0x1484
-+vendor.name Logic Corporation
-
- vendor.id pci 0x1485
-+vendor.name ERMA - Electronic GmBH
-
- vendor.id pci 0x1486
-+vendor.name L3 Communications Telemetry & Instrumentation
-
- vendor.id pci 0x1487
-+vendor.name MARQUETTE Medical Systems
-
- vendor.id pci 0x1488
-+vendor.name KONTRON Electronik GmBH
-
- vendor.id pci 0x1489
-+vendor.name KYE Systems Corporation
-
- vendor.id pci 0x148a
-+vendor.name OPTO
-
- vendor.id pci 0x148b
-+vendor.name INNOMEDIALOGIC Inc.
-
- vendor.id pci 0x148c
-+vendor.name C.P. Technology Co. Ltd
-
- vendor.id pci 0x148d
-+vendor.name DIGICOM Systems, Inc.
-
- vendor.id pci 0x148d
-&device.id pci 0x1003
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x148e
-+vendor.name OSI Plus Corporation
-
- vendor.id pci 0x148f
-+vendor.name Plant Equipment, Inc.
-
- vendor.id pci 0x1490
-+vendor.name Stone Microsystems PTY Ltd.
-
- vendor.id pci 0x1491
-+vendor.name ZEAL Corporation
-
- vendor.id pci 0x1492
-+vendor.name Time Logic Corporation
-
- vendor.id pci 0x1493
-+vendor.name MAKER Communications
-
- vendor.id pci 0x1494
-+vendor.name WINTOP Technology, Inc.
-
- vendor.id pci 0x1495
-+vendor.name TOKAI Communications Industry Co. Ltd
-
- vendor.id pci 0x1496
-+vendor.name JOYTECH Computer Co., Ltd.
-
- vendor.id pci 0x1497
-+vendor.name SMA Regelsysteme GmBH
-
- vendor.id pci 0x1498
-+vendor.name TEWS Datentechnik GmBH
-
- vendor.id pci 0x1498
-&device.id pci 0x30c8
-+device.name TPCI200
-
- vendor.id pci 0x1499
-+vendor.name EMTEC CO., Ltd
-
- vendor.id pci 0x149a
-+vendor.name ANDOR Technology Ltd
-
- vendor.id pci 0x149b
-+vendor.name SEIKO Instruments Inc
-
- vendor.id pci 0x149c
-+vendor.name OVISLINK Corp.
-
- vendor.id pci 0x149d
-+vendor.name NEWTEK Inc
-
- vendor.id pci 0x149d
-&device.id pci 0x0001
-+device.name Video Toaster for PC
-
- vendor.id pci 0x149e
-+vendor.name Mapletree Networks Inc.
-
- vendor.id pci 0x149f
-+vendor.name LECTRON Co Ltd
-
- vendor.id pci 0x14a0
-+vendor.name SOFTING GmBH
-
- vendor.id pci 0x14a1
-+vendor.name Systembase Co Ltd
-
- vendor.id pci 0x14a2
-+vendor.name Millennium Engineering Inc
-
- vendor.id pci 0x14a3
-+vendor.name Maverick Networks
-
- vendor.id pci 0x14a4
-+vendor.name GVC/BCM Advanced Research
-
- vendor.id pci 0x14a5
-+vendor.name XIONICS Document Technologies Inc
-
- vendor.id pci 0x14a6
-+vendor.name INOVA Computers GmBH & Co KG
-
- vendor.id pci 0x14a7
-+vendor.name MYTHOS Systems Inc
-
- vendor.id pci 0x14a8
-+vendor.name FEATRON Technologies Corporation
-
- vendor.id pci 0x14a9
-+vendor.name HIVERTEC Inc
-
- vendor.id pci 0x14aa
-+vendor.name Advanced MOS Technology Inc
-
- vendor.id pci 0x14ab
-+vendor.name Mentor Graphics Corp.
-
- vendor.id pci 0x14ac
-+vendor.name Novaweb Technologies Inc
-
- vendor.id pci 0x14ad
-+vendor.name Time Space Radio AB
-
- vendor.id pci 0x14ae
-+vendor.name CTI, Inc
-
- vendor.id pci 0x14af
-+vendor.name Guillemot Corporation
-
- vendor.id pci 0x14af
-&device.id pci 0x7102
-+device.name 3D Prophet II MX
-
- vendor.id pci 0x14b0
-+vendor.name BST Communication Technology Ltd
-
- vendor.id pci 0x14b1
-+vendor.name Nextcom K.K.
-
- vendor.id pci 0x14b2
-+vendor.name ENNOVATE Networks Inc
-
- vendor.id pci 0x14b3
-+vendor.name XPEED Inc
-
- vendor.id pci 0x14b3
-&device.id pci 0x0000
-+device.name DSL NIC
-
- vendor.id pci 0x14b4
-+vendor.name PHILIPS Business Electronics B.V.
-
- vendor.id pci 0x14b5
-+vendor.name Creamware GmBH
-
- vendor.id pci 0x14b5
-&device.id pci 0x0200
-+device.name Scope
-
- vendor.id pci 0x14b5
-&device.id pci 0x0300
-+device.name Pulsar
-
- vendor.id pci 0x14b5
-&device.id pci 0x0400
-+device.name PulsarSRB
-
- vendor.id pci 0x14b5
-&device.id pci 0x0600
-+device.name Pulsar2
-
- vendor.id pci 0x14b5
-&device.id pci 0x0800
-+device.name DSP-Board
-
- vendor.id pci 0x14b5
-&device.id pci 0x0900
-+device.name DSP-Board
-
- vendor.id pci 0x14b5
-&device.id pci 0x0a00
-+device.name DSP-Board
-
- vendor.id pci 0x14b5
-&device.id pci 0x0b00
-+device.name DSP-Board
-
- vendor.id pci 0x14b6
-+vendor.name Quantum Data Corp.
-
- vendor.id pci 0x14b7
-+vendor.name PROXIM Inc
-
- vendor.id pci 0x14b7
-&device.id pci 0x0001
-+device.name Symphony 4110
-
- vendor.id pci 0x14b8
-+vendor.name Techsoft Technology Co Ltd
-
- vendor.id pci 0x14b9
-+vendor.name AIRONET Wireless Communications
-
- vendor.id pci 0x14b9
-&device.id pci 0x0001
-+device.name PC4800
-
- vendor.id pci 0x14b9
-&device.id pci 0x0340
-+device.name PC4800
-
- vendor.id pci 0x14b9
-&device.id pci 0x0350
-+device.name PC4800
-
- vendor.id pci 0x14b9
-&device.id pci 0x4500
-+device.name PC4500
-
- vendor.id pci 0x14b9
-&device.id pci 0x4800
-+device.name Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800
-
- vendor.id pci 0x14b9
-&device.id pci 0xa504
-+device.name Cisco Aironet Wireless 802.11b
-
- vendor.id pci 0x14b9
-&device.id pci 0xa505
-+device.name Cisco Aironet CB20a 802.11a Wireless LAN Adapter
-
- vendor.id pci 0x14b9
-&device.id pci 0xa506
-+device.name Cisco Aironet Mini PCI b/g
-
- vendor.id pci 0x14ba
-+vendor.name INTERNIX Inc.
-
- vendor.id pci 0x14bb
-+vendor.name SEMTECH Corporation
-
- vendor.id pci 0x14bc
-+vendor.name Globespan Semiconductor Inc.
-
- vendor.id pci 0x14bd
-+vendor.name CARDIO Control N.V.
-
- vendor.id pci 0x14be
-+vendor.name L3 Communications
-
- vendor.id pci 0x14bf
-+vendor.name SPIDER Communications Inc.
-
- vendor.id pci 0x14c0
-+vendor.name COMPAL Electronics Inc
-
- vendor.id pci 0x14c1
-+vendor.name MYRICOM Inc.
-
- vendor.id pci 0x14c1
-&device.id pci 0x8043
-+device.name Myrinet 2000 Scalable Cluster Interconnect
-
- vendor.id pci 0x14c2
-+vendor.name DTK Computer
-
- vendor.id pci 0x14c3
-+vendor.name MEDIATEK Corp.
-
- vendor.id pci 0x14c4
-+vendor.name IWASAKI Information Systems Co Ltd
-
- vendor.id pci 0x14c5
-+vendor.name Automation Products AB
-
- vendor.id pci 0x14c6
-+vendor.name Data Race Inc
-
- vendor.id pci 0x14c7
-+vendor.name Modular Technology Holdings Ltd
-
- vendor.id pci 0x14c8
-+vendor.name Turbocomm Tech. Inc.
-
- vendor.id pci 0x14c9
-+vendor.name ODIN Telesystems Inc
-
- vendor.id pci 0x14ca
-+vendor.name PE Logic Corp.
-
- vendor.id pci 0x14cb
-+vendor.name Billionton Systems Inc
-
- vendor.id pci 0x14cc
-+vendor.name NAKAYO Telecommunications Inc
-
- vendor.id pci 0x14cd
-+vendor.name Universal Scientific Ind.
-
- vendor.id pci 0x14ce
-+vendor.name Whistle Communications
-
- vendor.id pci 0x14cf
-+vendor.name TEK Microsystems Inc.
-
- vendor.id pci 0x14d0
-+vendor.name Ericsson Axe R & D
-
- vendor.id pci 0x14d1
-+vendor.name Computer Hi-Tech Co Ltd
-
- vendor.id pci 0x14d2
-+vendor.name Titan Electronics Inc
-
- vendor.id pci 0x14d2
-&device.id pci 0x8001
-+device.name VScom 010L 1 port parallel adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8002
-+device.name VScom 020L 2 port parallel adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8010
-+device.name VScom 100L 1 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8011
-+device.name VScom 110L 1 port serial and 1 port parallel adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8020
-+device.name VScom 200L 1 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8021
-+device.name VScom 210L 2 port serial and 1 port parallel adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8040
-+device.name VScom 400L 4 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0x8080
-+device.name VScom 800L 8 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xa000
-+device.name VScom 010H 1 port parallel adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xa001
-+device.name VScom 100H 1 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xa003
-+device.name VScom 400H 4 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xa004
-+device.name VScom 400HF1 4 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xa005
-+device.name VScom 200H 2 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xe001
-+device.name VScom 010HV2 1 port parallel adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xe010
-+device.name VScom 100HV2 1 port serial adaptor
-
- vendor.id pci 0x14d2
-&device.id pci 0xe020
-+device.name VScom 200HV2 2 port serial adaptor
-
- vendor.id pci 0x14d3
-+vendor.name CIRTECH (UK) Ltd
-
- vendor.id pci 0x14d4
-+vendor.name Panacom Technology Corp
-
- vendor.id pci 0x14d5
-+vendor.name Nitsuko Corporation
-
- vendor.id pci 0x14d6
-+vendor.name Accusys Inc
-
- vendor.id pci 0x14d7
-+vendor.name Hirakawa Hewtech Corp
-
- vendor.id pci 0x14d8
-+vendor.name HOPF Elektronik GmBH
-
- vendor.id pci 0x14d9
-+vendor.name Alliance Semiconductor Corporation
-
- vendor.id pci 0x14d9
-&device.id pci 0x0010
-+device.name AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon]
-
- vendor.id pci 0x14d9
-&device.id pci 0x9000
-+device.name AS90L10204/10208 HyperTransport to PCI-X Bridge
-
- vendor.id pci 0x14da
-+vendor.name National Aerospace Laboratories
-
- vendor.id pci 0x14db
-+vendor.name AFAVLAB Technology Inc
-
- vendor.id pci 0x14db
-&device.id pci 0x2120
-+device.name TK9902
-
- vendor.id pci 0x14dc
-+vendor.name Amplicon Liveline Ltd
-
- vendor.id pci 0x14dc
-&device.id pci 0x0000
-+device.name PCI230
-
- vendor.id pci 0x14dc
-&device.id pci 0x0001
-+device.name PCI242
-
- vendor.id pci 0x14dc
-&device.id pci 0x0002
-+device.name PCI244
-
- vendor.id pci 0x14dc
-&device.id pci 0x0003
-+device.name PCI247
-
- vendor.id pci 0x14dc
-&device.id pci 0x0004
-+device.name PCI248
-
- vendor.id pci 0x14dc
-&device.id pci 0x0005
-+device.name PCI249
-
- vendor.id pci 0x14dc
-&device.id pci 0x0006
-+device.name PCI260
-
- vendor.id pci 0x14dc
-&device.id pci 0x0007
-+device.name PCI224
-
- vendor.id pci 0x14dc
-&device.id pci 0x0008
-+device.name PCI234
-
- vendor.id pci 0x14dc
-&device.id pci 0x0009
-+device.name PCI236
-
- vendor.id pci 0x14dc
-&device.id pci 0x000a
-+device.name PCI272
-
- vendor.id pci 0x14dc
-&device.id pci 0x000b
-+device.name PCI215
-
- vendor.id pci 0x14dd
-+vendor.name Boulder Design Labs Inc
-
- vendor.id pci 0x14de
-+vendor.name Applied Integration Corporation
-
- vendor.id pci 0x14df
-+vendor.name ASIC Communications Corp
-
- vendor.id pci 0x14e1
-+vendor.name INVERTEX
-
- vendor.id pci 0x14e2
-+vendor.name INFOLIBRIA
-
- vendor.id pci 0x14e3
-+vendor.name AMTELCO
-
- vendor.id pci 0x14e4
-+vendor.name Broadcom Corporation
-
- vendor.id pci 0x14e4
-&device.id pci 0x0800
-+device.name Sentry5 Chipcommon I/O Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x0804
-+device.name Sentry5 PCI Bridge
-
- vendor.id pci 0x14e4
-&device.id pci 0x0805
-+device.name Sentry5 MIPS32 CPU
-
- vendor.id pci 0x14e4
-&device.id pci 0x0806
-+device.name Sentry5 Ethernet Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x080b
-+device.name Sentry5 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x080f
-+device.name Sentry5 DDR/SDR RAM Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x0811
-+device.name Sentry5 External Interface Core
-
- vendor.id pci 0x14e4
-&device.id pci 0x0816
-+device.name BCM3302 Sentry5 MIPS32 CPU
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-+device.name NetXtreme BCM5700 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0277
-+subdevice.name Broadcom Vigil B5700 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d1
-+subdevice.name Broadcom BCM5700
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0106
-+subdevice.name Broadcom BCM5700
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0109
-+subdevice.name Broadcom BCM5700 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x010a
-+subdevice.name Broadcom BCM5700 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1000
-+subdevice.name 3C996-T 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1001
-+subdevice.name 3C996B-T 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1002
-+subdevice.name 3C996C-T 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1003
-+subdevice.name 3C997-T 1000Base-T Dual Port
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1004
-+subdevice.name 3C996-SX 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1005
-+subdevice.name 3C997-SX 1000Base-SX Dual Port
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1008
-+subdevice.name 3C942 Gigabit LOM (31X31)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0002
-+subdevice.name NetXtreme 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0003
-+subdevice.name NetXtreme 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0004
-+subdevice.name NetXtreme 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x1028
-+subdevice.name NetXtreme 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1644
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x1644
-+subdevice.name BCM5700 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-+device.name NetXtreme BCM5701 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x007c
-+subdevice.name Compaq NC7770 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x007d
-+subdevice.name Compaq NC6770 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0085
-+subdevice.name Compaq NC7780 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0099
-+subdevice.name NC7780 Gigabit Server Adapter (embedded, WOL)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x009a
-+subdevice.name NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00c1
-+subdevice.name NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0121
-+subdevice.name Broadcom BCM5701 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x128a
-+subdevice.name HP 1000Base-T (PCI) [A7061A]
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x128b
-+subdevice.name HP 1000Base-SX (PCI) [A7073A]
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12a4
-+subdevice.name HP Core Lan 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12c1
-+subdevice.name HP IOX Core Lan 1000Base-T [A7109AX]
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10a9
-&subdevice.id pci 0x8010
-+subdevice.name SGI IO9/IO10 Gigabit Ethernet (Copper)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10a9
-&subdevice.id pci 0x8011
-+subdevice.name SGI Gigabit Ethernet (Copper)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10a9
-&subdevice.id pci 0x8012
-+subdevice.name SGI Gigabit Ethernet (Fiber)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1004
-+subdevice.name 3C996-SX 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1006
-+subdevice.name 3C996B-T 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1007
-+subdevice.name 3C1000-T 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1008
-+subdevice.name 3C940-BR01 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0001
-+subdevice.name BCM5701 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0005
-+subdevice.name BCM5701 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0006
-+subdevice.name BCM5701 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0007
-+subdevice.name BCM5701 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0008
-+subdevice.name BCM5701 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1645
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x8008
-+subdevice.name BCM5701 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x1646
-+device.name NetXtreme BCM5702 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1646
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00bb
-+subdevice.name Compaq NC7760 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1646
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Broadcom BCM5702 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1646
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x8009
-+subdevice.name BCM5702 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-+device.name NetXtreme BCM5703 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0099
-+subdevice.name Compaq NC7780 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x009a
-+subdevice.name Compaq NC7770 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x10a9
-&subdevice.id pci 0x8010
-+subdevice.name SGI IO9/IO10 Gigabit Ethernet (Copper)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0009
-+subdevice.name BCM5703 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000a
-+subdevice.name BCM5703 1000BaseSX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000b
-+subdevice.name BCM5703 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x8009
-+subdevice.name BCM5703 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1647
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x800a
-+subdevice.name BCM5703 1000BaseTX
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-+device.name NetXtreme BCM5704 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00cf
-+subdevice.name NC7772 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00d0
-+subdevice.name NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00d1
-+subdevice.name NC7783 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x2000
-+subdevice.name 3C998-T Dual Port 10/100/1000 PCI-X
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x3000
-+subdevice.name 3C999-T Quad Port 10/100/1000 PCI-X
-
- vendor.id pci 0x14e4
-&device.id pci 0x1648
-&subvendor.id pci 0x1166
-&subdevice.id pci 0x1648
-+subdevice.name NetXtreme CIOB-E 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x164a
-+device.name NetXtreme II BCM5706 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x164d
-+device.name NetXtreme BCM5702FE Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1653
-+device.name NetXtreme BCM5705 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1653
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00e3
-+subdevice.name NC7761 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1654
-+device.name NetXtreme BCM5705_2 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1654
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00e3
-+subdevice.name NC7761 Gigabit Server Adapter
-
- vendor.id pci 0x14e4
-&device.id pci 0x1654
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x3100
-+subdevice.name NC1020 HP ProLiant Gigabit Server Adapter 32 PCI
-
- vendor.id pci 0x14e4
-&device.id pci 0x1659
-+device.name NetXtreme BCM5721 Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x165d
-+device.name NetXtreme BCM5705M Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x165e
-+device.name NetXtreme BCM5705M_2 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x165e
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x14e4
-&device.id pci 0x166e
-+device.name 570x 10/100 Integrated Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x1677
-+device.name NetXtreme BCM5751 Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x1677
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x14e4
-&device.id pci 0x167d
-+device.name NetXtreme BCM5751M Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x167e
-+device.name NetXtreme BCM5751F Fast Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x1696
-+device.name NetXtreme BCM5782 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x1696
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name HP d530 CMT (DG746A)
-
- vendor.id pci 0x14e4
-&device.id pci 0x1696
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000d
-+subdevice.name NetXtreme BCM5782 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x169c
-+device.name NetXtreme BCM5788 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x169d
-+device.name NetLink BCM5789 Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a6
-+device.name NetXtreme BCM5702X Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a6
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00bb
-+subdevice.name NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a6
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name BCM5702 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a6
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000c
-+subdevice.name BCM5702 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a6
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x8009
-+subdevice.name BCM5702 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-+device.name NetXtreme BCM5703X Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00ca
-+subdevice.name NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00cb
-+subdevice.name NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0009
-+subdevice.name NetXtreme BCM5703 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000a
-+subdevice.name NetXtreme BCM5703 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000b
-+subdevice.name NetXtreme BCM5703 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a7
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x800a
-+subdevice.name NetXtreme BCM5703 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a8
-+device.name NetXtreme BCM5704S Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x16a8
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x2001
-+subdevice.name 3C998-SX Dual Port 1000-SX PCI-X
-
- vendor.id pci 0x14e4
-&device.id pci 0x16aa
-+device.name NetXtreme II BCM5706S Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c6
-+device.name NetXtreme BCM5702A3 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c6
-&subvendor.id pci 0x10b7
-&subdevice.id pci 0x1100
-+subdevice.name 3C1000B-T 10/100/1000 PCI
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c6
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000c
-+subdevice.name BCM5702 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c6
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x8009
-+subdevice.name BCM5702 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-+device.name NetXtreme BCM5703 Gigabit Ethernet
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00ca
-+subdevice.name NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00cb
-+subdevice.name NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12c3
-+subdevice.name HP Combo FC/GigE-SX [A9782A]
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12ca
-+subdevice.name HP Combo FC/GigE-T [A9784A]
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x0009
-+subdevice.name NetXtreme BCM5703 1000Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x16c7
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x000a
-+subdevice.name NetXtreme BCM5703 1000Base-SX
-
- vendor.id pci 0x14e4
-&device.id pci 0x16dd
-+device.name NetLink BCM5781 Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x16f7
-+device.name NetXtreme BCM5753 Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x16fd
-+device.name NetXtreme BCM5753M Gigabit Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x16fe
-+device.name NetXtreme BCM5753F Fast Ethernet PCI Express
-
- vendor.id pci 0x14e4
-&device.id pci 0x170c
-+device.name BCM4401-B0 100Base-TX
-
- vendor.id pci 0x14e4
-&device.id pci 0x170d
-+device.name NetXtreme BCM5901 100Base-TX
-
- vendor.id pci 0x14e4
-&device.id pci 0x170d
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0545
-+subdevice.name ThinkPad R40e (2684-HVG) builtin ethernet controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x170e
-+device.name NetXtreme BCM5901 100Base-TX
-
- vendor.id pci 0x14e4
-&device.id pci 0x3352
-+device.name BCM3352
-
- vendor.id pci 0x14e4
-&device.id pci 0x3360
-+device.name BCM3360
-
- vendor.id pci 0x14e4
-&device.id pci 0x4210
-+device.name BCM4210 iLine10 HomePNA 2.0
-
- vendor.id pci 0x14e4
-&device.id pci 0x4211
-+device.name BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4212
-+device.name BCM4212 v.90 56k modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4301
-+device.name BCM4303 802.11b Wireless LAN Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4301
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0407
-+subdevice.name TrueMobile 1180 Onboard WLAN
-
- vendor.id pci 0x14e4
-&device.id pci 0x4301
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x0120
-+subdevice.name WL-103b Wireless LAN PC Card
-
- vendor.id pci 0x14e4
-&device.id pci 0x4305
-+device.name BCM4307 V.90 56k Modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4306
-+device.name BCM4307 Ethernet Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4307
-+device.name BCM4307 802.11b Wireless LAN Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4310
-+device.name BCM4310 Chipcommon I/OController
-
- vendor.id pci 0x14e4
-&device.id pci 0x4312
-+device.name BCM4310 UART
-
- vendor.id pci 0x14e4
-&device.id pci 0x4313
-+device.name BCM4310 Ethernet Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4315
-+device.name BCM4310 USB Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-+device.name BCM4306 802.11b/g Wireless LAN Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0001
-+subdevice.name TrueMobile 1300 WLAN Mini-PCI Card
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0003
-+subdevice.name Wireless 1350 WLAN Mini-PCI Card
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x100f
-+subdevice.name WL-100G
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-&subvendor.id pci 0x14e4
-&subdevice.id pci 0x4320
-+subdevice.name Linksys WMP54G PCI
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-&subvendor.id pci 0x1737
-&subdevice.id pci 0x4320
-+subdevice.name WPC54G
-
- vendor.id pci 0x14e4
-&device.id pci 0x4320
-&subvendor.id pci 0x1799
-&subdevice.id pci 0x7010
-+subdevice.name Belkin F5D7010 54g Wireless Network card
-
- vendor.id pci 0x14e4
-&device.id pci 0x4321
-+device.name BCM4306 802.11a Wireless LAN Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4322
-+device.name BCM4306 UART
-
- vendor.id pci 0x14e4
-&device.id pci 0x4324
-+device.name BCM4309 802.11a/b/g
-
- vendor.id pci 0x14e4
-&device.id pci 0x4324
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0001
-+subdevice.name Truemobile 1400
-
- vendor.id pci 0x14e4
-&device.id pci 0x4324
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0003
-+subdevice.name Truemobile 1450 MiniPCI
-
- vendor.id pci 0x14e4
-&device.id pci 0x4325
-+device.name BCM43xG 802.11b/g
-
- vendor.id pci 0x14e4
-&device.id pci 0x4325
-&subvendor.id pci 0x1414
-&subdevice.id pci 0x0003
-+subdevice.name Wireless Notebook Adapter MN-720
-
- vendor.id pci 0x14e4
-&device.id pci 0x4325
-&subvendor.id pci 0x1414
-&subdevice.id pci 0x0004
-+subdevice.name Wireless PCI Adapter MN-730
-
- vendor.id pci 0x14e4
-&device.id pci 0x4326
-+device.name BCM4307 Chipcommon I/O Controller?
-
- vendor.id pci 0x14e4
-&device.id pci 0x4401
-+device.name BCM4401 100Base-T
-
- vendor.id pci 0x14e4
-&device.id pci 0x4401
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a8
-+subdevice.name A7V8X motherboard
-
- vendor.id pci 0x14e4
-&device.id pci 0x4402
-+device.name BCM4402 Integrated 10/100BaseT
-
- vendor.id pci 0x14e4
-&device.id pci 0x4403
-+device.name BCM4402 V.90 56k Modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4410
-+device.name BCM4413 iLine32 HomePNA 2.0
-
- vendor.id pci 0x14e4
-&device.id pci 0x4411
-+device.name BCM4413 V.90 56k modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4412
-+device.name BCM4412 10/100BaseT
-
- vendor.id pci 0x14e4
-&device.id pci 0x4430
-+device.name BCM44xx CardBus iLine32 HomePNA 2.0
-
- vendor.id pci 0x14e4
-&device.id pci 0x4432
-+device.name BCM4432 CardBus 10/100BaseT
-
- vendor.id pci 0x14e4
-&device.id pci 0x4610
-+device.name BCM4610 Sentry5 PCI to SB Bridge
-
- vendor.id pci 0x14e4
-&device.id pci 0x4611
-+device.name BCM4610 Sentry5 iLine32 HomePNA 1.0
-
- vendor.id pci 0x14e4
-&device.id pci 0x4612
-+device.name BCM4610 Sentry5 V.90 56k Modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4613
-+device.name BCM4610 Sentry5 Ethernet Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4614
-+device.name BCM4610 Sentry5 External Interface
-
- vendor.id pci 0x14e4
-&device.id pci 0x4615
-+device.name BCM4610 Sentry5 USB Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4704
-+device.name BCM4704 PCI to SB Bridge
-
- vendor.id pci 0x14e4
-&device.id pci 0x4705
-+device.name BCM4704 Sentry5 802.11b Wireless LAN Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4706
-+device.name BCM4704 Sentry5 Ethernet Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4707
-+device.name BCM4704 Sentry5 USB Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4708
-+device.name BCM4704 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x4710
-+device.name BCM4710 Sentry5 PCI to SB Bridge
-
- vendor.id pci 0x14e4
-&device.id pci 0x4711
-+device.name BCM47xx Sentry5 iLine32 HomePNA 2.0
-
- vendor.id pci 0x14e4
-&device.id pci 0x4712
-+device.name BCM47xx V.92 56k modem
-
- vendor.id pci 0x14e4
-&device.id pci 0x4713
-+device.name Sentry5 Ethernet Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4714
-+device.name BCM47xx Sentry5 External Interface
-
- vendor.id pci 0x14e4
-&device.id pci 0x4715
-+device.name Sentry5 USB Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4716
-+device.name BCM47xx Sentry5 USB Host Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4717
-+device.name BCM47xx Sentry5 USB Device Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x4718
-+device.name Sentry5 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x4720
-+device.name BCM4712 MIPS CPU
-
- vendor.id pci 0x14e4
-&device.id pci 0x5365
-+device.name BCM5365P Sentry5 Host Bridge
-
- vendor.id pci 0x14e4
-&device.id pci 0x5600
-+device.name BCM5600 StrataSwitch 24+2 Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5605
-+device.name BCM5605 StrataSwitch 24+2 Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5615
-+device.name BCM5615 StrataSwitch 24+2 Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5625
-+device.name BCM5625 StrataSwitch 24+2 Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5645
-+device.name BCM5645 StrataSwitch 24+2 Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5670
-+device.name BCM5670 8-Port 10GE Ethernet Switch Fabric
-
- vendor.id pci 0x14e4
-&device.id pci 0x5680
-+device.name BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5690
-+device.name BCM5690 12-port Multi-Layer Gigabit Ethernet Switch
-
- vendor.id pci 0x14e4
-&device.id pci 0x5691
-+device.name BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller
-
- vendor.id pci 0x14e4
-&device.id pci 0x5820
-+device.name BCM5820 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5821
-+device.name BCM5821 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5822
-+device.name BCM5822 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5823
-+device.name BCM5823 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5824
-+device.name BCM5824 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5840
-+device.name BCM5840 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5841
-+device.name BCM5841 Crypto Accelerator
-
- vendor.id pci 0x14e4
-&device.id pci 0x5850
-+device.name BCM5850 Crypto Accelerator
-
- vendor.id pci 0x14e5
-+vendor.name Pixelfusion Ltd
-
- vendor.id pci 0x14e6
-+vendor.name SHINING Technology Inc
-
- vendor.id pci 0x14e7
-+vendor.name 3CX
-
- vendor.id pci 0x14e8
-+vendor.name RAYCER Inc
-
- vendor.id pci 0x14e9
-+vendor.name GARNETS System CO Ltd
-
- vendor.id pci 0x14ea
-+vendor.name Planex Communications, Inc
-
- vendor.id pci 0x14ea
-&device.id pci 0xab06
-+device.name FNW-3603-TX CardBus Fast Ethernet
-
- vendor.id pci 0x14ea
-&device.id pci 0xab07
-+device.name RTL81xx RealTek Ethernet
-
- vendor.id pci 0x14eb
-+vendor.name SEIKO EPSON Corp
-
- vendor.id pci 0x14ec
-+vendor.name ACQIRIS
-
- vendor.id pci 0x14ed
-+vendor.name DATAKINETICS Ltd
-
- vendor.id pci 0x14ee
-+vendor.name MASPRO KENKOH Corp
-
- vendor.id pci 0x14ef
-+vendor.name CARRY Computer ENG. CO Ltd
-
- vendor.id pci 0x14f0
-+vendor.name CANON RESEACH CENTRE FRANCE
-
- vendor.id pci 0x14f1
-+vendor.name Conexant
-
- vendor.id pci 0x14f1
-&device.id pci 0x1002
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1003
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1004
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1005
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1006
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1022
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1023
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1024
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1025
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1026
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1032
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8077
-+subdevice.name NEC
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4027
-+subdevice.name Dell Zeus - MDP3880-W(B) Data Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4030
-+subdevice.name Dell Mercury - MDP3880-U(B) Data Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4034
-+subdevice.name Dell Thor - MDP3880-W(U) Data Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x020d
-+subdevice.name Dell Copper
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x020e
-+subdevice.name Dell Silver
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0261
-+subdevice.name IBM
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0290
-+subdevice.name Compaq Goldwing
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x02a0
-+subdevice.name IBM
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x02b0
-+subdevice.name IBM
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x02c0
-+subdevice.name Compaq Scooter
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x02d0
-+subdevice.name IBM
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1500
-+subdevice.name IBM P85-DF (1)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1501
-+subdevice.name IBM P85-DF (2)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x150a
-+subdevice.name IBM P85-DF (3)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x150b
-+subdevice.name IBM P85-DF Low Profile (1)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1033
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1510
-+subdevice.name IBM P85-DF Low Profile (2)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1034
-+device.name HCF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1035
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1035
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1098
-+subdevice.name Fujitsu P85-DFSV
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-+device.name HCF 56k Data/Fax/Voice/Spkp Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8067
-+subdevice.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4029
-+subdevice.name MDP3880SP-W
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4031
-+subdevice.name MDP3880SP-U
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0209
-+subdevice.name Dell Titanium
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x020a
-+subdevice.name Dell Graphite
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0260
-+subdevice.name Gateway Red Owl
-
- vendor.id pci 0x14f1
-&device.id pci 0x1036
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0270
-+subdevice.name Gateway White Horse
-
- vendor.id pci 0x14f1
-&device.id pci 0x1052
-+device.name HCF 56k Data/Fax Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1053
-+device.name HCF 56k Data/Fax Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1054
-+device.name HCF 56k Data/Fax/Voice Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1055
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1056
-+device.name HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1057
-+device.name HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1059
-+device.name HCF 56k Data/Fax/Voice Modem (Worldwide)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1063
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1064
-+device.name HCF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1065
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1066
-+device.name HCF 56k Data/Fax/Voice/Spkp Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1066
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4033
-+subdevice.name Dell Athena - MDP3900V-U
-
- vendor.id pci 0x14f1
-&device.id pci 0x1433
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1434
-+device.name HCF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1435
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1436
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1453
-+device.name HCF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1453
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0240
-+subdevice.name IBM
-
- vendor.id pci 0x14f1
-&device.id pci 0x1453
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x0250
-+subdevice.name IBM
-
- vendor.id pci 0x14f1
-&device.id pci 0x1453
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1502
-+subdevice.name IBM P95-DF (1)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1453
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x1503
-+subdevice.name IBM P95-DF (2)
-
- vendor.id pci 0x14f1
-&device.id pci 0x1454
-+device.name HCF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1455
-+device.name HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1456
-+device.name HCF 56k Data/Fax/Voice/Spkp Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1456
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4035
-+subdevice.name Dell Europa - MDP3900V-W
-
- vendor.id pci 0x14f1
-&device.id pci 0x1456
-&subvendor.id pci 0x122d
-&subdevice.id pci 0x4302
-+subdevice.name Dell MP3930V-W(C) MiniPCI
-
- vendor.id pci 0x14f1
-&device.id pci 0x1610
-+device.name ADSL AccessRunner PCI Arbitration Device
-
- vendor.id pci 0x14f1
-&device.id pci 0x1611
-+device.name AccessRunner PCI ADSL Interface Device
-
- vendor.id pci 0x14f1
-&device.id pci 0x1620
-+device.name ADSL AccessRunner V2 PCI Arbitration Device
-
- vendor.id pci 0x14f1
-&device.id pci 0x1621
-+device.name AccessRunner V2 PCI ADSL Interface Device
-
- vendor.id pci 0x14f1
-&device.id pci 0x1622
-+device.name AccessRunner V2 PCI ADSL Yukon WAN Adapter
-
- vendor.id pci 0x14f1
-&device.id pci 0x1803
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1803
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0023
-+subdevice.name 623-LAN Grizzly
-
- vendor.id pci 0x14f1
-&device.id pci 0x1803
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0043
-+subdevice.name 623-LAN Yogi
-
- vendor.id pci 0x14f1
-&device.id pci 0x1815
-+device.name HCF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x1815
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0022
-+subdevice.name Grizzly
-
- vendor.id pci 0x14f1
-&device.id pci 0x1815
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0042
-+subdevice.name Yogi
-
- vendor.id pci 0x14f1
-&device.id pci 0x2003
-+device.name HSF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2004
-+device.name HSF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2005
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2006
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-+device.name HSF 56k Data/Fax Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb195
-+subdevice.name Bear
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb196
-+subdevice.name Seminole 1
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb1be
-+subdevice.name Seminole 2
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x8013
-+subdevice.name Acer
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x809d
-+subdevice.name NEC
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x80bc
-+subdevice.name NEC
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x155d
-&subdevice.id pci 0x6793
-+subdevice.name HP
-
- vendor.id pci 0x14f1
-&device.id pci 0x2013
-&subvendor.id pci 0x155d
-&subdevice.id pci 0x8850
-+subdevice.name E Machines
-
- vendor.id pci 0x14f1
-&device.id pci 0x2014
-+device.name HSF 56k Data/Fax/Voice Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2015
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2016
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2043
-+device.name HSF 56k Data/Fax Modem (WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2044
-+device.name HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2045
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2046
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2063
-+device.name HSF 56k Data/Fax Modem (SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2064
-+device.name HSF 56k Data/Fax/Voice Modem (SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2065
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2066
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2093
-+device.name HSF 56k Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2093
-&subvendor.id pci 0x155d
-&subdevice.id pci 0x2f07
-+subdevice.name Legend
-
- vendor.id pci 0x14f1
-&device.id pci 0x2143
-+device.name HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2144
-+device.name HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2145
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2146
-+device.name HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2163
-+device.name HSF 56k Data/Fax/Cell Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2164
-+device.name HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2165
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2166
-+device.name HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2343
-+device.name HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2344
-+device.name HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2345
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2346
-+device.name HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2363
-+device.name HSF 56k Data/Fax CardBus Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2364
-+device.name HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2365
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2366
-+device.name HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2443
-+device.name HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2443
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8075
-+subdevice.name Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2443
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8083
-+subdevice.name Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2443
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x8097
-+subdevice.name Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2444
-+device.name HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2445
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2446
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2463
-+device.name HSF 56k Data/Fax Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2464
-+device.name HSF 56k Data/Fax/Voice Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2465
-+device.name HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2466
-+device.name HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA)
-
- vendor.id pci 0x14f1
-&device.id pci 0x2f00
-+device.name HSF 56k HSFi Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x2f00
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x8d84
-+subdevice.name IBM HSFi V.90
-
- vendor.id pci 0x14f1
-&device.id pci 0x2f00
-&subvendor.id pci 0x13e0
-&subdevice.id pci 0x8d85
-+subdevice.name Compaq Stinger
-
- vendor.id pci 0x14f1
-&device.id pci 0x2f00
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x2004
-+subdevice.name Dynalink 56PMi
-
- vendor.id pci 0x14f1
-&device.id pci 0x2f02
-+device.name HSF 56k HSFi Data/Fax
-
- vendor.id pci 0x14f1
-&device.id pci 0x2f11
-+device.name HSF 56k HSFi Modem
-
- vendor.id pci 0x14f1
-&device.id pci 0x8234
-+device.name RS8234 ATM SAR Controller [ServiceSAR Plus]
-
- vendor.id pci 0x14f1
-&device.id pci 0x8800
-+device.name Winfast TV2000 XP
-
- vendor.id pci 0x14f2
-+vendor.name MOBILITY Electronics
-
- vendor.id pci 0x14f2
-&device.id pci 0x0120
-+device.name EV1000 bridge
-
- vendor.id pci 0x14f2
-&device.id pci 0x0121
-+device.name EV1000 Parallel port
-
- vendor.id pci 0x14f2
-&device.id pci 0x0122
-+device.name EV1000 Serial port
-
- vendor.id pci 0x14f2
-&device.id pci 0x0123
-+device.name EV1000 Keyboard controller
-
- vendor.id pci 0x14f2
-&device.id pci 0x0124
-+device.name EV1000 Mouse controller
-
- vendor.id pci 0x14f3
-+vendor.name BroadLogic
-
- vendor.id pci 0x14f3
-&device.id pci 0x2030
-+device.name 2030 DVB-S Satellite Reciever
-
- vendor.id pci 0x14f3
-&device.id pci 0x2050
-+device.name 2050 DVB-T Terrestrial (Cable) Reciever
-
- vendor.id pci 0x14f3
-&device.id pci 0x2060
-+device.name 2060 ATSC Terrestrial (Cable) Reciever
-
- vendor.id pci 0x14f4
-+vendor.name TOKYO Electronic Industry CO Ltd
-
- vendor.id pci 0x14f5
-+vendor.name SOPAC Ltd
-
- vendor.id pci 0x14f6
-+vendor.name COYOTE Technologies LLC
-
- vendor.id pci 0x14f7
-+vendor.name WOLF Technology Inc
-
- vendor.id pci 0x14f8
-+vendor.name AUDIOCODES Inc
-
- vendor.id pci 0x14f8
-&device.id pci 0x2077
-+device.name TP-240 dual span E1 VoIP PCI card
-
- vendor.id pci 0x14f9
-+vendor.name AG COMMUNICATIONS
-
- vendor.id pci 0x14fa
-+vendor.name WANDEL & GOCHERMANN
-
- vendor.id pci 0x14fb
-+vendor.name TRANSAS MARINE (UK) Ltd
-
- vendor.id pci 0x14fc
-+vendor.name Quadrics Ltd
-
- vendor.id pci 0x14fc
-&device.id pci 0x0000
-+device.name QsNet Elan3 Network Adapter
-
- vendor.id pci 0x14fc
-&device.id pci 0x0001
-+device.name QsNetII Elan4 Network Adapter
-
- vendor.id pci 0x14fd
-+vendor.name JAPAN Computer Industry Inc
-
- vendor.id pci 0x14fe
-+vendor.name ARCHTEK TELECOM Corp
-
- vendor.id pci 0x14ff
-+vendor.name TWINHEAD INTERNATIONAL Corp
-
- vendor.id pci 0x1500
-+vendor.name DELTA Electronics, Inc
-
- vendor.id pci 0x1500
-&device.id pci 0x1360
-+device.name RTL81xx RealTek Ethernet
-
- vendor.id pci 0x1501
-+vendor.name BANKSOFT CANADA Ltd
-
- vendor.id pci 0x1502
-+vendor.name MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd
-
- vendor.id pci 0x1503
-+vendor.name KAWASAKI LSI USA Inc
-
- vendor.id pci 0x1504
-+vendor.name KAISER Electronics
-
- vendor.id pci 0x1505
-+vendor.name ITA INGENIEURBURO FUR TESTAUFGABEN GmbH
-
- vendor.id pci 0x1506
-+vendor.name CHAMELEON Systems Inc
-
- vendor.id pci 0x1507
-+vendor.name Motorola ?? / HTEC
-
- vendor.id pci 0x1507
-&device.id pci 0x0001
-+device.name MPC105 [Eagle]
-
- vendor.id pci 0x1507
-&device.id pci 0x0002
-+device.name MPC106 [Grackle]
-
- vendor.id pci 0x1507
-&device.id pci 0x0003
-+device.name MPC8240 [Kahlua]
-
- vendor.id pci 0x1507
-&device.id pci 0x0100
-+device.name MC145575 [HFC-PCI]
-
- vendor.id pci 0x1507
-&device.id pci 0x0431
-+device.name KTI829c 100VG
-
- vendor.id pci 0x1507
-&device.id pci 0x4801
-+device.name Raven
-
- vendor.id pci 0x1507
-&device.id pci 0x4802
-+device.name Falcon
-
- vendor.id pci 0x1507
-&device.id pci 0x4803
-+device.name Hawk
-
- vendor.id pci 0x1507
-&device.id pci 0x4806
-+device.name CPX8216
-
- vendor.id pci 0x1508
-+vendor.name HONDA CONNECTORS/MHOTRONICS Inc
-
- vendor.id pci 0x1509
-+vendor.name FIRST INTERNATIONAL Computer Inc
-
- vendor.id pci 0x150a
-+vendor.name FORVUS RESEARCH Inc
-
- vendor.id pci 0x150b
-+vendor.name YAMASHITA Systems Corp
-
- vendor.id pci 0x150c
-+vendor.name KYOPAL CO Ltd
-
- vendor.id pci 0x150d
-+vendor.name WARPSPPED Inc
-
- vendor.id pci 0x150e
-+vendor.name C-PORT Corp
-
- vendor.id pci 0x150f
-+vendor.name INTEC GmbH
-
- vendor.id pci 0x1510
-+vendor.name BEHAVIOR TECH Computer Corp
-
- vendor.id pci 0x1511
-+vendor.name CENTILLIUM Technology Corp
-
- vendor.id pci 0x1512
-+vendor.name ROSUN Technologies Inc
-
- vendor.id pci 0x1513
-+vendor.name Raychem
-
- vendor.id pci 0x1514
-+vendor.name TFL LAN Inc
-
- vendor.id pci 0x1515
-+vendor.name Advent design
-
- vendor.id pci 0x1516
-+vendor.name MYSON Technology Inc
-
- vendor.id pci 0x1516
-&device.id pci 0x0800
-+device.name MTD-8xx 100/10M Ethernet PCI Adapter
-
- vendor.id pci 0x1516
-&device.id pci 0x0803
-+device.name SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
-
- vendor.id pci 0x1516
-&device.id pci 0x0803
-&subvendor.id pci 0x1320
-&subdevice.id pci 0x10bd
-+subdevice.name SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
-
- vendor.id pci 0x1516
-&device.id pci 0x0891
-+device.name MTD-8xx 100/10M Ethernet PCI Adapter
-
- vendor.id pci 0x1517
-+vendor.name ECHOTEK Corp
-
- vendor.id pci 0x1518
-+vendor.name PEP MODULAR Computers GmbH
-
- vendor.id pci 0x1519
-+vendor.name TELEFON AKTIEBOLAGET LM Ericsson
-
- vendor.id pci 0x151a
-+vendor.name Globetek
-
- vendor.id pci 0x151a
-&device.id pci 0x1002
-+device.name PCI-1002
-
- vendor.id pci 0x151a
-&device.id pci 0x1004
-+device.name PCI-1004
-
- vendor.id pci 0x151a
-&device.id pci 0x1008
-+device.name PCI-1008
-
- vendor.id pci 0x151b
-+vendor.name COMBOX Ltd
-
- vendor.id pci 0x151c
-+vendor.name DIGITAL AUDIO LABS Inc
-
- vendor.id pci 0x151d
-+vendor.name Fujitsu Computer Products Of America
-
- vendor.id pci 0x151e
-+vendor.name MATRIX Corp
-
- vendor.id pci 0x151f
-+vendor.name TOPIC SEMICONDUCTOR Corp
-
- vendor.id pci 0x151f
-&device.id pci 0x0000
-+device.name TP560 Data/Fax/Voice 56k modem
-
- vendor.id pci 0x1520
-+vendor.name CHAPLET System Inc
-
- vendor.id pci 0x1521
-+vendor.name BELL Corp
-
- vendor.id pci 0x1522
-+vendor.name MainPine Ltd
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-+device.name PCI <-> IOBus Bridge
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0200
-+subdevice.name RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0300
-+subdevice.name RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0400
-+subdevice.name RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0500
-+subdevice.name RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0600
-+subdevice.name RockForce+ 2 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0700
-+subdevice.name RockForce+ 4 Port V.90 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0800
-+subdevice.name RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0c00
-+subdevice.name RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x0d00
-+subdevice.name RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem
-
- vendor.id pci 0x1522
-&device.id pci 0x0100
-&subvendor.id pci 0x1522
-&subdevice.id pci 0x1d00
-+subdevice.name RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem
-
- vendor.id pci 0x1523
-+vendor.name MUSIC Semiconductors
-
- vendor.id pci 0x1524
-+vendor.name ENE Technology Inc
-
- vendor.id pci 0x1524
-&device.id pci 0x0510
-+device.name CB710 Memory Card Reader Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x0610
-+device.name PCI Smart Card Reader Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1211
-+device.name CB1211 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1225
-+device.name CB1225 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1410
-+device.name CB1410 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1410
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x1524
-&device.id pci 0x1411
-+device.name CB-710/2/4 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1412
-+device.name CB-712/4 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1420
-+device.name CB1420 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1421
-+device.name CB-720/2/4 Cardbus Controller
-
- vendor.id pci 0x1524
-&device.id pci 0x1422
-+device.name CB-722/4 Cardbus Controller
-
- vendor.id pci 0x1525
-+vendor.name IMPACT Technologies
-
- vendor.id pci 0x1526
-+vendor.name ISS, Inc
-
- vendor.id pci 0x1527
-+vendor.name SOLECTRON
-
- vendor.id pci 0x1528
-+vendor.name ACKSYS
-
- vendor.id pci 0x1529
-+vendor.name AMERICAN MICROSystems Inc
-
- vendor.id pci 0x152a
-+vendor.name QUICKTURN DESIGN Systems
-
- vendor.id pci 0x152b
-+vendor.name FLYTECH Technology CO Ltd
-
- vendor.id pci 0x152c
-+vendor.name MACRAIGOR Systems LLC
-
- vendor.id pci 0x152d
-+vendor.name QUANTA Computer Inc
-
- vendor.id pci 0x152e
-+vendor.name MELEC Inc
-
- vendor.id pci 0x152f
-+vendor.name PHILIPS - CRYPTO
-
- vendor.id pci 0x1530
-+vendor.name ACQIS Technology Inc
-
- vendor.id pci 0x1531
-+vendor.name CHRYON Corp
-
- vendor.id pci 0x1532
-+vendor.name ECHELON Corp
-
- vendor.id pci 0x1533
-+vendor.name BALTIMORE
-
- vendor.id pci 0x1534
-+vendor.name ROAD Corp
-
- vendor.id pci 0x1535
-+vendor.name EVERGREEN Technologies Inc
-
- vendor.id pci 0x1537
-+vendor.name DATALEX COMMUNCATIONS
-
- vendor.id pci 0x1538
-+vendor.name ARALION Inc
-
- vendor.id pci 0x1538
-&device.id pci 0x0303
-+device.name ARS106S Ultra ATA 133/100/66 Host Controller
-
- vendor.id pci 0x1539
-+vendor.name ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A.
-
- vendor.id pci 0x153a
-+vendor.name ONO SOKKI
-
- vendor.id pci 0x153b
-+vendor.name TERRATEC Electronic GmbH
-
- vendor.id pci 0x153b
-&device.id pci 0x1144
-+device.name Aureon 5.1
-
- vendor.id pci 0x153b
-&device.id pci 0x1147
-+device.name Aureon 5.1 Sky
-
- vendor.id pci 0x153b
-&device.id pci 0x1158
-+device.name Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV]
-
- vendor.id pci 0x153c
-+vendor.name ANTAL Electronic
-
- vendor.id pci 0x153d
-+vendor.name FILANET Corp
-
- vendor.id pci 0x153e
-+vendor.name TECHWELL Inc
-
- vendor.id pci 0x153f
-+vendor.name MIPS DENMARK
-
- vendor.id pci 0x1540
-+vendor.name PROVIDEO MULTIMEDIA Co Ltd
-
- vendor.id pci 0x1541
-+vendor.name MACHONE Communications
-
- vendor.id pci 0x1542
-+vendor.name VIVID Technology Inc
-
- vendor.id pci 0x1543
-+vendor.name SILICON Laboratories
-
- vendor.id pci 0x1543
-&device.id pci 0x3052
-+device.name Intel 537 [Winmodem]
-
- vendor.id pci 0x1543
-&device.id pci 0x4c22
-+device.name Si3036 MC'97 DAA
-
- vendor.id pci 0x1544
-+vendor.name DCM DATA Systems
-
- vendor.id pci 0x1545
-+vendor.name VISIONTEK
-
- vendor.id pci 0x1546
-+vendor.name IOI Technology Corp
-
- vendor.id pci 0x1547
-+vendor.name MITUTOYO Corp
-
- vendor.id pci 0x1548
-+vendor.name JET PROPULSION Laboratory
-
- vendor.id pci 0x1549
-+vendor.name INTERCONNECT Systems Solutions
-
- vendor.id pci 0x154a
-+vendor.name MAX Technologies Inc
-
- vendor.id pci 0x154b
-+vendor.name COMPUTEX Co Ltd
-
- vendor.id pci 0x154c
-+vendor.name VISUAL Technology Inc
-
- vendor.id pci 0x154d
-+vendor.name PAN INTERNATIONAL Industrial Corp
-
- vendor.id pci 0x154e
-+vendor.name SERVOTEST Ltd
-
- vendor.id pci 0x154f
-+vendor.name STRATABEAM Technology
-
- vendor.id pci 0x1550
-+vendor.name OPEN NETWORK Co Ltd
-
- vendor.id pci 0x1551
-+vendor.name SMART Electronic DEVELOPMENT GmBH
-
- vendor.id pci 0x1552
-+vendor.name RACAL AIRTECH Ltd
-
- vendor.id pci 0x1553
-+vendor.name CHICONY Electronics Co Ltd
-
- vendor.id pci 0x1554
-+vendor.name PROLINK Microsystems Corp
-
- vendor.id pci 0x1555
-+vendor.name GESYTEC GmBH
-
- vendor.id pci 0x1556
-+vendor.name PLD APPLICATIONS
-
- vendor.id pci 0x1557
-+vendor.name MEDIASTAR Co Ltd
-
- vendor.id pci 0x1558
-+vendor.name CLEVO/KAPOK Computer
-
- vendor.id pci 0x1559
-+vendor.name SI LOGIC Ltd
-
- vendor.id pci 0x155a
-+vendor.name INNOMEDIA Inc
-
- vendor.id pci 0x155b
-+vendor.name PROTAC INTERNATIONAL Corp
-
- vendor.id pci 0x155c
-+vendor.name Cemax-Icon Inc
-
- vendor.id pci 0x155d
-+vendor.name Mac System Co Ltd
-
- vendor.id pci 0x155e
-+vendor.name LP Elektronik GmbH
-
- vendor.id pci 0x155f
-+vendor.name Perle Systems Ltd
-
- vendor.id pci 0x1560
-+vendor.name Terayon Communications Systems
-
- vendor.id pci 0x1561
-+vendor.name Viewgraphics Inc
-
- vendor.id pci 0x1562
-+vendor.name Symbol Technologies
-
- vendor.id pci 0x1563
-+vendor.name A-Trend Technology Co Ltd
-
- vendor.id pci 0x1564
-+vendor.name Yamakatsu Electronics Industry Co Ltd
-
- vendor.id pci 0x1565
-+vendor.name Biostar Microtech Int'l Corp
-
- vendor.id pci 0x1566
-+vendor.name Ardent Technologies Inc
-
- vendor.id pci 0x1567
-+vendor.name Jungsoft
-
- vendor.id pci 0x1568
-+vendor.name DDK Electronics Inc
-
- vendor.id pci 0x1569
-+vendor.name Palit Microsystems Inc.
-
- vendor.id pci 0x156a
-+vendor.name Avtec Systems
-
- vendor.id pci 0x156b
-+vendor.name 2wire Inc
-
- vendor.id pci 0x156c
-+vendor.name Vidac Electronics GmbH
-
- vendor.id pci 0x156d
-+vendor.name Alpha-Top Corp
-
- vendor.id pci 0x156e
-+vendor.name Alfa Inc
-
- vendor.id pci 0x156f
-+vendor.name M-Systems Flash Disk Pioneers Ltd
-
- vendor.id pci 0x1570
-+vendor.name Lecroy Corp
-
- vendor.id pci 0x1571
-+vendor.name Contemporary Controls
-
- vendor.id pci 0x1571
-&device.id pci 0xa001
-+device.name CCSI PCI20-485 ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa002
-+device.name CCSI PCI20-485D ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa003
-+device.name CCSI PCI20-485X ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa004
-+device.name CCSI PCI20-CXB ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa005
-+device.name CCSI PCI20-CXS ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa006
-+device.name CCSI PCI20-FOG-SMA ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa007
-+device.name CCSI PCI20-FOG-ST ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa008
-+device.name CCSI PCI20-TB5 ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa009
-+device.name CCSI PCI20-5-485 5Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa00a
-+device.name CCSI PCI20-5-485D 5Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa00b
-+device.name CCSI PCI20-5-485X 5Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa00c
-+device.name CCSI PCI20-5-FOG-ST 5Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa00d
-+device.name CCSI PCI20-5-FOG-SMA 5Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa201
-+device.name CCSI PCI22-485 10Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa202
-+device.name CCSI PCI22-485D 10Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa203
-+device.name CCSI PCI22-485X 10Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa204
-+device.name CCSI PCI22-CHB 10Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa205
-+device.name CCSI PCI22-FOG_ST 10Mbit ARCnet
-
- vendor.id pci 0x1571
-&device.id pci 0xa206
-+device.name CCSI PCI22-THB 10Mbit ARCnet
-
- vendor.id pci 0x1572
-+vendor.name Otis Elevator Company
-
- vendor.id pci 0x1573
-+vendor.name Lattice - Vantis
-
- vendor.id pci 0x1574
-+vendor.name Fairchild Semiconductor
-
- vendor.id pci 0x1575
-+vendor.name Voltaire Advanced Data Security Ltd
-
- vendor.id pci 0x1576
-+vendor.name Viewcast COM
-
- vendor.id pci 0x1578
-+vendor.name HITT
-
- vendor.id pci 0x1579
-+vendor.name Dual Technology Corp
-
- vendor.id pci 0x157a
-+vendor.name Japan Elecronics Ind Inc
-
- vendor.id pci 0x157b
-+vendor.name Star Multimedia Corp
-
- vendor.id pci 0x157c
-+vendor.name Eurosoft (UK)
-
- vendor.id pci 0x157c
-&device.id pci 0x8001
-+device.name Fix2000 PCI Y2K Compliance Card
-
- vendor.id pci 0x157d
-+vendor.name Gemflex Networks
-
- vendor.id pci 0x157e
-+vendor.name Transition Networks
-
- vendor.id pci 0x157f
-+vendor.name PX Instruments Technology Ltd
-
- vendor.id pci 0x1580
-+vendor.name Primex Aerospace Co
-
- vendor.id pci 0x1581
-+vendor.name SEH Computertechnik GmbH
-
- vendor.id pci 0x1582
-+vendor.name Cytec Corp
-
- vendor.id pci 0x1583
-+vendor.name Inet Technologies Inc
-
- vendor.id pci 0x1584
-+vendor.name Uniwill Computer Corp
-
- vendor.id pci 0x1585
-+vendor.name Logitron
-
- vendor.id pci 0x1586
-+vendor.name Lancast Inc
-
- vendor.id pci 0x1587
-+vendor.name Konica Corp
-
- vendor.id pci 0x1588
-+vendor.name Solidum Systems Corp
-
- vendor.id pci 0x1589
-+vendor.name Atlantek Microsystems Pty Ltd
-
- vendor.id pci 0x158a
-+vendor.name Digalog Systems Inc
-
- vendor.id pci 0x158b
-+vendor.name Allied Data Technologies
-
- vendor.id pci 0x158c
-+vendor.name Hitachi Semiconductor & Devices Sales Co Ltd
-
- vendor.id pci 0x158d
-+vendor.name Point Multimedia Systems
-
- vendor.id pci 0x158e
-+vendor.name Lara Technology Inc
-
- vendor.id pci 0x158f
-+vendor.name Ditect Coop
-
- vendor.id pci 0x1590
-+vendor.name 3pardata Inc
-
- vendor.id pci 0x1591
-+vendor.name ARN
-
- vendor.id pci 0x1592
-+vendor.name Syba Tech Ltd
-
- vendor.id pci 0x1592
-&device.id pci 0x0781
-+device.name Multi-IO Card
-
- vendor.id pci 0x1592
-&device.id pci 0x0782
-+device.name Parallel Port Card 2xEPP
-
- vendor.id pci 0x1592
-&device.id pci 0x0783
-+device.name Multi-IO Card
-
- vendor.id pci 0x1592
-&device.id pci 0x0785
-+device.name Multi-IO Card
-
- vendor.id pci 0x1592
-&device.id pci 0x0786
-+device.name Multi-IO Card
-
- vendor.id pci 0x1592
-&device.id pci 0x0787
-+device.name Multi-IO Card
-
- vendor.id pci 0x1592
-&device.id pci 0x0788
-+device.name Multi-IO Card
-
- vendor.id pci 0x1592
-&device.id pci 0x078a
-+device.name Multi-IO Card
-
- vendor.id pci 0x1593
-+vendor.name Bops Inc
-
- vendor.id pci 0x1594
-+vendor.name Netgame Ltd
-
- vendor.id pci 0x1595
-+vendor.name Diva Systems Corp
-
- vendor.id pci 0x1596
-+vendor.name Folsom Research Inc
-
- vendor.id pci 0x1597
-+vendor.name Memec Design Services
-
- vendor.id pci 0x1598
-+vendor.name Granite Microsystems
-
- vendor.id pci 0x1599
-+vendor.name Delta Electronics Inc
-
- vendor.id pci 0x159a
-+vendor.name General Instrument
-
- vendor.id pci 0x159b
-+vendor.name Faraday Technology Corp
-
- vendor.id pci 0x159c
-+vendor.name Stratus Computer Systems
-
- vendor.id pci 0x159d
-+vendor.name Ningbo Harrison Electronics Co Ltd
-
- vendor.id pci 0x159e
-+vendor.name A-Max Technology Co Ltd
-
- vendor.id pci 0x159f
-+vendor.name Galea Network Security
-
- vendor.id pci 0x15a0
-+vendor.name Compumaster SRL
-
- vendor.id pci 0x15a1
-+vendor.name Geocast Network Systems
-
- vendor.id pci 0x15a2
-+vendor.name Catalyst Enterprises Inc
-
- vendor.id pci 0x15a2
-&device.id pci 0x0001
-+device.name TA700 PCI Bus Analyzer/Exerciser
-
- vendor.id pci 0x15a3
-+vendor.name Italtel
-
- vendor.id pci 0x15a4
-+vendor.name X-Net OY
-
- vendor.id pci 0x15a5
-+vendor.name Toyota Macs Inc
-
- vendor.id pci 0x15a6
-+vendor.name Sunlight Ultrasound Technologies Ltd
-
- vendor.id pci 0x15a7
-+vendor.name SSE Telecom Inc
-
- vendor.id pci 0x15a8
-+vendor.name Shanghai Communications Technologies Center
-
- vendor.id pci 0x15aa
-+vendor.name Moreton Bay
-
- vendor.id pci 0x15ab
-+vendor.name Bluesteel Networks Inc
-
- vendor.id pci 0x15ac
-+vendor.name North Atlantic Instruments
-
- vendor.id pci 0x15ad
-+vendor.name VMware Inc
-
- vendor.id pci 0x15ad
-&device.id pci 0x0405
-+device.name [VMware SVGA II] PCI Display Adapter
-
- vendor.id pci 0x15ad
-&device.id pci 0x0710
-+device.name Virtual SVGA
-
- vendor.id pci 0x15ad
-&device.id pci 0x0720
-+device.name VMware High-Speed Virtual NIC [vmxnet]
-
- vendor.id pci 0x15ae
-+vendor.name Amersham Pharmacia Biotech
-
- vendor.id pci 0x15b0
-+vendor.name Zoltrix International Ltd
-
- vendor.id pci 0x15b1
-+vendor.name Source Technology Inc
-
- vendor.id pci 0x15b2
-+vendor.name Mosaid Technologies Inc
-
- vendor.id pci 0x15b3
-+vendor.name Mellanox Technologies
-
- vendor.id pci 0x15b3
-&device.id pci 0x5274
-+device.name MT21108 InfiniBridge
-
- vendor.id pci 0x15b3
-&device.id pci 0x5a44
-+device.name MT23108 InfiniHost HCA
-
- vendor.id pci 0x15b3
-&device.id pci 0x5a45
-+device.name MT23108 InfiniHost HCA flash recovery (Tavor)
-
- vendor.id pci 0x15b3
-&device.id pci 0x5a46
-+device.name MT23108 InfiniHost HCA bridge
-
- vendor.id pci 0x15b3
-&device.id pci 0x5e8c
-+device.name MT24204 [InfiniHost III Lx HCA]
-
- vendor.id pci 0x15b3
-&device.id pci 0x5e8d
-+device.name MT24204 [InfiniHost III Lx HCA Flash Recovery]
-
- vendor.id pci 0x15b3
-&device.id pci 0x6278
-+device.name MT25208 InfiniHost III Ex HCA (Tavor compatibility mode)
-
- vendor.id pci 0x15b3
-&device.id pci 0x6279
-+device.name MT25208 [InfiniHost III Ex HCA Flash Recovery]
-
- vendor.id pci 0x15b3
-&device.id pci 0x6282
-+device.name MT25208 InfiniHost III Ex HCA
-
- vendor.id pci 0x15b4
-+vendor.name CCI/TRIAD
-
- vendor.id pci 0x15b5
-+vendor.name Cimetrics Inc
-
- vendor.id pci 0x15b6
-+vendor.name Texas Memory Systems Inc
-
- vendor.id pci 0x15b7
-+vendor.name Sandisk Corp
-
- vendor.id pci 0x15b8
-+vendor.name ADDI-DATA GmbH
-
- vendor.id pci 0x15b9
-+vendor.name Maestro Digital Communications
-
- vendor.id pci 0x15ba
-+vendor.name Impacct Technology Corp
-
- vendor.id pci 0x15bb
-+vendor.name Portwell Inc
-
- vendor.id pci 0x15bc
-+vendor.name Agilent Technologies
-
- vendor.id pci 0x15bc
-&device.id pci 0x2922
-+device.name 64 Bit, 133MHz PCI-X Exerciser & Protocol Checker
-
- vendor.id pci 0x15bc
-&device.id pci 0x2928
-+device.name 64 Bit, 66MHz PCI Exerciser & Analyzer
-
- vendor.id pci 0x15bc
-&device.id pci 0x2929
-+device.name 64 Bit, 133MHz PCI-X Analyzer & Exerciser
-
- vendor.id pci 0x15bd
-+vendor.name DFI Inc
-
- vendor.id pci 0x15be
-+vendor.name Sola Electronics
-
- vendor.id pci 0x15bf
-+vendor.name High Tech Computer Corp (HTC)
-
- vendor.id pci 0x15c0
-+vendor.name BVM Ltd
-
- vendor.id pci 0x15c1
-+vendor.name Quantel
-
- vendor.id pci 0x15c2
-+vendor.name Newer Technology Inc
-
- vendor.id pci 0x15c3
-+vendor.name Taiwan Mycomp Co Ltd
-
- vendor.id pci 0x15c4
-+vendor.name EVSX Inc
-
- vendor.id pci 0x15c5
-+vendor.name Procomp Informatics Ltd
-
- vendor.id pci 0x15c5
-&device.id pci 0x8010
-+device.name 1394b - 1394 Firewire 3-Port Host Adapter Card
-
- vendor.id pci 0x15c6
-+vendor.name Technical University of Budapest
-
- vendor.id pci 0x15c7
-+vendor.name Tateyama System Laboratory Co Ltd
-
- vendor.id pci 0x15c7
-&device.id pci 0x0349
-+device.name Tateyama C-PCI PLC/NC card Rev.01A
-
- vendor.id pci 0x15c8
-+vendor.name Penta Media Co Ltd
-
- vendor.id pci 0x15c9
-+vendor.name Serome Technology Inc
-
- vendor.id pci 0x15ca
-+vendor.name Bitboys OY
-
- vendor.id pci 0x15cb
-+vendor.name AG Electronics Ltd
-
- vendor.id pci 0x15cc
-+vendor.name Hotrail Inc
-
- vendor.id pci 0x15cd
-+vendor.name Dreamtech Co Ltd
-
- vendor.id pci 0x15ce
-+vendor.name Genrad Inc
-
- vendor.id pci 0x15cf
-+vendor.name Hilscher GmbH
-
- vendor.id pci 0x15d1
-+vendor.name Infineon Technologies AG
-
- vendor.id pci 0x15d2
-+vendor.name FIC (First International Computer Inc)
-
- vendor.id pci 0x15d3
-+vendor.name NDS Technologies Israel Ltd
-
- vendor.id pci 0x15d4
-+vendor.name Iwill Corp
-
- vendor.id pci 0x15d5
-+vendor.name Tatung Co
-
- vendor.id pci 0x15d6
-+vendor.name Entridia Corp
-
- vendor.id pci 0x15d7
-+vendor.name Rockwell-Collins Inc
-
- vendor.id pci 0x15d8
-+vendor.name Cybernetics Technology Co Ltd
-
- vendor.id pci 0x15d9
-+vendor.name Super Micro Computer Inc
-
- vendor.id pci 0x15da
-+vendor.name Cyberfirm Inc
-
- vendor.id pci 0x15db
-+vendor.name Applied Computing Systems Inc
-
- vendor.id pci 0x15dc
-+vendor.name Litronic Inc
-
- vendor.id pci 0x15dc
-&device.id pci 0x0001
-+device.name Argus 300 PCI Cryptography Module
-
- vendor.id pci 0x15dd
-+vendor.name Sigmatel Inc
-
- vendor.id pci 0x15de
-+vendor.name Malleable Technologies Inc
-
- vendor.id pci 0x15df
-+vendor.name Infinilink Corp
-
- vendor.id pci 0x15e0
-+vendor.name Cacheflow Inc
-
- vendor.id pci 0x15e1
-+vendor.name Voice Technologies Group Inc
-
- vendor.id pci 0x15e2
-+vendor.name Quicknet Technologies Inc
-
- vendor.id pci 0x15e3
-+vendor.name Networth Technologies Inc
-
- vendor.id pci 0x15e4
-+vendor.name VSN Systemen BV
-
- vendor.id pci 0x15e5
-+vendor.name Valley technologies Inc
-
- vendor.id pci 0x15e6
-+vendor.name Agere Inc
-
- vendor.id pci 0x15e7
-+vendor.name Get Engineering Corp
-
- vendor.id pci 0x15e8
-+vendor.name National Datacomm Corp
-
- vendor.id pci 0x15e8
-&device.id pci 0x0130
-+device.name Wireless PCI Card
-
- vendor.id pci 0x15e9
-+vendor.name Pacific Digital Corp
-
- vendor.id pci 0x15e9
-&device.id pci 0x1841
-+device.name ADMA-100 DiscStaQ ATA Controller
-
- vendor.id pci 0x15ea
-+vendor.name Tokyo Denshi Sekei K.K.
-
- vendor.id pci 0x15eb
-+vendor.name Drsearch GmbH
-
- vendor.id pci 0x15ec
-+vendor.name Beckhoff GmbH
-
- vendor.id pci 0x15ec
-&device.id pci 0x3101
-+device.name FC3101 Profibus DP 1 Channel PCI
-
- vendor.id pci 0x15ec
-&device.id pci 0x5102
-+device.name FC5102
-
- vendor.id pci 0x15ed
-+vendor.name Macrolink Inc
-
- vendor.id pci 0x15ee
-+vendor.name In Win Development Inc
-
- vendor.id pci 0x15ef
-+vendor.name Intelligent Paradigm Inc
-
- vendor.id pci 0x15f0
-+vendor.name B-Tree Systems Inc
-
- vendor.id pci 0x15f1
-+vendor.name Times N Systems Inc
-
- vendor.id pci 0x15f2
-+vendor.name Diagnostic Instruments Inc
-
- vendor.id pci 0x15f3
-+vendor.name Digitmedia Corp
-
- vendor.id pci 0x15f4
-+vendor.name Valuesoft
-
- vendor.id pci 0x15f5
-+vendor.name Power Micro Research
-
- vendor.id pci 0x15f6
-+vendor.name Extreme Packet Device Inc
-
- vendor.id pci 0x15f7
-+vendor.name Banctec
-
- vendor.id pci 0x15f8
-+vendor.name Koga Electronics Co
-
- vendor.id pci 0x15f9
-+vendor.name Zenith Electronics Corp
-
- vendor.id pci 0x15fa
-+vendor.name J.P. Axzam Corp
-
- vendor.id pci 0x15fb
-+vendor.name Zilog Inc
-
- vendor.id pci 0x15fc
-+vendor.name Techsan Electronics Co Ltd
-
- vendor.id pci 0x15fd
-+vendor.name N-CUBED.NET
-
- vendor.id pci 0x15fe
-+vendor.name Kinpo Electronics Inc
-
- vendor.id pci 0x15ff
-+vendor.name Fastpoint Technologies Inc
-
- vendor.id pci 0x1600
-+vendor.name Northrop Grumman - Canada Ltd
-
- vendor.id pci 0x1601
-+vendor.name Tenta Technology
-
- vendor.id pci 0x1602
-+vendor.name Prosys-tec Inc
-
- vendor.id pci 0x1603
-+vendor.name Nokia Wireless Communications
-
- vendor.id pci 0x1604
-+vendor.name Central System Research Co Ltd
-
- vendor.id pci 0x1605
-+vendor.name Pairgain Technologies
-
- vendor.id pci 0x1606
-+vendor.name Europop AG
-
- vendor.id pci 0x1607
-+vendor.name Lava Semiconductor Manufacturing Inc
-
- vendor.id pci 0x1608
-+vendor.name Automated Wagering International
-
- vendor.id pci 0x1609
-+vendor.name Scimetric Instruments Inc
-
- vendor.id pci 0x1612
-+vendor.name Telesynergy Research Inc.
-
- vendor.id pci 0x1619
-+vendor.name FarSite Communications Ltd
-
- vendor.id pci 0x1619
-&device.id pci 0x0400
-+device.name FarSync T2P (2 port X.21/V.35/V.24)
-
- vendor.id pci 0x1619
-&device.id pci 0x0440
-+device.name FarSync T4P (4 port X.21/V.35/V.24)
-
- vendor.id pci 0x161f
-+vendor.name Rioworks
-
- vendor.id pci 0x1626
-+vendor.name TDK Semiconductor Corp.
-
- vendor.id pci 0x1626
-&device.id pci 0x8410
-+device.name RTL81xx Fast Ethernet
-
- vendor.id pci 0x1629
-+vendor.name Kongsberg Spacetec AS
-
- vendor.id pci 0x1629
-&device.id pci 0x1003
-+device.name Format synchronizer v3.0
-
- vendor.id pci 0x1629
-&device.id pci 0x2002
-+device.name Fast Universal Data Output
-
- vendor.id pci 0x1637
-+vendor.name Linksys
-
- vendor.id pci 0x1637
-&device.id pci 0x3874
-+device.name Linksys 802.11b WMP11 PCI Wireless card
-
- vendor.id pci 0x1638
-+vendor.name Standard Microsystems Corp [SMC]
-
- vendor.id pci 0x1638
-&device.id pci 0x1100
-+device.name SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000
-
- vendor.id pci 0x163c
-+vendor.name Smart Link Ltd.
-
- vendor.id pci 0x163c
-&device.id pci 0x3052
-+device.name SmartLink SmartPCI562 56K Modem
-
- vendor.id pci 0x163c
-&device.id pci 0x5449
-+device.name SmartPCI561 Modem
-
- vendor.id pci 0x1657
-+vendor.name Brocade Communications Systems, Inc.
-
- vendor.id pci 0x165a
-+vendor.name Epix Inc
-
- vendor.id pci 0x165a
-&device.id pci 0xc100
-+device.name PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232]
-
- vendor.id pci 0x165a
-&device.id pci 0xd200
-+device.name PIXCI(R) D2X Digital Video Capture Board [custom QL5232]
-
- vendor.id pci 0x165a
-&device.id pci 0xd300
-+device.name PIXCI(R) D3X Digital Video Capture Board [custom QL5232]
-
- vendor.id pci 0x165d
-+vendor.name Hsing Tech. Enterprise Co., Ltd.
-
- vendor.id pci 0x1661
-+vendor.name Worldspace Corp.
-
- vendor.id pci 0x1668
-+vendor.name Actiontec Electronics Inc
-
- vendor.id pci 0x1668
-&device.id pci 0x0100
-+device.name Mini-PCI bridge
-
- vendor.id pci 0x166d
-+vendor.name Broadcom Corporation
-
- vendor.id pci 0x166d
-&device.id pci 0x0001
-+device.name SiByte BCM1125/1125H/1250 System-on-a-Chip PCI
-
- vendor.id pci 0x166d
-&device.id pci 0x0002
-+device.name SiByte BCM1125H/1250 System-on-a-Chip HyperTransport
-
- vendor.id pci 0x1677
-+vendor.name Bernecker + Rainer
-
- vendor.id pci 0x1677
-&device.id pci 0x104e
-+device.name 5LS172.6 B&R Dual CAN Interface Card
-
- vendor.id pci 0x1677
-&device.id pci 0x12d7
-+device.name 5LS172.61 B&R Dual CAN Interface Card
-
- vendor.id pci 0x167b
-+vendor.name ZyDAS Technology Corp.
-
- vendor.id pci 0x1681
-+vendor.name Hercules
-
- vendor.id pci 0x1681
-&device.id pci 0x0010
-+device.name Hercules 3d Prophet II Ultra 64MB [ 350 MHz NV15BR core, 128-bit DDR @ 460 MHz, 1.5v AGP4x ]
-
- vendor.id pci 0x1688
-+vendor.name CastleNet Technology Inc.
-
- vendor.id pci 0x1688
-&device.id pci 0x1170
-+device.name WLAN 802.11b card
-
- vendor.id pci 0x168c
-+vendor.name Atheros Communications, Inc.
-
- vendor.id pci 0x168c
-&device.id pci 0x0007
-+device.name AR5000 802.11a Wireless Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0011
-+device.name AR5210 802.11a NIC
-
- vendor.id pci 0x168c
-&device.id pci 0x0012
-+device.name AR5211 802.11ab NIC
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-+device.name AR5212 802.11abg NIC
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3202
-+subdevice.name D-link DWL-G650 B3 Wireless cardbus adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3203
-+subdevice.name DWL-G520 Wireless PCI Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3a13
-+subdevice.name DWL-G520 Wireless PCI Adapter rev. B
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x3a94
-+subdevice.name C54C Wireless 801.11g cardbus
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x1385
-&subdevice.id pci 0x4d00
-+subdevice.name Netgear WG311T Wireless PCI Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x14b7
-&subdevice.id pci 0x0a60
-+subdevice.name 8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x168c
-&subdevice.id pci 0x0013
-+subdevice.name WG511T Wireless CardBus Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x168c
-&subdevice.id pci 0x1025
-+subdevice.name DWL-G650B2 Wireless CardBus Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x0013
-&subvendor.id pci 0x168c
-&subdevice.id pci 0x2026
-+subdevice.name Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter
-
- vendor.id pci 0x168c
-&device.id pci 0x1014
-+device.name AR5212 802.11abg NIC
-
- vendor.id pci 0x16a5
-+vendor.name Tekram Technology Co.,Ltd.
-
- vendor.id pci 0x16ab
-+vendor.name Global Sun Technology Inc
-
- vendor.id pci 0x16ab
-&device.id pci 0x1100
-+device.name GL24110P
-
- vendor.id pci 0x16ab
-&device.id pci 0x1101
-+device.name PLX9052 PCMCIA-to-PCI Wireless LAN
-
- vendor.id pci 0x16ab
-&device.id pci 0x1102
-+device.name PCMCIA-to-PCI Wireless Network Bridge
-
- vendor.id pci 0x16ae
-+vendor.name Safenet Inc
-
- vendor.id pci 0x16ae
-&device.id pci 0x1141
-+device.name SafeXcel-1141
-
- vendor.id pci 0x16b4
-+vendor.name Aspex Semiconductor Ltd
-
- vendor.id pci 0x16be
-+vendor.name Creatix Polymedia GmbH
-
- vendor.id pci 0x16ca
-+vendor.name CENATEK Inc
-
- vendor.id pci 0x16ca
-&device.id pci 0x0001
-+device.name Rocket Drive DL
-
- vendor.id pci 0x16cd
-+vendor.name Densitron Technologies
-
- vendor.id pci 0x16ce
-+vendor.name Roland Corp.
-
- vendor.id pci 0x16df
-+vendor.name PIKA Technologies Inc.
-
- vendor.id pci 0x16e3
-+vendor.name European Space Agency
-
- vendor.id pci 0x16e3
-&device.id pci 0x1e0f
-+device.name LEON2FT Processor
-
- vendor.id pci 0x16ec
-+vendor.name U.S. Robotics
-
- vendor.id pci 0x16ec
-&device.id pci 0x00ff
-+device.name USR997900 10/100 Mbps PCI Network Card
-
- vendor.id pci 0x16ec
-&device.id pci 0x3685
-+device.name Wireless Access PCI Adapter Model 022415
-
- vendor.id pci 0x16ed
-+vendor.name Sycron N. V.
-
- vendor.id pci 0x16ed
-&device.id pci 0x1001
-+device.name UMIO communication card
-
- vendor.id pci 0x16f3
-+vendor.name Jetway Information Co., Ltd.
-
- vendor.id pci 0x16f4
-+vendor.name Vweb Corp
-
- vendor.id pci 0x16f4
-&device.id pci 0x8000
-+device.name VW2010
-
- vendor.id pci 0x16f6
-+vendor.name VideoTele.com, Inc.
-
- vendor.id pci 0x1702
-+vendor.name Internet Machines Corporation (IMC)
-
- vendor.id pci 0x1705
-+vendor.name Digital First, Inc.
-
- vendor.id pci 0x170b
-+vendor.name NetOctave
-
- vendor.id pci 0x170b
-&device.id pci 0x0100
-+device.name NSP2000-SSL crypto accelerator
-
- vendor.id pci 0x170c
-+vendor.name YottaYotta Inc.
-
- vendor.id pci 0x1725
-+vendor.name Vitesse Semiconductor
-
- vendor.id pci 0x1725
-&device.id pci 0x7174
-+device.name VSC7174 PCI/PCI-X Serial ATA Host Bus Controller
-
- vendor.id pci 0x172a
-+vendor.name Accelerated Encryption
-
- vendor.id pci 0x1734
-+vendor.name Fujitsu Siemens Computer GmbH
-
- vendor.id pci 0x1737
-+vendor.name Linksys
-
- vendor.id pci 0x1737
-&device.id pci 0x0013
-+device.name WMP54G Wireless Pci Card
-
- vendor.id pci 0x1737
-&device.id pci 0x0015
-+device.name WMP54GS Wireless Pci Card
-
- vendor.id pci 0x1737
-&device.id pci 0x1032
-+device.name Gigabit Network Adapter
-
- vendor.id pci 0x1737
-&device.id pci 0x1032
-&subvendor.id pci 0x1737
-&subdevice.id pci 0x0015
-+subdevice.name EG1032 v2 Instant Gigabit Network Adapter
-
- vendor.id pci 0x1737
-&device.id pci 0x1064
-+device.name Gigabit Network Adapter
-
- vendor.id pci 0x1737
-&device.id pci 0x1064
-&subvendor.id pci 0x1737
-&subdevice.id pci 0x0016
-+subdevice.name EG1064 v2 Instant Gigabit Network Adapter
-
- vendor.id pci 0x1737
-&device.id pci 0xab08
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x1737
-&device.id pci 0xab09
-+device.name 21x4x DEC-Tulip compatible 10/100 Ethernet
-
- vendor.id pci 0x173b
-+vendor.name Altima (nee Broadcom)
-
- vendor.id pci 0x173b
-&device.id pci 0x03e8
-+device.name AC1000 Gigabit Ethernet
-
- vendor.id pci 0x173b
-&device.id pci 0x03e9
-+device.name AC1001 Gigabit Ethernet
-
- vendor.id pci 0x173b
-&device.id pci 0x03ea
-+device.name AC9100 Gigabit Ethernet
-
- vendor.id pci 0x173b
-&device.id pci 0x03ea
-&subvendor.id pci 0x173b
-&subdevice.id pci 0x0001
-+subdevice.name AC1002
-
- vendor.id pci 0x173b
-&device.id pci 0x03eb
-+device.name AC1003 Gigabit Ethernet
-
- vendor.id pci 0x1743
-+vendor.name Peppercon AG
-
- vendor.id pci 0x1743
-&device.id pci 0x8139
-+device.name ROL/F-100 Fast Ethernet Adapter with ROL
-
- vendor.id pci 0x1749
-+vendor.name RLX Technologies
-
- vendor.id pci 0x174b
-+vendor.name PC Partner Limited
-
- vendor.id pci 0x174d
-+vendor.name WellX Telecom SA
-
- vendor.id pci 0x175c
-+vendor.name AudioScience Inc
-
- vendor.id pci 0x175e
-+vendor.name Sanera Systems, Inc.
-
- vendor.id pci 0x1787
-+vendor.name Hightech Information System Ltd.
-
- vendor.id pci 0x1796
-+vendor.name Research Centre Juelich
-
- vendor.id pci 0x1796
-&device.id pci 0x0001
-+device.name SIS1100 [Gigabit link]
-
- vendor.id pci 0x1796
-&device.id pci 0x0002
-+device.name HOTlink
-
- vendor.id pci 0x1796
-&device.id pci 0x0003
-+device.name Counter Timer
-
- vendor.id pci 0x1796
-&device.id pci 0x0004
-+device.name CAMAC Controller
-
- vendor.id pci 0x1796
-&device.id pci 0x0005
-+device.name PROFIBUS
-
- vendor.id pci 0x1796
-&device.id pci 0x0006
-+device.name AMCC HOTlink
-
- vendor.id pci 0x1797
-+vendor.name JumpTec h, GMBH
-
- vendor.id pci 0x1799
-+vendor.name Belkin
-
- vendor.id pci 0x1799
-&device.id pci 0x6001
-+device.name Wireless PCI Card - F5D6001
-
- vendor.id pci 0x1799
-&device.id pci 0x6020
-+device.name Wireless PCMCIA Card - F5D6020
-
- vendor.id pci 0x1799
-&device.id pci 0x6060
-+device.name Wireless PDA Card - F5D6060
-
- vendor.id pci 0x1799
-&device.id pci 0x7000
-+device.name Wireless PCI Card - F5D7000
-
- vendor.id pci 0x17a0
-+vendor.name Genesys Logic, Inc
-
- vendor.id pci 0x17a0
-&device.id pci 0x8033
-+device.name GL880S USB 1.1 controller
-
- vendor.id pci 0x17a0
-&device.id pci 0x8034
-+device.name GL880S USB 2.0 controller
-
- vendor.id pci 0x17af
-+vendor.name Hightech Information System Ltd.
-
- vendor.id pci 0x17b3
-+vendor.name Hawking Technologies
-
- vendor.id pci 0x17b3
-&device.id pci 0xab08
-+device.name PN672TX 10/100 Ethernet
-
- vendor.id pci 0x17b4
-+vendor.name Indra Networks, Inc.
-
- vendor.id pci 0x17b4
-&device.id pci 0x0011
-+device.name WebEnhance 100 GZIP Compression Card
-
- vendor.id pci 0x17c0
-+vendor.name Wistron Corp.
-
- vendor.id pci 0x17c2
-+vendor.name Newisys, Inc.
-
- vendor.id pci 0x17cc
-+vendor.name NetChip Technology, Inc
-
- vendor.id pci 0x17cc
-&device.id pci 0x2280
-+device.name USB 2.0
-
- vendor.id pci 0x17d3
-+vendor.name Areca Technology Corp.
-
- vendor.id pci 0x17d5
-+vendor.name S2io Inc.
-
- vendor.id pci 0x17de
-+vendor.name KWorld Computer Co. Ltd.
-
- vendor.id pci 0x17ee
-+vendor.name Connect Components Ltd
-
- vendor.id pci 0x17fe
-+vendor.name Linksys, A Division of Cisco Systems
-
- vendor.id pci 0x17fe
-&device.id pci 0x2220
-+device.name [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)
-
- vendor.id pci 0x1813
-+vendor.name Ambient Technologies Inc
-
- vendor.id pci 0x1813
-&device.id pci 0x4000
-+device.name HaM controllerless modem
-
- vendor.id pci 0x1813
-&device.id pci 0x4000
-&subvendor.id pci 0x16be
-&subdevice.id pci 0x0001
-+subdevice.name V9x HAM Data Fax Modem
-
- vendor.id pci 0x1813
-&device.id pci 0x4100
-+device.name HaM plus Data Fax Modem
-
- vendor.id pci 0x1813
-&device.id pci 0x4100
-&subvendor.id pci 0x16be
-&subdevice.id pci 0x0002
-+subdevice.name V9x HAM 1394
-
- vendor.id pci 0x1814
-+vendor.name RaLink
-
- vendor.id pci 0x1814
-&device.id pci 0x0101
-+device.name Wireless PCI Adpator RT2400 / RT2460
-
- vendor.id pci 0x1814
-&device.id pci 0x0201
-+device.name Ralink RT2500 802.11 Cardbus Reference Card
-
- vendor.id pci 0x1814
-&device.id pci 0x0201
-&subvendor.id pci 0x1371
-&subdevice.id pci 0x001e
-+subdevice.name CWC-854 Wireless-G CardBus Adapter
-
- vendor.id pci 0x1814
-&device.id pci 0x0201
-&subvendor.id pci 0x1371
-&subdevice.id pci 0x001f
-+subdevice.name CWM-854 Wireless-G Mini PCI Adapter
-
- vendor.id pci 0x1814
-&device.id pci 0x0201
-&subvendor.id pci 0x1371
-&subdevice.id pci 0x0020
-+subdevice.name CWP-854 Wireless-G PCI Adapter
-
- vendor.id pci 0x1820
-+vendor.name InfiniCon Systems Inc.
-
- vendor.id pci 0x1822
-+vendor.name Twinhan Technology Co. Ltd
-
- vendor.id pci 0x182d
-+vendor.name SiteCom Europe BV
-
- vendor.id pci 0x182d
-&device.id pci 0x3069
-+device.name ISDN PCI DC-105V2
-
- vendor.id pci 0x1830
-+vendor.name Credence Systems Corporation
-
- vendor.id pci 0x183b
-+vendor.name MikroM GmbH
-
- vendor.id pci 0x183b
-&device.id pci 0x08a7
-+device.name MVC100 DVI
-
- vendor.id pci 0x183b
-&device.id pci 0x08a8
-+device.name MVC101 SDI
-
- vendor.id pci 0x183b
-&device.id pci 0x08a9
-+device.name MVC102 DVI+Audio
-
- vendor.id pci 0x1849
-+vendor.name ASRock Incorporation
-
- vendor.id pci 0x1851
-+vendor.name Microtune, Inc.
-
- vendor.id pci 0x1852
-+vendor.name Anritsu Corp.
-
- vendor.id pci 0x185f
-+vendor.name Wistron NeWeb Corp.
-
- vendor.id pci 0x1867
-+vendor.name Topspin Communications
-
- vendor.id pci 0x1867
-&device.id pci 0x5a44
-+device.name MT23108 InfiniHost HCA
-
- vendor.id pci 0x1867
-&device.id pci 0x5a45
-+device.name MT23108 InfiniHost HCA flash recovery
-
- vendor.id pci 0x1867
-&device.id pci 0x5a46
-+device.name MT23108 InfiniHost HCA bridge
-
- vendor.id pci 0x1867
-&device.id pci 0x6278
-+device.name MT25208 InfiniHost III Ex HCA (Tavor compatibility mode)
-
- vendor.id pci 0x1867
-&device.id pci 0x6282
-+device.name MT25208 InfiniHost III Ex HCA
-
- vendor.id pci 0x187e
-+vendor.name ZyXEL Communication Corporation
-
- vendor.id pci 0x1888
-+vendor.name Varisys Ltd
-
- vendor.id pci 0x1888
-&device.id pci 0x0301
-+device.name VMFX1 FPGA PMC module
-
- vendor.id pci 0x1888
-&device.id pci 0x0601
-+device.name VSM2 dual PMC carrier
-
- vendor.id pci 0x1888
-&device.id pci 0x0710
-+device.name VS14x series PowerPC PCI board
-
- vendor.id pci 0x1888
-&device.id pci 0x0720
-+device.name VS24x series PowerPC PCI board
-
- vendor.id pci 0x1894
-+vendor.name KNC One
-
- vendor.id pci 0x1896
-+vendor.name B&B Electronics Manufacturing Company, Inc.
-
- vendor.id pci 0x18a1
-+vendor.name Astute Networks Inc.
-
- vendor.id pci 0x18ac
-+vendor.name DViCO Corporation
-
- vendor.id pci 0x18ac
-&device.id pci 0xd810
-+device.name FusionHDTV 3 Gold
-
- vendor.id pci 0x18b8
-+vendor.name Ammasso
-
- vendor.id pci 0x18bc
-+vendor.name Info-Tek Corp.
-
- vendor.id pci 0x18c8
-+vendor.name Cray Inc
-
- vendor.id pci 0x18c9
-+vendor.name ARVOO Engineering BV
-
- vendor.id pci 0x18ca
-+vendor.name XGI - Xabre Graphics Inc
-
- vendor.id pci 0x18ca
-&device.id pci 0x0040
-+device.name Volari V8
-
- vendor.id pci 0x18e6
-+vendor.name MPL AG
-
- vendor.id pci 0x18e6
-&device.id pci 0x0001
-+device.name OSCI [Octal Serial Communication Interface]
-
- vendor.id pci 0x18f7
-+vendor.name Commtech, Inc.
-
- vendor.id pci 0x18f7
-&device.id pci 0x0001
-+device.name Fastcom ESCC-PCI-335
-
- vendor.id pci 0x18f7
-&device.id pci 0x0002
-+device.name Fastcom 422/4-PCI-335
-
- vendor.id pci 0x18f7
-&device.id pci 0x0004
-+device.name Fastcom 422/2-PCI-335
-
- vendor.id pci 0x18f7
-&device.id pci 0x0005
-+device.name Fastcom IGESCC-PCI-ISO/1
-
- vendor.id pci 0x18f7
-&device.id pci 0x000a
-+device.name Fastcom 232/4-PCI-335
-
- vendor.id pci 0x18fb
-+vendor.name Resilience Corporation
-
- vendor.id pci 0x1924
-+vendor.name Level 5 Networks Inc.
-
- vendor.id pci 0x1966
-+vendor.name Orad Hi-Tec Systems
-
- vendor.id pci 0x1975
-+vendor.name Pudlis Co. Ltd.
-
- vendor.id pci 0x1993
-+vendor.name Innominate Security Technologies AG
-
- vendor.id pci 0x1a08
-+vendor.name Sierra semiconductor
-
- vendor.id pci 0x1a08
-&device.id pci 0x0000
-+device.name SC15064
-
- vendor.id pci 0x1b13
-+vendor.name Jaton Corp
-
- vendor.id pci 0x1c1c
-+vendor.name Symphony
-
- vendor.id pci 0x1c1c
-&device.id pci 0x0001
-+device.name 82C101
-
- vendor.id pci 0x1d44
-+vendor.name DPT
-
- vendor.id pci 0x1d44
-&device.id pci 0xa400
-+device.name PM2x24/PM3224
-
- vendor.id pci 0x1de1
-+vendor.name Tekram Technology Co.,Ltd.
-
- vendor.id pci 0x1de1
-&device.id pci 0x0391
-+device.name TRM-S1040
-
- vendor.id pci 0x1de1
-&device.id pci 0x2020
-+device.name DC-390
-
- vendor.id pci 0x1de1
-&device.id pci 0x690c
-+device.name 690c
-
- vendor.id pci 0x1de1
-&device.id pci 0xdc29
-+device.name DC290
-
- vendor.id pci 0x1fc0
-+vendor.name Tumsan Oy
-
- vendor.id pci 0x1fc0
-&device.id pci 0x0300
-+device.name E2200 Dual E1/Rawpipe Card
-
- vendor.id pci 0x2000
-+vendor.name Smart Link Ltd.
-
- vendor.id pci 0x2001
-+vendor.name Temporal Research Ltd
-
- vendor.id pci 0x2003
-+vendor.name Smart Link Ltd.
-
- vendor.id pci 0x2004
-+vendor.name Smart Link Ltd.
-
- vendor.id pci 0x21c3
-+vendor.name 21st Century Computer Corp.
-
- vendor.id pci 0x2348
-+vendor.name Racore
-
- vendor.id pci 0x2348
-&device.id pci 0x2010
-+device.name 8142 100VG/AnyLAN
-
- vendor.id pci 0x2646
-+vendor.name Kingston Technologies
-
- vendor.id pci 0x270b
-+vendor.name Xantel Corporation
-
- vendor.id pci 0x270f
-+vendor.name Chaintech Computer Co. Ltd
-
- vendor.id pci 0x2711
-+vendor.name AVID Technology Inc.
-
- vendor.id pci 0x2a15
-+vendor.name 3D Vision(???)
-
- vendor.id pci 0x3000
-+vendor.name Hansol Electronics Inc.
-
- vendor.id pci 0x3142
-+vendor.name Post Impression Systems.
-
- vendor.id pci 0x3388
-+vendor.name Hint Corp
-
- vendor.id pci 0x3388
-&device.id pci 0x0013
-+device.name HiNT HC4 PCI to ISDN bridge, Multimedia audio controller
-
- vendor.id pci 0x3388
-&device.id pci 0x0014
-+device.name HiNT HC4 PCI to ISDN bridge, Network controller
-
- vendor.id pci 0x3388
-&device.id pci 0x0020
-+device.name HB6 Universal PCI-PCI bridge (transparent mode)
-
- vendor.id pci 0x3388
-&device.id pci 0x0021
-+device.name HB6 Universal PCI-PCI bridge (non-transparent mode)
-
- vendor.id pci 0x3388
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x3388
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x3388
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10a0
-+subdevice.name CA3/CR3 mainboard
-
- vendor.id pci 0x3388
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x3010
-+subdevice.name PPCI mezzanine (32-bit PMC)
-
- vendor.id pci 0x3388
-&device.id pci 0x0021
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x3011
-+subdevice.name PPCI mezzanine (64-bit PMC)
-
- vendor.id pci 0x3388
-&device.id pci 0x0022
-+device.name HiNT HB4 PCI-PCI Bridge (PCI6150)
-
- vendor.id pci 0x3388
-&device.id pci 0x0026
-+device.name HB2 PCI-PCI Bridge
-
- vendor.id pci 0x3388
-&device.id pci 0x101a
-+device.name E.Band [AudioTrak Inca88]
-
- vendor.id pci 0x3388
-&device.id pci 0x101b
-+device.name E.Band [AudioTrak Inca88]
-
- vendor.id pci 0x3388
-&device.id pci 0x8011
-+device.name VXPro II Chipset
-
- vendor.id pci 0x3388
-&device.id pci 0x8011
-&subvendor.id pci 0x3388
-&subdevice.id pci 0x8011
-+subdevice.name VXPro II Chipset CPU to PCI Bridge
-
- vendor.id pci 0x3388
-&device.id pci 0x8012
-+device.name VXPro II Chipset
-
- vendor.id pci 0x3388
-&device.id pci 0x8012
-&subvendor.id pci 0x3388
-&subdevice.id pci 0x8012
-+subdevice.name VXPro II Chipset PCI to ISA Bridge
-
- vendor.id pci 0x3388
-&device.id pci 0x8013
-+device.name VXPro II IDE
-
- vendor.id pci 0x3388
-&device.id pci 0x8013
-&subvendor.id pci 0x3388
-&subdevice.id pci 0x8013
-+subdevice.name VXPro II Chipset EIDE Controller
-
- vendor.id pci 0x3411
-+vendor.name Quantum Designs (H.K.) Inc
-
- vendor.id pci 0x3513
-+vendor.name ARCOM Control Systems Ltd
-
- vendor.id pci 0x3842
-+vendor.name eVga.com. Corp.
-
- vendor.id pci 0x38ef
-+vendor.name 4Links
-
- vendor.id pci 0x3d3d
-+vendor.name 3DLabs
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0001
-+device.name GLINT 300SX
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0002
-+device.name GLINT 500TX
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0003
-+device.name GLINT Delta
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0004
-+device.name Permedia
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0005
-+device.name Permedia
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0006
-+device.name GLINT MX
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0007
-+device.name 3D Extreme
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0008
-+device.name GLINT Gamma G1
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-+device.name Permedia II 2D+3D
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x1040
-&subdevice.id pci 0x0011
-+subdevice.name AccelStar II
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x13e9
-&subdevice.id pci 0x1000
-+subdevice.name 6221L-4U
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0100
-+subdevice.name AccelStar II 3D Accelerator
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0111
-+subdevice.name Permedia 3:16
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0114
-+subdevice.name Santa Ana
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0116
-+subdevice.name Oxygen GVX1
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0119
-+subdevice.name Scirocco
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0120
-+subdevice.name Santa Ana PCL
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0125
-+subdevice.name Oxygen VX1
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0127
-+subdevice.name Permedia3 Create!
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000a
-+device.name GLINT R3
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000a
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0121
-+subdevice.name Oxygen VX1
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000c
-+device.name GLINT R3 [Oxygen VX1]
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000c
-&subvendor.id pci 0x3d3d
-&subdevice.id pci 0x0144
-+subdevice.name Oxygen VX1-4X AGP [Permedia 4]
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000d
-+device.name GLint R4 rev A
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0011
-+device.name GLint R4 rev B
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0012
-+device.name GLint R5 rev A
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0013
-+device.name GLint R5 rev B
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0020
-+device.name VP10 visual processor
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0022
-+device.name VP10 visual processor
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0024
-+device.name VP9 visual processor
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0100
-+device.name Permedia II 2D+3D
-
- vendor.id pci 0x3d3d
-&device.id pci 0x07a1
-+device.name Wildcat III 6210
-
- vendor.id pci 0x3d3d
-&device.id pci 0x07a2
-+device.name Sun XVR-500 Graphics Accelerator
-
- vendor.id pci 0x3d3d
-&device.id pci 0x07a3
-+device.name Wildcat IV 7210
-
- vendor.id pci 0x3d3d
-&device.id pci 0x1004
-+device.name Permedia
-
- vendor.id pci 0x3d3d
-&device.id pci 0x3d04
-+device.name Permedia
-
- vendor.id pci 0x3d3d
-&device.id pci 0xffff
-+device.name Glint VGA
-
- vendor.id pci 0x4005
-+vendor.name Avance Logic Inc.
-
- vendor.id pci 0x4005
-&device.id pci 0x0300
-+device.name ALS300 PCI Audio Device
-
- vendor.id pci 0x4005
-&device.id pci 0x0308
-+device.name ALS300+ PCI Audio Device
-
- vendor.id pci 0x4005
-&device.id pci 0x0309
-+device.name PCI Input Controller
-
- vendor.id pci 0x4005
-&device.id pci 0x1064
-+device.name ALG-2064
-
- vendor.id pci 0x4005
-&device.id pci 0x2064
-+device.name ALG-2064i
-
- vendor.id pci 0x4005
-&device.id pci 0x2128
-+device.name ALG-2364A GUI Accelerator
-
- vendor.id pci 0x4005
-&device.id pci 0x2301
-+device.name ALG-2301
-
- vendor.id pci 0x4005
-&device.id pci 0x2302
-+device.name ALG-2302
-
- vendor.id pci 0x4005
-&device.id pci 0x2303
-+device.name AVG-2302 GUI Accelerator
-
- vendor.id pci 0x4005
-&device.id pci 0x2364
-+device.name ALG-2364A
-
- vendor.id pci 0x4005
-&device.id pci 0x2464
-+device.name ALG-2464
-
- vendor.id pci 0x4005
-&device.id pci 0x2501
-+device.name ALG-2564A/25128A
-
- vendor.id pci 0x4005
-&device.id pci 0x4000
-+device.name ALS4000 Audio Chipset
-
- vendor.id pci 0x4005
-&device.id pci 0x4000
-&subvendor.id pci 0x4005
-&subdevice.id pci 0x4000
-+subdevice.name ALS4000 Audio Chipset
-
- vendor.id pci 0x4005
-&device.id pci 0x4710
-+device.name ALC200/200P
-
- vendor.id pci 0x4033
-+vendor.name Addtron Technology Co, Inc.
-
- vendor.id pci 0x4033
-&device.id pci 0x1360
-+device.name RTL8139 Ethernet
-
- vendor.id pci 0x4143
-+vendor.name Digital Equipment Corp
-
- vendor.id pci 0x4144
-+vendor.name Alpha Data
-
- vendor.id pci 0x416c
-+vendor.name Aladdin Knowledge Systems
-
- vendor.id pci 0x416c
-&device.id pci 0x0100
-+device.name AladdinCARD
-
- vendor.id pci 0x416c
-&device.id pci 0x0200
-+device.name CPC
-
- vendor.id pci 0x4444
-+vendor.name Internext Compression Inc
-
- vendor.id pci 0x4444
-&device.id pci 0x0016
-+device.name iTVC16 (CX23416) MPEG-2 Encoder
-
- vendor.id pci 0x4444
-&device.id pci 0x0016
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x4009
-+subdevice.name WinTV PVR 250
-
- vendor.id pci 0x4444
-&device.id pci 0x0803
-+device.name iTVC15 MPEG-2 Encoder
-
- vendor.id pci 0x4444
-&device.id pci 0x0803
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x4000
-+subdevice.name WinTV PVR-350
-
- vendor.id pci 0x4444
-&device.id pci 0x0803
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x4001
-+subdevice.name WinTV PVR-250
-
- vendor.id pci 0x4468
-+vendor.name Bridgeport machines
-
- vendor.id pci 0x4594
-+vendor.name Cogetec Informatique Inc
-
- vendor.id pci 0x45fb
-+vendor.name Baldor Electric Company
-
- vendor.id pci 0x4680
-+vendor.name Umax Computer Corp
-
- vendor.id pci 0x4843
-+vendor.name Hercules Computer Technology Inc
-
- vendor.id pci 0x4916
-+vendor.name RedCreek Communications Inc
-
- vendor.id pci 0x4916
-&device.id pci 0x1960
-+device.name RedCreek PCI adapter
-
- vendor.id pci 0x4943
-+vendor.name Growth Networks
-
- vendor.id pci 0x494f
-+vendor.name ACCES I/O Products, Inc.
-
- vendor.id pci 0x494f
-&device.id pci 0x10e8
-+device.name LPCI-COM-8SM
-
- vendor.id pci 0x4978
-+vendor.name Axil Computer Inc
-
- vendor.id pci 0x4a14
-+vendor.name NetVin
-
- vendor.id pci 0x4a14
-&device.id pci 0x5000
-+device.name NV5000SC
-
- vendor.id pci 0x4a14
-&device.id pci 0x5000
-&subvendor.id pci 0x4a14
-&subdevice.id pci 0x5000
-+subdevice.name RT8029-Based Ethernet Adapter
-
- vendor.id pci 0x4b10
-+vendor.name Buslogic Inc.
-
- vendor.id pci 0x4c48
-+vendor.name LUNG HWA Electronics
-
- vendor.id pci 0x4c53
-+vendor.name SBS Technologies
-
- vendor.id pci 0x4c53
-&device.id pci 0x0000
-+device.name PLUSTEST device
-
- vendor.id pci 0x4c53
-&device.id pci 0x0000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x3000
-+subdevice.name PLUSTEST card (PC104+)
-
- vendor.id pci 0x4c53
-&device.id pci 0x0000
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x3001
-+subdevice.name PLUSTEST card (PMC)
-
- vendor.id pci 0x4c53
-&device.id pci 0x0001
-+device.name PLUSTEST-MM device
-
- vendor.id pci 0x4c53
-&device.id pci 0x0001
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x3002
-+subdevice.name PLUSTEST-MM card (PMC)
-
- vendor.id pci 0x4ca1
-+vendor.name Seanix Technology Inc
-
- vendor.id pci 0x4d51
-+vendor.name MediaQ Inc.
-
- vendor.id pci 0x4d51
-&device.id pci 0x0200
-+device.name MQ-200
-
- vendor.id pci 0x4d54
-+vendor.name Microtechnica Co Ltd
-
- vendor.id pci 0x4ddc
-+vendor.name ILC Data Device Corp
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0100
-+device.name DD-42924I5-300 (ARINC 429 Data Bus)
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0801
-+device.name BU-65570I1 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0802
-+device.name BU-65570I2 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0811
-+device.name BU-65572I1 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0812
-+device.name BU-65572I2 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0881
-+device.name BU-65570T1 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0882
-+device.name BU-65570T2 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0891
-+device.name BU-65572T1 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0892
-+device.name BU-65572T2 MIL-STD-1553 Test and Simulation
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0901
-+device.name BU-65565C1 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0902
-+device.name BU-65565C2 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0903
-+device.name BU-65565C3 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0904
-+device.name BU-65565C4 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0b01
-+device.name BU-65569I1 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0b02
-+device.name BU-65569I2 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0b03
-+device.name BU-65569I3 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x4ddc
-&device.id pci 0x0b04
-+device.name BU-65569I4 MIL-STD-1553 Data Bus
-
- vendor.id pci 0x5046
-+vendor.name GemTek Technology Corporation
-
- vendor.id pci 0x5046
-&device.id pci 0x1001
-+device.name PCI Radio
-
- vendor.id pci 0x5053
-+vendor.name Voyetra Technologies
-
- vendor.id pci 0x5053
-&device.id pci 0x2010
-+device.name Daytona Audio Adapter
-
- vendor.id pci 0x5136
-+vendor.name S S Technologies
-
- vendor.id pci 0x5143
-+vendor.name Qualcomm Inc
-
- vendor.id pci 0x5145
-+vendor.name Ensoniq (Old)
-
- vendor.id pci 0x5145
-&device.id pci 0x3031
-+device.name Concert AudioPCI
-
- vendor.id pci 0x5168
-+vendor.name Animation Technologies Inc.
-
- vendor.id pci 0x5301
-+vendor.name Alliance Semiconductor Corp.
-
- vendor.id pci 0x5301
-&device.id pci 0x0001
-+device.name ProMotion aT3D
-
- vendor.id pci 0x5333
-+vendor.name S3 Inc.
-
- vendor.id pci 0x5333
-&device.id pci 0x0551
-+device.name Plato/PX (system)
-
- vendor.id pci 0x5333
-&device.id pci 0x5631
-+device.name 86c325 [ViRGE]
-
- vendor.id pci 0x5333
-&device.id pci 0x8800
-+device.name 86c866 [Vision 866]
-
- vendor.id pci 0x5333
-&device.id pci 0x8801
-+device.name 86c964 [Vision 964]
-
- vendor.id pci 0x5333
-&device.id pci 0x8810
-+device.name 86c764_0 [Trio 32 vers 0]
-
- vendor.id pci 0x5333
-&device.id pci 0x8811
-+device.name 86c764/765 [Trio32/64/64V+]
-
- vendor.id pci 0x5333
-&device.id pci 0x8812
-+device.name 86cM65 [Aurora64V+]
-
- vendor.id pci 0x5333
-&device.id pci 0x8813
-+device.name 86c764_3 [Trio 32/64 vers 3]
-
- vendor.id pci 0x5333
-&device.id pci 0x8814
-+device.name 86c767 [Trio 64UV+]
-
- vendor.id pci 0x5333
-&device.id pci 0x8815
-+device.name 86cM65 [Aurora 128]
-
- vendor.id pci 0x5333
-&device.id pci 0x883d
-+device.name 86c988 [ViRGE/VX]
-
- vendor.id pci 0x5333
-&device.id pci 0x8870
-+device.name FireGL
-
- vendor.id pci 0x5333
-&device.id pci 0x8880
-+device.name 86c868 [Vision 868 VRAM] vers 0
-
- vendor.id pci 0x5333
-&device.id pci 0x8881
-+device.name 86c868 [Vision 868 VRAM] vers 1
-
- vendor.id pci 0x5333
-&device.id pci 0x8882
-+device.name 86c868 [Vision 868 VRAM] vers 2
-
- vendor.id pci 0x5333
-&device.id pci 0x8883
-+device.name 86c868 [Vision 868 VRAM] vers 3
-
- vendor.id pci 0x5333
-&device.id pci 0x88b0
-+device.name 86c928 [Vision 928 VRAM] vers 0
-
- vendor.id pci 0x5333
-&device.id pci 0x88b1
-+device.name 86c928 [Vision 928 VRAM] vers 1
-
- vendor.id pci 0x5333
-&device.id pci 0x88b2
-+device.name 86c928 [Vision 928 VRAM] vers 2
-
- vendor.id pci 0x5333
-&device.id pci 0x88b3
-+device.name 86c928 [Vision 928 VRAM] vers 3
-
- vendor.id pci 0x5333
-&device.id pci 0x88c0
-+device.name 86c864 [Vision 864 DRAM] vers 0
-
- vendor.id pci 0x5333
-&device.id pci 0x88c1
-+device.name 86c864 [Vision 864 DRAM] vers 1
-
- vendor.id pci 0x5333
-&device.id pci 0x88c2
-+device.name 86c864 [Vision 864-P DRAM] vers 2
-
- vendor.id pci 0x5333
-&device.id pci 0x88c3
-+device.name 86c864 [Vision 864-P DRAM] vers 3
-
- vendor.id pci 0x5333
-&device.id pci 0x88d0
-+device.name 86c964 [Vision 964 VRAM] vers 0
-
- vendor.id pci 0x5333
-&device.id pci 0x88d1
-+device.name 86c964 [Vision 964 VRAM] vers 1
-
- vendor.id pci 0x5333
-&device.id pci 0x88d2
-+device.name 86c964 [Vision 964-P VRAM] vers 2
-
- vendor.id pci 0x5333
-&device.id pci 0x88d3
-+device.name 86c964 [Vision 964-P VRAM] vers 3
-
- vendor.id pci 0x5333
-&device.id pci 0x88f0
-+device.name 86c968 [Vision 968 VRAM] rev 0
-
- vendor.id pci 0x5333
-&device.id pci 0x88f1
-+device.name 86c968 [Vision 968 VRAM] rev 1
-
- vendor.id pci 0x5333
-&device.id pci 0x88f2
-+device.name 86c968 [Vision 968 VRAM] rev 2
-
- vendor.id pci 0x5333
-&device.id pci 0x88f3
-+device.name 86c968 [Vision 968 VRAM] rev 3
-
- vendor.id pci 0x5333
-&device.id pci 0x8900
-+device.name 86c755 [Trio 64V2/DX]
-
- vendor.id pci 0x5333
-&device.id pci 0x8900
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8900
-+subdevice.name 86C775 Trio64V2/DX
-
- vendor.id pci 0x5333
-&device.id pci 0x8901
-+device.name 86c775/86c785 [Trio 64V2/DX or /GX]
-
- vendor.id pci 0x5333
-&device.id pci 0x8901
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8901
-+subdevice.name 86C775 Trio64V2/DX, 86C785 Trio64V2/GX
-
- vendor.id pci 0x5333
-&device.id pci 0x8902
-+device.name Plato/PX
-
- vendor.id pci 0x5333
-&device.id pci 0x8903
-+device.name Trio 3D business multimedia
-
- vendor.id pci 0x5333
-&device.id pci 0x8904
-+device.name Trio 64 3D
-
- vendor.id pci 0x5333
-&device.id pci 0x8904
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00db
-+subdevice.name Integrated Trio3D
-
- vendor.id pci 0x5333
-&device.id pci 0x8904
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8904
-+subdevice.name 86C365 Trio3D AGP
-
- vendor.id pci 0x5333
-&device.id pci 0x8905
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x8906
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x8907
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x8908
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x8909
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x890a
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x890b
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x890c
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x890d
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x890e
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x890f
-+device.name Trio 64V+ family
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-+device.name ViRGE/DX or /GX
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb032
-+subdevice.name ViRGE/GX
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1617
-+subdevice.name Nitro 3D
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x1717
-+subdevice.name Nitro 3D
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8a01
-+subdevice.name ViRGE/DX
-
- vendor.id pci 0x5333
-&device.id pci 0x8a10
-+device.name ViRGE/GX2
-
- vendor.id pci 0x5333
-&device.id pci 0x8a10
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x8a10
-+subdevice.name Stealth 3D 4000
-
- vendor.id pci 0x5333
-&device.id pci 0x8a13
-+device.name 86c368 [Trio 3D/2X]
-
- vendor.id pci 0x5333
-&device.id pci 0x8a13
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8a13
-+subdevice.name Trio3D/2X
-
- vendor.id pci 0x5333
-&device.id pci 0x8a20
-+device.name 86c794 [Savage 3D]
-
- vendor.id pci 0x5333
-&device.id pci 0x8a20
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8a20
-+subdevice.name 86C391 Savage3D
-
- vendor.id pci 0x5333
-&device.id pci 0x8a21
-+device.name 86c390 [Savage 3D/MV]
-
- vendor.id pci 0x5333
-&device.id pci 0x8a21
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8a21
-+subdevice.name 86C390 Savage3D/MV
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-+device.name Savage 4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8068
-+subdevice.name Savage 4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8069
-+subdevice.name Savage 4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8110
-+subdevice.name Savage4 LT
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x0018
-+subdevice.name SR9 8Mb SDRAM
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x002a
-+subdevice.name SR9 Pro 16Mb SDRAM
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x003a
-+subdevice.name SR9 Pro 32Mb SDRAM
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x105d
-&subdevice.id pci 0x092f
-+subdevice.name SR9 Pro+ 16Mb SGRAM
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4207
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4800
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4807
-+subdevice.name SpeedStar A90
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4808
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4809
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x480e
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4904
-+subdevice.name Stealth III S520
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4905
-+subdevice.name SpeedStar A200
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4a09
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4a0b
-+subdevice.name Stealth III S540 Xtreme
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4a0f
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x4e01
-+subdevice.name Stealth III S540
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x101d
-+subdevice.name 3d Blaster Savage 4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x1102
-&subdevice.id pci 0x101e
-+subdevice.name 3d Blaster Savage 4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8100
-+subdevice.name 86C394-397 Savage4 SDRAM 100
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8110
-+subdevice.name 86C394-397 Savage4 SDRAM 110
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8125
-+subdevice.name 86C394-397 Savage4 SDRAM 125
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8143
-+subdevice.name 86C394-397 Savage4 SDRAM 143
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8a22
-+subdevice.name 86C394-397 Savage4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x8a2e
-+subdevice.name 86C394-397 Savage4 32bit
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x9125
-+subdevice.name 86C394-397 Savage4 SGRAM 125
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-&subvendor.id pci 0x5333
-&subdevice.id pci 0x9143
-+subdevice.name 86C394-397 Savage4 SGRAM 143
-
- vendor.id pci 0x5333
-&device.id pci 0x8a23
-+device.name Savage 4
-
- vendor.id pci 0x5333
-&device.id pci 0x8a25
-+device.name ProSavage PM133
-
- vendor.id pci 0x5333
-&device.id pci 0x8a26
-+device.name ProSavage KM133
-
- vendor.id pci 0x5333
-&device.id pci 0x8c00
-+device.name ViRGE/M3
-
- vendor.id pci 0x5333
-&device.id pci 0x8c01
-+device.name ViRGE/MX
-
- vendor.id pci 0x5333
-&device.id pci 0x8c01
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name ViRGE/MX
-
- vendor.id pci 0x5333
-&device.id pci 0x8c02
-+device.name ViRGE/MX+
-
- vendor.id pci 0x5333
-&device.id pci 0x8c03
-+device.name ViRGE/MX+MV
-
- vendor.id pci 0x5333
-&device.id pci 0x8c10
-+device.name 86C270-294 Savage/MX-MV
-
- vendor.id pci 0x5333
-&device.id pci 0x8c11
-+device.name 82C270-294 Savage/MX
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-+device.name 86C270-294 Savage/IX-MV
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x017f
-+subdevice.name ThinkPad T20
-
- vendor.id pci 0x5333
-&device.id pci 0x8c13
-+device.name 86C270-294 Savage/IX
-
- vendor.id pci 0x5333
-&device.id pci 0x8c13
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x5333
-&device.id pci 0x8c22
-+device.name SuperSavage MX/128
-
- vendor.id pci 0x5333
-&device.id pci 0x8c24
-+device.name SuperSavage MX/64
-
- vendor.id pci 0x5333
-&device.id pci 0x8c26
-+device.name SuperSavage MX/64C
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2a
-+device.name SuperSavage IX/128 SDR
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2b
-+device.name SuperSavage IX/128 DDR
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2c
-+device.name SuperSavage IX/64 SDR
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2d
-+device.name SuperSavage IX/64 DDR
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2e
-+device.name SuperSavage IX/C SDR
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01fc
-+subdevice.name ThinkPad T23 (2647-4MG)
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2f
-+device.name SuperSavage IX/C DDR
-
- vendor.id pci 0x5333
-&device.id pci 0x8d01
-+device.name 86C380 [ProSavageDDR K4M266]
-
- vendor.id pci 0x5333
-&device.id pci 0x8d02
-+device.name VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)
-
- vendor.id pci 0x5333
-&device.id pci 0x8d03
-+device.name VT8751 [ProSavageDDR P4M266]
-
- vendor.id pci 0x5333
-&device.id pci 0x8d04
-+device.name VT8375 [ProSavage8 KM266/KL266]
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-+device.name 86C410 Savage 2000
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5932
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5934
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5952
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5954
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5a35
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5a37
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5a55
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x5a57
-+subdevice.name Viper II Z200
-
- vendor.id pci 0x5333
-&device.id pci 0xca00
-+device.name SonicVibes
-
- vendor.id pci 0x544c
-+vendor.name Teralogic Inc
-
- vendor.id pci 0x544c
-&device.id pci 0x0350
-+device.name TL880-based HDTV/ATSC tuner
-
- vendor.id pci 0x5455
-+vendor.name Technische University Berlin
-
- vendor.id pci 0x5455
-&device.id pci 0x4458
-+device.name S5933
-
- vendor.id pci 0x5519
-+vendor.name Cnet Technologies, Inc.
-
- vendor.id pci 0x5544
-+vendor.name Dunord Technologies
-
- vendor.id pci 0x5544
-&device.id pci 0x0001
-+device.name I-30xx Scanner Interface
-
- vendor.id pci 0x5555
-+vendor.name Genroco, Inc
-
- vendor.id pci 0x5555
-&device.id pci 0x0003
-+device.name TURBOstor HFP-832 [HiPPI NIC]
-
- vendor.id pci 0x5654
-+vendor.name VoiceTronix Pty Ltd
-
- vendor.id pci 0x5654
-&device.id pci 0x3132
-+device.name OpenSwitch12
-
- vendor.id pci 0x5700
-+vendor.name Netpower
-
- vendor.id pci 0x5851
-+vendor.name Exacq Technologies
-
- vendor.id pci 0x6356
-+vendor.name UltraStor
-
- vendor.id pci 0x6374
-+vendor.name c't Magazin fuer Computertechnik
-
- vendor.id pci 0x6374
-&device.id pci 0x6773
-+device.name GPPCI
-
- vendor.id pci 0x6409
-+vendor.name Logitec Corp.
-
- vendor.id pci 0x6666
-+vendor.name Decision Computer International Co.
-
- vendor.id pci 0x6666
-&device.id pci 0x0001
-+device.name PCCOM4
-
- vendor.id pci 0x6666
-&device.id pci 0x0002
-+device.name PCCOM8
-
- vendor.id pci 0x7604
-+vendor.name O.N. Electronic Co Ltd.
-
- vendor.id pci 0x7bde
-+vendor.name MIDAC Corporation
-
- vendor.id pci 0x7fed
-+vendor.name PowerTV
-
- vendor.id pci 0x8008
-+vendor.name Quancom Electronic GmbH
-
- vendor.id pci 0x8008
-&device.id pci 0x0010
-+device.name WDOG1 [PCI-Watchdog 1]
-
- vendor.id pci 0x8008
-&device.id pci 0x0011
-+device.name PWDOG2 [PCI-Watchdog 2]
-
- vendor.id pci 0x807d
-+vendor.name Asustek Computer, Inc.
-
- vendor.id pci 0x8086
-+vendor.name Intel Corporation
-
- vendor.id pci 0x8086
-&device.id pci 0x0007
-+device.name 82379AB
-
- vendor.id pci 0x8086
-&device.id pci 0x0008
-+device.name Extended Express System Support Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x0008
-&subvendor.id pci 0x0008
-&subdevice.id pci 0x1000
-+subdevice.name WorldMark 4300 INCA ASIC
-
- vendor.id pci 0x8086
-&device.id pci 0x0039
-+device.name 21145 Fast Ethernet
-
- vendor.id pci 0x8086
-&device.id pci 0x0122
-+device.name 82437FX
-
- vendor.id pci 0x8086
-&device.id pci 0x0309
-+device.name 80303 I/O Processor PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x030d
-+device.name 80312 I/O Companion Chip PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x0326
-+device.name 6700/6702PXH I/OxAPIC Interrupt Controller A
-
- vendor.id pci 0x8086
-&device.id pci 0x0327
-+device.name 6700PXH I/OxAPIC Interrupt Controller B
-
- vendor.id pci 0x8086
-&device.id pci 0x0329
-+device.name 6700PXH PCI Express-to-PCI Bridge A
-
- vendor.id pci 0x8086
-&device.id pci 0x032a
-+device.name 6700PXH PCI Express-to-PCI Bridge B
-
- vendor.id pci 0x8086
-&device.id pci 0x032c
-+device.name 6702PXH PCI Express-to-PCI Bridge A
-
- vendor.id pci 0x8086
-&device.id pci 0x0330
-+device.name 80332 [Dobson] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0331
-+device.name 80332 [Dobson] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0332
-+device.name 80332 [Dobson] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0333
-+device.name 80332 [Dobson] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0334
-+device.name 80332 [Dobson] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0335
-+device.name 80331 [Lindsay] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0336
-+device.name 80331 [Lindsay] I/O processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0340
-+device.name 41210 [Lanai] Serial to Parallel PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x0341
-+device.name 41210 [Lanai] Serial to Parallel PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x0482
-+device.name 82375EB/SB PCI to EISA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x0483
-+device.name 82424TX/ZX [Saturn] CPU to PCI bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x0484
-+device.name 82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x0486
-+device.name 82425EX/ZX [Aries] PCIset with ISA bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x04a3
-+device.name 82434LX/NX [Mercury/Neptune] Processor to PCI bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x04d0
-+device.name 82437FX [Triton FX]
-
- vendor.id pci 0x8086
-&device.id pci 0x0500
-+device.name E8870 Processor bus control
-
- vendor.id pci 0x8086
-&device.id pci 0x0501
-+device.name E8870 Memory controller
-
- vendor.id pci 0x8086
-&device.id pci 0x0502
-+device.name E8870 Scalability Port 0
-
- vendor.id pci 0x8086
-&device.id pci 0x0503
-+device.name E8870 Scalability Port 1
-
- vendor.id pci 0x8086
-&device.id pci 0x0510
-+device.name E8870IO Hub Interface Port 0 registers (8-bit compatibility port)
-
- vendor.id pci 0x8086
-&device.id pci 0x0511
-+device.name E8870IO Hub Interface Port 1 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0512
-+device.name E8870IO Hub Interface Port 2 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0513
-+device.name E8870IO Hub Interface Port 3 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0514
-+device.name E8870IO Hub Interface Port 4 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0515
-+device.name E8870IO General SIOH registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0516
-+device.name E8870IO RAS registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0530
-+device.name E8870SP Scalability Port 0 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0531
-+device.name E8870SP Scalability Port 1 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0532
-+device.name E8870SP Scalability Port 2 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0533
-+device.name E8870SP Scalability Port 3 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0534
-+device.name E8870SP Scalability Port 4 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0535
-+device.name E8870SP Scalability Port 5 registers
-
- vendor.id pci 0x8086
-&device.id pci 0x0536
-+device.name E8870SP Interleave registers 0 and 1
-
- vendor.id pci 0x8086
-&device.id pci 0x0537
-+device.name E8870SP Interleave registers 2 and 3
-
- vendor.id pci 0x8086
-&device.id pci 0x0600
-+device.name RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x0600
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x01c1
-+subdevice.name ICP Vortex GDT8546RZ
-
- vendor.id pci 0x8086
-&device.id pci 0x0600
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x01f7
-+subdevice.name SCRU32
-
- vendor.id pci 0x8086
-&device.id pci 0x061f
-+device.name 80303 I/O Processor
-
- vendor.id pci 0x8086
-&device.id pci 0x0960
-+device.name 80960RP [i960 RP Microprocessor/Bridge]
-
- vendor.id pci 0x8086
-&device.id pci 0x0962
-+device.name 80960RM [i960RM Bridge]
-
- vendor.id pci 0x8086
-&device.id pci 0x0964
-+device.name 80960RP [i960 RP Microprocessor/Bridge]
-
- vendor.id pci 0x8086
-&device.id pci 0x1000
-+device.name 82542 Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0df
-+subdevice.name Compaq NC6132 Gigabit Module
-
- vendor.id pci 0x8086
-&device.id pci 0x1000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0e0
-+subdevice.name Compaq NC6133 Gigabit Module
-
- vendor.id pci 0x8086
-&device.id pci 0x1000
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb123
-+subdevice.name Compaq NC6134 Gigabit NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1000
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0119
-+subdevice.name Netfinity Gigabit Ethernet SX Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1000
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1000
-+subdevice.name PRO/1000 Gigabit Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1001
-+device.name 82543GC Gigabit Ethernet Controller (Fiber)
-
- vendor.id pci 0x8086
-&device.id pci 0x1001
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x004a
-+subdevice.name Compaq NC6136 Gigabit Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1001
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01ea
-+subdevice.name Netfinity Gigabit Ethernet SX Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1001
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1002
-+subdevice.name PRO/1000 F Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1001
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1003
-+subdevice.name PRO/1000 F Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1002
-+device.name Pro 100 LAN+Modem 56 Cardbus II
-
- vendor.id pci 0x8086
-&device.id pci 0x1002
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x200e
-+subdevice.name Pro 100 LAN+Modem 56 Cardbus II
-
- vendor.id pci 0x8086
-&device.id pci 0x1002
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2013
-+subdevice.name Pro 100 SR Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1002
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2017
-+subdevice.name Pro 100 S Combo Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1004
-+device.name 82543GC Gigabit Ethernet Controller (Copper)
-
- vendor.id pci 0x8086
-&device.id pci 0x1004
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0049
-+subdevice.name Compaq NC7132 Gigabit Upgrade Module
-
- vendor.id pci 0x8086
-&device.id pci 0x1004
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb1a4
-+subdevice.name Compaq NC7131 Gigabit Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1004
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x10f2
-+subdevice.name Gigabit Ethernet Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1004
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1004
-+subdevice.name PRO/1000 T Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1004
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2004
-+subdevice.name PRO/1000 T Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-+device.name 82544EI Gigabit Ethernet Controller (Copper)
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0269
-+subdevice.name iSeries 1000/100/10 Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x011c
-+subdevice.name PRO/1000 XT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1107
-+subdevice.name PRO/1000 XT Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2107
-+subdevice.name PRO/1000 XT Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2110
-+subdevice.name PRO/1000 XT Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1008
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3108
-+subdevice.name PRO/1000 XT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1009
-+device.name 82544EI Gigabit Ethernet Controller (Fiber)
-
- vendor.id pci 0x8086
-&device.id pci 0x1009
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0268
-+subdevice.name iSeries Gigabit Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1009
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1109
-+subdevice.name PRO/1000 XF Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1009
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2109
-+subdevice.name PRO/1000 XF Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100c
-+device.name 82544GC Gigabit Ethernet Controller (Copper)
-
- vendor.id pci 0x8086
-&device.id pci 0x100c
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1112
-+subdevice.name PRO/1000 T Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100c
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2112
-+subdevice.name PRO/1000 T Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100d
-+device.name 82544GC Gigabit Ethernet Controller (LOM)
-
- vendor.id pci 0x8086
-&device.id pci 0x100d
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0123
-+subdevice.name PRO/1000 XT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100d
-&subvendor.id pci 0x1079
-&subdevice.id pci 0x891f
-+subdevice.name 82544GC Based Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100d
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x100d
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x110d
-+subdevice.name 82544GC Based Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-+device.name 82540EM Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0265
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x026a
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x002e
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0151
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x8920
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x001e
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100e
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x002e
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100f
-+device.name 82545EM Gigabit Ethernet Controller (Copper)
-
- vendor.id pci 0x8086
-&device.id pci 0x100f
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0269
-+subdevice.name iSeries 1000/100/10 Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x100f
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x028e
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100f
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1000
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x100f
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1001
-+subdevice.name PRO/1000 MT Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-+device.name 82546EB Gigabit Ethernet Controller (Copper)
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x027c
-+subdevice.name PRO/1000 MT Dual Port Network Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x18fb
-&subdevice.id pci 0x7872
-+subdevice.name RESlink-X
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10a0
-+subdevice.name CA3/CR3 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1011
-+subdevice.name PRO/1000 MT Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x101a
-+subdevice.name PRO/1000 MT Dual Port Network Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1010
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3424
-+subdevice.name SE7501HG2 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1011
-+device.name 82545EM Gigabit Ethernet Controller (Fiber)
-
- vendor.id pci 0x8086
-&device.id pci 0x1011
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0268
-+subdevice.name iSeries Gigabit Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1011
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1002
-+subdevice.name PRO/1000 MF Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1011
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1003
-+subdevice.name PRO/1000 MF Server Adapter (LX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1012
-+device.name 82546EB Gigabit Ethernet Controller (Fiber)
-
- vendor.id pci 0x8086
-&device.id pci 0x1012
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1012
-+subdevice.name PRO/1000 MF Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1013
-+device.name 82541EI Gigabit Ethernet Controller (Copper)
-
- vendor.id pci 0x8086
-&device.id pci 0x1013
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0013
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1013
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1013
-+subdevice.name IBM ThinkCentre Network Card
-
- vendor.id pci 0x8086
-&device.id pci 0x1013
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1113
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1014
-+device.name 82541ER Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1015
-+device.name 82540EM Gigabit Ethernet Controller (LOM)
-
- vendor.id pci 0x8086
-&device.id pci 0x1016
-+device.name 82540EP Gigabit Ethernet Controller (LOM)
-
- vendor.id pci 0x8086
-&device.id pci 0x1016
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x052c
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1016
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1016
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1016
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1017
-+device.name 82540EP Gigabit Ethernet Controller (LOM)
-
- vendor.id pci 0x8086
-&device.id pci 0x1017
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1017
-+subdevice.name PR0/1000 MT Desktop Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1018
-+device.name 82541EI Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1018
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1018
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1019
-+device.name 82547EI Gigabit Ethernet Controller (LOM)
-
- vendor.id pci 0x8086
-&device.id pci 0x1019
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x1019
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x1019
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1019
-+subdevice.name PRO/1000 CT Desktop Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1019
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x301f
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1019
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x101d
-+device.name 82546EB Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x101d
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1000
-+subdevice.name PRO/1000 MT Quad Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x101e
-+device.name 82540EP Gigabit Ethernet Controller (Mobile)
-
- vendor.id pci 0x8086
-&device.id pci 0x101e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0549
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x101e
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x101e
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x101e
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1026
-+device.name 82545GM Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1026
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1000
-+subdevice.name PRO/1000 MT Server Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1026
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1001
-+subdevice.name PRO/1000 MT Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1026
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1002
-+subdevice.name PRO/1000 MT Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1026
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1026
-+subdevice.name PRO/1000 MT Server Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1027
-+device.name 82545GM Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1027
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1001
-+subdevice.name PRO/1000 MF Server Adapter(LX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1027
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1002
-+subdevice.name PRO/1000 MF Server Adapter(LX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1027
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1003
-+subdevice.name PRO/1000 MF Server Adapter(LX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1027
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1027
-+subdevice.name PRO/1000 MF Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1028
-+device.name 82545GM Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1028
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1028
-+subdevice.name PRO/1000 MB Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1029
-+device.name 82559 Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1030
-+device.name 82559 InBusiness 10/100
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-+device.name 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0209
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x107b
-&subdevice.id pci 0x5350
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc000
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc001
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc003
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x1031
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc006
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x1032
-+device.name 82801CAM (ICH3) PRO/100 VE Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1033
-+device.name 82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1034
-+device.name 82801CAM (ICH3) PRO/100 VM Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1035
-+device.name 82801CAM (ICH3)/82562EH (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1036
-+device.name 82801CAM (ICH3) 82562EH Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1037
-+device.name 82801CAM (ICH3) Chipset Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1038
-+device.name 82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1039
-+device.name 82801DB PRO/100 VE (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1039
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x103a
-+device.name 82801DB PRO/100 VE (CNR) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x103b
-+device.name 82801DB PRO/100 VM (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x103c
-+device.name 82801DB PRO/100 VM (CNR) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x103d
-+device.name 82801DB PRO/100 VE (MOB) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x103e
-+device.name 82801DB PRO/100 VM (MOB) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1040
-+device.name 536EP Data Fax Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x1040
-&subvendor.id pci 0x16be
-&subdevice.id pci 0x1040
-+subdevice.name V.9X DSP Data Fax Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x1043
-+device.name PRO/Wireless LAN 2100 3B Mini PCI Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1043
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2527
-+subdevice.name MIM2000/Centrino
-
- vendor.id pci 0x8086
-&device.id pci 0x1048
-+device.name PRO/10GbE LR Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1048
-&subvendor.id pci 0x8086
-&subdevice.id pci 0xa01f
-+subdevice.name PRO/10GbE LR Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1048
-&subvendor.id pci 0x8086
-&subdevice.id pci 0xa11f
-+subdevice.name PRO/10GbE LR Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1050
-+device.name 82562EZ 10/100 Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1050
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x728c
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x1050
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x758c
-+subdevice.name MS-6758 (875P Neo)
-
- vendor.id pci 0x8086
-&device.id pci 0x1050
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1051
-+device.name 82801EB/ER (ICH5/ICH5R) integrated LAN Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1059
-+device.name 82551QM Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1064
-+device.name 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1065
-+device.name 82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1066
-+device.name 82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1067
-+device.name 82562 EM/EX/GX - PRO/100 VM Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1068
-+device.name 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile
-
- vendor.id pci 0x8086
-&device.id pci 0x1069
-+device.name 82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile
-
- vendor.id pci 0x8086
-&device.id pci 0x106a
-+device.name 82562G \t- PRO/100 VE (LOM) Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x106b
-+device.name 82562G \t- PRO/100 VE Ethernet Controller Mobile
-
- vendor.id pci 0x8086
-&device.id pci 0x1075
-+device.name 82547GI Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1075
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0165
-+subdevice.name PowerEdge 750
-
- vendor.id pci 0x8086
-&device.id pci 0x1075
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0075
-+subdevice.name PRO/1000 CT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1075
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1075
-+subdevice.name PRO/1000 CT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1076
-+device.name 82541GI/PI Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1076
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0165
-+subdevice.name PowerEdge 750
-
- vendor.id pci 0x8086
-&device.id pci 0x1076
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0076
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1076
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1076
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1076
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1176
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1076
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1276
-+subdevice.name PRO/1000 MT Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1077
-+device.name 82541GI Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1077
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1077
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0077
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1077
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1077
-+subdevice.name PRO/1000 MT Mobile Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1078
-+device.name 82541EI Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1078
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1078
-+subdevice.name PRO/1000 MT Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-+device.name 82546GB Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12a6
-+subdevice.name HP Dual Port 1000Base-T [A9900A]
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12cf
-+subdevice.name HP Core Dual Port 1000Base-T [AB352A]
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0079
-+subdevice.name PRO/1000 MT Dual Port Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1079
-+subdevice.name PRO/1000 MT Dual Port Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1179
-+subdevice.name PRO/1000 MT Dual Port Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1079
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x117a
-+subdevice.name PRO/1000 MT Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x107a
-+device.name 82546GB Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x107a
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12a8
-+subdevice.name HP Dual Port 1000base-SX [A9899A]
-
- vendor.id pci 0x8086
-&device.id pci 0x107a
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x107a
-+subdevice.name PRO/1000 MF Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x107a
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x127a
-+subdevice.name PRO/1000 MF Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x107b
-+device.name 82546GB Gigabit Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x107b
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x007b
-+subdevice.name PRO/1000 MB Dual Port Server Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x107b
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x107b
-+subdevice.name PRO/1000 MB Dual Port Server Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1107
-+device.name PRO/1000 MF Server Adapter (LX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1130
-+device.name 82815 815 Chipset Host Bridge and Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x1130
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1130
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8027
-+subdevice.name TUSL2-C Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1130
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x1130
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4532
-+subdevice.name D815EEA2 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1130
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4557
-+subdevice.name D815EGEW Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1131
-+device.name 82815 815 Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-+device.name 82815 CGC [Chipset Graphics Controller]
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4532
-+subdevice.name D815EEA2 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4557
-+subdevice.name D815EGEW Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1161
-+device.name 82806AA PCI64 Hub Advanced Programmable Interrupt Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1161
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1161
-+subdevice.name 82806AA PCI64 Hub APIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1162
-+device.name Xscale 80200 Big Endian Companion Chip
-
- vendor.id pci 0x8086
-&device.id pci 0x1200
-+device.name Intel IXP1200 Network Processor
-
- vendor.id pci 0x8086
-&device.id pci 0x1200
-&subvendor.id pci 0x172a
-&subdevice.id pci 0x0000
-+subdevice.name AEP SSL Accelerator
-
- vendor.id pci 0x8086
-&device.id pci 0x1209
-+device.name 8255xER/82551IT Fast Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1209
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1209
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1209
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1070
-+subdevice.name PC6 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1221
-+device.name 82092AA PCI to PCMCIA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x1222
-+device.name 82092AA IDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1223
-+device.name SAA7116
-
- vendor.id pci 0x8086
-&device.id pci 0x1225
-+device.name 82452KX/GX [Orion]
-
- vendor.id pci 0x8086
-&device.id pci 0x1226
-+device.name 82596 PRO/10 PCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1227
-+device.name 82865 EtherExpress PRO/100A
-
- vendor.id pci 0x8086
-&device.id pci 0x1228
-+device.name 82556 EtherExpress PRO/100 Smart
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-+device.name 82557/8/9 [Ethernet Pro 100]
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3001
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3002
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3003
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3004
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3005
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3006
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x3007
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb01e
-+subdevice.name Compaq NC3120 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb01f
-+subdevice.name Compaq NC3122 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb02f
-+subdevice.name Compaq NC1120 Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb04a
-+subdevice.name Compaq 10/100 TX PCI Intel WOL UTP Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0c6
-+subdevice.name Compaq NC3161 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0c7
-+subdevice.name Compaq NC3160 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0d7
-+subdevice.name Compaq NC3121 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0dd
-+subdevice.name Compaq NC3131 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0de
-+subdevice.name Compaq NC3132 Fast Ethernet Module
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb0e1
-+subdevice.name Compaq NC3133 Fast Ethernet Module
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb134
-+subdevice.name Compaq NC3163 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb13c
-+subdevice.name Compaq NC3162 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb144
-+subdevice.name Compaq NC3123 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb163
-+subdevice.name Compaq NC3134 Fast Ethernet NIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb164
-+subdevice.name Compaq NC3135 Fast Ethernet Upgrade Module
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb1a4
-+subdevice.name NC7131 Gigabit Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x005c
-+subdevice.name 82558B Ethernet Pro 10/100
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01bc
-+subdevice.name 82559 Fast Ethernet LAN On Motherboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01f1
-+subdevice.name 10/100 Ethernet Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01f2
-+subdevice.name 10/100 Ethernet Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0207
-+subdevice.name Ethernet Pro/100 S
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0232
-+subdevice.name 10/100 Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x023a
-+subdevice.name ThinkPad R30
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x105c
-+subdevice.name Netfinity 10/100
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x2205
-+subdevice.name ThinkPad A22p
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x305c
-+subdevice.name 10/100 EtherJet Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x405c
-+subdevice.name 10/100 EtherJet Adapter with Alert on LAN
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x505c
-+subdevice.name 10/100 EtherJet Secure Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x605c
-+subdevice.name 10/100 EtherJet Secure Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x705c
-+subdevice.name 10/100 Netfinity 10/100 Ethernet Security Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x805c
-+subdevice.name 10/100 Netfinity 10/100 Ethernet Security Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x009b
-+subdevice.name PowerEdge 2500/2550
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00ce
-+subdevice.name PowerEdge 1400
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8000
-+subdevice.name PC-9821X-B06
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8016
-+subdevice.name PK-UG-X006
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x801f
-+subdevice.name PK-UG-X006
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8026
-+subdevice.name PK-UG-X006
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8063
-+subdevice.name 82559-based Fast Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x8064
-+subdevice.name 82559-based Fast Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10c0
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10c3
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10ca
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10cb
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10e3
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10e4
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x1200
-+subdevice.name NetServer 10/100TX
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x10c3
-&subdevice.id pci 0x1100
-+subdevice.name SmartEther100 SC1100
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1115
-+subdevice.name 8255x-based Ethernet Adapter (10/100)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1143
-+subdevice.name 8255x-based Ethernet Adapter (10/100)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name 8255x-based Ethernet Adapter (10/100)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0002
-+subdevice.name PCI FastEther LAN on Docker
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0003
-+subdevice.name 8255x-based Fast Ethernet
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2560
-+subdevice.name AT-2560 100
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1259
-&subdevice.id pci 0x2561
-+subdevice.name AT-2560 100 FX Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1266
-&subdevice.id pci 0x0001
-+subdevice.name NE10/100 Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x13e9
-&subdevice.id pci 0x1000
-+subdevice.name 6221L-4U
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2501
-+subdevice.name SEM-2000 MiniPCI LAN Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2502
-+subdevice.name SEM-2100IL MiniPCI LAN Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x1668
-&subdevice.id pci 0x1100
-+subdevice.name EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1080
-+subdevice.name CT8 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0001
-+subdevice.name EtherExpress PRO/100B (TX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0002
-+subdevice.name EtherExpress PRO/100B (T4)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0003
-+subdevice.name EtherExpress PRO/10+
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0004
-+subdevice.name EtherExpress PRO/100 WfM
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0005
-+subdevice.name 82557 10/100
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0006
-+subdevice.name 82557 10/100 with Wake on LAN
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0007
-+subdevice.name 82558 10/100 Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0008
-+subdevice.name 82558 10/100 with Wake on LAN
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0009
-+subdevice.name EtherExpress PRO/100+
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x000a
-+subdevice.name EtherExpress PRO/100+ Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x000b
-+subdevice.name EtherExpress PRO/100+
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x000c
-+subdevice.name EtherExpress PRO/100+ Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x000d
-+subdevice.name EtherExpress PRO/100+ Alert On LAN II* Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x000e
-+subdevice.name EtherExpress PRO/100+ Management Adapter with Alert On LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x000f
-+subdevice.name EtherExpress PRO/100 Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0010
-+subdevice.name EtherExpress PRO/100 S Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0011
-+subdevice.name EtherExpress PRO/100 S Management Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0012
-+subdevice.name EtherExpress PRO/100 S Advanced Management Adapter (D)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0013
-+subdevice.name EtherExpress PRO/100 S Advanced Management Adapter (E)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0030
-+subdevice.name EtherExpress PRO/100 Management Adapter with Alert On LAN* GC
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0031
-+subdevice.name EtherExpress PRO/100 Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0040
-+subdevice.name EtherExpress PRO/100 S Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0041
-+subdevice.name EtherExpress PRO/100 S Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0042
-+subdevice.name EtherExpress PRO/100 Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0050
-+subdevice.name EtherExpress PRO/100 S Desktop Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1009
-+subdevice.name EtherExpress PRO/100+ Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x100c
-+subdevice.name EtherExpress PRO/100+ Server Adapter (PILA8470B)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1012
-+subdevice.name EtherExpress PRO/100 S Server Adapter (D)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1013
-+subdevice.name EtherExpress PRO/100 S Server Adapter (E)
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1015
-+subdevice.name EtherExpress PRO/100 S Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1017
-+subdevice.name EtherExpress PRO/100+ Dual Port Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1030
-+subdevice.name EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1040
-+subdevice.name EtherExpress PRO/100 S Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1041
-+subdevice.name EtherExpress PRO/100 S Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1042
-+subdevice.name EtherExpress PRO/100 Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1050
-+subdevice.name EtherExpress PRO/100 S Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1051
-+subdevice.name EtherExpress PRO/100 Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1052
-+subdevice.name EtherExpress PRO/100 Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x10f0
-+subdevice.name EtherExpress PRO/100+ Dual Port Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2009
-+subdevice.name EtherExpress PRO/100 S Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x200d
-+subdevice.name EtherExpress PRO/100 Cardbus
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x200e
-+subdevice.name EtherExpress PRO/100 LAN+V90 Cardbus Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x200f
-+subdevice.name EtherExpress PRO/100 SR Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2010
-+subdevice.name EtherExpress PRO/100 S Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2013
-+subdevice.name EtherExpress PRO/100 SR Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2016
-+subdevice.name EtherExpress PRO/100 S Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2017
-+subdevice.name EtherExpress PRO/100 S Combo Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2018
-+subdevice.name EtherExpress PRO/100 SR Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2019
-+subdevice.name EtherExpress PRO/100 SR Combo Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2101
-+subdevice.name EtherExpress PRO/100 P Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2102
-+subdevice.name EtherExpress PRO/100 SP Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2103
-+subdevice.name EtherExpress PRO/100 SP Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2104
-+subdevice.name EtherExpress PRO/100 SP Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2105
-+subdevice.name EtherExpress PRO/100 SP Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2106
-+subdevice.name EtherExpress PRO/100 P Mobile Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2107
-+subdevice.name EtherExpress PRO/100 Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2108
-+subdevice.name EtherExpress PRO/100 Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2200
-+subdevice.name EtherExpress PRO/100 P Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2201
-+subdevice.name EtherExpress PRO/100 P Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2202
-+subdevice.name EtherExpress PRO/100 SP Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2203
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2204
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2205
-+subdevice.name EtherExpress PRO/100 SP Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2206
-+subdevice.name EtherExpress PRO/100 SP Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2207
-+subdevice.name EtherExpress PRO/100 SP Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2208
-+subdevice.name EtherExpress PRO/100 P Mobile Combo Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2402
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2407
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2408
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2409
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x240f
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2410
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2411
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2412
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x2413
-+subdevice.name EtherExpress PRO/100+ MiniPCI
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3000
-+subdevice.name 82559 Fast Ethernet LAN on Motherboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3001
-+subdevice.name 82559 Fast Ethernet LOM with Basic Alert on LAN*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3002
-+subdevice.name 82559 Fast Ethernet LOM with Alert on LAN II*
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3006
-+subdevice.name EtherExpress PRO/100 S Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3007
-+subdevice.name EtherExpress PRO/100 S Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3008
-+subdevice.name EtherExpress PRO/100 Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3010
-+subdevice.name EtherExpress PRO/100 S Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3011
-+subdevice.name EtherExpress PRO/100 S Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3012
-+subdevice.name EtherExpress PRO/100 Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x1229
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3411
-+subdevice.name SDS2 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x122d
-+device.name 430FX - 82437FX TSC [Triton I]
-
- vendor.id pci 0x8086
-&device.id pci 0x122e
-+device.name 82371FB PIIX ISA [Triton I]
-
- vendor.id pci 0x8086
-&device.id pci 0x1230
-+device.name 82371FB PIIX IDE [Triton I]
-
- vendor.id pci 0x8086
-&device.id pci 0x1231
-+device.name DSVD Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x1234
-+device.name 430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)
-
- vendor.id pci 0x8086
-&device.id pci 0x1235
-+device.name 430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)
-
- vendor.id pci 0x8086
-&device.id pci 0x1237
-+device.name 440FX - 82441FX PMC [Natoma]
-
- vendor.id pci 0x8086
-&device.id pci 0x1239
-+device.name 82371FB PIIX IDE Interface
-
- vendor.id pci 0x8086
-&device.id pci 0x123b
-+device.name 82380PB PCI to PCI Docking Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x123c
-+device.name 82380AB (MISA) Mobile PCI-to-ISA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x123d
-+device.name 683053 Programmable Interrupt Device
-
- vendor.id pci 0x8086
-&device.id pci 0x123e
-+device.name 82466GX (IHPC) Integrated Hot-Plug Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x123f
-+device.name 82466GX Integrated Hot-Plug Controller (IHPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x1240
-+device.name 82752 (752) AGP Graphics Accelerator
-
- vendor.id pci 0x8086
-&device.id pci 0x124b
-+device.name 82380FB (MPCI2) Mobile Docking Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1250
-+device.name 430HX - 82439HX TXC [Triton II]
-
- vendor.id pci 0x8086
-&device.id pci 0x1360
-+device.name 82806AA PCI64 Hub PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x1361
-+device.name 82806AA PCI64 Hub Controller (HRes)
-
- vendor.id pci 0x8086
-&device.id pci 0x1361
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1361
-+subdevice.name 82806AA PCI64 Hub Controller (HRes)
-
- vendor.id pci 0x8086
-&device.id pci 0x1361
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x8000
-+subdevice.name 82806AA PCI64 Hub Controller (HRes)
-
- vendor.id pci 0x8086
-&device.id pci 0x1460
-+device.name 82870P2 P64H2 Hub PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x1461
-+device.name 82870P2 P64H2 I/OxAPIC
-
- vendor.id pci 0x8086
-&device.id pci 0x1461
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x1461
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x1462
-+device.name 82870P2 P64H2 Hot Plug Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-+device.name 80960RP [i960RP Microprocessor]
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0431
-+subdevice.name MegaRAID 431 RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0438
-+subdevice.name MegaRAID 438 Ultra2 LVD RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0466
-+subdevice.name MegaRAID 466 Express Plus RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0467
-+subdevice.name MegaRAID 467 Enterprise 1500 RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0490
-+subdevice.name MegaRAID 490 Express 300 RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x0762
-+subdevice.name MegaRAID 762 Express RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x09a0
-+subdevice.name PowerEdge Expandable RAID Controller 2/SC
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0467
-+subdevice.name PowerEdge Expandable RAID Controller 2/DC
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x1111
-+subdevice.name PowerEdge Expandable RAID Controller 2/SC
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x03a2
-+subdevice.name MegaRAID
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10c6
-+subdevice.name MegaRAID 438, HP NetRAID-3Si
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10c7
-+subdevice.name MegaRAID T5, Integrated HP NetRAID
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10cc
-+subdevice.name MegaRAID, Integrated HP NetRAID
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10cd
-+subdevice.name HP NetRAID-1Si
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x0000
-+subdevice.name SuperTrak
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x2168
-+subdevice.name SuperTrak Pro
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x5168
-+subdevice.name SuperTrak66/100
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x1111
-&subdevice.id pci 0x1111
-+subdevice.name MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x1111
-&subdevice.id pci 0x1112
-+subdevice.name PowerEdge Expandable RAID Controller 2/SC
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0x113c
-&subdevice.id pci 0x03a2
-+subdevice.name MegaRAID
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1010
-+subdevice.name CG1-RADIO
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1020
-+subdevice.name CU2-QUARTET
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1040
-+subdevice.name CU1-CHORUS
-
- vendor.id pci 0x8086
-&device.id pci 0x1960
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x3100
-+subdevice.name CX1-BAND
-
- vendor.id pci 0x8086
-&device.id pci 0x1962
-+device.name 80960RM [i960RM Microprocessor]
-
- vendor.id pci 0x8086
-&device.id pci 0x1962
-&subvendor.id pci 0x105a
-&subdevice.id pci 0x0000
-+subdevice.name SuperTrak SX6000 I2O CPU
-
- vendor.id pci 0x8086
-&device.id pci 0x1a21
-+device.name 82840 840 (Carmel) Chipset Host Bridge (Hub A)
-
- vendor.id pci 0x8086
-&device.id pci 0x1a23
-+device.name 82840 840 (Carmel) Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x1a24
-+device.name 82840 840 (Carmel) Chipset PCI Bridge (Hub B)
-
- vendor.id pci 0x8086
-&device.id pci 0x1a30
-+device.name 82845 845 (Brookdale) Chipset Host Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x1a30
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x010e
-+subdevice.name Optiplex GX240
-
- vendor.id pci 0x8086
-&device.id pci 0x1a31
-+device.name 82845 845 (Brookdale) Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2410
-+device.name 82801AA ISA Bridge (LPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x2411
-+device.name 82801AA IDE
-
- vendor.id pci 0x8086
-&device.id pci 0x2412
-+device.name 82801AA USB
-
- vendor.id pci 0x8086
-&device.id pci 0x2413
-+device.name 82801AA SMBus
-
- vendor.id pci 0x8086
-&device.id pci 0x2415
-+device.name 82801AA AC'97 Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2415
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0095
-+subdevice.name Precision Workstation 220 Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2415
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x0040
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2415
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x0048
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2415
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x5340
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2416
-+device.name 82801AA AC'97 Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x2418
-+device.name 82801AA PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2420
-+device.name 82801AB ISA Bridge (LPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x2421
-+device.name 82801AB IDE
-
- vendor.id pci 0x8086
-&device.id pci 0x2422
-+device.name 82801AB USB
-
- vendor.id pci 0x8086
-&device.id pci 0x2423
-+device.name 82801AB SMBus
-
- vendor.id pci 0x8086
-&device.id pci 0x2425
-+device.name 82801AB AC'97 Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2425
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x0040
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2425
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x0048
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2426
-+device.name 82801AB AC'97 Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x2428
-+device.name 82801AB PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2440
-+device.name 82801BA ISA Bridge (LPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-+device.name 82801BA/BAM USB (Hub #1)
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01c6
-+subdevice.name Netvista A40/A40p
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x010e
-+subdevice.name Optiplex GX240
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8027
-+subdevice.name TUSL2-C Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x0507
-+subdevice.name TH7II-RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4532
-+subdevice.name D815EEA2 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2442
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4557
-+subdevice.name D815EGEW Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-+device.name 82801BA/BAM SMBus
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01c6
-+subdevice.name Netvista A40/A40p
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x010e
-+subdevice.name Optiplex GX240
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8027
-+subdevice.name TUSL2-C Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x0507
-+subdevice.name TH7II-RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4532
-+subdevice.name D815EEA2 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2443
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4557
-+subdevice.name D815EGEW Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-+device.name 82801BA/BAM USB (Hub #2)
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x010e
-+subdevice.name Optiplex GX240
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8027
-+subdevice.name TUSL2-C Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x0507
-+subdevice.name TH7II-RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x2444
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4532
-+subdevice.name D815EEA2 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-+device.name 82801BA/BAM AC'97 Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01c6
-+subdevice.name Netvista A40/A40p
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x3370
-+subdevice.name STAC9721 AC
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x0507
-+subdevice.name TH7II-RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x2445
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4557
-+subdevice.name D815EGEW Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2446
-+device.name 82801BA/BAM AC'97 Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x2446
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612 TX
-
- vendor.id pci 0x8086
-&device.id pci 0x2446
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x2448
-+device.name 82801 Mobile PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-+device.name 82801BA/BAM/CA/CAM Ethernet Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0012
-+subdevice.name EtherExpress PRO/100 VM
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0091
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01ce
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01dc
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01eb
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01ec
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0202
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0205
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0217
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0234
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x023d
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0244
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0245
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0265
-+subdevice.name PRO/100 VE Desktop Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name PRO/100 VE Desktop Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x026a
-+subdevice.name PRO/100 VE Desktop Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x109f
-&subdevice.id pci 0x315d
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x109f
-&subdevice.id pci 0x3181
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1179
-&subdevice.id pci 0xff01
-+subdevice.name PRO/100 VE Network Connection
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x1186
-&subdevice.id pci 0x7801
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2602
-+subdevice.name HomePNA 1M CNR
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3010
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3011
-+subdevice.name EtherExpress PRO/100 VM
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3012
-+subdevice.name 82562EH based Phoneline
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3013
-+subdevice.name EtherExpress PRO/100 VE
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3014
-+subdevice.name EtherExpress PRO/100 VM
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3015
-+subdevice.name 82562EH based Phoneline
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3016
-+subdevice.name EtherExpress PRO/100 P Mobile Combo
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3017
-+subdevice.name EtherExpress PRO/100 P Mobile
-
- vendor.id pci 0x8086
-&device.id pci 0x2449
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3018
-+subdevice.name EtherExpress PRO/100
-
- vendor.id pci 0x8086
-&device.id pci 0x244a
-+device.name 82801BAM IDE U100
-
- vendor.id pci 0x8086
-&device.id pci 0x244a
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x1016
-+subdevice.name Travelmate 612TX
-
- vendor.id pci 0x8086
-&device.id pci 0x244a
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80df
-+subdevice.name Vaio PCG-FX403
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-+device.name 82801BA IDE U100
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x01c6
-+subdevice.name Netvista A40/A40p
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x010e
-+subdevice.name Optiplex GX240
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x8027
-+subdevice.name TUSL2-C Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x0507
-+subdevice.name TH7II-RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4532
-+subdevice.name D815EEA2 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x244b
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4557
-+subdevice.name D815EGEW Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x244c
-+device.name 82801BAM ISA Bridge (LPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x244e
-+device.name 82801 PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x244e
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x2450
-+device.name 82801E ISA Bridge (LPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x2452
-+device.name 82801E USB
-
- vendor.id pci 0x8086
-&device.id pci 0x2453
-+device.name 82801E SMBus
-
- vendor.id pci 0x8086
-&device.id pci 0x2459
-+device.name 82801E Ethernet Controller 0
-
- vendor.id pci 0x8086
-&device.id pci 0x245b
-+device.name 82801E IDE U100
-
- vendor.id pci 0x8086
-&device.id pci 0x245d
-+device.name 82801E Ethernet Controller 1
-
- vendor.id pci 0x8086
-&device.id pci 0x245e
-+device.name 82801E PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2480
-+device.name 82801CA LPC Interface Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-+device.name 82801CA/CAM USB (Hub #1)
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0220
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1958
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3424
-+subdevice.name SE7501HG2 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2482
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4541
-+subdevice.name Latitude C640
-
- vendor.id pci 0x8086
-&device.id pci 0x2483
-+device.name 82801CA/CAM SMBus Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2483
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0220
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2483
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x2483
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x2483
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1958
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x2484
-+device.name 82801CA/CAM USB (Hub #2)
-
- vendor.id pci 0x8086
-&device.id pci 0x2484
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0220
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2484
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x2484
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x2484
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1958
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-+device.name 82801CA/CAM AC'97 Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-&subvendor.id pci 0x1013
-&subdevice.id pci 0x5959
-+subdevice.name Crystal WMD Audio Codec
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0222
-+subdevice.name ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653)
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0508
-+subdevice.name ThinkPad T30
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x051c
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x2485
-&subvendor.id pci 0x144d
-&subdevice.id pci 0xc006
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-+device.name 82801CA/CAM AC'97 Modem Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0223
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0503
-+subdevice.name ThinkPad R31 2656BBG
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x051a
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x101f
-&subdevice.id pci 0x1025
-+subdevice.name Acer 620 Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Toshiba Satellite 1110 Z15 internal Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x134d
-&subdevice.id pci 0x4c21
-+subdevice.name Dell modem (Inspiron 2100, Latitude C640)
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x144d
-&subdevice.id pci 0x2115
-+subdevice.name vpr Matrix 170B4 internal modem
-
- vendor.id pci 0x8086
-&device.id pci 0x2486
-&subvendor.id pci 0x14f1
-&subdevice.id pci 0x5421
-+subdevice.name MD56ORD V.92 MDC Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x2487
-+device.name 82801CA/CAM USB (Hub #3)
-
- vendor.id pci 0x8086
-&device.id pci 0x2487
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0220
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x2487
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x2487
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x2487
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1958
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x248a
-+device.name 82801CAM IDE U100
-
- vendor.id pci 0x8086
-&device.id pci 0x248a
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0220
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x248a
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x248a
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x1958
-+subdevice.name vpr Matrix 170B4
-
- vendor.id pci 0x8086
-&device.id pci 0x248a
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4541
-+subdevice.name Latitude C640
-
- vendor.id pci 0x8086
-&device.id pci 0x248b
-+device.name 82801CA Ultra ATA Storage Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x248b
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x248c
-+device.name 82801CAM ISA Bridge (LPC)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c0
-+device.name 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x24c0
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24c0
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c1
-+device.name 82801DBL (ICH4-L) IDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-+device.name 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x2990
-+subdevice.name Averatec 5110H laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c2
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-+device.name 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24c2
-+subdevice.name GA-8PE667 Ultra
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c3
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-+device.name 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x2990
-+subdevice.name Averatec 5110H
-
- vendor.id pci 0x8086
-&device.id pci 0x24c4
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-+device.name 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00b8
-+subdevice.name Analog Devices Inc. codec [SoundMAX]
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xa002
-+subdevice.name GA-8PE667 Ultra
-
- vendor.id pci 0x8086
-&device.id pci 0x24c5
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c6
-+device.name 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24c6
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24c6
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c6
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-+device.name 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x2990
-+subdevice.name Averatec 5110H
-
- vendor.id pci 0x8086
-&device.id pci 0x24c7
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24ca
-+device.name 82801DBM (ICH4-M) IDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24ca
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24ca
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x24ca
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24ca
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24cb
-+device.name 82801DB (ICH4) IDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24cb
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24cb
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x24cb
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24c2
-+subdevice.name GA-8PE667 Ultra
-
- vendor.id pci 0x8086
-&device.id pci 0x24cb
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24cb
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24cc
-+device.name 82801DBM (ICH4-M) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-+device.name 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1071
-&subdevice.id pci 0x8160
-+subdevice.name MIM2000
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x3981
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x1509
-&subdevice.id pci 0x1968
-+subdevice.name Averatec 5110H
-
- vendor.id pci 0x8086
-&device.id pci 0x24cd
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d0
-+device.name 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x24d1
-+device.name 82801EB (ICH5) SATA Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24d1
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name d530 CMT (DG746A)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d1
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d1
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d1
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d1
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d1
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-+device.name 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name d530 CMT (DG746A)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d2
-+subdevice.name GA-8KNXP motherboard (875P)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d2
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d3
-+device.name 82801EB/ER (ICH5/ICH5R) SMBus Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24d3
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d3
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d2
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d3
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d3
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d3
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-+device.name 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name d530 CMT (DG746A)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d2
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d4
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d5
-+device.name 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24d5
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name Analog Devices codec [SoundMAX Integrated Digital Audio]
-
- vendor.id pci 0x8086
-&device.id pci 0x24d5
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80f3
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d5
-&subvendor.id pci 0x1458
-&subdevice.id pci 0xa002
-+subdevice.name GA-8KNXP motherboard (875P)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d5
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d5
-&subvendor.id pci 0x8086
-&subdevice.id pci 0xa000
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d6
-+device.name 82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-+device.name 82801EB/ER (ICH5/ICH5R) USB UHCI #3
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name d530 CMT (DG746A)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d2
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24d7
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-+device.name 82801EB/ER (ICH5/ICH5R) IDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name d530 CMT (DG746A)
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d2
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7580
-+subdevice.name MSI 875P
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24db
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24dc
-+device.name 82801EB (ICH5) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-+device.name 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x12bc
-+subdevice.name d530 CMT (DG746A)
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x5006
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24dd
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24de
-+device.name 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4
-
- vendor.id pci 0x8086
-&device.id pci 0x24de
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80a6
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24de
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x24d2
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x24de
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7280
-+subdevice.name 865PE Neo2 (MS-6728)
-
- vendor.id pci 0x8086
-&device.id pci 0x24de
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3427
-+subdevice.name S875WP1-E mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24de
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x524c
-+subdevice.name D865PERL mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x24df
-+device.name 82801ER (ICH5R) SATA Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2500
-+device.name 82820 820 (Camino) Chipset Host Bridge (MCH)
-
- vendor.id pci 0x8086
-&device.id pci 0x2500
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0095
-+subdevice.name Precision Workstation 220 Chipset
-
- vendor.id pci 0x8086
-&device.id pci 0x2500
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x801c
-+subdevice.name P3C-2000 system chipset
-
- vendor.id pci 0x8086
-&device.id pci 0x2501
-+device.name 82820 820 (Camino) Chipset Host Bridge (MCH)
-
- vendor.id pci 0x8086
-&device.id pci 0x2501
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x801c
-+subdevice.name P3C-2000 system chipset
-
- vendor.id pci 0x8086
-&device.id pci 0x250b
-+device.name 82820 820 (Camino) Chipset Host Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x250f
-+device.name 82820 820 (Camino) Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2520
-+device.name 82805AA MTH Memory Translator Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2521
-+device.name 82804AA MRH-S Memory Repeater Hub for SDRAM
-
- vendor.id pci 0x8086
-&device.id pci 0x2530
-+device.name 82850 850 (Tehama) Chipset Host Bridge (MCH)
-
- vendor.id pci 0x8086
-&device.id pci 0x2530
-&subvendor.id pci 0x147b
-&subdevice.id pci 0x0507
-+subdevice.name TH7II-RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x2531
-+device.name 82860 860 (Wombat) Chipset Host Bridge (MCH)
-
- vendor.id pci 0x8086
-&device.id pci 0x2532
-+device.name 82850 850 (Tehama) Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2533
-+device.name 82860 860 (Wombat) Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2534
-+device.name 82860 860 (Wombat) Chipset PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2540
-+device.name E7500 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2540
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x2541
-+device.name E7500/E7501 Host RASUM Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2541
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x3480
-+subdevice.name P4DP6
-
- vendor.id pci 0x8086
-&device.id pci 0x2541
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2541
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3424
-+subdevice.name SE7501HG2 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2543
-+device.name E7500/E7501 Hub Interface B PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2544
-+device.name E7500/E7501 Hub Interface B RASUM Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2544
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2545
-+device.name E7500/E7501 Hub Interface C PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2546
-+device.name E7500/E7501 Hub Interface C RASUM Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2547
-+device.name E7500/E7501 Hub Interface D PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2548
-+device.name E7500/E7501 Hub Interface D RASUM Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x254c
-+device.name E7501 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x254c
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1090
-+subdevice.name Cx9 / Vx9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x254c
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3424
-+subdevice.name SE7501HG2 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2550
-+device.name E7505 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2551
-+device.name E7505/E7205 Series RAS Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2552
-+device.name E7505/E7205 PCI-to-AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2553
-+device.name E7505 Hub Interface B PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2554
-+device.name E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x255d
-+device.name E7205 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2560
-+device.name 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface
-
- vendor.id pci 0x8086
-&device.id pci 0x2560
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0126
-+subdevice.name Optiplex GX260
-
- vendor.id pci 0x8086
-&device.id pci 0x2560
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x2560
-+subdevice.name GA-8PE667 Ultra
-
- vendor.id pci 0x8086
-&device.id pci 0x2560
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x5800
-+subdevice.name 845PE Max (MS-6580)
-
- vendor.id pci 0x8086
-&device.id pci 0x2561
-+device.name 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2562
-+device.name 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device
-
- vendor.id pci 0x8086
-&device.id pci 0x2562
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0267
-+subdevice.name NetVista A30p
-
- vendor.id pci 0x8086
-&device.id pci 0x2570
-+device.name 82865G/PE/P DRAM Controller/Host-Hub Interface
-
- vendor.id pci 0x8086
-&device.id pci 0x2570
-&subvendor.id pci 0x1043
-&subdevice.id pci 0x80f2
-+subdevice.name P4P800 Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x2570
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x2570
-+subdevice.name GA-8IPE1000 Pro2 motherboard (865PE)
-
- vendor.id pci 0x8086
-&device.id pci 0x2571
-+device.name 82865G/PE/P PCI to AGP Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2572
-+device.name 82865G Integrated Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2573
-+device.name 82865G/PE/P PCI to CSA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2576
-+device.name 82865G/PE/P Processor to I/O Memory Interface
-
- vendor.id pci 0x8086
-&device.id pci 0x2578
-+device.name 82875P/E7210 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2578
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x2578
-+subdevice.name GA-8KNXP motherboard (875P)
-
- vendor.id pci 0x8086
-&device.id pci 0x2578
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x7580
-+subdevice.name MS-6758 (875P Neo)
-
- vendor.id pci 0x8086
-&device.id pci 0x2578
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x4580
-+subdevice.name Super Micro Computer Inc. P4SCE
-
- vendor.id pci 0x8086
-&device.id pci 0x2579
-+device.name 82875P Processor to AGP Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x257b
-+device.name 82875P/E7210 Processor to PCI to CSA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x257e
-+device.name 82875P/E7210 Processor to I/O Memory Interface
-
- vendor.id pci 0x8086
-&device.id pci 0x2580
-+device.name 915G/P/GV Processor to I/O Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2581
-+device.name 915G/P/GV PCI Express Root Port
-
- vendor.id pci 0x8086
-&device.id pci 0x2582
-+device.name 82915G/GV/910GL Express Chipset Family Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2582
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x1079
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x2584
-+device.name 925X/XE Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2585
-+device.name 925X/XE PCI Express Root Port
-
- vendor.id pci 0x8086
-&device.id pci 0x2588
-+device.name E7220/E7221 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2589
-+device.name E7220/E7221 PCI Express Root Port
-
- vendor.id pci 0x8086
-&device.id pci 0x258a
-+device.name E7221 Integrated Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2590
-+device.name Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2591
-+device.name Mobile 915GM/PM Express PCI Express Root Port
-
- vendor.id pci 0x8086
-&device.id pci 0x2592
-+device.name Mobile 915GM/GMS/910GML Express Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a1
-+device.name 6300ESB LPC Interface Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a2
-+device.name 6300ESB PATA Storage Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a2
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25a3
-+device.name 6300ESB SATA Storage Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a3
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25a4
-+device.name 6300ESB SMBus Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a4
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25a6
-+device.name 6300ESB AC'97 Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a6
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25a7
-+device.name 6300ESB AC'97 Modem Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a9
-+device.name 6300ESB USB Universal Host Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25a9
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25aa
-+device.name 6300ESB USB Universal Host Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25aa
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25ab
-+device.name 6300ESB Watchdog Timer
-
- vendor.id pci 0x8086
-&device.id pci 0x25ab
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25ac
-+device.name 6300ESB I/O Advanced Programmable Interrupt Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25ac
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x25ad
-+device.name 6300ESB USB2 Enhanced Host Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x25ae
-+device.name 6300ESB 64-bit PCI-X Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x25b0
-+device.name 6300ESB SATA RAID Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2600
-+device.name Server Hub Interface
-
- vendor.id pci 0x8086
-&device.id pci 0x2601
-+device.name Server Hub PCI Express x4 Port D
-
- vendor.id pci 0x8086
-&device.id pci 0x2602
-+device.name Server Hub PCI Express x4 Port C0
-
- vendor.id pci 0x8086
-&device.id pci 0x2603
-+device.name Server Hub PCI Express x4 Port C1
-
- vendor.id pci 0x8086
-&device.id pci 0x2604
-+device.name Server Hub PCI Express x4 Port B0
-
- vendor.id pci 0x8086
-&device.id pci 0x2605
-+device.name Server Hub PCI Express x4 Port B1
-
- vendor.id pci 0x8086
-&device.id pci 0x2606
-+device.name Server Hub PCI Express x4 Port A0
-
- vendor.id pci 0x8086
-&device.id pci 0x2607
-+device.name Server Hub PCI Express x4 Port A1
-
- vendor.id pci 0x8086
-&device.id pci 0x2608
-+device.name Server Hub PCI Express x8 Port C
-
- vendor.id pci 0x8086
-&device.id pci 0x2609
-+device.name Server Hub PCI Express x8 Port B
-
- vendor.id pci 0x8086
-&device.id pci 0x260a
-+device.name Server Hub PCI Express x8 Port A
-
- vendor.id pci 0x8086
-&device.id pci 0x260c
-+device.name Server Hub IMI Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2610
-+device.name Server Hub System Bus, Boot, and Interrupt Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2611
-+device.name Server Hub Address Mapping Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2612
-+device.name Server Hub RAS Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2613
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2614
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2615
-+device.name Server Hub Miscellaneous Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2617
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2618
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2619
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x261a
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x261b
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x261c
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x261d
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x261e
-+device.name Server Hub Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2620
-+device.name External Memory Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2621
-+device.name External Memory Bridge Control Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2622
-+device.name External Memory Bridge Memory Interleaving Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2623
-+device.name External Memory Bridge DDR Initialization and Calibration
-
- vendor.id pci 0x8086
-&device.id pci 0x2624
-+device.name External Memory Bridge Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2625
-+device.name External Memory Bridge Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2626
-+device.name External Memory Bridge Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2627
-+device.name External Memory Bridge Reserved Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x2640
-+device.name 82801FB/FR (ICH6/ICH6R) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2641
-+device.name 82801FBM (ICH6M) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2642
-+device.name 82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x2651
-+device.name 82801FB/FW (ICH6/ICH6W) SATA Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2651
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x2652
-+device.name 82801FR/FRW (ICH6R/ICH6RW) SATA Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2653
-+device.name 82801FBM (ICH6M) SATA Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2658
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1
-
- vendor.id pci 0x8086
-&device.id pci 0x2658
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x2659
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2
-
- vendor.id pci 0x8086
-&device.id pci 0x2659
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x265a
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3
-
- vendor.id pci 0x8086
-&device.id pci 0x265a
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x265b
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4
-
- vendor.id pci 0x8086
-&device.id pci 0x265b
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x265c
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x265c
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x2660
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1
-
- vendor.id pci 0x8086
-&device.id pci 0x2662
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2
-
- vendor.id pci 0x8086
-&device.id pci 0x2664
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3
-
- vendor.id pci 0x8086
-&device.id pci 0x2666
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4
-
- vendor.id pci 0x8086
-&device.id pci 0x2668
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x266a
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x266a
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x266c
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x266d
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x266e
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x266e
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0179
-+subdevice.name Optiplex GX280
-
- vendor.id pci 0x8086
-&device.id pci 0x266f
-+device.name 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2770
-+device.name Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2771
-+device.name PCI Express Graphics Port
-
- vendor.id pci 0x8086
-&device.id pci 0x2772
-+device.name Integrated Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2774
-+device.name Workstation Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2775
-+device.name PCI Express Graphics Port
-
- vendor.id pci 0x8086
-&device.id pci 0x2776
-+device.name Integrated Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2778
-+device.name Server Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x2779
-+device.name PCI Express Root Port
-
- vendor.id pci 0x8086
-&device.id pci 0x2782
-+device.name 82915G Express Chipset Family Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x2792
-+device.name Mobile 915GM/GMS/910GML Express Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x27b1
-+device.name Mobile I/O Controller Hub LPC
-
- vendor.id pci 0x8086
-&device.id pci 0x27b8
-+device.name I/O Controller Hub LPC
-
- vendor.id pci 0x8086
-&device.id pci 0x27c0
-+device.name I/O Controller Hub SATA cc=IDE
-
- vendor.id pci 0x8086
-&device.id pci 0x27c1
-+device.name I/O Controller Hub SATA cc=AHCI
-
- vendor.id pci 0x8086
-&device.id pci 0x27c2
-+device.name I/O Controller Hub SATA cc=RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x27c3
-+device.name I/O Controller Hub SATA cc=RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x27c4
-+device.name Mobile I/O Controller Hub SATA cc=IDE
-
- vendor.id pci 0x8086
-&device.id pci 0x27c5
-+device.name Mobile I/O Controller Hub SATA cc=AHCI
-
- vendor.id pci 0x8086
-&device.id pci 0x27c8
-+device.name I/O Controller Hub UHCI USB #1
-
- vendor.id pci 0x8086
-&device.id pci 0x27c9
-+device.name I/O Controller Hub UHCI USB #2
-
- vendor.id pci 0x8086
-&device.id pci 0x27ca
-+device.name I/O Controller Hub UHCI USB #3
-
- vendor.id pci 0x8086
-&device.id pci 0x27cb
-+device.name I/O Controller Hub UHCI USB #4
-
- vendor.id pci 0x8086
-&device.id pci 0x27cc
-+device.name I/O Controller Hub EHCI USB
-
- vendor.id pci 0x8086
-&device.id pci 0x27d0
-+device.name I/O Controller Hub PCI Express Port 1
-
- vendor.id pci 0x8086
-&device.id pci 0x27d2
-+device.name I/O Controller Hub PCI Express Port 2
-
- vendor.id pci 0x8086
-&device.id pci 0x27d4
-+device.name I/O Controller Hub PCI Express Port 3
-
- vendor.id pci 0x8086
-&device.id pci 0x27d6
-+device.name I/O Controller Hub PCI Express Port 4
-
- vendor.id pci 0x8086
-&device.id pci 0x27d8
-+device.name I/O Controller Hub High Definition Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x27da
-+device.name I/O Controller Hub SMBus
-
- vendor.id pci 0x8086
-&device.id pci 0x27dc
-+device.name I/O Controller Hub LAN
-
- vendor.id pci 0x8086
-&device.id pci 0x27dd
-+device.name I/O Controller Hub AC'97 Modem
-
- vendor.id pci 0x8086
-&device.id pci 0x27de
-+device.name I/O Controller Hub AC'97 Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x27df
-+device.name I/O Controller Hub PATA
-
- vendor.id pci 0x8086
-&device.id pci 0x27e0
-+device.name I/O Controller Hub PCI Express Port 5
-
- vendor.id pci 0x8086
-&device.id pci 0x27e2
-+device.name I/O Controller Hub PCI Express Port 6
-
- vendor.id pci 0x8086
-&device.id pci 0x3092
-+device.name Integrated RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x3200
-+device.name GD31244 PCI-X SATA HBA
-
- vendor.id pci 0x8086
-&device.id pci 0x3340
-+device.name 82855PM Processor to I/O Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3340
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x005a
-+subdevice.name TravelMate 290
-
- vendor.id pci 0x8086
-&device.id pci 0x3340
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x0890
-+subdevice.name NC6000 laptop
-
- vendor.id pci 0x8086
-&device.id pci 0x3341
-+device.name 82855PM Processor to AGP Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3575
-+device.name 82830 830 Chipset Host Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x3575
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x021d
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x3575
-&subvendor.id pci 0x104d
-&subdevice.id pci 0x80e7
-+subdevice.name VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
-
- vendor.id pci 0x8086
-&device.id pci 0x3576
-+device.name 82830 830 Chipset AGP Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x3577
-+device.name 82830 CGC [Chipset Graphics Controller]
-
- vendor.id pci 0x8086
-&device.id pci 0x3577
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0513
-+subdevice.name ThinkPad A/T/X Series
-
- vendor.id pci 0x8086
-&device.id pci 0x3578
-+device.name 82830 830 Chipset Host Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x3580
-+device.name 82852/82855 GM/GME/PM/GMV Processor to I/O Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3580
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x3580
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x3581
-+device.name 82852/82855 GM/GME/PM/GMV Processor to AGP Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3582
-+device.name 82852/855GM Integrated Graphics Device
-
- vendor.id pci 0x8086
-&device.id pci 0x3582
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x3582
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x3584
-+device.name 82852/82855 GM/GME/PM/GMV Processor to I/O Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3584
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x3584
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x3585
-+device.name 82852/82855 GM/GME/PM/GMV Processor to I/O Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3585
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0163
-+subdevice.name Latitude D505
-
- vendor.id pci 0x8086
-&device.id pci 0x3585
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10b0
-+subdevice.name CL9 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x3590
-+device.name E7520 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x3591
-+device.name E7525/E7520 Error Reporting Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x3592
-+device.name E7320 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x3593
-+device.name E7320 Error Reporting Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x3594
-+device.name E7520 DMA Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x3595
-+device.name E7525/E7520/E7320 PCI Express Port A
-
- vendor.id pci 0x8086
-&device.id pci 0x3596
-+device.name E7525/E7520/E7320 PCI Express Port A1
-
- vendor.id pci 0x8086
-&device.id pci 0x3597
-+device.name E7525/E7520 PCI Express Port B
-
- vendor.id pci 0x8086
-&device.id pci 0x3598
-+device.name E7520 PCI Express Port B1
-
- vendor.id pci 0x8086
-&device.id pci 0x3599
-+device.name E7520 PCI Express Port C
-
- vendor.id pci 0x8086
-&device.id pci 0x359a
-+device.name E7520 PCI Express Port C1
-
- vendor.id pci 0x8086
-&device.id pci 0x359b
-+device.name E7525/E7520/E7320 Extended Configuration Registers
-
- vendor.id pci 0x8086
-&device.id pci 0x359e
-+device.name E7525 Memory Controller Hub
-
- vendor.id pci 0x8086
-&device.id pci 0x4220
-+device.name PRO/Wireless 2200BG
-
- vendor.id pci 0x8086
-&device.id pci 0x4223
-+device.name PRO/Wireless 2915ABG MiniPCI Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x5200
-+device.name EtherExpress PRO/100 Intelligent Server
-
- vendor.id pci 0x8086
-&device.id pci 0x5201
-+device.name EtherExpress PRO/100 Intelligent Server
-
- vendor.id pci 0x8086
-&device.id pci 0x5201
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0001
-+subdevice.name EtherExpress PRO/100 Server Ethernet Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0x530d
-+device.name 80310 IOP [IO Processor]
-
- vendor.id pci 0x8086
-&device.id pci 0x7000
-+device.name 82371SB PIIX3 ISA [Natoma/Triton II]
-
- vendor.id pci 0x8086
-&device.id pci 0x7010
-+device.name 82371SB PIIX3 IDE [Natoma/Triton II]
-
- vendor.id pci 0x8086
-&device.id pci 0x7020
-+device.name 82371SB PIIX3 USB [Natoma/Triton II]
-
- vendor.id pci 0x8086
-&device.id pci 0x7030
-+device.name 430VX - 82437VX TVX [Triton VX]
-
- vendor.id pci 0x8086
-&device.id pci 0x7050
-+device.name Intel Intercast Video Capture Card
-
- vendor.id pci 0x8086
-&device.id pci 0x7100
-+device.name 430TX - 82439TX MTXC
-
- vendor.id pci 0x8086
-&device.id pci 0x7110
-+device.name 82371AB/EB/MB PIIX4 ISA
-
- vendor.id pci 0x8086
-&device.id pci 0x7110
-&subvendor.id pci 0x15ad
-&subdevice.id pci 0x1976
-+subdevice.name virtualHW v3
-
- vendor.id pci 0x8086
-&device.id pci 0x7111
-+device.name 82371AB/EB/MB PIIX4 IDE
-
- vendor.id pci 0x8086
-&device.id pci 0x7111
-&subvendor.id pci 0x15ad
-&subdevice.id pci 0x1976
-+subdevice.name virtualHW v3
-
- vendor.id pci 0x8086
-&device.id pci 0x7112
-+device.name 82371AB/EB/MB PIIX4 USB
-
- vendor.id pci 0x8086
-&device.id pci 0x7112
-&subvendor.id pci 0x15ad
-&subdevice.id pci 0x1976
-+subdevice.name virtualHW v3
-
- vendor.id pci 0x8086
-&device.id pci 0x7113
-+device.name 82371AB/EB/MB PIIX4 ACPI
-
- vendor.id pci 0x8086
-&device.id pci 0x7113
-&subvendor.id pci 0x15ad
-&subdevice.id pci 0x1976
-+subdevice.name virtualHW v3
-
- vendor.id pci 0x8086
-&device.id pci 0x7120
-+device.name 82810 GMCH [Graphics Memory Controller Hub]
-
- vendor.id pci 0x8086
-&device.id pci 0x7120
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1040
-+subdevice.name CL7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7120
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1060
-+subdevice.name PC7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-+device.name 82810 CGC [Chipset Graphics Controller]
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1040
-+subdevice.name CL7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1060
-+subdevice.name PC7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x4341
-+subdevice.name Cayman (CA810) Mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7122
-+device.name 82810 DC-100 GMCH [Graphics Memory Controller Hub]
-
- vendor.id pci 0x8086
-&device.id pci 0x7123
-+device.name 82810 DC-100 CGC [Chipset Graphics Controller]
-
- vendor.id pci 0x8086
-&device.id pci 0x7124
-+device.name 82810E DC-133 GMCH [Graphics Memory Controller Hub]
-
- vendor.id pci 0x8086
-&device.id pci 0x7125
-+device.name 82810E DC-133 CGC [Chipset Graphics Controller]
-
- vendor.id pci 0x8086
-&device.id pci 0x7126
-+device.name 82810 DC-133 System and Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x7128
-+device.name 82810-M DC-100 System and Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x712a
-+device.name 82810-M DC-133 System and Graphics Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x7180
-+device.name 440LX/EX - 82443LX/EX Host bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x7181
-+device.name 440LX/EX - 82443LX/EX AGP bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-+device.name 440BX/ZX/DX - 82443BX/ZX/DX Host bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0500
-+subdevice.name Armada 1750 Laptop System Chipset
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xb110
-+subdevice.name Armada M700/E500
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Toshiba Tecra 8100 Laptop System Chipset
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-&subvendor.id pci 0x15ad
-&subdevice.id pci 0x1976
-+subdevice.name virtualHW v3
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7190
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7191
-+device.name 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x7192
-+device.name 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled)
-
- vendor.id pci 0x8086
-&device.id pci 0x7192
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0460
-+subdevice.name Armada 1700 Laptop System Chipset
-
- vendor.id pci 0x8086
-&device.id pci 0x7192
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1000
-+subdevice.name CC7/CR7/CP7/VC7/VP7/VR7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7194
-+device.name 82440MX Host Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x7194
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x0000
-+subdevice.name Versa Note Vxi
-
- vendor.id pci 0x8086
-&device.id pci 0x7194
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x10a0
-+subdevice.name CA3/CR3 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7195
-+device.name 82440MX AC'97 Audio Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x7195
-&subvendor.id pci 0x1033
-&subdevice.id pci 0x80cc
-+subdevice.name Versa Note VXi
-
- vendor.id pci 0x8086
-&device.id pci 0x7195
-&subvendor.id pci 0x10cf
-&subdevice.id pci 0x1099
-+subdevice.name QSound_SigmaTel Stac97 PCI Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x7195
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x0040
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x7195
-&subvendor.id pci 0x11d4
-&subdevice.id pci 0x0048
-+subdevice.name SoundMAX Integrated Digital Audio
-
- vendor.id pci 0x8086
-&device.id pci 0x7196
-+device.name 82440MX AC'97 Modem Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x7198
-+device.name 82440MX ISA Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x7199
-+device.name 82440MX EIDE Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x719a
-+device.name 82440MX USB Universal Host Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x719b
-+device.name 82440MX Power Management Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x71a0
-+device.name 440GX - 82443GX Host bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x71a0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x71a0
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x71a1
-+device.name 440GX - 82443GX AGP bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x71a2
-+device.name 440GX - 82443GX Host bridge (AGP disabled)
-
- vendor.id pci 0x8086
-&device.id pci 0x71a2
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1000
-+subdevice.name CC7/CR7/CP7/VC7/VP7/VR7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0x7600
-+device.name 82372FB PIIX5 ISA
-
- vendor.id pci 0x8086
-&device.id pci 0x7601
-+device.name 82372FB PIIX5 IDE
-
- vendor.id pci 0x8086
-&device.id pci 0x7602
-+device.name 82372FB PIIX5 USB
-
- vendor.id pci 0x8086
-&device.id pci 0x7603
-+device.name 82372FB PIIX5 SMBus
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-+device.name 82740 (i740) AGP Graphics Accelerator
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x003d
-&subdevice.id pci 0x0008
-+subdevice.name Starfighter AGP
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x003d
-&subdevice.id pci 0x000b
-+subdevice.name Starfighter AGP
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x1092
-&subdevice.id pci 0x0100
-+subdevice.name Stealth II G460
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x201a
-+subdevice.name Lightspeed 740
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x202f
-+subdevice.name Lightspeed 740
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0000
-+subdevice.name Terminator 2x/i
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0100
-+subdevice.name Intel740 Graphics Accelerator
-
- vendor.id pci 0x8086
-&device.id pci 0x84c4
-+device.name 450KX/GX [Orion] - 82454KX/GX PCI bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x84c5
-+device.name 450KX/GX [Orion] - 82453KX/GX Memory controller
-
- vendor.id pci 0x8086
-&device.id pci 0x84ca
-+device.name 450NX - 82451NX Memory & I/O Controller
-
- vendor.id pci 0x8086
-&device.id pci 0x84cb
-+device.name 450NX - 82454NX/84460GX PCI Expander Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0x84e0
-+device.name 460GX - 84460GX System Address Controller (SAC)
-
- vendor.id pci 0x8086
-&device.id pci 0x84e1
-+device.name 460GX - 84460GX System Data Controller (SDC)
-
- vendor.id pci 0x8086
-&device.id pci 0x84e2
-+device.name 460GX - 84460GX AGP Bridge (GXB function 2)
-
- vendor.id pci 0x8086
-&device.id pci 0x84e3
-+device.name 460GX - 84460GX Memory Address Controller (MAC)
-
- vendor.id pci 0x8086
-&device.id pci 0x84e4
-+device.name 460GX - 84460GX Memory Data Controller (MDC)
-
- vendor.id pci 0x8086
-&device.id pci 0x84e6
-+device.name 460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)
-
- vendor.id pci 0x8086
-&device.id pci 0x84ea
-+device.name 460GX - 84460GX AGP Bridge (GXB function 1)
-
- vendor.id pci 0x8086
-&device.id pci 0x8500
-+device.name IXP4XX - Intel Network Processor family. IXP420, IXP421, IXP422, IXP425 and IXC1100
-
- vendor.id pci 0x8086
-&device.id pci 0x9000
-+device.name IXP2000 Family Network Processor
-
- vendor.id pci 0x8086
-&device.id pci 0x9001
-+device.name IXP2400 Network Processor
-
- vendor.id pci 0x8086
-&device.id pci 0x9004
-+device.name IXP2800 Network Processor
-
- vendor.id pci 0x8086
-&device.id pci 0x9621
-+device.name Integrated RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x9622
-+device.name Integrated RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x9641
-+device.name Integrated RAID
-
- vendor.id pci 0x8086
-&device.id pci 0x96a1
-+device.name Integrated RAID
-
- vendor.id pci 0x8086
-&device.id pci 0xa01f
-+device.name PRO/10GbE LR Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0xa11f
-+device.name PRO/10GbE LR Server Adapter
-
- vendor.id pci 0x8086
-&device.id pci 0xb152
-+device.name 21152 PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0xb154
-+device.name 21154 PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0xb555
-+device.name 21555 Non transparent PCI-to-PCI Bridge
-
- vendor.id pci 0x8086
-&device.id pci 0xb555
-&subvendor.id pci 0x12d9
-&subdevice.id pci 0x000a
-+subdevice.name PCI VoIP Gateway
-
- vendor.id pci 0x8086
-&device.id pci 0xb555
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1050
-+subdevice.name CT7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0xb555
-&subvendor.id pci 0x4c53
-&subdevice.id pci 0x1051
-+subdevice.name CE7 mainboard
-
- vendor.id pci 0x8086
-&device.id pci 0xb555
-&subvendor.id pci 0xe4bf
-&subdevice.id pci 0x1000
-+subdevice.name CC8-1-BLUES
-
- vendor.id pci 0x8086
-&device.id pci 0xffff
-+device.name 450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]
-
- vendor.id pci 0x8401
-+vendor.name TRENDware International Inc.
-
- vendor.id pci 0x8800
-+vendor.name Trigem Computer Inc.
-
- vendor.id pci 0x8800
-&device.id pci 0x2008
-+device.name Video assistent component
-
- vendor.id pci 0x8866
-+vendor.name T-Square Design Inc.
-
- vendor.id pci 0x8888
-+vendor.name Silicon Magic
-
- vendor.id pci 0x8c4a
-+vendor.name Winbond
-
- vendor.id pci 0x8c4a
-&device.id pci 0x1980
-+device.name W89C940 misprogrammed [ne2k]
-
- vendor.id pci 0x8e0e
-+vendor.name Computone Corporation
-
- vendor.id pci 0x8e2e
-+vendor.name KTI
-
- vendor.id pci 0x8e2e
-&device.id pci 0x3000
-+device.name ET32P2
-
- vendor.id pci 0x9004
-+vendor.name Adaptec
-
- vendor.id pci 0x9004
-&device.id pci 0x0078
-+device.name AHA-2940U_CN
-
- vendor.id pci 0x9004
-&device.id pci 0x1078
-+device.name AIC-7810
-
- vendor.id pci 0x9004
-&device.id pci 0x1160
-+device.name AIC-1160 [Family Fibre Channel Adapter]
-
- vendor.id pci 0x9004
-&device.id pci 0x2178
-+device.name AIC-7821
-
- vendor.id pci 0x9004
-&device.id pci 0x3860
-+device.name AHA-2930CU
-
- vendor.id pci 0x9004
-&device.id pci 0x3b78
-+device.name AHA-4844W/4844UW
-
- vendor.id pci 0x9004
-&device.id pci 0x5075
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5078
-+device.name AHA-7850
-
- vendor.id pci 0x9004
-&device.id pci 0x5078
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7850
-+subdevice.name AHA-2904/Integrated AIC-7850
-
- vendor.id pci 0x9004
-&device.id pci 0x5175
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5178
-+device.name AIC-7851
-
- vendor.id pci 0x9004
-&device.id pci 0x5275
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5278
-+device.name AIC-7852
-
- vendor.id pci 0x9004
-&device.id pci 0x5375
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5378
-+device.name AIC-7850
-
- vendor.id pci 0x9004
-&device.id pci 0x5475
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5478
-+device.name AIC-7850
-
- vendor.id pci 0x9004
-&device.id pci 0x5575
-+device.name AVA-2930
-
- vendor.id pci 0x9004
-&device.id pci 0x5578
-+device.name AIC-7855
-
- vendor.id pci 0x9004
-&device.id pci 0x5647
-+device.name ANA-7711 TCP Offload Engine
-
- vendor.id pci 0x9004
-&device.id pci 0x5647
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7710
-+subdevice.name ANA-7711F TCP Offload Engine - Optical
-
- vendor.id pci 0x9004
-&device.id pci 0x5647
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7711
-+subdevice.name ANA-7711LP TCP Offload Engine - Copper
-
- vendor.id pci 0x9004
-&device.id pci 0x5675
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5678
-+device.name AIC-7856
-
- vendor.id pci 0x9004
-&device.id pci 0x5775
-+device.name AIC-755x
-
- vendor.id pci 0x9004
-&device.id pci 0x5778
-+device.name AIC-7850
-
- vendor.id pci 0x9004
-&device.id pci 0x5800
-+device.name AIC-5800
-
- vendor.id pci 0x9004
-&device.id pci 0x5900
-+device.name ANA-5910/5930/5940 ATM155 & 25 LAN Adapter
-
- vendor.id pci 0x9004
-&device.id pci 0x5905
-+device.name ANA-5910A/5930A/5940A ATM Adapter
-
- vendor.id pci 0x9004
-&device.id pci 0x6038
-+device.name AIC-3860
-
- vendor.id pci 0x9004
-&device.id pci 0x6075
-+device.name AIC-1480 / APA-1480
-
- vendor.id pci 0x9004
-&device.id pci 0x6075
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7560
-+subdevice.name AIC-1480 / APA-1480 Cardbus
-
- vendor.id pci 0x9004
-&device.id pci 0x6078
-+device.name AIC-7860
-
- vendor.id pci 0x9004
-&device.id pci 0x6178
-+device.name AIC-7861
-
- vendor.id pci 0x9004
-&device.id pci 0x6178
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7861
-+subdevice.name AHA-2940AU Single
-
- vendor.id pci 0x9004
-&device.id pci 0x6278
-+device.name AIC-7860
-
- vendor.id pci 0x9004
-&device.id pci 0x6378
-+device.name AIC-7860
-
- vendor.id pci 0x9004
-&device.id pci 0x6478
-+device.name AIC-786x
-
- vendor.id pci 0x9004
-&device.id pci 0x6578
-+device.name AIC-786x
-
- vendor.id pci 0x9004
-&device.id pci 0x6678
-+device.name AIC-786x
-
- vendor.id pci 0x9004
-&device.id pci 0x6778
-+device.name AIC-786x
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-+device.name ANA620xx/ANA69011A
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0008
-+subdevice.name ANA69011A/TX 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0009
-+subdevice.name ANA69011A/TX 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0010
-+subdevice.name ANA62022 2-port 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0018
-+subdevice.name ANA62044 4-port 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0019
-+subdevice.name ANA62044 4-port 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0020
-+subdevice.name ANA62022 2-port 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x0028
-+subdevice.name ANA69011A/TX 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8008
-+subdevice.name ANA69011A/TX 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8009
-+subdevice.name ANA69011A/TX 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8010
-+subdevice.name ANA62022 2-port 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8018
-+subdevice.name ANA62044 4-port 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8019
-+subdevice.name ANA62044 4-port 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8020
-+subdevice.name ANA62022 2-port 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x6915
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x8028
-+subdevice.name ANA69011A/TX 64 bit 10/100
-
- vendor.id pci 0x9004
-&device.id pci 0x7078
-+device.name AHA-294x / AIC-7870
-
- vendor.id pci 0x9004
-&device.id pci 0x7178
-+device.name AHA-2940/2940W / AIC-7871
-
- vendor.id pci 0x9004
-&device.id pci 0x7278
-+device.name AHA-3940/3940W / AIC-7872
-
- vendor.id pci 0x9004
-&device.id pci 0x7378
-+device.name AHA-3985 / AIC-7873
-
- vendor.id pci 0x9004
-&device.id pci 0x7478
-+device.name AHA-2944/2944W / AIC-7874
-
- vendor.id pci 0x9004
-&device.id pci 0x7578
-+device.name AHA-3944/3944W / AIC-7875
-
- vendor.id pci 0x9004
-&device.id pci 0x7678
-+device.name AHA-4944W/UW / AIC-7876
-
- vendor.id pci 0x9004
-&device.id pci 0x7710
-+device.name ANA-7711F Network Accelerator Card (NAC) - Optical
-
- vendor.id pci 0x9004
-&device.id pci 0x7711
-+device.name ANA-7711C Network Accelerator Card (NAC) - Copper
-
- vendor.id pci 0x9004
-&device.id pci 0x7778
-+device.name AIC-787x
-
- vendor.id pci 0x9004
-&device.id pci 0x7810
-+device.name AIC-7810
-
- vendor.id pci 0x9004
-&device.id pci 0x7815
-+device.name AIC-7815 RAID+Memory Controller IC
-
- vendor.id pci 0x9004
-&device.id pci 0x7815
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7815
-+subdevice.name ARO-1130U2 RAID Controller
-
- vendor.id pci 0x9004
-&device.id pci 0x7815
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7840
-+subdevice.name AIC-7815 RAID+Memory Controller IC
-
- vendor.id pci 0x9004
-&device.id pci 0x7850
-+device.name AIC-7850
-
- vendor.id pci 0x9004
-&device.id pci 0x7855
-+device.name AHA-2930
-
- vendor.id pci 0x9004
-&device.id pci 0x7860
-+device.name AIC-7860
-
- vendor.id pci 0x9004
-&device.id pci 0x7870
-+device.name AIC-7870
-
- vendor.id pci 0x9004
-&device.id pci 0x7871
-+device.name AHA-2940
-
- vendor.id pci 0x9004
-&device.id pci 0x7872
-+device.name AHA-3940
-
- vendor.id pci 0x9004
-&device.id pci 0x7873
-+device.name AHA-3980
-
- vendor.id pci 0x9004
-&device.id pci 0x7874
-+device.name AHA-2944
-
- vendor.id pci 0x9004
-&device.id pci 0x7880
-+device.name AIC-7880P
-
- vendor.id pci 0x9004
-&device.id pci 0x7890
-+device.name AIC-7890
-
- vendor.id pci 0x9004
-&device.id pci 0x7891
-+device.name AIC-789x
-
- vendor.id pci 0x9004
-&device.id pci 0x7892
-+device.name AIC-789x
-
- vendor.id pci 0x9004
-&device.id pci 0x7893
-+device.name AIC-789x
-
- vendor.id pci 0x9004
-&device.id pci 0x7894
-+device.name AIC-789x
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-+device.name AHA-2940U/UW / AHA-39xx / AIC-7895
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7890
-+subdevice.name AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7891
-+subdevice.name AHA-2940U/2940UW Dual
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7892
-+subdevice.name AHA-3940AU/AUW/AUWD/UWD
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7894
-+subdevice.name AHA-3944AUWD
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7895
-+subdevice.name AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7896
-+subdevice.name AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
-
- vendor.id pci 0x9004
-&device.id pci 0x7895
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7897
-+subdevice.name AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
-
- vendor.id pci 0x9004
-&device.id pci 0x7896
-+device.name AIC-789x
-
- vendor.id pci 0x9004
-&device.id pci 0x7897
-+device.name AIC-789x
-
- vendor.id pci 0x9004
-&device.id pci 0x8078
-+device.name AIC-7880U
-
- vendor.id pci 0x9004
-&device.id pci 0x8078
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7880
-+subdevice.name AIC-7880P Ultra/Ultra Wide SCSI Chipset
-
- vendor.id pci 0x9004
-&device.id pci 0x8178
-+device.name AHA-2940U/UW/D / AIC-7881U
-
- vendor.id pci 0x9004
-&device.id pci 0x8178
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7881
-+subdevice.name AHA-2940UW SCSI Host Adapter
-
- vendor.id pci 0x9004
-&device.id pci 0x8278
-+device.name AHA-3940U/UW/UWD / AIC-7882U
-
- vendor.id pci 0x9004
-&device.id pci 0x8378
-+device.name AHA-3940U/UW / AIC-7883U
-
- vendor.id pci 0x9004
-&device.id pci 0x8478
-+device.name AHA-2944UW / AIC-7884U
-
- vendor.id pci 0x9004
-&device.id pci 0x8578
-+device.name AHA-3944U/UWD / AIC-7885
-
- vendor.id pci 0x9004
-&device.id pci 0x8678
-+device.name AHA-4944UW / AIC-7886
-
- vendor.id pci 0x9004
-&device.id pci 0x8778
-+device.name AHA-2940UW Pro / AIC-788x
-
- vendor.id pci 0x9004
-&device.id pci 0x8778
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7887
-+subdevice.name 2940UW Pro Ultra-Wide SCSI Controller
-
- vendor.id pci 0x9004
-&device.id pci 0x8878
-+device.name AHA-2930UW / AIC-7888
-
- vendor.id pci 0x9004
-&device.id pci 0x8878
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7888
-+subdevice.name AHA-2930UW SCSI Controller
-
- vendor.id pci 0x9004
-&device.id pci 0x8b78
-+device.name ABA-1030
-
- vendor.id pci 0x9004
-&device.id pci 0xec78
-+device.name AHA-4944W/UW
-
- vendor.id pci 0x9005
-+vendor.name Adaptec
-
- vendor.id pci 0x9005
-&device.id pci 0x0010
-+device.name AHA-2940U2/U2W
-
- vendor.id pci 0x9005
-&device.id pci 0x0010
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x2180
-+subdevice.name AHA-2940U2 SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0010
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x8100
-+subdevice.name AHA-2940U2B SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0010
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xa100
-+subdevice.name AHA-2940U2B SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0010
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xa180
-+subdevice.name AHA-2940U2W SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0010
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xe100
-+subdevice.name AHA-2950U2B SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0011
-+device.name AHA-2930U2
-
- vendor.id pci 0x9005
-&device.id pci 0x0013
-+device.name 78902
-
- vendor.id pci 0x9005
-&device.id pci 0x0013
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0003
-+subdevice.name AAA-131U2 Array1000 1 Channel RAID Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0013
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x000f
-+subdevice.name AIC7890_ARO
-
- vendor.id pci 0x9005
-&device.id pci 0x001f
-+device.name AHA-2940U2/U2W / 7890/7891
-
- vendor.id pci 0x9005
-&device.id pci 0x001f
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x000f
-+subdevice.name 2940U2W SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x001f
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xa180
-+subdevice.name 2940U2W SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0020
-+device.name AIC-7890
-
- vendor.id pci 0x9005
-&device.id pci 0x002f
-+device.name AIC-7890
-
- vendor.id pci 0x9005
-&device.id pci 0x0030
-+device.name AIC-7890
-
- vendor.id pci 0x9005
-&device.id pci 0x003f
-+device.name AIC-7890
-
- vendor.id pci 0x9005
-&device.id pci 0x0050
-+device.name AHA-3940U2x/395U2x
-
- vendor.id pci 0x9005
-&device.id pci 0x0050
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xf500
-+subdevice.name AHA-3950U2B
-
- vendor.id pci 0x9005
-&device.id pci 0x0050
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xffff
-+subdevice.name AHA-3950U2B
-
- vendor.id pci 0x9005
-&device.id pci 0x0051
-+device.name AHA-3950U2D
-
- vendor.id pci 0x9005
-&device.id pci 0x0051
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xb500
-+subdevice.name AHA-3950U2D
-
- vendor.id pci 0x9005
-&device.id pci 0x0053
-+device.name AIC-7896 SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0053
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xffff
-+subdevice.name AIC-7896 SCSI Controller mainboard implementation
-
- vendor.id pci 0x9005
-&device.id pci 0x005f
-+device.name AIC-7896U2/7897U2
-
- vendor.id pci 0x9005
-&device.id pci 0x0080
-+device.name AIC-7892A U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x0080
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xe2a0
-+subdevice.name Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter
-
- vendor.id pci 0x9005
-&device.id pci 0x0080
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x6220
-+subdevice.name AHA-29160C
-
- vendor.id pci 0x9005
-&device.id pci 0x0080
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x62a0
-+subdevice.name 29160N Ultra160 SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0080
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xe220
-+subdevice.name 29160LP Low Profile Ultra160 SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0080
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xe2a0
-+subdevice.name 29160 Ultra160 SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0081
-+device.name AIC-7892B U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x0081
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x62a1
-+subdevice.name 19160 Ultra160 SCSI Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0083
-+device.name AIC-7892D U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x008f
-+device.name AIC-7892P U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x008f
-&subvendor.id pci 0x1179
-&subdevice.id pci 0x0001
-+subdevice.name Magnia Z310
-
- vendor.id pci 0x9005
-&device.id pci 0x008f
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x9005
-+subdevice.name Onboard SCSI Host Adapter
-
- vendor.id pci 0x9005
-&device.id pci 0x00c0
-+device.name AHA-3960D / AIC-7899A U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x00c0
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0xf620
-+subdevice.name Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter
-
- vendor.id pci 0x9005
-&device.id pci 0x00c0
-&subvendor.id pci 0x9005
-&subdevice.id pci 0xf620
-+subdevice.name AHA-3960D U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x00c1
-+device.name AIC-7899B U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x00c3
-+device.name AIC-7899D U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x00c5
-+device.name RAID subsystem HBA
-
- vendor.id pci 0x9005
-&device.id pci 0x00c5
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00c5
-+subdevice.name PowerEdge 2400,2500,2550,4400
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-+device.name AIC-7899P U160/m
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00ce
-+subdevice.name PowerEdge 1400
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d1
-+subdevice.name PowerEdge 2550
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d9
-+subdevice.name PowerEdge 2500
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-&subvendor.id pci 0x10f1
-&subdevice.id pci 0x2462
-+subdevice.name Thunder K7 S2462
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-&subvendor.id pci 0x15d9
-&subdevice.id pci 0x9005
-+subdevice.name Onboard SCSI Host Adapter
-
- vendor.id pci 0x9005
-&device.id pci 0x00cf
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3411
-+subdevice.name SDS2 Mainboard
-
- vendor.id pci 0x9005
-&device.id pci 0x0250
-+device.name ServeRAID Controller
-
- vendor.id pci 0x9005
-&device.id pci 0x0250
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x0279
-+subdevice.name ServeRAID-xx
-
- vendor.id pci 0x9005
-&device.id pci 0x0250
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x028c
-+subdevice.name ServeRAID-xx
-
- vendor.id pci 0x9005
-&device.id pci 0x0279
-+device.name ServeRAID 6M
-
- vendor.id pci 0x9005
-&device.id pci 0x0283
-+device.name AAC-RAID
-
- vendor.id pci 0x9005
-&device.id pci 0x0283
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0283
-+subdevice.name Catapult
-
- vendor.id pci 0x9005
-&device.id pci 0x0284
-+device.name AAC-RAID
-
- vendor.id pci 0x9005
-&device.id pci 0x0284
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0284
-+subdevice.name Tomcat
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-+device.name AAC-RAID
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x0295
-+subdevice.name SATA 6Ch (Bearcat)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0287
-+subdevice.name PowerEdge Expandable RAID Controller 320/DC
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0291
-+subdevice.name CERC SATA RAID 2 PCI SATA 6ch (DellCorsair)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x17aa
-&subdevice.id pci 0x0286
-+subdevice.name Legend S220 (Legend Crusader)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x17aa
-&subdevice.id pci 0x0287
-+subdevice.name Legend S230 (Legend Vulcan)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0285
-+subdevice.name 2200S (Vulcan)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0286
-+subdevice.name 2120S (Crusader)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0287
-+subdevice.name 2200S (Vulcan-2m)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0288
-+subdevice.name 3230S (Harrier)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0289
-+subdevice.name 3240S (Tornado)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x028a
-+subdevice.name ASR-2020S PCI-X ZCR (Skyhawk)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x028b
-+subdevice.name ASR-2020S SO-DIMM PCI-X ZCR (Terminator)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0290
-+subdevice.name AAR-2410SA PCI SATA 4ch (Jaguar II)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0292
-+subdevice.name AAR-2810SA PCI SATA 8ch (Corsair-8)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0293
-+subdevice.name AAR-21610SA PCI SATA 16ch (Corsair-16)
-
- vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0294
-+subdevice.name ESD SO-DIMM PCI-X SATA ZCR (Prowler)
-
- vendor.id pci 0x9005
-&device.id pci 0x0286
-+device.name AAC-RAID (Rocket)
-
- vendor.id pci 0x9005
-&device.id pci 0x0286
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x028c
-+subdevice.name ASR-2230S + ASR-2230SLP PCI-X (Lancer)
-
- vendor.id pci 0x9005
-&device.id pci 0x8000
-+device.name ASC-29320A U320
-
- vendor.id pci 0x9005
-&device.id pci 0x800f
-+device.name AIC-7901 U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8010
-+device.name ASC-39320 U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8011
-+device.name ASC-32320D U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8011
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x00ac
-+subdevice.name ASC-39320D U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8011
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0041
-+subdevice.name ASC-39320D U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8012
-+device.name ASC-29320 U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8013
-+device.name ASC-29320B U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8014
-+device.name ASC-29320LP U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8015
-+device.name ASC-39320B U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8016
-+device.name ASC-39320A U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8017
-+device.name ASC-29320ALP U320
-
- vendor.id pci 0x9005
-&device.id pci 0x801c
-+device.name ASC-39320D U320
-
- vendor.id pci 0x9005
-&device.id pci 0x801d
-+device.name AIC-7902B U320
-
- vendor.id pci 0x9005
-&device.id pci 0x801e
-+device.name AIC-7901A U320
-
- vendor.id pci 0x9005
-&device.id pci 0x801f
-+device.name AIC-7902 U320
-
- vendor.id pci 0x9005
-&device.id pci 0x8080
-+device.name ASC-29320A U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x808f
-+device.name AIC-7901 U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8090
-+device.name ASC-39320 U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8091
-+device.name ASC-39320D U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8092
-+device.name ASC-29320 U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8093
-+device.name ASC-29320B U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8094
-+device.name ASC-29320LP U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8095
-+device.name ASC-39320(B) U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8096
-+device.name ASC-39320A U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x8097
-+device.name ASC-29320ALP U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x809c
-+device.name ASC-39320D(B) U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x809d
-+device.name AIC-7902(B) U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x809e
-+device.name AIC-7901A U320 w/HostRAID
-
- vendor.id pci 0x9005
-&device.id pci 0x809f
-+device.name AIC-7902 U320 w/HostRAID
-
- vendor.id pci 0x907f
-+vendor.name Atronics
-
- vendor.id pci 0x907f
-&device.id pci 0x2015
-+device.name IDE-2015PL
-
- vendor.id pci 0x919a
-+vendor.name Gigapixel Corp
-
- vendor.id pci 0x9412
-+vendor.name Holtek
-
- vendor.id pci 0x9412
-&device.id pci 0x6565
-+device.name 6565
-
- vendor.id pci 0x9699
-+vendor.name Omni Media Technology Inc
-
- vendor.id pci 0x9699
-&device.id pci 0x6565
-+device.name 6565
-
- vendor.id pci 0x9710
-+vendor.name NetMos Technology
-
- vendor.id pci 0x9710
-&device.id pci 0x7780
-+device.name USB IRDA-port
-
- vendor.id pci 0x9710
-&device.id pci 0x9815
-+device.name PCI 9815 Multi-I/O Controller
-
- vendor.id pci 0x9710
-&device.id pci 0x9815
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0020
-+subdevice.name 2P0S (2 port parallel adaptor)
-
- vendor.id pci 0x9710
-&device.id pci 0x9835
-+device.name PCI 9835 Multi-I/O Controller
-
- vendor.id pci 0x9710
-&device.id pci 0x9835
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0002
-+subdevice.name 2S (16C550 UART)
-
- vendor.id pci 0x9710
-&device.id pci 0x9835
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0012
-+subdevice.name 1P2S
-
- vendor.id pci 0x9710
-&device.id pci 0x9845
-+device.name PCI 9845 Multi-I/O Controller
-
- vendor.id pci 0x9710
-&device.id pci 0x9845
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0004
-+subdevice.name 0P4S (4 port 16550A serial card)
-
- vendor.id pci 0x9710
-&device.id pci 0x9845
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0006
-+subdevice.name 0P6S (6 port 16550a serial card)
-
- vendor.id pci 0x9710
-&device.id pci 0x9855
-+device.name PCI 9855 Multi-I/O Controller
-
- vendor.id pci 0x9710
-&device.id pci 0x9855
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0014
-+subdevice.name 1P4S
-
- vendor.id pci 0x9902
-+vendor.name Stargen Inc.
-
- vendor.id pci 0x9902
-&device.id pci 0x0001
-+device.name SG2010 PCI over Starfabric Bridge
-
- vendor.id pci 0x9902
-&device.id pci 0x0002
-+device.name SG2010 PCI to Starfabric Gateway
-
- vendor.id pci 0x9902
-&device.id pci 0x0003
-+device.name SG1010 Starfabric Switch and PCI Bridge
-
- vendor.id pci 0xa0a0
-+vendor.name AOPEN Inc.
-
- vendor.id pci 0xa0f1
-+vendor.name UNISYS Corporation
-
- vendor.id pci 0xa200
-+vendor.name NEC Corporation
-
- vendor.id pci 0xa259
-+vendor.name Hewlett Packard
-
- vendor.id pci 0xa25b
-+vendor.name Hewlett Packard GmbH PL24-MKT
-
- vendor.id pci 0xa304
-+vendor.name Sony
-
- vendor.id pci 0xa727
-+vendor.name 3Com Corporation
-
- vendor.id pci 0xa727
-&device.id pci 0x0013
-+device.name 3CRPAG175 Wireless PC Card
-
- vendor.id pci 0xaa42
-+vendor.name Scitex Digital Video
-
- vendor.id pci 0xac1e
-+vendor.name Digital Receiver Technology Inc
-
- vendor.id pci 0xac3d
-+vendor.name Actuality Systems
-
- vendor.id pci 0xaecb
-+vendor.name Adrienne Electronics Corporation
-
- vendor.id pci 0xb1b3
-+vendor.name Shiva Europe Limited
-
- vendor.id pci 0xbd11
-+vendor.name Pinnacle Systems, Inc. (Wrong ID)
-
- vendor.id pci 0xc001
-+vendor.name TSI Telsys
-
- vendor.id pci 0xc0a9
-+vendor.name Micron/Crucial Technology
-
- vendor.id pci 0xc0de
-+vendor.name Motorola
-
- vendor.id pci 0xc0fe
-+vendor.name Motion Engineering, Inc.
-
- vendor.id pci 0xca50
-+vendor.name Varian Australia Pty Ltd
-
- vendor.id pci 0xcafe
-+vendor.name Chrysalis-ITS
-
- vendor.id pci 0xcccc
-+vendor.name Catapult Communications
-
- vendor.id pci 0xcddd
-+vendor.name Tyzx, Inc.
-
- vendor.id pci 0xcddd
-&device.id pci 0x0101
-+device.name DeepSea 1 High Speed Stereo Vision Frame Grabber
-
- vendor.id pci 0xcddd
-&device.id pci 0x0200
-+device.name DeepSea 2 High Speed Stereo Vision Frame Grabber
-
- vendor.id pci 0xd4d4
-+vendor.name Dy4 Systems Inc
-
- vendor.id pci 0xd4d4
-&device.id pci 0x0601
-+device.name PCI Mezzanine Card
-
- vendor.id pci 0xd531
-+vendor.name I+ME ACTIA GmbH
-
- vendor.id pci 0xd84d
-+vendor.name Exsys
-
- vendor.id pci 0xdead
-+vendor.name Indigita Corporation
-
- vendor.id pci 0xe000
-+vendor.name Winbond
-
- vendor.id pci 0xe000
-&device.id pci 0xe000
-+device.name W89C940
-
- vendor.id pci 0xe159
-+vendor.name Tiger Jet Network Inc.
-
- vendor.id pci 0xe159
-&device.id pci 0x0001
-+device.name Tiger3XX Modem/ISDN interface
-
- vendor.id pci 0xe159
-&device.id pci 0x0001
-&subvendor.id pci 0x0059
-&subdevice.id pci 0x0001
-+subdevice.name 128k ISDN-S/T Adapter
-
- vendor.id pci 0xe159
-&device.id pci 0x0001
-&subvendor.id pci 0x0059
-&subdevice.id pci 0x0003
-+subdevice.name 128k ISDN-U Adapter
-
- vendor.id pci 0xe159
-&device.id pci 0x0002
-+device.name Tiger100APC ISDN chipset
-
- vendor.id pci 0xe4bf
-+vendor.name EKF Elektronik GmbH
-
- vendor.id pci 0xe55e
-+vendor.name Essence Technology, Inc.
-
- vendor.id pci 0xea01
-+vendor.name Eagle Technology
-
- vendor.id pci 0xea60
-+vendor.name RME
-
- vendor.id pci 0xea60
-&device.id pci 0x9896
-+device.name Digi32
-
- vendor.id pci 0xea60
-&device.id pci 0x9897
-+device.name Digi32 Pro
-
- vendor.id pci 0xea60
-&device.id pci 0x9898
-+device.name Digi32/8
-
- vendor.id pci 0xeabb
-+vendor.name Aashima Technology B.V.
-
- vendor.id pci 0xeace
-+vendor.name Endace Measurement Systems, Ltd
-
- vendor.id pci 0xeace
-&device.id pci 0x3100
-+device.name DAG 3.10 OC-3/OC-12
-
- vendor.id pci 0xeace
-&device.id pci 0x3200
-+device.name DAG 3.2x OC-3/OC-12
-
- vendor.id pci 0xeace
-&device.id pci 0x320e
-+device.name DAG 3.2E Fast Ethernet
-
- vendor.id pci 0xeace
-&device.id pci 0x340e
-+device.name DAG 3.4E Fast Ethernet
-
- vendor.id pci 0xeace
-&device.id pci 0x341e
-+device.name DAG 3.41E Fast Ethernet
-
- vendor.id pci 0xeace
-&device.id pci 0x3500
-+device.name DAG 3.5 OC-3/OC-12
-
- vendor.id pci 0xeace
-&device.id pci 0x351c
-+device.name DAG 3.5ECM Fast Ethernet
-
- vendor.id pci 0xeace
-&device.id pci 0x4100
-+device.name DAG 4.10 OC-48
-
- vendor.id pci 0xeace
-&device.id pci 0x4110
-+device.name DAG 4.11 OC-48
-
- vendor.id pci 0xeace
-&device.id pci 0x4220
-+device.name DAG 4.2 OC-48
-
- vendor.id pci 0xeace
-&device.id pci 0x422e
-+device.name DAG 4.2E Dual Gigabit Ethernet
-
- vendor.id pci 0xec80
-+vendor.name Belkin Corporation
-
- vendor.id pci 0xec80
-&device.id pci 0xec00
-+device.name F5D6000
-
- vendor.id pci 0xecc0
-+vendor.name Echo Digital Audio Corporation
-
- vendor.id pci 0xecc0
-&device.id pci 0x0050
-+device.name Gina24_301
-
- vendor.id pci 0xecc0
-&device.id pci 0x0051
-+device.name Gina24_361
-
- vendor.id pci 0xecc0
-&device.id pci 0x0060
-+device.name Layla24
-
- vendor.id pci 0xecc0
-&device.id pci 0x0070
-+device.name Mona_301_80
-
- vendor.id pci 0xecc0
-&device.id pci 0x0071
-+device.name Mona_301_66
-
- vendor.id pci 0xecc0
-&device.id pci 0x0072
-+device.name Mona_361
-
- vendor.id pci 0xecc0
-&device.id pci 0x0080
-+device.name Mia
-
- vendor.id pci 0xedd8
-+vendor.name ARK Logic Inc
-
- vendor.id pci 0xedd8
-&device.id pci 0xa091
-+device.name 1000PV [Stingray]
-
- vendor.id pci 0xedd8
-&device.id pci 0xa099
-+device.name 2000PV [Stingray]
-
- vendor.id pci 0xedd8
-&device.id pci 0xa0a1
-+device.name 2000MT
-
- vendor.id pci 0xedd8
-&device.id pci 0xa0a9
-+device.name 2000MI
-
- vendor.id pci 0xf1d0
-+vendor.name AJA Video
-
- vendor.id pci 0xf1d0
-&device.id pci 0xcafe
-+device.name KONA SD SMPTE 259M I/O
-
- vendor.id pci 0xf1d0
-&device.id pci 0xefac
-+device.name KONA SD SMPTE 259M I/O
-
- vendor.id pci 0xf1d0
-&device.id pci 0xfacd
-+device.name KONA HD SMPTE 292M I/O
-
- vendor.id pci 0xfa57
-+vendor.name Interagon AS
-
- vendor.id pci 0xfa57
-&device.id pci 0x0001
-+device.name PMC [Pattern Matching Chip]
-
- vendor.id pci 0xfebd
-+vendor.name Ultraview Corp.
-
- vendor.id pci 0xfeda
-+vendor.name Broadcom Inc (nee Epigram)
-
- vendor.id pci 0xfeda
-&device.id pci 0xa0fa
-+device.name BCM4210 iLine10 HomePNA 2.0
-
- vendor.id pci 0xfeda
-&device.id pci 0xa10e
-+device.name BCM4230 iLine10 HomePNA 2.0
-
- vendor.id pci 0xfede
-+vendor.name Fedetec Inc.
-
- vendor.id pci 0xfede
-&device.id pci 0x0003
-+device.name TABIC PCI v3
-
- vendor.id pci 0xfffe
-+vendor.name VMWare Inc
-
- vendor.id pci 0xfffe
-&device.id pci 0x0405
-+device.name Virtual SVGA 4.0
-
- vendor.id pci 0xfffe
-&device.id pci 0x0710
-+device.name Virtual SVGA
-
- vendor.id pci 0xffff
-+vendor.name Illegal Vendor ID
-
- baseclass.id 0x000
-+baseclass.name Unclassified device
-
- baseclass.id 0x000
-&subclass.id 0x00
-+subclass.name Non-VGA unclassified device
-
- baseclass.id 0x000
-&subclass.id 0x01
-+subclass.name VGA compatible unclassified device
-
- baseclass.id 0x001
-+baseclass.name Mass storage controller
-
- baseclass.id 0x001
-&subclass.id 0x00
-+subclass.name SCSI storage controller
-
- baseclass.id 0x001
-&subclass.id 0x01
-+subclass.name IDE interface
-
- baseclass.id 0x001
-&subclass.id 0x02
-+subclass.name Floppy disk controller
-
- baseclass.id 0x001
-&subclass.id 0x03
-+subclass.name IPI bus controller
-
- baseclass.id 0x001
-&subclass.id 0x04
-+subclass.name RAID bus controller
-
- baseclass.id 0x001
-&subclass.id 0x80
-+subclass.name Unknown mass storage controller
-
- baseclass.id 0x002
-+baseclass.name Network controller
-
- baseclass.id 0x002
-&subclass.id 0x00
-+subclass.name Ethernet controller
-
- baseclass.id 0x002
-&subclass.id 0x01
-+subclass.name Token ring network controller
-
- baseclass.id 0x002
-&subclass.id 0x02
-+subclass.name FDDI network controller
-
- baseclass.id 0x002
-&subclass.id 0x03
-+subclass.name ATM network controller
-
- baseclass.id 0x002
-&subclass.id 0x04
-+subclass.name ISDN controller
-
- baseclass.id 0x002
-&subclass.id 0x80
-+subclass.name Network controller
-
- baseclass.id 0x003
-+baseclass.name Display controller
-
- baseclass.id 0x003
-&subclass.id 0x00
-+subclass.name VGA compatible controller
-
- baseclass.id 0x003
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name VGA
-
- baseclass.id 0x003
-&subclass.id 0x00
-&progif.id 0x01
-+progif.name 8514
-
- baseclass.id 0x003
-&subclass.id 0x01
-+subclass.name XGA compatible controller
-
- baseclass.id 0x003
-&subclass.id 0x02
-+subclass.name 3D controller
-
- baseclass.id 0x003
-&subclass.id 0x80
-+subclass.name Display controller
-
- baseclass.id 0x004
-+baseclass.name Multimedia controller
-
- baseclass.id 0x004
-&subclass.id 0x00
-+subclass.name Multimedia video controller
-
- baseclass.id 0x004
-&subclass.id 0x01
-+subclass.name Multimedia audio controller
-
- baseclass.id 0x004
-&subclass.id 0x02
-+subclass.name Computer telephony device
-
- baseclass.id 0x004
-&subclass.id 0x80
-+subclass.name Multimedia controller
-
- baseclass.id 0x005
-+baseclass.name Memory controller
-
- baseclass.id 0x005
-&subclass.id 0x00
-+subclass.name RAM memory
-
- baseclass.id 0x005
-&subclass.id 0x01
-+subclass.name FLASH memory
-
- baseclass.id 0x005
-&subclass.id 0x80
-+subclass.name Memory controller
-
- baseclass.id 0x006
-+baseclass.name Bridge
-
- baseclass.id 0x006
-&subclass.id 0x00
-+subclass.name Host bridge
-
- baseclass.id 0x006
-&subclass.id 0x01
-+subclass.name ISA bridge
-
- baseclass.id 0x006
-&subclass.id 0x02
-+subclass.name EISA bridge
-
- baseclass.id 0x006
-&subclass.id 0x03
-+subclass.name MicroChannel bridge
-
- baseclass.id 0x006
-&subclass.id 0x04
-+subclass.name PCI bridge
-
- baseclass.id 0x006
-&subclass.id 0x04
-&progif.id 0x00
-+progif.name Normal decode
-
- baseclass.id 0x006
-&subclass.id 0x04
-&progif.id 0x01
-+progif.name Subtractive decode
-
- baseclass.id 0x006
-&subclass.id 0x05
-+subclass.name PCMCIA bridge
-
- baseclass.id 0x006
-&subclass.id 0x06
-+subclass.name NuBus bridge
-
- baseclass.id 0x006
-&subclass.id 0x07
-+subclass.name CardBus bridge
-
- baseclass.id 0x006
-&subclass.id 0x08
-+subclass.name RACEway bridge
-
- baseclass.id 0x006
-&subclass.id 0x08
-&progif.id 0x00
-+progif.name Transparent mode
-
- baseclass.id 0x006
-&subclass.id 0x08
-&progif.id 0x01
-+progif.name Endpoint mode
-
- baseclass.id 0x006
-&subclass.id 0x09
-+subclass.name Semi-transparent PCI-to-PCI bridge
-
- baseclass.id 0x006
-&subclass.id 0x09
-&progif.id 0x40
-+progif.name Primary bus towards host CPU
-
- baseclass.id 0x006
-&subclass.id 0x09
-&progif.id 0x80
-+progif.name Secondary bus towards host CPU
-
- baseclass.id 0x006
-&subclass.id 0x0a
-+subclass.name InfiniBand to PCI host bridge
-
- baseclass.id 0x006
-&subclass.id 0x80
-+subclass.name Bridge
-
- baseclass.id 0x007
-+baseclass.name Communication controller
-
- baseclass.id 0x007
-&subclass.id 0x00
-+subclass.name Serial controller
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name 8250
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x01
-+progif.name 16450
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x02
-+progif.name 16550
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x03
-+progif.name 16650
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x04
-+progif.name 16750
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x05
-+progif.name 16850
-
- baseclass.id 0x007
-&subclass.id 0x00
-&progif.id 0x06
-+progif.name 16950
-
- baseclass.id 0x007
-&subclass.id 0x01
-+subclass.name Parallel controller
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x00
-+progif.name SPP
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x01
-+progif.name BiDir
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x02
-+progif.name ECP
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0x03
-+progif.name IEEE1284
-
- baseclass.id 0x007
-&subclass.id 0x01
-&progif.id 0xfe
-+progif.name IEEE1284 Target
-
- baseclass.id 0x007
-&subclass.id 0x02
-+subclass.name Multiport serial controller
-
- baseclass.id 0x007
-&subclass.id 0x03
-+subclass.name Modem
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x01
-+progif.name Hayes/16450
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x02
-+progif.name Hayes/16550
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x03
-+progif.name Hayes/16650
-
- baseclass.id 0x007
-&subclass.id 0x03
-&progif.id 0x04
-+progif.name Hayes/16750
-
- baseclass.id 0x007
-&subclass.id 0x80
-+subclass.name Communication controller
-
- baseclass.id 0x008
-+baseclass.name Generic system peripheral
-
- baseclass.id 0x008
-&subclass.id 0x00
-+subclass.name PIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name 8259
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x01
-+progif.name ISA PIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x02
-+progif.name EISA PIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x10
-+progif.name IO-APIC
-
- baseclass.id 0x008
-&subclass.id 0x00
-&progif.id 0x20
-+progif.name IO(X)-APIC
-
- baseclass.id 0x008
-&subclass.id 0x01
-+subclass.name DMA controller
-
- baseclass.id 0x008
-&subclass.id 0x01
-&progif.id 0x00
-+progif.name 8237
-
- baseclass.id 0x008
-&subclass.id 0x01
-&progif.id 0x01
-+progif.name ISA DMA
-
- baseclass.id 0x008
-&subclass.id 0x01
-&progif.id 0x02
-+progif.name EISA DMA
-
- baseclass.id 0x008
-&subclass.id 0x02
-+subclass.name Timer
-
- baseclass.id 0x008
-&subclass.id 0x02
-&progif.id 0x00
-+progif.name 8254
-
- baseclass.id 0x008
-&subclass.id 0x02
-&progif.id 0x01
-+progif.name ISA Timer
-
- baseclass.id 0x008
-&subclass.id 0x02
-&progif.id 0x02
-+progif.name EISA Timers
-
- baseclass.id 0x008
-&subclass.id 0x03
-+subclass.name RTC
-
- baseclass.id 0x008
-&subclass.id 0x03
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x008
-&subclass.id 0x03
-&progif.id 0x01
-+progif.name ISA RTC
-
- baseclass.id 0x008
-&subclass.id 0x04
-+subclass.name PCI Hot-plug controller
-
- baseclass.id 0x008
-&subclass.id 0x80
-+subclass.name System peripheral
-
- baseclass.id 0x009
-+baseclass.name Input device controller
-
- baseclass.id 0x009
-&subclass.id 0x00
-+subclass.name Keyboard controller
-
- baseclass.id 0x009
-&subclass.id 0x01
-+subclass.name Digitizer Pen
-
- baseclass.id 0x009
-&subclass.id 0x02
-+subclass.name Mouse controller
-
- baseclass.id 0x009
-&subclass.id 0x03
-+subclass.name Scanner controller
-
- baseclass.id 0x009
-&subclass.id 0x04
-+subclass.name Gameport controller
-
- baseclass.id 0x009
-&subclass.id 0x04
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x009
-&subclass.id 0x04
-&progif.id 0x10
-+progif.name Extended
-
- baseclass.id 0x009
-&subclass.id 0x80
-+subclass.name Input device controller
-
- baseclass.id 0x00a
-+baseclass.name Docking station
-
- baseclass.id 0x00a
-&subclass.id 0x00
-+subclass.name Generic Docking Station
-
- baseclass.id 0x00a
-&subclass.id 0x80
-+subclass.name Docking Station
-
- baseclass.id 0x00b
-+baseclass.name Processor
-
- baseclass.id 0x00b
-&subclass.id 0x00
-+subclass.name 386
-
- baseclass.id 0x00b
-&subclass.id 0x01
-+subclass.name 486
-
- baseclass.id 0x00b
-&subclass.id 0x02
-+subclass.name Pentium
-
- baseclass.id 0x00b
-&subclass.id 0x10
-+subclass.name Alpha
-
- baseclass.id 0x00b
-&subclass.id 0x20
-+subclass.name Power PC
-
- baseclass.id 0x00b
-&subclass.id 0x30
-+subclass.name MIPS
-
- baseclass.id 0x00b
-&subclass.id 0x40
-+subclass.name Co-processor
-
- baseclass.id 0x00c
-+baseclass.name Serial bus controller
-
- baseclass.id 0x00c
-&subclass.id 0x00
-+subclass.name FireWire (IEEE 1394)
-
- baseclass.id 0x00c
-&subclass.id 0x00
-&progif.id 0x00
-+progif.name Generic
-
- baseclass.id 0x00c
-&subclass.id 0x00
-&progif.id 0x10
-+progif.name OHCI
-
- baseclass.id 0x00c
-&subclass.id 0x01
-+subclass.name ACCESS Bus
-
- baseclass.id 0x00c
-&subclass.id 0x02
-+subclass.name SSA
-
- baseclass.id 0x00c
-&subclass.id 0x03
-+subclass.name USB Controller
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x00
-+progif.name UHCI
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x10
-+progif.name OHCI
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x20
-+progif.name EHCI
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x80
-+progif.name Unspecified
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0xfe
-+progif.name USB Device
-
- baseclass.id 0x00c
-&subclass.id 0x04
-+subclass.name Fibre Channel
-
- baseclass.id 0x00c
-&subclass.id 0x05
-+subclass.name SMBus
-
- baseclass.id 0x00c
-&subclass.id 0x06
-+subclass.name InfiniBand
-
- baseclass.id 0x00d
-+baseclass.name Wireless controller
-
- baseclass.id 0x00d
-&subclass.id 0x00
-+subclass.name IRDA controller
-
- baseclass.id 0x00d
-&subclass.id 0x01
-+subclass.name Consumer IR controller
-
- baseclass.id 0x00d
-&subclass.id 0x10
-+subclass.name RF controller
-
- baseclass.id 0x00d
-&subclass.id 0x80
-+subclass.name Wireless controller
-
- baseclass.id 0x00e
-+baseclass.name Intelligent controller
-
- baseclass.id 0x00e
-&subclass.id 0x00
-+subclass.name I2O
-
- baseclass.id 0x00f
-+baseclass.name Satellite communications controller
-
- baseclass.id 0x00f
-&subclass.id 0x00
-+subclass.name Satellite TV controller
-
- baseclass.id 0x00f
-&subclass.id 0x01
-+subclass.name Satellite audio communication controller
-
- baseclass.id 0x00f
-&subclass.id 0x03
-+subclass.name Satellite voice communication controller
-
- baseclass.id 0x00f
-&subclass.id 0x04
-+subclass.name Satellite data communication controller
-
- baseclass.id 0x010
-+baseclass.name Encryption controller
-
- baseclass.id 0x010
-&subclass.id 0x00
-+subclass.name Network and computing encryption device
-
- baseclass.id 0x010
-&subclass.id 0x10
-+subclass.name Entertainment encryption device
-
- baseclass.id 0x010
-&subclass.id 0x80
-+subclass.name Encryption controller
-
- baseclass.id 0x011
-+baseclass.name Signal processing controller
-
- baseclass.id 0x011
-&subclass.id 0x00
-+subclass.name DPIO module
-
- baseclass.id 0x011
-&subclass.id 0x01
-+subclass.name Performance counters
-
- baseclass.id 0x011
-&subclass.id 0x10
-+subclass.name Communication synchronizer
-
- baseclass.id 0x011
-&subclass.id 0x80
-+subclass.name Signal processing controller
-
+++ /dev/null
- vendor.id pcmcia 0x0004
-&device.id pcmcia 0x0004
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe fmvj18x_cs
-
- vendor.id pcmcia 0x000b
-&device.id pcmcia 0x7100
-|vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0777
-|vendor.id pcmcia 0x0126
-&device.id pcmcia 0x8000
-|vendor.id pcmcia 0x0250
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0x0274
-&device.id pcmcia 0x1612
-|vendor.id pcmcia 0x02d2
-&device.id pcmcia 0x0001
-|vendor.id pcmcia 0x50c2
-&device.id pcmcia 0x0001
-|vendor.id pcmcia 0xc00f
-&device.id pcmcia 0x0000
-+driver.module.modprobe hostap_cs
-
- vendor.id pcmcia 0x000b
-&device.id pcmcia 0x7300
-|vendor.id pcmcia 0x0138
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0x0156
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0x0274
-&device.id pcmcia 0x1613
-|vendor.id pcmcia 0x028a
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0xc250
-&device.id pcmcia 0x0002
-+driver.module.modprobe hostap_cs
-+driver.module.modprobe orinoco_cs
-
- vendor.id pcmcia 0x0032
-&device.id pcmcia 0x0704
-|vendor.id pcmcia 0x00a4
-&device.id pcmcia 0x002d
-|vendor.id pcmcia 0x2080
-&device.id pcmcia 0x0001
-+driver.module.modprobe ide-cs
-
- vendor.id pcmcia 0x0057
-&device.id pcmcia 0x1004
-|vendor.id pcmcia 0x0104
-&device.id pcmcia 0x000d
-|vendor.id pcmcia 0x0104
-&device.id pcmcia 0x0075
-|vendor.id pcmcia 0x0104
-&device.id pcmcia 0x0145
-|vendor.id pcmcia 0x0149
-&device.id pcmcia 0x0230
-|vendor.id pcmcia 0x0149
-&device.id pcmcia 0x4530
-|vendor.id pcmcia 0x0186
-&device.id pcmcia 0x0110
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x2216
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x2328
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x8041
-|vendor.id pcmcia 0x0213
-&device.id pcmcia 0x2452
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x0300
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x0307
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x030a
-|vendor.id pcmcia 0x0274
-&device.id pcmcia 0x1103
-|vendor.id pcmcia 0x0274
-&device.id pcmcia 0x1121
-|vendor.id pcmcia 0xc00f
-&device.id pcmcia 0x0002
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe pcnet_cs
-
- vendor.id pcmcia 0x0089
-&device.id pcmcia 0x0001
-|vendor.id pcmcia 0x01eb
-&device.id pcmcia 0x080a
-|vendor.id pcmcia 0x0261
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0x0268
-&device.id pcmcia 0x0001
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x0305
-|vendor.id pcmcia 0x028a
-&device.id pcmcia 0x0673
-|vendor.id pcmcia 0x02aa
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0x02ac
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0x14ea
-&device.id pcmcia 0xb001
-|vendor.id pcmcia 0x50c2
-&device.id pcmcia 0x7300
-|vendor.id pcmcia 0x9005
-&device.id pcmcia 0x0021
-+driver.module.modprobe orinoco_cs
-
-# tulip_cb
- vendor.id pcmcia 0x0089
-&device.id pcmcia 0x0102
-|vendor.id pcmcia 0x0089
-&device.id pcmcia 0x0113
-|vendor.id pcmcia 0x00a4
-&device.id pcmcia 0x0113
-|vendor.id pcmcia 0x0105
-&device.id pcmcia 0x0500
-|vendor.id pcmcia 0x0149
-&device.id pcmcia 0x0231
-|vendor.id pcmcia 0x0149
-&device.id pcmcia 0xc2ab
-|vendor.id pcmcia 0x0186
-&device.id pcmcia 0x0101
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x2220
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x2225
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x2227
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x8036
-|vendor.id pcmcia 0x01da
-&device.id pcmcia 0x0081
-|vendor.id pcmcia 0x01da
-&device.id pcmcia 0x0090
-|vendor.id pcmcia 0x021b
-&device.id pcmcia 0x0510
-|vendor.id pcmcia 0x022d
-&device.id pcmcia 0x2103
-|vendor.id pcmcia 0x02ac
-&device.id pcmcia 0x1012
-|vendor.id pcmcia 0x13d1
-&device.id pcmcia 0xab02+0x0002
-|vendor.id pcmcia 0x50c7
-&device.id pcmcia 0xcafe
-|vendor.id pcmcia 0x9513
-&device.id pcmcia 0x0081
-|vendor.id pcmcia 0xe815
-&device.id pcmcia 0x0081
-+baseclass.id 0x002
-+subclass.id 0x00
-
-# eepro100_cb
- vendor.id pcmcia 0x0089
-&device.id pcmcia 0x0103
-+baseclass.id 0x002
-+subclass.id 0x00
-
- vendor.id pcmcia 0x0089
-&device.id pcmcia 0x0301
-|vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0039
-|vendor.id pcmcia 0x0104
-&device.id pcmcia 0x0006
-|vendor.id pcmcia 0x0105
-&device.id pcmcia 0x410a
-|vendor.id pcmcia 0x010b
-&device.id pcmcia 0x0d50+0x0004
-|vendor.id pcmcia 0x010b
-&device.id pcmcia 0xd180
-|vendor.id pcmcia 0x0137
-&device.id pcmcia 0x000e
-|vendor.id pcmcia 0x0137
-&device.id pcmcia 0x001b
-|vendor.id pcmcia 0x0137
-&device.id pcmcia 0x0025
-|vendor.id pcmcia 0x0137
-&device.id pcmcia 0x0045
-|vendor.id pcmcia 0x0137
-&device.id pcmcia 0x0052
-|vendor.id pcmcia 0x018a
-&device.id pcmcia 0x0001
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe serial_cs
-
-# eepro100_cb
- vendor.id pcmcia 0x0089
-&device.id pcmcia 0x1103
-+baseclass.id 0x002
-+subclass.id 0x00
-
-# tulip_cb
- vendor.id pcmcia 0x00a4
-&device.id pcmcia 0x0103
-+baseclass.id 0x002
-+subclass.id 0x00
-
- vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0035
-|vendor.id pcmcia 0x0101
-&device.id pcmcia 0x003d
-|vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0562
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe 3c589_cs
-
- vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0556
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe 3c574_cs
-
- vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0574
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe 3c574_cs
-
- vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0589
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe 3c589_cs
-
- vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0620
-|vendor.id pcmcia 0x0101
-&device.id pcmcia 0x0696
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x3302
-|vendor.id pcmcia 0x01bf
-&device.id pcmcia 0xb301
-|vendor.id pcmcia 0xd601
-&device.id pcmcia 0x0007
-+driver.module.modprobe atmel_cs
-
- vendor.id pcmcia 0x0104
-&device.id pcmcia 0x0070
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe serial_cs
-
- vendor.id pcmcia 0x0105
-&device.id pcmcia 0x0007
-|vendor.id pcmcia 0x015f
-&device.id pcmcia 0x0005
-|vendor.id pcmcia 0x015f
-&device.id pcmcia 0x0007
-|vendor.id pcmcia 0x015f
-&device.id pcmcia 0x000a
-+driver.module.modprobe airo_cs
-
- vendor.id pcmcia 0x0137
-&device.id pcmcia 0x0003
-+driver.module.modprobe parport_cs
-
-# epic_cb
- vendor.id pcmcia 0x0140
-&device.id pcmcia 0x000f
-|vendor.id pcmcia 0x0140
-&device.id pcmcia 0x0012
-|vendor.id pcmcia 0x016c
-&device.id pcmcia 0x0021
-+baseclass.id 0x002
-+subclass.id 0x00
-
-# epic_cb
- vendor.id pcmcia 0x0140
-&device.id pcmcia 0x0011
-+baseclass.id 0x002
-+subclass.id 0x00
-
- vendor.id pcmcia 0x0149
-&device.id pcmcia 0xc1ab
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe axnet_cs
-+driver.module.modprobe pcnet_cs
-
- vendor.id pcmcia 0x016c
-&device.id pcmcia 0x0020
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe smc91c92_cs
-
- vendor.id pcmcia 0x016c
-&device.id pcmcia 0x0023
-|vendor.id pcmcia 0x0186
-&device.id pcmcia 0x0100
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe smc91c92_cs
-
- vendor.id pcmcia 0x0175
-&device.id pcmcia 0x0000
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe pcnet_cs
-
- vendor.id pcmcia 0x018a
-&device.id pcmcia 0x0301
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x0301
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x0303
-|vendor.id pcmcia 0x026f
-&device.id pcmcia 0x0309
-|vendor.id pcmcia 0x0274
-&device.id pcmcia 0x1106
-|vendor.id pcmcia 0x8a01
-&device.id pcmcia 0xc1ab
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe axnet_cs
-
- vendor.id pcmcia 0x01a6
-&device.id pcmcia 0x0000
-+driver.module.modprobe ray_cs
-
- vendor.id pcmcia 0x01bf
-&device.id pcmcia 0x010a
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe xirc2ps_cs
-
- vendor.id pcmcia 0x020c
-&device.id pcmcia 0x0103
-+driver.module.modprobe sedl_cs
-
- vendor.id pcmcia 0x021b
-&device.id pcmcia 0x0202
-+baseclass.id 0x002
-+subclass.id 0x00
-+driver.module.modprobe pcnet_cs
-+driver.module.modprobe axnet_cs
-
- vendor.id pcmcia 0xd601
-&device.id pcmcia 0x0002
-|vendor.id pcmcia 0xd601
-&device.id pcmcia 0x0005
-+driver.module.modprobe hostap_cs
-+driver.module.modprobe orinoco_cs
-
+++ /dev/null
-# modules.alias
-# tg3 vs. bcm5700: #34486, #36992, #38647
- vendor.id pci 0x14e4
-&device.id pci 0x1644+0x0006
-|vendor.id pci 0x14e4
-&device.id pci 0x1653+0x0002
-|vendor.id pci 0x14e4
-&device.id pci 0x165d+0x0002
-|vendor.id pci 0x14e4
-&device.id pci 0x166e
-|vendor.id pci 0x14e4
-&device.id pci 0x1696
-|vendor.id pci 0x14e4
-&device.id pci 0x169c
-|vendor.id pci 0x14e4
-&device.id pci 0x16a6+0x0003
-|vendor.id pci 0x14e4
-&device.id pci 0x16c6+0x0002
-|vendor.id pci 0x14e4
-&device.id pci 0x170d+0x0002
-+driver.module.modprobe bcm5700
-+driver.module.modprobe tg3
-
+++ /dev/null
-# special s390 hardware
- vendor.id special 0x6001
-+vendor.name IBM
-
- vendor.id special 0x6001
-&device.id special 0x1731
-&subdevice.id special 0x1732
-&detail.ccw.data.cu_model 1
-+device.name OSA Express Network card
-+baseclass.id 2
-+subclass.id 0x86
-+driver.module.modprobe qeth
-
- vendor.id special 0x6001
-&device.id special 0x1731
-&subdevice.id special 0x1732
-&detail.ccw.data.cu_model 3
-+device.name zFCP controller
-+baseclass.id 1
-+subclass.id 0
-+driver.module.modprobe zfcp
-
- vendor.id special 0x6001
-&device.id special 0x1731
-&subdevice.id special 0x1732
-&detail.ccw.data.cu_model 5
-+device.name Hipersocket
-+baseclass.id 2
-+subclass.id 0x87
-+driver.module.modprobe qeth
-
- vendor.id special 0x6001
-&device.id special 0x2540
-&baseclass.id 0x10c
-+device.name z/VM Virtual Card Reader
-
- vendor.id special 0x6001
-&device.id special 0x2540
-&baseclass.id 0x109
-+device.name z/VM Virtual Card Punch
-
- vendor.id special 0x6001
-&device.id special 0x2701
-+device.name 2701 Data Adapter
-
- vendor.id special 0x6001
-&device.id special 0x3890
-+device.name Document Processor
-
- vendor.id special 0x6001
-&device.id special 0x3250
-+device.name 3250 Display
-
- vendor.id special 0x6001
-&device.id special 0x3178
-|device.id special 0x3179
-|device.id special 0x3180
-|device.id special 0x3190
-|device.id special 0x3270
-|device.id special 0x3277
-|device.id special 0x3278
-|device.id special 0x3279
-|device.id special 0x3290
-+device.name 3270-Family Display
-+baseclass.id 0x108
-+subclass.id 1
-
- vendor.id special 0x6001
-&device.id special 0x3203
-|device.id special 0x3211
-|device.id special 0x3262
-|device.id special 0x4245
-|device.id special 0x4248
-|device.id special 0x6562
-+device.name Impact Printer
-+baseclass.id 0x109
-
- vendor.id special 0x6001
-&device.id special 0x3203
-&detail.ccw.data.cu_model 5
-+device.name z/VM Virtual Printer
-+baseclass.id 0x109
-
- vendor.id special 0x6001
-&device.id special 0x3215
-+device.name 3215 Display
-+baseclass.id 0x108
-+subclass.id 1
-
- vendor.id special 0x6001
-&device.id special 0x3990
-&subdevice.id special 0x3390
-|subdevice.id special 0x3380
-|subdevice.id special 0x3350
-|subdevice.id special 0x3330
-|subdevice.id special 0x3375
-|subdevice.id special 0x3851
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 1
-+driver.module.modprobe dasd_eckd_mod
-
- vendor.id special 0x6001
-&device.id special 0x2105
-&subdevice.id special 0x3390
-|subdevice.id special 0x3380
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 1
-+driver.module.modprobe dasd_eckd_mod
-
- vendor.id special 0x6001
-&device.id special 0x3880
-&subdevice.id special 0x3390
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 1
-+driver.module.modprobe dasd_eckd_mod
-
- vendor.id special 0x6001
-&device.id special 0x3880
-&subdevice.id special 0x3370
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 2
-+driver.module.modprobe dasd_fba_mod
-
- vendor.id special 0x6001
-&device.id special 0x9343
-&subdevice.id special 0x9345
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 1
-+driver.module.modprobe dasd_eckd_mod
-
- vendor.id special 0x6001
-&device.id special 0x6310
-&subdevice.id special 0x9336
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 2
-+driver.module.modprobe dasd_fba_mod
-
- vendor.id special 0x6001
-&device.id special 0x2107
-|device.id special 0x1750
-+device.name DASD
-+baseclass.id 0x106
-+subclass.id 0
-+progif.id 1
-+driver.module.modprobe dasd_eckd_mod
-
- vendor.id special 0x6001
-&device.id special 0x3705
-&device.id special 0x3725
-&device.id special 0x3745
-+device.name 37x5 Line Adapter
-
- vendor.id special 0x6001
-&device.id special 0x3286
-&device.id special 0x3287
-&device.id special 0x3288
-&device.id special 0x3289
-+device.name 328x Display Printer
-
- vendor.id special 0x6001
-&device.id special 0x3420
-+device.name 3420 Tape Drive
-+baseclass.id 0x106
-+subclass.id 1
-+driver.module.modprobe tape_34xx
-
- vendor.id special 0x6001
-&device.id special 0x3422
-+device.name 3422 Tape Drive
-+baseclass.id 0x106
-+subclass.id 1
-+driver.module.modprobe tape_34xx
-
- vendor.id special 0x6001
-&device.id special 0x3480
-+device.name 3480 Tape Drive
-+baseclass.id 0x106
-+subclass.id 1
-+driver.module.modprobe tape_34xx
-
- vendor.id special 0x6001
-&device.id special 0x3490
-+device.name 3490 Tape Drive
-+baseclass.id 0x106
-+subclass.id 1
-+driver.module.modprobe tape_34xx
-
- vendor.id special 0x6001
-&device.id special 0x3505
-+device.name 3505 Card Reader
-
- vendor.id special 0x6001
-&device.id special 0x3525
-+device.name 3525 Card Punch
-
- vendor.id special 0x6001
-&device.id special 0x3800
-+device.name 3800 Printer
-+baseclass.id 0x109
-
- vendor.id special 0x6001
-&device.id special 0x3820
-+device.name 3820 Printer
-+baseclass.id 0x109
-
- vendor.id special 0x6001
-&device.id special 0x5080
-+device.name 5080 Graphics Display
-
- vendor.id special 0x6001
-&device.id special 0x9032
-|device.id special 0x9033
-+device.name 903x ES Connection Director
-
- vendor.id special 0x6001
-&device.id special 0x0001
-+device.name Token ring card
-
- vendor.id special 0x6001
-&device.id special 0x3088
-&detail.ccw.data.cu_model 8
-+device.name parallel CTC Adapter
-+baseclass.id 2
-+subclass.id 0x88
-+driver.module.modprobe ctc
-
- vendor.id special 0x6001
-&device.id special 0x3088
-&detail.ccw.data.cu_model 0x1f
-+device.name ESCON Adapter
-+baseclass.id 2
-+subclass.id 0x8f
-+driver.module.modprobe ctc
-
- vendor.id special 0x6001
-&device.id special 0x3088
-&detail.ccw.data.cu_model 0x1e
-+device.name FICON Adapter
-+baseclass.id 2
-+subclass.id 0x8e
-
- vendor.id special 0x6001
-&device.id special 0x3088
-&detail.ccw.data.cu_model 1
-+device.name P/390
-+baseclass.id 2
-+subclass.id 0x89
-
- vendor.id special 0x6001
-&device.id special 0x3088
-&detail.ccw.data.cu_model 0x60
-+device.name OSA2 Adapter
-+baseclass.id 2
-+subclass.id 0x89
-+driver.module.modprobe lcs
-
- vendor.id special 0x6001
-&device.id special 0x0005
-+device.name IUCV
-+baseclass.id 2
-+subclass.id 0x90
-+driver.module.modprobe netiucv
+++ /dev/null
-# usb scanner
-
- vendor.id usb 0x03f0
-+vendor.name HP
-
- vendor.id usb 0x03f0
-&device.id usb 0x0101
-+device.name 4100C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0101+0x0002
-|vendor.id usb 0x03f0
-&device.id usb 0x0105
-|vendor.id usb 0x03f0
-&device.id usb 0x0201
-|vendor.id usb 0x03f0
-&device.id usb 0x0205
-|vendor.id usb 0x03f0
-&device.id usb 0x0305
-|vendor.id usb 0x03f0
-&device.id usb 0x0401
-|vendor.id usb 0x03f0
-&device.id usb 0x0405
-|vendor.id usb 0x03f0
-&device.id usb 0x0505
-|vendor.id usb 0x03f0
-&device.id usb 0x0601
-|vendor.id usb 0x03f0
-&device.id usb 0x0605
-|vendor.id usb 0x03f0
-&device.id usb 0x0701
-|vendor.id usb 0x03f0
-&device.id usb 0x0705
-|vendor.id usb 0x03f0
-&device.id usb 0x0801
-|vendor.id usb 0x03f0
-&device.id usb 0x0805
-|vendor.id usb 0x03f0
-&device.id usb 0x0901
-|vendor.id usb 0x03f0
-&device.id usb 0x0a01
-|vendor.id usb 0x03f0
-&device.id usb 0x1005
-|vendor.id usb 0x03f0
-&device.id usb 0x1105
-|vendor.id usb 0x03f0
-&device.id usb 0x1205
-|vendor.id usb 0x03f0
-&device.id usb 0x1305
-|vendor.id usb 0x03f0
-&device.id usb 0x1411
-|vendor.id usb 0x03f0
-&device.id usb 0x2005
-|vendor.id usb 0x03f0
-&device.id usb 0x2205
-|vendor.id usb 0x03f0
-&device.id usb 0x2f11
-|vendor.id usb 0x0400
-&device.id usb 0x1000+0x0002
-|vendor.id usb 0x043d
-&device.id usb 0x002d
-|vendor.id usb 0x043d
-&device.id usb 0x003d
-|vendor.id usb 0x0458
-&device.id usb 0x2001
-|vendor.id usb 0x0458
-&device.id usb 0x2007+0x0003
-|vendor.id usb 0x0458
-&device.id usb 0x2011
-|vendor.id usb 0x0458
-&device.id usb 0x2013
-|vendor.id usb 0x0458
-&device.id usb 0x2015+0x0002
-|vendor.id usb 0x0458
-&device.id usb 0x2018
-|vendor.id usb 0x0458
-&device.id usb 0x201b
-|vendor.id usb 0x0461
-&device.id usb 0x0300+0x0004
-|vendor.id usb 0x0461
-&device.id usb 0x0340+0x0002
-|vendor.id usb 0x0461
-&device.id usb 0x0345+0x0003
-|vendor.id usb 0x0461
-&device.id usb 0x0360+0x0002
-|vendor.id usb 0x0461
-&device.id usb 0x0364
-|vendor.id usb 0x0461
-&device.id usb 0x0371
-|vendor.id usb 0x0461
-&device.id usb 0x0377
-|vendor.id usb 0x0461
-&device.id usb 0x0380+0x0004
-|vendor.id usb 0x0475
-&device.id usb 0x0210
-|vendor.id usb 0x049f
-&device.id usb 0x001a
-|vendor.id usb 0x049f
-&device.id usb 0x0021
-|vendor.id usb 0x04a5
-&device.id usb 0x1a20
-|vendor.id usb 0x04a5
-&device.id usb 0x1a2a
-|vendor.id usb 0x04a5
-&device.id usb 0x2022
-|vendor.id usb 0x04a5
-&device.id usb 0x2040
-|vendor.id usb 0x04a5
-&device.id usb 0x2060
-|vendor.id usb 0x04a5
-&device.id usb 0x207e
-|vendor.id usb 0x04a5
-&device.id usb 0x20b0
-|vendor.id usb 0x04a5
-&device.id usb 0x20be
-|vendor.id usb 0x04a5
-&device.id usb 0x20c0
-|vendor.id usb 0x04a5
-&device.id usb 0x20de
-|vendor.id usb 0x04a5
-&device.id usb 0x20fc
-|vendor.id usb 0x04a5
-&device.id usb 0x20fe
-|vendor.id usb 0x04a7
-&device.id usb 0x0211
-|vendor.id usb 0x04a7
-&device.id usb 0x0221
-|vendor.id usb 0x04a7
-&device.id usb 0x0224
-|vendor.id usb 0x04a7
-&device.id usb 0x0226
-|vendor.id usb 0x04a7
-&device.id usb 0x0229
-|vendor.id usb 0x04a7
-&device.id usb 0x022c
-|vendor.id usb 0x04a7
-&device.id usb 0x0231
-|vendor.id usb 0x04a7
-&device.id usb 0x0311
-|vendor.id usb 0x04a7
-&device.id usb 0x0321
-|vendor.id usb 0x04a7
-&device.id usb 0x0331
-|vendor.id usb 0x04a9
-&device.id usb 0x2201+0x0002
-|vendor.id usb 0x04a9
-&device.id usb 0x2204+0x0005
-|vendor.id usb 0x04a9
-&device.id usb 0x220a+0x0007
-|vendor.id usb 0x04a9
-&device.id usb 0x2212+0x0002
-|vendor.id usb 0x04a9
-&device.id usb 0x2215
-|vendor.id usb 0x04a9
-&device.id usb 0x3042
-|vendor.id usb 0x04b0
-&device.id usb 0x4000
-|vendor.id usb 0x04b8
-&device.id usb 0x0101+0x0007
-|vendor.id usb 0x04b8
-&device.id usb 0x0109+0x0004
-|vendor.id usb 0x04b8
-&device.id usb 0x010e+0x0003
-|vendor.id usb 0x04b8
-&device.id usb 0x0112
-|vendor.id usb 0x04b8
-&device.id usb 0x0114
-|vendor.id usb 0x04b8
-&device.id usb 0x011b+0x0005
-|vendor.id usb 0x04b8
-&device.id usb 0x0801+0x0002
-|vendor.id usb 0x04c5
-&device.id usb 0x1029
-|vendor.id usb 0x04c5
-&device.id usb 0x1041+0x0002
-|vendor.id usb 0x04f9
-&device.id usb 0x010f
-|vendor.id usb 0x04f9
-&device.id usb 0x0111
-|vendor.id usb 0x055f
-&device.id usb 0x0001+0x0003
-|vendor.id usb 0x055f
-&device.id usb 0x0006+0x0003
-|vendor.id usb 0x055f
-&device.id usb 0x0010
-|vendor.id usb 0x055f
-&device.id usb 0x0210
-|vendor.id usb 0x055f
-&device.id usb 0x0218+0x0002
-|vendor.id usb 0x055f
-&device.id usb 0x021c+0x0003
-|vendor.id usb 0x055f
-&device.id usb 0x0400+0x0002
-|vendor.id usb 0x055f
-&device.id usb 0x0409
-|vendor.id usb 0x055f
-&device.id usb 0x0873
-|vendor.id usb 0x055f
-&device.id usb 0x1000
-|vendor.id usb 0x05cb
-&device.id usb 0x1483
-|vendor.id usb 0x05d8
-&device.id usb 0x4001+0x0004
-|vendor.id usb 0x05d8
-&device.id usb 0x4006
-|vendor.id usb 0x05d8
-&device.id usb 0x4009
-|vendor.id usb 0x05da
-&device.id usb 0x0099+0x0002
-|vendor.id usb 0x05da
-&device.id usb 0x00b6
-|vendor.id usb 0x05da
-&device.id usb 0x20a7
-|vendor.id usb 0x05da
-&device.id usb 0x20c9
-|vendor.id usb 0x05da
-&device.id usb 0x30ce+0x0002
-|vendor.id usb 0x05da
-&device.id usb 0x30d4
-|vendor.id usb 0x05da
-&device.id usb 0x30d8
-|vendor.id usb 0x05da
-&device.id usb 0x40b3
-|vendor.id usb 0x05da
-&device.id usb 0x40b8
-|vendor.id usb 0x05da
-&device.id usb 0x40ca+0x0002
-|vendor.id usb 0x05da
-&device.id usb 0x40dd
-|vendor.id usb 0x05da
-&device.id usb 0x40ff
-|vendor.id usb 0x05e3
-&device.id usb 0x0120
-|vendor.id usb 0x0638
-&device.id usb 0x0268
-|vendor.id usb 0x0638
-&device.id usb 0x026a
-|vendor.id usb 0x0638
-&device.id usb 0x0a10
-|vendor.id usb 0x0638
-&device.id usb 0x0a13
-|vendor.id usb 0x0638
-&device.id usb 0x0a16
-|vendor.id usb 0x0638
-&device.id usb 0x0a18
-|vendor.id usb 0x0638
-&device.id usb 0x0a20
-|vendor.id usb 0x0638
-&device.id usb 0x0a23+0x0002
-|vendor.id usb 0x0681
-&device.id usb 0x0005
-|vendor.id usb 0x0681
-&device.id usb 0x0010
-|vendor.id usb 0x0686
-&device.id usb 0x4004
-|vendor.id usb 0x0686
-&device.id usb 0x400d
-|vendor.id usb 0x06bd
-&device.id usb 0x0001+0x0002
-|vendor.id usb 0x06bd
-&device.id usb 0x0100
-|vendor.id usb 0x06bd
-&device.id usb 0x2061
-|vendor.id usb 0x06bd
-&device.id usb 0x208d
-|vendor.id usb 0x06bd
-&device.id usb 0x208f
-|vendor.id usb 0x06bd
-&device.id usb 0x2091
-|vendor.id usb 0x06bd
-&device.id usb 0x2093
-|vendor.id usb 0x06bd
-&device.id usb 0x2095
-|vendor.id usb 0x06bd
-&device.id usb 0x2097
-|vendor.id usb 0x06bd
-&device.id usb 0x20fd
-|vendor.id usb 0x06bd
-&device.id usb 0x20ff
-|vendor.id usb 0x06dc
-&device.id usb 0x0014
-|vendor.id usb 0x07b3
-&device.id usb 0x0001
-|vendor.id usb 0x07b3
-&device.id usb 0x0005
-|vendor.id usb 0x07b3
-&device.id usb 0x0007
-|vendor.id usb 0x07b3
-&device.id usb 0x000f+0x0009
-|vendor.id usb 0x07b3
-&device.id usb 0x0400+0x0002
-|vendor.id usb 0x07b3
-&device.id usb 0x0403
-|vendor.id usb 0x07b3
-&device.id usb 0x0413
-|vendor.id usb 0x0a82
-&device.id usb 0x4600
-|vendor.id usb 0x1606
-&device.id usb 0x0010
-|vendor.id usb 0x1606
-&device.id usb 0x0030
-|vendor.id usb 0x1606
-&device.id usb 0x0060
-|vendor.id usb 0x1606
-&device.id usb 0x0070
-|vendor.id usb 0x1606
-&device.id usb 0x0130
-|vendor.id usb 0x1606
-&device.id usb 0x0160
-|vendor.id usb 0x1606
-&device.id usb 0x0230
-+baseclass.id 0x10c
-+subclass.id 0x00
-
- vendor.id usb 0x03f0
-&device.id usb 0x0102
-+device.name PhotoSmart S20
-
- vendor.id usb 0x03f0
-&device.id usb 0x0105
-+device.name 4200C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0201
-+device.name 6200C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0205
-+device.name 3300C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0305
-+device.name 4300C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0401
-+device.name 5200C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0405
-+device.name 3400C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0601
-+device.name 6300C
-
- vendor.id usb 0x03f0
-&device.id usb 0x0605
-+device.name 2200C
-
- vendor.id usb 0x0400
-+vendor.name National Semiconductor
-
- vendor.id usb 0x0400
-&device.id usb 0x1000
-+device.name BearPaw 1200
-
- vendor.id usb 0x0400
-&device.id usb 0x1001
-+device.name BearPaw 2400
-
- vendor.id usb 0x0458
-+vendor.name KYE Systems
-
- vendor.id usb 0x0458
-&device.id usb 0x2001
-+device.name Genius ColorPage-Vivid Pro
-
- vendor.id usb 0x0458
-&device.id usb 0x2007
-+device.name ColorPage HR6 V2
-
- vendor.id usb 0x0458
-&device.id usb 0x2008
-+device.name Unknown 2008
-
- vendor.id usb 0x0458
-&device.id usb 0x2009
-+device.name Unknown 2009
-
- vendor.id usb 0x0458
-&device.id usb 0x2013
-+device.name Unknown 2013
-
- vendor.id usb 0x0458
-&device.id usb 0x2015
-+device.name Unknown 2015
-
- vendor.id usb 0x0458
-&device.id usb 0x2016
-+device.name Unknown 2016
-
- vendor.id usb 0x0461
-+vendor.name Colorado
-
- vendor.id usb 0x0461
-&device.id usb 0x0034
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name USB 9600
-
- vendor.id usb 0x0461
-&device.id usb 0x0300
-|vendor.id usb 0x0461
-&device.id usb 0x0302
-+device.name G2-300
-
- vendor.id usb 0x0461
-&device.id usb 0x0301
-|vendor.id usb 0x0461
-&device.id usb 0x0303
-+device.name G2E-300
-
- vendor.id usb 0x0461
-&device.id usb 0x0341
-+device.name 600U
-
- vendor.id usb 0x0461
-&device.id usb 0x0346
-+device.name 6136u
-
- vendor.id usb 0x0461
-&device.id usb 0x0361
-|vendor.id usb 0x0638
-&device.id usb 0x0268
-+device.name 1200U
-
- vendor.id usb 0x0461
-&device.id usb 0x0380
-|vendor.id usb 0x0461
-&device.id usb 0x0382
-+device.name G2-600
-
- vendor.id usb 0x0461
-&device.id usb 0x0381
-+device.name ReadyScan 636i
-
- vendor.id usb 0x0461
-&device.id usb 0x0383
-+device.name G2E-600
-
- vendor.id usb 0x04a5
-+vendor.name Acer
-
- vendor.id usb 0x04a5
-&device.id usb 0x1a20
-+device.name Prisa Acerscan 310U
-
- vendor.id usb 0x04a5
-&device.id usb 0x1a2a
-|vendor.id usb 0x04a5
-&device.id usb 0x2040
-|vendor.id usb 0x04a5
-&device.id usb 0x2060
-+device.name Prisa Acerscan 620U
-
- vendor.id usb 0x04a5
-&device.id usb 0x2022
-+device.name Vuego Scan Brisa 340U
-
- vendor.id usb 0x04a5
-&device.id usb 0x207e
-+device.name Prisa Acerscan 640BU
-
- vendor.id usb 0x04a5
-&device.id usb 0x20b0
-+device.name S2W 3300U/4300U
-
- vendor.id usb 0x04a5
-&device.id usb 0x20be
-+device.name Prisa Acerscan 640BT
-
- vendor.id usb 0x04a5
-&device.id usb 0x20c0
-+device.name Prisa Acerscan 1240UT
-
- vendor.id usb 0x04a5
-&device.id usb 0x20de
-+device.name S2W 3300U
-
- vendor.id usb 0x04a7
-+vendor.name Visioneer
-
- vendor.id usb 0x04a7
-&device.id usb 0x0211
-+device.name OneTouch 7600 USB
-
- vendor.id usb 0x04a7
-&device.id usb 0x0221
-+device.name OneTouch 5300 USB
-
- vendor.id usb 0x04a7
-&device.id usb 0x0231
-+device.name 6100 USB
-
- vendor.id usb 0x04a7
-&device.id usb 0x0311
-+device.name 6200 EPP/USB
-
- vendor.id usb 0x04a7
-&device.id usb 0x0321
-+device.name OneTouch 8100 EPP/USB
-
- vendor.id usb 0x04a7
-&device.id usb 0x0331
-+device.name OneTouch 8600 EPP/USB
-
- vendor.id usb 0x04a9
-+vendor.name Canon
-
- vendor.id usb 0x04a9
-&device.id usb 0x2202
-+device.name FB620U
-
- vendor.id usb 0x04a9
-&device.id usb 0x2207
-+device.name 1220U
-
- vendor.id usb 0x04a9
-&device.id usb 0x220b
-+device.name D646U
-
- vendor.id usb 0x04b0
-+vendor.name Nikon
-
- vendor.id usb 0x04b0
-&device.id usb 0x4000
-+device.name Coolscan IV
-
- vendor.id usb 0x04b8
-+vendor.name Epson
-
- vendor.id usb 0x04b8
-&device.id usb 0x0101
-+device.name Perfection 636U
-
- vendor.id usb 0x04b8
-&device.id usb 0x0103
-+device.name Perfection 610
-
- vendor.id usb 0x04b8
-&device.id usb 0x0104
-+device.name Perfection 1200U
-
- vendor.id usb 0x04b8
-&device.id usb 0x0106
-+device.name Stylus Scan 2500
-
- vendor.id usb 0x04b8
-&device.id usb 0x0107
-+device.name Expression 1600
-
- vendor.id usb 0x04b8
-&device.id usb 0x010a
-+device.name Perfection 1640SU
-
- vendor.id usb 0x04b8
-&device.id usb 0x010b
-+device.name Perfection 1240U
-
- vendor.id usb 0x04b8
-&device.id usb 0x010c
-+device.name Perfection 640
-
- vendor.id usb 0x04b8
-&device.id usb 0x010e
-+device.name Expression 1680
-
- vendor.id usb 0x04b8
-&device.id usb 0x0110
-+device.name Perfection 1650
-
- vendor.id usb 0x04b8
-&device.id usb 0x0112
-+device.name Perfection 2450
-
- vendor.id usb 0x04b8
-&device.id usb 0x011f
-+device.name Perfection 1670
-
- vendor.id usb 0x04ce
-+vendor.name ScanLogic
-
- vendor.id usb 0x04ce
-&device.id usb 0x0300
-|vendor.id usb 0x05da
-&device.id usb 0x0094
-|vendor.id usb 0x05da
-&device.id usb 0x00a0
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name Phantom 336CX
-
- vendor.id usb 0x055f
-+vendor.name Mustek
-
- vendor.id usb 0x055f
-&device.id usb 0x0001
-+device.name 1200 CU
-
- vendor.id usb 0x055f
-&device.id usb 0x0002
-+device.name 600 CU
-
- vendor.id usb 0x055f
-&device.id usb 0x0003
-+device.name 1200 USB
-
- vendor.id usb 0x055f
-&device.id usb 0x0006
-+device.name 1200 UB
-
- vendor.id usb 0x055f
-&device.id usb 0x0008
-+device.name 1200 CU Plus
-
- vendor.id usb 0x055f
-&device.id usb 0x0873
-+device.name 600 USB
-
- vendor.id usb 0x05d8
-+vendor.name Lifetec
-
- vendor.id usb 0x05d8
-&device.id usb 0x4002
-+device.name LT9385
-
- vendor.id usb 0x05da
-+vendor.name Microtek
-
- vendor.id usb 0x05da
-&device.id usb 0x0099
-+device.name ScanMaker X6
-
- vendor.id usb 0x05da
-&device.id usb 0x009a
-+device.name Phantom C6
-
- vendor.id usb 0x05da
-&device.id usb 0x00a3
-|vendor.id usb 0x05da
-&device.id usb 0x80a3
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name ScanMaker V6USL
-
- vendor.id usb 0x05da
-&device.id usb 0x80ac
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name ScanMaker V6UL
-
- vendor.id usb 0x0638
-+vendor.name iVina
-
- vendor.id usb 0x06bd
-+vendor.name Agfa
-
- vendor.id usb 0x06bd
-&device.id usb 0x0001
-+device.name SnapScan 1212U
-
- vendor.id usb 0x06bd
-&device.id usb 0x0002
-+device.name SnapScan 1236U
-
- vendor.id usb 0x06bd
-&device.id usb 0x0100
-+device.name SnapScan Touch
-
- vendor.id usb 0x06bd
-&device.id usb 0x2061
-+device.name SnapScan 1212U?
-
- vendor.id usb 0x06bd
-&device.id usb 0x208d
-+device.name SnapScan e40
-
- vendor.id usb 0x06bd
-&device.id usb 0x2091
-+device.name SnapScan e20
-
- vendor.id usb 0x06bd
-&device.id usb 0x2095
-+device.name SnapScan e25
-
- vendor.id usb 0x06bd
-&device.id usb 0x2097
-+device.name SnapScan e26
-
- vendor.id usb 0x07b3
-+vendor.name Plustek
-
- vendor.id usb 0x07b3
-&device.id usb 0x0011
-+device.name OpticPro UT24
-
- vendor.id usb 0x07b3
-&device.id usb 0x0017
-+device.name OpticPro UT12
-
- vendor.id usb 0x0ff5
-+vendor.name Mustek?
-
- vendor.id usb 0x0ff5
-&device.id usb 0x0010
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name BearPaw 1200F
-
- vendor.id usb 0x1606
-+vendor.name UMAX
-
- vendor.id usb 0x1606
-&device.id usb 0x0002
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name Astra 1236U
-
- vendor.id usb 0x1606
-&device.id usb 0x0010
-+device.name Astra 1220U
-
- vendor.id usb 0x1606
-&device.id usb 0x0030
-+device.name Astra 2000U
-
- vendor.id usb 0x1606
-&device.id usb 0x0130
-+device.name Astra 2100U
-
- vendor.id usb 0x1606
-&device.id usb 0x0230
-+device.name Astra 2200U
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# hp officejet
- vendor.id usb 0x03f0
-&device.id usb 0x2811
-|vendor.id usb 0x03f0
-&device.id usb 0x2911
-|vendor.id usb 0x03f0
-&device.id usb 0x2a11
-|vendor.id usb 0x03f0
-&device.id usb 0x2d11
-+requires hp-officeJet
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# 45074
- vendor.id usb 0x04b8
-&device.id usb 0x0805
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name Stylus CX6400
-
- vendor.id usb 0x04b8
-&device.id usb 0x0806
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name Stylus Photo RX600
-
- vendor.id usb 0x04b8
-&device.id usb 0x0807
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name Stylus Photo RX500
-
- vendor.id usb 0x04b8
-&device.id usb 0x0808
-+baseclass.id 0x10c
-+subclass.id 0x00
-+device.name Stylus CX5400
-
+++ /dev/null
-# sound cards
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# module info from kernel/sound/*.ko
-
- vendor.id ADS
-&device.id eisa 0x7150
-|vendor.id ADS
-&device.id eisa 0x7181
-|vendor.id AZT
-&device.id eisa 0x1022
-|vendor.id LWC
-&device.id eisa 0x1061
-|vendor.id MDK
-&device.id eisa 0x1605
-|vendor.id SMM
-&device.id eisa 0x7180
-|vendor.id TER
-&device.id eisa 0x1112
-|vendor.id TER
-&device.id eisa 0x1411
-+driver.module.modprobe snd-ad1816a
-
- vendor.id ADV
-&device.id eisa 0x550a
-+driver.module.modprobe snd-interwave-stb
-+driver.module.modprobe snd-interwave
-
- vendor.id ADV
-&device.id eisa 0x55ff
-|vendor.id CDC
-&device.id eisa 0x1111
-|vendor.id DXP
-&device.id eisa 0x3201
-|vendor.id GRV
-&device.id eisa 0x0001
-|vendor.id STB
-&device.id eisa 0x011a
-+driver.module.modprobe snd-interwave
-
- vendor.id ALS
-&device.id eisa 0x0001
-|vendor.id ALS
-&device.id eisa 0x0110
-|vendor.id ALS
-&device.id eisa 0x0120
-|vendor.id ALS
-&device.id eisa 0x0200
-|vendor.id RTL
-&device.id eisa 0x3000
-+driver.module.modprobe snd-als100
-
- vendor.id ALS
-&device.id eisa 0x0007
-|vendor.id RWB
-&device.id eisa 0x1688
-+driver.module.modprobe snd-dt019x
-
- vendor.id AZT
-&device.id eisa 0x1008
-|vendor.id AZT
-&device.id eisa 0x2320
-|vendor.id AZT
-&device.id eisa 0x3000
-|vendor.id AZT
-&device.id eisa 0x3002
-|vendor.id AZT
-&device.id eisa 0x3005
-|vendor.id AZT
-&device.id eisa 0x3011
-+driver.module.modprobe snd-azt2320
-
- vendor.id CMI
-&device.id eisa 0x0001
-+driver.module.modprobe snd-cmi8330
-
- vendor.id CSC
-&device.id eisa 0x0000
-|vendor.id CSC
-&device.id eisa 0x0100
-|vendor.id GIM
-&device.id eisa 0x0100
-+driver.module.modprobe cs4232
-
- vendor.id CSC
-&device.id eisa 0x0225
-|vendor.id CSC
-&device.id eisa 0x0437
-|vendor.id CSC
-&device.id eisa 0x0735
-|vendor.id CSC
-&device.id eisa 0x0b35+0x0002
-|vendor.id CSC
-&device.id eisa 0x1335
-|vendor.id CSC
-&device.id eisa 0x1425
-|vendor.id CSC
-&device.id eisa 0x1525
-|vendor.id CSC
-&device.id eisa 0x1e37
-|vendor.id CSC
-&device.id eisa 0x4237
-|vendor.id CSC
-&device.id eisa 0x4336
-|vendor.id CSC
-&device.id eisa 0x4536
-|vendor.id CSC
-&device.id eisa 0x4625
-|vendor.id CSC
-&device.id eisa 0x4637
-|vendor.id CSC
-&device.id eisa 0x4837
-|vendor.id CSC
-&device.id eisa 0x6835+0x0002
-|vendor.id CSC
-&device.id eisa 0x7537
-|vendor.id CSC
-&device.id eisa 0x8025
-|vendor.id CSC
-&device.id eisa 0x8037
-|vendor.id CSC
-&device.id eisa 0x9836+0x0002
-|vendor.id CSC
-&device.id eisa 0xa836
-|vendor.id CSC
-&device.id eisa 0xc835
-|vendor.id CSC
-&device.id eisa 0xd925
-|vendor.id CSC
-&device.id eisa 0xd937
-|vendor.id CSC
-&device.id eisa 0xe825
-|vendor.id CSC
-&device.id eisa 0xe835+0x0002
-|vendor.id CSC
-&device.id eisa 0xe936
-|vendor.id CSC
-&device.id eisa 0xf235
-|vendor.id CSC
-&device.id eisa 0xf238
-+driver.module.modprobe snd-cs4236
-
- vendor.id CSC
-&device.id eisa 0x0d32
-|vendor.id CSC
-&device.id eisa 0x1a32
-|vendor.id CSC
-&device.id eisa 0x4232
-|vendor.id CSC
-&device.id eisa 0xf032
-+driver.module.modprobe snd-cs4232
-
- vendor.id CSC
-&device.id eisa 0x4236
-+driver.module.modprobe snd-cs4232
-+driver.module.modprobe snd-cs4236
-
- vendor.id CSC
-&device.id eisa 0x7532
-|vendor.id CSC
-&device.id eisa 0x7632
-+driver.module.modprobe snd-cs4232
-+driver.module.modprobe snd-wavefront
-
- vendor.id CTL
-&device.id eisa 0x0024+0x0009
-|vendor.id CTL
-&device.id eisa 0x0051
-|vendor.id CTL
-&device.id eisa 0x0070
-|vendor.id CTL
-&device.id eisa 0x0080
-|vendor.id CTL
-&device.id eisa 0x0086
-|vendor.id CTL
-&device.id eisa 0x00f0
-+driver.module.modprobe snd-sb16
-
- vendor.id CTL
-&device.id eisa 0x0035
-|vendor.id CTL
-&device.id eisa 0x0039
-|vendor.id CTL
-&device.id eisa 0x0042+0x0007
-|vendor.id CTL
-&device.id eisa 0x0054
-|vendor.id CTL
-&device.id eisa 0x009a
-|vendor.id CTL
-&device.id eisa 0x009c+0x0004
-|vendor.id CTL
-&device.id eisa 0x00b2
-|vendor.id CTL
-&device.id eisa 0x00c1
-|vendor.id CTL
-&device.id eisa 0x00c3
-|vendor.id CTL
-&device.id eisa 0x00c5
-|vendor.id CTL
-&device.id eisa 0x00c7
-|vendor.id CTL
-&device.id eisa 0x00e4
-|vendor.id CTL
-&device.id eisa 0x00e9
-|vendor.id CTL
-&device.id eisa 0x00ed
-+driver.module.modprobe snd-sbawe
-
- vendor.id ENS
-&device.id eisa 0x3081
-+driver.module.modprobe snd-sscape
-
- vendor.id ESS
-&device.id eisa 0x0003
-|vendor.id ESS
-&device.id eisa 0x1868+0x0002
-|vendor.id ESS
-&device.id eisa 0x1878+0x0002
-+driver.module.modprobe snd-es18xx
-
- vendor.id ESS
-&device.id eisa 0x0968
-+driver.module.modprobe snd-es968
-
- vendor.id NMX
-&device.id eisa 0x2200
-|vendor.id YMH
-&device.id eisa 0x0020
-|vendor.id YMH
-&device.id eisa 0x0030
-|vendor.id YMH
-&device.id eisa 0x0800+0x0002
-+driver.module.modprobe snd-opl3sa2
-
- vendor.id OPT
-&device.id eisa 0x0924+0x0002
-+driver.module.modprobe snd-opti92x-cs4231
-+driver.module.modprobe snd-opti92x-ad1848
-
- vendor.id OPT
-&device.id eisa 0x0931
-+driver.module.modprobe snd-opti93x
-
- vendor.id YMH
-&device.id eisa 0x0021
-+driver.module.modprobe opl3sa2
-
- vendor.id usb 0x041e
-&device.id usb 0x3010
-|vendor.id usb 0x0499
-&device.id usb 0x1000+0x000b
-|vendor.id usb 0x0499
-&device.id usb 0x100e+0x0008
-|vendor.id usb 0x0499
-&device.id usb 0x1017+0x0006
-|vendor.id usb 0x0499
-&device.id usb 0x101e
-|vendor.id usb 0x0499
-&device.id usb 0x1020+0x000c
-|vendor.id usb 0x0499
-&device.id usb 0x102e
-|vendor.id usb 0x0499
-&device.id usb 0x1030+0x000d
-|vendor.id usb 0x0499
-&device.id usb 0x2000+0x0003
-|vendor.id usb 0x0499
-&device.id usb 0x5000+0x0009
-|vendor.id usb 0x0499
-&device.id usb 0x500a+0x0003
-|vendor.id usb 0x0499
-&device.id usb 0x7000
-|vendor.id usb 0x0499
-&device.id usb 0x7010
-|vendor.id usb 0x0582
-&device.id usb 0x0000
-|vendor.id usb 0x0582
-&device.id usb 0x0002+0x0004
-|vendor.id usb 0x0582
-&device.id usb 0x0007+0x0003
-|vendor.id usb 0x0582
-&device.id usb 0x000b+0x0002
-|vendor.id usb 0x0582
-&device.id usb 0x0010
-|vendor.id usb 0x0582
-&device.id usb 0x0012
-|vendor.id usb 0x0582
-&device.id usb 0x0014
-|vendor.id usb 0x0582
-&device.id usb 0x0016
-|vendor.id usb 0x0582
-&device.id usb 0x001b
-|vendor.id usb 0x0582
-&device.id usb 0x001d
-|vendor.id usb 0x0582
-&device.id usb 0x0023
-|vendor.id usb 0x0582
-&device.id usb 0x0025
-|vendor.id usb 0x0582
-&device.id usb 0x0027
-|vendor.id usb 0x0582
-&device.id usb 0x0029
-|vendor.id usb 0x0582
-&device.id usb 0x002b
-|vendor.id usb 0x0582
-&device.id usb 0x002d
-|vendor.id usb 0x0582
-&device.id usb 0x002f
-|vendor.id usb 0x0582
-&device.id usb 0x0033
-|vendor.id usb 0x0582
-&device.id usb 0x0037
-|vendor.id usb 0x0582
-&device.id usb 0x003b
-|vendor.id usb 0x0582
-&device.id usb 0x0040
-|vendor.id usb 0x0582
-&device.id usb 0x0044
-|vendor.id usb 0x0582
-&device.id usb 0x0048
-|vendor.id usb 0x0582
-&device.id usb 0x004d
-|vendor.id usb 0x0582
-&device.id usb 0x0050
-|vendor.id usb 0x0582
-&device.id usb 0x0052
-|vendor.id usb 0x0582
-&device.id usb 0x0065
-|vendor.id usb 0x0763
-&device.id usb 0x1002
-|vendor.id usb 0x0763
-&device.id usb 0x1011
-|vendor.id usb 0x0763
-&device.id usb 0x1015
-|vendor.id usb 0x0763
-&device.id usb 0x1021
-|vendor.id usb 0x0763
-&device.id usb 0x1033
-|vendor.id usb 0x0763
-&device.id usb 0x1041
-|vendor.id usb 0x0763
-&device.id usb 0x2001
-|vendor.id usb 0x0763
-&device.id usb 0x2003
-|vendor.id usb 0x0763
-&device.id usb 0x2008
-|vendor.id usb 0x0763
-&device.id usb 0x200d
-|vendor.id usb 0x07fd
-&device.id usb 0x0001
-|vendor.id usb 0x0ccd
-&device.id usb 0x0013
-+driver.module.modprobe snd-usb-audio
-
- vendor.id usb 0x1604
-&device.id usb 0x8001
-|vendor.id usb 0x1604
-&device.id usb 0x8005
-|vendor.id usb 0x1604
-&device.id usb 0x8007
-+driver.module.modprobe snd-usb-usx2y
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-# ppc audio
- vendor.id special 0x0401
-&device.id special 0x0010+0x0004
-+driver.module.modprobe dmasound
-
-# ppc audio
- vendor.id special 0x0402
-&device.id special 0x0014
-+driver.module.modprobe cs4232
-
-# AMD7930
- vendor.id special 0x4001
-&device.id special 0x2001
-+driver.module.modprobe amd7930
-
-# CS4231
- vendor.id special 0x4001
-&device.id special 0x2002+0x0002
-+driver.module.modprobe cs4231
-
-# SS10/SS20 DBRI
- vendor.id special 0x4001
-&device.id special 0x2004
-+driver.module.modprobe dbri
-
+++ /dev/null
-# special ids
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# adb devices
-
- vendor.id special 0x0100
-+vendor.name Apple
-
- vendor.id special 0x0100
-&device.id special 0x0201
-+device.name ADB Keyboard 1
-
- vendor.id special 0x0100
-&device.id special 0x0203
-+device.name ADB Keyboard 3
-
- vendor.id special 0x0100
-&device.id special 0x0302
-+device.name ADB Mouse
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# generic mice
-
- vendor.id special 0x0200
-+vendor.name Unknown
-
- vendor.id special 0x0200
-&device.id special 0x0001
-+device.name Generic USB Mouse
-
- vendor.id special 0x0200
-&device.id special 0x0002
-+device.name Generic PS/2 Mouse
-
- vendor.id special 0x0200
-&device.id special 0x0003
-+device.name MS-Compatible Serial Mouse
-
- vendor.id special 0x0200
-&device.id special 0x0004
-+device.name Intelli/Wheel Mouse
-
- vendor.id special 0x0200
-&device.id special 0x0005
-+device.name Intelli/Wheel Mouse
-
- vendor.id special 0x0200
-&device.id special 0x0006
-+device.name Touch Pad
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# pc keyboards
-# ids > 1 are keyboard ids as read via keyboard id command
-
- vendor.id special 0x0201
-+vendor.name Unknown
-
- vendor.id special 0x0201
-&device.id special 0x0000
-+device.name PC Keyboard
-
- vendor.id special 0x0201
-&device.id special 0x0001
-+device.name PS/2 Keyboard
-
- vendor.id special 0x0201
-&device.id special 0x0002
-+device.name UML Keyboard
-
- vendor.id special 0x0201
-&device.id special 0x41ab
-+device.name MF2 Keyboard
-
- vendor.id special 0x0202
-+vendor.name Sun Microsystems
-
- vendor.id special 0x0202
-&device.id special 0x0000
-+device.name Sun Mouse
-
- vendor.id special 0x0202
-&device.id special 0x0002
-+device.name Type-2 Keyboard
-
- vendor.id special 0x0202
-&device.id special 0x0003
-+device.name Type-3 Keyboard
-
- vendor.id special 0x0202
-&device.id special 0x0004
-+device.name Type-4 Keyboard
-
- vendor.id special 0x0202
-&device.id special 0x0005
-+device.name Type-5 Keyboard
-
- vendor.id special 0x0202
-&device.id special 0x0005
-&subvendor.id special 0x0202
-&subdevice.id special 0x0001
-+subdevice.name Type-5 Unix Keyboard
-
- vendor.id special 0x0202
-&device.id special 0x0005
-&subvendor.id special 0x0202
-&subdevice.id special 0x0002
-+subdevice.name Type-5 Euro Keyboard
-
- vendor.id special 0x0203
-+vendor.name Unknown
-
- vendor.id special 0x0203
-&device.id special 0x0000
-+device.name Serial Console
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# Mac colors
-
- vendor.id special 0x0300
-&device.id special 0x0001
-+device.name Blueberry
-
- vendor.id special 0x0300
-&device.id special 0x0004
-+device.name Lime
-
- vendor.id special 0x0300
-&device.id special 0x0005
-+device.name Tangerine
-
- vendor.id special 0x0300
-&device.id special 0x0007
-+device.name Black
-
- vendor.id special 0x0300
-&device.id special 0x0008
-+device.name Snow
-
- vendor.id special 0x0300
-&device.id special 0x00ff
-+device.name Graphite
-
-# Strawberry, Grape, Ruby, Indigo, Sage
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# special ppc hardware; ids shared with special 0x0402
-
- vendor.id special 0x0401
-+vendor.name Apple
-
- vendor.id special 0x0401
-&device.id special 0x0010
-+device.name Integrated Sound (awacs)
-
- vendor.id special 0x0401
-&device.id special 0x0011
-+device.name Integrated Sound (screamer)
-
- vendor.id special 0x0401
-&device.id special 0x0012
-+device.name Integrated Sound (burgundy)
-
- vendor.id special 0x0401
-&device.id special 0x0013
-+device.name Integrated Sound (daca)
-
- vendor.id special 0x0401
-&device.id special 0x0020
-+device.name MACE Ethernet Controller
-
- vendor.id special 0x0401
-&device.id special 0x0021
-+device.name BMAC Ethernet Controller
-
- vendor.id special 0x0401
-&device.id special 0x0022
-+device.name BMAC+ Ethernet Controller
-
- vendor.id special 0x0401
-&device.id special 0x0030
-+device.name MESH SCSI Controller
-
- vendor.id special 0x0401
-&device.id special 0x0031
-+device.name 53c94 SCSI Controller
-
- vendor.id special 0x0401
-&device.id special 0x0040
-+device.name Super Woz Integrated Machine 3
-
- vendor.id special 0x0401
-&device.id special 0x1000
-+device.name 21" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1114
-+device.name Portrait Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1221
-+device.name 12" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1331
-+device.name 21" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1334
-+device.name 21" Monitor (mono)
-
- vendor.id special 0x0401
-&device.id special 0x1335
-+device.name 21" Monitor (mono)
-
- vendor.id special 0x0401
-&device.id special 0x140a
-+device.name NTSC Monitor
-
- vendor.id special 0x0401
-&device.id special 0x151e
-+device.name Portrait Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1603
-+device.name 16" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x160b
-+device.name 19" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1623
-+device.name 21" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x162b
-+device.name 14" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1700
-+device.name PAL Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1714
-+device.name NTSC Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1717
-+device.name VGA Monitor
-
- vendor.id special 0x0401
-&device.id special 0x172d
-+device.name 16" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x1730
-+device.name PAL Monitor
-
- vendor.id special 0x0401
-&device.id special 0x173a
-+device.name 19" Monitor
-
- vendor.id special 0x0401
-&device.id special 0x173f
-+device.name Unknown Monitor
-
- vendor.id special 0x0401
-&device.id special 0x2000
-+device.name 800x600 LCD
-
- vendor.id special 0x0401
-&device.id special 0x2001
-+device.name 1024x768 LCD
-
- vendor.id special 0x0401
-&device.id special 0x3000
-+device.name Valkyrie
-
- vendor.id special 0x0401
-&device.id special 0x3001
-+device.name Platinum
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# chrp hardware; ids shared with special 0x0401
-
- vendor.id special 0x0402
-+vendor.name IBM
-
- vendor.id special 0x0402
-&device.id special 0x0014
-+device.name CS4236B
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# parport zip controller
-
- vendor.id special 0x1800
-+vendor.name Iomega
-
- vendor.id special 0x1800
-&device.id special 0x0001
-+device.name MatchMaker
-
- vendor.id special 0x1800
-&device.id special 0x0002
-+device.name PPA3
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# modem
-
- vendor.id special 0x2000
-+vendor.name Unknown
-
- vendor.id special 0x2000
-&device.id special 0x0001
-+baseclass.id 0x102
-+subclass.id 0x00
-+device.name AT Modem
-
- vendor.id special 0x2001
-+vendor.name U.S. Robotics, Inc.
-
- vendor.id special 0x2001
-&device.id special 0x0001
-+baseclass.id 0x102
-+subclass.id 0x00
-+device.name USRobotics Sportster Vi 33600 Faxmodem
-
- vendor.id special 0x2002
-+vendor.name 3Com U.S. Robotics, Inc.
-
- vendor.id special 0x2002
-&device.id special 0x0001
-+baseclass.id 0x102
-+subclass.id 0x00
-+device.name 3Com U.S. Robotics ISDN Pro TA
-
- vendor.id special 0x2003
-+vendor.name ZyXEL
-
- vendor.id special 0x2003
-&device.id special 0x0001
-+baseclass.id 0x102
-+subclass.id 0x00
-+device.name U1496C
-
- vendor.id special 0x2004
-+vendor.name Zoom Telephonics, Inc.
-
- vendor.id special 0x2004
-&device.id special 0x0001
-+baseclass.id 0x102
-+subclass.id 0x00
-+device.name Zoom FaxModem V.34X Plus Model 2836
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# isa isdn cards
-
- vendor.id special 0x3000
-+vendor.name Unknown
-
- vendor.id special 0x3001
-+vendor.name Teles
-
- vendor.id special 0x3001
-&device.id special 0x0100
-+device.name Teles 16.0
-
- vendor.id special 0x3001
-&device.id special 0x0101
-+device.name Teles 16.0 AB
-
- vendor.id special 0x3003
-+vendor.name Teles
-
- vendor.id special 0x3003
-&device.id special 0x0300
-+device.name Teles 16.3
-
- vendor.id special 0x3003
-&device.id special 0x0301
-+device.name Teles 16.3 AB Video
-
- vendor.id special 0x3005
-+vendor.name AVM
-
- vendor.id special 0x3005
-&device.id special 0x0500
-+device.name AVM A1 or Fritz!Classic
-
- vendor.id special 0x3006
-+vendor.name Elsa
-
- vendor.id special 0x3006
-&device.id special 0x0601
-+device.name Elsa ML PC
-
- vendor.id special 0x3006
-&device.id special 0x0602
-+device.name Elsa ML PCC-8
-
- vendor.id special 0x3006
-&device.id special 0x0603
-+device.name Elsa ML PCC-16
-
- vendor.id special 0x3006
-&device.id special 0x0604
-+device.name Elsa ML PCF
-
- vendor.id special 0x3006
-&device.id special 0x0605
-+device.name Elsa ML PCF-Pro
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# sbus cards
-
- vendor.id special 0x4001
-+vendor.name Sun Microsystems
-
-
-# Grafik cards
- vendor.id special 0x4001
-&device.id special 0x0001
-+device.name Sun|Monochrome (bwtwo)
-
- vendor.id special 0x4001
-&device.id special 0x0002
-+device.name Sun|Color3 (cgthree)
-
- vendor.id special 0x4001
-&device.id special 0x0003
-+device.name Sun|CG8/RasterOps (cgeight)
-
- vendor.id special 0x4001
-&device.id special 0x0004
-+device.name Sun|GS (cgtwelve)
-
- vendor.id special 0x4001
-&device.id special 0x0005
-+device.name Sun|Graphics Tower (gt)
-
- vendor.id special 0x4001
-&device.id special 0x0006
-+device.name Quantum 3D MGXplus with 4M VRAM (mgx)
-
- vendor.id special 0x4001
-&device.id special 0x0007
-+device.name Quantum 3D MGXplus (mgx)
-
- vendor.id special 0x4001
-&device.id special 0x0008
-+device.name Sun|Double width GX (cgsix)
-
- vendor.id special 0x4001
-&device.id special 0x0009
-+device.name Sun|Single width GX (cgsix)
-
- vendor.id special 0x4001
-&device.id special 0x000a
-+device.name Sun|Turbo GX with 1M VSIMM (cgsix)
-
- vendor.id special 0x4001
-&device.id special 0x000b
-+device.name Sun|Turbo GX Plus (cgsix)
-
- vendor.id special 0x4001
-&device.id special 0x000c
-+device.name Sun|Turbo GX (cgsix)
-
- vendor.id special 0x4001
-&device.id special 0x000d
-+device.name Sun|Unknown GX (cgsix)
-
- vendor.id special 0x4001
-&device.id special 0x000e
-+device.name Sun|SX with 4M VSIMM (cgfourteen)
-
- vendor.id special 0x4001
-&device.id special 0x000f
-+device.name Sun|SX with 8M VSIMM (cgfourteen)
-
- vendor.id special 0x4001
-&device.id special 0x0010
-+device.name Sun|SX (cgfourteen)
-
- vendor.id special 0x4001
-&device.id special 0x0011
-+device.name Sun|ZX or Turbo ZX (leo)
-
- vendor.id special 0x4001
-&device.id special 0x0012
-+device.name Sun|Turbo ZX (leo)
-
- vendor.id special 0x4001
-&device.id special 0x0013
-+device.name Sun|TCX (8bit)
-
- vendor.id special 0x4001
-&device.id special 0x0014
-+device.name Sun|TCX (S24)
-
- vendor.id special 0x4001
-&device.id special 0x0015
-+device.name Sun|Elite3D-M6 Horizontal (afb)
-
- vendor.id special 0x4001
-&device.id special 0x0016
-+device.name Sun|Elite3D (afb)
-
- vendor.id special 0x4001
-&device.id special 0x0017
-+device.name Sun|FFB 67MHz Creator (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x0018
-+device.name Sun|FFB 67MHz Creator 3D (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x0019
-+device.name Sun|FFB 75MHz Creator 3D (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x001a
-+device.name Sun|FFB2 Vertical Creator (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x001b
-+device.name Sun|FFB2 Vertical Creator 3D (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x001c
-+device.name Sun|FFB2+ Vertical Creator (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x001d
-+device.name Sun|FFB2+ Vertical Creator 3D (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x001e
-+device.name Sun|FFB2 Horizontal Creator (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x001f
-+device.name Sun|FFB2 Horizontal Creator 3D (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x0020
-+device.name Sun|FFB [unknown type] (ffb)
-
- vendor.id special 0x4001
-&device.id special 0x1001
-+device.name Sun Enhanced SCSI Processor (ESP)
-
- vendor.id special 0x4001
-&device.id special 0x1002
-+device.name Sun Swift (ESP)
-
- vendor.id special 0x4001
-&device.id special 0x1003
-+device.name Performance Technologies ISP
-
- vendor.id special 0x4001
-&device.id special 0x1004
-+device.name QLogic ISP
-
- vendor.id special 0x4001
-&device.id special 0x1101
-+device.name Sun SPARCStorage Array (fc4)
-
- vendor.id special 0x4001
-&device.id special 0x1102
-+device.name Sun Enterprise Network Array (fc4)
-
-
-# audio chips
- vendor.id special 0x4001
-&device.id special 0x2001
-+device.name AMD7930
-
- vendor.id special 0x4001
-&device.id special 0x2002
-+device.name CS4231 EB2 DMA
-
- vendor.id special 0x4001
-&device.id special 0x2003
-+device.name CS4231 APC DMA
-
- vendor.id special 0x4001
-&device.id special 0x2004
-+device.name SS10/SS20 DBRI
-
-
-# Network cards
- vendor.id special 0x4001
-&device.id special 0x3001
-+device.name Sun Happy Meal Ethernet
-
- vendor.id special 0x4001
-&device.id special 0x3002
-+device.name Sun Lance Ethernet
-
- vendor.id special 0x4001
-&device.id special 0x3003
-+device.name Sun Quad Ethernet
-
- vendor.id special 0x4001
-&device.id special 0x3004
-+device.name MyriCOM MyriNET Gigabit Ethernet
-
-
-# iSeries network
- vendor.id special 0x6001
-&device.id special 0x1000
-+driver.module.modprobe iseries_veth
-
-# IBM vscsi
- vendor.id special 0x6001
-&device.id special 0x1001
-+driver.module.modprobe ibmvscsic
-
-
-# IBM veth
- vendor.id special 0x6001
-&device.id special 0x1002
-+driver.module.modprobe ibmveth
-
-
-# UML veth
- vendor.id special 0x6010
-+vendor.name UML
-
-
-# internal: usb scanner driver list
- vendor.id special 0xf000
-&device.id special 0x0001
-+driver.module.modprobe usbscanner
-+driver.module.modprobe microtek
-
-
-# internal: special notebook packages
-# see int.c::int_system()
- vendor.id special 0xf001
-&device.id special 0x0001
-+device.name IBM Notebook
-+requires tpctl|tpconfig|tpb|configure-thinkpad
-
- vendor.id special 0xf001
-&device.id special 0x0002
-+device.name Toshiba Notebook
-+requires toshutils|fnfx
-
- vendor.id special 0xf001
-&device.id special 0x0003
-+device.name Sony Notebook
-+requires spicctrl
-
- vendor.id special 0xf001
-&device.id special 0x0004
-+device.name HP Notebook
-+driver.module.modprobe thermal|fan
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# altix things
-
- vendor.id special 0x4002
-+vendor.name SGI
-
-# look at net.c if module name changes
- vendor.id special 0x4002
-&device.id special 0x0001
-+device.name Cross Partition Network adapter
-+driver.module.modprobe xpnet
-
+++ /dev/null
-# storage controller
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# scsi controller
-
-# modinfo
- vendor.id pci 0x1000
-&device.id pci 0x0001+0x0006
-|vendor.id pci 0x1000
-&device.id pci 0x000a+0x0004
-|vendor.id pci 0x1000
-&device.id pci 0x000f+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x0012+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x0020+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x008f
-+driver.module.modprobe sym53c8xx
-
-# message/fusion/
- vendor.id pci 0x1000
-&device.id pci 0x0030
-|vendor.id pci 0x1000
-&device.id pci 0x0621+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x0624
-|vendor.id pci 0x1000
-&device.id pci 0x0626
-|vendor.id pci 0x1000
-&device.id pci 0x0628
-+driver.module.modprobe mptscsih
-
- vendor.id pci 0x1014
-&device.id pci 0x0096
-+driver.module.modprobe ibmsis
-
-# modinfo
- vendor.id pci 0x1000
-&device.id pci 0x0407
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-|vendor.id pci 0x101e
-&device.id pci 0x1960
-|vendor.id pci 0x101e
-&device.id pci 0x9010
-|vendor.id pci 0x101e
-&device.id pci 0x9060
-|vendor.id pci 0x1028
-&device.id pci 0x000e+0x0002
-|vendor.id pci 0x8086
-&device.id pci 0x1960
-+driver.module.modprobe megaraid
-
-# modinfo
- vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0530+0x0003
-|vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0531
-|vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0530
-|vendor.id pci 0x1000
-&device.id pci 0x0407
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0532
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0001+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x004d
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0001+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x1734
-&subdevice.id pci 0x1065
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3431
-|vendor.id pci 0x1000
-&device.id pci 0x0408
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3499
-|vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x3004
-|vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x3008
-|vendor.id pci 0x1000
-&device.id pci 0x0409
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x3008
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0518
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0520
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x0522+0x0002
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0x4523
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1000
-&subdevice.id pci 0xa520
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0518
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0520
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0520
-|vendor.id pci 0x1000
-&device.id pci 0x1960
-&subvendor.id pci 0x8086
-&subdevice.id pci 0x0523
-|vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0471
-|vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0475
-|vendor.id pci 0x101e
-&device.id pci 0x1960
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0493
-|vendor.id pci 0x1028
-&device.id pci 0x000e
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0123
-|vendor.id pci 0x1028
-&device.id pci 0x000f
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x014a
-|vendor.id pci 0x1028
-&device.id pci 0x0013
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x016c+0x0005
-+driver.module.modprobe megaraid_mbox
-
-# override qla1280 info (#26325)
- vendor.id pci 0x1077
-&device.id pci 0x1216
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x8493
-|vendor.id pci 0x1077
-&device.id pci 0x1216
-&subvendor.id pci 0x101e
-&subdevice.id pci 0x8471
-+driver.module.modprobe megaraid
-
-# modinfo
- vendor.id pci 0x1022
-&device.id pci 0x2020
-+driver.module.modprobe tmscsim
-
-# scsi/fdomain.c
- vendor.id pci 0x1036
-&device.id pci 0x0000
-+driver.module.modprobe fdomain
-
-# scsi/eata_dma.c
- vendor.id pci 0x1044
-&device.id pci 0xa400
-+driver.module.modprobe eata
-
-# scsi/dpti.c
- baseclass.id 0x00e
-&subclass.id 0x00
-&vendor.id pci 0x1044
-&device.id pci 0xa501
-|baseclass.id 0x00e
-&subclass.id 0x00
-&vendor.id pci 0x1044
-&device.id pci 0xa511
-+driver.module.modprobe dpt_i2o
-
-# scsi/BusLogic.c
- vendor.id pci 0x104b
-&device.id pci 0x0140
-|vendor.id pci 0x104b
-&device.id pci 0x1040
-|vendor.id pci 0x104b
-&device.id pci 0x8130
-+driver.module.modprobe BusLogic
-
-# scsi/qla1280.c
- vendor.id pci 0x1077
-&device.id pci 0x1016
-|vendor.id pci 0x1077
-&device.id pci 0x1080
-|vendor.id pci 0x1077
-&device.id pci 0x1216
-|vendor.id pci 0x1077
-&device.id pci 0x1240
-|vendor.id pci 0x1077
-&device.id pci 0x1280
-+driver.module.modprobe qla1280
-
-# scsi/qlogicisp.c
- vendor.id pci 0x1077
-&device.id pci 0x1020
-+driver.module.modprobe qlogicisp
-
-# scsi/qlogicfc.c
- vendor.id pci 0x1077
-&device.id pci 0x2100
-+driver.module.modprobe qlogicfc
-
- vendor.id pci 0x1077
-&device.id pci 0x2200
-+driver.module.modprobe qla2200
-+driver.module.modprobe qlogicfc
-
- vendor.id pci 0x1077
-&device.id pci 0x2300
-|vendor.id pci 0x1077
-&device.id pci 0x2312
-+driver.module.modprobe qla2300
-
-# scsi/inia100.c
- vendor.id pci 0x1101
-&device.id pci 0x0002
-|vendor.id pci 0x1101
-&device.id pci 0x1060
-+driver.module.modprobe a100u2w
-
-# scsi/ini9100u.c
- vendor.id pci 0x1101
-&device.id pci 0x9400+0x0002
-|vendor.id pci 0x1101
-&device.id pci 0x9500
-|vendor.id pci 0x134a
-&device.id pci 0x0002
-+driver.module.modprobe initio
-
-# scsi/gdth.c
- vendor.id pci 0x1119
-&device.id pci 0x0000+0x000e
-|vendor.id pci 0x1119
-&device.id pci 0x0100+0x0300
-|vendor.id pci 0x8086
-&device.id pci 0x0600
-+driver.module.modprobe gdth
-
-# scsi/atp870u.c
- vendor.id pci 0x1191
-&device.id pci 0x8002
-|vendor.id pci 0x1191
-&device.id pci 0x8010
-|vendor.id pci 0x1191
-&device.id pci 0x8020
-|vendor.id pci 0x1191
-&device.id pci 0x8030
-|vendor.id pci 0x1191
-&device.id pci 0x8040
-|vendor.id pci 0x1191
-&device.id pci 0x8050
-|vendor.id pci 0x1191
-&device.id pci 0x8060
-+driver.module.modprobe atp870u
-
-# scsi/pci2220i.c
- vendor.id pci 0x1256
-&device.id pci 0x4401
-+driver.module.modprobe pci2220i
-
-# scsi/pci2000.c
- vendor.id pci 0x1256
-&device.id pci 0x5201
-+driver.module.modprobe pci2000
-
-# scsi/dmx3191d.c
- vendor.id pci 0x134a
-&device.id pci 0x0001
-+driver.module.modprobe dmx3191d
-
-# scsi/3w-xxxx.c
- vendor.id pci 0x13c1
-&device.id pci 0x1000+0x0002
-+driver.module.modprobe 3w-xxxx
-
-# modules.alias
- vendor.id pci 0x1de1
-&device.id pci 0x0391
-+driver.module.modprobe dc395x
-
-# scsi/aic7xxx/{aic7xxx_pci.c,aic79xx_pci.c}
- vendor.id pci 0x9004
-&device.id pci 0x0078
-|vendor.id pci 0x9004
-&device.id pci 0x1078
-|vendor.id pci 0x9004
-&device.id pci 0x2178
-|vendor.id pci 0x9004
-&device.id pci 0x3860
-|vendor.id pci 0x9004
-&device.id pci 0x5078
-|vendor.id pci 0x9004
-&device.id pci 0x5578
-|vendor.id pci 0x9004
-&device.id pci 0x6038
-|vendor.id pci 0x9004
-&device.id pci 0x6075
-|vendor.id pci 0x9004
-&device.id pci 0x6078
-|vendor.id pci 0x9004
-&device.id pci 0x6178
-|vendor.id pci 0x9004
-&device.id pci 0x7078
-|vendor.id pci 0x9004
-&device.id pci 0x7178
-&subvendor.id pci 0x0000
-&subdevice.id pci 0x0000
-|vendor.id pci 0x9004
-&device.id pci 0x7278
-&subvendor.id pci 0x0000
-&subdevice.id pci 0x0000
-|vendor.id pci 0x9004
-&device.id pci 0x7378
-&subvendor.id pci 0x0000
-&subdevice.id pci 0x0000
-|vendor.id pci 0x9004
-&device.id pci 0x7478
-&subvendor.id pci 0x0000
-&subdevice.id pci 0x0000
-|vendor.id pci 0x9004
-&device.id pci 0x7578
-&subvendor.id pci 0x0000
-&subdevice.id pci 0x0000
-|vendor.id pci 0x9004
-&device.id pci 0x7678
-&subvendor.id pci 0x0000
-&subdevice.id pci 0x0000
-|vendor.id pci 0x9004
-&device.id pci 0x7815
-|vendor.id pci 0x9004
-&device.id pci 0x7890+0x0010
-&subvendor.id pci 0x9004
-&subdevice.id pci 0x7893
-|vendor.id pci 0x9004
-&device.id pci 0x7895
-|vendor.id pci 0x9004
-&device.id pci 0x8078
-|vendor.id pci 0x9004
-&device.id pci 0x8178
-|vendor.id pci 0x9004
-&device.id pci 0x8278
-|vendor.id pci 0x9004
-&device.id pci 0x8378
-|vendor.id pci 0x9004
-&device.id pci 0x8478
-|vendor.id pci 0x9004
-&device.id pci 0x8578
-|vendor.id pci 0x9004
-&device.id pci 0x8678
-|vendor.id pci 0x9004
-&device.id pci 0x8778
-|vendor.id pci 0x9004
-&device.id pci 0x8878
-|vendor.id pci 0x9005
-&device.id pci 0x0010+0x0010
-|vendor.id pci 0x9005
-&device.id pci 0x0050+0x0010
-|vendor.id pci 0x9005
-&device.id pci 0x0080+0x0010
-|vendor.id pci 0x9005
-&device.id pci 0x00c0+0x0010
-+driver.module.modprobe aic7xxx
-
- vendor.id pci 0x9005
-&device.id pci 0x8000+0x0020
-+driver.module.modprobe aic79xx
-
-# scsi/aha152x.c
- vendor.id ADP
-&device.id eisa 0x1505
-+driver.module.modprobe aha152x
-+driver.module.config options aha152x aha152x=<io0>,<irq0>
-+driver.module.insmod aha152x aha152x=<io0>,<irq0>
-
-# scsi/mesh.c
- vendor.id special 0x0401
-&device.id special 0x0030
-+driver.module.modprobe mesh
-
-# scsi/mac53c94.c
- vendor.id special 0x0401
-&device.id special 0x0031
-+driver.module.modprobe mac53c94
-
-# iomega zip
- vendor.id special 0x1800
-&device.id special 0x0001
-+driver.module.modprobe imm
-
-# iomega zip
- vendor.id special 0x1800
-&device.id special 0x0002
-+driver.module.modprobe ppa
-
-# scsi/qlogicpti.c
- vendor.id special 0x4001
-&device.id special 0x1003+0x0002
-+driver.module.modprobe qlogicpti
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# block devices (RAID, ...)
-
-# modules.alias
- vendor.id pci 0x1011
-&device.id pci 0x1065
-&subvendor.id pci 0x1069
-&subdevice.id pci 0x0020
-|vendor.id pci 0x1069
-&device.id pci 0x0001+0x0002
-|vendor.id pci 0x1069
-&device.id pci 0x0010
-|vendor.id pci 0x1069
-&device.id pci 0x0050
-|vendor.id pci 0x1069
-&device.id pci 0xba56
-+driver.module.modprobe DAC960
-+baseclass.id 0x001
-+subclass.id 0x04
-
-# pcimap
- vendor.id pci 0x0e11
-&device.id pci 0xae10
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4030+0x0005
-|vendor.id pci 0x1000
-&device.id pci 0x0010
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4040
-|vendor.id pci 0x1000
-&device.id pci 0x0010
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4048
-|vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4050+0x0002
-|vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4058
-+driver.module.modprobe cpqarray
-
-# pcimap
- vendor.id pci 0x0e11
-&device.id pci 0x0046
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x409a+0x0004
-|vendor.id pci 0x0e11
-&device.id pci 0xb060
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4070
-|vendor.id pci 0x0e11
-&device.id pci 0xb178
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4080
-|vendor.id pci 0x0e11
-&device.id pci 0xb178
-&subvendor.id pci 0x0e11
-&subdevice.id pci 0x4082+0x0002
-+driver.module.modprobe cciss
-
-# block/swim3.c
- vendor.id special 0x0401
-&device.id special 0x0040
-+driver.module.modprobe swim3
-
- baseclass.id 0x00e
-&subclass.id 0x00+2
-+driver.module.insmod i2o_pci|i2o_core|i2o_config|i2o_block
-
-# scsi/aacraid/linit.c
- vendor.id pci 0x1028
-&device.id pci 0x0001
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0001
-|vendor.id pci 0x1028
-&device.id pci 0x0002
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0002
-|vendor.id pci 0x1028
-&device.id pci 0x0003
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0003
-|vendor.id pci 0x1028
-&device.id pci 0x0004
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d0
-|vendor.id pci 0x1028
-&device.id pci 0x0002
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d1
-|vendor.id pci 0x1028
-&device.id pci 0x0002
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00d9
-|vendor.id pci 0x1028
-&device.id pci 0x000a
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0106
-|vendor.id pci 0x1028
-&device.id pci 0x000a
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x011b
-|vendor.id pci 0x1028
-&device.id pci 0x000a
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0121
-|vendor.id pci 0x9005
-&device.id pci 0x0283
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0283
-|vendor.id pci 0x9005
-&device.id pci 0x0284
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0284
-|vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0286
-|vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0285
-|vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0287
-|vendor.id pci 0x9005
-&device.id pci 0x0285
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x0287
-|vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x0364+2
-|vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x9005
-&subdevice.id pci 0x1364
-|vendor.id pci 0x1011
-&device.id pci 0x0046
-&subvendor.id pci 0x103c
-&subdevice.id pci 0x10c2
-+driver.module.modprobe aacraid
-
-# modules.alias sata_*
- baseclass.id 0x001
-&subclass.id 0x06
-&progif.id 0x00
-&vendor.id pci 0x1725
-&device.id pci 0x7174
-|baseclass.id 0x001
-&subclass.id 0x06
-&progif.id 0x00
-&vendor.id pci 0x8086
-&device.id pci 0x3200
-+driver.module.modprobe sata_vsc
-
- vendor.id pci 0x1039
-&device.id pci 0x0180+0x0002
-+driver.module.modprobe sata_sis
-
- vendor.id pci 0x105a
-&device.id pci 0x3318+0x0002
-|vendor.id pci 0x105a
-&device.id pci 0x3371
-|vendor.id pci 0x105a
-&device.id pci 0x3373
-|vendor.id pci 0x105a
-&device.id pci 0x3375+0x0002
-+driver.module.modprobe sata_promise
-
- vendor.id pci 0x105a
-&device.id pci 0x6622
-+driver.module.modprobe sata_sx4
-
- vendor.id pci 0x1095
-&device.id pci 0x0240
-|vendor.id pci 0x1095
-&device.id pci 0x3112
-|vendor.id pci 0x1095
-&device.id pci 0x3114
-|vendor.id pci 0x1095
-&device.id pci 0x3512
-+driver.module.modprobe sata_sil
-
- vendor.id pci 0x10de
-&device.id pci 0x0036
-|vendor.id pci 0x10de
-&device.id pci 0x003e
-|vendor.id pci 0x10de
-&device.id pci 0x0054+0x0002
-|vendor.id pci 0x10de
-&device.id pci 0x008e
-|vendor.id pci 0x10de
-&device.id pci 0x00e3
-|vendor.id pci 0x10de
-&device.id pci 0x00ee
-+driver.module.modprobe sata_nv
-
- vendor.id pci 0x1106
-&device.id pci 0x3149
-+driver.module.modprobe sata_via
-
- vendor.id pci 0x1166
-&device.id pci 0x0240
-+driver.module.modprobe sata_svw
-
-# modules.alias, #38628
- baseclass.id 0x00b
-&subclass.id 0x40
-&progif.id 0x00
-&vendor.id pci 0x10a9
-&device.id pci 0x100a
-+driver.module.modprobe sgiioc4
-+baseclass.id 0x001
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# usb controller
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x00
-+driver.module.modprobe uhci-hcd
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x10
-+driver.module.modprobe ohci-hcd
-
- baseclass.id 0x00c
-&subclass.id 0x03
-&progif.id 0x20
-+driver.module.modprobe ehci-hcd
-
- baseclass.id 0x00c
-&subclass.id 0x00
-&progif.id 0x10
-+driver.module.modprobe ohci1394
-
- vendor.id pci 0x104c
-&device.id pci 0x8000
-+driver.module.modprobe pcilynx
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# Compaq Virtual Management Device
-
-# make it a floppy
- baseclass.id 0x106
-&vendor.id usb 0x049f
-&device.id usb 0x0040
-+subclass.id 0x03
+++ /dev/null
-# video/tv cards
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# media/video/buz.c
-
- vendor.id pci 0x11de
-&device.id pci 0x6057
-+driver.module.modprobe buz
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# media/video/zr36120.c
-# (framegrabber)
- vendor.id pci 0x11de
-&device.id pci 0x6120
-+driver.module.modprobe zr36120
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# media/video/bttv-cards.c, kernel 2.4.7
-
- vendor.id pci 0x109e
-+vendor.name Brooktree Corporation
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-+device.name Bt878
-
- vendor.id pci 0x109e
-&device.id pci 0x036f
-+device.name Bt879
-
- vendor.id pci 0x109e
-&device.id pci 0x0350+0x0002
-|vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x6606
-|vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x6606
-&subdevice.id pci 0x217d
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x107d
-&subdevice.id pci 0x6606
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x6606
-&subdevice.id pci 0x217d
-+subdevice.name Leadtek WinFast TV 2000
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0012
-|vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0xbd11
-&subdevice.id pci 0x1200
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x11bd
-&subdevice.id pci 0x0012
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0xbd11
-&subdevice.id pci 0x1200
-+subdevice.name Pinnacle PCTV
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0001
-|vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0003
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0001
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0003
-+subdevice.name AVerMedia TVPhone98
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1117+0x0004
-|vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1134
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1117+0x0004
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1134
-+subdevice.name Terratec TValue
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x15b0
-&subdevice.id pci 0x400d
-|vendor.id pci 0x109e
-&device.id pci 0x036e
-&subvendor.id pci 0x15b0
-&subdevice.id pci 0x4010
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x15b0
-&subdevice.id pci 0x400d
-|vendor.id pci 0x109e
-&device.id pci 0x036f
-&subvendor.id pci 0x15b0
-&subdevice.id pci 0x4010
-+subdevice.name Zoltrix Genie TV / Radio
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x13eb
-+subdevice.name Hauppauge WinTV
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x3900
-+subdevice.name Hauppauge WinTV-D
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x0070
-&subdevice.id pci 0x4500
-+subdevice.name Hauppauge WinTV/PVR
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x0070
-&subdevice.id pci 0xff00
-+subdevice.name Osprey-100
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x0070
-&subdevice.id pci 0xff01
-+subdevice.name Osprey-200
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0001
-+subdevice.name ATI TV Wonder
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0003
-+subdevice.name ATI TV Wonder/VE
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x10b4
-&subdevice.id pci 0x2636
-+subdevice.name STB TV PCI FM, P/N 6000704
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x10fc
-&subdevice.id pci 0x4020
-+subdevice.name I-O Data Co. GV-BCV3/PCI
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x10fc
-&subdevice.id pci 0x4050
-+subdevice.name I-O Data Co. GV-BCV4/PCI
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x121a
-&subdevice.id pci 0x3000
-+subdevice.name VoodooTV 200
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x3000
-+subdevice.name TView 99 (CPH063)
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x144f
-&subdevice.id pci 0x3002
-+subdevice.name Askey Magic TView
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0002
-+subdevice.name AVermedia TVCapture 98
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1461
-&subdevice.id pci 0x0004
-+subdevice.name AVerMedia TVCapture 98
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x14c7
-&subdevice.id pci 0x0101
-+subdevice.name Modular Technology PCTV
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x14ff
-&subdevice.id pci 0x3000
-+subdevice.name TView 99 (CPH061)
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x14ff
-&subdevice.id pci 0x3002
-+subdevice.name Phoebe TV Master
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1123
-+subdevice.name Terratec TV Radio+
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1127
-+subdevice.name Terratec TV+
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1135
-+subdevice.name Terratec TValue Radio
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x15b0
-&subdevice.id pci 0x400a
-+subdevice.name Zoltrix Genie TV
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x15cb
-&subdevice.id pci 0x0101
-+subdevice.name AG GMV1
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1850
-+subdevice.name Chronos Video Shuttle II
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1851
-&subdevice.id pci 0x1851
-+subdevice.name CyberMail AV
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x1852
-&subdevice.id pci 0x1852
-+subdevice.name Typhoon TView TV/FM Tuner
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
- vendor.id pci 0x109e
-&device.id pci 0x036e+0x0002
-&subvendor.id pci 0x2636
-&subdevice.id pci 0x10b4
-+subdevice.name STB ???
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe bttv
-
-
- vendor.id pci 0x14f1
-&device.id pci 0x8800
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe cx8800
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- vendor.id pci 0x1131
-&device.id pci 0x7130
-|vendor.id pci 0x1131
-&device.id pci 0x7133
-|vendor.id pci 0x1131
-&device.id pci 0x7134
-|vendor.id pci 0x1131
-&device.id pci 0x7135
-+baseclass.id 0x112
-+subclass.id 0x00
-+driver.module.modprobe saa7134
-
- vendor.id pci 0x1131
-&device.id pci 0x7134
-&subvendor.id pci 0x1131
-&subdevice.id pci 0x2001
-+subdevice.name Proteus Pro [philips reference design]
-
- vendor.id pci 0x1131
-&device.id pci 0x7134
-&subvendor.id pci 0x1131
-&subdevice.id pci 0x6752
-+subdevice.name EMPRESS
-
- vendor.id pci 0x1131
-&device.id pci 0x7134
-&subvendor.id pci 0x1131
-&subdevice.id pci 0x4e85
-+subdevice.name SKNet Monster TV
-
- vendor.id pci 0x1131
-&device.id pci 0x7134
-&subvendor.id pci 0x153b
-&subdevice.id pci 0x1142
-+subdevice.name Terratec Cinergy 400 TV
-
+++ /dev/null
-# info from usbutils
-
-
- vendor.id usb 0x0386
-+vendor.name LTS
-
- vendor.id usb 0x0386
-&device.id usb 0x0001
-+device.name PSX for USB Converter
-
- vendor.id usb 0x03e8
-+vendor.name AOX Inc.
-
- vendor.id usb 0x03e8
-&device.id usb 0x0004
-+device.name SE401 WebCam
-
- vendor.id usb 0x03e8
-&device.id usb 0x0008
-+device.name 101 Ethernet [klsi]
-
- vendor.id usb 0x03e9
-+vendor.name Thesys Microelectronics
-
- vendor.id usb 0x03ea
-+vendor.name Data Broadcasting Corp.
-
- vendor.id usb 0x03eb
-+vendor.name Atmel Corp.
-
- vendor.id usb 0x03eb
-&device.id usb 0x3301
-+device.name 4-port Hub
-
- vendor.id usb 0x03eb
-&device.id usb 0x3312
-+device.name 4-port Hub
-
- vendor.id usb 0x03eb
-&device.id usb 0x7603
-+device.name AT76c503a D-Link DWL-120
-
- vendor.id usb 0x03ec
-+vendor.name Iwatsu America Inc.
-
- vendor.id usb 0x03ed
-+vendor.name Mitel Corp.
-
- vendor.id usb 0x03ee
-+vendor.name Mitsumi
-
- vendor.id usb 0x03ee
-&device.id usb 0x0000
-+device.name CD-R/RW Drive
-
- vendor.id usb 0x03f0
-+vendor.name Hewlett-Packard
-
- vendor.id usb 0x03f0
-&device.id usb 0x0004
-+device.name DeskJet 895c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0101
-+device.name ScanJet 4100c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0102
-+device.name PhotoSmart S20
-
- vendor.id usb 0x03f0
-&device.id usb 0x0104
-+device.name DeskJet 880c/970c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0105
-+device.name ScanJet 4200c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0107
-+device.name CD-Writer Plus
-
- vendor.id usb 0x03f0
-&device.id usb 0x010c
-+device.name Multimedia Keyboard Hub
-
- vendor.id usb 0x03f0
-&device.id usb 0x0111
-+device.name G55xi Printer/Scanner/Copier
-
- vendor.id usb 0x03f0
-&device.id usb 0x011c
-+device.name hn210w 802.11b Wireless Ethernet
-
- vendor.id usb 0x03f0
-&device.id usb 0x0201
-+device.name ScanJet 6200c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0202
-+device.name PhotoSmart S20
-
- vendor.id usb 0x03f0
-&device.id usb 0x0204
-+device.name DeskJet 815c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0205
-+device.name ScanJet 3300c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0207
-+device.name CD-Writer Plus 8200e
-
- vendor.id usb 0x03f0
-&device.id usb 0x020c
-+device.name Multimedia Keyboard
-
- vendor.id usb 0x03f0
-&device.id usb 0x0304
-+device.name DeskJet 810c/812c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0311
-+device.name OfficeJet G85xi
-
- vendor.id usb 0x03f0
-&device.id usb 0x0317
-+device.name LaserJet 1200
-
- vendor.id usb 0x03f0
-&device.id usb 0x0401
-+device.name ScanJet 5200c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0404
-+device.name DeskJet 830c/832c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0405
-+device.name ScanJet 3400cse
-
- vendor.id usb 0x03f0
-&device.id usb 0x0504
-+device.name DeskJet 885c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0601
-+device.name ScanJet 6300c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0604
-+device.name DeskJet 840c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0605
-+device.name ScanJet 2200c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0701
-+device.name ScanJet 5300c/5370c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0705
-+device.name ScanJet 4400c
-
- vendor.id usb 0x03f0
-&device.id usb 0x0804
-+device.name DeskJet 816c
-
- vendor.id usb 0x03f0
-&device.id usb 0x1004
-+device.name DeskJet 970c/970cse
-
- vendor.id usb 0x03f0
-&device.id usb 0x1104
-+device.name Deskjet 959C
-
- vendor.id usb 0x03f0
-&device.id usb 0x1105
-+device.name ScanJet 5470c
-
- vendor.id usb 0x03f0
-&device.id usb 0x1151
-+device.name 750xi Printer/Scanner/Copier
-
- vendor.id usb 0x03f0
-&device.id usb 0x1204
-+device.name DeskJet 930c
-
- vendor.id usb 0x03f0
-&device.id usb 0x2004
-+device.name DeskJet 640c
-
- vendor.id usb 0x03f0
-&device.id usb 0x3102
-+device.name PhotoSmart P1100 Printer w/ Card Reader
-
- vendor.id usb 0x03f0
-&device.id usb 0x4102
-+device.name PhotoSmart 618 Camera
-
- vendor.id usb 0x03f0
-&device.id usb 0x6202
-+device.name PhotoSmart 215 Camera
-
- vendor.id usb 0x03f0
-&device.id usb 0x6302
-+device.name PhotoSmart 318/612 Camera
-
- vendor.id usb 0x03f0
-&device.id usb 0xefbe
-+device.name NEC Picty900
-
- vendor.id usb 0x03f0
-&device.id usb 0xbef4
-+device.name NEC Picty760
-
- vendor.id usb 0x03f0
-&device.id usb 0xf0be
-+device.name NEC Picty920
-
- vendor.id usb 0x03f0
-&device.id usb 0xf1be
-+device.name NEC Picty800
-
- vendor.id usb 0x03f1
-+vendor.name Genoa Technology
-
- vendor.id usb 0x03f2
-+vendor.name Oak Technology, Inc.
-
- vendor.id usb 0x03f3
-+vendor.name Adaptec, Inc.
-
- vendor.id usb 0x03f4
-+vendor.name Diebold, Inc.
-
- vendor.id usb 0x03f5
-+vendor.name Siemens Electromechanical
-
- vendor.id usb 0x03f8
-+vendor.name Epson Imaging Technology Center
-
- vendor.id usb 0x03f9
-+vendor.name KeyTronic Corp.
-
- vendor.id usb 0x03fb
-+vendor.name OPTi Inc.
-
- vendor.id usb 0x03fc
-+vendor.name Elitegroup Computer Systems
-
- vendor.id usb 0x03fd
-+vendor.name Xilinx Inc.
-
- vendor.id usb 0x03fe
-+vendor.name Farallon Comunications
-
- vendor.id usb 0x0400
-+vendor.name National Semiconductor
-
- vendor.id usb 0x0400
-&device.id usb 0x1000
-+device.name BearPaw 1200 Scanner
-
- vendor.id usb 0x0400
-&device.id usb 0x1001
-+device.name BearPaw 2400 Scanner
-
- vendor.id usb 0x0401
-+vendor.name National Registry Inc.
-
- vendor.id usb 0x0402
-+vendor.name Acer Labs Inc.
-
- vendor.id usb 0x0403
-+vendor.name Future Technology Devices
-
- vendor.id usb 0x0403
-&device.id usb 0x0000
-+device.name H4SMK 7 Port Hub
-
- vendor.id usb 0x0403
-&device.id usb 0x8070
-+device.name 7 Port Hub
-
- vendor.id usb 0x0403
-&device.id usb 0x8040
-+device.name 4 Port Hub
-
- vendor.id usb 0x0403
-&device.id usb 0x8370
-+device.name 7 Port Hub
-
- vendor.id usb 0x0403
-&device.id usb 0x8371
-+device.name PS/2 Keyboard And Mouse
-
- vendor.id usb 0x0403
-&device.id usb 0x8372
-+device.name FT8U100AX Serial Port
-
- vendor.id usb 0x0404
-+vendor.name NCR Corp.
-
- vendor.id usb 0x0405
-+vendor.name inSilicon
-
- vendor.id usb 0x0406
-+vendor.name Fujitsu-ICL Computers
-
- vendor.id usb 0x0407
-+vendor.name Fujitsu Personal Systems, Inc.
-
- vendor.id usb 0x0408
-+vendor.name Quanta Computer Inc.
-
- vendor.id usb 0x0409
-+vendor.name NEC Systems
-
- vendor.id usb 0x0409
-&device.id usb 0x0012
-+device.name ATerm IT75DSU ISDN TA
-
- vendor.id usb 0x0409
-&device.id usb 0x0014
-+device.name Japanese Keyboard
-
- vendor.id usb 0x0409
-&device.id usb 0x0027
-+device.name MultiSync Monitor
-
- vendor.id usb 0x0409
-&device.id usb 0x0058
-+device.name USB2.0 Hub Controller
-
- vendor.id usb 0x0409
-&device.id usb 0x55aa
-+device.name Hub
-
- vendor.id usb 0x0409
-&device.id usb 0x55ab
-+device.name Hub [iMac kbd]
-
- vendor.id usb 0x0409
-&device.id usb 0xefbe
-+device.name P!cty 900 [HP DJ]
-
- vendor.id usb 0x0409
-&device.id usb 0xf0be
-+device.name P!cty 920 [HP DJ 812c]
-
- vendor.id usb 0x040a
-+vendor.name Kodak Co.
-
- vendor.id usb 0x040a
-&device.id usb 0x0001
-+device.name DVC-323
-
- vendor.id usb 0x040a
-&device.id usb 0x0002
-+device.name DVC-325
-
- vendor.id usb 0x040a
-&device.id usb 0x0100
-+device.name DC-220
-
- vendor.id usb 0x040a
-&device.id usb 0x0110
-+device.name DC-260
-
- vendor.id usb 0x040a
-&device.id usb 0x0111
-+device.name DC-265
-
- vendor.id usb 0x040a
-&device.id usb 0x0112
-+device.name DC-290
-
- vendor.id usb 0x040a
-&device.id usb 0x0120
-+device.name DC-240
-
- vendor.id usb 0x040a
-&device.id usb 0x0121
-+device.name DC-240 (PTP firmware)
-
- vendor.id usb 0x040a
-&device.id usb 0x0130
-+device.name DC-280
-
- vendor.id usb 0x040a
-&device.id usb 0x0131
-+device.name DC-5000
-
- vendor.id usb 0x040a
-&device.id usb 0x0132
-+device.name DC-3400
-
- vendor.id usb 0x040a
-&device.id usb 0x0140
-+device.name DC-4800
-
- vendor.id usb 0x040a
-&device.id usb 0x0300
-+device.name EZ-200
-
- vendor.id usb 0x040a
-&device.id usb 0x0400
-+device.name MC3
-
- vendor.id usb 0x040b
-+vendor.name Weltrend Semiconductor
-
- vendor.id usb 0x040c
-+vendor.name VTech Computers Ltd.
-
- vendor.id usb 0x040d
-+vendor.name VIA Technologies, Inc.
-
- vendor.id usb 0x040e
-+vendor.name MCCI
-
- vendor.id usb 0x040f
-+vendor.name Echo Speech Corp.
-
- vendor.id usb 0x0411
-+vendor.name Melco, Inc.
-
- vendor.id usb 0x0411
-&device.id usb 0x0001
-+device.name LUA-TX Ethernet [pegasus]
-
- vendor.id usb 0x0412
-+vendor.name Award Software International
-
- vendor.id usb 0x0413
-+vendor.name Leadtek Research Inc.
-
- vendor.id usb 0x0414
-+vendor.name Giga-Byte Technology Co., Ltd.
-
- vendor.id usb 0x0416
-+vendor.name Winbond Electronics Corp.
-
- vendor.id usb 0x0416
-&device.id usb 0x0961
-+device.name AVL Flash Card Reader
-
- vendor.id usb 0x0416
-&device.id usb 0x5518
-+device.name Hub
-
- vendor.id usb 0x0416
-&device.id usb 0x551a
-+device.name PC Sync Keypad
-
- vendor.id usb 0x0416
-&device.id usb 0x551b
-+device.name PC Async Keypad
-
- vendor.id usb 0x0416
-&device.id usb 0x551c
-+device.name Sync Tenkey
-
- vendor.id usb 0x0416
-&device.id usb 0x551d
-+device.name Async Tenkey
-
- vendor.id usb 0x0416
-&device.id usb 0x551e
-+device.name Keyboard
-
- vendor.id usb 0x0416
-&device.id usb 0x551f
-+device.name Keyboard w/ Sys and Media
-
- vendor.id usb 0x0416
-&device.id usb 0x5521
-+device.name Keyboard
-
- vendor.id usb 0x0416
-&device.id usb 0x6481
-+device.name 16-bit Scanner
-
- vendor.id usb 0x0417
-+vendor.name Symbios Logic
-
- vendor.id usb 0x0418
-+vendor.name AST Research
-
- vendor.id usb 0x0419
-+vendor.name Samsung Info. Systems America Inc.
-
- vendor.id usb 0x041a
-+vendor.name Phoenix Technologies, Ltd.
-
- vendor.id usb 0x041b
-+vendor.name d'TV
-
- vendor.id usb 0x041d
-+vendor.name S3, Inc.
-
- vendor.id usb 0x041e
-+vendor.name Creative Labs
-
- vendor.id usb 0x041e
-&device.id usb 0x1002
-+device.name Nomad II MP3 Player
-
- vendor.id usb 0x041e
-&device.id usb 0x1003
-+device.name Blaster GamePad Cobra
-
- vendor.id usb 0x041e
-&device.id usb 0x1050
-+device.name GamePad Cobra
-
- vendor.id usb 0x041e
-&device.id usb 0x4003
-+device.name VideoBlaster WebCam Go Plus [W9967CF]
-
- vendor.id usb 0x041e
-&device.id usb 0x4004
-+device.name Nomad II MG MP3 Player
-
- vendor.id usb 0x041e
-&device.id usb 0x400a
-+device.name PC-Cam 300
-
- vendor.id usb 0x041e
-&device.id usb 0x400b
-+device.name PC-Cam 600
-
- vendor.id usb 0x041e
-&device.id usb 0x400c
-+device.name WebCam 5 [pwc]
-
- vendor.id usb 0x041f
-+vendor.name LCS Telegraphics
-
- vendor.id usb 0x0420
-+vendor.name Chips and Technologies
-
- vendor.id usb 0x0421
-+vendor.name Nokia Mobile Phones
-
- vendor.id usb 0x0422
-+vendor.name ADI Systems Inc.
-
- vendor.id usb 0x0423
-+vendor.name Computer Access Technology Corp.
-
- vendor.id usb 0x0423
-&device.id usb 0x000a
-+device.name NetMate Ethernet
-
- vendor.id usb 0x0423
-&device.id usb 0x000c
-+device.name NetMate2 Ethernet
-
- vendor.id usb 0x0423
-&device.id usb 0x000d
-+device.name USB Chief Analyzer
-
- vendor.id usb 0x0423
-&device.id usb 0x1237
-+device.name Andromeda Hub
-
- vendor.id usb 0x0424
-+vendor.name Standard Microsystems Corp.
-
- vendor.id usb 0x0425
-+vendor.name Motorola Semiconductors HK, Ltd.
-
- vendor.id usb 0x0426
-+vendor.name Integrated Device Technology
-
- vendor.id usb 0x0427
-+vendor.name Motorola Electronics Taiwan Ltd.
-
- vendor.id usb 0x0428
-+vendor.name Advanced Gravis Computer Tech. Ltd.
-
- vendor.id usb 0x0428
-&device.id usb 0x4001
-+device.name GamePad Pro
-
- vendor.id usb 0x0429
-+vendor.name Cirrus Logic
-
- vendor.id usb 0x042a
-+vendor.name Ericsson Austrian, AG
-
- vendor.id usb 0x042b
-+vendor.name Intel Corp.
-
- vendor.id usb 0x042c
-+vendor.name Innovative Semiconductors, Inc.
-
- vendor.id usb 0x042d
-+vendor.name Micronics
-
- vendor.id usb 0x042e
-+vendor.name Acer, Inc.
-
- vendor.id usb 0x042f
-+vendor.name Molex, Inc.
-
- vendor.id usb 0x0430
-+vendor.name Sun Microsystems
-
- vendor.id usb 0x0430
-&device.id usb 0x0005
-+device.name Type 6 Keyboard
-
- vendor.id usb 0x0430
-&device.id usb 0x0100
-+device.name 3-button Mouse
-
- vendor.id usb 0x0431
-+vendor.name Itac Systems, Inc.
-
- vendor.id usb 0x0432
-+vendor.name Unisys Corp.
-
- vendor.id usb 0x0433
-+vendor.name Alps Electric Inc.
-
- vendor.id usb 0x0433
-&device.id usb 0x1101
-+device.name IBM Game Controller
-
- vendor.id usb 0x0434
-+vendor.name Samsung Info. Systems America Inc.
-
- vendor.id usb 0x0435
-+vendor.name Hyundai Electronics America
-
- vendor.id usb 0x0436
-+vendor.name Taugagreining HF
-
- vendor.id usb 0x0437
-+vendor.name Framatome Connectors USA
-
- vendor.id usb 0x0438
-+vendor.name Advanced Micro Devices
-
- vendor.id usb 0x0439
-+vendor.name Voice Technologies Group
-
- vendor.id usb 0x043d
-+vendor.name Lexmark International Inc.
-
- vendor.id usb 0x043d
-&device.id usb 0x0002
-+device.name Optra E310 Printer
-
- vendor.id usb 0x043d
-&device.id usb 0x0009
-+device.name Optra S2450 Printer
-
- vendor.id usb 0x043d
-&device.id usb 0x000c
-+device.name Optra E312 Printer
-
- vendor.id usb 0x043d
-&device.id usb 0x0017
-+device.name Z32 printer
-
- vendor.id usb 0x043d
-&device.id usb 0x0018
-+device.name Z52 Printer
-
- vendor.id usb 0x043d
-&device.id usb 0x0020
-+device.name Z51 Printer
-
- vendor.id usb 0x043d
-&device.id usb 0x003d
-+device.name X83 Scan/Print/Copy
-
- vendor.id usb 0x043e
-+vendor.name LG Electronics USA Inc.
-
- vendor.id usb 0x043e
-&device.id usb 0x42bd
-+device.name Flatron 795FT Plus Monitor
-
- vendor.id usb 0x043e
-&device.id usb 0x7001
-+device.name MF-PD100 Soul Digital MP3 Player
-
- vendor.id usb 0x043e
-&device.id usb 0x8484
-+device.name LPC-U30 Webcam II
-
- vendor.id usb 0x043e
-&device.id usb 0x8585
-+device.name LPC-UC35 Webcam
-
- vendor.id usb 0x043f
-+vendor.name RadiSys Corp.
-
- vendor.id usb 0x0440
-+vendor.name Eizo Nanao Corp.
-
- vendor.id usb 0x0441
-+vendor.name Winbond Systems Lab.
-
- vendor.id usb 0x0441
-&device.id usb 0x1456
-+device.name Hub
-
- vendor.id usb 0x0442
-+vendor.name Ericsson Inc.
-
- vendor.id usb 0x0443
-+vendor.name Gateway 2000
-
- vendor.id usb 0x0445
-+vendor.name Lucent Technologies
-
- vendor.id usb 0x0446
-+vendor.name NMB Technologies, Inc.
-
- vendor.id usb 0x0447
-+vendor.name Momentum Microsystems
-
- vendor.id usb 0x044a
-+vendor.name Shamrock Tech. Co., Ltd.
-
- vendor.id usb 0x044b
-+vendor.name WSI
-
- vendor.id usb 0x044c
-+vendor.name CCL/ITRI
-
- vendor.id usb 0x044d
-+vendor.name Siemens Nixdorf
-
- vendor.id usb 0x044e
-+vendor.name Alps Electric Co.
-
- vendor.id usb 0x044e
-&device.id usb 0x2002
-+device.name MD-5500 Printer
-
- vendor.id usb 0x044f
-+vendor.name ThrustMaster, Inc.
-
- vendor.id usb 0x044f
-&device.id usb 0xa0a3
-+device.name Fusion Digital GamePad
-
- vendor.id usb 0x044f
-&device.id usb 0xb300
-+device.name Firestorm Dual Power
-
- vendor.id usb 0x0450
-+vendor.name DFI Inc.
-
- vendor.id usb 0x0451
-+vendor.name Texas Instruments
-
- vendor.id usb 0x0451
-&device.id usb 0x1428
-+device.name Hub
-
- vendor.id usb 0x0451
-&device.id usb 0x1446
-+device.name TUSB2040/2070 Hub
-
- vendor.id usb 0x0451
-&device.id usb 0x2036
-+device.name TUSB2036 Hub
-
- vendor.id usb 0x0451
-&device.id usb 0x2046
-+device.name TUSB2046 Hub
-
- vendor.id usb 0x0451
-&device.id usb 0x2077
-+device.name TUSB2077 Hub
-
- vendor.id usb 0x0451
-&device.id usb 0xe001
-+device.name GraphLink
-
- vendor.id usb 0x0452
-+vendor.name Mitsubishi Electronics America, Inc.
-
- vendor.id usb 0x0453
-+vendor.name CMD Technology
-
- vendor.id usb 0x0454
-+vendor.name Vobis Microcomputer AG
-
- vendor.id usb 0x0455
-+vendor.name Telematics International, Inc.
-
- vendor.id usb 0x0456
-+vendor.name Analog Devices, Inc.
-
- vendor.id usb 0x0457
-+vendor.name Silicon Integrated Systems Corp.
-
- vendor.id usb 0x0458
-+vendor.name KYE Systems Corp.(Mouse Systems)
-
- vendor.id usb 0x0458
-&device.id usb 0x0001
-+device.name Mouse
-
- vendor.id usb 0x0458
-&device.id usb 0x0002
-+device.name Genius NetMouse Pro
-
- vendor.id usb 0x0458
-&device.id usb 0x0003
-+device.name Genius NetScroll+
-
- vendor.id usb 0x0458
-&device.id usb 0x0100
-+device.name EasyPen Tablet
-
- vendor.id usb 0x0458
-&device.id usb 0x0101
-+device.name CueCat
-
- vendor.id usb 0x0458
-&device.id usb 0x1003
-+device.name Genius VideoCam
-
- vendor.id usb 0x0458
-&device.id usb 0x1004
-+device.name Flight2000 F-23 Joystick
-
- vendor.id usb 0x0458
-&device.id usb 0x2001
-+device.name ColorPage-Vivid Pro Scanner
-
- vendor.id usb 0x0459
-+vendor.name Adobe Systems, Inc.
-
- vendor.id usb 0x045a
-+vendor.name Diamond Multimedia Systems
-
- vendor.id usb 0x045a
-&device.id usb 0x0b4a
-+device.name SupraMax 2890 56K Modem [Lucent Atlas]
-
- vendor.id usb 0x045a
-&device.id usb 0x0b68
-+device.name SupraMax 56K Modem
-
- vendor.id usb 0x045b
-+vendor.name Hitachi, Ltd.
-
- vendor.id usb 0x045d
-+vendor.name Nortel Networks
-
- vendor.id usb 0x045e
-+vendor.name Microsoft Corp.
-
- vendor.id usb 0x045e
-&device.id usb 0x0008
-+device.name SideWinder Precision Pro
-
- vendor.id usb 0x045e
-&device.id usb 0x0009
-+device.name IntelliMouse
-
- vendor.id usb 0x045e
-&device.id usb 0x000b
-+device.name Natural Keyboard Elite
-
- vendor.id usb 0x045e
-&device.id usb 0x0014
-+device.name Digital Sound System 80
-
- vendor.id usb 0x045e
-&device.id usb 0x001a
-+device.name SideWinder Precision Racing Wheel
-
- vendor.id usb 0x045e
-&device.id usb 0x001b
-+device.name SideWinder Force Feedback 2 Joystick
-
- vendor.id usb 0x045e
-&device.id usb 0x001d
-+device.name Natural Keyboard Pro
-
- vendor.id usb 0x045e
-&device.id usb 0x001e
-+device.name IntelliMouse Explorer
-
- vendor.id usb 0x045e
-&device.id usb 0x0024
-+device.name Trackball Explorer
-
- vendor.id usb 0x045e
-&device.id usb 0x0025
-+device.name IntelliEye Mouse
-
- vendor.id usb 0x045e
-&device.id usb 0x0026
-+device.name SideWinder GamePad Pro
-
- vendor.id usb 0x045e
-&device.id usb 0x0027
-+device.name SideWinder PnP GamePad
-
- vendor.id usb 0x045e
-&device.id usb 0x0028
-+device.name SideWinder Dual Strike
-
- vendor.id usb 0x045e
-&device.id usb 0x0029
-+device.name IntelliMouse Optical
-
- vendor.id usb 0x045e
-&device.id usb 0x002b
-+device.name Internet Keyboard Pro
-
- vendor.id usb 0x045e
-&device.id usb 0x0034
-+device.name SideWinder Force Feedback Wheel
-
- vendor.id usb 0x045e
-&device.id usb 0x0033
-+device.name Sidewinder Strategic Commander
-
- vendor.id usb 0x045e
-&device.id usb 0x0038
-+device.name SideWinder Precision 2
-
- vendor.id usb 0x045e
-&device.id usb 0x0039
-+device.name IntelliMouse Optical
-
- vendor.id usb 0x045e
-&device.id usb 0x003b
-+device.name SideWinder Game Voice
-
- vendor.id usb 0x045e
-&device.id usb 0x003c
-+device.name SideWinder Joystick
-
- vendor.id usb 0x045e
-&device.id usb 0x0040
-+device.name Wheel Mouse Optical
-
- vendor.id usb 0x0460
-+vendor.name Ace Cad Enterprise Co., Ltd.
-
- vendor.id usb 0x0461
-+vendor.name Primax Electronics
-
- vendor.id usb 0x0461
-&device.id usb 0x0300
-+device.name G2-300 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0301
-+device.name G2E-300 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0302
-+device.name G2-300 #2 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0303
-+device.name G2E-300 #2 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0340
-+device.name Colorado 9600 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0341
-+device.name Colorado 600u Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0346
-+device.name Memorex Maxx 6136u Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0347
-+device.name Visioneer 4400 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0360
-+device.name Colorado 19200 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0361
-+device.name Colorado 1200u Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0380
-+device.name G2-600 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0381
-+device.name ReadyScan 636i Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0382
-+device.name G2-600 #2 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0383
-+device.name G2E-600 Scanner
-
- vendor.id usb 0x0461
-&device.id usb 0x0813
-+device.name IBM UltraPort Camera
-
- vendor.id usb 0x0461
-&device.id usb 0x081a
-+device.name Fujifilm IX-30 Camera
-
- vendor.id usb 0x0461
-&device.id usb 0x4d01
-+device.name Comfort Keyboard
-
- vendor.id usb 0x0461
-&device.id usb 0x4d02
-+device.name Mouse-in-a-Box
-
- vendor.id usb 0x0461
-&device.id usb 0x4d03
-+device.name Kensington Mouse-in-a-box
-
- vendor.id usb 0x0461
-&device.id usb 0x4d04
-+device.name Mouse
-
- vendor.id usb 0x0463
-+vendor.name MGE UPS Systems
-
- vendor.id usb 0x0463
-&device.id usb 0xffff
-+device.name Ellipse UPS
-
- vendor.id usb 0x0464
-+vendor.name AMP Incorporated
-
- vendor.id usb 0x0467
-+vendor.name AT&T Paradyne
-
- vendor.id usb 0x0468
-+vendor.name Wieson Electronic Co., Ltd.
-
- vendor.id usb 0x046a
-+vendor.name Cherry Mikroschalter GmbH
-
- vendor.id usb 0x046a
-&device.id usb 0x0001
-+device.name My3000 Keyboard
-
- vendor.id usb 0x046a
-&device.id usb 0x0003
-+device.name My3000 Hub
-
- vendor.id usb 0x046b
-+vendor.name American Megatrends
-
- vendor.id usb 0x046c
-+vendor.name Toshiba Corp., Digital Media Equipment
-
- vendor.id usb 0x046d
-+vendor.name Logitech Inc.
-
- vendor.id usb 0x046d
-&device.id usb 0x0203
-+device.name M2452 Keyboard
-
- vendor.id usb 0x046d
-&device.id usb 0x0301
-+device.name M4848 Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0x0401
-+device.name HP PageScan
-
- vendor.id usb 0x046d
-&device.id usb 0x0402
-+device.name NEC PageScan
-
- vendor.id usb 0x046d
-&device.id usb 0x040f
-+device.name Logitech/Storm PageScan
-
- vendor.id usb 0x046d
-&device.id usb 0x0801
-+device.name QuickCam Home
-
- vendor.id usb 0x046d
-&device.id usb 0x0810
-+device.name QuickCam Pro
-
- vendor.id usb 0x046d
-&device.id usb 0x0840
-+device.name QuickCam Express
-
- vendor.id usb 0x046d
-&device.id usb 0x0850
-+device.name QuickCam Web
-
- vendor.id usb 0x046d
-&device.id usb 0x0870
-+device.name QuickCam Express
-
- vendor.id usb 0x046d
-&device.id usb 0x08b0
-+device.name QuickCam 3000 Pro [pwc]
-
- vendor.id usb 0x046d
-&device.id usb 0x0900
-+device.name ClickSmart 310
-
- vendor.id usb 0x046d
-&device.id usb 0x0901
-+device.name ClickSmart 510
-
- vendor.id usb 0x046d
-&device.id usb 0x0950
-+device.name Pocket Camera
-
- vendor.id usb 0x046d
-&device.id usb 0xc000
-+device.name N43 [Pilot Mouse]
-
- vendor.id usb 0x046d
-&device.id usb 0xc001
-+device.name N48/M-BB48 [FirstMouse Plus]
-
- vendor.id usb 0x046d
-&device.id usb 0xc002
-+device.name M-BA47 [MouseMan Plus]
-
- vendor.id usb 0x046d
-&device.id usb 0xc004
-+device.name WingMan Gaming Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0xc00b
-+device.name MouseMan Wheel
-
- vendor.id usb 0x046d
-&device.id usb 0xc00c
-+device.name Optical Wheel Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0xc00e
-+device.name Optical Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0xc012
-+device.name Optical Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0xc030
-+device.name iFeel Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0xc032
-+device.name MouseMan iFeel
-
- vendor.id usb 0x046d
-&device.id usb 0xc202
-+device.name WingMan Formula
-
- vendor.id usb 0x046d
-&device.id usb 0xc207
-+device.name WingMan Extreme Digital 3D
-
- vendor.id usb 0x046d
-&device.id usb 0xc208
-+device.name WingMan Gamepad Extreme
-
- vendor.id usb 0x046d
-&device.id usb 0xc209
-+device.name WingMan Gamepad
-
- vendor.id usb 0x046d
-&device.id usb 0xc20a
-+device.name WingMan RumblePad
-
- vendor.id usb 0x046d
-&device.id usb 0xc20c
-+device.name WingMan Precision
-
- vendor.id usb 0x046d
-&device.id usb 0xc281
-+device.name WingMan Force
-
- vendor.id usb 0x046d
-&device.id usb 0xc283
-+device.name WingMan Force 3D
-
- vendor.id usb 0x046d
-&device.id usb 0xc285
-+device.name WingMan Strike Force 3D
-
- vendor.id usb 0x046d
-&device.id usb 0xc291
-+device.name WingMan Formula Force
-
- vendor.id usb 0x046d
-&device.id usb 0xc295
-+device.name Momo Force Steering Wheel
-
- vendor.id usb 0x046d
-&device.id usb 0xc2a0
-+device.name Wingman Force Feedback Mouse
-
- vendor.id usb 0x046d
-&device.id usb 0xc308
-+device.name Internet Navigator Keyboard
-
- vendor.id usb 0x046d
-&device.id usb 0xc401
-+device.name TrackMan Marble Wheel
-
- vendor.id usb 0x046d
-&device.id usb 0xc501
-+device.name Cordless Mouse Receiver
-
- vendor.id usb 0x046d
-&device.id usb 0xc503
-+device.name Cordless Mouse+Keyboard Receiver
-
- vendor.id usb 0x046d
-&device.id usb 0xc504
-+device.name Cordless Mouse+Keyboard Receiver
-
- vendor.id usb 0x046d
-&device.id usb 0xd001
-+device.name QuickCam Pro
-
- vendor.id usb 0x046e
-+vendor.name Behavior Tech. Computer
-
- vendor.id usb 0x046e
-&device.id usb 0x6782
-+device.name BTC 7932 mouse+keyboard
-
- vendor.id usb 0x046f
-+vendor.name Crystal Semiconductor
-
- vendor.id usb 0x0471
-+vendor.name Philips
-
- vendor.id usb 0x0471
-&device.id usb 0x0101
-+device.name DSS350 Digital Speaker System
-
- vendor.id usb 0x0471
-&device.id usb 0x0104
-+device.name DSS330 Digital Speaker System [uda1321]
-
- vendor.id usb 0x0471
-&device.id usb 0x0201
-+device.name Hub
-
- vendor.id usb 0x0471
-&device.id usb 0x0222
-+device.name Creative Nomad Jukebox
-
- vendor.id usb 0x0471
-&device.id usb 0x0302
-+device.name PCA645VC WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0303
-+device.name PCA646VC WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0304
-+device.name Askey VC010 WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0307
-+device.name PCVC675K WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0308
-+device.name PCVC680K WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x030c
-+device.name PCVC690K WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0310
-+device.name PCVC730K WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0311
-+device.name PCVC740K ToUcam Pro [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0312
-+device.name PCVC750K WebCam [pwc]
-
- vendor.id usb 0x0471
-&device.id usb 0x0471
-+device.name Digital Speaker System
-
- vendor.id usb 0x0471
-&device.id usb 0x0601
-+device.name OVU1020 IR Dongle (Kbd+Mouse)
-
- vendor.id usb 0x0471
-&device.id usb 0x0701
-+device.name 150P1 TFT Display
-
- vendor.id usb 0x0471
-&device.id usb 0x1801
-+device.name Diva MP3 player
-
- vendor.id usb 0x0472
-+vendor.name Chicony
-
- vendor.id usb 0x0472
-&device.id usb 0x0065
-+device.name PFU-65 Keyboard
-
- vendor.id usb 0x0473
-+vendor.name Sanyo Information Business Co., Ltd.
-
- vendor.id usb 0x0474
-+vendor.name Sanyo Electric Co. Ltd.
-
- vendor.id usb 0x0475
-+vendor.name Relisys/Teco Information System
-
- vendor.id usb 0x0476
-+vendor.name AESP
-
- vendor.id usb 0x0477
-+vendor.name Seagate Technology
-
- vendor.id usb 0x0478
-+vendor.name Connectix Corp.
-
- vendor.id usb 0x0478
-&device.id usb 0x0001
-+device.name QuickCam
-
- vendor.id usb 0x0478
-&device.id usb 0x0002
-+device.name QuickClip
-
- vendor.id usb 0x0479
-+vendor.name Advanced Peripheral Laboratories
-
- vendor.id usb 0x047a
-+vendor.name USAR Systems
-
- vendor.id usb 0x047b
-+vendor.name Silitek Corp.
-
- vendor.id usb 0x047b
-&device.id usb 0x0002
-+device.name Keyboard and Mouse
-
- vendor.id usb 0x047b
-&device.id usb 0x0101
-+device.name BlueTooth Keyboard and Mouse
-
- vendor.id usb 0x047b
-&device.id usb 0x1002
-+device.name HP ScanJet 4300c Parallel Port
-
- vendor.id usb 0x047c
-+vendor.name Dell Computer Corp.
-
- vendor.id usb 0x047d
-+vendor.name Kensington
-
- vendor.id usb 0x047d
-&device.id usb 0x1003
-+device.name Orbit TrackBall
-
- vendor.id usb 0x047d
-&device.id usb 0x1005
-+device.name TurboBall
-
- vendor.id usb 0x047d
-&device.id usb 0x5002
-+device.name VideoCam CABO II
-
- vendor.id usb 0x047d
-&device.id usb 0x5003
-+device.name VideoCam
-
- vendor.id usb 0x047d
-&device.id usb 0x4006
-+device.name Gravis Eliminator AfterShock
-
- vendor.id usb 0x047d
-&device.id usb 0x4005
-+device.name Gravis Eliminator GamePad Pro
-
- vendor.id usb 0x047d
-&device.id usb 0x4008
-+device.name Gravis Destroyer TiltPad
-
- vendor.id usb 0x047e
-+vendor.name Agere (Lucent)
-
- vendor.id usb 0x047e
-&device.id usb 0x1001
-+device.name USS720 Parallel Port
-
- vendor.id usb 0x047e
-&device.id usb 0xf101
-+device.name Atlas Modem
-
- vendor.id usb 0x047f
-+vendor.name Plantronics, Inc.
-
- vendor.id usb 0x0480
-+vendor.name Toshiba America Info. Systems, Inc.
-
- vendor.id usb 0x0481
-+vendor.name Zenith Data Systems
-
- vendor.id usb 0x0482
-+vendor.name Kyocera Electronics, Inc.
-
- vendor.id usb 0x0483
-+vendor.name SGS Thomson Microelectronics
-
- vendor.id usb 0x0483
-&device.id usb 0x7554
-+device.name 56k SoftModem
-
- vendor.id usb 0x0484
-+vendor.name Specialix
-
- vendor.id usb 0x0485
-+vendor.name Nokia Monitors
-
- vendor.id usb 0x0486
-+vendor.name ASUS Computers Inc.
-
- vendor.id usb 0x0487
-+vendor.name Stewart Connector
-
- vendor.id usb 0x0488
-+vendor.name Cirque Corp.
-
- vendor.id usb 0x0489
-+vendor.name Foxconn / Hon Hai
-
- vendor.id usb 0x0489
-&device.id usb 0x0502
-+device.name SmartMedia Card Reader Firmware Loader
-
- vendor.id usb 0x0489
-&device.id usb 0x0503
-+device.name SmartMedia Card Reader
-
- vendor.id usb 0x048a
-+vendor.name S-MOS Systems, Inc.
-
- vendor.id usb 0x048c
-+vendor.name Alps Electric Ireland Ltd.
-
- vendor.id usb 0x048d
-+vendor.name Integrated Technology Express
-
- vendor.id usb 0x048f
-+vendor.name Eicon Tech.
-
- vendor.id usb 0x0490
-+vendor.name United Microelectronics Corp.
-
- vendor.id usb 0x0491
-+vendor.name Capetronic
-
- vendor.id usb 0x0492
-+vendor.name Samsung SemiConductor, Inc.
-
- vendor.id usb 0x0493
-+vendor.name MAG Technology Co., Ltd.
-
- vendor.id usb 0x0495
-+vendor.name ESS Technology, Inc.
-
- vendor.id usb 0x0496
-+vendor.name Micron Electronics
-
- vendor.id usb 0x0497
-+vendor.name Smile International
-
- vendor.id usb 0x0498
-+vendor.name Capetronic (Kaohsiung) Corp.
-
- vendor.id usb 0x0499
-+vendor.name Yamaha Corp.
-
- vendor.id usb 0x0499
-&device.id usb 0x6001
-+device.name CRW2200UX Lightspeed 2 External CD-RW Drive
-
- vendor.id usb 0x049a
-+vendor.name Gandalf Technologies Ltd.
-
- vendor.id usb 0x049b
-+vendor.name Curtis Computer Products
-
- vendor.id usb 0x049c
-+vendor.name Acer Advanced Labs, Inc.
-
- vendor.id usb 0x049c
-&device.id usb 0x0002
-+device.name Keyboard (???)
-
- vendor.id usb 0x049d
-+vendor.name VLSI Technology
-
- vendor.id usb 0x049f
-+vendor.name Compaq Computer Corp.
-
- vendor.id usb 0x049f
-&device.id usb 0x0003
-+device.name iPAQ PocketPC
-
- vendor.id usb 0x049f
-&device.id usb 0x000e
-+device.name Internet Keyboard
-
- vendor.id usb 0x049f
-&device.id usb 0x0018
-+device.name PA-1/PA-2 MP3 Player
-
- vendor.id usb 0x049f
-&device.id usb 0x0033
-+device.name Evo N600c Builtin Wireless Ethernet [orinoco]
-
- vendor.id usb 0x049f
-&device.id usb 0x505a
-+device.name SA-11x0 based Linux Device, or Itsy (experimental)
-
- vendor.id usb 0x049f
-&device.id usb 0x8511
-+device.name iPAQ Networking 10/100 Ethernet [pegasus2]
-
- vendor.id usb 0x04a0
-+vendor.name Digital Equipment Corp.
-
- vendor.id usb 0x04a1
-+vendor.name SystemSoft Corp.
-
- vendor.id usb 0x04a2
-+vendor.name FirePower Systems
-
- vendor.id usb 0x04a3
-+vendor.name Trident Microsystems Inc.
-
- vendor.id usb 0x04a4
-+vendor.name Hitachi, Ltd.
-
- vendor.id usb 0x04a5
-+vendor.name Acer Peripherals Inc.
-
- vendor.id usb 0x04a5
-&device.id usb 0x0001
-+device.name Keyboard
-
- vendor.id usb 0x04a5
-&device.id usb 0x12a6
-+device.name AcerScan C310U
-
- vendor.id usb 0x04a5
-&device.id usb 0x1a20
-+device.name Prisa 310U
-
- vendor.id usb 0x04a5
-&device.id usb 0x1a2a
-+device.name Prisa 620U
-
- vendor.id usb 0x04a5
-&device.id usb 0x2022
-+device.name Prisa 320U/340U
-
- vendor.id usb 0x04a5
-&device.id usb 0x2040
-+device.name Prisa 620UT
-
- vendor.id usb 0x04a5
-&device.id usb 0x2060
-+device.name Prisa 620U+/640U
-
- vendor.id usb 0x04a5
-&device.id usb 0x207e
-+device.name Prisa 640BU
-
- vendor.id usb 0x04a5
-&device.id usb 0x20b0
-+device.name S2W 3300U/4300U
-
- vendor.id usb 0x04a5
-&device.id usb 0x20be
-+device.name Prisa 640BT
-
- vendor.id usb 0x04a5
-&device.id usb 0x20c0
-+device.name Prisa 1240UT
-
- vendor.id usb 0x04a5
-&device.id usb 0x20de
-+device.name S2W 4300U+
-
- vendor.id usb 0x04a5
-&device.id usb 0x20fe
-+device.name SW2 5300U
-
- vendor.id usb 0x04a5
-&device.id usb 0x9213
-+device.name Kbd Hub
-
- vendor.id usb 0x04a6
-+vendor.name Nokia Display Products
-
- vendor.id usb 0x04a7
-+vendor.name Visioneer
-
- vendor.id usb 0x04a7
-&device.id usb 0x0211
-+device.name OneTouch 7600 Scanner
-
- vendor.id usb 0x04a7
-&device.id usb 0x0221
-+device.name OneTouch 5300 Scanner
-
- vendor.id usb 0x04a7
-&device.id usb 0x0224
-+device.name Microtek Scanport 3000
-
- vendor.id usb 0x04a7
-&device.id usb 0x0231
-+device.name 6100 Scanner
-
- vendor.id usb 0x04a7
-&device.id usb 0x0311
-+device.name 6200 EPP/USB Scanner
-
- vendor.id usb 0x04a7
-&device.id usb 0x0321
-+device.name OneTouch 8100 EPP/USB Scanner
-
- vendor.id usb 0x04a7
-&device.id usb 0x0331
-+device.name OneTouch 8600 EPP/USB Scanner
-
- vendor.id usb 0x04a8
-+vendor.name Multivideo Labs, Inc.
-
- vendor.id usb 0x04a9
-+vendor.name Canon Inc.
-
- vendor.id usb 0x04a9
-&device.id usb 0x1051
-+device.name BJC-3000 Color Printer
-
- vendor.id usb 0x04a9
-&device.id usb 0x1056
-+device.name BJC-2110 Color Printer
-
- vendor.id usb 0x04a9
-&device.id usb 0x105b
-+device.name S600 Printer
-
- vendor.id usb 0x04a9
-&device.id usb 0x105d
-+device.name S450 Printer
-
- vendor.id usb 0x04a9
-&device.id usb 0x1062
-+device.name S500 Printer
-
- vendor.id usb 0x04a9
-&device.id usb 0x1064
-+device.name S300 Printer
-
- vendor.id usb 0x04a9
-&device.id usb 0x2204
-+device.name CanoScan FB630U
-
- vendor.id usb 0x04a9
-&device.id usb 0x2205
-+device.name CanoScan FB1210U
-
- vendor.id usb 0x04a9
-&device.id usb 0x2206
-+device.name CanoScan N650U
-
- vendor.id usb 0x04a9
-&device.id usb 0x2207
-+device.name CanoScan 1220U
-
- vendor.id usb 0x04a9
-&device.id usb 0x2208
-+device.name CanoScan D660U
-
- vendor.id usb 0x04a9
-&device.id usb 0x220d
-+device.name CanoScan N670U
-
- vendor.id usb 0x04a9
-&device.id usb 0x3041
-+device.name PowerShot S10
-
- vendor.id usb 0x04a9
-&device.id usb 0x3043
-+device.name PowerShot S20
-
- vendor.id usb 0x04a9
-&device.id usb 0x3045
-+device.name PowerShot S100
-
- vendor.id usb 0x04a9
-&device.id usb 0x3047
-+device.name Digital IXUS
-
- vendor.id usb 0x04a9
-&device.id usb 0x3048
-+device.name PowerShot G1
-
- vendor.id usb 0x04a9
-&device.id usb 0x3049
-+device.name PowerShot Pro90 IS
-
- vendor.id usb 0x04a9
-&device.id usb 0x304b
-+device.name IXY Digital 300
-
- vendor.id usb 0x04a9
-&device.id usb 0x304e
-+device.name PowerShot A20
-
- vendor.id usb 0x04a9
-&device.id usb 0x304f
-+device.name PowerShot A10
-
- vendor.id usb 0x04a9
-&device.id usb 0x3056
-+device.name PowerShot S40
-
- vendor.id usb 0x04a9
-&device.id usb 0x3058
-+device.name PowerShot A40
-
- vendor.id usb 0x04aa
-+vendor.name DaeWoo Telecom, Ltd.
-
- vendor.id usb 0x04ab
-+vendor.name Chromatic Research
-
- vendor.id usb 0x04ac
-+vendor.name Micro Audiometrics Corp.
-
- vendor.id usb 0x04ad
-+vendor.name Dooin Electronics
-
- vendor.id usb 0x04af
-+vendor.name Winnov L.P.
-
- vendor.id usb 0x04b0
-+vendor.name Nikon Corp.
-
- vendor.id usb 0x04b0
-&device.id usb 0x0102
-+device.name Coolpix 990
-
- vendor.id usb 0x04b0
-&device.id usb 0x0103
-+device.name Coolpix 880
-
- vendor.id usb 0x04b0
-&device.id usb 0x0104
-+device.name Coolpix 995
-
- vendor.id usb 0x04b0
-&device.id usb 0x0106
-+device.name Coolpix 775
-
- vendor.id usb 0x04b0
-&device.id usb 0x0107
-+device.name Coolpix 5000
-
- vendor.id usb 0x04b1
-+vendor.name Pan International
-
- vendor.id usb 0x04b3
-+vendor.name IBM Corp.
-
- vendor.id usb 0x04b3
-&device.id usb 0x3004
-+device.name Media Access Pro Keyboard
-
- vendor.id usb 0x04b3
-&device.id usb 0x3100
-+device.name NetVista Mouse
-
- vendor.id usb 0x04b3
-&device.id usb 0x4427
-+device.name Portable CD ROM
-
- vendor.id usb 0x04b3
-&device.id usb 0x4525
-+device.name Double sided CRT
-
- vendor.id usb 0x04b3
-&device.id usb 0x4550
-+device.name NVRAM (128 KB)
-
- vendor.id usb 0x04b3
-&device.id usb 0x4554
-+device.name Cash Drawer
-
- vendor.id usb 0x04b3
-&device.id usb 0x4580
-+device.name Hub w/ NVRAM
-
- vendor.id usb 0x04b3
-&device.id usb 0x4581
-+device.name 4800-2xx Hub w/ Cash Drawer
-
- vendor.id usb 0x04b3
-&device.id usb 0x4604
-+device.name Keyboard w/ Card Reader
-
- vendor.id usb 0x04b3
-&device.id usb 0x4671
-+device.name 4820 LCD w/ MSR/KB
-
- vendor.id usb 0x04b4
-+vendor.name Cypress Semiconductor
-
- vendor.id usb 0x04b4
-&device.id usb 0x0000
-+device.name Dacal DC-101 CD Library
-
- vendor.id usb 0x04b4
-&device.id usb 0x0001
-+device.name Mouse
-
- vendor.id usb 0x04b4
-&device.id usb 0x0002
-+device.name CY7C63x0x Thermometer
-
- vendor.id usb 0x04b4
-&device.id usb 0x1002
-+device.name CY7C63001 R100 FM Radio
-
- vendor.id usb 0x04b4
-&device.id usb 0x8613
-+device.name CY7C68013 EZ-USB FX2 USB 2.0 Development Kit
-
- vendor.id usb 0x04b4
-&device.id usb 0xd5d5
-+device.name CY7C63x0x Zoltrix Z-Boxer GamePad
-
- vendor.id usb 0x04b5
-+vendor.name ROHM LSI Systems, Inc.
-
- vendor.id usb 0x04b6
-+vendor.name Hint Corp.
-
- vendor.id usb 0x04b7
-+vendor.name Compal Electronics, Inc.
-
- vendor.id usb 0x04b8
-+vendor.name Seiko Epson Corp.
-
- vendor.id usb 0x04b8
-&device.id usb 0x0001
-+device.name Stylus Color 740 / Photo 750
-
- vendor.id usb 0x04b8
-&device.id usb 0x0002
-+device.name ISD Smart Cable for Mac
-
- vendor.id usb 0x04b8
-&device.id usb 0x0003
-+device.name ISD Smart Cable
-
- vendor.id usb 0x04b8
-&device.id usb 0x0005
-+device.name Stylus Printer
-
- vendor.id usb 0x04b8
-&device.id usb 0x0101
-+device.name Perfection 636
-
- vendor.id usb 0x04b8
-&device.id usb 0x0103
-+device.name Perfection 610
-
- vendor.id usb 0x04b8
-&device.id usb 0x0104
-+device.name Perfection 1200
-
- vendor.id usb 0x04b8
-&device.id usb 0x0106
-+device.name Stylus Scan 2500
-
- vendor.id usb 0x04b8
-&device.id usb 0x0107
-+device.name Expression 1600U
-
- vendor.id usb 0x04b8
-&device.id usb 0x010a
-+device.name Perfection 1640SU
-
- vendor.id usb 0x04b8
-&device.id usb 0x010b
-+device.name Perfection 1240
-
- vendor.id usb 0x04b8
-&device.id usb 0x010c
-+device.name Perfection 640
-
- vendor.id usb 0x04b8
-&device.id usb 0x010f
-+device.name Perfection 1250
-
- vendor.id usb 0x04b8
-&device.id usb 0x0110
-+device.name Perfection 1650
-
- vendor.id usb 0x04b8
-&device.id usb 0x0202
-+device.name Receipt Printer M129C
-
- vendor.id usb 0x04b8
-&device.id usb 0x0601
-+device.name Stylus Photo 875DC Card Reader
-
- vendor.id usb 0x04b8
-&device.id usb 0x0602
-+device.name Stylus Photo 895 Card Reader
-
- vendor.id usb 0x04b9
-+vendor.name Rainbow Technologies, Inc.
-
- vendor.id usb 0x04b9
-&device.id usb 0x1000
-+device.name iKey 1000 Token
-
- vendor.id usb 0x04b9
-&device.id usb 0x1001
-+device.name iKey 1200 Token
-
- vendor.id usb 0x04b9
-&device.id usb 0x1200
-+device.name iKey 2000 Token
-
- vendor.id usb 0x04b9
-&device.id usb 0x1202
-+device.name iKey 2032 Token
-
- vendor.id usb 0x04b9
-&device.id usb 0x1300
-+device.name iKey 3000 Token
-
- vendor.id usb 0x04ba
-+vendor.name Toucan Systems Ltd.
-
- vendor.id usb 0x04bb
-+vendor.name I-O Data Device, Inc.
-
- vendor.id usb 0x04bb
-&device.id usb 0x0904
-+device.name ET/TX Ethernet [pegasus]
-
- vendor.id usb 0x04bb
-&device.id usb 0x0913
-+device.name ET/TX-S Ethernet [pegasus2]
-
- vendor.id usb 0x04bd
-+vendor.name Toshiba Electronics Taiwan Corp.
-
- vendor.id usb 0x04be
-+vendor.name Telia Research AB
-
- vendor.id usb 0x04bf
-+vendor.name TDK Corp.
-
- vendor.id usb 0x04bf
-&device.id usb 0x0100
-+device.name MediaReader CF
-
- vendor.id usb 0x04c1
-+vendor.name U.S. Robotics (3Com)
-
- vendor.id usb 0x04c1
-&device.id usb 0x0082
-+device.name OfficeConnect Analog Modem
-
- vendor.id usb 0x04c1
-&device.id usb 0x008f
-+device.name Pro ISDN TA
-
- vendor.id usb 0x04c1
-&device.id usb 0x009d
-+device.name HomeConnect WebCam [vicam]
-
- vendor.id usb 0x04c1
-&device.id usb 0x3021
-+device.name 56k Voice FaxModem Pro
-
- vendor.id usb 0x04c2
-+vendor.name Methode Electronics Far East PTE Ltd.
-
- vendor.id usb 0x04c3
-+vendor.name Maxi Switch, Inc.
-
- vendor.id usb 0x04c4
-+vendor.name Lockheed Martin Energy Research
-
- vendor.id usb 0x04c5
-+vendor.name Fujitsu Ltd.
-
- vendor.id usb 0x04c6
-+vendor.name Toshiba America Electronic Components
-
- vendor.id usb 0x04c7
-+vendor.name Micro Macro Technologies
-
- vendor.id usb 0x04c8
-+vendor.name Konica Corp.
-
- vendor.id usb 0x04c8
-&device.id usb 0x0720
-+device.name Digital Color Camera
-
- vendor.id usb 0x04c8
-&device.id usb 0x0721
-+device.name e-miniD Camera
-
- vendor.id usb 0x04c8
-&device.id usb 0x0723
-+device.name KD-200Z Camera
-
- vendor.id usb 0x04ca
-+vendor.name Lite-On Technology Corp.
-
- vendor.id usb 0x04cb
-+vendor.name Fuji Photo Film Co., Ltd.
-
- vendor.id usb 0x04cb
-&device.id usb 0x0100
-+device.name FinePix 1300 / 1400 / 4700 Zoom digital camrea
-
- vendor.id usb 0x04cb
-&device.id usb 0x0103
-+device.name FinePix NX-700 printer
-
- vendor.id usb 0x04cc
-+vendor.name Philips Semiconductors
-
- vendor.id usb 0x04cc
-&device.id usb 0x1122
-+device.name Hub
-
- vendor.id usb 0x04cc
-&device.id usb 0x8116
-+device.name Camera
-
- vendor.id usb 0x04cd
-+vendor.name Tatung Co. Of America
-
- vendor.id usb 0x04ce
-+vendor.name ScanLogic Corp.
-
- vendor.id usb 0x04ce
-&device.id usb 0x0002
-+device.name SL11R-IDE IDE Bridge
-
- vendor.id usb 0x04cf
-+vendor.name Myson Technology Inc.
-
- vendor.id usb 0x04d0
-+vendor.name Digi International
-
- vendor.id usb 0x04d1
-+vendor.name ITT Canon
-
- vendor.id usb 0x04d2
-+vendor.name Altec Lansing Technologies
-
- vendor.id usb 0x04d2
-&device.id usb 0x0311
-+device.name ADA-310 Speakers
-
- vendor.id usb 0x04d2
-&device.id usb 0xff05
-+device.name ADA-305 Speakers
-
- vendor.id usb 0x04d3
-+vendor.name VidUS, Inc.
-
- vendor.id usb 0x04d4
-+vendor.name LSI Logic Corp.
-
- vendor.id usb 0x04d5
-+vendor.name Forte Technologies, Inc.
-
- vendor.id usb 0x04d6
-+vendor.name Mentor Graphics
-
- vendor.id usb 0x04d7
-+vendor.name Oki Semiconductor
-
- vendor.id usb 0x04d8
-+vendor.name Microchip Technology Inc.
-
- vendor.id usb 0x04d9
-+vendor.name Holtek Semiconductor, Inc.
-
- vendor.id usb 0x04da
-+vendor.name Panasonic (Matsushita)
-
- vendor.id usb 0x04db
-+vendor.name Hypertec Pty Ltd.
-
- vendor.id usb 0x04dc
-+vendor.name Huan Hsin Co.
-
- vendor.id usb 0x04dd
-+vendor.name Sharp Corp.
-
- vendor.id usb 0x04dd
-&device.id usb 0x8004
-+device.name Zaurus SL-5000D/SL-5500 PDA
-
- vendor.id usb 0x04de
-+vendor.name MindShare, Inc.
-
- vendor.id usb 0x04df
-+vendor.name Interlink Electronics
-
- vendor.id usb 0x04e1
-+vendor.name Iiyama North America Inc.
-
- vendor.id usb 0x04e1
-&device.id usb 0x0201
-+device.name Monitor Hub
-
- vendor.id usb 0x04e2
-+vendor.name Exar Corp.
-
- vendor.id usb 0x04e3
-+vendor.name Zilog
-
- vendor.id usb 0x04e4
-+vendor.name ACC Microelectronics
-
- vendor.id usb 0x04e5
-+vendor.name Promise Technology
-
- vendor.id usb 0x04e6
-+vendor.name Shuttle Technology Inc.
-
- vendor.id usb 0x04e6
-&device.id usb 0x0001
-+device.name E-USB ATA Bridge
-
- vendor.id usb 0x04e6
-&device.id usb 0x0002
-+device.name eUSCSI SCSI Bridge
-
- vendor.id usb 0x04e6
-&device.id usb 0x0003
-+device.name eUSB SmartMedia Card Reader
-
- vendor.id usb 0x04e6
-&device.id usb 0x0005
-+device.name eUSB SmartMedia/CompactFlash Card Reader
-
- vendor.id usb 0x04e6
-&device.id usb 0x0006
-+device.name eUSB SmartMedia Card Reader
-
- vendor.id usb 0x04e6
-&device.id usb 0x0007
-+device.name Hifd
-
- vendor.id usb 0x04e6
-&device.id usb 0x0101
-+device.name E-USB ATA Bridge
-
- vendor.id usb 0x04e6
-&device.id usb 0x1010
-+device.name USBAT-2 CompactFlash Card Reader
-
- vendor.id usb 0x04e7
-+vendor.name Elo TouchSystems
-
- vendor.id usb 0x04e7
-&device.id usb 0x0001
-+device.name TouchScreen
-
- vendor.id usb 0x04e8
-+vendor.name Samsung Electronics Co., Ltd.
-
- vendor.id usb 0x04e8
-&device.id usb 0x5a03
-+device.name Yepp MP3 Player
-
- vendor.id usb 0x04e9
-+vendor.name PC-Tel Inc.
-
- vendor.id usb 0x04ea
-+vendor.name Brooktree Corp.
-
- vendor.id usb 0x04eb
-+vendor.name Northstar Systems, Inc.
-
- vendor.id usb 0x04ec
-+vendor.name Tokyo Electron Limited
-
- vendor.id usb 0x04ed
-+vendor.name Annabooks
-
- vendor.id usb 0x04ef
-+vendor.name Pacific Electronic International, Inc.
-
- vendor.id usb 0x04f0
-+vendor.name Daewoo Electronics Co., Ltd.
-
- vendor.id usb 0x04f1
-+vendor.name Victor Company of Japan (JVC)
-
- vendor.id usb 0x04f1
-&device.id usb 0x0001
-+device.name GC-QX3 Digital Still Camera
-
- vendor.id usb 0x04f1
-&device.id usb 0x0004
-+device.name GR-DVL815U Digital Video Camera
-
- vendor.id usb 0x04f2
-+vendor.name Chicony Electronics Co., Ltd.
-
- vendor.id usb 0x04f2
-&device.id usb 0x0001
-+device.name KU-8933 Keyboard
-
- vendor.id usb 0x04f2
-&device.id usb 0x0002
-+device.name NT68P81 Keyboard
-
- vendor.id usb 0x04f2
-&device.id usb 0x0112
-+device.name KU-8933 Keyboard with PS/2 Mouse port
-
- vendor.id usb 0x04f3
-+vendor.name Elan Microelectronics Corportation
-
- vendor.id usb 0x04f4
-+vendor.name Harting Elektronik Inc.
-
- vendor.id usb 0x04f5
-+vendor.name Fujitsu-ICL Systems, Inc.
-
- vendor.id usb 0x04f6
-+vendor.name Norand Corp.
-
- vendor.id usb 0x04f7
-+vendor.name Newnex Technology Corp.
-
- vendor.id usb 0x04f8
-+vendor.name FuturePlus Systems
-
- vendor.id usb 0x04f9
-+vendor.name Brother Industries, Ltd.
-
- vendor.id usb 0x04f9
-&device.id usb 0x0002
-+device.name HL-1050 Laser Printer
-
- vendor.id usb 0x04f9
-&device.id usb 0x0007
-+device.name HL-1250 Laser Printer
-
- vendor.id usb 0x04f9
-&device.id usb 0x0008
-+device.name HL-1270 Laser Printer
-
- vendor.id usb 0x04fa
-+vendor.name Dallas Semiconductor
-
- vendor.id usb 0x04fa
-&device.id usb 0x2490
-+device.name DS1490F 2-in-1 Fob, 1-Wire adapter
-
- vendor.id usb 0x04fa
-&device.id usb 0x4201
-+device.name DS4201 Audio DAC
-
- vendor.id usb 0x04fb
-+vendor.name Biostar Microtech Int'l Corp.
-
- vendor.id usb 0x04fc
-+vendor.name Sunplus Technology Co.
-
- vendor.id usb 0x04fd
-+vendor.name Soliton Systems, K.K.
-
- vendor.id usb 0x04fe
-+vendor.name PFU Limited
-
- vendor.id usb 0x04ff
-+vendor.name E-CMOS Corp.
-
- vendor.id usb 0x0500
-+vendor.name Siam United Hi-Tech
-
- vendor.id usb 0x0501
-+vendor.name DDK Electronics, Inc.
-
- vendor.id usb 0x0502
-+vendor.name Acer, Inc.
-
- vendor.id usb 0x0502
-&device.id usb 0xd001
-+device.name Divio NW801/DVC-V6+ Digital Camera
-
- vendor.id usb 0x0503
-+vendor.name Hitachi America Ltd.
-
- vendor.id usb 0x0504
-+vendor.name Hayes Microcomputer Products
-
- vendor.id usb 0x0506
-+vendor.name 3Com Corp.
-
- vendor.id usb 0x0506
-&device.id usb 0x03e8
-+device.name 3C19250 Ethernet [klsi]
-
- vendor.id usb 0x0506
-&device.id usb 0x4601
-+device.name 3C460B USB 10/100 Ethernet Adaptor
-
- vendor.id usb 0x0506
-&device.id usb 0xf002
-+device.name 3CP4218 ADSL Modem (pre-init)
-
- vendor.id usb 0x0506
-&device.id usb 0xf003
-+device.name 3CP4218 ADSL Modem
-
- vendor.id usb 0x0506
-&device.id usb 0xf100
-+device.name 3CP4218 ADSL Modem (pre-init)
-
- vendor.id usb 0x0507
-+vendor.name Hosiden Corp.
-
- vendor.id usb 0x0508
-+vendor.name Clarion Co., Ltd.
-
- vendor.id usb 0x0509
-+vendor.name Aztech Systems Ltd.
-
- vendor.id usb 0x050a
-+vendor.name Cinch Connectors
-
- vendor.id usb 0x050b
-+vendor.name Cable System International
-
- vendor.id usb 0x050c
-+vendor.name InnoMedia, Inc.
-
- vendor.id usb 0x050d
-+vendor.name Belkin Components
-
- vendor.id usb 0x050d
-&device.id usb 0x0103
-+device.name F5U103 Serial Adapter [etek]
-
- vendor.id usb 0x050d
-&device.id usb 0x0109
-+device.name F5U109 PDA Adapter
-
- vendor.id usb 0x050d
-&device.id usb 0x0115
-+device.name SCSI Adapter
-
- vendor.id usb 0x050d
-&device.id usb 0x0121
-+device.name F5D5050 100Mbps Ethernet
-
- vendor.id usb 0x050d
-&device.id usb 0x0208
-+device.name Video Adapter [nt1004]
-
- vendor.id usb 0x050d
-&device.id usb 0x0805
-+device.name Nostromo N50 GamePad
-
- vendor.id usb 0x050d
-&device.id usb 0x1203
-+device.name F5U120-PC Serial Port
-
- vendor.id usb 0x050e
-+vendor.name Neon Technology, Inc.
-
- vendor.id usb 0x050f
-+vendor.name KC Technology Inc.
-
- vendor.id usb 0x050f
-&device.id usb 0x0003
-+device.name KC82C160S Hub
-
- vendor.id usb 0x050f
-&device.id usb 0x0180
-+device.name KC-180 IrDA Dongle
-
- vendor.id usb 0x0510
-+vendor.name Sejin Electron Inc.
-
- vendor.id usb 0x0511
-+vendor.name N'Able (DataBook) Technologies, Inc.
-
- vendor.id usb 0x0512
-+vendor.name Hualon Microelectronics Corp.
-
- vendor.id usb 0x0513
-+vendor.name digital-X, Inc.
-
- vendor.id usb 0x0514
-+vendor.name FCI/Berg Electronics Group
-
- vendor.id usb 0x0515
-+vendor.name ACTC
-
- vendor.id usb 0x0516
-+vendor.name Longwell Electronics
-
- vendor.id usb 0x0517
-+vendor.name Butterfly Communications
-
- vendor.id usb 0x0518
-+vendor.name EzKEY Corp.
-
- vendor.id usb 0x0519
-+vendor.name Star Micronics Co., Ltd.
-
- vendor.id usb 0x051a
-+vendor.name WYSE Technology
-
- vendor.id usb 0x051b
-+vendor.name Silicon Graphics
-
- vendor.id usb 0x051c
-+vendor.name Shuttle Inc.
-
- vendor.id usb 0x051d
-+vendor.name American Power Conversion
-
- vendor.id usb 0x051d
-&device.id usb 0x0002
-+device.name Back-UPS Pro 500
-
- vendor.id usb 0x051e
-+vendor.name Scientific Atlanta
-
- vendor.id usb 0x051f
-+vendor.name IO Systems (Elite Electronics), Inc.
-
- vendor.id usb 0x0520
-+vendor.name Taiwan Semiconductor Manufacturing Co.
-
- vendor.id usb 0x0521
-+vendor.name Airborn Connectors
-
- vendor.id usb 0x0522
-+vendor.name Advanced Connectek USA Inc.
-
- vendor.id usb 0x0523
-+vendor.name ATEN GmbH
-
- vendor.id usb 0x0524
-+vendor.name Sola Electronics
-
- vendor.id usb 0x0525
-+vendor.name Netchip Technology Inc.
-
- vendor.id usb 0x0525
-&device.id usb 0x1080
-+device.name NET1080 USB-USB Bridge
-
- vendor.id usb 0x0526
-+vendor.name Temic MHS S.A.
-
- vendor.id usb 0x0527
-+vendor.name ALTRA
-
- vendor.id usb 0x0528
-+vendor.name ATI Technologies, Inc.
-
- vendor.id usb 0x0528
-&device.id usb 0x7561
-+device.name TV Wonder
-
- vendor.id usb 0x0529
-+vendor.name Aladdin Knowledge Systems
-
- vendor.id usb 0x0529
-&device.id usb 0x0001
-+device.name HASP v0.06
-
- vendor.id usb 0x0529
-&device.id usb 0x030b
-+device.name eToken R1 v3.1.3.x
-
- vendor.id usb 0x0529
-&device.id usb 0x0313
-+device.name eToken R1 v3.2.3.x
-
- vendor.id usb 0x0529
-&device.id usb 0x031b
-+device.name eToken R1 v3.3.3.x
-
- vendor.id usb 0x0529
-&device.id usb 0x0323
-+device.name eToken R1 v3.4.3.x
-
- vendor.id usb 0x0529
-&device.id usb 0x050c
-+device.name eToken Pro v4.1.5.x
-
- vendor.id usb 0x0529
-&device.id usb 0x0412
-+device.name eToken R2 v2.2.4.x
-
- vendor.id usb 0x0529
-&device.id usb 0x041a
-+device.name eToken R2 v2.2.4.x
-
- vendor.id usb 0x0529
-&device.id usb 0x0422
-+device.name eToken R2 v2.4.4.x
-
- vendor.id usb 0x0529
-&device.id usb 0x042a
-+device.name eToken R2 v2.5.4.x
-
- vendor.id usb 0x052a
-+vendor.name Crescent Heart Software
-
- vendor.id usb 0x052b
-+vendor.name Tekom Technologies, Inc.
-
- vendor.id usb 0x052c
-+vendor.name Canon Information System
-
- vendor.id usb 0x052d
-+vendor.name Avid Electronics Corp.
-
- vendor.id usb 0x052e
-+vendor.name Standard Microsystems Corp.
-
- vendor.id usb 0x052f
-+vendor.name Unicore Software, Inc.
-
- vendor.id usb 0x0530
-+vendor.name American Microsystems Inc.
-
- vendor.id usb 0x0531
-+vendor.name Wacom Technology Corp.
-
- vendor.id usb 0x0532
-+vendor.name Systech Corp.
-
- vendor.id usb 0x0533
-+vendor.name Alcatel Mobile Phones
-
- vendor.id usb 0x0534
-+vendor.name Motorola
-
- vendor.id usb 0x0535
-+vendor.name LIH TZU Electric Co., Ltd.
-
- vendor.id usb 0x0536
-+vendor.name Welch Allyn Inc.
-
- vendor.id usb 0x0537
-+vendor.name Inventec Corp.
-
- vendor.id usb 0x0538
-+vendor.name Santa Cruz Operation
-
- vendor.id usb 0x0539
-+vendor.name Shyh Shiun Terminals Co. Ltd.
-
- vendor.id usb 0x053a
-+vendor.name Preh Werke GmbH & Co. KG
-
- vendor.id usb 0x053b
-+vendor.name Global Village Communication
-
- vendor.id usb 0x053c
-+vendor.name Institut of Microelectronic & Mechatronic Systems
-
- vendor.id usb 0x053d
-+vendor.name Silicon Architect
-
- vendor.id usb 0x053e
-+vendor.name Mobility Electronics
-
- vendor.id usb 0x053f
-+vendor.name Synopsys, Inc.
-
- vendor.id usb 0x0540
-+vendor.name UniAccess AB
-
- vendor.id usb 0x0540
-&device.id usb 0x0101
-+device.name Panache Surf ISDN TA
-
- vendor.id usb 0x0541
-+vendor.name Sirf Technology, Inc.
-
- vendor.id usb 0x0543
-+vendor.name ViewSonic Corp.
-
- vendor.id usb 0x0543
-&device.id usb 0x00fe
-+device.name G773 Monitor Hub
-
- vendor.id usb 0x0543
-&device.id usb 0x00ff
-+device.name P815 Monitor Hub
-
- vendor.id usb 0x0543
-&device.id usb 0x4153
-+device.name ViewSonic G773 Control (?)
-
- vendor.id usb 0x0544
-+vendor.name Cristie Electronics Ltd.
-
- vendor.id usb 0x0545
-+vendor.name Xirlink, Inc.
-
- vendor.id usb 0x0545
-&device.id usb 0x8002
-+device.name IBM NetCamera
-
- vendor.id usb 0x0545
-&device.id usb 0x800c
-+device.name Veo StingRay
-
- vendor.id usb 0x0545
-&device.id usb 0x8080
-+device.name IBM C-It WebCam
-
- vendor.id usb 0x0546
-+vendor.name Polaroid Corp.
-
- vendor.id usb 0x0547
-+vendor.name Anchor Chips Inc.
-
- vendor.id usb 0x0547
-&device.id usb 0x2131
-+device.name AN2131 EZUSB Microcontroller
-
- vendor.id usb 0x0547
-&device.id usb 0x2235
-+device.name AN2235 EZUSB-FX Microcontroller
-
- vendor.id usb 0x0547
-&device.id usb 0x2720
-+device.name AN2720 USB-USB Bridge
-
- vendor.id usb 0x0547
-&device.id usb 0x2727
-+device.name Xircom PGUNET USB-USB Bridge
-
- vendor.id usb 0x0547
-&device.id usb 0x2810
-+device.name Cypress USB ATAPI Bridge
-
- vendor.id usb 0x0547
-&device.id usb 0x9999
-+device.name AN2131 uninitialized (?)
-
- vendor.id usb 0x0548
-+vendor.name Tyan Computer Corp.
-
- vendor.id usb 0x0549
-+vendor.name Pixera Corp.
-
- vendor.id usb 0x054a
-+vendor.name Fujitsu Microelectronics, Inc.
-
- vendor.id usb 0x054b
-+vendor.name New Media Corp.
-
- vendor.id usb 0x054c
-+vendor.name Sony Corp.
-
- vendor.id usb 0x054c
-&device.id usb 0x0010
-+device.name DSC-S30/S70/S75/F505V/F505/FD92 Cybershot/Mavica Digital Camera
-
- vendor.id usb 0x054c
-&device.id usb 0x0023
-+device.name CD Writer
-
- vendor.id usb 0x054c
-&device.id usb 0x0024
-+device.name Mavica CD-1000 Camera
-
- vendor.id usb 0x054c
-&device.id usb 0x0025
-+device.name NW-MS7 Walkman MemoryStick Reader
-
- vendor.id usb 0x054c
-&device.id usb 0x002d
-+device.name MSAC-US1 MemoryStick Reader
-
- vendor.id usb 0x054c
-&device.id usb 0x002e
-+device.name Sony HandyCam MemoryStick Reader
-
- vendor.id usb 0x054c
-&device.id usb 0x0032
-+device.name MemoryStick MSC-U01 Reader
-
- vendor.id usb 0x054c
-&device.id usb 0x0038
-+device.name Clie PEG-S300/D PalmOS PDA
-
- vendor.id usb 0x054c
-&device.id usb 0x0058
-+device.name Clie PEG-N7x0C PalmOS PDA Mass Storage
-
- vendor.id usb 0x054c
-&device.id usb 0x0066
-+device.name Clie PEG-N7x0C PalmOS PDA Serial
-
- vendor.id usb 0x054c
-&device.id usb 0x0069
-+device.name Memorystick MSC-U03 Reader
-
- vendor.id usb 0x054c
-&device.id usb 0x0099
-+device.name Clie NR70 PDA Mass Storage
-
- vendor.id usb 0x054c
-&device.id usb 0x009a
-+device.name Clie NR70 PDA Serial
-
- vendor.id usb 0x054d
-+vendor.name Try Corp.
-
- vendor.id usb 0x054e
-+vendor.name Proside Corp.
-
- vendor.id usb 0x054f
-+vendor.name WYSE Technology Taiwan
-
- vendor.id usb 0x0550
-+vendor.name Fuji Xerox Co., Ltd.
-
- vendor.id usb 0x0551
-+vendor.name CompuTrend Systems, Inc.
-
- vendor.id usb 0x0552
-+vendor.name Philips Monitors
-
- vendor.id usb 0x0553
-+vendor.name VLSI Vision Ltd.
-
- vendor.id usb 0x0553
-&device.id usb 0x0002
-+device.name CPiA WebCam
-
- vendor.id usb 0x0553
-&device.id usb 0x0202
-+device.name Aiptek PenCam 1
-
- vendor.id usb 0x0554
-+vendor.name Dictaphone Corp.
-
- vendor.id usb 0x0555
-+vendor.name ANAM S&T Co., Ltd.
-
- vendor.id usb 0x0556
-+vendor.name Asahi Kasei Microsystems Co., Ltd.
-
- vendor.id usb 0x0557
-+vendor.name ATEN International Co. Ltd.
-
- vendor.id usb 0x0557
-&device.id usb 0x2001
-+device.name UC-1284 Printer Port
-
- vendor.id usb 0x0557
-&device.id usb 0x2002
-+device.name 10Mbps Ethernet [klsi]
-
- vendor.id usb 0x0557
-&device.id usb 0x2004
-+device.name UC-100KM PS/2 Mouse and Keyboard adapter
-
- vendor.id usb 0x0557
-&device.id usb 0x2006
-+device.name UC-1284B Printer Port
-
- vendor.id usb 0x0557
-&device.id usb 0x2007
-+device.name UC-110T 100Mbps Ethernet [pegasus]
-
- vendor.id usb 0x0557
-&device.id usb 0x2008
-+device.name UC-232A Serial Port [pl2303]
-
- vendor.id usb 0x0557
-&device.id usb 0x2202
-+device.name CS124U Miniview II KVM Switch
-
- vendor.id usb 0x0557
-&device.id usb 0x2600
-+device.name IDE Bridge
-
- vendor.id usb 0x0557
-&device.id usb 0x4000
-+device.name DSB-650 10Mbps Ethernet [klsi]
-
- vendor.id usb 0x0558
-+vendor.name Truevision, Inc.
-
- vendor.id usb 0x0559
-+vendor.name Cadence Design Systems, Inc.
-
- vendor.id usb 0x055a
-+vendor.name Kenwood USA
-
- vendor.id usb 0x055b
-+vendor.name KnowledgeTek, Inc.
-
- vendor.id usb 0x055c
-+vendor.name Proton Electronic Ind.
-
- vendor.id usb 0x055d
-+vendor.name Samsung Electro-Mechanics Co.
-
- vendor.id usb 0x055d
-&device.id usb 0x9000
-+device.name AnyCam [pwc]
-
- vendor.id usb 0x055d
-&device.id usb 0x9001
-+device.name MPC-C30 AnyCam Premium for Notebooks [pwc]
-
- vendor.id usb 0x055e
-+vendor.name CTX Opto-Electronics Corp.
-
- vendor.id usb 0x055f
-+vendor.name Mustek Systems Inc.
-
- vendor.id usb 0x055f
-&device.id usb 0x0001
-+device.name ScanExpress 1200 CU
-
- vendor.id usb 0x055f
-&device.id usb 0x0002
-+device.name ScanExpress 600 CU
-
- vendor.id usb 0x055f
-&device.id usb 0x0003
-+device.name ScanExpress 1200 USB
-
- vendor.id usb 0x055f
-&device.id usb 0x0006
-+device.name ScanExpress 1200 UB
-
- vendor.id usb 0x055f
-&device.id usb 0x0008
-+device.name ScanExpress 1200 CU Plus
-
- vendor.id usb 0x055f
-&device.id usb 0x0218
-+device.name BearPaw 2400 TA
-
- vendor.id usb 0x055f
-&device.id usb 0xa800
-+device.name MDC 800 Camera
-
- vendor.id usb 0x0560
-+vendor.name Interface Co., Ltd.
-
- vendor.id usb 0x0561
-+vendor.name Oasis Design, Inc.
-
- vendor.id usb 0x0562
-+vendor.name Telex Communications Inc.
-
- vendor.id usb 0x0562
-&device.id usb 0x0001
-+device.name Enhanced Microphone
-
- vendor.id usb 0x0563
-+vendor.name Immersion Corp.
-
- vendor.id usb 0x0564
-+vendor.name Chinon Industries, Inc.
-
- vendor.id usb 0x0565
-+vendor.name Peracom Networks, Inc.
-
- vendor.id usb 0x0565
-&device.id usb 0x0001
-+device.name Serial Port [etek]
-
- vendor.id usb 0x0565
-&device.id usb 0x0002
-+device.name Enet Ethernet [klsi]
-
- vendor.id usb 0x0565
-&device.id usb 0x0003
-+device.name @Home Networks Ethernet [klsi]
-
- vendor.id usb 0x0565
-&device.id usb 0x0005
-+device.name Enet2 Ethernet [klsi]
-
- vendor.id usb 0x0567
-+vendor.name Xyratex Int'l Ltd.
-
- vendor.id usb 0x0568
-+vendor.name Quartz Ingenierie
-
- vendor.id usb 0x0569
-+vendor.name SegaSoft
-
- vendor.id usb 0x056a
-+vendor.name Wacom Co., Ltd.
-
- vendor.id usb 0x056a
-&device.id usb 0x0000
-+device.name PenPartner
-
- vendor.id usb 0x056a
-&device.id usb 0x0010
-+device.name Graphire
-
- vendor.id usb 0x056a
-&device.id usb 0x0011
-+device.name Graphire 2
-
- vendor.id usb 0x056a
-&device.id usb 0x0020
-+device.name Intuos 4x5
-
- vendor.id usb 0x056a
-&device.id usb 0x0021
-+device.name Intuos 6x8
-
- vendor.id usb 0x056a
-&device.id usb 0x0022
-+device.name Intuos 9x12
-
- vendor.id usb 0x056a
-&device.id usb 0x0023
-+device.name Intuos 12x12
-
- vendor.id usb 0x056a
-&device.id usb 0x0024
-+device.name Intuos 12x18
-
- vendor.id usb 0x056a
-&device.id usb 0x0031
-+device.name PL500
-
- vendor.id usb 0x056a
-&device.id usb 0x0043
-+device.name Intuos 2
-
- vendor.id usb 0x056b
-+vendor.name Decicon Incorporated
-
- vendor.id usb 0x056c
-+vendor.name eTEK Labs
-
- vendor.id usb 0x056c
-&device.id usb 0x8007
-+device.name Kwik232 Serial Port
-
- vendor.id usb 0x056c
-&device.id usb 0x8101
-+device.name KwikLink USB-USB Bridge
-
- vendor.id usb 0x056d
-+vendor.name EIZO Corp.
-
- vendor.id usb 0x056d
-&device.id usb 0x0000
-+device.name Hub
-
- vendor.id usb 0x056d
-&device.id usb 0x0001
-+device.name Monitor
-
- vendor.id usb 0x056e
-+vendor.name Elecom Co., Ltd.
-
- vendor.id usb 0x056e
-&device.id usb 0x0002
-+device.name 29UO Mouse
-
- vendor.id usb 0x056e
-&device.id usb 0x4002
-+device.name Laneed 100Mbps Ethernet LD-USB/TX [pegasus]
-
- vendor.id usb 0x056f
-+vendor.name Korea Data Systems Co., Ltd.
-
- vendor.id usb 0x0570
-+vendor.name Epson America
-
- vendor.id usb 0x0571
-+vendor.name Interex, Inc.
-
- vendor.id usb 0x0572
-+vendor.name Conexant Systems (Rockwell), Inc.
-
- vendor.id usb 0x0572
-&device.id usb 0x0001
-+device.name Ezcam II WebCam
-
- vendor.id usb 0x0572
-&device.id usb 0x0002
-+device.name Ezcam II WebCam
-
- vendor.id usb 0x0572
-&device.id usb 0x1232
-+device.name V.90 modem
-
- vendor.id usb 0x0573
-+vendor.name Nogatech Ltd.
-
- vendor.id usb 0x0573
-&device.id usb 0x2000
-+device.name X10 va10a Wireless Camera
-
- vendor.id usb 0x0573
-&device.id usb 0x4d01
-+device.name Hauppauge USB TV
-
- vendor.id usb 0x0573
-&device.id usb 0x4d02
-+device.name NT1003 Frame Grabber
-
- vendor.id usb 0x0573
-&device.id usb 0x4d11
-+device.name NT1003 Frame Grabber
-
- vendor.id usb 0x0574
-+vendor.name City University of Hong Kong
-
- vendor.id usb 0x0575
-+vendor.name Philips Creative Display Solutions
-
- vendor.id usb 0x0576
-+vendor.name BAFO/Quality Computer Accessories
-
- vendor.id usb 0x0577
-+vendor.name ELSA
-
- vendor.id usb 0x0578
-+vendor.name Intrinsix Corp.
-
- vendor.id usb 0x0579
-+vendor.name GVC Corp.
-
- vendor.id usb 0x057a
-+vendor.name Samsung Electronics America
-
- vendor.id usb 0x057b
-+vendor.name Y-E Data, Inc.
-
- vendor.id usb 0x057b
-&device.id usb 0x0000
-+device.name FlashBuster-U Floppy
-
- vendor.id usb 0x057c
-+vendor.name AVM GmbH
-
- vendor.id usb 0x057c
-&device.id usb 0x2800
-+device.name ISDN-Connector TA
-
- vendor.id usb 0x057d
-+vendor.name Shark Multimedia Inc.
-
- vendor.id usb 0x057e
-+vendor.name Nintendo Co., Ltd.
-
- vendor.id usb 0x057f
-+vendor.name QuickShot Limited
-
- vendor.id usb 0x0580
-+vendor.name Denron Inc.
-
- vendor.id usb 0x0581
-+vendor.name Racal Data Group
-
- vendor.id usb 0x0582
-+vendor.name Roland Corp.
-
- vendor.id usb 0x0582
-&device.id usb 0x0002
-+device.name MPU64 Midi Interface
-
- vendor.id usb 0x0582
-&device.id usb 0x0003
-+device.name Sound Canvas SC-8850
-
- vendor.id usb 0x0582
-&device.id usb 0x0005
-+device.name Edirol UM-2 MIDI Adapter
-
- vendor.id usb 0x0583
-+vendor.name Padix (Rockfire) Co. Ltd.
-
- vendor.id usb 0x0583
-&device.id usb 0x2030
-+device.name RM-203 USB Nest [mode 1]
-
- vendor.id usb 0x0583
-&device.id usb 0x2031
-+device.name RM-203 USB Nest [mode 2]
-
- vendor.id usb 0x0583
-&device.id usb 0x2032
-+device.name RM-203 USB Nest [mode 3]
-
- vendor.id usb 0x0583
-&device.id usb 0x2033
-+device.name RM-203 USB Nest [mode 4]
-
- vendor.id usb 0x0583
-&device.id usb 0x3050
-+device.name QF-305u Gamepad
-
- vendor.id usb 0x0583
-&device.id usb 0x7070
-+device.name QF-707u Joystick [Bazooka]
-
- vendor.id usb 0x0584
-+vendor.name RATOC System Inc.
-
- vendor.id usb 0x0585
-+vendor.name FlashPoint Technology, Inc.
-
- vendor.id usb 0x0586
-+vendor.name ZyXEL Communications Corp.
-
- vendor.id usb 0x0586
-&device.id usb 0x1000
-+device.name Omni NET Modem / ISDN TA
-
- vendor.id usb 0x0587
-+vendor.name America Kotobuki Electronics Ind.
-
- vendor.id usb 0x0588
-+vendor.name Sapien Design
-
- vendor.id usb 0x0589
-+vendor.name Victron
-
- vendor.id usb 0x058a
-+vendor.name Nohau Corp.
-
- vendor.id usb 0x058b
-+vendor.name Infineon Technologies
-
- vendor.id usb 0x058c
-+vendor.name In Focus Systems
-
- vendor.id usb 0x058d
-+vendor.name Micrel Semiconductor
-
- vendor.id usb 0x058e
-+vendor.name Tripath Technology Inc.
-
- vendor.id usb 0x058f
-+vendor.name Alcor Micro, Inc.
-
- vendor.id usb 0x058f
-&device.id usb 0x2802
-+device.name Monterey Keyboard
-
- vendor.id usb 0x058f
-&device.id usb 0x9213
-+device.name MacAlly Kbd Hub
-
- vendor.id usb 0x058f
-&device.id usb 0x9215
-+device.name AU9814 Hub
-
- vendor.id usb 0x058f
-&device.id usb 0x9254
-+device.name Hub
-
- vendor.id usb 0x058f
-&device.id usb 0x9410
-+device.name MicroConnectors/StrongMan Keyboard
-
- vendor.id usb 0x058f
-&device.id usb 0x9472
-+device.name Monterey/NEC Kbd Hub
-
- vendor.id usb 0x0590
-+vendor.name Omron Corp.
-
- vendor.id usb 0x0590
-&device.id usb 0x0004
-+device.name Cable Modem
-
- vendor.id usb 0x0591
-+vendor.name Questra Consulting
-
- vendor.id usb 0x0592
-+vendor.name Powerware Corp.
-
- vendor.id usb 0x0593
-+vendor.name Incite
-
- vendor.id usb 0x0594
-+vendor.name Princeton Graphic Systems
-
- vendor.id usb 0x0595
-+vendor.name Zoran Microelectronics Ltd.
-
- vendor.id usb 0x0596
-+vendor.name MicroTouch Systems Inc.
-
- vendor.id usb 0x0596
-&device.id usb 0x0001
-+device.name Touchscreen
-
- vendor.id usb 0x0597
-+vendor.name Trisignal Communications
-
- vendor.id usb 0x0598
-+vendor.name Niigata Canotec Co., Inc.
-
- vendor.id usb 0x0599
-+vendor.name Brilliance Semiconductor Inc.
-
- vendor.id usb 0x059a
-+vendor.name Spectrum Signal Processing Inc.
-
- vendor.id usb 0x059b
-+vendor.name Iomega Corp.
-
- vendor.id usb 0x059b
-&device.id usb 0x0001
-+device.name Zip 100 (Type 1)
-
- vendor.id usb 0x059b
-&device.id usb 0x000b
-+device.name Zip 100 (Type 2)
-
- vendor.id usb 0x059b
-&device.id usb 0x0030
-+device.name Zip 250 (Ver 1)
-
- vendor.id usb 0x059b
-&device.id usb 0x0031
-+device.name Zip 100 (Type 3)
-
- vendor.id usb 0x059b
-&device.id usb 0x0032
-+device.name Zip 250 (Ver 2)
-
- vendor.id usb 0x059b
-&device.id usb 0x0040
-+device.name SCSI Bridge
-
- vendor.id usb 0x059b
-&device.id usb 0x0050
-+device.name Zip CD 650 Writer
-
- vendor.id usb 0x059b
-&device.id usb 0x006d
-+device.name HipZip MP3 Player
-
- vendor.id usb 0x059c
-+vendor.name A-Trend Technology Co., Ltd.
-
- vendor.id usb 0x059d
-+vendor.name Advanced Input Devices
-
- vendor.id usb 0x059e
-+vendor.name Intelligent Instrumentation
-
- vendor.id usb 0x059f
-+vendor.name LaCie
-
- vendor.id usb 0x059f
-&device.id usb 0xa601
-+device.name HardDrive
-
- vendor.id usb 0x05a0
-+vendor.name Vetronix Corp.
-
- vendor.id usb 0x05a1
-+vendor.name USC Corp.
-
- vendor.id usb 0x05a2
-+vendor.name Fuji Film Microdevices Co. Ltd.
-
- vendor.id usb 0x05a3
-+vendor.name V Automation Inc.
-
- vendor.id usb 0x05a4
-+vendor.name Ortek Technology, Inc.
-
- vendor.id usb 0x05a4
-&device.id usb 0x9731
-+device.name MCK-600W Keyboard
-
- vendor.id usb 0x05a5
-+vendor.name Sampo Technology Corp.
-
- vendor.id usb 0x05a6
-+vendor.name Cisco Systems
-
- vendor.id usb 0x05a7
-+vendor.name Bose Corp.
-
- vendor.id usb 0x05a8
-+vendor.name Spacetec IMC Corp.
-
- vendor.id usb 0x05a9
-+vendor.name OmniVision Technologies, Inc.
-
- vendor.id usb 0x05a9
-&device.id usb 0x0511
-+device.name OV511 WebCam
-
- vendor.id usb 0x05a9
-&device.id usb 0x0518
-+device.name OV518 WebCam
-
- vendor.id usb 0x05a9
-&device.id usb 0xa511
-+device.name OV511+ WebCam
-
- vendor.id usb 0x05aa
-+vendor.name Utilux South China Ltd.
-
- vendor.id usb 0x05ab
-+vendor.name In-System Design
-
- vendor.id usb 0x05ab
-&device.id usb 0x0002
-+device.name Parallel Port
-
- vendor.id usb 0x05ab
-&device.id usb 0x0031
-+device.name ATA Bridge
-
- vendor.id usb 0x05ab
-&device.id usb 0x0060
-+device.name USB 2.0 Bridge
-
- vendor.id usb 0x05ab
-&device.id usb 0x0200
-+device.name USS725 ATA Bridge
-
- vendor.id usb 0x05ab
-&device.id usb 0x0202
-+device.name ATA Bridge
-
- vendor.id usb 0x05ab
-&device.id usb 0x081a
-+device.name ATA Bridge
-
- vendor.id usb 0x05ac
-+vendor.name Apple Computer
-
- vendor.id usb 0x05ac
-&device.id usb 0x0201
-+device.name iMac Keyboard [ALPS M2452]
-
- vendor.id usb 0x05ac
-&device.id usb 0x0202
-+device.name Apple Keyboard [ALPS]
-
- vendor.id usb 0x05ac
-&device.id usb 0x0206
-+device.name Apple Extended Keyboard [Mitsumi]
-
- vendor.id usb 0x05ac
-&device.id usb 0x0301
-+device.name iMac Mouse [Mitsumi/Logitech]
-
- vendor.id usb 0x05ac
-&device.id usb 0x0302
-+device.name Apple Optical Mouse [Fujitsu]
-
- vendor.id usb 0x05ac
-&device.id usb 0x1001
-+device.name Apple Keyboard Hub [ALPS]
-
- vendor.id usb 0x05ac
-&device.id usb 0x1002
-+device.name Apple Extended Keyboard Hub [Mitsumi]
-
- vendor.id usb 0x05ad
-+vendor.name Y.C.Cable U.S.A., Inc.
-
- vendor.id usb 0x05ae
-+vendor.name Synopsys, Inc.
-
- vendor.id usb 0x05af
-+vendor.name Jing-Mold Enterprise Co., Ltd.
-
- vendor.id usb 0x05b0
-+vendor.name Fountain Technologies, Inc.
-
- vendor.id usb 0x05b1
-+vendor.name First International Computer, Inc.
-
- vendor.id usb 0x05b4
-+vendor.name LG Semicon Co., Ltd.
-
- vendor.id usb 0x05b5
-+vendor.name Dialogic Corp
-
- vendor.id usb 0x05b6
-+vendor.name Proxima Corp.
-
- vendor.id usb 0x05b7
-+vendor.name Medianix Semiconductor, Inc.
-
- vendor.id usb 0x05b8
-+vendor.name Agiler, Inc.
-
- vendor.id usb 0x05b8
-&device.id usb 0x3002
-+device.name Scroll Mouse
-
- vendor.id usb 0x05b9
-+vendor.name Philips Research Laboratories
-
- vendor.id usb 0x05ba
-+vendor.name DigitalPersona, Inc.
-
- vendor.id usb 0x05bd
-+vendor.name RAFI GmbH & Co. KG
-
- vendor.id usb 0x05be
-+vendor.name Raychem Corp.
-
- vendor.id usb 0x05bf
-+vendor.name S & S Research
-
- vendor.id usb 0x05c0
-+vendor.name Keil Software
-
- vendor.id usb 0x05c1
-+vendor.name Kawasaki Steel
-
- vendor.id usb 0x05c2
-+vendor.name Media Phonics (Suisse) S.A.
-
- vendor.id usb 0x05c5
-+vendor.name Digi International Inc.
-
- vendor.id usb 0x05c6
-+vendor.name Qualcomm, Inc.
-
- vendor.id usb 0x05c6
-&device.id usb 0x3100
-+device.name CDMA Wireless Modem/Phone
-
- vendor.id usb 0x05c6
-&device.id usb 0x3196
-+device.name CDMA Wireless Modem
-
- vendor.id usb 0x05c6
-&device.id usb 0x3197
-+device.name CDMA Wireless Modem/Phone
-
- vendor.id usb 0x05c7
-+vendor.name Qtronix Corp
-
- vendor.id usb 0x05c7
-&device.id usb 0x1001
-+device.name Lynx Mouse
-
- vendor.id usb 0x05c7
-&device.id usb 0x2011
-+device.name Scorpius Keyboard
-
- vendor.id usb 0x05c8
-+vendor.name Cheng Uei Precision Industry Co., Ltd.
-
- vendor.id usb 0x05c9
-+vendor.name Semtech Corp.
-
- vendor.id usb 0x05ca
-+vendor.name Ricoh Company Ltd.
-
- vendor.id usb 0x05ca
-&device.id usb 0x0101
-+device.name RDC-5300 Digital Camera
-
- vendor.id usb 0x05ca
-&device.id usb 0x2201
-+device.name RDC-7 Digital Camera
-
- vendor.id usb 0x05cb
-+vendor.name PowerVision Technologies Inc.
-
- vendor.id usb 0x05cb
-&device.id usb 0x1483
-+device.name Trust CombiScan 19200
-
- vendor.id usb 0x05cc
-+vendor.name ELSA AG
-
- vendor.id usb 0x05cc
-&device.id usb 0x2100
-+device.name MicroLink ISDN Office
-
- vendor.id usb 0x05cc
-&device.id usb 0x2219
-+device.name MicroLink ISDN
-
- vendor.id usb 0x05cc
-&device.id usb 0x2265
-+device.name MicroLink 56k
-
- vendor.id usb 0x05cc
-&device.id usb 0x2280
-+device.name MicroLink 56k Fun
-
- vendor.id usb 0x05cc
-&device.id usb 0x3000
-+device.name Micolink USB2Ethernet [pegasus]
-
- vendor.id usb 0x05cd
-+vendor.name Silicom Ltd.
-
- vendor.id usb 0x05ce
-+vendor.name SICAN GmbH
-
- vendor.id usb 0x05cf
-+vendor.name Sung Forn Co. Ltd.
-
- vendor.id usb 0x05d0
-+vendor.name Lunar Corp.
-
- vendor.id usb 0x05d1
-+vendor.name Brainboxes Limited
-
- vendor.id usb 0x05d2
-+vendor.name Wave Systems Corp.
-
- vendor.id usb 0x05d6
-+vendor.name Philips Semiconductors, CICT
-
- vendor.id usb 0x05d7
-+vendor.name Thomas & Betts Corp.
-
- vendor.id usb 0x05d7
-&device.id usb 0x0099
-+device.name 10Mbps Ethernet [klsi]
-
- vendor.id usb 0x05d8
-+vendor.name Ultima Electronics Corp.
-
- vendor.id usb 0x05d8
-&device.id usb 0x4002
-+device.name Lifetec LT9385 Scanner
-
- vendor.id usb 0x05d9
-+vendor.name Axiohm Transaction Solutions
-
- vendor.id usb 0x05da
-+vendor.name Microtek International Inc.
-
- vendor.id usb 0x05da
-&device.id usb 0x0093
-+device.name ScanMaker V6USL
-
- vendor.id usb 0x05da
-&device.id usb 0x0094
-+device.name Phantom 336CX/C3
-
- vendor.id usb 0x05da
-&device.id usb 0x0099
-+device.name ScanMaker X6/X6U
-
- vendor.id usb 0x05da
-&device.id usb 0x009a
-+device.name Phantom C6
-
- vendor.id usb 0x05da
-&device.id usb 0x00a0
-+device.name Phantom 336CX/C3 (#2)
-
- vendor.id usb 0x05da
-&device.id usb 0x00b6
-+device.name ScanMaker V6UPL
-
- vendor.id usb 0x05da
-&device.id usb 0x30cf
-+device.name ScanMaker 4800
-
- vendor.id usb 0x05da
-&device.id usb 0x40ca
-+device.name ScanMaker 3600
-
- vendor.id usb 0x05da
-&device.id usb 0x80a3
-+device.name ScanMaker V6USL (#2)
-
- vendor.id usb 0x05da
-&device.id usb 0x80ac
-+device.name ScanMaker V6UL/SpicyU
-
- vendor.id usb 0x05dc
-+vendor.name Lexar Media, Inc.
-
- vendor.id usb 0x05dd
-+vendor.name Delta Electronics Inc.
-
- vendor.id usb 0x05e0
-+vendor.name Symbol Technologies
-
- vendor.id usb 0x05e3
-+vendor.name Genesys Logic, Inc.
-
- vendor.id usb 0x05e3
-&device.id usb 0x000a
-+device.name Keyboard with PS/2 Port
-
- vendor.id usb 0x05e3
-&device.id usb 0x000b
-+device.name Karna Razor BoomSlang 2000 Mouse
-
- vendor.id usb 0x05e3
-&device.id usb 0x0120
-+device.name Pacific Image Electronics PrimeFilm 1800u slide/negative scanner
-
- vendor.id usb 0x05e3
-&device.id usb 0x0300
-+device.name GLUSB98PT Parallel Port
-
- vendor.id usb 0x05e3
-&device.id usb 0x0502
-+device.name GL620USB GeneLink USB-USB Bridge
-
- vendor.id usb 0x05e3
-&device.id usb 0x0700
-+device.name SIIG US2256 CompactFlash Card Reader
-
- vendor.id usb 0x05e3
-&device.id usb 0x1205
-+device.name Afilias Optical Mouse H3003
-
- vendor.id usb 0x05e5
-+vendor.name Fuji Electric Co., Ltd.
-
- vendor.id usb 0x05e6
-+vendor.name Keithley Instruments
-
- vendor.id usb 0x05e9
-+vendor.name Kawasaki LSI
-
- vendor.id usb 0x05e9
-&device.id usb 0x0008
-+device.name KL5KUSB101B Ethernet [klsi]
-
- vendor.id usb 0x05e9
-&device.id usb 0x0009
-+device.name Sony 10Mbps Ethernet [pegasus]
-
- vendor.id usb 0x05eb
-+vendor.name FFC Limited
-
- vendor.id usb 0x05ef
-+vendor.name AVB, Inc. [anko?]
-
- vendor.id usb 0x05ef
-&device.id usb 0x020a
-+device.name Top Shot Pegasus Joystick
-
- vendor.id usb 0x05ef
-&device.id usb 0x8884
-+device.name Mag Turbo Force Wheel
-
- vendor.id usb 0x05ef
-&device.id usb 0x8888
-+device.name Top Shot Force Feedback Racing Wheel
-
- vendor.id usb 0x05f0
-+vendor.name Canopus Co., Ltd.
-
- vendor.id usb 0x05f0
-&device.id usb 0x0101
-+device.name DA-Port DAC
-
- vendor.id usb 0x05f2
-+vendor.name Dexin Corp., Ltd.
-
- vendor.id usb 0x05f3
-+vendor.name PI Engineering, Inc.
-
- vendor.id usb 0x05f3
-&device.id usb 0x020b
-+device.name PS2 Adapter
-
- vendor.id usb 0x05f5
-+vendor.name Unixtar Technology Inc.
-
- vendor.id usb 0x05f6
-+vendor.name AOC International
-
- vendor.id usb 0x05f7
-+vendor.name RFC Distribution(s) PTE Ltd.
-
- vendor.id usb 0x05f9
-+vendor.name PSC Scanning, Inc.
-
- vendor.id usb 0x05fa
-+vendor.name Siemens Telecommunications Systems Limited
-
- vendor.id usb 0x05fc
-+vendor.name Harman Multimedia
-
- vendor.id usb 0x05fd
-+vendor.name InterAct, Inc.
-
- vendor.id usb 0x05fd
-&device.id usb 0x0251
-+device.name Raider Pro
-
- vendor.id usb 0x05fd
-&device.id usb 0x0253
-+device.name ProPad 8 Digital
-
- vendor.id usb 0x05fd
-&device.id usb 0x262a
-+device.name 3dfx HammerHead FX
-
- vendor.id usb 0x05fd
-&device.id usb 0xdaae
-+device.name Game Shark
-
- vendor.id usb 0x05fe
-+vendor.name Chic Technology Corp.
-
- vendor.id usb 0x05fe
-&device.id usb 0x0001
-+device.name Mouse
-
- vendor.id usb 0x05fe
-&device.id usb 0x0007
-+device.name Twinhead Mouse
-
- vendor.id usb 0x05fe
-&device.id usb 0x0009
-+device.name Inland Pro 4500/5000 Mouse
-
- vendor.id usb 0x05fe
-&device.id usb 0x0011
-+device.name Browser Mouse
-
- vendor.id usb 0x05ff
-+vendor.name LeCroy Corp.
-
- vendor.id usb 0x0600
-+vendor.name Barco Display Systems
-
- vendor.id usb 0x0601
-+vendor.name Jazz Hipster Corp.
-
- vendor.id usb 0x0602
-+vendor.name Vista Imaging Inc.
-
- vendor.id usb 0x0602
-&device.id usb 0x1001
-+device.name ViCam WebCam
-
- vendor.id usb 0x0603
-+vendor.name Novatek Microelectronics Corp.
-
- vendor.id usb 0x0603
-&device.id usb 0x6871
-+device.name Mouse
-
- vendor.id usb 0x0604
-+vendor.name Jean Co, Ltd.
-
- vendor.id usb 0x0606
-+vendor.name Royal Information Electronics Co., Ltd.
-
- vendor.id usb 0x0607
-+vendor.name Bridge Information Co., Ltd.
-
- vendor.id usb 0x0609
-+vendor.name SMK Manufacturing Inc.
-
- vendor.id usb 0x060a
-+vendor.name Worthington Data Solutions, Inc.
-
- vendor.id usb 0x060b
-+vendor.name Solid Year (?)
-
- vendor.id usb 0x060b
-&device.id usb 0x0001
-+device.name MacAlly Keyboard
-
- vendor.id usb 0x060b
-&device.id usb 0x2101
-+device.name Solid Year Keyboard
-
- vendor.id usb 0x060c
-+vendor.name EEH Datalink GmbH
-
- vendor.id usb 0x060f
-+vendor.name Joinsoon Electronics Mfg. Co., Ltd.
-
- vendor.id usb 0x0611
-+vendor.name Totoku Electric Co., Ltd.
-
- vendor.id usb 0x0613
-+vendor.name Ithaca Peripherals
-
- vendor.id usb 0x0614
-+vendor.name Bio-Rad Laboratories
-
- vendor.id usb 0x0616
-+vendor.name Future Techno Designs PVT. Ltd.
-
- vendor.id usb 0x0618
-+vendor.name MacAlly
-
- vendor.id usb 0x0618
-&device.id usb 0x0101
-+device.name Mouse
-
- vendor.id usb 0x0619
-+vendor.name Seiko Instruments Inc.
-
- vendor.id usb 0x061c
-+vendor.name Act Labs, Ltd.
-
- vendor.id usb 0x061d
-+vendor.name Quatech, Inc.
-
- vendor.id usb 0x061e
-+vendor.name Nissei Electric Co.
-
- vendor.id usb 0x0620
-+vendor.name Alaris, Inc.
-
- vendor.id usb 0x0621
-+vendor.name ODU-Steckverbindungssysteme GmbH & Co. KG
-
- vendor.id usb 0x0624
-+vendor.name Apex, Inc.
-
- vendor.id usb 0x0626
-+vendor.name Nippon Systems Development Co., Ltd.
-
- vendor.id usb 0x0629
-+vendor.name Zida Technologies Limited
-
- vendor.id usb 0x062b
-+vendor.name Greatlink Electronics Taiwan Ltd.
-
- vendor.id usb 0x062d
-+vendor.name Taiwan Tai-Hao Enterprises Co. Ltd.
-
- vendor.id usb 0x062e
-+vendor.name Mainsuper Enterprises Co., Ltd.
-
- vendor.id usb 0x062f
-+vendor.name Sin Sheng Terminal & Machine Inc.
-
- vendor.id usb 0x0634
-+vendor.name Micron Technology, Inc.
-
- vendor.id usb 0x0636
-+vendor.name Sierra Imaging, Inc.
-
- vendor.id usb 0x0638
-+vendor.name Avision, Inc.
-
- vendor.id usb 0x0638
-&device.id usb 0x0268
-+device.name iVina 1200U Scanner
-
- vendor.id usb 0x0638
-&device.id usb 0x026a
-+device.name Minolta Dimage Scan Dual II
-
- vendor.id usb 0x0638
-&device.id usb 0x4004
-+device.name Minolta Dimage Scan Elite II
-
- vendor.id usb 0x063d
-+vendor.name Fong Kai Industrial Co., Ltd.
-
- vendor.id usb 0x063f
-+vendor.name New Technology Cable Ltd.
-
- vendor.id usb 0x0640
-+vendor.name Hitex Development Tools
-
- vendor.id usb 0x0641
-+vendor.name Woods Industries, Inc.
-
- vendor.id usb 0x0642
-+vendor.name VIA Medical Corp.
-
- vendor.id usb 0x0644
-+vendor.name TEAC Corp.
-
- vendor.id usb 0x0644
-&device.id usb 0x0000
-+device.name Floppy
-
- vendor.id usb 0x0645
-+vendor.name Who? Vision Systems, Inc.
-
- vendor.id usb 0x0646
-+vendor.name UMAX
-
- vendor.id usb 0x0648
-+vendor.name Inside Out Networks
-
- vendor.id usb 0x064b
-+vendor.name White Mountain DSP, Inc.
-
- vendor.id usb 0x064c
-+vendor.name Ji-Haw Industrial Co., Ltd.
-
- vendor.id usb 0x064f
-+vendor.name WIBU-Systems AG
-
- vendor.id usb 0x0651
-+vendor.name Likom Technology Sdn. Bhd.
-
- vendor.id usb 0x0652
-+vendor.name Stargate Solutions, Inc.
-
- vendor.id usb 0x0654
-+vendor.name Granite Microsystems, Inc.
-
- vendor.id usb 0x0655
-+vendor.name Space Shuttle Hi-Fi Wire & Cable Industry Co, Ltd.
-
- vendor.id usb 0x0656
-+vendor.name Glory Mark Electronic Ltd.
-
- vendor.id usb 0x0657
-+vendor.name Tekcon American Corp.
-
- vendor.id usb 0x065a
-+vendor.name Optoelectronics Co., Ltd.
-
- vendor.id usb 0x065e
-+vendor.name Silicon Graphics
-
- vendor.id usb 0x065f
-+vendor.name Good Way Industrial Co, Ltd & GWC Technology Inc.
-
- vendor.id usb 0x0661
-+vendor.name Hamamatsu Photonics K.K.
-
- vendor.id usb 0x0663
-+vendor.name Topmax Electronic Co., Ltd.
-
- vendor.id usb 0x0663
-&device.id usb 0x0103
-+device.name CobraPad
-
- vendor.id usb 0x0667
-+vendor.name Aiwa Co., Ltd.
-
- vendor.id usb 0x0667
-&device.id usb 0x0fa1
-+device.name TD-U8000 Tape Drive
-
- vendor.id usb 0x0668
-+vendor.name WordWand
-
- vendor.id usb 0x0669
-+vendor.name Oce' Printing Systems GmbH
-
- vendor.id usb 0x066a
-+vendor.name Total Technologies, Ltd.
-
- vendor.id usb 0x066b
-+vendor.name Linksys Inc.
-
- vendor.id usb 0x066b
-&device.id usb 0x0105
-+device.name SCM eUSB SmartMedia Card Reader
-
- vendor.id usb 0x066b
-&device.id usb 0x010a
-+device.name Melco MCR-U2 SmartMedia / CompactFlash Reader
-
- vendor.id usb 0x066b
-&device.id usb 0x2202
-+device.name USB10TX Ethernet [pegasus]
-
- vendor.id usb 0x066b
-&device.id usb 0x2203
-+device.name USB100TX Ethernet [pegasus]
-
- vendor.id usb 0x066b
-&device.id usb 0x2204
-+device.name USB100TX HomePNA Ethernet [pegasus]
-
- vendor.id usb 0x066b
-&device.id usb 0x2206
-+device.name USB Ethernet [pegasus]
-
- vendor.id usb 0x066b
-&device.id usb 0x2211
-+device.name WUSB11 Wireless Ethernet
-
- vendor.id usb 0x066d
-+vendor.name Entrega Inc.
-
- vendor.id usb 0x066e
-+vendor.name Acer Semiconductor America, Inc.
-
- vendor.id usb 0x066f
-+vendor.name SigmaTel, Inc.
-
- vendor.id usb 0x066f
-&device.id usb 0x4200
-+device.name STIr4200 IrDA Bridge
-
- vendor.id usb 0x0672
-+vendor.name Labtec Inc.
-
- vendor.id usb 0x0672
-&device.id usb 0x1041
-+device.name LCS1040 Speaker System
-
- vendor.id usb 0x0672
-&device.id usb 0x5000
-+device.name SpaceBall 4000 FLX
-
- vendor.id usb 0x0673
-+vendor.name HCL
-
- vendor.id usb 0x0673
-&device.id usb 0x5000
-+device.name Keyboard
-
- vendor.id usb 0x0675
-+vendor.name Draytech
-
- vendor.id usb 0x0675
-&device.id usb 0x0110
-+device.name Vigor 128 ISDN TA
-
- vendor.id usb 0x0676
-+vendor.name Teles AG
-
- vendor.id usb 0x0677
-+vendor.name Aiwa Co., Ltd.
-
- vendor.id usb 0x0677
-&device.id usb 0x0fa1
-+device.name TD-U8000 Tape Drive
-
- vendor.id usb 0x0678
-+vendor.name ACard Technology Corp.
-
- vendor.id usb 0x067b
-+vendor.name Prolific Technology, Inc.
-
- vendor.id usb 0x067b
-&device.id usb 0x0000
-+device.name PL2301 USB-USB Bridge
-
- vendor.id usb 0x067b
-&device.id usb 0x0001
-+device.name PL2302 USB-USB Bridge
-
- vendor.id usb 0x067b
-&device.id usb 0x2307
-+device.name PL2307 USB-ATAPI4 Bridge
-
- vendor.id usb 0x067b
-&device.id usb 0x2303
-+device.name PL2303 Serial Port
-
- vendor.id usb 0x067c
-+vendor.name Efficient Networks, Inc.
-
- vendor.id usb 0x067c
-&device.id usb 0x1001
-+device.name Siemens SpeedStream 100MBps Ethernet
-
- vendor.id usb 0x067c
-&device.id usb 0x1022
-+device.name Siemens 802.11b Wireless Ethernet
-
- vendor.id usb 0x067c
-&device.id usb 0x4060
-+device.name Alcatel Speedstream 4060 ADSL Modem
-
- vendor.id usb 0x067d
-+vendor.name Hohner Corp.
-
- vendor.id usb 0x067e
-+vendor.name Intermec
-
- vendor.id usb 0x067f
-+vendor.name Virata Ltd.
-
- vendor.id usb 0x0680
-+vendor.name Avance Logic, Inc.
-
- vendor.id usb 0x0681
-+vendor.name Siemens Information and Communication Products
-
- vendor.id usb 0x0681
-&device.id usb 0x0002
-+device.name Gigaset 3075 Passive ISDN
-
- vendor.id usb 0x0681
-&device.id usb 0x0005
-+device.name Mouse with Fingerprint Reader
-
- vendor.id usb 0x0684
-+vendor.name Actiontec Electronics, Inc.
-
- vendor.id usb 0x0686
-+vendor.name Minolta Co., Ltd.
-
- vendor.id usb 0x0686
-&device.id usb 0x4006
-+device.name Dimage 7 digital still camera
-
- vendor.id usb 0x0686
-&device.id usb 0x4007
-+device.name Dimage S304 digital still camera
-
- vendor.id usb 0x0686
-&device.id usb 0x4009
-+device.name Dimage X digital still camera
-
- vendor.id usb 0x0686
-&device.id usb 0x400a
-+device.name Dimage S404 digital still camera
-
- vendor.id usb 0x0686
-&device.id usb 0x400b
-+device.name Dimage 7i digital still camera
-
- vendor.id usb 0x068a
-+vendor.name Pertech Inc.
-
- vendor.id usb 0x068e
-+vendor.name CH Products, Inc.
-
- vendor.id usb 0x068e
-&device.id usb 0x00ff
-+device.name Flight Sim Yoke
-
- vendor.id usb 0x068e
-&device.id usb 0x0500
-+device.name GameStick 3D
-
- vendor.id usb 0x068e
-&device.id usb 0x0501
-+device.name CH Pro Pedals
-
- vendor.id usb 0x068e
-&device.id usb 0x0504
-+device.name F-16 Combat Stick
-
- vendor.id usb 0x0690
-+vendor.name Golden Bridge Electric Co., Ltd.
-
- vendor.id usb 0x0693
-+vendor.name Hagiwara Sys-Com
-
- vendor.id usb 0x0693
-&device.id usb 0x0002
-+device.name FlashGate SmartMedia Card Reader
-
- vendor.id usb 0x0693
-&device.id usb 0x0003
-+device.name FlasgGate CompactFlash Card Reader
-
- vendor.id usb 0x0693
-&device.id usb 0x0005
-+device.name FlashGate
-
- vendor.id usb 0x0694
-+vendor.name Lego Group
-
- vendor.id usb 0x0694
-&device.id usb 0x0001
-+device.name Mindstorms Tower
-
- vendor.id usb 0x0698
-+vendor.name Chuntex (CTX)
-
- vendor.id usb 0x0698
-&device.id usb 0x1786
-+device.name 1300ex Monitor
-
- vendor.id usb 0x0698
-&device.id usb 0x9999
-+device.name VLxxxx Monitor+Hub
-
- vendor.id usb 0x069a
-+vendor.name Askey Computer Corp.
-
- vendor.id usb 0x069a
-&device.id usb 0x0001
-+device.name VC010 WebCam [pwc]
-
- vendor.id usb 0x069b
-+vendor.name Thomson Consumer Electronics
-
- vendor.id usb 0x069d
-+vendor.name Hughes Network Systems (HNS)
-
- vendor.id usb 0x069d
-&device.id usb 0x0002
-+device.name Satellite Device
-
- vendor.id usb 0x069e
-+vendor.name Marx
-
- vendor.id usb 0x069e
-&device.id usb 0x0005
-+device.name CryptoBox v1.2
-
- vendor.id usb 0x06a3
-+vendor.name Saitek PLC
-
- vendor.id usb 0x06a3
-&device.id usb 0x0006
-+device.name Cyborg Gold Joystick
-
- vendor.id usb 0x06a3
-&device.id usb 0x052d
-+device.name P750 Gamepad
-
- vendor.id usb 0x06a3
-&device.id usb 0x053f
-+device.name X36F Flightstick
-
- vendor.id usb 0x06a3
-&device.id usb 0x100a
-+device.name SP550 Pad and Joystick Combo
-
- vendor.id usb 0x06a3
-&device.id usb 0x100b
-+device.name SP550 Pad
-
- vendor.id usb 0x06a5
-+vendor.name Divio
-
- vendor.id usb 0x06a5
-&device.id usb 0xd001
-+device.name ProLink DS3303u WebCam
-
- vendor.id usb 0x06aa
-+vendor.name Sysgration Ltd.
-
- vendor.id usb 0x06ac
-+vendor.name Fujitsu PC Corp.
-
- vendor.id usb 0x06ad
-+vendor.name Greatland Electronics Taiwan Ltd.
-
- vendor.id usb 0x06ae
-+vendor.name Professional Multimedia Testing Centre
-
- vendor.id usb 0x06b8
-+vendor.name Pixela Corproation
-
- vendor.id usb 0x06b9
-+vendor.name Alcatel Telecom
-
- vendor.id usb 0x06b9
-&device.id usb 0x4061
-+device.name Speed Touch ISDN
-
- vendor.id usb 0x06ba
-+vendor.name Smooth Cord & Connector Co., Ltd.
-
- vendor.id usb 0x06bb
-+vendor.name EDA Inc.
-
- vendor.id usb 0x06bc
-+vendor.name Oki Data Corp.
-
- vendor.id usb 0x06bd
-+vendor.name AGFA-Gevaert NV
-
- vendor.id usb 0x06bd
-&device.id usb 0x0001
-+device.name SnapScan 1212U
-
- vendor.id usb 0x06bd
-&device.id usb 0x0002
-+device.name SnapScan 1236U
-
- vendor.id usb 0x06bd
-&device.id usb 0x0100
-+device.name SnapScan Touch
-
- vendor.id usb 0x06bd
-&device.id usb 0x0403
-+device.name ePhoto CL18 Camera
-
- vendor.id usb 0x06bd
-&device.id usb 0x0404
-+device.name ePhoto CL20 Camera
-
- vendor.id usb 0x06bd
-&device.id usb 0x2061
-+device.name SnapScan 1212U (?)
-
- vendor.id usb 0x06bd
-&device.id usb 0x208f
-+device.name SnapScan e50
-
- vendor.id usb 0x06bd
-&device.id usb 0x20fd
-+device.name SnapScan e52
-
- vendor.id usb 0x06be
-+vendor.name Asia Microelectronic Development, Inc.
-
- vendor.id usb 0x06bf
-+vendor.name Leoco Corp.
-
- vendor.id usb 0x06c4
-+vendor.name Bizlink International Corp.
-
- vendor.id usb 0x06c5
-+vendor.name Hagenuk, GmbH
-
- vendor.id usb 0x06c6
-+vendor.name Infowave Software Inc.
-
- vendor.id usb 0x06c8
-+vendor.name SIIG, Inc.
-
- vendor.id usb 0x06c9
-+vendor.name Taxan (Europe) Ltd.
-
- vendor.id usb 0x06ca
-+vendor.name Newer Technology, Inc.
-
- vendor.id usb 0x06cb
-+vendor.name Synaptics
-
- vendor.id usb 0x06cc
-+vendor.name Terayon Communication Systems
-
- vendor.id usb 0x06cd
-+vendor.name Keyspan
-
- vendor.id usb 0x06cd
-&device.id usb 0x0101
-+device.name USA-28 PDA [preenum]
-
- vendor.id usb 0x06cd
-&device.id usb 0x0102
-+device.name USA-28X PDA [preenum]
-
- vendor.id usb 0x06cd
-&device.id usb 0x0103
-+device.name USA-19 PDA [preenum]
-
- vendor.id usb 0x06cd
-&device.id usb 0x0104
-+device.name PDA [prerenum]
-
- vendor.id usb 0x06cd
-&device.id usb 0x0105
-+device.name USA-18X PDA [preenum]
-
- vendor.id usb 0x06cd
-&device.id usb 0x0106
-+device.name USA-19W PDA [preenum]
-
- vendor.id usb 0x06cd
-&device.id usb 0x0107
-+device.name USA-19 PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x0108
-+device.name USA-19W PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x010b
-+device.name USA-19Q PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x010f
-+device.name USA-28 PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x0110
-+device.name USA-28X PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x0112
-+device.name USA-18X PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x0114
-+device.name USA-28X PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x0118
-+device.name USA-19QW PDA
-
- vendor.id usb 0x06cd
-&device.id usb 0x0201
-+device.name Digital Media Remote
-
- vendor.id usb 0x06cf
-+vendor.name SpheronVR AG
-
- vendor.id usb 0x06cf
-&device.id usb 0x1010
-+device.name PanoCam 10
-
- vendor.id usb 0x06cf
-&device.id usb 0x1012
-+device.name PanoCam 12/12X
-
- vendor.id usb 0x06d0
-+vendor.name LapLink, Inc.
-
- vendor.id usb 0x06d0
-&device.id usb 0x0622
-+device.name LapLink Gold USB-USB Bridge [net1080]
-
- vendor.id usb 0x06d1
-+vendor.name Daewoo Electronics Co Ltd.
-
- vendor.id usb 0x06d3
-+vendor.name Mitsubishi Electric Corp.
-
- vendor.id usb 0x06d5
-+vendor.name Toshiba
-
- vendor.id usb 0x06d5
-&device.id usb 0x4000
-+device.name Japanese Keyboard
-
- vendor.id usb 0x06d6
-+vendor.name Aashima Technology B.V.
-
- vendor.id usb 0x06d7
-+vendor.name Network Computing Devices (NCD)
-
- vendor.id usb 0x06d8
-+vendor.name Technical Marketing Research, Inc.
-
- vendor.id usb 0x06da
-+vendor.name Phoenixtec Power Co., Ltd.
-
- vendor.id usb 0x06db
-+vendor.name Paradyne
-
- vendor.id usb 0x06dc
-+vendor.name Compeye Corp.
-
- vendor.id usb 0x06de
-+vendor.name Heisei Electronics Co. Ltd.
-
- vendor.id usb 0x06e0
-+vendor.name Multi-Tech Systems, Inc.
-
- vendor.id usb 0x06e0
-&device.id usb 0xf101
-+device.name MT5634ZBA MultiModem 56k Intl.
-
- vendor.id usb 0x06e0
-&device.id usb 0xf104
-+device.name MT5634ZBA MultiModem 56k
-
- vendor.id usb 0x06e1
-+vendor.name ADS Technologies, Inc.
-
- vendor.id usb 0x06e1
-&device.id usb 0x0008
-+device.name UBS-10BT Ethernet [klsi]
-
- vendor.id usb 0x06e4
-+vendor.name Alcatel Microelectronics
-
- vendor.id usb 0x06e6
-+vendor.name Tiger Jet Network, Inc.
-
- vendor.id usb 0x06ea
-+vendor.name Sirius Technologies
-
- vendor.id usb 0x06ea
-&device.id usb 0x0001
-+device.name NetCom Roadster II 56k
-
- vendor.id usb 0x06ea
-&device.id usb 0x0002
-+device.name Roadster II 56k
-
- vendor.id usb 0x06ef
-+vendor.name I.A.C. Geometrische Ingenieurs B.V.
-
- vendor.id usb 0x06f0
-+vendor.name T.N.C Industrial Co., Ltd.
-
- vendor.id usb 0x06f1
-+vendor.name Opcode Systems Inc.
-
- vendor.id usb 0x06f2
-+vendor.name Machkey International (USA)
-
- vendor.id usb 0x06f6
-+vendor.name Wintrend Technology Co., Ltd.
-
- vendor.id usb 0x06fa
-+vendor.name HSD S.r.L
-
- vendor.id usb 0x06fd
-+vendor.name Boston Acoustics
-
- vendor.id usb 0x06fe
-+vendor.name Gallant Computer, Inc.
-
- vendor.id usb 0x0701
-+vendor.name Supercomal Wire & Cable SDN. BHD.
-
- vendor.id usb 0x0703
-+vendor.name Bencent Tzeng Industry Co., Ltd.
-
- vendor.id usb 0x0707
-+vendor.name Standard Microsystems Corp
-
- vendor.id usb 0x0707
-&device.id usb 0x0100
-+device.name 2202 Ethernet [klsi]
-
- vendor.id usb 0x0707
-&device.id usb 0x0200
-+device.name 2202 Ethernet [pegasus]
-
- vendor.id usb 0x0709
-+vendor.name Silicon Systems Ltd. (SSL)
-
- vendor.id usb 0x070a
-+vendor.name Oki Electric Industry Co., Ltd.
-
- vendor.id usb 0x070d
-+vendor.name Comoss Electronic Co., Ltd.
-
- vendor.id usb 0x0710
-+vendor.name Connect Tech Inc.
-
- vendor.id usb 0x0710
-&device.id usb 0x0001
-+device.name WhiteHeat (fake ID)
-
- vendor.id usb 0x0710
-&device.id usb 0x8001
-+device.name WhiteHeat
-
- vendor.id usb 0x0711
-+vendor.name Magic Control Technology Corp.
-
- vendor.id usb 0x0711
-&device.id usb 0x0100
-+device.name Hub
-
- vendor.id usb 0x0711
-&device.id usb 0x0200
-+device.name BAY-3U1S1P Serial Port
-
- vendor.id usb 0x0711
-&device.id usb 0x0210
-+device.name MCT1S Serial Port
-
- vendor.id usb 0x0711
-&device.id usb 0x0230
-+device.name MCT-232 Serial Port
-
- vendor.id usb 0x0711
-&device.id usb 0x0231
-+device.name PS/2 Mouse Port
-
- vendor.id usb 0x0711
-&device.id usb 0x0240
-+device.name PS/2 to USB Converter
-
- vendor.id usb 0x0711
-&device.id usb 0x0300
-+device.name BAY-3U1S1P Parallel Port
-
- vendor.id usb 0x0711
-&device.id usb 0x0302
-+device.name Parallel Port
-
- vendor.id usb 0x0714
-+vendor.name NewMotion, Inc.
-
- vendor.id usb 0x0714
-&device.id usb 0x0003
-+device.name ADB to USB convertor
-
- vendor.id usb 0x0718
-+vendor.name Imation Corp.
-
- vendor.id usb 0x0719
-+vendor.name Tremon Enterprises Co., Ltd.
-
- vendor.id usb 0x071b
-+vendor.name Domain Technologies, Inc.
-
- vendor.id usb 0x071b
-&device.id usb 0x0002
-+device.name DTI-56362-USB Digital Interface Unit
-
- vendor.id usb 0x071b
-&device.id usb 0x0101
-+device.name Audio4-USB DSP Data Acquisition Unit
-
- vendor.id usb 0x071b
-&device.id usb 0x0201
-+device.name Audio4-5410 DSP Data Acquisition Unit
-
- vendor.id usb 0x071b
-&device.id usb 0x0301
-+device.name SB-USB JTAG Emulator
-
- vendor.id usb 0x071c
-+vendor.name Xionics Document Technologies, Inc.
-
- vendor.id usb 0x071d
-+vendor.name Eicon Technology Corp.
-
- vendor.id usb 0x071d
-&device.id usb 0x1000
-+device.name Diva ISDN TA
-
- vendor.id usb 0x0723
-+vendor.name Centillium Communications Corp.
-
- vendor.id usb 0x0726
-+vendor.name Vanguard International Semiconductor-America
-
- vendor.id usb 0x0729
-+vendor.name Amitm
-
- vendor.id usb 0x0729
-&device.id usb 0x1000
-+device.name USC-1000 Serial Port
-
- vendor.id usb 0x072f
-+vendor.name ACS, Ltd.
-
- vendor.id usb 0x072f
-&device.id usb 0x0001
-+device.name ACR20U SmartCard Reader
-
- vendor.id usb 0x0733
-+vendor.name ViewQuest Technologies, Inc.
-
- vendor.id usb 0x0733
-&device.id usb 0x0401
-+device.name CS330 WebCam
-
- vendor.id usb 0x0733
-&device.id usb 0x0402
-+device.name M-318B WebCam
-
- vendor.id usb 0x0733
-&device.id usb 0x0430
-+device.name Intel Pro Share WebCam
-
- vendor.id usb 0x0734
-+vendor.name Lasat Communications A/S
-
- vendor.id usb 0x0734
-&device.id usb 0x0001
-+device.name 560V Modem
-
- vendor.id usb 0x0735
-+vendor.name Asuscom Network
-
- vendor.id usb 0x0735
-&device.id usb 0xc541
-+device.name ISDN TA 280
-
- vendor.id usb 0x0738
-+vendor.name Mad Catz, Inc.
-
- vendor.id usb 0x073e
-+vendor.name NEC, Inc.
-
- vendor.id usb 0x073e
-&device.id usb 0x0301
-+device.name Game Pad
-
- vendor.id usb 0x073b
-+vendor.name Suncom Technologies
-
- vendor.id usb 0x0745
-+vendor.name Syntech Information Co., Ltd.
-
- vendor.id usb 0x0746
-+vendor.name Onkyo Corp.
-
- vendor.id usb 0x0747
-+vendor.name Labway Corp.
-
- vendor.id usb 0x0748
-+vendor.name Strong Man Enterprise Co., Ltd.
-
- vendor.id usb 0x0749
-+vendor.name EVer Electronics Corp.
-
- vendor.id usb 0x074a
-+vendor.name Ming Fortune Industry Co., Ltd.
-
- vendor.id usb 0x074b
-+vendor.name Polestar Tech. Corp.
-
- vendor.id usb 0x074c
-+vendor.name C-C-C Group PLC
-
- vendor.id usb 0x074d
-+vendor.name Micronas Intermetall GmbH
-
- vendor.id usb 0x074e
-+vendor.name Digital Stream Corp.
-
- vendor.id usb 0x074e
-&device.id usb 0x0001
-+device.name PS/2 Adapter
-
- vendor.id usb 0x074e
-&device.id usb 0x0002
-+device.name PS/2 Adapter
-
- vendor.id usb 0x0755
-+vendor.name Aureal Semiconductor
-
- vendor.id usb 0x0763
-+vendor.name Midiman
-
- vendor.id usb 0x0763
-&device.id usb 0x1001
-+device.name Midisport 2x2
-
- vendor.id usb 0x0763
-&device.id usb 0x1010
-+device.name Midisport 1x1
-
- vendor.id usb 0x0763
-&device.id usb 0x1020
-+device.name Midisport 4x4
-
- vendor.id usb 0x0763
-&device.id usb 0x1030
-+device.name Midisport 8x8
-
- vendor.id usb 0x0757
-+vendor.name Network Technologies, Inc.
-
- vendor.id usb 0x0764
-+vendor.name Cyber Power System, Inc.
-
- vendor.id usb 0x0765
-+vendor.name X-Rite Incorporated
-
- vendor.id usb 0x0766
-+vendor.name Destech Solutions, Inc.
-
- vendor.id usb 0x0768
-+vendor.name Camtel Technology Corp.
-
- vendor.id usb 0x0769
-+vendor.name Surecom Technology Corp.
-
- vendor.id usb 0x076a
-+vendor.name Smart Technology Enablers, Inc.
-
- vendor.id usb 0x076b
-+vendor.name Utimaco Safeware AG
-
- vendor.id usb 0x076d
-+vendor.name Denso Corp.
-
- vendor.id usb 0x076e
-+vendor.name Kuan Tech Enterprise Co., Ltd.
-
- vendor.id usb 0x076f
-+vendor.name Jhen Vei Enterprise Co., Ltd.
-
- vendor.id usb 0x0774
-+vendor.name AmTRAN Technology Co., Ltd.
-
- vendor.id usb 0x0775
-+vendor.name Longshine Electronics Corp.
-
- vendor.id usb 0x0776
-+vendor.name Inalways Corp.
-
- vendor.id usb 0x0777
-+vendor.name Comda Enterprise Corp.
-
- vendor.id usb 0x0779
-+vendor.name Fairchild Semiconductor
-
- vendor.id usb 0x077a
-+vendor.name Sankyo Seiki Mfg. Co., Ltd.
-
- vendor.id usb 0x077b
-+vendor.name Linksys
-
- vendor.id usb 0x077c
-+vendor.name Forward Electronics Co., Ltd.
-
- vendor.id usb 0x077c
-&device.id usb 0x0005
-+device.name NEC Keyboard
-
- vendor.id usb 0x077d
-+vendor.name Griffin Technology
-
- vendor.id usb 0x077d
-&device.id usb 0x0223
-+device.name IMic Audio In/Out
-
- vendor.id usb 0x077f
-+vendor.name Well Excellent & Most Corp.
-
- vendor.id usb 0x0781
-+vendor.name SanDisk Corp.
-
- vendor.id usb 0x0781
-&device.id usb 0x0001
-+device.name SDDR-05a ImageMate CompactFlash Reader
-
- vendor.id usb 0x0781
-&device.id usb 0x0002
-+device.name SDDR-31 ImageMate II CompactFlash Reader
-
- vendor.id usb 0x0781
-&device.id usb 0x0005
-+device.name SDDR-05b (CF II) ImageMate CompactFlash Reader
-
- vendor.id usb 0x0781
-&device.id usb 0x0200
-+device.name SDDR-09 (SSFDC) ImageMate SmartMedia Reader [eusb]
-
- vendor.id usb 0x0782
-+vendor.name Trackerball
-
- vendor.id usb 0x0784
-+vendor.name Vivitar Inc.
-
- vendor.id usb 0x0784
-&device.id usb 0x0100
-+device.name ViviCam 2655
-
- vendor.id usb 0x0784
-&device.id usb 0x1310
-+device.name Vivicam 3305
-
- vendor.id usb 0x0784
-&device.id usb 0x5260
-+device.name Werlisa Sport PX 100
-
- vendor.id usb 0x0785
-+vendor.name NTT-ME
-
- vendor.id usb 0x0785
-&device.id usb 0x0001
-+device.name MN128mini-V ISDN TA
-
- vendor.id usb 0x0785
-&device.id usb 0x0003
-+device.name MN128mini-J ISDN TA
-
- vendor.id usb 0x078b
-+vendor.name Happ Controls, Inc.
-
- vendor.id usb 0x078b
-&device.id usb 0x0010
-+device.name Driving UGCI
-
- vendor.id usb 0x078b
-&device.id usb 0x0020
-+device.name Flying UGCI
-
- vendor.id usb 0x078b
-&device.id usb 0x0030
-+device.name Fighting UGCI
-
- vendor.id usb 0x078e
-+vendor.name Brimax Inc.
-
- vendor.id usb 0x0790
-+vendor.name Pro-Image Manufacturing Co., Ltd.
-
- vendor.id usb 0x0791
-+vendor.name Copartner Wire and Cable Mfg. Corp.
-
- vendor.id usb 0x0792
-+vendor.name Axis Communications AB
-
- vendor.id usb 0x0793
-+vendor.name Wha Yu Industrial Co., Ltd.
-
- vendor.id usb 0x0794
-+vendor.name ABL Electronics Corp.
-
- vendor.id usb 0x0795
-+vendor.name RealChip Inc.
-
- vendor.id usb 0x0796
-+vendor.name Certicom Corp.
-
- vendor.id usb 0x0797
-+vendor.name Grandtech Semiconductor Corp.
-
- vendor.id usb 0x0797
-&device.id usb 0x8001
-+device.name SmartCam
-
- vendor.id usb 0x079b
-+vendor.name Sagem
-
- vendor.id usb 0x079d
-+vendor.name Alfadata Computer Corp.
-
- vendor.id usb 0x079d
-&device.id usb 0x0201
-+device.name GamePort Adapter
-
- vendor.id usb 0x07a1
-+vendor.name Digicom S.p.A.
-
- vendor.id usb 0x07a1
-&device.id usb 0xd952
-+device.name Palladio USB V.92 Modem
-
- vendor.id usb 0x07a2
-+vendor.name National Technical Systems
-
- vendor.id usb 0x07a3
-+vendor.name Onnto Corp.
-
- vendor.id usb 0x07a4
-+vendor.name Be Incorporated
-
- vendor.id usb 0x07a6
-+vendor.name ADMtek Incorporated
-
- vendor.id usb 0x07a6
-&device.id usb 0x0986
-+device.name AN986 Pegasus Ethernet
-
- vendor.id usb 0x07a6
-&device.id usb 0x8511
-+device.name ADM8511 Pegasus II Ethernet
-
- vendor.id usb 0x07aa
-+vendor.name Correga K.K.
-
- vendor.id usb 0x07aa
-&device.id usb 0x0001
-+device.name Ether USB-T Ethernet [klsi]
-
- vendor.id usb 0x07aa
-&device.id usb 0x0004
-+device.name FEther USB-TX Ethernet [pegasus]
-
- vendor.id usb 0x07ab
-+vendor.name Freecom
-
- vendor.id usb 0x07ab
-&device.id usb 0xfc01
-+device.name IDE bridge
-
- vendor.id usb 0x07af
-+vendor.name Microtech
-
- vendor.id usb 0x07af
-&device.id usb 0x0004
-+device.name SCSI-DB25 SCSI Bridge [shuttle]
-
- vendor.id usb 0x07af
-&device.id usb 0x0005
-+device.name SCSI-HD50 SCSI Bridge [shuttle]
-
- vendor.id usb 0x07af
-&device.id usb 0x0006
-+device.name CameraMate SmartMedia and CompactFlash Card Reader [eusb/shuttle]
-
- vendor.id usb 0x07b0
-+vendor.name Trust Technologies
-
- vendor.id usb 0x07b0
-&device.id usb 0x0001
-+device.name ISDN TA
-
- vendor.id usb 0x07b1
-+vendor.name IMP, Inc.
-
- vendor.id usb 0x07b2
-+vendor.name Motorola ING
-
- vendor.id usb 0x07b2
-&device.id usb 0x4100
-+device.name SB4100 Cable Modem
-
- vendor.id usb 0x07b3
-+vendor.name Plustek, Inc.
-
- vendor.id usb 0x07b3
-&device.id usb 0x0001
-+device.name OpticPro 1212U Scanner
-
- vendor.id usb 0x07b4
-+vendor.name Olympus Optical Co., Ltd.
-
- vendor.id usb 0x07b4
-&device.id usb 0x0100
-+device.name Camedia C-2100/C-3000 Ultra Zoom Camera
-
- vendor.id usb 0x07b4
-&device.id usb 0x0102
-+device.name Camedia E-10/C-220 Camera
-
- vendor.id usb 0x07b4
-&device.id usb 0x0105
-+device.name Camedia C-700/C-3040 Zoom Camera
-
- vendor.id usb 0x07b5
-+vendor.name Mega World International Ltd.
-
- vendor.id usb 0x07b5
-&device.id usb 0x9902
-+device.name GamePad
-
- vendor.id usb 0x07b6
-+vendor.name Marubun Corp.
-
- vendor.id usb 0x07b7
-+vendor.name TIME Interconect Ltd.
-
- vendor.id usb 0x07b8
-+vendor.name D-Link, Inc.
-
- vendor.id usb 0x07b8
-&device.id usb 0xabc1
-+device.name DU-E10 Ethernet [pegasus]
-
- vendor.id usb 0x07b8
-&device.id usb 0x4000
-+device.name DU-E10 Ethernet [klsi]
-
- vendor.id usb 0x07b8
-&device.id usb 0x4002
-+device.name DU-E100 Ethernet [pegasus]
-
- vendor.id usb 0x07b8
-&device.id usb 0xf101
-+device.name DSB-560 Modem [atlas]
-
- vendor.id usb 0x07bc
-+vendor.name Canon Computer Sytems, Inc.
-
- vendor.id usb 0x07bd
-+vendor.name Webgear Inc.
-
- vendor.id usb 0x07be
-+vendor.name Veridicom
-
- vendor.id usb 0x07c0
-+vendor.name Code Mercenaries Hard- und Software GmbH
-
- vendor.id usb 0x07c4
-+vendor.name DataFab Systems, Inc.
-
- vendor.id usb 0x07c4
-&device.id usb 0xa000
-+device.name CompactFlash Card Reader
-
- vendor.id usb 0x07c4
-&device.id usb 0xa001
-+device.name CompactFlash & SmartMedia Card Reader [eusb]
-
- vendor.id usb 0x07c4
-&device.id usb 0xa002
-+device.name Disk Drive
-
- vendor.id usb 0x07c4
-&device.id usb 0xa005
-+device.name CompactFlash & SmartMedia Card Reader
-
- vendor.id usb 0x07c4
-&device.id usb 0xa006
-+device.name SmartMedia Card Reader
-
- vendor.id usb 0x07c4
-&device.id usb 0xa109
-+device.name LC1 CompactFlash & SmartMedia Card Reader
-
- vendor.id usb 0x07c4
-&device.id usb 0xa400
-+device.name CompactFlash & Microdrive Reader
-
- vendor.id usb 0x07c5
-+vendor.name APG Cash Drawer
-
- vendor.id usb 0x07c6
-+vendor.name Share Wave, Inc.
-
- vendor.id usb 0x07c7
-+vendor.name Powertech Industrial Co., Ltd.
-
- vendor.id usb 0x07c8
-+vendor.name B.U.G., Inc.
-
- vendor.id usb 0x07c9
-+vendor.name Allied Telesyn International
-
- vendor.id usb 0x07ca
-+vendor.name AVerMedia Technologies, Inc.
-
- vendor.id usb 0x07cb
-+vendor.name Kingmax Technology Inc.
-
- vendor.id usb 0x07cc
-+vendor.name Carry Inc.
-
- vendor.id usb 0x07cc
-&device.id usb 0x0000
-+device.name CF Card Reader
-
- vendor.id usb 0x07cc
-&device.id usb 0x0003
-+device.name SM Card Reader
-
- vendor.id usb 0x07cc
-&device.id usb 0x0004
-+device.name SM/CF/PCMCIA Card Reader
-
- vendor.id usb 0x07cc
-&device.id usb 0x0006
-+device.name SM/CF/PCMCIA Card Reader
-
- vendor.id usb 0x07cc
-&device.id usb 0x000c
-+device.name SM/CF Card Reader
-
- vendor.id usb 0x07cc
-&device.id usb 0x000d
-+device.name SM/CF Card Reader
-
- vendor.id usb 0x07cd
-+vendor.name Elektor
-
- vendor.id usb 0x07cd
-&device.id usb 0x0001
-+device.name USBuart Serial Port
-
- vendor.id usb 0x07cf
-+vendor.name Casio Computer Co., Ltd.
-
- vendor.id usb 0x07cf
-&device.id usb 0x1001
-+device.name QV-8000SX/3000EX Digicam
-
- vendor.id usb 0x07cf
-&device.id usb 0x2002
-+device.name E-125 Cassiopeia Pocket PC
-
- vendor.id usb 0x07cf
-&device.id usb 0x3801
-+device.name Casio WMP-1 MP3-Watch
-
- vendor.id usb 0x07d1
-+vendor.name D-Link System
-
- vendor.id usb 0x07d2
-+vendor.name Aptio Products Inc.
-
- vendor.id usb 0x07d3
-+vendor.name Cyberdata Corp.
-
- vendor.id usb 0x07d7
-+vendor.name GCC Technologies, Inc.
-
- vendor.id usb 0x07da
-+vendor.name Arasan Chip Systems
-
- vendor.id usb 0x07e1
-+vendor.name Ambient Technologies, Inc.
-
- vendor.id usb 0x07e1
-&device.id usb 0x5201
-+device.name V.90 Modem
-
- vendor.id usb 0x07e2
-+vendor.name Elmeg GmbH & Co., Ltd.
-
- vendor.id usb 0x07e3
-+vendor.name Planex Communications, Inc.
-
- vendor.id usb 0x07e4
-+vendor.name Movado Enterprise Co., Ltd.
-
- vendor.id usb 0x07e5
-+vendor.name QPS, Inc.
-
- vendor.id usb 0x07e5
-&device.id usb 0x5c01
-+device.name Que! CDRW
-
- vendor.id usb 0x07e6
-+vendor.name Allied Cable Corp.
-
- vendor.id usb 0x07e7
-+vendor.name Mirvo Toys, Inc.
-
- vendor.id usb 0x07e8
-+vendor.name Labsystems
-
- vendor.id usb 0x07eb
-+vendor.name Double-H Technology Co., Ltd.
-
- vendor.id usb 0x07ec
-+vendor.name Taiyo Electrical Wire & Cable Co., Ltd.
-
- vendor.id usb 0x07fa
-+vendor.name Draytek
-
- vendor.id usb 0x07fa
-&device.id usb 0x0778
-+device.name miniVigor 128 ISDN TA
-
- vendor.id usb 0x07f6
-+vendor.name Circuit Assembly Corp
-
- vendor.id usb 0x07f7
-+vendor.name Century Corp.
-
- vendor.id usb 0x07fd
-+vendor.name Mark of the Unicorn
-
- vendor.id usb 0x07fd
-&device.id usb 0x0000
-+device.name FastLane MIDI Interface
-
- vendor.id usb 0x0801
-+vendor.name Mag-Tek
-
- vendor.id usb 0x0802
-+vendor.name Tritheim Technologies, Inc.
-
- vendor.id usb 0x0803
-+vendor.name Zoom Telephonics, Inc.
-
- vendor.id usb 0x0803
-&device.id usb 0x9700
-+device.name 2986L FaxModem
-
- vendor.id usb 0x0809
-+vendor.name Genicom Corp.
-
- vendor.id usb 0x080a
-+vendor.name Evermuch Technology Co., Ltd.
-
- vendor.id usb 0x080d
-+vendor.name Teco Image Systems Co., Ltd.
-
- vendor.id usb 0x0813
-+vendor.name Mattel, Inc.
-
- vendor.id usb 0x081a
-+vendor.name MG Logic
-
- vendor.id usb 0x081a
-&device.id usb 0x1000
-+device.name Duo Pen Tablet
-
- vendor.id usb 0x081c
-+vendor.name Mipsys
-
- vendor.id usb 0x081e
-+vendor.name Intelligent Peripheral Devices, Inc.
-
- vendor.id usb 0x0822
-+vendor.name Reudo Corp.
-
- vendor.id usb 0x0825
-+vendor.name GC Protronics
-
- vendor.id usb 0x0826
-+vendor.name Data Transit
-
- vendor.id usb 0x0827
-+vendor.name BroadLogic, Inc.
-
- vendor.id usb 0x0828
-+vendor.name Sato Corp.
-
- vendor.id usb 0x0829
-+vendor.name Telocity, Inc.
-
- vendor.id usb 0x082d
-+vendor.name Handspring
-
- vendor.id usb 0x082d
-&device.id usb 0x0100
-+device.name Visor
-
- vendor.id usb 0x0830
-+vendor.name Palm Computing, Inc.
-
- vendor.id usb 0x0830
-&device.id usb 0x0002
-+device.name Palm M505
-
- vendor.id usb 0x0830
-&device.id usb 0x0003
-+device.name Palm M515
-
- vendor.id usb 0x0830
-&device.id usb 0x0020
-+device.name Palm I705
-
- vendor.id usb 0x0830
-&device.id usb 0x0040
-+device.name Palm M125
-
- vendor.id usb 0x0830
-&device.id usb 0x0050
-+device.name Palm M130
-
- vendor.id usb 0x0830
-&device.id usb 0x0080
-+device.name Palm
-
- vendor.id usb 0x0832
-+vendor.name Kouwell Electronics Corp.
-
- vendor.id usb 0x0833
-+vendor.name Sourcenext Corp.
-
- vendor.id usb 0x0835
-+vendor.name Action Star Enterprise Co., Ltd.
-
- vendor.id usb 0x0839
-+vendor.name Samsung Aerospace Industries Ltd.
-
- vendor.id usb 0x0839
-&device.id usb 0x0005
-+device.name Digimax Camera
-
- vendor.id usb 0x083a
-+vendor.name Accton Technology Corp.
-
- vendor.id usb 0x083a
-&device.id usb 0x1046
-+device.name 10/100 Ethernet [pegasus]
-
- vendor.id usb 0x083a
-&device.id usb 0x5046
-+device.name SpeedStream 10/100 Ethernet [pegasus]
-
- vendor.id usb 0x083f
-+vendor.name Global Village
-
- vendor.id usb 0x083f
-&device.id usb 0xb100
-+device.name TelePort V.90 Fax/Modem
-
- vendor.id usb 0x0841
-+vendor.name Rioport.com Inc.
-
- vendor.id usb 0x0841
-&device.id usb 0x0001
-+device.name Rio 500
-
- vendor.id usb 0x0846
-+vendor.name NetGear, Inc.
-
- vendor.id usb 0x0846
-&device.id usb 0x1001
-+device.name EA101 Ethernet [klsi]
-
- vendor.id usb 0x084d
-+vendor.name Minton Optic Industry Co., Inc.
-
- vendor.id usb 0x084d
-&device.id usb 0x0003
-+device.name S-Cam F5 Digital Camera
-
- vendor.id usb 0x084e
-+vendor.name KB Gear
-
- vendor.id usb 0x084e
-&device.id usb 0x1002
-+device.name Pablo Tablet
-
- vendor.id usb 0x084f
-+vendor.name Empeg
-
- vendor.id usb 0x084f
-&device.id usb 0x0001
-+device.name Empeg-Car Mark I/II Player
-
- vendor.id usb 0x0850
-+vendor.name Fast Point Technologies, Inc.
-
- vendor.id usb 0x0851
-+vendor.name Macronix International Co., Ltd.
-
- vendor.id usb 0x0852
-+vendor.name CSEM
-
- vendor.id usb 0x0854
-+vendor.name ActiveWire Inc.
-
- vendor.id usb 0x0854
-&device.id usb 0x0100
-+device.name I/O Board
-
- vendor.id usb 0x0854
-&device.id usb 0x0101
-+device.name I/O Board, rev1
-
- vendor.id usb 0x0858
-+vendor.name Hitachi Maxell Ltd.
-
- vendor.id usb 0x0859
-+vendor.name Minolta Systems Laboratory, Inc.
-
- vendor.id usb 0x085a
-+vendor.name Xircom
-
- vendor.id usb 0x085a
-&device.id usb 0x0001
-+device.name Portstation Dual Serial Port
-
- vendor.id usb 0x085a
-&device.id usb 0x8027
-+device.name PGSDB9 Serial Port
-
- vendor.id usb 0x0862
-+vendor.name Teletrol Systems, Inc.
-
- vendor.id usb 0x0863
-+vendor.name Filanet Corp.
-
- vendor.id usb 0x0864
-+vendor.name NetGear, Inc.
-
- vendor.id usb 0x0864
-&device.id usb 0x4100
-+device.name MA101 Wireless Adapter
-
- vendor.id usb 0x086a
-+vendor.name Emagic Soft-und Hardware GmbH
-
- vendor.id usb 0x086c
-+vendor.name DeTeWe - Deutsche Telephonwerke AG & Co.
-
- vendor.id usb 0x086c
-&device.id usb 0x1001
-+device.name Eumex 504PC ISDN TA
-
- vendor.id usb 0x086e
-+vendor.name System TALKS Inc.
-
- vendor.id usb 0x086f
-+vendor.name MEC IMEX Inc/HPT
-
- vendor.id usb 0x0870
-+vendor.name Metricom
-
- vendor.id usb 0x0871
-+vendor.name SanDisk, Inc.
-
- vendor.id usb 0x0871
-&device.id usb 0x0001
-+device.name SDDR-01 Compact Flash Reader
-
- vendor.id usb 0x0871
-&device.id usb 0x0002
-+device.name SDDR-31 Compact Flash Reader
-
- vendor.id usb 0x0871
-&device.id usb 0x0005
-+device.name SDDR-05 Compact Flash Reader
-
- vendor.id usb 0x0873
-+vendor.name Xpeed Inc.
-
- vendor.id usb 0x0879
-+vendor.name Comtrol Corp.
-
- vendor.id usb 0x087c
-+vendor.name Adesso/Kbtek America Inc.
-
- vendor.id usb 0x087d
-+vendor.name Jaton Corp.
-
- vendor.id usb 0x087e
-+vendor.name Fujitsu Computer Products of America
-
- vendor.id usb 0x087f
-+vendor.name Virtual IP Group, Inc.
-
- vendor.id usb 0x0880
-+vendor.name APT Technologies Inc.
-
- vendor.id usb 0x0883
-+vendor.name Recording Industry Association of America (RIAA)
-
- vendor.id usb 0x0885
-+vendor.name Boca Research, Inc.
-
- vendor.id usb 0x0886
-+vendor.name XAC Automation Corp.
-
- vendor.id usb 0x0887
-+vendor.name Hannstar Electronics Corp.
-
- vendor.id usb 0x088b
-+vendor.name MassWorks, Inc.
-
- vendor.id usb 0x088b
-&device.id usb 0x4944
-+device.name MassWorks ID-75 TouchScreen
-
- vendor.id usb 0x0892
-+vendor.name DioGraphy Inc.
-
- vendor.id usb 0x089c
-+vendor.name United Technologies Research Cntr.
-
- vendor.id usb 0x089d
-+vendor.name Icron Systems Inc.
-
- vendor.id usb 0x089e
-+vendor.name NST Co., Ltd.
-
- vendor.id usb 0x08a5
-+vendor.name e9 Inc.
-
- vendor.id usb 0x08a8
-+vendor.name Andrea Electronics
-
- vendor.id usb 0x08b8
-+vendor.name J. Gordon Electronic Design, Inc.
-
- vendor.id usb 0x08b8
-&device.id usb 0x01f4
-+device.name USBSIMM1
-
- vendor.id usb 0x08b9
-+vendor.name Tandy Corp./Radio Shack
-
- vendor.id usb 0x08bb
-+vendor.name Burr-Brown Japan, Ltd.
-
- vendor.id usb 0x08bd
-+vendor.name Citizen Watch Co., Ltd.
-
- vendor.id usb 0x08c3
-+vendor.name Precise Biometrics
-
- vendor.id usb 0x08c3
-&device.id usb 0x0101
-+device.name Precise 100 MC FingerPrint and SmartCard Reader
-
- vendor.id usb 0x08c4
-+vendor.name Proxim, Inc.
-
- vendor.id usb 0x08c7
-+vendor.name Key Nice Enterprise Co., Ltd.
-
- vendor.id usb 0x08c8
-+vendor.name 2Wire, Inc.
-
- vendor.id usb 0x08c9
-+vendor.name Nippon Telegraph and Telephone Corp.
-
- vendor.id usb 0x08ca
-+vendor.name AIPTEK International Inc.
-
- vendor.id usb 0x08ca
-&device.id usb 0x0020
-+device.name APT-6000U Tablet
-
- vendor.id usb 0x08ca
-&device.id usb 0x0103
-+device.name Pocket DV Digital Camera
-
- vendor.id usb 0x08cd
-+vendor.name Jue Hsun Ind. Corp.
-
- vendor.id usb 0x08ce
-+vendor.name Long Well Electronics Corp.
-
- vendor.id usb 0x08cf
-+vendor.name Productivity Enhancement Products
-
- vendor.id usb 0x08d1
-+vendor.name smartBridges, Inc.
-
- vendor.id usb 0x08d1
-&device.id usb 0x0001
-+device.name smartNIC Ethernet [catc]
-
- vendor.id usb 0x08d3
-+vendor.name Virtual Ink
-
- vendor.id usb 0x08d4
-+vendor.name Siemens PC Systems
-
- vendor.id usb 0x08dd
-+vendor.name Billionton Systems, Inc.
-
- vendor.id usb 0x08dd
-&device.id usb 0x0986
-+device.name USB-100N Ethernet [pegasus]
-
- vendor.id usb 0x08dd
-&device.id usb 0x0987
-+device.name USBLP-100 HomePNA Ethernet [pegasus]
-
- vendor.id usb 0x08dd
-&device.id usb 0x0988
-+device.name USBEL-100 Ethernet [pegasus]
-
- vendor.id usb 0x08dd
-&device.id usb 0x8511
-+device.name USBE-100 Ethernet [pegasus2]
-
- vendor.id usb 0x08e3
-+vendor.name Olitec, Inc.
-
- vendor.id usb 0x08e3
-&device.id usb 0x0002
-+device.name USB-RS232 Bridge
-
- vendor.id usb 0x08e5
-+vendor.name Litronic
-
- vendor.id usb 0x08e6
-+vendor.name GemPlus
-
- vendor.id usb 0x08e7
-+vendor.name Pan-International Wire & Cable
-
- vendor.id usb 0x08e8
-+vendor.name Integrated Memory Logic
-
- vendor.id usb 0x08e9
-+vendor.name Extended Systems, Inc.
-
- vendor.id usb 0x08e9
-&device.id usb 0x0100
-+device.name XTNDAccess IrDA Dongle
-
- vendor.id usb 0x08ea
-+vendor.name Ericsson Inc., Blue Ridge Labs
-
- vendor.id usb 0x08ec
-+vendor.name M-Systems
-
- vendor.id usb 0x08ec
-&device.id usb 0x0010
-+device.name DiskOnKey
-
- vendor.id usb 0x08f1
-+vendor.name CTI Electronics Corp.
-
- vendor.id usb 0x08f5
-+vendor.name SYSTEC Co., Ltd.
-
- vendor.id usb 0x08f6
-+vendor.name Logic 3 International Limited
-
- vendor.id usb 0x08f8
-+vendor.name Keen Top International Enterprise Co., Ltd.
-
- vendor.id usb 0x08f9
-+vendor.name EnThink, Inc.
-
- vendor.id usb 0x08fa
-+vendor.name Caere
-
- vendor.id usb 0x08fb
-+vendor.name Socket Communications
-
- vendor.id usb 0x08fc
-+vendor.name Sicon Cable Technology Co. Ltd.
-
- vendor.id usb 0x08fd
-+vendor.name Digianswer A/S
-
- vendor.id usb 0x08ff
-+vendor.name AuthenTec, Inc.
-
- vendor.id usb 0x0900
-+vendor.name Pinnacle Systems, Inc.
-
- vendor.id usb 0x0901
-+vendor.name VST Technologies
-
- vendor.id usb 0x0906
-+vendor.name Faraday Technology Corp.
-
- vendor.id usb 0x090a
-+vendor.name Trumpion Microelectronics Inc.
-
- vendor.id usb 0x090b
-+vendor.name Neurosmith
-
- vendor.id usb 0x090c
-+vendor.name Feiya Technology Corp.
-
- vendor.id usb 0x090d
-+vendor.name Multiport Computer Vertriebs GmbH
-
- vendor.id usb 0x090e
-+vendor.name Shining Technology, Inc.
-
- vendor.id usb 0x090f
-+vendor.name Fujitsu Devices Inc.
-
- vendor.id usb 0x0910
-+vendor.name Alation Systems, Inc.
-
- vendor.id usb 0x0911
-+vendor.name Philips Speech Processing
-
- vendor.id usb 0x0912
-+vendor.name Voquette, Inc.
-
- vendor.id usb 0x0915
-+vendor.name GlobeSpan, Inc.
-
- vendor.id usb 0x0917
-+vendor.name SmartDisk Corp.
-
- vendor.id usb 0x0919
-+vendor.name Tiger Electronics
-
- vendor.id usb 0x0919
-&device.id usb 0x0100
-+device.name Fast Flicks Digital Camera
-
- vendor.id usb 0x0920
-+vendor.name Echelon Co.
-
- vendor.id usb 0x0921
-+vendor.name GoHubs, Inc.
-
- vendor.id usb 0x0922
-+vendor.name Dymo-CoStar Corp.
-
- vendor.id usb 0x0923
-+vendor.name IC Media Corp.
-
- vendor.id usb 0x0924
-+vendor.name Xerox
-
- vendor.id usb 0x0927
-+vendor.name Summus, Ltd.
-
- vendor.id usb 0x0928
-+vendor.name Oxford Semiconductor Ltd.
-
- vendor.id usb 0x0929
-+vendor.name American Biometric Company
-
- vendor.id usb 0x0930
-+vendor.name Toshiba Corp.
-
- vendor.id usb 0x0931
-+vendor.name Harmonic Data Systems Ltd.
-
- vendor.id usb 0x0932
-+vendor.name Crescentec Corp.
-
- vendor.id usb 0x0933
-+vendor.name Quantum Corp.
-
- vendor.id usb 0x0934
-+vendor.name Netcom Systems
-
- vendor.id usb 0x0939
-+vendor.name Lumberg, Inc.
-
- vendor.id usb 0x093a
-+vendor.name Pixart Imaging, Inc.
-
- vendor.id usb 0x093b
-+vendor.name Plextor
-
- vendor.id usb 0x093e
-+vendor.name J.S.T. Mfg. Co., Ltd.
-
- vendor.id usb 0x093f
-+vendor.name Olympia Telecom Vertriebs GmbH
-
- vendor.id usb 0x0940
-+vendor.name Japan Storage Battery Co., Ltd.
-
- vendor.id usb 0x0941
-+vendor.name Photobit Corp.
-
- vendor.id usb 0x0942
-+vendor.name i2Go.com, LLC
-
- vendor.id usb 0x0943
-+vendor.name HCL Technologies India Private Limited
-
- vendor.id usb 0x0944
-+vendor.name KORG, Inc.
-
- vendor.id usb 0x0945
-+vendor.name Pasco Scientific
-
- vendor.id usb 0x0948
-+vendor.name Kronauer music in digital
-
- vendor.id usb 0x0948
-&device.id usb 0x1105
-+device.name USB One
-
- vendor.id usb 0x0948
-&device.id usb 0x0301
-+device.name USB Pro (24/48)
-
- vendor.id usb 0x0948
-&device.id usb 0x0302
-+device.name USB Pro (24/96 playback)
-
- vendor.id usb 0x0948
-&device.id usb 0x0303
-+device.name USB Pro (24/96 record)
-
- vendor.id usb 0x0948
-&device.id usb 0x0304
-+device.name USB Pro (16/48)
-
- vendor.id usb 0x094d
-+vendor.name Cable Television Laboratories
-
- vendor.id usb 0x0951
-+vendor.name Kingston Technology
-
- vendor.id usb 0x0951
-&device.id usb 0x000a
-+device.name KNU101TX 100baseTX Ethernet
-
- vendor.id usb 0x0954
-+vendor.name RPM Systems Corp.
-
- vendor.id usb 0x0955
-+vendor.name NVidia
-
- vendor.id usb 0x0956
-+vendor.name BlueWater Systems, Inc.
-
- vendor.id usb 0x0957
-+vendor.name Agilent Technologies, Inc.
-
- vendor.id usb 0x0958
-+vendor.name CompuLink Research, Inc.
-
- vendor.id usb 0x0959
-+vendor.name Cologne Chip Designs GmbH
-
- vendor.id usb 0x095a
-+vendor.name Portsmith
-
- vendor.id usb 0x095b
-+vendor.name Medialogic Corp.
-
- vendor.id usb 0x095c
-+vendor.name K-Tec Electronics
-
- vendor.id usb 0x095d
-+vendor.name Polycom, Inc.
-
- vendor.id usb 0x0968
-+vendor.name Catalyst Enterprises, Inc.
-
- vendor.id usb 0x0971
-+vendor.name Gretag-Macbeth AG
-
- vendor.id usb 0x0973
-+vendor.name Schlumberger
-
- vendor.id usb 0x0974
-+vendor.name Datagraphix, a business unit of Anacomp
-
- vendor.id usb 0x0975
-+vendor.name OL'E Communications, Inc.
-
- vendor.id usb 0x0976
-+vendor.name Adirondack Wire & Cable
-
- vendor.id usb 0x0977
-+vendor.name Lightsurf Technologies
-
- vendor.id usb 0x0978
-+vendor.name Beckhoff GmbH
-
- vendor.id usb 0x0979
-+vendor.name Teracom International Inc.
-
- vendor.id usb 0x097a
-+vendor.name Minds At Work LLC
-
- vendor.id usb 0x097b
-+vendor.name Knudsen Engineering Limited
-
- vendor.id usb 0x097c
-+vendor.name Marunix Co., Ltd.
-
- vendor.id usb 0x097d
-+vendor.name Rosun Technologies, Inc.
-
- vendor.id usb 0x0981
-+vendor.name Oak Technology Ltd.
-
- vendor.id usb 0x0985
-+vendor.name cab Produkttechnik GmbH & Co KG
-
- vendor.id usb 0x0985
-&device.id usb 0x00a3
-+device.name A3/200 or A3/300 Label Printer
-
- vendor.id usb 0x098c
-+vendor.name Vitana Corp.
-
- vendor.id usb 0x098d
-+vendor.name INDesign
-
- vendor.id usb 0x098e
-+vendor.name Integrated Intellectual Property Inc.
-
- vendor.id usb 0x098f
-+vendor.name Kenwood TMI Corp.
-
- vendor.id usb 0x0993
-+vendor.name Gemstar eBook Group, Ltd.
-
- vendor.id usb 0x0993
-&device.id usb 0x0001
-+device.name REB1100 eBook Reader
-
- vendor.id usb 0x0996
-+vendor.name Integrated Telecom Express, Inc.
-
- vendor.id usb 0x09a3
-+vendor.name PairGain Technologies
-
- vendor.id usb 0x09a4
-+vendor.name Contech Research, Inc.
-
- vendor.id usb 0x09a5
-+vendor.name VCON Telecommunications
-
- vendor.id usb 0x09a6
-+vendor.name Poinchips
-
- vendor.id usb 0x09a7
-+vendor.name Data Transmission Network Corp.
-
- vendor.id usb 0x09a8
-+vendor.name Shinestar Enterprise Co., Ltd.
-
- vendor.id usb 0x09a9
-+vendor.name Smart Card Technologies Co., Ltd.
-
- vendor.id usb 0x09aa
-+vendor.name Intersil Corp.
-
- vendor.id usb 0x09b2
-+vendor.name Franklin Electronic Publishers
-
- vendor.id usb 0x09b2
-&device.id usb 0x0001
-+device.name eBookman Palm Computer
-
- vendor.id usb 0x09b3
-+vendor.name Altius Solutions, Inc.
-
- vendor.id usb 0x09b4
-+vendor.name MDS Telephone Systems
-
- vendor.id usb 0x09b5
-+vendor.name Celltrix Technology Co., Ltd.
-
- vendor.id usb 0x09be
-+vendor.name MySmart.Com
-
- vendor.id usb 0x09be
-&device.id usb 0x0001
-+device.name MySmartPad
-
- vendor.id usb 0x09bf
-+vendor.name Auerswald GmbH & Co. KG
-
- vendor.id usb 0x09bf
-&device.id usb 0x00c0
-+device.name COMpact 2104 ISDN PBX
-
- vendor.id usb 0x09bf
-&device.id usb 0x00db
-+device.name COMpact 4410/2206 ISDN ISDN
-
- vendor.id usb 0x09bf
-&device.id usb 0x00f1
-+device.name COMfort System Telephones
-
- vendor.id usb 0x09c1
-+vendor.name Arris Interactive LLC
-
- vendor.id usb 0x09c3
-+vendor.name ActivCard, INC.
-
- vendor.id usb 0x09c4
-+vendor.name ACTiSYS Corp.
-
- vendor.id usb 0x09c4
-&device.id usb 0x0011
-+device.name ACT-IR2000U IrDA Dongle
-
- vendor.id usb 0x09c5
-+vendor.name Memory Corp.
-
- vendor.id usb 0x09cc
-+vendor.name Workbit Corp.
-
- vendor.id usb 0x09cd
-+vendor.name Psion Dacom Home Networks Ltd.
-
- vendor.id usb 0x09ce
-+vendor.name City Electronics Ltd.
-
- vendor.id usb 0x09cf
-+vendor.name Electronics Testing Center, Taiwan
-
- vendor.id usb 0x09d1
-+vendor.name NeoMagic Inc.
-
- vendor.id usb 0x09d2
-+vendor.name Vreelin Engineering Inc.
-
- vendor.id usb 0x09d3
-+vendor.name Com One
-
- vendor.id usb 0x09d9
-+vendor.name KRF Tech Ltd.
-
- vendor.id usb 0x09da
-+vendor.name A4 Tech Co., Ltd.
-
- vendor.id usb 0x09db
-+vendor.name ComputerBoards Inc.
-
- vendor.id usb 0x09dc
-+vendor.name Aimex Corp.
-
- vendor.id usb 0x09dd
-+vendor.name Fellowes Manufacturing Co.
-
- vendor.id usb 0x09df
-+vendor.name Addonics Technologies Corp.
-
- vendor.id usb 0x09e5
-+vendor.name Jo-Dan International, Inc.
-
- vendor.id usb 0x09e6
-+vendor.name Silutia, Inc.
-
- vendor.id usb 0x09e7
-+vendor.name Real 3D, Inc.
-
- vendor.id usb 0x09e8
-+vendor.name AKAI Professional M.I. Corp.
-
- vendor.id usb 0x09e9
-+vendor.name Chen-Source Inc.
-
- vendor.id usb 0x09ef
-+vendor.name Xitel
-
- vendor.id usb 0x09ef
-&device.id usb 0x0101
-+device.name MD-Port DG2 MiniDisc Interface
-
- vendor.id usb 0x09f5
-+vendor.name AresCom
-
- vendor.id usb 0x09f6
-+vendor.name RocketChips, Inc.
-
- vendor.id usb 0x09f7
-+vendor.name Edu-Science (H.K.) Ltd.
-
- vendor.id usb 0x09f8
-+vendor.name SoftConnex
-
- vendor.id usb 0x09f9
-+vendor.name Bay Associates
-
- vendor.id usb 0x09fa
-+vendor.name Mtek Vision
-
- vendor.id usb 0x09fb
-+vendor.name Altera
-
- vendor.id usb 0x09ff
-+vendor.name Gain Technology Corp.
-
- vendor.id usb 0x0a00
-+vendor.name Liquid Audio
-
- vendor.id usb 0x0a01
-+vendor.name ViA, Inc.
-
- vendor.id usb 0x0a11
-+vendor.name Xentec Incorporated
-
- vendor.id usb 0x0a12
-+vendor.name Cambridge Silicon Radio Ltd.
-
- vendor.id usb 0x0a13
-+vendor.name Telebyte Inc.
-
- vendor.id usb 0x0a14
-+vendor.name Spacelabs Medical Inc.
-
- vendor.id usb 0x0a15
-+vendor.name Scalar Corp.
-
- vendor.id usb 0x0a16
-+vendor.name Trek Technology (S) PTE Ltd.
-
- vendor.id usb 0x0a16
-&device.id usb 0x9988
-+device.name Trek2000 TD-G2
-
- vendor.id usb 0x0a17
-+vendor.name Asahi Optical Co., Ltd.
-
- vendor.id usb 0x0a17
-&device.id usb 0x0004
-+device.name Pentax Optio 330
-
- vendor.id usb 0x0a18
-+vendor.name Heidelberger Druckmaschinen AG
-
- vendor.id usb 0x0a19
-+vendor.name Hua Geng Technologies Inc.
-
- vendor.id usb 0x0a43
-+vendor.name Boca Systems Inc.
-
- vendor.id usb 0x0a4d
-+vendor.name Evolution Electronics Ltd.
-
- vendor.id usb 0x0a4d
-&device.id usb 0x008e
-+device.name MK-249C MIDI Keyboard
-
- vendor.id usb 0x0a5c
-+vendor.name Broadcom Corp.
-
- vendor.id usb 0x0a5f
-+vendor.name Zebra
-
- vendor.id usb 0x0a5f
-&device.id usb 0x0009
-+device.name LP2844 Printer
-
- vendor.id usb 0x0a6b
-+vendor.name Green House
-
- vendor.id usb 0x0a6b
-&device.id usb 0x0001
-+device.name Compact Flash R/W with MP3 player
-
- vendor.id usb 0x0abe
-+vendor.name Stereo-Link
-
- vendor.id usb 0x0abe
-&device.id usb 0x0101
-+device.name SL1200 DAC
-
- vendor.id usb 0x0aec
-+vendor.name Neodio
-
- vendor.id usb 0x0aec
-&device.id usb 0x5010
-+device.name ND5010 Card Reader
-
- vendor.id usb 0x0af9
-+vendor.name Hama, Inc.
-
- vendor.id usb 0x0af9
-&device.id usb 0x0010
-+device.name USB SightCam 100
-
- vendor.id usb 0x0b30
-+vendor.name PNY Technologies, Inc.
-
- vendor.id usb 0x0b30
-&device.id usb 0x0006
-+device.name SM Media-Shuttle Card Reader
-
- vendor.id usb 0x0b3b
-+vendor.name Tekram Technology, Co., Ltd.
-
- vendor.id usb 0x0b3b
-&device.id usb 0x1612
-+device.name AIR.Mate 2@net
-
- vendor.id usb 0x0c12
-+vendor.name Zeroplus
-
- vendor.id usb 0x0c12
-&device.id usb 0x0005
-+device.name PSX Vibration Feedback Converter
-
- vendor.id usb 0x0c70
-+vendor.name MCT Elektronikladen
-
- vendor.id usb 0x0c70
-&device.id usb 0x0000
-+device.name USB08 Development board
-
- vendor.id usb 0x0c76
-+vendor.name JMTek, LLC.
-
- vendor.id usb 0x0c76
-&device.id usb 0x0003
-+device.name USBdisk
-
- vendor.id usb 0x0c76
-&device.id usb 0x0005
-+device.name USBdisk
-
- vendor.id usb 0x0bda
-+vendor.name RealTek Semiconductor Corp.
-
- vendor.id usb 0x0bda
-&device.id usb 0x8150
-+device.name RTL8150 Fast Ethernet Adapter
-
- vendor.id usb 0x0bda
-&device.id usb 0x8151
-+device.name RTL8151 HomePNA Adapter
-
- vendor.id usb 0x0bf6
-+vendor.name Addonics Technologies, Inc.
-
- vendor.id usb 0x0bf6
-&device.id usb 0xa002
-+device.name IDE Bridge
-
- vendor.id usb 0x0c08
-+vendor.name Agate
-
- vendor.id usb 0x0c08
-&device.id usb 0x0378
-+device.name Q 16MB Storage Device
-
- vendor.id usb 0x0c0b
-+vendor.name Acomdata
-
- vendor.id usb 0x0c0b
-&device.id usb 0xb004
-+device.name MMC/SD Reader and Writer
-
- vendor.id usb 0x0c0b
-&device.id usb 0xa109
-+device.name CF/SM Reader and Writer
-
- vendor.id usb 0x0c0b
-&device.id usb 0xa10c
-+device.name SD/MS Reader and Writer
-
- vendor.id usb 0x0c5e
-+vendor.name Xytronix Research & Design
-
- vendor.id usb 0x0c86
-+vendor.name NDA Technologies, Inc.
-
- vendor.id usb 0x0d06
-+vendor.name telos EDV Systementwicklung GmbH
-
- vendor.id usb 0x0d7d
-+vendor.name Apacer
-
- vendor.id usb 0x0d7d
-&device.id usb 0x0100
-+device.name HandyDrive 64MB
-
- vendor.id usb 0x0d8e
-+vendor.name Repotec
-
- vendor.id usb 0x0d8e
-&device.id usb 0x7100
-+device.name Wireless 802.11b Ethernet
-
- vendor.id usb 0x0d96
-+vendor.name Traveler
-
- vendor.id usb 0x0d96
-&device.id usb 0x3300
-+device.name SX330z Digital Camera
-
- vendor.id usb 0x0d96
-&device.id usb 0x4100
-+device.name SX410z Digital Camera
-
- vendor.id usb 0x0dbf
-+vendor.name Pocketec
-
- vendor.id usb 0x0dcd
-+vendor.name NetworkFab Corporation
-
- vendor.id usb 0x0dcd
-&device.id usb 0x0001
-+device.name Remote Interface Adapter
-
- vendor.id usb 0x0dcd
-&device.id usb 0x0002
-+device.name High Bandwidth Codec
-
- vendor.id usb 0x0e0c
-+vendor.name Gesytec
-
- vendor.id usb 0x0e0c
-&device.id usb 0x0101
-+device.name LonUSB LonTalk Network Adapter
-
- vendor.id usb 0x0e1b
-+vendor.name Crewave
-
- vendor.id usb 0x0e1b
-&device.id usb 0x1100
-+device.name CW-1100 Wireless Network Adapter
-
- vendor.id usb 0x0e48
-+vendor.name Julia Corp., Ltd.
-
- vendor.id usb 0x0e48
-&device.id usb 0x0100
-+device.name CardPro SmartCard Reader
-
- vendor.id usb 0x0e66
-+vendor.name Hawking
-
- vendor.id usb 0x0e66
-&device.id usb 0x400c
-+device.name UF100 Ethernet [pegasus2]
-
- vendor.id usb 0x0e75
-+vendor.name TVS Electronics, Ltd.
-
- vendor.id usb 0x0ef7
-+vendor.name Tulip Computers International
-
- vendor.id usb 0x1046
-+vendor.name Winbond Electronics Corp. [hex]
-
- vendor.id usb 0x1046
-&device.id usb 0x9967
-+device.name W9967CF/W9968CF WebCam IC
-
- vendor.id usb 0x1063
-+vendor.name Motorola Electronics Taiwan Ltd. [hex]
-
- vendor.id usb 0x1063
-&device.id usb 0x1555
-+device.name MC141555 Hub
-
- vendor.id usb 0x1065
-+vendor.name CCYU Technology
-
- vendor.id usb 0x1065
-&device.id usb 0x2136
-+device.name EasyDisk ED1064
-
- vendor.id usb 0x10ac
-+vendor.name Honeywell, Inc.
-
- vendor.id usb 0x10b5
-+vendor.name PLX
-
- vendor.id usb 0x10b5
-&device.id usb 0x9060
-+device.name Test Board
-
- vendor.id usb 0x1132
-+vendor.name Toshiba Corp., Digital Media Equipment [hex]
-
- vendor.id usb 0x1132
-&device.id usb 0x4331
-+device.name PDR-M4/M5/M70 Digital Camera
-
- vendor.id usb 0x1132
-&device.id usb 0x4432
-+device.name PDR-M60 Digital Camera
-
- vendor.id usb 0x1183
-+vendor.name Compaq Computer Corp. [hex]
-
- vendor.id usb 0x1183
-&device.id usb 0x4008
-+device.name 56k FaxModem
-
- vendor.id usb 0x1183
-&device.id usb 0x19c7
-+device.name ISDN TA
-
- vendor.id usb 0x1183
-&device.id usb 0x504a
-+device.name PJB-100 Personal Jukebox
-
- vendor.id usb 0x1190
-+vendor.name Tripace
-
- vendor.id usb 0x120e
-+vendor.name Hudson Soft Co., Ltd.
-
- vendor.id usb 0x1292
-+vendor.name Innomedia
-
- vendor.id usb 0x1292
-&device.id usb 0x0258
-+device.name Creative Labs VoIP Blaster
-
- vendor.id usb 0x1293
-+vendor.name Belkin Components [hex]
-
- vendor.id usb 0x1293
-&device.id usb 0x0002
-+device.name F5U002 Parallel Port [uss720]
-
- vendor.id usb 0x1293
-&device.id usb 0x2101
-+device.name 104-key keyboard
-
- vendor.id usb 0x1342
-+vendor.name Mobility
-
- vendor.id usb 0x1342
-&device.id usb 0x0200
-+device.name EasiDock 200 Hub
-
- vendor.id usb 0x1342
-&device.id usb 0x0201
-+device.name EasiDock 200 Keyboard and Mouse Port
-
- vendor.id usb 0x1342
-&device.id usb 0x0202
-+device.name EasiDock 200 Serial Port
-
- vendor.id usb 0x1342
-&device.id usb 0x0203
-+device.name EasiDock 200 Printer Port
-
- vendor.id usb 0x13d2
-+vendor.name Shark Multimedia
-
- vendor.id usb 0x13d2
-&device.id usb 0x0400
-+device.name Pocket Ethernet [klsi]
-
- vendor.id usb 0x1484
-+vendor.name Elsa AG [hex]
-
- vendor.id usb 0x1484
-&device.id usb 0x1746
-+device.name Ecomo 19H99 Monitor
-
- vendor.id usb 0x1484
-&device.id usb 0x7616
-+device.name Elsa Hub
-
- vendor.id usb 0x15e8
-+vendor.name SohoWare
-
- vendor.id usb 0x15e8
-&device.id usb 0x9100
-+device.name NUB100 Ethernet [pegasus]
-
- vendor.id usb 0x1604
-+vendor.name Tascam
-
- vendor.id usb 0x1604
-&device.id usb 0x8000
-+device.name US-428 Audio/Midi Controller (without fw)
-
- vendor.id usb 0x1604
-&device.id usb 0x8001
-+device.name US-428 Audio/Midi Controller
-
- vendor.id usb 0x1606
-+vendor.name Umax [hex]
-
- vendor.id usb 0x1606
-&device.id usb 0x0010
-+device.name Astra 1220U
-
- vendor.id usb 0x1606
-&device.id usb 0x0030
-+device.name Astra 2000U
-
- vendor.id usb 0x1606
-&device.id usb 0x0060
-+device.name Astra 3400U
-
- vendor.id usb 0x1606
-&device.id usb 0x0230
-+device.name Astra 2200/2200SU
-
- vendor.id usb 0x1606
-&device.id usb 0x2020
-+device.name AstraCam 1000
-
- vendor.id usb 0x1608
-+vendor.name Inside Out Networks [hex]
-
- vendor.id usb 0x1608
-&device.id usb 0x0001
-+device.name EdgePort/4 Serial Port
-
- vendor.id usb 0x1608
-&device.id usb 0x1403
-+device.name MultiTech Systems MT4X56 Modem
-
- vendor.id usb 0x1645
-+vendor.name Entrega [hex]
-
- vendor.id usb 0x1645
-&device.id usb 0x0001
-+device.name 1S Serial Port
-
- vendor.id usb 0x1645
-&device.id usb 0x0002
-+device.name 2S Serial Port
-
- vendor.id usb 0x1645
-&device.id usb 0x0003
-+device.name 1S25 Serial Port
-
- vendor.id usb 0x1645
-&device.id usb 0x0004
-+device.name 4S Serial Port
-
- vendor.id usb 0x1645
-&device.id usb 0x0005
-+device.name E45 Ethernet [klsi]
-
- vendor.id usb 0x1645
-&device.id usb 0x0006
-+device.name Parallel Port
-
- vendor.id usb 0x1645
-&device.id usb 0x0007
-+device.name U1-SC25 SCSI
-
- vendor.id usb 0x1645
-&device.id usb 0x0093
-+device.name 1S9 Serial Port
-
- vendor.id usb 0x1645
-&device.id usb 0x8000
-+device.name EZ-USB
-
- vendor.id usb 0x1645
-&device.id usb 0x8002
-+device.name 2x Serial Port
-
- vendor.id usb 0x1645
-&device.id usb 0x8093
-+device.name PortGear Serial Port
-
- vendor.id usb 0x1668
-+vendor.name Actiontec Electronics, Inc. [hex]
-
- vendor.id usb 0x1668
-&device.id usb 0x0333
-+device.name Modem
-
- vendor.id usb 0x1668
-&device.id usb 0x0421
-+device.name 802.11b Wireless Adapter
-
- vendor.id usb 0x1690
-+vendor.name Askey Computer Corp. [hex]
-
- vendor.id usb 0x1690
-&device.id usb 0x0101
-+device.name Creative Modem Blaster DE5670
-
- vendor.id usb 0x1690
-&device.id usb 0x0103
-+device.name Askey 1456 VQE-R3 Modem [conexant]
-
- vendor.id usb 0x1690
-&device.id usb 0x0109
-+device.name Askey MagicXpress V.90 Pocket Modem [conexant]
-
- vendor.id usb 0x2001
-+vendor.name D-Link Corp [hex]
-
- vendor.id usb 0x2001
-&device.id usb 0x4000
-+device.name DSB-650C Ethernet [klsi]
-
- vendor.id usb 0x2001
-&device.id usb 0x4001
-+device.name DSB-650TX Ethernet [pegasus]
-
- vendor.id usb 0x2001
-&device.id usb 0x4002
-+device.name DSB-650TX Ethernet [pegasus]
-
- vendor.id usb 0x2001
-&device.id usb 0x4003
-+device.name DSB-650TX-PNA Ethernet [pegasus]
-
- vendor.id usb 0x2001
-&device.id usb 0xabc1
-+device.name DSB-650 Ethernet [pegasus]
-
- vendor.id usb 0x2222
-+vendor.name MacAlly
-
- vendor.id usb 0x2222
-&device.id usb 0x0004
-+device.name iWebKey Keyboard
-
- vendor.id usb 0x22b8
-+vendor.name Motorola PCS
-
- vendor.id usb 0x22b8
-&device.id usb 0x1005
-+device.name Ti280e GSM/GPRS Phone
-
- vendor.id usb 0x2304
-+vendor.name Pinnacle Systems, Inc. [hex]
-
- vendor.id usb 0x2304
-&device.id usb 0x0111
-+device.name Studio PCTV (PAL) Frame Grabber
-
- vendor.id usb 0x2304
-&device.id usb 0x0112
-+device.name Studio PCTV (NTSC) Frame Grabber
-
- vendor.id usb 0x2304
-&device.id usb 0x0210
-+device.name Studio PCTV (PAL) Frame Grabber
-
- vendor.id usb 0x2304
-&device.id usb 0x0212
-+device.name Studio PCTV (NTSC) Frame Grabber
-
- vendor.id usb 0x2318
-+vendor.name Shining Technologies Inc. [hex]
-
- vendor.id usb 0x2318
-&device.id usb 0x0011
-+device.name CitiDISK Jr. IDE Enclosure
-
- vendor.id usb 0x2375
-+vendor.name Digit@lway, Inc.
-
- vendor.id usb 0x2375
-&device.id usb 0x0001
-+device.name Digital Audio Player
-
- vendor.id usb 0x3125
-+vendor.name Eagletron
-
- vendor.id usb 0x3125
-&device.id usb 0x0001
-+device.name TrackerPod Camera Stand
-
- vendor.id usb 0x3504
-+vendor.name Micro Star
-
- vendor.id usb 0x3504
-&device.id usb 0xf110
-+device.name Security Key
-
- vendor.id usb 0x3538
-+vendor.name PQI
-
- vendor.id usb 0x3538
-&device.id usb 0x0001
-+device.name Travel Flash
-
- vendor.id usb 0x4242
-+vendor.name USB Design by Example
-
- vendor.id usb 0x4242
-&device.id usb 0x4201
-+device.name Buttons and Lights HID device
-
- vendor.id usb 0x4242
-&device.id usb 0x4220
-+device.name Echo 1 Camera
-
- vendor.id usb 0x544d
-+vendor.name Transmeta Corp.
-
- vendor.id usb 0x55aa
-+vendor.name OnSpec Electronic Inc.
-
- vendor.id usb 0x55aa
-&device.id usb 0x1234
-+device.name ATAPI Bridge
-
- vendor.id usb 0x55aa
-&device.id usb 0xa103
-+device.name Sandisk SDDR-55 SmartMedia Card Reader
-
- vendor.id usb 0x5543
-+vendor.name UC-Logic Technology, Corp.
-
- vendor.id usb 0x5543
-&device.id usb 0x0002
-+device.name SuperPen WP3325U Tablet
-
- vendor.id usb 0x636c
-+vendor.name CoreLogic, Inc.
-
- vendor.id usb 0x6666
-+vendor.name Prototype product Vendor ID
-
- vendor.id usb 0x6666
-&device.id usb 0x0667
-+device.name Smart Joy PSX, PS-PC Smart JoyPad
-
- vendor.id usb 0x6a75
-+vendor.name Shanghai Jujo Electronics Co., Ltd.
-
- vendor.id usb 0x8086
-+vendor.name Intel Corp.
-
- vendor.id usb 0x8086
-&device.id usb 0x0110
-+device.name Easy PC Camera
-
- vendor.id usb 0x8086
-&device.id usb 0x0431
-+device.name Intel Pro Video PC Camera
-
- vendor.id usb 0x8086
-&device.id usb 0x0510
-+device.name Digital Movie Creator
-
- vendor.id usb 0x8086
-&device.id usb 0x0630
-+device.name Pocket PC Camera
-
- vendor.id usb 0x8086
-&device.id usb 0x9890
-+device.name 82930 Test Board
-
- vendor.id usb 0x8086
-&device.id usb 0xc013
-+device.name Wireless HID Station
-
- vendor.id usb 0xc251
-+vendor.name Keil Software
-
+++ /dev/null
-# some more usb info
-
-
- vendor.id usb 0x03e8
-+vendor.name AOX Inc.
-
- vendor.id usb 0x03e9
-+vendor.name Thesys Microelectronics
-
- vendor.id usb 0x03ea
-+vendor.name Data Broadcasting Corp.
-
- vendor.id usb 0x03eb
-+vendor.name Atmel Corporation
-
- vendor.id usb 0x03ec
-+vendor.name Iwatsu America Inc.
-
- vendor.id usb 0x03ed
-+vendor.name Mitel Corporation
-
- vendor.id usb 0x03ee
-+vendor.name Mitsumi
-
- vendor.id usb 0x03f0
-+vendor.name Hewlett Packard
-
- vendor.id usb 0x03f1
-+vendor.name Genoa Technology
-
- vendor.id usb 0x03f2
-+vendor.name Oak Technology, Inc
-
- vendor.id usb 0x03f3
-+vendor.name Adaptec, Inc.
-
- vendor.id usb 0x03f4
-+vendor.name Diebold, Inc.
-
- vendor.id usb 0x03f5
-+vendor.name Siemens Electromechanical
-
- vendor.id usb 0x03f8
-+vendor.name Epson Research Center
-
- vendor.id usb 0x03f9
-+vendor.name KeyTronic Corp.
-
- vendor.id usb 0x03fb
-+vendor.name OPTi Inc.
-
- vendor.id usb 0x03fc
-+vendor.name Elitegroup Computer Systems
-
- vendor.id usb 0x03fd
-+vendor.name Xilinx Inc.
-
- vendor.id usb 0x03fe
-+vendor.name Farallon
-
- vendor.id usb 0x0400
-+vendor.name National Semiconductor
-
- vendor.id usb 0x0401
-+vendor.name National Registry Inc.
-
- vendor.id usb 0x0402
-+vendor.name Acer Labs Inc.
-
- vendor.id usb 0x0403
-+vendor.name Future Technology Devices
-
- vendor.id usb 0x0404
-+vendor.name NCR Corporation
-
- vendor.id usb 0x0405
-+vendor.name Sand Microelectronics Inc.
-
- vendor.id usb 0x0406
-+vendor.name Fujitsu-ICL Computers
-
- vendor.id usb 0x0407
-+vendor.name Fujitsu Personal Systems, Inc.
-
- vendor.id usb 0x0408
-+vendor.name Quanta Computer Inc.
-
- vendor.id usb 0x0409
-+vendor.name NEC
-
- vendor.id usb 0x040a
-+vendor.name Eastman Kodak Co.
-
- vendor.id usb 0x040b
-+vendor.name Weltrend Semiconductor
-
- vendor.id usb 0x040c
-+vendor.name VTech Computers Ltd
-
- vendor.id usb 0x040d
-+vendor.name VIA Technologies, Inc.
-
- vendor.id usb 0x040e
-+vendor.name MCCI
-
- vendor.id usb 0x040f
-+vendor.name Echo Speech Corporation
-
- vendor.id usb 0x0411
-+vendor.name Melco, Inc.
-
- vendor.id usb 0x0412
-+vendor.name Award Software International
-
- vendor.id usb 0x0413
-+vendor.name Leadtek Research Inc.
-
- vendor.id usb 0x0414
-+vendor.name Giga-Byte Technology Co., Ltd.
-
- vendor.id usb 0x0416
-+vendor.name Winbond Electronics Corp.
-
- vendor.id usb 0x0417
-+vendor.name Symbios Logic
-
- vendor.id usb 0x0418
-+vendor.name AST Research
-
- vendor.id usb 0x0419
-+vendor.name Samsung Info. Systems America Inc.
-
- vendor.id usb 0x041a
-+vendor.name Phoenix Technologies, Ltd.
-
- vendor.id usb 0x041b
-+vendor.name d'TV
-
- vendor.id usb 0x041d
-+vendor.name S3, Inc.
-
- vendor.id usb 0x041e
-+vendor.name Creative Labs
-
- vendor.id usb 0x041f
-+vendor.name LCS Telegraphics
-
- vendor.id usb 0x0420
-+vendor.name Chips and Technologies
-
- vendor.id usb 0x0421
-+vendor.name Nokia Mobile Phones
-
- vendor.id usb 0x0422
-+vendor.name ADI Systems
-
- vendor.id usb 0x0423
-+vendor.name Computer Access Technology Corp.
-
- vendor.id usb 0x0424
-+vendor.name Standard Microsystems Corp.
-
- vendor.id usb 0x0425
-+vendor.name Motorola Semiconductors HK, Ltd.
-
- vendor.id usb 0x0426
-+vendor.name Integrated Device Technology
-
- vendor.id usb 0x0427
-+vendor.name Motorola Electronics Taiwan Ltd.
-
- vendor.id usb 0x0428
-+vendor.name Gravis
-
- vendor.id usb 0x0428
-&device.id usb 0x4001
-+baseclass.id 0x10d
-+subclass.id 0x01
-
- vendor.id usb 0x0429
-+vendor.name Cirrus Logic
-
- vendor.id usb 0x042a
-+vendor.name Ericsson Austrian, AG
-
- vendor.id usb 0x042b
-+vendor.name Intel Corporation
-
- vendor.id usb 0x042c
-+vendor.name Innovative Semiconductors, Inc.
-
- vendor.id usb 0x042d
-+vendor.name Micronics
-
- vendor.id usb 0x042e
-+vendor.name Acer, Inc.
-
- vendor.id usb 0x042f
-+vendor.name Molex, Inc.
-
- vendor.id usb 0x0430
-+vendor.name Fujitsu Takamisawa America
-
- vendor.id usb 0x0431
-+vendor.name Itac Systems, Inc.
-
- vendor.id usb 0x0432
-+vendor.name Unisys Corp.
-
- vendor.id usb 0x0433
-+vendor.name Alps Electric Inc.
-
- vendor.id usb 0x0434
-+vendor.name Samsung Info. Systems America Inc.
-
- vendor.id usb 0x0435
-+vendor.name Hyundai Electronics America
-
- vendor.id usb 0x0436
-+vendor.name Taugagreining HF
-
- vendor.id usb 0x0437
-+vendor.name Framatome Connectors USA
-
- vendor.id usb 0x0438
-+vendor.name Advanced Micro Devices
-
- vendor.id usb 0x0439
-+vendor.name Voice Technologies Group
-
- vendor.id usb 0x043d
-+vendor.name Lexmark International Inc.
-
- vendor.id usb 0x043e
-+vendor.name LG Electronics USA Inc.
-
- vendor.id usb 0x043f
-+vendor.name RadiSys Corporation
-
- vendor.id usb 0x0440
-+vendor.name NANAO Corporation
-
- vendor.id usb 0x0441
-+vendor.name Winbond Systems Lab.
-
- vendor.id usb 0x0442
-+vendor.name Ericsson Inc.
-
- vendor.id usb 0x0443
-+vendor.name Gateway 2000
-
- vendor.id usb 0x0445
-+vendor.name Lucent Technologies
-
- vendor.id usb 0x0446
-+vendor.name NMB Technologies, Inc.
-
- vendor.id usb 0x0447
-+vendor.name Momentum Microsystems
-
- vendor.id usb 0x044a
-+vendor.name Shamrock Tech. Co., Ltd
-
- vendor.id usb 0x044b
-+vendor.name WSI
-
- vendor.id usb 0x044c
-+vendor.name CCL/ITRI
-
- vendor.id usb 0x044d
-+vendor.name Siemens Nixdorf
-
- vendor.id usb 0x044e
-+vendor.name Alps Electric Co.
-
- vendor.id usb 0x044f
-+vendor.name ThrustMaster, Inc.
-
- vendor.id usb 0x0450
-+vendor.name DFI Inc.
-
- vendor.id usb 0x0451
-+vendor.name Texas Instruments
-
- vendor.id usb 0x0452
-+vendor.name Mitsubishi Electronics America, Inc.
-
- vendor.id usb 0x0453
-+vendor.name CMD Technology
-
- vendor.id usb 0x0454
-+vendor.name Vobis Microcomputer AG
-
- vendor.id usb 0x0455
-+vendor.name Telematics International, Inc.
-
- vendor.id usb 0x0456
-+vendor.name Analog Devices, Inc.
-
- vendor.id usb 0x0457
-+vendor.name Silicon Integrated Systems Corp.
-
- vendor.id usb 0x0458
-+vendor.name KYE Systems Corp.
-
- vendor.id usb 0x0458
-&device.id usb 0x0002
-+device.name Genius NetMouse Pro
-
- vendor.id usb 0x0459
-+vendor.name Adobe Systems, Inc.
-
- vendor.id usb 0x045a
-+vendor.name Diamond Multimedia Systems
-
- vendor.id usb 0x045b
-+vendor.name Hitachi, Ltd
-
- vendor.id usb 0x045d
-+vendor.name Northern Telecom
-
- vendor.id usb 0x045e
-+vendor.name Microsoft
-
- vendor.id usb 0x0460
-+vendor.name Ace Cad Enterprise Co., Ltd.
-
- vendor.id usb 0x0461
-+vendor.name Primax Electronics
-
- vendor.id usb 0x0463
-+vendor.name MGE UPS Systems
-
- vendor.id usb 0x0464
-+vendor.name AMP Incorporated
-
- vendor.id usb 0x0467
-+vendor.name AT&T Paradyne
-
- vendor.id usb 0x0468
-+vendor.name Wieson Electronic Co., Ltd.
-
- vendor.id usb 0x046a
-+vendor.name Cherry Mikroschalter GmbH
-
- vendor.id usb 0x046a
-&device.id usb 0x0001
-+device.name RS 6000 M
-
- vendor.id usb 0x046b
-+vendor.name American Megatrends
-
- vendor.id usb 0x046c
-+vendor.name Toshiba
-
- vendor.id usb 0x046d
-+vendor.name Logitech Inc.
-
- vendor.id usb 0x046d
-&device.id usb 0x0840
-+baseclass.id 0x10f
-+subclass.id 0x01
-+device.name Webcam USB
-
- vendor.id usb 0x046d
-&device.id usb 0xc001
-+device.name Wheelmouse Model M-BB48
-
- vendor.id usb 0x046e
-+vendor.name Behavior Tech. Computer
-
- vendor.id usb 0x046f
-+vendor.name Crystal Semiconductor
-
- vendor.id usb 0x0471
-+vendor.name Philips
-
- vendor.id usb 0x0472
-+vendor.name Sun Microsystems
-
- vendor.id usb 0x0473
-+vendor.name Sanyo Information Business Co., Ltd.
-
- vendor.id usb 0x0474
-+vendor.name Sanyo Electric Co. Ltd.
-
- vendor.id usb 0x0475
-+vendor.name Relisys/TECO Information System
-
- vendor.id usb 0x0476
-+vendor.name AESP
-
- vendor.id usb 0x0477
-+vendor.name Seagate Technology
-
- vendor.id usb 0x0478
-+vendor.name Connectix Corp.
-
- vendor.id usb 0x0479
-+vendor.name Advanced Peripheral Laboratories
-
- vendor.id usb 0x047a
-+vendor.name USAR Systems
-
- vendor.id usb 0x047b
-+vendor.name Silitek Corp.
-
- vendor.id usb 0x047c
-+vendor.name Dell Computer Corp.
-
- vendor.id usb 0x047d
-+vendor.name Kensington
-
- vendor.id usb 0x047d
-&device.id usb 0x4008
-+baseclass.id 0x10d
-+subclass.id 0x01
-
- vendor.id usb 0x047e
-+vendor.name Lucent Microelectronics Technologies
-
- vendor.id usb 0x047f
-+vendor.name Plantronics, Inc.
-
- vendor.id usb 0x0480
-+vendor.name Toshiba America Info. Systems, Inc.
-
- vendor.id usb 0x0481
-+vendor.name Zenith Data Systems
-
- vendor.id usb 0x0482
-+vendor.name Kyocera Electronics, Inc.
-
- vendor.id usb 0x0483
-+vendor.name SGS Thomson Microelectronics
-
- vendor.id usb 0x0484
-+vendor.name Specialix
-
- vendor.id usb 0x0485
-+vendor.name Nokia Monitors
-
- vendor.id usb 0x0486
-+vendor.name ASUS Computers Inc.
-
- vendor.id usb 0x0487
-+vendor.name Stewart Connector
-
- vendor.id usb 0x0488
-+vendor.name Cirque Corp.
-
- vendor.id usb 0x0489
-+vendor.name Foxconn / Hon Hai
-
- vendor.id usb 0x048a
-+vendor.name S-MOS Systems, Inc.
-
- vendor.id usb 0x048c
-+vendor.name Alps Electric Ireland Ltd.
-
- vendor.id usb 0x048d
-+vendor.name Integrated Technology Express
-
- vendor.id usb 0x048f
-+vendor.name Eicon Tech.
-
- vendor.id usb 0x0490
-+vendor.name United Microelectronics Corp.
-
- vendor.id usb 0x0491
-+vendor.name Capetronic
-
- vendor.id usb 0x0492
-+vendor.name Samsung SemiConductor, Inc.
-
- vendor.id usb 0x0493
-+vendor.name MAG Technology Co., Ltd.
-
- vendor.id usb 0x0495
-+vendor.name ESS Technology, Inc.
-
- vendor.id usb 0x0496
-+vendor.name Micron Electronics
-
- vendor.id usb 0x0497
-+vendor.name Smile International
-
- vendor.id usb 0x0498
-+vendor.name Capetronic (Kaohsiung) Corp.
-
- vendor.id usb 0x0499
-+vendor.name Yamaha Corporation
-
- vendor.id usb 0x049a
-+vendor.name Gandalf Technologies Ltd.
-
- vendor.id usb 0x049b
-+vendor.name System Connection
-
- vendor.id usb 0x049c
-+vendor.name Acer Advanced Labs, Inc.
-
- vendor.id usb 0x049d
-+vendor.name VLSI Technology
-
- vendor.id usb 0x049f
-+vendor.name Compaq Computers
-
- vendor.id usb 0x04a0
-+vendor.name Digital Equipment Corp.
-
- vendor.id usb 0x04a1
-+vendor.name SystemSoft Corporation
-
- vendor.id usb 0x04a2
-+vendor.name FirePower Systems
-
- vendor.id usb 0x04a3
-+vendor.name Trident Microsystems Inc.
-
- vendor.id usb 0x04a4
-+vendor.name Hitachi, Ltd.
-
- vendor.id usb 0x04a5
-+vendor.name Acer Peripheral Inc.
-
- vendor.id usb 0x04a6
-+vendor.name Nokia Display Products (Salcomp Oy)
-
- vendor.id usb 0x04a7
-+vendor.name Visioneer
-
- vendor.id usb 0x04a8
-+vendor.name Multivideo Labs, Inc.
-
- vendor.id usb 0x04a9
-+vendor.name Canon Inc.
-
- vendor.id usb 0x04aa
-+vendor.name DaeWoo Telecom, Ltd.
-
- vendor.id usb 0x04ab
-+vendor.name Chromatic Research
-
- vendor.id usb 0x04ac
-+vendor.name Micro Audiometrics Corp.
-
- vendor.id usb 0x04ad
-+vendor.name Dooin Electronics
-
- vendor.id usb 0x04af
-+vendor.name Winnov L.P.
-
- vendor.id usb 0x04b0
-+vendor.name Nikon Corporation
-
- vendor.id usb 0x04b1
-+vendor.name Pan International
-
- vendor.id usb 0x04b3
-+vendor.name IBM Corp.
-
- vendor.id usb 0x04b4
-+vendor.name Cypress Semiconductor
-
- vendor.id usb 0x04b5
-+vendor.name ROHM LSI Systems, Inc.
-
- vendor.id usb 0x04b6
-+vendor.name Hint Corporation
-
- vendor.id usb 0x04b7
-+vendor.name Compal Electronics, Inc.
-
- vendor.id usb 0x04b8
-+vendor.name Seiko Epson Corp.
-
- vendor.id usb 0x04b9
-+vendor.name Rainbow Technologies, Inc.
-
- vendor.id usb 0x04ba
-+vendor.name Toucan Systems Ltd.
-
- vendor.id usb 0x04bb
-+vendor.name I-O Data Device, Inc.
-
- vendor.id usb 0x04bd
-+vendor.name Toshiba Electronics Taiwan Corp.
-
- vendor.id usb 0x04be
-+vendor.name Telia Research AB
-
- vendor.id usb 0x04bf
-+vendor.name TDK USA Corporation
-
- vendor.id usb 0x04c1
-+vendor.name U.S. Robotics
-
- vendor.id usb 0x04c2
-+vendor.name Methode Electronics Far East Pte Ltd.
-
- vendor.id usb 0x04c3
-+vendor.name Maxi Switch, Inc.
-
- vendor.id usb 0x04c4
-+vendor.name Lockheed Martin Energy Research
-
- vendor.id usb 0x04c5
-+vendor.name Fujitsu Limited
-
- vendor.id usb 0x04c6
-+vendor.name Toshiba America Electronic Components
-
- vendor.id usb 0x04c7
-+vendor.name Micro Macro Technologies
-
- vendor.id usb 0x04c8
-+vendor.name Konica Corporation
-
- vendor.id usb 0x04ca
-+vendor.name Lite-On Technology Corp.
-
- vendor.id usb 0x04cb
-+vendor.name Fuji Photo Film Co., Ltd.
-
- vendor.id usb 0x04cc
-+vendor.name Philips Semiconductors
-
- vendor.id usb 0x04cd
-+vendor.name Tatung Co. Of America
-
- vendor.id usb 0x04ce
-+vendor.name ScanLogic Corporation
-
- vendor.id usb 0x04cf
-+vendor.name Myson Technology Inc.
-
- vendor.id usb 0x04d0
-+vendor.name Digi International
-
- vendor.id usb 0x04d1
-+vendor.name ITT Canon
-
- vendor.id usb 0x04d2
-+vendor.name Altec Lansing Technologies
-
- vendor.id usb 0x04d3
-+vendor.name VidUS, Inc.
-
- vendor.id usb 0x04d4
-+vendor.name LSI Logic Corporation
-
- vendor.id usb 0x04d5
-+vendor.name Forte Technologies, Inc.
-
- vendor.id usb 0x04d6
-+vendor.name CAE Technology
-
- vendor.id usb 0x04d7
-+vendor.name Oki Semiconductor
-
- vendor.id usb 0x04d8
-+vendor.name Micro Chip Technology, Inc.
-
- vendor.id usb 0x04d9
-+vendor.name Holtek Microelectronics Inc.
-
- vendor.id usb 0x04da
-+vendor.name Panasonic (Matsushita)
-
- vendor.id usb 0x04db
-+vendor.name Hypertec Pty Ltd.
-
- vendor.id usb 0x04dc
-+vendor.name Huan Hsin C., SDN.BHD
-
- vendor.id usb 0x04dd
-+vendor.name Sharp Corporation
-
- vendor.id usb 0x04de
-+vendor.name MindShare, Inc.
-
- vendor.id usb 0x04df
-+vendor.name Interlink Electronics
-
- vendor.id usb 0x04e1
-+vendor.name Iiyama North America Inc.
-
- vendor.id usb 0x04e2
-+vendor.name Exar Corporation
-
- vendor.id usb 0x04e3
-+vendor.name Zilog
-
- vendor.id usb 0x04e4
-+vendor.name ACC Microelectronics
-
- vendor.id usb 0x04e5
-+vendor.name Promise Technology
-
- vendor.id usb 0x04e6
-+vendor.name Shuttle Technology
-
- vendor.id usb 0x04e7
-+vendor.name ELO TouchSystems
-
- vendor.id usb 0x04e8
-+vendor.name Samsung Electronics Co., Ltd.
-
- vendor.id usb 0x04e9
-+vendor.name PC-Tel Inc.
-
- vendor.id usb 0x04ea
-+vendor.name Brooktree Corporation
-
- vendor.id usb 0x04eb
-+vendor.name Northstar Systems, Inc
-
- vendor.id usb 0x04ec
-+vendor.name Tokyo Electron Limited
-
- vendor.id usb 0x04ed
-+vendor.name Annabooks
-
- vendor.id usb 0x04ef
-+vendor.name Pacific Electronic International, Inc.
-
- vendor.id usb 0x04f0
-+vendor.name Daewoo Electronics Co., Ltd.
-
- vendor.id usb 0x04f1
-+vendor.name Victor Company of Japan
-
- vendor.id usb 0x04f2
-+vendor.name Chicony Electronics Co., Ltd.
-
- vendor.id usb 0x04f3
-+vendor.name Elan Microelectronics Corportation
-
- vendor.id usb 0x04f4
-+vendor.name Harting Elektronik Inc.
-
- vendor.id usb 0x04f5
-+vendor.name Fujitsu-ICL Systems, Inc.
-
- vendor.id usb 0x04f6
-+vendor.name Norand Corporation
-
- vendor.id usb 0x04f7
-+vendor.name Newnex Technology Corp.
-
- vendor.id usb 0x04f8
-+vendor.name FuturePlus Systems
-
- vendor.id usb 0x04f9
-+vendor.name Brother International Corp.
-
- vendor.id usb 0x04fa
-+vendor.name Dallas Semiconductor
-
- vendor.id usb 0x04fb
-+vendor.name Biostar Microtech Int'l Corp.
-
- vendor.id usb 0x04fc
-+vendor.name Sunplus Technology Co.
-
- vendor.id usb 0x04fd
-+vendor.name Soliton Systems, K.K.
-
- vendor.id usb 0x04fe
-+vendor.name PFU Limited
-
- vendor.id usb 0x04ff
-+vendor.name E-CMOS Corp.
-
- vendor.id usb 0x0500
-+vendor.name Siam United Hi-Tech
-
- vendor.id usb 0x0501
-+vendor.name DDK Electronics, Inc.
-
- vendor.id usb 0x0502
-+vendor.name Acer, Inc.
-
- vendor.id usb 0x0503
-+vendor.name Hitachi America Ltd.
-
- vendor.id usb 0x0504
-+vendor.name Hayes Microcomputer Products
-
- vendor.id usb 0x0506
-+vendor.name 3Com Corporation
-
- vendor.id usb 0x0507
-+vendor.name Hosiden Corporation
-
- vendor.id usb 0x0508
-+vendor.name Clarion Co., Ltd.
-
- vendor.id usb 0x0509
-+vendor.name Aztech Systems Ltd
-
- vendor.id usb 0x050a
-+vendor.name Cinch Connectors
-
- vendor.id usb 0x050b
-+vendor.name Cable System International
-
- vendor.id usb 0x050c
-+vendor.name InnoMedia, Inc.
-
- vendor.id usb 0x050d
-+vendor.name Belkin Components
-
- vendor.id usb 0x050e
-+vendor.name Neon Technology, Inc.
-
- vendor.id usb 0x050f
-+vendor.name Kawatsu Semiconductor, Inc.
-
- vendor.id usb 0x0510
-+vendor.name Sejin Electron Inc.
-
- vendor.id usb 0x0511
-+vendor.name N'ABLE Technologies, Inc (Data Book)
-
- vendor.id usb 0x0512
-+vendor.name Hualon Microelectronics Corp.
-
- vendor.id usb 0x0513
-+vendor.name digital-X, Inc.
-
- vendor.id usb 0x0514
-+vendor.name Berg Electronics, Inc.
-
- vendor.id usb 0x0515
-+vendor.name ACTC
-
- vendor.id usb 0x0516
-+vendor.name Longwell Electronics
-
- vendor.id usb 0x0517
-+vendor.name Butterfly Communications
-
- vendor.id usb 0x0518
-+vendor.name EzKEY Corp.
-
- vendor.id usb 0x0519
-+vendor.name Star Micronics America, Inc.
-
- vendor.id usb 0x051a
-+vendor.name WYSE Technology
-
- vendor.id usb 0x051b
-+vendor.name Silicon Graphics
-
- vendor.id usb 0x051c
-+vendor.name Holco Enterprise Co., Ltd./Shuttle Computer
-
- vendor.id usb 0x051d
-+vendor.name American Power Conversion
-
- vendor.id usb 0x051e
-+vendor.name Scientific Atlanta
-
- vendor.id usb 0x051f
-+vendor.name Elite Electronics, Inc.
-
- vendor.id usb 0x0520
-+vendor.name Taiwan Semiconductor Manufacturing Co.
-
- vendor.id usb 0x0521
-+vendor.name Airborn Connectors
-
- vendor.id usb 0x0522
-+vendor.name Advanced Connectek USA Inc.
-
- vendor.id usb 0x0523
-+vendor.name ATEN GMBH
-
- vendor.id usb 0x0524
-+vendor.name Micro Devices Technology
-
- vendor.id usb 0x0525
-+vendor.name Net Chip Technology, Inc.
-
- vendor.id usb 0x0526
-+vendor.name Temic Matra.mhs
-
- vendor.id usb 0x0527
-+vendor.name ALTRA
-
- vendor.id usb 0x0528
-+vendor.name ATI Technologies, Inc.
-
- vendor.id usb 0x0529
-+vendor.name Fast Security AG
-
- vendor.id usb 0x052a
-+vendor.name Crescent Heart Software
-
- vendor.id usb 0x052b
-+vendor.name Tekom Development
-
- vendor.id usb 0x052c
-+vendor.name Canon Information System
-
- vendor.id usb 0x052d
-+vendor.name Avid Electronics Corp.
-
- vendor.id usb 0x052e
-+vendor.name Standard Microsystems Corp.
-
- vendor.id usb 0x052f
-+vendor.name Unicore Software, Inc.
-
- vendor.id usb 0x0530
-+vendor.name American Microsystems Inc.
-
- vendor.id usb 0x0531
-+vendor.name Wacom Technology Corp.
-
- vendor.id usb 0x0532
-+vendor.name Systech Corporation
-
- vendor.id usb 0x0533
-+vendor.name Alcatel Mobile Phones
-
- vendor.id usb 0x0534
-+vendor.name Motorola
-
- vendor.id usb 0x0535
-+vendor.name LIH TZU Electric Co., Ltd.
-
- vendor.id usb 0x0536
-+vendor.name Welch Allyn Inc.
-
- vendor.id usb 0x0537
-+vendor.name Inventec Corporation
-
- vendor.id usb 0x0538
-+vendor.name Santa Cruz Operation
-
- vendor.id usb 0x0539
-+vendor.name Shyh Shiun Terminals Co. LTD
-
- vendor.id usb 0x053a
-+vendor.name Preh Werke Gmbh & Co. KG
-
- vendor.id usb 0x053b
-+vendor.name Global Village Communication
-
- vendor.id usb 0x053c
-+vendor.name Institut of Microelectronic & Mechatronic Systems
-
- vendor.id usb 0x053d
-+vendor.name Silicon Architect
-
- vendor.id usb 0x053e
-+vendor.name Electronic Accessory Specialists Int.
-
- vendor.id usb 0x053f
-+vendor.name Synopsys
-
- vendor.id usb 0x0540
-+vendor.name Universal Access
-
- vendor.id usb 0x0541
-+vendor.name Sirf Technology, Inc
-
- vendor.id usb 0x0543
-+vendor.name View Sonic Corporation
-
- vendor.id usb 0x0544
-+vendor.name Cristie Electronics Ltd.
-
- vendor.id usb 0x0545
-+vendor.name Xirlink, Inc.
-
- vendor.id usb 0x0546
-+vendor.name Polaroid Corporation
-
- vendor.id usb 0x0547
-+vendor.name Anchor Chips Inc.
-
- vendor.id usb 0x0548
-+vendor.name Tyan Computer Corp.
-
- vendor.id usb 0x0549
-+vendor.name Pixera Corporation
-
- vendor.id usb 0x054a
-+vendor.name Fujitsu Microelectronics, Inc.,
-
- vendor.id usb 0x054b
-+vendor.name New Media Corporation
-
- vendor.id usb 0x054c
-+vendor.name Sony Corporation
-
- vendor.id usb 0x054d
-+vendor.name Try Corporation
-
- vendor.id usb 0x054e
-+vendor.name Proside Corporation
-
- vendor.id usb 0x054f
-+vendor.name WYSE Technology Taiwan
-
- vendor.id usb 0x0550
-+vendor.name Fuji Xerox Co., Ltd.
-
- vendor.id usb 0x0551
-+vendor.name CompuTrend Systems, Inc.
-
- vendor.id usb 0x0552
-+vendor.name Philips Monitors
-
- vendor.id usb 0x0553
-+vendor.name VLSI Vision Ltd.
-
- vendor.id usb 0x0554
-+vendor.name Dictaphone Corp.
-
- vendor.id usb 0x0555
-+vendor.name ANAM S&T Co., Ltd.
-
- vendor.id usb 0x0556
-+vendor.name Asahi Kasei Microsystems Co., Ltd
-
- vendor.id usb 0x0557
-+vendor.name ATEN International Co. ltd.
-
- vendor.id usb 0x0558
-+vendor.name Truevision, Inc.
-
- vendor.id usb 0x0559
-+vendor.name Cadence Design Systems
-
- vendor.id usb 0x055a
-+vendor.name Kenwood USA
-
- vendor.id usb 0x055b
-+vendor.name KnowledgeTek, Inc.
-
- vendor.id usb 0x055c
-+vendor.name Proton Electronic Ind.
-
- vendor.id usb 0x055d
-+vendor.name Samsung Electro-Mechanics Co.
-
- vendor.id usb 0x055e
-+vendor.name CTX Opto-Electronics Corp.
-
- vendor.id usb 0x055f
-+vendor.name Mustek Systems Inc.
-
- vendor.id usb 0x0560
-+vendor.name Interface Co., Ltd.
-
- vendor.id usb 0x0561
-+vendor.name Oasis Design, Inc.
-
- vendor.id usb 0x0562
-+vendor.name Telex Communications Inc.
-
- vendor.id usb 0x0563
-+vendor.name Immersion Corporation
-
- vendor.id usb 0x0564
-+vendor.name Chinon Industries, Inc.
-
- vendor.id usb 0x0565
-+vendor.name Peracom Networks, Inc.
-
- vendor.id usb 0x0567
-+vendor.name Xyratex Int'l Ltd.
-
- vendor.id usb 0x0568
-+vendor.name Quartz Ingenierie
-
- vendor.id usb 0x0569
-+vendor.name SegaSoft
-
- vendor.id usb 0x056a
-+vendor.name WACOM Co., Ltd.
-
- vendor.id usb 0x056b
-+vendor.name Decicon Incorporated
-
- vendor.id usb 0x056c
-+vendor.name e-TEK Labs
-
- vendor.id usb 0x056e
-+vendor.name Elecom Co., Ltd.
-
- vendor.id usb 0x056f
-+vendor.name Korea Data Systems Co., Ltd.
-
- vendor.id usb 0x0570
-+vendor.name Epson America
-
- vendor.id usb 0x0571
-+vendor.name Interex, Inc.
-
- vendor.id usb 0x0572
-+vendor.name EEH Datalink Gmbh
-
- vendor.id usb 0x0573
-+vendor.name Nogatech Ltd.
-
- vendor.id usb 0x0574
-+vendor.name City University of Hong Kong
-
- vendor.id usb 0x0575
-+vendor.name Swets & Zeitlinger BV
-
- vendor.id usb 0x0576
-+vendor.name BAFO/Quality Computer Accessories
-
- vendor.id usb 0x0577
-+vendor.name ELSA
-
- vendor.id usb 0x0578
-+vendor.name Intrinsix Corp.
-
- vendor.id usb 0x0579
-+vendor.name GVC Corporation
-
- vendor.id usb 0x057a
-+vendor.name Samsung Electronics America
-
- vendor.id usb 0x057b
-+vendor.name Y-E Data, Inc.
-
- vendor.id usb 0x057c
-+vendor.name AVM Gmbh
-
- vendor.id usb 0x057d
-+vendor.name Shark Multimedia Inc.
-
- vendor.id usb 0x057e
-+vendor.name Nintendo Co.,
-
- vendor.id usb 0x057f
-+vendor.name Quickshot Technology Inc.
-
- vendor.id usb 0x0580
-+vendor.name Denron Inc.
-
- vendor.id usb 0x0581
-+vendor.name Racal Data Group
-
- vendor.id usb 0x0582
-+vendor.name Roland Corporation
-
- vendor.id usb 0x0583
-+vendor.name Padix Co. Ltd.
-
- vendor.id usb 0x0584
-+vendor.name RATOC System Inc.
-
- vendor.id usb 0x0585
-+vendor.name FlashPoint Technology, Inc.
-
- vendor.id usb 0x0586
-+vendor.name ZyXEL Communications Corp.
-
- vendor.id usb 0x0587
-+vendor.name America Kotobuki Electronics Ind.
-
- vendor.id usb 0x0588
-+vendor.name Sapien Design
-
- vendor.id usb 0x0589
-+vendor.name Victron
-
- vendor.id usb 0x058a
-+vendor.name Nohau Corporation
-
- vendor.id usb 0x058b
-+vendor.name Siemens Semiconductor
-
- vendor.id usb 0x058c
-+vendor.name In Focus Systems
-
- vendor.id usb 0x058d
-+vendor.name Micrel Semiconductor
-
- vendor.id usb 0x058e
-+vendor.name Tripath Technology Inc.
-
- vendor.id usb 0x058f
-+vendor.name Alcor Micro, Inc.
-
- vendor.id usb 0x0590
-+vendor.name OMRON Corporation
-
- vendor.id usb 0x0591
-+vendor.name Questra Consulting
-
- vendor.id usb 0x0592
-+vendor.name Exide Electronics
-
- vendor.id usb 0x0593
-+vendor.name Incite
-
- vendor.id usb 0x0594
-+vendor.name Princeton Graphic Systems
-
- vendor.id usb 0x0595
-+vendor.name Zoran Microelectronics Ltd.
-
- vendor.id usb 0x0596
-+vendor.name Microtouch Systems
-
- vendor.id usb 0x0597
-+vendor.name Trisignal Communications
-
- vendor.id usb 0x0598
-+vendor.name Nigata Canotec Co., Inc.
-
- vendor.id usb 0x0599
-+vendor.name Brilliance Semiconductor Inc.
-
- vendor.id usb 0x059a
-+vendor.name Spectrum Signal Processing Inc.
-
- vendor.id usb 0x059b
-+vendor.name Iomega Corporation
-
- vendor.id usb 0x059b
-&device.id usb 0x0030
-+device.name USB Zip 250
-
- vendor.id usb 0x059c
-+vendor.name A-Trend Technology Co., Ltd.
-
- vendor.id usb 0x059d
-+vendor.name Advanced Input Devices
-
- vendor.id usb 0x059e
-+vendor.name Intelligent Instrumentation
-
- vendor.id usb 0x059f
-+vendor.name Electronique D2
-
- vendor.id usb 0x05a0
-+vendor.name Vetronix Corporation
-
- vendor.id usb 0x05a1
-+vendor.name USC Corporation
-
- vendor.id usb 0x05a2
-+vendor.name Fuji Film Microdevices Co. Ltd.
-
- vendor.id usb 0x05a3
-+vendor.name VAutomation Inc.
-
- vendor.id usb 0x05a4
-+vendor.name Ortek Technology, Inc.
-
- vendor.id usb 0x05a5
-+vendor.name Sampo Technology Corp.
-
- vendor.id usb 0x05a6
-+vendor.name Cisco Systems
-
- vendor.id usb 0x05a7
-+vendor.name Bose Corporation
-
- vendor.id usb 0x05a8
-+vendor.name Spacetec IMC Corporation
-
- vendor.id usb 0x05a9
-+vendor.name OmniVision Technologies, Inc.
-
- vendor.id usb 0x05aa
-+vendor.name Utilux South China Ltd.
-
- vendor.id usb 0x05ab
-+vendor.name In-System Design
-
- vendor.id usb 0x05ac
-+vendor.name Apple Computer, Inc.
-
- vendor.id usb 0x05ac
-&device.id usb 0x0202
-+device.name Apple USB Keyboard
-
- vendor.id usb 0x05ac
-&device.id usb 0x0301
-+device.name Apple USB Mouse
-
- vendor.id usb 0x05ac
-&device.id usb 0x1001
-+device.name Apple USB Hub
-
- vendor.id usb 0x05ad
-+vendor.name Y.C.Cable U.S.A., Inc
-
- vendor.id usb 0x05ae
-+vendor.name Synopsys, Inc.
-
- vendor.id usb 0x05af
-+vendor.name Jing-Mold Enterprise Co., Ltd.
-
- vendor.id usb 0x05b0
-+vendor.name Fountain Technologies, Inc
-
- vendor.id usb 0x05b1
-+vendor.name First International Computer, Inc
-
- vendor.id usb 0x05b4
-+vendor.name LG Semicon Co., Ltd.
-
- vendor.id usb 0x05b5
-+vendor.name Dialogic Corp
-
- vendor.id usb 0x05b6
-+vendor.name Proxima Corporation
-
- vendor.id usb 0x05b7
-+vendor.name Medianix Semiconductor, Inc.
-
- vendor.id usb 0x05b9
-+vendor.name Philips Research Laboratories
-
- vendor.id usb 0x05ba
-+vendor.name Digital Persona
-
- vendor.id usb 0x05be
-+vendor.name Raychem Corporation
-
- vendor.id usb 0x05bf
-+vendor.name S & S Research
-
- vendor.id usb 0x05c1
-+vendor.name Kawasaki Steel
-
- vendor.id usb 0x05c2
-+vendor.name Mediaphonics S.A.
-
- vendor.id usb 0x05c5
-+vendor.name Central Data Corporation
-
- vendor.id usb 0x05c6
-+vendor.name Qualcomm, Inc
-
- vendor.id usb 0x05c7
-+vendor.name Qtronix Corp
-
- vendor.id usb 0x05c8
-+vendor.name Cheng Uei Precision Industry Co., Ltd
-
- vendor.id usb 0x05c9
-+vendor.name Semtech Corporation
-
- vendor.id usb 0x05ca
-+vendor.name Ricoh Company Ltd.
-
- vendor.id usb 0x05cb
-+vendor.name Powerchip Semiconductor Co.
-
- vendor.id usb 0x05cc
-+vendor.name ELSA Gmbh
-
- vendor.id usb 0x05cd
-+vendor.name Silicom LTD.
-
- vendor.id usb 0x05ce
-+vendor.name SICAN Gmbh
-
- vendor.id usb 0x05cf
-+vendor.name Sung Forn Co. LTD.
-
- vendor.id usb 0x05d0
-+vendor.name Lunar Corporation
-
- vendor.id usb 0x05e3
-&device.id usb 0x000b
-+device.name Razer Boomslang USB Mouse
-
- vendor.id usb 0x0698
-+vendor.name Chuntex (CTX)
-
- vendor.id usb 0x0c4b
-+vendor.name Reiner SCT
-
- vendor.id usb 0x0c4b
-&device.id usb 0x0100
-+baseclass.id 0x10e
-+subclass.id 0x00
-+device.name Cyberjack USB
-
- vendor.id usb 0x0ef7
-+vendor.name Tulip Computers International
-
- vendor.id usb 0x1606
-+vendor.name UMAX Data Systems, Inc.
-
- vendor.id usb 0x1606
-&device.id usb 0x0010
-+device.name Astra 1220U
-
- vendor.id usb 0x1606
-&device.id usb 0x0030
-+device.name Astra 2000U
-
- vendor.id usb 0x1606
-&device.id usb 0x0130
-+device.name Astra 2100U
-
- vendor.id usb 0x1606
-&device.id usb 0x0230
-+device.name Astra 2200 (USB)
-
- vendor.id usb 0x1606
-&device.id usb 0x1030
-+device.name Astra 4000U
-
- vendor.id usb 0x8086
-+vendor.name Intel Corporation
-
- vendor.id usb 0xc251
-+vendor.name Keil Software
-
+++ /dev/null
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x3150
-+device.name Radeon Mobility X600 (M24) 3150 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x3154
-+device.name FireGL M24 GL 3154 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x3e50
-+device.name Radeon X600 (RV380) 3E50 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x3e50
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x0450
-+subdevice.name Radeon X600 Pro
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x3e54
-+device.name FireGL V3200 (RV380) 3E54 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4136
-+device.name RS100 4136
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4137
-+device.name RS100 4137
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4144
-+device.name R300 AD
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4145
-+device.name E300 AE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4146
-+device.name R300 AF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4147
-+device.name R300 AG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4148
-+device.name R350 AH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4149
-+device.name R350 AI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414a
-+device.name R350 AJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414b
-+device.name R350 AK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-+device.name RV350 AP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4151
-+device.name RV350 AQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-+device.name RV350 AR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4153
-+device.name RV350 AS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4154
-+device.name RV350 AT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4155
-+device.name RV350 AU
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4156
-+device.name RV350 AV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4157
-+device.name RV350 AW
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4237
-+device.name RS250 4237
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4242
-+device.name R200 BB
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4243
-+device.name R200 BC
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4336
-+device.name RS100 4336
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-+device.name RS200 4337
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4437
-+device.name RS250 4437
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-+device.name 3D Rage Pro AGP 1X/2X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4744
-+device.name 3D Rage Pro AGP 1X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-+device.name Mach64 GI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474c
-+device.name Rage XC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-+device.name Rage XL AGP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-+device.name Rage XC AGP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-+device.name Rage XL
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-+device.name 3D Rage Pro 215GP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4751
-+device.name 3D Rage Pro 215GQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-+device.name Mach64 GR
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4753
-+device.name Mach64 GS
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4755
-+device.name 3D Rage II+ 215GTB [Mach64 GTB]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-+device.name 3D Rage IIC AGP
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4758
-+device.name 210888GX [Mach64 GX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4759
-+device.name 3D Rage IIC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-+device.name Mach64 GZ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-+device.name RV250 If
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9000
-
- vendor.id pci 0x1002
-&device.id pci 0x4967
-+device.name RV250 Ig
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4a48
-+device.name R420 JH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a49
-+device.name R420 JI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4a
-+device.name R420 JJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4b
-+device.name R420 JK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4c
-+device.name R420 JL
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4d
-+device.name R420 JM
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4e
-+device.name R420 JN
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a50
-+device.name R420 JP
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-+device.name Mach64 LB
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name 3D Rage LT Pro AGP-133
-+driver.xfree 4|ati
-+driver.xfree.config Option "dpms" "off"
-
- vendor.id pci 0x1002
-&device.id pci 0x4c44
-+device.name 3D Rage LT Pro AGP-66
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c45
-+device.name Rage 128 Mobility LE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-+device.name Mobility M3 AGP 2x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c47
-+device.name 3D Rage LT-G 215LG
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-+device.name Mach64 LI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-+device.name 3D Rage P/M Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00bb
-+subdevice.name Mach64LM/Dell
-+driver.xfree 4|fbdev
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4e
-+device.name 3D Rage L Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-+device.name 3D Rage LT Pro
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c51
-+device.name Mach64 LQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name 3D Rage P/M Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c53
-+device.name 3D Rage L Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-+device.name Radeon LW
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c58
-+device.name Radeon LX
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-+device.name Radeon LY
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c5a
-+device.name Radeon LZ
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c64
-+device.name RV250 Ld
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c66
-+device.name RV250 Lf
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c67
-+device.name RV250 Lg
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4d46
-+device.name Rage 128 Mobility MF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4d4c
-+device.name Rage 128 Mobility ML
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-+device.name R300 ND
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9700
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-+device.name R300 NE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e46
-+device.name R300 NF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-+device.name R300 NG
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL X1
-
- vendor.id pci 0x1002
-&device.id pci 0x4e48
-+device.name R350 NH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e49
-+device.name R350 NI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4a
-+device.name R360 NJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4b
-+device.name R350 NK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-+device.name RV350 NP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e51
-+device.name RV350 NQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e52
-+device.name RV350 NR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e53
-+device.name RV350 NS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e54
-+device.name RV350 NT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e56
-+device.name RV350 NV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5041
-+device.name Rage 128 PA
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5042
-+device.name Rage 128 PB
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5043
-+device.name Rage 128 PC
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-+device.name Rage 128 PD
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5045
-+device.name Rage 128 PE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-+device.name Rage 128 PF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5047
-+device.name Rage 128 PG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5048
-+device.name Rage 128 PH
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5049
-+device.name Rage 128 PI
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504a
-+device.name Rage 128 PJ
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504b
-+device.name Rage 128 PK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504c
-+device.name Rage 128 PL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504d
-+device.name Rage 128 PM
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504e
-+device.name Rage 128 PN
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504f
-+device.name Rage 128 PO
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-+device.name Rage 128 PP
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5051
-+device.name Rage 128 PQ
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5052
-+device.name Rage 128 PR
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5053
-+device.name Rage 128 PS
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5054
-+device.name Rage 128 PT
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5055
-+device.name Rage 128 PU
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5056
-+device.name Rage 128 PV
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5057
-+device.name Rage 128 PW
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5058
-+device.name Rage 128 PX
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-+device.name Radeon QD
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5145
-+device.name Radeon QE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5146
-+device.name Radeon QF
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5147
-+device.name Radeon QG
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-+device.name fgl8x00
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0152
-+subdevice.name FireGL 8800
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL 8700
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-+device.name R200 QL
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x514d
-+device.name Radeon 9100 QM
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-+device.name RV200 QW
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 7500
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7146
-+subdevice.name Radeon 7500-7146
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7161
-+subdevice.name Radeon 7500 LE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5158
-+device.name RV200 QX
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-+device.name Radeon VE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x515a
-+device.name Radeon QZ
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x515e
-+device.name ES1000 (1002:515E)
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5969
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-+device.name Rage 128 RE
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-+device.name Rage 128 RF
-+driver.xfree 4|r128|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5247
-+device.name Rage 128 RG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x524b
-+device.name Rage 128 RK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-+device.name Rage 128 RL
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5345
-+device.name Rage 128 SE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-+device.name Rage 128 SF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5347
-+device.name Rage 128 SG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5348
-+device.name Rage 128 4x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534b
-+device.name Rage 128 SK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534c
-+device.name Rage 128 SL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-+device.name Rage 128 SM
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534e
-+device.name Rage 128 SN
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-+device.name Rage 128 Ultra TF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x544c
-+device.name Rage128 TL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-+device.name Rage 128 Pro TR (AGP)
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5453
-+device.name Rage 128 TS
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5454
-+device.name Rage 128 TT
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5455
-+device.name Rage 128 TU
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5460
-+device.name Radeon Mobility M300 (M22) 5460 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5464
-+device.name FireGL M22 GL 5464 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5548
-+device.name Radeon X800 (R423) UH (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5549
-+device.name Radeon X800PRO (R423) UI (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x554a
-+device.name Radeon X800LE (R423) UJ (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x554b
-+device.name Radeon X800SE (R423) UK (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x554d
-+device.name Radeon X800 XL
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x554b
-
- vendor.id pci 0x1002
-&device.id pci 0x554d
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x0600
-+subdevice.name Radeon X800 XL
-
- vendor.id pci 0x1002
-&device.id pci 0x5551
-+device.name FireGL V7200 (R423) UQ (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5552
-+device.name FireGL V5100 (R423) UR (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5554
-+device.name FireGL V7100 (R423) UT (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5654
-+device.name Mach64 VT
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5834
-+device.name RS300 5834
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5835
-+device.name RS300 5835
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5960
-+device.name RV280 5960
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-+device.name RV280 5961
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5962
-+device.name RV280 5962
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-+device.name RV280 5964
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2012
-+subdevice.name Radeon 9200 SE (DH)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5969
-+device.name ES1000 (PCI)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b60
-+device.name Radeon X300 (RV370) 5B60 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b60
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x0440
-+subdevice.name Radeon X300 SE
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x5b62
-+device.name Radeon X600 (RV370) 5B62 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b64
-+device.name FireGL V3100 (RV370) 5B64 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b65
-+device.name FireGL D1100 (RV370) 5B65 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5c61
-+device.name RV280 5c61
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5c63
-+device.name RV280 5c63
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5d57
-+device.name Radeon X800XT (R423) 5D57 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4a
-+device.name Radeon X700 XT
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5D57
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4b
-+device.name Radeon X700 Pro
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5549
-+driver.xfree 4|fglrx|3d||dri
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4c
-+device.name Radeon X700 SE
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x554B
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4d
-+device.name Radeon X700 (5E4D)
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5548
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4f
-+device.name Radeon X700 (5E4F)
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5548
-
- vendor.id pci 0x1002
-&device.id pci 0x7834
-+device.name Radeon 9100 PRO IGP 7834
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x7835
-+device.name Radeon Mobility 9200 IGP 7835
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x100b
-+vendor.name National Semiconductor Corporation
-
- vendor.id pci 0x100b
-&device.id pci 0x0030
-+device.name REDCLOUD
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100b
-&device.id pci 0x0104
-+device.name SC1400
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100b
-&device.id pci 0x0504
-+device.name SC1200
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100c
-+vendor.name Tseng Labs Inc
-
- vendor.id pci 0x100c
-&device.id pci 0x3202
-+device.name ET4000/W32p rev A
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3205
-+device.name ET4000/W32p rev B
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3206
-+device.name ET4000/W32p rev C
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3207
-+device.name ET4000/W32p rev D
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3208
-+device.name ET6000
-+driver.xfree 4|tseng
-
- vendor.id pci 0x1013
-+vendor.name Cirrus Logic
-
- vendor.id pci 0x1013
-&device.id pci 0x0038
-+device.name GD 7548
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00a0
-+device.name GD 5430/40 [Alpine]
-+driver.xfree 4|cirrus||||Noaccel
-
- vendor.id pci 0x1013
-&device.id pci 0x00a4
-+device.name GD 5434-4 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00a8
-+device.name GD 5434-8 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00ac
-+device.name GD 5436 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00b8
-+device.name GD 5446
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00bc
-+device.name GD 5480
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d0
-+device.name GD 5462
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d4
-+device.name GD 5464 [Laguna]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d5
-+device.name GD5464BD
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d6
-+device.name GD 5465 [Laguna]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1023
-+vendor.name Trident Microsystems Inc.
-
- vendor.id pci 0x1023
-&device.id pci 0x2100
-+device.name CyberBlade/xp4
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8400
-+device.name CyberBlade/i7
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8420
-+device.name CyberBlade/i7d
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8500
-+device.name CyberBlade/i1
-+driver.xfree 4|trident||||CyberStretch,sw_cursor
-
- vendor.id pci 0x1023
-&device.id pci 0x8520
-+device.name 8520
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8600
-+device.name 8600
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8620
-+device.name CyberBlade/DSTN/Ai1
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8820
-+device.name 8820
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9320
-+device.name 9320
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9388
-+device.name Cyber 9388
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9397
-+device.name Cyber 9397
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x939a
-+device.name Cyber 9397DVD
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9420
-+device.name TGUI 9420
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9440
-+device.name TGUI 9440
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9520
-+device.name Cyber 9520
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9525
-+device.name Cyber 9525
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9540
-+device.name Cyber 9540
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9660
-+device.name TGUI 9660/968x/968x
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-+device.name 3DIm`age 975
-+driver.xfree 4|trident|||||8,15,16,24
-
- vendor.id pci 0x1023
-&device.id pci 0x9850
-+device.name 3DImage 9850
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9880
-+device.name 9880
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9910
-+device.name 9910
-+driver.xfree 4|trident
-
- vendor.id pci 0x102b
-+vendor.name Matrox Graphics, Inc.
-
- vendor.id pci 0x102b
-&device.id pci 0x0519
-+device.name MGA 2064W [Millennium]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-+device.name MGA 1064SG [Mystique]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-+device.name MGA 2164W [Millennium II]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051f
-+device.name MGA 2164W [Millennium II] AGP
-+driver.xfree 4|mga||||NoHal
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-+device.name MGA G200
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-+device.name MGA G200 AGP
-+driver.xfree 4|mga|||||8,16,24
-+driver.xfree.config VideoRam 8192
-+driver.xfree 4|mga|3d||dri||16
-+driver.xfree.config VideoRam 8192
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-+device.name MGA G400 AGP
-+driver.xfree 4|mga
-+driver.xfree 4|mga|3d||dri
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0540
-+subdevice.name G450-0540
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0541
-+subdevice.name G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0641
-+subdevice.name Matrox G400 DH-0641
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x07c0
-+subdevice.name G450 LE
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d41
-+subdevice.name G450 DH G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d43
-+subdevice.name G450 PCI
-+driver.xfree 4|mga
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2179
-+subdevice.name G400 DH
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c3
-+subdevice.name G450-23c3
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-+device.name MGA G100 [Productiva]
-+driver.xfree 4|mga||||NoHal
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-+device.name MGA G100 [Productiva] AGP
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-+device.name G550
-+driver.xfree 4|mga
-+driver.xfree 4|mga|3d||dri
-
- vendor.id pci 0x102c
-+vendor.name Chips and Technologies
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-+device.name F69000 HiQVideo
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00d8
-+device.name F65545
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00dc
-+device.name F65548
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e0
-+device.name 65550
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e4
-+device.name F65554
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e5
-+device.name F65555 HiQVPro
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00f4
-+device.name F68554 HiQVision
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-+device.name 69030
-+driver.xfree 4|chips
-
- vendor.id pci 0x1039
-+vendor.name Silicon Integrated Systems Corp.
-
- vendor.id pci 0x1039
-&device.id pci 0x0200
-+device.name 5597/5598 VGA
-+driver.xfree 4|sis|||||16,24
-
- vendor.id pci 0x1039
-&device.id pci 0x0300
-+device.name SIS300
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0310
-+device.name SiS315H
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0325
-+device.name SiS315PRO
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0330
-+device.name SiS330
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0340
-+device.name SiS340
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x5300
-+device.name SiS540 PCI Display Adapter
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x5315
-+device.name SiS550
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6300
-+device.name SiS630 GUI Accelerator+3D
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6306
-+device.name 6306 3D-AGP
-+driver.xfree 4|sis|||||16
-
- vendor.id pci 0x1039
-&device.id pci 0x6325
-+device.name SiS650
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-+device.name 86C326
-+driver.xfree 4|sis|||||8,16,24
-
- vendor.id pci 0x1039
-&device.id pci 0x6330
-+device.name SiS 660
-+driver.xfree 4|sis
-
- vendor.id pci 0x104c
-+vendor.name Texas Instruments
-
- vendor.id pci 0x104c
-&device.id pci 0x3d04
-+device.name TVP4010 [Permedia]
-+driver.xfree 4|glint
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-+device.name TVP4020 [Permedia 2]
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x105d
-+vendor.name Number 9 Computer Company
-
- vendor.id pci 0x105d
-&device.id pci 0x2309
-+device.name Imagine 128
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-+device.name Imagine 128-II
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-+device.name Imagine 128 T2R [Ticket to Ride]
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x5348
-+device.name Revolution 4
-+driver.xfree 4|i128
-
- vendor.id pci 0x1078
-+vendor.name Cyrix Corporation
-
- vendor.id pci 0x1078
-&device.id pci 0x0000
-+device.name 5510
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x1078
-&device.id pci 0x0002
-+device.name 5520 [Cognac]
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x1078
-&device.id pci 0x0104
-+device.name 5530 Video [Kahlua]
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x10c8
-+vendor.name Neomagic Corporation
-
- vendor.id pci 0x10c8
-&device.id pci 0x0001
-+device.name NM2070 [MagicGraph NM2070]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0002
-+device.name NM2090 [MagicGraph 128V]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0003
-+device.name NM2093 [MagicGraph 128ZV]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-+device.name NM2160 [MagicGraph 128XD]
-+driver.xfree 4|neomagic|||||8,16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-+device.name MagicMedia 256AV
-+driver.xfree 4|neomagic|||||8,16,24
-
- vendor.id pci 0x10c8
-&device.id pci 0x0006
-+device.name NM2360 [MagicMedia 256ZX]
-+driver.xfree 4|neomagic|||||16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0016
-+device.name 256XL(2380)
-+driver.xfree 4|neomagic|||||8,16,24
-+driver.xfree.config VideoRam 4096
-
- vendor.id pci 0x10c8
-&device.id pci 0x0025
-+device.name NM2230
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0083
-+device.name MagicGraph 128ZV Plus
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10de
-+vendor.name nVidia Corporation
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name RIVA TNT
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-+device.name RIVA TNT2/TNT2 Pro
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-+device.name RIVA TNT2 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x002a
-+device.name Unknown TNT2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-+device.name Vanta/Vanta LT
-+driver.xfree 4|nv|||||8,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-+device.name RIVA TNT2 Model 64/Model 64 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0040
-+device.name GeForce 6800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0041
-+device.name GeForce 6800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0042
-+device.name GeForce 6800 LE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0043
-+device.name 0x0043
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0045
-+device.name GeForce 6800 GT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0049
-+device.name 0x0049
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x004e
-+device.name Quadro FX 4000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-+device.name Aladdin TNT2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x00c0
-+device.name 0x00c0
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c1
-+device.name GeForce 6800 (0x00C1)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c2
-+device.name 0x00c2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c8
-+device.name GeForce Go 6800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c9
-+device.name GeForce Go 6800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00cc
-+device.name Quadro FX Go1400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00cd
-+device.name 0x00CD
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00ce
-+device.name Quadro FX 1400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f0
-+device.name GeForce 6800/GeForce 6800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f1
-+device.name GeForce 6600/GeForce 6600 GT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f2
-+device.name GeForce 6600 GT (0x00F2)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f3
-+device.name GeForce 6200 (AGP)
-+driver.xfree 4|nv
-+driver.xfree.config Option "noaccel"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f8
-+device.name Quadro FX 3400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f9
-+device.name GeForce 6800 Ultra (0x00F9)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fa
-+device.name GeForce PCX 5750
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fb
-+device.name GeForce PCX 5900
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fc
-+device.name Quadro FX 330/GeForce PCX 5300
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fd
-+device.name Quadro NVS 280 PCI-E/Quadro FX 330
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fe
-+device.name Quadro FX 1300
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00ff
-+device.name GeForce PCX 4300
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-+device.name GeForce 256
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-+device.name GeForce DDR
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0103
-+device.name Quadro
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-+device.name GeForce2 MX/MX 400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0111
-+device.name GeForce2 MX 100/200
-+driver.xfree 4|nv||||sw_cursor
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0112
-+device.name GeForce2 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-
- vendor.id pci 0x10de
-&device.id pci 0x0113
-+device.name Quadro2 MXR/EX/Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0140
-+device.name GeForce 6600 GT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0141
-+device.name GeForce 6600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0141
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x3124
-+subdevice.name GeForce 6600 (Gigabyte)
-+driver.xfree 4|nv
-+driver.xfree.config Option "XaaNoScreenToScreenCopy"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0142
-+device.name 0x0142
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0143
-+device.name 0x0143
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0144
-+device.name GeForce Go 6600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0145
-+device.name GeForce 6610 XL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0146
-+device.name GeForce Go 6600 TE/6200 TE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0147
-+device.name 0x0147
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0148
-+device.name GeForce Go 6600 (0x0148)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0149
-+device.name 0x0149
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014b
-+device.name 0x014b
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014c
-+device.name 0x014c
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014d
-+device.name 0x014d
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014e
-+device.name Quadro FX 540
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014f
-+device.name GeForce 6200
-+driver.xfree 4|nv
-+driver.xfree.config Option "XaaNoScreenToScreenCopy"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-+device.name GeForce2 GTS/GeForce2 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-+device.name GeForce2 Ti
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-+device.name GeForce2 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0153
-+device.name Quadro2 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0160
-+device.name 0x0160
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0161
-+device.name GeForce 6200 TurboCache(TM)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0161
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x025c
-+subdevice.name GeForce 6200 TurboCache(TM) (10de:025c)
-+driver.xfree 4|nv
-+driver.xfree.config Option "XaaNoScreenToScreenCopy"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0162
-+device.name 0x0162
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0163
-+device.name 0x0163
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0164
-+device.name GeForce Go 6200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0165
-+device.name 0x0165
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0166
-+device.name GeForce Go 6250
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0167
-+device.name GeForce Go 6200 (0x0167)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0168
-+device.name GeForce Go 6250 (0x0168)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0169
-+device.name 0x0169
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016b
-+device.name 0x016B
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016c
-+device.name 0x016C
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016d
-+device.name 0x016D
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016e
-+device.name 0x016E
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0170
-+device.name GeForce4 MX 460
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-+device.name GeForce4 MX 440
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0172
-+device.name GeForce4 MX 420
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0173
-+device.name GeForce4 MX 440-SE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0174
-+device.name GeForce4 440 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0175
-+device.name GeForce4 420 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-+device.name GeForce4 420 Go 32M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-&subvendor.id pci 0x1584
-&subdevice.id pci 0x2241
-+subdevice.name GeForce4 Go DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0177
-+device.name GeForce4 460 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-+device.name Quadro4 550 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0151
-+subdevice.name Quadro4 550 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0179
-+device.name GeForce4 440 Go 64M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017a
-+device.name Quadro4 NVS
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x017c
-+device.name Quadro4 500 GoGL
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017d
-+device.name GeForce4 410 Go 16M
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-+device.name GeForce4 MX 440 with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0182
-+device.name GeForce4 MX 440SE with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0183
-+device.name GeForce4 MX 420 with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0185
-+device.name GeForce4 MX 4000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0186
-+device.name GeForce4 448 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0187
-+device.name GeForce4 488 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0188
-+device.name Quadro4 580 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0189
-+device.name GeForce4 MX with AGP8X (Mac)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x018a
-+device.name Quadro NVS with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x018b
-+device.name Quadro4 380 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x018c
-+device.name Quadro NVS 50 PCI
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x018d
-+device.name GeForce4 448 Go (0x018D)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x01a0
-+device.name GeForce2 Integrated GPU
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x01f0
-+device.name GeForce4 MX Integrated GPU
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0200
-+device.name GeForce3
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0201
-+device.name GeForce3 Ti 200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-+device.name GeForce3 Ti 500
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0203
-+device.name Quadro DCC
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0210
-+device.name 0x0210
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0211
-+device.name GeForce 6800 (0x0211)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0212
-+device.name GeForce 6800 LE (0x0212)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0215
-+device.name GeForce 6800 GT (0x0215)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0220
-+device.name 0x0220
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0221
-+device.name 0x0221
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0222
-+device.name 0x0222
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0228
-+device.name 0x0228
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-+device.name GeForce4 Ti 4600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8725
-+subdevice.name GeForce4 Ti 4600 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0251
-+device.name GeForce4 Ti 4400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0252
-+device.name NV25
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-+device.name GeForce4 Ti 4200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-+device.name Quadro4 900 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0138
-+subdevice.name Quadro4 900 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-+device.name Quadro4 750 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0139
-+subdevice.name Quadro4 750 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-+device.name Quadro4 700 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x013b
-+subdevice.name Quadro4 700 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0280
-+device.name GeForce4 Ti 4800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0281
-+device.name GeForce4 Ti 4200 with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0282
-+device.name GeForce4 Ti 4800 SE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0286
-+device.name GeForce4 4200 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-+device.name Quadro4 980 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0174
-+subdevice.name Quadro4 980 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0289
-+device.name Quadro4 780 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x028c
-+device.name Quadro4 700 GoGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0301
-+device.name GeForce FX 5800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0302
-+device.name GeForce FX 5800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-+device.name Quadro FX 2000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0183
-+subdevice.name Quadro FX2000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-+device.name Quadro FX 1000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0182
-+subdevice.name Quadro FX1000 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0311
-+device.name GeForce FX 5600 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0312
-+device.name GeForce FX 5600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0313
-+device.name 0x0313
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0314
-+device.name GeForce FX 5600XT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0316
-+device.name 0x0316
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0317
-+device.name 0x0317
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031a
-+device.name GeForce FX Go5600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x031b
-+device.name GeForce FX Go5650
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031c
-+device.name Quadro FX Go700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031d
-+device.name 0x031d
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031e
-+device.name 0x031e
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031f
-+device.name 0x031f
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0320
-+device.name GeForce FX 5200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0321
-+device.name GeForce FX 5200 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-+device.name GeForce FX 5200 (0x0322)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0431
-+subdevice.name GeForce FX 5200 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0323
-+device.name GeForce FX 5200LE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0324
-+device.name GeForce FX Go5200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0325
-+device.name GeForce FX Go5250
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0326
-+device.name GeForce FX 5500
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0327
-+device.name GeForce FX 5100
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0328
-+device.name GeForce FX Go5200 32M/64M
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0329
-+device.name GeForce FX 5200 (Mac)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032a
-+device.name Quadro NVS 280 PCI
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x032b
-+device.name Quadro FX 500/600 PCI
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032c
-+device.name GeForce FX Go53xx
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032d
-+device.name GeForce FX Go5100
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032f
-+device.name 0x032F
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0330
-+device.name GeForce FX 5900 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0331
-+device.name GeForce FX 5900
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0332
-+device.name GeForce FX 5900XT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-+device.name GeForce FX 5950 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0602
-+subdevice.name GeForce FX 5950
-
- vendor.id pci 0x10de
-&device.id pci 0x0334
-+device.name GeForce FX 5900ZT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-+device.name Quadro FX 3000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x01c2
-+subdevice.name Quadro FX 3000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x033f
-+device.name Quadro FX 700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-+device.name GeForce FX 5700 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x194c
-+subdevice.name GeForce FX 5700 Ultra DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0342
-+device.name GeForce FX 5700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0343
-+device.name GeForce FX 5700LE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0344
-+device.name GeForce FX 5700VE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0345
-+device.name 0x0345
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0347
-+device.name GeForce FX Go5700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0348
-+device.name GeForce FX Go5700 (0x0348)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0349
-+device.name 0x0349
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034b
-+device.name 0x034b
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034c
-+device.name Quadro FX Go1000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034e
-+device.name Quadro FX 1100
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034f
-+device.name 0x034f
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10e0
-+vendor.name Imstt
-
- vendor.id pci 0x10e0
-&device.id pci 0x9128
-+device.name Imstt128
-+driver.xfree 4|imstt
-
- vendor.id pci 0x10e0
-&device.id pci 0x9135
-+device.name Imstt3D
-+driver.xfree 4|imstt
-
- vendor.id pci 0x1106
-+vendor.name VIA Technologies, Inc.
-
- vendor.id pci 0x1106
-&device.id pci 0x3122
-+device.name VIA CLE 3122
-+driver.xfree 4|via
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-+device.name VIA VT 7205
-+driver.xfree 4|via
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x0033
-+subdevice.name Acer Incorporated VIA VT 7205
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-&subvendor.id pci 0x1584
-&subdevice.id pci 0x800a
-+subdevice.name Uniwill VIA VT 7205
-
- vendor.id pci 0x1142
-+vendor.name Alliance Semiconductor Corporation
-
- vendor.id pci 0x1142
-&device.id pci 0x6422
-+device.name ProVideo 6422
-+driver.xfree 4|apm
-
- vendor.id pci 0x1142
-&device.id pci 0x6424
-+device.name ProVideo 6424
-+driver.xfree 4|apm
-
- vendor.id pci 0x1163
-+vendor.name Rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x0001
-+device.name Verite 1000
-+driver.xfree 4|rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x2000
-+device.name Verite V2000/V2100/V2200
-+driver.xfree 4|rendition
-
- vendor.id pci 0x121a
-+vendor.name 3Dfx Interactive, Inc.
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-+device.name Voodoo Banshee
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-+device.name Voodoo 3
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-+device.name Voodoo5 5500
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x126f
-+vendor.name Silicon Motion, Inc.
-
- vendor.id pci 0x126f
-&device.id pci 0x0710
-+device.name SM710 LynxEM
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0712
-+device.name SM712 LynxEM+
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0720
-+device.name SM720 Lynx3DM
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0730
-+device.name SMI 731
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0810
-+device.name SM810 LynxE
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0820
-+device.name 820
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0910
-+device.name SM910
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x12d2
-+vendor.name NVidia / SGS Thomson (Joint Venture)
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-+device.name Riva128
-+driver.xfree 4|nv|||||15,24
-
- vendor.id pci 0x15ad
-+vendor.name VMWare Inc
-
- vendor.id pci 0x15ad
-&device.id pci 0x0405
-+device.name VMWARE0405
-+driver.xfree 4|vmware
-
- vendor.id pci 0x15ad
-&device.id pci 0x0710
-+device.name VMWARE0710
-+driver.xfree 4|vmware
-
- vendor.id pci 0x18ca
-+vendor.name XGI Technology Inc.
-
- vendor.id pci 0x18ca
-&device.id pci 0x0020
-+device.name Volari Z7
-+driver.xfree 4|xgi
-
- vendor.id pci 0x18ca
-&device.id pci 0x0040
-+device.name Volari V8_V5_V3XT
-+driver.xfree 4|xgi
-
- vendor.id pci 0x3d3d
-+vendor.name 3DLabs
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0002
-+device.name GLINT 500TX
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0004
-+device.name Permedia
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0006
-+device.name GLINT MX
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0007
-+device.name 3D Extreme
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-+device.name Permedia II 2D+3D
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000a
-+device.name GLINT R3
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000c
-+device.name Permedia 4
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000d
-+device.name R4
-+driver.xfree 4|glint
-
- vendor.id pci 0x5333
-+vendor.name S3 Inc.
-
- vendor.id pci 0x5333
-&device.id pci 0x5631
-+device.name 86c325 [ViRGE]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8811
-+device.name 86c764/765 [Trio32/64/64V+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8812
-+device.name 86cM65 [Aurora64V+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8814
-+device.name 86c767 [Trio 64UV+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x883d
-+device.name 86c988 [ViRGE/VX]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8901
-+device.name Trio 64V2/DX or /GX
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8904
-+device.name Integrated Trio3D
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-+device.name ViRGE/DX
-+driver.xfree 4|s3virge||||noVBE
-
- vendor.id pci 0x5333
-&device.id pci 0x8a10
-+device.name ViRGE/GX2
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a13
-+device.name 86c368 [Trio 3D/2X]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a20
-+device.name 86c794 [Savage 3D]
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a21
-+device.name 86c795 [Savage 3D/MV]
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-+device.name Savage 4
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a25
-+device.name ProSavage PM 133
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a26
-+device.name ProSavage KM 133
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c01
-+device.name ViRGE/MX
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8c03
-+device.name ViRGE/MX+MV
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8c10
-+device.name 86C270-294 Savage/MX-/IX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c11
-+device.name Savage MX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-+device.name Savage IX/MV
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x017f
-+subdevice.name Savage IX/MV IBM
-+driver.xfree 4|savage||||ShadowStatus
-
- vendor.id pci 0x5333
-&device.id pci 0x8c13
-+device.name Savage IX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c22
-+device.name SuperSavage/MX 128
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c24
-+device.name SuperSavage/MX 64
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c26
-+device.name SuperSavage/MX 64C
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2a
-+device.name SuperSavage/IX 128 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2b
-+device.name SuperSavage/IX 128 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2c
-+device.name SuperSavage/IX 64 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2d
-+device.name SuperSavage/IX 64 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2e
-+device.name SuperSavage/IXC 64 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2f
-+device.name SuperSavage/IXC 64 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d01
-+device.name S3Twister_P
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d02
-+device.name Twister_K
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d03
-+device.name ProSavage DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d04
-+device.name ProSavage DDR-K
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-+device.name 86C410 Savage 2000
-+driver.xfree 4|savage
-
- vendor.id pci 0x8086
-+vendor.name Intel Corporation
-
- vendor.id pci 0x8086
-&device.id pci 0x00d1
-+device.name i740_PCI
-+driver.xfree 4|i740
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-+device.name I815
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x2562
-+device.name i845
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x2572
-+device.name 865 G
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x2582
-+device.name 915 G
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x2592
-+device.name 915 GM
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x3577
-+device.name i830
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x3582
-+device.name 855 GM
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-+device.name 82810 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x7123
-+device.name 82810-DC100 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x7125
-+device.name 82810E CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-+device.name i740
-+driver.xfree 4|i740
-
- vendor.id pci 0xedd8
-+vendor.name ARK Logic Inc
-
- vendor.id pci 0xedd8
-&device.id pci 0xa091
-+device.name 1000PV [Stingray]
-+driver.xfree 4|ark
-
- vendor.id pci 0xedd8
-&device.id pci 0xa099
-+device.name 2000PV [Stingray]
-+driver.xfree 4|ark
-
- vendor.id pci 0xedd8
-&device.id pci 0xa0a1
-+device.name 2000MT
-+driver.xfree 4|ark
-
+++ /dev/null
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x0084
-+device.name RageIIC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x0088
-+device.name Mach64
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-+driver.xfree 4|ati|||||8,16,24,32
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4654
-+device.name Mach64 VT
-+driver.xfree 4|ati|||||8,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-+device.name Rage XL AGP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-+device.name Rage XC AGP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-+driver.xfree 4|ati||||dpms|8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-+device.name 3D Rage IIC AGP
-+driver.xfree 4|ati|||||8,15,16,24,32
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name 3D Rage LT Pro AGP-133
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c44
-+device.name 3D Rage LT Pro AGP-66
-+driver.xfree 4|ati|||||8,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c45
-+device.name Rage 128 Mobility LE
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-+device.name Mobility M3 AGP 2x
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-+device.name 3D Rage P/M Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name 3D Rage P/M Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c54
-+device.name 264LT [Mach64 LT]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4d46
-+device.name Rage 128 Mobility MF
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4d4c
-+device.name Rage 128 Mobility ML
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5041
-+device.name Rage 128 PA
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5042
-+device.name Rage 128 PB
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5043
-+device.name Rage 128 PC
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-+device.name Rage 128 PD
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5045
-+device.name Rage 128 PE
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-+device.name Rage 128 PF
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5047
-+device.name Rage 128 PG
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5048
-+device.name Rage 128 PH
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5049
-+device.name Rage 128 PI
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x504a
-+device.name Rage 128 PJ
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x504b
-+device.name Rage 128 PK
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x504c
-+device.name Rage 128 PL
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x504d
-+device.name Rage 128 PM
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x504e
-+device.name Rage 128 PN
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x504f
-+device.name Rage 128 PO
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-+device.name Rage 128 PP
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5051
-+device.name Rage 128 PQ
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5052
-+device.name Rage 128 PR
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5053
-+device.name Rage 128 PS
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5054
-+device.name Rage 128 PT
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5055
-+device.name Rage 128 PU
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5056
-+device.name Rage 128 PV
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5057
-+device.name Rage 128 PW
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5058
-+device.name Rage 128 PX
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-+device.name Radeon QD
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5145
-+device.name Radeon QE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5146
-+device.name Radeon QF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5147
-+device.name Radeon QG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-+device.name Rage 128 RE
-+driver.xfree 4|r128|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-+device.name Rage 128 RF
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x1002
-&device.id pci 0x5247
-+device.name Rage 128 RG
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x524b
-+device.name Rage 128 RK
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-+device.name Rage 128 RL
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x1002
-&device.id pci 0x5345
-+device.name Rage 128 SE
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-+device.name Rage 128 SF
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5347
-+device.name Rage 128 SG
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5348
-+device.name Rage 128 4x
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x534b
-+device.name Rage 128 SK
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x534c
-+device.name Rage 128 SL
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-+device.name Rage 128 SM
-+driver.xfree 4|r128|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5354
-+device.name Mach 64 VT
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5354
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x5654
-+subdevice.name Mach 64 reference
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-+device.name Rage 128 Pro TR (AGP)
-+driver.xfree 4||||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x100c
-+vendor.name Tseng Labs Inc
-
- vendor.id pci 0x100c
-&device.id pci 0x3206
-+device.name ET4000/W32p rev C
-+driver.xfree 4|tseng
-
- vendor.id pci 0x1011
-+vendor.name Digital Equipment Corporation
-
- vendor.id pci 0x1011
-&device.id pci 0x0004
-+device.name DECchip 21030 [TGA]
-+driver.xfree 4|tga|||||8
-
- vendor.id pci 0x1013
-+vendor.name Cirrus Logic
-
- vendor.id pci 0x1013
-&device.id pci 0x00bc
-+device.name GD 5480
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1014
-+vendor.name IBM
-
- vendor.id pci 0x1014
-&device.id pci 0x00b7
-+device.name fgl1
-+driver.xfree 4|firegl1|||||24
-+driver.xfree.config Option "no_accel" "no"
-+driver.xfree.config Option "NumDMABuffers2D" "4"
-+driver.xfree.config Option "NumDMABuffers" "24"
-+driver.xfree.config Option "NumTMBuffers" "4"
-+driver.xfree.config Option "Capabilities" "0x00000000"
-+driver.xfree.config Option "Capabilities2" "0x00000000"
-+driver.xfree 4|firegl1|3d||dri,fgl1|DDCInfo,accel|24||switch2xf86_glx
-+driver.xfree.config Option "no_accel" "no"
-+driver.xfree.config Option "NumDMABuffers2D" "4"
-+driver.xfree.config Option "NumDMABuffers" "24"
-+driver.xfree.config Option "NumTMBuffers" "4"
-+driver.xfree.config Option "Capabilities" "0x00000000"
-+driver.xfree.config Option "Capabilities2" "0x00000000"
-+requires xf86_glx|xfiregl1
-
- vendor.id pci 0x1014
-&device.id pci 0x0170
-+device.name fgl2
-+driver.xfree 4|firegl23|||||24
-+driver.xfree.config Option "no_accel" "no"
-+driver.xfree.config Option "enable DVI" "on"
-+driver.xfree.config Option "NumDMABuffers" "24"
-+driver.xfree.config Option "NumTMBuffers" "4"
-+driver.xfree.config Option "Capabilities" "0x00000000"
-+driver.xfree.config Option "Capabilities2" "0x00000000"
-+driver.xfree 4|firegl23|3d||dri,fgl23||24||switch2xf86_glx
-+driver.xfree.config Option "no_accel" "no"
-+driver.xfree.config Option "enable DVI" "on"
-+driver.xfree.config Option "NumDMABuffers" "24"
-+driver.xfree.config Option "NumTMBuffers" "4"
-+driver.xfree.config Option "Capabilities" "0x00000000"
-+driver.xfree.config Option "Capabilities2" "0x00000000"
-+requires xf86_glx|xfiregl1
-
- vendor.id pci 0x1023
-+vendor.name Trident Microsystems Inc.
-
- vendor.id pci 0x1023
-&device.id pci 0x8400
-+device.name CyberBlade/i7
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8620
-+device.name CyberBlade/DSTN/Ai1
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9385
-+device.name Cyber 9385 [Reference design]
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9525
-+device.name Cyber 9525
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9540
-+device.name Cyber 9540
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-+device.name 3DIm`age 975
-+driver.xfree 4|trident|||||8,15,16,24
-
- vendor.id pci 0x102b
-+vendor.name Matrox Graphics, Inc.
-
- vendor.id pci 0x102b
-&device.id pci 0x0100
-+device.name Millennium II
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x0518
-+device.name MGA-II [Athena]
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x0519
-+device.name MGA 2064W [Millennium]
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-+device.name MGA 1064SG [Mystique]
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x1100
-+subdevice.name MGA-1084SG Mystique
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-+device.name MGA 2164W [Millennium II]
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051e
-+device.name MGA 1064SG [Mystique] AGP
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051f
-+device.name MGA 2164W [Millennium II] AGP
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-+device.name MGA G200
-+driver.xfree 4|mga||||NoHal|8,16,24
-+driver.xfree 4|mga|3d||dri|NoHal|16||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-+device.name MGA G200 AGP
-+driver.xfree 4|mga||||NoHal|8,16,24
-+driver.xfree.config VideoRam 8192
-+driver.xfree 4|mga|3d||dri|NoHal|16||switch2xf86_glx
-+driver.xfree.config VideoRam 8192
-+requires xf86_glx
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-+device.name MGA G400 AGP
-+driver.xfree 4|mga||||NoHal|8,15,16,24
-+driver.xfree 4|mga|3d||dri|NoHal|16||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x102b
-&device.id pci 0x0d10
-+device.name MGA Ultima/Impression
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-+device.name MGA G100 [Productiva]
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-+device.name MGA G100 [Productiva] AGP
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x2007
-+device.name MGA Mistral
-+driver.xfree 4|mga|||||8
-
- vendor.id pci 0x102b
-&device.id pci 0xff03
-+device.name Millennium G200 SD
-+driver.xfree 4|mga||||sw_cursor|8,16,24
-
- vendor.id pci 0x102c
-+vendor.name Chips and Technologies
-
- vendor.id pci 0x102c
-&device.id pci 0x00e5
-+device.name F65555 HiQVPro
-+driver.xfree 4|chips
-
- vendor.id pci 0x1039
-+vendor.name Silicon Integrated Systems Corp.
-
- vendor.id pci 0x1039
-&device.id pci 0x6306
-+device.name 6306 3D-AGP
-+driver.xfree 4|sis||||FastVRam,Noaccel|8
-
- vendor.id pci 0x104c
-+vendor.name Texas Instruments
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-+device.name TVP4020 [Permedia 2]
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x105d
-+vendor.name Number 9 Computer Company
-
- vendor.id pci 0x105d
-&device.id pci 0x2309
-+device.name Imagine 128
-+driver.xfree 4
-
- vendor.id pci 0x1092
-+vendor.name Diamond Multimedia Systems
-
- vendor.id pci 0x1092
-&device.id pci 0x4820
-+device.name Viper V550 with TV out
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10c8
-+vendor.name Neomagic Corporation
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-+device.name NM2160 [MagicGraph 128XD]
-+driver.xfree 4|neomagic|||||8,16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-+device.name MagicMedia 256AV
-+driver.xfree 4|neomagic|||||8,16,24
-
- vendor.id pci 0x10c8
-&device.id pci 0x0006
-+device.name NM2360 [MagicMedia 256ZX]
-+driver.xfree 4|neomagic|||||16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0016
-+device.name 256XL(2380)
-+driver.xfree 4|neomagic|||||8,16,24
-+driver.xfree.config VideoRam 4096
-
- vendor.id pci 0x10c8
-&device.id pci 0x8005
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x00dd
-+subdevice.name MagicMedia 256AV Audio Device on BlackTip Thinkpad
-+driver.xfree 4|neomagic|||||8,16
-
- vendor.id pci 0x10de
-+vendor.name nVidia Corporation
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name RIVA TNT
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-+device.name RIVA TNT2/TNT2 Pro
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-+device.name RIVA TNT2 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-+device.name Vanta/Vanta LT
-+driver.xfree 4|nv|||||8,16,24
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-+device.name RIVA TNT2 Model 64/Model 64 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-+device.name Aladdin TNT2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-+device.name GeForce 256
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-+device.name GeForce DDR
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0103
-+device.name Quadro
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-+device.name GeForce2 MX/MX 400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0111
-+device.name GeForce2 MX 100/200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0112
-+device.name GeForce2 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0113
-+device.name Quadro2 MXR/EX/Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-+device.name GeForce2 GTS/GeForce2 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-+device.name GeForce2 Ti
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-+device.name GeForce2 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x10de
-&device.id pci 0x0153
-+device.name Quadro2 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16||switch2nvidia_glx
-+requires NVIDIA_GLX|NVIDIA_kernel
-
- vendor.id pci 0x1163
-+vendor.name Rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x2000
-+device.name Verite V2000/V2100/V2200
-+driver.xfree 4|rendition
-
- vendor.id pci 0x121a
-+vendor.name 3Dfx Interactive, Inc.
-
- vendor.id pci 0x121a
-&device.id pci 0x0001
-+device.name Voodoo
-+driver.xfree 4|glide|||||16
-+driver.xfree 4||3d||||16||switch2mesa3dfx
-+requires dev3dfx|glide_vg|mesa3dfx
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-+device.name Voodoo Banshee
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16||switch2xf86_glx
-+requires glidedri|xf86_glx
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-+device.name Voodoo 3
-+driver.xfree 4|tdfx|||||8,16
-+driver.xfree 4|tdfx|3d||dri||16||switch2xf86_glx
-+requires glidedri|xf86_glx
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-+device.name Voodoo5 5500
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16||switch2xf86_glx
-+requires gldri_v5|xf86_glx
-
- vendor.id pci 0x126f
-+vendor.name Silicon Motion, Inc.
-
- vendor.id pci 0x126f
-&device.id pci 0x0710
-+device.name SM710 LynxEM
-+driver.xfree 4|siliconmotion|||||8,15,16,24
-
- vendor.id pci 0x12d2
-+vendor.name NVidia / SGS Thomson (Joint Venture)
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-+device.name Riva128
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-+vendor.name 3DLabs
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0007
-+device.name 3D Extreme
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-+device.name Permedia II 2D+3D
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000a
-+device.name GLINT R3
-+driver.xfree 4|glint|||||8,32
-
- vendor.id pci 0x5333
-+vendor.name S3 Inc.
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-+device.name ViRGE/DX or /GX
-+driver.xfree 4|s3virge|||||8,15,16,24
-
- vendor.id pci 0x8086
-+vendor.name Intel Corporation
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-+device.name I815
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16||switch2xf86_glx
-+driver.xfree.config VideoRam 16384
-+requires xf86_glx
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-+device.name 82810 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16||switch2xf86_glx
-+driver.xfree.config VideoRam 16384
-+requires xf86_glx
-
- vendor.id pci 0x8086
-&device.id pci 0x7123
-+device.name 82810-DC100 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16||switch2xf86_glx
-+driver.xfree.config VideoRam 16384
-+requires xf86_glx
-
- vendor.id pci 0x8086
-&device.id pci 0x7125
-+device.name 82810E CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16||switch2xf86_glx
-+driver.xfree.config VideoRam 16384
-+requires xf86_glx
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-+device.name i740
-+driver.xfree 4|i740
-
+++ /dev/null
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x3150
-+device.name Radeon Mobility X600 (M24) 3150 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x3154
-+device.name FireGL M24 GL 3154 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x3e50
-+device.name Radeon X600 (RV380) 3E50 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x3e50
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x0450
-+subdevice.name Radeon X600 Pro
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x3e54
-+device.name FireGL V3200 (RV380) 3E54 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4136
-+device.name RS100 4136
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4137
-+device.name RS100 4137
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4144
-+device.name R300 AD
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4145
-+device.name E300 AE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4146
-+device.name R300 AF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4147
-+device.name R300 AG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4148
-+device.name R350 AH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4149
-+device.name R350 AI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414a
-+device.name R350 AJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414b
-+device.name R350 AK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-+device.name RV350 AP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4151
-+device.name RV350 AQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-+device.name RV350 AR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4153
-+device.name RV350 AS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4154
-+device.name RV350 AT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4155
-+device.name RV350 AU
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4156
-+device.name RV350 AV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4157
-+device.name RV350 AW
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4237
-+device.name RS250 4237
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4242
-+device.name R200 BB
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4243
-+device.name R200 BC
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4336
-+device.name RS100 4336
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-+device.name RS200 4337
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4437
-+device.name RS250 4437
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-+device.name 3D Rage Pro AGP 1X/2X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4744
-+device.name 3D Rage Pro AGP 1X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-+device.name Mach64 GI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474c
-+device.name Rage XC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-+device.name Rage XL AGP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-+device.name Rage XC AGP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-+device.name Rage XL
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-+device.name 3D Rage Pro 215GP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4751
-+device.name 3D Rage Pro 215GQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-+device.name Mach64 GR
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4753
-+device.name Mach64 GS
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4755
-+device.name 3D Rage II+ 215GTB [Mach64 GTB]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-+device.name 3D Rage IIC AGP
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4758
-+device.name 210888GX [Mach64 GX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4759
-+device.name 3D Rage IIC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-+device.name Mach64 GZ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-+device.name RV250 If
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9000
-
- vendor.id pci 0x1002
-&device.id pci 0x4967
-+device.name RV250 Ig
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4a48
-+device.name R420 JH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a49
-+device.name R420 JI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4a
-+device.name R420 JJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4b
-+device.name R420 JK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4c
-+device.name R420 JL
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4d
-+device.name R420 JM
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a4e
-+device.name R420 JN
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4a50
-+device.name R420 JP
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-+device.name Mach64 LB
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name 3D Rage LT Pro AGP-133
-+driver.xfree 4|ati
-+driver.xfree.config Option "dpms" "off"
-
- vendor.id pci 0x1002
-&device.id pci 0x4c44
-+device.name 3D Rage LT Pro AGP-66
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c45
-+device.name Rage 128 Mobility LE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-+device.name Mobility M3 AGP 2x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c47
-+device.name 3D Rage LT-G 215LG
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-+device.name Mach64 LI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-+device.name 3D Rage P/M Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00bb
-+subdevice.name Mach64LM/Dell
-+driver.xfree 4|fbdev
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4e
-+device.name 3D Rage L Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-+device.name 3D Rage LT Pro
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c51
-+device.name Mach64 LQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name 3D Rage P/M Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c53
-+device.name 3D Rage L Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-+device.name Radeon LW
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c58
-+device.name Radeon LX
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-+device.name Radeon LY
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c5a
-+device.name Radeon LZ
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c64
-+device.name RV250 Ld
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c66
-+device.name RV250 Lf
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c67
-+device.name RV250 Lg
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4d46
-+device.name Rage 128 Mobility MF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4d4c
-+device.name Rage 128 Mobility ML
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-+device.name R300 ND
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9700
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-+device.name R300 NE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e46
-+device.name R300 NF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-+device.name R300 NG
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL X1
-
- vendor.id pci 0x1002
-&device.id pci 0x4e48
-+device.name R350 NH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e49
-+device.name R350 NI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4a
-+device.name R360 NJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4b
-+device.name R350 NK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-+device.name RV350 NP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e51
-+device.name RV350 NQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e52
-+device.name RV350 NR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e53
-+device.name RV350 NS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e54
-+device.name RV350 NT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e56
-+device.name RV350 NV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5041
-+device.name Rage 128 PA
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5042
-+device.name Rage 128 PB
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5043
-+device.name Rage 128 PC
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-+device.name Rage 128 PD
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5045
-+device.name Rage 128 PE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-+device.name Rage 128 PF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5047
-+device.name Rage 128 PG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5048
-+device.name Rage 128 PH
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5049
-+device.name Rage 128 PI
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504a
-+device.name Rage 128 PJ
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504b
-+device.name Rage 128 PK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504c
-+device.name Rage 128 PL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504d
-+device.name Rage 128 PM
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504e
-+device.name Rage 128 PN
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504f
-+device.name Rage 128 PO
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-+device.name Rage 128 PP
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5051
-+device.name Rage 128 PQ
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5052
-+device.name Rage 128 PR
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5053
-+device.name Rage 128 PS
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5054
-+device.name Rage 128 PT
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5055
-+device.name Rage 128 PU
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5056
-+device.name Rage 128 PV
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5057
-+device.name Rage 128 PW
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5058
-+device.name Rage 128 PX
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-+device.name Radeon QD
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5145
-+device.name Radeon QE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5146
-+device.name Radeon QF
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5147
-+device.name Radeon QG
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-+device.name fgl8x00
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0152
-+subdevice.name FireGL 8800
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL 8700
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-+device.name R200 QL
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x514d
-+device.name Radeon 9100 QM
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-+device.name RV200 QW
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 7500
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7146
-+subdevice.name Radeon 7500-7146
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7161
-+subdevice.name Radeon 7500 LE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5158
-+device.name RV200 QX
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-+device.name Radeon VE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x515a
-+device.name Radeon QZ
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x515e
-+device.name ES1000 (1002:515E)
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5969
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-+device.name Rage 128 RE
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-+device.name Rage 128 RF
-+driver.xfree 4|r128|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5247
-+device.name Rage 128 RG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x524b
-+device.name Rage 128 RK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-+device.name Rage 128 RL
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5345
-+device.name Rage 128 SE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-+device.name Rage 128 SF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5347
-+device.name Rage 128 SG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5348
-+device.name Rage 128 4x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534b
-+device.name Rage 128 SK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534c
-+device.name Rage 128 SL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-+device.name Rage 128 SM
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534e
-+device.name Rage 128 SN
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-+device.name Rage 128 Ultra TF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x544c
-+device.name Rage128 TL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-+device.name Rage 128 Pro TR (AGP)
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5453
-+device.name Rage 128 TS
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5454
-+device.name Rage 128 TT
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5455
-+device.name Rage 128 TU
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5460
-+device.name Radeon Mobility M300 (M22) 5460 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5464
-+device.name FireGL M22 GL 5464 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5548
-+device.name Radeon X800 (R423) UH (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5549
-+device.name Radeon X800PRO (R423) UI (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x554a
-+device.name Radeon X800LE (R423) UJ (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x554b
-+device.name Radeon X800SE (R423) UK (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x554d
-+device.name Radeon X800 XL
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x554b
-
- vendor.id pci 0x1002
-&device.id pci 0x554d
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x0600
-+subdevice.name Radeon X800 XL
-
- vendor.id pci 0x1002
-&device.id pci 0x5551
-+device.name FireGL V7200 (R423) UQ (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5552
-+device.name FireGL V5100 (R423) UR (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5554
-+device.name FireGL V7100 (R423) UT (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5654
-+device.name Mach64 VT
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5834
-+device.name RS300 5834
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5835
-+device.name RS300 5835
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5960
-+device.name RV280 5960
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-+device.name RV280 5961
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5962
-+device.name RV280 5962
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-+device.name RV280 5964
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2012
-+subdevice.name Radeon 9200 SE (DH)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5969
-+device.name ES1000 (PCI)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b60
-+device.name Radeon X300 (RV370) 5B60 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b60
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x0440
-+subdevice.name Radeon X300 SE
-+driver.xfree 4|radeon
-+driver.xfree 4|fglrx|3d||dri
-+driver.xfree.config Option "UseInternalAGPGART" "no"
-+driver.xfree.config Option "mtrr" "off"
-+driver.xfree.config Option "VideoOverlay" "on"
-+driver.xfree.config Option "OpenGLOverlay" "off"
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x5b62
-+device.name Radeon X600 (RV370) 5B62 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b64
-+device.name FireGL V3100 (RV370) 5B64 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5b65
-+device.name FireGL D1100 (RV370) 5B65 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5c61
-+device.name RV280 5c61
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5c63
-+device.name RV280 5c63
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5d57
-+device.name Radeon X800XT (R423) 5D57 (PCIE)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4a
-+device.name Radeon X700 XT
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5D57
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4b
-+device.name Radeon X700 Pro
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5549
-+driver.xfree 4|fglrx|3d||dri
-+requires fglrx
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4c
-+device.name Radeon X700 SE
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x554B
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4d
-+device.name Radeon X700 (5E4D)
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5548
-
- vendor.id pci 0x1002
-&device.id pci 0x5e4f
-+device.name Radeon X700 (5E4F)
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x5548
-
- vendor.id pci 0x1002
-&device.id pci 0x7834
-+device.name Radeon 9100 PRO IGP 7834
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x7835
-+device.name Radeon Mobility 9200 IGP 7835
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x100b
-+vendor.name National Semiconductor Corporation
-
- vendor.id pci 0x100b
-&device.id pci 0x0030
-+device.name REDCLOUD
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100b
-&device.id pci 0x0104
-+device.name SC1400
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100b
-&device.id pci 0x0504
-+device.name SC1200
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100c
-+vendor.name Tseng Labs Inc
-
- vendor.id pci 0x100c
-&device.id pci 0x3202
-+device.name ET4000/W32p rev A
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3205
-+device.name ET4000/W32p rev B
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3206
-+device.name ET4000/W32p rev C
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3207
-+device.name ET4000/W32p rev D
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3208
-+device.name ET6000
-+driver.xfree 4|tseng
-
- vendor.id pci 0x1013
-+vendor.name Cirrus Logic
-
- vendor.id pci 0x1013
-&device.id pci 0x0038
-+device.name GD 7548
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00a0
-+device.name GD 5430/40 [Alpine]
-+driver.xfree 4|cirrus||||Noaccel
-
- vendor.id pci 0x1013
-&device.id pci 0x00a4
-+device.name GD 5434-4 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00a8
-+device.name GD 5434-8 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00ac
-+device.name GD 5436 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00b8
-+device.name GD 5446
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00bc
-+device.name GD 5480
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d0
-+device.name GD 5462
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d4
-+device.name GD 5464 [Laguna]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d5
-+device.name GD5464BD
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d6
-+device.name GD 5465 [Laguna]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1023
-+vendor.name Trident Microsystems Inc.
-
- vendor.id pci 0x1023
-&device.id pci 0x2100
-+device.name CyberBlade/xp4
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8400
-+device.name CyberBlade/i7
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8420
-+device.name CyberBlade/i7d
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8500
-+device.name CyberBlade/i1
-+driver.xfree 4|trident||||CyberStretch,sw_cursor
-
- vendor.id pci 0x1023
-&device.id pci 0x8520
-+device.name 8520
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8600
-+device.name 8600
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8620
-+device.name CyberBlade/DSTN/Ai1
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8820
-+device.name 8820
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9320
-+device.name 9320
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9388
-+device.name Cyber 9388
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9397
-+device.name Cyber 9397
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x939a
-+device.name Cyber 9397DVD
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9420
-+device.name TGUI 9420
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9440
-+device.name TGUI 9440
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9520
-+device.name Cyber 9520
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9525
-+device.name Cyber 9525
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9540
-+device.name Cyber 9540
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9660
-+device.name TGUI 9660/968x/968x
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-+device.name 3DIm`age 975
-+driver.xfree 4|trident|||||8,15,16,24
-
- vendor.id pci 0x1023
-&device.id pci 0x9850
-+device.name 3DImage 9850
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9880
-+device.name 9880
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9910
-+device.name 9910
-+driver.xfree 4|trident
-
- vendor.id pci 0x102b
-+vendor.name Matrox Graphics, Inc.
-
- vendor.id pci 0x102b
-&device.id pci 0x0519
-+device.name MGA 2064W [Millennium]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-+device.name MGA 1064SG [Mystique]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-+device.name MGA 2164W [Millennium II]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051f
-+device.name MGA 2164W [Millennium II] AGP
-+driver.xfree 4|mga||||NoHal
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-+device.name MGA G200
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-+device.name MGA G200 AGP
-+driver.xfree 4|mga|||||8,16,24
-+driver.xfree.config VideoRam 8192
-+driver.xfree 4|mga|3d||dri||16
-+driver.xfree.config VideoRam 8192
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-+device.name MGA G400 AGP
-+driver.xfree 4|mga
-+driver.xfree 4|mga|3d||dri
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0540
-+subdevice.name G450-0540
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0541
-+subdevice.name G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0641
-+subdevice.name Matrox G400 DH-0641
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x07c0
-+subdevice.name G450 LE
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d41
-+subdevice.name G450 DH G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d43
-+subdevice.name G450 PCI
-+driver.xfree 4|mga
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2179
-+subdevice.name G400 DH
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c3
-+subdevice.name G450-23c3
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-+device.name MGA G100 [Productiva]
-+driver.xfree 4|mga||||NoHal
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-+device.name MGA G100 [Productiva] AGP
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-+device.name G550
-+driver.xfree 4|mga
-+driver.xfree 4|mga|3d||dri
-
- vendor.id pci 0x102c
-+vendor.name Chips and Technologies
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-+device.name F69000 HiQVideo
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00d8
-+device.name F65545
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00dc
-+device.name F65548
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e0
-+device.name 65550
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e4
-+device.name F65554
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e5
-+device.name F65555 HiQVPro
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00f4
-+device.name F68554 HiQVision
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-+device.name 69030
-+driver.xfree 4|chips
-
- vendor.id pci 0x1039
-+vendor.name Silicon Integrated Systems Corp.
-
- vendor.id pci 0x1039
-&device.id pci 0x0200
-+device.name 5597/5598 VGA
-+driver.xfree 4|sis|||||16,24
-
- vendor.id pci 0x1039
-&device.id pci 0x0300
-+device.name SIS300
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0310
-+device.name SiS315H
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0325
-+device.name SiS315PRO
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0330
-+device.name SiS330
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0340
-+device.name SiS340
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x5300
-+device.name SiS540 PCI Display Adapter
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x5315
-+device.name SiS550
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6300
-+device.name SiS630 GUI Accelerator+3D
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6306
-+device.name 6306 3D-AGP
-+driver.xfree 4|sis|||||16
-
- vendor.id pci 0x1039
-&device.id pci 0x6325
-+device.name SiS650
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-+device.name 86C326
-+driver.xfree 4|sis|||||8,16,24
-
- vendor.id pci 0x1039
-&device.id pci 0x6330
-+device.name SiS 660
-+driver.xfree 4|sis
-
- vendor.id pci 0x104c
-+vendor.name Texas Instruments
-
- vendor.id pci 0x104c
-&device.id pci 0x3d04
-+device.name TVP4010 [Permedia]
-+driver.xfree 4|glint
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-+device.name TVP4020 [Permedia 2]
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x105d
-+vendor.name Number 9 Computer Company
-
- vendor.id pci 0x105d
-&device.id pci 0x2309
-+device.name Imagine 128
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-+device.name Imagine 128-II
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-+device.name Imagine 128 T2R [Ticket to Ride]
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x5348
-+device.name Revolution 4
-+driver.xfree 4|i128
-
- vendor.id pci 0x1078
-+vendor.name Cyrix Corporation
-
- vendor.id pci 0x1078
-&device.id pci 0x0000
-+device.name 5510
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x1078
-&device.id pci 0x0002
-+device.name 5520 [Cognac]
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x1078
-&device.id pci 0x0104
-+device.name 5530 Video [Kahlua]
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x10c8
-+vendor.name Neomagic Corporation
-
- vendor.id pci 0x10c8
-&device.id pci 0x0001
-+device.name NM2070 [MagicGraph NM2070]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0002
-+device.name NM2090 [MagicGraph 128V]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0003
-+device.name NM2093 [MagicGraph 128ZV]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-+device.name NM2160 [MagicGraph 128XD]
-+driver.xfree 4|neomagic|||||8,16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-+device.name MagicMedia 256AV
-+driver.xfree 4|neomagic|||||8,16,24
-
- vendor.id pci 0x10c8
-&device.id pci 0x0006
-+device.name NM2360 [MagicMedia 256ZX]
-+driver.xfree 4|neomagic|||||16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0016
-+device.name 256XL(2380)
-+driver.xfree 4|neomagic|||||8,16,24
-+driver.xfree.config VideoRam 4096
-
- vendor.id pci 0x10c8
-&device.id pci 0x0025
-+device.name NM2230
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0083
-+device.name MagicGraph 128ZV Plus
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10de
-+vendor.name nVidia Corporation
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name RIVA TNT
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-+device.name RIVA TNT2/TNT2 Pro
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-+device.name RIVA TNT2 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x002a
-+device.name Unknown TNT2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-+device.name Vanta/Vanta LT
-+driver.xfree 4|nv|||||8,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-+device.name RIVA TNT2 Model 64/Model 64 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0040
-+device.name GeForce 6800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0041
-+device.name GeForce 6800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0042
-+device.name GeForce 6800 LE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0043
-+device.name 0x0043
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0045
-+device.name GeForce 6800 GT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0049
-+device.name 0x0049
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x004e
-+device.name Quadro FX 4000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-+device.name Aladdin TNT2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x00c0
-+device.name 0x00c0
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c1
-+device.name GeForce 6800 (0x00C1)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c2
-+device.name 0x00c2
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c8
-+device.name GeForce Go 6800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00c9
-+device.name GeForce Go 6800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00cc
-+device.name Quadro FX Go1400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00cd
-+device.name 0x00CD
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00ce
-+device.name Quadro FX 1400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f0
-+device.name GeForce 6800/GeForce 6800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f1
-+device.name GeForce 6600/GeForce 6600 GT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f2
-+device.name GeForce 6600 GT (0x00F2)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f3
-+device.name GeForce 6200 (AGP)
-+driver.xfree 4|nv
-+driver.xfree.config Option "noaccel"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f8
-+device.name Quadro FX 3400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00f9
-+device.name GeForce 6800 Ultra (0x00F9)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fa
-+device.name GeForce PCX 5750
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fb
-+device.name GeForce PCX 5900
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fc
-+device.name Quadro FX 330/GeForce PCX 5300
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fd
-+device.name Quadro NVS 280 PCI-E/Quadro FX 330
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00fe
-+device.name Quadro FX 1300
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x00ff
-+device.name GeForce PCX 4300
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-+device.name GeForce 256
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-+device.name GeForce DDR
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0103
-+device.name Quadro
-+driver.xfree 4|nv|||||8,15,16,24
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-+device.name GeForce2 MX/MX 400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0111
-+device.name GeForce2 MX 100/200
-+driver.xfree 4|nv||||sw_cursor
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0112
-+device.name GeForce2 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-
- vendor.id pci 0x10de
-&device.id pci 0x0113
-+device.name Quadro2 MXR/EX/Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0140
-+device.name GeForce 6600 GT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0141
-+device.name GeForce 6600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0141
-&subvendor.id pci 0x1458
-&subdevice.id pci 0x3124
-+subdevice.name GeForce 6600 (Gigabyte)
-+driver.xfree 4|nv
-+driver.xfree.config Option "XaaNoScreenToScreenCopy"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0142
-+device.name 0x0142
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0143
-+device.name 0x0143
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0144
-+device.name GeForce Go 6600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0145
-+device.name GeForce 6610 XL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0146
-+device.name GeForce Go 6600 TE/6200 TE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0147
-+device.name 0x0147
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0148
-+device.name GeForce Go 6600 (0x0148)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0149
-+device.name 0x0149
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014b
-+device.name 0x014b
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014c
-+device.name 0x014c
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014d
-+device.name 0x014d
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014e
-+device.name Quadro FX 540
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x014f
-+device.name GeForce 6200
-+driver.xfree 4|nv
-+driver.xfree.config Option "XaaNoScreenToScreenCopy"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-+device.name GeForce2 GTS/GeForce2 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-+device.name GeForce2 Ti
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-+device.name GeForce2 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0153
-+device.name Quadro2 Pro
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0160
-+device.name 0x0160
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0161
-+device.name GeForce 6200 TurboCache(TM)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0161
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x025c
-+subdevice.name GeForce 6200 TurboCache(TM) (10de:025c)
-+driver.xfree 4|nv
-+driver.xfree.config Option "XaaNoScreenToScreenCopy"
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0162
-+device.name 0x0162
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0163
-+device.name 0x0163
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0164
-+device.name GeForce Go 6200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0165
-+device.name 0x0165
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0166
-+device.name GeForce Go 6250
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0167
-+device.name GeForce Go 6200 (0x0167)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0168
-+device.name GeForce Go 6250 (0x0168)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0169
-+device.name 0x0169
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016b
-+device.name 0x016B
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016c
-+device.name 0x016C
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016d
-+device.name 0x016D
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x016e
-+device.name 0x016E
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0170
-+device.name GeForce4 MX 460
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-+device.name GeForce4 MX 440
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0172
-+device.name GeForce4 MX 420
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0173
-+device.name GeForce4 MX 440-SE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0174
-+device.name GeForce4 440 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0175
-+device.name GeForce4 420 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-+device.name GeForce4 420 Go 32M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-&subvendor.id pci 0x1584
-&subdevice.id pci 0x2241
-+subdevice.name GeForce4 Go DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0177
-+device.name GeForce4 460 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-+device.name Quadro4 550 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0151
-+subdevice.name Quadro4 550 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0179
-+device.name GeForce4 440 Go 64M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017a
-+device.name Quadro4 NVS
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x017c
-+device.name Quadro4 500 GoGL
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-+driver.xfree 4|nvidia|3d||||16
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017d
-+device.name GeForce4 410 Go 16M
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-+device.name GeForce4 MX 440 with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0182
-+device.name GeForce4 MX 440SE with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0183
-+device.name GeForce4 MX 420 with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0185
-+device.name GeForce4 MX 4000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0186
-+device.name GeForce4 448 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0187
-+device.name GeForce4 488 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0188
-+device.name Quadro4 580 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0189
-+device.name GeForce4 MX with AGP8X (Mac)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x018a
-+device.name Quadro NVS with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x018b
-+device.name Quadro4 380 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x018c
-+device.name Quadro NVS 50 PCI
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x018d
-+device.name GeForce4 448 Go (0x018D)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x01a0
-+device.name GeForce2 Integrated GPU
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x01f0
-+device.name GeForce4 MX Integrated GPU
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0200
-+device.name GeForce3
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0201
-+device.name GeForce3 Ti 200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-+device.name GeForce3 Ti 500
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0203
-+device.name Quadro DCC
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0210
-+device.name 0x0210
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0211
-+device.name GeForce 6800 (0x0211)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0212
-+device.name GeForce 6800 LE (0x0212)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0215
-+device.name GeForce 6800 GT (0x0215)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0220
-+device.name 0x0220
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0221
-+device.name 0x0221
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0222
-+device.name 0x0222
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0228
-+device.name 0x0228
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-+device.name GeForce4 Ti 4600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8725
-+subdevice.name GeForce4 Ti 4600 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0251
-+device.name GeForce4 Ti 4400
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0252
-+device.name NV25
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-+device.name GeForce4 Ti 4200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-+device.name Quadro4 900 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0138
-+subdevice.name Quadro4 900 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-+device.name Quadro4 750 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0139
-+subdevice.name Quadro4 750 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-+device.name Quadro4 700 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x013b
-+subdevice.name Quadro4 700 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0280
-+device.name GeForce4 Ti 4800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0281
-+device.name GeForce4 Ti 4200 with AGP8X
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0282
-+device.name GeForce4 Ti 4800 SE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0286
-+device.name GeForce4 4200 Go
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-+device.name Quadro4 980 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0174
-+subdevice.name Quadro4 980 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0289
-+device.name Quadro4 780 XGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x028c
-+device.name Quadro4 700 GoGL
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0301
-+device.name GeForce FX 5800 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0302
-+device.name GeForce FX 5800
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-+device.name Quadro FX 2000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0183
-+subdevice.name Quadro FX2000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-+device.name Quadro FX 1000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0182
-+subdevice.name Quadro FX1000 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0311
-+device.name GeForce FX 5600 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0312
-+device.name GeForce FX 5600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0313
-+device.name 0x0313
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0314
-+device.name GeForce FX 5600XT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0316
-+device.name 0x0316
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0317
-+device.name 0x0317
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031a
-+device.name GeForce FX Go5600
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x031b
-+device.name GeForce FX Go5650
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031c
-+device.name Quadro FX Go700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031d
-+device.name 0x031d
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031e
-+device.name 0x031e
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x031f
-+device.name 0x031f
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0320
-+device.name GeForce FX 5200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0321
-+device.name GeForce FX 5200 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-+device.name GeForce FX 5200 (0x0322)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0431
-+subdevice.name GeForce FX 5200 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0323
-+device.name GeForce FX 5200LE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0324
-+device.name GeForce FX Go5200
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0325
-+device.name GeForce FX Go5250
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0326
-+device.name GeForce FX 5500
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0327
-+device.name GeForce FX 5100
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0328
-+device.name GeForce FX Go5200 32M/64M
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0329
-+device.name GeForce FX 5200 (Mac)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032a
-+device.name Quadro NVS 280 PCI
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x032b
-+device.name Quadro FX 500/600 PCI
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032c
-+device.name GeForce FX Go53xx
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032d
-+device.name GeForce FX Go5100
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x032f
-+device.name 0x032F
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0330
-+device.name GeForce FX 5900 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0331
-+device.name GeForce FX 5900
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0332
-+device.name GeForce FX 5900XT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-+device.name GeForce FX 5950 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0602
-+subdevice.name GeForce FX 5950
-
- vendor.id pci 0x10de
-&device.id pci 0x0334
-+device.name GeForce FX 5900ZT
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-+device.name Quadro FX 3000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x01c2
-+subdevice.name Quadro FX 3000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x033f
-+device.name Quadro FX 700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-+device.name GeForce FX 5700 Ultra
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x194c
-+subdevice.name GeForce FX 5700 Ultra DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0342
-+device.name GeForce FX 5700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0343
-+device.name GeForce FX 5700LE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0344
-+device.name GeForce FX 5700VE
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0345
-+device.name 0x0345
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0347
-+device.name GeForce FX Go5700
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0348
-+device.name GeForce FX Go5700 (0x0348)
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0349
-+device.name 0x0349
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034b
-+device.name 0x034b
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034c
-+device.name Quadro FX Go1000
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034e
-+device.name Quadro FX 1100
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x034f
-+device.name 0x034f
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10e0
-+vendor.name Imstt
-
- vendor.id pci 0x10e0
-&device.id pci 0x9128
-+device.name Imstt128
-+driver.xfree 4|imstt
-
- vendor.id pci 0x10e0
-&device.id pci 0x9135
-+device.name Imstt3D
-+driver.xfree 4|imstt
-
- vendor.id pci 0x1106
-+vendor.name VIA Technologies, Inc.
-
- vendor.id pci 0x1106
-&device.id pci 0x3122
-+device.name VIA CLE 3122
-+driver.xfree 4|via
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-+device.name VIA VT 7205
-+driver.xfree 4|via
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-&subvendor.id pci 0x1025
-&subdevice.id pci 0x0033
-+subdevice.name Acer Incorporated VIA VT 7205
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-&subvendor.id pci 0x1584
-&subdevice.id pci 0x800a
-+subdevice.name Uniwill VIA VT 7205
-
- vendor.id pci 0x1142
-+vendor.name Alliance Semiconductor Corporation
-
- vendor.id pci 0x1142
-&device.id pci 0x6422
-+device.name ProVideo 6422
-+driver.xfree 4|apm
-
- vendor.id pci 0x1142
-&device.id pci 0x6424
-+device.name ProVideo 6424
-+driver.xfree 4|apm
-
- vendor.id pci 0x1163
-+vendor.name Rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x0001
-+device.name Verite 1000
-+driver.xfree 4|rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x2000
-+device.name Verite V2000/V2100/V2200
-+driver.xfree 4|rendition
-
- vendor.id pci 0x121a
-+vendor.name 3Dfx Interactive, Inc.
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-+device.name Voodoo Banshee
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-+device.name Voodoo 3
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-+device.name Voodoo5 5500
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x126f
-+vendor.name Silicon Motion, Inc.
-
- vendor.id pci 0x126f
-&device.id pci 0x0710
-+device.name SM710 LynxEM
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0712
-+device.name SM712 LynxEM+
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0720
-+device.name SM720 Lynx3DM
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0730
-+device.name SMI 731
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0810
-+device.name SM810 LynxE
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0820
-+device.name 820
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0910
-+device.name SM910
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x12d2
-+vendor.name NVidia / SGS Thomson (Joint Venture)
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-+device.name Riva128
-+driver.xfree 4|nv|||||15,24
-
- vendor.id pci 0x15ad
-+vendor.name VMWare Inc
-
- vendor.id pci 0x15ad
-&device.id pci 0x0405
-+device.name VMWARE0405
-+driver.xfree 4|vmware
-
- vendor.id pci 0x15ad
-&device.id pci 0x0710
-+device.name VMWARE0710
-+driver.xfree 4|vmware
-
- vendor.id pci 0x18ca
-+vendor.name XGI Technology Inc.
-
- vendor.id pci 0x18ca
-&device.id pci 0x0020
-+device.name Volari Z7
-+driver.xfree 4|xgi
-
- vendor.id pci 0x18ca
-&device.id pci 0x0040
-+device.name Volari V8_V5_V3XT
-+driver.xfree 4|xgi
-
- vendor.id pci 0x3d3d
-+vendor.name 3DLabs
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0002
-+device.name GLINT 500TX
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0004
-+device.name Permedia
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0006
-+device.name GLINT MX
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0007
-+device.name 3D Extreme
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-+device.name Permedia II 2D+3D
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000a
-+device.name GLINT R3
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000c
-+device.name Permedia 4
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000d
-+device.name R4
-+driver.xfree 4|glint
-
- vendor.id pci 0x5333
-+vendor.name S3 Inc.
-
- vendor.id pci 0x5333
-&device.id pci 0x5631
-+device.name 86c325 [ViRGE]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8811
-+device.name 86c764/765 [Trio32/64/64V+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8812
-+device.name 86cM65 [Aurora64V+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8814
-+device.name 86c767 [Trio 64UV+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x883d
-+device.name 86c988 [ViRGE/VX]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8901
-+device.name Trio 64V2/DX or /GX
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8904
-+device.name Integrated Trio3D
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-+device.name ViRGE/DX
-+driver.xfree 4|s3virge||||noVBE
-
- vendor.id pci 0x5333
-&device.id pci 0x8a10
-+device.name ViRGE/GX2
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a13
-+device.name 86c368 [Trio 3D/2X]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a20
-+device.name 86c794 [Savage 3D]
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a21
-+device.name 86c795 [Savage 3D/MV]
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-+device.name Savage 4
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a25
-+device.name ProSavage PM 133
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a26
-+device.name ProSavage KM 133
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c01
-+device.name ViRGE/MX
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8c03
-+device.name ViRGE/MX+MV
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8c10
-+device.name 86C270-294 Savage/MX-/IX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c11
-+device.name Savage MX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-+device.name Savage IX/MV
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x017f
-+subdevice.name Savage IX/MV IBM
-+driver.xfree 4|savage||||ShadowStatus
-
- vendor.id pci 0x5333
-&device.id pci 0x8c13
-+device.name Savage IX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c22
-+device.name SuperSavage/MX 128
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c24
-+device.name SuperSavage/MX 64
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c26
-+device.name SuperSavage/MX 64C
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2a
-+device.name SuperSavage/IX 128 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2b
-+device.name SuperSavage/IX 128 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2c
-+device.name SuperSavage/IX 64 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2d
-+device.name SuperSavage/IX 64 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2e
-+device.name SuperSavage/IXC 64 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2f
-+device.name SuperSavage/IXC 64 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d01
-+device.name S3Twister_P
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d02
-+device.name Twister_K
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d03
-+device.name ProSavage DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d04
-+device.name ProSavage DDR-K
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-+device.name 86C410 Savage 2000
-+driver.xfree 4|savage
-
- vendor.id pci 0x8086
-+vendor.name Intel Corporation
-
- vendor.id pci 0x8086
-&device.id pci 0x00d1
-+device.name i740_PCI
-+driver.xfree 4|i740
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-+device.name I815
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x2562
-+device.name i845
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x2572
-+device.name 865 G
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x2582
-+device.name 915 G
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x2592
-+device.name 915 GM
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x3577
-+device.name i830
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x3582
-+device.name 855 GM
-+driver.xfree 4|i810
-+driver.xfree.config Option "NoDDC"
-+driver.xfree 4|i810|3d||dri
-+driver.xfree.config Option "NoDDC"
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-+device.name 82810 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x7123
-+device.name 82810-DC100 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x7125
-+device.name 82810E CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-+device.name i740
-+driver.xfree 4|i740
-
- vendor.id pci 0xedd8
-+vendor.name ARK Logic Inc
-
- vendor.id pci 0xedd8
-&device.id pci 0xa091
-+device.name 1000PV [Stingray]
-+driver.xfree 4|ark
-
- vendor.id pci 0xedd8
-&device.id pci 0xa099
-+device.name 2000PV [Stingray]
-+driver.xfree 4|ark
-
- vendor.id pci 0xedd8
-&device.id pci 0xa0a1
-+device.name 2000MT
-+driver.xfree 4|ark
-
+++ /dev/null
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x4136
-+device.name RS100 4136
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4137
-+device.name RS100 4137
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4144
-+device.name R300 AD
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4145
-+device.name E300 AE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4146
-+device.name R300 AF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4147
-+device.name R300 AG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4148
-+device.name R350 AH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4149
-+device.name R350 AI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414a
-+device.name R350 AJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414b
-+device.name R350 AK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-+device.name RV350 AP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4151
-+device.name RV350 AQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-+device.name RV350 AR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4153
-+device.name RV350 AS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4154
-+device.name RV350 AT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4155
-+device.name RV350 AU
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4156
-+device.name RV350 AV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4157
-+device.name RV350 AW
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4237
-+device.name RS250 4237
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4242
-+device.name R200 BB
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4243
-+device.name R200 BC
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x4336
-+device.name RS100 4336
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-+device.name RS200 4337
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4437
-+device.name RS250 4437
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-+device.name 3D Rage Pro AGP 1X/2X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4744
-+device.name 3D Rage Pro AGP 1X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-+device.name Mach64 GI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474c
-+device.name Rage XC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-+device.name Rage XL AGP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-+device.name Rage XC AGP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-+device.name Rage XL
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-+device.name 3D Rage Pro 215GP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4751
-+device.name 3D Rage Pro 215GQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-+device.name Mach64 GR
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4753
-+device.name Mach64 GS
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4755
-+device.name 3D Rage II+ 215GTB [Mach64 GTB]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-+device.name 3D Rage IIC AGP
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4758
-+device.name 210888GX [Mach64 GX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4759
-+device.name 3D Rage IIC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-+device.name Mach64 GZ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-+device.name RV250 If
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9000
-
- vendor.id pci 0x1002
-&device.id pci 0x4967
-+device.name RV250 Ig
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-+device.name Mach64 LB
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name 3D Rage LT Pro AGP-133
-+driver.xfree 4|ati
-+driver.xfree.config Option "dpms" "off"
-
- vendor.id pci 0x1002
-&device.id pci 0x4c44
-+device.name 3D Rage LT Pro AGP-66
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c45
-+device.name Rage 128 Mobility LE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-+device.name Mobility M3 AGP 2x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c47
-+device.name 3D Rage LT-G 215LG
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-+device.name Mach64 LI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-+device.name 3D Rage P/M Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-&subvendor.id pci 0x1028
-&subdevice.id pci 0x00bb
-+subdevice.name Mach64LM/Dell
-+driver.xfree 4|fbdev
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4e
-+device.name 3D Rage L Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-+device.name 3D Rage LT Pro
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c51
-+device.name Mach64 LQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name 3D Rage P/M Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c53
-+device.name 3D Rage L Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-+device.name Radeon LW
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c58
-+device.name Radeon LX
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-+device.name Radeon LY
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c5a
-+device.name Radeon LZ
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c64
-+device.name RV250 Ld
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c66
-+device.name RV250 Lf
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4c67
-+device.name RV250 Lg
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4d46
-+device.name Rage 128 Mobility MF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4d4c
-+device.name Rage 128 Mobility ML
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-+device.name R300 ND
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9700
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-+device.name R300 NE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e46
-+device.name R300 NF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-+device.name R300 NG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL X1
-
- vendor.id pci 0x1002
-&device.id pci 0x4e48
-+device.name R350 NH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e49
-+device.name R350 NI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4a
-+device.name R360 NJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4b
-+device.name R350 NK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-+device.name RV350 NP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e51
-+device.name RV350 NQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e52
-+device.name RV350 NR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e53
-+device.name RV350 NS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e54
-+device.name RV350 NT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e56
-+device.name RV350 NV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5041
-+device.name Rage 128 PA
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5042
-+device.name Rage 128 PB
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5043
-+device.name Rage 128 PC
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-+device.name Rage 128 PD
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5045
-+device.name Rage 128 PE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-+device.name Rage 128 PF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5047
-+device.name Rage 128 PG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5048
-+device.name Rage 128 PH
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5049
-+device.name Rage 128 PI
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504a
-+device.name Rage 128 PJ
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504b
-+device.name Rage 128 PK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504c
-+device.name Rage 128 PL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504d
-+device.name Rage 128 PM
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504e
-+device.name Rage 128 PN
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x504f
-+device.name Rage 128 PO
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-+device.name Rage 128 PP
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5051
-+device.name Rage 128 PQ
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5052
-+device.name Rage 128 PR
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5053
-+device.name Rage 128 PS
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5054
-+device.name Rage 128 PT
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5055
-+device.name Rage 128 PU
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5056
-+device.name Rage 128 PV
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5057
-+device.name Rage 128 PW
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5058
-+device.name Rage 128 PX
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-+device.name Radeon QD
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5145
-+device.name Radeon QE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5146
-+device.name Radeon QF
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5147
-+device.name Radeon QG
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-+device.name fgl8x00
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0152
-+subdevice.name FireGL 8800
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL 8700
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-+device.name R200 QL
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x514d
-+device.name Radeon 9100 QM
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-+device.name RV200 QW
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 7500
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7146
-+subdevice.name Radeon 7500-7146
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7161
-+subdevice.name Radeon 7500 LE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5158
-+device.name RV200 QX
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-+device.name Radeon VE
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x010a
-+subdevice.name Radeon VE (0x010a)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon VE (0x013a)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x515a
-+device.name Radeon QZ
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-+device.name Rage 128 RE
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-+device.name Rage 128 RF
-+driver.xfree 4|r128|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5247
-+device.name Rage 128 RG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x524b
-+device.name Rage 128 RK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-+device.name Rage 128 RL
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5345
-+device.name Rage 128 SE
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-+device.name Rage 128 SF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5347
-+device.name Rage 128 SG
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5348
-+device.name Rage 128 4x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534b
-+device.name Rage 128 SK
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534c
-+device.name Rage 128 SL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-+device.name Rage 128 SM
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x534e
-+device.name Rage 128 SN
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-+device.name Rage 128 Ultra TF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x544c
-+device.name Rage128 TL
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-+device.name Rage 128 Pro TR (AGP)
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5453
-+device.name Rage 128 TS
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5454
-+device.name Rage 128 TT
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5455
-+device.name Rage 128 TU
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5654
-+device.name Mach64 VT
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5834
-+device.name RS300 5834
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5835
-+device.name RS300 5835
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5960
-+device.name RV280 5960
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-+device.name RV280 5961
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5962
-+device.name RV280 5962
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri||16
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-+device.name RV280 5964
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2012
-+subdevice.name Radeon 9200 SE (DH)
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5c61
-+device.name RV280 5c61
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x1002
-&device.id pci 0x5c63
-+device.name RV280 5c63
-+driver.xfree 4|radeon
-+driver.xfree 4|radeon|3d||dri
-
- vendor.id pci 0x100b
-+vendor.name National Semiconductor Corporation
-
- vendor.id pci 0x100b
-&device.id pci 0x0030
-+device.name REDCLOUD
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100b
-&device.id pci 0x0104
-+device.name SC1400
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100b
-&device.id pci 0x0504
-+device.name SC1200
-+driver.xfree 4|nsc
-
- vendor.id pci 0x100c
-+vendor.name Tseng Labs Inc
-
- vendor.id pci 0x100c
-&device.id pci 0x3202
-+device.name ET4000/W32p rev A
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3205
-+device.name ET4000/W32p rev B
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3206
-+device.name ET4000/W32p rev C
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3207
-+device.name ET4000/W32p rev D
-+driver.xfree 4|tseng
-
- vendor.id pci 0x100c
-&device.id pci 0x3208
-+device.name ET6000
-+driver.xfree 4|tseng
-
- vendor.id pci 0x1013
-+vendor.name Cirrus Logic
-
- vendor.id pci 0x1013
-&device.id pci 0x0038
-+device.name GD 7548
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00a0
-+device.name GD 5430/40 [Alpine]
-+driver.xfree 4|cirrus||||Noaccel
-
- vendor.id pci 0x1013
-&device.id pci 0x00a4
-+device.name GD 5434-4 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00a8
-+device.name GD 5434-8 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00ac
-+device.name GD 5436 [Alpine]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00b8
-+device.name GD 5446
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00bc
-+device.name GD 5480
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d0
-+device.name GD 5462
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d4
-+device.name GD 5464 [Laguna]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d5
-+device.name GD5464BD
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1013
-&device.id pci 0x00d6
-+device.name GD 5465 [Laguna]
-+driver.xfree 4|cirrus
-
- vendor.id pci 0x1023
-+vendor.name Trident Microsystems Inc.
-
- vendor.id pci 0x1023
-&device.id pci 0x2100
-+device.name CyberBlade/xp4
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8400
-+device.name CyberBlade/i7
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8420
-+device.name CyberBlade/i7d
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8500
-+device.name CyberBlade/i1
-+driver.xfree 4|trident||||CyberStretch,sw_cursor
-
- vendor.id pci 0x1023
-&device.id pci 0x8520
-+device.name 8520
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8600
-+device.name 8600
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8620
-+device.name CyberBlade/DSTN/Ai1
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x8820
-+device.name 8820
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9320
-+device.name 9320
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9388
-+device.name Cyber 9388
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9397
-+device.name Cyber 9397
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x939a
-+device.name Cyber 9397DVD
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9420
-+device.name TGUI 9420
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9440
-+device.name TGUI 9440
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9520
-+device.name Cyber 9520
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9525
-+device.name Cyber 9525
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9540
-+device.name Cyber 9540
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9660
-+device.name TGUI 9660/968x/968x
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9750
-+device.name 3DIm`age 975
-+driver.xfree 4|trident|||||8,15,16,24
-
- vendor.id pci 0x1023
-&device.id pci 0x9850
-+device.name 3DImage 9850
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9880
-+device.name 9880
-+driver.xfree 4|trident
-
- vendor.id pci 0x1023
-&device.id pci 0x9910
-+device.name 9910
-+driver.xfree 4|trident
-
- vendor.id pci 0x102b
-+vendor.name Matrox Graphics, Inc.
-
- vendor.id pci 0x102b
-&device.id pci 0x0519
-+device.name MGA 2064W [Millennium]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-+device.name MGA 1064SG [Mystique]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051b
-+device.name MGA 2164W [Millennium II]
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x051f
-+device.name MGA 2164W [Millennium II] AGP
-+driver.xfree 4|mga||||NoHal
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-+device.name MGA G200
-+driver.xfree 4|mga|||||8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x0521
-+device.name MGA G200 AGP
-+driver.xfree 4|mga|||||8,16,24
-+driver.xfree.config VideoRam 8192
-+driver.xfree 4|mga|3d||dri||16
-+driver.xfree.config VideoRam 8192
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-+device.name MGA G400 AGP
-+driver.xfree 4|mga
-+driver.xfree 4|mga|3d||dri
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0540
-+subdevice.name G450-0540
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0541
-+subdevice.name G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0641
-+subdevice.name Matrox G400 DH-0641
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x07c0
-+subdevice.name G450 LE
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d41
-+subdevice.name G450 DH G450
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x0d43
-+subdevice.name G450 PCI
-+driver.xfree 4|mga
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x2179
-+subdevice.name G400 DH
-
- vendor.id pci 0x102b
-&device.id pci 0x0525
-&subvendor.id pci 0x102b
-&subdevice.id pci 0x23c3
-+subdevice.name G450-23c3
-
- vendor.id pci 0x102b
-&device.id pci 0x1000
-+device.name MGA G100 [Productiva]
-+driver.xfree 4|mga||||NoHal
-
- vendor.id pci 0x102b
-&device.id pci 0x1001
-+device.name MGA G100 [Productiva] AGP
-+driver.xfree 4|mga||||NoHal|8,16,24
-
- vendor.id pci 0x102b
-&device.id pci 0x2527
-+device.name G550
-+driver.xfree 4|mga
-+driver.xfree 4|mga|3d||dri
-
- vendor.id pci 0x102c
-+vendor.name Chips and Technologies
-
- vendor.id pci 0x102c
-&device.id pci 0x00c0
-+device.name F69000 HiQVideo
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00d8
-+device.name F65545
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00dc
-+device.name F65548
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e0
-+device.name 65550
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e4
-+device.name F65554
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00e5
-+device.name F65555 HiQVPro
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x00f4
-+device.name F68554 HiQVision
-+driver.xfree 4|chips
-
- vendor.id pci 0x102c
-&device.id pci 0x0c30
-+device.name 69030
-+driver.xfree 4|chips
-
- vendor.id pci 0x1039
-+vendor.name Silicon Integrated Systems Corp.
-
- vendor.id pci 0x1039
-&device.id pci 0x0200
-+device.name 5597/5598 VGA
-+driver.xfree 4|sis|||||16,24
-
- vendor.id pci 0x1039
-&device.id pci 0x0300
-+device.name SIS300
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0310
-+device.name SiS315H
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0325
-+device.name SiS315PRO
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x0330
-+device.name SiS330
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x5300
-+device.name SiS540 PCI Display Adapter
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x5315
-+device.name SiS550
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6300
-+device.name SiS630 GUI Accelerator+3D
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6306
-+device.name 6306 3D-AGP
-+driver.xfree 4|sis|||||16
-
- vendor.id pci 0x1039
-&device.id pci 0x6325
-+device.name SiS650
-+driver.xfree 4|sis
-
- vendor.id pci 0x1039
-&device.id pci 0x6326
-+device.name 86C326
-+driver.xfree 4|sis|||||8,16,24
-
- vendor.id pci 0x1039
-&device.id pci 0x6330
-+device.name SiS 660
-+driver.xfree 4|sis
-
- vendor.id pci 0x104c
-+vendor.name Texas Instruments
-
- vendor.id pci 0x104c
-&device.id pci 0x3d04
-+device.name TVP4010 [Permedia]
-+driver.xfree 4|glint
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-+device.name TVP4020 [Permedia 2]
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x105d
-+vendor.name Number 9 Computer Company
-
- vendor.id pci 0x105d
-&device.id pci 0x2309
-+device.name Imagine 128
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x2339
-+device.name Imagine 128-II
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x493d
-+device.name Imagine 128 T2R [Ticket to Ride]
-+driver.xfree 4|i128
-
- vendor.id pci 0x105d
-&device.id pci 0x5348
-+device.name Revolution 4
-+driver.xfree 4|i128
-
- vendor.id pci 0x1078
-+vendor.name Cyrix Corporation
-
- vendor.id pci 0x1078
-&device.id pci 0x0000
-+device.name 5510
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x1078
-&device.id pci 0x0002
-+device.name 5520 [Cognac]
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x1078
-&device.id pci 0x0104
-+device.name 5530 Video [Kahlua]
-+driver.xfree 4|cyrix
-
- vendor.id pci 0x10c8
-+vendor.name Neomagic Corporation
-
- vendor.id pci 0x10c8
-&device.id pci 0x0001
-+device.name NM2070 [MagicGraph NM2070]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0002
-+device.name NM2090 [MagicGraph 128V]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0003
-+device.name NM2093 [MagicGraph 128ZV]
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0004
-+device.name NM2160 [MagicGraph 128XD]
-+driver.xfree 4|neomagic|||||8,16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0005
-+device.name MagicMedia 256AV
-+driver.xfree 4|neomagic|||||8,16,24
-
- vendor.id pci 0x10c8
-&device.id pci 0x0006
-+device.name NM2360 [MagicMedia 256ZX]
-+driver.xfree 4|neomagic|||||16
-
- vendor.id pci 0x10c8
-&device.id pci 0x0016
-+device.name 256XL(2380)
-+driver.xfree 4|neomagic|||||8,16,24
-+driver.xfree.config VideoRam 4096
-
- vendor.id pci 0x10c8
-&device.id pci 0x0025
-+device.name NM2230
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10c8
-&device.id pci 0x0083
-+device.name MagicGraph 128ZV Plus
-+driver.xfree 4|neomagic
-
- vendor.id pci 0x10de
-+vendor.name nVidia Corporation
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name RIVA TNT
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-+device.name RIVA TNT2/TNT2 Pro
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-+device.name RIVA TNT2 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x002a
-+device.name Unknown TNT2
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-+device.name Vanta/Vanta LT
-+driver.xfree 4|nv|||||8,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-+device.name RIVA TNT2 Model 64/Model 64 Pro
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-+device.name Aladdin TNT2
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-+device.name GeForce 256
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-+device.name GeForce DDR
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0103
-+device.name Quadro
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-+device.name GeForce2 MX/MX 400
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0111
-+device.name GeForce2 MX 100/200
-+driver.xfree 4|nv||||sw_cursor
-
- vendor.id pci 0x10de
-&device.id pci 0x0112
-+device.name GeForce2 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-
- vendor.id pci 0x10de
-&device.id pci 0x0113
-+device.name Quadro2 MXR/EX/Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-+device.name GeForce2 GTS/GeForce2 Pro
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-+device.name GeForce2 Ti
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-+device.name GeForce2 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0153
-+device.name Quadro2 Pro
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0170
-+device.name GeForce4 MX 460
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-+device.name GeForce4 MX 440
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0172
-+device.name GeForce4 MX 420
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0173
-+device.name GeForce4 MX 440-SE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0174
-+device.name GeForce4 440 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0175
-+device.name GeForce4 420 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-+device.name GeForce4 420 Go 32M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-&subvendor.id pci 0x1584
-&subdevice.id pci 0x2241
-+subdevice.name GeForce4 Go DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d||||16
-
- vendor.id pci 0x10de
-&device.id pci 0x0177
-+device.name GeForce4 460 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-+device.name Quadro4 550 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0151
-+subdevice.name Quadro4 550 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0179
-+device.name GeForce4 440 Go 64M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017a
-+device.name Quadro4 NVS
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x017c
-+device.name Quadro4 500 GoGL
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017d
-+device.name GeForce4 410 Go 16M
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-+device.name GeForce4 MX 440 with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0182
-+device.name GeForce4 MX 440SE with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0183
-+device.name GeForce4 MX 420 with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0186
-+device.name GeForce4 448 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0187
-+device.name GeForce4 488 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0188
-+device.name Quadro4 580 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0189
-+device.name GeForce4 MX with AGP8X (Mac)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x018a
-+device.name Quadro NVS with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x018b
-+device.name Quadro4 380 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x01a0
-+device.name GeForce2 Integrated GPU
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x01f0
-+device.name GeForce4 MX Integrated GPU
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0200
-+device.name GeForce3
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0201
-+device.name GeForce3 Ti 200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-+device.name GeForce3 Ti 500
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0203
-+device.name Quadro DCC
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-+device.name GeForce4 Ti 4600
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-&subvendor.id pci 0x1462
-&subdevice.id pci 0x8725
-+subdevice.name GeForce4 Ti 4600 DH
-+driver.xfree 4|nv
-+driver.xfree 4|nvidia|3d
-
- vendor.id pci 0x10de
-&device.id pci 0x0251
-+device.name GeForce4 Ti 4400
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0252
-+device.name NV25
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-+device.name GeForce4 Ti 4200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-+device.name Quadro4 900 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0138
-+subdevice.name Quadro4 900 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-+device.name Quadro4 750 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0139
-+subdevice.name Quadro4 750 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-+device.name Quadro4 700 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x013b
-+subdevice.name Quadro4 700 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0280
-+device.name GeForce4 Ti 4800
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0281
-+device.name GeForce4 Ti 4200 with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0282
-+device.name GeForce4 Ti 4800 SE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0286
-+device.name GeForce4 4200 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-+device.name Quadro4 980 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0174
-+subdevice.name Quadro4 980 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0289
-+device.name Quadro4 780 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x028c
-+device.name Quadro4 700 GoGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0301
-+device.name GeForce FX 5800 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0302
-+device.name GeForce FX 5800
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-+device.name Quadro FX 2000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0183
-+subdevice.name Quadro FX2000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-+device.name Quadro FX 1000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0182
-+subdevice.name Quadro FX1000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0311
-+device.name GeForce FX 5600 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0312
-+device.name GeForce FX 5600
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0313
-+device.name 0x0313
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0314
-+device.name GeForce FX 5600XT
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0316
-+device.name 0x0316
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0317
-+device.name 0x0317
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031a
-+device.name GeForce FX Go5600
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031b
-+device.name GeForce FX Go5650
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031c
-+device.name Quadro FX Go700
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031d
-+device.name 0x031d
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031e
-+device.name 0x031e
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031f
-+device.name 0x031f
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0320
-+device.name GeForce FX 5200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0321
-+device.name GeForce FX 5200 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-+device.name GeForce FX 5200 (0x0322)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0323
-+device.name GeForce FX 5200LE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0324
-+device.name GeForce FX Go5200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0325
-+device.name GeForce FX Go5250
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0328
-+device.name GeForce FX Go5200 32M/64M
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0329
-+device.name GeForce FX 5200 (Mac)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032a
-+device.name Quadro NVS 280 PCI
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032b
-+device.name Quadro FX 500/600 PCI
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032c
-+device.name GeForce FX Go53xx
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032d
-+device.name GeForce FX Go5100
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032f
-+device.name 0x032F
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0330
-+device.name GeForce FX 5900 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0331
-+device.name GeForce FX 5900
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0332
-+device.name GeForce FX 5900XT
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-+device.name GeForce FX 5950 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0602
-+subdevice.name GeForce FX 5950
-
- vendor.id pci 0x10de
-&device.id pci 0x0334
-+device.name GeForce FX 5900ZT
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-+device.name Quadro FX 3000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x01c2
-+subdevice.name Quadro FX 3000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-+device.name GeForce FX 5700 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x194c
-+subdevice.name GeForce FX 5700 Ultra DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0342
-+device.name GeForce FX 5700
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0343
-+device.name GeForce FX 5700LE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0344
-+device.name GeForce FX 5700VE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0345
-+device.name 0x0345
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0347
-+device.name GeForce FX Go5700
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0348
-+device.name GeForce FX Go5700 (0x0348)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0349
-+device.name 0x0349
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034b
-+device.name 0x034b
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034c
-+device.name Quadro FX Go1000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034e
-+device.name Quadro FX 1100
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034f
-+device.name 0x034f
-+driver.xfree 4|nv
-
- vendor.id pci 0x10e0
-+vendor.name Imstt
-
- vendor.id pci 0x10e0
-&device.id pci 0x9128
-+device.name Imstt128
-+driver.xfree 4|imstt
-
- vendor.id pci 0x10e0
-&device.id pci 0x9135
-+device.name Imstt3D
-+driver.xfree 4|imstt
-
- vendor.id pci 0x1106
-+vendor.name VIA Technologies, Inc.
-
- vendor.id pci 0x1106
-&device.id pci 0x3022
-+device.name VIA CLE 3022
-+driver.xfree 4|via
-
- vendor.id pci 0x1106
-&device.id pci 0x3122
-+device.name VIA CLE 3122
-+driver.xfree 4|via
-
- vendor.id pci 0x1106
-&device.id pci 0x7205
-+device.name VIA VT 7205
-+driver.xfree 4|via
-
- vendor.id pci 0x1142
-+vendor.name Alliance Semiconductor Corporation
-
- vendor.id pci 0x1142
-&device.id pci 0x6422
-+device.name ProVideo 6422
-+driver.xfree 4|apm
-
- vendor.id pci 0x1142
-&device.id pci 0x6424
-+device.name ProVideo 6424
-+driver.xfree 4|apm
-
- vendor.id pci 0x1163
-+vendor.name Rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x0001
-+device.name Verite 1000
-+driver.xfree 4|rendition
-
- vendor.id pci 0x1163
-&device.id pci 0x2000
-+device.name Verite V2000/V2100/V2200
-+driver.xfree 4|rendition
-
- vendor.id pci 0x121a
-+vendor.name 3Dfx Interactive, Inc.
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-+device.name Voodoo Banshee
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x121a
-&device.id pci 0x0005
-+device.name Voodoo 3
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x121a
-&device.id pci 0x0009
-+device.name Voodoo5 5500
-+driver.xfree 4|tdfx|||||8,16,24
-+driver.xfree 4|tdfx|3d||dri||16
-
- vendor.id pci 0x126f
-+vendor.name Silicon Motion, Inc.
-
- vendor.id pci 0x126f
-&device.id pci 0x0710
-+device.name SM710 LynxEM
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0712
-+device.name SM712 LynxEM+
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0720
-+device.name SM720 Lynx3DM
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0730
-+device.name SMI 731
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0810
-+device.name SM810 LynxE
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0820
-+device.name 820
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x126f
-&device.id pci 0x0910
-+device.name SM910
-+driver.xfree 4|siliconmotion
-
- vendor.id pci 0x12d2
-+vendor.name NVidia / SGS Thomson (Joint Venture)
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-+device.name Riva128
-+driver.xfree 4|nv|||||15,24
-
- vendor.id pci 0x15ad
-+vendor.name VMWare Inc
-
- vendor.id pci 0x15ad
-&device.id pci 0x0405
-+device.name VMWARE0405
-+driver.xfree 4|vmware
-
- vendor.id pci 0x15ad
-&device.id pci 0x0710
-+device.name VMWARE0710
-+driver.xfree 4|vmware
-
- vendor.id pci 0x3d3d
-+vendor.name 3DLabs
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0002
-+device.name GLINT 500TX
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0004
-+device.name Permedia
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0006
-+device.name GLINT MX
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0007
-+device.name 3D Extreme
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-+device.name Permedia II 2D+3D
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000a
-+device.name GLINT R3
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000c
-+device.name Permedia 4
-+driver.xfree 4|glint
-
- vendor.id pci 0x3d3d
-&device.id pci 0x000d
-+device.name R4
-+driver.xfree 4|glint
-
- vendor.id pci 0x5333
-+vendor.name S3 Inc.
-
- vendor.id pci 0x5333
-&device.id pci 0x5631
-+device.name 86c325 [ViRGE]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8811
-+device.name 86c764/765 [Trio32/64/64V+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8812
-+device.name 86cM65 [Aurora64V+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8814
-+device.name 86c767 [Trio 64UV+]
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x883d
-+device.name 86c988 [ViRGE/VX]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8901
-+device.name Trio 64V2/DX or /GX
-+driver.xfree 4|s3
-
- vendor.id pci 0x5333
-&device.id pci 0x8904
-+device.name Integrated Trio3D
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a01
-+device.name ViRGE/DX
-+driver.xfree 4|s3virge||||noVBE
-
- vendor.id pci 0x5333
-&device.id pci 0x8a10
-+device.name ViRGE/GX2
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a13
-+device.name 86c368 [Trio 3D/2X]
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8a20
-+device.name 86c794 [Savage 3D]
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a21
-+device.name 86c795 [Savage 3D/MV]
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a22
-+device.name Savage 4
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a25
-+device.name ProSavage PM 133
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8a26
-+device.name ProSavage KM 133
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c01
-+device.name ViRGE/MX
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8c03
-+device.name ViRGE/MX+MV
-+driver.xfree 4|s3virge
-
- vendor.id pci 0x5333
-&device.id pci 0x8c10
-+device.name 86C270-294 Savage/MX-/IX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c11
-+device.name Savage MX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-+device.name Savage IX/MV
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c12
-&subvendor.id pci 0x1014
-&subdevice.id pci 0x017f
-+subdevice.name Savage IX/MV IBM
-+driver.xfree 4|savage||||ShadowStatus
-
- vendor.id pci 0x5333
-&device.id pci 0x8c13
-+device.name Savage IX
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c22
-+device.name SuperSavage/MX 128
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c24
-+device.name SuperSavage/MX 64
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c26
-+device.name SuperSavage/MX 64C
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2a
-+device.name SuperSavage/IX 128 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2b
-+device.name SuperSavage/IX 128 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2c
-+device.name SuperSavage/IX 64 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2d
-+device.name SuperSavage/IX 64 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2e
-+device.name SuperSavage/IXC 64 SDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8c2f
-+device.name SuperSavage/IXC 64 DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d01
-+device.name S3Twister_P
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d02
-+device.name Twister_K
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d03
-+device.name ProSavage DDR
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x8d04
-+device.name ProSavage DDR-K
-+driver.xfree 4|savage
-
- vendor.id pci 0x5333
-&device.id pci 0x9102
-+device.name 86C410 Savage 2000
-+driver.xfree 4|savage
-
- vendor.id pci 0x8086
-+vendor.name Intel Corporation
-
- vendor.id pci 0x8086
-&device.id pci 0x00d1
-+device.name i740_PCI
-+driver.xfree 4|i740
-
- vendor.id pci 0x8086
-&device.id pci 0x1132
-+device.name I815
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x2562
-+device.name i845
-+driver.xfree 4|i810
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x2572
-+device.name 865 G
-+driver.xfree 4|i810
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x3577
-+device.name i830
-+driver.xfree 4|i810
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x3582
-+device.name 855 GM
-+driver.xfree 4|i810
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x7121
-+device.name 82810 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x7123
-+device.name 82810-DC100 CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x7125
-+device.name 82810E CGC [Chipset Graphics Controller]
-+driver.xfree 4|i810|||||8,16,24
-+driver.xfree 4|i810|3d||dri||16
-+driver.xfree.config VideoRam 16384
-
- vendor.id pci 0x8086
-&device.id pci 0x7800
-+device.name i740
-+driver.xfree 4|i740
-
- vendor.id pci 0xedd8
-+vendor.name ARK Logic Inc
-
- vendor.id pci 0xedd8
-&device.id pci 0xa091
-+device.name 1000PV [Stingray]
-+driver.xfree 4|ark
-
- vendor.id pci 0xedd8
-&device.id pci 0xa099
-+device.name 2000PV [Stingray]
-+driver.xfree 4|ark
-
- vendor.id pci 0xedd8
-&device.id pci 0xa0a1
-+device.name 2000MT
-+driver.xfree 4|ark
-
+++ /dev/null
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x4136
-+device.name RS100 4136
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4137
-+device.name RS100 4137
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4144
-+device.name R300 AD
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4145
-+device.name E300 AE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4146
-+device.name R300 AF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4147
-+device.name R300 AG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4148
-+device.name R350 AH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4149
-+device.name R350 AI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414a
-+device.name R350 AJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x414b
-+device.name R350 AK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4150
-+device.name RV350 AP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4151
-+device.name RV350 AQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4152
-+device.name RV350 AR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4153
-+device.name RV350 AS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4154
-+device.name RV350 AT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4155
-+device.name RV350 AU
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4156
-+device.name RV350 AV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4157
-+device.name RV350 AW
-+driver.xfree 4|radeon
-+driver.xfree.config ChipID 0x4154
-
- vendor.id pci 0x1002
-&device.id pci 0x4237
-+device.name RS250 4237
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4242
-+device.name R200 BB
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4243
-+device.name R200 BC
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4336
-+device.name RS100 4336
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4337
-+device.name RS200 4337
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4437
-+device.name RS250 4437
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4742
-+device.name 3D Rage Pro AGP 1X/2X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4744
-+device.name 3D Rage Pro AGP 1X
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4749
-+device.name Mach64 GI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474c
-+device.name Rage XC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474d
-+device.name Rage XL AGP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474e
-+device.name Rage XC AGP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-+device.name Rage XL
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-+device.name 3D Rage Pro 215GP
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4751
-+device.name 3D Rage Pro 215GQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4752
-+device.name Mach64 GR
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4753
-+device.name Mach64 GS
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4755
-+device.name 3D Rage II+ 215GTB [Mach64 GTB]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4757
-+device.name 3D Rage IIC AGP
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4758
-+device.name 210888GX [Mach64 GX]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4759
-+device.name 3D Rage IIC
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x475a
-+device.name Mach64 GZ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-+device.name RV250 If
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4966
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9000
-
- vendor.id pci 0x1002
-&device.id pci 0x4967
-+device.name RV250 Ig
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-+device.name Mach64 LB
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c42
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0044
-+subdevice.name 3D Rage LT Pro AGP-133
-+driver.xfree 4|ati
-+driver.xfree.config Option "dpms" "off"
-
- vendor.id pci 0x1002
-&device.id pci 0x4c44
-+device.name 3D Rage LT Pro AGP-66
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c45
-+device.name Rage 128 Mobility LE
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x4c46
-+device.name Mobility M3 AGP 2x
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri|dpms,usefbdev|16||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x1002
-&device.id pci 0x4c47
-+device.name 3D Rage LT-G 215LG
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c49
-+device.name Mach64 LI
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4d
-+device.name 3D Rage P/M Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c4e
-+device.name 3D Rage L Mobility AGP 2x
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-+device.name 3D Rage LT Pro
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c51
-+device.name Mach64 LQ
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name 3D Rage P/M Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c53
-+device.name 3D Rage L Mobility
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x4c57
-+device.name Radeon LW
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c58
-+device.name Radeon LX
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c59
-+device.name Radeon LY
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c5a
-+device.name Radeon LZ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c64
-+device.name RV250 Ld
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c66
-+device.name RV250 Lf
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4c67
-+device.name RV250 Lg
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4d46
-+device.name Rage 128 Mobility MF
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x4d4c
-+device.name Rage 128 Mobility ML
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-+device.name R300 ND
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e44
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0002
-+subdevice.name Radeon 9700
-
- vendor.id pci 0x1002
-&device.id pci 0x4e45
-+device.name R300 NE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e46
-+device.name R300 NF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-+device.name R300 NG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e47
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL X1
-
- vendor.id pci 0x1002
-&device.id pci 0x4e48
-+device.name R350 NH
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e49
-+device.name R350 NI
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4a
-+device.name R360 NJ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e4b
-+device.name R350 NK
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e50
-+device.name RV350 NP
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e51
-+device.name RV350 NQ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e52
-+device.name RV350 NR
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e53
-+device.name RV350 NS
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e54
-+device.name RV350 NT
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x4e56
-+device.name RV350 NV
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5041
-+device.name Rage 128 PA
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5042
-+device.name Rage 128 PB
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5043
-+device.name Rage 128 PC
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5044
-+device.name Rage 128 PD
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5045
-+device.name Rage 128 PE
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5046
-+device.name Rage 128 PF
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri|dpms,usefbdev|16,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x1002
-&device.id pci 0x5047
-+device.name Rage 128 PG
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5048
-+device.name Rage 128 PH
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5049
-+device.name Rage 128 PI
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x504a
-+device.name Rage 128 PJ
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x504b
-+device.name Rage 128 PK
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x504c
-+device.name Rage 128 PL
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x504d
-+device.name Rage 128 PM
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x504e
-+device.name Rage 128 PN
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x504f
-+device.name Rage 128 PO
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5050
-+device.name Rage 128 PP
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5051
-+device.name Rage 128 PQ
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5052
-+device.name Rage 128 PR
-+driver.xfree 4|r128
-+driver.xfree 4|r128|3d||dri|dpms,usefbdev|16||switch2xf86_glx
-+driver.xfree.config ati_r128_rl
-+requires xf86_glx
-
- vendor.id pci 0x1002
-&device.id pci 0x5053
-+device.name Rage 128 PS
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5054
-+device.name Rage 128 PT
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5055
-+device.name Rage 128 PU
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5056
-+device.name Rage 128 PV
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5057
-+device.name Rage 128 PW
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5058
-+device.name Rage 128 PX
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5144
-+device.name Radeon QD
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5145
-+device.name Radeon QE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5146
-+device.name Radeon QF
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5147
-+device.name Radeon QG
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-+device.name fgl8x00
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0152
-+subdevice.name FireGL 8800
-
- vendor.id pci 0x1002
-&device.id pci 0x5148
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x0172
-+subdevice.name FireGL 8700
-
- vendor.id pci 0x1002
-&device.id pci 0x514c
-+device.name R200 QL
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x514d
-+device.name Radeon 9100 QM
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-+device.name RV200 QW
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x013a
-+subdevice.name Radeon 7500
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7146
-+subdevice.name Radeon 7500-7146
-
- vendor.id pci 0x1002
-&device.id pci 0x5157
-&subvendor.id pci 0x174b
-&subdevice.id pci 0x7161
-+subdevice.name Radeon 7500 LE
-
- vendor.id pci 0x1002
-&device.id pci 0x5158
-+device.name RV200 QX
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5159
-+device.name Radeon VE
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x515a
-+device.name Radeon QZ
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5245
-+device.name Rage 128 RE
-+driver.xfree 4|r128|||||8,15,16,24
-+driver.xfree 4|r128|3d||dri|dpms,usefbdev|16,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id pci 0x1002
-&device.id pci 0x5246
-+device.name Rage 128 RF
-+driver.xfree 4|r128|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5247
-+device.name Rage 128 RG
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x524b
-+device.name Rage 128 RK
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x524c
-+device.name Rage 128 RL
-+driver.xfree 4|r128|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5345
-+device.name Rage 128 SE
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5346
-+device.name Rage 128 SF
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5347
-+device.name Rage 128 SG
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5348
-+device.name Rage 128 4x
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x534b
-+device.name Rage 128 SK
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x534c
-+device.name Rage 128 SL
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x534d
-+device.name Rage 128 SM
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x534e
-+device.name Rage 128 SN
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5446
-+device.name Rage 128 Ultra TF
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x544c
-+device.name Rage128 TL
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5452
-+device.name Rage 128 Pro TR (AGP)
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5453
-+device.name Rage 128 TS
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5454
-+device.name Rage 128 TT
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5455
-+device.name Rage 128 TU
-+driver.xfree 4|r128
-
- vendor.id pci 0x1002
-&device.id pci 0x5654
-+device.name Mach64 VT
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-+driver.xfree 4|ati
-
- vendor.id pci 0x1002
-&device.id pci 0x5834
-+device.name RS300 5834
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5835
-+device.name RS300 5835
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5960
-+device.name RV280 5960
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5961
-+device.name RV280 5961
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5962
-+device.name RV280 5962
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-+device.name RV280 5964
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5964
-&subvendor.id pci 0x17af
-&subdevice.id pci 0x2012
-+subdevice.name Radeon 9200 SE (DH)
-
- vendor.id pci 0x1002
-&device.id pci 0x5c61
-+device.name RV280 5c61
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1002
-&device.id pci 0x5c63
-+device.name RV280 5c63
-+driver.xfree 4|radeon
-
- vendor.id pci 0x1013
-+vendor.name Cirrus Logic
-
- vendor.id pci 0x1013
-&device.id pci 0x00b8
-+device.name GD 5446
-+driver.xfree 4|fbdev||||dpms,usefbdev
-
- vendor.id pci 0x102b
-+vendor.name Matrox Graphics, Inc.
-
- vendor.id pci 0x102b
-&device.id pci 0x0519
-+device.name MGA 2064W [Millennium]
-+driver.xfree 4|mga||||DDCInfo,dpms,hw_cursor|8,15,16,24,32
-
- vendor.id pci 0x102b
-&device.id pci 0x051a
-+device.name MGA 1064SG [Mystique]
-+driver.xfree 4|fbdev||||dpms,hw_cursor|16,24
-+driver.xfree.config DacSpeed 200
-
- vendor.id pci 0x102b
-&device.id pci 0x0520
-+device.name MGA G200
-+driver.xfree 4|fbdev||||dpms,hw_cursor|16,24
-+driver.xfree.config DacSpeed 200 200 200 200
-
- vendor.id pci 0x10de
-+vendor.name nVidia Corporation
-
- vendor.id pci 0x10de
-&device.id pci 0x0020
-+device.name RIVA TNT
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0028
-+device.name RIVA TNT2/TNT2 Pro
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0029
-+device.name RIVA TNT2 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x002a
-+device.name Unknown TNT2
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x002c
-+device.name Vanta/Vanta LT
-+driver.xfree 4|nv|||||8,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x002d
-+device.name RIVA TNT2 Model 64/Model 64 Pro
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x00a0
-+device.name Aladdin TNT2
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0100
-+device.name GeForce 256
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0101
-+device.name GeForce DDR
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0103
-+device.name Quadro
-+driver.xfree 4|nv|||||8,15,16,24
-
- vendor.id pci 0x10de
-&device.id pci 0x0110
-+device.name GeForce2 MX/MX 400
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0111
-+device.name GeForce2 MX 100/200
-+driver.xfree 4|nv||||sw_cursor
-
- vendor.id pci 0x10de
-&device.id pci 0x0112
-+device.name GeForce2 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-
- vendor.id pci 0x10de
-&device.id pci 0x0113
-+device.name Quadro2 MXR/EX/Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0150
-+device.name GeForce2 GTS/GeForce2 Pro
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0151
-+device.name GeForce2 Ti
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0152
-+device.name GeForce2 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0153
-+device.name Quadro2 Pro
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0170
-+device.name GeForce4 MX 460
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0171
-+device.name GeForce4 MX 440
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0172
-+device.name GeForce4 MX 420
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0173
-+device.name GeForce4 MX 440-SE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0174
-+device.name GeForce4 440 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0175
-+device.name GeForce4 420 Go
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0176
-+device.name GeForce4 420 Go 32M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x0177
-+device.name GeForce4 460 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-+device.name Quadro4 550 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0178
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0151
-+subdevice.name Quadro4 550 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0179
-+device.name GeForce4 440 Go 64M
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017a
-+device.name Quadro4 NVS
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x017c
-+device.name Quadro4 500 GoGL
-+driver.xfree 4|nv
-+driver.xfree.config #Option "CrtcNumber" "0"
-+driver.xfree.config #Option "CrtcNumber" "1"
-
- vendor.id pci 0x10de
-&device.id pci 0x017d
-+device.name GeForce4 410 Go 16M
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0181
-+device.name GeForce4 MX 440 with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0182
-+device.name GeForce4 MX 440SE with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0183
-+device.name GeForce4 MX 420 with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0186
-+device.name GeForce4 448 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0187
-+device.name GeForce4 488 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0188
-+device.name Quadro4 580 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0189
-+device.name GeForce4 MX with AGP8X (Mac)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x018a
-+device.name Quadro NVS with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x018b
-+device.name Quadro4 380 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x01a0
-+device.name GeForce2 Integrated GPU
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x01f0
-+device.name GeForce4 MX Integrated GPU
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0200
-+device.name GeForce3
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0201
-+device.name GeForce3 Ti 200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0202
-+device.name GeForce3 Ti 500
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0203
-+device.name Quadro DCC
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0250
-+device.name GeForce4 Ti 4600
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0251
-+device.name GeForce4 Ti 4400
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0252
-+device.name NV25
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0253
-+device.name GeForce4 Ti 4200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-+device.name Quadro4 900 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0258
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0138
-+subdevice.name Quadro4 900 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-+device.name Quadro4 750 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0259
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0139
-+subdevice.name Quadro4 750 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-+device.name Quadro4 700 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x025b
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x013b
-+subdevice.name Quadro4 700 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0280
-+device.name GeForce4 Ti 4800
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0281
-+device.name GeForce4 Ti 4200 with AGP8X
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0282
-+device.name GeForce4 Ti 4800 SE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0286
-+device.name GeForce4 4200 Go
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-+device.name Quadro4 980 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0288
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0174
-+subdevice.name Quadro4 980 XGL DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0289
-+device.name Quadro4 780 XGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x028c
-+device.name Quadro4 700 GoGL
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0301
-+device.name GeForce FX 5800 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0302
-+device.name GeForce FX 5800
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-+device.name Quadro FX 2000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0308
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0183
-+subdevice.name Quadro FX2000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-+device.name Quadro FX 1000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0309
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x0182
-+subdevice.name Quadro FX1000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0311
-+device.name GeForce FX 5600 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0312
-+device.name GeForce FX 5600
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0313
-+device.name 0x0313
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0314
-+device.name GeForce FX 5600XT
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0316
-+device.name 0x0316
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0317
-+device.name 0x0317
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031a
-+device.name GeForce FX Go5600
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031b
-+device.name GeForce FX Go5650
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031c
-+device.name Quadro FX Go700
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031d
-+device.name 0x031d
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031e
-+device.name 0x031e
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x031f
-+device.name 0x031f
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0320
-+device.name GeForce FX 5200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0321
-+device.name GeForce FX 5200 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0322
-+device.name GeForce FX 5200 (0x0322)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0323
-+device.name GeForce FX 5200LE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0324
-+device.name GeForce FX Go5200
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0325
-+device.name GeForce FX Go5250
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0328
-+device.name GeForce FX Go5200 32M/64M
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0329
-+device.name GeForce FX 5200 (Mac)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032a
-+device.name Quadro NVS 280 PCI
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032b
-+device.name Quadro FX 500/600 PCI
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032c
-+device.name GeForce FX Go53xx
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032d
-+device.name GeForce FX Go5100
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x032f
-+device.name 0x032F
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0330
-+device.name GeForce FX 5900 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0331
-+device.name GeForce FX 5900
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0332
-+device.name GeForce FX 5900XT
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-+device.name GeForce FX 5950 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0333
-&subvendor.id pci 0x10b0
-&subdevice.id pci 0x0602
-+subdevice.name GeForce FX 5950
-
- vendor.id pci 0x10de
-&device.id pci 0x0334
-+device.name GeForce FX 5900ZT
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-+device.name Quadro FX 3000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0338
-&subvendor.id pci 0x10de
-&subdevice.id pci 0x01c2
-+subdevice.name Quadro FX 3000 DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-+device.name GeForce FX 5700 Ultra
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0341
-&subvendor.id pci 0x270f
-&subdevice.id pci 0x194c
-+subdevice.name GeForce FX 5700 Ultra DH
-
- vendor.id pci 0x10de
-&device.id pci 0x0342
-+device.name GeForce FX 5700
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0343
-+device.name GeForce FX 5700LE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0344
-+device.name GeForce FX 5700VE
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0345
-+device.name 0x0345
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0347
-+device.name GeForce FX Go5700
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0348
-+device.name GeForce FX Go5700 (0x0348)
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x0349
-+device.name 0x0349
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034b
-+device.name 0x034b
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034c
-+device.name Quadro FX Go1000
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034e
-+device.name Quadro FX 1100
-+driver.xfree 4|nv
-
- vendor.id pci 0x10de
-&device.id pci 0x034f
-+device.name 0x034f
-+driver.xfree 4|nv
-
- vendor.id pci 0x121a
-+vendor.name 3Dfx Interactive, Inc.
-
- vendor.id pci 0x121a
-&device.id pci 0x0003
-+device.name Voodoo Banshee
-+driver.xfree 4|fbdev|||||24
-
- vendor.id pci 0x12d2
-+vendor.name NVidia / SGS Thomson (Joint Venture)
-
- vendor.id pci 0x12d2
-&device.id pci 0x0018
-+device.name Riva128
-+driver.xfree 4|nv|||||15,24
-
+++ /dev/null
-# x11 ppc data not in CDB
-
- vendor.id pci 0x106b
-&device.id pci 0x0003
-+driver.xfree 4|fbdev
-
- vendor.id special 0x0401
-&device.id special 0x3000
-+driver.xfree 4|fbdev
-
- vendor.id special 0x0401
-&device.id special 0x3001
-+driver.xfree 3|FBDev
-
+++ /dev/null
- vendor.id pci 0x1002
-+vendor.name ATI Technologies Inc
-
- vendor.id pci 0x1002
-&device.id pci 0x0084
-+device.name RageIIC
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x0088
-+device.name Mach64
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4158
-+device.name 68800AX [Mach32]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4354
-+device.name 215CT [Mach64 CT]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4358
-+device.name 210888CX [Mach64 CX]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4554
-+device.name 210888ET [Mach64 ET]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4654
-+device.name Mach64 VT
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4747
-+device.name 3D Rage Pro
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474c
-+device.name Rage XC
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x474f
-+device.name Rage XL
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4750
-+device.name 3D Rage Pro 215GP
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4751
-+device.name 3D Rage Pro 215GQ
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4754
-+device.name 3D Rage I/II 215GT [Mach64 GT]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4755
-+device.name 3D Rage II+ 215GTB [Mach64 GTB]
-+driver.xfree 4|ati|||||8,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4756
-+device.name 3D Rage IIC 215IIC [Mach64 GT IIC]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4758
-+device.name 210888GX [Mach64 GX]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4759
-+device.name 3D Rage IIC
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c47
-+device.name 3D Rage LT-G 215LG
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c50
-+device.name 3D Rage LT Pro
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c52
-+device.name 3D Rage P/M Mobility
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c53
-+device.name 3D Rage L Mobility
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x4c54
-+device.name 264LT [Mach64 LT]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5354
-+device.name Mach 64 VT
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5354
-&subvendor.id pci 0x1002
-&subdevice.id pci 0x5654
-+subdevice.name Mach 64 reference
-
- vendor.id pci 0x1002
-&device.id pci 0x5655
-+device.name 264VT3 [Mach64 VT3]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x1002
-&device.id pci 0x5656
-+device.name 264VT4 [Mach64 VT4]
-+driver.xfree 4|ati|||||8,15,16,24
-
- vendor.id pci 0x104c
-+vendor.name Texas Instruments
-
- vendor.id pci 0x104c
-&device.id pci 0x3d04
-+device.name TVP4010 [Permedia]
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x104c
-&device.id pci 0x3d07
-+device.name TVP4020 [Permedia 2]
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-+vendor.name 3DLabs
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0004
-+device.name Permedia
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0007
-+device.name 3D Extreme
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id pci 0x3d3d
-&device.id pci 0x0009
-+device.name Permedia II 2D+3D
-+driver.xfree 4|glint|||||8,15,16,24
-
- vendor.id special 0x4001
-+vendor.name Sun Microsystems
-
- vendor.id special 0x4001
-&device.id special 0x0001
-+device.name Sun|Monochrome (bwtwo)
-+driver.xfree 4|sunbw2
-
- vendor.id special 0x4001
-&device.id special 0x0002
-+device.name Sun|Color3 (cgthree)
-+driver.xfree 4|suncg3|||||8
-
- vendor.id special 0x4001
-&device.id special 0x0008
-+device.name Sun|Double width GX (cgsix)
-+driver.xfree 4|suncg6|||||8
-
- vendor.id special 0x4001
-&device.id special 0x0009
-+device.name Sun|Single width GX (cgsix)
-+driver.xfree 4|suncg6|||||8
-
- vendor.id special 0x4001
-&device.id special 0x000a
-+device.name Sun|Turbo GX with 1M VSIMM (cgsix)
-+driver.xfree 4|suncg6|||||8
-
- vendor.id special 0x4001
-&device.id special 0x000b
-+device.name Sun|Turbo GX Plus (cgsix)
-+driver.xfree 4|suncg6|||||8
-
- vendor.id special 0x4001
-&device.id special 0x000c
-+device.name Sun|Turbo GX (cgsix)
-+driver.xfree 4|suncg6
-
- vendor.id special 0x4001
-&device.id special 0x000d
-+device.name Sun|Unknown GX (cgsix)
-+driver.xfree 4|suncg6|||||8
-
- vendor.id special 0x4001
-&device.id special 0x000e
-+device.name Sun|SX with 4M VSIMM (cgfourteen)
-+driver.xfree 4|suncg14|||||32
-
- vendor.id special 0x4001
-&device.id special 0x000f
-+device.name Sun|SX with 8M VSIMM (cgfourteen)
-+driver.xfree 4|suncg14|||||32
-
- vendor.id special 0x4001
-&device.id special 0x0010
-+device.name Sun|SX (cgfourteen)
-+driver.xfree 4|suncg14|||||32
-
- vendor.id special 0x4001
-&device.id special 0x0011
-+device.name Sun|ZX or Turbo ZX (leo)
-+driver.xfree 4|sunleo|||||32
-
- vendor.id special 0x4001
-&device.id special 0x0012
-+device.name Sun|Turbo ZX (leo)
-+driver.xfree 4|sunleo|||||32
-
- vendor.id special 0x4001
-&device.id special 0x0013
-+device.name Sun|TCX (8bit)
-+driver.xfree 4|suntcx|||||8
-
- vendor.id special 0x4001
-&device.id special 0x0014
-+device.name Sun|TCX (S24)
-+driver.xfree 4|suntcx
-
- vendor.id special 0x4001
-&device.id special 0x0015
-+device.name Sun|Elite3D-M6 Horizontal (afb)
-+driver.xfree 4|sunffb|||||24
-
- vendor.id special 0x4001
-&device.id special 0x0016
-+device.name Sun|Elite3D (afb)
-+driver.xfree 4|sunffb|||||24
-
- vendor.id special 0x4001
-&device.id special 0x0017
-+device.name Sun|FFB 67MHz Creator (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x0018
-+device.name Sun|FFB 67MHz Creator 3D (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x0019
-+device.name Sun|FFB 75MHz Creator 3D (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x001a
-+device.name Sun|FFB2 Vertical Creator (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x001b
-+device.name Sun|FFB2 Vertical Creator 3D (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x001c
-+device.name Sun|FFB2+ Vertical Creator (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x001d
-+device.name Sun|FFB2+ Vertical Creator 3D (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x001e
-+device.name Sun|FFB2 Horizontal Creator (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x001f
-+device.name Sun|FFB2 Horizontal Creator 3D (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
- vendor.id special 0x4001
-&device.id special 0x0020
-+device.name Sun|FFB [unknown type] (ffb)
-+driver.xfree 4|sunffb|||||8,24
-+driver.xfree 4|sunffb|3d||dri||8,24||switch2xf86_glx
-+requires xf86_glx
-
+++ /dev/null
-#! /usr/bin/perl
-
-mkdir "tmp", 0755;
-
-system "./cdb_x11";
-
-unlink "tmp/x11.hwinfo.all", "tmp/x11.hwinfo.s390";
-
-chdir "tmp";
-
-for (<x11.hwinfo.*>) {
- chomp;
- $in = $_;
- s/hwinfo\.//;
- $out = $_;
- system "../convert_hd $in";
- system "../check_hd --sort --check --join-keys-first --split --log=$out.log --out=$out hd.ids";
- rename $out, "../src/$out";
-}
-
-chdir "..";
-
-system "rm -rf tmp";
+++ /dev/null
-/* $XConsortium: AsmMacros.h /main/13 1996/10/25 11:33:12 kaleb $ */
-/*
- * (c) Copyright 1993,1994 by David Wexelblat <dwex@xfree86.org>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * DAVID WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Except as contained in this notice, the name of David Wexelblat shall not be
- * used in advertising or otherwise to promote the sale, use or other dealings
- * in this Software without prior written authorization from David Wexelblat.
- *
- */
-/*
- * Copyright 1997
- * Digital Equipment Corporation. All rights reserved.
- * This software is furnished under license and may be used and copied only in
- * accordance with the following terms and conditions. Subject to these
- * conditions, you may download, copy, install, use, modify and distribute
- * this software in source and/or binary form. No title or ownership is
- * transferred hereby.
- *
- * 1) Any source code used, modified or distributed must reproduce and retain
- * this copyright notice and list of conditions as they appear in the source
- * file.
- *
- * 2) No right is granted to use any trade name, trademark, or logo of Digital
- * Equipment Corporation. Neither the "Digital Equipment Corporation" name
- * nor any trademark or logo of Digital Equipment Corporation may be used
- * to endorse or promote products derived from this software without the
- * prior written permission of Digital Equipment Corporation.
- *
- * 3) This software is provided "AS-IS" and any express or implied warranties,
- * including but not limited to, any implied warranties of merchantability,
- * fitness for a particular purpose, or non-infringement are disclaimed. In
- * no event shall DIGITAL be liable for any damages whatsoever, and in
- * particular, DIGITAL shall not be liable for special, indirect,
- * consequential, or incidental damages or damages for
- * lost profits, loss of revenue or loss of use, whether such damages arise
- * in contract,
- * negligence, tort, under statute, in equity, at law or otherwise, even if
- * advised of the possibility of such damage.
- *
- */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/SuperProbe/AsmMacros.h,v 3.14 1999/09/25 14:36:58 dawes Exp $ */
-
-
-#if defined(__GNUC__)
-
-#if defined(linux) && (defined(__alpha__) || defined(__ia64__))
-
-#include <sys/io.h>
-
-#undef inb
-#undef inw
-#undef inl
-#undef outb
-#undef outw
-#undef outl
-
-static __inline__ unsigned int inb(unsigned long int p) { return _inb(p); };
-static __inline__ unsigned int inw(unsigned long int p) { return _inw(p); };
-static __inline__ unsigned int inl(unsigned long int p) { return _inl(p); };
-static __inline__ void outb(unsigned long int p, unsigned char v) { _outb(v,p); };
-static __inline__ void outw(unsigned long int p, unsigned short v) { _outw(v,p); };
-static __inline__ void outl(unsigned long int p, unsigned int v) { _outl(v,p); };
-
-#else
-
-#if defined(__sparc__)
-#ifndef ASI_PL
-#define ASI_PL 0x88
-#endif
-
-static __inline__ void
-outb(port, val)
-unsigned long port;
-char val;
-{
- __asm__ __volatile__("stba %0, [%1] %2" : : "r" (val), "r" (port), "i" (ASI_PL));
-}
-
-static __inline__ void
-outw(port, val)
-unsigned long port;
-char val;
-{
- __asm__ __volatile__("stha %0, [%1] %2" : : "r" (val), "r" (port), "i" (ASI_PL));
-}
-
-static __inline__ void
-outl(port, val)
-unsigned long port;
-char val;
-{
- __asm__ __volatile__("sta %0, [%1] %2" : : "r" (val), "r" (port), "i" (ASI_PL));
-}
-
-static __inline__ unsigned int
-inb(port)
-unsigned long port;
-{
- unsigned char ret;
- __asm__ __volatile__("lduba [%1] %2, %0" : "=r" (ret) : "r" (port), "i" (ASI_PL));
- return ret;
-}
-
-static __inline__ unsigned int
-inw(port)
-unsigned long port;
-{
- unsigned char ret;
- __asm__ __volatile__("lduha [%1] %2, %0" : "=r" (ret) : "r" (port), "i" (ASI_PL));
- return ret;
-}
-
-static __inline__ unsigned int
-inl(port)
-unsigned long port;
-{
- unsigned char ret;
- __asm__ __volatile__("lda [%1] %2, %0" : "=r" (ret) : "r" (port), "i" (ASI_PL));
- return ret;
-}
-#else
-#ifdef __arm32__
-unsigned int IOPortBase; /* Memory mapped I/O port area */
-
-static __inline__ void
-outb(port, val)
- short port;
- char val;
-{
- if ((unsigned short)port >= 0x400) return;
-
- *(volatile unsigned char*)(((unsigned short)(port))+IOPortBase) = val;
-}
-
-static __inline__ void
-outw(port, val)
- short port;
- short val;
-{
- if ((unsigned short)port >= 0x400) return;
-
- *(volatile unsigned short*)(((unsigned short)(port))+IOPortBase) = val;
-}
-
-static __inline__ void
-outl(port, val)
- short port;
- int val;
-{
- if ((unsigned short)port >= 0x400) return;
-
- *(volatile unsigned long*)(((unsigned short)(port))+IOPortBase) = val;
-}
-
-static __inline__ unsigned int
-inb(port)
- short port;
-{
- if ((unsigned short)port >= 0x400) return((unsigned int)-1);
-
- return(*(volatile unsigned char*)(((unsigned short)(port))+IOPortBase));
-}
-
-static __inline__ unsigned int
-inw(port)
- short port;
-{
- if ((unsigned short)port >= 0x400) return((unsigned int)-1);
-
- return(*(volatile unsigned short*)(((unsigned short)(port))+IOPortBase));
-}
-
-static __inline__ unsigned int
-inl(port)
- short port;
-{
- if ((unsigned short)port >= 0x400) return((unsigned int)-1);
-
- return(*(volatile unsigned long*)(((unsigned short)(port))+IOPortBase));
-}
-#else /* __arm32__ */
-#if defined(Lynx) && defined(__powerpc__)
-extern unsigned char *ioBase;
-
-static volatile void
-eieio()
-{
- __asm__ __volatile__ ("eieio");
-}
-
-static void
-outb(port, value)
-short port;
-unsigned char value;
-{
- *(uchar *)(ioBase + port) = value; eieio();
-}
-
-static void
-outw(port, value)
-short port;
-unsigned short value;
-{
- *(unsigned short *)(ioBase + port) = value; eieio();
-}
-
-static void
-outl(port, value)
-short port;
-unsigned long value;
-{
- *(unsigned long *)(ioBase + port) = value; eieio();
-}
-
-static unsigned char
-inb(port)
-short port;
-{
- unsigned char val;
-
- val = *((unsigned char *)(ioBase + port)); eieio();
- return(val);
-}
-
-static unsigned short
-inw(port)
-short port;
-{
- unsigned short val;
-
- val = *((unsigned short *)(ioBase + port)); eieio();
- return(val);
-}
-
-static unsigned long
-inl(port)
-short port;
-{
- unsigned long val;
-
- val = *((unsigned long *)(ioBase + port)); eieio();
- return(val);
-}
-
-#else
-#if defined(__FreeBSD__) && defined(__alpha__)
-
-#include <sys/types.h>
-
-extern void outb(u_int32_t port, u_int8_t val);
-extern void outw(u_int32_t port, u_int16_t val);
-extern void outl(u_int32_t port, u_int32_t val);
-extern u_int8_t inb(u_int32_t port);
-extern u_int16_t inw(u_int32_t port);
-extern u_int32_t inl(u_int32_t port);
-
-#else
-#ifdef GCCUSESGAS
-static __inline__ void
-outb(port, val)
-short port;
-char val;
-{
- __asm__ __volatile__("outb %0,%1" : :"a" (val), "d" (port));
-}
-
-static __inline__ void
-outw(port, val)
-short port;
-short val;
-{
- __asm__ __volatile__("outw %0,%1" : :"a" (val), "d" (port));
-}
-
-static __inline__ void
-outl(port, val)
-short port;
-unsigned int val;
-{
- __asm__ __volatile__("outl %0,%1" : :"a" (val), "d" (port));
-}
-
-static __inline__ unsigned int
-inb(port)
-short port;
-{
- unsigned char ret;
- __asm__ __volatile__("inb %1,%0" :
- "=a" (ret) :
- "d" (port));
- return ret;
-}
-
-static __inline__ unsigned int
-inw(port)
-short port;
-{
- unsigned short ret;
- __asm__ __volatile__("inw %1,%0" :
- "=a" (ret) :
- "d" (port));
- return ret;
-}
-
-static __inline__ unsigned int
-inl(port)
-short port;
-{
- unsigned int ret;
- __asm__ __volatile__("inl %1,%0" :
- "=a" (ret) :
- "d" (port));
- return ret;
-}
-
-#else /* GCCUSESGAS */
-
-static __inline__ void
-outb(port, val)
- short port;
- char val;
-{
- __asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port));
-}
-
-static __inline__ void
-outw(port, val)
- short port;
- short val;
-{
- __asm__ __volatile__("out%W0 (%1)" : :"a" (val), "d" (port));
-}
-
-static __inline__ void
-outl(port, val)
- short port;
- unsigned int val;
-{
- __asm__ __volatile__("out%L0 (%1)" : :"a" (val), "d" (port));
-}
-
-static __inline__ unsigned int
-inb(port)
- short port;
-{
- unsigned int ret;
- __asm__ __volatile__("in%B0 (%1)" :
- "=a" (ret) :
- "d" (port));
- return ret;
-}
-
-static __inline__ unsigned int
-inw(port)
- short port;
-{
- unsigned int ret;
- __asm__ __volatile__("in%W0 (%1)" :
- "=a" (ret) :
- "d" (port));
- return ret;
-}
-
-static __inline__ unsigned int
-inl(port)
- short port;
-{
- unsigned int ret;
- __asm__ __volatile__("in%L0 (%1)" :
- "=a" (ret) :
- "d" (port));
- return ret;
-}
-
-#endif /* GCCUSESGAS */
-#endif /* Lynx && __powerpc__ */
-#endif /* arm32 */
-#endif /* linux && __sparc__ */
-#endif /* linux && __alpha__ */
-#endif /* __FreeBSD__ && __alpha__ */
-
-#if defined(linux) || defined(__arm32__) || (defined(Lynx) && defined(__powerpc__))
-
-#define intr_disable()
-#define intr_enable()
-
-#else
-
-static __inline__ void
-intr_disable()
-{
- __asm__ __volatile__("cli");
-}
-
-static __inline__ void
-intr_enable()
-{
- __asm__ __volatile__("sti");
-}
-
-#endif /* else !linux && !__arm32__ */
-
-#else /* __GNUC__ */
-
-#if defined(_MINIX) && defined(_ACK)
-
-/* inb, outb, inw and outw are defined in the library */
-/* ... but I've no idea if the same is true for inl & outl */
-
-u8_t inb(U16_t);
-void outb(U16_t, U8_t);
-u16_t inw(U16_t);
-void outw(U16_t, U16_t);
-u32_t inl(U16_t);
-void outl(U16_t, U32_t);
-
-#else /* not _MINIX and _ACK */
-
-# if defined(__STDC__) && (__STDC__ == 1)
-# ifndef NCR
-# define asm __asm
-# endif
-# endif
-# ifdef SVR4
-# include <sys/types.h>
-# ifndef __USLC__
-# define __USLC__
-# endif
-# endif
-#ifndef SCO325
-# include <sys/inline.h>
-#else
-# include "../common/scoasm.h"
-#endif
-#define intr_disable() asm("cli")
-#define intr_enable() asm("sti")
-
-#endif /* _MINIX and _ACK */
-#endif /* __GNUC__ */
+++ /dev/null
-TOPDIR = ../..
-TARGETS = $(LIBHD_D)
-
-include $(TOPDIR)/Makefile.common
-
-$(LIBHD_D): $(OBJS)
- ar r $(LIBHD) $?
+++ /dev/null
-
-This is a preliminary version of a VGA softbooter for LINUX.
-
-It makes use of the of the vm86() call and is therefore only
-usable on ix86 systems.
-There are plans to port this program to use a x86 emulator
-like x86emu. Also it may be ported to other operating systems.
-
-So far it has been tested on a small number of cards. It might
-well be that it will fail on your card.
-
-If you need to make modifications to the programs to be able
-to boot your card please let the author know.
-
-So far there is no command line interface. All options need
-to be hardcoded. You can do this by editing debug.h. You can
-turn on a bunch of debug output. Other options allow you to
-boot the primary card (CONFIG_ACTIVE_DEVICE), save the bios
-to a file (SAVE_BIOS), and map the original system bios
-(MAP_SYS_BIOS).
-
-The author wants to thank
- Hans Lermen (dosemu)
- and
- Kendall Bennett (x86emu)
-for their support.
-
-Parts of the code - especially in v86.c and io.c - are based on code
-taken from dosemu. Parts of the code in int.c are based on code taken
-from x86emu
-
-Egbert Eich. <Egbert.Eich@Physik.TU-Darmstadt.DE>
-
-
-
+++ /dev/null
-#include <stdio.h>
-#include <stdarg.h>
-#ifdef __i386__
-#include <sys/vm86.h>
-#else
-#include "vm86_struct.h"
-#endif
-
-#define INT2PTR(a) ((a) + (unsigned char *) 0)
-
-#include "../x86emu/include/x86emu.h"
-#include "AsmMacros.h"
-
-int emu_vm86_ret;
-
-static u8 Mem_rb(u32 addr) {
- return *(u8 *)(INT2PTR(addr));
-}
-static void Mem_wb(u32 addr, u8 val) {
- *(u8 *)INT2PTR(addr) = val;
-}
-#ifdef __ia64__
-
-static u16 Mem_rw(u32 addr) {
- return *(u8 *)INT2PTR(addr) | *(u8 *)INT2PTR(addr + 1) << 8;
-}
-static u32 Mem_rl(u32 addr) {
- return *(u8 *)INT2PTR(addr) | *(u8 *)INT2PTR(addr + 1) << 8 |
- *(u8 *)INT2PTR(addr + 2) << 16 | *(u8 *)INT2PTR(addr + 3) << 24;
-}
-static void Mem_ww(u32 addr, u16 val) {
- *(u8 *)INT2PTR(addr) = val;
- *(u8 *)INT2PTR(addr + 1) = val >> 8;
-}
-static void Mem_wl(u32 addr, u32 val) {
- *(u8 *)INT2PTR(addr) = val;
- *(u8 *)INT2PTR(addr + 1) = val >> 8;
- *(u8 *)INT2PTR(addr + 2) = val >> 16;
- *(u8 *)INT2PTR(addr + 3) = val >> 24;
-}
-
-#else
-
-static u16 Mem_rw(u32 addr) {
- return *(u16 *)INT2PTR(addr);
-}
-static u32 Mem_rl(u32 addr) {
- return *(u32 *)INT2PTR(addr);
-}
-static void Mem_ww(u32 addr, u16 val) {
- *(u16 *)INT2PTR(addr) = val;
-}
-static void Mem_wl(u32 addr, u32 val) {
- *(u32 *)INT2PTR(addr) = val;
-}
-
-#endif
-
-static void do_int(int num) {
- emu_vm86_ret = VM86_INTx | (num << 8);
- M.x86.intr = INTR_HALTED;
-}
-
-
-static u8 deb_inb(X86EMU_pioAddr addr)
-{
- u8 u;
-
- u = inb(addr);
- fprintf(stderr, "%04x:%04x inb %04x = %02x\n", M.x86.R_CS, (unsigned) M.x86.R_EIP, addr, u);
-
- return u;
-}
-
-static u16 deb_inw(X86EMU_pioAddr addr)
-{
- u16 u;
-
- u = inw(addr);
- fprintf(stderr, "%04x:%04x inw %04x = %04x\n", M.x86.R_CS, (unsigned) M.x86.R_EIP, addr, u);
-
- return u;
-}
-
-static u32 deb_inl(X86EMU_pioAddr addr)
-{
- u32 u;
-
- u = inl(addr);
- fprintf(stderr, "%04x:%04x inl %04x = %08x\n", M.x86.R_CS, (unsigned) M.x86.R_EIP, addr, (unsigned) u);
-
- return u;
-}
-
-static void deb_outb(X86EMU_pioAddr addr, u8 val)
-{
- fprintf(stderr, "%04x:%04x outb %04x, %02x\n", M.x86.R_CS, (unsigned) M.x86.R_EIP, addr, val);
- outb(addr, val);
-}
-
-static void deb_outw(X86EMU_pioAddr addr, u16 val)
-{
- fprintf(stderr, "%04x:%04x outw %04x, %04x\n", M.x86.R_CS, (unsigned) M.x86.R_EIP, addr, val);
- outw(addr, val);
-}
-
-static void deb_outl(X86EMU_pioAddr addr, u32 val)
-{
- fprintf(stderr, "%04x:%04x outl %04x, %08x\n", M.x86.R_CS, (unsigned) M.x86.R_EIP, addr, (unsigned) val);
- outl(addr, val);
-}
-
-int
-emu_vm86(struct vm86_struct *vm, unsigned debug)
-{
- int i;
- unsigned timeout;
-
- X86EMU_memFuncs memFuncs;
- X86EMU_intrFuncs intFuncs[256];
- X86EMU_pioFuncs pioFuncs;
-
- memFuncs.rdb = Mem_rb;
- memFuncs.rdw = Mem_rw;
- memFuncs.rdl = Mem_rl;
- memFuncs.wrb = Mem_wb;
- memFuncs.wrw = Mem_ww;
- memFuncs.wrl = Mem_wl;
- X86EMU_setupMemFuncs(&memFuncs);
-
-if(debug) {
- pioFuncs.inb = deb_inb;
- pioFuncs.inw = deb_inw;
- pioFuncs.inl = deb_inl;
- pioFuncs.outb = deb_outb;
- pioFuncs.outw = deb_outw;
- pioFuncs.outl = deb_outl;
-} else {
- pioFuncs.inb = (u8(*)(u16))inb;
- pioFuncs.inw = (u16(*)(u16))inw;
- pioFuncs.inl = (u32(*)(u16))inl;
- pioFuncs.outb = (void(*)(u16, u8))outb;
- pioFuncs.outw = (void(*)(u16, u16))outw;
- pioFuncs.outl = (void(*)(u16, u32))outl;
-}
- X86EMU_setupPioFuncs(&pioFuncs);
-
- for (i=0;i<256;i++)
- intFuncs[i] = do_int;
- X86EMU_setupIntrFuncs(intFuncs);
-
- M.mem_base = 0;
- M.mem_size = 1024*1024 + 1024;
-
- M.x86.R_EAX = vm->regs.eax;
- M.x86.R_EBX = vm->regs.ebx;
- M.x86.R_ECX = vm->regs.ecx;
- M.x86.R_EDX = vm->regs.edx;
-
- M.x86.R_ESP = vm->regs.esp;
- M.x86.R_EBP = vm->regs.ebp;
- M.x86.R_ESI = vm->regs.esi;
- M.x86.R_EDI = vm->regs.edi;
- M.x86.R_EIP = vm->regs.eip;
- M.x86.R_EFLG = vm->regs.eflags;
-
- M.x86.R_CS = vm->regs.cs;
- M.x86.R_DS = vm->regs.ds;
- M.x86.R_SS = vm->regs.ss;
- M.x86.R_ES = vm->regs.es;
- M.x86.R_FS = vm->regs.fs;
- M.x86.R_GS = vm->regs.gs;
-
- emu_vm86_ret = 0;
- /* set timeout, 20s normal, 60s for debugging */
- timeout = debug ? (1 << 31) + 60 : 20;
- X86EMU_exec(timeout);
-
- vm->regs.eax = M.x86.R_EAX;
- vm->regs.ebx = M.x86.R_EBX;
- vm->regs.ecx = M.x86.R_ECX;
- vm->regs.edx = M.x86.R_EDX;
-
- vm->regs.esp = M.x86.R_ESP;
- vm->regs.ebp = M.x86.R_EBP;
- vm->regs.esi = M.x86.R_ESI;
- vm->regs.edi = M.x86.R_EDI;
- vm->regs.eip = M.x86.R_EIP;
- vm->regs.eflags = M.x86.R_EFLG;
-
- vm->regs.cs = M.x86.R_CS;
- vm->regs.ds = M.x86.R_DS;
- vm->regs.ss = M.x86.R_SS;
- vm->regs.es = M.x86.R_ES;
- vm->regs.fs = M.x86.R_FS;
- vm->regs.gs = M.x86.R_GS;
-
- if (emu_vm86_ret == 0 && *(unsigned char *)INT2PTR(((u32)M.x86.R_CS << 4) + (M.x86.R_IP - 1)) == 0xf4)
- {
- vm->regs.eip--;
- return VM86_UNKNOWN;
- }
- return emu_vm86_ret ? emu_vm86_ret : -1;
-}
-
-void
-printk(const char *fmt, ...)
-{
- va_list argptr;
- va_start(argptr, fmt);
- vfprintf(stderr, fmt, argptr);
- va_end(argptr);
-}
-
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#if defined(__alpha__) || defined (__ia64__)
-#include <sys/io.h>
-#endif
-
-#include "v86bios.h"
-#include "AsmMacros.h"
-#include "pci.h"
-
-static int int1A_handler(struct regs86 *regs);
-static int int42_handler(int num, struct regs86 *regs);
-
-int
-int_handler(int num, struct regs86 *regs)
-{
- switch (num) {
- case 0x10:
- case 0x42:
- return (int42_handler(num,regs));
- case 0x1A:
- return (int1A_handler(regs));
- default:
- return 0;
- }
- return 0;
-}
-
-static int
-int42_handler(int num,struct regs86 *regs)
-{
- unsigned char c;
- CARD32 val;
-
- /*
- * video bios has modified these -
- * leave it to the video bios to do this
- */
-
- val = getIntVect(num);
- if (val != 0xF000F065)
- return 0;
-
- if ((regs->ebx & 0xff) == 0x32) {
- switch (regs->eax & 0xFFFF) {
- case 0x1200:
- c = inb(0x3cc);
- c |= 0x02;
- outb(0x3c2,c);
- return 1;
- case 0x1201:
- c = inb(0x3cc);
- c &= ~0x02;
- outb(0x3c2,c);
- return 1;
- }
- }
- if (num == 0x42)
- return 1;
- else
- return 0;
-}
-
-#define SUCCESSFUL 0x00
-#define DEVICE_NOT_FOUND 0x86
-#define BAD_REGISTER_NUMBER 0x87
-
-static int
-int1A_handler(struct regs86 *regs)
-{
- CARD32 Slot;
-// PciStructPtr pPci;
-
- if (! CurrentPci) return 0; /* oops */
-
- switch (regs->eax & 0xFFFF) {
- case 0xb101:
- regs->eax &= 0xFF00; /* no config space/special cycle support */
- regs->edx = 0x20494350; /* " ICP" */
- regs->ebx = 0x0210; /* Version 2.10 */
- regs->ecx &= 0xFF00;
- regs->ecx |= (pciMaxBus & 0xFF); /* Max bus number in system */
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- return 1;
- case 0xb102:
- if (((regs->edx & 0xFFFF) == CurrentPci->VendorID) &&
- ((regs->ecx & 0xFFFF) == CurrentPci->DeviceID) &&
- (regs->esi == 0)) {
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- regs->ebx = pciSlotBX(CurrentPci);
- } else {
- regs->eax = (regs->eax & 0x00FF) | (DEVICE_NOT_FOUND << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb103:
- if (((regs->ecx & 0xFF) == CurrentPci->Interface) &&
- (((regs->ecx & 0xFF00) >> 8) == CurrentPci->SubClass) &&
- (((regs->ecx & 0xFFFF0000) >> 16) == CurrentPci->BaseClass) &&
- ((regs->esi & 0xff) == 0)) {
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->ebx = pciSlotBX(CurrentPci);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (DEVICE_NOT_FOUND << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb108:
- if ((Slot = findPci(regs->ebx))) {
- regs->ecx &= 0xFFFFFF00;
- regs->ecx |= PciRead8(regs->edi,Slot);
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (BAD_REGISTER_NUMBER << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb109:
- if ((Slot = findPci(regs->ebx))) {
- regs->ecx &= 0xFFFF0000;
- regs->ecx |= PciRead16(regs->edi,Slot);
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (BAD_REGISTER_NUMBER << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb10a:
- if ((Slot = findPci(regs->ebx))) {
- regs->ecx &= 0;
- regs->ecx |= PciRead32(regs->edi,Slot);
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (BAD_REGISTER_NUMBER << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb10b:
- if ((Slot = findPci(regs->ebx))) {
- PciWrite8(regs->edi,(CARD8)regs->ecx,Slot);
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (BAD_REGISTER_NUMBER << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb10c:
- if ((Slot = findPci(regs->ebx))) {
- PciWrite16(regs->edi,(CARD16)regs->ecx,Slot);
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (BAD_REGISTER_NUMBER << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- case 0xb10d:
- if ((Slot = findPci(regs->ebx))) {
- PciWrite32(regs->edi,(CARD32)regs->ecx,Slot);
- regs->eax = (regs->eax & 0x00FF) | (SUCCESSFUL << 8);
- regs->eflags &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
- regs->eax = (regs->eax & 0x00FF) | (BAD_REGISTER_NUMBER << 8);
- regs->eflags |= ((unsigned long)0x01); /* set carry flag */
- }
- return 1;
- default:
- return 0;
- }
-}
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#if defined(__alpha__) || defined (__ia64__)
-#include <sys/io.h>
-#endif
-#include "AsmMacros.h"
-#include "v86bios.h"
-#include "pci.h"
-
-
-int
-port_rep_inb(CARD16 port, CARD8 *base, int d_f, CARD32 count)
-{
- register int inc = d_f ? -1 : 1;
- CARD8 *dst = base;
-
- while (count--) {
- *dst = inb(port);
- dst += inc;
- }
- return (dst-base);
-}
-
-int
-port_rep_inw(CARD16 port, CARD16 *base, int d_f, CARD32 count)
-{
- register int inc = d_f ? -1 : 1;
- CARD16 *dst = base;
-
- while (count--) {
- *dst = inw(port);
- dst += inc;
- }
- return (dst-base);
-}
-
-int
-port_rep_inl(CARD16 port, CARD32 *base, int d_f, CARD32 count)
-{
- register int inc = d_f ? -1 : 1;
- CARD32 *dst = base;
-
- while (count--) {
- *dst = inl(port);
- dst += inc;
- }
- return (dst-base);
-}
-
-int
-port_rep_outb(CARD16 port, CARD8 *base, int d_f, CARD32 count)
-{
- register int inc = d_f ? -1 : 1;
- CARD8 *dst = base;
-
- while (count--) {
- outb(port,*dst);
- dst += inc;
- }
- return (dst-base);
-}
-
-int
-port_rep_outw(CARD16 port, CARD16 *base, int d_f, CARD32 count)
-{
- register int inc = d_f ? -1 : 1;
- CARD16 *dst = base;
-
- while (count--) {
- outw(port,*dst);
- dst += inc;
- }
- return (dst-base);
-}
-
-int
-port_rep_outl(CARD16 port, CARD32 *base, int d_f, CARD32 count)
-{
- register int inc = d_f ? -1 : 1;
- CARD32 *dst = base;
-
- while (count--) {
- outl(port,*dst);
- dst += inc;
- }
- return (dst-base);
-}
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#include <fcntl.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdio.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#if defined (__alpha__) || defined (__ia64__)
-#include <sys/io.h>
-#endif
-#include "AsmMacros.h"
-
-#include "pci.h"
-
-#define RESORT 1
-#define FIX_ROM 0
-
-/*
- * I'm rather simple mindend - therefore I do a poor man's
- * pci scan without all the fancy stuff that is done in
- * scanpci. However that's all we need.
- */
-
-PciStructPtr PciStruct = NULL;
-PciBusPtr PciBuses = NULL;
-PciStructPtr CurrentPci = NULL;
-PciStructPtr PciList = NULL;
-int pciMaxBus = 0;
-
-static CARD32 PciCfg1Addr;
-
-static void readConfigSpaceCfg1(CARD32 bus, CARD32 dev, CARD32 func,
- CARD32 *reg);
-static int checkSlotCfg1(CARD32 bus, CARD32 dev, CARD32 func);
-static int checkSlotCfg2(CARD32 bus, int dev);
-static void readConfigSpaceCfg2(CARD32 bus, int dev, CARD32 *reg);
-static CARD8 interpretConfigSpace(CARD32 *reg, int busidx,
- CARD8 dev, CARD8 func);
-static CARD32 findBIOSMap(PciStructPtr pciP, CARD32 *biosSize);
-static void restoreMem(PciStructPtr pciP);
-
-
-#ifdef __alpha__
-#define PCI_BUS_FROM_TAG(tag) (((tag) & 0x00ff0000) >> 16)
-#define PCI_DFN_FROM_TAG(tag) (((tag) & 0x0000ff00) >> 8)
-
-#include <asm/unistd.h>
-
-CARD32
-axpPciCfgRead(CARD32 tag)
-{
- int bus, dfn;
- CARD32 val = 0xffffffff;
-
- bus = PCI_BUS_FROM_TAG(tag);
- dfn = PCI_DFN_FROM_TAG(tag);
-
- syscall(__NR_pciconfig_read, bus, dfn, tag & 0xff, 4, &val);
- return(val);
-}
-
-void
-axpPciCfgWrite(CARD32 tag, CARD32 val)
-{
- int bus, dfn;
-
- bus = PCI_BUS_FROM_TAG(tag);
- dfn = PCI_DFN_FROM_TAG(tag);
-
- syscall(__NR_pciconfig_write, bus, dfn, tag & 0xff, 4, &val);
-}
-
-static CARD32 (*readPci)(CARD32 reg) = axpPciCfgRead;
-static void (*writePci)(CARD32 reg, CARD32 val) = axpPciCfgWrite;
-#else
-static CARD32 readPciCfg1(CARD32 reg);
-static void writePciCfg1(CARD32 reg, CARD32 val);
-#ifndef __ia64__
-static CARD32 readPciCfg2(CARD32 reg);
-static void writePciCfg2(CARD32 reg, CARD32 val);
-#endif
-
-static CARD32 (*readPci)(CARD32 reg) = readPciCfg1;
-static void (*writePci)(CARD32 reg, CARD32 val) = writePciCfg1;
-#endif
-
-#if defined(__alpha__) || defined(__sparc__)
-#define PCI_EN 0x00000000
-#else
-#define PCI_EN 0x80000000
-#endif
-
-
-static int numbus;
-static int hostbridges = 1;
-static unsigned long pciMinMemReg = ~0;
-
-
-
-void
-scan_pci(int pci_cfg_method)
-{
- unsigned short configtype;
-
- CARD32 reg[64];
- int busidx;
- CARD8 cardnum;
- CARD8 func;
- int idx;
-
- PciStructPtr pci1;
- PciBusPtr pci_b1,pci_b2;
-
- if(pci_cfg_method) {
- configtype = pci_cfg_method;
- }
- else {
-#if defined(__alpha__) || defined(__powerpc__) || defined(__sparc__) || defined(__ia64__)
- configtype = 1;
-#else
- CARD8 tmp1, tmp2;
- CARD32 tmp32_1, tmp32_2;
- outb(PCI_MODE2_ENABLE_REG, 0x00);
- outb(PCI_MODE2_FORWARD_REG, 0x00);
- tmp1 = inb(PCI_MODE2_ENABLE_REG);
- tmp2 = inb(PCI_MODE2_FORWARD_REG);
- if ((tmp1 == 0x00) && (tmp2 == 0x00)) {
- configtype = 2;
- readPci = readPciCfg2;
- writePci = writePciCfg2;
- } else {
- tmp32_1 = inl(PCI_MODE1_ADDRESS_REG);
- outl(PCI_MODE1_ADDRESS_REG, PCI_EN);
- tmp32_2 = inl(PCI_MODE1_ADDRESS_REG);
- outl(PCI_MODE1_ADDRESS_REG, tmp32_1);
- if (tmp32_2 == PCI_EN) {
- configtype = 1;
- } else {
- return;
- }
- }
-#endif
- }
-
- if (configtype == 1) {
- busidx = 0;
- numbus = 1;
- idx = 0;
- do {
- for (cardnum = 0; cardnum < MAX_DEV_PER_VENDOR_CFG1; cardnum++) {
- func = 0;
- do {
- /* loop over the different functions, if present */
- if (!checkSlotCfg1(busidx,cardnum,func)) {
- if (!func)
- break;
- else {
- func++;
- continue;
- }
- }
- readConfigSpaceCfg1(busidx,cardnum,func,reg);
-
- func = interpretConfigSpace(reg,busidx,
- cardnum,func);
-
- if (++idx >= MAX_PCI_DEVICES)
- break;
- } while (func < 8);
- if (idx >= MAX_PCI_DEVICES)
- break;
- }
- if (idx >= MAX_PCI_DEVICES)
- break;
- } while (++busidx < PCI_MAXBUS);
-#if defined(__alpha__) || defined(__powerpc__) || defined(__sparc__) || defined(__ia64__)
- /* don't use outl() ;-) */
-#else
- outl(PCI_MODE1_ADDRESS_REG, 0);
-#endif
- } else {
- int slot;
-
- busidx = 0;
- numbus = 1;
- idx = 0;
- do {
- for (slot=0xc0; slot<0xd0; slot++) {
- if (!checkSlotCfg2(busidx,slot))
- break;
- readConfigSpaceCfg2(busidx,slot,reg);
-
- interpretConfigSpace(reg,busidx,
- slot,0);
- if (++idx >= MAX_PCI_DEVICES)
- break;
- }
- if (idx >= MAX_PCI_DEVICES)
- break;
- } while (++busidx < PCI_MAXBUS);
- }
-
-
- pciMaxBus = numbus - 1;
-
- /* link buses */
- pci_b1 = PciBuses;
- while (pci_b1) {
- pci_b2 = PciBuses;
- pci_b1->pBus = NULL;
- while (pci_b2) {
- if (pci_b1->primary == pci_b2->secondary)
- pci_b1->pBus = pci_b2;
- pci_b2 = pci_b2->next;
- }
- pci_b1 = pci_b1->next;
- }
- pci1 = PciStruct;
- while (pci1) {
- pci_b2 = PciBuses;
- pci1->pBus = NULL;
- while (pci_b2) {
- if (pci1->bus == pci_b2->secondary)
- pci1->pBus = pci_b2;
- pci_b2 = pci_b2->next;
- }
- pci1 = pci1->next;
- }
- if (RESORT) {
- PciStructPtr tmp = PciStruct, tmp1;
- PciStruct = NULL;
- while (tmp) {
- tmp1 = tmp->next;
- tmp->next = PciStruct;
- PciStruct = tmp;
- tmp = tmp1;
- }
- }
- PciList = CurrentPci = PciStruct;
-}
-
-#ifndef __alpha__
-static CARD32
-readPciCfg1(CARD32 reg)
-{
- CARD32 val;
-
- outl(PCI_MODE1_ADDRESS_REG, reg);
- val = inl(PCI_MODE1_DATA_REG);
- outl(PCI_MODE1_ADDRESS_REG, 0);
- return val;
-}
-
-static void
-writePciCfg1(CARD32 reg, CARD32 val)
-{
- outl(PCI_MODE1_ADDRESS_REG, reg);
- outl(PCI_MODE1_DATA_REG,val);
- outl(PCI_MODE1_ADDRESS_REG, 0);
-}
-
-#ifndef __ia64__
-static CARD32
-readPciCfg2(CARD32 reg)
-{
- CARD32 val;
- CARD8 bus = (reg >> 16) & 0xff;
- CARD8 dev = (reg >> 11) & 0x1f;
- CARD8 num = reg & 0xff;
-
- outb(PCI_MODE2_ENABLE_REG, 0xF1);
- outb(PCI_MODE2_FORWARD_REG, bus);
- val = inl((dev << 8) + num);
- outb(PCI_MODE2_ENABLE_REG, 0x00);
- return val;
-}
-
-static void
-writePciCfg2(CARD32 reg, CARD32 val)
-{
- CARD8 bus = (reg >> 16) & 0xff;
- CARD8 dev = (reg >> 11) & 0x1f;
- CARD8 num = reg & 0xff;
-
- outb(PCI_MODE2_ENABLE_REG, 0xF1);
- outb(PCI_MODE2_FORWARD_REG, bus);
- outl((dev << 8) + num,val);
- outb(PCI_MODE2_ENABLE_REG, 0x00);
-}
-#endif
-#endif
-
-void
-pciVideoDisable(void)
-{
- /* disable VGA routing on bridges */
- PciBusPtr pbp = PciBuses;
- PciStructPtr pcp = PciStruct;
-
- while (pbp) {
- writePci(pbp->Slot.l | 0x3c, pbp->bctl & ~(CARD32)(8<<16));
- pbp = pbp->next;
- }
- /* disable display devices */
- while (pcp) {
- writePci(pcp->Slot.l | 0x04, pcp->cmd_st & ~(CARD32)3);
- writePci(pcp->Slot.l | 0x30, pcp->RomBase & ~(CARD32)1);
- pcp = pcp->next;
- }
-}
-
-void
-pciVideoRestore(void)
-{
- /* disable VGA routing on bridges */
- PciBusPtr pbp = PciBuses;
- PciStructPtr pcp = PciStruct;
-
- while (pbp) {
- writePci(pbp->Slot.l | 0x3c, pbp->bctl);
- pbp = pbp->next;
- }
- /* disable display devices */
- while (pcp) {
- writePci(pcp->Slot.l | 0x04, pcp->cmd_st);
- writePci(pcp->Slot.l | 0x30, pcp->RomBase);
- pcp = pcp->next;
- }
-}
-
-void
-EnableCurrent()
-{
- PciBusPtr pbp;
- PciStructPtr pcp = CurrentPci;
-
- pciVideoDisable();
-
- pbp = pcp->pBus;
- while (pbp) { /* enable bridges */
- writePci(pbp->Slot.l | 0x3c, pbp->bctl | (CARD32)(8<<16));
- pbp = pbp->pBus;
- }
- writePci(pcp->Slot.l | 0x04, pcp->cmd_st | (CARD32)3);
- writePci(pcp->Slot.l | 0x30, pcp->RomBase | (CARD32)1);
-}
-
-CARD8
-PciRead8(int offset, CARD32 Slot)
-{
- int shift = offset & 0x3;
- offset = offset & 0xFC;
- return ((readPci(Slot | offset) >> (shift << 3)) & 0xff);
-}
-
-CARD16
-PciRead16(int offset, CARD32 Slot)
-{
- int shift = offset & 0x2;
- offset = offset & 0xFC;
- return ((readPci(Slot | offset) >> (shift << 3)) & 0xffff);
-}
-
-CARD32
-PciRead32(int offset, CARD32 Slot)
-{
- offset = offset & 0xFC;
- return (readPci(Slot | offset));
-}
-
-void
-PciWrite8(int offset, CARD8 byte, CARD32 Slot)
-{
- CARD32 val;
- int shift = offset & 0x3;
- offset = offset & 0xFC;
- val = readPci(Slot | offset);
- val &= ~(CARD32)(0xff << (shift << 3));
- val |= byte << (shift << 3);
- writePci(Slot | offset, val);
-}
-
-void
-PciWrite16(int offset, CARD16 word, CARD32 Slot)
-{
- CARD32 val;
- int shift = offset & 0x2;
- offset = offset & 0xFC;
- val = readPci(Slot | offset);
- val &= ~(CARD32)(0xffff << (shift << 3));
- val |= word << (shift << 3);
- writePci(Slot | offset, val);
-}
-
-void
-PciWrite32(int offset, CARD32 lg, CARD32 Slot)
-{
- offset = offset & 0xFC;
- writePci(Slot | offset, lg);
-}
-
-int
-mapPciRom(PciStructPtr pciP)
-{
- unsigned long RomBase = 0;
- int mem_fd;
- unsigned char *mem, *ptr;
- unsigned char *scratch = NULL;
- int length = 0;
- CARD32 biosSize = 0x1000000;
- CARD32 enablePci = 0; /* to keep gcc happy */
-
- if (!pciP)
- pciP = CurrentPci;
-
- if (FIX_ROM) {
- RomBase = findBIOSMap(pciP, &biosSize);
- if (!RomBase) {
- RomBase = pciP->RomBase & ~(CARD32)0xFF;
- }
- } else {
- RomBase = pciP->RomBase & ~(CARD32)0xFF;
- if (~RomBase + 1 < biosSize || !RomBase)
- RomBase = findBIOSMap(pciP, &biosSize);
- }
-
- if ((mem_fd = open(MEM_FILE,O_RDONLY))<0) {
- perror("opening memory");
- restoreMem(pciP);
- return (0);
- }
-
- PciWrite32(0x30,RomBase | 1,pciP->Slot.l);
-
-#ifdef __alpha__
- mem = ptr = (unsigned char *)mmap(0, biosSize, PROT_READ,
- MAP_SHARED, mem_fd, RomBase | _bus_base());
-#else
- mem = ptr = (unsigned char *)mmap(0, biosSize, PROT_READ,
- MAP_SHARED, mem_fd, RomBase);
-#endif
- if (pciP != CurrentPci) {
- enablePci = PciRead32(0x4,pciP->Slot.l);
- PciWrite32(0x4,enablePci | 0x2,pciP->Slot.l);
- }
-
- while ( *ptr == 0x55 && *(ptr+1) == 0xAA) {
- unsigned short data_off = *(ptr+0x18) | (*(ptr+0x19)<< 8);
- unsigned char *data = ptr + data_off;
- unsigned char type;
- int i;
-
- if (*data!='P' || *(data+1)!='C' || *(data+2)!='I' || *(data+3)!='R') {
- break;
- }
- type = *(data + 0x14);
-
- if (type != 0) { /* not PC-AT image: find next one */
- unsigned int image_length;
- unsigned char indicator = *(data + 0x15);
- if (indicator & 0x80) /* last image */
- break;
- image_length = (*(data + 0x10)
- | (*(data + 0x11) << 8)) << 9;
- ptr = ptr + image_length;
- continue;
- }
- /* OK, we have a PC Image */
- length = (*(ptr + 2) << 9);
- scratch = (unsigned char *)malloc(length);
- /* don't use memcpy() here: Reading from bus! */
- for (i=0;i<length;i++)
- *(scratch + i)=*(ptr + i);
- break;
- }
-
- if (pciP != CurrentPci)
- PciWrite32(0x4,enablePci,pciP->Slot.l);
-
- /* unmap/close/disable PCI bios mem */
- munmap(mem, biosSize);
- close(mem_fd);
- /* disable and restore mapping */
- writePci(pciP->Slot.l | 0x30, pciP->RomBase & ~(CARD32)1);
-
- if (scratch && length) {
- memcpy((unsigned char *)V_BIOS, scratch, length);
- free(scratch);
- }
-
- restoreMem(pciP);
- return length;
-}
-
-CARD32
-findPci(CARD16 slotBX)
-{
- CARD32 slot = slotBX << 8;
-
- if (slot == (CurrentPci->Slot.l & ~PCI_EN))
- return (CurrentPci->Slot.l | PCI_EN);
- else {
-#if !SHOW_ALL_DEV
- PciBusPtr pBus = CurrentPci->pBus;
- while (pBus) {
- if (slot == (pBus->Slot.l & ~PCI_EN))
- return pBus->Slot.l | PCI_EN;
- pBus = pBus->next;
- }
-#else
- PciStructPtr pPci = PciStruct;
- while (pPci) {
- if (slot == (pPci->Slot.l & ~PCI_EN))
- return pPci->Slot.l | PCI_EN;
- pPci = pPci->next;
- }
-#endif
- }
- return 0;
-}
-
-CARD16
-pciSlotBX(PciStructPtr pPci)
-{
- return (CARD16)((pPci->Slot.l >> 8) & 0xFFFF);
-}
-
-PciStructPtr
-findPciDevice(CARD16 vendorID, CARD16 deviceID, char n)
-{
- PciStructPtr pPci = CurrentPci;
- n++;
-
- while (pPci) {
- if ((pPci->VendorID == vendorID) && (pPci->DeviceID == deviceID)) {
- if (!(--n)) break;
- }
- pPci = pPci->next;
- }
- return pPci;
-}
-
-PciStructPtr
-findPciClass(CARD8 intf, CARD8 subClass, CARD16 class, char n)
-{
- PciStructPtr pPci = CurrentPci;
- n++;
-
- while (pPci) {
- if ((pPci->Interface == intf) && (pPci->SubClass == subClass)
- && (pPci->BaseClass == class)) {
- if (!(--n)) break;
- }
- pPci = pPci->next;
- }
- return pPci;
-}
-
-static void
-readConfigSpaceCfg1(CARD32 bus, CARD32 dev, CARD32 func, CARD32 *reg)
-{
- CARD32 config_cmd = PCI_EN | (bus<<16) |
- (dev<<11) | (func<<8);
- int i;
-
- for (i = 0; i<64;i+=4) {
-#ifdef __alpha__
- reg[i] = axpPciCfgRead(config_cmd | i);
-#else
- outl(PCI_MODE1_ADDRESS_REG, config_cmd | i);
- reg[i] = inl(PCI_MODE1_DATA_REG);
-#endif
-
- }
-}
-
-static int
-checkSlotCfg1(CARD32 bus, CARD32 dev, CARD32 func)
-{
- CARD32 config_cmd = PCI_EN | (bus<<16) |
- (dev<<11) | (func<<8);
- CARD32 reg;
-#ifdef __alpha__
- reg = axpPciCfgRead(config_cmd);
-#else
- outl(PCI_MODE1_ADDRESS_REG, config_cmd);
- reg = inl(PCI_MODE1_DATA_REG);
-#endif
- if (reg != 0xFFFFFFFF)
- return 1;
- else
- return 0;
-}
-
-static int
-checkSlotCfg2(CARD32 bus, int dev)
-{
- CARD32 val;
-
- outb(PCI_MODE2_ENABLE_REG, 0xF1);
- outb(PCI_MODE2_FORWARD_REG, bus);
- val = inl(dev << 8);
- outb(PCI_MODE2_FORWARD_REG, 0x00);
- outb(PCI_MODE2_ENABLE_REG, 0x00);
- if (val == 0xFFFFFFFF)
- return 0;
- if (val == 0xF0F0F0F0)
- return 0;
- return 1;
-}
-
-static void
-readConfigSpaceCfg2(CARD32 bus, int dev, CARD32 *reg)
-{
- int i;
-
- outb(PCI_MODE2_ENABLE_REG, 0xF1);
- outb(PCI_MODE2_FORWARD_REG, bus);
- for (i = 0; i<64;i+=4) {
- reg[i] = inl((dev << 8) + i);
- }
- outb(PCI_MODE2_ENABLE_REG, 0x00);
-}
-
-static CARD8
-interpretConfigSpace(CARD32 *reg, int busidx, CARD8 dev, CARD8 func)
-{
- CARD32 config_cmd;
- CARD16 vendor, device;
- CARD8 baseclass, subclass;
- CARD8 primary, secondary;
- CARD8 header, interface;
- int i;
-
- config_cmd = PCI_EN | busidx<<16 |
- (dev<<11) | (func<<8);
-
- for (i = 0x10; i < 0x28; i+=4) {
- if (IS_MEM32(reg[i]))
- if ((reg[i] & 0xFFFFFFF0) < pciMinMemReg)
- pciMinMemReg = (reg[i] & 0xFFFFFFF0);
-#ifdef __alpha__
- if (IS_MEM64(reg[i])) {
- unsigned long addr = reg[i] |
- (unsigned long)(reg[i+4]) << 32;
- if ((addr & ~0xfL) < pciMinMemReg)
- pciMinMemReg = (addr & ~0xfL);
- i+=4;
- }
-#endif
- }
- vendor = reg[0] & 0xFFFF;
- device = reg[0] >> 16;
- baseclass = reg[8] >> 24;
- subclass = (reg[8] >> 16) & 0xFF;
- interface = (reg[8] >> 8) & 0xFF;
-
- header = (reg[0x0c] >> 16) & 0xff;
- if (BRIDGE_CLASS(baseclass)) {
- if (BRIDGE_PCI_CLASS(subclass)) {
- PciBusPtr pbp = malloc(sizeof(PciBusRec));
- primary = reg[0x18] & 0xFF;
- secondary = (reg[0x18] >> 8) & 0xFF;
- pbp->bctl = reg[0x3c];
- pbp->primary = primary;
- pbp->secondary = secondary;
- pbp->Slot.l = config_cmd;
- pbp->next = PciBuses;
- PciBuses = pbp;
- numbus++;
- } else if (BRIDGE_HOST_CLASS(subclass)
- && (hostbridges++ > 1)) {
- numbus++;
- }
- } else if (VIDEO_CLASS(baseclass,subclass)) {
- PciStructPtr pcp = malloc(sizeof(PciStructRec));
- pcp->RomBase = reg[0x30];
- pcp->cmd_st = reg[4];
- pcp->active = (reg[4] & 0x03) == 3 ? 1 : 0;
- pcp->VendorID = vendor;
- pcp->DeviceID = device;
- pcp->Interface = interface;
- pcp->BaseClass = baseclass;
- pcp->SubClass = subclass;
- pcp->Slot.l = config_cmd;
- pcp->bus = busidx;
- pcp->dev = dev;
- pcp->func = func;
- pcp->next = PciStruct;
- PciStruct = pcp;
- }
- if ((func == 0)
- && ((header & PCI_MULTIFUNC_DEV) == 0))
- func = 8;
- else
- func++;
- return func;
-}
-
-static CARD32 remapMEM_val;
-static int remapMEM_num;
-
-static int /* map it on some other video device */
-remapMem(PciStructPtr pciP, int num, CARD32 size)
-{
- PciStructPtr pciPtr = PciStruct;
- int i;
- CARD32 org;
- CARD32 val;
- CARD32 size_n;
-
- org = PciRead32(num + 0x10,pciP->Slot.l);
-
- while (pciPtr) {
- for (i = 0; i < 20; i=i+4) {
-
- val = PciRead32(i + 0x10,pciPtr->Slot.l);
- /* don't map it on itself */
- if ((org & 0xfffffff0) == (val & 0xfffffff0))
- continue;
- if (val && !(val & 1))
- PciWrite32(i + 0x10,0xffffffff,pciPtr->Slot.l);
- else
- continue;
- size_n = PciRead32(i + 0x10,pciPtr->Slot.l);
- PciWrite32(i + 0x10,val,pciPtr->Slot.l);
- size_n = ~(CARD32)(size_n & 0xfffffff0) + 1;
-
- if (size_n >= size) {
- PciWrite32(num + 0x10,val,pciP->Slot.l);
- return 1;
- }
- }
- pciPtr = pciPtr->next;
- }
- /* last resort: try to go below lowest PCI mem address */
- val = ((pciMinMemReg & ~(CARD32)(size - 1)) - size);
- if (val > 0x7fffffff) {
- PciWrite32(num + 0x10,val, pciP->Slot.l);
- return 1;
- }
-
- return 0;
-}
-
-static void
-restoreMem(PciStructPtr pciP)
-{
- if (remapMEM_val == 0) return;
- PciWrite32(remapMEM_num + 0x10,remapMEM_val,pciP->Slot.l);
- return;
-}
-
-static CARD32
-findBIOSMap(PciStructPtr pciP, CARD32 *biosSize)
-{
- PciStructPtr pciPtr = PciStruct;
- int i;
- CARD32 val;
- CARD32 size = 4*1024; /* should be fixed: size seems _really_ to be undefined below */
-
- PciWrite32(0x30,0xffffffff,pciP->Slot.l);
- *biosSize = PciRead32(0x30,pciP->Slot.l);
- PciWrite32(0x30,pciP->RomBase,pciP->Slot.l);
- *biosSize = ~(*biosSize & 0xFFFFFF00) + 1;
- if (*biosSize > (1024 * 1024 * 16)) {
- *biosSize = 1024 * 1024 * 16;
- }
- while (pciPtr) {
- if (pciPtr->bus != pciP->bus) {
- pciPtr = pciPtr->next;
- continue;
- }
- for (i = 0; i < 20; i=i+4) {
-
- val = PciRead32(i + 0x10,pciPtr->Slot.l);
- if (!(val & 1))
-
- PciWrite32(i + 0x10,0xffffffff,pciPtr->Slot.l);
- else
- continue;
- size = PciRead32(i + 0x10,pciPtr->Slot.l);
- PciWrite32(i + 0x10,val,pciPtr->Slot.l);
- size = ~(CARD32)(size & 0xFFFFFFF0) + 1;
- if (size >= *biosSize) {
- if (pciP == pciPtr) { /* if same device remap ram*/
- if (!(remapMem(pciP,i,size)))
- continue;
- remapMEM_val = val;
- remapMEM_num = i;
- } else {
- remapMEM_val = 0;
- }
- return val & 0xFFFFFF00;
- }
- }
- pciPtr = pciPtr->next;
- }
- remapMEM_val = 0;
- /* very last resort */
- if (pciP->bus == 0 && (pciMinMemReg > *biosSize))
- return (pciMinMemReg - size) & ~(size - 1);
-
- return 0;
-}
-
-int
-cfg1out(CARD16 addr, CARD32 val)
-{
- if (addr == 0xCF8) {
- PciCfg1Addr = val;
- return 1;
- } else if (addr == 0xCFC) {
- writePci(PciCfg1Addr, val);
- return 1;
- }
- return 0;
-}
-
-int
-cfg1in(CARD16 addr, CARD32 *val)
-{
- if (addr == 0xCF8) {
- *val = PciCfg1Addr;
- return 1;
- } else if (addr == 0xCFC) {
- *val = readPci(PciCfg1Addr);
- return 1;
- }
- return 0;
-}
-
-PciStructPtr
-findPciByIDs(int bus, int dev, int func)
-{
- PciStructPtr pciP = PciList;
-
- while (pciP) {
- if (pciP->bus == (unsigned) bus && pciP->dev == (unsigned) dev && pciP->func == (unsigned) func)
- return pciP;
- pciP = pciP->next;
- }
- return NULL;
-}
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <unistd.h>
-#include <errno.h>
-#include <asm/unistd.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef __i386__
-#include <sys/vm86.h>
-#else
-#include "vm86_struct.h"
-#endif
-#include <signal.h>
-#include "v86bios.h"
-#include "AsmMacros.h"
-
-extern int emu_vm86(struct vm86_struct *vm, unsigned debug);
-
-#define INT2PTR(a) ((a) + (unsigned char *) 0)
-
-void log_err(char *format, ...) __attribute__ ((format (printf, 1, 2)));
-
-struct vm86_struct vm86s;
-
-static int vm86_GP_fault(void);
-static int vm86_do_int(int num);
-#ifdef __i386__
-static int vm86_rep(struct vm86_struct *ptr);
-#endif
-void log_registers(void);
-
-#define CPU_REG(x) (vm86s.regs.x)
-#define CPU_REG_LW(reg) (*((CARD16 *)&CPU_REG(reg)))
-#define CPU_REG_HW(reg) (*((CARD16 *)&CPU_REG(reg) + 1))
-#define CPU_REG_LB(reg) (*(CARD8 *)&CPU_REG(e##reg))
-#define SEG_ADR(type, seg, reg) type((CPU_REG_LW(seg) << 4) + CPU_REG_LW(e##reg) + (unsigned char *) 0)
-#define DF (1 << 10)
-
-struct pio P;
-
-void
-setup_io(void)
-{
- P.inb = (CARD8(*)(CARD16))inb;
- P.inw = (CARD16(*)(CARD16))inw;
- P.inl = (CARD32(*)(CARD16))inl;
- P.outb = (void(*)(CARD16,CARD8))outb;
- P.outw = (void(*)(CARD16,CARD16))outw;
- P.outl = (void(*)(CARD16,CARD32))outl;
-}
-
-
-static void
-setup_vm86(unsigned long bios_start, i86biosRegsPtr regs)
-{
- CARD32 eip;
- CARD16 cs;
-
- vm86s.flags = VM86_SCREEN_BITMAP;
- vm86s.flags = 0;
- vm86s.screen_bitmap = 0;
- vm86s.cpu_type = CPU_586;
- memset(&vm86s.int_revectored, 0xff,sizeof(vm86s.int_revectored)) ;
- memset(&vm86s.int21_revectored, 0xff,sizeof(vm86s.int21_revectored)) ;
-
- eip = bios_start & 0xFFFF;
- cs = (bios_start & 0xFF0000) >> 4;
-
- CPU_REG(eax) = regs->ax;
- CPU_REG(ebx) = regs->bx;
- CPU_REG(ecx) = regs->cx;
- CPU_REG(edx) = regs->dx;
- CPU_REG(esi) = 0;
- CPU_REG(edi) = regs->di;
- CPU_REG(ebp) = 0;
- CPU_REG(eip) = eip;
- CPU_REG(cs) = cs;
- CPU_REG(esp) = 0x100;
- CPU_REG(ss) = 0x30; /* This is the standard pc bios stack */
- CPU_REG(es) = regs->es;
- CPU_REG(ds) = 0x40; /* standard pc ds */
- CPU_REG(fs) = 0;
- CPU_REG(gs) = 0;
- CPU_REG(eflags) |= (VIF_MASK | VIP_MASK);
-}
-
-void
-collect_bios_regs(i86biosRegsPtr regs)
-{
- regs->ax = CPU_REG(eax);
- regs->bx = CPU_REG(ebx);
- regs->cx = CPU_REG(ecx);
- regs->dx = CPU_REG(edx);
- regs->es = CPU_REG(es);
- regs->ds = CPU_REG(ds);
- regs->di = CPU_REG(edi);
- regs->si = CPU_REG(esi);
-}
-
-static int do_vm86(int cpuemu)
-{
- int retval;
-
-#ifdef V86BIOS_DEBUG
- dump_registers();
-#endif
-
-#ifdef __i386__
- if(cpuemu) {
- retval = emu_vm86(&vm86s, cpuemu & 2);
- }
- else {
- retval = vm86_rep(&vm86s);
- }
-#else
- retval = emu_vm86(&vm86s, cpuemu & 2);
-#endif
-
- switch (VM86_TYPE(retval)) {
- case VM86_UNKNOWN:
- if (!vm86_GP_fault())
- return 0;
- break;
- case VM86_STI:
- log_err("vm86_sti :-((\n");
- log_registers();
- return 0;
- case VM86_INTx:
- if (!vm86_do_int(VM86_ARG(retval))) {
- log_err("Unknown vm86_int: %X\n",VM86_ARG(retval));
- log_registers();
- return 0;
- }
- /* I'm not sure yet what to do if we can handle ints */
- break;
- case VM86_SIGNAL:
- log_err("VBE: received a signal!\n");
- log_registers();
- return 0;
- default:
- log_err("unknown type(0x%x)=0x%x\n",
- VM86_ARG(retval),VM86_TYPE(retval));
- log_registers();
- return 0;
- }
-
- return 1;
-}
-
-void
-do_x86(unsigned long bios_start, i86biosRegsPtr regs, int cpuemu)
-{
- setup_vm86(bios_start, regs);
- while(do_vm86(cpuemu)) {};
- collect_bios_regs(regs);
-}
-
-/* get the linear address */
-#define LIN_PREF_SI ((pref_seg << 4) + CPU_REG_LW(esi))
-
-#define LWECX (prefix66 ^ prefix67 ? CPU_REG(ecx) : CPU_REG_LW(ecx))
-
-static int
-vm86_GP_fault(void)
-{
- unsigned char *csp, *lina;
- CARD32 org_eip;
- int pref_seg;
- int done,is_rep,prefix66,prefix67;
-
-
- csp = lina = SEG_ADR((unsigned char *), cs, ip);
-#ifdef V86BIOS_DEBUG
- printf("exception: \n");
- dump_code();
-#endif
-
- is_rep = 0;
- prefix66 = prefix67 = 0;
- pref_seg = -1;
-
- /* eat up prefixes */
- done = 0;
- do {
- switch (*(csp++)) {
- case 0x66: /* operand prefix */ prefix66=1; break;
- case 0x67: /* address prefix */ prefix67=1; break;
- case 0x2e: /* CS */ pref_seg=CPU_REG(cs); break;
- case 0x3e: /* DS */ pref_seg=CPU_REG(ds); break;
- case 0x26: /* ES */ pref_seg=CPU_REG(es); break;
- case 0x36: /* SS */ pref_seg=CPU_REG(ss); break;
- case 0x65: /* GS */ pref_seg=CPU_REG(gs); break;
- case 0x64: /* FS */ pref_seg=CPU_REG(fs); break;
- case 0xf2: /* repnz */
- case 0xf3: /* rep */ is_rep=1; break;
- default: done=1;
- }
- } while (!done);
- csp--; /* oops one too many */
- org_eip = CPU_REG(eip);
- CPU_REG_LW(eip) += (csp - lina);
-
- switch (*csp) {
-
- case 0x6c: /* insb */
- /* NOTE: ES can't be overwritten; prefixes 66,67 should use esi,edi,ecx
- * but is anyone using extended regs in real mode? */
- /* WARNING: no test for DI wrapping! */
- CPU_REG_LW(edi) += port_rep_inb(CPU_REG_LW(edx),
- SEG_ADR((CARD8 *),es,di),
- CPU_REG_LW(eflags)&DF,
- (is_rep? LWECX:1));
- if (is_rep) LWECX = 0;
- CPU_REG_LW(eip)++;
- break;
-
- case 0x6d: /* (rep) insw / insd */
- /* NOTE: ES can't be overwritten */
- /* WARNING: no test for _DI wrapping! */
- if (prefix66) {
- CPU_REG_LW(edi) += port_rep_inl(CPU_REG_LW(edx),
- SEG_ADR((CARD32 *),es,di),
- CPU_REG_LW(eflags)&DF,
- (is_rep? LWECX:1));
- }
- else {
- CPU_REG_LW(edi) += port_rep_inw(CPU_REG_LW(edx),
- SEG_ADR((CARD16 *),es,di),
- CPU_REG_LW(eflags)&DF,
- (is_rep? LWECX:1));
- }
- if (is_rep) LWECX = 0;
- CPU_REG_LW(eip)++;
- break;
-
- case 0x6e: /* (rep) outsb */
- if (pref_seg < 0) pref_seg = CPU_REG_LW(ds);
- /* WARNING: no test for _SI wrapping! */
- CPU_REG_LW(esi) += port_rep_outb(CPU_REG_LW(edx),(CARD8*)INT2PTR(LIN_PREF_SI),
- CPU_REG_LW(eflags)&DF,
- (is_rep? LWECX:1));
- if (is_rep) LWECX = 0;
- CPU_REG_LW(eip)++;
- break;
-
- case 0x6f: /* (rep) outsw / outsd */
- if (pref_seg < 0) pref_seg = CPU_REG_LW(ds);
- /* WARNING: no test for _SI wrapping! */
- if (prefix66) {
- CPU_REG_LW(esi) += port_rep_outl(CPU_REG_LW(edx),
- (CARD32 *)INT2PTR(LIN_PREF_SI),
- CPU_REG_LW(eflags)&DF,
- (is_rep? LWECX:1));
- }
- else {
- CPU_REG_LW(esi) += port_rep_outw(CPU_REG_LW(edx),
- (CARD16 *)INT2PTR(LIN_PREF_SI),
- CPU_REG_LW(eflags)&DF,
- (is_rep? LWECX:1));
- }
- if (is_rep) LWECX = 0;
- CPU_REG_LW(eip)++;
- break;
-
- case 0xe5: /* inw xx, inl xx */
- if (prefix66) CPU_REG(eax) = P.inl((int) csp[1]);
- else CPU_REG_LW(eax) = P.inw((int) csp[1]);
- CPU_REG_LW(eip) += 2;
- break;
- case 0xe4: /* inb xx */
- CPU_REG_LW(eax) &= ~(CARD32)0xff;
- CPU_REG_LB(ax) |= P.inb((int) csp[1]);
- CPU_REG_LW(eip) += 2;
- break;
- case 0xed: /* inw dx, inl dx */
- if (prefix66) CPU_REG(eax) = P.inl(CPU_REG_LW(edx));
- else CPU_REG_LW(eax) = P.inw(CPU_REG_LW(edx));
- CPU_REG_LW(eip) += 1;
- break;
- case 0xec: /* inb dx */
- CPU_REG_LW(eax) &= ~(CARD32)0xff;
- CPU_REG_LB(ax) |= P.inb(CPU_REG_LW(edx));
- CPU_REG_LW(eip) += 1;
- break;
-
- case 0xe7: /* outw xx */
- if (prefix66) P.outl((int)csp[1], CPU_REG(eax));
- else P.outw((int)csp[1], CPU_REG_LW(eax));
- CPU_REG_LW(eip) += 2;
- break;
- case 0xe6: /* outb xx */
- P.outb((int) csp[1], CPU_REG_LB(ax));
- CPU_REG_LW(eip) += 2;
- break;
- case 0xef: /* outw dx */
- if (prefix66) P.outl(CPU_REG_LW(edx), CPU_REG(eax));
- else P.outw(CPU_REG_LW(edx), CPU_REG_LW(eax));
- CPU_REG_LW(eip) += 1;
- break;
- case 0xee: /* outb dx */
- P.outb(CPU_REG_LW(edx), CPU_REG_LB(ax));
- CPU_REG_LW(eip) += 1;
- break;
-
- case 0xf4:
-#ifdef V86BIOS_DEBUG
- printf("hlt at %p\n", lina);
-#endif
- return 0;
-
- case 0x0f:
- log_err("CPU 0x0f Trap at eip=0x%lx\n",CPU_REG(eip));
- goto op0ferr;
- break;
-
- case 0xf0: /* lock */
- default:
- log_err("unknown reason for exception\n");
- log_registers();
- op0ferr:
- log_err("cannot continue\n");
- return 0;
- } /* end of switch() */
- return 1;
-}
-
-static int
-vm86_do_int(int num)
-{
- int val;
- struct regs86 regs;
-
- /* try to run bios interrupt */
-
- /* if not installed fall back */
-#define COPY(x) regs.x = CPU_REG(x)
-#define COPY_R(x) CPU_REG(x) = regs.x
-
- COPY(eax);
- COPY(ebx);
- COPY(ecx);
- COPY(edx);
- COPY(esi);
- COPY(edi);
- COPY(ebp);
- COPY(eip);
- COPY(esp);
- COPY(cs);
- COPY(ss);
- COPY(ds);
- COPY(es);
- COPY(fs);
- COPY(gs);
- COPY(eflags);
-
- if (!(val = int_handler(num,®s)))
- if (!(val = run_bios_int(num,®s)))
- return val;
-
- COPY_R(eax);
- COPY_R(ebx);
- COPY_R(ecx);
- COPY_R(edx);
- COPY_R(esi);
- COPY_R(edi);
- COPY_R(ebp);
- COPY_R(eip);
- COPY_R(esp);
- COPY_R(cs);
- COPY_R(ss);
- COPY_R(ds);
- COPY_R(es);
- COPY_R(fs);
- COPY_R(gs);
- COPY_R(eflags);
-
- return val;
-#undef COPY
-#undef COPY_R
-}
-
-#ifdef __i386__
-
-static int
-vm86_rep(struct vm86_struct *ptr)
-{
-
- int __res;
-
- /* stay away from %ebx */
- __asm__ __volatile__("push %%ebx\n\tmov %%ecx,%%ebx\n\tpush %%gs\n\tint $0x80\n\tpop %%gs\n\tpop %%ebx\n"
- :"=a" (__res):"a" ((int)113),
- "c" ((struct vm86_struct *)ptr));
-
- if ((__res) < 0) {
- errno = -__res;
- __res=-1;
- }
- else errno = 0;
- return __res;
-}
-
-#endif
-
-#ifdef __i386__
-
-#define pushw(base, ptr, val) \
-__asm__ __volatile__( \
- "decw %w0\n\t" \
- "movb %h2,(%1,%0)\n\t" \
- "decw %w0\n\t" \
- "movb %b2,(%1,%0)" \
- : "=r" (ptr) \
- : "r" (base), "q" (val), "0" (ptr))
-
-#else
-
-#define pushw(base, ptr, val) { \
- ptr = ((ptr) - 1) & 0xffff; \
- *((unsigned char *)(base) + (ptr)) = (val) >> 8; \
- ptr = ((ptr) - 1) & 0xffff; \
- *((unsigned char *)(base) + (ptr)) = (val); \
- }
-
-#endif
-
-int
-run_bios_int(int num, struct regs86 *regs)
-{
- CARD16 *ssp;
- CARD32 sp;
- CARD32 eflags;
-
-#ifdef V86BIOS_DEBUG
- static int firsttime = 1;
-#endif
- /* check if bios vector is initialized */
- if (((CARD16*)0)[(num<<1)+1] == 0x0000) { /* SYS_BIOS_SEG ?*/
- return 0;
- }
-
-#ifdef V86BIOS_DEBUG
- if (firsttime) {
- dprint(0,0x3D0);
- firsttime = 0;
- }
-#endif
-
- ssp = (CARD16*)INT2PTR(CPU_REG(ss)<<4);
- sp = (CARD32) CPU_REG_LW(esp);
-
- eflags = regs->eflags;
- eflags = ((eflags & VIF_MASK) != 0)
- ? (eflags | IF_MASK) : (eflags & ~(CARD32) IF_MASK);
- pushw(ssp, sp, eflags);
- pushw(ssp, sp, regs->cs);
- pushw(ssp, sp, (CARD16)regs->eip);
- regs->esp -= 6;
- regs->cs = ((CARD16 *) 0)[(num << 1) + 1];
- regs->eip = (regs->eip & 0xFFFF0000) | ((CARD16 *) 0)[num << 1];
-#ifdef V86BIOS_DEBUG
- dump_code();
-#endif
- regs->eflags = regs->eflags
- & ~(VIF_MASK | TF_MASK | IF_MASK | NT_MASK);
- return 1;
-}
-
-CARD32
-getIntVect(int num)
-{
- return ((CARD32*)0)[num];
-}
-
-CARD32
-getIP(void)
-{
- return (CPU_REG(cs) << 4) + CPU_REG(eip);
-}
-
-void log_registers()
-{
- log_err(
- " eax %08x, ebx %08x, ecx %08x, edx %08x\n"
- " esi %08x, edi %08x, ebp %08x, esp %08x\n"
- " ds %04x, es %04x, fs %04x, gs %04x, ss %04x\n"
- " cs:eip %04x:%08x\n",
- (unsigned) CPU_REG(eax), (unsigned) CPU_REG(ebx), (unsigned) CPU_REG(ecx), (unsigned) CPU_REG(edx),
- (unsigned) CPU_REG(esi), (unsigned) CPU_REG(edi), (unsigned) CPU_REG(ebp), (unsigned) CPU_REG(esp),
- (unsigned) CPU_REG(ds), (unsigned) CPU_REG(es),
- (unsigned) CPU_REG(fs), (unsigned) CPU_REG(gs), (unsigned) CPU_REG(ss),
- (unsigned) CPU_REG(cs), (unsigned) CPU_REG(eip)
- );
-}
-
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <string.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <setjmp.h>
-#if defined(__alpha__) || defined (__ia64__)
-#include <sys/io.h>
-//#elif defined(HAVE_SYS_PERM)
-#else
-#include <sys/perm.h>
-#endif
-#include "v86bios.h"
-#include "pci.h"
-#include "AsmMacros.h"
-#include "vbios.h"
-
-void log_err(char *format, ...) __attribute__ ((format (printf, 1, 2)));
-
-#define SIZE 0x100000
-#define VRAM_START 0xA0000
-#define VRAM_SIZE 0x1FFFF
-#define V_BIOS_SIZE 0x1FFFF
-#define BIOS_START 0x7C00 /* default BIOS entry */
-
-static CARD8 code[] = { 0xcd, 0x10, 0xf4 }; /* int 0x10, hlt */
-// static CARD8 code13[] = { 0xcd, 0x13, 0xf4 }; /* int 0x13, hlt */
-
-static int int10_bios_ok(void);
-static int map(void);
-static void unmap(void);
-static int map_vram(void);
-static void unmap_vram(void);
-static int copy_vbios(hd_data_t *hd_data);
-// static int copy_sbios(void);
-#if MAP_SYS_BIOS
-static int copy_sys_bios(hd_data_t *hd_data);
-#endif
-static int copy_bios_ram(hd_data_t *hd_data);
-static int setup_system_bios(hd_data_t *hd_data);
-static void setup_int_vect(void);
-static int chksum(CARD8 *start);
-
-void loadCodeToMem(unsigned char *ptr, CARD8 *code);
-
-static int vram_mapped = 0;
-static int int10inited = 0;
-
-static sigjmp_buf longjmp_buf;
-
-static void sigsegv_handler(int);
-
-int InitInt10(hd_data_t *hd_data, int pci_cfg_method)
-{
- if(geteuid()) return -1;
-
- if(!map()) return -1;
-
- if(!setup_system_bios(hd_data)) {
- unmap();
- return -1;
- }
-
- setup_io();
-
- if(iopl(3) < 0) {
- unmap();
- return -1;
- }
-
- scan_pci(pci_cfg_method);
-
- for(; CurrentPci; CurrentPci = CurrentPci->next) {
- if(CurrentPci->active) break;
- }
-
- iopl(0);
-
- setup_int_vect();
-
- if(!copy_vbios(hd_data)) {
- unmap();
- return -1;
- }
-
- if(!map_vram() || !copy_bios_ram(hd_data)) {
- unmap();
- return -1;
- }
-
- if(!int10_bios_ok()) {
- unmap();
- return -1;
- }
-
- int10inited = 1;
-
- return 0;
-}
-
-
-void FreeInt10()
-{
- if(!int10inited) return;
-
- unmap_vram();
- unmap();
-
- int10inited = 0;
-}
-
-
-/*
- * Check whether int 0x10 points to some useful code.
- */
-int int10_bios_ok()
-{
- unsigned cs, ip;
- unsigned char *p;
-
- ip = ((uint16_t *) 0)[0x10 * 2];
- cs = ((uint16_t *) 0)[0x10 * 2 + 1];
-
- p = (unsigned char *) ((cs << 4) + ip);
-
- log_err(
- " vbe: int 10h points to %04x:%04x: %02x %02x %02x %02x %02x %02x %02x %02x\n",
- cs, ip,
- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]
- );
-
- /* It can't possibly start with all zeros. */
- if(!*(uint32_t *) p) {
- log_err(" vbe: oops, int 10h points into nirvana!\n");
-
- return 0;
- }
-
- return 1;
-}
-
-
-void sigsegv_handler(int num)
-{
- siglongjmp(longjmp_buf, num + 1000);
-}
-
-
-int CallInt10(int *ax, int *bx, int *cx, unsigned char *buf, int len, int cpuemu)
-{
- i86biosRegs bRegs;
- void (*old_sigsegv_handler)(int) = SIG_DFL;
- void (*old_sigill_handler)(int) = SIG_DFL;
- void (*old_sigtrap_handler)(int) = SIG_DFL;
- int jmp;
-
- if(!int10inited) return -1;
- memset(&bRegs, 0, sizeof bRegs);
- bRegs.ax = *ax;
- bRegs.bx = *bx;
- bRegs.cx = *cx;
- bRegs.dx = 0;
- bRegs.es = 0x7e0;
- bRegs.di = 0x0;
- if(buf) memcpy((unsigned char *) 0x7e00, buf, len);
-
- iopl(3);
-
- jmp = sigsetjmp(longjmp_buf, 1);
-
- if(!jmp) {
- old_sigsegv_handler = signal(SIGSEGV, sigsegv_handler);
- old_sigill_handler = signal(SIGILL, sigsegv_handler);
- old_sigtrap_handler = signal(SIGTRAP, sigsegv_handler);
-
- loadCodeToMem((unsigned char *) BIOS_START, code);
- do_x86(BIOS_START, &bRegs, cpuemu);
- }
- else {
- int10inited = 0;
- log_err("oops: got signal %d in vm86() code\n", jmp - 1000);
- }
-
- signal(SIGTRAP, old_sigtrap_handler);
- signal(SIGILL, old_sigill_handler);
- signal(SIGSEGV, old_sigsegv_handler);
-
- iopl(0);
-
- if(buf) memcpy(buf, (unsigned char *) 0x7e00, len);
-
- *ax = bRegs.ax;
- *bx = bRegs.bx;
- *cx = bRegs.cx;
-
- return bRegs.ax;
-}
-
-
-#if 0
-int CallInt13(int *ax, int *bx, int *cx, int *dx, unsigned char *buf, int len, int cpuemu)
-{
- i86biosRegs bRegs;
-
- if(!int10inited) return -1;
- memset(&bRegs, 0, sizeof bRegs);
- bRegs.ax = *ax;
- bRegs.bx = *bx;
- bRegs.cx = *cx;
- bRegs.dx = *dx;
- bRegs.es = 0x7e0;
- bRegs.ds = 0x7e0;
- bRegs.di = 0x0;
- bRegs.si = 0x0;
- if(buf) memcpy((unsigned char *) 0x7e00, buf, len);
-
- iopl(3);
-
- loadCodeToMem((unsigned char *) BIOS_START, code13);
- do_x86(BIOS_START, &bRegs, cpuemu);
-
- iopl(0);
-
- if(buf) memcpy(buf, (unsigned char *) 0x7e00, len);
-
- *ax = bRegs.ax;
- *bx = bRegs.bx;
- *cx = bRegs.cx;
- *dx = bRegs.dx;
-
- return bRegs.ax;
-}
-#endif
-
-
-int map()
-{
- void* mem;
-
- mem = mmap(0, (size_t) SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANON, -1, 0);
-
- if(mem) {
- perror("anonymous map");
- return 0;
- }
-
- memset(mem, 0, SIZE);
-
- loadCodeToMem((unsigned char *) BIOS_START, code);
-
- return 1;
-}
-
-
-void unmap()
-{
- munmap(0, SIZE);
-}
-
-
-static int
-map_vram(void)
-{
- int mem_fd;
-
-#ifdef __ia64__
- if ((mem_fd = open(MEM_FILE,O_RDWR | O_SYNC))<0)
-#else
- if ((mem_fd = open(MEM_FILE,O_RDWR))<0)
-#endif
- {
- perror("opening memory");
- return 0;
- }
-
-#ifndef __alpha__
- if (mmap((void *) VRAM_START, (size_t) VRAM_SIZE,
- PROT_EXEC | PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED,
- mem_fd, VRAM_START) == (void *) -1)
-#else
- if (!_bus_base()) sparse_shift = 7; /* Uh, oh, JENSEN... */
- if (!_bus_base_sparse()) sparse_shift = 0;
- if ((vram_map = mmap(0,(size_t) (VRAM_SIZE << sparse_shift),
- PROT_READ | PROT_WRITE,
- MAP_SHARED,
- mem_fd, (VRAM_START << sparse_shift)
- | _bus_base_sparse())) == (void *) -1)
-#endif
- {
- perror("mmap error in map_hardware_ram");
- close(mem_fd);
- return (0);
- }
- vram_mapped = 1;
- close(mem_fd);
- return (1);
-}
-
-
-void unmap_vram()
-{
- if(!vram_mapped) return;
-
- munmap((void*) VRAM_START, VRAM_SIZE);
-
- vram_mapped = 0;
-}
-
-
-/*
- * Read video BIOS from /dev/mem.
- *
- * Return:
- * 0: failed
- * 1: ok
- */
-int copy_vbios(hd_data_t *hd_data)
-{
- unsigned size;
- unsigned char tmp[3];
-
- if(!hd_read_mmap(hd_data, MEM_FILE, tmp, V_BIOS, sizeof tmp)) {
- log_err("vbe: failed to read %u bytes at 0x%x\n", (unsigned) sizeof tmp, V_BIOS);
- return 0;
- }
-
- if(tmp[0] != 0x55 || tmp[1] != 0xAA ) {
- log_err("vbe: no bios found at: 0x%x\n", V_BIOS);
- return 0;
- }
-
- size = tmp[2] * 0x200;
-
- if(!hd_read_mmap(hd_data, MEM_FILE, (unsigned char *) V_BIOS, V_BIOS, size)) {
- log_err("vbe: failed to read %d bytes at 0x%x\n", size, V_BIOS);
- return 0;
- }
-
- return chksum((CARD8 *) V_BIOS) ? 1 : 0;
-}
-
-
-#if MAP_SYS_BIOS
-static int
-copy_sys_bios(hd_data_t *hd_data)
-{
- return hd_read_mmap(hd_data, MEM_FILE, (unsigned char *) 0xf0000, 0xf0000, 0xffff);
-}
-#endif
-
-
-static int copy_bios_ram(hd_data_t *hd_data)
-{
- return hd_read_mmap(hd_data, MEM_FILE, (unsigned char *) 0, 0, 0x1000);
-}
-
-void loadCodeToMem(unsigned char *ptr, CARD8 *code)
-{
- while((*ptr++ = *code++) != 0xf4 /* hlt */);
-
- return;
-}
-
-
-/*
- * here we are really paranoid about faking a "real"
- * BIOS. Most of this information was pulled from
- * dosem.
- */
-static void
-setup_int_vect(void)
-{
- const CARD16 cs = 0x0000;
- const CARD16 ip = 0x0;
- int i;
-
- /* let the int vects point to the SYS_BIOS seg */
- for (i=0; i<0x80; i++) {
- ((CARD16*)0)[i<<1] = ip;
- ((CARD16*)0)[(i<<1)+1] = cs;
- }
- /* video interrupts default location */
- ((CARD16*)0)[(0x42<<1)+1] = 0xf000;
- ((CARD16*)0)[0x42<<1] = 0xf065;
- ((CARD16*)0)[(0x10<<1)+1] = 0xf000;
- ((CARD16*)0)[0x10<<1] = 0xf065;
- /* video param table default location (int 1d) */
- ((CARD16*)0)[(0x1d<<1)+1] = 0xf000;
- ((CARD16*)0)[0x1d<<1] = 0xf0A4;
- /* font tables default location (int 1F) */
- ((CARD16*)0)[(0x1f<<1)+1] = 0xf000;
- ((CARD16*)0)[0x1f<<1] = 0xfa6e;
-
- /* int 11 default location */
- ((CARD16*)0)[(0x11<1)+1] = 0xf000;
- ((CARD16*)0)[0x11<<1] = 0xf84d;
- /* int 12 default location */
- ((CARD16*)0)[(0x12<<1)+1] = 0xf000;
- ((CARD16*)0)[0x12<<1] = 0xf841;
- /* int 15 default location */
- ((CARD16*)0)[(0x15<<1)+1] = 0xf000;
- ((CARD16*)0)[0x15<<1] = 0xf859;
- /* int 1A default location */
- ((CARD16*)0)[(0x1a<<1)+1] = 0xf000;
- ((CARD16*)0)[0x1a<<1] = 0xff6e;
- /* int 05 default location */
- ((CARD16*)0)[(0x05<<1)+1] = 0xf000;
- ((CARD16*)0)[0x05<<1] = 0xff54;
- /* int 08 default location */
- ((CARD16*)0)[(0x8<<1)+1] = 0xf000;
- ((CARD16*)0)[0x8<<1] = 0xfea5;
- /* int 13 default location (fdd) */
- ((CARD16*)0)[(0x13<<1)+1] = 0xf000;
- ((CARD16*)0)[0x13<<1] = 0xec59;
- /* int 0E default location */
- ((CARD16*)0)[(0xe<<1)+1] = 0xf000;
- ((CARD16*)0)[0xe<<1] = 0xef57;
- /* int 17 default location */
- ((CARD16*)0)[(0x17<<1)+1] = 0xf000;
- ((CARD16*)0)[0x17<<1] = 0xefd2;
- /* fdd table default location (int 1e) */
- ((CARD16*)0)[(0x1e<<1)+1] = 0xf000;
- ((CARD16*)0)[0x1e<<1] = 0xefc7;
-}
-
-static int
-setup_system_bios(hd_data_t *hd_data)
-{
- char *date = "06/01/99";
- char *eisa_ident = "PCI/ISA";
-
-#if MAP_SYS_BIOS
- if (!copy_sys_bios(hd_data)) return 0;
- return 1;
-#endif
-// memset((void *)0xF0000,0xf4,0xfff7);
-
- /*
- * we trap the "industry standard entry points" to the BIOS
- * and all other locations by filling them with "hlt"
- * TODO: implement hlt-handler for these
- */
- memset((void *)0xF0000,0xf4,0x10000);
-
- /*
- * TODO: we should copy the fdd table (0xfec59-0xfec5b)
- * the video parameter table (0xf0ac-0xf0fb)
- * and the font tables (0xfa6e-0xfe6d)
- * from the original bios here
- */
-
- /* set bios date */
- strcpy((char *)0xFFFF5,date);
- /* set up eisa ident string */
- strcpy((char *)0xFFFD9,eisa_ident);
- /* write system model id for IBM-AT */
- ((char *)0)[0xFFFFE] = 0xfc;
-
- return 1;
-}
-
-
-/*
- * Check BIOS CRC.
- *
- * Return:
- * 0: failed
- * 1: ok
- */
-int chksum(CARD8 *start)
-{
- CARD16 size;
- CARD8 val = 0;
- int i;
-
- size = start[2] * 0x200;
- for(i = 0; i < size; i++) val += start[i];
-
- if(!val) return 1;
-
- log_err("vbe: BIOS chksum wrong\n");
-
- return 0;
-}
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include "vbios.h"
-
-#include "hd.h"
-#include "hd_int.h"
-#include "bios.h"
-
-static unsigned segofs2addr(unsigned char *segofs);
-static unsigned get_data(unsigned char *buf, unsigned buf_size, unsigned addr);
-static void read_vbe_info(hd_data_t *hd_data, vbe_info_t *vbe, unsigned char *vbeinfo, unsigned cpuemu);
-
-static hd_data_t *log_hd_data;
-void log_err(char *format, ...) __attribute__ ((format (printf, 1, 2)));
-
-void get_vbe_info(hd_data_t *hd_data, vbe_info_t *vbe)
-{
- int i;
- unsigned char vbeinfo[0x200];
- int ax, bx, cx;
- unsigned cpuemu = hd_data->flags.cpuemu;
-
- log_hd_data = hd_data;
-
- if(InitInt10(hd_data, hd_data->pci_config_type)) {
- ADD2LOG("VBE: Could not init Int10\n");
- return;
- }
-
- memset(vbeinfo, 0, sizeof vbeinfo);
- strcpy(vbeinfo, "VBE2");
-
- PROGRESS(4, 1, "vbe info");
-
- if(hd_probe_feature(hd_data, pr_cpuemu_debug)) cpuemu |= 2;
-
-#ifdef __i386__
- if(hd_data->flags.cpuemu)
-#endif
- ADD2LOG("vm86: using CPU emulation\n");
-
- ax = 0x4f00; bx = 0; cx = 0;
- i = CallInt10(&ax, &bx, &cx, vbeinfo, sizeof vbeinfo, cpuemu) & 0xffff;
-
- if(i != 0x4f) {
- ADD2LOG("VBE: Error (0x4f00): 0x%04x\n", i);
- FreeInt10();
- return;
- }
-
- if(hd_probe_feature(hd_data, pr_bios_fb)) {
- PROGRESS(4, 2, "mode info");
-
- read_vbe_info(hd_data, vbe, vbeinfo, cpuemu);
- }
-
- if(hd_probe_feature(hd_data, pr_bios_ddc)) {
- PROGRESS(4, 3, "ddc info");
-
- memset(vbeinfo, 0, sizeof vbeinfo);
- ax = 0x4f15; bx = 1; cx = 0;
- i = CallInt10(&ax, &bx, &cx, vbeinfo, sizeof vbeinfo, cpuemu) & 0xffff;
-
- if(i != 0x4f) {
- ADD2LOG("Error (0x4f15): 0x%04x\n", i);
- } else {
- vbe->ok = 1;
- memcpy(vbe->ddc, vbeinfo, sizeof vbe->ddc);
-
- ADD2LOG("edid record:\n");
- for(i = 0; (unsigned) i < sizeof vbe->ddc; i += 0x10) {
- ADD2LOG(" ");
- hexdump(&hd_data->log, 1, 0x10, vbe->ddc + i);
- ADD2LOG("\n");
- }
- }
- }
-
- if(hd_probe_feature(hd_data, pr_bios_mode)) {
- PROGRESS(4, 4, "gfx mode");
-
- ax = 0x4f03; bx = 0; cx = 0;
- i = CallInt10(&ax, &bx, &cx, vbeinfo, sizeof vbeinfo, cpuemu) & 0xffff;
-
- if(i != 0x4f) {
- ADD2LOG("Error (0x4f03): 0x%04x\n", i);
- } else {
- vbe->current_mode = bx;
- vbe->ok = 1;
- }
- }
-
- FreeInt10();
-}
-
-
-unsigned segofs2addr(unsigned char *segofs)
-{
- return segofs[0] + (segofs[1] << 8) + (segofs[2] << 4)+ (segofs[3] << 12);
-}
-
-
-unsigned get_data(unsigned char *buf, unsigned buf_size, unsigned addr)
-{
- unsigned bufferaddr = 0x7e00;
- unsigned len;
-
- *buf = 0;
- len = 0;
-
- if(addr >= bufferaddr && addr < bufferaddr + 0x200) {
- len = bufferaddr + 0x200 - addr;
- if(len >= buf_size) len = buf_size - 1;
- memcpy(buf, addr + (char *) 0, len);
- }
- else if(addr >= 0x0c0000 && addr < 0x100000) {
- len = 0x100000 - addr;
- if(len >= buf_size) len = buf_size - 1;
- memcpy(buf, addr + (char *) 0, len);
- }
-
- buf[len] = 0;
-
- return len;
-}
-
-
-void read_vbe_info(hd_data_t *hd_data, vbe_info_t *vbe, unsigned char *v, unsigned cpuemu)
-{
- unsigned char tmp[1024], s[64];
- unsigned i, l, u;
- unsigned modelist[0x100];
- unsigned bpp, res_bpp, fb, clock;
- vbe_mode_info_t *mi;
- int ax, bx, cx;
-
- vbe->ok = 1;
-
- vbe->version = v[0x04] + (v[0x05] << 8);
- vbe->oem_version = v[0x14] + (v[0x15] << 8);
- vbe->memory = (v[0x12] + (v[0x13] << 8)) << 16;
-
- ADD2LOG(
- "version = %u.%u, oem version = %u.%u\n",
- vbe->version >> 8, vbe->version & 0xff, vbe->oem_version >> 8, vbe->oem_version & 0xff
- );
-
- ADD2LOG("memory = %uk\n", vbe->memory >> 10);
-
- l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x06));
- vbe->oem_name = canon_str(tmp, l);
- ADD2LOG("oem name [0x%05x] = \"%s\"\n", u, vbe->oem_name);
-
- l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x16));
- vbe->vendor_name = canon_str(tmp, l);
- ADD2LOG("vendor name [0x%05x] = \"%s\"\n", u, vbe->vendor_name);
-
- l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x1a));
- vbe->product_name = canon_str(tmp, l);
- ADD2LOG("product name [0x%05x] = \"%s\"\n", u, vbe->product_name);
-
- l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x1e));
- vbe->product_revision = canon_str(tmp, l);
- ADD2LOG("product revision [0x%05x] = \"%s\"\n", u, vbe->product_revision);
-
- l = get_data(tmp, sizeof tmp, u = segofs2addr(v + 0x0e)) >> 1;
-
- for(i = vbe->modes = 0; i < l && i < sizeof modelist / sizeof *modelist; i++) {
- u = tmp[2 * i] + (tmp[2 * i + 1] << 8);
- if(u != 0xffff)
- modelist[vbe->modes++] = u;
- else
- break;
- }
-
- ADD2LOG("%u video modes:\n", vbe->modes);
-
- vbe->mode = new_mem(vbe->modes * sizeof *vbe->mode);
-
- if(!vbe->mode) return;
-
- for(i = 0; i < vbe->modes; i++) {
-
- mi = vbe->mode + i;
-
- mi->number = modelist[i];
-
- ax = 0x4f01; bx = 0; cx = modelist[i];
- l = CallInt10(&ax, &bx, &cx, tmp, sizeof tmp, cpuemu) & 0xffff;
-
- if(l != 0x4f) {
- ADD2LOG("0x%04x: no mode info\n", modelist[i]);
- continue;
- }
-
- mi->attributes = tmp[0x00] + (tmp[0x01] << 8);
-
- mi->width = tmp[0x12] + (tmp[0x13] << 8);
- mi->height = tmp[0x14] + (tmp[0x15] << 8);
- mi->bytes_p_line = tmp[0x10] + (tmp[0x11] << 8);
-
- mi->win_A_start = (tmp[0x08] + (tmp[0x09] << 8)) << 4;
- mi->win_B_start = (tmp[0x0a] + (tmp[0x0b] << 8)) << 4;
-
- mi->win_A_attr = tmp[0x02];
- mi->win_B_attr = tmp[0x03];
-
- mi->win_gran = (tmp[0x04] + (tmp[0x05] << 8)) << 10;
- mi->win_size = (tmp[0x06] + (tmp[0x07] << 8)) << 10;
-
- bpp = res_bpp = 0;
- switch(tmp[0x1b]) {
- case 0:
- bpp = -1;
- break;
-
- case 1:
- bpp = 2;
- break;
-
- case 2:
- bpp = 1;
- break;
-
- case 3:
- bpp = 4;
- break;
-
- case 4:
- bpp = 8;
- break;
-
- case 6:
- bpp = tmp[0x19] - tmp[0x25];
- res_bpp = tmp[0x25];
- }
-
- fb = 0;
- if(vbe->version >= 0x0200) {
- mi->fb_start = tmp[0x28] + (tmp[0x29] << 8) + (tmp[0x2a] << 16) + (tmp[0x2b] << 24);
- }
-
- clock = 0;
- if(vbe->version >= 0x0300) {
- mi->pixel_clock = tmp[0x3e] + (tmp[0x3f] << 8) + (tmp[0x40] << 16) + (tmp[0x41] << 24);
- }
-
- mi->pixel_size = bpp;
-
- if(bpp == -1u) {
- ADD2LOG(" 0x%04x[%02x]: %ux%u, text\n", mi->number, mi->attributes, mi->width, mi->height);
- }
- else {
- if(
- (mi->attributes & 1) && /* mode is supported */
- mi->fb_start
- ) {
- if(!vbe->fb_start) vbe->fb_start = mi->fb_start;
- }
- *s = 0;
- if(res_bpp) sprintf(s, "+%u", res_bpp);
- ADD2LOG(
- " 0x%04x[%02x]: %ux%u+%u, %u%s bpp",
- mi->number, mi->attributes, mi->width, mi->height, mi->bytes_p_line, mi->pixel_size, s
- );
-
- if(mi->pixel_clock) ADD2LOG(", max. %u MHz", mi->pixel_clock/1000000);
-
- if(mi->fb_start) ADD2LOG(", fb: 0x%08x", mi->fb_start);
-
- ADD2LOG(", %04x.%x", mi->win_A_start, mi->win_A_attr);
-
- if(mi->win_B_start || mi->win_B_attr) ADD2LOG("/%04x.%x", mi->win_B_start, mi->win_B_attr);
-
- ADD2LOG(": %uk", mi->win_size >> 10);
-
- if(mi->win_gran != mi->win_size) ADD2LOG("/%uk", mi->win_gran >> 10);
-
- ADD2LOG("\n");
- }
- }
-
-}
-
-void log_err(char *format, ...)
-{
- va_list args;
- char buf[1024];
-
- va_start(args, format);
- vsnprintf(buf, sizeof buf, format, args);
- str_printf(&log_hd_data->log, -2, "%s", buf);
- va_end(args);
-}
-
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#include "v86bios.h"
-
-#ifndef V86_PCI_H
-#define V86_PCI_H
-
-typedef union {
- struct {
- unsigned int zero:2;
- unsigned int reg:6;
- unsigned int func:3;
- unsigned int dev:5;
- unsigned int bus:8;
- unsigned int reserved:7;
- unsigned int enable:1;
- } pci;
- CARD32 l;
-} PciSlot;
-
-typedef struct pciBusRec {
- CARD8 primary;
- CARD8 secondary;
- CARD32 bctl;
- PciSlot Slot;
- struct pciBusRec *next;
- struct pciBusRec *pBus;
-} PciBusRec, *PciBusPtr;
-
-typedef struct pciStructRec {
- CARD16 VendorID;
- CARD16 DeviceID;
- CARD8 Interface;
- CARD8 BaseClass;
- CARD8 SubClass;
- CARD32 RomBase;
- CARD32 bus;
- CARD8 dev;
- CARD8 func;
- CARD32 cmd_st;
- int active;
- PciSlot Slot;
- struct pciStructRec *next;
- PciBusPtr pBus;
-} PciStructRec , *PciStructPtr;
-
-
-extern PciStructPtr CurrentPci;
-extern PciStructPtr PciList;
-extern PciStructPtr BootBios;
-extern int pciMaxBus;
-
-extern CARD32 findPci(CARD16 slotBX);
-extern CARD16 pciSlotBX(PciStructPtr);
-PciStructPtr findPciDevice(CARD16 vendorID, CARD16 deviceID, char n);
-PciStructPtr findPciClass(CARD8 intf, CARD8 subClass, CARD16 class, char n);
-
-extern CARD8 PciRead8(int offset, CARD32 slot);
-extern CARD16 PciRead16(int offset, CARD32 slot);
-extern CARD32 PciRead32(int offset, CARD32 slot);
-
-extern void PciWrite8(int offset,CARD8 byte, CARD32 slot);
-extern void PciWrite16(int offset,CARD16 word, CARD32 slot);
-extern void PciWrite32(int offset,CARD32 lg, CARD32 slot);
-
-extern void scan_pci(int);
-extern void pciVideoDisable(void);
-extern void pciVideoRestore(void);
-extern void EnableCurrent(void);
-extern int mapPciRom(PciStructPtr pciP);
-extern int cfg1out(CARD16 addr, CARD32 val);
-extern int cfg1in(CARD16 addr, CARD32 *val);
-extern void list_pci(void);
-extern PciStructPtr findPciByIDs(int bus, int dev, int func);
-
-#define PCI_MODE2_ENABLE_REG 0xCF8
-#define PCI_MODE2_FORWARD_REG 0xCFA
-#define PCI_MODE1_ADDRESS_REG 0xCF8
-#define PCI_MODE1_DATA_REG 0xCFC
-#if defined(__alpha__) || defined(__sparc__)
-#define PCI_EN 0x00000000
-#else
-#define PCI_EN 0x80000000
-#endif
-#define MAX_DEV_PER_VENDOR_CFG1 32
-#define BRIDGE_CLASS(x) (x == 0x06)
-#define BRIDGE_PCI_CLASS(x) (x == 0x04)
-#define BRIDGE_HOST_CLASS(x) (x == 0x00)
-#define PCI_CLASS_PREHISTORIC 0x00
-#define PCI_SUBCLASS_PREHISTORIC_VGA 0x01
-#define PCI_CLASS_DISPLAY 0x03
-#define PCI_SUBCLASS_DISPLAY_VGA 0x00
-#define PCI_SUBCLASS_DISPLAY_XGA 0x01
-#define PCI_SUBCLASS_DISPLAY_MISC 0x80
-#define VIDEO_CLASS(b,s) \
- (((b) == PCI_CLASS_PREHISTORIC && (s) == PCI_SUBCLASS_PREHISTORIC_VGA) || \
- ((b) == PCI_CLASS_DISPLAY && (s) == PCI_SUBCLASS_DISPLAY_VGA) ||\
- ((b) == PCI_CLASS_DISPLAY && (s) == PCI_SUBCLASS_DISPLAY_XGA) ||\
- ((b) == PCI_CLASS_DISPLAY && (s) == PCI_SUBCLASS_DISPLAY_MISC))
-#define PCI_MULTIFUNC_DEV 0x80
-#define MAX_PCI_DEVICES 64
-#define PCI_MAXBUS 16
-#define PCI_IS_MEM 0x00000001
-#define MAX_PCI_ROM_SIZE (1024 * 1024 * 16)
-
-#define IS_MEM32(x) ((x & 0x7) == 0 && x != 0)
-#define IS_MEM64(x) ((x & 0x7) == 0x4)
-#endif
+++ /dev/null
-/*
- * Copyright 1999 Egbert Eich
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the authors not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifndef V86_BIOS_H
-#define V86_BIOS_H
-
-#if defined (__i386__) || defined (__i486__) || defined (__i586__) || defined (__i686__) || defined (__k6__)
-# ifndef __ia32__
-# define __ia32__
-# endif
-#endif
-
-#include <stdio.h>
-
-#define p_printf(f,a...) do {if (Config.PrintPort) lprintf(f,##a);} \
- while(0)
-#define i_printf(f,a...) do {if (Config.PrintIrq) lprintf(f,##a);} \
- while(0)
-#define P_printf(f,a...) do {if (Config.PrintPci) lprintf(f,##a);} \
- while(0)
-
-typedef unsigned char CARD8;
-typedef unsigned short CARD16;
-typedef unsigned int CARD32;
-#if defined (__alpha__) || defined (__ia64__)
-typedef unsigned long memType;
-#else
-typedef unsigned int memType;
-#endif
-
-typedef int Bool;
-
-#define FALSE 0
-#define TRUE 1
-
-struct config {
- Bool PrintPort;
- Bool IoStatistics;
- Bool PrintIrq;
- Bool PrintPci;
- Bool ShowAllDev;
- Bool PrintIp;
- Bool SaveBios;
- Bool Trace;
- Bool ConfigActiveOnly;
- Bool ConfigActiveDevice;
- Bool MapSysBios;
- Bool Resort;
- Bool FixRom;
- Bool NoConsole;
- Bool BootOnly;
- int Verbose;
-};
-
-struct pio {
- CARD8 (*inb)(CARD16);
- CARD16 (*inw)(CARD16);
- CARD32 (*inl)(CARD16);
- void (*outb)(CARD16,CARD8);
- void (*outw)(CARD16,CARD16);
- void (*outl)(CARD16,CARD32);
-};
-
-struct regs86 {
- long ebx;
- long ecx;
- long edx;
- long esi;
- long edi;
- long ebp;
- long eax;
- long eip;
- long esp;
- unsigned short cs;
- unsigned short ss;
- unsigned short es;
- unsigned short ds;
- unsigned short fs;
- unsigned short gs;
- long eflags;
-};
-
-typedef struct {
- CARD32 ax;
- CARD32 bx;
- CARD32 cx;
- CARD32 dx;
- CARD32 cs;
- CARD32 es;
- CARD32 ds;
- CARD32 si;
- CARD32 di;
-} i86biosRegs, *i86biosRegsPtr;
-
-typedef struct {
- int fd;
- int vt;
-} console;
-
-typedef struct {
- void* address;
- CARD8 orgval;
-} haltpoints;
-
-enum dev_type { NONE, ISA, PCI };
-struct device {
- Bool booted;
- enum dev_type type;
- union {
- int none;
- struct pci {
- int bus;
- int dev;
- int func;
- } pci;
- } loc;
-};
-
-extern struct device Device;
-
-#ifdef __alpha__
-unsigned long _bus_base(void);
-extern void* vram_map;
-extern int sparse_shift;
-#endif
-
-extern struct pio P;
-extern struct config Config;
-#define IOPERM_BITS 1024
-extern int ioperm_list[IOPERM_BITS];
-
-extern void setup_io(void);
-extern void do_x86(unsigned long bios_start,i86biosRegsPtr regs, int cpuemu);
-extern int run_bios_int(int num, struct regs86 *regs);
-extern CARD32 getIntVect(int num);
-CARD32 getIP(void);
-
-extern void call_boot(struct device *dev);
-extern void runINT(int num,i86biosRegsPtr Regs);
-extern void add_hlt(unsigned long addr);
-extern void del_hlt(int addr);
-extern void list_hlt();
-
-extern int port_rep_inb(CARD16 port, CARD8 *base, int d_f, CARD32 count);
-extern int port_rep_inw(CARD16 port, CARD16 *base, int d_f, CARD32 count);
-extern int port_rep_inl(CARD16 port, CARD32 *base, int d_f, CARD32 count);
-extern int port_rep_outb(CARD16 port, CARD8 *base, int d_f, CARD32 count);
-extern int port_rep_outw(CARD16 port, CARD16 *base, int d_f, CARD32 count);
-extern int port_rep_outl(CARD16 port, CARD32 *base, int d_f, CARD32 count);
-extern CARD8 p_inb(CARD16 port);
-extern CARD16 p_inw(CARD16 port);
-extern CARD32 p_inl(CARD16 port);
-extern void p_outb(CARD16 port, CARD8 val);
-extern void p_outw(CARD16 port, CARD16 val);
-extern void p_outl(CARD16 port, CARD32 val);
-#ifdef __alpha__
-extern CARD8 a_inb(CARD16 port);
-extern CARD16 a_inw(CARD16 port);
-extern void a_outb(CARD16 port, CARD8 val);
-extern void a_outw(CARD16 port, CARD16 val);
-#endif
-#ifdef __alpha__
-CARD8 mem_rb(CARD32 addr);
-CARD16 mem_rw(CARD32 addr);
-CARD32 mem_rl(CARD32 addr);
-void mem_wb(CARD32 addr, CARD8 val);
-void mem_ww(CARD32 addr, CARD16 val);
-void mem_wl(CARD32 addr, CARD32 val);
-#endif
-extern void io_statistics(void);
-extern void clear_stat(void);
-extern int int_handler(int num, struct regs86 *regs);
-
-extern console open_console(void);
-extern void close_console(console);
-
-extern void dprint(unsigned long start, unsigned long size);
-
-extern Bool logging;
-extern Bool nostdout;
-extern char* logfile;
-extern void logon(void* ptr);
-extern void logoff();
-extern void lprintf(const char *f, ...);
-
-#define MEM_FILE "/dev/mem"
-#define DEFAULT_V_BIOS 0xc0000
-#ifndef V_BIOS
-#define V_BIOS DEFAULT_V_BIOS
-#endif
-
-#ifdef __alpha__
-#define NEED_PCI_IO
-#endif
-
-#endif
-
+++ /dev/null
-#include "hd.h"
-
-int InitInt10(hd_data_t *, int);
-int CallInt10(int *ax, int *bx, int *cx, unsigned char *buf, int len, int cpuemu);
-int CallInt13(int *ax, int *bx, int *cx, int *dx, unsigned char *buf, int len, int cpuemu);
-void FreeInt10(void);
+++ /dev/null
-#ifndef _LINUX_VM86_H
-#define _LINUX_VM86_H
-
-/*
- * I'm guessing at the VIF/VIP flag usage, but hope that this is how
- * the Pentium uses them. Linux will return from vm86 mode when both
- * VIF and VIP is set.
- *
- * On a Pentium, we could probably optimize the virtual flags directly
- * in the eflags register instead of doing it "by hand" in vflags...
- *
- * Linus
- */
-
-#define TF_MASK 0x00000100
-#define IF_MASK 0x00000200
-#define IOPL_MASK 0x00003000
-#define NT_MASK 0x00004000
-#define VM_MASK 0x00020000
-#define AC_MASK 0x00040000
-#define VIF_MASK 0x00080000 /* virtual interrupt flag */
-#define VIP_MASK 0x00100000 /* virtual interrupt pending */
-#define ID_MASK 0x00200000
-
-#define BIOSSEG 0x0f000
-
-#define CPU_086 0
-#define CPU_186 1
-#define CPU_286 2
-#define CPU_386 3
-#define CPU_486 4
-#define CPU_586 5
-
-/*
- * Return values for the 'vm86()' system call
- */
-#define VM86_TYPE(retval) ((retval) & 0xff)
-#define VM86_ARG(retval) ((retval) >> 8)
-
-#define VM86_SIGNAL 0 /* return due to signal */
-#define VM86_UNKNOWN 1 /* unhandled GP fault - IO-instruction or similar */
-#define VM86_INTx 2 /* int3/int x instruction (ARG = x) */
-#define VM86_STI 3 /* sti/popf/iret instruction enabled virtual interrupts */
-
-/*
- * Additional return values when invoking new vm86()
- */
-#define VM86_PICRETURN 4 /* return due to pending PIC request */
-#define VM86_TRAP 6 /* return due to DOS-debugger request */
-
-/*
- * function codes when invoking new vm86()
- */
-#define VM86_PLUS_INSTALL_CHECK 0
-#define VM86_ENTER 1
-#define VM86_ENTER_NO_BYPASS 2
-#define VM86_REQUEST_IRQ 3
-#define VM86_FREE_IRQ 4
-#define VM86_GET_IRQ_BITS 5
-#define VM86_GET_AND_RESET_IRQ 6
-
-/*
- * This is the stack-layout seen by the user space program when we have
- * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout
- * is 'kernel_vm86_regs' (see below).
- */
-
-struct vm86_regs {
-/*
- * normal regs, with special meaning for the segment descriptors..
- */
- long ebx;
- long ecx;
- long edx;
- long esi;
- long edi;
- long ebp;
- long eax;
- long __null_ds;
- long __null_es;
- long __null_fs;
- long __null_gs;
- long orig_eax;
- long eip;
- unsigned short cs, __csh;
- long eflags;
- long esp;
- unsigned short ss, __ssh;
-/*
- * these are specific to v86 mode:
- */
- unsigned short es, __esh;
- unsigned short ds, __dsh;
- unsigned short fs, __fsh;
- unsigned short gs, __gsh;
-};
-
-struct revectored_struct {
- unsigned long __map[8]; /* 256 bits */
-};
-
-struct vm86_struct {
- struct vm86_regs regs;
- unsigned long flags;
- unsigned long screen_bitmap;
- unsigned long cpu_type;
- struct revectored_struct int_revectored;
- struct revectored_struct int21_revectored;
-};
-
-/*
- * flags masks
- */
-#define VM86_SCREEN_BITMAP 0x0001
-
-struct vm86plus_info_struct {
- unsigned long force_return_for_pic:1;
- unsigned long vm86dbg_active:1; /* for debugger */
- unsigned long vm86dbg_TFpendig:1; /* for debugger */
- unsigned long unused:28;
- unsigned long is_vm86pus:1; /* for vm86 internal use */
- unsigned char vm86dbg_intxxtab[32]; /* for debugger */
-};
-
-struct vm86plus_struct {
- struct vm86_regs regs;
- unsigned long flags;
- unsigned long screen_bitmap;
- unsigned long cpu_type;
- struct revectored_struct int_revectored;
- struct revectored_struct int21_revectored;
- struct vm86plus_info_struct vm86plus;
-};
-
-#endif
+++ /dev/null
-TOPDIR = ../..
-TARGETS = $(LIBHD_D)
-SUBDIRS = cdb
-
-include $(TOPDIR)/Makefile.common
-
-$(LIBHD_D): $(OBJS)
- ar r $(LIBHD) $?
-
+++ /dev/null
-#
-# CDB data export for subclass: ISDN Single Basic Rate
-# Generated at : Sat Aug 30 17:22:29 2003
-#
-# Exported combinations:
-# arch=axp dist=Stable lang=de_DE vario=HiSax driver
-# arch=axp dist=Stable lang=de_DE vario=I4L driver
-# arch=axp dist=Stable lang=de_DE vario=CAPI 2.0 driver
-#
-# Author: dhess@suse.de (13.02.2003)
-# Author: didge@suse.de (04.08.2003)
-#
-#
-# Export format: |Vendorname|Productname|Subclass|Bus|Variation|topic=value|topic=value|...|Variation|topic=value|topic=value|...|
-#
-
-
-|vendor=Billion|device=B009|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb009|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x50023|drv_subtyp=5|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ITH|device=ith mic|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x200|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x11|drv_subtyp=0|drv_typ=17|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=High Soft Tech|device=Saphir|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x250|IO=0x270|IO=0x290|IO=0x2b0|IO=0x2d0|IO=0x350|IO=0x370|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=5|SMP=Yes|drv_id=0x1f|drv_subtyp=0|drv_typ=31|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B00C|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00c|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x80023|drv_subtyp=8|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Cologne Chip AG|device=HFCS+ based card|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x0000|device_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x10025|drv_subtyp=1|drv_typ=37|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=A1T|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0871|device_id=0xffa1|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd0023|drv_subtyp=13|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sagem|device=Niccy PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1267|device_id=0x1016|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20018|drv_subtyp=2|drv_typ=24|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Cologne Chip AG|device=HFC 2BDS0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x110023|drv_subtyp=17|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Formula-n|device=enter:now|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x0055|subdevice_id=0x0002|vario=HiSax driver|SMP=Yes|drv_id=0x10029|drv_subtyp=1|drv_typ=41|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=under development|supported=full|
-|vendor=ICN|device=2B|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=I4L driver|IO=0x300|IO=0x308|IO=0x310|IO=0x318|IO=0x320|IO=0x328|IO=0x330|IO=0x338|IO=0x340|IO=0x348|IO=0x350|IO=0x358|IO=0x360|IO=0x368|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x1f5e|drv_subtyp=0|drv_typ=8030|firmware=pc-%{PROTO}.bin|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=icn|need_packages=i4l-base|supported=full|
-|vendor=TigerJet|device=NetJet PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x00ff|subdevice_id=0x000f|vario=HiSax driver|SMP=Yes|drv_id=0x10014|drv_subtyp=1|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Scitel|device=Quadro|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x9050|subvendor_id=0x0871|subdevice_id=0xffa8|vario=HiSax driver|SMP=Yes|drv_id=0x21|drv_subtyp=0|drv_typ=33|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=ML PCC-16|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=10|IRQ=11|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x30006|drv_subtyp=3|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=16.3c v.2.1|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2750|device_id=0x2026|vario=HiSax driver|SMP=Yes|drv_id=0x25|drv_subtyp=0|drv_typ=37|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Win|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x274c|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x1000f|drv_subtyp=1|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=S0Box|device_class=ISDN Single Basic Rate|bus_type=Parallel|vario=HiSax driver|IO=0x278|IO=0x378|IO=0x3bc|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x19|drv_subtyp=0|drv_typ=25|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0U PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe004|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc000b|drv_subtyp=12|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=CREATIX Creative Information eXchange|device=16.3 PNP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x980e|device_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x10004|drv_subtyp=1|drv_typ=4|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=iSTAR PnP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2750|device_id=0x1074|vario=HiSax driver|SMP=Yes|drv_id=0x1000e|drv_subtyp=1|drv_typ=14|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Siemens|device=ISURF|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x254d|device_id=0x1000|vario=HiSax driver|SMP=Yes|drv_id=0x1d|drv_subtyp=0|drv_typ=29|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Auerswald|device=Comfort 1200 System Telephone|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00f2|vario=HiSax driver|SMP=Yes|drv_id=0x3002a|drv_subtyp=3|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AsKey|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0x144f|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xc0023|drv_subtyp=12|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f41|drv_subtyp=2|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1pcmcia|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Billion|device=BIPAC-D1|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2c09|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x2001e|drv_subtyp=2|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Auerswald|device=COMpact 2104 USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00c0|vario=HiSax driver|SMP=Yes|drv_id=0x2002a|drv_subtyp=2|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Gazel|device=R685|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1030|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x22|drv_subtyp=0|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ASUSCOM|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1043|device_id=0x0675|subvendor_id=0x0675|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xa0023|drv_subtyp=10|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ASUSCOM|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x1043|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x24|drv_subtyp=0|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=16.3 PNP|device_class=ISDN Single Basic Rate|bus_type=ISA PnP|vendor_id=0x2750|device_id=0x1021|vario=HiSax driver|SMP=Yes|drv_id=0x4|drv_subtyp=0|drv_typ=4|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Star|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x20016|drv_subtyp=2|drv_typ=22|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X seriell|device_class=ISDN Single Basic Rate|bus_type=Serial|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Elsa AG|device=ML PCF-Pro|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=10|IRQ=11|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x50006|drv_subtyp=5|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V IOM2 (Europe)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0070|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x120023|drv_subtyp=18|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 3000|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x9315|device_id=0x3401|vario=HiSax driver|SMP=Yes|drv_id=0x80007|drv_subtyp=8|drv_typ=7|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Genius|device=Speed Surfer|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x252f|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x3001e|drv_subtyp=3|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V (North America)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0073|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x150023|drv_subtyp=21|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Berkom|device=A4T|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x11de|device_id=0x6120|subvendor_id=0x0871|subdevice_id=0xffa4|vario=HiSax driver|SMP=Yes|drv_id=0x20|drv_subtyp=0|drv_typ=32|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Siemens|device=ISurf 2|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x254d|device_id=0x2000|vario=HiSax driver|SMP=Yes|drv_id=0x3000c|drv_subtyp=3|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V (Europe)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0071|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x130023|drv_subtyp=19|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=U.S.Robotics|device=Sportster|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x268|IRQ=10|IRQ=11|IRQ=12|IRQ=14|IRQ=15|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x10|drv_subtyp=0|drv_typ=16|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Zolltrix|device=2BDS0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x15b0|device_id=0x2bd0|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x100023|drv_subtyp=16|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva Piccola|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x891c|device_id=0x5100|vario=HiSax driver|SMP=Yes|drv_id=0xb000b|drv_subtyp=11|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Motorola|device=MC145575|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1051|device_id=0x0100|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xf0023|drv_subtyp=15|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PnP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0xcd06|device_id=0x0009|vario=HiSax driver|SMP=Yes|drv_id=0x2001b|drv_subtyp=2|drv_typ=27|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Teles AG|device=16.0 AB|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0xd80|IO=0xe80|IO=0xf80|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=9|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x10001|drv_subtyp=1|drv_typ=1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=PCMCIA IPAC|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0xb000a|drv_subtyp=11|drv_typ=10|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B006|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb006|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20023|drv_subtyp=2|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x1a|drv_subtyp=0|drv_typ=26|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Winbond|device=W6692 card|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x60024|drv_subtyp=6|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ASUSCOM|device=ISA IPAC|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x7506|device_id=0x9016|vario=HiSax driver|SMP=Yes|drv_id=0x2000c|drv_subtyp=2|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=A1 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x1001a|drv_subtyp=1|drv_typ=26|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=AsKey|device=PCI + Voice (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x144f|subdevice_id=0x1703|vario=HiSax driver|SMP=Yes|drv_id=0x30024|drv_subtyp=3|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe002|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x2000b|drv_subtyp=2|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0053|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x6000f|drv_subtyp=6|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ITK|device=ISDN PnP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x8b26|device_id=0x2900|vario=HiSax driver|SMP=Yes|drv_id=0x20009|drv_subtyp=2|drv_typ=9|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Dynalink|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1043|device_id=0x0675|subvendor_id=0x0675|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x40024|drv_subtyp=4|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=ML PC|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=3|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x10006|drv_subtyp=1|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.01 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe005|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x4000b|drv_subtyp=4|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=U.S.Robotics|device=ISDN PCI Card TA|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x16ec|subdevice_id=0x3409|vario=HiSax driver|SMP=Yes|drv_id=0x70024|drv_subtyp=7|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sagem|device=Niccy ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x814c|device_id=0x5001|vario=HiSax driver|SMP=Yes|drv_id=0x10018|drv_subtyp=1|drv_typ=24|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=ML PCF|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=10|IRQ=11|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x40006|drv_subtyp=4|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=16.3 AB|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x180|IO=0x280|IO=0x380|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x10003|drv_subtyp=1|drv_typ=3|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Dynalink|device=6692 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0675|device_id=0x1702|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x50024|drv_subtyp=5|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ITK|device=ISDN 3.0|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x8b26|device_id=0x2500|vario=HiSax driver|SMP=Yes|drv_id=0x10009|drv_subtyp=1|drv_typ=9|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x11de|device_id=0x6120|subvendor_id=0x0000|subdevice_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x15|drv_subtyp=0|drv_typ=21|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Win2 PC104|device_class=ISDN Single Basic Rate|bus_type=PC104|vendor_id=0x0000|device_id=0x0000|subvendor_id=0x0000|subdevice_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x4000f|drv_subtyp=4|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0700|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x11f41|drv_subtyp=1|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1pci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Sedlbauer AG|device=Speed Star2|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x50016|drv_subtyp=5|drv_typ=22|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=Teledat USB 2a/b|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=AsKey|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x144f|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x10024|drv_subtyp=1|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=High Soft Tech|device=saphir III|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0052|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x9000f|drv_subtyp=9|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V IOM2 (North America)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0072|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x140023|drv_subtyp=20|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Dynalink|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0x1043|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xb0023|drv_subtyp=11|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 1000|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x9315|device_id=0x3301|vario=HiSax driver|SMP=Yes|drv_id=0x70007|drv_subtyp=7|drv_typ=7|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ITK|device=ix1-micro Rev.2|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x390|IO=0x398|IO=0x3a0|IO=0x3a8|IRQ=10|IRQ=11|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x9|drv_subtyp=0|drv_typ=9|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=16.3c|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2750|device_id=0x1026|vario=HiSax driver|SMP=Yes|drv_id=0xe|drv_subtyp=0|drv_typ=14|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=SGS Thomson Microelectronics|device=ST5481 USB Adapter|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0483|device_id=0x4810|vario=HiSax driver|SMP=Yes|drv_id=0x103e9|drv_subtyp=1|drv_typ=1001|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_st5481|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0a00|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150|drv_id=0x1001b|drv_subtyp=1|drv_typ=27|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=A1|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x200|IO=0x240|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x10005|drv_subtyp=1|drv_typ=5|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Elsa AG|device=PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x6000a|drv_subtyp=6|drv_typ=10|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Iscas|device=TE320|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x8615|device_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x4000c|drv_subtyp=4|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.02 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd000b|drv_subtyp=13|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ASUSCOM|device=ISA ISAC|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x7506|device_id=0x8816|vario=HiSax driver|SMP=Yes|drv_id=0x1000c|drv_subtyp=1|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Fax+|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x274c|device_id=0x0200|vario=HiSax driver|SMP=Yes|drv_id=0x3001c|drv_subtyp=3|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B008|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb008|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x40023|drv_subtyp=4|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B00B|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x70023|drv_subtyp=7|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=TigerJet|device=300 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x14|drv_subtyp=0|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Seyon|device=B100|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb100|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90023|drv_subtyp=9|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=TigerJet|device=NetSpider-U PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x26|drv_subtyp=0|drv_typ=38|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0054|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x8001c|drv_subtyp=8|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Acer|device=P10|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0xd805|device_id=0x1411|vario=HiSax driver|SMP=Yes|drv_id=0x1e|drv_subtyp=0|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 3000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x3000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xa0012|drv_subtyp=10|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=TeleInt|device=SA1|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x300|IRQ=10|IRQ=11|IRQ=3|IRQ=4|IRQ=5|IRQ=7|SMP=Yes|drv_id=0xd|drv_subtyp=0|drv_typ=13|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B000|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x10023|drv_subtyp=1|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=8.0|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IRQ=3|IRQ=4|IRQ=5|IRQ=6|IRQ=7|IRQ=9|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x2|drv_subtyp=0|drv_typ=2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Microlink ISDN USB|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Teles AG|device=16.0|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0xd80|IO=0xe80|IO=0xf80|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=9|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x1|drv_subtyp=0|drv_typ=1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Auerswald|device=Comfort 2000 System Telephone|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00f1|vario=HiSax driver|SMP=Yes|drv_id=0x4002a|drv_subtyp=4|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sedlbauer AG|device=Speed Card|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x270|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|SMP=Yes|alternative_name=Telekom AG,Teledat 100 ISA|drv_id=0xf|drv_subtyp=0|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B007|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb007|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x30023|drv_subtyp=3|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 1000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90012|drv_subtyp=9|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=16.3|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x180|IO=0x280|IO=0x380|IRQ=10|IRQ=12|IRQ=15|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x3|drv_subtyp=0|drv_typ=3|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Microlink PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc0012|drv_subtyp=12|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Gazel|device=Djinn Itoo|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1151|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20022|drv_subtyp=2|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Pyramid|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0051|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x7001c|drv_subtyp=7|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI v2.0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0e00|subvendor_id=0x1244|subdevice_id=0x0e00|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150 v2.0|drv_id=0x3e8|drv_subtyp=0|drv_typ=1000|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_fcpcipnp|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Compaq Computer Corporation|device=ISDN S0 ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x110e|device_id=0x0210|vario=HiSax driver|SMP=Yes|drv_id=0x13|drv_subtyp=0|drv_typ=19|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=BIPAC-D|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2c09|device_id=0x0200|vario=HiSax driver|SMP=Yes|drv_id=0x1001e|drv_subtyp=1|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Auerswald|device=COMpact 2206 USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00db|vario=HiSax driver|SMP=Yes|drv_id=0x1002a|drv_subtyp=1|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|supported=full|
-|vendor=ASUSCOM|device=PCI + Voice (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x1043|subdevice_id=0x1703|vario=HiSax driver|SMP=Yes|drv_id=0x20024|drv_subtyp=2|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x8|drv_subtyp=0|drv_typ=8|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Gazel|device=R753|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1152|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x10022|drv_subtyp=1|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=ML PCC-8|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=3|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x20006|drv_subtyp=2|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=Tornado Tipac|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0xcd4c|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x4001e|drv_subtyp=4|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Abocom/Magitek|device=2BD1|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x13d1|device_id=0x2bd1|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x160023|drv_subtyp=22|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B00A|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00a|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x60023|drv_subtyp=6|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.01 ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x891c|device_id=0xa100|vario=HiSax driver|SMP=Yes|drv_id=0x3000b|drv_subtyp=3|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=PCI v2|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x00a7|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x20014|drv_subtyp=2|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=Concept|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0871|device_id=0xffa2|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xe0023|drv_subtyp=14|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card Classic|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x200|IO=0x240|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x5|drv_subtyp=0|drv_typ=5|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0 ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x891c|device_id=0x7100|vario=HiSax driver|SMP=Yes|drv_id=0x1000b|drv_subtyp=1|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=C4|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1011|device_id=0x1065|subvendor_id=0x1244|subdevice_id=0x0800|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x31f41|drv_subtyp=3|drv_typ=8001|feature=Fax|firmware=c4.bin|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=4|line_protocol=DSS1|line_protocol=LEASED|module=c4|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=ICN|device=4B|device_class=ISDN Multiple Basic Rate|bus_type=ISA|vario=I4L driver|IO=0x300|IO=0x308|IO=0x310|IO=0x318|IO=0x320|IO=0x328|IO=0x330|IO=0x338|IO=0x340|IO=0x348|IO=0x350|IO=0x358|IO=0x360|IO=0x368|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x11f5e|drv_subtyp=1|drv_typ=8030|firmware=pc-%{PROTO}.bin|interface=I4L|line_cnt=2|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=icn|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=C2|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1011|device_id=0x1065|subvendor_id=0x1244|subdevice_id=0x1100|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x61f41|drv_subtyp=6|drv_typ=8001|firmware=c2.bin|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=2|line_protocol=DSS1|line_protocol=LEASED|module=c4|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=T1 PCI|device_class=ISDN Primary Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x1200|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f45|drv_subtyp=2|drv_typ=8005|firmware=t1-{PROF}.t4|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|module=t1pci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|special=B version|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=BlueFRITZ!USB|device_class=Others|bus_type=USB|vendor_id=0x057c|device_id=0x2200|vario=CAPI 2.0 driver|Interface=CAPI20|SMP=Yes|drv_id=0x11f46|drv_subtyp=1|drv_typ=8006|feature=BLUETOOTH|feature=Basic Rate|firmware=bfubase.frm|line_cnt=1|line_protocol=DSS1|module=bfusb|need_packages=bluez-firmware|need_packages=bluez-libs|need_packages=bluez-utils|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3701|vario=other|SMP=yes|drv_id=0xffff0001|drv_subtyp=1|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3702|vario=other|SMP=yes|drv_id=0xffff0002|drv_subtyp=2|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0003|drv_subtyp=3|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x4001|vario=other|SMP=yes|drv_id=0xffff0004|drv_subtyp=4|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0005|drv_subtyp=5|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3e01|vario=other|SMP=yes|drv_id=0xffff0006|drv_subtyp=6|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=AVM FRITZ!Box Fon|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3a00|vario=other|SMP=yes|drv_id=0xffff0007|drv_subtyp=7|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
+++ /dev/null
-#
-# CDB data export for subclass: ISDN Single Basic Rate
-# Generated at : Sat Sep 13 01:19:56 2003
-#
-# Exported combinations:
-# arch=i386 dist=Stable lang=de_DE vario=HiSax driver
-# arch=i386 dist=Stable lang=de_DE vario=I4L driver
-# arch=i386 dist=Stable lang=de_DE vario=CAPI 2.0 driver
-#
-# Author: dhess@suse.de (13.02.2003)
-# Author: didge@suse.de (04.08.2003)
-#
-#
-# Export format: |Vendorname|Productname|Subclass|Bus|Variation|topic=value|topic=value|...|Variation|topic=value|topic=value|...|
-#
-
-
-|vendor=Billion|device=B009|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb009|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x50023|drv_subtyp=5|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=CAPI 2.0 driver|IO=0x150|IO=0x250|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=6|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x1f41|drv_subtyp=0|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1isa|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=ITH|device=ith mic|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x200|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x11|drv_subtyp=0|drv_typ=17|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=High Soft Tech|device=Saphir|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x250|IO=0x270|IO=0x290|IO=0x2b0|IO=0x2d0|IO=0x350|IO=0x370|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=5|SMP=Yes|drv_id=0x1f|drv_subtyp=0|drv_typ=31|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B00C|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00c|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x80023|drv_subtyp=8|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Cologne Chip AG|device=HFCS+ based card|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x0000|device_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x10025|drv_subtyp=1|drv_typ=37|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card USB v2.0|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x1000|vario=CAPI 2.0 driver|SMP=No|drv_id=0x21f43|drv_subtyp=2|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcusb2|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Telekom AG|device=A1T|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0871|device_id=0xffa1|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd0023|drv_subtyp=13|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sagem|device=Niccy PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1267|device_id=0x1016|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20018|drv_subtyp=2|drv_typ=24|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Cologne Chip AG|device=HFC 2BDS0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x110023|drv_subtyp=17|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Formula-n|device=enter:now|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x0055|subdevice_id=0x0002|vario=HiSax driver|SMP=Yes|drv_id=0x10029|drv_subtyp=1|drv_typ=41|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=under development|supported=full|
-|vendor=ICN|device=2B|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=I4L driver|IO=0x300|IO=0x308|IO=0x310|IO=0x318|IO=0x320|IO=0x328|IO=0x330|IO=0x338|IO=0x340|IO=0x348|IO=0x350|IO=0x358|IO=0x360|IO=0x368|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x1f5e|drv_subtyp=0|drv_typ=8030|firmware=pc-%{PROTO}.bin|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=icn|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=TigerJet|device=NetJet PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x00ff|subdevice_id=0x000f|vario=HiSax driver|SMP=Yes|drv_id=0x10014|drv_subtyp=1|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Scitel|device=Quadro|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x9050|subvendor_id=0x0871|subdevice_id=0xffa8|vario=HiSax driver|SMP=Yes|drv_id=0x21|drv_subtyp=0|drv_typ=33|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=ML PCC-16|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=10|IRQ=11|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x30006|drv_subtyp=3|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=16.3c v.2.1|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2750|device_id=0x2026|vario=HiSax driver|SMP=Yes|drv_id=0x25|drv_subtyp=0|drv_typ=37|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sedlbauer AG|device=Speed Win|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x274c|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x1000f|drv_subtyp=1|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=S0Box|device_class=ISDN Single Basic Rate|bus_type=Parallel|vario=HiSax driver|IO=0x278|IO=0x378|IO=0x3bc|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x19|drv_subtyp=0|drv_typ=25|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0U PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe004|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc000b|drv_subtyp=12|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=CREATIX Creative Information eXchange|device=16.3 PNP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x980e|device_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x10004|drv_subtyp=1|drv_typ=4|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=iSTAR PnP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2750|device_id=0x1074|vario=HiSax driver|SMP=Yes|drv_id=0x1000e|drv_subtyp=1|drv_typ=14|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Siemens|device=ISURF|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x254d|device_id=0x1000|vario=HiSax driver|SMP=Yes|drv_id=0x1d|drv_subtyp=0|drv_typ=29|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Auerswald|device=Comfort 1200 System Telephone|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00f2|vario=HiSax driver|SMP=Yes|drv_id=0x3002a|drv_subtyp=3|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AsKey|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0x144f|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xc0023|drv_subtyp=12|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f41|drv_subtyp=2|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1pcmcia|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Billion|device=BIPAC-D1|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2c09|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x2001e|drv_subtyp=2|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Auerswald|device=COMpact 2104 USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00c0|vario=HiSax driver|SMP=Yes|alternative_name=COMpact 2104 DSL|drv_id=0x2002a|drv_subtyp=2|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Gazel|device=R685|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1030|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x22|drv_subtyp=0|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ASUSCOM|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1043|device_id=0x0675|subvendor_id=0x0675|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xa0023|drv_subtyp=10|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ASUSCOM|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x1043|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x24|drv_subtyp=0|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=16.3 PNP|device_class=ISDN Single Basic Rate|bus_type=ISA PnP|vendor_id=0x2750|device_id=0x1021|vario=HiSax driver|SMP=Yes|drv_id=0x4|drv_subtyp=0|drv_typ=4|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sedlbauer AG|device=Speed Star|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x20016|drv_subtyp=2|drv_typ=22|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X seriell|device_class=ISDN Single Basic Rate|bus_type=Serial|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Elsa AG|device=ML PCF-Pro|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=10|IRQ=11|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x50006|drv_subtyp=5|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Digi|device=DataFire Micro V IOM2 (Europe)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0070|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x120023|drv_subtyp=18|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=Quickstep 3000|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x9315|device_id=0x3401|vario=HiSax driver|SMP=Yes|drv_id=0x80007|drv_subtyp=8|drv_typ=7|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Genius|device=Speed Surfer|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x252f|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x3001e|drv_subtyp=3|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Digi|device=DataFire Micro V (North America)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0073|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x150023|drv_subtyp=21|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Berkom|device=A4T|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x11de|device_id=0x6120|subvendor_id=0x0871|subdevice_id=0xffa4|vario=HiSax driver|SMP=Yes|drv_id=0x20|drv_subtyp=0|drv_typ=32|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Siemens|device=ISurf 2|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x254d|device_id=0x2000|vario=HiSax driver|SMP=Yes|drv_id=0x3000c|drv_subtyp=3|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Digi|device=DataFire Micro V (Europe)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0071|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x130023|drv_subtyp=19|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=U.S.Robotics|device=Sportster|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x268|IRQ=10|IRQ=11|IRQ=12|IRQ=14|IRQ=15|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x10|drv_subtyp=0|drv_typ=16|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Zolltrix|device=2BDS0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x15b0|device_id=0x2bd0|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x100023|drv_subtyp=16|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva Piccola|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x891c|device_id=0x5100|vario=HiSax driver|SMP=Yes|drv_id=0xb000b|drv_subtyp=11|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Motorola|device=MC145575|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1051|device_id=0x0100|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xf0023|drv_subtyp=15|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Telekom AG|device=Teledat X120|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x2800|vario=CAPI 2.0 driver|SMP=No|alternative_name=Teledat USB 2a/b|drv_id=0x61f43|drv_subtyp=6|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fxusb_CZ|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PnP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0xcd06|device_id=0x0009|vario=CAPI 2.0 driver|SMP=No|drv_id=0x71f42|drv_subtyp=7|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcpnp|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|SMP=Yes|drv_id=0x2001b|drv_subtyp=2|drv_typ=27|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Teles AG|device=16.0 AB|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0xd80|IO=0xe80|IO=0xf80|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=9|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x10001|drv_subtyp=1|drv_typ=1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=PCMCIA IPAC|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0xb000a|drv_subtyp=11|drv_typ=10|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B006|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb006|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20023|drv_subtyp=2|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=CAPI 2.0 driver|SMP=No|drv_id=0x51f42|drv_subtyp=5|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcpcmcia|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|SMP=Yes|drv_id=0x1a|drv_subtyp=0|drv_typ=26|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Winbond|device=W6692 card|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x60024|drv_subtyp=6|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diehl ISDN-SX|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=I4L driver|IRQ=10|IRQ=11|IRQ=12|IRQ=3|IRQ=4|IRQ=9|MEMBASE=0xd0000|SMP=Yes|drv_id=0x11f4a|drv_subtyp=1|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=ASUSCOM|device=ISA IPAC|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x7506|device_id=0x9016|vario=HiSax driver|SMP=Yes|drv_id=0x2000c|drv_subtyp=2|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=A1 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=CAPI 2.0 driver|SMP=No|drv_id=0x61f42|drv_subtyp=6|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcpcmcia|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|SMP=Yes|drv_id=0x1001a|drv_subtyp=1|drv_typ=26|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=AsKey|device=PCI + Voice (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x144f|subdevice_id=0x1703|vario=HiSax driver|SMP=Yes|drv_id=0x30024|drv_subtyp=3|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe002|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x2000b|drv_subtyp=2|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sedlbauer AG|device=Speed PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0053|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x6000f|drv_subtyp=6|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ITK|device=ISDN PnP|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x8b26|device_id=0x2900|vario=HiSax driver|SMP=Yes|drv_id=0x20009|drv_subtyp=2|drv_typ=9|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X ISDN|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x2000|vario=CAPI 2.0 driver|SMP=No|drv_id=0x71f43|drv_subtyp=7|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fxusb|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|revision=0x0301|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Dynalink|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1043|device_id=0x0675|subvendor_id=0x0675|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x40024|drv_subtyp=4|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=ML PC|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=3|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x10006|drv_subtyp=1|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=M2 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x51f41|drv_subtyp=5|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|module=b1pcmcia|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Eicon Networks|device=Diva 2.01 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe005|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x4000b|drv_subtyp=4|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=U.S.Robotics|device=ISDN PCI Card TA|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x16ec|subdevice_id=0x3409|vario=HiSax driver|SMP=Yes|drv_id=0x70024|drv_subtyp=7|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sagem|device=Niccy ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x814c|device_id=0x5001|vario=HiSax driver|SMP=Yes|drv_id=0x10018|drv_subtyp=1|drv_typ=24|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=ML PCF|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=10|IRQ=11|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x40006|drv_subtyp=4|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=16.3 AB|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x180|IO=0x280|IO=0x380|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x10003|drv_subtyp=1|drv_typ=3|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Dynalink|device=6692 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0675|device_id=0x1702|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x50024|drv_subtyp=5|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ITK|device=ISDN 3.0|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x8b26|device_id=0x2500|vario=HiSax driver|SMP=Yes|drv_id=0x10009|drv_subtyp=1|drv_typ=9|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x11de|device_id=0x6120|subvendor_id=0x0000|subdevice_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x15|drv_subtyp=0|drv_typ=21|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sedlbauer AG|device=Speed Win2 PC104|device_class=ISDN Single Basic Rate|bus_type=PC104|vendor_id=0x0000|device_id=0x0000|subvendor_id=0x0000|subdevice_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x4000f|drv_subtyp=4|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0700|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x11f41|drv_subtyp=1|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1pci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Sedlbauer AG|device=Speed Star2|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x50016|drv_subtyp=5|drv_typ=22|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AsKey|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x144f|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x10024|drv_subtyp=1|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=High Soft Tech|device=saphir III|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0052|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x9000f|drv_subtyp=9|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Digi|device=DataFire Micro V IOM2 (North America)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0072|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x140023|drv_subtyp=20|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Dynalink|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0x1043|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xb0023|drv_subtyp=11|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=Quickstep 1000|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x9315|device_id=0x3301|vario=HiSax driver|SMP=Yes|drv_id=0x70007|drv_subtyp=7|drv_typ=7|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ITK|device=ix1-micro Rev.2|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x390|IO=0x398|IO=0x3a0|IO=0x3a8|IRQ=10|IRQ=11|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x9|drv_subtyp=0|drv_typ=9|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=16.3c|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2750|device_id=0x1026|vario=HiSax driver|SMP=Yes|drv_id=0xe|drv_subtyp=0|drv_typ=14|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=SGS Thomson Microelectronics|device=ST5481 USB Adapter|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0483|device_id=0x4810|vario=HiSax driver|SMP=Yes|drv_id=0x103e9|drv_subtyp=1|drv_typ=1001|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_st5481|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0a00|subvendor_id=0xffff|subdevice_id=0xffff|vario=CAPI 2.0 driver|SMP=No|alternative_name=Telekom AG,Teledat 150|drv_id=0x11f42|drv_subtyp=1|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcpci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150|drv_id=0x1001b|drv_subtyp=1|drv_typ=27|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=A1|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=CAPI 2.0 driver|IO=0x200|IO=0x240|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|SMP=No|drv_id=0x41f42|drv_subtyp=4|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcclassic|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|IO=0x200|IO=0x240|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x10005|drv_subtyp=1|drv_typ=5|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Elsa AG|device=PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x6000a|drv_subtyp=6|drv_typ=10|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Iscas|device=TE320|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x8615|device_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x4000c|drv_subtyp=4|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva 2.02 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd000b|drv_subtyp=13|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ASUSCOM|device=ISA ISAC|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x7506|device_id=0x8816|vario=HiSax driver|SMP=Yes|drv_id=0x1000c|drv_subtyp=1|drv_typ=12|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card USB v2.1|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x1900|vario=CAPI 2.0 driver|SMP=No|drv_id=0x31f43|drv_subtyp=3|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcusb2|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Eicon Networks|device=Diehl ISDN-S|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=I4L driver|IRQ=10|IRQ=11|IRQ=12|IRQ=3|IRQ=4|IRQ=9|MEMBASE=0xd0000|SMP=Yes|drv_id=0x1f4a|drv_subtyp=0|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Sedlbauer AG|device=Speed Fax+|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x274c|device_id=0x0200|vario=HiSax driver|SMP=Yes|drv_id=0x3001c|drv_subtyp=3|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B008|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb008|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x40023|drv_subtyp=4|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B00B|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x70023|drv_subtyp=7|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=TigerJet|device=300 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x14|drv_subtyp=0|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Seyon|device=B100|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb100|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90023|drv_subtyp=9|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=TigerJet|device=NetSpider-U PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x26|drv_subtyp=0|drv_typ=38|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sedlbauer AG|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0054|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x8001c|drv_subtyp=8|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X USB v1.0 / v2.0|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x2000|vario=CAPI 2.0 driver|SMP=No|drv_id=0x51f43|drv_subtyp=5|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fxusb|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|revision=0x0100|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Acer|device=P10|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0xd805|device_id=0x1411|vario=HiSax driver|SMP=Yes|drv_id=0x1e|drv_subtyp=0|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=Quickstep 3000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x3000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xa0012|drv_subtyp=10|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=TeleInt|device=SA1|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x300|IRQ=10|IRQ=11|IRQ=3|IRQ=4|IRQ=5|IRQ=7|SMP=Yes|drv_id=0xd|drv_subtyp=0|drv_typ=13|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B000|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x10023|drv_subtyp=1|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=8.0|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IRQ=3|IRQ=4|IRQ=5|IRQ=6|IRQ=7|IRQ=9|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x2|drv_subtyp=0|drv_typ=2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=Microlink ISDN USB|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Teles AG|device=16.0|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0xd80|IO=0xe80|IO=0xf80|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=9|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x1|drv_subtyp=0|drv_typ=1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Auerswald|device=Comfort 2000 System Telephone|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00f1|vario=HiSax driver|SMP=Yes|drv_id=0x4002a|drv_subtyp=4|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva Server BRI PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe010|subvendor_id=0xffff|subdevice_id=0xffff|vario=I4L driver|SMP=Yes|drv_id=0x51f4a|drv_subtyp=5|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Sedlbauer AG|device=Speed Card|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x270|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|SMP=Yes|alternative_name=Telekom AG,Teledat 100 ISA|drv_id=0xf|drv_subtyp=0|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B007|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb007|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x30023|drv_subtyp=3|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=Quickstep 1000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90012|drv_subtyp=9|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=16.3|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x180|IO=0x280|IO=0x380|IRQ=10|IRQ=12|IRQ=15|IRQ=5|IRQ=9|SMP=Yes|drv_id=0x3|drv_subtyp=0|drv_typ=3|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Elsa AG|device=Microlink PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc0012|drv_subtyp=12|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Gazel|device=Djinn Itoo|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1151|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20022|drv_subtyp=2|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Pyramid|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0051|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x7001c|drv_subtyp=7|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI v2.0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0e00|subvendor_id=0x1244|subdevice_id=0x0e00|vario=CAPI 2.0 driver|SMP=No|alternative_name=Telekom AG,Teledat 150 v2.0|drv_id=0x21f42|drv_subtyp=2|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcpci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150 v2.0|drv_id=0x3e8|drv_subtyp=0|drv_typ=1000|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_fcpcipnp|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Compaq Computer Corporation|device=ISDN S0 ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x110e|device_id=0x0210|vario=HiSax driver|SMP=Yes|drv_id=0x13|drv_subtyp=0|drv_typ=19|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=BIPAC-D|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x2c09|device_id=0x0200|vario=HiSax driver|SMP=Yes|drv_id=0x1001e|drv_subtyp=1|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Auerswald|device=COMpact 2206 USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00db|vario=HiSax driver|SMP=Yes|alternative_name=COMpact 4410 USB|drv_id=0x1002a|drv_subtyp=1|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ASUSCOM|device=PCI + Voice (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x1043|subdevice_id=0x1703|vario=HiSax driver|SMP=Yes|drv_id=0x20024|drv_subtyp=2|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diehl ISDN-SCOM|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=I4L driver|IRQ=10|IRQ=11|IRQ=12|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|MEMBASE=0xd0000|SMP=Yes|drv_id=0x21f4a|drv_subtyp=2|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Teles AG|device=PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x8|drv_subtyp=0|drv_typ=8|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Gazel|device=R753|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1152|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x10022|drv_subtyp=1|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x0c00|vario=CAPI 2.0 driver|SMP=No|drv_id=0x11f43|drv_subtyp=1|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcusb|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Elsa AG|device=ML PCC-8|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=HiSax driver|IO=0x160|IO=0x170|IO=0x260|IO=0x360|IRQ=3|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x20006|drv_subtyp=2|drv_typ=6|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=Tornado Tipac|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0xcd4c|device_id=0x0100|vario=HiSax driver|SMP=Yes|drv_id=0x4001e|drv_subtyp=4|drv_typ=30|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Abocom/Magitek|device=2BD1|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x13d1|device_id=0x2bd1|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x160023|drv_subtyp=22|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B00A|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00a|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x60023|drv_subtyp=6|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva 2.01 ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x891c|device_id=0xa100|vario=HiSax driver|SMP=Yes|drv_id=0x3000b|drv_subtyp=3|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Teles AG|device=PCI v2|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x00a7|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x20014|drv_subtyp=2|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X USB v3.0|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x2000|vario=CAPI 2.0 driver|SMP=No|drv_id=0x81f43|drv_subtyp=8|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fxusb|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|revision=0x0302|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Telekom AG|device=Concept|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0871|device_id=0xffa2|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xe0023|drv_subtyp=14|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card Classic|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=CAPI 2.0 driver|IO=0x200|IO=0x240|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|SMP=No|drv_id=0x31f42|drv_subtyp=3|drv_typ=8002|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcclassic|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|vario=HiSax driver|IO=0x200|IO=0x240|IO=0x300|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x5|drv_subtyp=0|drv_typ=5|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0 ISA|device_class=ISDN Single Basic Rate|bus_type=ISA|vendor_id=0x891c|device_id=0x7100|vario=HiSax driver|SMP=Yes|drv_id=0x1000b|drv_subtyp=1|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Eicon Networks|device=Diva Server 4BRI/PCI|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe012|subvendor_id=0xffff|subdevice_id=0xffff|vario=I4L driver|SMP=Yes|drv_id=0x61f4a|drv_subtyp=6|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=4|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=ICN|device=4B|device_class=ISDN Multiple Basic Rate|bus_type=ISA|vario=I4L driver|IO=0x300|IO=0x308|IO=0x310|IO=0x318|IO=0x320|IO=0x328|IO=0x330|IO=0x338|IO=0x340|IO=0x348|IO=0x350|IO=0x358|IO=0x360|IO=0x368|MEMBASE=0xc0000|MEMBASE=0xc2000|MEMBASE=0xc4000|MEMBASE=0xc6000|MEMBASE=0xc8000|MEMBASE=0xca000|MEMBASE=0xcc000|MEMBASE=0xce000|MEMBASE=0xd0000|MEMBASE=0xd2000|MEMBASE=0xd4000|MEMBASE=0xd6000|MEMBASE=0xd8000|MEMBASE=0xda000|MEMBASE=0xdc000|MEMBASE=0xde000|SMP=Yes|drv_id=0x11f5e|drv_subtyp=1|drv_typ=8030|firmware=pc-%{PROTO}.bin|interface=I4L|line_cnt=2|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=icn|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=C4|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1011|device_id=0x1065|subvendor_id=0x1244|subdevice_id=0x0800|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x31f41|drv_subtyp=3|drv_typ=8001|feature=Fax|firmware=c4.bin|interface=CAPI20|interface=CAPI20 Fax|line_cnt=4|line_protocol=DSS1|line_protocol=LEASED|module=c4|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Eicon Networks|device=Diehl ISDN-QUADRO|device_class=ISDN Multiple Basic Rate|bus_type=ISA|vario=I4L driver|IRQ=10|IRQ=11|IRQ=12|IRQ=3|IRQ=4|IRQ=5|IRQ=6|IRQ=9|MEMBASE=0xd0000|SMP=Yes|drv_id=0x31f4a|drv_subtyp=3|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=4|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Eicon Networks|device=Diva Server 4BRI/PCI U|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe013|subvendor_id=0xffff|subdevice_id=0xffff|vario=I4L driver|SMP=Yes|drv_id=0x71f4a|drv_subtyp=7|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=4|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=C2|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1011|device_id=0x1065|subvendor_id=0x1244|subdevice_id=0x1100|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x61f41|drv_subtyp=6|drv_typ=8001|feature=Fax|firmware=c2.bin|interface=CAPI20|interface=CAPI20 Fax|line_cnt=2|line_protocol=DSS1|line_protocol=LEASED|module=c4|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=T1 PCI|device_class=ISDN Primary Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x1200|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f45|drv_subtyp=2|drv_typ=8005|feature=Fax|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|module=t1pci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|special=B version|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=T1 ISA|device_class=ISDN Primary Rate|bus_type=ISA|vario=CAPI 2.0 driver|IO=0x340|IRQ=10|IRQ=11|IRQ=12|IRQ=15|IRQ=3|IRQ=5|IRQ=7|IRQ=9|SMP=Yes|drv_id=0x1f45|drv_subtyp=0|drv_typ=8005|feature=Fax|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|module=t1isa|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|special=B version|supported=full|
-|vendor=Eicon Networks|device=Diehl ISDN-S2M|device_class=ISDN Primary Rate|bus_type=ISA|vario=I4L driver|IRQ=10|IRQ=11|IRQ=12|IRQ=3|IRQ=4|IRQ=5|IRQ=7|IRQ=9|MEMBASE=0xd0000|SMP=Yes|drv_id=0x41f4a|drv_subtyp=4|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Eicon Networks|device=Diva Server PRI/PCI|device_class=ISDN Primary Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe014|subvendor_id=0xffff|subdevice_id=0xffff|vario=I4L driver|SMP=Yes|drv_id=0x81f4a|drv_subtyp=8|drv_typ=8010|feature=Fax|firmware=%{PROTO}|interface=FCLASS2|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=eicon|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card DSL|device_class=ISDN Basic Rate and DSL|bus_type=PCI|vendor_id=0x1131|device_id=0x5402|subvendor_id=0x1244|subdevice_id=0x0f00|vario=CAPI 2.0 driver|SMP=No|drv_id=0x11f44|drv_subtyp=1|drv_typ=8004|feature=DSL|feature=Fax|firmware=fdslbase.bin|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcdsl|need_packages=avm_fcdsl|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3 and DSL|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card DSL v2.0|device_class=ISDN Basic Rate and DSL|bus_type=PCI|vendor_id=0x1244|device_id=0x2900|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x31f44|drv_subtyp=3|drv_typ=8004|feature=DSL|feature=Fax|firmware=fds2base.bin|info=card is supported with binary only drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcdsl2|need_packages=avm_fcdsl|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3 and DSL|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card DSL USB|device_class=ISDN Basic Rate and DSL|bus_type=USB|vendor_id=0x057c|device_id=0x2300|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f44|drv_subtyp=2|drv_typ=8004|feature=DSL|feature=Fax|firmware=fdsubase.frm|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcdslusb|need_packages=avm_fcdsl|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card DSL SL USB|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3500|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x51f44|drv_subtyp=5|drv_typ=8004|feature=DSLONLY|firmware=fdlubase.frm|info=DSL only card with binonly drivers from the manufacturer|interface=CAPI20|line_protocol=???|module=fcdslslusb|need_packages=avm_fcdsl|need_packages=capi4linux|need_packages=i4l-base|short_description=binary only CAPI|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card DSL SL|device_class=DSL|bus_type=PCI|vendor_id=0x1244|device_id=0x2700|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x41f44|drv_subtyp=4|drv_typ=8004|feature=DSLONLY|firmware=fdssbase.bin|info=DSL only card with binonly driver from the manufacturer|interface=CAPI20|line_protocol=???|module=fcdslsl|need_packages=avm_fcdsl|need_packages=capi4linux|need_packages=i4l-base|short_description=DSL only card with CAPI2.0|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card DSL USB v2.0|device_class=ISDN Basic Rate and DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3600|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x61f44|drv_subtyp=6|drv_typ=8004|feature=DSL|feature=Fax|firmware=fdsubase2.frm|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=fcdslusb2|need_packages=avm_fcdsl|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Telekom AG|device=Eumex 2220PC|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x2805|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0xa1f43|drv_subtyp=10|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=e2220pc|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Telekom AG|device=Eumex 2220pc|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x4401|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0xb1f43|drv_subtyp=11|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=e2220pc|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Telekom AG|device=Eumex 5520PC|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x2806|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0xc1f43|drv_subtyp=12|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=e5520pc|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=Telekom AG|device=Eumex 5520pc|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x057c|device_id=0x4601|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0xd1f43|drv_subtyp=13|drv_typ=8003|feature=Fax|info=This card is supported with binonly drivers from the manufacturer|interface=CAPI20|interface=CAPI20 Fax|line_cnt=1|line_protocol=DSS1|module=e5520pc|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=binary only CAPI with FAX G3|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=BlueFRITZ!USB|device_class=Others|bus_type=USB|vendor_id=0x057c|device_id=0x2200|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x11f46|drv_subtyp=1|drv_typ=8006|feature=BLUETOOTH|feature=Basic Rate|firmware=bfubase.frm|interface=CAPI20|line_cnt=1|line_protocol=DSS1|module=bfusb|need_packages=bluez-firmware|need_packages=bluez-libs|need_packages=bluez-utils|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|short_description=Bluetooth Dongle,need ISDN Accesspoint|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3701|vario=other|SMP=yes|drv_id=0xffff0001|drv_subtyp=1|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3702|vario=other|SMP=yes|drv_id=0xffff0002|drv_subtyp=2|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0003|drv_subtyp=3|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x4001|vario=other|SMP=yes|drv_id=0xffff0004|drv_subtyp=4|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0005|drv_subtyp=5|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3e01|vario=other|SMP=yes|drv_id=0xffff0006|drv_subtyp=6|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3a00|vario=other|SMP=yes|drv_id=0xffff0007|drv_subtyp=7|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=Sitecom|device=DC-104 USB ISDN Modem Rev 1|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0483|device_id=0x4810|subvendor_id=|subdevice_id=|vario=HiSax driver|SMP=Yes|drv_id=0x03e9|drv_subtyp=0|drv_typ=1001|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_st5481|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sitecom|device=DC 104 USB ISDN Modem Rev 2|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0959|device_id=0x2bd0|subvendor_id=|subdevice_id=|vario=HiSax driver|SMP=Yes|drv_id=0x103ea|drv_subtyp=1|drv_typ=1002|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hfc_usb|supported=full|
-|vendor=Sitecom|device=DC 105 ISDN TA|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x182d|device_id=0x3069|subvendor_id=0x182d|subdevice_id=0x3069|vario=HiSax driver|SMP=Yes|drv_id=0x170023|drv_subtyp=23|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|supported=full|
+++ /dev/null
-#
-# CDB data export for subclass: ISDN Single Basic Rate
-# Generated at : Tue Aug 26 16:15:17 2003
-#
-# Exported combinations:
-# arch=ppc dist=Stable lang=de_DE vario=HiSax driver
-#
-# Author: dhess@suse.de (13.02.2003)
-# Author: didge@suse.de (04.08.2003)
-#
-#
-# Export format: |Vendorname|Productname|Subclass|Bus|Variation|topic=value|topic=value|...|Variation|topic=value|topic=value|...|
-#
-
-
-|vendor=Sagem|device=Niccy PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1267|device_id=0x1016|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20018|drv_subtyp=2|drv_typ=24|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X seriell|device_class=ISDN Single Basic Rate|bus_type=Serial|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Eicon Networks|device=Diva 2.0 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe002|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x2000b|drv_subtyp=2|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0053|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x6000f|drv_subtyp=6|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.01 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe005|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x4000b|drv_subtyp=4|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=Teledat USB 2a/b|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=High Soft Tech|device=saphir III|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0052|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x9000f|drv_subtyp=9|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0a00|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150|drv_id=0x1001b|drv_subtyp=1|drv_typ=27|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Eicon Networks|device=Diva 2.02 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd000b|drv_subtyp=13|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0054|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x8001c|drv_subtyp=8|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 3000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x3000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xa0012|drv_subtyp=10|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Microlink ISDN USB|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Elsa AG|device=Quickstep 1000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90012|drv_subtyp=9|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Microlink PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc0012|drv_subtyp=12|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Pyramid|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0051|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x7001c|drv_subtyp=7|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3701|vario=other|SMP=yes|drv_id=0xffff0001|drv_subtyp=1|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3702|vario=other|SMP=yes|drv_id=0xffff0002|drv_subtyp=2|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0003|drv_subtyp=3|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x4001|vario=other|SMP=yes|drv_id=0xffff0004|drv_subtyp=4|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0005|drv_subtyp=5|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3e01|vario=other|SMP=yes|drv_id=0xffff0006|drv_subtyp=6|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=AVM FRITZ!Box Fon|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3a00|vario=other|SMP=yes|drv_id=0xffff0007|drv_subtyp=7|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
+++ /dev/null
-#
-# CDB data export for subclass: ISDN Single Basic Rate
-# Generated at : Sat Aug 30 17:23:03 2003
-#
-# Exported combinations:
-# arch=x86_64 dist=Stable lang=de_DE vario=HiSax driver
-# arch=x86_64 dist=Stable lang=de_DE vario=I4L driver
-# arch=x86_64 dist=Stable lang=de_DE vario=CAPI 2.0 driver
-#
-# Author: dhess@suse.de (13.02.2003)
-# Author: didge@suse.de (04.08.2003)
-#
-#
-# Export format: |Vendorname|Productname|Subclass|Bus|Variation|topic=value|topic=value|...|Variation|topic=value|topic=value|...|
-#
-
-
-|vendor=Billion|device=B009|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb009|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x50023|drv_subtyp=5|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1|device_class=ISDN Single Basic Rate|bus_type=ISA|vario=CAPI 2.0 driver|supported=unknown|
-|vendor=Billion|device=B00C|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00c|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x80023|drv_subtyp=8|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=A1T|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0871|device_id=0xffa1|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd0023|drv_subtyp=13|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sagem|device=Niccy PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1267|device_id=0x1016|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20018|drv_subtyp=2|drv_typ=24|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Cologne Chip AG|device=HFC 2BDS0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x110023|drv_subtyp=17|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Formula-n|device=enter:now|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x0055|subdevice_id=0x0002|vario=HiSax driver|SMP=Yes|drv_id=0x10029|drv_subtyp=1|drv_typ=41|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=under development|supported=full|
-|vendor=TigerJet|device=NetJet PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x00ff|subdevice_id=0x000f|vario=HiSax driver|SMP=Yes|drv_id=0x10014|drv_subtyp=1|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Scitel|device=Quadro|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x9050|subvendor_id=0x0871|subdevice_id=0xffa8|vario=HiSax driver|SMP=Yes|drv_id=0x21|drv_subtyp=0|drv_typ=33|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=S0Box|device_class=ISDN Single Basic Rate|bus_type=Parallel|vario=HiSax driver|IO=0x278|IO=0x378|IO=0x3bc|IRQ=5|IRQ=7|SMP=Yes|drv_id=0x19|drv_subtyp=0|drv_typ=25|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0U PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe004|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc000b|drv_subtyp=12|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Auerswald|device=Comfort 1200 System Telephone|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00f2|vario=HiSax driver|SMP=Yes|drv_id=0x3002a|drv_subtyp=3|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AsKey|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0x144f|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xc0023|drv_subtyp=12|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f41|drv_subtyp=2|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1pcmcia|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Auerswald|device=COMpact 2104 USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00c0|vario=HiSax driver|SMP=Yes|drv_id=0x2002a|drv_subtyp=2|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Gazel|device=R685|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1030|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x22|drv_subtyp=0|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ASUSCOM|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1043|device_id=0x0675|subvendor_id=0x0675|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xa0023|drv_subtyp=10|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=ASUSCOM|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x1043|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x24|drv_subtyp=0|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Star|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x20016|drv_subtyp=2|drv_typ=22|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!X seriell|device_class=ISDN Single Basic Rate|bus_type=Serial|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Digi|device=DataFire Micro V IOM2 (Europe)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0070|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x120023|drv_subtyp=18|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V (North America)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0073|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x150023|drv_subtyp=21|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Berkom|device=A4T|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x11de|device_id=0x6120|subvendor_id=0x0871|subdevice_id=0xffa4|vario=HiSax driver|SMP=Yes|drv_id=0x20|drv_subtyp=0|drv_typ=32|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V (Europe)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0071|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x130023|drv_subtyp=19|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Zolltrix|device=2BDS0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x15b0|device_id=0x2bd0|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x100023|drv_subtyp=16|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Motorola|device=MC145575|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1051|device_id=0x0100|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xf0023|drv_subtyp=15|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=PCMCIA IPAC|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0xb000a|drv_subtyp=11|drv_typ=10|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B006|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb006|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20023|drv_subtyp=2|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x1a|drv_subtyp=0|drv_typ=26|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Winbond|device=W6692 card|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x60024|drv_subtyp=6|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=A1 PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x1001a|drv_subtyp=1|drv_typ=26|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=AsKey|device=PCI + Voice (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x144f|subdevice_id=0x1703|vario=HiSax driver|SMP=Yes|drv_id=0x30024|drv_subtyp=3|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.0 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe002|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x2000b|drv_subtyp=2|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0053|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x6000f|drv_subtyp=6|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Dynalink|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1043|device_id=0x0675|subvendor_id=0x0675|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x40024|drv_subtyp=4|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.01 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe005|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x4000b|drv_subtyp=4|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=U.S.Robotics|device=ISDN PCI Card TA|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x16ec|subdevice_id=0x3409|vario=HiSax driver|SMP=Yes|drv_id=0x70024|drv_subtyp=7|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Dynalink|device=6692 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0675|device_id=0x1702|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x50024|drv_subtyp=5|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x11de|device_id=0x6120|subvendor_id=0x0000|subdevice_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x15|drv_subtyp=0|drv_typ=21|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Win2 PC104|device_class=ISDN Single Basic Rate|bus_type=PC104|vendor_id=0x0000|device_id=0x0000|subvendor_id=0x0000|subdevice_id=0x0000|vario=HiSax driver|SMP=Yes|drv_id=0x4000f|drv_subtyp=4|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=B1 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0700|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x11f41|drv_subtyp=1|drv_typ=8001|feature=Fax|firmware=b1-%{PROTO}.t4|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=b1pci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=Sedlbauer AG|device=Speed Star2|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x50016|drv_subtyp=5|drv_typ=22|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=Teledat USB 2a/b|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=AsKey|device=PCI (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x144f|subdevice_id=0x1702|vario=HiSax driver|SMP=Yes|drv_id=0x10024|drv_subtyp=1|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=High Soft Tech|device=saphir III|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0052|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x9000f|drv_subtyp=9|drv_typ=15|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Digi|device=DataFire Micro V IOM2 (North America)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x114f|device_id=0x0072|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x140023|drv_subtyp=20|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Dynalink|device=PCI (CCD HFC)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0x2bd0|subvendor_id=0x1043|subdevice_id=0x1704|vario=HiSax driver|SMP=Yes|drv_id=0xb0023|drv_subtyp=11|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=SGS Thomson Microelectronics|device=ST5481 USB Adapter|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0483|device_id=0x4810|vario=HiSax driver|SMP=Yes|drv_id=0x103e9|drv_subtyp=1|drv_typ=1001|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_st5481|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0a00|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150|drv_id=0x1001b|drv_subtyp=1|drv_typ=27|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Elsa AG|device=PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x6000a|drv_subtyp=6|drv_typ=10|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Eicon Networks|device=Diva 2.02 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1133|device_id=0xe00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xd000b|drv_subtyp=13|drv_typ=11|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B008|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb008|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x40023|drv_subtyp=4|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B00B|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00b|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x70023|drv_subtyp=7|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=TigerJet|device=300 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x14|drv_subtyp=0|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Seyon|device=B100|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb100|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90023|drv_subtyp=9|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=TigerJet|device=NetSpider-U PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x26|drv_subtyp=0|drv_typ=38|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Sedlbauer AG|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0054|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x8001c|drv_subtyp=8|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 3000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x3000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xa0012|drv_subtyp=10|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B000|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x10023|drv_subtyp=1|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Microlink ISDN USB|device_class=ISDN Single Basic Rate|bus_type=USB|vario=HiSax driver|line_cnt=1|supported=not|
-|vendor=Auerswald|device=Comfort 2000 System Telephone|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00f1|vario=HiSax driver|SMP=Yes|drv_id=0x4002a|drv_subtyp=4|drv_typ=42|interface=I4L|line_cnt=1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Billion|device=B007|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb007|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x30023|drv_subtyp=3|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Quickstep 1000 PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x90012|drv_subtyp=9|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Elsa AG|device=Microlink PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1048|device_id=0x1000|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xc0012|drv_subtyp=12|drv_typ=18|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Gazel|device=Djinn Itoo|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1151|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x20022|drv_subtyp=2|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Pyramid|device=Speed Fax+ PCI|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0002|subvendor_id=0x0051|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x7001c|drv_subtyp=7|drv_typ=28|feature=Fax|firmware=ISAR.BIN|interface=FCLASS1|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Card PCI v2.0|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x0e00|subvendor_id=0x1244|subdevice_id=0x0e00|vario=HiSax driver|SMP=Yes|alternative_name=Telekom AG,Teledat 150 v2.0|drv_id=0x3e8|drv_subtyp=0|drv_typ=1000|feature=Fax|info=This card has multiple drivers, some functions are only available on the binonly driver|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_fcpcipnp|need_packages=i4l-base|short_description=OpenSource without Fax G3|supported=full|
-|vendor=Auerswald|device=COMpact 2206 USB|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x09bf|device_id=0x00db|vario=HiSax driver|SMP=Yes|drv_id=0x1002a|drv_subtyp=1|drv_typ=42|interface=I4L|line_cnt=1|line_protocol=DSS1|module=auerswald|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=ASUSCOM|device=PCI + Voice (W6692)|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1050|device_id=0x6692|subvendor_id=0x1043|subdevice_id=0x1703|vario=HiSax driver|SMP=Yes|drv_id=0x20024|drv_subtyp=2|drv_typ=36|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=PCMCIA|device_class=ISDN Single Basic Rate|bus_type=PCMCIA|vario=HiSax driver|SMP=Yes|drv_id=0x8|drv_subtyp=0|drv_typ=8|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Gazel|device=R753|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x10b5|device_id=0x1152|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x10022|drv_subtyp=1|drv_typ=34|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Abocom/Magitek|device=2BD1|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x13d1|device_id=0x2bd1|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x160023|drv_subtyp=22|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Billion|device=B00A|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x1397|device_id=0xb00a|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0x60023|drv_subtyp=6|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Teles AG|device=PCI v2|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0xe159|device_id=0x0001|subvendor_id=0x00a7|subdevice_id=0x0001|vario=HiSax driver|SMP=Yes|drv_id=0x20014|drv_subtyp=2|drv_typ=20|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=Telekom AG|device=Concept|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x0871|device_id=0xffa2|subvendor_id=0xffff|subdevice_id=0xffff|vario=HiSax driver|SMP=Yes|drv_id=0xe0023|drv_subtyp=14|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|need_packages=i4l-base|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=C4|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1011|device_id=0x1065|subvendor_id=0x1244|subdevice_id=0x0800|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x31f41|drv_subtyp=3|drv_typ=8001|feature=Fax|firmware=c4.bin|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=4|line_protocol=DSS1|line_protocol=LEASED|module=c4|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=C2|device_class=ISDN Multiple Basic Rate|bus_type=PCI|vendor_id=0x1011|device_id=0x1065|subvendor_id=0x1244|subdevice_id=0x1100|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x61f41|drv_subtyp=6|drv_typ=8001|feature=Fax|firmware=c2.bin|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=2|line_protocol=DSS1|line_protocol=LEASED|module=c4|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=T1 PCI|device_class=ISDN Primary Rate|bus_type=PCI|vendor_id=0x1244|device_id=0x1200|vario=CAPI 2.0 driver|SMP=Yes|drv_id=0x21f45|drv_subtyp=2|drv_typ=8005|feature=Fax|firmware=t1-{PROF}.t4|interface=CAPI20|interface=CAPI20 Fax|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|module=t1pci|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|need_packages=i4lfirm|special=B version|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=BlueFRITZ!USB|device_class=Others|bus_type=USB|vendor_id=0x057c|device_id=0x2200|vario=CAPI 2.0 driver|Interface=CAPI20|SMP=Yes|drv_id=0x11f46|drv_subtyp=1|drv_typ=8006|feature=BLUETOOTH|feature=Basic Rate|firmware=bfubase.frm|line_cnt=1|line_protocol=DSS1|module=bfusb|need_packages=bluez-firmware|need_packages=bluez-libs|need_packages=bluez-utils|need_packages=capi4linux|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3701|vario=other|SMP=yes|drv_id=0xffff0001|drv_subtyp=1|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3702|vario=other|SMP=yes|drv_id=0xffff0002|drv_subtyp=2|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box SL WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0003|drv_subtyp=3|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon WLAN|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x4001|vario=other|SMP=yes|drv_id=0xffff0004|drv_subtyp=4|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box Fon (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3c00|vario=other|SMP=yes|drv_id=0xffff0005|drv_subtyp=5|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=FRITZ!Box (Annex A)|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3e01|vario=other|SMP=yes|drv_id=0xffff0006|drv_subtyp=6|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=AVM Computersysteme Vertriebs GmbH|device=AVM FRITZ!Box Fon|device_class=DSL|bus_type=USB|vendor_id=0x057c|device_id=0x3a00|vario=other|SMP=yes|drv_id=0xffff0007|drv_subtyp=7|drv_typ=9999|feature=DSLONLY|feature=PPPOE|interface=pppoe|line_cnt=0|line_protocol=none|need_packages=ppp|need_packages=smpppd|module=usbnet|supported=full|
-|vendor=Sitecom|device=DC-104 USB ISDN Modem Rev 1|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0483|device_id=0x4810|subvendor_id=|subdevice_id=|vario=HiSax driver|SMP=Yes|drv_id=0x03e9|drv_subtyp=0|drv_typ=1001|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax_st5481|need_packages=i4l-base|need_packages=i4l-isdnlog|supported=full|
-|vendor=Sitecom|device=DC 104 USB ISDN Modem Rev 2|device_class=ISDN Single Basic Rate|bus_type=USB|vendor_id=0x0959|device_id=0x2bd0|subvendor_id=|subdevice_id=|vario=HiSax driver|SMP=Yes|drv_id=0x103ea|drv_subtyp=1|drv_typ=1002|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hfc_usb|supported=full|
-|vendor=Sitecom|device=DC 105 ISDN TA|device_class=ISDN Single Basic Rate|bus_type=PCI|vendor_id=0x182d|device_id=0x3069|subvendor_id=0x182d|subdevice_id=0x3069|vario=HiSax driver|SMP=Yes|drv_id=0x170023|drv_subtyp=23|drv_typ=35|interface=I4L|line_cnt=1|line_protocol=1TR6|line_protocol=DSS1|line_protocol=LEASED|line_protocol=NI1|module=hisax|supported=full|
+++ /dev/null
-TOPDIR = ../../..
-TARGETS = mk_isdnhwdb isdn_cdb.h ISDN.CDB.hwdb
-CLEANFILES = isdn_cdb isdn_cdb.h lex.yy.c ISDN.CDB.txt mk_isdnhwdb ISDN.CDB.hwdb
-
-include $(TOPDIR)/Makefile.common
-
-ISDN.CDB.txt:
- if [ -f ISDN.$(ARCH).txt ]; then \
- ln -s ISDN.$(ARCH).txt ISDN.CDB.txt; \
- else \
- ln -s ISDN.ppc.txt ISDN.CDB.txt; \
- fi
-
-isdn_cdb.h: isdn_cdb ISDN.CDB.txt
- rm -f isdn_cdb.h
- ./isdn_cdb ISDN.CDB.txt isdn_cdb.h
-
-lex.yy.c: isdn_cdb.lex
- lex isdn_cdb.lex
-
-isdn_cdb: isdn_cdb.o cdb_read.o
-
-mk_isdnhwdb: mk_isdnhwdb.o cdb_read.o
-
-cdb_read.o: cdb_read.c cdb_read.h
-
-isdn_cdb.o: isdn_cdb.c cdb_read.h lex.yy.c
-
-mk_isdnhwdb.o: mk_isdnhwdb.c cdb_read.h lex.yy.c
-
-ISDN.CDB.hwdb: mk_isdnhwdb ISDN.CDB.txt
- rm -f ISDN.CDB.hwdb
- ./mk_isdnhwdb ISDN.CDB.txt ISDN.CDB.hwdb
+++ /dev/null
-#define CDBISDN_CDB_FILE "/usr/share/hwinfo/ISDN.CDB.txt"
-#define CDBISDN_HWDB_FILE "/usr/share/hwinfo/ISDN.CDB.hwdb"
-
-#define IWHREC_TYPE_VERSION 1
-#define IWHREC_TYPE_DATE 2
-#define IWHREC_TYPE_NAME_SIZE 3
-#define IWHREC_TYPE_NAME_COUNT 4
-#define IWHREC_TYPE_NAME_DATA 5
-#define IWHREC_TYPE_VENDOR_COUNT 11
-#define IWHREC_TYPE_VENDOR_RECORD 12
-#define IWHREC_TYPE_CARD_COUNT 21
-#define IWHREC_TYPE_CARD_RECORD 22
-#define IWHREC_TYPE_CARD_IDSORTED 23
-#define IWHREC_TYPE_VARIO_COUNT 31
-#define IWHREC_TYPE_VARIO_RECORD 32
-
+++ /dev/null
-#include "cdb_read.h"
-
-int max_ce = MAXCARDS;
-int ce_idx = 0;
-int max_vario = MAXVARIO;
-int vario_idx;
-int name_str_cnt = 0;
-int max_name_str_cnt = MAXNAMECNT;
-int max_ivendor = MAXCARDS;
-int ivendor_idx = 0;
-
-char *name_str;
-cdb_isdn_card *cards;
-cdb_isdn_vario *varios;
-cdb_isdn_vendor *vendors;
-
-int *isdncard_id;
-
-int drvid_cnt;
-int drv_subtyp_cnt;
-int drv_typ_cnt;
-int supported_cnt;
-
-int not_supported = 0;
-
-static struct _vendorshortnames_t _vendorshortnames[] = {
- {"AVM Computersysteme Vertriebs GmbH","AVM"},
- {"High Soft Tech","HST"},
- {"Cologne Chip AG","CC"},
- {"Telekom AG","DTAG"},
- {"TigerJet","TJET"},
- {"ASUSCOM","Asus"},
- {"U.S.Robotics","USR"},
- {"SGS Thomson Microelectronics","SGST"},
- {"Abocom/Magitek","Abocom"},
- {NULL,NULL},
-};
-
-static int compare_vendor(cdb_isdn_vendor *v1, cdb_isdn_vendor *v2) {
- return(strcasecmp(v1->name, v2->name));
-}
-
-static int compare_card(cdb_isdn_card *c1, cdb_isdn_card *c2) {
- return(strcasecmp(c1->name, c2->name));
-}
-
-int compare_name(const int *c1, const int *c2) {
- return(strcasecmp(cards[*c1].name,
- cards[*c2].name));
-}
-
-static int compare_type(cdb_isdn_vario *v1, cdb_isdn_vario *v2) {
- int x= v1->typ - v2->typ;
-
- if (!x)
- x=v1->subtyp - v2->subtyp;
- return(x);
-}
-
-static int compare_id(const int *c1, const int *c2) {
- int x = cards[*c1].vendor - cards[*c2].vendor;
-
- if (!x)
- x = cards[*c1].device -
- cards[*c2].device;
- if (!x)
- x = cards[*c1].subvendor -
- cards[*c2].subvendor;
- if (!x)
- x = cards[*c1].subdevice -
- cards[*c2].subdevice;
- return(x);
-}
-
-static char *add_name(const char *str, int merge) {
- char *p;
- int l;
-
- if (!str)
- return(NULL);
- if (merge) {
- p = name_str;
- while (*p) {
- if (!strcmp(p, str))
- break;
- p += strlen(p) +1;
- if (p >= (name_str + max_name_str_cnt))
- return(NULL);
- }
- if (*p)
- return(p);
- } else {
- p = name_str + name_str_cnt;
- }
- l = strlen(str) +1;
- if ((p + l) >= (name_str + max_name_str_cnt))
- return(NULL);
- strcpy(p, str);
- name_str_cnt += l;
- return(p);
-}
-
-static char stmp[4096],sstmp[4096];
-
-static char *add_lname(int v, const char *str) {
- sprintf(stmp, "%s %s", vendors[v].shortname, str);
- return(add_name(stmp, 1));
-}
-
-static char *add_name_list(const char *str, const char *list) {
- if (!list || !list[0])
- return(add_name(str, 1));
- sprintf(stmp, "%s,%s", list, str);
- return(add_name(stmp, 1));
-}
-
-static char *add_sortedname_list(const char *str, const char *list, const char *fmt) {
- u_int v,i,flg=0;
- char *t,*p;
- if (!list || !list[0])
- return(add_name(str, 1));
- strncpy(stmp, list, 4096);
- sscanf(str, fmt, &v);
- p = sstmp;
- t = strtok(stmp, ",");
- while (t) {
- sscanf(t, fmt, &i);
- if (!flg && i>v) {
- flg++;
- p += sprintf(p, fmt, v);
- *p++ = ',';
- }
- p += sprintf(p, fmt, i);
- *p++ = ',';
- t = strtok(NULL, ",");
- }
- if (!flg)
- p += sprintf(p, fmt, v);
- else
- p--;
- *p = 0;
- return(add_name(sstmp, 1));
-}
-
-static int add_vendor(char *v, int card) {
- int i,found = 0;
-
- for(i=0;i < ivendor_idx; i++) {
- if (!strcmp(v, vendors[i].name)) {
- vendors[i].refcnt++;
- return(i);
- }
- }
- if (ivendor_idx < max_ivendor) {
- i=0;
- while (_vendorshortnames[i].lname) {
- if (!strcmp(v, _vendorshortnames[i].lname)) {
- found++;
- break;
- } else if (!strcmp(v, _vendorshortnames[i].sname)) {
- found++;
- break;
- }
- i++;
- }
- if (found) {
- if (!(vendors[ivendor_idx].name = add_name(_vendorshortnames[i].lname, 1)))
- return(-1);
- if (!(vendors[ivendor_idx].shortname = add_name(_vendorshortnames[i].sname, 1)))
- return(-1);
- } else {
- char *p;
- if (!(vendors[ivendor_idx].name = add_name(v, 1)))
- return(-1);
- p = strtok(v, " ");
- if (p) {
- if (!(vendors[ivendor_idx].shortname = add_name(p, 1)))
- return(-1);
- } else
- vendors[ivendor_idx].shortname = vendors[ivendor_idx].name;
- }
- vendors[ivendor_idx].vnr = ivendor_idx;
- vendors[ivendor_idx].refcnt++;
- ivendor_idx++;
- return(ivendor_idx-1);
- } else
- return(-1);
-}
-
-static int new_vario(char *v, int c) {
-
- vario_idx++;
- if (vario_idx>=max_vario)
- return(-1);
- drvid_cnt = 0;
- drv_subtyp_cnt = 0;
- drv_typ_cnt = 0;
- not_supported = 0;
- supported_cnt = 0;
- if (!(varios[vario_idx].name = add_name(v, 1)))
- return(-1);
- if (cards[c].vario>0) {
- varios[vario_idx-1].next_vario = vario_idx;
- } else
- cards[c].vario = vario_idx;
- varios[vario_idx].handle = vario_idx;
- varios[vario_idx].card_ref = c;
- cards[c].vario_cnt++;
- return(0);
-}
-
-void del_vario(void) {
- fprintf(stderr, "del_vario: %d %s\n", vario_idx, cards[varios[vario_idx].card_ref].name);
- cards[varios[vario_idx].card_ref].vario_cnt--;
- if (vario_idx>0) {
- if (varios[vario_idx-1].next_vario == vario_idx) {
- if (cards[varios[vario_idx].card_ref].vario_cnt == 1)
- cards[varios[vario_idx].card_ref].vario = vario_idx-1;
- varios[vario_idx-1].next_vario = 0;
- } else if (cards[varios[vario_idx].card_ref].vario == vario_idx) {
- cards[varios[vario_idx].card_ref].vario = 0;
- } else {
- fprintf(stderr, "del_vario:internal error\n");
- exit(98);
- }
- }
- memset(&varios[vario_idx], 0, sizeof(cdb_isdn_vario));
- vario_idx--;
-}
-
-int new_entry(void) {
- if (not_supported) {
- not_supported = 0;
- fprintf(stderr, "new_entry:not_supported %s\n", cards[ce_idx].name);
- if (cards[ce_idx].vario_cnt < 1) {
- vendors[cards[ce_idx].vhandle].refcnt--;
- memset(&cards[ce_idx], 0, sizeof(cdb_isdn_card));
- ce_idx--;
- }
- }
- ce_idx++;
- if (ce_idx >= max_ce)
- return(1);
- cards[ce_idx].handle = ce_idx;
- cards[ce_idx].vendor = PCI_ANY_ID;
- cards[ce_idx].device = PCI_ANY_ID;
- cards[ce_idx].subvendor = PCI_ANY_ID;
- cards[ce_idx].subdevice = PCI_ANY_ID;
- return(0);
-}
-
-void add_current_item(int item, char *val) {
- int i;
- char *old;
-
- if ((item != vario) && not_supported)
- return;
- switch (item) {
- case vendor:
- i = add_vendor(val, ce_idx);
- if (i<0) {
- fprintf(stderr, "error in add_vendor %s\n", val);
- exit(100);
- }
- cards[ce_idx].vhandle = i;
- break;
- case device:
- cards[ce_idx].name = add_name(val, 1);
- if (!cards[ce_idx].name) {
- fprintf(stderr, "error in add_name %s\n", val);
- exit(101);
- }
- cards[ce_idx].lname = add_lname(cards[ce_idx].vhandle, val);
- if (!cards[ce_idx].lname) {
- fprintf(stderr, "error in add_lname %s\n", val);
- exit(101);
- }
- break;
- case vendor_id:
- i = sscanf(val,"%x", &cards[ce_idx].vendor);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- break;
- case device_id:
- i = sscanf(val,"%x", &cards[ce_idx].device);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- break;
- case subvendor_id:
- i = sscanf(val,"%x", &cards[ce_idx].subvendor);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- break;
- case subdevice_id:
- i = sscanf(val,"%x", &cards[ce_idx].subdevice);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- break;
- case device_class:
- cards[ce_idx].Class = add_name(val, 1);
- if (!cards[ce_idx].name) {
- fprintf(stderr, "error in add_name %s\n", val);
- exit(101);
- }
- break;
- case bus_type:
- cards[ce_idx].bus = add_name(val, 1);
- if (!cards[ce_idx].name) {
- fprintf(stderr, "error in add_name %s\n", val);
- exit(101);
- }
- break;
- case vario:
- if (new_vario(val, ce_idx)) {
- fprintf(stderr, "error in new_vario(%s, %d)\n", val, ce_idx);
- exit(103);
- }
- break;
- case SMP:
- if (!strcasecmp(val, "no"))
- varios[vario_idx].smp = 0;
- else if (!strcasecmp(val, "yes"))
- varios[vario_idx].smp = 1;
- break;
- case drv_id:
- if (drvid_cnt) {
- fprintf(stderr, "more as one drvid_cnt (%s) card (%s)\n", val, cards[ce_idx].name);
- } else {
- i = sscanf(val,"%x", &varios[vario_idx].drvid);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- }
- drvid_cnt++;
- break;
- case drv_subtyp:
- if (drv_subtyp_cnt) {
- fprintf(stderr, "more as one drv_subtyp (%s) card (%s)\n", val, cards[ce_idx].name);
- } else {
- i = sscanf(val,"%d", &varios[vario_idx].subtyp);
- if (i!=1) {
- fprintf(stderr, "error to decimal %s\n", val);
- exit(104);
- }
- }
- drv_subtyp_cnt++;
- break;
- case drv_typ:
- if (drv_typ_cnt) {
- fprintf(stderr, "more as one drv_typ (%s) card (%s)\n", val, cards[ce_idx].name);
- } else {
- i = sscanf(val,"%d", &varios[vario_idx].typ);
- if (i!=1) {
- fprintf(stderr, "error to decimal %s\n", val);
- exit(104);
- }
- }
- drv_typ_cnt++;
- break;
- case interface:
- varios[vario_idx].interface = add_name_list(val, varios[vario_idx].interface);
- break;
- case line_cnt:
- i = sscanf(val,"%d", &cards[ce_idx].line_cnt);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- break;
- case line_protocol:
- varios[vario_idx].protocol = add_name_list(val, varios[vario_idx].protocol);
- break;
- case module:
- varios[vario_idx].mod_name = add_name(val, 1);
- break;
- case need_packages:
- varios[vario_idx].need_pkg = add_name_list(val, varios[vario_idx].need_pkg);
- break;
- case supported:
- if (supported_cnt)
- fprintf(stderr, "more as one supported entry (%s) vendor(%s) card(%s)\n", val,
- vendors[cards[ce_idx].vhandle].name, cards[ce_idx].name);
- if (!strcasecmp(val, "not")) {
- not_supported = 1;
- del_vario();
- }
- supported_cnt++;
- break;
- case feature:
- varios[vario_idx].features = add_name_list(val, varios[vario_idx].features);
- break;
- case info:
- old = name_str + name_str_cnt;
- varios[vario_idx].info = add_name(val, 1);
- if (old == varios[vario_idx].info)
- fprintf(stderr, "info(%s): %s\n", cards[ce_idx].name, varios[vario_idx].info);
- break;
- case special:
- break;
- case firmware:
- varios[vario_idx].firmware = add_name(val, 1);
- break;
- case short_description:
- old = name_str + name_str_cnt;
- varios[vario_idx].description = add_name(val, 1);
- if (old == varios[vario_idx].description)
- fprintf(stderr, "description(%s): %s\n", cards[ce_idx].name, varios[vario_idx].description);
- break;
- case IRQ:
- varios[vario_idx].irq = add_sortedname_list(val, varios[vario_idx].irq, "%d");
- break;
- case IO:
- varios[vario_idx].io = add_sortedname_list(val, varios[vario_idx].io, "0x%x");
- break;
- case MEMBASE:
- varios[vario_idx].membase = add_sortedname_list(val, varios[vario_idx].membase, "0x%x");
- break;
- case alternative_name:
- break;
- case revision:
- i = sscanf(val,"%x", &cards[ce_idx].revision);
- if (i!=1) {
- fprintf(stderr, "error to hex %s\n", val);
- exit(102);
- }
- if ((cards[ce_idx].subvendor == PCI_ANY_ID) &&
- (cards[ce_idx].subdevice == PCI_ANY_ID))
- cards[ce_idx].subvendor = cards[ce_idx].revision;
- break;
- }
-}
-
-void SortVendors(void) {
- int v,c;
-
- qsort(vendors, ivendor_idx, sizeof(cdb_isdn_vendor), (fcmp)compare_vendor);
- /* readjust card data */
- for (c = 1; c <= ce_idx; c++) {
- for (v = 0; v < ivendor_idx; v++) {
- if (cards[c].vhandle == vendors[v].vnr) {
- cards[c].vhandle = v;
- break;
- }
- }
- }
- /* now adjust own handle */
- for (v = 0; v < ivendor_idx; v++) {
- vendors[v].vnr = v;
- }
-}
-
-void SortCards(void) {
- int v,c;
-
- qsort(&cards[1], ce_idx, sizeof(cdb_isdn_card), (fcmp)compare_card);
- /* readjust vario data */
- for (v = 1; v <= vario_idx; v++) {
- for (c = 1; c <= ce_idx; c++) {
- if (cards[c].handle == varios[v].card_ref) {
- varios[v].card_ref = c;
- break;
- }
- }
- }
- /* now adjust own handle */
- for (c = 0; c <= ce_idx; c++) {
- cards[c].handle = c;
- }
- isdncard_id = malloc(ce_idx*sizeof(int));
- if (!isdncard_id) {
- fprintf(stderr, "no mem for isdncard_id (%d entries)\n", ce_idx);
- exit(97);
- }
- for (c = 0; c < ce_idx; c++)
- isdncard_id[c] = c + 1;
- qsort(isdncard_id, ce_idx, sizeof(int), (fcmp)compare_id);
-}
-
-void SortVarios(void) {
- int v,c,i;
-
- qsort(&varios[1], vario_idx, sizeof(cdb_isdn_vario), (fcmp)compare_type);
- /* readjust vario data */
- for (v = 1; v <= vario_idx; v++) {
- if (varios[v].next_vario) {
- for (i = 1; i <= vario_idx; i++) {
- if (varios[i].handle == varios[v].next_vario) {
- varios[v].next_vario = i;
- break;
- }
- }
- }
- }
- /* readjust card data */
- for (c = 1; c <= ce_idx; c++) {
- for (v = 1; v <= vario_idx; v++) {
- if (varios[v].handle == cards[c].vario) {
- cards[c].vario = v;
- break;
- }
- }
- }
- /* now adjust own handle */
- for (v = 1; v <= vario_idx; v++) {
- varios[v].handle = v;
- }
-}
-
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include <time.h>
-#include "isdn_cdb_def.h"
-#include "hd.h"
-
-#define CDB_DATAVERSION 0x101
-#define MAXCARDS 300
-#define MAXVARIO (MAXCARDS*4)
-#define MAXNAMECNT (MAXCARDS*256)
-
-extern int max_ce;
-extern int ce_idx;
-extern int max_vario;
-extern int vario_idx;
-extern int name_str_cnt;
-extern int max_name_str_cnt;
-extern int max_ivendor;
-extern int ivendor_idx;
-
-extern char *name_str;
-extern cdb_isdn_card *cards;
-extern cdb_isdn_vario *varios;
-extern cdb_isdn_vendor *vendors;
-
-extern int *isdncard_id;
-
-extern int drvid_cnt;
-extern int drv_subtyp_cnt;
-extern int drv_typ_cnt;
-extern int supported_cnt;
-
-extern int not_supported;
-
-struct _vendorshortnames_t {
- char *lname;
- char *sname;
-};
-
-typedef int (*fcmp) (const void *, const void *);
-
-
-extern void del_vario(void);
-extern int new_entry(void);
-extern void add_current_item(int item, char *val);
-extern void SortVendors(void);
-extern void SortCards(void);
-extern void SortVarios(void);
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include <time.h>
-#include "lex.yy.c"
-#include "hd.h"
-#include "cdb_read.h"
-
-int yywrap(void) {
- return(1);
-}
-
-static int WriteVendors(FILE *f) {
- int i;
-
- fprintf(f, "/* vendor database */\n");
- fprintf(f,"static cdb_isdn_vendor cdb_isdnvendor_info_init[] = {\n");
- for (i=0; i < ivendor_idx; i++) {
- fprintf(f," {");
- if (vendors[i].name)
- fprintf(f,"\"%s\",", vendors[i].name);
- else
- fprintf(f,"\"\",");
- if (vendors[i].shortname)
- fprintf(f,"\"%s\",", vendors[i].shortname);
- else
- fprintf(f,"\"\",");
- fprintf(f,"%d,",vendors[i].vnr);
- fprintf(f,"%d",vendors[i].refcnt);
- fprintf(f,"},\n");
- }
- fprintf(f,"};\n");
- return(0);
-}
-
-static int WriteCards(FILE *f) {
- int i;
-
- fprintf(f, "/* card database */\n");
- fprintf(f,"static cdb_isdn_card cdb_isdncard_info_init[] = {\n");
- for (i=0; i <= ce_idx; i++) {
- fprintf(f," {");
- fprintf(f,"%d,",cards[i].handle);
- fprintf(f,"%d,",cards[i].vhandle);
- if (cards[i].name)
- fprintf(f,"\"%s\",", cards[i].name);
- else
- fprintf(f,"\"\",");
- if (cards[i].lname)
- fprintf(f,"\"%s\",", cards[i].lname);
- else
- fprintf(f,"\"\",");
- if (cards[i].Class)
- fprintf(f,"\"%s\",",cards[i].Class);
- else
- fprintf(f,"NULL,");
- if (cards[i].bus)
- fprintf(f,"\"%s\",",cards[i].bus);
- else
- fprintf(f,"NULL,");
- fprintf(f,"%d,",cards[i].revision);
- fprintf(f,"%d,",cards[i].vendor);
- fprintf(f,"%d,",cards[i].device);
- fprintf(f,"%d,",cards[i].subvendor);
- fprintf(f,"%d,",cards[i].subdevice);
- fprintf(f,"%d,",cards[i].features);
- fprintf(f,"%d,",cards[i].line_cnt);
- fprintf(f,"%d,",cards[i].vario_cnt);
- fprintf(f,"%d",cards[i].vario);
- fprintf(f,"},\n");
- }
- fprintf(f,"};\n");
- fprintf(f,"static int cdb_isdncard_idsorted_init[] = {");
- for (i=0; i < ce_idx; i++) {
- if (!(i%8))
- fprintf(f,"\n ");
- fprintf(f,"%d,",isdncard_id[i]);
- }
- fprintf(f,"\n};\n");
- return(0);
-}
-
-static int WriteVarios(FILE *f) {
- int i;
-
- fprintf(f, "/* driver database */\n");
- fprintf(f,"static cdb_isdn_vario cdb_isdnvario_info_init[] = {\n");
- for (i=0; i <= vario_idx; i++) {
- fprintf(f," {");
- fprintf(f,"%d,",varios[i].handle);
- fprintf(f,"%d,",varios[i].next_vario);
- fprintf(f,"%d,",varios[i].drvid);
- fprintf(f,"%d,",varios[i].typ);
- fprintf(f,"%d,",varios[i].subtyp);
- fprintf(f,"%d,",varios[i].smp);
- if (varios[i].mod_name)
- fprintf(f,"\"%s\",", varios[i].mod_name);
- else
- fprintf(f,"\"\",");
- if (varios[i].para_str)
- fprintf(f,"\"%s\",", varios[i].para_str);
- else
- fprintf(f,"\"\",");
- if (varios[i].mod_preload)
- fprintf(f,"\"%s\",", varios[i].mod_preload);
- else
- fprintf(f,"\"\",");
- if (varios[i].cfg_prog)
- fprintf(f,"\"%s\",", varios[i].cfg_prog);
- else
- fprintf(f,"\"\",");
- if (varios[i].firmware)
- fprintf(f,"\"%s\",", varios[i].firmware);
- else
- fprintf(f,"\"\",");
- if (varios[i].description)
- fprintf(f,"\"%s\",", varios[i].description);
- else
- fprintf(f,"\"\",");
- if (varios[i].need_pkg)
- fprintf(f,"\"%s\",", varios[i].need_pkg);
- else
- fprintf(f,"\"\",");
- if (varios[i].info)
- fprintf(f,"\"%s\",", varios[i].info);
- else
- fprintf(f,"\"\",");
- if (varios[i].protocol)
- fprintf(f,"\"%s\",", varios[i].protocol);
- else
- fprintf(f,"\"\",");
- if (varios[i].interface)
- fprintf(f,"\"%s\",", varios[i].interface);
- else
- fprintf(f,"\"\",");
- if (varios[i].io)
- fprintf(f,"\"%s\",", varios[i].io);
- else
- fprintf(f,"\"\",");
- if (varios[i].irq)
- fprintf(f,"\"%s\",", varios[i].irq);
- else
- fprintf(f,"\"\",");
- if (varios[i].membase)
- fprintf(f,"\"%s\",", varios[i].membase);
- else
- fprintf(f,"\"\",");
- if (varios[i].features)
- fprintf(f,"\"%s\",", varios[i].features);
- else
- fprintf(f,"\"\",");
- fprintf(f,"%d,",varios[i].card_ref);
- if (varios[i].name)
- fprintf(f,"\"%s\"", varios[i].name);
- else
- fprintf(f,"\"\"");
- fprintf(f,"},\n");
- }
- fprintf(f,"};\n");
- return(0);
-}
-
-int main(argc,argv)
-int argc;
-char **argv;
-{
- char line[256];
- int l;
- time_t tim;
- if (argc<2) {
- fprintf(stderr, "Error no filename\n");
- exit(1);
- }
- if (!(stdin=freopen(argv[1],"rb", stdin))) {
- fprintf(stderr, "Cannot open %s as stdin\n", argv[1]);
- exit(2);
- }
- if (argc >2) {
- if (!(stdout=freopen(argv[2],"w", stdout))) {
- fprintf(stderr, "Cannot open %s as stdout\n", argv[2]);
- exit(3);
- }
- }
- cards = calloc(max_ce, sizeof(cdb_isdn_card));
- if (!cards) {
- fprintf(stderr, "cannot alloc card\n");
- fclose(stdin);
- exit(4);
- }
- varios = calloc(max_vario, sizeof(cdb_isdn_vario));
- if (!varios) {
- fprintf(stderr, "cannot alloc vario\n");
- fclose(stdin);
- free(cards);
- exit(5);
- }
- name_str = calloc(max_name_str_cnt, 1);
- if (!name_str) {
- fprintf(stderr, "cannot alloc name_str\n");
- fclose(stdin);
- free(cards);
- free(varios);
- exit(6);
- }
- vendors = calloc(max_ivendor, sizeof(cdb_isdn_vendor));
- if (!vendors) {
- fprintf(stderr, "cannot alloc vendors\n");
- fclose(stdin);
- free(cards);
- free(varios);
- free(name_str);
- exit(7);
- }
- BEGIN Main;
- yylex();
-
- SortVendors();
- SortCards();
- SortVarios();
-
- fprintf(stdout, "/* CDBISDN database */\n");
- fprintf(stdout,"const int CDBISDN_DBVERSION = 0x%x;\n", CDB_DATAVERSION);
- time(&tim);
- strcpy(line,ctime(&tim));
- l = strlen(line);
- if (l)
- line[l-1] = 0;
- fprintf(stdout,"const char CDBISDN_DATE[] = \"%s\";\n", line);
- WriteVendors(stdout);
- WriteCards(stdout);
- WriteVarios(stdout);
-
- fclose(stdin);
- free(cards);
- free(name_str);
- free(vendors);
- free(varios);
- fprintf(stderr, "used cards(%d/%d)\n", ce_idx, max_ce);
- fprintf(stderr, "used varios(%d/%d)\n", vario_idx, max_vario);
- fprintf(stderr, "used vendors(%d/%d)\n", ivendor_idx, max_ivendor);
- fprintf(stderr, "used name_str(%d/%d)\n",name_str_cnt, max_name_str_cnt);
- return(0);
-}
+++ /dev/null
-WSP [ \t]
-VALCHAR [^\|]
-
-%START Main NextLine NewEntry Value
-
-%{
-#include "isdn_cdb_def.h"
-%}
-%%
- int item = 0;
-
-<Main>{
-# BEGIN NextLine;
-^\| {
- if (new_entry())
- exit(99);
- BEGIN NewEntry;
- }
-^{WSP}+ ;
-\n ;
-}
-
-<NextLine>{
-.* ;
-\n BEGIN Main;
-}
-
-<NewEntry>{
-vendor= {item=vendor; BEGIN Value;}
-device= {item=device; BEGIN Value;}
-vendor_id= {item=vendor_id; BEGIN Value;}
-device_id= {item=device_id; BEGIN Value;}
-subvendor_id= {item=subvendor_id; BEGIN Value;}
-subdevice_id= {item=subdevice_id; BEGIN Value;}
-device_class= {item=device_class; BEGIN Value;}
-bus_type= {item=bus_type; BEGIN Value;}
-vario= {item=vario; BEGIN Value;}
-SMP= {item=SMP; BEGIN Value;}
-drv_id= {item=drv_id; BEGIN Value;}
-drv_subtyp= {item=drv_subtyp; BEGIN Value;}
-drv_typ= {item=drv_typ; BEGIN Value;}
-[iI]nterface= {item=interface; BEGIN Value;}
-line_cnt= {item=line_cnt; BEGIN Value;}
-line_protocol= {item=line_protocol; BEGIN Value;}
-module= {item=module; BEGIN Value;}
-need_packages= {item=need_packages; BEGIN Value;}
-supported= {item=supported; BEGIN Value;}
-feature= {item=feature; BEGIN Value;}
-info= {item=info; BEGIN Value;}
-special= {item=special; BEGIN Value;}
-firmware= {item=firmware; BEGIN Value;}
-short_description= {item=short_description; BEGIN Value;}
-IRQ= {item=IRQ; BEGIN Value;}
-IO= {item=IO; BEGIN Value;}
-MEMBASE= {item=MEMBASE; BEGIN Value;}
-alternative_name= {item=alternative_name; BEGIN Value;}
-revision= {item=revision; BEGIN Value;}
-\n BEGIN Main;
-}
-
-<Value>{
-\| BEGIN NewEntry;
-{VALCHAR}*/\| add_current_item(item, yytext);
-}
+++ /dev/null
-#ifndef ISDN_CDB_DEF
-#define ISDN_CDB_DEF
-
-enum {
- vendor,
- device,
- vendor_id,
- device_id,
- subvendor_id,
- subdevice_id,
- revision,
- device_class,
- bus_type,
- vario,
- SMP,
- drv_id,
- drv_subtyp,
- drv_typ,
- interface,
- line_cnt,
- line_protocol,
- module,
- need_packages,
- supported,
- feature,
- info,
- special,
- firmware,
- short_description,
- IRQ,
- IO,
- MEMBASE,
- alternative_name,
-};
-
-extern void add_current_item(int, char *);
-extern int new_entry(void);
-
-#endif /* ISDN_CDB_DEF */
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include <time.h>
-#include "lex.yy.c"
-#include "hd.h"
-#include "cdb_read.h"
-#include "cdb_hwdb.h"
-
-
-int yywrap(void) {
- return(1);
-}
-
-static int WriteNames(FILE *f) {
- char *p, *e;
- int l, nc=0;
-
- fprintf(f, "! name data\n");
- fprintf(f, "$%02d %d\n", IWHREC_TYPE_NAME_SIZE, name_str_cnt);
- p = e = name_str;
- e += name_str_cnt;
- while (p < e) {
- l = strlen(p);
- fprintf(f, "$%02d %s\n", IWHREC_TYPE_NAME_DATA, p);
- p += l + 1;
- nc++;
- }
- fprintf(f, "$%02d %d\n", IWHREC_TYPE_NAME_COUNT, nc);
- return(0);
-}
-
-static int WriteVendors(FILE *f) {
- int i, nullidx, idx;
-
- fprintf(f, "! vendor database\n");
- fprintf(f, "$%02d %d\n", IWHREC_TYPE_VENDOR_COUNT, ivendor_idx);
- nullidx = strlen(name_str); /* first 0 in string array */
- for (i=0; i < ivendor_idx; i++) {
- fprintf(f,"$%02d ", IWHREC_TYPE_VENDOR_RECORD);
- if (vendors[i].name && vendors[i].name[0])
- idx = vendors[i].name - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (vendors[i].shortname && vendors[i].shortname[0])
- idx = vendors[i].shortname - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- fprintf(f,"%d ", vendors[i].vnr);
- fprintf(f,"%d\n",vendors[i].refcnt);
- }
- return(0);
-}
-
-static int WriteCards(FILE *f) {
- int i, nullidx, idx;
-
- fprintf(f, "! card database\n");
- fprintf(f, "$%02d %d\n", IWHREC_TYPE_CARD_COUNT, ce_idx);
- nullidx = strlen(name_str); /* first 0 in string array */
-
- for (i=0; i <= ce_idx; i++) {
- fprintf(f,"$%02d ", IWHREC_TYPE_CARD_RECORD);
- fprintf(f,"%d ",cards[i].handle);
- fprintf(f,"%d ",cards[i].vhandle);
- if (cards[i].name && cards[i].name[0])
- idx = cards[i].name - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (cards[i].lname && cards[i].lname[0])
- idx = cards[i].lname - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (cards[i].Class && cards[i].Class[0])
- idx = cards[i].Class - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (cards[i].bus && cards[i].bus[0])
- idx = cards[i].bus - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- fprintf(f,"%d ",cards[i].revision);
- fprintf(f,"%d ",cards[i].vendor);
- fprintf(f,"%d ",cards[i].device);
- fprintf(f,"%d ",cards[i].subvendor);
- fprintf(f,"%d ",cards[i].subdevice);
- fprintf(f,"%d ",cards[i].features);
- fprintf(f,"%d ",cards[i].line_cnt);
- fprintf(f,"%d ",cards[i].vario_cnt);
- fprintf(f,"%d\n",cards[i].vario);
- }
- for (i=0; i < ce_idx; i++) {
- fprintf(f,"$%02d %d\n", IWHREC_TYPE_CARD_IDSORTED, isdncard_id[i]);
- }
- return(0);
-}
-
-static int WriteVarios(FILE *f) {
- int i, nullidx, idx;
-
- fprintf(f, "! driver database\n");
- fprintf(f, "$%02d %d\n", IWHREC_TYPE_VARIO_COUNT, vario_idx);
- nullidx = strlen(name_str); /* first 0 in string array */
-
- for (i=0; i <= vario_idx; i++) {
- fprintf(f,"$%02d ", IWHREC_TYPE_VARIO_RECORD);
- fprintf(f,"%d ",varios[i].handle);
- fprintf(f,"%d ",varios[i].next_vario);
- fprintf(f,"%d ",varios[i].drvid);
- fprintf(f,"%d ",varios[i].typ);
- fprintf(f,"%d ",varios[i].subtyp);
- fprintf(f,"%d ",varios[i].smp);
- if (varios[i].mod_name && varios[i].mod_name[0])
- idx = varios[i].mod_name - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].para_str && varios[i].para_str[0])
- idx = varios[i].para_str - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].mod_preload && varios[i].mod_preload[0])
- idx = varios[i].mod_preload - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].cfg_prog && varios[i].cfg_prog[0])
- idx = varios[i].cfg_prog - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].firmware && varios[i].firmware[0])
- idx = varios[i].firmware - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].description && varios[i].description[0])
- idx = varios[i].description - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].need_pkg && varios[i].need_pkg[0])
- idx = varios[i].need_pkg - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].info && varios[i].info[0])
- idx = varios[i].info - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].protocol && varios[i].protocol[0])
- idx = varios[i].protocol - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].interface && varios[i].interface[0])
- idx = varios[i].interface - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].io && varios[i].io[0])
- idx = varios[i].io - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].irq && varios[i].irq[0])
- idx = varios[i].irq - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].membase && varios[i].membase[0])
- idx = varios[i].membase - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- if (varios[i].features && varios[i].features[0])
- idx = varios[i].features - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x ", idx);
- fprintf(f,"%d ",varios[i].card_ref);
- if (varios[i].name && varios[i].name[0])
- idx = varios[i].name - name_str;
- else
- idx = nullidx;
- fprintf(f,"%x\n", idx);
- }
- return(0);
-}
-
-int main(argc,argv)
-int argc;
-char **argv;
-{
- char line[256];
- int l;
- time_t tim;
- if (argc<2) {
- if (!(stdin=freopen(CDBISDN_CDB_FILE,"rb", stdin))) {
- fprintf(stderr, "Cannot open %s as stdin\n", CDBISDN_CDB_FILE);
- exit(2);
- }
- } else {
- if (!(stdin=freopen(argv[1],"rb", stdin))) {
- fprintf(stderr, "Cannot open %s as stdin\n", argv[1]);
- exit(2);
- }
- }
- if (argc >2) {
- if (strcmp(argv[2], "-")) { /* - := stdout */
- if (!(stdout=freopen(argv[2],"w", stdout))) {
- fprintf(stderr, "Cannot open %s as stdout\n", argv[2]);
- exit(3);
- }
- }
- } else { /* default: CDBISDN_HWDB_FILE */
- if (!(stdout=freopen(CDBISDN_HWDB_FILE,"w", stdout))) {
- fprintf(stderr, "Cannot open %s as stdout\n", CDBISDN_HWDB_FILE);
- exit(3);
- }
- }
- cards = calloc(max_ce, sizeof(cdb_isdn_card));
- if (!cards) {
- fprintf(stderr, "cannot alloc card\n");
- fclose(stdin);
- exit(4);
- }
- varios = calloc(max_vario, sizeof(cdb_isdn_vario));
- if (!varios) {
- fprintf(stderr, "cannot alloc vario\n");
- fclose(stdin);
- free(cards);
- exit(5);
- }
- name_str = calloc(max_name_str_cnt, 1);
- if (!name_str) {
- fprintf(stderr, "cannot alloc name_str\n");
- fclose(stdin);
- free(cards);
- free(varios);
- exit(6);
- }
- vendors = calloc(max_ivendor, sizeof(cdb_isdn_vendor));
- if (!vendors) {
- fprintf(stderr, "cannot alloc vendors\n");
- fclose(stdin);
- free(cards);
- free(varios);
- free(name_str);
- exit(7);
- }
- BEGIN Main;
- yylex();
-
- SortVendors();
- SortCards();
- SortVarios();
-
- fprintf(stdout, "! CDBISDN database version %x\n", CDB_DATAVERSION + 1);
- fprintf(stdout, "! file is build with mk_isdnhwdb\n");
- fprintf(stdout, "! Do not change this file !!!\n");
- fprintf(stdout,"$%02d %d\n", IWHREC_TYPE_VERSION, CDB_DATAVERSION + 1);
- time(&tim);
- strcpy(line,ctime(&tim));
- l = strlen(line);
- if (l)
- line[l-1] = 0;
- fprintf(stdout,"$%02d %s\n", IWHREC_TYPE_DATE, line);
- WriteNames(stdout);
- WriteVendors(stdout);
- WriteCards(stdout);
- WriteVarios(stdout);
-
- fclose(stdin);
- free(cards);
- free(name_str);
- free(vendors);
- free(varios);
- fprintf(stderr, "used cards(%d/%d)\n", ce_idx, max_ce);
- fprintf(stderr, "used varios(%d/%d)\n", vario_idx, max_vario);
- fprintf(stderr, "used vendors(%d/%d)\n", ivendor_idx, max_ivendor);
- fprintf(stderr, "used name_str(%d/%d)\n",name_str_cnt, max_name_str_cnt);
- return(0);
-}
+++ /dev/null
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include "hd.h"
-#include "hd_int.h"
-
-#define debprintf(a...)
-// #define debprintf(a...) fprintf(stderr, ## a)
-
-/* private data */
-
-#include "cdb/isdn_cdb.h"
-#include "cdb/cdb_hwdb.h"
-
-static int CDBISDN_vendor_cnt;
-static int CDBISDN_card_cnt;
-static int CDBISDN_vario_cnt;
-static int CDBISDN_name_size;
-static char *CDBISDN_names;
-
-static cdb_isdn_vendor *cdb_isdnvendor_info;
-static cdb_isdn_card *cdb_isdncard_info;
-static int *cdb_isdncard_idsorted;
-static cdb_isdn_vario *cdb_isdnvario_info;
-static int cdb_dbversion;
-static char cdb_date[32];
-
-static char line[1024];
-
-static int CDBISDN_readhwdb;
-
-static int
-init_cdbisdn(void)
-{
- FILE *cdb;
- char *s, *p = NULL;
- int rectyp, l, cnt = 0, icnt = 0;
-
- cdb = fopen(CDBISDN_HWDB_FILE, "rb");
- if (!cdb) {
- debprintf("open failure %s\n", CDBISDN_HWDB_FILE);
- goto fallback;
- }
- while (!feof(cdb)) {
- s = fgets(line, 1024, cdb);
- if (!s)
- break;
- if (!s[0] || s[0] == '!' || s[0] == '#' || s[0] == '\n')
- continue;
- if (s[0] != '$') {
- debprintf("got wrong line %s\n", s);
- continue;
- }
- sscanf(s, "$%d", &rectyp);
- switch(rectyp) {
- case IWHREC_TYPE_VERSION:
- sscanf(s + 4, "%d", &cdb_dbversion);
- break;
- case IWHREC_TYPE_DATE:
- l = strlen(s + 4);
- if (!l)
- continue;
- l--;
- if (l > 31)
- l = 31;
- strncpy(cdb_date, s + 4, l);
- cdb_date[l] = 0;
- break;
- case IWHREC_TYPE_NAME_SIZE:
- sscanf(s + 4, "%d", &CDBISDN_name_size);
- CDBISDN_names = calloc(CDBISDN_name_size + 1, 1);
- if (!CDBISDN_names) {
- debprintf("fail to allocate %d bytes for CDBISDN_names\n", CDBISDN_name_size);
- goto fallback_close;
- }
- p = CDBISDN_names;
- cnt = 0;
- icnt = 0;
- break;
- case IWHREC_TYPE_NAME_DATA:
- if (!p)
- goto fallback_close;
- l = strlen(s + 4);
- icnt += l;
- if (icnt > CDBISDN_name_size) {
- debprintf("name_size overflow %d/%d\n", icnt, CDBISDN_name_size);
- goto fallback_close;
- }
- strcpy(p, s + 4);
- p[l-1] = 0;
- p += l;
- cnt++;
- break;
- case IWHREC_TYPE_NAME_COUNT:
- sscanf(s + 4, "%d", &l);
- if (cnt != l)
- goto fallback_close;
- break;
- case IWHREC_TYPE_VENDOR_COUNT:
- sscanf(s + 4, "%d", &CDBISDN_vendor_cnt);
- cdb_isdnvendor_info = calloc(CDBISDN_vendor_cnt, sizeof(cdb_isdn_vendor));
- if (!cdb_isdnvendor_info) {
- debprintf("fail to allocate %d vendor structs\n", CDBISDN_vendor_cnt);
- goto fallback_close;
- }
- cnt = 0;
- break;
- case IWHREC_TYPE_VENDOR_RECORD:
- if (cnt >= CDBISDN_vendor_cnt) {
- debprintf("vendor overflow %d/%d\n", cnt, CDBISDN_vendor_cnt);
- goto fallback_close;
- }
- l = sscanf(s + 4, "%p %p %d %d",
- &cdb_isdnvendor_info[cnt].name,
- &cdb_isdnvendor_info[cnt].shortname,
- &cdb_isdnvendor_info[cnt].vnr,
- &cdb_isdnvendor_info[cnt].refcnt);
- if (l != 4) {
- debprintf("error reading vendor record %s\n", s);
- goto fallback_close;
- }
- cdb_isdnvendor_info[cnt].name = CDBISDN_names + (u_long)cdb_isdnvendor_info[cnt].name;
- cdb_isdnvendor_info[cnt].shortname = CDBISDN_names + (u_long)cdb_isdnvendor_info[cnt].shortname;
- cnt++;
- break;
- case IWHREC_TYPE_CARD_COUNT:
- sscanf(s + 4, "%d", &CDBISDN_card_cnt);
- cdb_isdncard_info = calloc(CDBISDN_card_cnt + 1, sizeof(cdb_isdn_card));
- cdb_isdncard_idsorted = calloc(CDBISDN_card_cnt, sizeof(int));
- if (!cdb_isdncard_info || !cdb_isdncard_idsorted) {
- debprintf("fail to allocate %d vendor structs\n", CDBISDN_card_cnt);
- goto fallback_close;
- }
- cnt = 0;
- icnt = 0;
- break;
- case IWHREC_TYPE_CARD_RECORD:
- if (cnt > CDBISDN_card_cnt) {
- debprintf("card overflow %d/%d\n", cnt, CDBISDN_card_cnt);
- goto fallback_close;
- }
- l = sscanf(s + 4, "%d %d %p %p %p %p %d %d %d %d %d %d %d %d %d",
- &cdb_isdncard_info[cnt].handle, /* internal identifier idx in database */
- &cdb_isdncard_info[cnt].vhandle, /* internal identifier to vendor database */
- &cdb_isdncard_info[cnt].name, /* cardname */
- &cdb_isdncard_info[cnt].lname, /* vendor short name + cardname */
- &cdb_isdncard_info[cnt].Class, /* CLASS of the card */
- &cdb_isdncard_info[cnt].bus, /* bus type */
- &cdb_isdncard_info[cnt].revision, /* revision used with USB */
- &cdb_isdncard_info[cnt].vendor, /* Vendor ID for ISAPNP and PCI cards */
- &cdb_isdncard_info[cnt].device, /* Device ID for ISAPNP and PCI cards */
- &cdb_isdncard_info[cnt].subvendor, /* Subvendor ID for PCI cards */
- &cdb_isdncard_info[cnt].subdevice, /* Subdevice ID for PCI cards */
- &cdb_isdncard_info[cnt].features, /* feature flags */
- &cdb_isdncard_info[cnt].line_cnt, /* count of ISDN ports */
- &cdb_isdncard_info[cnt].vario_cnt, /* count of driver varios */
- &cdb_isdncard_info[cnt].vario); /* referenz to driver vario record */
- if (l != 15) {
- debprintf("error reading card record %s\n", s);
- goto fallback_close;
- }
- cdb_isdncard_info[cnt].name = CDBISDN_names + (u_long)cdb_isdncard_info[cnt].name;
- cdb_isdncard_info[cnt].lname = CDBISDN_names + (u_long)cdb_isdncard_info[cnt].lname;
- cdb_isdncard_info[cnt].Class = CDBISDN_names + (u_long)cdb_isdncard_info[cnt].Class;
- cdb_isdncard_info[cnt].bus = CDBISDN_names + (u_long)cdb_isdncard_info[cnt].bus;
- cnt++;
- break;
- case IWHREC_TYPE_CARD_IDSORTED:
- if (icnt >= CDBISDN_card_cnt) {
- debprintf("card overflow %d/%d\n", icnt, CDBISDN_card_cnt);
- goto fallback_close;
- }
- sscanf(s + 4, "%d", &cdb_isdncard_idsorted[icnt]);
- icnt++;
- break;
- case IWHREC_TYPE_VARIO_COUNT:
- sscanf(s + 4, "%d", &CDBISDN_vario_cnt);
- cdb_isdnvario_info = calloc(CDBISDN_vario_cnt+1, sizeof(cdb_isdn_vario));
- if (!cdb_isdnvario_info) {
- debprintf("fail to allocate %d vario structs\n", CDBISDN_vario_cnt);
- goto fallback_close;
- }
- cnt = 0;
- break;
- case IWHREC_TYPE_VARIO_RECORD:
- if (cnt > CDBISDN_vario_cnt) {
- debprintf("vario overflow %d/%d\n", cnt, CDBISDN_vario_cnt);
- goto fallback_close;
- }
- l = sscanf(s + 4, "%d %d %d %d %d %d %p %p %p %p %p %p %p %p %p %p %p %p %p %p %d %p",
- &cdb_isdnvario_info[cnt].handle, /* idx in database */
- &cdb_isdnvario_info[cnt].next_vario, /* link to alternate vario */
- &cdb_isdnvario_info[cnt].drvid, /* unique id of the driver vario */
- &cdb_isdnvario_info[cnt].typ, /* Type to identify the driver */
- &cdb_isdnvario_info[cnt].subtyp, /* Subtype of the driver type */
- &cdb_isdnvario_info[cnt].smp, /* SMP supported ? */
- &cdb_isdnvario_info[cnt].mod_name, /* name of the driver module */
- &cdb_isdnvario_info[cnt].para_str, /* optional parameter string */
- &cdb_isdnvario_info[cnt].mod_preload, /* optional modules to preload */
- &cdb_isdnvario_info[cnt].cfg_prog, /* optional cfg prog */
- &cdb_isdnvario_info[cnt].firmware, /* optional firmware to load */
- &cdb_isdnvario_info[cnt].description, /* optional description */
- &cdb_isdnvario_info[cnt].need_pkg, /* list of packages needed for function */
- &cdb_isdnvario_info[cnt].info, /* optional additional info */
- &cdb_isdnvario_info[cnt].protocol, /* supported D-channel protocols */
- &cdb_isdnvario_info[cnt].interface, /* supported API interfaces */
- &cdb_isdnvario_info[cnt].io, /* possible IO ports with legacy ISA cards */
- &cdb_isdnvario_info[cnt].irq, /* possible interrupts with legacy ISA cards */
- &cdb_isdnvario_info[cnt].membase, /* possible membase with legacy ISA cards */
- &cdb_isdnvario_info[cnt].features, /* optional features*/
- &cdb_isdnvario_info[cnt].card_ref, /* reference to a card */
- &cdb_isdnvario_info[cnt].name); /* driver name */
- if (l != 22) {
- debprintf("error reading vario record %s\n", s);
- goto fallback_close;
- }
- cdb_isdnvario_info[cnt].mod_name = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].mod_name;
- cdb_isdnvario_info[cnt].para_str = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].para_str;
- cdb_isdnvario_info[cnt].mod_preload = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].mod_preload;
- cdb_isdnvario_info[cnt].cfg_prog = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].cfg_prog;
- cdb_isdnvario_info[cnt].firmware = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].firmware;
- cdb_isdnvario_info[cnt].description = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].description;
- cdb_isdnvario_info[cnt].need_pkg = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].need_pkg;
- cdb_isdnvario_info[cnt].info = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].info;
- cdb_isdnvario_info[cnt].protocol = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].protocol;
- cdb_isdnvario_info[cnt].interface = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].interface;
- cdb_isdnvario_info[cnt].io = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].io;
- cdb_isdnvario_info[cnt].irq = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].irq;
- cdb_isdnvario_info[cnt].membase = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].membase;
- cdb_isdnvario_info[cnt].features = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].features;
- cdb_isdnvario_info[cnt].name = CDBISDN_names + (u_long)cdb_isdnvario_info[cnt].name;
- cnt++;
- break;
- default:
- debprintf("got wrong RecType %d\n", rectyp);
- break;
- }
- }
- fclose(cdb);
- if (CDBISDN_name_size == 0 ||
- CDBISDN_vendor_cnt == 0 ||
- CDBISDN_card_cnt == 0 ||
- CDBISDN_vario_cnt == 0)
- goto fallback;
- debprintf("successfull reading %s\n", CDBISDN_HWDB_FILE);
- CDBISDN_readhwdb = 1;
- return(0);
-fallback_close:
- fclose(cdb);
-fallback:
- debprintf("error reading %s\n", CDBISDN_HWDB_FILE);
- CDBISDN_vendor_cnt = (sizeof(cdb_isdnvendor_info_init) / sizeof(cdb_isdn_vendor));
- CDBISDN_card_cnt = ((sizeof(cdb_isdncard_info_init) / sizeof(cdb_isdn_card)) -1);
- CDBISDN_vario_cnt = ((sizeof(cdb_isdnvario_info_init) / sizeof(cdb_isdn_vario))-1);
- cdb_isdnvendor_info = cdb_isdnvendor_info_init;
- cdb_isdncard_info = cdb_isdncard_info_init;
- cdb_isdncard_idsorted = cdb_isdncard_idsorted_init;
- cdb_isdnvario_info = cdb_isdnvario_info_init;
- cdb_dbversion = CDBISDN_DBVERSION;
- strncpy(cdb_date, CDBISDN_DATE, 31);
- CDBISDN_readhwdb = 1;
- return(1);
-}
-
-typedef int (*fcmp) (const void *, const void *);
-
-static int compare_type(cdb_isdn_vario *v1, cdb_isdn_vario *v2) {
- int x= v1->typ - v2->typ;
-
- if (!x)
- x=v1->subtyp - v2->subtyp;
- return(x);
-}
-
-static int compare_id(const int *c1, const int *c2) {
- int x= cdb_isdncard_info[*c1].vendor - cdb_isdncard_info[*c2].vendor;
-
- if (!x)
- x=cdb_isdncard_info[*c1].device - cdb_isdncard_info[*c2].device;
- if (!x)
- x=cdb_isdncard_info[*c1].subvendor - cdb_isdncard_info[*c2].subvendor;
- if (!x)
- x=cdb_isdncard_info[*c1].subdevice - cdb_isdncard_info[*c2].subdevice;
- return(x);
-}
-
-/* interface */
-
-cdb_isdn_vendor *hd_cdbisdn_get_vendor(int handle)
-{
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- if (handle<0)
- return(NULL);
- if ((unsigned)handle >= CDBISDN_vendor_cnt)
- return(NULL);
- return(&cdb_isdnvendor_info[handle]);
-}
-
-cdb_isdn_card *hd_cdbisdn_get_card(int handle)
-{
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- if (handle<=0)
- return(NULL);
- if ((unsigned) handle>CDBISDN_card_cnt)
- return(NULL);
- return(&cdb_isdncard_info[handle]);
-}
-
-cdb_isdn_vario *hd_cdbisdn_get_vario_from_type(int typ, int subtyp)
-{
- cdb_isdn_vario key, *ret;
-
- if (!CDBISDN_readhwdb)
- CDBISDN_readhwdb = init_cdbisdn();
- key.typ = typ;
- key.subtyp = subtyp;
- if (!(ret=bsearch(&key, &cdb_isdnvario_info[1], CDBISDN_vario_cnt, sizeof(cdb_isdn_vario), (fcmp)compare_type))) {
- debprintf("ret NULL\n");
- return(NULL);
- }
- return(ret);
-}
-
-cdb_isdn_card *hd_cdbisdn_get_card_from_type(int typ, int subtyp)
-{
- cdb_isdn_vario *civ;
-
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- civ = hd_cdbisdn_get_vario_from_type(typ, subtyp);
- if (civ) {
- if (civ->card_ref > 0)
- return(&cdb_isdncard_info[civ->card_ref]);
- }
- return(NULL);
-}
-
-cdb_isdn_card *hd_cdbisdn_get_card_from_id(int vendor, int device, int subvendor, int subdevice)
-{
- int key, *ret;
-
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- key = 0;
- cdb_isdncard_info[key].vendor = vendor;
- cdb_isdncard_info[key].device = device;
- cdb_isdncard_info[key].subvendor = subvendor;
- cdb_isdncard_info[key].subdevice = subdevice;
- if (!(ret=bsearch(&key, cdb_isdncard_idsorted, CDBISDN_card_cnt, sizeof(int), (fcmp)compare_id))) {
- debprintf("bs1 ret NULL\n");
- key = 0;
- cdb_isdncard_info[key].subvendor = PCI_ANY_ID;
- cdb_isdncard_info[key].subdevice = PCI_ANY_ID;
- if (!(ret=bsearch(&key, cdb_isdncard_idsorted, CDBISDN_card_cnt, sizeof(int), (fcmp)compare_id))) {
- debprintf("bs2 ret NULL\n");
- return(NULL);
- }
- }
- debprintf("ret idx %d\n", *ret);
- if (*ret <= 0)
- return(NULL);
- if ((unsigned) *ret > CDBISDN_card_cnt)
- return(NULL);
- return(&cdb_isdncard_info[*ret]);
-}
-
-cdb_isdn_vario *hd_cdbisdn_get_vario(int handle)
-{
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- if (handle<=0)
- return(NULL);
- if ((unsigned) handle > CDBISDN_vario_cnt)
- return(NULL);
- return(&cdb_isdnvario_info[handle]);
-}
-
-int hd_cdbisdn_get_version(void)
-{
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- return(CDBISDN_VERSION);
-}
-
-int hd_cdbisdn_get_db_version(void)
-{
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- return(cdb_dbversion);
-}
-
-char *hd_cdbisdn_get_db_date(void)
-{
- if (!CDBISDN_readhwdb)
- init_cdbisdn();
- return(cdb_date);
-}
+++ /dev/null
-#if defined(__i386__)
-
-#include <stdio.h>
-#include <sys/io.h>
-
-#include "hd.h"
-#include "hd_int.h"
-#include "isa.h"
-
-#define AVM_CONFIG_OFF 0x1800 /* offset for config register */
-#define AVM_TEST_MASK 0x28 /* allways zero */
-#define AVM_HSCX_A_VSTR 0x40e /* HSCX A version reg */
-#define AVM_HSCX_B_VSTR 0xc0e /* HSCX B version reg */
-
-int avm_a1_detect(isa_isdn_t **ii) {
- int adr,i;
- unsigned char val,v1,v2;
- int found=0;
- unsigned short AVM_ADR[4]={0x200,0x240,0x300,0x340};
- isa_isdn_t *card;
-
- for (i=0;i<4;i++) {
- adr=AVM_ADR[i] + AVM_CONFIG_OFF;
- val = inb(adr);
- if (val & AVM_TEST_MASK)
- continue;
- /* May be we found an AVM A1 or AVM Fritz!Classic */
- /* Checking HSCX VERSIONS */
- v1 = 0xf & inb(AVM_ADR[i] + AVM_HSCX_A_VSTR);
- if ((v1 != 5) && (v1 != 4))
- continue;
- v2 = 0xf & inb(AVM_ADR[i] + AVM_HSCX_B_VSTR);
- if (v1 != v2)
- continue;
- /* 99% we found an AVM A1 or AVM Fritz!Classic */
- /* printf("# AVM A1 or Fritz!Classic found\n");
- printf("TYPE=5 SUBTYPE=0 IO=0x%3x\n", AVM_ADR[i]); */
- card = new_isa_isdn(ii);
- card->type = 5; card->has_io = 1; card->io = AVM_ADR[i];
- found++;
- }
- return(found);
-}
-
-#define ELSA_CONFIG 5
-#define ELSA_PC 1
-#define ELSA_PCC8 2
-#define ELSA_PCC16 3
-#define ELSA_PCF 4
-#define ELSA_PCFPRO 5
-
-#define ELSA_IRQ_IDX 0x38 /* Bit 3,4,5 des Config-Reg */
-#define ELSA_IRQ_IDX_PCC8 0x30 /* Bit 4,5 des Config-Reg */
-#define ELSA_IRQ_IDX_PC 0x0c /* Bit 2,3 des Config-Reg */
-
-
-int
-probe_elsa_adr(unsigned int adr)
-{
- int i, in1, in2, p16_1 = 0, p16_2 = 0, p8_1 = 0, p8_2 = 0, pc_1 = 0,
- pc_2 = 0, pfp_1 = 0, pfp_2 = 0;
-
- for (i = 0; i < 16; i++) {
- in1 = inb(adr + ELSA_CONFIG); /* 'toggelt' bei */
- in2 = inb(adr + ELSA_CONFIG); /* jedem Zugriff */
- p16_1 += 0x04 & in1;
- p16_2 += 0x04 & in2;
- p8_1 += 0x02 & in1;
- p8_2 += 0x02 & in2;
- pc_1 += 0x01 & in1;
- pc_2 += 0x01 & in2;
- pfp_1 += 0x40 & in1;
- pfp_2 += 0x40 & in2;
- }
- if (65 == ++p16_1 * ++p16_2) {
- return (ELSA_PCC16);
- } else if (1025 == ++pfp_1 * ++pfp_2) {
- return (ELSA_PCFPRO);
- } else if (33 == ++p8_1 * ++p8_2) {
- return (ELSA_PCC8);
- } else if (17 == ++pc_1 * ++pc_2) {
- return (ELSA_PC);
- }
- return (0);
-}
-
-int
-probe_elsa(isa_isdn_t **ii)
-{
- int i, subtyp, val, irq, found=0;
- isa_isdn_t *card;
-
- unsigned int CARD_portlist[] =
- {0x160, 0x170, 0x260, 0x360, 0};
-
- for (i = 0; CARD_portlist[i]; i++) {
- if ((subtyp = probe_elsa_adr(CARD_portlist[i]))) {
- found++;
- val = inb(CARD_portlist[i] + ELSA_CONFIG);
- if (subtyp == ELSA_PC) {
- int CARD_IrqTab[8] =
- {7, 3, 5, 9, 0, 0, 0, 0};
- irq = CARD_IrqTab[(val & ELSA_IRQ_IDX_PC) >> 2];
- } else if (subtyp == ELSA_PCC8) {
- int CARD_IrqTab[8] =
- {7, 3, 5, 9, 0, 0, 0, 0};
- irq = CARD_IrqTab[(val & ELSA_IRQ_IDX_PCC8) >> 4];
- } else {
- int CARD_IrqTab[8] =
- {15, 10, 15, 3, 11, 5, 11, 9};
- irq = CARD_IrqTab[(val & ELSA_IRQ_IDX) >> 3];
- }
- switch(subtyp) {
- case ELSA_PC:
- /* printf("# Elsa ML PC found\n");
- printf("TYPE=6 SUBTYPE=%d IO=0x%03x IRQ=%d\n",
- subtyp, CARD_portlist[i], irq); */
- case ELSA_PCC8:
- /* printf("# Elsa ML PCC-8 found\n");
- printf("TYPE=6 SUBTYPE=%d IO=0x%03x IRQ=%d\n",
- subtyp, CARD_portlist[i], irq); */
- case ELSA_PCC16:
- /* printf("# Elsa ML PCC-16 found\n");
- printf("TYPE=6 SUBTYPE=%d IO=0x%03x IRQ=%d\n",
- subtyp, CARD_portlist[i], irq); */
- case ELSA_PCF:
- /* printf("# Elsa ML PCF found\n");
- printf("TYPE=6 SUBTYPE=%d IO=0x%03x IRQ=%d\n",
- subtyp, CARD_portlist[i], irq); */
- case ELSA_PCFPRO:
- /* printf("# Elsa ML PCFPro found\n");
- printf("TYPE=6 SUBTYPE=%d IO=0x%03x IRQ=%d\n",
- subtyp, CARD_portlist[i], irq); */
-
- card = new_isa_isdn(ii);
- card->type = 6; card->subtype = subtyp;
- card->has_io = 1; card->io = CARD_portlist[i];
- card->has_irq = 1; card->irq = irq;
- break;
- }
- }
- }
- return (found);
-}
-
-
-#define TELES_CONFIG_OFF 0xc00
-#define TELES_ID1 0x51
-#define TELES_ID2 0x93
-#define TELES_16_0 0x1e
-#define TELES_16_0_AB 0x1f
-#define TELES_16_3_0 0x1c
-#define TELES_16_3_1 0x39
-#define TELES_16_3_3 0x38
-#define TELES_16_3_AB 0x46
-
-
-int telesdetect(isa_isdn_t **ii) {
- int adr,val,i;
- int found=0;
- unsigned short TELES_ADR[3]={0x380,0x280,0x180};
- isa_isdn_t *card;
-
- for (i=0;i<3;i++) {
- adr=TELES_ADR[i] + TELES_CONFIG_OFF;
-
- val = inb(adr);
- if (val != TELES_ID1)
- continue;
- adr++;
- val = inb(adr);
- if (val != TELES_ID2)
- continue;
- adr++;
- val = inb(adr);
- switch(val) {
- case TELES_16_0:
- /* printf("# Teles 16.0 found\n");
- printf("TYPE=1 SUBTYPE=0 IO=0x%3x\n",
- TELES_ADR[i] + TELES_CONFIG_OFF); */
- case TELES_16_0_AB:
- /* printf("# Teles 16.0 AB found\n");
- printf("TYPE=1 SUBTYPE=1 IO=0x%3x\n",
- TELES_ADR[i] + TELES_CONFIG_OFF); */
- card = new_isa_isdn(ii);
- card->type = 1;
- if(val == TELES_16_0_AB) card->subtype = 1;
- card->has_io = 1; card->io = TELES_ADR[i] + TELES_CONFIG_OFF;
- found++;
- break;
- case TELES_16_3_0:
- /* printf("# Teles 16.3 v1.0 found\n");
- printf("TYPE=3 SUBTYPE=0 IO=0x%3x\n",
- TELES_ADR[i]); */
- case TELES_16_3_1:
- /* printf("# Teles 16.3 v1.1 found\n");
- printf("TYPE=3 SUBTYPE=0 IO=0x%3x\n",
- TELES_ADR[i]); */
- case TELES_16_3_3:
- /* printf("# Teles 16.3 v1.3 found\n");
- printf("TYPE=3 SUBTYPE=0 IO=0x%3x\n",
- TELES_ADR[i]); */
- case TELES_16_3_AB:
- /* printf("# Teles 16.3 AB Video found\n");
- printf("TYPE=3 SUBTYPE=1 IO=0x%3x\n",
- TELES_ADR[i]); */
- card = new_isa_isdn(ii);
- card->type = 3;
- if(val == TELES_16_3_AB) card->subtype = 1;
- card->has_io = 1; card->io = TELES_ADR[i];
- found++;
- break;
- default:
- if (0 /* guess */)
- printf("# may be a Teles 16.0/16.3 detected at IO=0x%3x byte 3 is 0x%02x\n",
- TELES_ADR[i] + TELES_CONFIG_OFF, val);
- break;
- }
- }
- return(found);
-}
-
-isa_isdn_t *isdn_detect()
-{
- isa_isdn_t *ii = NULL;
-
- if(iopl(3) < 0) return ii;
-
- avm_a1_detect(&ii);
- probe_elsa(&ii);
- telesdetect(&ii);
-
- iopl(0);
-
- return ii;
-}
-
-#endif /* i386 */
+++ /dev/null
-1.
-ihw_card_info *ihw_get_card(int handle);
-
-"ihw_card_info" is a struct, which hold all info about the card (see ihw.h)
-The parameter is a internal used index for the database (range 0 ... max)
-To get all records use the following code as example:
-
- ihw_card_info *icp;
- handle = 0;
- while ((icp =ihw_get_card(handle++))) {
- ...
- }
-
-If here are no entries left, you get NULL as return value.
-
-2.
-ihw_card_info *ihw_get_device_from_type(int typ, int subtyp);
-
-Get card informations for the card with TYPE and SUBTYPE .
-Returns NULL if no card match.
-This function is useful to get the card informations, if you have type and
-subtype from a rc.config, or from hardware probe.
-
-3.
-extern ihw_card_info *ihw_get_card_from_id(int vendor, int device,
- int subvendor, int subdevice);
-
-Get card informations for the card with VENDOR,DEVICE,SUBVENDOR and
-SUBDEVICE for PCI and ISAPNP cards (set SUBVENDOR and SUBDEVICE
-to 0xffff for ISAPNP cards). Returns NULL if no card found.
-
-This function will be useful for hardware probe.
-
-
-4.
-ihw_para_info *ihw_get_parameter(int card_handle, int pnr);
-
-This function provides parameter info for a card (which was given by one of
-the first 3 functions). "card_handle" is the "ihw_card_info->handle" of
-the given card, pnr is the number of the requested parameter (1,2, ...).
-For the first parameter, set pnr to 1, for next increment pnr, until
-NULL is returned.
-
-For examples see at demo/demo.c
-
-Specials:
-
-To make it easy to decide, if an parameter has to be set in a rc.config
-a flag P_DEFINE is set in ihw_para_info->flags, which is set for all
-parameter which have to go into rc.config (for yast1 this parameter has to be
-setable).
-
-Other flags (may be useful for autodetection):
-
-P_HARDSET - parameter depends on a jumper or switch.
-P_SOFTSET - parameter is written into a config register (not for PnP/PCI)
-P_READABLE - parameter can be read from a config register (not for PnP/PCI)
-P_ISAPNP - parameter is set via ISA PnP setup
-P_PCI - parameter is a PCI one
-
-Karsten
+++ /dev/null
-TOPDIR = ../..
-TARGETS = $(LIBHD_D)
-
-include $(TOPDIR)/Makefile.common
-
-$(LIBHD_D): $(OBJS)
- ar r $(LIBHD) $?
+++ /dev/null
-usage: smp
-
-exit codes:
- 0 -> ok, is smp
- != 0 -> no, is single processor
-
-Note1: just checks the smp capability of the board, not if >1 processor is
-actually installed.
-
-Note2: must be run as 'root'.
-
-Original is:
-
-/mirror/distributions/redhat/ftp.redhat.com/redhat/redhat-6.1/i386/misc/src/anaconda/isys/smp.c
+++ /dev/null
-/*
-[_Anarchy_(alan@lightning.swansea.uk.linux.org)] you should do one check
- though - if the board seems to be SMP and the CPU in /proc/cpuinfo is non
- intel dont install an SMP kernel - thats a dual pentium board with a cyrix
- or similar single cpu in it
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <string.h>
-#include <errno.h>
-
-#ifdef __i386__
-#define SMP_MAGIC_IDENT (('_'<<24)|('P'<<16)|('M'<<8)|'_')
-
-struct intel_mp_floating
-{
- char mpf_signature[4]; /* "_MP_" */
- unsigned long mpf_physptr; /* Configuration table address */
- unsigned char mpf_length; /* Our length (paragraphs) */
- unsigned char mpf_specification;/* Specification version */
- unsigned char mpf_checksum; /* Checksum (makes sum 0) */
- unsigned char mpf_feature1; /* Standard or configuration ? */
- unsigned char mpf_feature2; /* Bit7 set for IMCR|PIC */
- unsigned char mpf_feature3; /* Unused (0) */
- unsigned char mpf_feature4; /* Unused (0) */
- unsigned char mpf_feature5; /* Unused (0) */
-};
-
-struct mp_config_table
-{
- char mpc_signature[4];
-#define MPC_SIGNATURE "PCMP"
- unsigned short mpc_length; /* Size of table */
- char mpc_spec; /* 0x01 */
- char mpc_checksum;
- char mpc_oem[8];
- char mpc_productid[12];
- unsigned long mpc_oemptr; /* 0 if not present */
- unsigned short mpc_oemsize; /* 0 if not present */
- unsigned short mpc_oemcount;
- unsigned long mpc_lapic; /* APIC address */
- unsigned long reserved;
-};
-
-/* Followed by entries */
-
-#define MP_PROCESSOR 0
-#define MP_BUS 1
-#define MP_IOAPIC 2
-#define MP_INTSRC 3
-#define MP_LINTSRC 4
-
-struct mpc_config_processor
-{
- unsigned char mpc_type;
- unsigned char mpc_apicid; /* Local APIC number */
- unsigned char mpc_apicver; /* Its versions */
- unsigned char mpc_cpuflag;
-#define CPU_ENABLED 1 /* Processor is available */
-#define CPU_BOOTPROCESSOR 2 /* Processor is the BP */
- unsigned long mpc_cpufeature;
-#define CPU_STEPPING_MASK 0x0F
-#define CPU_MODEL_MASK 0xF0
-#define CPU_FAMILY_MASK 0xF00
- unsigned long mpc_featureflag; /* CPUID feature value */
- unsigned long mpc_reserved[2];
-};
-
-struct mpc_config_bus
-{
- unsigned char mpc_type;
- unsigned char mpc_busid;
- unsigned char mpc_bustype[6] __attribute((packed));
-};
-
-#define BUSTYPE_EISA "EISA"
-#define BUSTYPE_ISA "ISA"
-#define BUSTYPE_INTERN "INTERN" /* Internal BUS */
-#define BUSTYPE_MCA "MCA"
-#define BUSTYPE_VL "VL" /* Local bus */
-#define BUSTYPE_PCI "PCI"
-#define BUSTYPE_PCMCIA "PCMCIA"
-
-/* We don't understand the others */
-
-struct mpc_config_ioapic
-{
- unsigned char mpc_type;
- unsigned char mpc_apicid;
- unsigned char mpc_apicver;
- unsigned char mpc_flags;
-#define MPC_APIC_USABLE 0x01
- unsigned long mpc_apicaddr;
-};
-
-struct mpc_config_intsrc
-{
- unsigned char mpc_type;
- unsigned char mpc_irqtype;
- unsigned short mpc_irqflag;
- unsigned char mpc_srcbus;
- unsigned char mpc_srcbusirq;
- unsigned char mpc_dstapic;
- unsigned char mpc_dstirq;
-};
-
-#define MP_INT_VECTORED 0
-#define MP_INT_NMI 1
-#define MP_INT_SMI 2
-#define MP_INT_EXTINT 3
-
-#define MP_IRQDIR_DEFAULT 0
-#define MP_IRQDIR_HIGH 1
-#define MP_IRQDIR_LOW 3
-
-
-struct mpc_config_intlocal
-{
- unsigned char mpc_type;
- unsigned char mpc_irqtype;
- unsigned short mpc_irqflag;
- unsigned char mpc_srcbusid;
- unsigned char mpc_srcbusirq;
- unsigned char mpc_destapic;
-#define MP_APIC_ALL 0xFF
- unsigned char mpc_destapiclint;
-};
-
-
-/*
- * Default configurations
- *
- * 1 2 CPU ISA 82489DX
- * 2 2 CPU EISA 82489DX no IRQ 8 or timer chaining
- * 3 2 CPU EISA 82489DX
- * 4 2 CPU MCA 82489DX
- * 5 2 CPU ISA+PCI
- * 6 2 CPU EISA+PCI
- * 7 2 CPU MCA+PCI
- */
-
-
-static int smp_found_config=0;
-
-/*
- * Checksum an MP configuration block.
- */
-
-static int mpf_checksum(unsigned char *mp, int len)
-{
- int sum=0;
- while(len--)
- sum+=*mp++;
- return sum&0xFF;
-}
-
-static int do_smp_scan_config(unsigned long *bp, unsigned long length)
-{
- struct intel_mp_floating *mpf;
-
-/*
- if (sizeof(*mpf)!=16)
- logMessage("Error: MPF size\n");
-*/
-
- while (length>0)
- {
- if (*bp==SMP_MAGIC_IDENT)
- {
- mpf=(struct intel_mp_floating *)bp;
- if (mpf->mpf_length==1 &&
- !mpf_checksum((unsigned char *)bp,16) &&
- (mpf->mpf_specification == 1
- || mpf->mpf_specification == 4) )
- {
- /*logMessage("Intel MultiProcessor Specification v1.%d\n", mpf->mpf_specification);
- if (mpf->mpf_feature2&(1<<7))
- logMessage(" IMCR and PIC compatibility mode.\n");
- else
- logMessage(" Virtual Wire compatibility mode.\n");
-*/
- smp_found_config=1;
- return 1;
- }
- }
- bp+=4;
- length-=16;
- }
-
- return 0;
-}
-
-static int smp_scan_config(int mem_fd, unsigned long base,
- unsigned long length)
-{
- void *p;
- int o;
-
- o=base&0xFFF;
- base-=o;
- length+=o;
-
- p=mmap(0, (length+4095)&0xFFFFF000, PROT_READ, MAP_SHARED,
- mem_fd, (base&0xFFFF0000));
- if(p==MAP_FAILED)
- {
- /*logMessage("SMP Probe error: mmap: %s", strerror(errno));*/
- return 1;
- }
- do_smp_scan_config(p+o, length-o);
- munmap(p, (length+4095)&0xFFFFF000);
- return 0;
-}
-
-static int intelDetectSMP(void)
-{
- int mem_fd;
-
- mem_fd=open("/dev/mem", O_RDONLY);
-
- if(mem_fd==-1)
- {
- /*logMessage("Error detecting SMP: /dev/mem: %s", strerror(errno));*/
- }
-
- /*
- * FIXME: Linux assumes you have 640K of base ram..
- * this continues the error...
- *
- * 1) Scan the bottom 1K for a signature
- * 2) Scan the top 1K of base RAM
- * 3) Scan the 64K of bios
- */
- if (!smp_scan_config(mem_fd, 0x0, 0x400) &&
- !smp_scan_config(mem_fd, 639*0x400,0x400) &&
- !smp_scan_config(mem_fd, 0xF0000,0x10000)) {
-#if 0
-
- /*
- * If it is an SMP machine we should know now, unless the
- * configuration is in an EISA/MCA bus machine with an
- * extended bios data area.
- *
- * there is a real-mode segmented pointer pointing to the
- * 4K EBDA area at 0x40E, calculate and scan it here.
- *
- * NOTE! There are Linux loaders that will corrupt the EBDA
- * area, and as such this kind of SMP config may be less
- * trustworthy, simply because the SMP table may have been
- * stomped on during early boot. These loaders are buggy and
- * should be fixed.
- */
- unsigned int address;
-
- address = *(unsigned short *)phys_to_virt(0x40E);
- address<<=4;
- smp_scan_config(mem_fd, address, 0x1000);
- if (smp_found_config)
- /*logMessage("WARNING: MP table in the EBDA can be UNSAFE, contact linux-smp@vger.rutgers.edu if you experience SMP problems!\n");*/
-#endif
- }
-/*
- if(smp_found_config)
- logMessage("Detected SMP capable motherboard\n");
- else
- logMessage("Detected non SMP capable motherboard\n");
-*/
- return smp_found_config;
-}
-
-int detectSMP(void)
-{
- static int isSMP = -1;
-
- if (isSMP != -1)
- return isSMP;
-
- return isSMP = intelDetectSMP();
-}
-
-#endif /* __i386__ */
+++ /dev/null
- License information
- -------------------
-
-The x86emu library is under a BSD style license, comaptible
-with the XFree86 and X licenses used by XFree86. The
-original x86emu libraries were under the GNU General Public
-License. Due to license incompatibilities between the GPL
-and the XFree86 license, the original authors of the code
-decided to allow a license change. If you have submitted
-code to the original x86emu project, and you don't agree
-with the license change, please contact us and let you
-know. Your code will be removed to comply with your wishes.
-
-If you have any questions about this, please send email to
-x86emu@linuxlabs.com or KendallB@scitechsoft.com for
-clarification.
-
+++ /dev/null
-#############################################################################
-#
-# Realmode X86 Emulator Library
-#
-# Copyright (C) 1996-1999 SciTech Software, Inc.
-#
-# ========================================================================
-#
-# Permission to use, copy, modify, distribute, and sell this software and
-# its documentation for any purpose is hereby granted without fee,
-# provided that the above copyright notice appear in all copies and that
-# both that copyright notice and this permission notice appear in
-# supporting documentation, and that the name of the authors not be used
-# in advertising or publicity pertaining to distribution of the software
-# without specific, written prior permission. The authors makes no
-# representations about the suitability of this software for any purpose.
-# It is provided "as is" without express or implied warranty.
-#
-# THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# ========================================================================
-#
-# Descripton: Linux specific makefile for the x86emu library.
-#
-#############################################################################
-
-TARGETLIB = ../libhd.a
-TARGETDEBUGLIB = ../libx86emud.a
-
-OBJS=\
-debug.o \
-decode.o \
-fpu.o \
-ops.o \
-ops2.o \
-prim_ops.o \
-sys.o
-
-DEBUGOBJS=debug.d \
- decode.d \
- fpu.d \
- ops.d \
- ops2.d \
- prim_ops.d \
- sys.d
-
-.SUFFIXES: .d
-
-all: $(TARGETLIB)
-
-$(TARGETLIB): $(OBJS)
-# prefix objects with x86emu_
- @for i in $? ; do cp -p $$i x86emu_$$i ; ar rv $@ x86emu_$$i || exit ; rm -f x86emu_$$i ; done
-
-$(TARGETDEBUGLIB): $(DEBUGOBJS)
- ar rv $(TARGETDEBUGLIB) $(DEBUGOBJS)
-
-INCS = -I. -Ix86emu -Iinclude
-CFLAGS += -D__DRIVER__ -DFORCE_POST -D_CEXPORT= -DNO_LONG_LONG
-CDEBUGFLAGS = -DDEBUG
-
-.c.o:
- gcc -c $(CFLAGS) $(INCS) $*.c
-
-.c.d:
- gcc -c -o$*.d $(CFLAGS) $(CDEBUGFLAGS) $(INCS) $*.c
-
-.cpp.o:
- gcc -c $(CFLAGS) $(INCS) $*.cpp
-
-install: all
-
-distclean: clean
- @rm -f *~
-
-clean:
- @rm -f *.o *.d
-
-validate: validate.o ../libx86emu.a
- gcc -o validate validate.o -lx86emu -L..
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file contains the code to handle debugging of the
-* emulator.
-*
-****************************************************************************/
-/* $XFree86: xc/extras/x86emu/src/x86emu/debug.c,v 1.2 2000/04/05 18:13:14 dawes Exp $ */
-
-#include "x86emu/x86emui.h"
-#ifdef IN_MODULE
-#include "xf86_ansic.h"
-#else
-#include <stdarg.h>
-#include <stdlib.h>
-#endif
-
-/*----------------------------- Implementation ----------------------------*/
-
-#ifdef DEBUG
-
-static void print_encoded_bytes (u16 s, u16 o);
-static void print_decoded_instruction (void);
-static int parse_line (char *s, int *ps, int *n);
-
-/* should look something like debug's output. */
-void X86EMU_trace_regs (void)
-{
- if (DEBUG_TRACE()) {
- x86emu_dump_regs();
- }
- if (DEBUG_DECODE() && ! DEBUG_DECODE_NOPRINT()) {
- printk("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
- print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
- print_decoded_instruction();
- }
-}
-
-void X86EMU_trace_xregs (void)
-{
- if (DEBUG_TRACE()) {
- x86emu_dump_xregs();
- }
-}
-
-void x86emu_just_disassemble (void)
-{
- /*
- * This routine called if the flag DEBUG_DISASSEMBLE is set kind
- * of a hack!
- */
- printk("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
- print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
- print_decoded_instruction();
-}
-
-static void disassemble_forward (u16 seg, u16 off, int n)
-{
- X86EMU_sysEnv tregs;
- int i;
- u8 op1;
- /*
- * hack, hack, hack. What we do is use the exact machinery set up
- * for execution, except that now there is an additional state
- * flag associated with the "execution", and we are using a copy
- * of the register struct. All the major opcodes, once fully
- * decoded, have the following two steps: TRACE_REGS(r,m);
- * SINGLE_STEP(r,m); which disappear if DEBUG is not defined to
- * the preprocessor. The TRACE_REGS macro expands to:
- *
- * if (debug&DEBUG_DISASSEMBLE)
- * {just_disassemble(); goto EndOfInstruction;}
- * if (debug&DEBUG_TRACE) trace_regs(r,m);
- *
- * ...... and at the last line of the routine.
- *
- * EndOfInstruction: end_instr();
- *
- * Up to the point where TRACE_REG is expanded, NO modifications
- * are done to any register EXCEPT the IP register, for fetch and
- * decoding purposes.
- *
- * This was done for an entirely different reason, but makes a
- * nice way to get the system to help debug codes.
- */
- tregs = M;
- tregs.x86.R_IP = off;
- tregs.x86.R_CS = seg;
-
- /* reset the decoding buffers */
- tregs.x86.enc_str_pos = 0;
- tregs.x86.enc_pos = 0;
-
- /* turn on the "disassemble only, no execute" flag */
- tregs.x86.debug |= DEBUG_DISASSEMBLE_F;
-
- /* DUMP NEXT n instructions to screen in straight_line fashion */
- /*
- * This looks like the regular instruction fetch stream, except
- * that when this occurs, each fetched opcode, upon seeing the
- * DEBUG_DISASSEMBLE flag set, exits immediately after decoding
- * the instruction. XXX --- CHECK THAT MEM IS NOT AFFECTED!!!
- * Note the use of a copy of the register structure...
- */
- for (i=0; i<n; i++) {
- op1 = (*sys_rdb)(((u32)M.x86.R_CS<<4) + (M.x86.R_IP++));
- (x86emu_optab[op1])(op1);
- }
- /* end major hack mode. */
-}
-
-void x86emu_check_ip_access (void)
-{
- /* NULL as of now */
-}
-
-void x86emu_check_sp_access (void)
-{
-}
-
-void x86emu_check_mem_access (u32 dummy)
-{
- /* check bounds, etc */
-}
-
-void x86emu_check_data_access (uint dummy1, uint dummy2)
-{
- /* check bounds, etc */
-}
-
-void x86emu_inc_decoded_inst_len (int x)
-{
- M.x86.enc_pos += x;
-}
-
-void x86emu_decode_printf (char *x)
-{
- sprintf(M.x86.decoded_buf+M.x86.enc_str_pos,"%s",x);
- M.x86.enc_str_pos += strlen(x);
-}
-
-void x86emu_decode_printf2 (char *x, int y)
-{
- char temp[100];
- sprintf(temp,x,y);
- sprintf(M.x86.decoded_buf+M.x86.enc_str_pos,"%s",temp);
- M.x86.enc_str_pos += strlen(temp);
-}
-
-void x86emu_end_instr (void)
-{
- M.x86.enc_str_pos = 0;
- M.x86.enc_pos = 0;
-}
-
-static void print_encoded_bytes (u16 s, u16 o)
-{
- int i;
- char buf1[64];
- for (i=0; i< M.x86.enc_pos; i++) {
- sprintf(buf1+2*i,"%02x", fetch_data_byte_abs(s,o+i));
- }
- printk("%-20s",buf1);
-}
-
-static void print_decoded_instruction (void)
-{
- printk("%s", M.x86.decoded_buf);
-}
-
-void x86emu_print_int_vect (u16 iv)
-{
- u16 seg,off;
-
- if (iv > 256) return;
- seg = fetch_data_word_abs(0,iv*4);
- off = fetch_data_word_abs(0,iv*4+2);
- printk("%04x:%04x ", seg, off);
-}
-
-void X86EMU_dump_memory (u16 seg, u16 off, u32 amt)
-{
- u32 start = off & 0xfffffff0;
- u32 end = (off+16) & 0xfffffff0;
- u32 i;
- u32 current;
-
- current = start;
- while (end <= off + amt) {
- printk("%04x:%04x ", seg, start);
- for (i=start; i< off; i++)
- printk(" ");
- for ( ; i< end; i++)
- printk("%02x ", fetch_data_byte_abs(seg,i));
- printk("\n");
- start = end;
- end = start + 16;
- }
-}
-
-void x86emu_single_step (void)
-{
- char s[1024];
- int ps[10];
- int ntok;
- int cmd;
- int done;
- int segment;
- int offset;
- static int breakpoint;
- static int noDecode = 1;
-
- char *p;
-
- if (DEBUG_BREAK()) {
- if (M.x86.saved_ip != breakpoint) {
- return;
- } else {
- M.x86.debug &= ~DEBUG_DECODE_NOPRINT_F;
- M.x86.debug |= DEBUG_TRACE_F;
- M.x86.debug &= ~DEBUG_BREAK_F;
- print_decoded_instruction ();
- X86EMU_trace_regs();
- }
- }
- done=0;
- offset = M.x86.saved_ip;
- while (!done) {
- printk("-");
- p = fgets(s, 1023, stdin);
- cmd = parse_line(s, ps, &ntok);
- switch(cmd) {
- case 'u':
- disassemble_forward(M.x86.saved_cs,(u16)offset,10);
- break;
- case 'd':
- if (ntok == 2) {
- segment = M.x86.saved_cs;
- offset = ps[1];
- X86EMU_dump_memory(segment,(u16)offset,16);
- offset += 16;
- } else if (ntok == 3) {
- segment = ps[1];
- offset = ps[2];
- X86EMU_dump_memory(segment,(u16)offset,16);
- offset += 16;
- } else {
- segment = M.x86.saved_cs;
- X86EMU_dump_memory(segment,(u16)offset,16);
- offset += 16;
- }
- break;
- case 'c':
- M.x86.debug ^= DEBUG_TRACECALL_F;
- break;
- case 's':
- M.x86.debug ^= DEBUG_SVC_F | DEBUG_SYS_F | DEBUG_SYSINT_F;
- break;
- case 'r':
- X86EMU_trace_regs();
- break;
- case 'x':
- X86EMU_trace_xregs();
- break;
- case 'g':
- if (ntok == 2) {
- breakpoint = ps[1];
- if (noDecode) {
- M.x86.debug |= DEBUG_DECODE_NOPRINT_F;
- } else {
- M.x86.debug &= ~DEBUG_DECODE_NOPRINT_F;
- }
- M.x86.debug &= ~DEBUG_TRACE_F;
- M.x86.debug |= DEBUG_BREAK_F;
- done = 1;
- }
- break;
- case 'q':
- M.x86.debug |= DEBUG_EXIT;
- return;
- case 'P':
- noDecode = (noDecode)?0:1;
- printk("Toggled decoding to %s\n",(noDecode)?"FALSE":"TRUE");
- break;
- case 't':
- case 0:
- done = 1;
- break;
- }
- }
-}
-
-int X86EMU_trace_on(void)
-{
- return M.x86.debug |= DEBUG_STEP_F | DEBUG_DECODE_F | DEBUG_TRACE_F;
-}
-
-int X86EMU_trace_off(void)
-{
- return M.x86.debug &= ~(DEBUG_STEP_F | DEBUG_DECODE_F | DEBUG_TRACE_F);
-}
-
-static int parse_line (char *s, int *ps, int *n)
-{
- int cmd;
-
- *n = 0;
- while(*s == ' ' || *s == '\t') s++;
- ps[*n] = *s;
- switch (*s) {
- case '\n':
- *n += 1;
- return 0;
- default:
- cmd = *s;
- *n += 1;
- }
-
- while (1) {
- while (*s != ' ' && *s != '\t' && *s != '\n') s++;
-
- if (*s == '\n')
- return cmd;
-
- while(*s == ' ' || *s == '\t') s++;
-
- sscanf(s,"%x",&ps[*n]);
- *n += 1;
- }
-}
-
-#endif /* DEBUG */
-
-void x86emu_dump_regs (void)
-{
- printk("\tAX=%04x ", M.x86.R_AX );
- printk("BX=%04x ", M.x86.R_BX );
- printk("CX=%04x ", M.x86.R_CX );
- printk("DX=%04x ", M.x86.R_DX );
- printk("SP=%04x ", M.x86.R_SP );
- printk("BP=%04x ", M.x86.R_BP );
- printk("SI=%04x ", M.x86.R_SI );
- printk("DI=%04x\n", M.x86.R_DI );
- printk("\tDS=%04x ", M.x86.R_DS );
- printk("ES=%04x ", M.x86.R_ES );
- printk("SS=%04x ", M.x86.R_SS );
- printk("CS=%04x ", M.x86.R_CS );
- printk("IP=%04x ", M.x86.R_IP );
- if (ACCESS_FLAG(F_OF)) printk("OV "); /* CHECKED... */
- else printk("NV ");
- if (ACCESS_FLAG(F_DF)) printk("DN ");
- else printk("UP ");
- if (ACCESS_FLAG(F_IF)) printk("EI ");
- else printk("DI ");
- if (ACCESS_FLAG(F_SF)) printk("NG ");
- else printk("PL ");
- if (ACCESS_FLAG(F_ZF)) printk("ZR ");
- else printk("NZ ");
- if (ACCESS_FLAG(F_AF)) printk("AC ");
- else printk("NA ");
- if (ACCESS_FLAG(F_PF)) printk("PE ");
- else printk("PO ");
- if (ACCESS_FLAG(F_CF)) printk("CY ");
- else printk("NC ");
- printk("\n");
-}
-
-void x86emu_dump_xregs (void)
-{
- printk("\tEAX=%08x ", M.x86.R_EAX );
- printk("EBX=%08x ", M.x86.R_EBX );
- printk("ECX=%08x ", M.x86.R_ECX );
- printk("EDX=%08x \n", M.x86.R_EDX );
- printk("\tESP=%08x ", M.x86.R_ESP );
- printk("EBP=%08x ", M.x86.R_EBP );
- printk("ESI=%08x ", M.x86.R_ESI );
- printk("EDI=%08x\n", M.x86.R_EDI );
- printk("\tDS=%04x ", M.x86.R_DS );
- printk("ES=%04x ", M.x86.R_ES );
- printk("SS=%04x ", M.x86.R_SS );
- printk("CS=%04x ", M.x86.R_CS );
- printk("EIP=%08x\n\t", M.x86.R_EIP );
- if (ACCESS_FLAG(F_OF)) printk("OV "); /* CHECKED... */
- else printk("NV ");
- if (ACCESS_FLAG(F_DF)) printk("DN ");
- else printk("UP ");
- if (ACCESS_FLAG(F_IF)) printk("EI ");
- else printk("DI ");
- if (ACCESS_FLAG(F_SF)) printk("NG ");
- else printk("PL ");
- if (ACCESS_FLAG(F_ZF)) printk("ZR ");
- else printk("NZ ");
- if (ACCESS_FLAG(F_AF)) printk("AC ");
- else printk("NA ");
- if (ACCESS_FLAG(F_PF)) printk("PE ");
- else printk("PO ");
- if (ACCESS_FLAG(F_CF)) printk("CY ");
- else printk("NC ");
- printk("\n");
-}
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file includes subroutines which are related to
-* instruction decoding and accessess of immediate data via IP. etc.
-*
-****************************************************************************/
-
-/* $XFree86: xc/extras/x86emu/src/x86emu/decode.c,v 1.11 2002/07/23 20:20:43 tsi Exp $ */
-
-#include "x86emu/x86emui.h"
-
-/*----------------------------- Implementation ----------------------------*/
-
-/****************************************************************************
-REMARKS:
-Handles any pending asychronous interrupts.
-****************************************************************************/
-static void x86emu_intr_handle(void)
-{
- u8 intno;
-
- if (M.x86.intr & INTR_SYNCH) {
- intno = M.x86.intno;
- if (_X86EMU_intrTab[intno]) {
- (*_X86EMU_intrTab[intno])(intno);
- } else {
- push_word((u16)M.x86.R_FLG);
- CLEAR_FLAG(F_IF);
- CLEAR_FLAG(F_TF);
- push_word(M.x86.R_CS);
- M.x86.R_CS = mem_access_word(intno * 4 + 2);
- push_word(M.x86.R_IP);
- M.x86.R_IP = mem_access_word(intno * 4);
- M.x86.intr = 0;
- }
- }
-}
-
-/****************************************************************************
-PARAMETERS:
-intrnum - Interrupt number to raise
-
-REMARKS:
-Raise the specified interrupt to be handled before the execution of the
-next instruction.
-****************************************************************************/
-void x86emu_intr_raise(
- u8 intrnum)
-{
- M.x86.intno = intrnum;
- M.x86.intr |= INTR_SYNCH;
-}
-
-/****************************************************************************
-REMARKS:
-Main execution loop for the emulator. We return from here when the system
-halts, which is normally caused by a stack fault when we return from the
-original real mode call.
-****************************************************************************/
-#include <time.h>
-void X86EMU_exec(unsigned timeout)
-{
- u8 op1;
- unsigned instr_cnt = 0;
- unsigned debug = timeout & (1 << 31);
- time_t t0 = time(NULL);
-
- timeout &= ~(1 << 31);
-
- M.x86.intr = 0;
- DB(x86emu_end_instr();)
-
- for (;;) {
-DB( if (CHECK_IP_FETCH())
- x86emu_check_ip_access();)
- /* If debugging, save the IP and CS values. */
- SAVE_IP_CS(M.x86.R_CS, M.x86.R_IP);
- INC_DECODED_INST_LEN(1);
- if (M.x86.intr) {
- if (M.x86.intr & INTR_HALTED) {
-DB( if (M.x86.R_SP != 0) {
- printk("halted\n");
- X86EMU_trace_regs();
- }
- else {
- if (M.x86.debug)
- printk("Service completed successfully\n");
- })
- return;
- }
- if (((M.x86.intr & INTR_SYNCH) && (M.x86.intno == 0 || M.x86.intno == 2)) ||
- !ACCESS_FLAG(F_IF)) {
- x86emu_intr_handle();
- }
- }
- op1 = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));
- if (debug) {
- fprintf(stderr, "%6u: %04x:%04x %02x\n", instr_cnt++, M.x86.R_CS, M.x86.R_IP - 1, op1);
- }
- if(!(instr_cnt & 0xffff) && timeout && time(NULL) - t0 > timeout) {
- if (debug) {
- fprintf(stderr, "*** %us timeout ***\n", timeout);
- }
- return;
- }
- (*x86emu_optab[op1])(op1);
- if (M.x86.debug & DEBUG_EXIT) {
- M.x86.debug &= ~DEBUG_EXIT;
- return;
- }
- }
-}
-
-/****************************************************************************
-REMARKS:
-Halts the system by setting the halted system flag.
-****************************************************************************/
-void X86EMU_halt_sys(void)
-{
- M.x86.intr |= INTR_HALTED;
-}
-
-/****************************************************************************
-PARAMETERS:
-mod - Mod value from decoded byte
-regh - Reg h value from decoded byte
-regl - Reg l value from decoded byte
-
-REMARKS:
-Raise the specified interrupt to be handled before the execution of the
-next instruction.
-
-NOTE: Do not inline this function, as (*sys_rdb) is already inline!
-****************************************************************************/
-void fetch_decode_modrm(
- int *mod,
- int *regh,
- int *regl)
-{
- int fetched;
-
-DB( if (CHECK_IP_FETCH())
- x86emu_check_ip_access();)
- fetched = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));
- INC_DECODED_INST_LEN(1);
- *mod = (fetched >> 6) & 0x03;
- *regh = (fetched >> 3) & 0x07;
- *regl = (fetched >> 0) & 0x07;
-}
-
-/****************************************************************************
-RETURNS:
-Immediate byte value read from instruction queue
-
-REMARKS:
-This function returns the immediate byte from the instruction queue, and
-moves the instruction pointer to the next value.
-
-NOTE: Do not inline this function, as (*sys_rdb) is already inline!
-****************************************************************************/
-u8 fetch_byte_imm(void)
-{
- u8 fetched;
-
-DB( if (CHECK_IP_FETCH())
- x86emu_check_ip_access();)
- fetched = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));
- INC_DECODED_INST_LEN(1);
- return fetched;
-}
-
-/****************************************************************************
-RETURNS:
-Immediate word value read from instruction queue
-
-REMARKS:
-This function returns the immediate byte from the instruction queue, and
-moves the instruction pointer to the next value.
-
-NOTE: Do not inline this function, as (*sys_rdw) is already inline!
-****************************************************************************/
-u16 fetch_word_imm(void)
-{
- u16 fetched;
-
-DB( if (CHECK_IP_FETCH())
- x86emu_check_ip_access();)
- fetched = (*sys_rdw)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP));
- M.x86.R_IP += 2;
- INC_DECODED_INST_LEN(2);
- return fetched;
-}
-
-/****************************************************************************
-RETURNS:
-Immediate lone value read from instruction queue
-
-REMARKS:
-This function returns the immediate byte from the instruction queue, and
-moves the instruction pointer to the next value.
-
-NOTE: Do not inline this function, as (*sys_rdw) is already inline!
-****************************************************************************/
-u32 fetch_long_imm(void)
-{
- u32 fetched;
-
-DB( if (CHECK_IP_FETCH())
- x86emu_check_ip_access();)
- fetched = (*sys_rdl)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP));
- M.x86.R_IP += 4;
- INC_DECODED_INST_LEN(4);
- return fetched;
-}
-
-/****************************************************************************
-RETURNS:
-Value of the default data segment
-
-REMARKS:
-Inline function that returns the default data segment for the current
-instruction.
-
-On the x86 processor, the default segment is not always DS if there is
-no segment override. Address modes such as -3[BP] or 10[BP+SI] all refer to
-addresses relative to SS (ie: on the stack). So, at the minimum, all
-decodings of addressing modes would have to set/clear a bit describing
-whether the access is relative to DS or SS. That is the function of the
-cpu-state-varible M.x86.mode. There are several potential states:
-
- repe prefix seen (handled elsewhere)
- repne prefix seen (ditto)
-
- cs segment override
- ds segment override
- es segment override
- fs segment override
- gs segment override
- ss segment override
-
- ds/ss select (in absense of override)
-
-Each of the above 7 items are handled with a bit in the mode field.
-****************************************************************************/
-_INLINE u32 get_data_segment(void)
-{
-#define GET_SEGMENT(segment)
- switch (M.x86.mode & SYSMODE_SEGMASK) {
- case 0: /* default case: use ds register */
- case SYSMODE_SEGOVR_DS:
- case SYSMODE_SEGOVR_DS | SYSMODE_SEG_DS_SS:
- return M.x86.R_DS;
- case SYSMODE_SEG_DS_SS: /* non-overridden, use ss register */
- return M.x86.R_SS;
- case SYSMODE_SEGOVR_CS:
- case SYSMODE_SEGOVR_CS | SYSMODE_SEG_DS_SS:
- return M.x86.R_CS;
- case SYSMODE_SEGOVR_ES:
- case SYSMODE_SEGOVR_ES | SYSMODE_SEG_DS_SS:
- return M.x86.R_ES;
- case SYSMODE_SEGOVR_FS:
- case SYSMODE_SEGOVR_FS | SYSMODE_SEG_DS_SS:
- return M.x86.R_FS;
- case SYSMODE_SEGOVR_GS:
- case SYSMODE_SEGOVR_GS | SYSMODE_SEG_DS_SS:
- return M.x86.R_GS;
- case SYSMODE_SEGOVR_SS:
- case SYSMODE_SEGOVR_SS | SYSMODE_SEG_DS_SS:
- return M.x86.R_SS;
- default:
-#ifdef DEBUG
- printk("error: should not happen: multiple overrides.\n");
-#endif
- HALT_SYS();
- return 0;
- }
-}
-
-/****************************************************************************
-PARAMETERS:
-offset - Offset to load data from
-
-RETURNS:
-Byte value read from the absolute memory location.
-
-NOTE: Do not inline this function as (*sys_rdX) is already inline!
-****************************************************************************/
-u8 fetch_data_byte(
- uint offset)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access((u16)get_data_segment(), offset);
-#endif
- return (*sys_rdb)((get_data_segment() << 4) + offset);
-}
-
-/****************************************************************************
-PARAMETERS:
-offset - Offset to load data from
-
-RETURNS:
-Word value read from the absolute memory location.
-
-NOTE: Do not inline this function as (*sys_rdX) is already inline!
-****************************************************************************/
-u16 fetch_data_word(
- uint offset)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access((u16)get_data_segment(), offset);
-#endif
- return (*sys_rdw)((get_data_segment() << 4) + offset);
-}
-
-/****************************************************************************
-PARAMETERS:
-offset - Offset to load data from
-
-RETURNS:
-Long value read from the absolute memory location.
-
-NOTE: Do not inline this function as (*sys_rdX) is already inline!
-****************************************************************************/
-u32 fetch_data_long(
- uint offset)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access((u16)get_data_segment(), offset);
-#endif
- return (*sys_rdl)((get_data_segment() << 4) + offset);
-}
-
-/****************************************************************************
-PARAMETERS:
-segment - Segment to load data from
-offset - Offset to load data from
-
-RETURNS:
-Byte value read from the absolute memory location.
-
-NOTE: Do not inline this function as (*sys_rdX) is already inline!
-****************************************************************************/
-u8 fetch_data_byte_abs(
- uint segment,
- uint offset)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access(segment, offset);
-#endif
- return (*sys_rdb)(((u32)segment << 4) + offset);
-}
-
-/****************************************************************************
-PARAMETERS:
-segment - Segment to load data from
-offset - Offset to load data from
-
-RETURNS:
-Word value read from the absolute memory location.
-
-NOTE: Do not inline this function as (*sys_rdX) is already inline!
-****************************************************************************/
-u16 fetch_data_word_abs(
- uint segment,
- uint offset)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access(segment, offset);
-#endif
- return (*sys_rdw)(((u32)segment << 4) + offset);
-}
-
-/****************************************************************************
-PARAMETERS:
-segment - Segment to load data from
-offset - Offset to load data from
-
-RETURNS:
-Long value read from the absolute memory location.
-
-NOTE: Do not inline this function as (*sys_rdX) is already inline!
-****************************************************************************/
-u32 fetch_data_long_abs(
- uint segment,
- uint offset)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access(segment, offset);
-#endif
- return (*sys_rdl)(((u32)segment << 4) + offset);
-}
-
-/****************************************************************************
-PARAMETERS:
-offset - Offset to store data at
-val - Value to store
-
-REMARKS:
-Writes a word value to an segmented memory location. The segment used is
-the current 'default' segment, which may have been overridden.
-
-NOTE: Do not inline this function as (*sys_wrX) is already inline!
-****************************************************************************/
-void store_data_byte(
- uint offset,
- u8 val)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access((u16)get_data_segment(), offset);
-#endif
- (*sys_wrb)((get_data_segment() << 4) + offset, val);
-}
-
-/****************************************************************************
-PARAMETERS:
-offset - Offset to store data at
-val - Value to store
-
-REMARKS:
-Writes a word value to an segmented memory location. The segment used is
-the current 'default' segment, which may have been overridden.
-
-NOTE: Do not inline this function as (*sys_wrX) is already inline!
-****************************************************************************/
-void store_data_word(
- uint offset,
- u16 val)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access((u16)get_data_segment(), offset);
-#endif
- (*sys_wrw)((get_data_segment() << 4) + offset, val);
-}
-
-/****************************************************************************
-PARAMETERS:
-offset - Offset to store data at
-val - Value to store
-
-REMARKS:
-Writes a long value to an segmented memory location. The segment used is
-the current 'default' segment, which may have been overridden.
-
-NOTE: Do not inline this function as (*sys_wrX) is already inline!
-****************************************************************************/
-void store_data_long(
- uint offset,
- u32 val)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access((u16)get_data_segment(), offset);
-#endif
- (*sys_wrl)((get_data_segment() << 4) + offset, val);
-}
-
-/****************************************************************************
-PARAMETERS:
-segment - Segment to store data at
-offset - Offset to store data at
-val - Value to store
-
-REMARKS:
-Writes a byte value to an absolute memory location.
-
-NOTE: Do not inline this function as (*sys_wrX) is already inline!
-****************************************************************************/
-void store_data_byte_abs(
- uint segment,
- uint offset,
- u8 val)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access(segment, offset);
-#endif
- (*sys_wrb)(((u32)segment << 4) + offset, val);
-}
-
-/****************************************************************************
-PARAMETERS:
-segment - Segment to store data at
-offset - Offset to store data at
-val - Value to store
-
-REMARKS:
-Writes a word value to an absolute memory location.
-
-NOTE: Do not inline this function as (*sys_wrX) is already inline!
-****************************************************************************/
-void store_data_word_abs(
- uint segment,
- uint offset,
- u16 val)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access(segment, offset);
-#endif
- (*sys_wrw)(((u32)segment << 4) + offset, val);
-}
-
-/****************************************************************************
-PARAMETERS:
-segment - Segment to store data at
-offset - Offset to store data at
-val - Value to store
-
-REMARKS:
-Writes a long value to an absolute memory location.
-
-NOTE: Do not inline this function as (*sys_wrX) is already inline!
-****************************************************************************/
-void store_data_long_abs(
- uint segment,
- uint offset,
- u32 val)
-{
-#ifdef DEBUG
- if (CHECK_DATA_ACCESS())
- x86emu_check_data_access(segment, offset);
-#endif
- (*sys_wrl)(((u32)segment << 4) + offset, val);
-}
-
-/****************************************************************************
-PARAMETERS:
-reg - Register to decode
-
-RETURNS:
-Pointer to the appropriate register
-
-REMARKS:
-Return a pointer to the register given by the R/RM field of the
-modrm byte, for byte operands. Also enables the decoding of instructions.
-****************************************************************************/
-u8* decode_rm_byte_register(
- int reg)
-{
- switch (reg) {
- case 0:
- DECODE_PRINTF("AL");
- return &M.x86.R_AL;
- case 1:
- DECODE_PRINTF("CL");
- return &M.x86.R_CL;
- case 2:
- DECODE_PRINTF("DL");
- return &M.x86.R_DL;
- case 3:
- DECODE_PRINTF("BL");
- return &M.x86.R_BL;
- case 4:
- DECODE_PRINTF("AH");
- return &M.x86.R_AH;
- case 5:
- DECODE_PRINTF("CH");
- return &M.x86.R_CH;
- case 6:
- DECODE_PRINTF("DH");
- return &M.x86.R_DH;
- case 7:
- DECODE_PRINTF("BH");
- return &M.x86.R_BH;
- }
- HALT_SYS();
- return NULL; /* NOT REACHED OR REACHED ON ERROR */
-}
-
-/****************************************************************************
-PARAMETERS:
-reg - Register to decode
-
-RETURNS:
-Pointer to the appropriate register
-
-REMARKS:
-Return a pointer to the register given by the R/RM field of the
-modrm byte, for word operands. Also enables the decoding of instructions.
-****************************************************************************/
-u16* decode_rm_word_register(
- int reg)
-{
- switch (reg) {
- case 0:
- DECODE_PRINTF("AX");
- return &M.x86.R_AX;
- case 1:
- DECODE_PRINTF("CX");
- return &M.x86.R_CX;
- case 2:
- DECODE_PRINTF("DX");
- return &M.x86.R_DX;
- case 3:
- DECODE_PRINTF("BX");
- return &M.x86.R_BX;
- case 4:
- DECODE_PRINTF("SP");
- return &M.x86.R_SP;
- case 5:
- DECODE_PRINTF("BP");
- return &M.x86.R_BP;
- case 6:
- DECODE_PRINTF("SI");
- return &M.x86.R_SI;
- case 7:
- DECODE_PRINTF("DI");
- return &M.x86.R_DI;
- }
- HALT_SYS();
- return NULL; /* NOTREACHED OR REACHED ON ERROR */
-}
-
-/****************************************************************************
-PARAMETERS:
-reg - Register to decode
-
-RETURNS:
-Pointer to the appropriate register
-
-REMARKS:
-Return a pointer to the register given by the R/RM field of the
-modrm byte, for dword operands. Also enables the decoding of instructions.
-****************************************************************************/
-u32* decode_rm_long_register(
- int reg)
-{
- switch (reg) {
- case 0:
- DECODE_PRINTF("EAX");
- return &M.x86.R_EAX;
- case 1:
- DECODE_PRINTF("ECX");
- return &M.x86.R_ECX;
- case 2:
- DECODE_PRINTF("EDX");
- return &M.x86.R_EDX;
- case 3:
- DECODE_PRINTF("EBX");
- return &M.x86.R_EBX;
- case 4:
- DECODE_PRINTF("ESP");
- return &M.x86.R_ESP;
- case 5:
- DECODE_PRINTF("EBP");
- return &M.x86.R_EBP;
- case 6:
- DECODE_PRINTF("ESI");
- return &M.x86.R_ESI;
- case 7:
- DECODE_PRINTF("EDI");
- return &M.x86.R_EDI;
- }
- HALT_SYS();
- return NULL; /* NOTREACHED OR REACHED ON ERROR */
-}
-
-/****************************************************************************
-PARAMETERS:
-reg - Register to decode
-
-RETURNS:
-Pointer to the appropriate register
-
-REMARKS:
-Return a pointer to the register given by the R/RM field of the
-modrm byte, for word operands, modified from above for the weirdo
-special case of segreg operands. Also enables the decoding of instructions.
-****************************************************************************/
-u16* decode_rm_seg_register(
- int reg)
-{
- switch (reg) {
- case 0:
- DECODE_PRINTF("ES");
- return &M.x86.R_ES;
- case 1:
- DECODE_PRINTF("CS");
- return &M.x86.R_CS;
- case 2:
- DECODE_PRINTF("SS");
- return &M.x86.R_SS;
- case 3:
- DECODE_PRINTF("DS");
- return &M.x86.R_DS;
- case 4:
- DECODE_PRINTF("FS");
- return &M.x86.R_FS;
- case 5:
- DECODE_PRINTF("GS");
- return &M.x86.R_GS;
- case 6:
- case 7:
- DECODE_PRINTF("ILLEGAL SEGREG");
- break;
- }
- HALT_SYS();
- return NULL; /* NOT REACHED OR REACHED ON ERROR */
-}
-
-/*
- *
- * return offset from the SIB Byte
- */
-u32 decode_sib_address(int sib, int mod)
-{
- u32 base = 0, i = 0, scale = 1;
-
- switch(sib & 0x07) {
- case 0:
- DECODE_PRINTF("[EAX]");
- base = M.x86.R_EAX;
- break;
- case 1:
- DECODE_PRINTF("[ECX]");
- base = M.x86.R_ECX;
- break;
- case 2:
- DECODE_PRINTF("[EDX]");
- base = M.x86.R_EDX;
- break;
- case 3:
- DECODE_PRINTF("[EBX]");
- base = M.x86.R_EBX;
- break;
- case 4:
- DECODE_PRINTF("[ESP]");
- base = M.x86.R_ESP;
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- break;
- case 5:
- if (mod == 0) {
- base = fetch_long_imm();
- DECODE_PRINTF2("%08x", base);
- } else {
- DECODE_PRINTF("[EBP]");
- base = M.x86.R_ESP;
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- }
- break;
- case 6:
- DECODE_PRINTF("[ESI]");
- base = M.x86.R_ESI;
- break;
- case 7:
- DECODE_PRINTF("[EDI]");
- base = M.x86.R_EDI;
- break;
- }
- switch ((sib >> 3) & 0x07) {
- case 0:
- DECODE_PRINTF("[EAX");
- i = M.x86.R_EAX;
- break;
- case 1:
- DECODE_PRINTF("[ECX");
- i = M.x86.R_ECX;
- break;
- case 2:
- DECODE_PRINTF("[EDX");
- i = M.x86.R_EDX;
- break;
- case 3:
- DECODE_PRINTF("[EBX");
- i = M.x86.R_EBX;
- break;
- case 4:
- i = 0;
- break;
- case 5:
- DECODE_PRINTF("[EBP");
- i = M.x86.R_EBP;
- break;
- case 6:
- DECODE_PRINTF("[ESI");
- i = M.x86.R_ESI;
- break;
- case 7:
- DECODE_PRINTF("[EDI");
- i = M.x86.R_EDI;
- break;
- }
- scale = 1 << ((sib >> 6) & 0x03);
- if (((sib >> 3) & 0x07) != 4) {
- if (scale == 1) {
- DECODE_PRINTF("]");
- } else {
- DECODE_PRINTF2("*%d]", scale);
- }
- }
- return base + (i * scale);
-}
-
-/****************************************************************************
-PARAMETERS:
-rm - RM value to decode
-
-RETURNS:
-Offset in memory for the address decoding
-
-REMARKS:
-Return the offset given by mod=00 addressing. Also enables the
-decoding of instructions.
-
-NOTE: The code which specifies the corresponding segment (ds vs ss)
- below in the case of [BP+..]. The assumption here is that at the
- point that this subroutine is called, the bit corresponding to
- SYSMODE_SEG_DS_SS will be zero. After every instruction
- except the segment override instructions, this bit (as well
- as any bits indicating segment overrides) will be clear. So
- if a SS access is needed, set this bit. Otherwise, DS access
- occurs (unless any of the segment override bits are set).
-****************************************************************************/
-u32 decode_rm00_address(
- int rm)
-{
- u32 offset;
- int sib;
-
- if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
- /* 32-bit addressing */
- switch (rm) {
- case 0:
- DECODE_PRINTF("[EAX]");
- return M.x86.R_EAX;
- case 1:
- DECODE_PRINTF("[ECX]");
- return M.x86.R_ECX;
- case 2:
- DECODE_PRINTF("[EDX]");
- return M.x86.R_EDX;
- case 3:
- DECODE_PRINTF("[EBX]");
- return M.x86.R_EBX;
- case 4:
- sib = fetch_byte_imm();
- return decode_sib_address(sib, 0);
- case 5:
- offset = fetch_long_imm();
- DECODE_PRINTF2("[%08x]", offset);
- return offset;
- case 6:
- DECODE_PRINTF("[ESI]");
- return M.x86.R_ESI;
- case 7:
- DECODE_PRINTF("[EDI]");
- return M.x86.R_EDI;
- }
- HALT_SYS();
- } else {
- /* 16-bit addressing */
- switch (rm) {
- case 0:
- DECODE_PRINTF("[BX+SI]");
- return (M.x86.R_BX + M.x86.R_SI) & 0xffff;
- case 1:
- DECODE_PRINTF("[BX+DI]");
- return (M.x86.R_BX + M.x86.R_DI) & 0xffff;
- case 2:
- DECODE_PRINTF("[BP+SI]");
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + M.x86.R_SI) & 0xffff;
- case 3:
- DECODE_PRINTF("[BP+DI]");
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + M.x86.R_DI) & 0xffff;
- case 4:
- DECODE_PRINTF("[SI]");
- return M.x86.R_SI;
- case 5:
- DECODE_PRINTF("[DI]");
- return M.x86.R_DI;
- case 6:
- offset = fetch_word_imm();
- DECODE_PRINTF2("[%04x]", offset);
- return offset;
- case 7:
- DECODE_PRINTF("[BX]");
- return M.x86.R_BX;
- }
- HALT_SYS();
- }
- return 0;
-}
-
-/****************************************************************************
-PARAMETERS:
-rm - RM value to decode
-
-RETURNS:
-Offset in memory for the address decoding
-
-REMARKS:
-Return the offset given by mod=01 addressing. Also enables the
-decoding of instructions.
-****************************************************************************/
-u32 decode_rm01_address(
- int rm)
-{
- int displacement = 0;
- int sib;
-
- /* Fetch disp8 if no SIB byte */
- if (!((M.x86.mode & SYSMODE_PREFIX_ADDR) && (rm == 4)))
- displacement = (s8)fetch_byte_imm();
-
- if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
- /* 32-bit addressing */
- switch (rm) {
- case 0:
- DECODE_PRINTF2("%d[EAX]", displacement);
- return M.x86.R_EAX + displacement;
- case 1:
- DECODE_PRINTF2("%d[ECX]", displacement);
- return M.x86.R_ECX + displacement;
- case 2:
- DECODE_PRINTF2("%d[EDX]", displacement);
- return M.x86.R_EDX + displacement;
- case 3:
- DECODE_PRINTF2("%d[EBX]", displacement);
- return M.x86.R_EBX + displacement;
- case 4:
- sib = fetch_byte_imm();
- displacement = (s8)fetch_byte_imm();
- DECODE_PRINTF2("%d", displacement);
- return decode_sib_address(sib, 1) + displacement;
- case 5:
- DECODE_PRINTF2("%d[EBP]", displacement);
- return M.x86.R_EBP + displacement;
- case 6:
- DECODE_PRINTF2("%d[ESI]", displacement);
- return M.x86.R_ESI + displacement;
- case 7:
- DECODE_PRINTF2("%d[EDI]", displacement);
- return M.x86.R_EDI + displacement;
- }
- HALT_SYS();
- } else {
- /* 16-bit addressing */
- switch (rm) {
- case 0:
- DECODE_PRINTF2("%d[BX+SI]", displacement);
- return (M.x86.R_BX + M.x86.R_SI + displacement) & 0xffff;
- case 1:
- DECODE_PRINTF2("%d[BX+DI]", displacement);
- return (M.x86.R_BX + M.x86.R_DI + displacement) & 0xffff;
- case 2:
- DECODE_PRINTF2("%d[BP+SI]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + M.x86.R_SI + displacement) & 0xffff;
- case 3:
- DECODE_PRINTF2("%d[BP+DI]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + M.x86.R_DI + displacement) & 0xffff;
- case 4:
- DECODE_PRINTF2("%d[SI]", displacement);
- return (M.x86.R_SI + displacement) & 0xffff;
- case 5:
- DECODE_PRINTF2("%d[DI]", displacement);
- return (M.x86.R_DI + displacement) & 0xffff;
- case 6:
- DECODE_PRINTF2("%d[BP]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + displacement) & 0xffff;
- case 7:
- DECODE_PRINTF2("%d[BX]", displacement);
- return (M.x86.R_BX + displacement) & 0xffff;
- }
- HALT_SYS();
- }
- return 0; /* SHOULD NOT HAPPEN */
-}
-
-/****************************************************************************
-PARAMETERS:
-rm - RM value to decode
-
-RETURNS:
-Offset in memory for the address decoding
-
-REMARKS:
-Return the offset given by mod=10 addressing. Also enables the
-decoding of instructions.
-****************************************************************************/
-u32 decode_rm10_address(
- int rm)
-{
- u32 displacement = 0;
- int sib;
-
- /* Fetch disp16 if 16-bit addr mode */
- if (!(M.x86.mode & SYSMODE_PREFIX_ADDR))
- displacement = (u16)fetch_word_imm();
- else {
- /* Fetch disp32 if no SIB byte */
- if (rm != 4)
- displacement = (u32)fetch_long_imm();
- }
-
- if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
- /* 32-bit addressing */
- switch (rm) {
- case 0:
- DECODE_PRINTF2("%08x[EAX]", displacement);
- return M.x86.R_EAX + displacement;
- case 1:
- DECODE_PRINTF2("%08x[ECX]", displacement);
- return M.x86.R_ECX + displacement;
- case 2:
- DECODE_PRINTF2("%08x[EDX]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return M.x86.R_EDX + displacement;
- case 3:
- DECODE_PRINTF2("%08x[EBX]", displacement);
- return M.x86.R_EBX + displacement;
- case 4:
- sib = fetch_byte_imm();
- displacement = (u32)fetch_long_imm();
- DECODE_PRINTF2("%08x", displacement);
- return decode_sib_address(sib, 2) + displacement;
- break;
- case 5:
- DECODE_PRINTF2("%08x[EBP]", displacement);
- return M.x86.R_EBP + displacement;
- case 6:
- DECODE_PRINTF2("%08x[ESI]", displacement);
- return M.x86.R_ESI + displacement;
- case 7:
- DECODE_PRINTF2("%08x[EDI]", displacement);
- return M.x86.R_EDI + displacement;
- }
- HALT_SYS();
- } else {
- /* 16-bit addressing */
- switch (rm) {
- case 0:
- DECODE_PRINTF2("%04x[BX+SI]", displacement);
- return (M.x86.R_BX + M.x86.R_SI + displacement) & 0xffff;
- case 1:
- DECODE_PRINTF2("%04x[BX+DI]", displacement);
- return (M.x86.R_BX + M.x86.R_DI + displacement) & 0xffff;
- case 2:
- DECODE_PRINTF2("%04x[BP+SI]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + M.x86.R_SI + displacement) & 0xffff;
- case 3:
- DECODE_PRINTF2("%04x[BP+DI]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + M.x86.R_DI + displacement) & 0xffff;
- case 4:
- DECODE_PRINTF2("%04x[SI]", displacement);
- return (M.x86.R_SI + displacement) & 0xffff;
- case 5:
- DECODE_PRINTF2("%04x[DI]", displacement);
- return (M.x86.R_DI + displacement) & 0xffff;
- case 6:
- DECODE_PRINTF2("%04x[BP]", displacement);
- M.x86.mode |= SYSMODE_SEG_DS_SS;
- return (M.x86.R_BP + displacement) & 0xffff;
- case 7:
- DECODE_PRINTF2("%04x[BX]", displacement);
- return (M.x86.R_BX + displacement) & 0xffff;
- }
- HALT_SYS();
- }
- return 0;
- /*NOTREACHED */
-}
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file contains the code to implement the decoding and
-* emulation of the FPU instructions.
-*
-****************************************************************************/
-/* $XFree86$ */
-
-#include "x86emu/x86emui.h"
-
-/*----------------------------- Implementation ----------------------------*/
-
-/* opcode=0xd8 */
-void x86emuOp_esc_coprocess_d8(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("ESC D8\n");
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-
-static char *x86emu_fpu_op_d9_tab[] = {
- "FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
- "FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
-
- "FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
- "FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
-
- "FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
- "FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
-};
-
-static char *x86emu_fpu_op_d9_tab1[] = {
- "FLD\t", "FLD\t", "FLD\t", "FLD\t",
- "FLD\t", "FLD\t", "FLD\t", "FLD\t",
-
- "FXCH\t", "FXCH\t", "FXCH\t", "FXCH\t",
- "FXCH\t", "FXCH\t", "FXCH\t", "FXCH\t",
-
- "FNOP", "ESC_D9", "ESC_D9", "ESC_D9",
- "ESC_D9", "ESC_D9", "ESC_D9", "ESC_D9",
-
- "FSTP\t", "FSTP\t", "FSTP\t", "FSTP\t",
- "FSTP\t", "FSTP\t", "FSTP\t", "FSTP\t",
-
- "FCHS", "FABS", "ESC_D9", "ESC_D9",
- "FTST", "FXAM", "ESC_D9", "ESC_D9",
-
- "FLD1", "FLDL2T", "FLDL2E", "FLDPI",
- "FLDLG2", "FLDLN2", "FLDZ", "ESC_D9",
-
- "F2XM1", "FYL2X", "FPTAN", "FPATAN",
- "FXTRACT", "ESC_D9", "FDECSTP", "FINCSTP",
-
- "FPREM", "FYL2XP1", "FSQRT", "ESC_D9",
- "FRNDINT", "FSCALE", "ESC_D9", "ESC_D9",
-};
-
-#endif /* DEBUG */
-
-/* opcode=0xd9 */
-void x86emuOp_esc_coprocess_d9(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
- u8 stkelem = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (mod != 3) {
- DECODE_PRINTINSTR32(x86emu_fpu_op_d9_tab, mod, rh, rl);
- } else {
- DECODE_PRINTF(x86emu_fpu_op_d9_tab1[(rh << 3) + rl]);
- }
-#endif
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 3: /* register to register */
- stkelem = (u8)rl;
- if (rh < 4) {
- DECODE_PRINTF2("ST(%d)\n", stkelem);
- } else {
- DECODE_PRINTF("\n");
- }
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- /* execute */
- switch (mod) {
- case 3:
- switch (rh) {
- case 0:
- x86emu_fpu_R_fld(X86EMU_FPU_STKTOP, stkelem);
- break;
- case 1:
- x86emu_fpu_R_fxch(X86EMU_FPU_STKTOP, stkelem);
- break;
- case 2:
- switch (rl) {
- case 0:
- x86emu_fpu_R_nop();
- break;
- default:
- x86emu_fpu_illegal();
- break;
- }
- case 3:
- x86emu_fpu_R_fstp(X86EMU_FPU_STKTOP, stkelem);
- break;
- case 4:
- switch (rl) {
- case 0:
- x86emu_fpu_R_fchs(X86EMU_FPU_STKTOP);
- break;
- case 1:
- x86emu_fpu_R_fabs(X86EMU_FPU_STKTOP);
- break;
- case 4:
- x86emu_fpu_R_ftst(X86EMU_FPU_STKTOP);
- break;
- case 5:
- x86emu_fpu_R_fxam(X86EMU_FPU_STKTOP);
- break;
- default:
- /* 2,3,6,7 */
- x86emu_fpu_illegal();
- break;
- }
- break;
-
- case 5:
- switch (rl) {
- case 0:
- x86emu_fpu_R_fld1(X86EMU_FPU_STKTOP);
- break;
- case 1:
- x86emu_fpu_R_fldl2t(X86EMU_FPU_STKTOP);
- break;
- case 2:
- x86emu_fpu_R_fldl2e(X86EMU_FPU_STKTOP);
- break;
- case 3:
- x86emu_fpu_R_fldpi(X86EMU_FPU_STKTOP);
- break;
- case 4:
- x86emu_fpu_R_fldlg2(X86EMU_FPU_STKTOP);
- break;
- case 5:
- x86emu_fpu_R_fldln2(X86EMU_FPU_STKTOP);
- break;
- case 6:
- x86emu_fpu_R_fldz(X86EMU_FPU_STKTOP);
- break;
- default:
- /* 7 */
- x86emu_fpu_illegal();
- break;
- }
- break;
-
- case 6:
- switch (rl) {
- case 0:
- x86emu_fpu_R_f2xm1(X86EMU_FPU_STKTOP);
- break;
- case 1:
- x86emu_fpu_R_fyl2x(X86EMU_FPU_STKTOP);
- break;
- case 2:
- x86emu_fpu_R_fptan(X86EMU_FPU_STKTOP);
- break;
- case 3:
- x86emu_fpu_R_fpatan(X86EMU_FPU_STKTOP);
- break;
- case 4:
- x86emu_fpu_R_fxtract(X86EMU_FPU_STKTOP);
- break;
- case 5:
- x86emu_fpu_illegal();
- break;
- case 6:
- x86emu_fpu_R_decstp();
- break;
- case 7:
- x86emu_fpu_R_incstp();
- break;
- }
- break;
-
- case 7:
- switch (rl) {
- case 0:
- x86emu_fpu_R_fprem(X86EMU_FPU_STKTOP);
- break;
- case 1:
- x86emu_fpu_R_fyl2xp1(X86EMU_FPU_STKTOP);
- break;
- case 2:
- x86emu_fpu_R_fsqrt(X86EMU_FPU_STKTOP);
- break;
- case 3:
- x86emu_fpu_illegal();
- break;
- case 4:
- x86emu_fpu_R_frndint(X86EMU_FPU_STKTOP);
- break;
- case 5:
- x86emu_fpu_R_fscale(X86EMU_FPU_STKTOP);
- break;
- case 6:
- case 7:
- default:
- x86emu_fpu_illegal();
- break;
- }
- break;
-
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_fld(X86EMU_FPU_FLOAT, destoffset);
- break;
- case 1:
- x86emu_fpu_illegal();
- break;
- case 2:
- x86emu_fpu_M_fst(X86EMU_FPU_FLOAT, destoffset);
- break;
- case 3:
- x86emu_fpu_M_fstp(X86EMU_FPU_FLOAT, destoffset);
- break;
- case 4:
- x86emu_fpu_M_fldenv(X86EMU_FPU_WORD, destoffset);
- break;
- case 5:
- x86emu_fpu_M_fldcw(X86EMU_FPU_WORD, destoffset);
- break;
- case 6:
- x86emu_fpu_M_fstenv(X86EMU_FPU_WORD, destoffset);
- break;
- case 7:
- x86emu_fpu_M_fstcw(X86EMU_FPU_WORD, destoffset);
- break;
- }
- }
- }
-#else
- (void)destoffset;
- (void)stkelem;
-#endif /* X86EMU_FPU_PRESENT */
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-
-char *x86emu_fpu_op_da_tab[] = {
- "FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
- "FICOMP\tDWORD PTR ",
- "FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
- "FIDIVR\tDWORD PTR ",
-
- "FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
- "FICOMP\tDWORD PTR ",
- "FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
- "FIDIVR\tDWORD PTR ",
-
- "FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
- "FICOMP\tDWORD PTR ",
- "FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
- "FIDIVR\tDWORD PTR ",
-
- "ESC_DA ", "ESC_DA ", "ESC_DA ", "ESC_DA ",
- "ESC_DA ", "ESC_DA ", "ESC_DA ", "ESC_DA ",
-};
-
-#endif /* DEBUG */
-
-/* opcode=0xda */
-void x86emuOp_esc_coprocess_da(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
- u8 stkelem = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- DECODE_PRINTINSTR32(x86emu_fpu_op_da_tab, mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 3: /* register to register */
- stkelem = (u8)rl;
- DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- switch (mod) {
- case 3:
- x86emu_fpu_illegal();
- break;
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_iadd(X86EMU_FPU_SHORT, destoffset);
- break;
- case 1:
- x86emu_fpu_M_imul(X86EMU_FPU_SHORT, destoffset);
- break;
- case 2:
- x86emu_fpu_M_icom(X86EMU_FPU_SHORT, destoffset);
- break;
- case 3:
- x86emu_fpu_M_icomp(X86EMU_FPU_SHORT, destoffset);
- break;
- case 4:
- x86emu_fpu_M_isub(X86EMU_FPU_SHORT, destoffset);
- break;
- case 5:
- x86emu_fpu_M_isubr(X86EMU_FPU_SHORT, destoffset);
- break;
- case 6:
- x86emu_fpu_M_idiv(X86EMU_FPU_SHORT, destoffset);
- break;
- case 7:
- x86emu_fpu_M_idivr(X86EMU_FPU_SHORT, destoffset);
- break;
- }
- }
-#else
- (void)destoffset;
- (void)stkelem;
-#endif
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-
-char *x86emu_fpu_op_db_tab[] = {
- "FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
- "ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
-
- "FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
- "ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
-
- "FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
- "ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
-};
-
-#endif /* DEBUG */
-
-/* opcode=0xdb */
-void x86emuOp_esc_coprocess_db(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (mod != 3) {
- DECODE_PRINTINSTR32(x86emu_fpu_op_db_tab, mod, rh, rl);
- } else if (rh == 4) { /* === 11 10 0 nnn */
- switch (rl) {
- case 0:
- DECODE_PRINTF("FENI\n");
- break;
- case 1:
- DECODE_PRINTF("FDISI\n");
- break;
- case 2:
- DECODE_PRINTF("FCLEX\n");
- break;
- case 3:
- DECODE_PRINTF("FINIT\n");
- break;
- }
- } else {
- DECODE_PRINTF2("ESC_DB %0x\n", (mod << 6) + (rh << 3) + (rl));
- }
-#endif /* DEBUG */
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- break;
- case 3: /* register to register */
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- /* execute */
- switch (mod) {
- case 3:
- switch (rh) {
- case 4:
- switch (rl) {
- case 0:
- x86emu_fpu_R_feni();
- break;
- case 1:
- x86emu_fpu_R_fdisi();
- break;
- case 2:
- x86emu_fpu_R_fclex();
- break;
- case 3:
- x86emu_fpu_R_finit();
- break;
- default:
- x86emu_fpu_illegal();
- break;
- }
- break;
- default:
- x86emu_fpu_illegal();
- break;
- }
- break;
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_fild(X86EMU_FPU_SHORT, destoffset);
- break;
- case 1:
- x86emu_fpu_illegal();
- break;
- case 2:
- x86emu_fpu_M_fist(X86EMU_FPU_SHORT, destoffset);
- break;
- case 3:
- x86emu_fpu_M_fistp(X86EMU_FPU_SHORT, destoffset);
- break;
- case 4:
- x86emu_fpu_illegal();
- break;
- case 5:
- x86emu_fpu_M_fld(X86EMU_FPU_LDBL, destoffset);
- break;
- case 6:
- x86emu_fpu_illegal();
- break;
- case 7:
- x86emu_fpu_M_fstp(X86EMU_FPU_LDBL, destoffset);
- break;
- }
- }
-#else
- (void)destoffset;
-#endif
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-char *x86emu_fpu_op_dc_tab[] = {
- "FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
- "FCOMP\tQWORD PTR ",
- "FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
- "FDIVR\tQWORD PTR ",
-
- "FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
- "FCOMP\tQWORD PTR ",
- "FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
- "FDIVR\tQWORD PTR ",
-
- "FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
- "FCOMP\tQWORD PTR ",
- "FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
- "FDIVR\tQWORD PTR ",
-
- "FADD\t", "FMUL\t", "FCOM\t", "FCOMP\t",
- "FSUBR\t", "FSUB\t", "FDIVR\t", "FDIV\t",
-};
-#endif /* DEBUG */
-
-/* opcode=0xdc */
-void x86emuOp_esc_coprocess_dc(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
- u8 stkelem = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- DECODE_PRINTINSTR32(x86emu_fpu_op_dc_tab, mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 3: /* register to register */
- stkelem = (u8)rl;
- DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- /* execute */
- switch (mod) {
- case 3:
- switch (rh) {
- case 0:
- x86emu_fpu_R_fadd(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 1:
- x86emu_fpu_R_fmul(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 2:
- x86emu_fpu_R_fcom(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 3:
- x86emu_fpu_R_fcomp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 4:
- x86emu_fpu_R_fsubr(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 5:
- x86emu_fpu_R_fsub(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 6:
- x86emu_fpu_R_fdivr(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 7:
- x86emu_fpu_R_fdiv(stkelem, X86EMU_FPU_STKTOP);
- break;
- }
- break;
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_fadd(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 1:
- x86emu_fpu_M_fmul(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 2:
- x86emu_fpu_M_fcom(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 3:
- x86emu_fpu_M_fcomp(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 4:
- x86emu_fpu_M_fsub(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 5:
- x86emu_fpu_M_fsubr(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 6:
- x86emu_fpu_M_fdiv(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 7:
- x86emu_fpu_M_fdivr(X86EMU_FPU_DOUBLE, destoffset);
- break;
- }
- }
-#else
- (void)destoffset;
- (void)stkelem;
-#endif
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-
-static char *x86emu_fpu_op_dd_tab[] = {
- "FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
- "FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
-
- "FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
- "FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
-
- "FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
- "FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
-
- "FFREE\t", "FXCH\t", "FST\t", "FSTP\t",
- "ESC_DD\t2C,", "ESC_DD\t2D,", "ESC_DD\t2E,", "ESC_DD\t2F,",
-};
-
-#endif /* DEBUG */
-
-/* opcode=0xdd */
-void x86emuOp_esc_coprocess_dd(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
- u8 stkelem = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- DECODE_PRINTINSTR32(x86emu_fpu_op_dd_tab, mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 3: /* register to register */
- stkelem = (u8)rl;
- DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- switch (mod) {
- case 3:
- switch (rh) {
- case 0:
- x86emu_fpu_R_ffree(stkelem);
- break;
- case 1:
- x86emu_fpu_R_fxch(stkelem);
- break;
- case 2:
- x86emu_fpu_R_fst(stkelem); /* register version */
- break;
- case 3:
- x86emu_fpu_R_fstp(stkelem); /* register version */
- break;
- default:
- x86emu_fpu_illegal();
- break;
- }
- break;
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_fld(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 1:
- x86emu_fpu_illegal();
- break;
- case 2:
- x86emu_fpu_M_fst(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 3:
- x86emu_fpu_M_fstp(X86EMU_FPU_DOUBLE, destoffset);
- break;
- case 4:
- x86emu_fpu_M_frstor(X86EMU_FPU_WORD, destoffset);
- break;
- case 5:
- x86emu_fpu_illegal();
- break;
- case 6:
- x86emu_fpu_M_fsave(X86EMU_FPU_WORD, destoffset);
- break;
- case 7:
- x86emu_fpu_M_fstsw(X86EMU_FPU_WORD, destoffset);
- break;
- }
- }
-#else
- (void)destoffset;
- (void)stkelem;
-#endif
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-
-static char *x86emu_fpu_op_de_tab[] =
-{
- "FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
- "FICOMP\tWORD PTR ",
- "FISUB\tWORD PTR ", "FISUBR\tWORD PTR ", "FIDIV\tWORD PTR ",
- "FIDIVR\tWORD PTR ",
-
- "FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
- "FICOMP\tWORD PTR ",
- "FISUB\tWORD PTR ", "FISUBR\tWORD PTR ", "FIDIV\tWORD PTR ",
- "FIDIVR\tWORD PTR ",
-
- "FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
- "FICOMP\tWORD PTR ",
- "FISUB\tWORD PTR ", "FISUBR\tWORD PTR ", "FIDIV\tWORD PTR ",
- "FIDIVR\tWORD PTR ",
-
- "FADDP\t", "FMULP\t", "FCOMP\t", "FCOMPP\t",
- "FSUBRP\t", "FSUBP\t", "FDIVRP\t", "FDIVP\t",
-};
-
-#endif /* DEBUG */
-
-/* opcode=0xde */
-void x86emuOp_esc_coprocess_de(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
- u8 stkelem = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- DECODE_PRINTINSTR32(x86emu_fpu_op_de_tab, mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 3: /* register to register */
- stkelem = (u8)rl;
- DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- switch (mod) {
- case 3:
- switch (rh) {
- case 0:
- x86emu_fpu_R_faddp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 1:
- x86emu_fpu_R_fmulp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 2:
- x86emu_fpu_R_fcomp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 3:
- if (stkelem == 1)
- x86emu_fpu_R_fcompp(stkelem, X86EMU_FPU_STKTOP);
- else
- x86emu_fpu_illegal();
- break;
- case 4:
- x86emu_fpu_R_fsubrp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 5:
- x86emu_fpu_R_fsubp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 6:
- x86emu_fpu_R_fdivrp(stkelem, X86EMU_FPU_STKTOP);
- break;
- case 7:
- x86emu_fpu_R_fdivp(stkelem, X86EMU_FPU_STKTOP);
- break;
- }
- break;
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_fiadd(X86EMU_FPU_WORD, destoffset);
- break;
- case 1:
- x86emu_fpu_M_fimul(X86EMU_FPU_WORD, destoffset);
- break;
- case 2:
- x86emu_fpu_M_ficom(X86EMU_FPU_WORD, destoffset);
- break;
- case 3:
- x86emu_fpu_M_ficomp(X86EMU_FPU_WORD, destoffset);
- break;
- case 4:
- x86emu_fpu_M_fisub(X86EMU_FPU_WORD, destoffset);
- break;
- case 5:
- x86emu_fpu_M_fisubr(X86EMU_FPU_WORD, destoffset);
- break;
- case 6:
- x86emu_fpu_M_fidiv(X86EMU_FPU_WORD, destoffset);
- break;
- case 7:
- x86emu_fpu_M_fidivr(X86EMU_FPU_WORD, destoffset);
- break;
- }
- }
-#else
- (void)destoffset;
- (void)stkelem;
-#endif
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
-
-#ifdef DEBUG
-
-static char *x86emu_fpu_op_df_tab[] = {
- /* mod == 00 */
- "FILD\tWORD PTR ", "ESC_DF\t39\n", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
- "FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
- "FISTP\tQWORD PTR ",
-
- /* mod == 01 */
- "FILD\tWORD PTR ", "ESC_DF\t39 ", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
- "FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
- "FISTP\tQWORD PTR ",
-
- /* mod == 10 */
- "FILD\tWORD PTR ", "ESC_DF\t39 ", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
- "FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
- "FISTP\tQWORD PTR ",
-
- /* mod == 11 */
- "FFREE\t", "FXCH\t", "FST\t", "FSTP\t",
- "ESC_DF\t3C,", "ESC_DF\t3D,", "ESC_DF\t3E,", "ESC_DF\t3F,"
-};
-
-#endif /* DEBUG */
-
-/* opcode=0xdf */
-void x86emuOp_esc_coprocess_df(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset = 0;
- u8 stkelem = 0;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- DECODE_PRINTINSTR32(x86emu_fpu_op_df_tab, mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- break;
- case 3: /* register to register */
- stkelem = (u8)rl;
- DECODE_PRINTF2("\tST(%d)\n", stkelem);
- break;
- }
-#ifdef X86EMU_FPU_PRESENT
- switch (mod) {
- case 3:
- switch (rh) {
- case 0:
- x86emu_fpu_R_ffree(stkelem);
- break;
- case 1:
- x86emu_fpu_R_fxch(stkelem);
- break;
- case 2:
- x86emu_fpu_R_fst(stkelem); /* register version */
- break;
- case 3:
- x86emu_fpu_R_fstp(stkelem); /* register version */
- break;
- default:
- x86emu_fpu_illegal();
- break;
- }
- break;
- default:
- switch (rh) {
- case 0:
- x86emu_fpu_M_fild(X86EMU_FPU_WORD, destoffset);
- break;
- case 1:
- x86emu_fpu_illegal();
- break;
- case 2:
- x86emu_fpu_M_fist(X86EMU_FPU_WORD, destoffset);
- break;
- case 3:
- x86emu_fpu_M_fistp(X86EMU_FPU_WORD, destoffset);
- break;
- case 4:
- x86emu_fpu_M_fbld(X86EMU_FPU_BSD, destoffset);
- break;
- case 5:
- x86emu_fpu_M_fild(X86EMU_FPU_LONG, destoffset);
- break;
- case 6:
- x86emu_fpu_M_fbstp(X86EMU_FPU_BSD, destoffset);
- break;
- case 7:
- x86emu_fpu_M_fistp(X86EMU_FPU_LONG, destoffset);
- break;
- }
- }
-#else
- (void)destoffset;
- (void)stkelem;
-#endif
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR_NO_TRACE();
-}
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for public specific functions.
-* Any application linking against us should only
-* include this header
-*
-****************************************************************************/
-/* $XFree86$ */
-
-#ifndef __X86EMU_X86EMU_H
-#define __X86EMU_X86EMU_H
-
-#ifdef SCITECH
-#include "scitech.h"
-#define X86API _ASMAPI
-#define X86APIP _ASMAPIP
-typedef int X86EMU_pioAddr;
-#else
-#include "x86emu/types.h"
-#define X86API
-#define X86APIP *
-#endif
-#include "x86emu/regs.h"
-
-/*---------------------- Macros and type definitions ----------------------*/
-
-#ifdef PACK
-# pragma PACK /* Don't pack structs with function pointers! */
-#endif
-
-/****************************************************************************
-REMARKS:
-Data structure containing ponters to programmed I/O functions used by the
-emulator. This is used so that the user program can hook all programmed
-I/O for the emulator to handled as necessary by the user program. By
-default the emulator contains simple functions that do not do access the
-hardware in any way. To allow the emualtor access the hardware, you will
-need to override the programmed I/O functions using the X86EMU_setupPioFuncs
-function.
-
-HEADER:
-x86emu.h
-
-MEMBERS:
-inb - Function to read a byte from an I/O port
-inw - Function to read a word from an I/O port
-inl - Function to read a dword from an I/O port
-outb - Function to write a byte to an I/O port
-outw - Function to write a word to an I/O port
-outl - Function to write a dword to an I/O port
-****************************************************************************/
-typedef struct {
- u8 (X86APIP inb)(X86EMU_pioAddr addr);
- u16 (X86APIP inw)(X86EMU_pioAddr addr);
- u32 (X86APIP inl)(X86EMU_pioAddr addr);
- void (X86APIP outb)(X86EMU_pioAddr addr, u8 val);
- void (X86APIP outw)(X86EMU_pioAddr addr, u16 val);
- void (X86APIP outl)(X86EMU_pioAddr addr, u32 val);
- } X86EMU_pioFuncs;
-
-/****************************************************************************
-REMARKS:
-Data structure containing ponters to memory access functions used by the
-emulator. This is used so that the user program can hook all memory
-access functions as necessary for the emulator. By default the emulator
-contains simple functions that only access the internal memory of the
-emulator. If you need specialised functions to handle access to different
-types of memory (ie: hardware framebuffer accesses and BIOS memory access
-etc), you will need to override this using the X86EMU_setupMemFuncs
-function.
-
-HEADER:
-x86emu.h
-
-MEMBERS:
-rdb - Function to read a byte from an address
-rdw - Function to read a word from an address
-rdl - Function to read a dword from an address
-wrb - Function to write a byte to an address
-wrw - Function to write a word to an address
-wrl - Function to write a dword to an address
-****************************************************************************/
-typedef struct {
- u8 (X86APIP rdb)(u32 addr);
- u16 (X86APIP rdw)(u32 addr);
- u32 (X86APIP rdl)(u32 addr);
- void (X86APIP wrb)(u32 addr, u8 val);
- void (X86APIP wrw)(u32 addr, u16 val);
- void (X86APIP wrl)(u32 addr, u32 val);
- } X86EMU_memFuncs;
-
-/****************************************************************************
- Here are the default memory read and write
- function in case they are needed as fallbacks.
-***************************************************************************/
-extern u8 X86API rdb(u32 addr);
-extern u16 X86API rdw(u32 addr);
-extern u32 X86API rdl(u32 addr);
-extern void X86API wrb(u32 addr, u8 val);
-extern void X86API wrw(u32 addr, u16 val);
-extern void X86API wrl(u32 addr, u32 val);
-
-#ifdef END_PACK
-# pragma END_PACK
-#endif
-
-/*--------------------- type definitions -----------------------------------*/
-
-typedef void (X86APIP X86EMU_intrFuncs)(int num);
-extern X86EMU_intrFuncs _X86EMU_intrTab[256];
-
-/*-------------------------- Function Prototypes --------------------------*/
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-void X86EMU_setupMemFuncs(X86EMU_memFuncs *funcs);
-void X86EMU_setupPioFuncs(X86EMU_pioFuncs *funcs);
-void X86EMU_setupIntrFuncs(X86EMU_intrFuncs funcs[]);
-void X86EMU_prepareForInt(int num);
-
-/* decode.c */
-
-void X86EMU_exec(unsigned timeout);
-void X86EMU_halt_sys(void);
-
-#ifdef DEBUG
-#define HALT_SYS() \
- printk("halt_sys: file %s, line %d\n", __FILE__, __LINE__), \
- X86EMU_halt_sys()
-#else
-#define HALT_SYS() X86EMU_halt_sys()
-#endif
-
-/* Debug options */
-
-#define DEBUG_DECODE_F 0x000001 /* print decoded instruction */
-#define DEBUG_TRACE_F 0x000002 /* dump regs before/after execution */
-#define DEBUG_STEP_F 0x000004
-#define DEBUG_DISASSEMBLE_F 0x000008
-#define DEBUG_BREAK_F 0x000010
-#define DEBUG_SVC_F 0x000020
-#define DEBUG_SAVE_IP_CS_F 0x000040
-#define DEBUG_FS_F 0x000080
-#define DEBUG_PROC_F 0x000100
-#define DEBUG_SYSINT_F 0x000200 /* bios system interrupts. */
-#define DEBUG_TRACECALL_F 0x000400
-#define DEBUG_INSTRUMENT_F 0x000800
-#define DEBUG_MEM_TRACE_F 0x001000
-#define DEBUG_IO_TRACE_F 0x002000
-#define DEBUG_TRACECALL_REGS_F 0x004000
-#define DEBUG_DECODE_NOPRINT_F 0x008000
-#define DEBUG_EXIT 0x010000
-#define DEBUG_SYS_F (DEBUG_SVC_F|DEBUG_FS_F|DEBUG_PROC_F)
-
-void X86EMU_trace_regs(void);
-void X86EMU_trace_xregs(void);
-void X86EMU_dump_memory(u16 seg, u16 off, u32 amt);
-int X86EMU_trace_on(void);
-int X86EMU_trace_off(void);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_X86EMU_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for FPU register definitions.
-*
-****************************************************************************/
-/* $XFree86: xc/extras/x86emu/include/x86emu/fpu_regs.h,v 1.2 2003/10/22 20:03:05 tsi Exp $ */
-
-#ifndef __X86EMU_FPU_REGS_H
-#define __X86EMU_FPU_REGS_H
-
-#ifdef X86_FPU_SUPPORT
-
-#ifdef PACK
-# pragma PACK
-#endif
-
-/* Basic 8087 register can hold any of the following values: */
-
-union x86_fpu_reg_u {
- s8 tenbytes[10];
- double dval;
- float fval;
- s16 sval;
- s32 lval;
- };
-
-struct x86_fpu_reg {
- union x86_fpu_reg_u reg;
- char tag;
- };
-
-/*
- * Since we are not going to worry about the problems of aliasing
- * registers, every time a register is modified, its result type is
- * set in the tag fields for that register. If some operation
- * attempts to access the type in a way inconsistent with its current
- * storage format, then we flag the operation. If common, we'll
- * attempt the conversion.
- */
-
-#define X86_FPU_VALID 0x80
-#define X86_FPU_REGTYP(r) ((r) & 0x7F)
-
-#define X86_FPU_WORD 0x0
-#define X86_FPU_SHORT 0x1
-#define X86_FPU_LONG 0x2
-#define X86_FPU_FLOAT 0x3
-#define X86_FPU_DOUBLE 0x4
-#define X86_FPU_LDBL 0x5
-#define X86_FPU_BSD 0x6
-
-#define X86_FPU_STKTOP 0
-
-struct x86_fpu_registers {
- struct x86_fpu_reg x86_fpu_stack[8];
- int x86_fpu_flags;
- int x86_fpu_config; /* rounding modes, etc. */
- short x86_fpu_tos, x86_fpu_bos;
- };
-
-#ifdef END_PACK
-# pragma END_PACK
-#endif
-
-/*
- * There are two versions of the following macro.
- *
- * One version is for opcode D9, for which there are more than 32
- * instructions encoded in the second byte of the opcode.
- *
- * The other version, deals with all the other 7 i87 opcodes, for
- * which there are only 32 strings needed to describe the
- * instructions.
- */
-
-#endif /* X86_FPU_SUPPORT */
-
-#ifdef DEBUG
-# define DECODE_PRINTINSTR32(t,mod,rh,rl) \
- DECODE_PRINTF(t[(mod<<3)+(rh)]);
-# define DECODE_PRINTINSTR256(t,mod,rh,rl) \
- DECODE_PRINTF(t[(mod<<6)+(rh<<3)+(rl)]);
-#else
-# define DECODE_PRINTINSTR32(t,mod,rh,rl)
-# define DECODE_PRINTINSTR256(t,mod,rh,rl)
-#endif
-
-#endif /* __X86EMU_FPU_REGS_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for x86 register definitions.
-*
-****************************************************************************/
-/* $XFree86: xc/extras/x86emu/include/x86emu/regs.h,v 1.5 2003/10/22 20:03:05 tsi Exp $ */
-
-#ifndef __X86EMU_REGS_H
-#define __X86EMU_REGS_H
-
-/*---------------------- Macros and type definitions ----------------------*/
-
-#ifdef PACK
-# pragma PACK
-#endif
-
-/*
- * General EAX, EBX, ECX, EDX type registers. Note that for
- * portability, and speed, the issue of byte swapping is not addressed
- * in the registers. All registers are stored in the default format
- * available on the host machine. The only critical issue is that the
- * registers should line up EXACTLY in the same manner as they do in
- * the 386. That is:
- *
- * EAX & 0xff === AL
- * EAX & 0xffff == AX
- *
- * etc. The result is that alot of the calculations can then be
- * done using the native instruction set fully.
- */
-
-#ifdef __BIG_ENDIAN__
-
-typedef struct {
- u32 e_reg;
- } I32_reg_t;
-
-typedef struct {
- u16 filler0, x_reg;
- } I16_reg_t;
-
-typedef struct {
- u8 filler0, filler1, h_reg, l_reg;
- } I8_reg_t;
-
-#else /* !__BIG_ENDIAN__ */
-
-typedef struct {
- u32 e_reg;
- } I32_reg_t;
-
-typedef struct {
- u16 x_reg;
- } I16_reg_t;
-
-typedef struct {
- u8 l_reg, h_reg;
- } I8_reg_t;
-
-#endif /* BIG_ENDIAN */
-
-typedef union {
- I32_reg_t I32_reg;
- I16_reg_t I16_reg;
- I8_reg_t I8_reg;
- } i386_general_register;
-
-struct i386_general_regs {
- i386_general_register A, B, C, D;
- };
-
-typedef struct i386_general_regs Gen_reg_t;
-
-struct i386_special_regs {
- i386_general_register SP, BP, SI, DI, IP;
- u32 FLAGS;
- };
-
-/*
- * Segment registers here represent the 16 bit quantities
- * CS, DS, ES, SS.
- */
-
-struct i386_segment_regs {
- u16 CS, DS, SS, ES, FS, GS;
- };
-
-/* 8 bit registers */
-#define R_AH gen.A.I8_reg.h_reg
-#define R_AL gen.A.I8_reg.l_reg
-#define R_BH gen.B.I8_reg.h_reg
-#define R_BL gen.B.I8_reg.l_reg
-#define R_CH gen.C.I8_reg.h_reg
-#define R_CL gen.C.I8_reg.l_reg
-#define R_DH gen.D.I8_reg.h_reg
-#define R_DL gen.D.I8_reg.l_reg
-
-/* 16 bit registers */
-#define R_AX gen.A.I16_reg.x_reg
-#define R_BX gen.B.I16_reg.x_reg
-#define R_CX gen.C.I16_reg.x_reg
-#define R_DX gen.D.I16_reg.x_reg
-
-/* 32 bit extended registers */
-#define R_EAX gen.A.I32_reg.e_reg
-#define R_EBX gen.B.I32_reg.e_reg
-#define R_ECX gen.C.I32_reg.e_reg
-#define R_EDX gen.D.I32_reg.e_reg
-
-/* special registers */
-#define R_SP spc.SP.I16_reg.x_reg
-#define R_BP spc.BP.I16_reg.x_reg
-#define R_SI spc.SI.I16_reg.x_reg
-#define R_DI spc.DI.I16_reg.x_reg
-#define R_IP spc.IP.I16_reg.x_reg
-#define R_FLG spc.FLAGS
-
-/* special registers */
-#define R_SP spc.SP.I16_reg.x_reg
-#define R_BP spc.BP.I16_reg.x_reg
-#define R_SI spc.SI.I16_reg.x_reg
-#define R_DI spc.DI.I16_reg.x_reg
-#define R_IP spc.IP.I16_reg.x_reg
-#define R_FLG spc.FLAGS
-
-/* special registers */
-#define R_ESP spc.SP.I32_reg.e_reg
-#define R_EBP spc.BP.I32_reg.e_reg
-#define R_ESI spc.SI.I32_reg.e_reg
-#define R_EDI spc.DI.I32_reg.e_reg
-#define R_EIP spc.IP.I32_reg.e_reg
-#define R_EFLG spc.FLAGS
-
-/* segment registers */
-#define R_CS seg.CS
-#define R_DS seg.DS
-#define R_SS seg.SS
-#define R_ES seg.ES
-#define R_FS seg.FS
-#define R_GS seg.GS
-
-/* flag conditions */
-#define FB_CF 0x0001 /* CARRY flag */
-#define FB_PF 0x0004 /* PARITY flag */
-#define FB_AF 0x0010 /* AUX flag */
-#define FB_ZF 0x0040 /* ZERO flag */
-#define FB_SF 0x0080 /* SIGN flag */
-#define FB_TF 0x0100 /* TRAP flag */
-#define FB_IF 0x0200 /* INTERRUPT ENABLE flag */
-#define FB_DF 0x0400 /* DIR flag */
-#define FB_OF 0x0800 /* OVERFLOW flag */
-
-/* 80286 and above always have bit#1 set */
-#define F_ALWAYS_ON (0x0002) /* flag bits always on */
-
-/*
- * Define a mask for only those flag bits we will ever pass back
- * (via PUSHF)
- */
-#define F_MSK (FB_CF|FB_PF|FB_AF|FB_ZF|FB_SF|FB_TF|FB_IF|FB_DF|FB_OF)
-
-/* following bits masked in to a 16bit quantity */
-
-#define F_CF 0x0001 /* CARRY flag */
-#define F_PF 0x0004 /* PARITY flag */
-#define F_AF 0x0010 /* AUX flag */
-#define F_ZF 0x0040 /* ZERO flag */
-#define F_SF 0x0080 /* SIGN flag */
-#define F_TF 0x0100 /* TRAP flag */
-#define F_IF 0x0200 /* INTERRUPT ENABLE flag */
-#define F_DF 0x0400 /* DIR flag */
-#define F_OF 0x0800 /* OVERFLOW flag */
-
-#define TOGGLE_FLAG(flag) (M.x86.R_FLG ^= (flag))
-#define SET_FLAG(flag) (M.x86.R_FLG |= (flag))
-#define CLEAR_FLAG(flag) (M.x86.R_FLG &= ~(flag))
-#define ACCESS_FLAG(flag) (M.x86.R_FLG & (flag))
-#define CLEARALL_FLAG(m) (M.x86.R_FLG = 0)
-
-#define CONDITIONAL_SET_FLAG(COND,FLAG) \
- if (COND) SET_FLAG(FLAG); else CLEAR_FLAG(FLAG)
-
-#define F_PF_CALC 0x010000 /* PARITY flag has been calced */
-#define F_ZF_CALC 0x020000 /* ZERO flag has been calced */
-#define F_SF_CALC 0x040000 /* SIGN flag has been calced */
-
-#define F_ALL_CALC 0xff0000 /* All have been calced */
-
-/*
- * Emulator machine state.
- * Segment usage control.
- */
-#define SYSMODE_SEG_DS_SS 0x00000001
-#define SYSMODE_SEGOVR_CS 0x00000002
-#define SYSMODE_SEGOVR_DS 0x00000004
-#define SYSMODE_SEGOVR_ES 0x00000008
-#define SYSMODE_SEGOVR_FS 0x00000010
-#define SYSMODE_SEGOVR_GS 0x00000020
-#define SYSMODE_SEGOVR_SS 0x00000040
-#define SYSMODE_PREFIX_REPE 0x00000080
-#define SYSMODE_PREFIX_REPNE 0x00000100
-#define SYSMODE_PREFIX_DATA 0x00000200
-#define SYSMODE_PREFIX_ADDR 0x00000400
-#define SYSMODE_INTR_PENDING 0x10000000
-#define SYSMODE_EXTRN_INTR 0x20000000
-#define SYSMODE_HALTED 0x40000000
-
-#define SYSMODE_SEGMASK (SYSMODE_SEG_DS_SS | \
- SYSMODE_SEGOVR_CS | \
- SYSMODE_SEGOVR_DS | \
- SYSMODE_SEGOVR_ES | \
- SYSMODE_SEGOVR_FS | \
- SYSMODE_SEGOVR_GS | \
- SYSMODE_SEGOVR_SS)
-#define SYSMODE_CLRMASK (SYSMODE_SEG_DS_SS | \
- SYSMODE_SEGOVR_CS | \
- SYSMODE_SEGOVR_DS | \
- SYSMODE_SEGOVR_ES | \
- SYSMODE_SEGOVR_FS | \
- SYSMODE_SEGOVR_GS | \
- SYSMODE_SEGOVR_SS | \
- SYSMODE_PREFIX_DATA | \
- SYSMODE_PREFIX_ADDR)
-
-#define INTR_SYNCH 0x1
-#define INTR_ASYNCH 0x2
-#define INTR_HALTED 0x4
-
-typedef struct {
- struct i386_general_regs gen;
- struct i386_special_regs spc;
- struct i386_segment_regs seg;
- /*
- * MODE contains information on:
- * REPE prefix 2 bits repe,repne
- * SEGMENT overrides 5 bits normal,DS,SS,CS,ES
- * Delayed flag set 3 bits (zero, signed, parity)
- * reserved 6 bits
- * interrupt # 8 bits instruction raised interrupt
- * BIOS video segregs 4 bits
- * Interrupt Pending 1 bits
- * Extern interrupt 1 bits
- * Halted 1 bits
- */
- u32 mode;
- volatile int intr; /* mask of pending interrupts */
- int debug;
-#ifdef DEBUG
- int check;
- u16 saved_ip;
- u16 saved_cs;
- int enc_pos;
- int enc_str_pos;
- char decode_buf[32]; /* encoded byte stream */
- char decoded_buf[256]; /* disassembled strings */
-#endif
- u8 intno;
- u8 __pad[3];
- } X86EMU_regs;
-
-/****************************************************************************
-REMARKS:
-Structure maintaining the emulator machine state.
-
-MEMBERS:
-mem_base - Base real mode memory for the emulator
-mem_size - Size of the real mode memory block for the emulator
-private - private data pointer
-x86 - X86 registers
-****************************************************************************/
-typedef struct {
- unsigned long mem_base;
- unsigned long mem_size;
- void* private;
- X86EMU_regs x86;
- } X86EMU_sysEnv;
-
-#ifdef END_PACK
-# pragma END_PACK
-#endif
-
-/*----------------------------- Global Variables --------------------------*/
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-/* Global emulator machine state.
- *
- * We keep it global to avoid pointer dereferences in the code for speed.
- */
-
-extern X86EMU_sysEnv _X86EMU_env;
-#define M _X86EMU_env
-
-/*-------------------------- Function Prototypes --------------------------*/
-
-/* Function to log information at runtime */
-
-void printk(const char *fmt, ...);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_REGS_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for x86 emulator type definitions.
-*
-****************************************************************************/
-
-/* $XFree86: xc/extras/x86emu/include/x86emu/types.h,v 1.6 2003/06/12 14:12:26 eich Exp $ */
-
-#ifndef __X86EMU_TYPES_H
-#define __X86EMU_TYPES_H
-
-#ifndef IN_MODULE
-#include <sys/types.h>
-#endif
-
-/*
- * The following kludge is an attempt to work around typedef conflicts with
- * <sys/types.h>.
- */
-#define u8 x86emuu8
-#define u16 x86emuu16
-#define u32 x86emuu32
-#define u64 x86emuu64
-#define s8 x86emus8
-#define s16 x86emus16
-#define s32 x86emus32
-#define s64 x86emus64
-#define uint x86emuuint
-#define sint x86emusint
-
-/*---------------------- Macros and type definitions ----------------------*/
-
-/* Currently only for Linux/32bit */
-#undef __HAS_LONG_LONG__
-#if defined(__GNUC__) && !defined(NO_LONG_LONG)
-#define __HAS_LONG_LONG__
-#endif
-
-/* Taken from Xmd.h */
-#undef NUM32
-#if defined (_LP64) || \
- defined(__alpha) || defined(__alpha__) || \
- defined(__ia64__) || defined(ia64) || \
- defined(__sparc64__) || \
- defined(__s390x__) || \
- (defined(__hppa__) && defined(__LP64)) || \
- defined(__AMD64__) || defined(AMD64) || \
- (defined(__sgi) && (_MIPS_SZLONG == 64))
-#define NUM32 int
-#else
-#define NUM32 long
-#endif
-
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned NUM32 u32;
-#ifdef __HAS_LONG_LONG__
-typedef unsigned long long u64;
-#endif
-
-typedef char s8;
-typedef short s16;
-typedef NUM32 s32;
-#ifdef __HAS_LONG_LONG__
-typedef long long s64;
-#endif
-
-typedef unsigned int uint;
-typedef int sint;
-
-typedef u16 X86EMU_pioAddr;
-
-#undef NUM32
-
-#endif /* __X86EMU_TYPES_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file includes subroutines to implement the decoding
-* and emulation of all the x86 processor instructions.
-*
-* There are approximately 250 subroutines in here, which correspond
-* to the 256 byte-"opcodes" found on the 8086. The table which
-* dispatches this is found in the files optab.[ch].
-*
-* Each opcode proc has a comment preceeding it which gives it's table
-* address. Several opcodes are missing (undefined) in the table.
-*
-* Each proc includes information for decoding (DECODE_PRINTF and
-* DECODE_PRINTF2), debugging (TRACE_REGS, SINGLE_STEP), and misc
-* functions (START_OF_INSTR, END_OF_INSTR).
-*
-* Many of the procedures are *VERY* similar in coding. This has
-* allowed for a very large amount of code to be generated in a fairly
-* short amount of time (i.e. cut, paste, and modify). The result is
-* that much of the code below could have been folded into subroutines
-* for a large reduction in size of this file. The downside would be
-* that there would be a penalty in execution speed. The file could
-* also have been *MUCH* larger by inlining certain functions which
-* were called. This could have resulted even faster execution. The
-* prime directive I used to decide whether to inline the code or to
-* modularize it, was basically: 1) no unnecessary subroutine calls,
-* 2) no routines more than about 200 lines in size, and 3) modularize
-* any code that I might not get right the first time. The fetch_*
-* subroutines fall into the latter category. The The decode_* fall
-* into the second category. The coding of the "switch(mod){ .... }"
-* in many of the subroutines below falls into the first category.
-* Especially, the coding of {add,and,or,sub,...}_{byte,word}
-* subroutines are an especially glaring case of the third guideline.
-* Since so much of the code is cloned from other modules (compare
-* opcode #00 to opcode #01), making the basic operations subroutine
-* calls is especially important; otherwise mistakes in coding an
-* "add" would represent a nightmare in maintenance.
-*
-****************************************************************************/
-
-/* $XFree86: xc/extras/x86emu/src/x86emu/ops.c,v 1.8tsi Exp $ */
-
-#include "x86emu/x86emui.h"
-
-/*----------------------------- Implementation ----------------------------*/
-
-/****************************************************************************
-PARAMETERS:
-op1 - Instruction op code
-
-REMARKS:
-Handles illegal opcodes.
-****************************************************************************/
-static void x86emuOp_illegal_op(
- u8 op1)
-{
- START_OF_INSTR();
- if (M.x86.R_SP != 0) {
- DECODE_PRINTF("ILLEGAL X86 OPCODE\n");
- TRACE_REGS();
- printk("%04x:%04x: %02X ILLEGAL X86 OPCODE!\n",
- M.x86.R_CS, M.x86.R_IP-1,op1);
- HALT_SYS();
- }
- else {
- /* If we get here, it means the stack pointer is back to zero
- * so we are just returning from an emulator service call
- * so therte is no need to display an error message. We trap
- * the emulator with an 0xF1 opcode to finish the service
- * call.
- */
- X86EMU_halt_sys();
- }
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x00
-****************************************************************************/
-static void x86emuOp_add_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
- u8 *destreg, *srcreg;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x01
-****************************************************************************/
-static void x86emuOp_add_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = add_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x02
-****************************************************************************/
-static void x86emuOp_add_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x03
-****************************************************************************/
-static void x86emuOp_add_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = add_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x04
-****************************************************************************/
-static void x86emuOp_add_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADD\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = add_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x05
-****************************************************************************/
-static void x86emuOp_add_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("ADD\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("ADD\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = add_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = add_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x06
-****************************************************************************/
-static void x86emuOp_push_ES(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("PUSH\tES\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_ES);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x07
-****************************************************************************/
-static void x86emuOp_pop_ES(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("POP\tES\n");
- TRACE_AND_STEP();
- M.x86.R_ES = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x08
-****************************************************************************/
-static void x86emuOp_or_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("OR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x09
-****************************************************************************/
-static void x86emuOp_or_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("OR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = or_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0a
-****************************************************************************/
-static void x86emuOp_or_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("OR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0b
-****************************************************************************/
-static void x86emuOp_or_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("OR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = or_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0c
-****************************************************************************/
-static void x86emuOp_or_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("OR\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = or_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0d
-****************************************************************************/
-static void x86emuOp_or_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("OR\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("OR\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = or_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = or_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0e
-****************************************************************************/
-static void x86emuOp_push_CS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("PUSH\tCS\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_CS);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f. Escape for two-byte opcode (286 or better)
-****************************************************************************/
-static void x86emuOp_two_byte(u8 X86EMU_UNUSED(op1))
-{
- u8 op2 = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));
- INC_DECODED_INST_LEN(1);
- (*x86emu_optab2[op2])(op2);
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x10
-****************************************************************************/
-static void x86emuOp_adc_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADC\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x11
-****************************************************************************/
-static void x86emuOp_adc_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADC\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = adc_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x12
-****************************************************************************/
-static void x86emuOp_adc_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADC\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x13
-****************************************************************************/
-static void x86emuOp_adc_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADC\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = adc_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x14
-****************************************************************************/
-static void x86emuOp_adc_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("ADC\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = adc_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x15
-****************************************************************************/
-static void x86emuOp_adc_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("ADC\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("ADC\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = adc_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = adc_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x16
-****************************************************************************/
-static void x86emuOp_push_SS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("PUSH\tSS\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_SS);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x17
-****************************************************************************/
-static void x86emuOp_pop_SS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("POP\tSS\n");
- TRACE_AND_STEP();
- M.x86.R_SS = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x18
-****************************************************************************/
-static void x86emuOp_sbb_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("SBB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x19
-****************************************************************************/
-static void x86emuOp_sbb_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("SBB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sbb_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x1a
-****************************************************************************/
-static void x86emuOp_sbb_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("SBB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x1b
-****************************************************************************/
-static void x86emuOp_sbb_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("SBB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sbb_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x1c
-****************************************************************************/
-static void x86emuOp_sbb_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("SBB\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = sbb_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x1d
-****************************************************************************/
-static void x86emuOp_sbb_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("SBB\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("SBB\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = sbb_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = sbb_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x1e
-****************************************************************************/
-static void x86emuOp_push_DS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("PUSH\tDS\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_DS);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x1f
-****************************************************************************/
-static void x86emuOp_pop_DS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("POP\tDS\n");
- TRACE_AND_STEP();
- M.x86.R_DS = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x20
-****************************************************************************/
-static void x86emuOp_and_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("AND\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
-
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
-
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
-
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
-
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x21
-****************************************************************************/
-static void x86emuOp_and_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("AND\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = and_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x22
-****************************************************************************/
-static void x86emuOp_and_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("AND\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x23
-****************************************************************************/
-static void x86emuOp_and_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("AND\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_long(*destreg, srcval);
- break;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_word(*destreg, srcval);
- break;
- }
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = and_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x24
-****************************************************************************/
-static void x86emuOp_and_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("AND\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = and_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x25
-****************************************************************************/
-static void x86emuOp_and_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("AND\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("AND\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = and_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = and_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x26
-****************************************************************************/
-static void x86emuOp_segovr_ES(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("ES:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_SEGOVR_ES;
- /*
- * note the lack of DECODE_CLEAR_SEGOVR(r) since, here is one of 4
- * opcode subroutines we do not want to do this.
- */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x27
-****************************************************************************/
-static void x86emuOp_daa(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("DAA\n");
- TRACE_AND_STEP();
- M.x86.R_AL = daa_byte(M.x86.R_AL);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x28
-****************************************************************************/
-static void x86emuOp_sub_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("SUB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x29
-****************************************************************************/
-static void x86emuOp_sub_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("SUB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = sub_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x2a
-****************************************************************************/
-static void x86emuOp_sub_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("SUB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x2b
-****************************************************************************/
-static void x86emuOp_sub_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("SUB\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = sub_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x2c
-****************************************************************************/
-static void x86emuOp_sub_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("SUB\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = sub_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x2d
-****************************************************************************/
-static void x86emuOp_sub_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("SUB\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("SUB\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = sub_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = sub_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x2e
-****************************************************************************/
-static void x86emuOp_segovr_CS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("CS:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_SEGOVR_CS;
- /* note no DECODE_CLEAR_SEGOVR here. */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x2f
-****************************************************************************/
-static void x86emuOp_das(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("DAS\n");
- TRACE_AND_STEP();
- M.x86.R_AL = das_byte(M.x86.R_AL);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x30
-****************************************************************************/
-static void x86emuOp_xor_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("XOR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_byte(destval, *srcreg);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x31
-****************************************************************************/
-static void x86emuOp_xor_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("XOR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_long(destval, *srcreg);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = xor_word(destval, *srcreg);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x32
-****************************************************************************/
-static void x86emuOp_xor_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("XOR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x33
-****************************************************************************/
-static void x86emuOp_xor_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("XOR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = xor_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x34
-****************************************************************************/
-static void x86emuOp_xor_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("XOR\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- M.x86.R_AL = xor_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x35
-****************************************************************************/
-static void x86emuOp_xor_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XOR\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("XOR\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = xor_long(M.x86.R_EAX, srcval);
- } else {
- M.x86.R_AX = xor_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x36
-****************************************************************************/
-static void x86emuOp_segovr_SS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("SS:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_SEGOVR_SS;
- /* no DECODE_CLEAR_SEGOVR ! */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x37
-****************************************************************************/
-static void x86emuOp_aaa(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("AAA\n");
- TRACE_AND_STEP();
- M.x86.R_AX = aaa_word(M.x86.R_AX);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x38
-****************************************************************************/
-static void x86emuOp_cmp_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
- u8 *destreg, *srcreg;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("CMP\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(destval, *srcreg);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(destval, *srcreg);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(destval, *srcreg);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x39
-****************************************************************************/
-static void x86emuOp_cmp_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("CMP\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(destval, *srcreg);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(destval, *srcreg);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(destval, *srcreg);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(destval, *srcreg);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(destval, *srcreg);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(destval, *srcreg);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x3a
-****************************************************************************/
-static void x86emuOp_cmp_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("CMP\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(*destreg, srcval);
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(*destreg, srcval);
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(*destreg, srcval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x3b
-****************************************************************************/
-static void x86emuOp_cmp_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("CMP\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(*destreg, srcval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(*destreg, srcval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(*destreg, srcval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- cmp_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x3c
-****************************************************************************/
-static void x86emuOp_cmp_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("CMP\tAL,");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- cmp_byte(M.x86.R_AL, srcval);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x3d
-****************************************************************************/
-static void x86emuOp_cmp_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("CMP\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("CMP\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- cmp_long(M.x86.R_EAX, srcval);
- } else {
- cmp_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x3e
-****************************************************************************/
-static void x86emuOp_segovr_DS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("DS:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_SEGOVR_DS;
- /* NO DECODE_CLEAR_SEGOVR! */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x3f
-****************************************************************************/
-static void x86emuOp_aas(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("AAS\n");
- TRACE_AND_STEP();
- M.x86.R_AX = aas_word(M.x86.R_AX);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x40
-****************************************************************************/
-static void x86emuOp_inc_AX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tEAX\n");
- } else {
- DECODE_PRINTF("INC\tAX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = inc_long(M.x86.R_EAX);
- } else {
- M.x86.R_AX = inc_word(M.x86.R_AX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x41
-****************************************************************************/
-static void x86emuOp_inc_CX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tECX\n");
- } else {
- DECODE_PRINTF("INC\tCX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ECX = inc_long(M.x86.R_ECX);
- } else {
- M.x86.R_CX = inc_word(M.x86.R_CX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x42
-****************************************************************************/
-static void x86emuOp_inc_DX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tEDX\n");
- } else {
- DECODE_PRINTF("INC\tDX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDX = inc_long(M.x86.R_EDX);
- } else {
- M.x86.R_DX = inc_word(M.x86.R_DX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x43
-****************************************************************************/
-static void x86emuOp_inc_BX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tEBX\n");
- } else {
- DECODE_PRINTF("INC\tBX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBX = inc_long(M.x86.R_EBX);
- } else {
- M.x86.R_BX = inc_word(M.x86.R_BX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x44
-****************************************************************************/
-static void x86emuOp_inc_SP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tESP\n");
- } else {
- DECODE_PRINTF("INC\tSP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESP = inc_long(M.x86.R_ESP);
- } else {
- M.x86.R_SP = inc_word(M.x86.R_SP);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x45
-****************************************************************************/
-static void x86emuOp_inc_BP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tEBP\n");
- } else {
- DECODE_PRINTF("INC\tBP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBP = inc_long(M.x86.R_EBP);
- } else {
- M.x86.R_BP = inc_word(M.x86.R_BP);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x46
-****************************************************************************/
-static void x86emuOp_inc_SI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tESI\n");
- } else {
- DECODE_PRINTF("INC\tSI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESI = inc_long(M.x86.R_ESI);
- } else {
- M.x86.R_SI = inc_word(M.x86.R_SI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x47
-****************************************************************************/
-static void x86emuOp_inc_DI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tEDI\n");
- } else {
- DECODE_PRINTF("INC\tDI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDI = inc_long(M.x86.R_EDI);
- } else {
- M.x86.R_DI = inc_word(M.x86.R_DI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x48
-****************************************************************************/
-static void x86emuOp_dec_AX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tEAX\n");
- } else {
- DECODE_PRINTF("DEC\tAX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = dec_long(M.x86.R_EAX);
- } else {
- M.x86.R_AX = dec_word(M.x86.R_AX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x49
-****************************************************************************/
-static void x86emuOp_dec_CX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tECX\n");
- } else {
- DECODE_PRINTF("DEC\tCX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ECX = dec_long(M.x86.R_ECX);
- } else {
- M.x86.R_CX = dec_word(M.x86.R_CX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x4a
-****************************************************************************/
-static void x86emuOp_dec_DX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tEDX\n");
- } else {
- DECODE_PRINTF("DEC\tDX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDX = dec_long(M.x86.R_EDX);
- } else {
- M.x86.R_DX = dec_word(M.x86.R_DX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x4b
-****************************************************************************/
-static void x86emuOp_dec_BX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tEBX\n");
- } else {
- DECODE_PRINTF("DEC\tBX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBX = dec_long(M.x86.R_EBX);
- } else {
- M.x86.R_BX = dec_word(M.x86.R_BX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x4c
-****************************************************************************/
-static void x86emuOp_dec_SP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tESP\n");
- } else {
- DECODE_PRINTF("DEC\tSP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESP = dec_long(M.x86.R_ESP);
- } else {
- M.x86.R_SP = dec_word(M.x86.R_SP);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x4d
-****************************************************************************/
-static void x86emuOp_dec_BP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tEBP\n");
- } else {
- DECODE_PRINTF("DEC\tBP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBP = dec_long(M.x86.R_EBP);
- } else {
- M.x86.R_BP = dec_word(M.x86.R_BP);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x4e
-****************************************************************************/
-static void x86emuOp_dec_SI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tESI\n");
- } else {
- DECODE_PRINTF("DEC\tSI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESI = dec_long(M.x86.R_ESI);
- } else {
- M.x86.R_SI = dec_word(M.x86.R_SI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x4f
-****************************************************************************/
-static void x86emuOp_dec_DI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tEDI\n");
- } else {
- DECODE_PRINTF("DEC\tDI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDI = dec_long(M.x86.R_EDI);
- } else {
- M.x86.R_DI = dec_word(M.x86.R_DI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x50
-****************************************************************************/
-static void x86emuOp_push_AX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tEAX\n");
- } else {
- DECODE_PRINTF("PUSH\tAX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_EAX);
- } else {
- push_word(M.x86.R_AX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x51
-****************************************************************************/
-static void x86emuOp_push_CX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tECX\n");
- } else {
- DECODE_PRINTF("PUSH\tCX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_ECX);
- } else {
- push_word(M.x86.R_CX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x52
-****************************************************************************/
-static void x86emuOp_push_DX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tEDX\n");
- } else {
- DECODE_PRINTF("PUSH\tDX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_EDX);
- } else {
- push_word(M.x86.R_DX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x53
-****************************************************************************/
-static void x86emuOp_push_BX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tEBX\n");
- } else {
- DECODE_PRINTF("PUSH\tBX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_EBX);
- } else {
- push_word(M.x86.R_BX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x54
-****************************************************************************/
-static void x86emuOp_push_SP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tESP\n");
- } else {
- DECODE_PRINTF("PUSH\tSP\n");
- }
- TRACE_AND_STEP();
- /* Always push (E)SP, since we are emulating an i386 and above
- * processor. This is necessary as some BIOS'es use this to check
- * what type of processor is in the system.
- */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_ESP);
- } else {
- push_word((u16)(M.x86.R_SP));
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x55
-****************************************************************************/
-static void x86emuOp_push_BP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tEBP\n");
- } else {
- DECODE_PRINTF("PUSH\tBP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_EBP);
- } else {
- push_word(M.x86.R_BP);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x56
-****************************************************************************/
-static void x86emuOp_push_SI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tESI\n");
- } else {
- DECODE_PRINTF("PUSH\tSI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_ESI);
- } else {
- push_word(M.x86.R_SI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x57
-****************************************************************************/
-static void x86emuOp_push_DI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSH\tEDI\n");
- } else {
- DECODE_PRINTF("PUSH\tDI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(M.x86.R_EDI);
- } else {
- push_word(M.x86.R_DI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x58
-****************************************************************************/
-static void x86emuOp_pop_AX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tEAX\n");
- } else {
- DECODE_PRINTF("POP\tAX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = pop_long();
- } else {
- M.x86.R_AX = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x59
-****************************************************************************/
-static void x86emuOp_pop_CX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tECX\n");
- } else {
- DECODE_PRINTF("POP\tCX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ECX = pop_long();
- } else {
- M.x86.R_CX = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x5a
-****************************************************************************/
-static void x86emuOp_pop_DX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tEDX\n");
- } else {
- DECODE_PRINTF("POP\tDX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDX = pop_long();
- } else {
- M.x86.R_DX = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x5b
-****************************************************************************/
-static void x86emuOp_pop_BX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tEBX\n");
- } else {
- DECODE_PRINTF("POP\tBX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBX = pop_long();
- } else {
- M.x86.R_BX = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x5c
-****************************************************************************/
-static void x86emuOp_pop_SP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tESP\n");
- } else {
- DECODE_PRINTF("POP\tSP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESP = pop_long();
- } else {
- M.x86.R_SP = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x5d
-****************************************************************************/
-static void x86emuOp_pop_BP(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tEBP\n");
- } else {
- DECODE_PRINTF("POP\tBP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBP = pop_long();
- } else {
- M.x86.R_BP = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x5e
-****************************************************************************/
-static void x86emuOp_pop_SI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tESI\n");
- } else {
- DECODE_PRINTF("POP\tSI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESI = pop_long();
- } else {
- M.x86.R_SI = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x5f
-****************************************************************************/
-static void x86emuOp_pop_DI(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POP\tEDI\n");
- } else {
- DECODE_PRINTF("POP\tDI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDI = pop_long();
- } else {
- M.x86.R_DI = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x60
-****************************************************************************/
-static void x86emuOp_push_all(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSHAD\n");
- } else {
- DECODE_PRINTF("PUSHA\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 old_sp = M.x86.R_ESP;
-
- push_long(M.x86.R_EAX);
- push_long(M.x86.R_ECX);
- push_long(M.x86.R_EDX);
- push_long(M.x86.R_EBX);
- push_long(old_sp);
- push_long(M.x86.R_EBP);
- push_long(M.x86.R_ESI);
- push_long(M.x86.R_EDI);
- } else {
- u16 old_sp = M.x86.R_SP;
-
- push_word(M.x86.R_AX);
- push_word(M.x86.R_CX);
- push_word(M.x86.R_DX);
- push_word(M.x86.R_BX);
- push_word(old_sp);
- push_word(M.x86.R_BP);
- push_word(M.x86.R_SI);
- push_word(M.x86.R_DI);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x61
-****************************************************************************/
-static void x86emuOp_pop_all(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POPAD\n");
- } else {
- DECODE_PRINTF("POPA\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDI = pop_long();
- M.x86.R_ESI = pop_long();
- M.x86.R_EBP = pop_long();
- M.x86.R_ESP += 4; /* skip ESP */
- M.x86.R_EBX = pop_long();
- M.x86.R_EDX = pop_long();
- M.x86.R_ECX = pop_long();
- M.x86.R_EAX = pop_long();
- } else {
- M.x86.R_DI = pop_word();
- M.x86.R_SI = pop_word();
- M.x86.R_BP = pop_word();
- M.x86.R_SP += 2; /* skip SP */
- M.x86.R_BX = pop_word();
- M.x86.R_DX = pop_word();
- M.x86.R_CX = pop_word();
- M.x86.R_AX = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/*opcode 0x62 ILLEGAL OP, calls x86emuOp_illegal_op() */
-/*opcode 0x63 ILLEGAL OP, calls x86emuOp_illegal_op() */
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x64
-****************************************************************************/
-static void x86emuOp_segovr_FS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("FS:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_SEGOVR_FS;
- /*
- * note the lack of DECODE_CLEAR_SEGOVR(r) since, here is one of 4
- * opcode subroutines we do not want to do this.
- */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x65
-****************************************************************************/
-static void x86emuOp_segovr_GS(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("GS:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_SEGOVR_GS;
- /*
- * note the lack of DECODE_CLEAR_SEGOVR(r) since, here is one of 4
- * opcode subroutines we do not want to do this.
- */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x66 - prefix for 32-bit register
-****************************************************************************/
-static void x86emuOp_prefix_data(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("DATA:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_PREFIX_DATA;
- /* note no DECODE_CLEAR_SEGOVR here. */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x67 - prefix for 32-bit address
-****************************************************************************/
-static void x86emuOp_prefix_addr(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("ADDR:\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_PREFIX_ADDR;
- /* note no DECODE_CLEAR_SEGOVR here. */
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x68
-****************************************************************************/
-static void x86emuOp_push_word_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 imm;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- imm = fetch_long_imm();
- } else {
- imm = fetch_word_imm();
- }
- DECODE_PRINTF2("PUSH\t%x\n", imm);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(imm);
- } else {
- push_word((u16)imm);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x69
-****************************************************************************/
-static void x86emuOp_imul_word_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("IMUL\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
- s32 imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)srcval,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
- s16 imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- res = (s16)srcval * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
- s32 imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)srcval,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
- s16 imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- res = (s16)srcval * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
- s32 imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)srcval,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
- s16 imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- res = (s16)srcval * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
- u32 res_lo,res_hi;
- s32 imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)*srcreg,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg,*srcreg;
- u32 res;
- s16 imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- res = (s16)*srcreg * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x6a
-****************************************************************************/
-static void x86emuOp_push_byte_IMM(u8 X86EMU_UNUSED(op1))
-{
- s16 imm;
-
- START_OF_INSTR();
- imm = (s8)fetch_byte_imm();
- DECODE_PRINTF2("PUSH\t%d\n", imm);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long((s32)imm);
- } else {
- push_word(imm);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x6b
-****************************************************************************/
-static void x86emuOp_imul_byte_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
- s8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("IMUL\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)srcval,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- res = (s16)srcval * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)srcval,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- res = (s16)srcval * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)srcval,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- res = (s16)srcval * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)*srcreg,(s32)imm);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg,*srcreg;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%d\n", (s32)imm);
- res = (s16)*srcreg * (s16)imm;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x6c
-****************************************************************************/
-static void x86emuOp_ins_byte(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("INSB\n");
- ins(1);
- TRACE_AND_STEP();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x6d
-****************************************************************************/
-static void x86emuOp_ins_word(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INSD\n");
- ins(4);
- } else {
- DECODE_PRINTF("INSW\n");
- ins(2);
- }
- TRACE_AND_STEP();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x6e
-****************************************************************************/
-static void x86emuOp_outs_byte(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("OUTSB\n");
- outs(1);
- TRACE_AND_STEP();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x6f
-****************************************************************************/
-static void x86emuOp_outs_word(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("OUTSD\n");
- outs(4);
- } else {
- DECODE_PRINTF("OUTSW\n");
- outs(2);
- }
- TRACE_AND_STEP();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x70
-****************************************************************************/
-static void x86emuOp_jump_near_O(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if overflow flag is set */
- START_OF_INSTR();
- DECODE_PRINTF("JO\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_OF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x71
-****************************************************************************/
-static void x86emuOp_jump_near_NO(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if overflow is not set */
- START_OF_INSTR();
- DECODE_PRINTF("JNO\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (!ACCESS_FLAG(F_OF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x72
-****************************************************************************/
-static void x86emuOp_jump_near_B(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if carry flag is set. */
- START_OF_INSTR();
- DECODE_PRINTF("JB\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_CF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x73
-****************************************************************************/
-static void x86emuOp_jump_near_NB(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if carry flag is clear. */
- START_OF_INSTR();
- DECODE_PRINTF("JNB\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (!ACCESS_FLAG(F_CF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x74
-****************************************************************************/
-static void x86emuOp_jump_near_Z(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if zero flag is set. */
- START_OF_INSTR();
- DECODE_PRINTF("JZ\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_ZF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x75
-****************************************************************************/
-static void x86emuOp_jump_near_NZ(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if zero flag is clear. */
- START_OF_INSTR();
- DECODE_PRINTF("JNZ\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (!ACCESS_FLAG(F_ZF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x76
-****************************************************************************/
-static void x86emuOp_jump_near_BE(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if carry flag is set or if the zero
- flag is set. */
- START_OF_INSTR();
- DECODE_PRINTF("JBE\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x77
-****************************************************************************/
-static void x86emuOp_jump_near_NBE(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if carry flag is clear and if the zero
- flag is clear */
- START_OF_INSTR();
- DECODE_PRINTF("JNBE\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (!(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF)))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x78
-****************************************************************************/
-static void x86emuOp_jump_near_S(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if sign flag is set */
- START_OF_INSTR();
- DECODE_PRINTF("JS\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_SF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x79
-****************************************************************************/
-static void x86emuOp_jump_near_NS(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if sign flag is clear */
- START_OF_INSTR();
- DECODE_PRINTF("JNS\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (!ACCESS_FLAG(F_SF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x7a
-****************************************************************************/
-static void x86emuOp_jump_near_P(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if parity flag is set (even parity) */
- START_OF_INSTR();
- DECODE_PRINTF("JP\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_PF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x7b
-****************************************************************************/
-static void x86emuOp_jump_near_NP(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
-
- /* jump to byte offset if parity flag is clear (odd parity) */
- START_OF_INSTR();
- DECODE_PRINTF("JNP\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (!ACCESS_FLAG(F_PF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x7c
-****************************************************************************/
-static void x86emuOp_jump_near_L(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
- int sf, of;
-
- /* jump to byte offset if sign flag not equal to overflow flag. */
- START_OF_INSTR();
- DECODE_PRINTF("JL\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- sf = ACCESS_FLAG(F_SF) != 0;
- of = ACCESS_FLAG(F_OF) != 0;
- if (sf ^ of)
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x7d
-****************************************************************************/
-static void x86emuOp_jump_near_NL(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
- int sf, of;
-
- /* jump to byte offset if sign flag not equal to overflow flag. */
- START_OF_INSTR();
- DECODE_PRINTF("JNL\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- sf = ACCESS_FLAG(F_SF) != 0;
- of = ACCESS_FLAG(F_OF) != 0;
- /* note: inverse of above, but using == instead of xor. */
- if (sf == of)
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x7e
-****************************************************************************/
-static void x86emuOp_jump_near_LE(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
- int sf, of;
-
- /* jump to byte offset if sign flag not equal to overflow flag
- or the zero flag is set */
- START_OF_INSTR();
- DECODE_PRINTF("JLE\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- sf = ACCESS_FLAG(F_SF) != 0;
- of = ACCESS_FLAG(F_OF) != 0;
- if ((sf ^ of) || ACCESS_FLAG(F_ZF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x7f
-****************************************************************************/
-static void x86emuOp_jump_near_NLE(u8 X86EMU_UNUSED(op1))
-{
- s8 offset;
- u16 target;
- int sf, of;
-
- /* jump to byte offset if sign flag equal to overflow flag.
- and the zero flag is clear */
- START_OF_INSTR();
- DECODE_PRINTF("JNLE\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + (s16)offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- sf = ACCESS_FLAG(F_SF) != 0;
- of = ACCESS_FLAG(F_OF) != 0;
- if ((sf == of) && !ACCESS_FLAG(F_ZF))
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-static u8 (*opc80_byte_operation[])(u8 d, u8 s) =
-{
- add_byte, /* 00 */
- or_byte, /* 01 */
- adc_byte, /* 02 */
- sbb_byte, /* 03 */
- and_byte, /* 04 */
- sub_byte, /* 05 */
- xor_byte, /* 06 */
- cmp_byte, /* 07 */
-};
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x80
-****************************************************************************/
-static void x86emuOp_opc80_byte_RM_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 imm;
- u8 destval;
-
- /*
- * Weirdo special case instruction format. Part of the opcode
- * held below in "RH". Doubly nested case would result, except
- * that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
-
- switch (rh) {
- case 0:
- DECODE_PRINTF("ADD\t");
- break;
- case 1:
- DECODE_PRINTF("OR\t");
- break;
- case 2:
- DECODE_PRINTF("ADC\t");
- break;
- case 3:
- DECODE_PRINTF("SBB\t");
- break;
- case 4:
- DECODE_PRINTF("AND\t");
- break;
- case 5:
- DECODE_PRINTF("SUB\t");
- break;
- case 6:
- DECODE_PRINTF("XOR\t");
- break;
- case 7:
- DECODE_PRINTF("CMP\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc80_byte_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_byte(destoffset, destval);
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc80_byte_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_byte(destoffset, destval);
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc80_byte_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc80_byte_operation[rh]) (*destreg, imm);
- if (rh != 7)
- *destreg = destval;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-static u16 (*opc81_word_operation[])(u16 d, u16 s) =
-{
- add_word, /*00 */
- or_word, /*01 */
- adc_word, /*02 */
- sbb_word, /*03 */
- and_word, /*04 */
- sub_word, /*05 */
- xor_word, /*06 */
- cmp_word, /*07 */
-};
-
-static u32 (*opc81_long_operation[])(u32 d, u32 s) =
-{
- add_long, /*00 */
- or_long, /*01 */
- adc_long, /*02 */
- sbb_long, /*03 */
- and_long, /*04 */
- sub_long, /*05 */
- xor_long, /*06 */
- cmp_long, /*07 */
-};
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x81
-****************************************************************************/
-static void x86emuOp_opc81_word_RM_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- /*
- * Weirdo special case instruction format. Part of the opcode
- * held below in "RH". Doubly nested case would result, except
- * that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
-
- switch (rh) {
- case 0:
- DECODE_PRINTF("ADD\t");
- break;
- case 1:
- DECODE_PRINTF("OR\t");
- break;
- case 2:
- DECODE_PRINTF("ADC\t");
- break;
- case 3:
- DECODE_PRINTF("SBB\t");
- break;
- case 4:
- DECODE_PRINTF("AND\t");
- break;
- case 5:
- DECODE_PRINTF("SUB\t");
- break;
- case 6:
- DECODE_PRINTF("XOR\t");
- break;
- case 7:
- DECODE_PRINTF("CMP\t");
- break;
- }
- }
-#endif
- /*
- * Know operation, decode the mod byte to find the addressing
- * mode.
- */
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- imm = fetch_long_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_long_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_long(destoffset, destval);
- } else {
- u16 destval,imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- imm = fetch_word_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_word_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- imm = fetch_long_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_long_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_long(destoffset, destval);
- } else {
- u16 destval,imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- imm = fetch_word_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_word_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- imm = fetch_long_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_long_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_long(destoffset, destval);
- } else {
- u16 destval,imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- imm = fetch_word_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_word_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 destval,imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- imm = fetch_long_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_long_operation[rh]) (*destreg, imm);
- if (rh != 7)
- *destreg = destval;
- } else {
- u16 *destreg;
- u16 destval,imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- imm = fetch_word_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc81_word_operation[rh]) (*destreg, imm);
- if (rh != 7)
- *destreg = destval;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-static u8 (*opc82_byte_operation[])(u8 s, u8 d) =
-{
- add_byte, /*00 */
- or_byte, /*01 *//*YYY UNUSED ???? */
- adc_byte, /*02 */
- sbb_byte, /*03 */
- and_byte, /*04 *//*YYY UNUSED ???? */
- sub_byte, /*05 */
- xor_byte, /*06 *//*YYY UNUSED ???? */
- cmp_byte, /*07 */
-};
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x82
-****************************************************************************/
-static void x86emuOp_opc82_byte_RM_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 imm;
- u8 destval;
-
- /*
- * Weirdo special case instruction format. Part of the opcode
- * held below in "RH". Doubly nested case would result, except
- * that the decoded instruction Similar to opcode 81, except that
- * the immediate byte is sign extended to a word length.
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
- switch (rh) {
- case 0:
- DECODE_PRINTF("ADD\t");
- break;
- case 1:
- DECODE_PRINTF("OR\t");
- break;
- case 2:
- DECODE_PRINTF("ADC\t");
- break;
- case 3:
- DECODE_PRINTF("SBB\t");
- break;
- case 4:
- DECODE_PRINTF("AND\t");
- break;
- case 5:
- DECODE_PRINTF("SUB\t");
- break;
- case 6:
- DECODE_PRINTF("XOR\t");
- break;
- case 7:
- DECODE_PRINTF("CMP\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- destval = fetch_data_byte(destoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc82_byte_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_byte(destoffset, destval);
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- destval = fetch_data_byte(destoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc82_byte_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_byte(destoffset, destval);
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- destval = fetch_data_byte(destoffset);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc82_byte_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc82_byte_operation[rh]) (*destreg, imm);
- if (rh != 7)
- *destreg = destval;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-static u16 (*opc83_word_operation[])(u16 s, u16 d) =
-{
- add_word, /*00 */
- or_word, /*01 *//*YYY UNUSED ???? */
- adc_word, /*02 */
- sbb_word, /*03 */
- and_word, /*04 *//*YYY UNUSED ???? */
- sub_word, /*05 */
- xor_word, /*06 *//*YYY UNUSED ???? */
- cmp_word, /*07 */
-};
-
-static u32 (*opc83_long_operation[])(u32 s, u32 d) =
-{
- add_long, /*00 */
- or_long, /*01 *//*YYY UNUSED ???? */
- adc_long, /*02 */
- sbb_long, /*03 */
- and_long, /*04 *//*YYY UNUSED ???? */
- sub_long, /*05 */
- xor_long, /*06 *//*YYY UNUSED ???? */
- cmp_long, /*07 */
-};
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x83
-****************************************************************************/
-static void x86emuOp_opc83_word_RM_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- /*
- * Weirdo special case instruction format. Part of the opcode
- * held below in "RH". Doubly nested case would result, except
- * that the decoded instruction Similar to opcode 81, except that
- * the immediate byte is sign extended to a word length.
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
- switch (rh) {
- case 0:
- DECODE_PRINTF("ADD\t");
- break;
- case 1:
- DECODE_PRINTF("OR\t");
- break;
- case 2:
- DECODE_PRINTF("ADC\t");
- break;
- case 3:
- DECODE_PRINTF("SBB\t");
- break;
- case 4:
- DECODE_PRINTF("AND\t");
- break;
- case 5:
- DECODE_PRINTF("SUB\t");
- break;
- case 6:
- DECODE_PRINTF("XOR\t");
- break;
- case 7:
- DECODE_PRINTF("CMP\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm00_address(rl);
- destval = fetch_data_long(destoffset);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_long_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_long(destoffset, destval);
- } else {
- u16 destval,imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm00_address(rl);
- destval = fetch_data_word(destoffset);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_word_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm01_address(rl);
- destval = fetch_data_long(destoffset);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_long_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_long(destoffset, destval);
- } else {
- u16 destval,imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm01_address(rl);
- destval = fetch_data_word(destoffset);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_word_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm10_address(rl);
- destval = fetch_data_long(destoffset);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_long_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_long(destoffset, destval);
- } else {
- u16 destval,imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm10_address(rl);
- destval = fetch_data_word(destoffset);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_word_operation[rh]) (destval, imm);
- if (rh != 7)
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 destval,imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_long_operation[rh]) (*destreg, imm);
- if (rh != 7)
- *destreg = destval;
- } else {
- u16 *destreg;
- u16 destval,imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- imm = (s8) fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- destval = (*opc83_word_operation[rh]) (*destreg, imm);
- if (rh != 7)
- *destreg = destval;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x84
-****************************************************************************/
-static void x86emuOp_test_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("TEST\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_byte(destval, *srcreg);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_byte(destval, *srcreg);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_byte(destval, *srcreg);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_byte(*destreg, *srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x85
-****************************************************************************/
-static void x86emuOp_test_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("TEST\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_long(destval, *srcreg);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_word(destval, *srcreg);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_long(destval, *srcreg);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_word(destval, *srcreg);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_long(destval, *srcreg);
- } else {
- u16 destval;
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_word(destval, *srcreg);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_long(*destreg, *srcreg);
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- test_word(*destreg, *srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x86
-****************************************************************************/
-static void x86emuOp_xchg_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
- u8 destval;
- u8 tmp;
-
- START_OF_INSTR();
- DECODE_PRINTF("XCHG\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_byte(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_byte(destoffset);
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = *destreg;
- *destreg = tmp;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x87
-****************************************************************************/
-static void x86emuOp_xchg_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("XCHG\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
- u32 destval,tmp;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_long(destoffset, destval);
- } else {
- u16 *srcreg;
- u16 destval,tmp;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
- u32 destval,tmp;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_long(destoffset, destval);
- } else {
- u16 *srcreg;
- u16 destval,tmp;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
- u32 destval,tmp;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_long(destoffset);
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_long(destoffset, destval);
- } else {
- u16 *srcreg;
- u16 destval,tmp;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- destval = fetch_data_word(destoffset);
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = destval;
- destval = tmp;
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
- u32 tmp;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = *destreg;
- *destreg = tmp;
- } else {
- u16 *destreg,*srcreg;
- u16 tmp;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- tmp = *srcreg;
- *srcreg = *destreg;
- *destreg = tmp;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x88
-****************************************************************************/
-static void x86emuOp_mov_byte_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_byte(destoffset, *srcreg);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_byte(destoffset, *srcreg);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_byte(destoffset, *srcreg);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x89
-****************************************************************************/
-static void x86emuOp_mov_word_RM_R(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u32 destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_long(destoffset, *srcreg);
- } else {
- u16 *srcreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_word(destoffset, *srcreg);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_long(destoffset, *srcreg);
- } else {
- u16 *srcreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_word(destoffset, *srcreg);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_long(destoffset, *srcreg);
- } else {
- u16 *srcreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- store_data_word(destoffset, *srcreg);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- } else {
- u16 *destreg,*srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x8a
-****************************************************************************/
-static void x86emuOp_mov_byte_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg, *srcreg;
- uint srcoffset;
- u8 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 1:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 2:
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x8b
-****************************************************************************/
-static void x86emuOp_mov_word_R_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg, *srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- } else {
- u16 *destreg, *srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x8c
-****************************************************************************/
-static void x86emuOp_mov_word_RM_SR(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u16 *destreg, *srcreg;
- uint destoffset;
- u16 destval;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcreg = decode_rm_seg_register(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = *srcreg;
- store_data_word(destoffset, destval);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcreg = decode_rm_seg_register(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = *srcreg;
- store_data_word(destoffset, destval);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcreg = decode_rm_seg_register(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = *srcreg;
- store_data_word(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcreg = decode_rm_seg_register(rh);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x8d
-****************************************************************************/
-static void x86emuOp_lea_word_R_M(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u16 *srcreg;
- uint destoffset;
-
-/*
- * TODO: Need to handle address size prefix!
- *
- * lea eax,[eax+ebx*2] ??
- */
-
- START_OF_INSTR();
- DECODE_PRINTF("LEA\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *srcreg = (u16)destoffset;
- break;
- case 1:
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *srcreg = (u16)destoffset;
- break;
- case 2:
- srcreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *srcreg = (u16)destoffset;
- break;
- case 3: /* register to register */
- /* undefined. Do nothing. */
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x8e
-****************************************************************************/
-static void x86emuOp_mov_word_SR_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u16 *destreg, *srcreg;
- uint srcoffset;
- u16 srcval;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = decode_rm_seg_register(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 1:
- destreg = decode_rm_seg_register(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 2:
- destreg = decode_rm_seg_register(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 3: /* register to register */
- destreg = decode_rm_seg_register(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- break;
- }
- /*
- * Clean up, and reset all the R_xSP pointers to the correct
- * locations. This is about 3x too much overhead (doing all the
- * segreg ptrs when only one is needed, but this instruction
- * *cannot* be that common, and this isn't too much work anyway.
- */
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x8f
-****************************************************************************/
-static void x86emuOp_pop_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("POP\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- if (rh != 0) {
- DECODE_PRINTF("ILLEGAL DECODE OF OPCODE 8F\n");
- HALT_SYS();
- }
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = pop_long();
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = pop_word();
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = pop_long();
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = pop_word();
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = pop_long();
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- destval = pop_word();
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = pop_long();
- } else {
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = pop_word();
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x90
-****************************************************************************/
-static void x86emuOp_nop(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("NOP\n");
- TRACE_AND_STEP();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x91
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_CX(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,ECX\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,CX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_ECX;
- M.x86.R_ECX = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_CX;
- M.x86.R_CX = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x92
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_DX(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,EDX\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,DX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_EDX;
- M.x86.R_EDX = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_DX;
- M.x86.R_DX = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x93
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_BX(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,EBX\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,BX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_EBX;
- M.x86.R_EBX = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_BX;
- M.x86.R_BX = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x94
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_SP(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,ESP\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,SP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_ESP;
- M.x86.R_ESP = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_SP;
- M.x86.R_SP = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x95
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_BP(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,EBP\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,BP\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_EBP;
- M.x86.R_EBP = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_BP;
- M.x86.R_BP = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x96
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_SI(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,ESI\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,SI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_ESI;
- M.x86.R_ESI = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_SI;
- M.x86.R_SI = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x97
-****************************************************************************/
-static void x86emuOp_xchg_word_AX_DI(u8 X86EMU_UNUSED(op1))
-{
- u32 tmp;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("XCHG\tEAX,EDI\n");
- } else {
- DECODE_PRINTF("XCHG\tAX,DI\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- tmp = M.x86.R_EAX;
- M.x86.R_EAX = M.x86.R_EDI;
- M.x86.R_EDI = tmp;
- } else {
- tmp = M.x86.R_AX;
- M.x86.R_AX = M.x86.R_DI;
- M.x86.R_DI = (u16)tmp;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x98
-****************************************************************************/
-static void x86emuOp_cbw(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("CWDE\n");
- } else {
- DECODE_PRINTF("CBW\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- if (M.x86.R_AX & 0x8000) {
- M.x86.R_EAX |= 0xffff0000;
- } else {
- M.x86.R_EAX &= 0x0000ffff;
- }
- } else {
- if (M.x86.R_AL & 0x80) {
- M.x86.R_AH = 0xff;
- } else {
- M.x86.R_AH = 0x0;
- }
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x99
-****************************************************************************/
-static void x86emuOp_cwd(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("CDQ\n");
- } else {
- DECODE_PRINTF("CWD\n");
- }
- DECODE_PRINTF("CWD\n");
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- if (M.x86.R_EAX & 0x80000000) {
- M.x86.R_EDX = 0xffffffff;
- } else {
- M.x86.R_EDX = 0x0;
- }
- } else {
- if (M.x86.R_AX & 0x8000) {
- M.x86.R_DX = 0xffff;
- } else {
- M.x86.R_DX = 0x0;
- }
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x9a
-****************************************************************************/
-static void x86emuOp_call_far_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 farseg, faroff;
-
- START_OF_INSTR();
- DECODE_PRINTF("CALL\t");
- faroff = fetch_word_imm();
- farseg = fetch_word_imm();
- DECODE_PRINTF2("%04x:", farseg);
- DECODE_PRINTF2("%04x\n", faroff);
- CALL_TRACE(M.x86.saved_cs, M.x86.saved_ip, farseg, faroff, "FAR ");
-
- /* XXX
- *
- * Hooked interrupt vectors calling into our "BIOS" will cause
- * problems unless all intersegment stuff is checked for BIOS
- * access. Check needed here. For moment, let it alone.
- */
- TRACE_AND_STEP();
- push_word(M.x86.R_CS);
- M.x86.R_CS = farseg;
- push_word(M.x86.R_IP);
- M.x86.R_IP = faroff;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x9b
-****************************************************************************/
-static void x86emuOp_wait(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("WAIT");
- TRACE_AND_STEP();
- /* NADA. */
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x9c
-****************************************************************************/
-static void x86emuOp_pushf_word(u8 X86EMU_UNUSED(op1))
-{
- u32 flags;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("PUSHFD\n");
- } else {
- DECODE_PRINTF("PUSHF\n");
- }
- TRACE_AND_STEP();
-
- /* clear out *all* bits not representing flags, and turn on real bits */
- flags = (M.x86.R_EFLG & F_MSK) | F_ALWAYS_ON;
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- push_long(flags);
- } else {
- push_word((u16)flags);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x9d
-****************************************************************************/
-static void x86emuOp_popf_word(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("POPFD\n");
- } else {
- DECODE_PRINTF("POPF\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EFLG = pop_long();
- } else {
- M.x86.R_FLG = pop_word();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x9e
-****************************************************************************/
-static void x86emuOp_sahf(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("SAHF\n");
- TRACE_AND_STEP();
- /* clear the lower bits of the flag register */
- M.x86.R_FLG &= 0xffffff00;
- /* or in the AH register into the flags register */
- M.x86.R_FLG |= M.x86.R_AH;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x9f
-****************************************************************************/
-static void x86emuOp_lahf(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("LAHF\n");
- TRACE_AND_STEP();
- M.x86.R_AH = (u8)(M.x86.R_FLG & 0xff);
- /*undocumented TC++ behavior??? Nope. It's documented, but
- you have too look real hard to notice it. */
- M.x86.R_AH |= 0x2;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa0
-****************************************************************************/
-static void x86emuOp_mov_AL_M_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 offset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tAL,");
- offset = fetch_word_imm();
- DECODE_PRINTF2("[%04x]\n", offset);
- TRACE_AND_STEP();
- M.x86.R_AL = fetch_data_byte(offset);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa1
-****************************************************************************/
-static void x86emuOp_mov_AX_M_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 offset;
-
- START_OF_INSTR();
- offset = fetch_word_imm();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF2("MOV\tEAX,[%04x]\n", offset);
- } else {
- DECODE_PRINTF2("MOV\tAX,[%04x]\n", offset);
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = fetch_data_long(offset);
- } else {
- M.x86.R_AX = fetch_data_word(offset);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa2
-****************************************************************************/
-static void x86emuOp_mov_M_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 offset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- offset = fetch_word_imm();
- DECODE_PRINTF2("[%04x],AL\n", offset);
- TRACE_AND_STEP();
- store_data_byte(offset, M.x86.R_AL);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa3
-****************************************************************************/
-static void x86emuOp_mov_M_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 offset;
-
- START_OF_INSTR();
- offset = fetch_word_imm();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF2("MOV\t[%04x],EAX\n", offset);
- } else {
- DECODE_PRINTF2("MOV\t[%04x],AX\n", offset);
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- store_data_long(offset, M.x86.R_EAX);
- } else {
- store_data_word(offset, M.x86.R_AX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa4
-****************************************************************************/
-static void x86emuOp_movs_byte(u8 X86EMU_UNUSED(op1))
-{
- u8 val;
- u32 count;
- int inc;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOVS\tBYTE\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -1;
- else
- inc = 1;
- TRACE_AND_STEP();
- count = 1;
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* move them until CX is ZERO. */
- count = M.x86.R_CX;
- M.x86.R_CX = 0;
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- }
- while (count--) {
- val = fetch_data_byte(M.x86.R_SI);
- store_data_byte_abs(M.x86.R_ES, M.x86.R_DI, val);
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa5
-****************************************************************************/
-static void x86emuOp_movs_word(u8 X86EMU_UNUSED(op1))
-{
- u32 val;
- int inc;
- u32 count;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOVS\tDWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -4;
- else
- inc = 4;
- } else {
- DECODE_PRINTF("MOVS\tWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -2;
- else
- inc = 2;
- }
- TRACE_AND_STEP();
- count = 1;
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* move them until CX is ZERO. */
- count = M.x86.R_CX;
- M.x86.R_CX = 0;
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- }
- while (count--) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val = fetch_data_long(M.x86.R_SI);
- store_data_long_abs(M.x86.R_ES, M.x86.R_DI, val);
- } else {
- val = fetch_data_word(M.x86.R_SI);
- store_data_word_abs(M.x86.R_ES, M.x86.R_DI, (u16)val);
- }
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa6
-****************************************************************************/
-static void x86emuOp_cmps_byte(u8 X86EMU_UNUSED(op1))
-{
- s8 val1, val2;
- int inc;
-
- START_OF_INSTR();
- DECODE_PRINTF("CMPS\tBYTE\n");
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -1;
- else
- inc = 1;
-
- if (M.x86.mode & SYSMODE_PREFIX_REPE) {
- /* REPE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- val1 = fetch_data_byte(M.x86.R_SI);
- val2 = fetch_data_byte_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_byte(val1, val2);
- M.x86.R_CX -= 1;
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF) == 0)
- break;
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPE;
- } else if (M.x86.mode & SYSMODE_PREFIX_REPNE) {
- /* REPNE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- val1 = fetch_data_byte(M.x86.R_SI);
- val2 = fetch_data_byte_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_byte(val1, val2);
- M.x86.R_CX -= 1;
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF))
- break; /* zero flag set means equal */
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPNE;
- } else {
- val1 = fetch_data_byte(M.x86.R_SI);
- val2 = fetch_data_byte_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_byte(val1, val2);
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa7
-****************************************************************************/
-static void x86emuOp_cmps_word(u8 X86EMU_UNUSED(op1))
-{
- u32 val1,val2;
- int inc;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("CMPS\tDWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -4;
- else
- inc = 4;
- } else {
- DECODE_PRINTF("CMPS\tWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -2;
- else
- inc = 2;
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_REPE) {
- /* REPE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val1 = fetch_data_long(M.x86.R_SI);
- val2 = fetch_data_long_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_long(val1, val2);
- } else {
- val1 = fetch_data_word(M.x86.R_SI);
- val2 = fetch_data_word_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_word((u16)val1, (u16)val2);
- }
- M.x86.R_CX -= 1;
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF) == 0)
- break;
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPE;
- } else if (M.x86.mode & SYSMODE_PREFIX_REPNE) {
- /* REPNE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val1 = fetch_data_long(M.x86.R_SI);
- val2 = fetch_data_long_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_long(val1, val2);
- } else {
- val1 = fetch_data_word(M.x86.R_SI);
- val2 = fetch_data_word_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_word((u16)val1, (u16)val2);
- }
- M.x86.R_CX -= 1;
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF))
- break; /* zero flag set means equal */
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPNE;
- } else {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val1 = fetch_data_long(M.x86.R_SI);
- val2 = fetch_data_long_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_long(val1, val2);
- } else {
- val1 = fetch_data_word(M.x86.R_SI);
- val2 = fetch_data_word_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_word((u16)val1, (u16)val2);
- }
- M.x86.R_SI += inc;
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa8
-****************************************************************************/
-static void x86emuOp_test_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- int imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("TEST\tAL,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%04x\n", imm);
- TRACE_AND_STEP();
- test_byte(M.x86.R_AL, (u8)imm);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xa9
-****************************************************************************/
-static void x86emuOp_test_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("TEST\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("TEST\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- test_long(M.x86.R_EAX, srcval);
- } else {
- test_word(M.x86.R_AX, (u16)srcval);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xaa
-****************************************************************************/
-static void x86emuOp_stos_byte(u8 X86EMU_UNUSED(op1))
-{
- int inc;
-
- START_OF_INSTR();
- DECODE_PRINTF("STOS\tBYTE\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -1;
- else
- inc = 1;
- TRACE_AND_STEP();
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- store_data_byte_abs(M.x86.R_ES, M.x86.R_DI, M.x86.R_AL);
- M.x86.R_CX -= 1;
- M.x86.R_DI += inc;
- }
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- } else {
- store_data_byte_abs(M.x86.R_ES, M.x86.R_DI, M.x86.R_AL);
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xab
-****************************************************************************/
-static void x86emuOp_stos_word(u8 X86EMU_UNUSED(op1))
-{
- int inc;
- u32 count;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("STOS\tDWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -4;
- else
- inc = 4;
- } else {
- DECODE_PRINTF("STOS\tWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -2;
- else
- inc = 2;
- }
- TRACE_AND_STEP();
- count = 1;
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* move them until CX is ZERO. */
- count = M.x86.R_CX;
- M.x86.R_CX = 0;
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- }
- while (count--) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- store_data_long_abs(M.x86.R_ES, M.x86.R_DI, M.x86.R_EAX);
- } else {
- store_data_word_abs(M.x86.R_ES, M.x86.R_DI, M.x86.R_AX);
- }
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xac
-****************************************************************************/
-static void x86emuOp_lods_byte(u8 X86EMU_UNUSED(op1))
-{
- int inc;
-
- START_OF_INSTR();
- DECODE_PRINTF("LODS\tBYTE\n");
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -1;
- else
- inc = 1;
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- M.x86.R_AL = fetch_data_byte(M.x86.R_SI);
- M.x86.R_CX -= 1;
- M.x86.R_SI += inc;
- }
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- } else {
- M.x86.R_AL = fetch_data_byte(M.x86.R_SI);
- M.x86.R_SI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xad
-****************************************************************************/
-static void x86emuOp_lods_word(u8 X86EMU_UNUSED(op1))
-{
- int inc;
- u32 count;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("LODS\tDWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -4;
- else
- inc = 4;
- } else {
- DECODE_PRINTF("LODS\tWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -2;
- else
- inc = 2;
- }
- TRACE_AND_STEP();
- count = 1;
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* move them until CX is ZERO. */
- count = M.x86.R_CX;
- M.x86.R_CX = 0;
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- }
- while (count--) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = fetch_data_long(M.x86.R_SI);
- } else {
- M.x86.R_AX = fetch_data_word(M.x86.R_SI);
- }
- M.x86.R_SI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xae
-****************************************************************************/
-static void x86emuOp_scas_byte(u8 X86EMU_UNUSED(op1))
-{
- s8 val2;
- int inc;
-
- START_OF_INSTR();
- DECODE_PRINTF("SCAS\tBYTE\n");
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -1;
- else
- inc = 1;
- if (M.x86.mode & SYSMODE_PREFIX_REPE) {
- /* REPE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- val2 = fetch_data_byte_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_byte(M.x86.R_AL, val2);
- M.x86.R_CX -= 1;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF) == 0)
- break;
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPE;
- } else if (M.x86.mode & SYSMODE_PREFIX_REPNE) {
- /* REPNE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- val2 = fetch_data_byte_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_byte(M.x86.R_AL, val2);
- M.x86.R_CX -= 1;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF))
- break; /* zero flag set means equal */
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPNE;
- } else {
- val2 = fetch_data_byte_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_byte(M.x86.R_AL, val2);
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xaf
-****************************************************************************/
-static void x86emuOp_scas_word(u8 X86EMU_UNUSED(op1))
-{
- int inc;
- u32 val;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("SCAS\tDWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -4;
- else
- inc = 4;
- } else {
- DECODE_PRINTF("SCAS\tWORD\n");
- if (ACCESS_FLAG(F_DF)) /* down */
- inc = -2;
- else
- inc = 2;
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_REPE) {
- /* REPE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val = fetch_data_long_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_long(M.x86.R_EAX, val);
- } else {
- val = fetch_data_word_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_word(M.x86.R_AX, (u16)val);
- }
- M.x86.R_CX -= 1;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF) == 0)
- break;
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPE;
- } else if (M.x86.mode & SYSMODE_PREFIX_REPNE) {
- /* REPNE */
- /* move them until CX is ZERO. */
- while (M.x86.R_CX != 0) {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val = fetch_data_long_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_long(M.x86.R_EAX, val);
- } else {
- val = fetch_data_word_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_word(M.x86.R_AX, (u16)val);
- }
- M.x86.R_CX -= 1;
- M.x86.R_DI += inc;
- if (ACCESS_FLAG(F_ZF))
- break; /* zero flag set means equal */
- }
- M.x86.mode &= ~SYSMODE_PREFIX_REPNE;
- } else {
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- val = fetch_data_long_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_long(M.x86.R_EAX, val);
- } else {
- val = fetch_data_word_abs(M.x86.R_ES, M.x86.R_DI);
- cmp_word(M.x86.R_AX, (u16)val);
- }
- M.x86.R_DI += inc;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb0
-****************************************************************************/
-static void x86emuOp_mov_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tAL,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_AL = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb1
-****************************************************************************/
-static void x86emuOp_mov_byte_CL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tCL,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_CL = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb2
-****************************************************************************/
-static void x86emuOp_mov_byte_DL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tDL,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_DL = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb3
-****************************************************************************/
-static void x86emuOp_mov_byte_BL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tBL,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_BL = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb4
-****************************************************************************/
-static void x86emuOp_mov_byte_AH_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tAH,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_AH = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb5
-****************************************************************************/
-static void x86emuOp_mov_byte_CH_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tCH,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_CH = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb6
-****************************************************************************/
-static void x86emuOp_mov_byte_DH_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tDH,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_DH = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb7
-****************************************************************************/
-static void x86emuOp_mov_byte_BH_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\tBH,");
- imm = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", imm);
- TRACE_AND_STEP();
- M.x86.R_BH = imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb8
-****************************************************************************/
-static void x86emuOp_mov_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tEAX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tAX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = srcval;
- } else {
- M.x86.R_AX = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xb9
-****************************************************************************/
-static void x86emuOp_mov_word_CX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tECX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tCX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ECX = srcval;
- } else {
- M.x86.R_CX = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xba
-****************************************************************************/
-static void x86emuOp_mov_word_DX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tEDX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tDX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDX = srcval;
- } else {
- M.x86.R_DX = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xbb
-****************************************************************************/
-static void x86emuOp_mov_word_BX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tEBX,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tBX,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBX = srcval;
- } else {
- M.x86.R_BX = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xbc
-****************************************************************************/
-static void x86emuOp_mov_word_SP_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tESP,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tSP,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESP = srcval;
- } else {
- M.x86.R_SP = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xbd
-****************************************************************************/
-static void x86emuOp_mov_word_BP_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tEBP,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tBP,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EBP = srcval;
- } else {
- M.x86.R_BP = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xbe
-****************************************************************************/
-static void x86emuOp_mov_word_SI_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tESI,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tSI,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ESI = srcval;
- } else {
- M.x86.R_SI = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xbf
-****************************************************************************/
-static void x86emuOp_mov_word_DI_IMM(u8 X86EMU_UNUSED(op1))
-{
- u32 srcval;
-
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("MOV\tEDI,");
- srcval = fetch_long_imm();
- } else {
- DECODE_PRINTF("MOV\tDI,");
- srcval = fetch_word_imm();
- }
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EDI = srcval;
- } else {
- M.x86.R_DI = (u16)srcval;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/* used by opcodes c0, d0, and d2. */
-static u8(*opcD0_byte_operation[])(u8 d, u8 s) =
-{
- rol_byte,
- ror_byte,
- rcl_byte,
- rcr_byte,
- shl_byte,
- shr_byte,
- shl_byte, /* sal_byte === shl_byte by definition */
- sar_byte,
-};
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc0
-****************************************************************************/
-static void x86emuOp_opcC0_byte_RM_MEM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 destval;
- u8 amt;
-
- /*
- * Yet another weirdo special case instruction format. Part of
- * the opcode held below in "RH". Doubly nested case would
- * result, except that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
-
- switch (rh) {
- case 0:
- DECODE_PRINTF("ROL\t");
- break;
- case 1:
- DECODE_PRINTF("ROR\t");
- break;
- case 2:
- DECODE_PRINTF("RCL\t");
- break;
- case 3:
- DECODE_PRINTF("RCR\t");
- break;
- case 4:
- DECODE_PRINTF("SHL\t");
- break;
- case 5:
- DECODE_PRINTF("SHR\t");
- break;
- case 6:
- DECODE_PRINTF("SAL\t");
- break;
- case 7:
- DECODE_PRINTF("SAR\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, amt);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, amt);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, amt);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (*destreg, amt);
- *destreg = destval;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/* used by opcodes c1, d1, and d3. */
-static u16(*opcD1_word_operation[])(u16 s, u8 d) =
-{
- rol_word,
- ror_word,
- rcl_word,
- rcr_word,
- shl_word,
- shr_word,
- shl_word, /* sal_byte === shl_byte by definition */
- sar_word,
-};
-
-/* used by opcodes c1, d1, and d3. */
-static u32 (*opcD1_long_operation[])(u32 s, u8 d) =
-{
- rol_long,
- ror_long,
- rcl_long,
- rcr_long,
- shl_long,
- shr_long,
- shl_long, /* sal_byte === shl_byte by definition */
- sar_long,
-};
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc1
-****************************************************************************/
-static void x86emuOp_opcC1_word_RM_MEM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
- u8 amt;
-
- /*
- * Yet another weirdo special case instruction format. Part of
- * the opcode held below in "RH". Doubly nested case would
- * result, except that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
-
- switch (rh) {
- case 0:
- DECODE_PRINTF("ROL\t");
- break;
- case 1:
- DECODE_PRINTF("ROR\t");
- break;
- case 2:
- DECODE_PRINTF("RCL\t");
- break;
- case 3:
- DECODE_PRINTF("RCR\t");
- break;
- case 4:
- DECODE_PRINTF("SHL\t");
- break;
- case 5:
- DECODE_PRINTF("SHR\t");
- break;
- case 6:
- DECODE_PRINTF("SAL\t");
- break;
- case 7:
- DECODE_PRINTF("SAR\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm00_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, amt);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm00_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, amt);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm01_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, amt);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm01_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, amt);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm10_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, amt);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm10_address(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, amt);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- TRACE_AND_STEP();
- *destreg = (*opcD1_long_operation[rh]) (*destreg, amt);
- } else {
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- amt = fetch_byte_imm();
- DECODE_PRINTF2(",%x\n", amt);
- TRACE_AND_STEP();
- *destreg = (*opcD1_word_operation[rh]) (*destreg, amt);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc2
-****************************************************************************/
-static void x86emuOp_ret_near_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("RET\t");
- imm = fetch_word_imm();
- DECODE_PRINTF2("%x\n", imm);
- RETURN_TRACE("RET",M.x86.saved_cs,M.x86.saved_ip);
- TRACE_AND_STEP();
- M.x86.R_IP = pop_word();
- M.x86.R_SP += imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc3
-****************************************************************************/
-static void x86emuOp_ret_near(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("RET\n");
- RETURN_TRACE("RET",M.x86.saved_cs,M.x86.saved_ip);
- TRACE_AND_STEP();
- M.x86.R_IP = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc4
-****************************************************************************/
-static void x86emuOp_les_R_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rh, rl;
- u16 *dstreg;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("LES\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_ES = fetch_data_word(srcoffset + 2);
- break;
- case 1:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_ES = fetch_data_word(srcoffset + 2);
- break;
- case 2:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_ES = fetch_data_word(srcoffset + 2);
- break;
- case 3: /* register to register */
- /* UNDEFINED! */
- TRACE_AND_STEP();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc5
-****************************************************************************/
-static void x86emuOp_lds_R_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rh, rl;
- u16 *dstreg;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("LDS\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_DS = fetch_data_word(srcoffset + 2);
- break;
- case 1:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_DS = fetch_data_word(srcoffset + 2);
- break;
- case 2:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_DS = fetch_data_word(srcoffset + 2);
- break;
- case 3: /* register to register */
- /* UNDEFINED! */
- TRACE_AND_STEP();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc6
-****************************************************************************/
-static void x86emuOp_mov_byte_RM_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- if (rh != 0) {
- DECODE_PRINTF("ILLEGAL DECODE OF OPCODE c6\n");
- HALT_SYS();
- }
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%2x\n", imm);
- TRACE_AND_STEP();
- store_data_byte(destoffset, imm);
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%2x\n", imm);
- TRACE_AND_STEP();
- store_data_byte(destoffset, imm);
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%2x\n", imm);
- TRACE_AND_STEP();
- store_data_byte(destoffset, imm);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- imm = fetch_byte_imm();
- DECODE_PRINTF2(",%2x\n", imm);
- TRACE_AND_STEP();
- *destreg = imm;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc7
-****************************************************************************/
-static void x86emuOp_mov_word_RM_IMM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOV\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- if (rh != 0) {
- DECODE_PRINTF("ILLEGAL DECODE OF OPCODE 8F\n");
- HALT_SYS();
- }
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm00_address(rl);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- store_data_long(destoffset, imm);
- } else {
- u16 imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm00_address(rl);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- store_data_word(destoffset, imm);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm01_address(rl);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- store_data_long(destoffset, imm);
- } else {
- u16 imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm01_address(rl);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- store_data_word(destoffset, imm);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 imm;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm10_address(rl);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- store_data_long(destoffset, imm);
- } else {
- u16 imm;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm10_address(rl);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- store_data_word(destoffset, imm);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 imm;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- imm = fetch_long_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- *destreg = imm;
- } else {
- u16 *destreg;
- u16 imm;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- imm = fetch_word_imm();
- DECODE_PRINTF2(",%x\n", imm);
- TRACE_AND_STEP();
- *destreg = imm;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc8
-****************************************************************************/
-static void x86emuOp_enter(u8 X86EMU_UNUSED(op1))
-{
- u16 local,frame_pointer;
- u8 nesting;
- int i;
-
- START_OF_INSTR();
- local = fetch_word_imm();
- nesting = fetch_byte_imm();
- DECODE_PRINTF2("ENTER %x\n", local);
- DECODE_PRINTF2(",%x\n", nesting);
- TRACE_AND_STEP();
- push_word(M.x86.R_BP);
- frame_pointer = M.x86.R_SP;
- if (nesting > 0) {
- for (i = 1; i < nesting; i++) {
- M.x86.R_BP -= 2;
- push_word(fetch_data_word_abs(M.x86.R_SS, M.x86.R_BP));
- }
- push_word(frame_pointer);
- }
- M.x86.R_BP = frame_pointer;
- M.x86.R_SP = (u16)(M.x86.R_SP - local);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xc9
-****************************************************************************/
-static void x86emuOp_leave(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("LEAVE\n");
- TRACE_AND_STEP();
- M.x86.R_SP = M.x86.R_BP;
- M.x86.R_BP = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xca
-****************************************************************************/
-static void x86emuOp_ret_far_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 imm;
-
- START_OF_INSTR();
- DECODE_PRINTF("RETF\t");
- imm = fetch_word_imm();
- DECODE_PRINTF2("%x\n", imm);
- RETURN_TRACE("RETF",M.x86.saved_cs,M.x86.saved_ip);
- TRACE_AND_STEP();
- M.x86.R_IP = pop_word();
- M.x86.R_CS = pop_word();
- M.x86.R_SP += imm;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xcb
-****************************************************************************/
-static void x86emuOp_ret_far(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("RETF\n");
- RETURN_TRACE("RETF",M.x86.saved_cs,M.x86.saved_ip);
- TRACE_AND_STEP();
- M.x86.R_IP = pop_word();
- M.x86.R_CS = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xcc
-****************************************************************************/
-static void x86emuOp_int3(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("INT 3\n");
- TRACE_AND_STEP();
- if (_X86EMU_intrTab[3]) {
- (*_X86EMU_intrTab[3])(3);
- } else {
- push_word((u16)M.x86.R_FLG);
- CLEAR_FLAG(F_IF);
- CLEAR_FLAG(F_TF);
- push_word(M.x86.R_CS);
- M.x86.R_CS = mem_access_word(3 * 4 + 2);
- push_word(M.x86.R_IP);
- M.x86.R_IP = mem_access_word(3 * 4);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xcd
-****************************************************************************/
-static void x86emuOp_int_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 intnum;
-
- START_OF_INSTR();
- DECODE_PRINTF("INT\t");
- intnum = fetch_byte_imm();
- DECODE_PRINTF2("%x\n", intnum);
- TRACE_AND_STEP();
- if (_X86EMU_intrTab[intnum]) {
- (*_X86EMU_intrTab[intnum])(intnum);
- } else {
- push_word((u16)M.x86.R_FLG);
- CLEAR_FLAG(F_IF);
- CLEAR_FLAG(F_TF);
- push_word(M.x86.R_CS);
- M.x86.R_CS = mem_access_word(intnum * 4 + 2);
- push_word(M.x86.R_IP);
- M.x86.R_IP = mem_access_word(intnum * 4);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xce
-****************************************************************************/
-static void x86emuOp_into(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("INTO\n");
- TRACE_AND_STEP();
- if (ACCESS_FLAG(F_OF)) {
- if (_X86EMU_intrTab[4]) {
- (*_X86EMU_intrTab[4])(4);
- } else {
- push_word((u16)M.x86.R_FLG);
- CLEAR_FLAG(F_IF);
- CLEAR_FLAG(F_TF);
- push_word(M.x86.R_CS);
- M.x86.R_CS = mem_access_word(4 * 4 + 2);
- push_word(M.x86.R_IP);
- M.x86.R_IP = mem_access_word(4 * 4);
- }
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xcf
-****************************************************************************/
-static void x86emuOp_iret(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("IRET\n");
-
- TRACE_AND_STEP();
-
- M.x86.R_IP = pop_word();
- M.x86.R_CS = pop_word();
- M.x86.R_FLG = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd0
-****************************************************************************/
-static void x86emuOp_opcD0_byte_RM_1(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 destval;
-
- /*
- * Yet another weirdo special case instruction format. Part of
- * the opcode held below in "RH". Doubly nested case would
- * result, except that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
- switch (rh) {
- case 0:
- DECODE_PRINTF("ROL\t");
- break;
- case 1:
- DECODE_PRINTF("ROR\t");
- break;
- case 2:
- DECODE_PRINTF("RCL\t");
- break;
- case 3:
- DECODE_PRINTF("RCR\t");
- break;
- case 4:
- DECODE_PRINTF("SHL\t");
- break;
- case 5:
- DECODE_PRINTF("SHR\t");
- break;
- case 6:
- DECODE_PRINTF("SAL\t");
- break;
- case 7:
- DECODE_PRINTF("SAR\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, 1);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, 1);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, 1);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",1\n");
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (*destreg, 1);
- *destreg = destval;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd1
-****************************************************************************/
-static void x86emuOp_opcD1_word_RM_1(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- /*
- * Yet another weirdo special case instruction format. Part of
- * the opcode held below in "RH". Doubly nested case would
- * result, except that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
- switch (rh) {
- case 0:
- DECODE_PRINTF("ROL\t");
- break;
- case 1:
- DECODE_PRINTF("ROR\t");
- break;
- case 2:
- DECODE_PRINTF("RCL\t");
- break;
- case 3:
- DECODE_PRINTF("RCR\t");
- break;
- case 4:
- DECODE_PRINTF("SHL\t");
- break;
- case 5:
- DECODE_PRINTF("SHR\t");
- break;
- case 6:
- DECODE_PRINTF("SAL\t");
- break;
- case 7:
- DECODE_PRINTF("SAR\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, 1);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, 1);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, 1);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, 1);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, 1);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",1\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, 1);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",1\n");
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (*destreg, 1);
- *destreg = destval;
- } else {
- u16 destval;
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",1\n");
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (*destreg, 1);
- *destreg = destval;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd2
-****************************************************************************/
-static void x86emuOp_opcD2_byte_RM_CL(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 destval;
- u8 amt;
-
- /*
- * Yet another weirdo special case instruction format. Part of
- * the opcode held below in "RH". Doubly nested case would
- * result, except that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
- switch (rh) {
- case 0:
- DECODE_PRINTF("ROL\t");
- break;
- case 1:
- DECODE_PRINTF("ROR\t");
- break;
- case 2:
- DECODE_PRINTF("RCL\t");
- break;
- case 3:
- DECODE_PRINTF("RCR\t");
- break;
- case 4:
- DECODE_PRINTF("SHL\t");
- break;
- case 5:
- DECODE_PRINTF("SHR\t");
- break;
- case 6:
- DECODE_PRINTF("SAL\t");
- break;
- case 7:
- DECODE_PRINTF("SAR\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- amt = M.x86.R_CL;
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, amt);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, amt);
- store_data_byte(destoffset, destval);
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (destval, amt);
- store_data_byte(destoffset, destval);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = (*opcD0_byte_operation[rh]) (*destreg, amt);
- *destreg = destval;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd3
-****************************************************************************/
-static void x86emuOp_opcD3_word_RM_CL(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
- u8 amt;
-
- /*
- * Yet another weirdo special case instruction format. Part of
- * the opcode held below in "RH". Doubly nested case would
- * result, except that the decoded instruction
- */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
- switch (rh) {
- case 0:
- DECODE_PRINTF("ROL\t");
- break;
- case 1:
- DECODE_PRINTF("ROR\t");
- break;
- case 2:
- DECODE_PRINTF("RCL\t");
- break;
- case 3:
- DECODE_PRINTF("RCR\t");
- break;
- case 4:
- DECODE_PRINTF("SHL\t");
- break;
- case 5:
- DECODE_PRINTF("SHR\t");
- break;
- case 6:
- DECODE_PRINTF("SAL\t");
- break;
- case 7:
- DECODE_PRINTF("SAR\t");
- break;
- }
- }
-#endif
- /* know operation, decode the mod byte to find the addressing
- mode. */
- amt = M.x86.R_CL;
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, amt);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, amt);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, amt);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, amt);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_long_operation[rh]) (destval, amt);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("WORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",CL\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = (*opcD1_word_operation[rh]) (destval, amt);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- *destreg = (*opcD1_long_operation[rh]) (*destreg, amt);
- } else {
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- *destreg = (*opcD1_word_operation[rh]) (*destreg, amt);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd4
-****************************************************************************/
-static void x86emuOp_aam(u8 X86EMU_UNUSED(op1))
-{
- u8 a;
-
- START_OF_INSTR();
- DECODE_PRINTF("AAM\n");
- a = fetch_byte_imm(); /* this is a stupid encoding. */
- if (a != 10) {
- /* fix: add base decoding
- aam_word(u8 val, int base a) */
- DECODE_PRINTF("ERROR DECODING AAM\n");
- TRACE_REGS();
- HALT_SYS();
- }
- TRACE_AND_STEP();
- /* note the type change here --- returning AL and AH in AX. */
- M.x86.R_AX = aam_word(M.x86.R_AL);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd5
-****************************************************************************/
-static void x86emuOp_aad(u8 X86EMU_UNUSED(op1))
-{
- u8 a;
-
- START_OF_INSTR();
- DECODE_PRINTF("AAD\n");
- a = fetch_byte_imm();
- if (a != 10) {
- /* fix: add base decoding
- aad_word(u16 val, int base a) */
- DECODE_PRINTF("ERROR DECODING AAM\n");
- TRACE_REGS();
- HALT_SYS();
- }
- TRACE_AND_STEP();
- M.x86.R_AX = aad_word(M.x86.R_AX);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/* opcode 0xd6 ILLEGAL OPCODE */
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xd7
-****************************************************************************/
-static void x86emuOp_xlat(u8 X86EMU_UNUSED(op1))
-{
- u16 addr;
-
- START_OF_INSTR();
- DECODE_PRINTF("XLAT\n");
- TRACE_AND_STEP();
- addr = (u16)(M.x86.R_BX + (u8)M.x86.R_AL);
- M.x86.R_AL = fetch_data_byte(addr);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/* instuctions D8 .. DF are in i87_ops.c */
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe0
-****************************************************************************/
-static void x86emuOp_loopne(u8 X86EMU_UNUSED(op1))
-{
- s16 ip;
-
- START_OF_INSTR();
- DECODE_PRINTF("LOOPNE\t");
- ip = (s8) fetch_byte_imm();
- ip += (s16) M.x86.R_IP;
- DECODE_PRINTF2("%04x\n", ip);
- TRACE_AND_STEP();
- M.x86.R_CX -= 1;
- if (M.x86.R_CX != 0 && !ACCESS_FLAG(F_ZF)) /* CX != 0 and !ZF */
- M.x86.R_IP = ip;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe1
-****************************************************************************/
-static void x86emuOp_loope(u8 X86EMU_UNUSED(op1))
-{
- s16 ip;
-
- START_OF_INSTR();
- DECODE_PRINTF("LOOPE\t");
- ip = (s8) fetch_byte_imm();
- ip += (s16) M.x86.R_IP;
- DECODE_PRINTF2("%04x\n", ip);
- TRACE_AND_STEP();
- M.x86.R_CX -= 1;
- if (M.x86.R_CX != 0 && ACCESS_FLAG(F_ZF)) /* CX != 0 and ZF */
- M.x86.R_IP = ip;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe2
-****************************************************************************/
-static void x86emuOp_loop(u8 X86EMU_UNUSED(op1))
-{
- s16 ip;
-
- START_OF_INSTR();
- DECODE_PRINTF("LOOP\t");
- ip = (s8) fetch_byte_imm();
- ip += (s16) M.x86.R_IP;
- DECODE_PRINTF2("%04x\n", ip);
- TRACE_AND_STEP();
- M.x86.R_CX -= 1;
- if (M.x86.R_CX != 0)
- M.x86.R_IP = ip;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe3
-****************************************************************************/
-static void x86emuOp_jcxz(u8 X86EMU_UNUSED(op1))
-{
- u16 target;
- s8 offset;
-
- /* jump to byte offset if overflow flag is set */
- START_OF_INSTR();
- DECODE_PRINTF("JCXZ\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- if (M.x86.R_CX == 0)
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe4
-****************************************************************************/
-static void x86emuOp_in_byte_AL_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 port;
-
- START_OF_INSTR();
- DECODE_PRINTF("IN\t");
- port = (u8) fetch_byte_imm();
- DECODE_PRINTF2("%x,AL\n", port);
- TRACE_AND_STEP();
- M.x86.R_AL = (*sys_inb)(port);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe5
-****************************************************************************/
-static void x86emuOp_in_word_AX_IMM(u8 X86EMU_UNUSED(op1))
-{
- u8 port;
-
- START_OF_INSTR();
- DECODE_PRINTF("IN\t");
- port = (u8) fetch_byte_imm();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF2("EAX,%x\n", port);
- } else {
- DECODE_PRINTF2("AX,%x\n", port);
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = (*sys_inl)(port);
- } else {
- M.x86.R_AX = (*sys_inw)(port);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe6
-****************************************************************************/
-static void x86emuOp_out_byte_IMM_AL(u8 X86EMU_UNUSED(op1))
-{
- u8 port;
-
- START_OF_INSTR();
- DECODE_PRINTF("OUT\t");
- port = (u8) fetch_byte_imm();
- DECODE_PRINTF2("%x,AL\n", port);
- TRACE_AND_STEP();
- (*sys_outb)(port, M.x86.R_AL);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe7
-****************************************************************************/
-static void x86emuOp_out_word_IMM_AX(u8 X86EMU_UNUSED(op1))
-{
- u8 port;
-
- START_OF_INSTR();
- DECODE_PRINTF("OUT\t");
- port = (u8) fetch_byte_imm();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF2("%x,EAX\n", port);
- } else {
- DECODE_PRINTF2("%x,AX\n", port);
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- (*sys_outl)(port, M.x86.R_EAX);
- } else {
- (*sys_outw)(port, M.x86.R_AX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe8
-****************************************************************************/
-static void x86emuOp_call_near_IMM(u8 X86EMU_UNUSED(op1))
-{
- s16 ip;
-
- START_OF_INSTR();
- DECODE_PRINTF("CALL\t");
- ip = (s16) fetch_word_imm();
- ip += (s16) M.x86.R_IP; /* CHECK SIGN */
- DECODE_PRINTF2("%04x\n", (u16)ip);
- CALL_TRACE(M.x86.saved_cs, M.x86.saved_ip, M.x86.R_CS, ip, "");
- TRACE_AND_STEP();
- push_word(M.x86.R_IP);
- M.x86.R_IP = ip;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xe9
-****************************************************************************/
-static void x86emuOp_jump_near_IMM(u8 X86EMU_UNUSED(op1))
-{
- int ip;
-
- START_OF_INSTR();
- DECODE_PRINTF("JMP\t");
- ip = (s16)fetch_word_imm();
- ip += (s16)M.x86.R_IP;
- DECODE_PRINTF2("%04x\n", (u16)ip);
- TRACE_AND_STEP();
- M.x86.R_IP = (u16)ip;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xea
-****************************************************************************/
-static void x86emuOp_jump_far_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 cs, ip;
-
- START_OF_INSTR();
- DECODE_PRINTF("JMP\tFAR ");
- ip = fetch_word_imm();
- cs = fetch_word_imm();
- DECODE_PRINTF2("%04x:", cs);
- DECODE_PRINTF2("%04x\n", ip);
- TRACE_AND_STEP();
- M.x86.R_IP = ip;
- M.x86.R_CS = cs;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xeb
-****************************************************************************/
-static void x86emuOp_jump_byte_IMM(u8 X86EMU_UNUSED(op1))
-{
- u16 target;
- s8 offset;
-
- START_OF_INSTR();
- DECODE_PRINTF("JMP\t");
- offset = (s8)fetch_byte_imm();
- target = (u16)(M.x86.R_IP + offset);
- DECODE_PRINTF2("%x\n", target);
- TRACE_AND_STEP();
- M.x86.R_IP = target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xec
-****************************************************************************/
-static void x86emuOp_in_byte_AL_DX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("IN\tAL,DX\n");
- TRACE_AND_STEP();
- M.x86.R_AL = (*sys_inb)(M.x86.R_DX);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xed
-****************************************************************************/
-static void x86emuOp_in_word_AX_DX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("IN\tEAX,DX\n");
- } else {
- DECODE_PRINTF("IN\tAX,DX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_EAX = (*sys_inl)(M.x86.R_DX);
- } else {
- M.x86.R_AX = (*sys_inw)(M.x86.R_DX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xee
-****************************************************************************/
-static void x86emuOp_out_byte_DX_AL(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("OUT\tDX,AL\n");
- TRACE_AND_STEP();
- (*sys_outb)(M.x86.R_DX, M.x86.R_AL);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xef
-****************************************************************************/
-static void x86emuOp_out_word_DX_AX(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("OUT\tDX,EAX\n");
- } else {
- DECODE_PRINTF("OUT\tDX,AX\n");
- }
- TRACE_AND_STEP();
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- (*sys_outl)(M.x86.R_DX, M.x86.R_EAX);
- } else {
- (*sys_outw)(M.x86.R_DX, M.x86.R_AX);
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf0
-****************************************************************************/
-static void x86emuOp_lock(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("LOCK:\n");
- TRACE_AND_STEP();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/*opcode 0xf1 ILLEGAL OPERATION */
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf2
-****************************************************************************/
-static void x86emuOp_repne(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("REPNE\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_PREFIX_REPNE;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf3
-****************************************************************************/
-static void x86emuOp_repe(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("REPE\n");
- TRACE_AND_STEP();
- M.x86.mode |= SYSMODE_PREFIX_REPE;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf4
-****************************************************************************/
-static void x86emuOp_halt(u8 X86EMU_UNUSED(op1))
-{
- START_OF_INSTR();
- DECODE_PRINTF("HALT\n");
- TRACE_AND_STEP();
- HALT_SYS();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf5
-****************************************************************************/
-static void x86emuOp_cmc(u8 X86EMU_UNUSED(op1))
-{
- /* complement the carry flag. */
- START_OF_INSTR();
- DECODE_PRINTF("CMC\n");
- TRACE_AND_STEP();
- TOGGLE_FLAG(F_CF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf6
-****************************************************************************/
-static void x86emuOp_opcF6_byte_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- u8 *destreg;
- uint destoffset;
- u8 destval, srcval;
-
- /* long, drawn out code follows. Double switch for a total
- of 32 cases. */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0: /* mod=00 */
- switch (rh) {
- case 0: /* test byte imm */
- DECODE_PRINTF("TEST\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%02x\n", srcval);
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- test_byte(destval, srcval);
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- DECODE_PRINTF("NOT\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = not_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 3:
- DECODE_PRINTF("NEG\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = neg_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 4:
- DECODE_PRINTF("MUL\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- mul_byte(destval);
- break;
- case 5:
- DECODE_PRINTF("IMUL\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- imul_byte(destval);
- break;
- case 6:
- DECODE_PRINTF("DIV\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- div_byte(destval);
- break;
- case 7:
- DECODE_PRINTF("IDIV\tBYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- idiv_byte(destval);
- break;
- }
- break; /* end mod==00 */
- case 1: /* mod=01 */
- switch (rh) {
- case 0: /* test byte imm */
- DECODE_PRINTF("TEST\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%02x\n", srcval);
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- test_byte(destval, srcval);
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=01 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- DECODE_PRINTF("NOT\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = not_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 3:
- DECODE_PRINTF("NEG\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = neg_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 4:
- DECODE_PRINTF("MUL\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- mul_byte(destval);
- break;
- case 5:
- DECODE_PRINTF("IMUL\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- imul_byte(destval);
- break;
- case 6:
- DECODE_PRINTF("DIV\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- div_byte(destval);
- break;
- case 7:
- DECODE_PRINTF("IDIV\tBYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- idiv_byte(destval);
- break;
- }
- break; /* end mod==01 */
- case 2: /* mod=10 */
- switch (rh) {
- case 0: /* test byte imm */
- DECODE_PRINTF("TEST\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%02x\n", srcval);
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- test_byte(destval, srcval);
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=10 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- DECODE_PRINTF("NOT\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = not_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 3:
- DECODE_PRINTF("NEG\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = neg_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 4:
- DECODE_PRINTF("MUL\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- mul_byte(destval);
- break;
- case 5:
- DECODE_PRINTF("IMUL\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- imul_byte(destval);
- break;
- case 6:
- DECODE_PRINTF("DIV\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- div_byte(destval);
- break;
- case 7:
- DECODE_PRINTF("IDIV\tBYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- idiv_byte(destval);
- break;
- }
- break; /* end mod==10 */
- case 3: /* mod=11 */
- switch (rh) {
- case 0: /* test byte imm */
- DECODE_PRINTF("TEST\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF(",");
- srcval = fetch_byte_imm();
- DECODE_PRINTF2("%02x\n", srcval);
- TRACE_AND_STEP();
- test_byte(*destreg, srcval);
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- DECODE_PRINTF("NOT\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = not_byte(*destreg);
- break;
- case 3:
- DECODE_PRINTF("NEG\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = neg_byte(*destreg);
- break;
- case 4:
- DECODE_PRINTF("MUL\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- mul_byte(*destreg); /*!!! */
- break;
- case 5:
- DECODE_PRINTF("IMUL\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- imul_byte(*destreg);
- break;
- case 6:
- DECODE_PRINTF("DIV\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- div_byte(*destreg);
- break;
- case 7:
- DECODE_PRINTF("IDIV\t");
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- idiv_byte(*destreg);
- break;
- }
- break; /* end mod==11 */
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf7
-****************************************************************************/
-static void x86emuOp_opcF7_word_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rl, rh;
- uint destoffset;
-
- /* long, drawn out code follows. Double switch for a total
- of 32 cases. */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0: /* mod=00 */
- switch (rh) {
- case 0: /* test word imm */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,srcval;
-
- DECODE_PRINTF("TEST\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_long_imm();
- DECODE_PRINTF2("%x\n", srcval);
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- test_long(destval, srcval);
- } else {
- u16 destval,srcval;
-
- DECODE_PRINTF("TEST\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_word_imm();
- DECODE_PRINTF2("%x\n", srcval);
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- test_word(destval, srcval);
- }
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F7\n");
- HALT_SYS();
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("NOT\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = not_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("NOT\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = not_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 3:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("NEG\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = neg_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("NEG\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = neg_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 4:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("MUL\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- mul_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("MUL\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- mul_word(destval);
- }
- break;
- case 5:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("IMUL\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- imul_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("IMUL\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- imul_word(destval);
- }
- break;
- case 6:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DIV\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- div_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("DIV\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- div_word(destval);
- }
- break;
- case 7:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("IDIV\tDWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- idiv_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("IDIV\tWORD PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- idiv_word(destval);
- }
- break;
- }
- break; /* end mod==00 */
- case 1: /* mod=01 */
- switch (rh) {
- case 0: /* test word imm */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,srcval;
-
- DECODE_PRINTF("TEST\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_long_imm();
- DECODE_PRINTF2("%x\n", srcval);
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- test_long(destval, srcval);
- } else {
- u16 destval,srcval;
-
- DECODE_PRINTF("TEST\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_word_imm();
- DECODE_PRINTF2("%x\n", srcval);
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- test_word(destval, srcval);
- }
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=01 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("NOT\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = not_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("NOT\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = not_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 3:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("NEG\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = neg_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("NEG\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = neg_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 4:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("MUL\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- mul_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("MUL\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- mul_word(destval);
- }
- break;
- case 5:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("IMUL\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- imul_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("IMUL\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- imul_word(destval);
- }
- break;
- case 6:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DIV\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- div_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("DIV\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- div_word(destval);
- }
- break;
- case 7:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("IDIV\tDWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- idiv_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("IDIV\tWORD PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- idiv_word(destval);
- }
- break;
- }
- break; /* end mod==01 */
- case 2: /* mod=10 */
- switch (rh) {
- case 0: /* test word imm */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval,srcval;
-
- DECODE_PRINTF("TEST\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_long_imm();
- DECODE_PRINTF2("%x\n", srcval);
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- test_long(destval, srcval);
- } else {
- u16 destval,srcval;
-
- DECODE_PRINTF("TEST\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- srcval = fetch_word_imm();
- DECODE_PRINTF2("%x\n", srcval);
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- test_word(destval, srcval);
- }
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=10 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("NOT\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = not_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("NOT\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = not_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 3:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("NEG\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = neg_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("NEG\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = neg_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 4:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("MUL\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- mul_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("MUL\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- mul_word(destval);
- }
- break;
- case 5:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("IMUL\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- imul_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("IMUL\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- imul_word(destval);
- }
- break;
- case 6:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("DIV\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- div_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("DIV\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- div_word(destval);
- }
- break;
- case 7:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- DECODE_PRINTF("IDIV\tDWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- idiv_long(destval);
- } else {
- u16 destval;
-
- DECODE_PRINTF("IDIV\tWORD PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- idiv_word(destval);
- }
- break;
- }
- break; /* end mod==10 */
- case 3: /* mod=11 */
- switch (rh) {
- case 0: /* test word imm */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- DECODE_PRINTF("TEST\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- srcval = fetch_long_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- test_long(*destreg, srcval);
- } else {
- u16 *destreg;
- u16 srcval;
-
- DECODE_PRINTF("TEST\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- srcval = fetch_word_imm();
- DECODE_PRINTF2("%x\n", srcval);
- TRACE_AND_STEP();
- test_word(*destreg, srcval);
- }
- break;
- case 1:
- DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
- HALT_SYS();
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- DECODE_PRINTF("NOT\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = not_long(*destreg);
- } else {
- u16 *destreg;
-
- DECODE_PRINTF("NOT\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = not_word(*destreg);
- }
- break;
- case 3:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- DECODE_PRINTF("NEG\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = neg_long(*destreg);
- } else {
- u16 *destreg;
-
- DECODE_PRINTF("NEG\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = neg_word(*destreg);
- }
- break;
- case 4:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- DECODE_PRINTF("MUL\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- mul_long(*destreg); /*!!! */
- } else {
- u16 *destreg;
-
- DECODE_PRINTF("MUL\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- mul_word(*destreg); /*!!! */
- }
- break;
- case 5:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- DECODE_PRINTF("IMUL\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- imul_long(*destreg);
- } else {
- u16 *destreg;
-
- DECODE_PRINTF("IMUL\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- imul_word(*destreg);
- }
- break;
- case 6:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- DECODE_PRINTF("DIV\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- div_long(*destreg);
- } else {
- u16 *destreg;
-
- DECODE_PRINTF("DIV\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- div_word(*destreg);
- }
- break;
- case 7:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- DECODE_PRINTF("IDIV\t");
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- idiv_long(*destreg);
- } else {
- u16 *destreg;
-
- DECODE_PRINTF("IDIV\t");
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- idiv_word(*destreg);
- }
- break;
- }
- break; /* end mod==11 */
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf8
-****************************************************************************/
-static void x86emuOp_clc(u8 X86EMU_UNUSED(op1))
-{
- /* clear the carry flag. */
- START_OF_INSTR();
- DECODE_PRINTF("CLC\n");
- TRACE_AND_STEP();
- CLEAR_FLAG(F_CF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xf9
-****************************************************************************/
-static void x86emuOp_stc(u8 X86EMU_UNUSED(op1))
-{
- /* set the carry flag. */
- START_OF_INSTR();
- DECODE_PRINTF("STC\n");
- TRACE_AND_STEP();
- SET_FLAG(F_CF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xfa
-****************************************************************************/
-static void x86emuOp_cli(u8 X86EMU_UNUSED(op1))
-{
- /* clear interrupts. */
- START_OF_INSTR();
- DECODE_PRINTF("CLI\n");
- TRACE_AND_STEP();
- CLEAR_FLAG(F_IF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xfb
-****************************************************************************/
-static void x86emuOp_sti(u8 X86EMU_UNUSED(op1))
-{
- /* enable interrupts. */
- START_OF_INSTR();
- DECODE_PRINTF("STI\n");
- TRACE_AND_STEP();
- SET_FLAG(F_IF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xfc
-****************************************************************************/
-static void x86emuOp_cld(u8 X86EMU_UNUSED(op1))
-{
- /* clear interrupts. */
- START_OF_INSTR();
- DECODE_PRINTF("CLD\n");
- TRACE_AND_STEP();
- CLEAR_FLAG(F_DF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xfd
-****************************************************************************/
-static void x86emuOp_std(u8 X86EMU_UNUSED(op1))
-{
- /* clear interrupts. */
- START_OF_INSTR();
- DECODE_PRINTF("STD\n");
- TRACE_AND_STEP();
- SET_FLAG(F_DF);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xfe
-****************************************************************************/
-static void x86emuOp_opcFE_byte_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rh, rl;
- u8 destval;
- uint destoffset;
- u8 *destreg;
-
- /* Yet another special case instruction. */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
-
- switch (rh) {
- case 0:
- DECODE_PRINTF("INC\t");
- break;
- case 1:
- DECODE_PRINTF("DEC\t");
- break;
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- DECODE_PRINTF2("ILLEGAL OP MAJOR OP 0xFE MINOR OP %x \n", mod);
- HALT_SYS();
- break;
- }
- }
-#endif
- switch (mod) {
- case 0:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0: /* inc word ptr ... */
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = inc_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 1: /* dec word ptr ... */
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = dec_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- }
- break;
- case 1:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0:
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = inc_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = dec_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- }
- break;
- case 2:
- DECODE_PRINTF("BYTE PTR ");
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0:
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = inc_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- case 1:
- destval = fetch_data_byte(destoffset);
- TRACE_AND_STEP();
- destval = dec_byte(destval);
- store_data_byte(destoffset, destval);
- break;
- }
- break;
- case 3:
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0:
- TRACE_AND_STEP();
- *destreg = inc_byte(*destreg);
- break;
- case 1:
- TRACE_AND_STEP();
- *destreg = dec_byte(*destreg);
- break;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0xff
-****************************************************************************/
-static void x86emuOp_opcFF_word_RM(u8 X86EMU_UNUSED(op1))
-{
- int mod, rh, rl;
- uint destoffset = 0;
- u16 *destreg;
- u16 destval,destval2;
-
- /* Yet another special case instruction. */
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
-#ifdef DEBUG
- if (DEBUG_DECODE()) {
- /* XXX DECODE_PRINTF may be changed to something more
- general, so that it is important to leave the strings
- in the same format, even though the result is that the
- above test is done twice. */
-
- switch (rh) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("INC\tDWORD PTR ");
- } else {
- DECODE_PRINTF("INC\tWORD PTR ");
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- DECODE_PRINTF("DEC\tDWORD PTR ");
- } else {
- DECODE_PRINTF("DEC\tWORD PTR ");
- }
- break;
- case 2:
- DECODE_PRINTF("CALL\t");
- break;
- case 3:
- DECODE_PRINTF("CALL\tFAR ");
- break;
- case 4:
- DECODE_PRINTF("JMP\t");
- break;
- case 5:
- DECODE_PRINTF("JMP\tFAR ");
- break;
- case 6:
- DECODE_PRINTF("PUSH\t");
- break;
- case 7:
- DECODE_PRINTF("ILLEGAL DECODING OF OPCODE FF\t");
- HALT_SYS();
- break;
- }
- }
-#endif
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0: /* inc word ptr ... */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = inc_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = inc_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 1: /* dec word ptr ... */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = dec_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = dec_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 2: /* call word ptr ... */
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- push_word(M.x86.R_IP);
- M.x86.R_IP = destval;
- break;
- case 3: /* call far ptr ... */
- destval = fetch_data_word(destoffset);
- destval2 = fetch_data_word(destoffset + 2);
- TRACE_AND_STEP();
- push_word(M.x86.R_CS);
- M.x86.R_CS = destval2;
- push_word(M.x86.R_IP);
- M.x86.R_IP = destval;
- break;
- case 4: /* jmp word ptr ... */
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- M.x86.R_IP = destval;
- break;
- case 5: /* jmp far ptr ... */
- destval = fetch_data_word(destoffset);
- destval2 = fetch_data_word(destoffset + 2);
- TRACE_AND_STEP();
- M.x86.R_IP = destval;
- M.x86.R_CS = destval2;
- break;
- case 6: /* push word ptr ... */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- push_long(destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- push_word(destval);
- }
- break;
- }
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = inc_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = inc_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = dec_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = dec_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 2: /* call word ptr ... */
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- push_word(M.x86.R_IP);
- M.x86.R_IP = destval;
- break;
- case 3: /* call far ptr ... */
- destval = fetch_data_word(destoffset);
- destval2 = fetch_data_word(destoffset + 2);
- TRACE_AND_STEP();
- push_word(M.x86.R_CS);
- M.x86.R_CS = destval2;
- push_word(M.x86.R_IP);
- M.x86.R_IP = destval;
- break;
- case 4: /* jmp word ptr ... */
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- M.x86.R_IP = destval;
- break;
- case 5: /* jmp far ptr ... */
- destval = fetch_data_word(destoffset);
- destval2 = fetch_data_word(destoffset + 2);
- TRACE_AND_STEP();
- M.x86.R_IP = destval;
- M.x86.R_CS = destval2;
- break;
- case 6: /* push word ptr ... */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- push_long(destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- push_word(destval);
- }
- break;
- }
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- switch (rh) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = inc_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = inc_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- destval = dec_long(destval);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- destval = dec_word(destval);
- store_data_word(destoffset, destval);
- }
- break;
- case 2: /* call word ptr ... */
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- push_word(M.x86.R_IP);
- M.x86.R_IP = destval;
- break;
- case 3: /* call far ptr ... */
- destval = fetch_data_word(destoffset);
- destval2 = fetch_data_word(destoffset + 2);
- TRACE_AND_STEP();
- push_word(M.x86.R_CS);
- M.x86.R_CS = destval2;
- push_word(M.x86.R_IP);
- M.x86.R_IP = destval;
- break;
- case 4: /* jmp word ptr ... */
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- M.x86.R_IP = destval;
- break;
- case 5: /* jmp far ptr ... */
- destval = fetch_data_word(destoffset);
- destval2 = fetch_data_word(destoffset + 2);
- TRACE_AND_STEP();
- M.x86.R_IP = destval;
- M.x86.R_CS = destval2;
- break;
- case 6: /* push word ptr ... */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
-
- destval = fetch_data_long(destoffset);
- TRACE_AND_STEP();
- push_long(destval);
- } else {
- u16 destval;
-
- destval = fetch_data_word(destoffset);
- TRACE_AND_STEP();
- push_word(destval);
- }
- break;
- }
- break;
- case 3:
- switch (rh) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = inc_long(*destreg);
- } else {
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = inc_word(*destreg);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = dec_long(*destreg);
- } else {
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = dec_word(*destreg);
- }
- break;
- case 2: /* call word ptr ... */
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_IP);
- M.x86.R_IP = *destreg;
- break;
- case 3: /* jmp far ptr ... */
- DECODE_PRINTF("OPERATION UNDEFINED 0XFF \n");
- TRACE_AND_STEP();
- HALT_SYS();
- break;
-
- case 4: /* jmp ... */
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- M.x86.R_IP = (u16) (*destreg);
- break;
- case 5: /* jmp far ptr ... */
- DECODE_PRINTF("OPERATION UNDEFINED 0XFF \n");
- TRACE_AND_STEP();
- HALT_SYS();
- break;
- case 6:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- push_long(*destreg);
- } else {
- u16 *destreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- push_word(*destreg);
- }
- break;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/***************************************************************************
- * Single byte operation code table:
- **************************************************************************/
-void (*x86emu_optab[256])(u8) =
-{
-/* 0x00 */ x86emuOp_add_byte_RM_R,
-/* 0x01 */ x86emuOp_add_word_RM_R,
-/* 0x02 */ x86emuOp_add_byte_R_RM,
-/* 0x03 */ x86emuOp_add_word_R_RM,
-/* 0x04 */ x86emuOp_add_byte_AL_IMM,
-/* 0x05 */ x86emuOp_add_word_AX_IMM,
-/* 0x06 */ x86emuOp_push_ES,
-/* 0x07 */ x86emuOp_pop_ES,
-
-/* 0x08 */ x86emuOp_or_byte_RM_R,
-/* 0x09 */ x86emuOp_or_word_RM_R,
-/* 0x0a */ x86emuOp_or_byte_R_RM,
-/* 0x0b */ x86emuOp_or_word_R_RM,
-/* 0x0c */ x86emuOp_or_byte_AL_IMM,
-/* 0x0d */ x86emuOp_or_word_AX_IMM,
-/* 0x0e */ x86emuOp_push_CS,
-/* 0x0f */ x86emuOp_two_byte,
-
-/* 0x10 */ x86emuOp_adc_byte_RM_R,
-/* 0x11 */ x86emuOp_adc_word_RM_R,
-/* 0x12 */ x86emuOp_adc_byte_R_RM,
-/* 0x13 */ x86emuOp_adc_word_R_RM,
-/* 0x14 */ x86emuOp_adc_byte_AL_IMM,
-/* 0x15 */ x86emuOp_adc_word_AX_IMM,
-/* 0x16 */ x86emuOp_push_SS,
-/* 0x17 */ x86emuOp_pop_SS,
-
-/* 0x18 */ x86emuOp_sbb_byte_RM_R,
-/* 0x19 */ x86emuOp_sbb_word_RM_R,
-/* 0x1a */ x86emuOp_sbb_byte_R_RM,
-/* 0x1b */ x86emuOp_sbb_word_R_RM,
-/* 0x1c */ x86emuOp_sbb_byte_AL_IMM,
-/* 0x1d */ x86emuOp_sbb_word_AX_IMM,
-/* 0x1e */ x86emuOp_push_DS,
-/* 0x1f */ x86emuOp_pop_DS,
-
-/* 0x20 */ x86emuOp_and_byte_RM_R,
-/* 0x21 */ x86emuOp_and_word_RM_R,
-/* 0x22 */ x86emuOp_and_byte_R_RM,
-/* 0x23 */ x86emuOp_and_word_R_RM,
-/* 0x24 */ x86emuOp_and_byte_AL_IMM,
-/* 0x25 */ x86emuOp_and_word_AX_IMM,
-/* 0x26 */ x86emuOp_segovr_ES,
-/* 0x27 */ x86emuOp_daa,
-
-/* 0x28 */ x86emuOp_sub_byte_RM_R,
-/* 0x29 */ x86emuOp_sub_word_RM_R,
-/* 0x2a */ x86emuOp_sub_byte_R_RM,
-/* 0x2b */ x86emuOp_sub_word_R_RM,
-/* 0x2c */ x86emuOp_sub_byte_AL_IMM,
-/* 0x2d */ x86emuOp_sub_word_AX_IMM,
-/* 0x2e */ x86emuOp_segovr_CS,
-/* 0x2f */ x86emuOp_das,
-
-/* 0x30 */ x86emuOp_xor_byte_RM_R,
-/* 0x31 */ x86emuOp_xor_word_RM_R,
-/* 0x32 */ x86emuOp_xor_byte_R_RM,
-/* 0x33 */ x86emuOp_xor_word_R_RM,
-/* 0x34 */ x86emuOp_xor_byte_AL_IMM,
-/* 0x35 */ x86emuOp_xor_word_AX_IMM,
-/* 0x36 */ x86emuOp_segovr_SS,
-/* 0x37 */ x86emuOp_aaa,
-
-/* 0x38 */ x86emuOp_cmp_byte_RM_R,
-/* 0x39 */ x86emuOp_cmp_word_RM_R,
-/* 0x3a */ x86emuOp_cmp_byte_R_RM,
-/* 0x3b */ x86emuOp_cmp_word_R_RM,
-/* 0x3c */ x86emuOp_cmp_byte_AL_IMM,
-/* 0x3d */ x86emuOp_cmp_word_AX_IMM,
-/* 0x3e */ x86emuOp_segovr_DS,
-/* 0x3f */ x86emuOp_aas,
-
-/* 0x40 */ x86emuOp_inc_AX,
-/* 0x41 */ x86emuOp_inc_CX,
-/* 0x42 */ x86emuOp_inc_DX,
-/* 0x43 */ x86emuOp_inc_BX,
-/* 0x44 */ x86emuOp_inc_SP,
-/* 0x45 */ x86emuOp_inc_BP,
-/* 0x46 */ x86emuOp_inc_SI,
-/* 0x47 */ x86emuOp_inc_DI,
-
-/* 0x48 */ x86emuOp_dec_AX,
-/* 0x49 */ x86emuOp_dec_CX,
-/* 0x4a */ x86emuOp_dec_DX,
-/* 0x4b */ x86emuOp_dec_BX,
-/* 0x4c */ x86emuOp_dec_SP,
-/* 0x4d */ x86emuOp_dec_BP,
-/* 0x4e */ x86emuOp_dec_SI,
-/* 0x4f */ x86emuOp_dec_DI,
-
-/* 0x50 */ x86emuOp_push_AX,
-/* 0x51 */ x86emuOp_push_CX,
-/* 0x52 */ x86emuOp_push_DX,
-/* 0x53 */ x86emuOp_push_BX,
-/* 0x54 */ x86emuOp_push_SP,
-/* 0x55 */ x86emuOp_push_BP,
-/* 0x56 */ x86emuOp_push_SI,
-/* 0x57 */ x86emuOp_push_DI,
-
-/* 0x58 */ x86emuOp_pop_AX,
-/* 0x59 */ x86emuOp_pop_CX,
-/* 0x5a */ x86emuOp_pop_DX,
-/* 0x5b */ x86emuOp_pop_BX,
-/* 0x5c */ x86emuOp_pop_SP,
-/* 0x5d */ x86emuOp_pop_BP,
-/* 0x5e */ x86emuOp_pop_SI,
-/* 0x5f */ x86emuOp_pop_DI,
-
-/* 0x60 */ x86emuOp_push_all,
-/* 0x61 */ x86emuOp_pop_all,
-/* 0x62 */ x86emuOp_illegal_op, /* bound */
-/* 0x63 */ x86emuOp_illegal_op, /* arpl */
-/* 0x64 */ x86emuOp_segovr_FS,
-/* 0x65 */ x86emuOp_segovr_GS,
-/* 0x66 */ x86emuOp_prefix_data,
-/* 0x67 */ x86emuOp_prefix_addr,
-
-/* 0x68 */ x86emuOp_push_word_IMM,
-/* 0x69 */ x86emuOp_imul_word_IMM,
-/* 0x6a */ x86emuOp_push_byte_IMM,
-/* 0x6b */ x86emuOp_imul_byte_IMM,
-/* 0x6c */ x86emuOp_ins_byte,
-/* 0x6d */ x86emuOp_ins_word,
-/* 0x6e */ x86emuOp_outs_byte,
-/* 0x6f */ x86emuOp_outs_word,
-
-/* 0x70 */ x86emuOp_jump_near_O,
-/* 0x71 */ x86emuOp_jump_near_NO,
-/* 0x72 */ x86emuOp_jump_near_B,
-/* 0x73 */ x86emuOp_jump_near_NB,
-/* 0x74 */ x86emuOp_jump_near_Z,
-/* 0x75 */ x86emuOp_jump_near_NZ,
-/* 0x76 */ x86emuOp_jump_near_BE,
-/* 0x77 */ x86emuOp_jump_near_NBE,
-
-/* 0x78 */ x86emuOp_jump_near_S,
-/* 0x79 */ x86emuOp_jump_near_NS,
-/* 0x7a */ x86emuOp_jump_near_P,
-/* 0x7b */ x86emuOp_jump_near_NP,
-/* 0x7c */ x86emuOp_jump_near_L,
-/* 0x7d */ x86emuOp_jump_near_NL,
-/* 0x7e */ x86emuOp_jump_near_LE,
-/* 0x7f */ x86emuOp_jump_near_NLE,
-
-/* 0x80 */ x86emuOp_opc80_byte_RM_IMM,
-/* 0x81 */ x86emuOp_opc81_word_RM_IMM,
-/* 0x82 */ x86emuOp_opc82_byte_RM_IMM,
-/* 0x83 */ x86emuOp_opc83_word_RM_IMM,
-/* 0x84 */ x86emuOp_test_byte_RM_R,
-/* 0x85 */ x86emuOp_test_word_RM_R,
-/* 0x86 */ x86emuOp_xchg_byte_RM_R,
-/* 0x87 */ x86emuOp_xchg_word_RM_R,
-
-/* 0x88 */ x86emuOp_mov_byte_RM_R,
-/* 0x89 */ x86emuOp_mov_word_RM_R,
-/* 0x8a */ x86emuOp_mov_byte_R_RM,
-/* 0x8b */ x86emuOp_mov_word_R_RM,
-/* 0x8c */ x86emuOp_mov_word_RM_SR,
-/* 0x8d */ x86emuOp_lea_word_R_M,
-/* 0x8e */ x86emuOp_mov_word_SR_RM,
-/* 0x8f */ x86emuOp_pop_RM,
-
-/* 0x90 */ x86emuOp_nop,
-/* 0x91 */ x86emuOp_xchg_word_AX_CX,
-/* 0x92 */ x86emuOp_xchg_word_AX_DX,
-/* 0x93 */ x86emuOp_xchg_word_AX_BX,
-/* 0x94 */ x86emuOp_xchg_word_AX_SP,
-/* 0x95 */ x86emuOp_xchg_word_AX_BP,
-/* 0x96 */ x86emuOp_xchg_word_AX_SI,
-/* 0x97 */ x86emuOp_xchg_word_AX_DI,
-
-/* 0x98 */ x86emuOp_cbw,
-/* 0x99 */ x86emuOp_cwd,
-/* 0x9a */ x86emuOp_call_far_IMM,
-/* 0x9b */ x86emuOp_wait,
-/* 0x9c */ x86emuOp_pushf_word,
-/* 0x9d */ x86emuOp_popf_word,
-/* 0x9e */ x86emuOp_sahf,
-/* 0x9f */ x86emuOp_lahf,
-
-/* 0xa0 */ x86emuOp_mov_AL_M_IMM,
-/* 0xa1 */ x86emuOp_mov_AX_M_IMM,
-/* 0xa2 */ x86emuOp_mov_M_AL_IMM,
-/* 0xa3 */ x86emuOp_mov_M_AX_IMM,
-/* 0xa4 */ x86emuOp_movs_byte,
-/* 0xa5 */ x86emuOp_movs_word,
-/* 0xa6 */ x86emuOp_cmps_byte,
-/* 0xa7 */ x86emuOp_cmps_word,
-/* 0xa8 */ x86emuOp_test_AL_IMM,
-/* 0xa9 */ x86emuOp_test_AX_IMM,
-/* 0xaa */ x86emuOp_stos_byte,
-/* 0xab */ x86emuOp_stos_word,
-/* 0xac */ x86emuOp_lods_byte,
-/* 0xad */ x86emuOp_lods_word,
-/* 0xac */ x86emuOp_scas_byte,
-/* 0xad */ x86emuOp_scas_word,
-
-
-/* 0xb0 */ x86emuOp_mov_byte_AL_IMM,
-/* 0xb1 */ x86emuOp_mov_byte_CL_IMM,
-/* 0xb2 */ x86emuOp_mov_byte_DL_IMM,
-/* 0xb3 */ x86emuOp_mov_byte_BL_IMM,
-/* 0xb4 */ x86emuOp_mov_byte_AH_IMM,
-/* 0xb5 */ x86emuOp_mov_byte_CH_IMM,
-/* 0xb6 */ x86emuOp_mov_byte_DH_IMM,
-/* 0xb7 */ x86emuOp_mov_byte_BH_IMM,
-
-/* 0xb8 */ x86emuOp_mov_word_AX_IMM,
-/* 0xb9 */ x86emuOp_mov_word_CX_IMM,
-/* 0xba */ x86emuOp_mov_word_DX_IMM,
-/* 0xbb */ x86emuOp_mov_word_BX_IMM,
-/* 0xbc */ x86emuOp_mov_word_SP_IMM,
-/* 0xbd */ x86emuOp_mov_word_BP_IMM,
-/* 0xbe */ x86emuOp_mov_word_SI_IMM,
-/* 0xbf */ x86emuOp_mov_word_DI_IMM,
-
-/* 0xc0 */ x86emuOp_opcC0_byte_RM_MEM,
-/* 0xc1 */ x86emuOp_opcC1_word_RM_MEM,
-/* 0xc2 */ x86emuOp_ret_near_IMM,
-/* 0xc3 */ x86emuOp_ret_near,
-/* 0xc4 */ x86emuOp_les_R_IMM,
-/* 0xc5 */ x86emuOp_lds_R_IMM,
-/* 0xc6 */ x86emuOp_mov_byte_RM_IMM,
-/* 0xc7 */ x86emuOp_mov_word_RM_IMM,
-/* 0xc8 */ x86emuOp_enter,
-/* 0xc9 */ x86emuOp_leave,
-/* 0xca */ x86emuOp_ret_far_IMM,
-/* 0xcb */ x86emuOp_ret_far,
-/* 0xcc */ x86emuOp_int3,
-/* 0xcd */ x86emuOp_int_IMM,
-/* 0xce */ x86emuOp_into,
-/* 0xcf */ x86emuOp_iret,
-
-/* 0xd0 */ x86emuOp_opcD0_byte_RM_1,
-/* 0xd1 */ x86emuOp_opcD1_word_RM_1,
-/* 0xd2 */ x86emuOp_opcD2_byte_RM_CL,
-/* 0xd3 */ x86emuOp_opcD3_word_RM_CL,
-/* 0xd4 */ x86emuOp_aam,
-/* 0xd5 */ x86emuOp_aad,
-/* 0xd6 */ x86emuOp_illegal_op, /* Undocumented SETALC instruction */
-/* 0xd7 */ x86emuOp_xlat,
-/* 0xd8 */ x86emuOp_esc_coprocess_d8,
-/* 0xd9 */ x86emuOp_esc_coprocess_d9,
-/* 0xda */ x86emuOp_esc_coprocess_da,
-/* 0xdb */ x86emuOp_esc_coprocess_db,
-/* 0xdc */ x86emuOp_esc_coprocess_dc,
-/* 0xdd */ x86emuOp_esc_coprocess_dd,
-/* 0xde */ x86emuOp_esc_coprocess_de,
-/* 0xdf */ x86emuOp_esc_coprocess_df,
-
-/* 0xe0 */ x86emuOp_loopne,
-/* 0xe1 */ x86emuOp_loope,
-/* 0xe2 */ x86emuOp_loop,
-/* 0xe3 */ x86emuOp_jcxz,
-/* 0xe4 */ x86emuOp_in_byte_AL_IMM,
-/* 0xe5 */ x86emuOp_in_word_AX_IMM,
-/* 0xe6 */ x86emuOp_out_byte_IMM_AL,
-/* 0xe7 */ x86emuOp_out_word_IMM_AX,
-
-/* 0xe8 */ x86emuOp_call_near_IMM,
-/* 0xe9 */ x86emuOp_jump_near_IMM,
-/* 0xea */ x86emuOp_jump_far_IMM,
-/* 0xeb */ x86emuOp_jump_byte_IMM,
-/* 0xec */ x86emuOp_in_byte_AL_DX,
-/* 0xed */ x86emuOp_in_word_AX_DX,
-/* 0xee */ x86emuOp_out_byte_DX_AL,
-/* 0xef */ x86emuOp_out_word_DX_AX,
-
-/* 0xf0 */ x86emuOp_lock,
-/* 0xf1 */ x86emuOp_illegal_op,
-/* 0xf2 */ x86emuOp_repne,
-/* 0xf3 */ x86emuOp_repe,
-/* 0xf4 */ x86emuOp_halt,
-/* 0xf5 */ x86emuOp_cmc,
-/* 0xf6 */ x86emuOp_opcF6_byte_RM,
-/* 0xf7 */ x86emuOp_opcF7_word_RM,
-
-/* 0xf8 */ x86emuOp_clc,
-/* 0xf9 */ x86emuOp_stc,
-/* 0xfa */ x86emuOp_cli,
-/* 0xfb */ x86emuOp_sti,
-/* 0xfc */ x86emuOp_cld,
-/* 0xfd */ x86emuOp_std,
-/* 0xfe */ x86emuOp_opcFE_byte_RM,
-/* 0xff */ x86emuOp_opcFF_word_RM,
-};
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file includes subroutines to implement the decoding
-* and emulation of all the x86 extended two-byte processor
-* instructions.
-*
-****************************************************************************/
-/* $XFree86: xc/extras/x86emu/src/x86emu/ops2.c,v 1.6tsi Exp $ */
-
-#include "x86emu/x86emui.h"
-
-/*----------------------------- Implementation ----------------------------*/
-
-/****************************************************************************
-PARAMETERS:
-op1 - Instruction op code
-
-REMARKS:
-Handles illegal opcodes.
-****************************************************************************/
-static void x86emuOp2_illegal_op(
- u8 op2)
-{
- START_OF_INSTR();
- DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
- TRACE_REGS();
- printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
- M.x86.R_CS, M.x86.R_IP-2,op2);
- HALT_SYS();
- END_OF_INSTR();
-}
-
-#define xorl(a,b) ((a) && !(b)) || (!(a) && (b))
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0x80-0x8F
-****************************************************************************/
-static void x86emuOp2_long_jump(u8 op2)
-{
- s32 target;
- char *name = 0;
- int cond = 0;
-
- /* conditional jump to word offset. */
- START_OF_INSTR();
- switch (op2) {
- case 0x80:
- name = "JO\t";
- cond = ACCESS_FLAG(F_OF);
- break;
- case 0x81:
- name = "JNO\t";
- cond = !ACCESS_FLAG(F_OF);
- break;
- case 0x82:
- name = "JB\t";
- cond = ACCESS_FLAG(F_CF);
- break;
- case 0x83:
- name = "JNB\t";
- cond = !ACCESS_FLAG(F_CF);
- break;
- case 0x84:
- name = "JZ\t";
- cond = ACCESS_FLAG(F_ZF);
- break;
- case 0x85:
- name = "JNZ\t";
- cond = !ACCESS_FLAG(F_ZF);
- break;
- case 0x86:
- name = "JBE\t";
- cond = ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF);
- break;
- case 0x87:
- name = "JNBE\t";
- cond = !(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF));
- break;
- case 0x88:
- name = "JS\t";
- cond = ACCESS_FLAG(F_SF);
- break;
- case 0x89:
- name = "JNS\t";
- cond = !ACCESS_FLAG(F_SF);
- break;
- case 0x8a:
- name = "JP\t";
- cond = ACCESS_FLAG(F_PF);
- break;
- case 0x8b:
- name = "JNP\t";
- cond = !ACCESS_FLAG(F_PF);
- break;
- case 0x8c:
- name = "JL\t";
- cond = xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));
- break;
- case 0x8d:
- name = "JNL\t";
- cond = xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));
- break;
- case 0x8e:
- name = "JLE\t";
- cond = (xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||
- ACCESS_FLAG(F_ZF));
- break;
- case 0x8f:
- name = "JNLE\t";
- cond = !(xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||
- ACCESS_FLAG(F_ZF));
- break;
- }
- DECODE_PRINTF(name);
- (void)name;
- target = (s16) fetch_word_imm();
- target += (s16) M.x86.R_IP;
- DECODE_PRINTF2("%04x\n", target);
- TRACE_AND_STEP();
- if (cond)
- M.x86.R_IP = (u16)target;
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0x90-0x9F
-****************************************************************************/
-static void x86emuOp2_set_byte(u8 op2)
-{
- int mod, rl, rh;
- uint destoffset;
- u8 *destreg;
- char *name = 0;
- int cond = 0;
-
- START_OF_INSTR();
- switch (op2) {
- case 0x90:
- name = "SETO\t";
- cond = ACCESS_FLAG(F_OF);
- break;
- case 0x91:
- name = "SETNO\t";
- cond = !ACCESS_FLAG(F_OF);
- break;
- case 0x92:
- name = "SETB\t";
- cond = ACCESS_FLAG(F_CF);
- break;
- case 0x93:
- name = "SETNB\t";
- cond = !ACCESS_FLAG(F_CF);
- break;
- case 0x94:
- name = "SETZ\t";
- cond = ACCESS_FLAG(F_ZF);
- break;
- case 0x95:
- name = "SETNZ\t";
- cond = !ACCESS_FLAG(F_ZF);
- break;
- case 0x96:
- name = "SETBE\t";
- cond = ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF);
- break;
- case 0x97:
- name = "SETNBE\t";
- cond = !(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF));
- break;
- case 0x98:
- name = "SETS\t";
- cond = ACCESS_FLAG(F_SF);
- break;
- case 0x99:
- name = "SETNS\t";
- cond = !ACCESS_FLAG(F_SF);
- break;
- case 0x9a:
- name = "SETP\t";
- cond = ACCESS_FLAG(F_PF);
- break;
- case 0x9b:
- name = "SETNP\t";
- cond = !ACCESS_FLAG(F_PF);
- break;
- case 0x9c:
- name = "SETL\t";
- cond = xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));
- break;
- case 0x9d:
- name = "SETNL\t";
- cond = xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));
- break;
- case 0x9e:
- name = "SETLE\t";
- cond = (xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||
- ACCESS_FLAG(F_ZF));
- break;
- case 0x9f:
- name = "SETNLE\t";
- cond = !(xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||
- ACCESS_FLAG(F_ZF));
- break;
- }
- DECODE_PRINTF(name);
- (void)name;
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destoffset = decode_rm00_address(rl);
- TRACE_AND_STEP();
- store_data_byte(destoffset, cond ? 0x01 : 0x00);
- break;
- case 1:
- destoffset = decode_rm01_address(rl);
- TRACE_AND_STEP();
- store_data_byte(destoffset, cond ? 0x01 : 0x00);
- break;
- case 2:
- destoffset = decode_rm10_address(rl);
- TRACE_AND_STEP();
- store_data_byte(destoffset, cond ? 0x01 : 0x00);
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_BYTE_REGISTER(rl);
- TRACE_AND_STEP();
- *destreg = cond ? 0x01 : 0x00;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa0
-****************************************************************************/
-static void x86emuOp2_push_FS(u8 X86EMU_UNUSED(op2))
-{
- START_OF_INSTR();
- DECODE_PRINTF("PUSH\tFS\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_FS);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa1
-****************************************************************************/
-static void x86emuOp2_pop_FS(u8 X86EMU_UNUSED(op2))
-{
- START_OF_INSTR();
- DECODE_PRINTF("POP\tFS\n");
- TRACE_AND_STEP();
- M.x86.R_FS = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa3
-****************************************************************************/
-static void x86emuOp2_bt_R(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- int bit,disp;
-
- START_OF_INSTR();
- DECODE_PRINTF("BT\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval;
- u32 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);
- } else {
- u16 srcval;
- u16 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval;
- u32 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);
- } else {
- u16 srcval;
- u16 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval;
- u32 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);
- } else {
- u16 srcval;
- u16 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg,*shiftreg;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- CONDITIONAL_SET_FLAG(*srcreg & (0x1 << bit),F_CF);
- } else {
- u16 *srcreg,*shiftreg;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- CONDITIONAL_SET_FLAG(*srcreg & (0x1 << bit),F_CF);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa4
-****************************************************************************/
-static void x86emuOp2_shld_IMM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint destoffset;
- u8 shift;
-
- START_OF_INSTR();
- DECODE_PRINTF("SHLD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shld_long(destval,*shiftreg,shift);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shld_word(destval,*shiftreg,shift);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shld_long(destval,*shiftreg,shift);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shld_word(destval,*shiftreg,shift);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shld_long(destval,*shiftreg,shift);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shld_word(destval,*shiftreg,shift);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*shiftreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- *destreg = shld_long(*destreg,*shiftreg,shift);
- } else {
- u16 *destreg,*shiftreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- *destreg = shld_word(*destreg,*shiftreg,shift);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa5
-****************************************************************************/
-static void x86emuOp2_shld_CL(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("SHLD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shld_long(destval,*shiftreg,M.x86.R_CL);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shld_word(destval,*shiftreg,M.x86.R_CL);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shld_long(destval,*shiftreg,M.x86.R_CL);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shld_word(destval,*shiftreg,M.x86.R_CL);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shld_long(destval,*shiftreg,M.x86.R_CL);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shld_word(destval,*shiftreg,M.x86.R_CL);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*shiftreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- *destreg = shld_long(*destreg,*shiftreg,M.x86.R_CL);
- } else {
- u16 *destreg,*shiftreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- *destreg = shld_word(*destreg,*shiftreg,M.x86.R_CL);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa8
-****************************************************************************/
-static void x86emuOp2_push_GS(u8 X86EMU_UNUSED(op2))
-{
- START_OF_INSTR();
- DECODE_PRINTF("PUSH\tGS\n");
- TRACE_AND_STEP();
- push_word(M.x86.R_GS);
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xa9
-****************************************************************************/
-static void x86emuOp2_pop_GS(u8 X86EMU_UNUSED(op2))
-{
- START_OF_INSTR();
- DECODE_PRINTF("POP\tGS\n");
- TRACE_AND_STEP();
- M.x86.R_GS = pop_word();
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-#if 0
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xaa
-****************************************************************************/
-static void x86emuOp2_bts_R(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- int bit,disp;
-
- START_OF_INSTR();
- DECODE_PRINTF("BTS\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval | mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, srcval | mask);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval | mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, srcval | mask);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval | mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, srcval | mask);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg,*shiftreg;
- u32 mask;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- *srcreg |= mask;
- } else {
- u16 *srcreg,*shiftreg;
- u16 mask;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- *srcreg |= mask;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-#endif
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xac
-****************************************************************************/
-static void x86emuOp2_shrd_IMM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint destoffset;
- u8 shift;
-
- START_OF_INSTR();
- DECODE_PRINTF("SHLD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shrd_long(destval,*shiftreg,shift);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shrd_word(destval,*shiftreg,shift);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shrd_long(destval,*shiftreg,shift);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shrd_word(destval,*shiftreg,shift);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shrd_long(destval,*shiftreg,shift);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shrd_word(destval,*shiftreg,shift);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*shiftreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- *destreg = shrd_long(*destreg,*shiftreg,shift);
- } else {
- u16 *destreg,*shiftreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- DECODE_PRINTF2("%d\n", shift);
- TRACE_AND_STEP();
- *destreg = shrd_word(*destreg,*shiftreg,shift);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xad
-****************************************************************************/
-static void x86emuOp2_shrd_CL(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint destoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("SHLD\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shrd_long(destval,*shiftreg,M.x86.R_CL);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shrd_word(destval,*shiftreg,M.x86.R_CL);
- store_data_word(destoffset, destval);
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shrd_long(destval,*shiftreg,M.x86.R_CL);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shrd_word(destval,*shiftreg,M.x86.R_CL);
- store_data_word(destoffset, destval);
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 destval;
- u32 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_long(destoffset);
- destval = shrd_long(destval,*shiftreg,M.x86.R_CL);
- store_data_long(destoffset, destval);
- } else {
- u16 destval;
- u16 *shiftreg;
-
- destoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- destval = fetch_data_word(destoffset);
- destval = shrd_word(destval,*shiftreg,M.x86.R_CL);
- store_data_word(destoffset, destval);
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*shiftreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- *destreg = shrd_long(*destreg,*shiftreg,M.x86.R_CL);
- } else {
- u16 *destreg,*shiftreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",CL\n");
- TRACE_AND_STEP();
- *destreg = shrd_word(*destreg,*shiftreg,M.x86.R_CL);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xaf
-****************************************************************************/
-static void x86emuOp2_imul_R_RM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("IMUL\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_long(srcoffset);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)*destreg,(s32)srcval);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- TRACE_AND_STEP();
- res = (s16)*destreg * (s16)srcval;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_long(srcoffset);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)*destreg,(s32)srcval);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- TRACE_AND_STEP();
- res = (s16)*destreg * (s16)srcval;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_long(srcoffset);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)*destreg,(s32)srcval);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg;
- u16 srcval;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- TRACE_AND_STEP();
- res = (s16)*destreg * (s16)srcval;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg,*srcreg;
- u32 res_lo,res_hi;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- TRACE_AND_STEP();
- imul_long_direct(&res_lo,&res_hi,(s32)*destreg,(s32)*srcreg);
- if (res_hi != 0) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u32)res_lo;
- } else {
- u16 *destreg,*srcreg;
- u32 res;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- res = (s16)*destreg * (s16)*srcreg;
- if (res > 0xFFFF) {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- }
- *destreg = (u16)res;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xb2
-****************************************************************************/
-static void x86emuOp2_lss_R_IMM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rh, rl;
- u16 *dstreg;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("LSS\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_SS = fetch_data_word(srcoffset + 2);
- break;
- case 1:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_SS = fetch_data_word(srcoffset + 2);
- break;
- case 2:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_SS = fetch_data_word(srcoffset + 2);
- break;
- case 3: /* register to register */
- /* UNDEFINED! */
- TRACE_AND_STEP();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xb3
-****************************************************************************/
-static void x86emuOp2_btr_R(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- int bit,disp;
-
- START_OF_INSTR();
- DECODE_PRINTF("BTR\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval & ~mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, (u16)(srcval & ~mask));
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval & ~mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, (u16)(srcval & ~mask));
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval & ~mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, (u16)(srcval & ~mask));
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg,*shiftreg;
- u32 mask;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- *srcreg &= ~mask;
- } else {
- u16 *srcreg,*shiftreg;
- u16 mask;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- *srcreg &= ~mask;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xb4
-****************************************************************************/
-static void x86emuOp2_lfs_R_IMM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rh, rl;
- u16 *dstreg;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("LFS\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_FS = fetch_data_word(srcoffset + 2);
- break;
- case 1:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_FS = fetch_data_word(srcoffset + 2);
- break;
- case 2:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_FS = fetch_data_word(srcoffset + 2);
- break;
- case 3: /* register to register */
- /* UNDEFINED! */
- TRACE_AND_STEP();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xb5
-****************************************************************************/
-static void x86emuOp2_lgs_R_IMM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rh, rl;
- u16 *dstreg;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("LGS\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_GS = fetch_data_word(srcoffset + 2);
- break;
- case 1:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_GS = fetch_data_word(srcoffset + 2);
- break;
- case 2:
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *dstreg = fetch_data_word(srcoffset);
- M.x86.R_GS = fetch_data_word(srcoffset + 2);
- break;
- case 3: /* register to register */
- /* UNDEFINED! */
- TRACE_AND_STEP();
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xb6
-****************************************************************************/
-static void x86emuOp2_movzx_byte_R_RM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOVZX\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_byte(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u8 *srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- } else {
- u16 *destreg;
- u8 *srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xb7
-****************************************************************************/
-static void x86emuOp2_movzx_word_R_RM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- u32 *destreg;
- u32 srcval;
- u16 *srcreg;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOVZX\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 1:
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 2:
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = fetch_data_word(srcoffset);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = *srcreg;
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xba
-****************************************************************************/
-static void x86emuOp2_btX_I(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- int bit;
-
- START_OF_INSTR();
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (rh) {
- case 4:
- DECODE_PRINTF("BT\t");
- break;
- case 5:
- DECODE_PRINTF("BTS\t");
- break;
- case 6:
- DECODE_PRINTF("BTR\t");
- break;
- case 7:
- DECODE_PRINTF("BTC\t");
- break;
- default:
- DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
- TRACE_REGS();
- printk("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",
- M.x86.R_CS, M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);
- HALT_SYS();
- }
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, mask;
- u8 shift;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0x1F;
- srcval = fetch_data_long(srcoffset);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- switch (rh) {
- case 5:
- store_data_long(srcoffset, srcval | mask);
- break;
- case 6:
- store_data_long(srcoffset, srcval & ~mask);
- break;
- case 7:
- store_data_long(srcoffset, srcval ^ mask);
- break;
- default:
- break;
- }
- } else {
- u16 srcval, mask;
- u8 shift;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0xF;
- srcval = fetch_data_word(srcoffset);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- switch (rh) {
- case 5:
- store_data_word(srcoffset, srcval | mask);
- break;
- case 6:
- store_data_word(srcoffset, srcval & ~mask);
- break;
- case 7:
- store_data_word(srcoffset, srcval ^ mask);
- break;
- default:
- break;
- }
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, mask;
- u8 shift;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0x1F;
- srcval = fetch_data_long(srcoffset);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- switch (rh) {
- case 5:
- store_data_long(srcoffset, srcval | mask);
- break;
- case 6:
- store_data_long(srcoffset, srcval & ~mask);
- break;
- case 7:
- store_data_long(srcoffset, srcval ^ mask);
- break;
- default:
- break;
- }
- } else {
- u16 srcval, mask;
- u8 shift;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0xF;
- srcval = fetch_data_word(srcoffset);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- switch (rh) {
- case 5:
- store_data_word(srcoffset, srcval | mask);
- break;
- case 6:
- store_data_word(srcoffset, srcval & ~mask);
- break;
- case 7:
- store_data_word(srcoffset, srcval ^ mask);
- break;
- default:
- break;
- }
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, mask;
- u8 shift;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0x1F;
- srcval = fetch_data_long(srcoffset);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- switch (rh) {
- case 5:
- store_data_long(srcoffset, srcval | mask);
- break;
- case 6:
- store_data_long(srcoffset, srcval & ~mask);
- break;
- case 7:
- store_data_long(srcoffset, srcval ^ mask);
- break;
- default:
- break;
- }
- } else {
- u16 srcval, mask;
- u8 shift;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0xF;
- srcval = fetch_data_word(srcoffset);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- switch (rh) {
- case 5:
- store_data_word(srcoffset, srcval | mask);
- break;
- case 6:
- store_data_word(srcoffset, srcval & ~mask);
- break;
- case 7:
- store_data_word(srcoffset, srcval ^ mask);
- break;
- default:
- break;
- }
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg;
- u32 mask;
- u8 shift;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0x1F;
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- switch (rh) {
- case 5:
- *srcreg |= mask;
- break;
- case 6:
- *srcreg &= ~mask;
- break;
- case 7:
- *srcreg ^= mask;
- break;
- default:
- break;
- }
- } else {
- u16 *srcreg;
- u16 mask;
- u8 shift;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shift = fetch_byte_imm();
- TRACE_AND_STEP();
- bit = shift & 0xF;
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- switch (rh) {
- case 5:
- *srcreg |= mask;
- break;
- case 6:
- *srcreg &= ~mask;
- break;
- case 7:
- *srcreg ^= mask;
- break;
- default:
- break;
- }
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xbb
-****************************************************************************/
-static void x86emuOp2_btc_R(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- int bit,disp;
-
- START_OF_INSTR();
- DECODE_PRINTF("BTC\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval ^ mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, (u16)(srcval ^ mask));
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval ^ mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, (u16)(srcval ^ mask));
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval,mask;
- u32 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- disp = (s16)*shiftreg >> 5;
- srcval = fetch_data_long(srcoffset+disp);
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_long(srcoffset+disp, srcval ^ mask);
- } else {
- u16 srcval,mask;
- u16 *shiftreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- disp = (s16)*shiftreg >> 4;
- srcval = fetch_data_word(srcoffset+disp);
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(srcval & mask,F_CF);
- store_data_word(srcoffset+disp, (u16)(srcval ^ mask));
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg,*shiftreg;
- u32 mask;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0x1F;
- mask = (0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- *srcreg ^= mask;
- } else {
- u16 *srcreg,*shiftreg;
- u16 mask;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- shiftreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- bit = *shiftreg & 0xF;
- mask = (u16)(0x1 << bit);
- CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);
- *srcreg ^= mask;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xbc
-****************************************************************************/
-static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("BSF\n");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch(mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, *dstreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_long(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
- if ((srcval >> *dstreg) & 1) break;
- } else {
- u16 srcval, *dstreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_word(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
- if ((srcval >> *dstreg) & 1) break;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, *dstreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_long(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
- if ((srcval >> *dstreg) & 1) break;
- } else {
- u16 srcval, *dstreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_word(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
- if ((srcval >> *dstreg) & 1) break;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, *dstreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_long(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
- if ((srcval >> *dstreg) & 1) break;
- } else {
- u16 srcval, *dstreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_word(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
- if ((srcval >> *dstreg) & 1) break;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg, *dstreg;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
- if ((*srcreg >> *dstreg) & 1) break;
- } else {
- u16 *srcreg, *dstreg;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
- for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
- if ((*srcreg >> *dstreg) & 1) break;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xbd
-****************************************************************************/
-static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("BSF\n");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch(mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, *dstreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_long(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
- if ((srcval >> *dstreg) & 1) break;
- } else {
- u16 srcval, *dstreg;
-
- srcoffset = decode_rm00_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_word(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
- if ((srcval >> *dstreg) & 1) break;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, *dstreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_long(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
- if ((srcval >> *dstreg) & 1) break;
- } else {
- u16 srcval, *dstreg;
-
- srcoffset = decode_rm01_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_word(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
- if ((srcval >> *dstreg) & 1) break;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 srcval, *dstreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_long(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
- if ((srcval >> *dstreg) & 1) break;
- } else {
- u16 srcval, *dstreg;
-
- srcoffset = decode_rm10_address(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- srcval = fetch_data_word(srcoffset);
- CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
- for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
- if ((srcval >> *dstreg) & 1) break;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *srcreg, *dstreg;
-
- srcreg = DECODE_RM_LONG_REGISTER(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_LONG_REGISTER(rh);
- TRACE_AND_STEP();
- CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
- for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
- if ((*srcreg >> *dstreg) & 1) break;
- } else {
- u16 *srcreg, *dstreg;
-
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF(",");
- dstreg = DECODE_RM_WORD_REGISTER(rh);
- TRACE_AND_STEP();
- CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
- for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
- if ((*srcreg >> *dstreg) & 1) break;
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xbe
-****************************************************************************/
-static void x86emuOp2_movsx_byte_R_RM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOVSX\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = (s32)((s8)fetch_data_byte(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = (s16)((s8)fetch_data_byte(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 1:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = (s32)((s8)fetch_data_byte(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = (s16)((s8)fetch_data_byte(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 2:
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u32 srcval;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = (s32)((s8)fetch_data_byte(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- } else {
- u16 *destreg;
- u16 srcval;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = (s16)((s8)fetch_data_byte(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- }
- break;
- case 3: /* register to register */
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg;
- u8 *srcreg;
-
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = (s32)((s8)*srcreg);
- } else {
- u16 *destreg;
- u8 *srcreg;
-
- destreg = DECODE_RM_WORD_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_BYTE_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = (s16)((s8)*srcreg);
- }
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/****************************************************************************
-REMARKS:
-Handles opcode 0x0f,0xbf
-****************************************************************************/
-static void x86emuOp2_movsx_word_R_RM(u8 X86EMU_UNUSED(op2))
-{
- int mod, rl, rh;
- uint srcoffset;
- u32 *destreg;
- u32 srcval;
- u16 *srcreg;
-
- START_OF_INSTR();
- DECODE_PRINTF("MOVSX\t");
- FETCH_DECODE_MODRM(mod, rh, rl);
- switch (mod) {
- case 0:
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm00_address(rl);
- srcval = (s32)((s16)fetch_data_word(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 1:
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm01_address(rl);
- srcval = (s32)((s16)fetch_data_word(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 2:
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcoffset = decode_rm10_address(rl);
- srcval = (s32)((s16)fetch_data_word(srcoffset));
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = srcval;
- break;
- case 3: /* register to register */
- destreg = DECODE_RM_LONG_REGISTER(rh);
- DECODE_PRINTF(",");
- srcreg = DECODE_RM_WORD_REGISTER(rl);
- DECODE_PRINTF("\n");
- TRACE_AND_STEP();
- *destreg = (s32)((s16)*srcreg);
- break;
- }
- DECODE_CLEAR_SEGOVR();
- END_OF_INSTR();
-}
-
-/***************************************************************************
- * Double byte operation code table:
- **************************************************************************/
-void (*x86emu_optab2[256])(u8) =
-{
-/* 0x00 */ x86emuOp2_illegal_op, /* Group F (ring 0 PM) */
-/* 0x01 */ x86emuOp2_illegal_op, /* Group G (ring 0 PM) */
-/* 0x02 */ x86emuOp2_illegal_op, /* lar (ring 0 PM) */
-/* 0x03 */ x86emuOp2_illegal_op, /* lsl (ring 0 PM) */
-/* 0x04 */ x86emuOp2_illegal_op,
-/* 0x05 */ x86emuOp2_illegal_op, /* loadall (undocumented) */
-/* 0x06 */ x86emuOp2_illegal_op, /* clts (ring 0 PM) */
-/* 0x07 */ x86emuOp2_illegal_op, /* loadall (undocumented) */
-/* 0x08 */ x86emuOp2_illegal_op, /* invd (ring 0 PM) */
-/* 0x09 */ x86emuOp2_illegal_op, /* wbinvd (ring 0 PM) */
-/* 0x0a */ x86emuOp2_illegal_op,
-/* 0x0b */ x86emuOp2_illegal_op,
-/* 0x0c */ x86emuOp2_illegal_op,
-/* 0x0d */ x86emuOp2_illegal_op,
-/* 0x0e */ x86emuOp2_illegal_op,
-/* 0x0f */ x86emuOp2_illegal_op,
-
-/* 0x10 */ x86emuOp2_illegal_op,
-/* 0x11 */ x86emuOp2_illegal_op,
-/* 0x12 */ x86emuOp2_illegal_op,
-/* 0x13 */ x86emuOp2_illegal_op,
-/* 0x14 */ x86emuOp2_illegal_op,
-/* 0x15 */ x86emuOp2_illegal_op,
-/* 0x16 */ x86emuOp2_illegal_op,
-/* 0x17 */ x86emuOp2_illegal_op,
-/* 0x18 */ x86emuOp2_illegal_op,
-/* 0x19 */ x86emuOp2_illegal_op,
-/* 0x1a */ x86emuOp2_illegal_op,
-/* 0x1b */ x86emuOp2_illegal_op,
-/* 0x1c */ x86emuOp2_illegal_op,
-/* 0x1d */ x86emuOp2_illegal_op,
-/* 0x1e */ x86emuOp2_illegal_op,
-/* 0x1f */ x86emuOp2_illegal_op,
-
-/* 0x20 */ x86emuOp2_illegal_op, /* mov reg32,creg (ring 0 PM) */
-/* 0x21 */ x86emuOp2_illegal_op, /* mov reg32,dreg (ring 0 PM) */
-/* 0x22 */ x86emuOp2_illegal_op, /* mov creg,reg32 (ring 0 PM) */
-/* 0x23 */ x86emuOp2_illegal_op, /* mov dreg,reg32 (ring 0 PM) */
-/* 0x24 */ x86emuOp2_illegal_op, /* mov reg32,treg (ring 0 PM) */
-/* 0x25 */ x86emuOp2_illegal_op,
-/* 0x26 */ x86emuOp2_illegal_op, /* mov treg,reg32 (ring 0 PM) */
-/* 0x27 */ x86emuOp2_illegal_op,
-/* 0x28 */ x86emuOp2_illegal_op,
-/* 0x29 */ x86emuOp2_illegal_op,
-/* 0x2a */ x86emuOp2_illegal_op,
-/* 0x2b */ x86emuOp2_illegal_op,
-/* 0x2c */ x86emuOp2_illegal_op,
-/* 0x2d */ x86emuOp2_illegal_op,
-/* 0x2e */ x86emuOp2_illegal_op,
-/* 0x2f */ x86emuOp2_illegal_op,
-
-/* 0x30 */ x86emuOp2_illegal_op,
-/* 0x31 */ x86emuOp2_illegal_op,
-/* 0x32 */ x86emuOp2_illegal_op,
-/* 0x33 */ x86emuOp2_illegal_op,
-/* 0x34 */ x86emuOp2_illegal_op,
-/* 0x35 */ x86emuOp2_illegal_op,
-/* 0x36 */ x86emuOp2_illegal_op,
-/* 0x37 */ x86emuOp2_illegal_op,
-/* 0x38 */ x86emuOp2_illegal_op,
-/* 0x39 */ x86emuOp2_illegal_op,
-/* 0x3a */ x86emuOp2_illegal_op,
-/* 0x3b */ x86emuOp2_illegal_op,
-/* 0x3c */ x86emuOp2_illegal_op,
-/* 0x3d */ x86emuOp2_illegal_op,
-/* 0x3e */ x86emuOp2_illegal_op,
-/* 0x3f */ x86emuOp2_illegal_op,
-
-/* 0x40 */ x86emuOp2_illegal_op,
-/* 0x41 */ x86emuOp2_illegal_op,
-/* 0x42 */ x86emuOp2_illegal_op,
-/* 0x43 */ x86emuOp2_illegal_op,
-/* 0x44 */ x86emuOp2_illegal_op,
-/* 0x45 */ x86emuOp2_illegal_op,
-/* 0x46 */ x86emuOp2_illegal_op,
-/* 0x47 */ x86emuOp2_illegal_op,
-/* 0x48 */ x86emuOp2_illegal_op,
-/* 0x49 */ x86emuOp2_illegal_op,
-/* 0x4a */ x86emuOp2_illegal_op,
-/* 0x4b */ x86emuOp2_illegal_op,
-/* 0x4c */ x86emuOp2_illegal_op,
-/* 0x4d */ x86emuOp2_illegal_op,
-/* 0x4e */ x86emuOp2_illegal_op,
-/* 0x4f */ x86emuOp2_illegal_op,
-
-/* 0x50 */ x86emuOp2_illegal_op,
-/* 0x51 */ x86emuOp2_illegal_op,
-/* 0x52 */ x86emuOp2_illegal_op,
-/* 0x53 */ x86emuOp2_illegal_op,
-/* 0x54 */ x86emuOp2_illegal_op,
-/* 0x55 */ x86emuOp2_illegal_op,
-/* 0x56 */ x86emuOp2_illegal_op,
-/* 0x57 */ x86emuOp2_illegal_op,
-/* 0x58 */ x86emuOp2_illegal_op,
-/* 0x59 */ x86emuOp2_illegal_op,
-/* 0x5a */ x86emuOp2_illegal_op,
-/* 0x5b */ x86emuOp2_illegal_op,
-/* 0x5c */ x86emuOp2_illegal_op,
-/* 0x5d */ x86emuOp2_illegal_op,
-/* 0x5e */ x86emuOp2_illegal_op,
-/* 0x5f */ x86emuOp2_illegal_op,
-
-/* 0x60 */ x86emuOp2_illegal_op,
-/* 0x61 */ x86emuOp2_illegal_op,
-/* 0x62 */ x86emuOp2_illegal_op,
-/* 0x63 */ x86emuOp2_illegal_op,
-/* 0x64 */ x86emuOp2_illegal_op,
-/* 0x65 */ x86emuOp2_illegal_op,
-/* 0x66 */ x86emuOp2_illegal_op,
-/* 0x67 */ x86emuOp2_illegal_op,
-/* 0x68 */ x86emuOp2_illegal_op,
-/* 0x69 */ x86emuOp2_illegal_op,
-/* 0x6a */ x86emuOp2_illegal_op,
-/* 0x6b */ x86emuOp2_illegal_op,
-/* 0x6c */ x86emuOp2_illegal_op,
-/* 0x6d */ x86emuOp2_illegal_op,
-/* 0x6e */ x86emuOp2_illegal_op,
-/* 0x6f */ x86emuOp2_illegal_op,
-
-/* 0x70 */ x86emuOp2_illegal_op,
-/* 0x71 */ x86emuOp2_illegal_op,
-/* 0x72 */ x86emuOp2_illegal_op,
-/* 0x73 */ x86emuOp2_illegal_op,
-/* 0x74 */ x86emuOp2_illegal_op,
-/* 0x75 */ x86emuOp2_illegal_op,
-/* 0x76 */ x86emuOp2_illegal_op,
-/* 0x77 */ x86emuOp2_illegal_op,
-/* 0x78 */ x86emuOp2_illegal_op,
-/* 0x79 */ x86emuOp2_illegal_op,
-/* 0x7a */ x86emuOp2_illegal_op,
-/* 0x7b */ x86emuOp2_illegal_op,
-/* 0x7c */ x86emuOp2_illegal_op,
-/* 0x7d */ x86emuOp2_illegal_op,
-/* 0x7e */ x86emuOp2_illegal_op,
-/* 0x7f */ x86emuOp2_illegal_op,
-
-/* 0x80 */ x86emuOp2_long_jump,
-/* 0x81 */ x86emuOp2_long_jump,
-/* 0x82 */ x86emuOp2_long_jump,
-/* 0x83 */ x86emuOp2_long_jump,
-/* 0x84 */ x86emuOp2_long_jump,
-/* 0x85 */ x86emuOp2_long_jump,
-/* 0x86 */ x86emuOp2_long_jump,
-/* 0x87 */ x86emuOp2_long_jump,
-/* 0x88 */ x86emuOp2_long_jump,
-/* 0x89 */ x86emuOp2_long_jump,
-/* 0x8a */ x86emuOp2_long_jump,
-/* 0x8b */ x86emuOp2_long_jump,
-/* 0x8c */ x86emuOp2_long_jump,
-/* 0x8d */ x86emuOp2_long_jump,
-/* 0x8e */ x86emuOp2_long_jump,
-/* 0x8f */ x86emuOp2_long_jump,
-
-/* 0x90 */ x86emuOp2_set_byte,
-/* 0x91 */ x86emuOp2_set_byte,
-/* 0x92 */ x86emuOp2_set_byte,
-/* 0x93 */ x86emuOp2_set_byte,
-/* 0x94 */ x86emuOp2_set_byte,
-/* 0x95 */ x86emuOp2_set_byte,
-/* 0x96 */ x86emuOp2_set_byte,
-/* 0x97 */ x86emuOp2_set_byte,
-/* 0x98 */ x86emuOp2_set_byte,
-/* 0x99 */ x86emuOp2_set_byte,
-/* 0x9a */ x86emuOp2_set_byte,
-/* 0x9b */ x86emuOp2_set_byte,
-/* 0x9c */ x86emuOp2_set_byte,
-/* 0x9d */ x86emuOp2_set_byte,
-/* 0x9e */ x86emuOp2_set_byte,
-/* 0x9f */ x86emuOp2_set_byte,
-
-/* 0xa0 */ x86emuOp2_push_FS,
-/* 0xa1 */ x86emuOp2_pop_FS,
-/* 0xa2 */ x86emuOp2_illegal_op,
-/* 0xa3 */ x86emuOp2_bt_R,
-/* 0xa4 */ x86emuOp2_shld_IMM,
-/* 0xa5 */ x86emuOp2_shld_CL,
-/* 0xa6 */ x86emuOp2_illegal_op,
-/* 0xa7 */ x86emuOp2_illegal_op,
-/* 0xa8 */ x86emuOp2_push_GS,
-/* 0xa9 */ x86emuOp2_pop_GS,
-/* 0xaa */ x86emuOp2_illegal_op,
-/* 0xab */ x86emuOp2_bt_R,
-/* 0xac */ x86emuOp2_shrd_IMM,
-/* 0xad */ x86emuOp2_shrd_CL,
-/* 0xae */ x86emuOp2_illegal_op,
-/* 0xaf */ x86emuOp2_imul_R_RM,
-
-/* 0xb0 */ x86emuOp2_illegal_op, /* TODO: cmpxchg */
-/* 0xb1 */ x86emuOp2_illegal_op, /* TODO: cmpxchg */
-/* 0xb2 */ x86emuOp2_lss_R_IMM,
-/* 0xb3 */ x86emuOp2_btr_R,
-/* 0xb4 */ x86emuOp2_lfs_R_IMM,
-/* 0xb5 */ x86emuOp2_lgs_R_IMM,
-/* 0xb6 */ x86emuOp2_movzx_byte_R_RM,
-/* 0xb7 */ x86emuOp2_movzx_word_R_RM,
-/* 0xb8 */ x86emuOp2_illegal_op,
-/* 0xb9 */ x86emuOp2_illegal_op,
-/* 0xba */ x86emuOp2_btX_I,
-/* 0xbb */ x86emuOp2_btc_R,
-/* 0xbc */ x86emuOp2_bsf,
-/* 0xbd */ x86emuOp2_bsr,
-/* 0xbe */ x86emuOp2_movsx_byte_R_RM,
-/* 0xbf */ x86emuOp2_movsx_word_R_RM,
-
-/* 0xc0 */ x86emuOp2_illegal_op, /* TODO: xadd */
-/* 0xc1 */ x86emuOp2_illegal_op, /* TODO: xadd */
-/* 0xc2 */ x86emuOp2_illegal_op,
-/* 0xc3 */ x86emuOp2_illegal_op,
-/* 0xc4 */ x86emuOp2_illegal_op,
-/* 0xc5 */ x86emuOp2_illegal_op,
-/* 0xc6 */ x86emuOp2_illegal_op,
-/* 0xc7 */ x86emuOp2_illegal_op,
-/* 0xc8 */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xc9 */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xca */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xcb */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xcc */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xcd */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xce */ x86emuOp2_illegal_op, /* TODO: bswap */
-/* 0xcf */ x86emuOp2_illegal_op, /* TODO: bswap */
-
-/* 0xd0 */ x86emuOp2_illegal_op,
-/* 0xd1 */ x86emuOp2_illegal_op,
-/* 0xd2 */ x86emuOp2_illegal_op,
-/* 0xd3 */ x86emuOp2_illegal_op,
-/* 0xd4 */ x86emuOp2_illegal_op,
-/* 0xd5 */ x86emuOp2_illegal_op,
-/* 0xd6 */ x86emuOp2_illegal_op,
-/* 0xd7 */ x86emuOp2_illegal_op,
-/* 0xd8 */ x86emuOp2_illegal_op,
-/* 0xd9 */ x86emuOp2_illegal_op,
-/* 0xda */ x86emuOp2_illegal_op,
-/* 0xdb */ x86emuOp2_illegal_op,
-/* 0xdc */ x86emuOp2_illegal_op,
-/* 0xdd */ x86emuOp2_illegal_op,
-/* 0xde */ x86emuOp2_illegal_op,
-/* 0xdf */ x86emuOp2_illegal_op,
-
-/* 0xe0 */ x86emuOp2_illegal_op,
-/* 0xe1 */ x86emuOp2_illegal_op,
-/* 0xe2 */ x86emuOp2_illegal_op,
-/* 0xe3 */ x86emuOp2_illegal_op,
-/* 0xe4 */ x86emuOp2_illegal_op,
-/* 0xe5 */ x86emuOp2_illegal_op,
-/* 0xe6 */ x86emuOp2_illegal_op,
-/* 0xe7 */ x86emuOp2_illegal_op,
-/* 0xe8 */ x86emuOp2_illegal_op,
-/* 0xe9 */ x86emuOp2_illegal_op,
-/* 0xea */ x86emuOp2_illegal_op,
-/* 0xeb */ x86emuOp2_illegal_op,
-/* 0xec */ x86emuOp2_illegal_op,
-/* 0xed */ x86emuOp2_illegal_op,
-/* 0xee */ x86emuOp2_illegal_op,
-/* 0xef */ x86emuOp2_illegal_op,
-
-/* 0xf0 */ x86emuOp2_illegal_op,
-/* 0xf1 */ x86emuOp2_illegal_op,
-/* 0xf2 */ x86emuOp2_illegal_op,
-/* 0xf3 */ x86emuOp2_illegal_op,
-/* 0xf4 */ x86emuOp2_illegal_op,
-/* 0xf5 */ x86emuOp2_illegal_op,
-/* 0xf6 */ x86emuOp2_illegal_op,
-/* 0xf7 */ x86emuOp2_illegal_op,
-/* 0xf8 */ x86emuOp2_illegal_op,
-/* 0xf9 */ x86emuOp2_illegal_op,
-/* 0xfa */ x86emuOp2_illegal_op,
-/* 0xfb */ x86emuOp2_illegal_op,
-/* 0xfc */ x86emuOp2_illegal_op,
-/* 0xfd */ x86emuOp2_illegal_op,
-/* 0xfe */ x86emuOp2_illegal_op,
-/* 0xff */ x86emuOp2_illegal_op,
-};
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file contains the code to implement the primitive
-* machine operations used by the emulation code in ops.c
-*
-* Carry Chain Calculation
-*
-* This represents a somewhat expensive calculation which is
-* apparently required to emulate the setting of the OF and AF flag.
-* The latter is not so important, but the former is. The overflow
-* flag is the XOR of the top two bits of the carry chain for an
-* addition (similar for subtraction). Since we do not want to
-* simulate the addition in a bitwise manner, we try to calculate the
-* carry chain given the two operands and the result.
-*
-* So, given the following table, which represents the addition of two
-* bits, we can derive a formula for the carry chain.
-*
-* a b cin r cout
-* 0 0 0 0 0
-* 0 0 1 1 0
-* 0 1 0 1 0
-* 0 1 1 0 1
-* 1 0 0 1 0
-* 1 0 1 0 1
-* 1 1 0 0 1
-* 1 1 1 1 1
-*
-* Construction of table for cout:
-*
-* ab
-* r \ 00 01 11 10
-* |------------------
-* 0 | 0 1 1 1
-* 1 | 0 0 1 0
-*
-* By inspection, one gets: cc = ab + r'(a + b)
-*
-* That represents alot of operations, but NO CHOICE....
-*
-* Borrow Chain Calculation.
-*
-* The following table represents the subtraction of two bits, from
-* which we can derive a formula for the borrow chain.
-*
-* a b bin r bout
-* 0 0 0 0 0
-* 0 0 1 1 1
-* 0 1 0 1 1
-* 0 1 1 0 1
-* 1 0 0 1 0
-* 1 0 1 0 0
-* 1 1 0 0 0
-* 1 1 1 1 1
-*
-* Construction of table for cout:
-*
-* ab
-* r \ 00 01 11 10
-* |------------------
-* 0 | 0 1 0 0
-* 1 | 1 1 1 0
-*
-* By inspection, one gets: bc = a'b + r(a' + b)
-*
-****************************************************************************/
-
-#define PRIM_OPS_NO_REDEFINE_ASM
-#include "x86emu/x86emui.h"
-
-/*------------------------- Global Variables ------------------------------*/
-
-static u32 x86emu_parity_tab[8] =
-{
- 0x96696996,
- 0x69969669,
- 0x69969669,
- 0x96696996,
- 0x69969669,
- 0x96696996,
- 0x96696996,
- 0x69969669,
-};
-
-#define PARITY(x) (((x86emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0)
-#define XOR2(x) (((x) ^ ((x)>>1)) & 0x1)
-
-/*----------------------------- Implementation ----------------------------*/
-
-/****************************************************************************
-REMARKS:
-Implements the AAA instruction and side effects.
-****************************************************************************/
-u16 aaa_word(u16 d)
-{
- u16 res;
- if ((d & 0xf) > 0x9 || ACCESS_FLAG(F_AF)) {
- d += 0x6;
- d += 0x100;
- SET_FLAG(F_AF);
- SET_FLAG(F_CF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- }
- res = (u16)(d & 0xFF0F);
- CLEAR_FLAG(F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the AAA instruction and side effects.
-****************************************************************************/
-u16 aas_word(u16 d)
-{
- u16 res;
- if ((d & 0xf) > 0x9 || ACCESS_FLAG(F_AF)) {
- d -= 0x6;
- d -= 0x100;
- SET_FLAG(F_AF);
- SET_FLAG(F_CF);
- } else {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- }
- res = (u16)(d & 0xFF0F);
- CLEAR_FLAG(F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the AAD instruction and side effects.
-****************************************************************************/
-u16 aad_word(u16 d)
-{
- u16 l;
- u8 hb, lb;
-
- hb = (u8)((d >> 8) & 0xff);
- lb = (u8)((d & 0xff));
- l = (u16)((lb + 10 * hb) & 0xFF);
-
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(l & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(l == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(l & 0xff), F_PF);
- return l;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the AAM instruction and side effects.
-****************************************************************************/
-u16 aam_word(u8 d)
-{
- u16 h, l;
-
- h = (u16)(d / 10);
- l = (u16)(d % 10);
- l |= (u16)(h << 8);
-
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(l & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(l == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(l & 0xff), F_PF);
- return l;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ADC instruction and side effects.
-****************************************************************************/
-u8 adc_byte(u8 d, u8 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- if (ACCESS_FLAG(F_CF))
- res = 1 + d + s;
- else
- res = d + s;
-
- CONDITIONAL_SET_FLAG(res & 0x100, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (s & d) | ((~res) & (s | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ADC instruction and side effects.
-****************************************************************************/
-u16 adc_word(u16 d, u16 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- if (ACCESS_FLAG(F_CF))
- res = 1 + d + s;
- else
- res = d + s;
-
- CONDITIONAL_SET_FLAG(res & 0x10000, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (s & d) | ((~res) & (s | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ADC instruction and side effects.
-****************************************************************************/
-u32 adc_long(u32 d, u32 s)
-{
- register u32 lo; /* all operands in native machine order */
- register u32 hi;
- register u32 res;
- register u32 cc;
-
- if (ACCESS_FLAG(F_CF)) {
- lo = 1 + (d & 0xFFFF) + (s & 0xFFFF);
- res = 1 + d + s;
- }
- else {
- lo = (d & 0xFFFF) + (s & 0xFFFF);
- res = d + s;
- }
- hi = (lo >> 16) + (d >> 16) + (s >> 16);
-
- CONDITIONAL_SET_FLAG(hi & 0x10000, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (s & d) | ((~res) & (s | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ADD instruction and side effects.
-****************************************************************************/
-u8 add_byte(u8 d, u8 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- res = d + s;
- CONDITIONAL_SET_FLAG(res & 0x100, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (s & d) | ((~res) & (s | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ADD instruction and side effects.
-****************************************************************************/
-u16 add_word(u16 d, u16 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- res = d + s;
- CONDITIONAL_SET_FLAG(res & 0x10000, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (s & d) | ((~res) & (s | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ADD instruction and side effects.
-****************************************************************************/
-u32 add_long(u32 d, u32 s)
-{
- register u32 lo; /* all operands in native machine order */
- register u32 hi;
- register u32 res;
- register u32 cc;
-
- lo = (d & 0xFFFF) + (s & 0xFFFF);
- res = d + s;
- hi = (lo >> 16) + (d >> 16) + (s >> 16);
-
- CONDITIONAL_SET_FLAG(hi & 0x10000, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (s & d) | ((~res) & (s | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
-
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the AND instruction and side effects.
-****************************************************************************/
-u8 and_byte(u8 d, u8 s)
-{
- register u8 res; /* all operands in native machine order */
-
- res = d & s;
-
- /* set the flags */
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the AND instruction and side effects.
-****************************************************************************/
-u16 and_word(u16 d, u16 s)
-{
- register u16 res; /* all operands in native machine order */
-
- res = d & s;
-
- /* set the flags */
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the AND instruction and side effects.
-****************************************************************************/
-u32 and_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
-
- res = d & s;
-
- /* set the flags */
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the CMP instruction and side effects.
-****************************************************************************/
-u8 cmp_byte(u8 d, u8 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - s;
- CLEAR_FLAG(F_CF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return d;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the CMP instruction and side effects.
-****************************************************************************/
-u16 cmp_word(u16 d, u16 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return d;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the CMP instruction and side effects.
-****************************************************************************/
-u32 cmp_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return d;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DAA instruction and side effects.
-****************************************************************************/
-u8 daa_byte(u8 d)
-{
- u32 res = d;
- if ((d & 0xf) > 9 || ACCESS_FLAG(F_AF)) {
- res += 6;
- SET_FLAG(F_AF);
- }
- if (res > 0x9F || ACCESS_FLAG(F_CF)) {
- res += 0x60;
- SET_FLAG(F_CF);
- }
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xFF) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DAS instruction and side effects.
-****************************************************************************/
-u8 das_byte(u8 d)
-{
- if ((d & 0xf) > 9 || ACCESS_FLAG(F_AF)) {
- d -= 6;
- SET_FLAG(F_AF);
- }
- if (d > 0x9F || ACCESS_FLAG(F_CF)) {
- d -= 0x60;
- SET_FLAG(F_CF);
- }
- CONDITIONAL_SET_FLAG(d & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(d == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(d & 0xff), F_PF);
- return d;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DEC instruction and side effects.
-****************************************************************************/
-u8 dec_byte(u8 d)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - 1;
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- /* based on sub_byte, uses s==1. */
- bc = (res & (~d | 1)) | (~d & 1);
- /* carry flag unchanged */
- CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DEC instruction and side effects.
-****************************************************************************/
-u16 dec_word(u16 d)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - 1;
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- /* based on the sub_byte routine, with s==1 */
- bc = (res & (~d | 1)) | (~d & 1);
- /* carry flag unchanged */
- CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DEC instruction and side effects.
-****************************************************************************/
-u32 dec_long(u32 d)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - 1;
-
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | 1)) | (~d & 1);
- /* carry flag unchanged */
- CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the INC instruction and side effects.
-****************************************************************************/
-u8 inc_byte(u8 d)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- res = d + 1;
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = ((1 & d) | (~res)) & (1 | d);
- CONDITIONAL_SET_FLAG(XOR2(cc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the INC instruction and side effects.
-****************************************************************************/
-u16 inc_word(u16 d)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- res = d + 1;
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (1 & d) | ((~res) & (1 | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the INC instruction and side effects.
-****************************************************************************/
-u32 inc_long(u32 d)
-{
- register u32 res; /* all operands in native machine order */
- register u32 cc;
-
- res = d + 1;
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the carry chain SEE NOTE AT TOP. */
- cc = (1 & d) | ((~res) & (1 | d));
- CONDITIONAL_SET_FLAG(XOR2(cc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OR instruction and side effects.
-****************************************************************************/
-u8 or_byte(u8 d, u8 s)
-{
- register u8 res; /* all operands in native machine order */
-
- res = d | s;
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OR instruction and side effects.
-****************************************************************************/
-u16 or_word(u16 d, u16 s)
-{
- register u16 res; /* all operands in native machine order */
-
- res = d | s;
- /* set the carry flag to be bit 8 */
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OR instruction and side effects.
-****************************************************************************/
-u32 or_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
-
- res = d | s;
-
- /* set the carry flag to be bit 8 */
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OR instruction and side effects.
-****************************************************************************/
-u8 neg_byte(u8 s)
-{
- register u8 res;
- register u8 bc;
-
- CONDITIONAL_SET_FLAG(s != 0, F_CF);
- res = (u8)-s;
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res), F_PF);
- /* calculate the borrow chain --- modified such that d=0.
- substitutiing d=0 into bc= res&(~d|s)|(~d&s);
- (the one used for sub) and simplifying, since ~d=0xff...,
- ~d|s == 0xffff..., and res&0xfff... == res. Similarly
- ~d&s == s. So the simplified result is: */
- bc = res | s;
- CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OR instruction and side effects.
-****************************************************************************/
-u16 neg_word(u16 s)
-{
- register u16 res;
- register u16 bc;
-
- CONDITIONAL_SET_FLAG(s != 0, F_CF);
- res = (u16)-s;
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain --- modified such that d=0.
- substitutiing d=0 into bc= res&(~d|s)|(~d&s);
- (the one used for sub) and simplifying, since ~d=0xff...,
- ~d|s == 0xffff..., and res&0xfff... == res. Similarly
- ~d&s == s. So the simplified result is: */
- bc = res | s;
- CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OR instruction and side effects.
-****************************************************************************/
-u32 neg_long(u32 s)
-{
- register u32 res;
- register u32 bc;
-
- CONDITIONAL_SET_FLAG(s != 0, F_CF);
- res = (u32)-s;
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain --- modified such that d=0.
- substitutiing d=0 into bc= res&(~d|s)|(~d&s);
- (the one used for sub) and simplifying, since ~d=0xff...,
- ~d|s == 0xffff..., and res&0xfff... == res. Similarly
- ~d&s == s. So the simplified result is: */
- bc = res | s;
- CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the NOT instruction and side effects.
-****************************************************************************/
-u8 not_byte(u8 s)
-{
- return ~s;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the NOT instruction and side effects.
-****************************************************************************/
-u16 not_word(u16 s)
-{
- return ~s;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the NOT instruction and side effects.
-****************************************************************************/
-u32 not_long(u32 s)
-{
- return ~s;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the RCL instruction and side effects.
-****************************************************************************/
-u8 rcl_byte(u8 d, u8 s)
-{
- register unsigned int res, cnt, mask, cf;
-
- /* s is the rotate distance. It varies from 0 - 8. */
- /* have
-
- CF B_7 B_6 B_5 B_4 B_3 B_2 B_1 B_0
-
- want to rotate through the carry by "s" bits. We could
- loop, but that's inefficient. So the width is 9,
- and we split into three parts:
-
- The new carry flag (was B_n)
- the stuff in B_n-1 .. B_0
- the stuff in B_7 .. B_n+1
-
- The new rotate is done mod 9, and given this,
- for a rotation of n bits (mod 9) the new carry flag is
- then located n bits from the MSB. The low part is
- then shifted up cnt bits, and the high part is or'd
- in. Using CAPS for new values, and lowercase for the
- original values, this can be expressed as:
-
- IF n > 0
- 1) CF <- b_(8-n)
- 2) B_(7) .. B_(n) <- b_(8-(n+1)) .. b_0
- 3) B_(n-1) <- cf
- 4) B_(n-2) .. B_0 <- b_7 .. b_(8-(n-1))
- */
- res = d;
- if ((cnt = s % 9) != 0) {
- /* extract the new CARRY FLAG. */
- /* CF <- b_(8-n) */
- cf = (d >> (8 - cnt)) & 0x1;
-
- /* get the low stuff which rotated
- into the range B_7 .. B_cnt */
- /* B_(7) .. B_(n) <- b_(8-(n+1)) .. b_0 */
- /* note that the right hand side done by the mask */
- res = (d << cnt) & 0xff;
-
- /* now the high stuff which rotated around
- into the positions B_cnt-2 .. B_0 */
- /* B_(n-2) .. B_0 <- b_7 .. b_(8-(n-1)) */
- /* shift it downward, 7-(n-2) = 9-n positions.
- and mask off the result before or'ing in.
- */
- mask = (1 << (cnt - 1)) - 1;
- res |= (d >> (9 - cnt)) & mask;
-
- /* if the carry flag was set, or it in. */
- if (ACCESS_FLAG(F_CF)) { /* carry flag is set */
- /* B_(n-1) <- cf */
- res |= 1 << (cnt - 1);
- }
- /* set the new carry flag, based on the variable "cf" */
- CONDITIONAL_SET_FLAG(cf, F_CF);
- /* OVERFLOW is set *IFF* cnt==1, then it is the
- xor of CF and the most significant bit. Blecck. */
- /* parenthesized this expression since it appears to
- be causing OF to be misset */
- CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 6) & 0x2)),
- F_OF);
-
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the RCL instruction and side effects.
-****************************************************************************/
-u16 rcl_word(u16 d, u8 s)
-{
- register unsigned int res, cnt, mask, cf;
-
- res = d;
- if ((cnt = s % 17) != 0) {
- cf = (d >> (16 - cnt)) & 0x1;
- res = (d << cnt) & 0xffff;
- mask = (1 << (cnt - 1)) - 1;
- res |= (d >> (17 - cnt)) & mask;
- if (ACCESS_FLAG(F_CF)) {
- res |= 1 << (cnt - 1);
- }
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 14) & 0x2)),
- F_OF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the RCL instruction and side effects.
-****************************************************************************/
-u32 rcl_long(u32 d, u8 s)
-{
- register u32 res, cnt, mask, cf;
-
- res = d;
- if ((cnt = s % 33) != 0) {
- cf = (d >> (32 - cnt)) & 0x1;
- res = (d << cnt) & 0xffffffff;
- mask = (1 << (cnt - 1)) - 1;
- res |= (d >> (33 - cnt)) & mask;
- if (ACCESS_FLAG(F_CF)) { /* carry flag is set */
- res |= 1 << (cnt - 1);
- }
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 30) & 0x2)),
- F_OF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the RCR instruction and side effects.
-****************************************************************************/
-u8 rcr_byte(u8 d, u8 s)
-{
- u32 res, cnt;
- u32 mask, cf, ocf = 0;
-
- /* rotate right through carry */
- /*
- s is the rotate distance. It varies from 0 - 8.
- d is the byte object rotated.
-
- have
-
- CF B_7 B_6 B_5 B_4 B_3 B_2 B_1 B_0
-
- The new rotate is done mod 9, and given this,
- for a rotation of n bits (mod 9) the new carry flag is
- then located n bits from the LSB. The low part is
- then shifted up cnt bits, and the high part is or'd
- in. Using CAPS for new values, and lowercase for the
- original values, this can be expressed as:
-
- IF n > 0
- 1) CF <- b_(n-1)
- 2) B_(8-(n+1)) .. B_(0) <- b_(7) .. b_(n)
- 3) B_(8-n) <- cf
- 4) B_(7) .. B_(8-(n-1)) <- b_(n-2) .. b_(0)
- */
- res = d;
- if ((cnt = s % 9) != 0) {
- /* extract the new CARRY FLAG. */
- /* CF <- b_(n-1) */
- if (cnt == 1) {
- cf = d & 0x1;
- /* note hackery here. Access_flag(..) evaluates to either
- 0 if flag not set
- non-zero if flag is set.
- doing access_flag(..) != 0 casts that into either
- 0..1 in any representation of the flags register
- (i.e. packed bit array or unpacked.)
- */
- ocf = ACCESS_FLAG(F_CF) != 0;
- } else
- cf = (d >> (cnt - 1)) & 0x1;
-
- /* B_(8-(n+1)) .. B_(0) <- b_(7) .. b_n */
- /* note that the right hand side done by the mask
- This is effectively done by shifting the
- object to the right. The result must be masked,
- in case the object came in and was treated
- as a negative number. Needed??? */
-
- mask = (1 << (8 - cnt)) - 1;
- res = (d >> cnt) & mask;
-
- /* now the high stuff which rotated around
- into the positions B_cnt-2 .. B_0 */
- /* B_(7) .. B_(8-(n-1)) <- b_(n-2) .. b_(0) */
- /* shift it downward, 7-(n-2) = 9-n positions.
- and mask off the result before or'ing in.
- */
- res |= (d << (9 - cnt));
-
- /* if the carry flag was set, or it in. */
- if (ACCESS_FLAG(F_CF)) { /* carry flag is set */
- /* B_(8-n) <- cf */
- res |= 1 << (8 - cnt);
- }
- /* set the new carry flag, based on the variable "cf" */
- CONDITIONAL_SET_FLAG(cf, F_CF);
- /* OVERFLOW is set *IFF* cnt==1, then it is the
- xor of CF and the most significant bit. Blecck. */
- /* parenthesized... */
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 6) & 0x2)),
- F_OF);
- }
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the RCR instruction and side effects.
-****************************************************************************/
-u16 rcr_word(u16 d, u8 s)
-{
- u32 res, cnt;
- u32 mask, cf, ocf = 0;
-
- /* rotate right through carry */
- res = d;
- if ((cnt = s % 17) != 0) {
- if (cnt == 1) {
- cf = d & 0x1;
- ocf = ACCESS_FLAG(F_CF) != 0;
- } else
- cf = (d >> (cnt - 1)) & 0x1;
- mask = (1 << (16 - cnt)) - 1;
- res = (d >> cnt) & mask;
- res |= (d << (17 - cnt));
- if (ACCESS_FLAG(F_CF)) {
- res |= 1 << (16 - cnt);
- }
- CONDITIONAL_SET_FLAG(cf, F_CF);
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 14) & 0x2)),
- F_OF);
- }
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the RCR instruction and side effects.
-****************************************************************************/
-u32 rcr_long(u32 d, u8 s)
-{
- u32 res, cnt;
- u32 mask, cf, ocf = 0;
-
- /* rotate right through carry */
- res = d;
- if ((cnt = s % 33) != 0) {
- if (cnt == 1) {
- cf = d & 0x1;
- ocf = ACCESS_FLAG(F_CF) != 0;
- } else
- cf = (d >> (cnt - 1)) & 0x1;
- mask = (1 << (32 - cnt)) - 1;
- res = (d >> cnt) & mask;
- if (cnt != 1)
- res |= (d << (33 - cnt));
- if (ACCESS_FLAG(F_CF)) { /* carry flag is set */
- res |= 1 << (32 - cnt);
- }
- CONDITIONAL_SET_FLAG(cf, F_CF);
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 30) & 0x2)),
- F_OF);
- }
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ROL instruction and side effects.
-****************************************************************************/
-u8 rol_byte(u8 d, u8 s)
-{
- register unsigned int res, cnt, mask;
-
- /* rotate left */
- /*
- s is the rotate distance. It varies from 0 - 8.
- d is the byte object rotated.
-
- have
-
- CF B_7 ... B_0
-
- The new rotate is done mod 8.
- Much simpler than the "rcl" or "rcr" operations.
-
- IF n > 0
- 1) B_(7) .. B_(n) <- b_(8-(n+1)) .. b_(0)
- 2) B_(n-1) .. B_(0) <- b_(7) .. b_(8-n)
- */
- res = d;
- if ((cnt = s % 8) != 0) {
- /* B_(7) .. B_(n) <- b_(8-(n+1)) .. b_(0) */
- res = (d << cnt);
-
- /* B_(n-1) .. B_(0) <- b_(7) .. b_(8-n) */
- mask = (1 << cnt) - 1;
- res |= (d >> (8 - cnt)) & mask;
-
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
- /* OVERFLOW is set *IFF* s==1, then it is the
- xor of CF and the most significant bit. Blecck. */
- CONDITIONAL_SET_FLAG(s == 1 &&
- XOR2((res & 0x1) + ((res >> 6) & 0x2)),
- F_OF);
- } if (s != 0) {
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ROL instruction and side effects.
-****************************************************************************/
-u16 rol_word(u16 d, u8 s)
-{
- register unsigned int res, cnt, mask;
-
- res = d;
- if ((cnt = s % 16) != 0) {
- res = (d << cnt);
- mask = (1 << cnt) - 1;
- res |= (d >> (16 - cnt)) & mask;
- CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
- CONDITIONAL_SET_FLAG(s == 1 &&
- XOR2((res & 0x1) + ((res >> 14) & 0x2)),
- F_OF);
- } if (s != 0) {
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ROL instruction and side effects.
-****************************************************************************/
-u32 rol_long(u32 d, u8 s)
-{
- register u32 res, cnt, mask;
-
- res = d;
- if ((cnt = s % 32) != 0) {
- res = (d << cnt);
- mask = (1 << cnt) - 1;
- res |= (d >> (32 - cnt)) & mask;
- CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
- CONDITIONAL_SET_FLAG(s == 1 &&
- XOR2((res & 0x1) + ((res >> 30) & 0x2)),
- F_OF);
- } if (s != 0) {
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ROR instruction and side effects.
-****************************************************************************/
-u8 ror_byte(u8 d, u8 s)
-{
- register unsigned int res, cnt, mask;
-
- /* rotate right */
- /*
- s is the rotate distance. It varies from 0 - 8.
- d is the byte object rotated.
-
- have
-
- B_7 ... B_0
-
- The rotate is done mod 8.
-
- IF n > 0
- 1) B_(8-(n+1)) .. B_(0) <- b_(7) .. b_(n)
- 2) B_(7) .. B_(8-n) <- b_(n-1) .. b_(0)
- */
- res = d;
- if ((cnt = s % 8) != 0) { /* not a typo, do nada if cnt==0 */
- /* B_(7) .. B_(8-n) <- b_(n-1) .. b_(0) */
- res = (d << (8 - cnt));
-
- /* B_(8-(n+1)) .. B_(0) <- b_(7) .. b_(n) */
- mask = (1 << (8 - cnt)) - 1;
- res |= (d >> (cnt)) & mask;
-
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x80, F_CF);
- /* OVERFLOW is set *IFF* s==1, then it is the
- xor of the two most significant bits. Blecck. */
- CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 6), F_OF);
- } else if (s != 0) {
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x80, F_CF);
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ROR instruction and side effects.
-****************************************************************************/
-u16 ror_word(u16 d, u8 s)
-{
- register unsigned int res, cnt, mask;
-
- res = d;
- if ((cnt = s % 16) != 0) {
- res = (d << (16 - cnt));
- mask = (1 << (16 - cnt)) - 1;
- res |= (d >> (cnt)) & mask;
- CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);
- CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 14), F_OF);
- } else if (s != 0) {
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the ROR instruction and side effects.
-****************************************************************************/
-u32 ror_long(u32 d, u8 s)
-{
- register u32 res, cnt, mask;
-
- res = d;
- if ((cnt = s % 32) != 0) {
- res = (d << (32 - cnt));
- mask = (1 << (32 - cnt)) - 1;
- res |= (d >> (cnt)) & mask;
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);
- CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 30), F_OF);
- } else if (s != 0) {
- /* set the new carry flag, Note that it is the low order
- bit of the result!!! */
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHL instruction and side effects.
-****************************************************************************/
-u8 shl_byte(u8 d, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 8) {
- cnt = s % 8;
-
- /* last bit shifted out goes into carry flag */
- if (cnt > 0) {
- res = d << cnt;
- cf = d & (1 << (8 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = (u8) d;
- }
-
- if (cnt == 1) {
- /* Needs simplification. */
- CONDITIONAL_SET_FLAG(
- (((res & 0x80) == 0x80) ^
- (ACCESS_FLAG(F_CF) != 0)),
- /* was (M.x86.R_FLG&F_CF)==F_CF)), */
- F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80, F_CF);
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_PF);
- SET_FLAG(F_ZF);
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHL instruction and side effects.
-****************************************************************************/
-u16 shl_word(u16 d, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 16) {
- cnt = s % 16;
- if (cnt > 0) {
- res = d << cnt;
- cf = d & (1 << (16 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = (u16) d;
- }
-
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(
- (((res & 0x8000) == 0x8000) ^
- (ACCESS_FLAG(F_CF) != 0)),
- F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CONDITIONAL_SET_FLAG((d << (s-1)) & 0x8000, F_CF);
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_PF);
- SET_FLAG(F_ZF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHL instruction and side effects.
-****************************************************************************/
-u32 shl_long(u32 d, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 32) {
- cnt = s % 32;
- if (cnt > 0) {
- res = d << cnt;
- cf = d & (1 << (32 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG((((res & 0x80000000) == 0x80000000) ^
- (ACCESS_FLAG(F_CF) != 0)), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80000000, F_CF);
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_PF);
- SET_FLAG(F_ZF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHR instruction and side effects.
-****************************************************************************/
-u8 shr_byte(u8 d, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 8) {
- cnt = s % 8;
- if (cnt > 0) {
- cf = d & (1 << (cnt - 1));
- res = d >> cnt;
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = (u8) d;
- }
-
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(res >> 6), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CONDITIONAL_SET_FLAG((d >> (s-1)) & 0x1, F_CF);
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_PF);
- SET_FLAG(F_ZF);
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHR instruction and side effects.
-****************************************************************************/
-u16 shr_word(u16 d, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 16) {
- cnt = s % 16;
- if (cnt > 0) {
- cf = d & (1 << (cnt - 1));
- res = d >> cnt;
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
-
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(res >> 14), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHR instruction and side effects.
-****************************************************************************/
-u32 shr_long(u32 d, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 32) {
- cnt = s % 32;
- if (cnt > 0) {
- cf = d & (1 << (cnt - 1));
- res = d >> cnt;
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(res >> 30), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SAR instruction and side effects.
-****************************************************************************/
-u8 sar_byte(u8 d, u8 s)
-{
- unsigned int cnt, res, cf, mask, sf;
-
- res = d;
- sf = d & 0x80;
- cnt = s % 8;
- if (cnt > 0 && cnt < 8) {
- mask = (1 << (8 - cnt)) - 1;
- cf = d & (1 << (cnt - 1));
- res = (d >> cnt) & mask;
- CONDITIONAL_SET_FLAG(cf, F_CF);
- if (sf) {
- res |= ~mask;
- }
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- } else if (cnt >= 8) {
- if (sf) {
- res = 0xff;
- SET_FLAG(F_CF);
- CLEAR_FLAG(F_ZF);
- SET_FLAG(F_SF);
- SET_FLAG(F_PF);
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- }
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SAR instruction and side effects.
-****************************************************************************/
-u16 sar_word(u16 d, u8 s)
-{
- unsigned int cnt, res, cf, mask, sf;
-
- sf = d & 0x8000;
- cnt = s % 16;
- res = d;
- if (cnt > 0 && cnt < 16) {
- mask = (1 << (16 - cnt)) - 1;
- cf = d & (1 << (cnt - 1));
- res = (d >> cnt) & mask;
- CONDITIONAL_SET_FLAG(cf, F_CF);
- if (sf) {
- res |= ~mask;
- }
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else if (cnt >= 16) {
- if (sf) {
- res = 0xffff;
- SET_FLAG(F_CF);
- CLEAR_FLAG(F_ZF);
- SET_FLAG(F_SF);
- SET_FLAG(F_PF);
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SAR instruction and side effects.
-****************************************************************************/
-u32 sar_long(u32 d, u8 s)
-{
- u32 cnt, res, cf, mask, sf;
-
- sf = d & 0x80000000;
- cnt = s % 32;
- res = d;
- if (cnt > 0 && cnt < 32) {
- mask = (1 << (32 - cnt)) - 1;
- cf = d & (1 << (cnt - 1));
- res = (d >> cnt) & mask;
- CONDITIONAL_SET_FLAG(cf, F_CF);
- if (sf) {
- res |= ~mask;
- }
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else if (cnt >= 32) {
- if (sf) {
- res = 0xffffffff;
- SET_FLAG(F_CF);
- CLEAR_FLAG(F_ZF);
- SET_FLAG(F_SF);
- SET_FLAG(F_PF);
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHLD instruction and side effects.
-****************************************************************************/
-u16 shld_word (u16 d, u16 fill, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 16) {
- cnt = s % 16;
- if (cnt > 0) {
- res = (d << cnt) | (fill >> (16-cnt));
- cf = d & (1 << (16 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG((((res & 0x8000) == 0x8000) ^
- (ACCESS_FLAG(F_CF) != 0)), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CONDITIONAL_SET_FLAG((d << (s-1)) & 0x8000, F_CF);
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_PF);
- SET_FLAG(F_ZF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHLD instruction and side effects.
-****************************************************************************/
-u32 shld_long (u32 d, u32 fill, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 32) {
- cnt = s % 32;
- if (cnt > 0) {
- res = (d << cnt) | (fill >> (32-cnt));
- cf = d & (1 << (32 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG((((res & 0x80000000) == 0x80000000) ^
- (ACCESS_FLAG(F_CF) != 0)), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80000000, F_CF);
- CLEAR_FLAG(F_OF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_PF);
- SET_FLAG(F_ZF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHRD instruction and side effects.
-****************************************************************************/
-u16 shrd_word (u16 d, u16 fill, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 16) {
- cnt = s % 16;
- if (cnt > 0) {
- cf = d & (1 << (cnt - 1));
- res = (d >> cnt) | (fill << (16 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
-
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(res >> 14), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SHRD instruction and side effects.
-****************************************************************************/
-u32 shrd_long (u32 d, u32 fill, u8 s)
-{
- unsigned int cnt, res, cf;
-
- if (s < 32) {
- cnt = s % 32;
- if (cnt > 0) {
- cf = d & (1 << (cnt - 1));
- res = (d >> cnt) | (fill << (32 - cnt));
- CONDITIONAL_SET_FLAG(cf, F_CF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- } else {
- res = d;
- }
- if (cnt == 1) {
- CONDITIONAL_SET_FLAG(XOR2(res >> 30), F_OF);
- } else {
- CLEAR_FLAG(F_OF);
- }
- } else {
- res = 0;
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- SET_FLAG(F_ZF);
- CLEAR_FLAG(F_SF);
- CLEAR_FLAG(F_PF);
- }
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SBB instruction and side effects.
-****************************************************************************/
-u8 sbb_byte(u8 d, u8 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- if (ACCESS_FLAG(F_CF))
- res = d - s - 1;
- else
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SBB instruction and side effects.
-****************************************************************************/
-u16 sbb_word(u16 d, u16 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- if (ACCESS_FLAG(F_CF))
- res = d - s - 1;
- else
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SBB instruction and side effects.
-****************************************************************************/
-u32 sbb_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- if (ACCESS_FLAG(F_CF))
- res = d - s - 1;
- else
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SUB instruction and side effects.
-****************************************************************************/
-u8 sub_byte(u8 d, u8 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return (u8)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SUB instruction and side effects.
-****************************************************************************/
-u16 sub_word(u16 d, u16 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return (u16)res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the SUB instruction and side effects.
-****************************************************************************/
-u32 sub_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
- register u32 bc;
-
- res = d - s;
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG((res & 0xffffffff) == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
-
- /* calculate the borrow chain. See note at top */
- bc = (res & (~d | s)) | (~d & s);
- CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);
- CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);
- CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the TEST instruction and side effects.
-****************************************************************************/
-void test_byte(u8 d, u8 s)
-{
- register u32 res; /* all operands in native machine order */
-
- res = d & s;
-
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- /* AF == dont care */
- CLEAR_FLAG(F_CF);
-}
-
-/****************************************************************************
-REMARKS:
-Implements the TEST instruction and side effects.
-****************************************************************************/
-void test_word(u16 d, u16 s)
-{
- register u32 res; /* all operands in native machine order */
-
- res = d & s;
-
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- /* AF == dont care */
- CLEAR_FLAG(F_CF);
-}
-
-/****************************************************************************
-REMARKS:
-Implements the TEST instruction and side effects.
-****************************************************************************/
-void test_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
-
- res = d & s;
-
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- /* AF == dont care */
- CLEAR_FLAG(F_CF);
-}
-
-/****************************************************************************
-REMARKS:
-Implements the XOR instruction and side effects.
-****************************************************************************/
-u8 xor_byte(u8 d, u8 s)
-{
- register u8 res; /* all operands in native machine order */
-
- res = d ^ s;
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(res & 0x80, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res), F_PF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the XOR instruction and side effects.
-****************************************************************************/
-u16 xor_word(u16 d, u16 s)
-{
- register u16 res; /* all operands in native machine order */
-
- res = d ^ s;
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the XOR instruction and side effects.
-****************************************************************************/
-u32 xor_long(u32 d, u32 s)
-{
- register u32 res; /* all operands in native machine order */
-
- res = d ^ s;
- CLEAR_FLAG(F_OF);
- CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);
- CONDITIONAL_SET_FLAG(res == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(res & 0xff), F_PF);
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IMUL instruction and side effects.
-****************************************************************************/
-void imul_byte(u8 s)
-{
- s16 res = (s16)((s8)M.x86.R_AL * (s8)s);
-
- M.x86.R_AX = res;
- if (((M.x86.R_AL & 0x80) == 0 && M.x86.R_AH == 0x00) ||
- ((M.x86.R_AL & 0x80) != 0 && M.x86.R_AH == 0xFF)) {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- } else {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IMUL instruction and side effects.
-****************************************************************************/
-void imul_word(u16 s)
-{
- s32 res = (s16)M.x86.R_AX * (s16)s;
-
- M.x86.R_AX = (u16)res;
- M.x86.R_DX = (u16)(res >> 16);
- if (((M.x86.R_AX & 0x8000) == 0 && M.x86.R_DX == 0x00) ||
- ((M.x86.R_AX & 0x8000) != 0 && M.x86.R_DX == 0xFF)) {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- } else {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IMUL instruction and side effects.
-****************************************************************************/
-void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s)
-{
-#ifdef __HAS_LONG_LONG__
- s64 res = (s32)d * (s32)s;
-
- *res_lo = (u32)res;
- *res_hi = (u32)(res >> 32);
-#else
- u32 d_lo,d_hi,d_sign;
- u32 s_lo,s_hi,s_sign;
- u32 rlo_lo,rlo_hi,rhi_lo;
-
- if ((d_sign = d & 0x80000000) != 0)
- d = -d;
- d_lo = d & 0xFFFF;
- d_hi = d >> 16;
- if ((s_sign = s & 0x80000000) != 0)
- s = -s;
- s_lo = s & 0xFFFF;
- s_hi = s >> 16;
- rlo_lo = d_lo * s_lo;
- rlo_hi = (d_hi * s_lo + d_lo * s_hi) + (rlo_lo >> 16);
- rhi_lo = d_hi * s_hi + (rlo_hi >> 16);
- *res_lo = (rlo_hi << 16) | (rlo_lo & 0xFFFF);
- *res_hi = rhi_lo;
- if (d_sign != s_sign) {
- d = ~*res_lo;
- s = (((d & 0xFFFF) + 1) >> 16) + (d >> 16);
- *res_lo = ~*res_lo+1;
- *res_hi = ~*res_hi+(s >> 16);
- }
-#endif
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IMUL instruction and side effects.
-****************************************************************************/
-void imul_long(u32 s)
-{
- imul_long_direct(&M.x86.R_EAX,&M.x86.R_EDX,M.x86.R_EAX,s);
- if (((M.x86.R_EAX & 0x80000000) == 0 && M.x86.R_EDX == 0x00) ||
- ((M.x86.R_EAX & 0x80000000) != 0 && M.x86.R_EDX == 0xFF)) {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- } else {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the MUL instruction and side effects.
-****************************************************************************/
-void mul_byte(u8 s)
-{
- u16 res = (u16)(M.x86.R_AL * s);
-
- M.x86.R_AX = res;
- if (M.x86.R_AH == 0) {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- } else {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the MUL instruction and side effects.
-****************************************************************************/
-void mul_word(u16 s)
-{
- u32 res = M.x86.R_AX * s;
-
- M.x86.R_AX = (u16)res;
- M.x86.R_DX = (u16)(res >> 16);
- if (M.x86.R_DX == 0) {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- } else {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the MUL instruction and side effects.
-****************************************************************************/
-void mul_long(u32 s)
-{
-#ifdef __HAS_LONG_LONG__
- u64 res = (u32)M.x86.R_EAX * (u32)s;
-
- M.x86.R_EAX = (u32)res;
- M.x86.R_EDX = (u32)(res >> 32);
-#else
- u32 a,a_lo,a_hi;
- u32 s_lo,s_hi;
- u32 rlo_lo,rlo_hi,rhi_lo;
-
- a = M.x86.R_EAX;
- a_lo = a & 0xFFFF;
- a_hi = a >> 16;
- s_lo = s & 0xFFFF;
- s_hi = s >> 16;
- rlo_lo = a_lo * s_lo;
- rlo_hi = (a_hi * s_lo + a_lo * s_hi) + (rlo_lo >> 16);
- rhi_lo = a_hi * s_hi + (rlo_hi >> 16);
- M.x86.R_EAX = (rlo_hi << 16) | (rlo_lo & 0xFFFF);
- M.x86.R_EDX = rhi_lo;
-#endif
-
- if (M.x86.R_EDX == 0) {
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_OF);
- } else {
- SET_FLAG(F_CF);
- SET_FLAG(F_OF);
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IDIV instruction and side effects.
-****************************************************************************/
-void idiv_byte(u8 s)
-{
- s32 dvd, div, mod;
-
- dvd = (s16)M.x86.R_AX;
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- div = dvd / (s8)s;
- mod = dvd % (s8)s;
- if (abs(div) > 0x7f) {
- x86emu_intr_raise(0);
- return;
- }
- M.x86.R_AL = (s8) div;
- M.x86.R_AH = (s8) mod;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IDIV instruction and side effects.
-****************************************************************************/
-void idiv_word(u16 s)
-{
- s32 dvd, div, mod;
-
- dvd = (((s32)M.x86.R_DX) << 16) | M.x86.R_AX;
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- div = dvd / (s16)s;
- mod = dvd % (s16)s;
- if (abs(div) > 0x7fff) {
- x86emu_intr_raise(0);
- return;
- }
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_SF);
- CONDITIONAL_SET_FLAG(div == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(mod & 0xff), F_PF);
-
- M.x86.R_AX = (u16)div;
- M.x86.R_DX = (u16)mod;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IDIV instruction and side effects.
-****************************************************************************/
-void idiv_long(u32 s)
-{
-#ifdef __HAS_LONG_LONG__
- s64 dvd, div, mod;
-
- dvd = (((s64)M.x86.R_EDX) << 32) | M.x86.R_EAX;
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- div = dvd / (s32)s;
- mod = dvd % (s32)s;
- if (abs(div) > 0x7fffffff) {
- x86emu_intr_raise(0);
- return;
- }
-#else
- s32 div = 0, mod;
- s32 h_dvd = M.x86.R_EDX;
- u32 l_dvd = M.x86.R_EAX;
- u32 abs_s = s & 0x7FFFFFFF;
- u32 abs_h_dvd = h_dvd & 0x7FFFFFFF;
- u32 h_s = abs_s >> 1;
- u32 l_s = abs_s << 31;
- int counter = 31;
- int carry;
-
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- do {
- div <<= 1;
- carry = (l_dvd >= l_s) ? 0 : 1;
-
- if (abs_h_dvd < (h_s + carry)) {
- h_s >>= 1;
- l_s = abs_s << (--counter);
- continue;
- } else {
- abs_h_dvd -= (h_s + carry);
- l_dvd = carry ? ((0xFFFFFFFF - l_s) + l_dvd + 1)
- : (l_dvd - l_s);
- h_s >>= 1;
- l_s = abs_s << (--counter);
- div |= 1;
- continue;
- }
-
- } while (counter > -1);
- /* overflow */
- if (abs_h_dvd || (l_dvd > abs_s)) {
- x86emu_intr_raise(0);
- return;
- }
- /* sign */
- div |= ((h_dvd & 0x10000000) ^ (s & 0x10000000));
- mod = l_dvd;
-
-#endif
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(mod & 0xff), F_PF);
-
- M.x86.R_EAX = (u32)div;
- M.x86.R_EDX = (u32)mod;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DIV instruction and side effects.
-****************************************************************************/
-void div_byte(u8 s)
-{
- u32 dvd, div, mod;
-
- dvd = M.x86.R_AX;
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- div = dvd / (u8)s;
- mod = dvd % (u8)s;
- if (abs(div) > 0xff) {
- x86emu_intr_raise(0);
- return;
- }
- M.x86.R_AL = (u8)div;
- M.x86.R_AH = (u8)mod;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DIV instruction and side effects.
-****************************************************************************/
-void div_word(u16 s)
-{
- u32 dvd, div, mod;
-
- dvd = (((u32)M.x86.R_DX) << 16) | M.x86.R_AX;
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- div = dvd / (u16)s;
- mod = dvd % (u16)s;
- if (abs(div) > 0xffff) {
- x86emu_intr_raise(0);
- return;
- }
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_SF);
- CONDITIONAL_SET_FLAG(div == 0, F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(mod & 0xff), F_PF);
-
- M.x86.R_AX = (u16)div;
- M.x86.R_DX = (u16)mod;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the DIV instruction and side effects.
-****************************************************************************/
-void div_long(u32 s)
-{
-#ifdef __HAS_LONG_LONG__
- u64 dvd, div, mod;
-
- dvd = (((u64)M.x86.R_EDX) << 32) | M.x86.R_EAX;
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- div = dvd / (u32)s;
- mod = dvd % (u32)s;
- if (abs(div) > 0xffffffff) {
- x86emu_intr_raise(0);
- return;
- }
-#else
- s32 div = 0, mod;
- s32 h_dvd = M.x86.R_EDX;
- u32 l_dvd = M.x86.R_EAX;
-
- u32 h_s = s;
- u32 l_s = 0;
- int counter = 32;
- int carry;
-
- if (s == 0) {
- x86emu_intr_raise(0);
- return;
- }
- do {
- div <<= 1;
- carry = (l_dvd >= l_s) ? 0 : 1;
-
- if (h_dvd < (h_s + carry)) {
- h_s >>= 1;
- l_s = s << (--counter);
- continue;
- } else {
- h_dvd -= (h_s + carry);
- l_dvd = carry ? ((0xFFFFFFFF - l_s) + l_dvd + 1)
- : (l_dvd - l_s);
- h_s >>= 1;
- l_s = s << (--counter);
- div |= 1;
- continue;
- }
-
- } while (counter > -1);
- /* overflow */
- if (h_dvd || (l_dvd > s)) {
- x86emu_intr_raise(0);
- return;
- }
- mod = l_dvd;
-#endif
- CLEAR_FLAG(F_CF);
- CLEAR_FLAG(F_AF);
- CLEAR_FLAG(F_SF);
- SET_FLAG(F_ZF);
- CONDITIONAL_SET_FLAG(PARITY(mod & 0xff), F_PF);
-
- M.x86.R_EAX = (u32)div;
- M.x86.R_EDX = (u32)mod;
-}
-
-/****************************************************************************
-REMARKS:
-Implements the IN string instruction and side effects.
-****************************************************************************/
-void ins(int size)
-{
- int inc = size;
-
- if (ACCESS_FLAG(F_DF)) {
- inc = -size;
- }
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* in until CX is ZERO. */
- u32 count = ((M.x86.mode & SYSMODE_PREFIX_DATA) ?
- M.x86.R_ECX : M.x86.R_CX);
- switch (size) {
- case 1:
- while (count--) {
- store_data_byte_abs(M.x86.R_ES, M.x86.R_DI,
- (*sys_inb)(M.x86.R_DX));
- M.x86.R_DI += inc;
- }
- break;
-
- case 2:
- while (count--) {
- store_data_word_abs(M.x86.R_ES, M.x86.R_DI,
- (*sys_inw)(M.x86.R_DX));
- M.x86.R_DI += inc;
- }
- break;
- case 4:
- while (count--) {
- store_data_long_abs(M.x86.R_ES, M.x86.R_DI,
- (*sys_inl)(M.x86.R_DX));
- M.x86.R_DI += inc;
- break;
- }
- }
- M.x86.R_CX = 0;
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ECX = 0;
- }
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- } else {
- switch (size) {
- case 1:
- store_data_byte_abs(M.x86.R_ES, M.x86.R_DI,
- (*sys_inb)(M.x86.R_DX));
- break;
- case 2:
- store_data_word_abs(M.x86.R_ES, M.x86.R_DI,
- (*sys_inw)(M.x86.R_DX));
- break;
- case 4:
- store_data_long_abs(M.x86.R_ES, M.x86.R_DI,
- (*sys_inl)(M.x86.R_DX));
- break;
- }
- M.x86.R_DI += inc;
- }
-}
-
-/****************************************************************************
-REMARKS:
-Implements the OUT string instruction and side effects.
-****************************************************************************/
-void outs(int size)
-{
- int inc = size;
-
- if (ACCESS_FLAG(F_DF)) {
- inc = -size;
- }
- if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {
- /* dont care whether REPE or REPNE */
- /* out until CX is ZERO. */
- u32 count = ((M.x86.mode & SYSMODE_PREFIX_DATA) ?
- M.x86.R_ECX : M.x86.R_CX);
- switch (size) {
- case 1:
- while (count--) {
- (*sys_outb)(M.x86.R_DX,
- fetch_data_byte_abs(M.x86.R_ES, M.x86.R_SI));
- M.x86.R_SI += inc;
- }
- break;
-
- case 2:
- while (count--) {
- (*sys_outw)(M.x86.R_DX,
- fetch_data_word_abs(M.x86.R_ES, M.x86.R_SI));
- M.x86.R_SI += inc;
- }
- break;
- case 4:
- while (count--) {
- (*sys_outl)(M.x86.R_DX,
- fetch_data_long_abs(M.x86.R_ES, M.x86.R_SI));
- M.x86.R_SI += inc;
- break;
- }
- }
- M.x86.R_CX = 0;
- if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- M.x86.R_ECX = 0;
- }
- M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);
- } else {
- switch (size) {
- case 1:
- (*sys_outb)(M.x86.R_DX,
- fetch_data_byte_abs(M.x86.R_ES, M.x86.R_SI));
- break;
- case 2:
- (*sys_outw)(M.x86.R_DX,
- fetch_data_word_abs(M.x86.R_ES, M.x86.R_SI));
- break;
- case 4:
- (*sys_outl)(M.x86.R_DX,
- fetch_data_long_abs(M.x86.R_ES, M.x86.R_SI));
- break;
- }
- M.x86.R_SI += inc;
- }
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - Address to fetch word from
-
-REMARKS:
-Fetches a word from emulator memory using an absolute address.
-****************************************************************************/
-u16 mem_access_word(int addr)
-{
-DB( if (CHECK_MEM_ACCESS())
- x86emu_check_mem_access(addr);)
- return (*sys_rdw)(addr);
-}
-
-/****************************************************************************
-REMARKS:
-Pushes a word onto the stack.
-
-NOTE: Do not inline this, as (*sys_wrX) is already inline!
-****************************************************************************/
-void push_word(u16 w)
-{
-DB( if (CHECK_SP_ACCESS())
- x86emu_check_sp_access();)
- M.x86.R_SP -= 2;
- (*sys_wrw)(((u32)M.x86.R_SS << 4) + M.x86.R_SP, w);
-}
-
-/****************************************************************************
-REMARKS:
-Pushes a long onto the stack.
-
-NOTE: Do not inline this, as (*sys_wrX) is already inline!
-****************************************************************************/
-void push_long(u32 w)
-{
-DB( if (CHECK_SP_ACCESS())
- x86emu_check_sp_access();)
- M.x86.R_SP -= 4;
- (*sys_wrl)(((u32)M.x86.R_SS << 4) + M.x86.R_SP, w);
-}
-
-/****************************************************************************
-REMARKS:
-Pops a word from the stack.
-
-NOTE: Do not inline this, as (*sys_rdX) is already inline!
-****************************************************************************/
-u16 pop_word(void)
-{
- register u16 res;
-
-DB( if (CHECK_SP_ACCESS())
- x86emu_check_sp_access();)
- res = (*sys_rdw)(((u32)M.x86.R_SS << 4) + M.x86.R_SP);
- M.x86.R_SP += 2;
- return res;
-}
-
-/****************************************************************************
-REMARKS:
-Pops a long from the stack.
-
-NOTE: Do not inline this, as (*sys_rdX) is already inline!
-****************************************************************************/
-u32 pop_long(void)
-{
- register u32 res;
-
-DB( if (CHECK_SP_ACCESS())
- x86emu_check_sp_access();)
- res = (*sys_rdl)(((u32)M.x86.R_SS << 4) + M.x86.R_SP);
- M.x86.R_SP += 4;
- return res;
-}
-
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: This file includes subroutines which are related to
-* programmed I/O and memory access. Included in this module
-* are default functions with limited usefulness. For real
-* uses these functions will most likely be overriden by the
-* user library.
-*
-****************************************************************************/
-/* $XFree86: xc/extras/x86emu/src/x86emu/sys.c,v 1.6 2002/09/16 18:05:18 eich Exp $ */
-
-#include "x86emu.h"
-#include "x86emu/x86emui.h"
-#include "x86emu/regs.h"
-#include "x86emu/debug.h"
-#include "x86emu/prim_ops.h"
-#ifdef IN_MODULE
-#include "xf86_ansic.h"
-#else
-#include <string.h>
-#endif
-/*------------------------- Global Variables ------------------------------*/
-
-X86EMU_sysEnv _X86EMU_env; /* Global emulator machine state */
-X86EMU_intrFuncs _X86EMU_intrTab[256];
-
-/*----------------------------- Implementation ----------------------------*/
-#if defined(__alpha__) || defined(__alpha)
-/* to cope with broken egcs-1.1.2 :-(((( */
-
-#define ALPHA_UALOADS
-/*
- * inline functions to do unaligned accesses
- * from linux/include/asm-alpha/unaligned.h
- */
-
-/*
- * EGCS 1.1 knows about arbitrary unaligned loads. Define some
- * packed structures to talk about such things with.
- */
-
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
-struct __una_u64 { unsigned long x __attribute__((packed)); };
-struct __una_u32 { unsigned int x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-#endif
-
-static __inline__ unsigned long ldq_u(unsigned long * r11)
-{
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
- const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
- return ptr->x;
-#else
- unsigned long r1,r2;
- __asm__("ldq_u %0,%3\n\t"
- "ldq_u %1,%4\n\t"
- "extql %0,%2,%0\n\t"
- "extqh %1,%2,%1"
- :"=&r" (r1), "=&r" (r2)
- :"r" (r11),
- "m" (*r11),
- "m" (*(const unsigned long *)(7+(char *) r11)));
- return r1 | r2;
-#endif
-}
-
-static __inline__ unsigned long ldl_u(unsigned int * r11)
-{
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
- const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
- return ptr->x;
-#else
- unsigned long r1,r2;
- __asm__("ldq_u %0,%3\n\t"
- "ldq_u %1,%4\n\t"
- "extll %0,%2,%0\n\t"
- "extlh %1,%2,%1"
- :"=&r" (r1), "=&r" (r2)
- :"r" (r11),
- "m" (*r11),
- "m" (*(const unsigned long *)(3+(char *) r11)));
- return r1 | r2;
-#endif
-}
-
-static __inline__ unsigned long ldw_u(unsigned short * r11)
-{
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
- const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
- return ptr->x;
-#else
- unsigned long r1,r2;
- __asm__("ldq_u %0,%3\n\t"
- "ldq_u %1,%4\n\t"
- "extwl %0,%2,%0\n\t"
- "extwh %1,%2,%1"
- :"=&r" (r1), "=&r" (r2)
- :"r" (r11),
- "m" (*r11),
- "m" (*(const unsigned long *)(1+(char *) r11)));
- return r1 | r2;
-#endif
-}
-
-/*
- * Elemental unaligned stores
- */
-
-static __inline__ void stq_u(unsigned long r5, unsigned long * r11)
-{
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
- struct __una_u64 *ptr = (struct __una_u64 *) r11;
- ptr->x = r5;
-#else
- unsigned long r1,r2,r3,r4;
-
- __asm__("ldq_u %3,%1\n\t"
- "ldq_u %2,%0\n\t"
- "insqh %6,%7,%5\n\t"
- "insql %6,%7,%4\n\t"
- "mskqh %3,%7,%3\n\t"
- "mskql %2,%7,%2\n\t"
- "bis %3,%5,%3\n\t"
- "bis %2,%4,%2\n\t"
- "stq_u %3,%1\n\t"
- "stq_u %2,%0"
- :"=m" (*r11),
- "=m" (*(unsigned long *)(7+(char *) r11)),
- "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
- :"r" (r5), "r" (r11));
-#endif
-}
-
-static __inline__ void stl_u(unsigned long r5, unsigned int * r11)
-{
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
- struct __una_u32 *ptr = (struct __una_u32 *) r11;
- ptr->x = r5;
-#else
- unsigned long r1,r2,r3,r4;
-
- __asm__("ldq_u %3,%1\n\t"
- "ldq_u %2,%0\n\t"
- "inslh %6,%7,%5\n\t"
- "insll %6,%7,%4\n\t"
- "msklh %3,%7,%3\n\t"
- "mskll %2,%7,%2\n\t"
- "bis %3,%5,%3\n\t"
- "bis %2,%4,%2\n\t"
- "stq_u %3,%1\n\t"
- "stq_u %2,%0"
- :"=m" (*r11),
- "=m" (*(unsigned long *)(3+(char *) r11)),
- "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
- :"r" (r5), "r" (r11));
-#endif
-}
-
-static __inline__ void stw_u(unsigned long r5, unsigned short * r11)
-{
-#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC_MINOR__ >= 91))
- struct __una_u16 *ptr = (struct __una_u16 *) r11;
- ptr->x = r5;
-#else
- unsigned long r1,r2,r3,r4;
-
- __asm__("ldq_u %3,%1\n\t"
- "ldq_u %2,%0\n\t"
- "inswh %6,%7,%5\n\t"
- "inswl %6,%7,%4\n\t"
- "mskwh %3,%7,%3\n\t"
- "mskwl %2,%7,%2\n\t"
- "bis %3,%5,%3\n\t"
- "bis %2,%4,%2\n\t"
- "stq_u %3,%1\n\t"
- "stq_u %2,%0"
- :"=m" (*r11),
- "=m" (*(unsigned long *)(1+(char *) r11)),
- "=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
- :"r" (r5), "r" (r11));
-#endif
-}
-
-#elif defined(__GNUC__) && ((__GNUC__ < 3)) && \
- (defined (__ia64__) || defined (ia64__))
-#define IA64_UALOADS
-/*
- * EGCS 1.1 knows about arbitrary unaligned loads. Define some
- * packed structures to talk about such things with.
- */
-struct __una_u64 { unsigned long x __attribute__((packed)); };
-struct __una_u32 { unsigned int x __attribute__((packed)); };
-struct __una_u16 { unsigned short x __attribute__((packed)); };
-
-static __inline__ unsigned long
-__uldq (const unsigned long * r11)
-{
- const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
- return ptr->x;
-}
-
-static __inline__ unsigned long
-uldl (const unsigned int * r11)
-{
- const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
- return ptr->x;
-}
-
-static __inline__ unsigned long
-uldw (const unsigned short * r11)
-{
- const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
- return ptr->x;
-}
-
-static __inline__ void
-ustq (unsigned long r5, unsigned long * r11)
-{
- struct __una_u64 *ptr = (struct __una_u64 *) r11;
- ptr->x = r5;
-}
-
-static __inline__ void
-ustl (unsigned long r5, unsigned int * r11)
-{
- struct __una_u32 *ptr = (struct __una_u32 *) r11;
- ptr->x = r5;
-}
-
-static __inline__ void
-ustw (unsigned long r5, unsigned short * r11)
-{
- struct __una_u16 *ptr = (struct __una_u16 *) r11;
- ptr->x = r5;
-}
-
-#endif
-
-/****************************************************************************
-PARAMETERS:
-addr - Emulator memory address to read
-
-RETURNS:
-Byte value read from emulator memory.
-
-REMARKS:
-Reads a byte value from the emulator memory.
-****************************************************************************/
-u8 X86API rdb(
- u32 addr)
-{
- u8 val;
-
- if (addr > M.mem_size - 1) {
- DB(printk("mem_read: address %#lx out of range!\n", addr);)
- HALT_SYS();
- }
- val = *(u8*)(M.mem_base + addr);
-DB( if (DEBUG_MEM_TRACE())
- printk("%#08x 1 -> %#x\n", addr, val);)
- return val;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - Emulator memory address to read
-
-RETURNS:
-Word value read from emulator memory.
-
-REMARKS:
-Reads a word value from the emulator memory.
-****************************************************************************/
-u16 X86API rdw(
- u32 addr)
-{
- u16 val = 0;
-
- if (addr > M.mem_size - 2) {
- DB(printk("mem_read: address %#lx out of range!\n", addr);)
- HALT_SYS();
- }
-#ifdef __BIG_ENDIAN__
- if (addr & 0x1) {
- val = (*(u8*)(M.mem_base + addr) |
- (*(u8*)(M.mem_base + addr + 1) << 8));
- }
- else
-#endif
-#if defined(ALPHA_UALOADS)
- val = ldw_u((u16*)(M.mem_base + addr));
-#elif defined(IA64_UALOADS)
- val = uldw((u16*)(M.mem_base + addr));
-#else
- val = *(u16*)(M.mem_base + addr);
-#endif
- DB( if (DEBUG_MEM_TRACE())
- printk("%#08x 2 -> %#x\n", addr, val);)
- return val;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - Emulator memory address to read
-
-RETURNS:
-Long value read from emulator memory.
-REMARKS:
-Reads a long value from the emulator memory.
-****************************************************************************/
-u32 X86API rdl(
- u32 addr)
-{
- u32 val = 0;
-
- if (addr > M.mem_size - 4) {
- DB(printk("mem_read: address %#lx out of range!\n", addr);)
- HALT_SYS();
- }
-#ifdef __BIG_ENDIAN__
- if (addr & 0x3) {
- val = (*(u8*)(M.mem_base + addr + 0) |
- (*(u8*)(M.mem_base + addr + 1) << 8) |
- (*(u8*)(M.mem_base + addr + 2) << 16) |
- (*(u8*)(M.mem_base + addr + 3) << 24));
- }
- else
-#endif
-#if defined(ALPHA_UALOADS)
- val = ldl_u((u32*)(M.mem_base + addr));
-#elif defined(IA64_UALOADS)
- val = uldl((u32*)(M.mem_base + addr));
-#else
- val = *(u32*)(M.mem_base + addr);
-#endif
-DB( if (DEBUG_MEM_TRACE())
- printk("%#08x 4 -> %#x\n", addr, val);)
- return val;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - Emulator memory address to read
-val - Value to store
-
-REMARKS:
-Writes a byte value to emulator memory.
-****************************************************************************/
-void X86API wrb(
- u32 addr,
- u8 val)
-{
-DB( if (DEBUG_MEM_TRACE())
- printk("%#08x 1 <- %#x\n", addr, val);)
- if (addr > M.mem_size - 1) {
- DB(printk("mem_write: address %#lx out of range!\n", addr);)
- HALT_SYS();
- }
- *(u8*)(M.mem_base + addr) = val;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - Emulator memory address to read
-val - Value to store
-
-REMARKS:
-Writes a word value to emulator memory.
-****************************************************************************/
-void X86API wrw(
- u32 addr,
- u16 val)
-{
-DB( if (DEBUG_MEM_TRACE())
- printk("%#08x 2 <- %#x\n", addr, val);)
- if (addr > M.mem_size - 2) {
- DB(printk("mem_write: address %#lx out of range!\n", addr);)
- HALT_SYS();
- }
-#ifdef __BIG_ENDIAN__
- if (addr & 0x1) {
- *(u8*)(M.mem_base + addr + 0) = (val >> 0) & 0xff;
- *(u8*)(M.mem_base + addr + 1) = (val >> 8) & 0xff;
- }
- else
-#endif
-#if defined(ALPHA_UALOADS)
- stw_u(val,(u16*)(M.mem_base + addr));
-#elif defined(IA64_UALOADS)
- ustw(val,(u16*)(M.mem_base + addr));
-#else
- *(u16*)(M.mem_base + addr) = val;
-#endif
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - Emulator memory address to read
-val - Value to store
-
-REMARKS:
-Writes a long value to emulator memory.
-****************************************************************************/
-void X86API wrl(
- u32 addr,
- u32 val)
-{
-DB( if (DEBUG_MEM_TRACE())
- printk("%#08x 4 <- %#x\n", addr, val);)
- if (addr > M.mem_size - 4) {
- DB(printk("mem_write: address %#lx out of range!\n", addr);)
- HALT_SYS();
- }
-#ifdef __BIG_ENDIAN__
- if (addr & 0x1) {
- *(u8*)(M.mem_base + addr + 0) = (val >> 0) & 0xff;
- *(u8*)(M.mem_base + addr + 1) = (val >> 8) & 0xff;
- *(u8*)(M.mem_base + addr + 2) = (val >> 16) & 0xff;
- *(u8*)(M.mem_base + addr + 3) = (val >> 24) & 0xff;
- }
- else
-#endif
-#if defined(ALPHA_UALOADS)
- stl_u(val,(u32*)(M.mem_base + addr));
-#elif defined(IA64_UALOADS)
- ustl(val,(u32*)(M.mem_base + addr));
-#else
- *(u32*)(M.mem_base + addr) = val;
-#endif
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - PIO address to read
-RETURN:
-0
-REMARKS:
-Default PIO byte read function. Doesn't perform real inb.
-****************************************************************************/
-static u8 X86API p_inb(
- X86EMU_pioAddr addr)
-{
-DB( if (DEBUG_IO_TRACE())
- printk("inb %#04x \n", addr);)
- return 0;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - PIO address to read
-RETURN:
-0
-REMARKS:
-Default PIO word read function. Doesn't perform real inw.
-****************************************************************************/
-static u16 X86API p_inw(
- X86EMU_pioAddr addr)
-{
-DB( if (DEBUG_IO_TRACE())
- printk("inw %#04x \n", addr);)
- return 0;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - PIO address to read
-RETURN:
-0
-REMARKS:
-Default PIO long read function. Doesn't perform real inl.
-****************************************************************************/
-static u32 X86API p_inl(
- X86EMU_pioAddr addr)
-{
-DB( if (DEBUG_IO_TRACE())
- printk("inl %#04x \n", addr);)
- return 0;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - PIO address to write
-val - Value to store
-REMARKS:
-Default PIO byte write function. Doesn't perform real outb.
-****************************************************************************/
-static void X86API p_outb(
- X86EMU_pioAddr addr,
- u8 val)
-{
-DB( if (DEBUG_IO_TRACE())
- printk("outb %#02x -> %#04x \n", val, addr);)
- return;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - PIO address to write
-val - Value to store
-REMARKS:
-Default PIO word write function. Doesn't perform real outw.
-****************************************************************************/
-static void X86API p_outw(
- X86EMU_pioAddr addr,
- u16 val)
-{
-DB( if (DEBUG_IO_TRACE())
- printk("outw %#04x -> %#04x \n", val, addr);)
- return;
-}
-
-/****************************************************************************
-PARAMETERS:
-addr - PIO address to write
-val - Value to store
-REMARKS:
-Default PIO ;ong write function. Doesn't perform real outl.
-****************************************************************************/
-static void X86API p_outl(
- X86EMU_pioAddr addr,
- u32 val)
-{
-DB( if (DEBUG_IO_TRACE())
- printk("outl %#08x -> %#04x \n", val, addr);)
- return;
-}
-
-/*------------------------- Global Variables ------------------------------*/
-
-u8 (X86APIP sys_rdb)(u32 addr) = rdb;
-u16 (X86APIP sys_rdw)(u32 addr) = rdw;
-u32 (X86APIP sys_rdl)(u32 addr) = rdl;
-void (X86APIP sys_wrb)(u32 addr,u8 val) = wrb;
-void (X86APIP sys_wrw)(u32 addr,u16 val) = wrw;
-void (X86APIP sys_wrl)(u32 addr,u32 val) = wrl;
-u8 (X86APIP sys_inb)(X86EMU_pioAddr addr) = p_inb;
-u16 (X86APIP sys_inw)(X86EMU_pioAddr addr) = p_inw;
-u32 (X86APIP sys_inl)(X86EMU_pioAddr addr) = p_inl;
-void (X86APIP sys_outb)(X86EMU_pioAddr addr, u8 val) = p_outb;
-void (X86APIP sys_outw)(X86EMU_pioAddr addr, u16 val) = p_outw;
-void (X86APIP sys_outl)(X86EMU_pioAddr addr, u32 val) = p_outl;
-
-/*----------------------------- Setup -------------------------------------*/
-
-/****************************************************************************
-PARAMETERS:
-funcs - New memory function pointers to make active
-
-REMARKS:
-This function is used to set the pointers to functions which access
-memory space, allowing the user application to override these functions
-and hook them out as necessary for their application.
-****************************************************************************/
-void X86EMU_setupMemFuncs(
- X86EMU_memFuncs *funcs)
-{
- sys_rdb = funcs->rdb;
- sys_rdw = funcs->rdw;
- sys_rdl = funcs->rdl;
- sys_wrb = funcs->wrb;
- sys_wrw = funcs->wrw;
- sys_wrl = funcs->wrl;
-}
-
-/****************************************************************************
-PARAMETERS:
-funcs - New programmed I/O function pointers to make active
-
-REMARKS:
-This function is used to set the pointers to functions which access
-I/O space, allowing the user application to override these functions
-and hook them out as necessary for their application.
-****************************************************************************/
-void X86EMU_setupPioFuncs(
- X86EMU_pioFuncs *funcs)
-{
- sys_inb = funcs->inb;
- sys_inw = funcs->inw;
- sys_inl = funcs->inl;
- sys_outb = funcs->outb;
- sys_outw = funcs->outw;
- sys_outl = funcs->outl;
-}
-
-/****************************************************************************
-PARAMETERS:
-funcs - New interrupt vector table to make active
-
-REMARKS:
-This function is used to set the pointers to functions which handle
-interrupt processing in the emulator, allowing the user application to
-hook interrupts as necessary for their application. Any interrupts that
-are not hooked by the user application, and reflected and handled internally
-in the emulator via the interrupt vector table. This allows the application
-to get control when the code being emulated executes specific software
-interrupts.
-****************************************************************************/
-void X86EMU_setupIntrFuncs(
- X86EMU_intrFuncs funcs[])
-{
- int i;
-
- for (i=0; i < 256; i++)
- _X86EMU_intrTab[i] = NULL;
- if (funcs) {
- for (i = 0; i < 256; i++)
- _X86EMU_intrTab[i] = funcs[i];
- }
-}
-
-/****************************************************************************
-PARAMETERS:
-int - New software interrupt to prepare for
-
-REMARKS:
-This function is used to set up the emulator state to exceute a software
-interrupt. This can be used by the user application code to allow an
-interrupt to be hooked, examined and then reflected back to the emulator
-so that the code in the emulator will continue processing the software
-interrupt as per normal. This essentially allows system code to actively
-hook and handle certain software interrupts as necessary.
-****************************************************************************/
-void X86EMU_prepareForInt(
- int num)
-{
- push_word((u16)M.x86.R_FLG);
- CLEAR_FLAG(F_IF);
- CLEAR_FLAG(F_TF);
- push_word(M.x86.R_CS);
- M.x86.R_CS = mem_access_word(num * 4 + 2);
- push_word(M.x86.R_IP);
- M.x86.R_IP = mem_access_word(num * 4);
- M.x86.intr = 0;
-}
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: Watcom C 10.6 or later
-* Environment: 32-bit DOS
-* Developer: Kendall Bennett
-*
-* Description: Program to validate the x86 emulator library for
-* correctness. We run the emulator primitive operations
-* functions against the real x86 CPU, and compare the result
-* and flags to ensure correctness.
-*
-* We use inline assembler to compile and build this program.
-*
-****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include "x86emu.h"
-#include "x86emu/prim_asm.h"
-
-/*-------------------------- Implementation -------------------------------*/
-
-#define true 1
-#define false 0
-
-#define ALL_FLAGS (F_CF | F_PF | F_AF | F_ZF | F_SF | F_OF)
-
-#define VAL_START_BINARY(parm_type,res_type,dmax,smax,dincr,sincr) \
-{ \
- parm_type d,s; \
- res_type r,r_asm; \
- ulong flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < dmax; d += dincr) { \
- for (s = 0; s < smax; s += sincr) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) {
-
-#define VAL_TEST_BINARY(name) \
- r_asm = name##_asm(&flags,d,s); \
- r = name(d,s); \
- if (r != r_asm || M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) {
-
-#define VAL_TEST_BINARY_VOID(name) \
- name##_asm(&flags,d,s); \
- name(d,s); \
- r = r_asm = 0; \
- if (M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) {
-
-#define VAL_FAIL_BYTE_BYTE_BINARY(name) \
- if (failed) \
- printk("fail\n"); \
- printk("0x%02X = %-15s(0x%02X,0x%02X), flags = %s -> %s\n", \
- r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%02X = %-15s(0x%02X,0x%02X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_FAIL_WORD_WORD_BINARY(name) \
- if (failed) \
- printk("fail\n"); \
- printk("0x%04X = %-15s(0x%04X,0x%04X), flags = %s -> %s\n", \
- r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%04X = %-15s(0x%04X,0x%04X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_FAIL_LONG_LONG_BINARY(name) \
- if (failed) \
- printk("fail\n"); \
- printk("0x%08X = %-15s(0x%08X,0x%08X), flags = %s -> %s\n", \
- r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%08X = %-15s(0x%08X,0x%08X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_END_BINARY() \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_BYTE_BYTE_BINARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u8,u8,0xFF,0xFF,1,1) \
- VAL_TEST_BINARY(name) \
- VAL_FAIL_BYTE_BYTE_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_WORD_WORD_BINARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u16,u16,0xFF00,0xFF00,0x100,0x100) \
- VAL_TEST_BINARY(name) \
- VAL_FAIL_WORD_WORD_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_LONG_LONG_BINARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u32,u32,0xFF000000,0xFF000000,0x1000000,0x1000000) \
- VAL_TEST_BINARY(name) \
- VAL_FAIL_LONG_LONG_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_VOID_BYTE_BINARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u8,u8,0xFF,0xFF,1,1) \
- VAL_TEST_BINARY_VOID(name) \
- VAL_FAIL_BYTE_BYTE_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_VOID_WORD_BINARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u16,u16,0xFF00,0xFF00,0x100,0x100) \
- VAL_TEST_BINARY_VOID(name) \
- VAL_FAIL_WORD_WORD_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_VOID_LONG_BINARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u32,u32,0xFF000000,0xFF000000,0x1000000,0x1000000) \
- VAL_TEST_BINARY_VOID(name) \
- VAL_FAIL_LONG_LONG_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_BYTE_ROTATE(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u8,u8,0xFF,8,1,1) \
- VAL_TEST_BINARY(name) \
- VAL_FAIL_BYTE_BYTE_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_WORD_ROTATE(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u16,u16,0xFF00,16,0x100,1) \
- VAL_TEST_BINARY(name) \
- VAL_FAIL_WORD_WORD_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_LONG_ROTATE(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_BINARY(u32,u32,0xFF000000,32,0x1000000,1) \
- VAL_TEST_BINARY(name) \
- VAL_FAIL_LONG_LONG_BINARY(name) \
- VAL_END_BINARY()
-
-#define VAL_START_TERNARY(parm_type,res_type,dmax,smax,dincr,sincr,maxshift)\
-{ \
- parm_type d,s; \
- res_type r,r_asm; \
- u8 shift; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < dmax; d += dincr) { \
- for (s = 0; s < smax; s += sincr) { \
- for (shift = 0; shift < maxshift; shift += 1) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) {
-
-#define VAL_TEST_TERNARY(name) \
- r_asm = name##_asm(&flags,d,s,shift); \
- r = name(d,s,shift); \
- if (r != r_asm || M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) {
-
-#define VAL_FAIL_WORD_WORD_TERNARY(name) \
- if (failed) \
- printk("fail\n"); \
- printk("0x%04X = %-15s(0x%04X,0x%04X,%d), flags = %s -> %s\n", \
- r, #name, d, s, shift, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%04X = %-15s(0x%04X,0x%04X,%d), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, s, shift, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_FAIL_LONG_LONG_TERNARY(name) \
- if (failed) \
- printk("fail\n"); \
- printk("0x%08X = %-15s(0x%08X,0x%08X,%d), flags = %s -> %s\n", \
- r, #name, d, s, shift, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%08X = %-15s(0x%08X,0x%08X,%d), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, s, shift, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_END_TERNARY() \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_WORD_ROTATE_DBL(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_TERNARY(u16,u16,0xFF00,0xFF00,0x100,0x100,16) \
- VAL_TEST_TERNARY(name) \
- VAL_FAIL_WORD_WORD_TERNARY(name) \
- VAL_END_TERNARY()
-
-#define VAL_LONG_ROTATE_DBL(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_TERNARY(u32,u32,0xFF000000,0xFF000000,0x1000000,0x1000000,32) \
- VAL_TEST_TERNARY(name) \
- VAL_FAIL_LONG_LONG_TERNARY(name) \
- VAL_END_TERNARY()
-
-#define VAL_START_UNARY(parm_type,max,incr) \
-{ \
- parm_type d,r,r_asm; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < max; d += incr) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) {
-
-#define VAL_TEST_UNARY(name) \
- r_asm = name##_asm(&flags,d); \
- r = name(d); \
- if (r != r_asm || M.x86.R_EFLG != flags) { \
- failed = true;
-
-#define VAL_FAIL_BYTE_UNARY(name) \
- printk("fail\n"); \
- printk("0x%02X = %-15s(0x%02X), flags = %s -> %s\n", \
- r, #name, d, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%02X = %-15s(0x%02X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_FAIL_WORD_UNARY(name) \
- printk("fail\n"); \
- printk("0x%04X = %-15s(0x%04X), flags = %s -> %s\n", \
- r, #name, d, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%04X = %-15s(0x%04X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_FAIL_LONG_UNARY(name) \
- printk("fail\n"); \
- printk("0x%08X = %-15s(0x%08X), flags = %s -> %s\n", \
- r, #name, d, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%08X = %-15s(0x%08X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, print_flags(buf1,inflags), print_flags(buf2,flags));
-
-#define VAL_END_UNARY() \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | ALL_FLAGS; \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_BYTE_UNARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_UNARY(u8,0xFF,0x1) \
- VAL_TEST_UNARY(name) \
- VAL_FAIL_BYTE_UNARY(name) \
- VAL_END_UNARY()
-
-#define VAL_WORD_UNARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_UNARY(u16,0xFF00,0x100) \
- VAL_TEST_UNARY(name) \
- VAL_FAIL_WORD_UNARY(name) \
- VAL_END_UNARY()
-
-#define VAL_WORD_BYTE_UNARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_UNARY(u16,0xFF,0x1) \
- VAL_TEST_UNARY(name) \
- VAL_FAIL_WORD_UNARY(name) \
- VAL_END_UNARY()
-
-#define VAL_LONG_UNARY(name) \
- printk("Validating %s ... ", #name); \
- VAL_START_UNARY(u32,0xFF000000,0x1000000) \
- VAL_TEST_UNARY(name) \
- VAL_FAIL_LONG_UNARY(name) \
- VAL_END_UNARY()
-
-#define VAL_BYTE_MUL(name) \
- printk("Validating %s ... ", #name); \
-{ \
- u8 d,s; \
- u16 r,r_asm; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < 0xFF; d += 1) { \
- for (s = 0; s < 0xFF; s += 1) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) { \
- name##_asm(&flags,&r_asm,d,s); \
- M.x86.R_AL = d; \
- name(s); \
- r = M.x86.R_AX; \
- if (r != r_asm || M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) { \
- if (failed) \
- printk("fail\n"); \
- printk("0x%04X = %-15s(0x%02X,0x%02X), flags = %s -> %s\n", \
- r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%04X = %-15s(0x%02X,0x%02X), flags = %s -> %s\n", \
- r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags)); \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_WORD_MUL(name) \
- printk("Validating %s ... ", #name); \
-{ \
- u16 d,s; \
- u16 r_lo,r_asm_lo; \
- u16 r_hi,r_asm_hi; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < 0xFF00; d += 0x100) { \
- for (s = 0; s < 0xFF00; s += 0x100) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) { \
- name##_asm(&flags,&r_asm_lo,&r_asm_hi,d,s); \
- M.x86.R_AX = d; \
- name(s); \
- r_lo = M.x86.R_AX; \
- r_hi = M.x86.R_DX; \
- if (r_lo != r_asm_lo || r_hi != r_asm_hi || M.x86.R_EFLG != flags)\
- failed = true; \
- if (failed || trace) { \
- if (failed) \
- printk("fail\n"); \
- printk("0x%04X:0x%04X = %-15s(0x%04X,0x%04X), flags = %s -> %s\n", \
- r_hi,r_lo, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%04X:0x%04X = %-15s(0x%04X,0x%04X), flags = %s -> %s\n", \
- r_asm_hi,r_asm_lo, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags)); \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_LONG_MUL(name) \
- printk("Validating %s ... ", #name); \
-{ \
- u32 d,s; \
- u32 r_lo,r_asm_lo; \
- u32 r_hi,r_asm_hi; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < 0xFF000000; d += 0x1000000) { \
- for (s = 0; s < 0xFF000000; s += 0x1000000) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) { \
- name##_asm(&flags,&r_asm_lo,&r_asm_hi,d,s); \
- M.x86.R_EAX = d; \
- name(s); \
- r_lo = M.x86.R_EAX; \
- r_hi = M.x86.R_EDX; \
- if (r_lo != r_asm_lo || r_hi != r_asm_hi || M.x86.R_EFLG != flags)\
- failed = true; \
- if (failed || trace) { \
- if (failed) \
- printk("fail\n"); \
- printk("0x%08X:0x%08X = %-15s(0x%08X,0x%08X), flags = %s -> %s\n", \
- r_hi,r_lo, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%08X:0x%08X = %-15s(0x%08X,0x%08X), flags = %s -> %s\n", \
- r_asm_hi,r_asm_lo, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags)); \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_BYTE_DIV(name) \
- printk("Validating %s ... ", #name); \
-{ \
- u16 d,s; \
- u8 r_quot,r_rem,r_asm_quot,r_asm_rem; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < 0xFF00; d += 0x100) { \
- for (s = 1; s < 0xFF; s += 1) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) { \
- M.x86.intr = 0; \
- M.x86.R_AX = d; \
- name(s); \
- r_quot = M.x86.R_AL; \
- r_rem = M.x86.R_AH; \
- if (M.x86.intr & INTR_SYNCH) \
- continue; \
- name##_asm(&flags,&r_asm_quot,&r_asm_rem,d,s); \
- if (r_quot != r_asm_quot || r_rem != r_asm_rem || M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) { \
- if (failed) \
- printk("fail\n"); \
- printk("0x%02X:0x%02X = %-15s(0x%04X,0x%02X), flags = %s -> %s\n", \
- r_quot, r_rem, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%02X:0x%02X = %-15s(0x%04X,0x%02X), flags = %s -> %s\n", \
- r_asm_quot, r_asm_rem, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags)); \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_WORD_DIV(name) \
- printk("Validating %s ... ", #name); \
-{ \
- u32 d,s; \
- u16 r_quot,r_rem,r_asm_quot,r_asm_rem; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < 0xFF000000; d += 0x1000000) { \
- for (s = 0x100; s < 0xFF00; s += 0x100) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) { \
- M.x86.intr = 0; \
- M.x86.R_AX = d & 0xFFFF; \
- M.x86.R_DX = d >> 16; \
- name(s); \
- r_quot = M.x86.R_AX; \
- r_rem = M.x86.R_DX; \
- if (M.x86.intr & INTR_SYNCH) \
- continue; \
- name##_asm(&flags,&r_asm_quot,&r_asm_rem,d & 0xFFFF,d >> 16,s);\
- if (r_quot != r_asm_quot || r_rem != r_asm_rem || M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) { \
- if (failed) \
- printk("fail\n"); \
- printk("0x%04X:0x%04X = %-15s(0x%08X,0x%04X), flags = %s -> %s\n", \
- r_quot, r_rem, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%04X:0x%04X = %-15s(0x%08X,0x%04X), flags = %s -> %s\n", \
- r_asm_quot, r_asm_rem, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags)); \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-#define VAL_LONG_DIV(name) \
- printk("Validating %s ... ", #name); \
-{ \
- u32 d,s; \
- u32 r_quot,r_rem,r_asm_quot,r_asm_rem; \
- u32 flags,inflags; \
- int f,failed = false; \
- char buf1[80],buf2[80]; \
- for (d = 0; d < 0xFF000000; d += 0x1000000) { \
- for (s = 0x100; s < 0xFF00; s += 0x100) { \
- M.x86.R_EFLG = inflags = flags = def_flags; \
- for (f = 0; f < 2; f++) { \
- M.x86.intr = 0; \
- M.x86.R_EAX = d; \
- M.x86.R_EDX = 0; \
- name(s); \
- r_quot = M.x86.R_EAX; \
- r_rem = M.x86.R_EDX; \
- if (M.x86.intr & INTR_SYNCH) \
- continue; \
- name##_asm(&flags,&r_asm_quot,&r_asm_rem,d,0,s); \
- if (r_quot != r_asm_quot || r_rem != r_asm_rem || M.x86.R_EFLG != flags) \
- failed = true; \
- if (failed || trace) { \
- if (failed) \
- printk("fail\n"); \
- printk("0x%08X:0x%08X = %-15s(0x%08X:0x%08X,0x%08X), flags = %s -> %s\n", \
- r_quot, r_rem, #name, 0, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \
- printk("0x%08X:0x%08X = %-15s(0x%08X:0x%08X,0x%08X), flags = %s -> %s\n", \
- r_asm_quot, r_asm_rem, #name"_asm", 0, d, s, print_flags(buf1,inflags), print_flags(buf2,flags)); \
- } \
- M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF); \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (failed) \
- break; \
- } \
- if (!failed) \
- printk("passed\n"); \
-}
-
-void printk(const char *fmt, ...)
-{
- va_list argptr;
- va_start(argptr, fmt);
- vfprintf(stdout, fmt, argptr);
- fflush(stdout);
- va_end(argptr);
-}
-
-char * print_flags(char *buf,ulong flags)
-{
- char *separator = "";
-
- buf[0] = 0;
- if (flags & F_CF) {
- strcat(buf,separator);
- strcat(buf,"CF");
- separator = ",";
- }
- if (flags & F_PF) {
- strcat(buf,separator);
- strcat(buf,"PF");
- separator = ",";
- }
- if (flags & F_AF) {
- strcat(buf,separator);
- strcat(buf,"AF");
- separator = ",";
- }
- if (flags & F_ZF) {
- strcat(buf,separator);
- strcat(buf,"ZF");
- separator = ",";
- }
- if (flags & F_SF) {
- strcat(buf,separator);
- strcat(buf,"SF");
- separator = ",";
- }
- if (flags & F_OF) {
- strcat(buf,separator);
- strcat(buf,"OF");
- separator = ",";
- }
- if (separator[0] == 0)
- strcpy(buf,"None");
- return buf;
-}
-
-int main(int argc)
-{
- ulong def_flags;
- int trace = false;
-
- if (argc > 1)
- trace = true;
- memset(&M, 0, sizeof(M));
- def_flags = get_flags_asm() & ~ALL_FLAGS;
-
- VAL_WORD_UNARY(aaa_word);
- VAL_WORD_UNARY(aas_word);
-
- VAL_WORD_UNARY(aad_word);
- VAL_WORD_UNARY(aam_word);
-
- VAL_BYTE_BYTE_BINARY(adc_byte);
- VAL_WORD_WORD_BINARY(adc_word);
- VAL_LONG_LONG_BINARY(adc_long);
-
- VAL_BYTE_BYTE_BINARY(add_byte);
- VAL_WORD_WORD_BINARY(add_word);
- VAL_LONG_LONG_BINARY(add_long);
-
- VAL_BYTE_BYTE_BINARY(and_byte);
- VAL_WORD_WORD_BINARY(and_word);
- VAL_LONG_LONG_BINARY(and_long);
-
- VAL_BYTE_BYTE_BINARY(cmp_byte);
- VAL_WORD_WORD_BINARY(cmp_word);
- VAL_LONG_LONG_BINARY(cmp_long);
-
- VAL_BYTE_UNARY(daa_byte);
- VAL_BYTE_UNARY(das_byte); // Fails for 0x9A (out of range anyway)
-
- VAL_BYTE_UNARY(dec_byte);
- VAL_WORD_UNARY(dec_word);
- VAL_LONG_UNARY(dec_long);
-
- VAL_BYTE_UNARY(inc_byte);
- VAL_WORD_UNARY(inc_word);
- VAL_LONG_UNARY(inc_long);
-
- VAL_BYTE_BYTE_BINARY(or_byte);
- VAL_WORD_WORD_BINARY(or_word);
- VAL_LONG_LONG_BINARY(or_long);
-
- VAL_BYTE_UNARY(neg_byte);
- VAL_WORD_UNARY(neg_word);
- VAL_LONG_UNARY(neg_long);
-
- VAL_BYTE_UNARY(not_byte);
- VAL_WORD_UNARY(not_word);
- VAL_LONG_UNARY(not_long);
-
- VAL_BYTE_ROTATE(rcl_byte);
- VAL_WORD_ROTATE(rcl_word);
- VAL_LONG_ROTATE(rcl_long);
-
- VAL_BYTE_ROTATE(rcr_byte);
- VAL_WORD_ROTATE(rcr_word);
- VAL_LONG_ROTATE(rcr_long);
-
- VAL_BYTE_ROTATE(rol_byte);
- VAL_WORD_ROTATE(rol_word);
- VAL_LONG_ROTATE(rol_long);
-
- VAL_BYTE_ROTATE(ror_byte);
- VAL_WORD_ROTATE(ror_word);
- VAL_LONG_ROTATE(ror_long);
-
- VAL_BYTE_ROTATE(shl_byte);
- VAL_WORD_ROTATE(shl_word);
- VAL_LONG_ROTATE(shl_long);
-
- VAL_BYTE_ROTATE(shr_byte);
- VAL_WORD_ROTATE(shr_word);
- VAL_LONG_ROTATE(shr_long);
-
- VAL_BYTE_ROTATE(sar_byte);
- VAL_WORD_ROTATE(sar_word);
- VAL_LONG_ROTATE(sar_long);
-
- VAL_WORD_ROTATE_DBL(shld_word);
- VAL_LONG_ROTATE_DBL(shld_long);
-
- VAL_WORD_ROTATE_DBL(shrd_word);
- VAL_LONG_ROTATE_DBL(shrd_long);
-
- VAL_BYTE_BYTE_BINARY(sbb_byte);
- VAL_WORD_WORD_BINARY(sbb_word);
- VAL_LONG_LONG_BINARY(sbb_long);
-
- VAL_BYTE_BYTE_BINARY(sub_byte);
- VAL_WORD_WORD_BINARY(sub_word);
- VAL_LONG_LONG_BINARY(sub_long);
-
- VAL_BYTE_BYTE_BINARY(xor_byte);
- VAL_WORD_WORD_BINARY(xor_word);
- VAL_LONG_LONG_BINARY(xor_long);
-
- VAL_VOID_BYTE_BINARY(test_byte);
- VAL_VOID_WORD_BINARY(test_word);
- VAL_VOID_LONG_BINARY(test_long);
-
- VAL_BYTE_MUL(imul_byte);
- VAL_WORD_MUL(imul_word);
- VAL_LONG_MUL(imul_long);
-
- VAL_BYTE_MUL(mul_byte);
- VAL_WORD_MUL(mul_word);
- VAL_LONG_MUL(mul_long);
-
- VAL_BYTE_DIV(idiv_byte);
- VAL_WORD_DIV(idiv_word);
- VAL_LONG_DIV(idiv_long);
-
- VAL_BYTE_DIV(div_byte);
- VAL_WORD_DIV(div_word);
- VAL_LONG_DIV(div_long);
-
- return 0;
-}
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for debug definitions.
-*
-****************************************************************************/
-/* $XFree86: xc/extras/x86emu/src/x86emu/x86emu/debug.h,v 1.3 2000/04/19 15:48:15 tsi Exp $ */
-
-#ifndef __X86EMU_DEBUG_H
-#define __X86EMU_DEBUG_H
-
-/*---------------------- Macros and type definitions ----------------------*/
-
-/* checks to be enabled for "runtime" */
-
-#define CHECK_IP_FETCH_F 0x1
-#define CHECK_SP_ACCESS_F 0x2
-#define CHECK_MEM_ACCESS_F 0x4 /*using regular linear pointer */
-#define CHECK_DATA_ACCESS_F 0x8 /*using segment:offset*/
-
-#ifdef DEBUG
-# define CHECK_IP_FETCH() (M.x86.check & CHECK_IP_FETCH_F)
-# define CHECK_SP_ACCESS() (M.x86.check & CHECK_SP_ACCESS_F)
-# define CHECK_MEM_ACCESS() (M.x86.check & CHECK_MEM_ACCESS_F)
-# define CHECK_DATA_ACCESS() (M.x86.check & CHECK_DATA_ACCESS_F)
-#else
-# define CHECK_IP_FETCH()
-# define CHECK_SP_ACCESS()
-# define CHECK_MEM_ACCESS()
-# define CHECK_DATA_ACCESS()
-#endif
-
-#ifdef DEBUG
-# define DEBUG_INSTRUMENT() (M.x86.debug & DEBUG_INSTRUMENT_F)
-# define DEBUG_DECODE() (M.x86.debug & DEBUG_DECODE_F)
-# define DEBUG_TRACE() (M.x86.debug & DEBUG_TRACE_F)
-# define DEBUG_STEP() (M.x86.debug & DEBUG_STEP_F)
-# define DEBUG_DISASSEMBLE() (M.x86.debug & DEBUG_DISASSEMBLE_F)
-# define DEBUG_BREAK() (M.x86.debug & DEBUG_BREAK_F)
-# define DEBUG_SVC() (M.x86.debug & DEBUG_SVC_F)
-# define DEBUG_SAVE_IP_CS() (M.x86.debug & DEBUG_SAVE_IP_CS_F)
-
-# define DEBUG_FS() (M.x86.debug & DEBUG_FS_F)
-# define DEBUG_PROC() (M.x86.debug & DEBUG_PROC_F)
-# define DEBUG_SYSINT() (M.x86.debug & DEBUG_SYSINT_F)
-# define DEBUG_TRACECALL() (M.x86.debug & DEBUG_TRACECALL_F)
-# define DEBUG_TRACECALLREGS() (M.x86.debug & DEBUG_TRACECALL_REGS_F)
-# define DEBUG_SYS() (M.x86.debug & DEBUG_SYS_F)
-# define DEBUG_MEM_TRACE() (M.x86.debug & DEBUG_MEM_TRACE_F)
-# define DEBUG_IO_TRACE() (M.x86.debug & DEBUG_IO_TRACE_F)
-# define DEBUG_DECODE_NOPRINT() (M.x86.debug & DEBUG_DECODE_NOPRINT_F)
-#else
-# define DEBUG_INSTRUMENT() 0
-# define DEBUG_DECODE() 0
-# define DEBUG_TRACE() 0
-# define DEBUG_STEP() 0
-# define DEBUG_DISASSEMBLE() 0
-# define DEBUG_BREAK() 0
-# define DEBUG_SVC() 0
-# define DEBUG_SAVE_IP_CS() 0
-# define DEBUG_FS() 0
-# define DEBUG_PROC() 0
-# define DEBUG_SYSINT() 0
-# define DEBUG_TRACECALL() 0
-# define DEBUG_TRACECALLREGS() 0
-# define DEBUG_SYS() 0
-# define DEBUG_MEM_TRACE() 0
-# define DEBUG_IO_TRACE() 0
-# define DEBUG_DECODE_NOPRINT() 0
-#endif
-
-#ifdef DEBUG
-
-# define DECODE_PRINTF(x) if (DEBUG_DECODE()) \
- x86emu_decode_printf(x)
-# define DECODE_PRINTF2(x,y) if (DEBUG_DECODE()) \
- x86emu_decode_printf2(x,y)
-
-/*
- * The following allow us to look at the bytes of an instruction. The
- * first INCR_INSTRN_LEN, is called everytime bytes are consumed in
- * the decoding process. The SAVE_IP_CS is called initially when the
- * major opcode of the instruction is accessed.
- */
-#define INC_DECODED_INST_LEN(x) \
- if (DEBUG_DECODE()) \
- x86emu_inc_decoded_inst_len(x)
-
-#define SAVE_IP_CS(x,y) \
- if (DEBUG_DECODE() | DEBUG_TRACECALL() | DEBUG_BREAK() \
- | DEBUG_IO_TRACE() | DEBUG_SAVE_IP_CS()) { \
- M.x86.saved_cs = x; \
- M.x86.saved_ip = y; \
- }
-#else
-# define INC_DECODED_INST_LEN(x)
-# define DECODE_PRINTF(x)
-# define DECODE_PRINTF2(x,y)
-# define SAVE_IP_CS(x,y)
-#endif
-
-#ifdef DEBUG
-#define TRACE_REGS() \
- if (DEBUG_DISASSEMBLE()) { \
- x86emu_just_disassemble(); \
- goto EndOfTheInstructionProcedure; \
- } \
- if (DEBUG_TRACE() || DEBUG_DECODE()) X86EMU_trace_regs()
-#else
-# define TRACE_REGS()
-#endif
-
-#ifdef DEBUG
-# define SINGLE_STEP() if (DEBUG_STEP()) x86emu_single_step()
-#else
-# define SINGLE_STEP()
-#endif
-
-#define TRACE_AND_STEP() \
- TRACE_REGS(); \
- SINGLE_STEP()
-
-#ifdef DEBUG
-# define START_OF_INSTR()
-# define END_OF_INSTR() EndOfTheInstructionProcedure: x86emu_end_instr();
-# define END_OF_INSTR_NO_TRACE() x86emu_end_instr();
-#else
-# define START_OF_INSTR()
-# define END_OF_INSTR()
-# define END_OF_INSTR_NO_TRACE()
-#endif
-
-#ifdef DEBUG
-# define CALL_TRACE(u,v,w,x,s) \
- if (DEBUG_TRACECALLREGS()) \
- x86emu_dump_regs(); \
- if (DEBUG_TRACECALL()) \
- printk("%04x:%04x: CALL %s%04x:%04x\n", u , v, s, w, x);
-# define RETURN_TRACE(n,u,v) \
- if (DEBUG_TRACECALLREGS()) \
- x86emu_dump_regs(); \
- if (DEBUG_TRACECALL()) \
- printk("%04x:%04x: %s\n",u,v,n);
-#else
-# define CALL_TRACE(u,v,w,x,s)
-# define RETURN_TRACE(n,u,v)
-#endif
-
-#ifdef DEBUG
-#define DB(x) x
-#else
-#define DB(x)
-#endif
-
-/*-------------------------- Function Prototypes --------------------------*/
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-extern void x86emu_inc_decoded_inst_len (int x);
-extern void x86emu_decode_printf (char *x);
-extern void x86emu_decode_printf2 (char *x, int y);
-extern void x86emu_just_disassemble (void);
-extern void x86emu_single_step (void);
-extern void x86emu_end_instr (void);
-extern void x86emu_dump_regs (void);
-extern void x86emu_dump_xregs (void);
-extern void x86emu_print_int_vect (u16 iv);
-extern void x86emu_instrument_instruction (void);
-extern void x86emu_check_ip_access (void);
-extern void x86emu_check_sp_access (void);
-extern void x86emu_check_mem_access (u32 p);
-extern void x86emu_check_data_access (uint s, uint o);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_DEBUG_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for instruction decoding logic.
-*
-****************************************************************************/
-/* $XFree86$ */
-
-#ifndef __X86EMU_DECODE_H
-#define __X86EMU_DECODE_H
-
-/*---------------------- Macros and type definitions ----------------------*/
-
-/* Instruction Decoding Stuff */
-
-#define FETCH_DECODE_MODRM(mod,rh,rl) fetch_decode_modrm(&mod,&rh,&rl)
-#define DECODE_RM_BYTE_REGISTER(r) decode_rm_byte_register(r)
-#define DECODE_RM_WORD_REGISTER(r) decode_rm_word_register(r)
-#define DECODE_RM_LONG_REGISTER(r) decode_rm_long_register(r)
-#define DECODE_CLEAR_SEGOVR() M.x86.mode &= ~SYSMODE_CLRMASK
-
-/*-------------------------- Function Prototypes --------------------------*/
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-void x86emu_intr_raise (u8 type);
-void fetch_decode_modrm (int *mod,int *regh,int *regl);
-u8 fetch_byte_imm (void);
-u16 fetch_word_imm (void);
-u32 fetch_long_imm (void);
-u8 fetch_data_byte (uint offset);
-u8 fetch_data_byte_abs (uint segment, uint offset);
-u16 fetch_data_word (uint offset);
-u16 fetch_data_word_abs (uint segment, uint offset);
-u32 fetch_data_long (uint offset);
-u32 fetch_data_long_abs (uint segment, uint offset);
-void store_data_byte (uint offset, u8 val);
-void store_data_byte_abs (uint segment, uint offset, u8 val);
-void store_data_word (uint offset, u16 val);
-void store_data_word_abs (uint segment, uint offset, u16 val);
-void store_data_long (uint offset, u32 val);
-void store_data_long_abs (uint segment, uint offset, u32 val);
-u8* decode_rm_byte_register(int reg);
-u16* decode_rm_word_register(int reg);
-u32* decode_rm_long_register(int reg);
-u16* decode_rm_seg_register(int reg);
-u32 decode_rm00_address(int rm);
-u32 decode_rm01_address(int rm);
-u32 decode_rm10_address(int rm);
-u32 decode_sib_address(int sib, int mod);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_DECODE_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for FPU instruction decoding.
-*
-****************************************************************************/
-
-#ifndef __X86EMU_FPU_H
-#define __X86EMU_FPU_H
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-/* these have to be defined, whether 8087 support compiled in or not. */
-
-extern void x86emuOp_esc_coprocess_d8 (u8 op1);
-extern void x86emuOp_esc_coprocess_d9 (u8 op1);
-extern void x86emuOp_esc_coprocess_da (u8 op1);
-extern void x86emuOp_esc_coprocess_db (u8 op1);
-extern void x86emuOp_esc_coprocess_dc (u8 op1);
-extern void x86emuOp_esc_coprocess_dd (u8 op1);
-extern void x86emuOp_esc_coprocess_de (u8 op1);
-extern void x86emuOp_esc_coprocess_df (u8 op1);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_FPU_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for operand decoding functions.
-*
-****************************************************************************/
-
-#ifndef __X86EMU_OPS_H
-#define __X86EMU_OPS_H
-
-extern void (*x86emu_optab[0x100])(u8 op1);
-extern void (*x86emu_optab2[0x100])(u8 op2);
-
-#endif /* __X86EMU_OPS_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: Watcom C++ 10.6 or later
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Inline assembler versions of the primitive operand
-* functions for faster performance. At the moment this is
-* x86 inline assembler, but these functions could be replaced
-* with native inline assembler for each supported processor
-* platform.
-*
-****************************************************************************/
-/* $XFree86$ */
-
-#ifndef __X86EMU_PRIM_ASM_H
-#define __X86EMU_PRIM_ASM_H
-
-#ifdef __WATCOMC__
-
-#ifndef VALIDATE
-#define __HAVE_INLINE_ASSEMBLER__
-#endif
-
-u32 get_flags_asm(void);
-#pragma aux get_flags_asm = \
- "pushf" \
- "pop eax" \
- value [eax] \
- modify exact [eax];
-
-u16 aaa_word_asm(u32 *flags,u16 d);
-#pragma aux aaa_word_asm = \
- "push [edi]" \
- "popf" \
- "aaa" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u16 aas_word_asm(u32 *flags,u16 d);
-#pragma aux aas_word_asm = \
- "push [edi]" \
- "popf" \
- "aas" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u16 aad_word_asm(u32 *flags,u16 d);
-#pragma aux aad_word_asm = \
- "push [edi]" \
- "popf" \
- "aad" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u16 aam_word_asm(u32 *flags,u8 d);
-#pragma aux aam_word_asm = \
- "push [edi]" \
- "popf" \
- "aam" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [ax] \
- modify exact [ax];
-
-u8 adc_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux adc_byte_asm = \
- "push [edi]" \
- "popf" \
- "adc al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 adc_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux adc_word_asm = \
- "push [edi]" \
- "popf" \
- "adc ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 adc_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux adc_long_asm = \
- "push [edi]" \
- "popf" \
- "adc eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-u8 add_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux add_byte_asm = \
- "push [edi]" \
- "popf" \
- "add al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 add_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux add_word_asm = \
- "push [edi]" \
- "popf" \
- "add ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 add_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux add_long_asm = \
- "push [edi]" \
- "popf" \
- "add eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-u8 and_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux and_byte_asm = \
- "push [edi]" \
- "popf" \
- "and al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 and_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux and_word_asm = \
- "push [edi]" \
- "popf" \
- "and ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 and_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux and_long_asm = \
- "push [edi]" \
- "popf" \
- "and eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-u8 cmp_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux cmp_byte_asm = \
- "push [edi]" \
- "popf" \
- "cmp al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 cmp_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux cmp_word_asm = \
- "push [edi]" \
- "popf" \
- "cmp ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 cmp_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux cmp_long_asm = \
- "push [edi]" \
- "popf" \
- "cmp eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-u8 daa_byte_asm(u32 *flags,u8 d);
-#pragma aux daa_byte_asm = \
- "push [edi]" \
- "popf" \
- "daa" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [al] \
- modify exact [al];
-
-u8 das_byte_asm(u32 *flags,u8 d);
-#pragma aux das_byte_asm = \
- "push [edi]" \
- "popf" \
- "das" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [al] \
- modify exact [al];
-
-u8 dec_byte_asm(u32 *flags,u8 d);
-#pragma aux dec_byte_asm = \
- "push [edi]" \
- "popf" \
- "dec al" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [al] \
- modify exact [al];
-
-u16 dec_word_asm(u32 *flags,u16 d);
-#pragma aux dec_word_asm = \
- "push [edi]" \
- "popf" \
- "dec ax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u32 dec_long_asm(u32 *flags,u32 d);
-#pragma aux dec_long_asm = \
- "push [edi]" \
- "popf" \
- "dec eax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] \
- value [eax] \
- modify exact [eax];
-
-u8 inc_byte_asm(u32 *flags,u8 d);
-#pragma aux inc_byte_asm = \
- "push [edi]" \
- "popf" \
- "inc al" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [al] \
- modify exact [al];
-
-u16 inc_word_asm(u32 *flags,u16 d);
-#pragma aux inc_word_asm = \
- "push [edi]" \
- "popf" \
- "inc ax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u32 inc_long_asm(u32 *flags,u32 d);
-#pragma aux inc_long_asm = \
- "push [edi]" \
- "popf" \
- "inc eax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] \
- value [eax] \
- modify exact [eax];
-
-u8 or_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux or_byte_asm = \
- "push [edi]" \
- "popf" \
- "or al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 or_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux or_word_asm = \
- "push [edi]" \
- "popf" \
- "or ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 or_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux or_long_asm = \
- "push [edi]" \
- "popf" \
- "or eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-u8 neg_byte_asm(u32 *flags,u8 d);
-#pragma aux neg_byte_asm = \
- "push [edi]" \
- "popf" \
- "neg al" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [al] \
- modify exact [al];
-
-u16 neg_word_asm(u32 *flags,u16 d);
-#pragma aux neg_word_asm = \
- "push [edi]" \
- "popf" \
- "neg ax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u32 neg_long_asm(u32 *flags,u32 d);
-#pragma aux neg_long_asm = \
- "push [edi]" \
- "popf" \
- "neg eax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] \
- value [eax] \
- modify exact [eax];
-
-u8 not_byte_asm(u32 *flags,u8 d);
-#pragma aux not_byte_asm = \
- "push [edi]" \
- "popf" \
- "not al" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] \
- value [al] \
- modify exact [al];
-
-u16 not_word_asm(u32 *flags,u16 d);
-#pragma aux not_word_asm = \
- "push [edi]" \
- "popf" \
- "not ax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] \
- value [ax] \
- modify exact [ax];
-
-u32 not_long_asm(u32 *flags,u32 d);
-#pragma aux not_long_asm = \
- "push [edi]" \
- "popf" \
- "not eax" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] \
- value [eax] \
- modify exact [eax];
-
-u8 rcl_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux rcl_byte_asm = \
- "push [edi]" \
- "popf" \
- "rcl al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 rcl_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux rcl_word_asm = \
- "push [edi]" \
- "popf" \
- "rcl ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 rcl_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux rcl_long_asm = \
- "push [edi]" \
- "popf" \
- "rcl eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u8 rcr_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux rcr_byte_asm = \
- "push [edi]" \
- "popf" \
- "rcr al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 rcr_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux rcr_word_asm = \
- "push [edi]" \
- "popf" \
- "rcr ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 rcr_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux rcr_long_asm = \
- "push [edi]" \
- "popf" \
- "rcr eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u8 rol_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux rol_byte_asm = \
- "push [edi]" \
- "popf" \
- "rol al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 rol_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux rol_word_asm = \
- "push [edi]" \
- "popf" \
- "rol ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 rol_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux rol_long_asm = \
- "push [edi]" \
- "popf" \
- "rol eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u8 ror_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux ror_byte_asm = \
- "push [edi]" \
- "popf" \
- "ror al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 ror_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux ror_word_asm = \
- "push [edi]" \
- "popf" \
- "ror ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 ror_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux ror_long_asm = \
- "push [edi]" \
- "popf" \
- "ror eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u8 shl_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux shl_byte_asm = \
- "push [edi]" \
- "popf" \
- "shl al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 shl_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux shl_word_asm = \
- "push [edi]" \
- "popf" \
- "shl ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 shl_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux shl_long_asm = \
- "push [edi]" \
- "popf" \
- "shl eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u8 shr_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux shr_byte_asm = \
- "push [edi]" \
- "popf" \
- "shr al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 shr_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux shr_word_asm = \
- "push [edi]" \
- "popf" \
- "shr ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 shr_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux shr_long_asm = \
- "push [edi]" \
- "popf" \
- "shr eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u8 sar_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux sar_byte_asm = \
- "push [edi]" \
- "popf" \
- "sar al,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [cl] \
- value [al] \
- modify exact [al cl];
-
-u16 sar_word_asm(u32 *flags,u16 d, u8 s);
-#pragma aux sar_word_asm = \
- "push [edi]" \
- "popf" \
- "sar ax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [cl] \
- value [ax] \
- modify exact [ax cl];
-
-u32 sar_long_asm(u32 *flags,u32 d, u8 s);
-#pragma aux sar_long_asm = \
- "push [edi]" \
- "popf" \
- "sar eax,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [cl] \
- value [eax] \
- modify exact [eax cl];
-
-u16 shld_word_asm(u32 *flags,u16 d, u16 fill, u8 s);
-#pragma aux shld_word_asm = \
- "push [edi]" \
- "popf" \
- "shld ax,dx,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [dx] [cl] \
- value [ax] \
- modify exact [ax dx cl];
-
-u32 shld_long_asm(u32 *flags,u32 d, u32 fill, u8 s);
-#pragma aux shld_long_asm = \
- "push [edi]" \
- "popf" \
- "shld eax,edx,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [edx] [cl] \
- value [eax] \
- modify exact [eax edx cl];
-
-u16 shrd_word_asm(u32 *flags,u16 d, u16 fill, u8 s);
-#pragma aux shrd_word_asm = \
- "push [edi]" \
- "popf" \
- "shrd ax,dx,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [dx] [cl] \
- value [ax] \
- modify exact [ax dx cl];
-
-u32 shrd_long_asm(u32 *flags,u32 d, u32 fill, u8 s);
-#pragma aux shrd_long_asm = \
- "push [edi]" \
- "popf" \
- "shrd eax,edx,cl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [edx] [cl] \
- value [eax] \
- modify exact [eax edx cl];
-
-u8 sbb_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux sbb_byte_asm = \
- "push [edi]" \
- "popf" \
- "sbb al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 sbb_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux sbb_word_asm = \
- "push [edi]" \
- "popf" \
- "sbb ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 sbb_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux sbb_long_asm = \
- "push [edi]" \
- "popf" \
- "sbb eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-u8 sub_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux sub_byte_asm = \
- "push [edi]" \
- "popf" \
- "sub al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 sub_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux sub_word_asm = \
- "push [edi]" \
- "popf" \
- "sub ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 sub_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux sub_long_asm = \
- "push [edi]" \
- "popf" \
- "sub eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-void test_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux test_byte_asm = \
- "push [edi]" \
- "popf" \
- "test al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- modify exact [al bl];
-
-void test_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux test_word_asm = \
- "push [edi]" \
- "popf" \
- "test ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- modify exact [ax bx];
-
-void test_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux test_long_asm = \
- "push [edi]" \
- "popf" \
- "test eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- modify exact [eax ebx];
-
-u8 xor_byte_asm(u32 *flags,u8 d, u8 s);
-#pragma aux xor_byte_asm = \
- "push [edi]" \
- "popf" \
- "xor al,bl" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [al] [bl] \
- value [al] \
- modify exact [al bl];
-
-u16 xor_word_asm(u32 *flags,u16 d, u16 s);
-#pragma aux xor_word_asm = \
- "push [edi]" \
- "popf" \
- "xor ax,bx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [ax] [bx] \
- value [ax] \
- modify exact [ax bx];
-
-u32 xor_long_asm(u32 *flags,u32 d, u32 s);
-#pragma aux xor_long_asm = \
- "push [edi]" \
- "popf" \
- "xor eax,ebx" \
- "pushf" \
- "pop [edi]" \
- parm [edi] [eax] [ebx] \
- value [eax] \
- modify exact [eax ebx];
-
-void imul_byte_asm(u32 *flags,u16 *ax,u8 d,u8 s);
-#pragma aux imul_byte_asm = \
- "push [edi]" \
- "popf" \
- "imul bl" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],ax" \
- parm [edi] [esi] [al] [bl] \
- modify exact [esi ax bl];
-
-void imul_word_asm(u32 *flags,u16 *ax,u16 *dx,u16 d,u16 s);
-#pragma aux imul_word_asm = \
- "push [edi]" \
- "popf" \
- "imul bx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],ax" \
- "mov [ecx],dx" \
- parm [edi] [esi] [ecx] [ax] [bx]\
- modify exact [esi edi ax bx dx];
-
-void imul_long_asm(u32 *flags,u32 *eax,u32 *edx,u32 d,u32 s);
-#pragma aux imul_long_asm = \
- "push [edi]" \
- "popf" \
- "imul ebx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],eax" \
- "mov [ecx],edx" \
- parm [edi] [esi] [ecx] [eax] [ebx] \
- modify exact [esi edi eax ebx edx];
-
-void mul_byte_asm(u32 *flags,u16 *ax,u8 d,u8 s);
-#pragma aux mul_byte_asm = \
- "push [edi]" \
- "popf" \
- "mul bl" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],ax" \
- parm [edi] [esi] [al] [bl] \
- modify exact [esi ax bl];
-
-void mul_word_asm(u32 *flags,u16 *ax,u16 *dx,u16 d,u16 s);
-#pragma aux mul_word_asm = \
- "push [edi]" \
- "popf" \
- "mul bx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],ax" \
- "mov [ecx],dx" \
- parm [edi] [esi] [ecx] [ax] [bx]\
- modify exact [esi edi ax bx dx];
-
-void mul_long_asm(u32 *flags,u32 *eax,u32 *edx,u32 d,u32 s);
-#pragma aux mul_long_asm = \
- "push [edi]" \
- "popf" \
- "mul ebx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],eax" \
- "mov [ecx],edx" \
- parm [edi] [esi] [ecx] [eax] [ebx] \
- modify exact [esi edi eax ebx edx];
-
-void idiv_byte_asm(u32 *flags,u8 *al,u8 *ah,u16 d,u8 s);
-#pragma aux idiv_byte_asm = \
- "push [edi]" \
- "popf" \
- "idiv bl" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],al" \
- "mov [ecx],ah" \
- parm [edi] [esi] [ecx] [ax] [bl]\
- modify exact [esi edi ax bl];
-
-void idiv_word_asm(u32 *flags,u16 *ax,u16 *dx,u16 dlo,u16 dhi,u16 s);
-#pragma aux idiv_word_asm = \
- "push [edi]" \
- "popf" \
- "idiv bx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],ax" \
- "mov [ecx],dx" \
- parm [edi] [esi] [ecx] [ax] [dx] [bx]\
- modify exact [esi edi ax dx bx];
-
-void idiv_long_asm(u32 *flags,u32 *eax,u32 *edx,u32 dlo,u32 dhi,u32 s);
-#pragma aux idiv_long_asm = \
- "push [edi]" \
- "popf" \
- "idiv ebx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],eax" \
- "mov [ecx],edx" \
- parm [edi] [esi] [ecx] [eax] [edx] [ebx]\
- modify exact [esi edi eax edx ebx];
-
-void div_byte_asm(u32 *flags,u8 *al,u8 *ah,u16 d,u8 s);
-#pragma aux div_byte_asm = \
- "push [edi]" \
- "popf" \
- "div bl" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],al" \
- "mov [ecx],ah" \
- parm [edi] [esi] [ecx] [ax] [bl]\
- modify exact [esi edi ax bl];
-
-void div_word_asm(u32 *flags,u16 *ax,u16 *dx,u16 dlo,u16 dhi,u16 s);
-#pragma aux div_word_asm = \
- "push [edi]" \
- "popf" \
- "div bx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],ax" \
- "mov [ecx],dx" \
- parm [edi] [esi] [ecx] [ax] [dx] [bx]\
- modify exact [esi edi ax dx bx];
-
-void div_long_asm(u32 *flags,u32 *eax,u32 *edx,u32 dlo,u32 dhi,u32 s);
-#pragma aux div_long_asm = \
- "push [edi]" \
- "popf" \
- "div ebx" \
- "pushf" \
- "pop [edi]" \
- "mov [esi],eax" \
- "mov [ecx],edx" \
- parm [edi] [esi] [ecx] [eax] [edx] [ebx]\
- modify exact [esi edi eax edx ebx];
-
-#endif
-
-#endif /* __X86EMU_PRIM_ASM_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for primitive operation functions.
-*
-****************************************************************************/
-
-#ifndef __X86EMU_PRIM_OPS_H
-#define __X86EMU_PRIM_OPS_H
-
-#include "x86emu/prim_asm.h"
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-u16 aaa_word (u16 d);
-u16 aas_word (u16 d);
-u16 aad_word (u16 d);
-u16 aam_word (u8 d);
-u8 adc_byte (u8 d, u8 s);
-u16 adc_word (u16 d, u16 s);
-u32 adc_long (u32 d, u32 s);
-u8 add_byte (u8 d, u8 s);
-u16 add_word (u16 d, u16 s);
-u32 add_long (u32 d, u32 s);
-u8 and_byte (u8 d, u8 s);
-u16 and_word (u16 d, u16 s);
-u32 and_long (u32 d, u32 s);
-u8 cmp_byte (u8 d, u8 s);
-u16 cmp_word (u16 d, u16 s);
-u32 cmp_long (u32 d, u32 s);
-u8 daa_byte (u8 d);
-u8 das_byte (u8 d);
-u8 dec_byte (u8 d);
-u16 dec_word (u16 d);
-u32 dec_long (u32 d);
-u8 inc_byte (u8 d);
-u16 inc_word (u16 d);
-u32 inc_long (u32 d);
-u8 or_byte (u8 d, u8 s);
-u16 or_word (u16 d, u16 s);
-u32 or_long (u32 d, u32 s);
-u8 neg_byte (u8 s);
-u16 neg_word (u16 s);
-u32 neg_long (u32 s);
-u8 not_byte (u8 s);
-u16 not_word (u16 s);
-u32 not_long (u32 s);
-u8 rcl_byte (u8 d, u8 s);
-u16 rcl_word (u16 d, u8 s);
-u32 rcl_long (u32 d, u8 s);
-u8 rcr_byte (u8 d, u8 s);
-u16 rcr_word (u16 d, u8 s);
-u32 rcr_long (u32 d, u8 s);
-u8 rol_byte (u8 d, u8 s);
-u16 rol_word (u16 d, u8 s);
-u32 rol_long (u32 d, u8 s);
-u8 ror_byte (u8 d, u8 s);
-u16 ror_word (u16 d, u8 s);
-u32 ror_long (u32 d, u8 s);
-u8 shl_byte (u8 d, u8 s);
-u16 shl_word (u16 d, u8 s);
-u32 shl_long (u32 d, u8 s);
-u8 shr_byte (u8 d, u8 s);
-u16 shr_word (u16 d, u8 s);
-u32 shr_long (u32 d, u8 s);
-u8 sar_byte (u8 d, u8 s);
-u16 sar_word (u16 d, u8 s);
-u32 sar_long (u32 d, u8 s);
-u16 shld_word (u16 d, u16 fill, u8 s);
-u32 shld_long (u32 d, u32 fill, u8 s);
-u16 shrd_word (u16 d, u16 fill, u8 s);
-u32 shrd_long (u32 d, u32 fill, u8 s);
-u8 sbb_byte (u8 d, u8 s);
-u16 sbb_word (u16 d, u16 s);
-u32 sbb_long (u32 d, u32 s);
-u8 sub_byte (u8 d, u8 s);
-u16 sub_word (u16 d, u16 s);
-u32 sub_long (u32 d, u32 s);
-void test_byte (u8 d, u8 s);
-void test_word (u16 d, u16 s);
-void test_long (u32 d, u32 s);
-u8 xor_byte (u8 d, u8 s);
-u16 xor_word (u16 d, u16 s);
-u32 xor_long (u32 d, u32 s);
-void imul_byte (u8 s);
-void imul_word (u16 s);
-void imul_long (u32 s);
-void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s);
-void mul_byte (u8 s);
-void mul_word (u16 s);
-void mul_long (u32 s);
-void idiv_byte (u8 s);
-void idiv_word (u16 s);
-void idiv_long (u32 s);
-void div_byte (u8 s);
-void div_word (u16 s);
-void div_long (u32 s);
-void ins (int size);
-void outs (int size);
-u16 mem_access_word (int addr);
-void push_word (u16 w);
-void push_long (u32 w);
-u16 pop_word (void);
-u32 pop_long (void);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_PRIM_OPS_H */
+++ /dev/null
-/****************************************************************************
-*
-* Realmode X86 Emulator Library
-*
-* Copyright (C) 1996-1999 SciTech Software, Inc.
-* Copyright (C) David Mosberger-Tang
-* Copyright (C) 1999 Egbert Eich
-*
-* ========================================================================
-*
-* Permission to use, copy, modify, distribute, and sell this software and
-* its documentation for any purpose is hereby granted without fee,
-* provided that the above copyright notice appear in all copies and that
-* both that copyright notice and this permission notice appear in
-* supporting documentation, and that the name of the authors not be used
-* in advertising or publicity pertaining to distribution of the software
-* without specific, written prior permission. The authors makes no
-* representations about the suitability of this software for any purpose.
-* It is provided "as is" without express or implied warranty.
-*
-* THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-* PERFORMANCE OF THIS SOFTWARE.
-*
-* ========================================================================
-*
-* Language: ANSI C
-* Environment: Any
-* Developer: Kendall Bennett
-*
-* Description: Header file for system specific functions. These functions
-* are always compiled and linked in the OS depedent libraries,
-* and never in a binary portable driver.
-*
-****************************************************************************/
-
-/* $XFree86: xc/extras/x86emu/src/x86emu/x86emu/x86emui.h,v 1.3 2000/04/17 16:29:47 eich Exp $ */
-
-#ifndef __X86EMU_X86EMUI_H
-#define __X86EMU_X86EMUI_H
-
-/* If we are compiling in C++ mode, we can compile some functions as
- * inline to increase performance (however the code size increases quite
- * dramatically in this case).
- */
-
-#if defined(__cplusplus) && !defined(_NO_INLINE)
-#define _INLINE inline
-#else
-#define _INLINE static
-#endif
-
-/* Get rid of unused parameters in C++ compilation mode */
-
-#ifdef __cplusplus
-#define X86EMU_UNUSED(v)
-#else
-#define X86EMU_UNUSED(v) v
-#endif
-
-#include "x86emu.h"
-#include "x86emu/regs.h"
-#include "x86emu/debug.h"
-#include "x86emu/decode.h"
-#include "x86emu/ops.h"
-#include "x86emu/prim_ops.h"
-#include "x86emu/fpu.h"
-#include "x86emu/fpu_regs.h"
-
-#ifdef IN_MODULE
-#include <xf86_ansic.h>
-#else
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-/*--------------------------- Inline Functions ----------------------------*/
-
-#ifdef __cplusplus
-extern "C" { /* Use "C" linkage when in C++ mode */
-#endif
-
-extern u8 (X86APIP sys_rdb)(u32 addr);
-extern u16 (X86APIP sys_rdw)(u32 addr);
-extern u32 (X86APIP sys_rdl)(u32 addr);
-extern void (X86APIP sys_wrb)(u32 addr,u8 val);
-extern void (X86APIP sys_wrw)(u32 addr,u16 val);
-extern void (X86APIP sys_wrl)(u32 addr,u32 val);
-
-extern u8 (X86APIP sys_inb)(X86EMU_pioAddr addr);
-extern u16 (X86APIP sys_inw)(X86EMU_pioAddr addr);
-extern u32 (X86APIP sys_inl)(X86EMU_pioAddr addr);
-extern void (X86APIP sys_outb)(X86EMU_pioAddr addr,u8 val);
-extern void (X86APIP sys_outw)(X86EMU_pioAddr addr,u16 val);
-extern void (X86APIP sys_outl)(X86EMU_pioAddr addr,u32 val);
-
-#ifdef __cplusplus
-} /* End of "C" linkage for C++ */
-#endif
-
-#endif /* __X86EMU_X86EMUI_H */
#define URL_INSTALL 1
#define DISK_INSTALL 2
#define INST_FILECOUNT 6600
-#define UNATTENDED_CONF "/cdrom/data/unattended.conf"
+#define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
int raid_disk = 0;
FILE *flog = NULL;
// make some beeps before wiping the system :)
if (unattended) {
- runcommandwithstatus("/bin/beep -f 450 -r 10 -D 800 -n -f 900 -l 1000", "WARNING: Unattended installation will start in 10 seconds...");
+ runcommandwithstatus("/bin/sleep 10", "WARNING: Unattended installation will start in 10 seconds...");
}
/* German is the default */
mysystem("/bin/setfont lat0-16");
- newtDrawRootText(14, 0, NAME " v" VERSION " - " SLOGAN );
+ newtDrawRootText(14, 0, NAME " " VERSION " - " SLOGAN );
newtPushHelpLine(ctr[TR_HELPLINE]);
if (!unattended) {
/* read source drive letter */
if ((handle = fopen("/source_device", "r")) == NULL) {
- errorbox("ERROR reading source_device");
+ errorbox(ctr[TR_ERROR_PROBING_CDROM]);
+ goto EXIT;
}
fgets(sourcedrive, 5, handle);
fprintf(flog, "Source drive: %s\n", sourcedrive);
int networkmenu(struct keyvalue *ethernetkv)
{
- int rc;
+ int i;
+ int count;
+ char nics;
+ char number;
+ char cbValue;
char driver[STRING_SIZE] = "";
char driveroptions[STRING_SIZE] = "";
struct keyvalue *kv = initkeyvalues();
int result = 0;
char commandstring[STRING_SIZE];
char address[STRING_SIZE], netmask[STRING_SIZE];
- int done;
FILE *handle;
- char line[STRING_SIZE];
char description[1000];
char message[1000];
char title[STRING_SIZE];
- done = 0;
- while (!done)
+ /* Detect and count nics */
+ count = mysystem("/bin/probenic.sh count");
+ fprintf(flog, "Number of detected nics: %s\n", count);
+
+/* sprintf(commandstring, "/bin/probenic.sh");
+ sprintf(message, ctr[TR_PROBING_FOR_NICS]);
+ runcommandwithstatus(commandstring, message); */
+
+/* handle = fopen("/nicdriver", "r");
+ fgets(nics, STRING_SIZE, handle);
+ fclose(handle); */
+
+/* fprintf(flog, "Detected NIC drivers: %s\n",driver); */
+
+/* sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
+ sprintf(message, ctr[TR_FOUND_NIC], NAME, description);
+ newtWinMessage(title, ctr[TR_OK], message); */
+
+ newtComponent form, checkbox, rb[count], button;
+ newtOpenWindow(10, 5, 60, 11, "Checkboxes and Radio buttons");
+
+ for (i = 1; i <= 2; i++)
{
- rc = newtWinTernary(ctr[TR_CONFIGURE_NETWORKING], ctr[TR_PROBE],
- ctr[TR_SELECT], ctr[TR_CANCEL], ctr[TR_CONFIGURE_NETWORKING_LONG]);
-
- if (rc == 0 || rc == 1)
- {
- sprintf(commandstring, "/bin/probenic.sh 1");
- sprintf(message, ctr[TR_PROBING_FOR_NICS]);
- runcommandwithstatus(commandstring, message);
-
- if ((handle = fopen("/nicdriver", "r")))
- {
- char *driver;
- fgets(line, STRING_SIZE-1, handle);
- fclose(handle);
- line[strlen(line) - 1] = 0;
- driver = strtok(line, ".");
- fprintf(flog, "Detected NIC driver: %s\n",driver);
- if (strlen(driver) > 1) {
- strcpy(driveroptions, "");
- findnicdescription(driver, description);
- sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
- sprintf(message, ctr[TR_FOUND_NIC], NAME, description);
- newtWinMessage(title, ctr[TR_OK], message);
- } else {
- errorbox(ctr[TR_PROBE_FAILED]);
- }
- }
+ fprintf(flog, "Scan: %d\n", i);
+ snprintf(commandstring, STRING_SIZE, "/bin/probenic.sh %i", i);
+ mysystem(commandstring);
+ if ((handle = fopen("/nicdriver", "r")) == NULL) {
+ errorbox(ctr[TR_ERROR]);
+ goto EXIT;
}
- else if (rc == 2)
- choosecards(driver, driveroptions);
+ fgets(driver, STRING_SIZE, handle);
+ fclose(handle);
+ findnicdescription(driver, description);
+ if ( i == 0 )
+ rb[i] = newtRadiobutton(1, i+2, description, 1, NULL);
else
- done = 1;
+ rb[i] = newtRadiobutton(1, i+2, description, 0, rb[i-1]);
+ }
+
+ button = newtButton(1, count+3, "OK");
+
+ form = newtForm(NULL, NULL, 0);
+ newtFormAddComponent(form, checkbox);
+ for (i = 1; i <= 2; i++) {
+ fprintf(flog, "Add: %d\n", i);
+ newtFormAddComponent(form, rb[i]);
+ }
+ newtFormAddComponent(form, button);
+
+ newtRunForm(form);
+ newtFinished();
+
+ for (i = 1; i <= 2; i++)
+ if (newtRadioGetCurrent(rb[0]) == rb[i])
+ printf("radio button picked: %d\n", i);
+ newtFormDestroy(form);
+
+
+/* snprintf(commandstring, STRING_SIZE, "/bin/probenic.sh 1");
+ mysystem(commandstring);
+ if ((handle = fopen("/nicdriver", "r")) == NULL) {
+ errorbox(ctr[TR_ERROR]);
+ goto EXIT;
}
+ fgets(driver, STRING_SIZE, handle);
+ fprintf(flog, "Green nic driver: %s\n", driver);
+ fclose(handle); */
/* Default is a GREEN nic only. */
/* Smoothie is not untarred yet, so we have to delay actually writing the
#!/bin/sh
-NUMBER=$1
-MODULES=`/bin/kudzu -qps -t 30 -c NETWORK | grep driver | cut -d ' ' -f 2 | sort | uniq`
+MODULES=$(/bin/kudzu -qps -t 30 -c NETWORK | grep driver | cut -d ' ' -f 2 | sort)
-if [ "$NUMBER" ]; then
- NICS=`echo $MODULES | head -$NUMBER`
+if [ "$1" == "count" ]; then
+ echo $(echo $MODULES | wc -l)
else
- NICS=$MODULES
+ NUMBER=$1
fi
-echo "$NICS" > /nicdriver
+if [ "$NUMBER" ]; then
+ echo "$(echo $MODULES | grep -n $NUMBER | cut -c 1-2 )" > /nicdriver
+else
+ echo "$MODULES" > /nicdriver
+fi
IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
END
beautify message DONE
-}
\ No newline at end of file
+}
+
+compile_tftpd() {
+ mkdir $BASEDIR/tmp
+ tar xvfz $BASEDIR/cache/tftp-hpa-0.42.tar.gz -C $BASEDIR/tmp
+ cd $BASEDIR/tmp/tftp-hpa-0.42
+ ./configure --prefix=/ipfire/trunk/tools/ \
+ --sbindir=/ipfire/trunk/tools/ --disable-nls
+ make
+ install -c tftpd/tftpd $BASEDIR/tools/in.tftpd
+ cd -
+ rm -rf $BASEDIR/tmp/tftp-hpa-0.42
+}
+
+start_tftpd() {
+ if [ ! -e $BASEDIR/tools/in.tftpd ]; then
+ compile_tftpd
+ fi
+ reload_tftpd
+ if [ "$?" == "0" ]; then
+ $BASEDIR/tools/in.tftpd -l -s $BASEDIR/tftpboot
+ beautify message DONE
+ else
+ echo -en "You don not have a pxe boot image in your base directory.\nPlease compile first."
+ beautify message FAIL
+ exit 1
+ fi
+}
+
+stop_tftpd() {
+ echo -n "Stopping TFTPD..."
+ killall in.tftpd >/dev/null 2>&1
+ sleep 3
+ killall -9 in.tftp >/dev/null 2>&1
+ beautify message DONE
+}
+
+reload_tftpd() {
+ if [ -e $BASEDIR/ipfire-$VERSION-pxe-$MACHINE.tgz ]; then
+ mkdir -p $BASEDIR/tftpboot
+ tar xvfz $BASEDIR/ipfire-$VERSION-pxe-$MACHINE.tgz -C $BASEDIR/tftpboot
+ return 0
+ fi
+ return 1
+}