Remove source files that have been dead since day-1 of this branch.
This commit is contained in:
		
							parent
							
								
									eb95128f61
								
							
						
					
					
						commit
						7dff8d98a9
					
				|  | @ -1,32 +0,0 @@ | |||
| module_LTLIBRARIES = libscanpci.la libpcidata.la | ||||
| 
 | ||||
| libpcidata_la_LDFLAGS = -avoid-version | ||||
| libscanpci_la_LDFLAGS = -avoid-version | ||||
| 
 | ||||
| libpcidata_la_SOURCES = xf86PciData.c | ||||
| libscanpci_la_SOURCES = xf86ScanPci.c | ||||
| 
 | ||||
| INCLUDES = $(XORG_INCS) | ||||
| 
 | ||||
| AM_CFLAGS = $(XORG_CFLAGS) | ||||
| 
 | ||||
| BUILT_SOURCES = xf86PciIds.h | ||||
| 
 | ||||
| EXTRA_DIST = \
 | ||||
| 	xf86PciData.h \
 | ||||
| 	xf86PciIds.h \
 | ||||
| 	xf86PciStdIds.h \
 | ||||
| 	xf86PciStr.h \
 | ||||
| 	xf86ScanPci.h \
 | ||||
| 	pci.ids \
 | ||||
| 	extrapci.ids \
 | ||||
| 	pciid2c.pl | ||||
| 
 | ||||
| xf86PciData.c: | ||||
| 	echo "#define PCIDATA" > $@ | ||||
| 	echo "#include \"$(srcdir)/xf86ScanPci.c\"" >> $@ | ||||
| 
 | ||||
| xf86PciIds.h: $(srcdir)/../common/xf86PciInfo.h | ||||
| 	cat $(srcdir)/pci.ids $(srcdir)/extrapci.ids | $(PERL) $(srcdir)/pciid2c.pl $(srcdir)/../common/xf86PciInfo.h > xf86PciIds.h | ||||
| 
 | ||||
| DISTCLEANFILES = xf86PciData.c xf86PciIds.h | ||||
|  | @ -1,48 +0,0 @@ | |||
| # | ||||
| #	Modifications and additions to the standard list of PCI IDs in | ||||
| #	pci.ids. | ||||
| # | ||||
| #	To modify an entry, simply add the modified version here. | ||||
| #	To leave part of an entry unchanged, use '"' for the name | ||||
| #	(e.g., leave the vendor name unchanged while adding/modifying | ||||
| #	a device).  To delete an entry, set the name to '-'. | ||||
| # | ||||
| #	One syntax extension is allowing a 16-bit class value to be | ||||
| #	specified for a device (see the syntax description below). | ||||
| # | ||||
| #	Don't make gratuitous changes, and please send back | ||||
| #	changes/additions that aren't XFree86-specific to the pciids | ||||
| #	project (http://pciids.sf.net/). | ||||
| # | ||||
| #	$XdotOrg: xserver/xorg/hw/xfree86/scanpci/extrapci.ids,v 1.6 2005/09/19 18:54:05 alanc Exp $ | ||||
| #	$XFree86: xc/programs/Xserver/hw/xfree86/etc/extrapci.ids,v 1.11 2003/12/18 16:22:27 dawes Exp $ | ||||
| # | ||||
| 
 | ||||
| # Vendors, devices and subsystems. Please keep sorted. | ||||
| 
 | ||||
| # Syntax: | ||||
| # vendor  vendor_name | ||||
| #	device  device_name				<-- single tab | ||||
| #		C  class				<-- two tabs | ||||
| #		subvendor subdevice  subsystem_name	<-- two tabs | ||||
| # | ||||
| # Use lower-case hex digits for all numeric values. | ||||
| 
 | ||||
| # Example: Add a new chipset for vendor who's ID is xyzw | ||||
| # | ||||
| # xyzw	" | ||||
| #	20ce	New Chipset Description | ||||
| 
 | ||||
| 1102	" | ||||
| 	0002	" | ||||
| 		C  0401 | ||||
| 
 | ||||
| # Some NVIDIA cards that are not in the master pci.ids file yet. | ||||
| 10de	" | ||||
| 	0046	NV40 [GeForce 6800 GT] | ||||
| 	0048	GeForce 6800 XT | ||||
| 	0147	GeForce 6700 XL | ||||
| 	0160	GeForce 6500 | ||||
| 	0163	GeForce 6200 LE | ||||
| 	0169	GeForce 6250 | ||||
| 
 | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,389 +0,0 @@ | |||
| #!/usr/bin/perl | ||||
| 
 | ||||
| # $XdotOrg$ | ||||
| 
 | ||||
| # Automatically generate the data structures for PCI vendor/device lists | ||||
| # from the pci.ids file. | ||||
| # | ||||
| # It should be run as: | ||||
| # | ||||
| #   perl pciid2c.pl ../common/xf86PciInfo.h < pci.ids > xf86PciStdIds.h | ||||
| # | ||||
| # | ||||
| # Copyright © 2002 by The XFree86 Project, Inc. | ||||
| # | ||||
| # 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 | ||||
| # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s) | ||||
| # and author(s) shall not be used in advertising or otherwise to promote | ||||
| # the sale, use or other dealings in this Software without prior written | ||||
| # authorization from the copyright holder(s) and author(s). | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Author: David Dawes | ||||
| # | ||||
| # $XFree86: xc/programs/Xserver/hw/xfree86/scanpci/pciid2c.pl,v 1.3 2003/08/24 17:37:10 dawes Exp $ | ||||
| # | ||||
| 
 | ||||
| if (@ARGV[0]) { | ||||
|     $infofile = @ARGV[0]; | ||||
| } | ||||
| 
 | ||||
| # | ||||
| # The basic pci.ids format is: | ||||
| #   - Vendor lines start with four (lower case) hex digits | ||||
| #   - Device lines start with one tab followed by four hex digits | ||||
| #   - Subsystem lines start with two tabs followed by two sets of four | ||||
| #     hex digits. | ||||
| #   - Class overrides for devices start with two tabs followed by a "C", | ||||
| #     followed by four hex digits with the class/subclass value. | ||||
| #   - Class lines start with a "C". | ||||
| #   - Comment lines start with a '#'. | ||||
| #   - Blank lines are ignored. | ||||
| # | ||||
| # We allow for extra lines to be appended to modify existing entries or | ||||
| # add new ones.  To add/modify Device entries without modifying the | ||||
| # Vendor name, a special vendor name of '"' is used (mnemonic: "ditto"). | ||||
| # Similarly for adding subsystem names without modifying (or adding) | ||||
| # a corresponding device entry.  To rename an existing entry, simply | ||||
| # provide the new name.  To remove an existing entry, use the special | ||||
| # name '-'. | ||||
| # | ||||
| 
 | ||||
| while (<STDIN>) { | ||||
|     # Process data lines | ||||
|     if (/^([0-9a-f]{4})\s+(.*)/) { | ||||
| 	$vendor = $1; | ||||
| 	if ($2 eq '-') { | ||||
| 	    delete($vendors{$vendor}); | ||||
| 	} elsif ($2 ne '"') { | ||||
| 	    $vendors{$vendor} = $2; | ||||
| 	    # Remove " characters | ||||
| 	    $vendors{$vendor} =~ s/"//g; | ||||
| 	    # Remove multiple "?" sequences to avoid trigraphs | ||||
| 	    $vendors{$vendor} =~ s/\?+/\?/g; | ||||
| 	} | ||||
|     } elsif (/^\t([0-9a-f]{4})\s+(.*)/) { | ||||
| 	$device = $1; | ||||
| 	if ($2 eq '-') { | ||||
| 	    delete($devices{$vendor}{$device}); | ||||
| 	} elsif ($2 ne '"') { | ||||
| 	    $devices{$vendor}{$device} = $2; | ||||
| 	    # Remove " characters | ||||
| 	    $devices{$vendor}{$device} =~ s/"//g; | ||||
| 	    # Remove multiple "?" sequences to avoid trigraphs | ||||
| 	    $devices{$vendor}{$device} =~ s/\?+/\?/g; | ||||
| 	} | ||||
|     } elsif (/^\t\t([0-9a-f]{4})\s+([0-9a-f]{4})\s+(.*)/) { | ||||
| 	$v = $1; | ||||
| 	$s = $2; | ||||
| 	if ($3 eq '-') { | ||||
| 	    delete($subsystems{$v}{$s}); | ||||
| 	    delete($devsubsystems{$vendor}{$device}{"$v-$s"}); | ||||
| 	} elsif ($3 ne '"') { | ||||
| 	    if ($subsystems{$v}{$s}) { | ||||
| 		#print STDERR "Duplicate subsytem: $v, $s, \"$subsystems{$v}{$s}\", \"$3\"\n"; | ||||
| 	    } | ||||
| 	    $subsystems{$v}{$s} = $3; | ||||
| 	    # Remove " characters | ||||
| 	    $subsystems{$v}{$s} =~ s/"//g; | ||||
| 	    # Remove multiple "?" sequences to avoid trigraphs | ||||
| 	    $subsystems{$v}{$s} =~ s/\?+/\?/g; | ||||
| 	    $devsubsystems{$vendor}{$device}{"$v-$s"} = $subsystems{$v}{$s}; | ||||
| 	} | ||||
|     } elsif (/^\t\tC\s+([0-9a-f]{4})/) { | ||||
| 	$classes{$vendor}{$device} = $1; | ||||
|     } | ||||
|     # Ignore all other lines. | ||||
| } | ||||
| 
 | ||||
