Greg Lopp on Mon, 18 Nov 2002 09:29:17 -0500


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [PLUG] sis900 (sos!)


On Mon, 2002-11-18 at 00:18, Time wrote:
> Anyone know how I could specify the address on the modprobe (or similar)
> command line? Where the address would be 00:04.0 ? 
> 
> I looked in man. 
> 
modprobe doesn't know or care that it is loading a module that controls
a device on a pci bus.  In fact, you shouldn't care what the PCI
signature (00:04.0) is either.  PCI stuff is smarter than ISA in many
ways, incuding the vendor and device id values which the kernel uses to
decide which driver to use with which device.

Let me slow down a little and actually make some sence....

$ lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT82C598 [Apollo MVP3] (rev
04)
00:01.0 PCI bridge: VIA Technologies, Inc. VT82C598/694x [Apollo
MVP3/Pro133x AGP]
00:07.0 ISA bridge: VIA Technologies, Inc. VT82C586/A/B PCI-to-ISA
[Apollo VP] (rev 41)
00:07.1 IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 06)
00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 02)
00:07.3 Host bridge: VIA Technologies, Inc. VT82C586B ACPI (rev 10)
00:09.0 Serial controller: Rockwell International HCF 56k
Data/Fax/Voice/Spkp (w/Handset) Modem (rev 01)
00:0a.0 Ethernet controller: Macronix, Inc. [MXIC] MX987x5 (rev 20)
01:01.0 VGA compatible controller: Trident Microsystems 3DImage 9750
(rev f3)

The first column (xx:xx.x) is what I'll call the PCI signature; I'll
sure it has a more appropriate and official name, but it is a value that
you'd pass as a parameter into the PCI BIOS code to indicate which
device the operation takes place upon.  The first number is the PCI bus
that its on, the second indicates a board or chip and the third
indicates the device. (Wait, man lspci uses the terms bus, slot and
function.) In the case of this old box, 00:07 is my mobo, with its four
logical functions running.  The second column tells us the class of the
device and the third identifies the device itself.  I don't think that
the third column is read from the device directly - lspci has matched
the vendor/device ids read from the devices and matched them with the
kernel's driver tables.  A little less interpretation :
$ lspci -n
00:00.0 Class 0600: 1106:0598 (rev 04)
00:01.0 Class 0604: 1106:8598
00:07.0 Class 0601: 1106:0586 (rev 41)
00:07.1 Class 0101: 1106:0571 (rev 06)
00:07.2 Class 0c03: 1106:3038 (rev 02)
00:07.3 Class 0600: 1106:3040 (rev 10)
00:09.0 Class 0700: 127a:1005 (rev 01)
00:0a.0 Class 0200: 10d9:0531 (rev 20)
01:01.0 Class 0300: 1023:9750 (rev f3)

The kernel maintains a big table which maps "10d9:0531" to a certain
driver.  The fact that you are getting that misspelling (EERPOM)
indicates that the kernel (at modprobe's prompting) is using the
appropriate driver for the device (the bus,slot,function with a certain
vendor and device id)  

Now, I seriously doubt that it is reading the vendor and device ids
correctly and then passing a bad struct pci_dev *, but just for kicks,
what do you read from that location when you use lspci?  ie What the
output of "lspci -s 00:04.0 -x"?  Or even try making that -xxx as root.

_________________________________________________________________________
Philadelphia Linux Users Group        --       http://www.phillylinux.org
Announcements - http://lists.netisland.net/mailman/listinfo/plug-announce
General Discussion  --   http://lists.netisland.net/mailman/listinfo/plug