linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: linux-hotplug@vger.kernel.org
Subject: Re: how to determine physical bus of a device and find it there
Date: Thu, 22 Jan 2004 22:40:46 +0000	[thread overview]
Message-ID: <20040122224046.GL15458@kroah.com> (raw)
In-Reply-To: <20040120025230.GA26199@vrfy.org>

On Tue, Jan 20, 2004 at 03:52:30AM +0100, Kay Sievers wrote:
> 
> Hi,
> I want to collect all possible attributes of a device with the udevinfo
> program. This issue is also still unresolved with udev.
> 
> We need to determine the device on its physical bus not only the logical.
> Here is a example for a usb-storage device with its logical 'scsi' and
> physical 'usb' bus:
> 
> First I look in the hotplug provided directory and I find:
> 
> /sys/block/sda
> 
>   SYSFS_dev="8:0"
>   SYSFS_range="16"
>   SYSFS_size="31360"
>   SYSFS_stat="      12        0       96       87        0        0 0        0        0       87       87"
> 
> then following the "device" link, I get on the scsi bus
> /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/host5/5:0:0:0
> 
>   SYSFS_detach_state="0"
>   SYSFS_type="0"
>   SYSFS_vendor="SMSC    "
>   SYSFS_device_blocked="0"
>   SYSFS_queue_depth="1"
>   SYSFS_scsi_level="3"
>   SYSFS_model="USB 2 HS-CF"
>   SYSFS_rev="1.25"
>   SYSFS_online="1"
> 
> but the really interesting attributes are on the usb bus:
> /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1':
> 
>   SYSFS_detach_state="0"
>   SYSFS_bNumConfigurations="1"
>   SYSFS_bNumInterfaces=" 1"
>   SYSFS_bConfigurationValue="1"
>   SYSFS_bmAttributes="80"
>   SYSFS_bMaxPower=" 48mA"
>   SYSFS_idVendor="0424"
>   SYSFS_idProduct="20fc"
>   SYSFS_bcdDevice="0125"
>   SYSFS_bDeviceClass="00"
>   SYSFS_bDeviceSubClass="00"
>   SYSFS_bDeviceProtocol="00"
>   SYSFS_speed="12"
>   SYSFS_manufacturer="SMSC"
>   SYSFS_product="USB 2 Flash Media Device"
>   SYSFS_serial="0305037000C2"
> 
> 
> So, how do I reliable get there?

We need to set up a "stack" (for lack of a better word) of sysfs
devices.  We can now do this with some libsysfs calls.

So for your example, we would create the following device "stack"
	- class device "scsi" located at /sys/block/sda
	- main device structure on bus "scsi" at /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/host5/5:0:0:0
	- device of bus type "scsi host" at /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/host5
	- device of bus type "usb" at /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0
	- device of bus type "usb" at /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1
	- device of bus type "usb" at /sys/devices/pci0000:00/0000:00:1d.0/usb1
	- device of bus type "pci" at /sys/devices/pci0000:00/0000:00:1d.0
	- device of bus type "pci" at /sys/devices/pci0000:00

Note that the first usb device we find is really a usb interface device,
not the main usb device itself.  That is going to mess with some
people's minds until they realize that usb drivers bind to usb
interfaces, not the the device itself (a usb device may have lots of usb
interfaces, all with different drivers, like a speaker with a audio and
a hid driver bound to different interfaces.)

So what udev needs to do is look at each device along that "stack" in
order to get a match.  If a user specifies a idProduct sysfs file that
is on the usb device at
/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0 we should be able
to match that up with this scsi block device, if so asked.

It would also "solve" the problem where someone wanted to specify the
idProduct and idVendor for a usb printer, but udev couldn't find it.

Does that make more sense now?

thanks,

greg k-h


-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

  parent reply	other threads:[~2004-01-22 22:40 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-20  2:52 how to determine physical bus of a device and find it there Kay Sievers
2004-01-20 14:09 ` Olaf Hering
2004-01-22 22:40 ` Greg KH [this message]
2004-01-22 22:58 ` Greg KH
2004-01-22 23:27 ` Kay Sievers
2004-01-22 23:42 ` Kay Sievers
2004-01-23  1:42 ` Greg KH
2004-01-23  1:43 ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040122224046.GL15458@kroah.com \
    --to=greg@kroah.com \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).