]> Pileus Git - ~andy/linux/blob - drivers/usb/gadget/rndis.h
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[~andy/linux] / drivers / usb / gadget / rndis.h
1 /*
2  * RNDIS        Definitions for Remote NDIS
3  *
4  * Authors:     Benedikt Spranger, Pengutronix
5  *              Robert Schwebel, Pengutronix
6  *
7  *              This program is free software; you can redistribute it and/or
8  *              modify it under the terms of the GNU General Public License
9  *              version 2, as published by the Free Software Foundation.
10  *
11  *              This software was originally developed in conformance with
12  *              Microsoft's Remote NDIS Specification License Agreement.
13  */
14
15 #ifndef _LINUX_RNDIS_H
16 #define _LINUX_RNDIS_H
17
18 #include <linux/rndis.h>
19 #include "ndis.h"
20
21 #define RNDIS_MAXIMUM_FRAME_SIZE        1518
22 #define RNDIS_MAX_TOTAL_SIZE            1558
23
24 typedef struct rndis_init_msg_type
25 {
26         __le32  MessageType;
27         __le32  MessageLength;
28         __le32  RequestID;
29         __le32  MajorVersion;
30         __le32  MinorVersion;
31         __le32  MaxTransferSize;
32 } rndis_init_msg_type;
33
34 typedef struct rndis_init_cmplt_type
35 {
36         __le32  MessageType;
37         __le32  MessageLength;
38         __le32  RequestID;
39         __le32  Status;
40         __le32  MajorVersion;
41         __le32  MinorVersion;
42         __le32  DeviceFlags;
43         __le32  Medium;
44         __le32  MaxPacketsPerTransfer;
45         __le32  MaxTransferSize;
46         __le32  PacketAlignmentFactor;
47         __le32  AFListOffset;
48         __le32  AFListSize;
49 } rndis_init_cmplt_type;
50
51 typedef struct rndis_halt_msg_type
52 {
53         __le32  MessageType;
54         __le32  MessageLength;
55         __le32  RequestID;
56 } rndis_halt_msg_type;
57
58 typedef struct rndis_query_msg_type
59 {
60         __le32  MessageType;
61         __le32  MessageLength;
62         __le32  RequestID;
63         __le32  OID;
64         __le32  InformationBufferLength;
65         __le32  InformationBufferOffset;
66         __le32  DeviceVcHandle;
67 } rndis_query_msg_type;
68
69 typedef struct rndis_query_cmplt_type
70 {
71         __le32  MessageType;
72         __le32  MessageLength;
73         __le32  RequestID;
74         __le32  Status;
75         __le32  InformationBufferLength;
76         __le32  InformationBufferOffset;
77 } rndis_query_cmplt_type;
78
79 typedef struct rndis_set_msg_type
80 {
81         __le32  MessageType;
82         __le32  MessageLength;
83         __le32  RequestID;
84         __le32  OID;
85         __le32  InformationBufferLength;
86         __le32  InformationBufferOffset;
87         __le32  DeviceVcHandle;
88 } rndis_set_msg_type;
89
90 typedef struct rndis_set_cmplt_type
91 {
92         __le32  MessageType;
93         __le32  MessageLength;
94         __le32  RequestID;
95         __le32  Status;
96 } rndis_set_cmplt_type;
97
98 typedef struct rndis_reset_msg_type
99 {
100         __le32  MessageType;
101         __le32  MessageLength;
102         __le32  Reserved;
103 } rndis_reset_msg_type;
104
105 typedef struct rndis_reset_cmplt_type
106 {
107         __le32  MessageType;
108         __le32  MessageLength;
109         __le32  Status;
110         __le32  AddressingReset;
111 } rndis_reset_cmplt_type;
112
113 typedef struct rndis_indicate_status_msg_type
114 {
115         __le32  MessageType;
116         __le32  MessageLength;
117         __le32  Status;
118         __le32  StatusBufferLength;
119         __le32  StatusBufferOffset;
120 } rndis_indicate_status_msg_type;
121
122 typedef struct rndis_keepalive_msg_type
123 {
124         __le32  MessageType;
125         __le32  MessageLength;
126         __le32  RequestID;
127 } rndis_keepalive_msg_type;
128
129 typedef struct rndis_keepalive_cmplt_type
130 {
131         __le32  MessageType;
132         __le32  MessageLength;
133         __le32  RequestID;
134         __le32  Status;
135 } rndis_keepalive_cmplt_type;
136
137 struct rndis_packet_msg_type
138 {
139         __le32  MessageType;
140         __le32  MessageLength;
141         __le32  DataOffset;
142         __le32  DataLength;
143         __le32  OOBDataOffset;
144         __le32  OOBDataLength;
145         __le32  NumOOBDataElements;
146         __le32  PerPacketInfoOffset;
147         __le32  PerPacketInfoLength;
148         __le32  VcHandle;
149         __le32  Reserved;
150 } __attribute__ ((packed));
151
152 struct rndis_config_parameter
153 {
154         __le32  ParameterNameOffset;
155         __le32  ParameterNameLength;
156         __le32  ParameterType;
157         __le32  ParameterValueOffset;
158         __le32  ParameterValueLength;
159 };
160
161 /* implementation specific */
162 enum rndis_state
163 {
164         RNDIS_UNINITIALIZED,
165         RNDIS_INITIALIZED,
166         RNDIS_DATA_INITIALIZED,
167 };
168
169 typedef struct rndis_resp_t
170 {
171         struct list_head        list;
172         u8                      *buf;
173         u32                     length;
174         int                     send;
175 } rndis_resp_t;
176
177 typedef struct rndis_params
178 {
179         u8                      confignr;
180         u8                      used;
181         u16                     saved_filter;
182         enum rndis_state        state;
183         u32                     medium;
184         u32                     speed;
185         u32                     media_state;
186
187         const u8                *host_mac;
188         u16                     *filter;
189         struct net_device       *dev;
190
191         u32                     vendorID;
192         const char              *vendorDescr;
193         void                    (*resp_avail)(void *v);
194         void                    *v;
195         struct list_head        resp_queue;
196 } rndis_params;
197
198 /* RNDIS Message parser and other useless functions */
199 int  rndis_msg_parser (u8 configNr, u8 *buf);
200 int  rndis_register(void (*resp_avail)(void *v), void *v);
201 void rndis_deregister (int configNr);
202 int  rndis_set_param_dev (u8 configNr, struct net_device *dev,
203                          u16 *cdc_filter);
204 int  rndis_set_param_vendor (u8 configNr, u32 vendorID,
205                             const char *vendorDescr);
206 int  rndis_set_param_medium (u8 configNr, u32 medium, u32 speed);
207 void rndis_add_hdr (struct sk_buff *skb);
208 int rndis_rm_hdr(struct gether *port, struct sk_buff *skb,
209                         struct sk_buff_head *list);
210 u8   *rndis_get_next_response (int configNr, u32 *length);
211 void rndis_free_response (int configNr, u8 *buf);
212
213 void rndis_uninit (int configNr);
214 int  rndis_signal_connect (int configNr);
215 int  rndis_signal_disconnect (int configNr);
216 int  rndis_state (int configNr);
217 extern void rndis_set_host_mac (int configNr, const u8 *addr);
218
219 int rndis_init(void);
220 void rndis_exit (void);
221
222 #endif  /* _LINUX_RNDIS_H */