From owner-freebsd-gnome@FreeBSD.ORG Sun Apr 1 21:13:25 2012 Return-Path: Delivered-To: gnome@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 72877106566B; Sun, 1 Apr 2012 21:13:25 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe02.c2i.net [212.247.154.34]) by mx1.freebsd.org (Postfix) with ESMTP id 4069C8FC12; Sun, 1 Apr 2012 21:13:24 +0000 (UTC) X-T2-Spam-Status: No, hits=-1.0 required=5.0 tests=ALL_TRUSTED Received: from [176.74.212.201] (account mc467741@c2i.net HELO laptop002.hselasky.homeunix.org) by mailfe02.swip.net (CommuniGate Pro SMTP 5.4.4) with ESMTPA id 259438439; Sun, 01 Apr 2012 23:13:15 +0200 From: Hans Petter Selasky To: Joe Marcus Clarke Date: Sun, 1 Apr 2012 23:11:57 +0200 User-Agent: KMail/1.13.5 (FreeBSD/8.3-PRERELEASE; KDE/4.4.5; amd64; ; ) References: <4F749AD1.7020703@FreeBSD.org> <4F749FFD.7020707@FreeBSD.org> <4F775927.1030400@freebsd.org> In-Reply-To: <4F775927.1030400@freebsd.org> X-Face: 'mmZ:T{)),Oru^0c+/}w'`gU1$ubmG?lp!=R4Wy\ELYo2)@'UZ24N@d2+AyewRX}mAm; Yp |U[@, _z/([?1bCfM{_"B<.J>mICJCHAzzGHI{y7{%JVz%R~yJHIji`y>Y}k1C4TfysrsUI -%GU9V5]iUZF&nRn9mJ'?&>O MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201204012311.57974.hselasky@c2i.net> Cc: gnome , Andriy Gapon Subject: Re: Fwd: Re: calibre: kindle usb connection problem X-BeenThere: freebsd-gnome@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: GNOME for FreeBSD -- porting and maintaining List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Apr 2012 21:13:25 -0000 On Saturday 31 March 2012 21:21:11 Joe Marcus Clarke wrote: > On 3/29/12 1:46 PM, Andriy Gapon wrote: > > I wonder if this is a conflict between what hal is doing when it probes > the device and interface vs. what USB wants to do to attach the device. > I'm copying hps to see if he can shed some light on this. hps, please > see below where I attempt to highlight what hald is doing. From reading > the USB code, I think hald might be triggering an error on attach and > causing the USB stack to free the device. Perhaps some USB-level > debugging is required. > > Joe > > > Not sure if the problem is caused by something in the device or by one of > > the hal's utilities. > > This is what I see in the system log: > > Mar 29 20:37:20 trant kernel: ugen2.2: at usbus2 > > Mar 29 20:37:20 trant kernel: umass0: on usbus2 > > Mar 29 20:37:20 trant kernel: ugen2.2: at usbus2 (disconnected) > > Mar 29 20:37:20 trant kernel: umass0: at uhub2, port 6, addr 2 > > (disconnected) Mar 29 20:37:22 trant kernel: ugen2.2: at usbus2 > > Mar 29 20:37:22 trant kernel: umass0: on usbus2 > > Mar 29 20:37:22 trant kernel: da0 at umass-sim0 bus 0 scbus8 target 0 lun > > 0 Mar 29 20:37:22 trant kernel: da0: > > Removable Direct Access SCSI-2 device > > Mar 29 20:37:22 trant kernel: da0: 40.000MB/s transfers > > Mar 29 20:37:22 trant kernel: da0: 3090MB (6328768 512 byte sectors: 255H > > 63S/T 393C) > > > > Note how the umass driver attaches, then immediately detaches and two > > seconds later attaches again. > > Here's hald output from that period: > > > > 20:37:17.378 [I] hf-devd.c:316: received devd event: !system=DEVFS > > subsystem=CDEV type=CREATE cdev=usb/2.2.0^M > > 20:37:17.378 [I] hf-devd.c:316: received devd event: !system=DEVFS > > subsystem=CDEV type=CREATE cdev=ugen2.2^M > > 20:37:19.448 [I] hf-devd.c:316: received devd event: !system=DEVFS > > subsystem=CDEV type=CREATE cdev=usb/2.2.1^M > > 20:37:20.576 [I] hf-devd.c:316: received devd event: !system=USB > > subsystem=DEVICE type=ATTACH ugen=ugen2.2 cdev=ugen2.2 vendor=0x1949 > > product=0x0004 devclass=0x00 devsubclass=0x00 sernum="B008A0A00527517D" > > release=0x0100 mode=host port=6 parent=ugen2.1^M > > 20:37:20.577 [I] hf-usb2.c:213: received devd attach event, device > > ugen=ugen2.2^M Run started hald-probe-usb2-device (20000) (0) ^M > > ! full path is '/usr/local/libexec/hald-probe-usb2-device', program_dir > > is '/usr/local/libexec'^M > > At this point, hald probes the ugen device and calls the following > functions: > > libusb20_be_alloc_default > libusb20_be_device_foreach > libusb20_dev_get_bus_number > libusb20_dev_get_address > libusb20_dev_open > libusb20_dev_get_device_desc > libusb20_dev_get_config_index > libusb20_dev_alloc_config > libusb20_dev_req_string_simple_sync > libusb20_dev_get_speed > libusb20_dev_close > libusb20_be_free > > > pid 70609: rc=0 signaled=0: /usr/local/libexec/hald-probe-usb2-device^M > > 20:37:22.640 [I] hald.c:108: Added device to GDL; > > After the device probe runs, the interface prober will execute. These > probe helpers run synchronously. > > > udi=/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D^M > > Run started hald-probe-usb2-interface (20000) (0) ^M > > The interface prober runs the following functions: > > libusb20_be_alloc_default > libusb20_be_device_foreach > libusb20_dev_get_bus_number > libusb20_dev_get_address > libusb20_dev_get_config_index > libusb20_dev_get_config_index Hi, I think you need to open the device to be allowed to call libusb20_dev_req_string_simple_sync, like shown in the previous function call list. Does that make sense to you? --HPS > libusb20_dev_req_string_simple_sync > libusb20_dev_get_iface_desc > libusb20_be_free > > > ! full path is '/usr/local/libexec/hald-probe-usb2-interface', > > program_dir is '/usr/local/libexec'^M > > pid 70610: rc=0 signaled=0: > > /usr/local/libexec/hald-probe-usb2-interface^M 20:37:22.665 [I] > > hald.c:108: Added device to GDL; > > udi=/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D_if0^M > > 20:37:22.666 [I] hf-devd.c:316: received devd event: !system=USB > > subsystem=INTERFACE type=ATTACH ugen=ugen2.2 cdev=ugen2.2 vendor=0x1949 > > product=0x0004 devclass=0x00 devsubclass=0x00 sernum="B008A0A00527517D" > > release=0x0100 mode=host interface=0 endpoints=2 intclass=0x08 > > intsubclass=0x06 intprotocol=0x50^M > > 20:37:22.666 [I] hf-devd.c:316: received devd event: +umass0 at bus=1 > > hubaddr=6 port=2 devaddr=2 interface=0 vendor=0x1949 product=0x0004 > > devclass=0x00 devsubclass=0x00 sernum="B008A0A00527517D" release=0x0100 > > mode=host intclass=0x08 intsubclass=0x06 intprotocol=0x50 on uhub2^M > > 20:37:22.671 [I] hald.c:108: Added device to GDL; > > udi=/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D_if0_s > > csi_host^M 20:37:22.681 [I] hf-devd.c:316: received devd event: > > !system=USB subsystem=DEVICE type=DETACH ugen=ugen2.2 cdev=ugen2.2 > > vendor=0x1949 product=0x0004 devclass=0x00 devsubclass=0x00 > > sernum="B008A0A00527517D" release=0x0100 mode=host port=6 > > parent=ugen2.1^M > > 20:37:22.681 [I] hf-usb2.c:221: received devd detach event, device > > ugen=ugen2.2^M 20:37:22.682 [I] hald.c:143: Removed device from GDL; > > udi=/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D_if0_s > > csi_host^M 20:37:22.682 [I] hald.c:143: Removed device from GDL; > > udi=/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D_if0^M > > 20:37:22.683 [I] hald.c:143: Removed device from GDL; > > udi=/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D^M > > 20:37:22.685 [I] hf-devd.c:316: received devd event: !system=USB > > subsystem=INTERFACE type=DETACH ugen=ugen2.2 cdev=ugen2.2 vendor=0x1949 > > product=0x0004 devclass=0x00 devsubclass=0x00 sernum="B008A0A00527517D" > > release=0x0100 mode=host interface=0 endpoints=2 intclass=0x08 > > intsubclass=0x06 intprotocol=0x50^M > > 20:37:22.685 [I] hf-devd.c:316: received devd event: !system=DEVFS > > subsystem=CDEV type=DESTROY cdev=ugen2.2^M > > 20:37:23.188 [I] hald.c:108: Added device to GDL; > > udi=/org/freedesktop/Hal/devices/computer_scsi_host_6^M > > 20:37:23.190 [I] hald.c:108: Added device to GDL; > > udi=/org/freedesktop/Hal/devices/computer_scsi_host_6_scsi_device_lun0^M > > Run started hald-probe-scsi (20000) (0) ^M > > > > > > Note how computer_scsi_host_6 device is getting inserted when > > usb_device_1949_4_B008A0A00527517D_if0_scsi_host is removed. > > I think that this is where the USB ancestry information is lost. > > > > on 29/03/2012 20:26 Andriy Gapon said the following: > >> -------- Original Message -------- > >> Message-ID: <4F749AD1.7020703@FreeBSD.org> > >> Date: Thu, 29 Mar 2012 20:24:33 +0300 > >> From: Andriy Gapon > >> Subject: Re: calibre: kindle usb connection problem > >> References: <4F749941.8070704@FreeBSD.org> > >> > >> on 29/03/2012 20:17 Andriy Gapon said the following: > >>> Looks like calibre is no longer able to detect my Kindle via USB > >>> (calibre is at version 0.8.40). > >>> The problem seems to be that the umass<->da relationship is not > >>> reflected in the HAL device hierarchy in the way that calibre expects. > >> > >>> This is the ancestry line for the Kindle da device: > >> Now even weirder stuff. I disconnected/reconnected the Kindle and now > >> it is directly under the computer device: > >> udi = '/org/freedesktop/Hal/devices/computer_storage' > >> > >> block.device = '/dev/da0' (string) > >> block.is_volume = false (bool) > >> block.major = 0 (0x0) (int) > >> block.minor = 232 (0xe8) (int) > >> block.storage_device = '/org/freedesktop/Hal/devices/computer_storage' > >> (string) freebsd.device_file = '/dev/da0' (string) > >> freebsd.driver = 'da' (string) > >> freebsd.unit = 0 (0x0) (int) > >> info.capabilities = {'block', 'storage'} (string list) > >> info.category = 'storage' (string) > >> info.parent = '/org/freedesktop/Hal/devices/computer' (string) > >> info.product = 'Storage Device' (string) > >> info.subsystem = 'block' (string) > >> info.udi = '/org/freedesktop/Hal/devices/computer_storage' (string) > >> storage.automount_enabled_hint = true (bool) > >> storage.bus = 'platform' (string) > >> storage.drive_type = 'disk' (string) > >> storage.hotpluggable = false (bool) > >> storage.media_check_enabled = false (bool) > >> storage.model = '' (string) > >> storage.no_partitions_hint = false (bool) > >> storage.originating_device = '' (string) > >> storage.removable = false (bool) > >> storage.removable.support_async_notification = false (bool) > >> storage.requires_eject = false (bool) > >> storage.vendor = '' (string) > >> > >> camcontrol sees it properly: > >> amcontrol devlist -v > >> scbus0 on ahcich0 bus 0: > >> at scbus0 target 0 lun 0 (pass0,ada0) > >> <> at scbus0 target -1 lun -1 () > >> scbus1 on ahcich1 bus 0: > >> at scbus1 target 0 lun 0 (pass1,ada1) > >> <> at scbus1 target -1 lun -1 () > >> scbus2 on ahcich2 bus 0: > >> at scbus2 target 0 lun 0 (pass2,ada2) > >> <> at scbus2 target -1 lun -1 () > >> scbus3 on ahcich3 bus 0: > >> <> at scbus3 target -1 lun -1 () > >> scbus4 on ahcich4 bus 0: > >> <> at scbus4 target -1 lun -1 () > >> scbus5 on ahcich5 bus 0: > >> at scbus5 target 0 lun 0 (pass3,cd0) > >> <> at scbus5 target -1 lun -1 () > >> scbus6 on ata0 bus 0: > >> <> at scbus6 target -1 lun -1 () > >> scbus7 on sbp0 bus 0: > >> <> at scbus7 target -1 lun -1 () > >> scbus8 on umass-sim0 bus 0: > >> at scbus8 target 0 lun 0 (da0,pass4) > >> scbus-1 on xpt0 bus 0: > >> <> at scbus-1 target -1 lun -1 (xpt0) > >> > >>> udi = '/org/freedesktop/Hal/devices/computer_scsi_host_6' > >>> > >>> info.parent = '/org/freedesktop/Hal/devices/computer' (string) > >>> info.product = 'SCSI Host Adapter' (string) > >>> info.subsystem = 'scsi_host' (string) > >>> info.udi = '/org/freedesktop/Hal/devices/computer_scsi_host_6' > >>> (string) scsi_host.host = 8 (0x8) (int) > >>> > >>> udi = > >>> '/org/freedesktop/Hal/devices/computer_scsi_host_6_scsi_device_lun0' > >>> > >>> info.parent = '/org/freedesktop/Hal/devices/computer_scsi_host_6' > >>> (string) info.product = 'SCSI Device' (string) > >>> info.subsystem = 'scsi' (string) > >>> info.udi = > >>> > >>> '/org/freedesktop/Hal/devices/computer_scsi_host_6_scsi_device_lun0' > >>> (string) > >>> > >>> info.vendor = 'Kindle' (string) > >>> scsi.bus = 8 (0x8) (int) > >>> scsi.host = 8 (0x8) (int) > >>> scsi.lun = 0 (0x0) (int) > >>> scsi.model = 'Internal Storage' (string) > >>> scsi.target = 0 (0x0) (int) > >>> scsi.type = 'disk' (string) > >>> scsi.vendor = 'Kindle' (string) > >>> > >>> udi = '/org/freedesktop/Hal/devices/storage_model_Internal_Storage' > >>> > >>> block.device = '/dev/da0' (string) > >>> block.freebsd.cam_path = '8,0,0' (string) > >>> block.is_volume = false (bool) > >>> block.major = 0 (0x0) (int) > >>> block.minor = 232 (0xe8) (int) > >>> block.storage_device = > >>> > >>> '/org/freedesktop/Hal/devices/storage_model_Internal_Storage' (string) > >>> > >>> freebsd.device_file = '/dev/da0' (string) > >>> freebsd.driver = 'da' (string) > >>> freebsd.unit = 0 (0x0) (int) > >>> info.addons = {'hald-addon-storage'} (string list) > >>> info.capabilities = {'block', 'storage'} (string list) > >>> info.category = 'storage' (string) > >>> info.interfaces = {'org.freedesktop.Hal.Device.Storage.Removable'} > >>> (string list) info.parent = > >>> > >>> '/org/freedesktop/Hal/devices/computer_scsi_host_6_scsi_device_lun0' > >>> (string) > >>> > >>> info.product = 'Internal Storage' (string) > >>> info.subsystem = 'block' (string) > >>> info.udi = > >>> '/org/freedesktop/Hal/devices/storage_model_Internal_Storage' > >>> (string) info.vendor = 'Kindle' (string) > >>> storage.automount_enabled_hint = true (bool) > >>> storage.bus = 'scsi' (string) > >>> storage.drive_type = 'disk' (string) > >>> storage.firmware_revision = '0100' (string) > >>> storage.hotpluggable = false (bool) > >>> storage.lun = 0 (0x0) (int) > >>> storage.media_check_enabled = true (bool) > >>> storage.model = 'Internal Storage' (string) > >>> storage.no_partitions_hint = false (bool) > >>> storage.originating_device = > >>> > >>> '/org/freedesktop/Hal/devices/computer_scsi_host_6_scsi_device_lun0' > >>> (string) > >>> > >>> storage.removable = true (bool) > >>> storage.removable.support_async_notification = false (bool) > >>> storage.requires_eject = false (bool) > >>> storage.vendor = 'Kindle' (string) > >>> > >>> Here is the umass device: > >>> > >>> udi = > >>> '/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D_if0' > >>> > >>> freebsd.driver = 'umass' (string) > >>> freebsd.unit = 0 (0x0) (int) > >>> info.bus = 'usb' (string) > >>> info.parent = > >>> > >>> '/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D' > >>> (string) > >>> > >>> info.product = 'Amazon Kindle' (string) > >>> info.subsystem = 'usb' (string) > >>> info.udi = > >>> > >>> '/org/freedesktop/Hal/devices/usb_device_1949_4_B008A0A00527517D_if0' > >>> (string) > >>> > >>> info.vendor = 'Amazon' (string) > >>> usb.bus_number = 2 (0x2) (int) > >>> usb.can_wake_up = false (bool) > >>> usb.configuration = 'Self-powered' (string) > >>> usb.configuration_value = 1 (0x1) (int) > >>> usb.device_class = 0 (0x0) (int) > >>> usb.device_protocol = 0 (0x0) (int) > >>> usb.device_revision_bcd = 256 (0x100) (int) > >>> usb.device_subclass = 0 (0x0) (int) > >>> usb.freebsd.devname = 'umass0' (string) > >>> usb.interface.class = 8 (0x8) (int) > >>> usb.interface.description = 'Mass Storage' (string) > >>> usb.interface.number = 0 (0x0) (int) > >>> usb.interface.protocol = 80 (0x50) (int) > >>> usb.interface.subclass = 6 (0x6) (int) > >>> usb.is_self_powered = true (bool) > >>> usb.level_number = 1 (0x1) (int) > >>> usb.max_power = 0 (0x0) (int) > >>> usb.num_configurations = 1 (0x1) (int) > >>> usb.num_interfaces = 1 (0x1) (int) > >>> usb.num_ports = 0 (0x0) (int) > >>> usb.port_number = 2 (0x2) (int) > >>> usb.product = 'Amazon Kindle' (string) > >>> usb.product_id = 4 (0x4) (int) > >>> usb.serial = 'B008A0A00527517D' (string) > >>> usb.speed = 480.0 (480) (double) > >>> usb.speed_bcd = 294912 (0x48000) (int) > >>> usb.vendor = 'Amazon' (string) > >>> usb.vendor_id = 6473 (0x1949) (int) > >>> usb.version = 2.0 (2) (double) > >>> > >>> What do you think? > >>> Is this a FreeBSD HAL problem?