]> Pileus Git - ~andy/linux/blobdiff - drivers/net/usb/cdc_ncm.c
net: cdc_ncm: remove ncm_parm field
[~andy/linux] / drivers / net / usb / cdc_ncm.c
index fc36a99f8183574ea12fc1b0daa3b597f78d4e31..4de3a5423e875567bf656702d7e15f99fa55b3b8 100644 (file)
@@ -83,6 +83,7 @@ cdc_ncm_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *info)
 static u8 cdc_ncm_setup(struct usbnet *dev)
 {
        struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
+       struct usb_cdc_ncm_ntb_parameters ncm_parm;
        u32 val;
        u8 flags;
        u8 iface_no;
@@ -97,22 +98,22 @@ static u8 cdc_ncm_setup(struct usbnet *dev)
        err = usbnet_read_cmd(dev, USB_CDC_GET_NTB_PARAMETERS,
                              USB_TYPE_CLASS | USB_DIR_IN
                              |USB_RECIP_INTERFACE,
-                             0, iface_no, &ctx->ncm_parm,
-                             sizeof(ctx->ncm_parm));
+                             0, iface_no, &ncm_parm,
+                             sizeof(ncm_parm));
        if (err < 0) {
                pr_debug("failed GET_NTB_PARAMETERS\n");
                return 1;
        }
 
        /* read correct set of parameters according to device mode */
-       ctx->rx_max = le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize);
-       ctx->tx_max = le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize);
-       ctx->tx_remainder = le16_to_cpu(ctx->ncm_parm.wNdpOutPayloadRemainder);
-       ctx->tx_modulus = le16_to_cpu(ctx->ncm_parm.wNdpOutDivisor);
-       ctx->tx_ndp_modulus = le16_to_cpu(ctx->ncm_parm.wNdpOutAlignment);
+       ctx->rx_max = le32_to_cpu(ncm_parm.dwNtbInMaxSize);
+       ctx->tx_max = le32_to_cpu(ncm_parm.dwNtbOutMaxSize);
+       ctx->tx_remainder = le16_to_cpu(ncm_parm.wNdpOutPayloadRemainder);
+       ctx->tx_modulus = le16_to_cpu(ncm_parm.wNdpOutDivisor);
+       ctx->tx_ndp_modulus = le16_to_cpu(ncm_parm.wNdpOutAlignment);
        /* devices prior to NCM Errata shall set this field to zero */
-       ctx->tx_max_datagrams = le16_to_cpu(ctx->ncm_parm.wNtbOutMaxDatagrams);
-       ntb_fmt_supported = le16_to_cpu(ctx->ncm_parm.bmNtbFormatsSupported);
+       ctx->tx_max_datagrams = le16_to_cpu(ncm_parm.wNtbOutMaxDatagrams);
+       ntb_fmt_supported = le16_to_cpu(ncm_parm.bmNtbFormatsSupported);
 
        eth_hlen = ETH_HLEN;
        min_dgram_size = CDC_NCM_MIN_DATAGRAM_SIZE;
@@ -153,7 +154,7 @@ static u8 cdc_ncm_setup(struct usbnet *dev)
        }
 
        /* inform device about NTB input size changes */
-       if (ctx->rx_max != le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)) {
+       if (ctx->rx_max != le32_to_cpu(ncm_parm.dwNtbInMaxSize)) {
                __le32 dwNtbInMaxSize = cpu_to_le32(ctx->rx_max);
 
                err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_INPUT_SIZE,
@@ -171,6 +172,14 @@ static u8 cdc_ncm_setup(struct usbnet *dev)
                pr_debug("Using default maximum transmit length=%d\n",
                                                CDC_NCM_NTB_MAX_SIZE_TX);
                ctx->tx_max = CDC_NCM_NTB_MAX_SIZE_TX;
+
+               /* Adding a pad byte here simplifies the handling in
+                * cdc_ncm_fill_tx_frame, by making tx_max always
+                * represent the real skb max size.
+                */
+               if (ctx->tx_max % usb_maxpacket(dev->udev, dev->out, 1) == 0)
+                       ctx->tx_max++;
+
        }
 
        /*
@@ -473,10 +482,6 @@ advance:
        if (temp)
                goto error2;
 
-       /* initialize data interface */
-       if (cdc_ncm_setup(dev))
-               goto error2;
-
        /* configure data interface */
        temp = usb_set_interface(dev->udev, iface_no, data_altsetting);
        if (temp)
@@ -487,6 +492,10 @@ advance:
        if (!dev->in || !dev->out || !dev->status)
                goto error2;
 
+       /* initialize data interface */
+       if (cdc_ncm_setup(dev))
+               goto error2;
+
        dev->net->ethtool_ops = &cdc_ncm_ethtool_ops;
 
        usb_set_intfdata(ctx->data, dev);
@@ -501,15 +510,6 @@ advance:
 
        dev->rx_urb_size = ctx->rx_max;
 
-       /* cdc_ncm_setup will override dwNtbOutMaxSize if it is
-        * outside the sane range. Adding a pad byte here if necessary
-        * simplifies the handling in cdc_ncm_fill_tx_frame, making
-        * tx_max always represent the real skb max size.
-        */
-       if (ctx->tx_max != le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize) &&
-           ctx->tx_max % usb_maxpacket(dev->udev, dev->out, 1) == 0)
-               ctx->tx_max++;
-
        return 0;
 
 error2: