From: Programmingkid <programmingkidx@gmail.com>
To: Gerd Hoffmann <gerd@kraxel.org>,
BALATON Zoltan <balaton@eik.bme.hu>,
QEMU devel list <qemu-devel@nongnu.org>,
Howard Spoelstra <hsp.cat7@gmail.com>
Subject: Re: Mac OS real USB device support issue
Date: Thu, 8 Apr 2021 15:43:43 -0400 [thread overview]
Message-ID: <C055FBC4-09F8-4057-9742-99C660F97607@gmail.com> (raw)
In-Reply-To: <20210408110523.eh3i7djynv54cqi2@sirius.home.kraxel.org>
> On Apr 8, 2021, at 7:05 AM, Gerd Hoffmann <gerd@kraxel.org> wrote:
>
> Hi,
>
>>> Those might be a good place to start. IOKit provides the drivers and
>>> also the io registry which is probably where you can get if a driver
>>> is bound to a device and which one is it. How to dissociate the
>>> driver from the device though I don't know.
>
>> https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/DeviceRemoval/DeviceRemoval.html
>
>> According to this article a driver has a stop() and detach() method
>> that is called by the IOKit to remove a device. I'm thinking QEMU can
>> be the one that calls these methods for a certain device.
>
> libusb should do that. Interfaces exist already (see
> libusb_detach_kernel_driver & friends) because we have the very same
> problem on linux.
>
> take care,
> Gerd
>
The questions that come to mind are:
- Does libusb_detach_kernel_driver() work on Mac OS?
- Is libusb_detach_kernel_driver() called on Mac OS in QEMU?
The only mention of this function in QEMU comes from host-libusb.c.
After some tests I found out the function host-libusb.c:usb_host_detach_kernel() is being called on Mac OS 11.1. It never reaches the libusb_detach_kernel_driver() function. It stops at the continue statement. Here is the full function:
static void usb_host_detach_kernel(USBHostDevice *s)
{
printf("usb_host_detach_kernel() called\n");
struct libusb_config_descriptor *conf;
int rc, i;
rc = libusb_get_active_config_descriptor(s->dev, &conf);
if (rc != 0) {
printf("rc != 0 => %d\n", rc);
return;
}
for (i = 0; i < USB_MAX_INTERFACES; i++) {
rc = libusb_kernel_driver_active(s->dh, i);
usb_host_libusb_error("libusb_kernel_driver_active", rc);
if (rc != 1) {
if (rc == 0) {
s->ifs[i].detached = true;
}
printf("rc != 1 => %d\n", rc);
continue;
}
trace_usb_host_detach_kernel(s->bus_num, s->addr, i);
rc = libusb_detach_kernel_driver(s->dh, i);
printf("libusb_detach_kernel_driver() called\n");
usb_host_libusb_error("libusb_detach_kernel_driver", rc);
s->ifs[i].detached = true;
}
libusb_free_config_descriptor(conf);
}
Next to the continue statement in the loop is where my printf function says that rc is equal to 0. So it looks like libusb_kernel_driver_active() may have an issue since it sets the rc variable. Later on I will try to figure out what is happening here.
next prev parent reply other threads:[~2021-04-08 19:44 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-06 13:44 Mac OS real USB device support issue Programmingkid
2021-04-06 14:01 ` Howard Spoelstra
2021-04-06 14:20 ` BALATON Zoltan
2021-04-06 14:33 ` Programmingkid
2021-04-06 14:31 ` Programmingkid
2021-04-06 16:53 ` BALATON Zoltan
2021-04-06 19:28 ` Programmingkid
2021-04-06 23:18 ` BALATON Zoltan
2021-04-07 1:52 ` Programmingkid
2021-04-07 5:26 ` Howard Spoelstra
2021-04-07 5:28 ` Howard Spoelstra
2021-04-07 10:27 ` BALATON Zoltan
2021-04-09 19:37 ` Programmingkid
2021-04-10 7:28 ` Howard Spoelstra
2021-04-10 11:29 ` BALATON Zoltan
2021-05-16 0:33 ` Programmingkid
2021-04-08 11:05 ` Gerd Hoffmann
2021-04-08 16:40 ` Howard Spoelstra
2021-04-08 19:50 ` Programmingkid
2021-04-08 19:43 ` Programmingkid [this message]
2021-04-09 8:08 ` Gerd Hoffmann
2021-04-14 14:03 ` Programmingkid
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=C055FBC4-09F8-4057-9742-99C660F97607@gmail.com \
--to=programmingkidx@gmail.com \
--cc=balaton@eik.bme.hu \
--cc=gerd@kraxel.org \
--cc=hsp.cat7@gmail.com \
--cc=qemu-devel@nongnu.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).