~ubuntu-branches/ubuntu/natty/linux-backports-modules-2.6.38/natty-updates

« back to all changes in this revision

Viewing changes to updates/compat-wireless-2.6.36/include/linux/usb/usbnet.h

  • Committer: Bazaar Package Importer
  • Author(s): Tim Gardner, Tim Gardner
  • Date: 2011-06-08 10:44:09 UTC
  • Revision ID: james.westby@ubuntu.com-20110608104409-fnl8carkdo15bwsz
Tags: 2.6.38-10.6
[ Tim Gardner ]

Shorten compat-wireless package name to cw to accomodate
CDROM file name length restrictions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * USB Networking Link Interface
3
 
 *
4
 
 * Copyright (C) 2000-2005 by David Brownell <dbrownell@users.sourceforge.net>
5
 
 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
6
 
 *
7
 
 * This program is free software; you can redistribute it and/or modify
8
 
 * it under the terms of the GNU General Public License as published by
9
 
 * the Free Software Foundation; either version 2 of the License, or
10
 
 * (at your option) any later version.
11
 
 *
12
 
 * This program is distributed in the hope that it will be useful,
13
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 
 * GNU General Public License for more details.
16
 
 *
17
 
 * You should have received a copy of the GNU General Public License
18
 
 * along with this program; if not, write to the Free Software
19
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20
 
 */
21
 
 
22
 
#ifndef __LINUX_USB_USBNET_H
23
 
#define __LINUX_USB_USBNET_H
24
 
 
25
 
/* interface from usbnet core to each USB networking link we handle */
26
 
struct usbnet {
27
 
        /* housekeeping */
28
 
        struct usb_device       *udev;
29
 
        struct usb_interface    *intf;
30
 
        struct driver_info      *driver_info;
31
 
        const char              *driver_name;
32
 
        void                    *driver_priv;
33
 
        wait_queue_head_t       *wait;
34
 
        struct mutex            phy_mutex;
35
 
        unsigned char           suspend_count;
36
 
 
37
 
        /* i/o info: pipes etc */
38
 
        unsigned                in, out;
39
 
        struct usb_host_endpoint *status;
40
 
        unsigned                maxpacket;
41
 
        struct timer_list       delay;
42
 
 
43
 
        /* protocol/interface state */
44
 
        struct net_device       *net;
45
 
        int                     msg_enable;
46
 
        unsigned long           data[5];
47
 
        u32                     xid;
48
 
        u32                     hard_mtu;       /* count any extra framing */
49
 
        size_t                  rx_urb_size;    /* size for rx urbs */
50
 
        struct mii_if_info      mii;
51
 
 
52
 
        /* various kinds of pending driver work */
53
 
        struct sk_buff_head     rxq;
54
 
        struct sk_buff_head     txq;
55
 
        struct sk_buff_head     done;
56
 
        struct sk_buff_head     rxq_pause;
57
 
        struct urb              *interrupt;
58
 
        struct usb_anchor       deferred;
59
 
        struct tasklet_struct   bh;
60
 
 
61
 
        struct work_struct      kevent;
62
 
        unsigned long           flags;
63
 
#               define EVENT_TX_HALT    0
64
 
#               define EVENT_RX_HALT    1
65
 
#               define EVENT_RX_MEMORY  2
66
 
#               define EVENT_STS_SPLIT  3
67
 
#               define EVENT_LINK_RESET 4
68
 
#               define EVENT_RX_PAUSED  5
69
 
#               define EVENT_DEV_WAKING 6
70
 
#               define EVENT_DEV_ASLEEP 7
71
 
};
72
 
 
73
 
static inline struct usb_driver *driver_of(struct usb_interface *intf)
74
 
{
75
 
        return to_usb_driver(intf->dev.driver);
76
 
}
77
 
 
78
 
/* interface from the device/framing level "minidriver" to core */
79
 
struct driver_info {
80
 
        char            *description;
81
 
 
82
 
        int             flags;
83
 
/* framing is CDC Ethernet, not writing ZLPs (hw issues), or optionally: */
84
 
#define FLAG_FRAMING_NC 0x0001          /* guard against device dropouts */
85
 
#define FLAG_FRAMING_GL 0x0002          /* genelink batches packets */
86
 
#define FLAG_FRAMING_Z  0x0004          /* zaurus adds a trailer */
87
 
#define FLAG_FRAMING_RN 0x0008          /* RNDIS batches, plus huge header */
88
 
 
89
 
#define FLAG_NO_SETINT  0x0010          /* device can't set_interface() */
90
 
#define FLAG_ETHER      0x0020          /* maybe use "eth%d" names */
91
 
 
92
 
#define FLAG_FRAMING_AX 0x0040          /* AX88772/178 packets */
93
 
#define FLAG_WLAN       0x0080          /* use "wlan%d" names */
94
 
#define FLAG_AVOID_UNLINK_URBS 0x0100   /* don't unlink urbs at usbnet_stop() */
95
 
#define FLAG_SEND_ZLP   0x0200          /* hw requires ZLPs are sent */
96
 
#define FLAG_WWAN       0x0400          /* use "wwan%d" names */
97
 
 
98
 
#define FLAG_LINK_INTR  0x0800          /* updates link (carrier) status */
99
 
 
100
 
        /* init device ... can sleep, or cause probe() failure */
101
 
        int     (*bind)(struct usbnet *, struct usb_interface *);
102
 
 
103
 
        /* cleanup device ... can sleep, but can't fail */
104
 
        void    (*unbind)(struct usbnet *, struct usb_interface *);
105
 
 
106
 
