usb_drv: handle EP stall in Usb_session

Fixes #1945.
This commit is contained in:
Josef Söntgen 2016-04-21 14:06:38 +02:00 committed by Christian Helmuth
parent 463b39fc73
commit 133c46a784
2 changed files with 13 additions and 0 deletions

View File

@ -226,6 +226,11 @@ class Usb::Worker
p.succeded = true;
}
if (err >= 0
&& p.control.request == USB_REQ_CLEAR_FEATURE
&& p.control.value == USB_ENDPOINT_HALT) {
usb_reset_endpoint(_device->udev, p.control.index);
}
kfree(buf);
}
@ -249,6 +254,10 @@ class Usb::Worker
urb->actual_length);
}
if (urb->status == -EPIPE) {
p.error = Packet_descriptor::STALL_ERROR;
}
_ack_packet(p);
}

View File

@ -76,6 +76,10 @@ struct Usb::Packet_descriptor : Genode::Packet_descriptor
};
};
enum Error { NO_ERROR, STALL_ERROR };
Error error = NO_ERROR;
bool is_read_transfer() { return transfer.ep & ENDPOINT_IN; }
Packet_descriptor(off_t offset = 0, size_t size = 0)