libpayload: UHCI driver contained too much magic
The handling of finalize in uhci_bulk was confusing, and so its behaviour changed. If set, the driver is supposed to add a trailing empty packet iff the last packet is of maximum packet size. This helps the device to decide if the transfer is completed simply by waiting for a packet that isn't full length. Change-Id: I162e8c1e034924d0de6fdcb971c94cf3a5ea31eb Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/1555 Tested-by: build bot (Jenkins) Reviewed-by: Anton Kochkov <anton.kochkov@gmail.com>
This commit is contained in:
parent
16c7ad7921
commit
d2cb7ea1ff
|
@ -429,7 +429,10 @@ uhci_bulk (endpoint_t *ep, int size, u8 *data, int finalize)
|
|||
int maxpsize = ep->maxpacketsize;
|
||||
if (maxpsize == 0)
|
||||
fatal("MaxPacketSize == 0!!!");
|
||||
int numpackets = (size + maxpsize - 1) / maxpsize + finalize;
|
||||
int numpackets = (size + maxpsize - 1) / maxpsize;
|
||||
if (finalize && ((size % maxpsize) == 0)) {
|
||||
numpackets++;
|
||||
}
|
||||
if (numpackets == 0)
|
||||
return 0;
|
||||
td_t *tds = create_schedule (numpackets);
|
||||
|
|
Loading…
Reference in New Issue