Hi Jan: The attached addresses the spinning with the usb net device. Now I can enable the device and ethtool shows a link:
# ifconfig usb0 up # ethtool usb0 Settings for usb0: Current message level: 0x00000007 (7) Link detected: yes Though dhclient still can't get an address. After a bit of instrumentation it appears that packets are lost in the receive the path somewhere: usb0 Link encap:Ethernet HWaddr 42:5F:CA:51:54:77 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:25 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:5513 (5.3 KiB) I looked at an x3650M2 with an IMM. It has a usb-based ethernet device. I compared the output of lsusb -v from the IMM with the qemu usb net device and nothing jumps out -- other than the fact that the IMM's network device shows up on a uhci bus. David
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c index f806a20..218d590 100644 --- a/hw/usb-ehci.c +++ b/hw/usb-ehci.c @@ -981,13 +981,15 @@ err: qh->token |= QTD_TOKEN_HALT; break; case USB_RET_NAK: + /* 4.10.3 */ reload = get_field(qh->epchar, QH_EPCHAR_RL); if ((ehci->pid == USB_TOKEN_IN) && reload) { int nakcnt = get_field(qh->altnext_qtd, QH_ALTNEXT_NAKCNT); nakcnt--; set_field(&qh->altnext_qtd, nakcnt, QH_ALTNEXT_NAKCNT); + } else if (!reload) { + return USB_RET_NAK; } - return USB_RET_NAK; break; case USB_RET_BABBLE: fprintf(stderr, "USB babble TODO\n"); @@ -1040,7 +1042,7 @@ err: ret += ehci->more; - if (ret > ehci->tbytes) { + if ((ret > ehci->tbytes) && (ehci->pid == USB_TOKEN_IN)) { ret = USB_RET_BABBLE; goto err; }