All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.