The USB subsystem pipes internal attach/detach notifications through
usb_handle_packet() with a special magic PID.  This indirection is a
pretty pointless excercise as it ends up being handled by
usb_generic_handle_packet anyway.  Remove it.

Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
 hw/usb.c |   18 +++++-------------
 hw/usb.h |    2 --
 2 files changed, 5 insertions(+), 15 deletions(-)

diff --git a/hw/usb.c b/hw/usb.c
index 860538a..8242647 100644
--- a/hw/usb.c
+++ b/hw/usb.c
@@ -35,7 +35,10 @@ void usb_attach(USBPort *port)
     assert(dev->attached);
     assert(dev->state == USB_STATE_NOTATTACHED);
     port->ops->attach(port);
-    usb_send_msg(dev, USB_MSG_ATTACH);
+    dev->state = USB_STATE_ATTACHED;
+    if (dev->info->handle_attach) {
+        dev->info->handle_attach(dev);
+    }
 }
 
 void usb_detach(USBPort *port)
@@ -45,7 +48,7 @@ void usb_detach(USBPort *port)
     assert(dev != NULL);
     assert(dev->state != USB_STATE_NOTATTACHED);
     port->ops->detach(port);
-    usb_send_msg(dev, USB_MSG_DETACH);
+    dev->state = USB_STATE_NOTATTACHED;
 }
 
 void usb_reset(USBPort *port)
@@ -218,17 +221,6 @@ static int do_token_out(USBDevice *s, USBPacket *p)
 int usb_generic_handle_packet(USBDevice *s, USBPacket *p)
 {
     switch(p->pid) {
-    case USB_MSG_ATTACH:
-        s->state = USB_STATE_ATTACHED;
-        if (s->info->handle_attach) {
-            s->info->handle_attach(s);
-        }
-        return 0;
-
-    case USB_MSG_DETACH:
-        s->state = USB_STATE_NOTATTACHED;
-        return 0;
-
     case USB_MSG_RESET:
         s->remote_wakeup = 0;
         s->addr = 0;
diff --git a/hw/usb.h b/hw/usb.h
index 37f7d96..73155cf 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -37,8 +37,6 @@
 #define USB_TOKEN_OUT   0xe1 /* host -> device */
 
 /* specific usb messages, also sent in the 'pid' parameter */
-#define USB_MSG_ATTACH   0x100
-#define USB_MSG_DETACH   0x101
 #define USB_MSG_RESET    0x102
 
 #define USB_RET_NODEV  (-1)
-- 
1.7.1


Reply via email to