Linux Audio

Check our new training course

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