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
drivers
usb
gadget
u_ether.h
Go to the documentation of this file.
1
/*
2
* u_ether.h -- interface to USB gadget "ethernet link" utilities
3
*
4
* Copyright (C) 2003-2005,2008 David Brownell
5
* Copyright (C) 2003-2004 Robert Schwebel, Benedikt Spranger
6
* Copyright (C) 2008 Nokia Corporation
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
12
*/
13
14
#ifndef __U_ETHER_H
15
#define __U_ETHER_H
16
17
#include <
linux/err.h
>
18
#include <linux/if_ether.h>
19
#include <
linux/usb/composite.h
>
20
#include <
linux/usb/cdc.h
>
21
22
#include "
gadget_chips.h
"
23
24
25
/*
26
* This represents the USB side of an "ethernet" link, managed by a USB
27
* function which provides control and (maybe) framing. Two functions
28
* in different configurations could share the same ethernet link/netdev,
29
* using different host interaction models.
30
*
31
* There is a current limitation that only one instance of this link may
32
* be present in any given configuration. When that's a problem, network
33
* layer facilities can be used to package multiple logical links on this
34
* single "physical" one.
35
*/
36
struct
gether
{
37
struct
usb_function
func
;
38
39
/* updated by gether_{connect,disconnect} */
40
struct
eth_dev
*
ioport
;
41
42
/* endpoints handle full and/or high speeds */
43
struct
usb_ep
*
in_ep
;
44
struct
usb_ep
*
out_ep
;
45
46
bool
is_zlp_ok
;
47
48
u16
cdc_filter
;
49
50
/* hooks for added framing, as needed for RNDIS and EEM. */
51
u32
header_len
;
52
/* NCM requires fixed size bundles */
53
bool
is_fixed
;
54
u32
fixed_out_len
;
55
u32
fixed_in_len
;
56
struct
sk_buff
*(*wrap)(
struct
gether
*
port
,
57
struct
sk_buff
*
skb
);
58
int
(*
unwrap
)(
struct
gether
*
port
,
59
struct
sk_buff
*
skb
,
60
struct
sk_buff_head
*
list
);
61
62
/* called on network open/close */
63
void
(*
open
)(
struct
gether
*);
64
void
(*
close
)(
struct
gether
*);
65
};
66
67
#define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \
68
|USB_CDC_PACKET_TYPE_ALL_MULTICAST \
69
|USB_CDC_PACKET_TYPE_PROMISCUOUS \
70
|USB_CDC_PACKET_TYPE_DIRECTED)
71
72
/* variant of gether_setup that allows customizing network device name */
73
int
gether_setup_name
(
struct
usb_gadget
*g,
u8
ethaddr[
ETH_ALEN
],
74
const
char
*netname);
75
76
/* netdev setup/teardown as directed by the gadget driver */
77
/* gether_setup - initialize one ethernet-over-usb link
78
* @g: gadget to associated with these links
79
* @ethaddr: NULL, or a buffer in which the ethernet address of the
80
* host side of the link is recorded
81
* Context: may sleep
82
*
83
* This sets up the single network link that may be exported by a
84
* gadget driver using this framework. The link layer addresses are
85
* set up using module parameters.
86
*
87
* Returns negative errno, or zero on success
88
*/
89
static
inline
int
gether_setup
(
struct
usb_gadget
*g,
u8
ethaddr[
ETH_ALEN
])
90
{
91
return
gether_setup_name
(g, ethaddr,
"usb"
);
92
}
93
94
void
gether_cleanup
(
void
);
95
96
/* connect/disconnect is handled by individual functions */
97
struct
net_device
*
gether_connect
(
struct
gether
*);
98
void
gether_disconnect
(
struct
gether
*);
99
100
/* Some controllers can't support CDC Ethernet (ECM) ... */
101
static
inline
bool
can_support_ecm(
struct
usb_gadget
*gadget)
102
{
103
if
(!gadget_supports_altsettings(gadget))
104
return
false
;
105
106
/* Everything else is *presumably* fine ... but this is a bit
107
* chancy, so be **CERTAIN** there are no hardware issues with
108
* your controller. Add it above if it can't handle CDC.
109
*/
110
return
true
;
111
}
112
113
/* each configuration may bind one instance of an ethernet link */
114
int
geth_bind_config
(
struct
usb_configuration
*
c
,
u8
ethaddr[
ETH_ALEN
]);
115
int
ecm_bind_config
(
struct
usb_configuration
*
c
,
u8
ethaddr[
ETH_ALEN
]);
116
int
ncm_bind_config
(
struct
usb_configuration
*
c
,
u8
ethaddr[
ETH_ALEN
]);
117
int
eem_bind_config
(
struct
usb_configuration
*
c
);
118
119
#ifdef USB_ETH_RNDIS
120
121
int
rndis_bind_config_vendor
(
struct
usb_configuration
*
c
,
u8
ethaddr[
ETH_ALEN
],
122
u32
vendorID,
const
char
*
manufacturer
);
123
124
#else
125
126
static
inline
int
127
rndis_bind_config_vendor
(
struct
usb_configuration
*
c
,
u8
ethaddr[
ETH_ALEN
],
128
u32
vendorID,
const
char
*
manufacturer
)
129
{
130
return
0;
131
}
132
133
#endif
134
147
static
inline
int
rndis_bind_config(
struct
usb_configuration
*
c
,
148
u8
ethaddr[
ETH_ALEN
])
149
{
150
return
rndis_bind_config_vendor
(c, ethaddr, 0,
NULL
);
151
}
152
153
154
#endif
/* __U_ETHER_H */
Generated on Thu Jan 10 2013 14:26:17 for Linux Kernel by
1.8.2