Commit fdd160c3 authored by Thomas Pugliese's avatar Thomas Pugliese Committed by Greg Kroah-Hartman

usb: wusbcore: fix endianess issues when using dwTransferID

Add a new function to get the xfer ID in little endian format
(wa_xfer_id_le32), and use it instead of wa_xfer_id where appropriate.
Signed-off-by: default avatarThomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 864cf949
...@@ -308,16 +308,18 @@ static void wa_xfer_id_init(struct wa_xfer *xfer) ...@@ -308,16 +308,18 @@ static void wa_xfer_id_init(struct wa_xfer *xfer)
xfer->id = atomic_add_return(1, &xfer->wa->xfer_id_count); xfer->id = atomic_add_return(1, &xfer->wa->xfer_id_count);
} }
/* /* Return the xfer's ID. */
* Return the xfer's ID associated with xfer static inline u32 wa_xfer_id(struct wa_xfer *xfer)
*
* Need to generate a
*/
static u32 wa_xfer_id(struct wa_xfer *xfer)
{ {
return xfer->id; return xfer->id;
} }
/* Return the xfer's ID in transport format (little endian). */
static inline __le32 wa_xfer_id_le32(struct wa_xfer *xfer)
{
return cpu_to_le32(xfer->id);
}
/* /*
* Search for a transfer list ID on the HCD's URB list * Search for a transfer list ID on the HCD's URB list
* *
...@@ -381,7 +383,7 @@ static void __wa_xfer_abort(struct wa_xfer *xfer) ...@@ -381,7 +383,7 @@ static void __wa_xfer_abort(struct wa_xfer *xfer)
b->cmd.bLength = sizeof(b->cmd); b->cmd.bLength = sizeof(b->cmd);
b->cmd.bRequestType = WA_XFER_ABORT; b->cmd.bRequestType = WA_XFER_ABORT;
b->cmd.wRPipe = rpipe->descr.wRPipeIndex; b->cmd.wRPipe = rpipe->descr.wRPipeIndex;
b->cmd.dwTransferID = wa_xfer_id(xfer); b->cmd.dwTransferID = wa_xfer_id_le32(xfer);
usb_init_urb(&b->urb); usb_init_urb(&b->urb);
usb_fill_bulk_urb(&b->urb, xfer->wa->usb_dev, usb_fill_bulk_urb(&b->urb, xfer->wa->usb_dev,
...@@ -477,7 +479,7 @@ static void __wa_xfer_setup_hdr0(struct wa_xfer *xfer, ...@@ -477,7 +479,7 @@ static void __wa_xfer_setup_hdr0(struct wa_xfer *xfer,
xfer_hdr0->bLength = xfer_hdr_size; xfer_hdr0->bLength = xfer_hdr_size;
xfer_hdr0->bRequestType = xfer_type; xfer_hdr0->bRequestType = xfer_type;
xfer_hdr0->wRPipe = rpipe->descr.wRPipeIndex; xfer_hdr0->wRPipe = rpipe->descr.wRPipeIndex;
xfer_hdr0->dwTransferID = wa_xfer_id(xfer); xfer_hdr0->dwTransferID = wa_xfer_id_le32(xfer);
xfer_hdr0->bTransferSegment = 0; xfer_hdr0->bTransferSegment = 0;
switch (xfer_type) { switch (xfer_type) {
case WA_XFER_TYPE_CTL: { case WA_XFER_TYPE_CTL: {
...@@ -1750,7 +1752,7 @@ static void wa_dti_cb(struct urb *urb) ...@@ -1750,7 +1752,7 @@ static void wa_dti_cb(struct urb *urb)
if (usb_status == WA_XFER_STATUS_NOT_FOUND) if (usb_status == WA_XFER_STATUS_NOT_FOUND)
/* taken care of already */ /* taken care of already */
break; break;
xfer_id = xfer_result->dwTransferID; xfer_id = le32_to_cpu(xfer_result->dwTransferID);
xfer = wa_xfer_get_by_id(wa, xfer_id); xfer = wa_xfer_get_by_id(wa, xfer_id);
if (xfer == NULL) { if (xfer == NULL) {
/* FIXME: transaction might have been cancelled */ /* FIXME: transaction might have been cancelled */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment