17517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/*
27517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * Host Side support for RNDIS Networking Links
37517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * Copyright (C) 2005 by David Brownell
47517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *
57517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * This program is free software; you can redistribute it and/or modify
67517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * it under the terms of the GNU General Public License as published by
77517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * the Free Software Foundation; either version 2 of the License, or
87517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * (at your option) any later version.
97517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *
107517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * This program is distributed in the hope that it will be useful,
117517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * but WITHOUT ANY WARRANTY; without even the implied warranty of
127517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
137517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * GNU General Public License for more details.
147517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *
157517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * You should have received a copy of the GNU General Public License
167517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * along with this program; if not, write to the Free Software
177517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
187517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna */
197517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
20dda43a0e03a33dd716fb34f812b1af614f74daffRobert P. J. Day#ifndef	__LINUX_USB_RNDIS_HOST_H
21dda43a0e03a33dd716fb34f812b1af614f74daffRobert P. J. Day#define	__LINUX_USB_RNDIS_HOST_H
227517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
237591157e1848b5db900b34016e2a2182329a93bbLinus Walleij#include <linux/rndis.h>
247591157e1848b5db900b34016e2a2182329a93bbLinus Walleij
257517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/*
267517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * CONTROL uses CDC "encapsulated commands" with funky notifications.
277517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *  - control-out:  SEND_ENCAPSULATED
287517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *  - interrupt-in:  RESPONSE_AVAILABLE
297517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *  - control-in:  GET_ENCAPSULATED
307517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *
317517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * We'll try to ignore the RESPONSE_AVAILABLE notifications.
327517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna *
337517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * REVISIT some RNDIS implementations seem to have curious issues still
347517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * to be resolved.
357517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna */
367517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_msg_hdr {
377517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_* */
387517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
390858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* followed by data that varies between messages */
407517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
417517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
420858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* ... and more */
437517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
447517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
457517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/* MS-Windows uses this strange size, but RNDIS spec says 1024 minimum */
467517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna#define	CONTROL_BUFFER_SIZE		1025
477517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
487517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/* RNDIS defines an (absurdly huge) 10 second control timeout,
497517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * but ActiveSync seems to use a more usual 5 second timeout
507517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna * (which matches the USB 2.0 spec).
517517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna */
527517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna#define	RNDIS_CONTROL_TIMEOUT_MS	(5 * 1000)
537517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
547517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_data_hdr {
557517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;		/* RNDIS_MSG_PACKET */
560858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	msg_len;		/* rndis_data_hdr + data_len + pad */
570858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	data_offset;		/* 36 -- right after header */
580858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	data_len;		/* ... real packet size */
590858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman
600858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	oob_data_offset;	/* zero */
610858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	oob_data_len;		/* zero */
620858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	num_oob;		/* zero */
630858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	packet_data_offset;	/* zero */
640858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman
650858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	packet_data_len;	/* zero */
660858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	vc_handle;		/* zero */
670858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	reserved;		/* zero */
687517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
697517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
707517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_init {		/* OUT */
710858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
727517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_INIT */
730858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	msg_len;			/* 24 */
747517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
750858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	major_version;			/* of rndis (1.0) */
767517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	minor_version;
777517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	max_transfer_size;
787517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
797517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
807517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_init_c {		/* IN */
810858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
827517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_INIT_C */
837517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
847517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
857517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
860858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	major_version;			/* of rndis (1.0) */
877517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	minor_version;
887517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	device_flags;
890858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	medium;				/* zero == 802.3 */
907517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	max_packets_per_message;
917517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	max_transfer_size;
920858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	packet_alignment;		/* max 7; (1<<n) bytes */
930858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	af_list_offset;			/* zero */
940858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	__le32	af_list_size;			/* zero */
957517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
967517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
977517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_halt {		/* OUT (no reply) */
980858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
997517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_HALT */
1007517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1017517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1027517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1037517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1047517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_query {		/* OUT */
1050858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1067517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_QUERY */
1077517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1087517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1097517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	oid;
1107517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	len;
1117517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	offset;
1120858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman/*?*/	__le32	handle;				/* zero */
1137517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1147517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1157517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_query_c {		/* IN */
1160858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1177517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_QUERY_C */
1187517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1197517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1207517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
1217517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	len;
1227517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	offset;
1237517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1247517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1257517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_set {		/* OUT */
1260858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1277517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_SET */
1287517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1297517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1307517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	oid;
1317517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	len;
1327517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	offset;
1330858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman/*?*/	__le32	handle;				/* zero */
1347517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1357517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1367517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_set_c {		/* IN */
1370858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1387517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_SET_C */
1397517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1407517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1417517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
1427517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1437517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1447517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_reset {		/* IN */
1450858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1467517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_RESET */
1477517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1487517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	reserved;
1497517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1507517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1517517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_reset_c {		/* OUT */
1520858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1537517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_RESET_C */
1547517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1557517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
1567517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	addressing_lost;
1577517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1587517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1597517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_indicate {		/* IN (unrequested) */
1600858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1617517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_INDICATE */
1627517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1637517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
1647517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	length;
1657517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	offset;
1667517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/**/	__le32	diag_status;
1677517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	error_offset;
1687517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/**/	__le32	message;
1697517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1707517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1717517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_keepalive {	/* OUT (optionally IN) */
1720858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1737517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_KEEPALIVE */
1747517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1757517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1767517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1777517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1787517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinnastruct rndis_keepalive_c {	/* IN (optionally OUT) */
1790858a3a52f659dabf2860f350e5a6a61f069e851Greg Kroah-Hartman	/* header and: */
1807517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_type;			/* RNDIS_MSG_KEEPALIVE_C */
1817517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	msg_len;
1827517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	request_id;
1837517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	__le32	status;
1847517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna} __attribute__ ((packed));
1857517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
1867517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna/* default filter used with RNDIS devices */
1877517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna#define RNDIS_DEFAULT_FILTER ( \
1887517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	RNDIS_PACKET_TYPE_DIRECTED | \
1897517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	RNDIS_PACKET_TYPE_BROADCAST | \
1907517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	RNDIS_PACKET_TYPE_ALL_MULTICAST | \
1917517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna	RNDIS_PACKET_TYPE_PROMISCUOUS)
1927517579af8f32ecf9ddff4ead52bc801e4898efeJussi Kivilinna
193039ee17d1baabaa21783a0d5ab3e8c6d8c794bdfJussi Kivilinna/* Flags to require specific physical medium type for generic_rndis_bind() */
194039ee17d1baabaa21783a0d5ab3e8c6d8c794bdfJussi Kivilinna#define FLAG_RNDIS_PHYM_NOT_WIRELESS	0x0001
195039ee17d1baabaa21783a0d5ab3e8c6d8c794bdfJussi Kivilinna#define FLAG_RNDIS_PHYM_WIRELESS	0x0002
196039ee17d1baabaa21783a0d5ab3e8c6d8c794bdfJussi Kivilinna
1974d42d417be75d750b82798922b6e775915e11bceBen Hutchings/* Flags for driver_info::data */
1984d42d417be75d750b82798922b6e775915e11bceBen Hutchings#define RNDIS_DRIVER_DATA_POLL_STATUS	1	/* poll status before control */
1995665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinna
2005665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinnaextern void rndis_status(struct usbnet *dev, struct urb *urb);
201818727badc14ce57dc099a075b05505d50b7956eJussi Kivilinnaextern int
202818727badc14ce57dc099a075b05505d50b7956eJussi Kivilinnarndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen);
203039ee17d1baabaa21783a0d5ab3e8c6d8c794bdfJussi Kivilinnaextern int
204039ee17d1baabaa21783a0d5ab3e8c6d8c794bdfJussi Kivilinnageneric_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags);
2055665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinnaextern void rndis_unbind(struct usbnet *dev, struct usb_interface *intf);
2065665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinnaextern int rndis_rx_fixup(struct usbnet *dev, struct sk_buff *skb);
2075665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinnaextern struct sk_buff *
2085665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinnarndis_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags);
2095665998cd75bbaaa9361471921e3a0d4c665bf00Jussi Kivilinna
210dda43a0e03a33dd716fb34f812b1af614f74daffRobert P. J. Day#endif	/* __LINUX_USB_RNDIS_HOST_H */
211