diff mbox

ehci: save device pointer in EHCIState

Message ID 1378714842-31912-1-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann Sept. 9, 2013, 8:20 a.m. UTC
We'll need a pointer to the actual pci/sysbus device,
stick a pointer to it into the EHCIState struct.

https://bugzilla.redhat.com/show_bug.cgi?id=1005495

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/usb/hcd-ehci.c | 3 ++-
 hw/usb/hcd-ehci.h | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

Comments

Hans de Goede Sept. 9, 2013, 9:04 a.m. UTC | #1
Hi,

On 09/09/2013 10:20 AM, Gerd Hoffmann wrote:
> We'll need a pointer to the actual pci/sysbus device,
> stick a pointer to it into the EHCIState struct.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1005495

Looks like we've been working on exactly the same bug at the
same time, but we've come up with slightly different solutions.

If we're going to go this way (which seems the best), you
should also modify the qemu_sglist_init call in
ehci_init_transfer for consistency, and drop the bus and qbus
variable declarations at the top of the functions as those will
be unused then.

Regards,

Hans
Gerd Hoffmann Sept. 9, 2013, 9:58 a.m. UTC | #2
On Mo, 2013-09-09 at 11:04 +0200, Hans de Goede wrote:
> Hi,
> 
> On 09/09/2013 10:20 AM, Gerd Hoffmann wrote:
> > We'll need a pointer to the actual pci/sysbus device,
> > stick a pointer to it into the EHCIState struct.
> >
> > https://bugzilla.redhat.com/show_bug.cgi?id=1005495
> 
> Looks like we've been working on exactly the same bug at the
> same time, but we've come up with slightly different solutions.

Yep, and then "git send-email" exactly the same minute ;)

> If we're going to go this way (which seems the best), you
> should also modify the qemu_sglist_init call in
> ehci_init_transfer for consistency, and drop the bus and qbus
> variable declarations at the top of the functions as those will
> be unused then.

Makes sense indeed.  Done, v2 sent.

cheers,
  Gerd
diff mbox

Patch

diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
index 137e200..162680c 100644
--- a/hw/usb/hcd-ehci.c
+++ b/hw/usb/hcd-ehci.c
@@ -1486,7 +1486,7 @@  static int ehci_process_itd(EHCIState *ehci,
                 return -1;
             }
 
-            qemu_sglist_init(&ehci->isgl, DEVICE(ehci), 2, ehci->as);
+            qemu_sglist_init(&ehci->isgl, ehci->device, 2, ehci->as);
             if (off + len > 4096) {
                 /* transfer crosses page border */
                 uint32_t len2 = off + len - 4096;
@@ -2529,6 +2529,7 @@  void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)
 
     s->frame_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, ehci_frame_timer, s);
     s->async_bh = qemu_bh_new(ehci_frame_timer, s);
+    s->device = dev;
 
     qemu_register_reset(ehci_reset, s);
     qemu_add_vm_change_state_handler(usb_ehci_vm_state_change, s);
diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h
index 15a28e8..065c9fa 100644
--- a/hw/usb/hcd-ehci.h
+++ b/hw/usb/hcd-ehci.h
@@ -255,6 +255,7 @@  typedef QTAILQ_HEAD(EHCIQueueHead, EHCIQueue) EHCIQueueHead;
 
 struct EHCIState {
     USBBus bus;
+    DeviceState *device;
     qemu_irq irq;
     MemoryRegion mem;
     AddressSpace *as;