lo. The attached patch applied on top of your patchset seems to work
as far as signaling resume goes.
--- a/qemu/hw/usb-uhci.c 2006-04-21 11:15:40.000000000 -0500
+++ b/qemu/hw/usb-uhci.c 2006-04-21 11:17:08.000000000 -0500
@@ -32,6 +32,8 @@
// #define DEBUG
// #define DEBUG_PACKET
+#define UHCI_CMD_FGR (1 << 4)
+#define UHCI_CMD_EGSM (1 << 3)
#define UHCI_CMD_GRESET (1 << 2)
#define UHCI_CMD_HCRESET (1 << 1)
#define UHCI_CMD_RS (1 << 0)
@@ -109,7 +111,8 @@
((s->status & UHCI_STS_USBERR) && (s->intr & (1 << 0))) ||
((s->status & UHCI_STS_RD) && (s->intr & (1 << 1))) ||
(s->status & UHCI_STS_HSERR) ||
- (s->status & UHCI_STS_HCPERR)) {
+ (s->status & UHCI_STS_HCPERR) ||
+ ((s->status & UHCI_STS_RD) && (s->intr & (1 << 1)))) {
level = 1;
} else {
level = 0;
@@ -188,7 +191,7 @@
/* start frame processing */
qemu_mod_timer(s->frame_timer, qemu_get_clock(vm_clock));
s->status &= ~UHCI_STS_HCHALTED;
- } else if (!(val & UHCI_CMD_RS) && !(s->cmd & UHCI_CMD_RS)) {
+ } else if (!(val & UHCI_CMD_RS)) {
s->status |= UHCI_STS_HCHALTED;
}
if (val & UHCI_CMD_GRESET) {
@@ -335,6 +338,14 @@
UHCIState *s = hub->opaque;
UHCIPort *port;
int i;
+
+ // wakeup the controller if suspended
+ if (s->cmd & UHCI_CMD_EGSM) {
+ s->cmd |= UHCI_CMD_FGR;
+ s->status |= UHCI_STS_RD;
+ uhci_update_irq(s);
+ }
+
if (dev) {
if( portnum >= NB_PORTS ) {
#ifdef DEBUG
@@ -575,8 +586,6 @@
if (!(s->cmd & UHCI_CMD_RS)) {
qemu_del_timer(s->frame_timer);
- /* set hchalted bit in status - UHCI11D 2.1.2 */
- s->status |= UHCI_STS_HCHALTED;
return;
}
frame_addr = s->fl_base_addr + ((s->frnum & 0x3ff) << 2);
_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel