Remove source files that have been dead since day-1 of this branch.

This commit is contained in:
Ian Romanick 2006-07-24 11:56:37 -07:00
parent eb95128f61
commit 7dff8d98a9
17 changed files with 0 additions and 147681 deletions

View File

@ -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

View File

@ -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

View File

@ -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";

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -1,3 +0,0 @@
pcitweak.1
pcitweak.1x

View File

@ -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) $< $@

View File

@ -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"

View File

@ -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 ).

View File

@ -1,2 +0,0 @@
scanpci.1
scanpci.1x

View File

@ -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) $< $@

View File

@ -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"

View File

@ -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