usb: gadget: ncm: correct endianess conversion
authorDmytro Milinevskyy <milinevskyy@gmail.com>
Thu, 4 Oct 2012 22:44:04 +0000 (01:44 +0300)
committerFelipe Balbi <balbi@ti.com>
Thu, 8 Nov 2012 14:05:39 +0000 (16:05 +0200)
Convert USB descriptor's fields to CPU byte order before using locally in USB
NCM gadget driver.

Tested on MIPS32 big-endian device.

Signed-off-by: Dmytro Milinevskyy <milinevskyy@gmail.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/f_ncm.c

index f1f66e9..6c8362f 100644 (file)
@@ -102,7 +102,7 @@ static inline unsigned ncm_bitrate(struct usb_gadget *g)
                                 USB_CDC_NCM_NTB32_SUPPORTED)
 
 static struct usb_cdc_ncm_ntb_parameters ntb_parameters = {
-       .wLength = sizeof ntb_parameters,
+       .wLength = cpu_to_le16(sizeof(ntb_parameters)),
        .bmNtbFormatsSupported = cpu_to_le16(FORMATS_SUPPORTED),
        .dwNtbInMaxSize = cpu_to_le32(NTB_DEFAULT_IN_SIZE),
        .wNdpInDivisor = cpu_to_le16(4),
@@ -869,15 +869,19 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port,
        struct sk_buff  *skb2;
        int             ncb_len = 0;
        __le16          *tmp;
-       int             div = ntb_parameters.wNdpInDivisor;
-       int             rem = ntb_parameters.wNdpInPayloadRemainder;
+       int             div;
+       int             rem;
        int             pad;
-       int             ndp_align = ntb_parameters.wNdpInAlignment;
+       int             ndp_align;
        int             ndp_pad;
        unsigned        max_size = ncm->port.fixed_in_len;
        struct ndp_parser_opts *opts = ncm->parser_opts;
        unsigned        crc_len = ncm->is_crc ? sizeof(uint32_t) : 0;
 
+       div = le16_to_cpu(ntb_parameters.wNdpInDivisor);
+       rem = le16_to_cpu(ntb_parameters.wNdpInPayloadRemainder);
+       ndp_align = le16_to_cpu(ntb_parameters.wNdpInAlignment);
+
        ncb_len += opts->nth_size;
        ndp_pad = ALIGN(ncb_len, ndp_align) - ncb_len;
        ncb_len += ndp_pad;