Skip to content

Commit c91ce3b

Browse files
bmorkdavem330
authored andcommitted
net: cdc_ncm: export shared symbols and definitions
Move symbols and definitons which can be shared with a MBIM driver in a new header. Signed-off-by: Bjørn Mork <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c78b7c5 commit c91ce3b

File tree

2 files changed

+135
-86
lines changed

2 files changed

+135
-86
lines changed

drivers/net/usb/cdc_ncm.c

Lines changed: 11 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -51,90 +51,10 @@
5151
#include <linux/atomic.h>
5252
#include <linux/usb/usbnet.h>
5353
#include <linux/usb/cdc.h>
54+
#include <linux/usb/cdc_ncm.h>
5455

5556
#define DRIVER_VERSION "14-Mar-2012"
5657

57-
/* CDC NCM subclass 3.2.1 */
58-
#define USB_CDC_NCM_NDP16_LENGTH_MIN 0x10
59-
60-
/* Maximum NTB length */
61-
#define CDC_NCM_NTB_MAX_SIZE_TX 32768 /* bytes */
62-
#define CDC_NCM_NTB_MAX_SIZE_RX 32768 /* bytes */
63-
64-
/* Minimum value for MaxDatagramSize, ch. 6.2.9 */
65-
#define CDC_NCM_MIN_DATAGRAM_SIZE 1514 /* bytes */
66-
67-
/* Minimum value for MaxDatagramSize, ch. 8.1.3 */
68-
#define CDC_MBIM_MIN_DATAGRAM_SIZE 2048 /* bytes */
69-
70-
#define CDC_NCM_MIN_TX_PKT 512 /* bytes */
71-
72-
/* Default value for MaxDatagramSize */
73-
#define CDC_NCM_MAX_DATAGRAM_SIZE 8192 /* bytes */
74-
75-
/*
76-
* Maximum amount of datagrams in NCM Datagram Pointer Table, not counting
77-
* the last NULL entry.
78-
*/
79-
#define CDC_NCM_DPT_DATAGRAMS_MAX 40
80-
81-
/* Restart the timer, if amount of datagrams is less than given value */
82-
#define CDC_NCM_RESTART_TIMER_DATAGRAM_CNT 3
83-
#define CDC_NCM_TIMER_PENDING_CNT 2
84-
#define CDC_NCM_TIMER_INTERVAL (400UL * NSEC_PER_USEC)
85-
86-
/* The following macro defines the minimum header space */
87-
#define CDC_NCM_MIN_HDR_SIZE \
88-
(sizeof(struct usb_cdc_ncm_nth16) + sizeof(struct usb_cdc_ncm_ndp16) + \
89-
(CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16))
90-
91-
#define CDC_NCM_NDP_SIZE \
92-
(sizeof(struct usb_cdc_ncm_ndp16) + \
93-
(CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16))
94-
95-
struct cdc_ncm_ctx {
96-
struct usb_cdc_ncm_ntb_parameters ncm_parm;
97-
struct hrtimer tx_timer;
98-
struct tasklet_struct bh;
99-
100-
const struct usb_cdc_ncm_desc *func_desc;
101-
const struct usb_cdc_mbim_desc *mbim_desc;
102-
const struct usb_cdc_header_desc *header_desc;
103-
const struct usb_cdc_union_desc *union_desc;
104-
const struct usb_cdc_ether_desc *ether_desc;
105-
106-
struct net_device *netdev;
107-
struct usb_device *udev;
108-
struct usb_host_endpoint *in_ep;
109-
struct usb_host_endpoint *out_ep;
110-
struct usb_host_endpoint *status_ep;
111-
struct usb_interface *intf;
112-
struct usb_interface *control;
113-
struct usb_interface *data;
114-
115-
struct sk_buff *tx_curr_skb;
116-
struct sk_buff *tx_rem_skb;
117-
__le32 tx_rem_sign;
118-
119-
spinlock_t mtx;
120-
atomic_t stop;
121-
122-
u32 tx_timer_pending;
123-
u32 tx_curr_frame_num;
124-
u32 rx_speed;
125-
u32 tx_speed;
126-
u32 rx_max;
127-
u32 tx_max;
128-
u32 max_datagram_size;
129-
u16 tx_max_datagrams;
130-
u16 tx_remainder;
131-
u16 tx_modulus;
132-
u16 tx_ndp_modulus;
133-
u16 tx_seq;
134-
u16 rx_seq;
135-
u16 connected;
136-
};
137-
13858
static void cdc_ncm_txpath_bh(unsigned long param);
13959
static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx);
14060
static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer);
@@ -447,7 +367,7 @@ static const struct ethtool_ops cdc_ncm_ethtool_ops = {
447367
.nway_reset = usbnet_nway_reset,
448368
};
449369