| # Find which vendors are "video" vendors. | ||||
| if ($infofile) { | ||||
|     open(INFO, "<$infofile") || die "Can't open $infofile"; | ||||
|     while (<INFO>) { | ||||
| 	if (/^#define\s+PCI_VENDOR_.*0x([0-9a-fA-F]{4})/) { | ||||
| 	    $vendor = $1; | ||||
| 	    $vendor =~ tr/A-F/a-f/; | ||||
| 	    $video{$vendor} = 1; | ||||
| 	} | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| # | ||||
| # This layout is quite different from that used in the old xf86PciInfo.h | ||||
| # file.  One main difference is that the list is initialised at runtime. | ||||
| # It's currently a flat list.  This could be improved. | ||||
| # | ||||
| 
 | ||||
| # Print out header information. | ||||
| 
 | ||||
| $proj = "XdotOrg"; | ||||
| print "/* \$$proj\$ */ | ||||
| 
 | ||||
| /* | ||||
|  * THIS FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT | ||||
|  * | ||||
|  * It is generated by pciid2c.pl using data from the following files: | ||||
|  * | ||||
|  *    ../etc/pci.ids | ||||
|  *    ../etc/extrapci.ids | ||||
|  *    ../common/xf86PciInfo.h | ||||
|  */ | ||||
| 
 | ||||
| /* | ||||
|  * Copyright © 2002 by the XFree86 Project, Inc. | ||||
|  * | ||||
|  * The pci.ids file and the data it contains are from the Linux PCI ID's | ||||
|  * Project (http://pciids.sf.net/).  It is maintained by Martin Mares | ||||
|  * <mj\@ucw.cz> and other volunteers.  The pci.ids file is licensed under | ||||
|  * the BSD 3-clause or GPL version 2 or later licenses. | ||||
|  */ | ||||
| 
 | ||||
| #include \"xf86PciInfo.h\" | ||||
| #ifndef NULL | ||||
| #define NULL (void *)0 | ||||
| #endif | ||||
| 
 | ||||
| "; | ||||
| 
 | ||||
| # The following #ifdefs are used: | ||||
| #  - INIT_SUBSYS_INFO -- initialise subsystem data | ||||
| #  - INIT_VENDOR_SUBSYS_INFO -- initialise a vendor<->subsystem table. | ||||
| #  - VENDOR_INCLUDE_NONVIDEO -- include data for non-video vendors. | ||||
| 
 | ||||
| # Define static variables with all of the strings. | ||||
| 
 | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
|     } | ||||
|     print "static const char pci_vendor_${vendor}[] = \"$vendors{$vendor}\";\n"; | ||||
|     foreach $device (sort keys %{$devices{$vendor}}) { | ||||
| 	print "static const char pci_device_${vendor}_${device}[] = " . | ||||
| 	      "\"$devices{$vendor}{$device}\";\n"; | ||||
| 	foreach $subsys (sort keys %{$devsubsystems{$vendor}{$device}}) { | ||||
| 	    $s = $subsys; | ||||
| 	    ($v) = split /-/, $s; | ||||
| 	    if ($infofile && !$video{$vendor} && $video{$v}) { | ||||
| 		print "#endif\n"; | ||||
| 	    } | ||||
| 	    $s =~ s/-/_/; | ||||
| 	    print "#ifdef INIT_SUBSYS_INFO\n"; | ||||
| 	    print "static const char pci_subsys_${vendor}_${device}_${s}[] = " . | ||||
| 		  "\"$devsubsystems{$vendor}{$device}{$subsys}\";\n"; | ||||
| 	    print "#endif\n"; | ||||
| 	    if ($infofile && !$video{$vendor} && $video{$v}) { | ||||
| 		print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
| 	    } | ||||
| 	} | ||||
|     } | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	print "#endif\n"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| # Pre-initialise the table structures (from the inner to the outer). | ||||
| 
 | ||||
| # First, the subsys structures. | ||||
| 
 | ||||
| print "#ifdef INIT_SUBSYS_INFO\n"; | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	$pre = "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
|     } else { | ||||
| 	undef($pre); | ||||
| 	undef($post); | ||||
|     } | ||||
|     foreach $device (sort keys %{$devices{$vendor}}) { | ||||
| 	foreach $subsys (sort keys %{$devsubsystems{$vendor}{$device}}) { | ||||
| 	    $s = $subsys; | ||||
| 	    $s =~ tr/-/_/; | ||||
| 	    ($vid, $sid) = split /_/, $s; | ||||
| 	    if ($pre) { | ||||
| 		print $pre; | ||||
| 		undef($pre); | ||||
| 		$post = "#endif\n"; | ||||
| 	    } | ||||
| 	    if ($infofile && !$video{$vendor} && $video{$vid}) { | ||||
| 		print "#endif\n"; | ||||
| 	    } | ||||
| 	    print "static const pciSubsystemInfo " . | ||||
| 		  "pci_ss_info_${vendor}_${device}_$s =\n"; | ||||
| 	    print "\t{0x$vid, 0x$sid, pci_subsys_${vendor}_${device}_$s, 0};\n"; | ||||
| 	    print "#undef pci_ss_info_$s\n"; | ||||
| 	    print "#define pci_ss_info_$s pci_ss_info_${vendor}_${device}_$s\n"; | ||||
| 	    if ($infofile && !$video{$vendor} && $video{$vid}) { | ||||
| 		print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
| 	    } | ||||
| 	} | ||||
|     } | ||||
|     if ($post) { | ||||
| 	print $post; | ||||
| 	undef($post); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| # Next, the list of per vendor+device subsystem arrays | ||||
| 
 | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	$pre = "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
|     } else { | ||||
| 	undef($pre); | ||||
| 	undef($post); | ||||
|     } | ||||
|     foreach $device (sort keys %{$devices{$vendor}}) { | ||||
| 	if (scalar(keys %{$devsubsystems{$vendor}{$device}}) > 0) { | ||||
| 	    if ($pre) { | ||||
| 		print $pre; | ||||
| 		undef($pre); | ||||
| 		$post = "#endif\n"; | ||||
| 	    } | ||||
| 	    print "static const pciSubsystemInfo *pci_ss_list_${vendor}_${device}[] = {\n"; | ||||
| 	    foreach $sub (sort keys %{$devsubsystems{$vendor}{$device}}) { | ||||
| 		$sub =~ s/-/_/; | ||||
| 		print "\t&pci_ss_info_${vendor}_${device}_${sub},\n"; | ||||
| 	    } | ||||
| 	    print "\tNULL\n};\n"; | ||||
| 	} else { | ||||
| 	    print "#define pci_ss_list_${vendor}_${device} NULL\n"; | ||||
| 	} | ||||
|     } | ||||
|     if ($post) { | ||||
| 	print $post; | ||||
| 	undef($post); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| # Next, the list of per vendor subsystem arrays | ||||
| 
 | ||||
| print "#ifdef INIT_VENDOR_SUBSYS_INFO\n"; | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if (scalar(keys %{$subsystems{$vendor}}) > 0) { | ||||
| 	if ($infofile && !$video{$vendor}) { | ||||
| 	    print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
| 	} | ||||
| 	print "static const pciSubsystemInfo *pci_ss_list_${vendor}[] = {\n"; | ||||
| 	foreach $sub (sort keys %{$subsystems{$vendor}}) { | ||||
| 	    print "\t&pci_ss_info_${vendor}_${sub},\n"; | ||||
| 	} | ||||
| 	print "\tNULL\n};\n"; | ||||
| 	if ($infofile && !$video{$vendor}) { | ||||
| 	    print "#endif\n"; | ||||
| 	} | ||||
|     } else { | ||||
| 	print "#define pci_ss_list_${vendor} NULL\n"; | ||||
|     } | ||||
| } | ||||
| print "#endif /* INIT_VENDOR_SUBSYS_INFO */\n"; | ||||
| print "#endif /* INIT_SUBSYS_INFO */\n"; | ||||
| 
 | ||||
| # Next the device structures | ||||
| 
 | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	$pre = "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
|     } else { | ||||
| 	undef($pre); | ||||
| 	undef($post); | ||||
|     } | ||||
|     foreach $device (sort keys %{$devices{$vendor}}) { | ||||
| 	if ($pre) { | ||||
| 	    print $pre; | ||||
| 	    undef($pre); | ||||
| 	    $post = "#endif\n"; | ||||
| 	} | ||||
| 	if ($classes{$vendor}{$device}) { | ||||
| 	    $class = "0x$classes{$vendor}{$device}"; | ||||
| 	} else { | ||||
| 	    $class = "0"; | ||||
| 	} | ||||
| 	print "static const pciDeviceInfo " . | ||||
| 	      "pci_dev_info_${vendor}_${device} = {\n"; | ||||
| 	print "\t0x$device, pci_device_${vendor}_${device},\n"; | ||||
| 	print "#ifdef INIT_SUBSYS_INFO\n"; | ||||
| 	print "\tpci_ss_list_${vendor}_${device},\n"; | ||||
| 	print "#else\n"; | ||||
| 	print "\tNULL,\n"; | ||||
| 	print "#endif\n"; | ||||
| 	print "\t$class\n};\n"; | ||||
|     } | ||||
|     if ($post) { | ||||
| 	print $post; | ||||
| 	undef($post); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| # Next, the list of per vendor device arrays | ||||
| 
 | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if (scalar(keys %{$devices{$vendor}}) > 0) { | ||||
| 	if ($infofile && !$video{$vendor}) { | ||||
| 	    print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
| 	} | ||||
| 	print "static const pciDeviceInfo *pci_dev_list_${vendor}[] = {\n"; | ||||
| 	foreach $device (sort keys %{$devices{$vendor}}) { | ||||
| 	    print "\t&pci_dev_info_${vendor}_${device},\n"; | ||||
| 	} | ||||
| 	print "\tNULL\n};\n"; | ||||
| 	if ($infofile && !$video{$vendor}) { | ||||
| 	    print "#endif\n"; | ||||
| 	} | ||||
|     } else { | ||||
| 	print "#define pci_dev_list_${vendor} NULL\n"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| # Next, the main vendor list | ||||
| 
 | ||||
| print " | ||||
| static const pciVendorInfo pciVendorInfoList[] = { | ||||
| "; | ||||
| 
 | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
|     } | ||||
|     print "\t{0x$vendor, pci_vendor_$vendor, pci_dev_list_$vendor},\n"; | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	print "#endif\n"; | ||||
|     } | ||||
| } | ||||
| print "\t{0x0000, NULL, NULL}\n};\n"; | ||||
| 
 | ||||
| # Finally, the main vendor/subsystem list | ||||
| 
 | ||||
| print " | ||||
| #if defined(INIT_VENDOR_SUBSYS_INFO) && defined(INIT_SUBSYS_INFO) | ||||
| static const pciVendorSubsysInfo pciVendorSubsysInfoList[] = { | ||||
| "; | ||||
| 
 | ||||
| foreach $vendor (sort keys %vendors) { | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	print "#ifdef VENDOR_INCLUDE_NONVIDEO\n"; | ||||
|     } | ||||
|     print "\t{0x$vendor, pci_vendor_$vendor, pci_ss_list_$vendor},\n"; | ||||
|     if ($infofile && !$video{$vendor}) { | ||||
| 	print "#endif\n"; | ||||
|     } | ||||
| } | ||||
| print "\t{0x0000, NULL, NULL}\n};\n"; | ||||
| print "#endif\n"; | ||||
|  | @ -1,70 +0,0 @@ | |||
| /* $XFree86: xc/programs/Xserver/hw/xfree86/scanpci/xf86PciData.h,v 1.3 2003/08/24 17:37:10 dawes Exp $ */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (c) 2000-2002 by The XFree86 Project, Inc. | ||||
|  * | ||||
|  * 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 | ||||
|  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s) | ||||
|  * and author(s) shall not be used in advertising or otherwise to promote | ||||
|  * the sale, use or other dealings in this Software without prior written | ||||
|  * authorization from the copyright holder(s) and author(s). | ||||
|  */ | ||||
| 
 | ||||
| #ifdef HAVE_XORG_CONFIG_H | ||||
| #include <xorg-config.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifndef PCI_DATA_H_ | ||||
| #define PCI_DATA_H_ | ||||
| 
 | ||||
| #define NOVENDOR 0xFFFF | ||||
| #define NODEVICE 0xFFFF | ||||
| #define NOSUBSYS 0xFFFF | ||||
| 
 | ||||
| typedef Bool (*ScanPciSetupProcPtr)(void); | ||||
| typedef void (*ScanPciCloseProcPtr)(void); | ||||
| typedef int (*ScanPciFindByDeviceProcPtr)( | ||||
| 			unsigned short vendor, unsigned short device, | ||||
| 			unsigned short svendor, unsigned short subsys, | ||||
| 			const char **vname, const char **dname, | ||||
| 			const char **svname, const char **sname); | ||||
| typedef int (*ScanPciFindBySubsysProcPtr)( | ||||
| 			unsigned short svendor, unsigned short subsys, | ||||
| 			const char **svname, const char **sname); | ||||
| 
 | ||||
| /*
 | ||||
|  * Whoever loads this module needs to define these and initialise them | ||||
|  * after loading. | ||||
|  */ | ||||
| extern ScanPciSetupProcPtr xf86SetupPciIds; | ||||
| extern ScanPciCloseProcPtr xf86ClosePciIds; | ||||
| extern ScanPciFindByDeviceProcPtr xf86FindPciNamesByDevice; | ||||
| extern ScanPciFindBySubsysProcPtr xf86FindPciNamesBySubsys; | ||||
| 
 | ||||
| Bool ScanPciSetupPciIds(void); | ||||
| void ScanPciClosePciIds(void); | ||||
| int ScanPciFindPciNamesByDevice(unsigned short vendor, unsigned short device, | ||||
| 				unsigned short svendor, unsigned short subsys, | ||||
| 				const char **vname, const char **dname, | ||||
| 				const char **svname, const char **sname); | ||||
| int ScanPciFindPciNamesBySubsys(unsigned short svendor, unsigned short subsys, | ||||
| 				const char **svname, const char **sname); | ||||
| 
 | ||||
| #endif | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,67 +0,0 @@ | |||
| /* $XFree86: xc/programs/Xserver/hw/xfree86/scanpci/xf86PciStr.h,v 1.2 2003/08/24 17:37:10 dawes Exp $ */ | ||||
| /*
 | ||||
|  * Copyright (c) 2002 by The XFree86 Project, Inc. | ||||
|  * | ||||
|  * 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 | ||||
|  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s) | ||||
|  * and author(s) shall not be used in advertising or otherwise to promote | ||||
|  * the sale, use or other dealings in this Software without prior written | ||||
|  * authorization from the copyright holder(s) and author(s). | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Structs used to hold the pre-parsed pci.ids data.  These are private | ||||
|  * to the scanpci and pcidata modules. | ||||
|  */ | ||||
| 
 | ||||
| #ifdef HAVE_XORG_CONFIG_H | ||||
| #include <xorg-config.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifndef _XF86_PCISTR_H | ||||
| #define _XF86_PCISTR_H | ||||
| 
 | ||||
| typedef struct { | ||||
|     unsigned short VendorID; | ||||
|     unsigned short SubsystemID; | ||||
|     const char *SubsystemName; | ||||
|     unsigned short class; | ||||
| } pciSubsystemInfo; | ||||
| 
 | ||||
| typedef struct { | ||||
|     unsigned short DeviceID; | ||||
|     const char *DeviceName; | ||||
|     const pciSubsystemInfo **Subsystem; | ||||
|     unsigned short class; | ||||
| } pciDeviceInfo; | ||||
| 
 | ||||