        /* reset device ... can sleep */
107
 
        int     (*reset)(struct usbnet *);
108
 
 
109
 
        /* stop device ... can sleep */
110
 
        int     (*stop)(struct usbnet *);
111
 
 
112
 
        /* see if peer is connected ... can sleep */
113
 
        int     (*check_connect)(struct usbnet *);
114
 
 
115
 
        /* (dis)activate runtime power management */
116
 
        int     (*manage_power)(struct usbnet *, int);
117
 
 
118
 
        /* for status polling */
119
 
        void    (*status)(struct usbnet *, struct urb *);
120
 
 
121
 
        /* link reset handling, called from defer_kevent */
122
 
        int     (*link_reset)(struct usbnet *);
123
 
 
124
 
        /* fixup rx packet (strip framing) */
125
 
        int     (*rx_fixup)(struct usbnet *dev, struct sk_buff *skb);
126
 
 
127
 
        /* fixup tx packet (add framing) */
128
 
        struct sk_buff  *(*tx_fixup)(struct usbnet *dev,
129
 
                                struct sk_buff *skb, gfp_t flags);
130
 
 
131
 
        /* early initialization code, can sleep. This is for minidrivers
132
 
         * having 'subminidrivers' that need to do extra initialization
133
 
         * right after minidriver have initialized hardware. */
134
 
        int     (*early_init)(struct usbnet *dev);
135
 
 
136
 
        /* called by minidriver when receiving indication */
137
 
        void    (*indication)(struct usbnet *dev, void *ind, int indlen);
138
 
 
139
 
        /* for new devices, use the descriptor-reading code instead */
140
 
        int             in;             /* rx endpoint */
141
 
        int             out;            /* tx endpoint */
142
 
 
143
 
        unsigned long   data;           /* Misc driver specific data */
144
 
};
145
 
 
146
 
/* Minidrivers are just drivers using the "usbnet" core as a powerful
147
 
 * network-specific subroutine library ... that happens to do pretty
148
 
 * much everything except custom framing and chip-specific stuff.
149
 
 */
150
 
extern int usbnet_probe(struct usb_interface *, const struct usb_device_id *);
151
 
extern int usbnet_suspend(struct usb_interface *, pm_message_t);
152
 
extern int usbnet_resume(struct usb_interface *);
153
 
extern void usbnet_disconnect(struct usb_interface *);
154
 
 
155
 
 
156
 
/* Drivers that reuse some of the standard USB CDC infrastructure
157
 
 * (notably, using multiple interfaces according to the CDC
158
 
 * union descriptor) get some helper code.
159
 
 */
160
 
struct cdc_state {
161
 
        struct usb_cdc_header_desc      *header;
162
 
        struct usb_cdc_union_desc       *u;
163
 
        struct usb_cdc_ether_desc       *ether;
164
 
        struct usb_interface            *control;
165
 
        struct usb_interface            *data;
166
 
};
167
 
 
168
 
extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *);
169
 
extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *);
170
 
 
171
 
/* CDC and RNDIS support the same host-chosen packet filters for IN transfers */
172
 
#define DEFAULT_FILTER  (USB_CDC_PACKET_TYPE_BROADCAST \
173
 
                        |USB_CDC_PACKET_TYPE_ALL_MULTICAST \
174
 
                        |USB_CDC_PACKET_TYPE_PROMISCUOUS \
175
 
                        |USB_CDC_PACKET_TYPE_DIRECTED)
176
 
 
177
 
 
178
 
/* we record the state for each of our queued skbs */
179
 
enum skb_state {
180
 
        illegal = 0,
181
 
        tx_start, tx_done,
182
 
        rx_start, rx_done, rx_cleanup
183
 
};
184
 
 
185
 
struct skb_data {       /* skb->cb is one of these */
186
 
        struct urb              *urb;
187
 
        struct usbnet           *dev;
188
 
        enum skb_state          state;
189
 
        size_t                  length;
190
 
};
191
 
 
192
 
extern int usbnet_open(struct net_device *net);
193
 
extern int usbnet_stop(struct net_device *net);
194
 
extern netdev_tx_t usbnet_start_xmit(struct sk_buff *skb,
195
 
                                     struct net_device *net);
196
 
extern void usbnet_tx_timeout(struct net_device *net);
197
 
extern int usbnet_change_mtu(struct net_device *net, int new_mtu);
198
 
 
199
 
extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *);
200
 
extern int usbnet_get_ethernet_addr(struct usbnet *, int);
201
 
extern void usbnet_defer_kevent(struct usbnet *, int);
202
 
extern void usbnet_skb_return(struct usbnet *, struct sk_buff *);
203
 
extern void usbnet_unlink_rx_urbs(struct usbnet *);
204
 
 
205
 
extern void usbnet_pause_rx(struct usbnet *);
206
 
extern void usbnet_resume_rx(struct usbnet *);
207
 
extern void usbnet_purge_paused_rxq(struct usbnet *);
208
 
 
209
 
extern int usbnet_get_settings(struct net_device *net,
210
 
                               struct ethtool_cmd *cmd);
211
 
extern int usbnet_set_settings(struct net_device *net,
212
 
                               struct ethtool_cmd *cmd);
213
 
extern u32 usbnet_get_link(struct net_device *net);
214
 
extern u32 usbnet_get_msglevel(struct net_device *);
215
 
extern void usbnet_set_msglevel(struct net_device *, u32);
216
 
extern void usbnet_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
217
 
extern int usbnet_nway_reset(struct net_device *net);
218
 
 
219
 
#endif /* __LINUX_USB_USBNET_H */