Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
usb
usbnet.h
Go to the documentation of this file.
1
/*
2
* USB Networking Link Interface
3
*
4
* Copyright (C) 2000-2005 by David Brownell <
[email protected]
>
5
* Copyright (C) 2003-2005 David Hollis <
[email protected]
>
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_ASLEEP 6
70
# define EVENT_DEV_OPEN 7
71
# define EVENT_DEVICE_REPORT_IDLE 8
72
};
73
74
static
inline
struct
usb_driver *driver_of(
struct
usb_interface
*
intf
)
75
{
76
return
to_usb_driver(intf->dev.driver);
77
}
78
79
/* interface from the device/framing level "minidriver" to core */
80
struct
driver_info
{
81
char
*
description
;
82
83
int
flags
;
84
/* framing is CDC Ethernet, not writing ZLPs (hw issues), or optionally: */
85
#define FLAG_FRAMING_NC 0x0001
/* guard against device dropouts */
86
#define FLAG_FRAMING_GL 0x0002
/* genelink batches packets */
87
#define FLAG_FRAMING_Z 0x0004
/* zaurus adds a trailer */
88
#define FLAG_FRAMING_RN 0x0008
/* RNDIS batches, plus huge header */
89
90
#define FLAG_NO_SETINT 0x0010
/* device can't set_interface() */
91
#define FLAG_ETHER 0x0020
/* maybe use "eth%d" names */
92
93
#define FLAG_FRAMING_AX 0x0040
/* AX88772/178 packets */
94
#define FLAG_WLAN 0x0080
/* use "wlan%d" names */
95
#define FLAG_AVOID_UNLINK_URBS 0x0100
/* don't unlink urbs at usbnet_stop() */
96
#define FLAG_SEND_ZLP 0x0200
/* hw requires ZLPs are sent */
97
#define FLAG_WWAN 0x0400
/* use "wwan%d" names */
98
99
#define FLAG_LINK_INTR 0x0800
/* updates link (carrier) status */
100
101
#define FLAG_POINTTOPOINT 0x1000
/* possibly use "usb%d" names */
102
103
/*
104
* Indicates to usbnet, that USB driver accumulates multiple IP packets.
105
* Affects statistic (counters) and short packet handling.
106
*/
107
#define FLAG_MULTI_PACKET 0x2000
108
#define FLAG_RX_ASSEMBLE 0x4000
/* rx packets may span >1 frames */
109
110
/* init device ... can sleep, or cause probe() failure */
111
int
(*
bind
)(
struct
usbnet
*,
struct
usb_interface
*);
112
113
/* cleanup device ... can sleep, but can't fail */
114
void
(*
unbind
)(
struct
usbnet
*,
struct
usb_interface
*);
115
116
/* reset device ... can sleep */
117
int
(*
reset
)(
struct
usbnet
*);
118
119
/* stop device ... can sleep */
120
int
(*
stop
)(
struct
usbnet
*);
121
122
/* see if peer is connected ... can sleep */
123
int
(*
check_connect
)(
struct
usbnet
*);
124
125
/* (dis)activate runtime power management */
126
int
(*
manage_power
)(
struct
usbnet
*,
int
);
127
128
/* for status polling */
129
void
(*
status
)(
struct
usbnet
*,
struct
urb
*);
130
131
/* link reset handling, called from defer_kevent */
132
int
(*
link_reset
)(
struct
usbnet
*);
133
134
/* fixup rx packet (strip framing) */
135
int
(*
rx_fixup
)(
struct
usbnet
*
dev
,
struct
sk_buff
*
skb
);
136
137
/* fixup tx packet (add framing) */
138
struct
sk_buff
*(*tx_fixup)(
struct
usbnet
*
dev
,
139
struct
sk_buff
*
skb
,
gfp_t
flags
);
140
141
/* early initialization code, can sleep. This is for minidrivers
142
* having 'subminidrivers' that need to do extra initialization
143
* right after minidriver have initialized hardware. */
144
int
(*
early_init
)(
struct
usbnet
*
dev
);
145
146
/* called by minidriver when receiving indication */
147
void
(*
indication
)(
struct
usbnet
*
dev
,
void
*
ind
,
int
indlen);
148
149
/* for new devices, use the descriptor-reading code instead */
150
int
in
;
/* rx endpoint */
151
int
out
;
/* tx endpoint */
152
153
unsigned
long
data
;
/* Misc driver specific data */
154
};
155
156
/* Minidrivers are just drivers using the "usbnet" core as a powerful
157
* network-specific subroutine library ... that happens to do pretty
158
* much everything except custom framing and chip-specific stuff.
159
*/
160
extern
int
usbnet_probe
(
struct
usb_interface
*,
const
struct
usb_device_id
*);
161
extern
int
usbnet_suspend
(
struct
usb_interface
*,
pm_message_t
);
162
extern
int
usbnet_resume
(
struct
usb_interface
*);
163
extern
void
usbnet_disconnect
(
struct
usb_interface
*);
164
extern
void
usbnet_device_suggests_idle
(
struct
usbnet
*
dev
);
165
166
167
/* Drivers that reuse some of the standard USB CDC infrastructure
168
* (notably, using multiple interfaces according to the CDC
169
* union descriptor) get some helper code.
170
*/
171
struct
cdc_state
{
172
struct
usb_cdc_header_desc
*
header
;
173
struct
usb_cdc_union_desc
*
u
;
174
struct
usb_cdc_ether_desc
*
ether
;
175
struct
usb_interface
*
control
;
176
struct
usb_interface
*
data
;
177
};
178
179
extern
int
usbnet_generic_cdc_bind
(
struct
usbnet
*,
struct
usb_interface
*);
180
extern
int
usbnet_cdc_bind
(
struct
usbnet
*,
struct
usb_interface
*);
181
extern
void
usbnet_cdc_unbind
(
struct
usbnet
*,
struct
usb_interface
*);
182
extern
void
usbnet_cdc_status
(
struct
usbnet
*,
struct
urb
*);
183
184
/* CDC and RNDIS support the same host-chosen packet filters for IN transfers */
185
#define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \
186
|USB_CDC_PACKET_TYPE_ALL_MULTICAST \
187
|USB_CDC_PACKET_TYPE_PROMISCUOUS \
188
|USB_CDC_PACKET_TYPE_DIRECTED)
189
190
191
/* we record the state for each of our queued skbs */
192
enum
skb_state
{
193
illegal
= 0,
194
tx_start
,
tx_done
,
195
rx_start
,
rx_done
,
rx_cleanup
,
196
unlink_start
197
};
198
199
struct
skb_data
{
/* skb->cb is one of these */
200
struct
urb
*
urb
;
201
struct
usbnet
*
dev
;
202
enum
skb_state
state
;
203
size_t
length
;
204
};
205
206
extern
int
usbnet_open
(
struct
net_device
*
net
);
207
extern
int
usbnet_stop
(
struct
net_device
*
net
);
208
extern
netdev_tx_t
usbnet_start_xmit
(
struct
sk_buff
*
skb
,
209
struct
net_device
*
net
);
210
extern
void
usbnet_tx_timeout
(
struct
net_device
*
net
);
211
extern
int
usbnet_change_mtu
(
struct
net_device
*
net
,
int
new_mtu);
212
213
extern
int
usbnet_get_endpoints
(
struct
usbnet
*,
struct
usb_interface
*);
214
extern
int
usbnet_get_ethernet_addr
(
struct
usbnet
*,
int
);
215
extern
void
usbnet_defer_kevent
(
struct
usbnet
*,
int
);
216
extern
void
usbnet_skb_return
(
struct
usbnet
*,
struct
sk_buff
*);
217
extern
void
usbnet_unlink_rx_urbs
(
struct
usbnet
*);
218
219
extern
void
usbnet_pause_rx
(
struct
usbnet
*);
220
extern
void
usbnet_resume_rx
(
struct
usbnet
*);
221
extern
void
usbnet_purge_paused_rxq
(
struct
usbnet
*);
222
223
extern
int
usbnet_get_settings
(
struct
net_device
*
net
,
224
struct
ethtool_cmd
*
cmd
);
225
extern
int
usbnet_set_settings
(
struct
net_device
*
net
,
226
struct
ethtool_cmd
*
cmd
);
227
extern
u32
usbnet_get_link
(
struct
net_device
*
net
);
228
extern
u32
usbnet_get_msglevel
(
struct
net_device
*);
229
extern
void
usbnet_set_msglevel
(
struct
net_device
*,
u32
);
230
extern
void
usbnet_get_drvinfo
(
struct
net_device
*,
struct
ethtool_drvinfo
*);
231
extern
int
usbnet_nway_reset
(
struct
net_device
*
net
);
232
233
#endif
/* __LINUX_USB_USBNET_H */
Generated on Thu Jan 10 2013 14:52:45 for Linux Kernel by
1.8.2