Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
   1/*
   2 * f_rndis.c -- RNDIS link function driver
   3 *
   4 * Copyright (C) 2003-2005,2008 David Brownell
   5 * Copyright (C) 2003-2004 Robert Schwebel, Benedikt Spranger
   6 * Copyright (C) 2008 Nokia Corporation
   7 * Copyright (C) 2009 Samsung Electronics
   8 *                    Author: Michal Nazarewicz (mina86@mina86.com)
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License as published by
  12 * the Free Software Foundation; either version 2 of the License, or
  13 * (at your option) any later version.
  14 */
  15
  16/* #define VERBOSE_DEBUG */
  17
  18#include <linux/slab.h>
  19#include <linux/kernel.h>
  20#include <linux/module.h>
  21#include <linux/device.h>
  22#include <linux/etherdevice.h>
  23
  24#include <linux/atomic.h>
  25
  26#include "u_ether.h"
  27#include "u_ether_configfs.h"
  28#include "u_rndis.h"
  29#include "rndis.h"
  30
  31/*
  32 * This function is an RNDIS Ethernet port -- a Microsoft protocol that's
  33 * been promoted instead of the standard CDC Ethernet.  The published RNDIS
  34 * spec is ambiguous, incomplete, and needlessly complex.  Variants such as
  35 * ActiveSync have even worse status in terms of specification.
  36 *
  37 * In short:  it's a protocol controlled by (and for) Microsoft, not for an
  38 * Open ecosystem or markets.  Linux supports it *only* because Microsoft
  39 * doesn't support the CDC Ethernet standard.
  40 *
  41 * The RNDIS data transfer model is complex, with multiple Ethernet packets
  42 * per USB message, and out of band data.  The control model is built around
  43 * what's essentially an "RNDIS RPC" protocol.  It's all wrapped in a CDC ACM
  44 * (modem, not Ethernet) veneer, with those ACM descriptors being entirely
  45 * useless (they're ignored).  RNDIS expects to be the only function in its
  46 * configuration, so it's no real help if you need composite devices; and
  47 * it expects to be the first configuration too.
  48 *
  49 * There is a single technical advantage of RNDIS over CDC Ethernet, if you
  50 * discount the fluff that its RPC can be made to deliver: it doesn't need
  51 * a NOP altsetting for the data interface.  That lets it work on some of the
  52 * "so smart it's stupid" hardware which takes over configuration changes
  53 * from the software, and adds restrictions like "no altsettings".
  54 *
  55 * Unfortunately MSFT's RNDIS drivers are buggy.  They hang or oops, and
  56 * have all sorts of contrary-to-specification oddities that can prevent
  57 * them from working sanely.  Since bugfixes (or accurate specs, letting
  58 * Linux work around those bugs) are unlikely to ever come from MSFT, you
  59 * may want to avoid using RNDIS on purely operational grounds.
  60 *
  61 * Omissions from the RNDIS 1.0 specification include:
  62 *
  63 *   - Power management ... references data that's scattered around lots
  64 *     of other documentation, which is incorrect/incomplete there too.
  65 *
  66 *   - There are various undocumented protocol requirements, like the need
  67 *     to send garbage in some control-OUT messages.
  68 *
  69 *   - MS-Windows drivers sometimes emit undocumented requests.
  70 */
  71
  72struct f_rndis {
  73	struct gether			port;
  74	u8				ctrl_id, data_id;
  75	u8				ethaddr[ETH_ALEN];
  76	u32				vendorID;
  77	const char			*manufacturer;
  78	int				config;
  79
  80	struct usb_ep			*notify;
  81	struct usb_request		*notify_req;
  82	atomic_t			notify_count;
  83};
  84
  85static inline struct f_rndis *func_to_rndis(struct usb_function *f)
  86{
  87	return container_of(f, struct f_rndis, port.func);
  88}
  89
  90/* peak (theoretical) bulk transfer rate in bits-per-second */
  91static unsigned int bitrate(struct usb_gadget *g)
  92{
  93	if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
  94		return 13 * 1024 * 8 * 1000 * 8;
  95	else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
  96		return 13 * 512 * 8 * 1000 * 8;
  97	else
  98		return 19 * 64 * 1 * 1000 * 8;
  99}
 100
 101/*-------------------------------------------------------------------------*/
 102
 103/*
 104 */
 105
 106#define RNDIS_STATUS_INTERVAL_MS	32
 107#define STATUS_BYTECOUNT		8	/* 8 bytes data */
 108
 109
 110/* interface descriptor: */
 111
 112static struct usb_interface_descriptor rndis_control_intf = {
 113	.bLength =		sizeof rndis_control_intf,
 114	.bDescriptorType =	USB_DT_INTERFACE,
 115
 116	/* .bInterfaceNumber = DYNAMIC */
 117	/* status endpoint is optional; this could be patched later */
 118	.bNumEndpoints =	1,
 119	.bInterfaceClass =	USB_CLASS_COMM,
 120	.bInterfaceSubClass =   USB_CDC_SUBCLASS_ACM,
 121	.bInterfaceProtocol =   USB_CDC_ACM_PROTO_VENDOR,
 122	/* .iInterface = DYNAMIC */
 123};
 124
 125static struct usb_cdc_header_desc header_desc = {
 126	.bLength =		sizeof header_desc,
 127	.bDescriptorType =	USB_DT_CS_INTERFACE,
 128	.bDescriptorSubType =	USB_CDC_HEADER_TYPE,
 129
 130	.bcdCDC =		cpu_to_le16(0x0110),
 131};
 132
 133static struct usb_cdc_call_mgmt_descriptor call_mgmt_descriptor = {
 134	.bLength =		sizeof call_mgmt_descriptor,
 135	.bDescriptorType =	USB_DT_CS_INTERFACE,
 136	.bDescriptorSubType =	USB_CDC_CALL_MANAGEMENT_TYPE,
 137
 138	.bmCapabilities =	0x00,
 139	.bDataInterface =	0x01,
 140};
 141
 142static struct usb_cdc_acm_descriptor rndis_acm_descriptor = {
 143	.bLength =		sizeof rndis_acm_descriptor,
 144	.bDescriptorType =	USB_DT_CS_INTERFACE,
 145	.bDescriptorSubType =	USB_CDC_ACM_TYPE,
 146
 147	.bmCapabilities =	0x00,
 148};
 149
 150static struct usb_cdc_union_desc rndis_union_desc = {
 151	.bLength =		sizeof(rndis_union_desc),
 152	.bDescriptorType =	USB_DT_CS_INTERFACE,
 153	.bDescriptorSubType =	USB_CDC_UNION_TYPE,
 154	/* .bMasterInterface0 =	DYNAMIC */
 155	/* .bSlaveInterface0 =	DYNAMIC */
 156};
 157
 158/* the data interface has two bulk endpoints */
 159
 160static struct usb_interface_descriptor rndis_data_intf = {
 161	.bLength =		sizeof rndis_data_intf,
 162	.bDescriptorType =	USB_DT_INTERFACE,
 163
 164	/* .bInterfaceNumber = DYNAMIC */
 165	.bNumEndpoints =	2,
 166	.bInterfaceClass =	USB_CLASS_CDC_DATA,
 167	.bInterfaceSubClass =	0,
 168	.bInterfaceProtocol =	0,
 169	/* .iInterface = DYNAMIC */
 170};
 171
 172
 173static struct usb_interface_assoc_descriptor
 174rndis_iad_descriptor = {
 175	.bLength =		sizeof rndis_iad_descriptor,
 176	.bDescriptorType =	USB_DT_INTERFACE_ASSOCIATION,
 177
 178	.bFirstInterface =	0, /* XXX, hardcoded */
 179	.bInterfaceCount = 	2,	// control + data
 180	.bFunctionClass =	USB_CLASS_COMM,
 181	.bFunctionSubClass =	USB_CDC_SUBCLASS_ETHERNET,
 182	.bFunctionProtocol =	USB_CDC_PROTO_NONE,
 183	/* .iFunction = DYNAMIC */
 184};
 185
 186/* full speed support: */
 187
 188static struct usb_endpoint_descriptor fs_notify_desc = {
 189	.bLength =		USB_DT_ENDPOINT_SIZE,
 190	.bDescriptorType =	USB_DT_ENDPOINT,
 191
 192	.bEndpointAddress =	USB_DIR_IN,
 193	.bmAttributes =		USB_ENDPOINT_XFER_INT,
 194	.wMaxPacketSize =	cpu_to_le16(STATUS_BYTECOUNT),
 195	.bInterval =		RNDIS_STATUS_INTERVAL_MS,
 196};
 197
 198static struct usb_endpoint_descriptor fs_in_desc = {
 199	.bLength =		USB_DT_ENDPOINT_SIZE,
 200	.bDescriptorType =	USB_DT_ENDPOINT,
 201
 202	.bEndpointAddress =	USB_DIR_IN,
 203	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
 204};
 205
 206static struct usb_endpoint_descriptor fs_out_desc = {
 207	.bLength =		USB_DT_ENDPOINT_SIZE,
 208	.bDescriptorType =	USB_DT_ENDPOINT,
 209
 210	.bEndpointAddress =	USB_DIR_OUT,
 211	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
 212};
 213
 214static struct usb_descriptor_header *eth_fs_function[] = {
 215	(struct usb_descriptor_header *) &rndis_iad_descriptor,
 216
 217	/* control interface matches ACM, not Ethernet */
 218	(struct usb_descriptor_header *) &rndis_control_intf,
 219	(struct usb_descriptor_header *) &header_desc,
 220	(struct usb_descriptor_header *) &call_mgmt_descriptor,
 221	(struct usb_descriptor_header *) &rndis_acm_descriptor,
 222	(struct usb_descriptor_header *) &rndis_union_desc,
 223	(struct usb_descriptor_header *) &fs_notify_desc,
 224
 225	/* data interface has no altsetting */
 226	(struct usb_descriptor_header *) &rndis_data_intf,
 227	(struct usb_descriptor_header *) &fs_in_desc,
 228	(struct usb_descriptor_header *) &fs_out_desc,
 229	NULL,
 230};
 231
 232/* high speed support: */
 233
 234static struct usb_endpoint_descriptor hs_notify_desc = {
 235	.bLength =		USB_DT_ENDPOINT_SIZE,
 236	.bDescriptorType =	USB_DT_ENDPOINT,
 237
 238	.bEndpointAddress =	USB_DIR_IN,
 239	.bmAttributes =		USB_ENDPOINT_XFER_INT,
 240	.wMaxPacketSize =	cpu_to_le16(STATUS_BYTECOUNT),
 241	.bInterval =		USB_MS_TO_HS_INTERVAL(RNDIS_STATUS_INTERVAL_MS)
 242};
 243
 244static struct usb_endpoint_descriptor hs_in_desc = {
 245	.bLength =		USB_DT_ENDPOINT_SIZE,
 246	.bDescriptorType =	USB_DT_ENDPOINT,
 247
 248	.bEndpointAddress =	USB_DIR_IN,
 249	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
 250	.wMaxPacketSize =	cpu_to_le16(512),
 251};
 252
 253static struct usb_endpoint_descriptor hs_out_desc = {
 254	.bLength =		USB_DT_ENDPOINT_SIZE,
 255	.bDescriptorType =	USB_DT_ENDPOINT,
 256
 257	.bEndpointAddress =	USB_DIR_OUT,
 258	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
 259	.wMaxPacketSize =	cpu_to_le16(512),
 260};
 261
 262static struct usb_descriptor_header *eth_hs_function[] = {
 263	(struct usb_descriptor_header *) &rndis_iad_descriptor,
 264
 265	/* control interface matches ACM, not Ethernet */
 266	(struct usb_descriptor_header *) &rndis_control_intf,
 267	(struct usb_descriptor_header *) &header_desc,
 268	(struct usb_descriptor_header *) &call_mgmt_descriptor,
 269	(struct usb_descriptor_header *) &rndis_acm_descriptor,
 270	(struct usb_descriptor_header *) &rndis_union_desc,
 271	(struct usb_descriptor_header *) &hs_notify_desc,
 272
 273	/* data interface has no altsetting */
 274	(struct usb_descriptor_header *) &rndis_data_intf,
 275	(struct usb_descriptor_header *) &hs_in_desc,
 276	(struct usb_descriptor_header *) &hs_out_desc,
 277	NULL,
 278};
 279
 280/* super speed support: */
 281
 282static struct usb_endpoint_descriptor ss_notify_desc = {
 283	.bLength =		USB_DT_ENDPOINT_SIZE,
 284	.bDescriptorType =	USB_DT_ENDPOINT,
 285
 286	.bEndpointAddress =	USB_DIR_IN,
 287	.bmAttributes =		USB_ENDPOINT_XFER_INT,
 288	.wMaxPacketSize =	cpu_to_le16(STATUS_BYTECOUNT),
 289	.bInterval =		USB_MS_TO_HS_INTERVAL(RNDIS_STATUS_INTERVAL_MS)
 290};
 291
 292static struct usb_ss_ep_comp_descriptor ss_intr_comp_desc = {
 293	.bLength =		sizeof ss_intr_comp_desc,
 294	.bDescriptorType =	USB_DT_SS_ENDPOINT_COMP,
 295
 296	/* the following 3 values can be tweaked if necessary */
 297	/* .bMaxBurst =		0, */
 298	/* .bmAttributes =	0, */
 299	.wBytesPerInterval =	cpu_to_le16(STATUS_BYTECOUNT),
 300};
 301
 302static struct usb_endpoint_descriptor ss_in_desc = {
 303	.bLength =		USB_DT_ENDPOINT_SIZE,
 304	.bDescriptorType =	USB_DT_ENDPOINT,
 305
 306	.bEndpointAddress =	USB_DIR_IN,
 307	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
 308	.wMaxPacketSize =	cpu_to_le16(1024),
 309};
 310
 311static struct usb_endpoint_descriptor ss_out_desc = {
 312	.bLength =		USB_DT_ENDPOINT_SIZE,
 313	.bDescriptorType =	USB_DT_ENDPOINT,
 314
 315	.bEndpointAddress =	USB_DIR_OUT,
 316	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
 317	.wMaxPacketSize =	cpu_to_le16(1024),
 318};
 319
 320static struct usb_ss_ep_comp_descriptor ss_bulk_comp_desc = {
 321	.bLength =		sizeof ss_bulk_comp_desc,
 322	.bDescriptorType =	USB_DT_SS_ENDPOINT_COMP,
 323
 324	/* the following 2 values can be tweaked if necessary */
 325	/* .bMaxBurst =		0, */
 326	/* .bmAttributes =	0, */
 327};
 328
 329static struct usb_descriptor_header *eth_ss_function[] = {
 330	(struct usb_descriptor_header *) &rndis_iad_descriptor,
 331
 332	/* control interface matches ACM, not Ethernet */
 333	(struct usb_descriptor_header *) &rndis_control_intf,
 334	(struct usb_descriptor_header *) &header_desc,
 335	(struct usb_descriptor_header *) &call_mgmt_descriptor,
 336	(struct usb_descriptor_header *) &rndis_acm_descriptor,
 337	(struct usb_descriptor_header *) &rndis_union_desc,
 338	(struct usb_descriptor_header *) &ss_notify_desc,
 339	(struct usb_descriptor_header *) &ss_intr_comp_desc,
 340
 341	/* data interface has no altsetting */
 342	(struct usb_descriptor_header *) &rndis_data_intf,
 343	(struct usb_descriptor_header *) &ss_in_desc,
 344	(struct usb_descriptor_header *) &ss_bulk_comp_desc,
 345	(struct usb_descriptor_header *) &ss_out_desc,
 346	(struct usb_descriptor_header *) &ss_bulk_comp_desc,
 347	NULL,
 348};
 349
 350/* string descriptors: */
 351
 352static struct usb_string rndis_string_defs[] = {
 353	[0].s = "RNDIS Communications Control",
 354	[1].s = "RNDIS Ethernet Data",
 355	[2].s = "RNDIS",
 356	{  } /* end of list */
 357};
 358
 359static struct usb_gadget_strings rndis_string_table = {
 360	.language =		0x0409,	/* en-us */
 361	.strings =		rndis_string_defs,
 362};
 363
 364static struct usb_gadget_strings *rndis_strings[] = {
 365	&rndis_string_table,
 366	NULL,
 367};
 368
 369/*-------------------------------------------------------------------------*/
 370
 371static struct sk_buff *rndis_add_header(struct gether *port,
 372					struct sk_buff *skb)
 373{
 374	struct sk_buff *skb2;
 375
 376	skb2 = skb_realloc_headroom(skb, sizeof(struct rndis_packet_msg_type));
 377	if (skb2)
 378		rndis_add_hdr(skb2);
 379
 380	dev_kfree_skb(skb);
 381	return skb2;
 382}
 383
 384static void rndis_response_available(void *_rndis)
 385{
 386	struct f_rndis			*rndis = _rndis;
 387	struct usb_request		*req = rndis->notify_req;
 388	struct usb_composite_dev	*cdev = rndis->port.func.config->cdev;
 389	__le32				*data = req->buf;
 390	int				status;
 391
 392	if (atomic_inc_return(&rndis->notify_count) != 1)
 393		return;
 394
 395	/* Send RNDIS RESPONSE_AVAILABLE notification; a
 396	 * USB_CDC_NOTIFY_RESPONSE_AVAILABLE "should" work too
 397	 *
 398	 * This is the only notification defined by RNDIS.
 399	 */
 400	data[0] = cpu_to_le32(1);
 401	data[1] = cpu_to_le32(0);
 402
 403	status = usb_ep_queue(rndis->notify, req, GFP_ATOMIC);
 404	if (status) {
 405		atomic_dec(&rndis->notify_count);
 406		DBG(cdev, "notify/0 --> %d\n", status);
 407	}
 408}
 409
 410static void rndis_response_complete(struct usb_ep *ep, struct usb_request *req)
 411{
 412	struct f_rndis			*rndis = req->context;
 413	struct usb_composite_dev	*cdev = rndis->port.func.config->cdev;
 414	int				status = req->status;
 415
 416	/* after TX:
 417	 *  - USB_CDC_GET_ENCAPSULATED_RESPONSE (ep0/control)
 418	 *  - RNDIS_RESPONSE_AVAILABLE (status/irq)
 419	 */
 420	switch (status) {
 421	case -ECONNRESET:
 422	case -ESHUTDOWN:
 423		/* connection gone */
 424		atomic_set(&rndis->notify_count, 0);
 425		break;
 426	default:
 427		DBG(cdev, "RNDIS %s response error %d, %d/%d\n",
 428			ep->name, status,
 429			req->actual, req->length);
 430		/* FALLTHROUGH */
 431	case 0:
 432		if (ep != rndis->notify)
 433			break;
 434
 435		/* handle multiple pending RNDIS_RESPONSE_AVAILABLE
 436		 * notifications by resending until we're done
 437		 */
 438		if (atomic_dec_and_test(&rndis->notify_count))
 439			break;
 440		status = usb_ep_queue(rndis->notify, req, GFP_ATOMIC);
 441		if (status) {
 442			atomic_dec(&rndis->notify_count);
 443			DBG(cdev, "notify/1 --> %d\n", status);
 444		}
 445		break;
 446	}
 447}
 448
 449static void rndis_command_complete(struct usb_ep *ep, struct usb_request *req)
 450{
 451	struct f_rndis			*rndis = req->context;
 452	int				status;
 453
 454	/* received RNDIS command from USB_CDC_SEND_ENCAPSULATED_COMMAND */
 455//	spin_lock(&dev->lock);
 456	status = rndis_msg_parser(rndis->config, (u8 *) req->buf);
 457	if (status < 0)
 458		pr_err("RNDIS command error %d, %d/%d\n",
 459			status, req->actual, req->length);
 460//	spin_unlock(&dev->lock);
 461}
 462
 463static int
 464rndis_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
 465{
 466	struct f_rndis		*rndis = func_to_rndis(f);
 467	struct usb_composite_dev *cdev = f->config->cdev;
 468	struct usb_request	*req = cdev->req;
 469	int			value = -EOPNOTSUPP;
 470	u16			w_index = le16_to_cpu(ctrl->wIndex);
 471	u16			w_value = le16_to_cpu(ctrl->wValue);
 472	u16			w_length = le16_to_cpu(ctrl->wLength);
 473
 474	/* composite driver infrastructure handles everything except
 475	 * CDC class messages; interface activation uses set_alt().
 476	 */
 477	switch ((ctrl->bRequestType << 8) | ctrl->bRequest) {
 478
 479	/* RNDIS uses the CDC command encapsulation mechanism to implement
 480	 * an RPC scheme, with much getting/setting of attributes by OID.
 481	 */
 482	case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8)
 483			| USB_CDC_SEND_ENCAPSULATED_COMMAND:
 484		if (w_value || w_index != rndis->ctrl_id)
 485			goto invalid;
 486		/* read the request; process it later */
 487		value = w_length;
 488		req->complete = rndis_command_complete;
 489		req->context = rndis;
 490		/* later, rndis_response_available() sends a notification */
 491		break;
 492
 493	case ((USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8)
 494			| USB_CDC_GET_ENCAPSULATED_RESPONSE:
 495		if (w_value || w_index != rndis->ctrl_id)
 496			goto invalid;
 497		else {
 498			u8 *buf;
 499			u32 n;
 500
 501			/* return the result */
 502			buf = rndis_get_next_response(rndis->config, &n);
 503			if (buf) {
 504				memcpy(req->buf, buf, n);
 505				req->complete = rndis_response_complete;
 506				req->context = rndis;
 507				rndis_free_response(rndis->config, buf);
 508				value = n;
 509			}
 510			/* else stalls ... spec says to avoid that */
 511		}
 512		break;
 513
 514	default:
 515invalid:
 516		VDBG(cdev, "invalid control req%02x.%02x v%04x i%04x l%d\n",
 517			ctrl->bRequestType, ctrl->bRequest,
 518			w_value, w_index, w_length);
 519	}
 520
 521	/* respond with data transfer or status phase? */
 522	if (value >= 0) {
 523		DBG(cdev, "rndis req%02x.%02x v%04x i%04x l%d\n",
 524			ctrl->bRequestType, ctrl->bRequest,
 525			w_value, w_index, w_length);
 526		req->zero = (value < w_length);
 527		req->length = value;
 528		value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
 529		if (value < 0)
 530			ERROR(cdev, "rndis response on err %d\n", value);
 531	}
 532
 533	/* device either stalls (value < 0) or reports success */
 534	return value;
 535}
 536
 537
 538static int rndis_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 539{
 540	struct f_rndis		*rndis = func_to_rndis(f);
 541	struct usb_composite_dev *cdev = f->config->cdev;
 542
 543	/* we know alt == 0 */
 544
 545	if (intf == rndis->ctrl_id) {
 546		if (rndis->notify->driver_data) {
 547			VDBG(cdev, "reset rndis control %d\n", intf);
 548			usb_ep_disable(rndis->notify);
 549		}
 550		if (!rndis->notify->desc) {
 551			VDBG(cdev, "init rndis ctrl %d\n", intf);
 552			if (config_ep_by_speed(cdev->gadget, f, rndis->notify))
 553				goto fail;
 554		}
 555		usb_ep_enable(rndis->notify);
 556		rndis->notify->driver_data = rndis;
 557
 558	} else if (intf == rndis->data_id) {
 559		struct net_device	*net;
 560
 561		if (rndis->port.in_ep->driver_data) {
 562			DBG(cdev, "reset rndis\n");
 563			gether_disconnect(&rndis->port);
 564		}
 565
 566		if (!rndis->port.in_ep->desc || !rndis->port.out_ep->desc) {
 567			DBG(cdev, "init rndis\n");
 568			if (config_ep_by_speed(cdev->gadget, f,
 569					       rndis->port.in_ep) ||
 570			    config_ep_by_speed(cdev->gadget, f,
 571					       rndis->port.out_ep)) {
 572				rndis->port.in_ep->desc = NULL;
 573				rndis->port.out_ep->desc = NULL;
 574				goto fail;
 575			}
 576		}
 577
 578		/* Avoid ZLPs; they can be troublesome. */
 579		rndis->port.is_zlp_ok = false;
 580
 581		/* RNDIS should be in the "RNDIS uninitialized" state,
 582		 * either never activated or after rndis_uninit().
 583		 *
 584		 * We don't want data to flow here until a nonzero packet
 585		 * filter is set, at which point it enters "RNDIS data
 586		 * initialized" state ... but we do want the endpoints
 587		 * to be activated.  It's a strange little state.
 588		 *
 589		 * REVISIT the RNDIS gadget code has done this wrong for a
 590		 * very long time.  We need another call to the link layer
 591		 * code -- gether_updown(...bool) maybe -- to do it right.
 592		 */
 593		rndis->port.cdc_filter = 0;
 594
 595		DBG(cdev, "RNDIS RX/TX early activation ... \n");
 596		net = gether_connect(&rndis->port);
 597		if (IS_ERR(net))
 598			return PTR_ERR(net);
 599
 600		rndis_set_param_dev(rndis->config, net,
 601				&rndis->port.cdc_filter);
 602	} else
 603		goto fail;
 604
 605	return 0;
 606fail:
 607	return -EINVAL;
 608}
 609
 610static void rndis_disable(struct usb_function *f)
 611{
 612	struct f_rndis		*rndis = func_to_rndis(f);
 613	struct usb_composite_dev *cdev = f->config->cdev;
 614
 615	if (!rndis->notify->driver_data)
 616		return;
 617
 618	DBG(cdev, "rndis deactivated\n");
 619
 620	rndis_uninit(rndis->config);
 621	gether_disconnect(&rndis->port);
 622
 623	usb_ep_disable(rndis->notify);
 624	rndis->notify->driver_data = NULL;
 625}
 626
 627/*-------------------------------------------------------------------------*/
 628
 629/*
 630 * This isn't quite the same mechanism as CDC Ethernet, since the
 631 * notification scheme passes less data, but the same set of link
 632 * states must be tested.  A key difference is that altsettings are
 633 * not used to tell whether the link should send packets or not.
 634 */
 635
 636static void rndis_open(struct gether *geth)
 637{
 638	struct f_rndis		*rndis = func_to_rndis(&geth->func);
 639	struct usb_composite_dev *cdev = geth->func.config->cdev;
 640
 641	DBG(cdev, "%s\n", __func__);
 642
 643	rndis_set_param_medium(rndis->config, RNDIS_MEDIUM_802_3,
 644				bitrate(cdev->gadget) / 100);
 645	rndis_signal_connect(rndis->config);
 646}
 647
 648static void rndis_close(struct gether *geth)
 649{
 650	struct f_rndis		*rndis = func_to_rndis(&geth->func);
 651
 652	DBG(geth->func.config->cdev, "%s\n", __func__);
 653
 654	rndis_set_param_medium(rndis->config, RNDIS_MEDIUM_802_3, 0);
 655	rndis_signal_disconnect(rndis->config);
 656}
 657
 658/*-------------------------------------------------------------------------*/
 659
 660/* Some controllers can't support RNDIS ... */
 661static inline bool can_support_rndis(struct usb_configuration *c)
 662{
 663	/* everything else is *presumably* fine */
 664	return true;
 665}
 666
 667/* ethernet function driver setup/binding */
 668
 669static int
 670rndis_bind(struct usb_configuration *c, struct usb_function *f)
 671{
 672	struct usb_composite_dev *cdev = c->cdev;
 673	struct f_rndis		*rndis = func_to_rndis(f);
 674	struct usb_string	*us;
 675	int			status;
 676	struct usb_ep		*ep;
 677
 678	struct f_rndis_opts *rndis_opts;
 679
 680	if (!can_support_rndis(c))
 681		return -EINVAL;
 682
 683	rndis_opts = container_of(f->fi, struct f_rndis_opts, func_inst);
 684
 685	/*
 686	 * in drivers/usb/gadget/configfs.c:configfs_composite_bind()
 687	 * configurations are bound in sequence with list_for_each_entry,
 688	 * in each configuration its functions are bound in sequence
 689	 * with list_for_each_entry, so we assume no race condition
 690	 * with regard to rndis_opts->bound access
 691	 */
 692	if (!rndis_opts->bound) {
 693		gether_set_gadget(rndis_opts->net, cdev->gadget);
 694		status = gether_register_netdev(rndis_opts->net);
 695		if (status)
 696			return status;
 697		rndis_opts->bound = true;
 698	}
 699
 700	us = usb_gstrings_attach(cdev, rndis_strings,
 701				 ARRAY_SIZE(rndis_string_defs));
 702	if (IS_ERR(us))
 703		return PTR_ERR(us);
 704	rndis_control_intf.iInterface = us[0].id;
 705	rndis_data_intf.iInterface = us[1].id;
 706	rndis_iad_descriptor.iFunction = us[2].id;
 707
 708	/* allocate instance-specific interface IDs */
 709	status = usb_interface_id(c, f);
 710	if (status < 0)
 711		goto fail;
 712	rndis->ctrl_id = status;
 713	rndis_iad_descriptor.bFirstInterface = status;
 714
 715	rndis_control_intf.bInterfaceNumber = status;
 716	rndis_union_desc.bMasterInterface0 = status;
 717
 718	status = usb_interface_id(c, f);
 719	if (status < 0)
 720		goto fail;
 721	rndis->data_id = status;
 722
 723	rndis_data_intf.bInterfaceNumber = status;
 724	rndis_union_desc.bSlaveInterface0 = status;
 725
 726	status = -ENODEV;
 727
 728	/* allocate instance-specific endpoints */
 729	ep = usb_ep_autoconfig(cdev->gadget, &fs_in_desc);
 730	if (!ep)
 731		goto fail;
 732	rndis->port.in_ep = ep;
 733	ep->driver_data = cdev;	/* claim */
 734
 735	ep = usb_ep_autoconfig(cdev->gadget, &fs_out_desc);
 736	if (!ep)
 737		goto fail;
 738	rndis->port.out_ep = ep;
 739	ep->driver_data = cdev;	/* claim */
 740
 741	/* NOTE:  a status/notification endpoint is, strictly speaking,
 742	 * optional.  We don't treat it that way though!  It's simpler,
 743	 * and some newer profiles don't treat it as optional.
 744	 */
 745	ep = usb_ep_autoconfig(cdev->gadget, &fs_notify_desc);
 746	if (!ep)
 747		goto fail;
 748	rndis->notify = ep;
 749	ep->driver_data = cdev;	/* claim */
 750
 751	status = -ENOMEM;
 752
 753	/* allocate notification request and buffer */
 754	rndis->notify_req = usb_ep_alloc_request(ep, GFP_KERNEL);
 755	if (!rndis->notify_req)
 756		goto fail;
 757	rndis->notify_req->buf = kmalloc(STATUS_BYTECOUNT, GFP_KERNEL);
 758	if (!rndis->notify_req->buf)
 759		goto fail;
 760	rndis->notify_req->length = STATUS_BYTECOUNT;
 761	rndis->notify_req->context = rndis;
 762	rndis->notify_req->complete = rndis_response_complete;
 763
 764	/* support all relevant hardware speeds... we expect that when
 765	 * hardware is dual speed, all bulk-capable endpoints work at
 766	 * both speeds
 767	 */
 768	hs_in_desc.bEndpointAddress = fs_in_desc.bEndpointAddress;
 769	hs_out_desc.bEndpointAddress = fs_out_desc.bEndpointAddress;
 770	hs_notify_desc.bEndpointAddress = fs_notify_desc.bEndpointAddress;
 771
 772	ss_in_desc.bEndpointAddress = fs_in_desc.bEndpointAddress;
 773	ss_out_desc.bEndpointAddress = fs_out_desc.bEndpointAddress;
 774	ss_notify_desc.bEndpointAddress = fs_notify_desc.bEndpointAddress;
 775
 776	status = usb_assign_descriptors(f, eth_fs_function, eth_hs_function,
 777			eth_ss_function);
 778	if (status)
 779		goto fail;
 780
 781	rndis->port.open = rndis_open;
 782	rndis->port.close = rndis_close;
 783
 784	rndis_set_param_medium(rndis->config, RNDIS_MEDIUM_802_3, 0);
 785	rndis_set_host_mac(rndis->config, rndis->ethaddr);
 786
 787	if (rndis->manufacturer && rndis->vendorID &&
 788			rndis_set_param_vendor(rndis->config, rndis->vendorID,
 789					       rndis->manufacturer))
 790		goto fail;
 791
 792	/* NOTE:  all that is done without knowing or caring about
 793	 * the network link ... which is unavailable to this code
 794	 * until we're activated via set_alt().
 795	 */
 796
 797	DBG(cdev, "RNDIS: %s speed IN/%s OUT/%s NOTIFY/%s\n",
 798			gadget_is_superspeed(c->cdev->gadget) ? "super" :
 799			gadget_is_dualspeed(c->cdev->gadget) ? "dual" : "full",
 800			rndis->port.in_ep->name, rndis->port.out_ep->name,
 801			rndis->notify->name);
 802	return 0;
 803
 804fail:
 805	usb_free_all_descriptors(f);
 806
 807	if (rndis->notify_req) {
 808		kfree(rndis->notify_req->buf);
 809		usb_ep_free_request(rndis->notify, rndis->notify_req);
 810	}
 811
 812	/* we might as well release our claims on endpoints */
 813	if (rndis->notify)
 814		rndis->notify->driver_data = NULL;
 815	if (rndis->port.out_ep)
 816		rndis->port.out_ep->driver_data = NULL;
 817	if (rndis->port.in_ep)
 818		rndis->port.in_ep->driver_data = NULL;
 819
 820	ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
 821
 822	return status;
 823}
 824
 825void rndis_borrow_net(struct usb_function_instance *f, struct net_device *net)
 826{
 827	struct f_rndis_opts *opts;
 828
 829	opts = container_of(f, struct f_rndis_opts, func_inst);
 830	if (opts->bound)
 831		gether_cleanup(netdev_priv(opts->net));
 832	else
 833		free_netdev(opts->net);
 834	opts->borrowed_net = opts->bound = true;
 835	opts->net = net;
 836}
 837EXPORT_SYMBOL(rndis_borrow_net);
 838
 839static inline struct f_rndis_opts *to_f_rndis_opts(struct config_item *item)
 840{
 841	return container_of(to_config_group(item), struct f_rndis_opts,
 842			    func_inst.group);
 843}
 844
 845/* f_rndis_item_ops */
 846USB_ETHERNET_CONFIGFS_ITEM(rndis);
 847
 848/* f_rndis_opts_dev_addr */
 849USB_ETHERNET_CONFIGFS_ITEM_ATTR_DEV_ADDR(rndis);
 850
 851/* f_rndis_opts_host_addr */
 852USB_ETHERNET_CONFIGFS_ITEM_ATTR_HOST_ADDR(rndis);
 853
 854/* f_rndis_opts_qmult */
 855USB_ETHERNET_CONFIGFS_ITEM_ATTR_QMULT(rndis);
 856
 857/* f_rndis_opts_ifname */
 858USB_ETHERNET_CONFIGFS_ITEM_ATTR_IFNAME(rndis);
 859
 860static struct configfs_attribute *rndis_attrs[] = {
 861	&f_rndis_opts_dev_addr.attr,
 862	&f_rndis_opts_host_addr.attr,
 863	&f_rndis_opts_qmult.attr,
 864	&f_rndis_opts_ifname.attr,
 865	NULL,
 866};
 867
 868static struct config_item_type rndis_func_type = {
 869	.ct_item_ops	= &rndis_item_ops,
 870	.ct_attrs	= rndis_attrs,
 871	.ct_owner	= THIS_MODULE,
 872};
 873
 874static void rndis_free_inst(struct usb_function_instance *f)
 875{
 876	struct f_rndis_opts *opts;
 877
 878	opts = container_of(f, struct f_rndis_opts, func_inst);
 879	if (!opts->borrowed_net) {
 880		if (opts->bound)
 881			gether_cleanup(netdev_priv(opts->net));
 882		else
 883			free_netdev(opts->net);
 884	}
 885	kfree(opts);
 886}
 887
 888static struct usb_function_instance *rndis_alloc_inst(void)
 889{
 890	struct f_rndis_opts *opts;
 891
 892	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
 893	if (!opts)
 894		return ERR_PTR(-ENOMEM);
 895	mutex_init(&opts->lock);
 896	opts->func_inst.free_func_inst = rndis_free_inst;
 897	opts->net = gether_setup_default();
 898	if (IS_ERR(opts->net)) {
 899		struct net_device *net = opts->net;
 900		kfree(opts);
 901		return ERR_CAST(net);
 902	}
 903
 904	config_group_init_type_name(&opts->func_inst.group, "",
 905				    &rndis_func_type);
 906
 907	return &opts->func_inst;
 908}
 909
 910static void rndis_free(struct usb_function *f)
 911{
 912	struct f_rndis *rndis;
 913	struct f_rndis_opts *opts;
 914
 915	rndis = func_to_rndis(f);
 916	rndis_deregister(rndis->config);
 917	opts = container_of(f->fi, struct f_rndis_opts, func_inst);
 918	kfree(rndis);
 919	mutex_lock(&opts->lock);
 920	opts->refcnt--;
 921	mutex_unlock(&opts->lock);
 922}
 923
 924static void rndis_unbind(struct usb_configuration *c, struct usb_function *f)
 925{
 926	struct f_rndis		*rndis = func_to_rndis(f);
 927
 928	usb_free_all_descriptors(f);
 929
 930	kfree(rndis->notify_req->buf);
 931	usb_ep_free_request(rndis->notify, rndis->notify_req);
 932}
 933
 934static struct usb_function *rndis_alloc(struct usb_function_instance *fi)
 935{
 936	struct f_rndis	*rndis;
 937	struct f_rndis_opts *opts;
 938	int status;
 939
 940	/* allocate and initialize one new instance */
 941	rndis = kzalloc(sizeof(*rndis), GFP_KERNEL);
 942	if (!rndis)
 943		return ERR_PTR(-ENOMEM);
 944
 945	opts = container_of(fi, struct f_rndis_opts, func_inst);
 946	mutex_lock(&opts->lock);
 947	opts->refcnt++;
 948
 949	gether_get_host_addr_u8(opts->net, rndis->ethaddr);
 950	rndis->vendorID = opts->vendor_id;
 951	rndis->manufacturer = opts->manufacturer;
 952
 953	rndis->port.ioport = netdev_priv(opts->net);
 954	mutex_unlock(&opts->lock);
 955	/* RNDIS activates when the host changes this filter */
 956	rndis->port.cdc_filter = 0;
 957
 958	/* RNDIS has special (and complex) framing */
 959	rndis->port.header_len = sizeof(struct rndis_packet_msg_type);
 960	rndis->port.wrap = rndis_add_header;
 961	rndis->port.unwrap = rndis_rm_hdr;
 962
 963	rndis->port.func.name = "rndis";
 964	/* descriptors are per-instance copies */
 965	rndis->port.func.bind = rndis_bind;
 966	rndis->port.func.unbind = rndis_unbind;
 967	rndis->port.func.set_alt = rndis_set_alt;
 968	rndis->port.func.setup = rndis_setup;
 969	rndis->port.func.disable = rndis_disable;
 970	rndis->port.func.free_func = rndis_free;
 971
 972	status = rndis_register(rndis_response_available, rndis);
 973	if (status < 0) {
 974		kfree(rndis);
 975		return ERR_PTR(status);
 976	}
 977	rndis->config = status;
 978
 979	return &rndis->port.func;
 980}
 981
 982DECLARE_USB_FUNCTION(rndis, rndis_alloc_inst, rndis_alloc);
 983
 984static int __init rndis_mod_init(void)
 985{
 986	int ret;
 987
 988	ret = rndis_init();
 989	if (ret)
 990		return ret;
 991
 992	return usb_function_register(&rndisusb_func);
 993}
 994module_init(rndis_mod_init);
 995
 996static void __exit rndis_mod_exit(void)
 997{
 998	usb_function_unregister(&rndisusb_func);
 999	rndis_exit();
1000}
1001module_exit(rndis_mod_exit);
1002
1003MODULE_LICENSE("GPL");
1004MODULE_AUTHOR("David Brownell");