Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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 */