| typedef struct { | ||||
|     unsigned short VendorID; | ||||
|     const char *VendorName; | ||||
|     const pciDeviceInfo **Device; | ||||
| } pciVendorInfo; | ||||
| 
 | ||||
| typedef struct { | ||||
|     unsigned short VendorID; | ||||
|     const char *VendorName; | ||||
|     const pciSubsystemInfo **Subsystem; | ||||
| } pciVendorSubsysInfo; | ||||
| 
 | ||||
| #endif /* _XF86_PCISTR_H */ | ||||
|  | @ -1,346 +0,0 @@ | |||
| /*
 | ||||
|  * Display the Subsystem Vendor Id and Subsystem Id in order to identify | ||||
|  * the cards installed in this computer | ||||
|  * | ||||
|  * A lot of this comes from Robin Cutshaw's scanpci | ||||
|  * | ||||
|  */ | ||||
| /*
 | ||||
|  * Copyright (c) 1995-2002 by The XFree86 Project, Inc. | ||||
|  * | ||||
|  * 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 | ||||
|  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s) | ||||
|  * and author(s) shall not be used in advertising or otherwise to promote | ||||
|  * the sale, use or other dealings in this Software without prior written | ||||
|  * authorization from the copyright holder(s) and author(s). | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * This file is used to build both the scanpci and pcidata modules. | ||||
|  * The interfaces have changed compared with XFree86 4.2.0 and earlier. | ||||
|  * The data is no longer exported directly.  Lookup functions are provided. | ||||
|  * This means that the data format can change in the future without affecting | ||||
|  * the exported interfaces. | ||||
|  * | ||||
|  * The namespaces for pcidata and scanpci clash, so both modules can't be | ||||
|  * loaded at the same time.  The X server should only load the scanpci module | ||||
|  * when run with the '-scanpci' flag.  The main difference between the | ||||
|  * two modules is size.  pcidata only holds the subset of data that is | ||||
|  * "interesting" to the X server.  "Interesting" is determined by the | ||||
|  * PCI_VENDOR_* defines in ../common/xf86PciInfo.h. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /* XXX This is including a lot of stuff that modules should not include! */ | ||||
| 
 | ||||
| #ifdef HAVE_XORG_CONFIG_H | ||||
| #include <xorg-config.h> | ||||
| #endif | ||||
| 
 | ||||
| #include <X11/X.h> | ||||
| #include "os.h" | ||||
| #include "xf86.h" | ||||
| #include "xf86Priv.h" | ||||
| #include "xf86Pci.h" | ||||
| #include "xf86_OSproc.h" | ||||
| 
 | ||||
| #include <ctype.h> | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #ifndef PCIDATA | ||||
| #define VENDOR_INCLUDE_NONVIDEO | ||||
| #endif | ||||
| #define INIT_SUBSYS_INFO | ||||
| #define INIT_VENDOR_SUBSYS_INFO | ||||
| 
 | ||||
| #include "xf86PciStr.h" | ||||
| #include "xf86PciIds.h" | ||||
| #include "xf86ScanPci.h" | ||||
| 
 | ||||
| #include "xf86Module.h" | ||||
| 
 | ||||
| #ifdef PCIDATA | ||||
| 
 | ||||
| static XF86ModuleVersionInfo pciDataVersRec = { | ||||
| 	"pcidata", | ||||
| 	MODULEVENDORSTRING, | ||||
| 	MODINFOSTRING1, | ||||
| 	MODINFOSTRING2, | ||||
| 	XORG_VERSION_CURRENT, | ||||
| 	1, 0, 0, | ||||
| 	ABI_CLASS_VIDEODRV, | ||||
| 	ABI_VIDEODRV_VERSION, | ||||
| 	NULL, | ||||
| 	{0, 0, 0, 0} | ||||
| }; | ||||
| 
 | ||||
| _X_EXPORT XF86ModuleData pcidataModuleData = { &pciDataVersRec, NULL, NULL }; | ||||
| 
 | ||||
| #else  | ||||
| 
 | ||||
| static XF86ModuleVersionInfo scanPciVersRec = { | ||||
| 	"scanpci", | ||||
| 	MODULEVENDORSTRING, | ||||
| 	MODINFOSTRING1, | ||||
| 	MODINFOSTRING2, | ||||
| 	XORG_VERSION_CURRENT, | ||||
| 	1, 0, 0, | ||||
| 	ABI_CLASS_VIDEODRV, | ||||
| 	ABI_VIDEODRV_VERSION, | ||||
| 	NULL, | ||||
| 	{0, 0, 0, 0} | ||||
| }; | ||||
| 
 | ||||
| _X_EXPORT XF86ModuleData scanpciModuleData = { &scanPciVersRec, NULL, NULL }; | ||||
| 
 | ||||
| #endif /* PCIDATA */ | ||||
| 
 | ||||
| /* Initialisation/Close hooks, in case they're ever needed. */ | ||||
| Bool | ||||
| ScanPciSetupPciIds(void) | ||||
| { | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| ScanPciClosePciIds(void) | ||||
| { | ||||
|     return; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * The return value is the number of strings found, or -1 for an error. | ||||
|  * Requested strings that aren't found are set to NULL. | ||||
|  */ | ||||
| 
 | ||||
| int | ||||
| ScanPciFindPciNamesByDevice(unsigned short vendor, unsigned short device, | ||||
| 			 unsigned short svendor, unsigned short subsys, | ||||
| 			 const char **vname, const char **dname, | ||||
| 			 const char **svname, const char **sname) | ||||
| { | ||||
|     int i, j, k; | ||||
|     const pciDeviceInfo **pDev; | ||||
|     const pciSubsystemInfo **pSub; | ||||
| 
 | ||||
|     /* It's an error to not provide the Vendor */ | ||||
|     if (vendor == NOVENDOR) | ||||
| 	return -1; | ||||
| 
 | ||||
|     /* Initialise returns requested/provided to NULL */ | ||||
|     if (vname) | ||||
| 	*vname = NULL; | ||||
|     if (device != NODEVICE && dname) | ||||
| 	*dname = NULL; | ||||
|     if (svendor != NOVENDOR && svname) | ||||
| 	*svname = NULL; | ||||
|     if (subsys != NOSUBSYS && sname) | ||||
| 	*sname = NULL; | ||||
| 
 | ||||
|     for (i = 0; pciVendorInfoList[i].VendorName; i++) { | ||||
| 	if (vendor == pciVendorInfoList[i].VendorID) { | ||||
| 	    if (vname) { | ||||
| 		*vname = pciVendorInfoList[i].VendorName; | ||||
| 	    } | ||||
| 	    if (device == NODEVICE) { | ||||
| 		return 1; | ||||
| 	    } | ||||
| 	    pDev = pciVendorInfoList[i].Device; | ||||
| 	    if (!pDev) { | ||||
| 		return 1; | ||||
| 	    } | ||||
| 	    for (j = 0; pDev[j]; j++) { | ||||
| 		if (device == pDev[j]->DeviceID) { | ||||
| 		    if (dname) { | ||||
| 			*dname = pDev[j]->DeviceName; | ||||
| 		    } | ||||
| 		    if (svendor == NOVENDOR) { | ||||
| 			return 2; | ||||
| 		    } | ||||
| 		    for (k = 0; pciVendorInfoList[k].VendorName; k++) { | ||||
| 			if (svendor && | ||||
| 			    svendor == pciVendorInfoList[k].VendorID) { | ||||
| 			    if (svname) { | ||||
| 				*svname = pciVendorInfoList[k].VendorName; | ||||
| 			    } | ||||
| 			    if (subsys == NOSUBSYS) { | ||||
| 				return 3; | ||||
| 			    } | ||||
| 			    break; | ||||
| 			} | ||||
| 		    } | ||||
| 		    if (!pciVendorInfoList[k].VendorName) { | ||||
| 			return 2; | ||||
| 		    } | ||||
| 		    pSub = pDev[j]->Subsystem; | ||||
| 		    if (!pSub) { | ||||
| 			return 3; | ||||
| 		    } | ||||
| 		    for (k = 0; pSub[k]; k++) { | ||||
| 			if (svendor == pSub[k]->VendorID && | ||||
| 			    subsys == pSub[k]->SubsystemID) { | ||||
| 			    if (sname) | ||||
| 				*sname = pSub[k]->SubsystemName; | ||||
| 			    return 4; | ||||
| 			} | ||||
| 		    } | ||||
| 		    /* No vendor/subsys match */ | ||||
| 		    return 3; | ||||
| 		} | ||||
| 	    } | ||||
| 	    /* No device match */ | ||||
| 	    return 1; | ||||
| 	} | ||||
|     } | ||||
|     /* No vendor match */ | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| ScanPciFindPciNamesBySubsys(unsigned short svendor, unsigned short subsys, | ||||
| 			 const char **svname, const char **sname) | ||||
| { | ||||
|     int i, j; | ||||
|     const pciSubsystemInfo **pSub; | ||||
| 
 | ||||
|     /* It's an error to not provide the Vendor */ | ||||
|     if (svendor == NOVENDOR) | ||||
| 	return -1; | ||||
| 
 | ||||
|     /* Initialise returns requested/provided to NULL */ | ||||
|     if (svname) | ||||
| 	*svname = NULL; | ||||
|     if (subsys != NOSUBSYS && sname) | ||||
| 	*sname = NULL; | ||||
| 
 | ||||
|     for (i = 0; pciVendorSubsysInfoList[i].VendorName; i++) { | ||||
| 	if (svendor == pciVendorSubsysInfoList[i].VendorID) { | ||||
| 	    if (svname) { | ||||
| 		*svname = pciVendorSubsysInfoList[i].VendorName; | ||||
| 	    } | ||||
| 	    if (subsys == NOSUBSYS) { | ||||
| 		return 1; | ||||
| 	    } | ||||
| 	    pSub = pciVendorSubsysInfoList[i].Subsystem; | ||||
| 	    if (!pSub) { | ||||
| 		return 1; | ||||
| 	    } | ||||
| 	    for (j = 0; pSub[j]; j++) { | ||||
| 		if (subsys == pSub[j]->SubsystemID) { | ||||
| 		    if (sname) { | ||||
| 			*sname = pSub[j]->SubsystemName; | ||||
| 		    } | ||||
| 		} | ||||
| 	    } | ||||
| 	    /* No subsys match */ | ||||
| 	    return 1; | ||||
| 	} | ||||
|     } | ||||
|     /* No vendor match */ | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| #ifndef PCIDATA | ||||
| void | ||||
| ScanPciDisplayPCICardInfo(int verbosity) | ||||
| { | ||||
|     pciConfigPtr pcrp, *pcrpp; | ||||
|     int i; | ||||
| 
 | ||||
|     xf86EnableIO(); | ||||
|     pcrpp = xf86scanpci(0); | ||||
| 
 | ||||
|     if (pcrpp == NULL) { | ||||
|         xf86MsgVerb(X_NONE,0,"No PCI info available\n"); | ||||
| 	return; | ||||
|     } | ||||
|     xf86MsgVerb(X_NONE,0,"Probing for PCI devices (Bus:Device:Function)\n\n"); | ||||
|     for (i = 0; (pcrp = pcrpp[i]); i++) { | ||||
| 	const char *svendorname = NULL, *subsysname = NULL; | ||||
| 	const char *vendorname = NULL, *devicename = NULL; | ||||
| 	Bool noCard = FALSE; | ||||
| 	const char *prefix1 = "", *prefix2 = ""; | ||||
| 
 | ||||
| 	xf86MsgVerb(X_NONE, -verbosity, "(%d:%d:%d) ", | ||||
| 		    pcrp->busnum, pcrp->devnum, pcrp->funcnum); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Lookup as much as we can about the device. | ||||
| 	 */ | ||||
| 	if (pcrp->pci_subsys_vendor || pcrp->pci_subsys_card) { | ||||
| 	    ScanPciFindPciNamesByDevice(pcrp->pci_vendor, pcrp->pci_device, | ||||
| 				     NOVENDOR, NOSUBSYS, | ||||
| 				     &vendorname, &devicename, NULL, NULL); | ||||
| 	} else { | ||||
| 	    ScanPciFindPciNamesByDevice(pcrp->pci_vendor, pcrp->pci_device, | ||||
| 				     pcrp->pci_subsys_vendor, | ||||
| 				     pcrp->pci_subsys_card, | ||||
| 				     &vendorname, &devicename, | ||||
| 				     &svendorname, &subsysname); | ||||
| 	} | ||||
| 
 | ||||
| 	if (svendorname) | ||||
| 	    xf86MsgVerb(X_NONE, -verbosity, "%s ", svendorname); | ||||
| 	if (subsysname) | ||||
| 	    xf86MsgVerb(X_NONE, -verbosity, "%s ", subsysname); | ||||
| 	if (svendorname && !subsysname) { | ||||
| 	    if (pcrp->pci_subsys_card && pcrp->pci_subsys_card != NOSUBSYS) { | ||||
| 		xf86MsgVerb(X_NONE, -verbosity, "unknown card (0x%04x) ", | ||||
| 			    pcrp->pci_subsys_card); | ||||
| 	    } else { | ||||
| 		xf86MsgVerb(X_NONE, -verbosity, "card "); | ||||
| 	    } | ||||
| 	} | ||||
| 	if (!svendorname && !subsysname) { | ||||
| 	    /*
 | ||||
| 	     * We didn't find a text representation of the information  | ||||
| 	     * about the card. | ||||
| 	     */ | ||||
| 	    if (pcrp->pci_subsys_vendor || pcrp->pci_subsys_card) { | ||||
| 		/*
 | ||||
| 		 * If there was information and we just couldn't interpret | ||||
| 		 * it, print it out as unknown, anyway. | ||||
| 		 */ | ||||
| 		xf86MsgVerb(X_NONE, -verbosity, | ||||
| 			    "unknown card (0x%04x/0x%04x) ", | ||||
| 			    pcrp->pci_subsys_vendor, pcrp->pci_subsys_card); | ||||
| 	    } else | ||||
| 		noCard = TRUE; | ||||
| 	} | ||||
| 	if (!noCard) { | ||||
| 	    prefix1 = "using a "; | ||||
| 	    prefix2 = "using an "; | ||||
| 	} | ||||
| 	if (vendorname && devicename) { | ||||
| 	    xf86MsgVerb(X_NONE, -verbosity,"%s%s %s\n", prefix1, vendorname, | ||||
| 			devicename); | ||||
| 	} else if (vendorname) { | ||||
| 	    xf86MsgVerb(X_NONE, -verbosity, | ||||
| 			"%sunknown chip (DeviceId 0x%04x) from %s\n", | ||||
| 			prefix2, pcrp->pci_device, vendorname); | ||||
| 	} else { | ||||
| 	    xf86MsgVerb(X_NONE, -verbosity, | ||||
| 			"%sunknown chipset(0x%04x/0x%04x)\n", | ||||
| 			prefix2, pcrp->pci_vendor, pcrp->pci_device); | ||||
| 	} | ||||
|     } | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | @ -1,49 +0,0 @@ | |||
| /* $XFree86: xc/programs/Xserver/hw/xfree86/scanpci/xf86ScanPci.h,v 1.3 2003/08/24 17:37:10 dawes Exp $ */ | ||||
| /*
 | ||||
|  * Copyright (c) 2000-2002 by The XFree86 Project, Inc. | ||||
|  * | ||||
|  * 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 | ||||
|  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s) | ||||
|  * and author(s) shall not be used in advertising or otherwise to promote | ||||
|  * the sale, use or other dealings in this Software without prior written | ||||
|  * authorization from the copyright holder(s) and author(s). | ||||
|  */ | ||||
| 
 | ||||
| #ifdef HAVE_XORG_CONFIG_H | ||||
| #include <xorg-config.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCANPCI_H_ | ||||
| #define SCANPCI_H_ | ||||
| 
 | ||||
| #include "xf86PciData.h" | ||||
| 
 | ||||
| typedef void (*ScanPciDisplayCardInfoProcPtr)(int verbosity); | ||||
| 
 | ||||
| /*
 | ||||
|  * Whoever loads this module needs to define these and initialise them | ||||
|  * after loading. | ||||
|  */ | ||||
| 
 | ||||
| extern ScanPciDisplayCardInfoProcPtr xf86DisplayPCICardInfo; | ||||
| 
 | ||||
| void ScanPciDisplayPCICardInfo(int verbosity); | ||||
| 
 | ||||
| #endif | ||||
|  | @ -1,3 +0,0 @@ | |||
| pcitweak.1 | ||||
| pcitweak.1x | ||||
| 
 | ||||
|  | @ -1,60 +0,0 @@ | |||
| # Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 | ||||
| # 
 | ||||
| # 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, and/or sell copies of the Software, and to permit persons
 | ||||
| # to whom the Software is furnished to do so, provided that the above
 | ||||
| # copyright notice(s) and this permission notice appear in all copies of
 | ||||
| # the Software and that both the above copyright notice(s) and this
 | ||||
| # permission notice appear in supporting documentation.
 | ||||
| # 
 | ||||
| # 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
 | ||||
| # OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 | ||||
| # HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
 | ||||
| # 
 | ||||
| # Except as contained in this notice, the name of a copyright holder
 | ||||
| # shall not be used in advertising or otherwise to promote the sale, use
 | ||||
| # or other dealings in this Software without prior written authorization
 | ||||
| # of the copyright holder.
 | ||||
| # 
 | ||||
| 
 | ||||
| bin_PROGRAMS = pcitweak | ||||
| 
 | ||||
| XFREE86_SRCDIR 	= $(top_srcdir)/hw/xfree86 | ||||
| DUMMYLIB_SRCDIR	= $(XFREE86_SRCDIR)/dummylib | ||||
| 
 | ||||
| INCLUDES = $(XORG_INCS) -I$(DUMMYLIB_SRCDIR) | ||||
| 
 | ||||
| pcitweak_CFLAGS = $(XORG_CFLAGS) | ||||
| pcitweak_LDADD = \
 | ||||
| 	../../os-support/libxorgos.la \
 | ||||
| 	../../dummylib/libdummy-nonserver.a \
 | ||||
| 	${SYS_LIBS} | ||||
| 
 | ||||
| pcitweak_SOURCES =	\
 | ||||
| 	pcitweak.c | ||||
| 
 | ||||
| appmandir = $(APP_MAN_DIR) | ||||
| 
 | ||||
| appman_PRE = pcitweak.man | ||||
| appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) | ||||
| 
 | ||||
| include $(top_srcdir)/cpprules.in | ||||
| 
 | ||||
| EXTRA_DIST = pcitweak.man.pre | ||||
| BUILT_SOURCES = $(appman_PRE) | ||||
| CLEANFILES = $(appman_PRE) $(appman_DATA) | ||||
| 
 | ||||
| SUFFIXES += .$(APP_MAN_SUFFIX) .man | ||||
| 
 | ||||
| .man.$(APP_MAN_SUFFIX): | ||||
| 	-rm -f $@ | ||||
| 	$(LN_S) $< $@ | ||||
|  | @ -1,242 +0,0 @@ | |||
| /* $XFree86: xc/programs/Xserver/hw/xfree86/etc/pcitweak.c,v 1.17 2003/08/24 17:37:01 dawes Exp $ */ | ||||
| /*
 | ||||
|  * Copyright (c) 1999-2002 by The XFree86 Project, Inc. | ||||
|  * | ||||
|  * 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 | ||||
|  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s) | ||||
|  * and author(s) shall not be used in advertising or otherwise to promote | ||||
|  * the sale, use or other dealings in this Software without prior written | ||||
|  * authorization from the copyright holder(s) and author(s). | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * pcitweak.c | ||||
|  * | ||||
|  * Author: David Dawes <dawes@xfree86.org> | ||||
|  */ | ||||
| 
 | ||||
| #include <X11/X.h> | ||||
| #include "os.h" | ||||
| #include "xf86.h" | ||||
| #include "xf86Priv.h" | ||||
| #include "xf86_OSproc.h" | ||||
| #include "xf86Pci.h" | ||||
| 
 | ||||
| #ifdef __CYGWIN__ | ||||
| #include <getopt.h> | ||||
| #endif | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| #include <stdlib.h> | ||||
| #ifdef __linux__ | ||||
| /* to get getopt on Linux */ | ||||
| #ifndef __USE_POSIX2 | ||||
| #define __USE_POSIX2 | ||||
| #endif | ||||
| #endif | ||||
| #include <unistd.h> | ||||
| #if defined(ISC) || defined(Lynx) | ||||
| extern char *optarg; | ||||
| extern int optind, opterr; | ||||
| #endif | ||||
| 
 | ||||
| pciVideoPtr *xf86PciVideoInfo = NULL; | ||||
| 
 | ||||
| static void usage(void); | ||||
| static Bool parsePciBusString(const char *id, int *bus, int *device, int *func); | ||||
| static char *myname = NULL; | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|     int c; | ||||
|     PCITAG tag; | ||||
|     int bus, device, func; | ||||
|     Bool list = FALSE, rd = FALSE, wr = FALSE; | ||||
|     Bool byte = FALSE, halfword = FALSE; | ||||
|     int offset = 0; | ||||
|     CARD32 value = 0; | ||||
|     char *id = NULL, *end; | ||||
| 
 | ||||
|     myname = argv[0]; | ||||
|     while ((c = getopt(argc, argv, "bhlr:w:")) != -1) { | ||||
| 	switch (c) { | ||||
| 	case 'b': | ||||
| 	    byte = TRUE; | ||||
| 	    break; | ||||
| 	case 'h': | ||||
| 	    halfword = TRUE; | ||||
| 	    break; | ||||
| 	case 'l': | ||||
| 	    list = TRUE; | ||||
| 	    break; | ||||
| 	case 'r': | ||||
| 	    rd = TRUE; | ||||
| 	    id = optarg; | ||||
| 	    break; | ||||
| 	case 'w': | ||||
| 	    wr = TRUE; | ||||
| 	    id = optarg; | ||||
| 	    break; | ||||
| 	case '?': | ||||
| 	default: | ||||
| 	    usage(); | ||||
| 	} | ||||
|     } | ||||
|     argc -= optind; | ||||
|     argv += optind; | ||||
| 
 | ||||
|     if (list) { | ||||
| 	xf86Verbose = 2; | ||||
| 	xf86EnableIO(); | ||||
| 	xf86scanpci(0); | ||||
| 	xf86DisableIO(); | ||||
| 	exit(0); | ||||
|     } | ||||
| 
 | ||||
|     if (rd && wr) | ||||
| 	usage(); | ||||
|     if (wr && argc != 2) | ||||
| 	usage(); | ||||
|     if (rd && argc != 1) | ||||
| 	usage(); | ||||
|     if (byte && halfword) | ||||
| 	usage(); | ||||
| 
 | ||||
|     if (rd || wr) { | ||||
| 	if (!parsePciBusString(id, &bus, &device, &func)) { | ||||
| 	    fprintf(stderr, "%s: Bad PCI ID string\n", myname); | ||||
| 	    usage(); | ||||
| 	} | ||||
| 	offset = strtoul(argv[0], &end, 0); | ||||
| 	if (*end != '\0') { | ||||
| 	    fprintf(stderr, "%s: Bad offset\n", myname); | ||||
| 	    usage(); | ||||
| 	} | ||||
| 	if (halfword) { | ||||
| 	    if (offset % 2) { | ||||
| 		fprintf(stderr, "%s: offset must be a multiple of two\n", | ||||
| 			myname); | ||||
| 		exit(1); | ||||
| 	    } | ||||
| 	} else if (!byte) { | ||||
| 	    if (offset % 4) { | ||||
| 		fprintf(stderr, "%s: offset must be a multiple of four\n", | ||||
| 			myname); | ||||
| 		exit(1); | ||||
| 	    } | ||||
| 	} | ||||
|     } else { | ||||
| 	usage(); | ||||
|     } | ||||
|      | ||||
|     if (wr) { | ||||
| 	value = strtoul(argv[1], &end, 0); | ||||
| 	if (*end != '\0') { | ||||
| 	    fprintf(stderr, "%s: Bad value\n", myname); | ||||
| 	    usage(); | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     xf86EnableIO(); | ||||
| 
 | ||||
|     /*
 | ||||
|      * This is needed to setup all the buses.  Otherwise secondary buses | ||||
|      * can't be accessed. | ||||
|      */ | ||||
|     xf86scanpci(0); | ||||
| 
 | ||||
|     tag = pciTag(bus, device, func); | ||||
|     if (rd) { | ||||
| 	if (byte) { | ||||
| 	    printf("0x%02x\n", (unsigned int)pciReadByte(tag, offset) & 0xFF); | ||||
| 	} else if (halfword) { | ||||
| 	    printf("0x%04x\n", (unsigned int)pciReadWord(tag, offset) & 0xFFFF); | ||||
| 	} else { | ||||
| 	    printf("0x%08lx\n", (unsigned long)pciReadLong(tag, offset)); | ||||
| 	} | ||||
|     } else if (wr) { | ||||
| 	if (byte) { | ||||
| 	    pciWriteByte(tag, offset, value & 0xFF); | ||||
| 	} else if (halfword) { | ||||
| 	    pciWriteWord(tag, offset, value & 0xFFFF); | ||||
| 	} else { | ||||
| 	    pciWriteLong(tag, offset, value); | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     xf86DisableIO(); | ||||
|     exit(0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| usage() | ||||
| { | ||||
|     fprintf(stderr, "usage:\tpcitweak -l\n" | ||||
| 		    "\tpcitweak -r ID [-b | -h] offset\n" | ||||
| 		    "\tpcitweak -w ID [-b | -h] offset value\n" | ||||
| 		    "\n" | ||||
| 		    "\t\t-l  -- list\n" | ||||
| 		    "\t\t-r  -- read\n" | ||||
| 		    "\t\t-w  -- write\n" | ||||
| 		    "\t\t-b  -- read/write a single byte\n" | ||||
| 		    "\t\t-h  -- read/write a single halfword (16 bit)\n" | ||||
| 		    "\t\tID  -- PCI ID string in form bus:dev:func " | ||||
| 					"(all in hex)\n"); | ||||
| 	 | ||||
|     exit(1); | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| parsePciBusString(const char *busID, int *bus, int *device, int *func) | ||||
| { | ||||
|     /*
 | ||||
|      * The format is assumed to be "bus:device:func", where bus, device | ||||
|      * and func are hexadecimal integers.  func may be omitted and assumed to | ||||
|      * be zero, although it doing this isn't encouraged. | ||||
|      */ | ||||
| 
 | ||||
|     char *p, *s, *end; | ||||
| 
 | ||||
|     s = strdup(busID); | ||||
|     p = strtok(s, ":"); | ||||
|     if (p == NULL || *p == 0) | ||||
| 	return FALSE; | ||||
|     *bus = strtoul(p, &end, 16); | ||||
|     if (*end != '\0') | ||||
| 	return FALSE; | ||||
|     p = strtok(NULL, ":"); | ||||
|     if (p == NULL || *p == 0) | ||||
| 	return FALSE; | ||||
|     *device = strtoul(p, &end, 16); | ||||
|     if (*end != '\0') | ||||
| 	return FALSE; | ||||
|     *func = 0; | ||||
|     p = strtok(NULL, ":"); | ||||
|     if (p == NULL || *p == 0) | ||||
| 	return TRUE; | ||||
|     *func = strtoul(p, &end, 16); | ||||
|     if (*end != '\0') | ||||
| 	return FALSE; | ||||
|     return TRUE; | ||||
| } | ||||
| 
 | ||||
| #include "xf86getpagesize.c" | ||||
| 
 | ||||
|  | @ -1,64 +0,0 @@ | |||
| .\" $XFree86: xc/programs/Xserver/hw/xfree86/etc/pcitweak.man,v 3.3 2001/01/27 18:20:56 dawes Exp $  | ||||
| .TH PCITWEAK 1 __vendorversion__ | ||||
| .SH NAME | ||||
| pcitweak - read/write PCI config space | ||||
| .SH SYNOPSIS | ||||
| .B pcitweak | ||||
| .B \-l | ||||
| .br | ||||
| .B pcitweak | ||||
| .B \-r | ||||
| .I PCI-ID | ||||
| .RB [ \-b | \-h ] | ||||
| .I offset | ||||
| .br | ||||
| .B pcitweak | ||||
| .B \-w | ||||
| .I PCI-ID | ||||
| .RB [ \-b | \-h ] | ||||
| .I offset | ||||
| .I value | ||||
| .SH DESCRIPTION | ||||
| .I Pcitweak | ||||
| is a utility that can be used to examine or change registers in the PCI | ||||
| configuration space.  On most platforms | ||||
| .I pcitweak | ||||
| can only be run by the root user. | ||||
| .SH OPTIONS | ||||
| .TP 8 | ||||
| .B \-l | ||||
| Probe the PCI buses and print a line for each detected device.  Each line | ||||
| contains the bus location (bus:device:function), chip vendor/device, card | ||||
| (subsystem) vendor/card, revision, class and header type.  All values | ||||
| printed are in hexadecimal. | ||||
| .TP 8 | ||||
| .BI "\-r " PCI-ID | ||||
| Read the PCI configuration space register at | ||||
| .I offset | ||||
| for the PCI device at bus location | ||||
| .IR PCI-ID . | ||||
| .I PCI-ID | ||||
| should be given in the form bus:device:function, with each value in | ||||
| hexadecimal.  By default, a 32-bit register is read. | ||||
| .TP 8 | ||||
| .BI "\-w " PCI-ID | ||||
| Write | ||||
| .I value | ||||
| to the PCI configuration space register at | ||||
| .I offset | ||||
| for the PCI device at bus location | ||||
| .IR PCI-ID . | ||||
| .I PCI-ID | ||||
| should be given in the form bus:device:function, with each value in | ||||
| hexadecimal.  By default, a 32-bit register is written. | ||||
| .TP 8 | ||||
| .B \-b | ||||
| Read or write an 8-bit value (byte). | ||||
| .TP 8 | ||||
| .B \-h | ||||
| Read or write a 16-bit value (halfword). | ||||
| .SH "SEE ALSO" | ||||
| scanpci(1) | ||||
| .SH AUTHORS | ||||
| David Dawes | ||||
| .RI ( dawes@xfree86.org ). | ||||
|  | @ -1,2 +0,0 @@ | |||
| scanpci.1 | ||||
| scanpci.1x | ||||
|  | @ -1,62 +0,0 @@ | |||
| # Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 | ||||
| # 
 | ||||
| # 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, and/or sell copies of the Software, and to permit persons
 | ||||
| # to whom the Software is furnished to do so, provided that the above
 | ||||
| # copyright notice(s) and this permission notice appear in all copies of
 | ||||
| # the Software and that both the above copyright notice(s) and this
 | ||||
| # permission notice appear in supporting documentation.
 | ||||
| # 
 | ||||
| # 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
 | ||||
| # OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 | ||||
| # HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
 | ||||
| # 
 | ||||
| # Except as contained in this notice, the name of a copyright holder
 | ||||
| # shall not be used in advertising or otherwise to promote the sale, use
 | ||||
| # or other dealings in this Software without prior written authorization
 | ||||
| # of the copyright holder.
 | ||||
| # 
 | ||||
| 
 | ||||
| bin_PROGRAMS = scanpci | ||||
| 
 | ||||
| XFREE86_SRCDIR 	= $(top_srcdir)/hw/xfree86 | ||||
| SCANPCI_SRCDIR 	= $(XFREE86_SRCDIR)/scanpci  | ||||
| DUMMYLIB_SRCDIR	= $(XFREE86_SRCDIR)/dummylib | ||||
| 
 | ||||
| INCLUDES = $(XORG_INCS) -I$(SCANPCI_SRCDIR) -I$(DUMMYLIB_SRCDIR) | ||||
| 
 | ||||
| scanpci_CFLAGS = $(XORG_CFLAGS) | ||||
| scanpci_LDADD = \
 | ||||
| 	../../scanpci/libscanpci.la \
 | ||||
| 	../../os-support/libxorgos.la \
 | ||||
| 	../../dummylib/libdummy-nonserver.a \
 | ||||
| 	${SYS_LIBS} | ||||
| 
 | ||||
| scanpci_SOURCES =	\
 | ||||
| 	scanpci.c | ||||
| 
 | ||||
| appmandir = $(APP_MAN_DIR) | ||||
| 
 | ||||
| appman_PRE = scanpci.man | ||||
| appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) | ||||
| 
 | ||||
| include $(top_srcdir)/cpprules.in | ||||
| 
 | ||||
| EXTRA_DIST = scanpci.man.pre | ||||
| BUILT_SOURCES = $(appman_PRE) | ||||
| CLEANFILES = $(appman_PRE) $(appman_DATA) | ||||
| 
 | ||||
| SUFFIXES += .$(APP_MAN_SUFFIX) .man | ||||
| 
 | ||||
| .man.$(APP_MAN_SUFFIX): | ||||
| 	-rm -f $@ | ||||
| 	$(LN_S) $< $@ | ||||
|  | @ -1,780 +0,0 @@ | |||
| /*
 | ||||
|  * Copyright 2000 by Egbert Eich | ||||
|  * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org> | ||||
|  * Copyright 2002 by David Dawes | ||||
|  * | ||||
|  * 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 names of the above listed copyright holder(s) | ||||
|  * not be used in advertising or publicity pertaining to distribution of | ||||
|  * the software without specific, written prior permission.  The above listed | ||||
|  * copyright holder(s) make(s) no representations about the suitability of this | ||||
|  * software for any purpose.  It is provided "as is" without express or | ||||
|  * implied warranty. | ||||
|  * | ||||
|  * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD | ||||
|  * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | ||||
|  * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) 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. | ||||
|  * | ||||
|  */ | ||||
| /* $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.91tsi Exp $ */ | ||||
| 
 | ||||
| #include <X11/X.h> | ||||
| #include "os.h" | ||||
| #include "xf86.h" | ||||
| #include "xf86Priv.h" | ||||
| #include "xf86_OSproc.h" | ||||
| #include "xf86Pci.h" | ||||
| #include "xf86PciInfo.h" | ||||
| #include "xf86ScanPci.h" | ||||
| #include "dummylib.h" | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| #include <stdlib.h> | ||||
| #ifdef __linux__ | ||||
| /* to get getopt on Linux */ | ||||
| #ifndef __USE_POSIX2 | ||||
| #define __USE_POSIX2 | ||||
| #endif | ||||
| #endif | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| #if defined(ISC) || defined(Lynx) | ||||
| extern char *optarg; | ||||
| extern int optind, opterr; | ||||
| #endif | ||||
| 
 | ||||
| pciVideoPtr *xf86PciVideoInfo = NULL; | ||||
| 
 | ||||
| static void usage(void); | ||||
| static void identify_card(pciConfigPtr pcr, int verbose); | ||||
| static void print_default_class(pciConfigPtr pcr); | ||||
| static void print_bridge_pci_class(pciConfigPtr pcr); | ||||
| static void print_mach64(pciConfigPtr pcr); | ||||
| static void print_i128(pciConfigPtr pcr); | ||||
| static void print_dc21050(pciConfigPtr pcr); | ||||
| static void print_simba(pciConfigPtr pcr); | ||||
| static void print_460gx_sac(pciConfigPtr pcr); | ||||
| static void print_460gx_pxb(pciConfigPtr pcr); | ||||
| static void print_460gx_gxb(pciConfigPtr pcr); | ||||
| 
 | ||||
| #define MAX_DEV_PER_VENDOR 40 | ||||
| 
 | ||||
| typedef struct { | ||||
|     unsigned int Vendor; | ||||
|     struct { | ||||
| 	int DeviceID; | ||||
| 	void(*func)(pciConfigPtr); | ||||
|     } Device[MAX_DEV_PER_VENDOR]; | ||||
| } pciVendorDevFuncInfo; | ||||
| 
 | ||||
| static pciVendorDevFuncInfo vendorDeviceFuncInfo[] = { | ||||
|     { PCI_VENDOR_ATI, { | ||||
| 	{ PCI_CHIP_MACH64CT, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64CX, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64ET, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GB, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GD, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GI, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GL, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GM, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GN, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GO, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GP, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GQ, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GR, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GS, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GT, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GU, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GV, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GW, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GX, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GY, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64GZ, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LB, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LD, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LG, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LI, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LM, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LN, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LP, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LQ, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LR, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64LS, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64VT, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64VU, print_mach64 }, | ||||
| 	{ PCI_CHIP_MACH64VV, print_mach64 }, | ||||
| 	{ 0x0000,  NULL } } }, | ||||
|     { PCI_VENDOR_DIGITAL, { | ||||
| 	{ PCI_CHIP_DC21050, print_dc21050}, | ||||
| 	{ 0x0000, NULL } } }, | ||||
|     { PCI_VENDOR_NUMNINE, { | ||||
| 	{ PCI_CHIP_I128, print_i128 }, | ||||
| 	{ PCI_CHIP_I128_2, print_i128 }, | ||||
| 	{ PCI_CHIP_I128_T2R, print_i128 }, | ||||
| 	{ PCI_CHIP_I128_T2R4, print_i128 }, | ||||
| 	{ 0x0000, NULL } } }, | ||||
|     { PCI_VENDOR_SUN, { | ||||
| 	{ PCI_CHIP_SIMBA, print_simba }, | ||||
| 	{ 0x0000, NULL } } }, | ||||
|     { PCI_VENDOR_INTEL, { | ||||
| 	{ PCI_CHIP_460GX_SAC, print_460gx_sac }, | ||||
| 	{ PCI_CHIP_460GX_PXB, print_460gx_pxb }, | ||||
| 	{ PCI_CHIP_460GX_GXB_1, print_460gx_gxb }, | ||||
| 	{ PCI_CHIP_460GX_WXB, print_460gx_pxb },	/* Uncertain */ | ||||
| 	{ 0x0000, NULL } } }, | ||||
|     { 0x0000, { | ||||
| 	{ 0x0000, NULL } } } | ||||
| }; | ||||
| 
 | ||||
| static void | ||||
| usage(void) | ||||
| { | ||||
|     printf("Usage: scanpci [-v12OfV]\n"); | ||||
|     printf("           -v print config space\n"); | ||||
|     printf("           -1 config type 1\n"); | ||||
|     printf("           -2 config type 2\n"); | ||||
|     printf("           -O use OS config support\n"); | ||||
|     printf("           -f force config type\n"); | ||||
|     printf("           -V set message verbosity level\n"); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|     pciConfigPtr *pcrpp = NULL; | ||||
|     int Verbose = 0; | ||||
|     int i = 0; | ||||
|     int force = 0; | ||||
|     int c; | ||||
| 
 | ||||
|     xf86Info.pciFlags = PCIProbe1; | ||||
| 
 | ||||
|     while ((c = getopt(argc, argv, "?v12OfV:")) != -1) | ||||
| 	switch(c) { | ||||
| 	case 'v': | ||||
| 	    Verbose = 1; | ||||
| 	    break; | ||||
| 	case '1': | ||||
| 	    xf86Info.pciFlags = PCIProbe1; | ||||
| 	    break; | ||||
| 	case '2': | ||||
| 	    xf86Info.pciFlags = PCIProbe2; | ||||
| 	    break; | ||||
| 	case 'O': | ||||
| 	    xf86Info.pciFlags = PCIOsConfig; | ||||
| 	    break; | ||||
| 	case 'f': | ||||
| 	    force = 1; | ||||
| 	    break; | ||||
| 	case 'V': | ||||
| 	    xf86Verbose = atoi(optarg); | ||||
| 	    break; | ||||
| 	case '?': | ||||
| 	default: | ||||
| 	    usage(); | ||||
| 	    exit (1); | ||||
| 	    break; | ||||
| 	} | ||||
| 
 | ||||
|     if (force) | ||||
| 	switch (xf86Info.pciFlags) { | ||||
| 	case PCIProbe1: | ||||
| 	    xf86Info.pciFlags = PCIForceConfig1; | ||||
| 	    break; | ||||
| 	case PCIProbe2: | ||||
| 	    xf86Info.pciFlags = PCIForceConfig2; | ||||
| 	    break; | ||||
| 	default: | ||||
| 	    break; | ||||
| 	} | ||||
| 
 | ||||
|     pcrpp = xf86scanpci(0); | ||||
| 
 | ||||
|     if (!pcrpp) { | ||||
| 	printf("No PCI devices found\n"); | ||||
| 	xf86DisableIO(); | ||||
| 	exit (1); | ||||
|     } | ||||
| 
 | ||||
|     while (pcrpp[i]) | ||||
| 	identify_card(pcrpp[i++],Verbose); | ||||
| 
 | ||||
|     xf86DisableIO(); | ||||
|     exit(0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| identify_card(pciConfigPtr pcr, int verbose) | ||||
| { | ||||
|     int i, j; | ||||
|     int foundit = 0; | ||||
|     int foundvendor = 0; | ||||
|     const char *vname = NULL, *dname = NULL, *svname = NULL, *sname = NULL; | ||||
| 
 | ||||
|     pciVendorDevFuncInfo *vdf = vendorDeviceFuncInfo; | ||||
| 
 | ||||
|     if (!ScanPciSetupPciIds()) { | ||||
| 	fprintf(stderr, "xf86SetupPciIds() failed\n"); | ||||
| 	exit(1); | ||||
|     } | ||||
| 
 | ||||
|     printf("\npci bus 0x%04x cardnum 0x%02x function 0x%02x:" | ||||
| 	   " vendor 0x%04x device 0x%04x\n", | ||||
| 	   pcr->busnum, pcr->devnum, pcr->funcnum, | ||||
| 	   pcr->pci_vendor, pcr->pci_device); | ||||
| 
 | ||||
|     ScanPciFindPciNamesByDevice(pcr->pci_vendor, pcr->pci_device, | ||||
| 			     pcr->pci_subsys_vendor, pcr->pci_subsys_card, | ||||
| 			     &vname, &dname, &svname, &sname); | ||||
| 
 | ||||
|     if (vname) { | ||||
| 	printf(" %s ", vname); | ||||
| 	if (dname) { | ||||
| 	    printf("%s", dname); | ||||
| 	    foundit = 1; | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     if (!foundit) | ||||
| 	printf(" Device unknown\n"); | ||||
|     else { | ||||
| 	printf("\n"); | ||||
| 	if (verbose) { | ||||
| 	    for (i = 0;  vdf[i].Vendor;  i++) { | ||||
| 		if (vdf[i].Vendor == pcr->pci_vendor) { | ||||
| 		    for (j = 0;  vdf[i].Device[j].DeviceID;  j++) { | ||||
| 			if (vdf[i].Device[j].DeviceID == pcr->pci_device) { | ||||
| 			    (*vdf[i].Device[j].func)(pcr); | ||||
| 			    return; | ||||
| 			} | ||||
| 		    } | ||||
| 		    break; | ||||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     if (verbose && !(pcr->pci_header_type & 0x7f) && | ||||
| 	(pcr->pci_subsys_vendor != 0 || pcr->pci_subsys_card != 0) && | ||||
| 	((pcr->pci_subsys_vendor != NOVENDOR) | ||||
| 	 || (pcr->pci_subsys_card != NOSUBSYS)) && | ||||
| 	(pcr->pci_vendor != pcr->pci_subsys_vendor || | ||||
| 	 pcr->pci_device != pcr->pci_subsys_card)) { | ||||
| 	foundit = 0; | ||||
| 	foundvendor = 0; | ||||
| 	printf(" CardVendor 0x%04x card 0x%04x", | ||||
| 	       pcr->pci_subsys_vendor, pcr->pci_subsys_card); | ||||
| 	if (svname) { | ||||
| 	    printf(" (%s", svname); | ||||
| 	    foundvendor = 1; | ||||
| 	    if (sname) { | ||||
| 		printf(" %s)", sname); | ||||
| 		foundit = 1; | ||||
| 	    } | ||||
| 	} | ||||
| 
 | ||||
| 	if (!foundit) { | ||||
| 	    if (!foundvendor) | ||||
| 		printf(" ("); | ||||
| 	    else | ||||
| 		printf(", "); | ||||
| 	    printf("Card unknown)"); | ||||
| 	} | ||||
| 	printf("\n"); | ||||
|     } | ||||
| 
 | ||||
|     if (verbose) { | ||||
| 	printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	       pcr->pci_status, pcr->pci_command); | ||||
| 	printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	       pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	       pcr->pci_rev_id); | ||||
| 	if ((pcr->pci_base_class == PCI_CLASS_BRIDGE) && | ||||
| 	    (pcr->pci_sub_class == PCI_SUBCLASS_BRIDGE_PCI)) | ||||
| 	    print_bridge_pci_class(pcr); | ||||
| 	else | ||||
| 	    print_default_class(pcr); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_default_class(pciConfigPtr pcr) | ||||
| { | ||||
|     printf("  BIST      0x%02x  HEADER 0x%02x  LATENCY 0x%02x  CACHE 0x%02x\n", | ||||
| 	   pcr->pci_bist, pcr->pci_header_type, pcr->pci_latency_timer, | ||||
| 	   pcr->pci_cache_line_size); | ||||
|     if (pcr->pci_base0) { | ||||
| 	if ((pcr->pci_base0 & 0x7) == 0x4) { | ||||
| 	    printf("  BASE0     0x%08x%08x  addr 0x%08x%08x  MEM%s 64BIT\n", | ||||
| 		   (int)pcr->pci_base1, (int)pcr->pci_base0, | ||||
| 		   (int)pcr->pci_base1, | ||||
| 		   (int)(pcr->pci_base0 & | ||||
| 			 (pcr->pci_base0 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base0 & 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} else { | ||||
| 	    printf("  BASE0     0x%08x  addr 0x%08x  %s%s\n", | ||||
| 		   (int)pcr->pci_base0, | ||||
| 		   (int)(pcr->pci_base0 & | ||||
| 			 (pcr->pci_base0 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base0 & 0x1) ? "I/O" : "MEM", | ||||
| 		   ((pcr->pci_base0 & 0x9) == 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} | ||||
|     } | ||||
|     if ((pcr->pci_base1) && ((pcr->pci_base0 & 0x7) != 0x4)) { | ||||
| 	if ((pcr->pci_base1 & 0x7) == 0x4) { | ||||
| 	    printf("  BASE1     0x%08x%08x  addr 0x%08x%08x  MEM%s 64BIT\n", | ||||
| 		   (int)pcr->pci_base2, (int)pcr->pci_base1, | ||||
| 		   (int)pcr->pci_base2, | ||||
| 		   (int)(pcr->pci_base1 & | ||||
| 			 (pcr->pci_base1 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base1 & 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} else { | ||||
| 	    printf("  BASE1     0x%08x  addr 0x%08x  %s%s\n", | ||||
| 		   (int)pcr->pci_base1, | ||||
| 		   (int)(pcr->pci_base1 & | ||||
| 			 (pcr->pci_base1 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base1 & 0x1) ? "I/O" : "MEM", | ||||
| 		   ((pcr->pci_base1 & 0x9) == 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} | ||||
|     } | ||||
|     if ((pcr->pci_base2) && ((pcr->pci_base1 & 0x7) != 0x4)) { | ||||
| 	if ((pcr->pci_base2 & 0x7) == 0x4) { | ||||
| 	    printf("  BASE2     0x%08x%08x  addr 0x%08x%08x  MEM%s 64BIT\n", | ||||
| 		   (int)pcr->pci_base3, (int)pcr->pci_base2, | ||||
| 		   (int)pcr->pci_base3, | ||||
| 		   (int)(pcr->pci_base2 & | ||||
| 			 (pcr->pci_base2 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base2 & 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} else { | ||||
| 	    printf("  BASE2     0x%08x  addr 0x%08x  %s%s\n", | ||||
| 		   (int)pcr->pci_base2, | ||||
| 		   (int)(pcr->pci_base2 & | ||||
| 			 (pcr->pci_base2 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base2 & 0x1) ? "I/O" : "MEM", | ||||
| 		   ((pcr->pci_base2 & 0x9) == 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} | ||||
|     } | ||||
|     if ((pcr->pci_base3) && ((pcr->pci_base2 & 0x7) != 0x4)) { | ||||
| 	if ((pcr->pci_base3 & 0x7) == 0x4) { | ||||
| 	    printf("  BASE3     0x%08x%08x  addr 0x%08x%08x  MEM%s 64BIT\n", | ||||
| 		   (int)pcr->pci_base4, (int)pcr->pci_base3, | ||||
| 		   (int)pcr->pci_base4, | ||||
| 		   (int)(pcr->pci_base3 & | ||||
| 			 (pcr->pci_base3 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base3 & 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} else { | ||||
| 	    printf("  BASE3     0x%08x  addr 0x%08x  %s%s\n", | ||||
| 		   (int)pcr->pci_base3, | ||||
| 		   (int)(pcr->pci_base3 & | ||||
| 			 (pcr->pci_base3 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base3 & 0x1) ? "I/O" : "MEM", | ||||
| 		   ((pcr->pci_base3 & 0x9) == 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} | ||||
|     } | ||||
|     if ((pcr->pci_base4) && ((pcr->pci_base3 & 0x7) != 0x4)) { | ||||
| 	if ((pcr->pci_base4 & 0x7) == 0x4) { | ||||
| 	    printf("  BASE4     0x%08x%08x  addr 0x%08x%08x  MEM%s 64BIT\n", | ||||
| 		   (int)pcr->pci_base5, (int)pcr->pci_base4, | ||||
| 		   (int)pcr->pci_base5, | ||||
| 		   (int)(pcr->pci_base4 & | ||||
| 			 (pcr->pci_base4 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base4 & 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} else { | ||||
| 	    printf("  BASE4     0x%08x  addr 0x%08x  %s%s\n", | ||||
| 		   (int)pcr->pci_base4, | ||||
| 		   (int)(pcr->pci_base4 & | ||||
| 			 (pcr->pci_base4 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 		   (pcr->pci_base4 & 0x1) ? "I/O" : "MEM", | ||||
| 		   ((pcr->pci_base4 & 0x9) == 0x8) ? " PREFETCHABLE" :""); | ||||
| 	} | ||||
|     } | ||||
|     if ((pcr->pci_base5) && ((pcr->pci_base4 & 0x7) != 0x4)) { | ||||
| 	printf("  BASE5     0x%08x  addr 0x%08x  %s%s%s\n", | ||||
| 	       (int)pcr->pci_base5, | ||||
| 	       (int)(pcr->pci_base5 & | ||||
| 		     (pcr->pci_base5 & 0x1 ?  0xFFFFFFFC : 0xFFFFFFF0)), | ||||
| 	       (pcr->pci_base5 & 0x1) ? "I/O" : "MEM", | ||||
| 	       ((pcr->pci_base5 & 0x9) == 0x8) ? " PREFETCHABLE" :"", | ||||
| 	       ((pcr->pci_base5 & 0x7) == 0x4) ? " 64BIT" : ""); | ||||
|     } | ||||
|     if (pcr->pci_baserom) | ||||
| 	printf("  BASEROM   0x%08x  addr 0x%08x  %sdecode-enabled\n", | ||||
| 	       (int)pcr->pci_baserom, (int)(pcr->pci_baserom & 0xFFFF8000), | ||||
| 	       pcr->pci_baserom & 0x1 ? "" : "not-"); | ||||
|     if (pcr->pci_max_min_ipin_iline) | ||||
| 	printf("  MAX_LAT   0x%02x  MIN_GNT 0x%02x" | ||||
| 	       "  INT_PIN 0x%02x  INT_LINE 0x%02x\n", | ||||
| 	       pcr->pci_max_lat, pcr->pci_min_gnt, | ||||
| 	       pcr->pci_int_pin, pcr->pci_int_line); | ||||
|     if (pcr->pci_user_config) | ||||
| 	printf("  BYTE_0    0x%02x  BYTE_1  0x%02x" | ||||
| 	       "  BYTE_2  0x%02x  BYTE_3  0x%02x\n", | ||||
| 	       (int)pcr->pci_user_config_0, (int)pcr->pci_user_config_1, | ||||
| 	       (int)pcr->pci_user_config_2, (int)pcr->pci_user_config_3); | ||||
| } | ||||
| 
 | ||||
| #define PCI_B_FAST_B_B 0x80 | ||||
| #define PCI_B_SB_RESET 0x40 | ||||
| #define PCI_B_M_ABORT  0x20 | ||||
| #define PCI_B_VGA_EN   0x08 | ||||
| #define PCI_B_ISA_EN   0x04 | ||||
| #define PCI_B_SERR_EN  0x02 | ||||
| #define PCI_B_P_ERR    0x01 | ||||
| 
 | ||||
| static void | ||||
| print_bridge_pci_class(pciConfigPtr pcr) | ||||
| { | ||||
|     printf("  HEADER    0x%02x  LATENCY 0x%02x\n", | ||||
| 	   pcr->pci_header_type, pcr->pci_latency_timer); | ||||
|     printf("  PRIBUS    0x%02x  SECBUS 0x%02x  SUBBUS 0x%02x\n", | ||||
| 	   pcr->pci_primary_bus_number, pcr->pci_secondary_bus_number, | ||||
| 	   pcr->pci_subordinate_bus_number); | ||||
|     printf("  SECLT     0x%02x  SECSTATUS 0x%04x\n", | ||||
| 	   pcr->pci_secondary_latency_timer, pcr->pci_secondary_status); | ||||
| 
 | ||||
|     if (pcr->pci_io_base || pcr->pci_io_limit || | ||||
| 	pcr->pci_upper_io_base || pcr->pci_upper_io_limit) { | ||||
| 	if (((pcr->pci_io_base & 0x0f) == 0x01) || | ||||
| 	    ((pcr->pci_io_limit & 0x0f) == 0x01)) { | ||||
| 	    printf("  IOBASE    0x%04x%04x  IOLIM 0x%04x%04x\n", | ||||
| 		   pcr->pci_upper_io_base, (pcr->pci_io_base & 0x00f0) << 8, | ||||
| 		   pcr->pci_upper_io_limit, (pcr->pci_io_limit << 8) | 0x0fff); | ||||
| 	} else { | ||||
| 	    printf("  IOBASE    0x%04x  IOLIM 0x%04x\n", | ||||
| 		   (pcr->pci_io_base & 0x00f0) << 8, | ||||
| 		   (pcr->pci_io_limit << 8) | 0x0fff); | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     if (pcr->pci_mem_base || pcr->pci_mem_limit) | ||||
| 	printf("  NOPREFETCH_MEMBASE 0x%08x  MEMLIM 0x%08x\n", | ||||
| 	       (pcr->pci_mem_base & 0x00fff0) << 16, | ||||
| 	       (pcr->pci_mem_limit << 16) | 0x0fffff); | ||||
| 
 | ||||
|     if (pcr->pci_prefetch_mem_base || pcr->pci_prefetch_mem_limit || | ||||
| 	pcr->pci_prefetch_upper_mem_base || | ||||
| 	pcr->pci_prefetch_upper_mem_limit) { | ||||
| 	if (((pcr->pci_prefetch_mem_base & 0x0f) == 0x01) || | ||||
| 	    ((pcr->pci_prefetch_mem_limit & 0x0f) == 0x01)) { | ||||
| 	    printf("  PREFETCH_MEMBASE   0x%08x%08x  MEMLIM 0x%08x%08x\n", | ||||
| 		   (int)pcr->pci_prefetch_upper_mem_base, | ||||
| 		   (pcr->pci_prefetch_mem_base & 0x00fff0) << 16, | ||||
| 		   (int)pcr->pci_prefetch_upper_mem_limit, | ||||
| 		   (pcr->pci_prefetch_mem_limit << 16) | 0x0fffff); | ||||
| 	} else { | ||||
| 	    printf("  PREFETCH_MEMBASE   0x%08x  MEMLIM 0x%08x\n", | ||||
| 		   (pcr->pci_prefetch_mem_base & 0x00fff0) << 16, | ||||
| 		   (pcr->pci_prefetch_mem_limit << 16) | 0x0fffff); | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     printf("  %sFAST_B2B %sSEC_BUS_RST %sM_ABRT %sVGA_EN %sISA_EN" | ||||
| 	   " %sSERR_EN %sPERR_EN\n", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_FAST_B_B) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_SB_RESET) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_M_ABORT) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_VGA_EN) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_ISA_EN) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_SERR_EN) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_P_ERR) ? "" : "NO_"); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_mach64(pciConfigPtr pcr) | ||||
| { | ||||
|     CARD32 sparse_io = 0; | ||||
| 
 | ||||
|     printf(" CardVendor 0x%04x card 0x%04x\n", | ||||
| 	   pcr->pci_subsys_vendor, pcr->pci_subsys_card); | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, | ||||
| 	   pcr->pci_prog_if, pcr->pci_rev_id); | ||||
|     printf("  BIST      0x%02x  HEADER 0x%02x  LATENCY 0x%02x  CACHE 0x%02x\n", | ||||
| 	   pcr->pci_bist, pcr->pci_header_type, pcr->pci_latency_timer, | ||||
| 	   pcr->pci_cache_line_size); | ||||
|     if (pcr->pci_base0) | ||||
| 	printf("  APBASE    0x%08x  addr 0x%08x\n", | ||||
| 	       (int)pcr->pci_base0, (int)(pcr->pci_base0 & | ||||
| 		(pcr->pci_base0 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0))); | ||||
|     if (pcr->pci_base1) | ||||
| 	printf("  BLOCKIO   0x%08x  addr 0x%08x\n", | ||||
| 	       (int)pcr->pci_base1, (int)(pcr->pci_base1 & | ||||
| 		(pcr->pci_base1 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0))); | ||||
|     if (pcr->pci_base2) | ||||
| 	printf("  REGBASE   0x%08x  addr 0x%08x\n", | ||||
| 	       (int)pcr->pci_base2, (int)(pcr->pci_base2 & | ||||
| 		(pcr->pci_base2 & 0x1 ? 0xFFFFFFFC : 0xFFFFFFF0))); | ||||
|     if (pcr->pci_baserom) | ||||
| 	printf("  BASEROM   0x%08x  addr 0x%08x  %sdecode-enabled\n", | ||||
| 	       (int)pcr->pci_baserom, (int)(pcr->pci_baserom & 0xFFFF8000), | ||||
| 	       pcr->pci_baserom & 0x1 ? "" : "not-"); | ||||
|     if (pcr->pci_max_min_ipin_iline) | ||||
| 	printf("  MAX_LAT   0x%02x  MIN_GNT 0x%02x" | ||||
| 	       "  INT_PIN 0x%02x  INT_LINE 0x%02x\n", | ||||
| 	       pcr->pci_max_lat, pcr->pci_min_gnt, | ||||
| 	       pcr->pci_int_pin, pcr->pci_int_line); | ||||
|     switch (pcr->pci_user_config_0 & 0x03) { | ||||
|     case 0: | ||||
| 	sparse_io = 0x2ec; | ||||
| 	break; | ||||
|     case 1: | ||||
| 	sparse_io = 0x1cc; | ||||
| 	break; | ||||
|     case 2: | ||||
| 	sparse_io = 0x1c8; | ||||
| 	break; | ||||
|     } | ||||
|     printf("  SPARSEIO  0x%03x    %s IO enabled    %sable 0x46E8\n", | ||||
| 	   (int)sparse_io, pcr->pci_user_config_0 & 0x04 ? "Block" : "Sparse", | ||||
| 	   pcr->pci_user_config_0 & 0x08 ? "Dis" : "En"); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_i128(pciConfigPtr pcr) | ||||
| { | ||||
|     printf(" CardVendor 0x%04x card 0x%04x\n", | ||||
| 	   pcr->pci_subsys_vendor, pcr->pci_subsys_card); | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	   pcr->pci_rev_id); | ||||
|     printf("  BIST      0x%02x  HEADER 0x%02x  LATENCY 0x%02x  CACHE 0x%02x\n", | ||||
| 	   pcr->pci_bist, pcr->pci_header_type, pcr->pci_latency_timer, | ||||
| 	   pcr->pci_cache_line_size); | ||||
|     printf("  MW0_AD    0x%08x  addr 0x%08x  %spre-fetchable\n", | ||||
| 	   (int)pcr->pci_base0, (int)(pcr->pci_base0 & 0xFFC00000), | ||||
| 	   pcr->pci_base0 & 0x8 ? "" : "not-"); | ||||
|     printf("  MW1_AD    0x%08x  addr 0x%08x  %spre-fetchable\n", | ||||
| 	   (int)pcr->pci_base1, (int)(pcr->pci_base1 & 0xFFC00000), | ||||
| 	   pcr->pci_base1 & 0x8 ? "" : "not-"); | ||||
|     printf("  XYW_AD(A) 0x%08x  addr 0x%08x\n", | ||||
| 	   (int)pcr->pci_base2, (int)(pcr->pci_base2 & 0xFFC00000)); | ||||
|     printf("  XYW_AD(B) 0x%08x  addr 0x%08x\n", | ||||
| 	   (int)pcr->pci_base3, (int)(pcr->pci_base3 & 0xFFC00000)); | ||||
|     printf("  RBASE_G   0x%08x  addr 0x%08x\n", | ||||
| 	   (int)pcr->pci_base4, (int)(pcr->pci_base4 & 0xFFFF0000)); | ||||
|     printf("  IO        0x%08x  addr 0x%08x\n", | ||||
| 	   (int)pcr->pci_base5, (int)(pcr->pci_base5 & 0xFFFFFF00)); | ||||
|     printf("  RBASE_E   0x%08x  addr 0x%08x  %sdecode-enabled\n", | ||||
| 	   (int)pcr->pci_baserom, (int)(pcr->pci_baserom & 0xFFFF8000), | ||||
| 	   pcr->pci_baserom & 0x1 ? "" : "not-"); | ||||
|     if (pcr->pci_max_min_ipin_iline) | ||||
| 	printf("  MAX_LAT   0x%02x  MIN_GNT 0x%02x" | ||||
| 	       "  INT_PIN 0x%02x  INT_LINE 0x%02x\n", | ||||
| 	       pcr->pci_max_lat, pcr->pci_min_gnt, | ||||
| 	       pcr->pci_int_pin, pcr->pci_int_line); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_dc21050(pciConfigPtr pcr) | ||||
| { | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	   pcr->pci_rev_id); | ||||
|     printf("  BIST      0x%02x  HEADER 0x%02x  LATENCY 0x%02x  CACHE 0x%02x\n", | ||||
| 	   pcr->pci_bist, pcr->pci_header_type, pcr->pci_latency_timer, | ||||
| 	   pcr->pci_cache_line_size); | ||||
|     printf("  PRIBUS    0x%02x  SECBUS 0x%02x  SUBBUS 0x%02x  SECLT 0x%02x\n", | ||||
| 	   pcr->pci_primary_bus_number, pcr->pci_secondary_bus_number, | ||||
| 	   pcr->pci_subordinate_bus_number, pcr->pci_secondary_latency_timer); | ||||
|     printf("  IOBASE    0x%02x  IOLIM 0x%02x  SECSTATUS 0x%04x\n", | ||||
| 	   pcr->pci_io_base << 8, (pcr->pci_io_limit << 8) | 0xfff, | ||||
| 	   pcr->pci_secondary_status); | ||||
|     printf("  NOPREFETCH_MEMBASE 0x%08x  MEMLIM 0x%08x\n", | ||||
| 	   pcr->pci_mem_base << 16, (pcr->pci_mem_limit << 16) | 0xfffff); | ||||
|     printf("  PREFETCH_MEMBASE   0x%08x  MEMLIM 0x%08x\n", | ||||
| 	   pcr->pci_prefetch_mem_base << 16, | ||||
| 	   (pcr->pci_prefetch_mem_limit << 16) | 0xfffff); | ||||
|     printf("  RBASE_E   0x%08x  addr 0x%08x  %sdecode-enabled\n", | ||||
| 	   (int)pcr->pci_baserom, (int)(pcr->pci_baserom & 0xFFFF8000), | ||||
| 	   pcr->pci_baserom & 0x1 ? "" : "not-"); | ||||
|     if (pcr->pci_max_min_ipin_iline) | ||||
| 	printf("  MAX_LAT   0x%02x  MIN_GNT 0x%02x" | ||||
| 	       "  INT_PIN 0x%02x  INT_LINE 0x%02x\n", | ||||
| 	       pcr->pci_max_lat, pcr->pci_min_gnt, | ||||
| 	       pcr->pci_int_pin, pcr->pci_int_line); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_simba(pciConfigPtr pcr) | ||||
| { | ||||
|     int   i; | ||||
|     CARD8 io, mem; | ||||
| 
 | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	   pcr->pci_rev_id); | ||||
|     printf("  HEADER    0x%02x  LATENCY 0x%02x  CACHE 0x%02x\n", | ||||
| 	   pcr->pci_header_type, pcr->pci_latency_timer, | ||||
| 	   pcr->pci_cache_line_size); | ||||
|     printf("  PRIBUS    0x%02x  SECBUS 0x%02x  SUBBUS 0x%02x  SECLT 0x%02x\n", | ||||
| 	   pcr->pci_primary_bus_number, pcr->pci_secondary_bus_number, | ||||
| 	   pcr->pci_subordinate_bus_number, pcr->pci_secondary_latency_timer); | ||||
|     printf("  SECSTATUS 0x%04x\n", | ||||
| 	   pcr->pci_secondary_status); | ||||
|     printf("  %sFAST_B2B %sSEC_BUS_RST %sM_ABRT %sVGA_EN %sISA_EN" | ||||
| 	   " %sSERR_EN %sPERR_EN\n", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_FAST_B_B) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_SB_RESET) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_M_ABORT) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_VGA_EN) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_ISA_EN) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_SERR_EN) ? "" : "NO_", | ||||
| 	   (pcr->pci_bridge_control & PCI_B_P_ERR) ? "" : "NO_"); | ||||
|     printf("  TICK      0x%08lx         SECCNTL 0x%02x\n", (long) | ||||
| 	   pciReadLong(pcr->tag, 0x00b0), pciReadByte(pcr->tag, 0x00dd)); | ||||
|     printf("  MASTER RETRIES:  PRIMARY 0x%02x,  SECONDARY 0x%02x\n", | ||||
| 	   pciReadByte(pcr->tag, 0x00c0), pciReadByte(pcr->tag, 0x00dc)); | ||||
|     printf("  TARGET RETRIES:  PIO     0x%02x,  DMA       0x%02x\n", | ||||
| 	   pciReadByte(pcr->tag, 0x00d8), pciReadByte(pcr->tag, 0x00da)); | ||||
|     printf("  TARGET LATENCY:  PIO     0x%02x,  DMA       0x%02x\n", | ||||
| 	   pciReadByte(pcr->tag, 0x00d9), pciReadByte(pcr->tag, 0x00db)); | ||||
|     printf("  DMA AFSR  0x%08lx%08lx    AFAR 0x%08lx%08lx\n", | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00cc), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00c8), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00d4), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00d0)); | ||||
|     printf("  PIO AFSR  0x%08lx%08lx    AFAR 0x%08lx%08lx\n", | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00ec), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00e8), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00f4), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00f0)); | ||||
|     printf("  PCI CNTL  0x%08lx%08lx    DIAG 0x%08lx%08lx\n", | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00e4), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00e0), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00fc), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x00f8)); | ||||
|     printf("  MAPS:            I/O     0x%02x,  MEM       0x%02x\n", | ||||
| 	   (io  = pciReadByte(pcr->tag, 0x00de)), | ||||
| 	   (mem = pciReadByte(pcr->tag, 0x00df))); | ||||
|     for (i = 0;  i < 8;  i++) | ||||
| 	if (io & (1 << i)) | ||||
| 	    printf("  BUS I/O  0x%06x-0x%06x\n", i << 21, ((i + 1) << 21) - 1); | ||||
|     for (i = 0;  i < 8;  i++) | ||||
| 	if (mem & (1 << i)) | ||||
| 	    printf("  BUS MEM  0x%08x-0x%08x\n", i << 29, ((i + 1) << 29) - 1); | ||||
| } | ||||
| 
 | ||||
| static int cbn_460gx = -1; | ||||
| 
 | ||||
| static void | ||||
| print_460gx_sac(pciConfigPtr pcr) | ||||
| { | ||||
|     CARD32 tmp; | ||||
| 
 | ||||
|     /* Print generalities */ | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	   pcr->pci_rev_id); | ||||
| 
 | ||||
|     tmp = pcr->pci_user_config; | ||||
|     pcr->pci_user_config = 0; | ||||
|     print_default_class(pcr); | ||||
|     pcr->pci_user_config = tmp; | ||||
| 
 | ||||
|     /* Only print what XFree86 might be interested in */ | ||||
|     if (pcr->busnum == 0) { | ||||
| 	if ((pcr->devnum != 0x10) || (pcr->funcnum != 0)) | ||||
| 	    return; | ||||
| 
 | ||||
| 	/* Get Chipset Bus Number */ | ||||
| 	cbn_460gx = (unsigned int)pciReadByte(pcr->tag, 0x0040); | ||||
| 	printf("  CBN       0x%02x  CBUSES 0x%02x\n", | ||||
| 	       cbn_460gx, pciReadByte(pcr->tag, 0x0044)); | ||||
| 
 | ||||
| 	return; | ||||
|     } | ||||
| 
 | ||||
|     if ((pcr->busnum != cbn_460gx) || (pcr->funcnum != 0)) | ||||
| 	return; | ||||
| 
 | ||||
|     switch (pcr->devnum) { | ||||
|     case 0: | ||||
| 	printf("  F16NUM    0x%02x  F16CPL 0x%02x  DEVNPRES 0x%08lx\n", | ||||
| 	       pciReadByte(pcr->tag, 0x0060), pciReadByte(pcr->tag, 0x0078), | ||||
| 	       (long)pciReadLong(pcr->tag, 0x0070)); | ||||
| 
 | ||||
| 	return; | ||||
| 
 | ||||
|     case 0x10: | ||||
| 	printf("  TOM       0x%04x  IORD  0x%04x\n", | ||||
| 	       pciReadWord(pcr->tag, 0x0050), pciReadWord(pcr->tag, 0x008E)); | ||||
| 	/* Fall through */ | ||||
| 
 | ||||
|     case 0x11:  case 0x12:  case 0x13: | ||||
|     case 0x14:  case 0x15:  case 0x16:  case 0x17: | ||||
| 	printf("  BUSNO     0x%02x    SUBNO 0x%02x\n", | ||||
| 	       pciReadByte(pcr->tag, 0x0048), pciReadByte(pcr->tag, 0x0049)); | ||||
| 	printf("  VGASE     0x%02x    PCIS  0x%02x    IOR 0x%02x\n", | ||||
| 	       pciReadByte(pcr->tag, 0x0080), pciReadByte(pcr->tag, 0x0084), | ||||
| 	       pciReadByte(pcr->tag, 0x008C)); | ||||
| 	/* Fall through */ | ||||
| 
 | ||||
|     default: | ||||
| 	return; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_460gx_pxb(pciConfigPtr pcr) | ||||
| { | ||||
|     CARD32 tmp; | ||||
| 
 | ||||
|     /* Print generalities */ | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	   pcr->pci_rev_id); | ||||
| 
 | ||||
|     tmp = pcr->pci_user_config; | ||||
|     pcr->pci_user_config = 0; | ||||
|     print_default_class(pcr); | ||||
|     pcr->pci_user_config = tmp; | ||||
| 
 | ||||
|     /* Only print what XFree86 might be interested in */ | ||||
|     printf("  ERRCMD    0x%02x  GAPEN 0x%02x\n", | ||||
| 	   pciReadByte(pcr->tag, 0x0046), pciReadByte(pcr->tag, 0x0060)); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_460gx_gxb(pciConfigPtr pcr) | ||||
| { | ||||
|     CARD32 tmp; | ||||
| 
 | ||||
|     /* Print generalities */ | ||||
|     printf("  STATUS    0x%04x  COMMAND 0x%04x\n", | ||||
| 	   pcr->pci_status, pcr->pci_command); | ||||
|     printf("  CLASS     0x%02x 0x%02x 0x%02x  REVISION 0x%02x\n", | ||||
| 	   pcr->pci_base_class, pcr->pci_sub_class, pcr->pci_prog_if, | ||||
| 	   pcr->pci_rev_id); | ||||
| 
 | ||||
|     tmp = pcr->pci_user_config; | ||||
|     pcr->pci_user_config = 0; | ||||
|     print_default_class(pcr); | ||||
|     pcr->pci_user_config = tmp; | ||||
| 
 | ||||
|     /* Only print what XFree86 might be interested in */ | ||||
|     printf("  BAPBASE   0x%08lx%08lx   AGPSIZ  0x%02x   VGAGE     0x%02x\n", | ||||
| 	   (long)pciReadLong(pcr->tag, 0x009C), | ||||
| 	   (long)pciReadLong(pcr->tag, 0x0098), | ||||
| 	   pciReadByte(pcr->tag, 0x00A2), pciReadByte(pcr->tag, 0x0060)); | ||||
| } | ||||
| 
 | ||||
| #include "xf86getpagesize.c" | ||||
|  | @ -1,42 +0,0 @@ | |||
| .\" $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.man,v 3.2 2000/12/11 20:18:45 dawes Exp $  | ||||
| .TH SCANPCI 1 __vendorversion__ | ||||
| .SH NAME | ||||
| scanpci - scan/probe PCI buses | ||||
| .SH SYNOPSIS | ||||
| .B scanpci | ||||
| .RB [ \-v12OfV ] | ||||
| .SH DESCRIPTION | ||||
| .I Scanpci | ||||
| is a utility that can be used to scan PCI buses and report information | ||||
| about the configuration space settings for each PCI device. | ||||
| On most platforms, | ||||
| .I scanpci | ||||
| can only be run by the root user. | ||||
| .SH OPTIONS | ||||
| .TP 8 | ||||
| .B \-v | ||||
| Print the configuration space information for each device in a verbose | ||||
| format.  Without this option, only a brief description is printed for | ||||
| each device. | ||||
| .TP 8 | ||||
| .B \-1 | ||||
| Use PCI config type 1. | ||||
| .TP 8 | ||||
| .B \-2 | ||||
| Use PCI config type 2. | ||||
| .TP 8 | ||||
| .B \-f | ||||
| Used in conjunction with the above two options, this forces the specified | ||||
| configuration type to be used for config space access. | ||||
| .TP 8 | ||||
| .B \-O | ||||
| Use the OS's PCI config space access mechanism to access the PCI config | ||||
| space (when available). | ||||
| .TP 8 | ||||
| .BI "\-V " n | ||||
| Set the verbosity level to | ||||
| .I n | ||||
| for the internal PCI scanner.  This is primarily for debugging use. | ||||
| .SH "SEE ALSO" | ||||
| pcitweak(1) | ||||
| .SH AUTHORS | ||||
		Loading…
	
		Reference in New Issue