Linux Audio

Check our new training course

Loading...
v4.6
 
  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{
 27	__le32	MessageType;
 28	__le32	MessageLength;
 29	__le32	RequestID;
 30	__le32	MajorVersion;
 31	__le32	MinorVersion;
 32	__le32	MaxTransferSize;
 33} rndis_init_msg_type;
 34
 35typedef struct rndis_init_cmplt_type
 36{
 37	__le32	MessageType;
 38	__le32	MessageLength;
 39	__le32	RequestID;
 40	__le32	Status;
 41	__le32	MajorVersion;
 42	__le32	MinorVersion;
 43	__le32	DeviceFlags;
 44	__le32	Medium;
 45	__le32	MaxPacketsPerTransfer;
 46	__le32	MaxTransferSize;
 47	__le32	PacketAlignmentFactor;
 48	__le32	AFListOffset;
 49	__le32	AFListSize;
 50} rndis_init_cmplt_type;
 51
 52typedef struct rndis_halt_msg_type
 53{
 54	__le32	MessageType;
 55	__le32	MessageLength;
 56	__le32	RequestID;
 57} rndis_halt_msg_type;
 58
 59typedef struct rndis_query_msg_type
 60{
 61	__le32	MessageType;
 62	__le32	MessageLength;
 63	__le32	RequestID;
 64	__le32	OID;
 65	__le32	InformationBufferLength;
 66	__le32	InformationBufferOffset;
 67	__le32	DeviceVcHandle;
 68} rndis_query_msg_type;
 69
 70typedef struct rndis_query_cmplt_type
 71{
 72	__le32	MessageType;
 73	__le32	MessageLength;
 74	__le32	RequestID;
 75	__le32	Status;
 76	__le32	InformationBufferLength;
 77	__le32	InformationBufferOffset;
 78} rndis_query_cmplt_type;
 79
 80typedef struct rndis_set_msg_type
 81{
 82	__le32	MessageType;
 83	__le32	MessageLength;
 84	__le32	RequestID;
 85	__le32	OID;
 86	__le32	InformationBufferLength;
 87	__le32	InformationBufferOffset;
 88	__le32	DeviceVcHandle;
 89} rndis_set_msg_type;
 90
 91typedef struct rndis_set_cmplt_type
 92{
 93	__le32	MessageType;
 94	__le32	MessageLength;
 95	__le32	RequestID;
 96	__le32	Status;
 97} rndis_set_cmplt_type;
 98
 99typedef struct rndis_reset_msg_type
100{
101	__le32	MessageType;
102	__le32	MessageLength;
103	__le32	Reserved;
104} rndis_reset_msg_type;
105
106typedef struct rndis_reset_cmplt_type
107{
108	__le32	MessageType;
109	__le32	MessageLength;
110	__le32	Status;
111	__le32	AddressingReset;
112} rndis_reset_cmplt_type;
113
114typedef struct rndis_indicate_status_msg_type
115{
116	__le32	MessageType;
117	__le32	MessageLength;
118	__le32	Status;
119	__le32	StatusBufferLength;
120	__le32	StatusBufferOffset;
121} rndis_indicate_status_msg_type;
122
123typedef struct rndis_keepalive_msg_type
124{
125	__le32	MessageType;
126	__le32	MessageLength;
127	__le32	RequestID;
128} rndis_keepalive_msg_type;
129
130typedef struct rndis_keepalive_cmplt_type
131{
132	__le32	MessageType;
133	__le32	MessageLength;
134	__le32	RequestID;
135	__le32	Status;
136} rndis_keepalive_cmplt_type;
137
138struct rndis_packet_msg_type
139{
140	__le32	MessageType;
141	__le32	MessageLength;
142	__le32	DataOffset;
143	__le32	DataLength;
144	__le32	OOBDataOffset;
145	__le32	OOBDataLength;
146	__le32	NumOOBDataElements;
147	__le32	PerPacketInfoOffset;
148	__le32	PerPacketInfoLength;
149	__le32	VcHandle;
150	__le32	Reserved;
151} __attribute__ ((packed));
152
153struct rndis_config_parameter
154{
155	__le32	ParameterNameOffset;
156	__le32	ParameterNameLength;
157	__le32	ParameterType;
158	__le32	ParameterValueOffset;
159	__le32	ParameterValueLength;
160};
161
162/* implementation specific */
163enum rndis_state
164{
165	RNDIS_UNINITIALIZED,
166	RNDIS_INITIALIZED,
167	RNDIS_DATA_INITIALIZED,
168};
169
170typedef struct rndis_resp_t
171{
172	struct list_head	list;
173	u8			*buf;
174	u32			length;
175	int			send;
176} rndis_resp_t;
177
178typedef struct rndis_params
179{
180	int			confignr;
181	u8			used;
182	u16			saved_filter;
183	enum rndis_state	state;
184	u32			medium;
185	u32			speed;
186	u32			media_state;
187
188	const u8		*host_mac;
189	u16			*filter;
190	struct net_device	*dev;
191
192	u32			vendorID;
193	const char		*vendorDescr;
194	void			(*resp_avail)(void *v);
195	void			*v;
196	struct list_head	resp_queue;
 
197} rndis_params;
198
199/* RNDIS Message parser and other useless functions */
200int  rndis_msg_parser(struct rndis_params *params, u8 *buf);
201struct rndis_params *rndis_register(void (*resp_avail)(void *v), void *v);
202void rndis_deregister(struct rndis_params *params);
203int  rndis_set_param_dev(struct rndis_params *params, struct net_device *dev,
204			 u16 *cdc_filter);
205int  rndis_set_param_vendor(struct rndis_params *params, u32 vendorID,
206			    const char *vendorDescr);
207int  rndis_set_param_medium(struct rndis_params *params, u32 medium,
208			     u32 speed);
209void rndis_add_hdr(struct sk_buff *skb);
210int rndis_rm_hdr(struct gether *port, struct sk_buff *skb,
211			struct sk_buff_head *list);
212u8   *rndis_get_next_response(struct rndis_params *params, u32 *length);
213void rndis_free_response(struct rndis_params *params, u8 *buf);
214
215void rndis_uninit(struct rndis_params *params);
216int  rndis_signal_connect(struct rndis_params *params);
217int  rndis_signal_disconnect(struct rndis_params *params);
218int  rndis_state(struct rndis_params *params);
219extern void rndis_set_host_mac(struct rndis_params *params, const u8 *addr);
220
221#endif  /* _LINUX_RNDIS_H */
v6.8
  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 */