450-
static int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting)
370+
int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting)
451371
{
452372
struct cdc_ncm_ctx *ctx;
453373
struct usb_driver *driver;
@@ -605,8 +525,9 @@ static int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u
605525
dev_info(&dev->udev->dev, "bind() failure\n");
606526
return -ENODEV;
607527
}
528+
EXPORT_SYMBOL_GPL(cdc_ncm_bind_common);
608529

609-
static void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf)
530+
void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf)
610531
{
611532
struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
612533
struct usb_driver *driver = driver_of(intf);
@@ -636,6 +557,7 @@ static void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf)
636557
usb_set_intfdata(ctx->intf, NULL);
637558
cdc_ncm_free(ctx);
638559
}
560+
EXPORT_SYMBOL_GPL(cdc_ncm_unbind);
639561

640562
static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
641563
{
@@ -701,7 +623,7 @@ static struct usb_cdc_ncm_ndp16 *cdc_ncm_ndp(struct cdc_ncm_ctx *ctx, struct sk_
701623
return ndp16;
702624
}
703625

704-
static struct sk_buff *
626+
struct sk_buff *
705627
cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign)
706628
{
707629
struct usb_cdc_ncm_nth16 *nth16;
@@ -858,6 +780,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign)
858780
cdc_ncm_tx_timeout_start(ctx);
859781
return NULL;
860782
}
783+
EXPORT_SYMBOL_GPL(cdc_ncm_fill_tx_frame);
861784

862785
static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx)
863786
{
@@ -924,7 +847,7 @@ cdc_ncm_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
924847
}
925848

926849
/* verify NTB header and return offset of first NDP, or negative error */
927-
static int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_in)
850+
int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_in)
928851
{
929852
struct usb_cdc_ncm_nth16 *nth16;
930853
int len;
@@ -966,9 +889,10 @@ static int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_
966889
error:
967890
return ret;
968891
}
892+
EXPORT_SYMBOL_GPL(cdc_ncm_rx_verify_nth16);
969893

970894
/* verify NDP header and return number of datagrams, or negative error */
971-
static int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset)
895+
int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset)
972896
{
973897
struct usb_cdc_ncm_ndp16 *ndp16;
974898
int ret = -EINVAL;
@@ -999,6 +923,7 @@ static int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset)
999923
error:
1000924
return ret;
1001925
}
926+
EXPORT_SYMBOL_GPL(cdc_ncm_rx_verify_ndp16);
1002927

