aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2013-11-01 06:16:42 -0400
committerDavid S. Miller <davem@davemloft.net>2013-11-02 02:02:02 -0400
commitbed6f762123fc53c63efef386531dd877cba2468 (patch)
tree3233a7b19c055a0fdbc4424666f0f793cb00d269
parentff1632aa8581b7103ac2af1ea3cb4a415eb9d6ad (diff)
net: cdc_ncm: remove redundant netdev field
Too many pointers back and forth are likely to confuse developers, creating subtle bugs whenever we forget to syncronize them all. As a usbnet driver, we should stick with the standard struct usbnet fields as much as possible. The netdevice is one such field. Cc: Greg Suarez <gsuarez@smithmicro.com> Cc: Alexey Orishko <alexey.orishko@gmail.com> Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/usb/cdc_mbim.c2
-rw-r--r--drivers/net/usb/cdc_ncm.c73
-rw-r--r--include/linux/usb/cdc_ncm.h3
3 files changed, 39 insertions, 39 deletions
diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
index 253472a8a983..af76aaf08b6b 100644
--- a/drivers/net/usb/cdc_mbim.c
+++ b/drivers/net/usb/cdc_mbim.c
@@ -175,7 +175,7 @@ static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb
175 } 175 }
176 176
177 spin_lock_bh(&ctx->mtx); 177 spin_lock_bh(&ctx->mtx);
178 skb_out = cdc_ncm_fill_tx_frame(ctx, skb, sign); 178 skb_out = cdc_ncm_fill_tx_frame(dev, skb, sign);
179 spin_unlock_bh(&ctx->mtx); 179 spin_unlock_bh(&ctx->mtx);
180 return skb_out; 180 return skb_out;
181 181
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index a989bd5290a6..e39e7678a798 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -80,8 +80,9 @@ cdc_ncm_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *info)
80 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); 80 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
81} 81}
82 82
83static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) 83static u8 cdc_ncm_setup(struct usbnet *dev)
84{ 84{
85 struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
85 u32 val; 86 u32 val;
86 u8 flags; 87 u8 flags;
87 u8 iface_no; 88 u8 iface_no;
@@ -90,7 +91,6 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
90 u16 ntb_fmt_supported; 91 u16 ntb_fmt_supported;
91 u32 min_dgram_size; 92 u32 min_dgram_size;
92 u32 min_hdr_size; 93 u32 min_hdr_size;
93 struct usbnet *dev = netdev_priv(ctx->netdev);
94 94
95 iface_no = ctx->control->cur_altsetting->desc.bInterfaceNumber; 95 iface_no = ctx->control->cur_altsetting->desc.bInterfaceNumber;
96 96
@@ -285,8 +285,8 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
285 } 285 }
286 286
287max_dgram_err: 287max_dgram_err:
288 if (ctx->netdev->mtu != (ctx->max_datagram_size - eth_hlen)) 288 if (dev->net->mtu != (ctx->max_datagram_size - eth_hlen))
289 ctx->netdev->mtu = ctx->max_datagram_size - eth_hlen; 289 dev->net->mtu = ctx->max_datagram_size - eth_hlen;
290 290
291 return 0; 291 return 0;
292} 292}
@@ -375,11 +375,10 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
375 375
376 hrtimer_init(&ctx->tx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 376 hrtimer_init(&ctx->tx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
377 ctx->tx_timer.function = &cdc_ncm_tx_timer_cb; 377 ctx->tx_timer.function = &cdc_ncm_tx_timer_cb;
378 ctx->bh.data = (unsigned long)ctx; 378 ctx->bh.data = (unsigned long)dev;
379 ctx->bh.func = cdc_ncm_txpath_bh; 379 ctx->bh.func = cdc_ncm_txpath_bh;
380 atomic_set(&ctx->stop, 0); 380 atomic_set(&ctx->stop, 0);
381 spin_lock_init(&ctx->mtx); 381 spin_lock_init(&ctx->mtx);
382 ctx->netdev = dev->net;
383 382
384 /* store ctx pointer in device data field */ 383 /* store ctx pointer in device data field */
385 dev->data[0] = (unsigned long)ctx; 384 dev->data[0] = (unsigned long)ctx;
@@ -477,7 +476,7 @@ advance:
477 goto error2; 476 goto error2;
478 477
479 /* initialize data interface */ 478 /* initialize data interface */
480 if (cdc_ncm_setup(ctx)) 479 if (cdc_ncm_setup(dev))
481 goto error2; 480 goto error2;
482 481
483 /* configure data interface */ 482 /* configure data interface */
@@ -669,9 +668,9 @@ static struct usb_cdc_ncm_ndp16 *cdc_ncm_ndp(struct cdc_ncm_ctx *ctx, struct sk_
669} 668}
670 669
671struct sk_buff * 670struct sk_buff *
672cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign) 671cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
673{ 672{
674 struct usbnet *dev = netdev_priv(ctx->netdev); 673 struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
675 struct usb_cdc_ncm_nth16 *nth16; 674 struct usb_cdc_ncm_nth16 *nth16;
676 struct usb_cdc_ncm_ndp16 *ndp16; 675 struct usb_cdc_ncm_ndp16 *ndp16;
677 struct sk_buff *skb_out; 676 struct sk_buff *skb_out;
@@ -695,7 +694,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign)
695 if (skb_out == NULL) { 694 if (skb_out == NULL) {
696 if (skb != NULL) { 695 if (skb != NULL) {
697 dev_kfree_skb_any(skb); 696 dev_kfree_skb_any(skb);
698 ctx->netdev->stats.tx_dropped++; 697 dev->net->stats.tx_dropped++;
699 } 698 }
700 goto exit_no_skb; 699 goto exit_no_skb;
701 } 700 }
@@ -733,12 +732,12 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign)
733 /* won't fit, MTU problem? */ 732 /* won't fit, MTU problem? */
734 dev_kfree_skb_any(skb); 733 dev_kfree_skb_any(skb);
735 skb = NULL; 734 skb = NULL;
736 ctx->netdev->stats.tx_dropped++; 735 dev->net->stats.tx_dropped++;
737 } else { 736 } else {
738 /* no room for skb - store for later */ 737 /* no room for skb - store for later */
739 if (ctx->tx_rem_skb != NULL) { 738 if (ctx->tx_rem_skb != NULL) {
740 dev_kfree_skb_any(ctx->tx_rem_skb); 739 dev_kfree_skb_any(ctx->tx_rem_skb);
741 ctx->netdev->stats.tx_dropped++; 740 dev->net->stats.tx_dropped++;
742 } 741 }
743 ctx->tx_rem_skb = skb; 742 ctx->tx_rem_skb = skb;
744 ctx->tx_rem_sign = sign; 743 ctx->tx_rem_sign = sign;
@@ -771,7 +770,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign)
771 if (skb != NULL) { 770 if (skb != NULL) {
772 dev_kfree_skb_any(skb); 771 dev_kfree_skb_any(skb);
773 skb = NULL; 772 skb = NULL;
774 ctx->netdev->stats.tx_dropped++; 773 dev->net->stats.tx_dropped++;
775 } 774 }
776 775
777 ctx->tx_curr_frame_num = n; 776 ctx->tx_curr_frame_num = n;
@@ -814,7 +813,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign)
814 813
815 /* return skb */ 814 /* return skb */
816 ctx->tx_curr_skb = NULL; 815 ctx->tx_curr_skb = NULL;
817 ctx->netdev->stats.tx_packets += ctx->tx_curr_frame_num; 816 dev->net->stats.tx_packets += ctx->tx_curr_frame_num;
818 return skb_out; 817 return skb_out;
819 818
820exit_no_skb: 819exit_no_skb:
@@ -846,18 +845,19 @@ static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *timer)
846 845
847static void cdc_ncm_txpath_bh(unsigned long param) 846static void cdc_ncm_txpath_bh(unsigned long param)
848{ 847{
849 struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)param; 848 struct usbnet *dev = (struct usbnet *)param;
849 struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
850 850
851 spin_lock_bh(&ctx->mtx); 851 spin_lock_bh(&ctx->mtx);
852 if (ctx->tx_timer_pending != 0) { 852 if (ctx->tx_timer_pending != 0) {
853 ctx->tx_timer_pending--; 853 ctx->tx_timer_pending--;
854 cdc_ncm_tx_timeout_start(ctx); 854 cdc_ncm_tx_timeout_start(ctx);
855 spin_unlock_bh(&ctx->mtx); 855 spin_unlock_bh(&ctx->mtx);
856 } else if (ctx->netdev != NULL) { 856 } else if (dev->net != NULL) {
857 spin_unlock_bh(&ctx->mtx); 857 spin_unlock_bh(&ctx->mtx);
858 netif_tx_lock_bh(ctx->netdev); 858 netif_tx_lock_bh(dev->net);
859 usbnet_start_xmit(NULL, ctx->netdev); 859 usbnet_start_xmit(NULL, dev->net);
860 netif_tx_unlock_bh(ctx->netdev); 860 netif_tx_unlock_bh(dev->net);
861 } else { 861 } else {
862 spin_unlock_bh(&ctx->mtx); 862 spin_unlock_bh(&ctx->mtx);
863 } 863 }
@@ -880,7 +880,7 @@ cdc_ncm_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
880 goto error; 880 goto error;
881 881
882 spin_lock_bh(&ctx->mtx); 882 spin_lock_bh(&ctx->mtx);
883 skb_out = cdc_ncm_fill_tx_frame(ctx, skb, cpu_to_le32(USB_CDC_NCM_NDP16_NOCRC_SIGN)); 883 skb_out = cdc_ncm_fill_tx_frame(dev, skb, cpu_to_le32(USB_CDC_NCM_NDP16_NOCRC_SIGN));
884 spin_unlock_bh(&ctx->mtx); 884 spin_unlock_bh(&ctx->mtx);
885 return skb_out; 885 return skb_out;
886 886
@@ -1047,9 +1047,10 @@ error:
1047} 1047}
1048 1048
1049static void 1049static void
1050cdc_ncm_speed_change(struct cdc_ncm_ctx *ctx, 1050cdc_ncm_speed_change(struct usbnet *dev,
1051 struct usb_cdc_speed_change *data) 1051 struct usb_cdc_speed_change *data)
1052{ 1052{
1053 struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
1053 uint32_t rx_speed = le32_to_cpu(data->DLBitRRate); 1054 uint32_t rx_speed = le32_to_cpu(data->DLBitRRate);
1054 uint32_t tx_speed = le32_to_cpu(data->ULBitRate); 1055 uint32_t tx_speed = le32_to_cpu(data->ULBitRate);
1055 1056
@@ -1063,18 +1064,18 @@ cdc_ncm_speed_change(struct cdc_ncm_ctx *ctx,
1063 1064
1064 if ((tx_speed > 1000000) && (rx_speed > 1000000)) { 1065 if ((tx_speed > 1000000) && (rx_speed > 1000000)) {
1065 printk(KERN_INFO KBUILD_MODNAME 1066 printk(KERN_INFO KBUILD_MODNAME
1066 ": %s: %u mbit/s downlink " 1067 ": %s: %u mbit/s downlink "
1067 "%u mbit/s uplink\n", 1068 "%u mbit/s uplink\n",
1068 ctx->netdev->name, 1069 dev->net->name,
1069 (unsigned int)(rx_speed / 1000000U), 1070 (unsigned int)(rx_speed / 1000000U),
1070 (unsigned int)(tx_speed / 1000000U)); 1071 (unsigned int)(tx_speed / 1000000U));
1071 } else { 1072 } else {
1072 printk(KERN_INFO KBUILD_MODNAME 1073 printk(KERN_INFO KBUILD_MODNAME
1073 ": %s: %u kbit/s downlink " 1074 ": %s: %u kbit/s downlink "
1074 "%u kbit/s uplink\n", 1075 "%u kbit/s uplink\n",
1075 ctx->netdev->name, 1076 dev->net->name,
1076 (unsigned int)(rx_speed / 1000U), 1077 (unsigned int)(rx_speed / 1000U),
1077 (unsigned int)(tx_speed / 1000U)); 1078 (unsigned int)(tx_speed / 1000U));
1078 } 1079 }
1079 } 1080 }
1080} 1081}
@@ -1091,7 +1092,7 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)
1091 1092
1092 /* test for split data in 8-byte chunks */ 1093 /* test for split data in 8-byte chunks */
1093 if (test_and_clear_bit(EVENT_STS_SPLIT, &dev->flags)) { 1094 if (test_and_clear_bit(EVENT_STS_SPLIT, &dev->flags)) {
1094 cdc_ncm_speed_change(ctx, 1095 cdc_ncm_speed_change(dev,
1095 (struct usb_cdc_speed_change *)urb->transfer_buffer); 1096 (struct usb_cdc_speed_change *)urb->transfer_buffer);
1096 return; 1097 return;
1097 } 1098 }
@@ -1108,8 +1109,8 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)
1108 ctx->connected = le16_to_cpu(event->wValue); 1109 ctx->connected = le16_to_cpu(event->wValue);
1109 1110
1110 printk(KERN_INFO KBUILD_MODNAME ": %s: network connection:" 1111 printk(KERN_INFO KBUILD_MODNAME ": %s: network connection:"
1111 " %sconnected\n", 1112 " %sconnected\n",
1112 ctx->netdev->name, ctx->connected ? "" : "dis"); 1113 dev->net->name, ctx->connected ? "" : "dis");
1113 1114
1114 usbnet_link_change(dev, ctx->connected, 0); 1115 usbnet_link_change(dev, ctx->connected, 0);
1115 if (!ctx->connected) 1116 if (!ctx->connected)
@@ -1121,8 +1122,8 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)
1121 sizeof(struct usb_cdc_speed_change))) 1122 sizeof(struct usb_cdc_speed_change)))
1122 set_bit(EVENT_STS_SPLIT, &dev->flags); 1123 set_bit(EVENT_STS_SPLIT, &dev->flags);
1123 else 1124 else
1124 cdc_ncm_speed_change(ctx, 1125 cdc_ncm_speed_change(dev,
1125 (struct usb_cdc_speed_change *) &event[1]); 1126 (struct usb_cdc_speed_change *)&event[1]);
1126 break; 1127 break;
1127 1128
1128 default: 1129 default:
diff --git a/include/linux/usb/cdc_ncm.h b/include/linux/usb/cdc_ncm.h
index 36e1e153ca2d..5c47bd9620d5 100644
--- a/include/linux/usb/cdc_ncm.h
+++ b/include/linux/usb/cdc_ncm.h
@@ -98,7 +98,6 @@ struct cdc_ncm_ctx {
98 const struct usb_cdc_union_desc *union_desc; 98 const struct usb_cdc_union_desc *union_desc;
99 const struct usb_cdc_ether_desc *ether_desc; 99 const struct usb_cdc_ether_desc *ether_desc;
100 100
101 struct net_device *netdev;
102 struct usb_device *udev; 101 struct usb_device *udev;
103 struct usb_interface *control; 102 struct usb_interface *control;
104 struct usb_interface *data; 103 struct usb_interface *data;
@@ -129,7 +128,7 @@ struct cdc_ncm_ctx {
129extern u8 cdc_ncm_select_altsetting(struct usbnet *dev, struct usb_interface *intf); 128extern u8 cdc_ncm_select_altsetting(struct usbnet *dev, struct usb_interface *intf);
130extern int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting); 129extern int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting);
131extern void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf); 130extern void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf);
132extern struct sk_buff *cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign); 131extern struct sk_buff *cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign);
133extern int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_in); 132extern int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_in);
134extern int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset); 133extern int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset);
135 134