qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 10/11] usb-uhci: Add support for being a companion controller
Date: Wed, 29 Jun 2011 13:19:14 +0200	[thread overview]
Message-ID: <4E0B0A32.7070907@redhat.com> (raw)
In-Reply-To: <4E0B0520.7040303@redhat.com>

Hi,

On 06/29/2011 12:57 PM, Gerd Hoffmann wrote:
> Hi,
>
>> + if (s->masterbus) {
>> + USBPort *ports[NB_PORTS];
>> + for(i = 0; i< NB_PORTS; i++) {
>> + s->ports[i].port.ops =&uhci_port_ops;
>> + s->ports[i].port.opaque = s;
>> + s->ports[i].port.index = i;
>> + s->ports[i].port.speedmask =
>> + USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL;
>> + usb_port_location(&s->ports[i].port, NULL, i+1);
>> + ports[i] =&s->ports[i].port;
>> + }
>> + if (usb_bus_register_companion(s->masterbus, ports, NB_PORTS,
>> + s->firstport) != 0) {
>> + return -1;
>> + }
>> + } else {
>> + usb_bus_new(&s->bus,&uhci_bus_ops,&s->dev.qdev);
>> + for(i = 0; i< NB_PORTS; i++) {
>> + usb_register_port(&s->bus,&s->ports[i].port, s, i,&uhci_port_ops,
>> + USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
>> + usb_port_location(&s->ports[i].port, NULL, i+1);
>> + }
>
> This looks like we'll want a usb_register_companion_port() function which looks like usb_register_port() but accepts masterbus & portindex instead of a USBBus pointer.
 > Then register the companion ports one by one, so that the code path for the companion case looks almost identical to the non-companion case.

I agree, but there is a reason why I went with a usb_bus_register_companion
function instead of with a usb_bus_register_companion_port function, the
uhci controller needs to know how many companion controllers it has
(to report this in one of its registers). When we're registering
ports 1 by 1, it does not know.

We could also pass in a port owner pointer, and make the uhci code keep
a list of known companions and check how many companions there are that
way, but that is quite ugly.

Another problem with registering ports 1 by 1 is that registering a companion
port can fail, and if the 2nd or higher register fails we would need to
undo the previous registers. Granted this is only an issue on hotplug,
and to support hot-unplug we would also need an unregister ..

Thinking more about this I think that the best approach would be to move
the port setup code (setting index, ops, speedmask, etc.) to
usb_bus_register_companion, and keep doing the entire registration
of all the ports in one single call. Would that work for you?

This still leaves the building of the port pointers array, we could
pass in a stride parameter to usb_bus_register_companion and make it
build that list too, I'm not sure if that is a good idea though?

 > Otherwise the whole patchset looks very good.

I'm glad you like it :)

Regards,

Hans

  reply	other threads:[~2011-06-29 11:18 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-24 19:32 [Qemu-devel] RFC/PULL: usb: add support for companion controllers Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 01/11] usb: Add a register_companion USB bus op Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 02/11] usb: Make port wakeup and complete ops take a USBPort instead of a Device Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 03/11] usb: Replace device_destroy bus op with a child_detach port op Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 04/11] usb-ehci: drop unused num-ports state member Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 05/11] usb-ehci: Connect Status bit is read only, don't allow changing it by the guest Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 06/11] usb-ehci: cleanup port reset handling Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 07/11] usb: assert on calling usb_attach(port, NULL) on a port without a dev Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 08/11] usb-ehci: Fix handling of PED and PEDC port status bits Hans de Goede
2011-06-25  0:15   ` Brad Hards
2011-06-25  6:08     ` Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 09/11] usb-ehci: Add support for registering companion controllers Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 10/11] usb-uhci: Add support for being a companion controller Hans de Goede
2011-06-29 10:57   ` Gerd Hoffmann
2011-06-29 11:19     ` Hans de Goede [this message]
2011-06-29 12:29       ` Gerd Hoffmann
2011-06-30 11:09         ` Hans de Goede
2011-06-24 19:32 ` [Qemu-devel] [PATCH 11/11] usb-ohci: " Hans de Goede

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=4E0B0A32.7070907@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=kraxel@redhat.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).