qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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.







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