1003928
static int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in)
1004929
{

include/linux/usb/cdc_ncm.h

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/*
2+
* Copyright (C) ST-Ericsson 2010-2012
3+
* Contact: Alexey Orishko <[email protected]>
4+
* Original author: Hans Petter Selasky <[email protected]>
5+
*
6+
* USB Host Driver for Network Control Model (NCM)
7+
* http://www.usb.org/developers/devclass_docs/NCM10.zip
8+
*
9+
* The NCM encoding, decoding and initialization logic
10+
* derives from FreeBSD 8.x. if_cdce.c and if_cdcereg.h
11+
*
12+
* This software is available to you under a choice of one of two
13+
* licenses. You may choose this file to be licensed under the terms
14+
* of the GNU General Public License (GPL) Version 2 or the 2-clause
15+
* BSD license listed below:
16+
*
17+
* Redistribution and use in source and binary forms, with or without
18+
* modification, are permitted provided that the following conditions
19+
* are met:
20+
* 1. Redistributions of source code must retain the above copyright
21+
* notice, this list of conditions and the following disclaimer.
22+
* 2. Redistributions in binary form must reproduce the above copyright
23+
* notice, this list of conditions and the following disclaimer in the
24+
* documentation and/or other materials provided with the distribution.
25+
*
26+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
27+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
30+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36+
* SUCH DAMAGE.
37+
*/
38+
39+
/* CDC NCM subclass 3.2.1 */
40+
#define USB_CDC_NCM_NDP16_LENGTH_MIN 0x10
41+
42+
/* Maximum NTB length */
43+
#define CDC_NCM_NTB_MAX_SIZE_TX 32768 /* bytes */
44+
#define CDC_NCM_NTB_MAX_SIZE_RX 32768 /* bytes */
45+
46+
/* Minimum value for MaxDatagramSize, ch. 6.2.9 */
47+
#define CDC_NCM_MIN_DATAGRAM_SIZE 1514 /* bytes */
48+
49+
/* Minimum value for MaxDatagramSize, ch. 8.1.3 */
50+
#define CDC_MBIM_MIN_DATAGRAM_SIZE 2048 /* bytes */
51+
52+
#define CDC_NCM_MIN_TX_PKT 512 /* bytes */
53+
54+
/* Default value for MaxDatagramSize */
55+
#define CDC_NCM_MAX_DATAGRAM_SIZE 8192 /* bytes */
56+
57+
/*
58+
* Maximum amount of datagrams in NCM Datagram Pointer Table, not counting
59+
* the last NULL entry.
60+
*/
61+
#define CDC_NCM_DPT_DATAGRAMS_MAX 40
62+
63+
/* Restart the timer, if amount of datagrams is less than given value */
64+
#define CDC_NCM_RESTART_TIMER_DATAGRAM_CNT 3
65+
#define CDC_NCM_TIMER_PENDING_CNT 2
66+
#define CDC_NCM_TIMER_INTERVAL (400UL * NSEC_PER_USEC)
67+
68+
/* The following macro defines the minimum header space */
69+
#define CDC_NCM_MIN_HDR_SIZE \
70+
(sizeof(struct usb_cdc_ncm_nth16) + sizeof(struct usb_cdc_ncm_ndp16) + \
71+
(CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16))
72+
73+
#define CDC_NCM_NDP_SIZE \
74+
(sizeof(struct usb_cdc_ncm_ndp16) + \
75+
(CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16))
76+
77+
struct cdc_ncm_ctx {
78+
struct usb_cdc_ncm_ntb_parameters ncm_parm;
79+
struct hrtimer tx_timer;
80+
struct tasklet_struct bh;
81+
82+
const struct usb_cdc_ncm_desc *func_desc;
83+
const struct usb_cdc_mbim_desc *mbim_desc;
84+
const struct usb_cdc_header_desc *header_desc;
85+
const struct usb_cdc_union_desc *union_desc;
86+
const struct usb_cdc_ether_desc *ether_desc;
87+
88+
struct net_device *netdev;
89+
struct usb_device *udev;
90+
struct usb_host_endpoint *in_ep;
91+
struct usb_host_endpoint *out_ep;
92+
struct usb_host_endpoint *status_ep;
93+
struct usb_interface *intf;
94+
struct usb_interface *control;
95+
struct usb_interface *data;
96+
97+
struct sk_buff *tx_curr_skb;
98+
struct sk_buff *tx_rem_skb;
99+
__le32 tx_rem_sign;
100+
101+
spinlock_t mtx;
102+
atomic_t stop;
103+
104+
u32 tx_timer_pending;
105+
u32 tx_curr_frame_num;
106+
u32 rx_speed;
107+
u32 tx_speed;
108+
u32 rx_max;
109+
u32 tx_max;
110+
u32 max_datagram_size;
111+
u16 tx_max_datagrams;
112+
u16 tx_remainder;
113+
u16 tx_modulus;
114+
u16 tx_ndp_modulus;
115+
u16 tx_seq;
116+
u16 rx_seq;
117+
u16 connected;
118+
};
119+
120+
extern int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting);
121+
extern void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf);
122+
extern struct sk_buff *cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign);
123+
extern int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_in);
124+
extern int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset);

0 commit comments

Comments
 (0)