Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Mar 24-27, 2025, special US time zones
Register
Loading...
Note: File does not exist in v3.5.6.
   1/*
   2 * Copyright (C) 2017 - Cambridge Greys Limited
   3 * Copyright (C) 2011 - 2014 Cisco Systems Inc
   4 * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
   5 * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and
   6 * James Leu (jleu@mindspring.net).
   7 * Copyright (C) 2001 by various other people who didn't put their name here.
   8 * Licensed under the GPL.
   9 */
  10
  11#include <linux/version.h>
  12#include <linux/bootmem.h>
  13#include <linux/etherdevice.h>
  14#include <linux/ethtool.h>
  15#include <linux/inetdevice.h>
  16#include <linux/init.h>
  17#include <linux/list.h>
  18#include <linux/netdevice.h>
  19#include <linux/platform_device.h>
  20#include <linux/rtnetlink.h>
  21#include <linux/skbuff.h>
  22#include <linux/slab.h>
  23#include <linux/interrupt.h>
  24#include <init.h>
  25#include <irq_kern.h>
  26#include <irq_user.h>
  27#include <net_kern.h>
  28#include <os.h>
  29#include "mconsole_kern.h"
  30#include "vector_user.h"
  31#include "vector_kern.h"
  32
  33/*
  34 * Adapted from network devices with the following major changes:
  35 * All transports are static - simplifies the code significantly
  36 * Multiple FDs/IRQs per device
  37 * Vector IO optionally used for read/write, falling back to legacy
  38 * based on configuration and/or availability
  39 * Configuration is no longer positional - L2TPv3 and GRE require up to
  40 * 10 parameters, passing this as positional is not fit for purpose.
  41 * Only socket transports are supported
  42 */
  43
  44
  45#define DRIVER_NAME "uml-vector"
  46#define DRIVER_VERSION "01"
  47struct vector_cmd_line_arg {
  48	struct list_head list;
  49	int unit;
  50	char *arguments;
  51};
  52
  53struct vector_device {
  54	struct list_head list;
  55	struct net_device *dev;
  56	struct platform_device pdev;
  57	int unit;
  58	int opened;
  59};
  60
  61static LIST_HEAD(vec_cmd_line);
  62
  63static DEFINE_SPINLOCK(vector_devices_lock);
  64static LIST_HEAD(vector_devices);
  65
  66static int driver_registered;
  67
  68static void vector_eth_configure(int n, struct arglist *def);
  69
  70/* Argument accessors to set variables (and/or set default values)
  71 * mtu, buffer sizing, default headroom, etc
  72 */
  73
  74#define DEFAULT_HEADROOM 2
  75#define SAFETY_MARGIN 32
  76#define DEFAULT_VECTOR_SIZE 64
  77#define TX_SMALL_PACKET 128
  78#define MAX_IOV_SIZE (MAX_SKB_FRAGS + 1)
  79
  80static const struct {
  81	const char string[ETH_GSTRING_LEN];
  82} ethtool_stats_keys[] = {
  83	{ "rx_queue_max" },
  84	{ "rx_queue_running_average" },
  85	{ "tx_queue_max" },
  86	{ "tx_queue_running_average" },
  87	{ "rx_encaps_errors" },
  88	{ "tx_timeout_count" },
  89	{ "tx_restart_queue" },
  90	{ "tx_kicks" },
  91	{ "tx_flow_control_xon" },
  92	{ "tx_flow_control_xoff" },
  93	{ "rx_csum_offload_good" },
  94	{ "rx_csum_offload_errors"},
  95	{ "sg_ok"},
  96	{ "sg_linearized"},
  97};
  98
  99#define VECTOR_NUM_STATS	ARRAY_SIZE(ethtool_stats_keys)
 100
 101static void vector_reset_stats(struct vector_private *vp)
 102{
 103	vp->estats.rx_queue_max = 0;
 104	vp->estats.rx_queue_running_average = 0;
 105	vp->estats.tx_queue_max = 0;
 106	vp->estats.tx_queue_running_average = 0;
 107	vp->estats.rx_encaps_errors = 0;
 108	vp->estats.tx_timeout_count = 0;
 109	vp->estats.tx_restart_queue = 0;
 110	vp->estats.tx_kicks = 0;
 111	vp->estats.tx_flow_control_xon = 0;
 112	vp->estats.tx_flow_control_xoff = 0;
 113	vp->estats.sg_ok = 0;
 114	vp->estats.sg_linearized = 0;
 115}
 116
 117static int get_mtu(struct arglist *def)
 118{
 119	char *mtu = uml_vector_fetch_arg(def, "mtu");
 120	long result;
 121
 122	if (mtu != NULL) {
 123		if (kstrtoul(mtu, 10, &result) == 0)
 124			return result;
 125	}
 126	return ETH_MAX_PACKET;
 127}
 128
 129static int get_depth(struct arglist *def)
 130{
 131	char *mtu = uml_vector_fetch_arg(def, "depth");
 132	long result;
 133
 134	if (mtu != NULL) {
 135		if (kstrtoul(mtu, 10, &result) == 0)
 136			return result;
 137	}
 138	return DEFAULT_VECTOR_SIZE;
 139}
 140
 141static int get_headroom(struct arglist *def)
 142{
 143	char *mtu = uml_vector_fetch_arg(def, "headroom");
 144	long result;
 145
 146	if (mtu != NULL) {
 147		if (kstrtoul(mtu, 10, &result) == 0)
 148			return result;
 149	}
 150	return DEFAULT_HEADROOM;
 151}
 152
 153static int get_req_size(struct arglist *def)
 154{
 155	char *gro = uml_vector_fetch_arg(def, "gro");
 156	long result;
 157
 158	if (gro != NULL) {
 159		if (kstrtoul(gro, 10, &result) == 0) {
 160			if (result > 0)
 161				return 65536;
 162		}
 163	}
 164	return get_mtu(def) + ETH_HEADER_OTHER +
 165		get_headroom(def) + SAFETY_MARGIN;
 166}
 167
 168
 169static int get_transport_options(struct arglist *def)
 170{
 171	char *transport = uml_vector_fetch_arg(def, "transport");
 172	char *vector = uml_vector_fetch_arg(def, "vec");
 173
 174	int vec_rx = VECTOR_RX;
 175	int vec_tx = VECTOR_TX;
 176	long parsed;
 177
 178	if (vector != NULL) {
 179		if (kstrtoul(vector, 10, &parsed) == 0) {
 180			if (parsed == 0) {
 181				vec_rx = 0;
 182				vec_tx = 0;
 183			}
 184		}
 185	}
 186
 187
 188	if (strncmp(transport, TRANS_TAP, TRANS_TAP_LEN) == 0)
 189		return (vec_rx | VECTOR_BPF);
 190	if (strncmp(transport, TRANS_RAW, TRANS_RAW_LEN) == 0)
 191		return (vec_rx | vec_tx);
 192	return (vec_rx | vec_tx);
 193}
 194
 195
 196/* A mini-buffer for packet drop read
 197 * All of our supported transports are datagram oriented and we always
 198 * read using recvmsg or recvmmsg. If we pass a buffer which is smaller
 199 * than the packet size it still counts as full packet read and will
 200 * clean the incoming stream to keep sigio/epoll happy
 201 */
 202
 203#define DROP_BUFFER_SIZE 32
 204
 205static char *drop_buffer;
 206
 207/* Array backed queues optimized for bulk enqueue/dequeue and
 208 * 1:N (small values of N) or 1:1 enqueuer/dequeuer ratios.
 209 * For more details and full design rationale see
 210 * http://foswiki.cambridgegreys.com/Main/EatYourTailAndEnjoyIt
 211 */
 212
 213
 214/*
 215 * Advance the mmsg queue head by n = advance. Resets the queue to
 216 * maximum enqueue/dequeue-at-once capacity if possible. Called by
 217 * dequeuers. Caller must hold the head_lock!
 218 */
 219
 220static int vector_advancehead(struct vector_queue *qi, int advance)
 221{
 222	int queue_depth;
 223
 224	qi->head =
 225		(qi->head + advance)
 226			% qi->max_depth;
 227
 228
 229	spin_lock(&qi->tail_lock);
 230	qi->queue_depth -= advance;
 231
 232	/* we are at 0, use this to
 233	 * reset head and tail so we can use max size vectors
 234	 */
 235
 236	if (qi->queue_depth == 0) {
 237		qi->head = 0;
 238		qi->tail = 0;
 239	}
 240	queue_depth = qi->queue_depth;
 241	spin_unlock(&qi->tail_lock);
 242	return queue_depth;
 243}
 244
 245/*	Advance the queue tail by n = advance.
 246 *	This is called by enqueuers which should hold the
 247 *	head lock already
 248 */
 249
 250static int vector_advancetail(struct vector_queue *qi, int advance)
 251{
 252	int queue_depth;
 253
 254	qi->tail =
 255		(qi->tail + advance)
 256			% qi->max_depth;
 257	spin_lock(&qi->head_lock);
 258	qi->queue_depth += advance;
 259	queue_depth = qi->queue_depth;
 260	spin_unlock(&qi->head_lock);
 261	return queue_depth;
 262}
 263
 264static int prep_msg(struct vector_private *vp,
 265	struct sk_buff *skb,
 266	struct iovec *iov)
 267{
 268	int iov_index = 0;
 269	int nr_frags, frag;
 270	skb_frag_t *skb_frag;
 271
 272	nr_frags = skb_shinfo(skb)->nr_frags;
 273	if (nr_frags > MAX_IOV_SIZE) {
 274		if (skb_linearize(skb) != 0)
 275			goto drop;
 276	}
 277	if (vp->header_size > 0) {
 278		iov[iov_index].iov_len = vp->header_size;
 279		vp->form_header(iov[iov_index].iov_base, skb, vp);
 280		iov_index++;
 281	}
 282	iov[iov_index].iov_base = skb->data;
 283	if (nr_frags > 0) {
 284		iov[iov_index].iov_len = skb->len - skb->data_len;
 285		vp->estats.sg_ok++;
 286	} else
 287		iov[iov_index].iov_len = skb->len;
 288	iov_index++;
 289	for (frag = 0; frag < nr_frags; frag++) {
 290		skb_frag = &skb_shinfo(skb)->frags[frag];
 291		iov[iov_index].iov_base = skb_frag_address_safe(skb_frag);
 292		iov[iov_index].iov_len = skb_frag_size(skb_frag);
 293		iov_index++;
 294	}
 295	return iov_index;
 296drop:
 297	return -1;
 298}
 299/*
 300 * Generic vector enqueue with support for forming headers using transport
 301 * specific callback. Allows GRE, L2TPv3, RAW and other transports
 302 * to use a common enqueue procedure in vector mode
 303 */
 304
 305static int vector_enqueue(struct vector_queue *qi, struct sk_buff *skb)
 306{
 307	struct vector_private *vp = netdev_priv(qi->dev);
 308	int queue_depth;
 309	int packet_len;
 310	struct mmsghdr *mmsg_vector = qi->mmsg_vector;
 311	int iov_count;
 312
 313	spin_lock(&qi->tail_lock);
 314	spin_lock(&qi->head_lock);
 315	queue_depth = qi->queue_depth;
 316	spin_unlock(&qi->head_lock);
 317
 318	if (skb)
 319		packet_len = skb->len;
 320
 321	if (queue_depth < qi->max_depth) {
 322
 323		*(qi->skbuff_vector + qi->tail) = skb;
 324		mmsg_vector += qi->tail;
 325		iov_count = prep_msg(
 326			vp,
 327			skb,
 328			mmsg_vector->msg_hdr.msg_iov
 329		);
 330		if (iov_count < 1)
 331			goto drop;
 332		mmsg_vector->msg_hdr.msg_iovlen = iov_count;
 333		mmsg_vector->msg_hdr.msg_name = vp->fds->remote_addr;
 334		mmsg_vector->msg_hdr.msg_namelen = vp->fds->remote_addr_size;
 335		queue_depth = vector_advancetail(qi, 1);
 336	} else
 337		goto drop;
 338	spin_unlock(&qi->tail_lock);
 339	return queue_depth;
 340drop:
 341	qi->dev->stats.tx_dropped++;
 342	if (skb != NULL) {
 343		packet_len = skb->len;
 344		dev_consume_skb_any(skb);
 345		netdev_completed_queue(qi->dev, 1, packet_len);
 346	}
 347	spin_unlock(&qi->tail_lock);
 348	return queue_depth;
 349}
 350
 351static int consume_vector_skbs(struct vector_queue *qi, int count)
 352{
 353	struct sk_buff *skb;
 354	int skb_index;
 355	int bytes_compl = 0;
 356
 357	for (skb_index = qi->head; skb_index < qi->head + count; skb_index++) {
 358		skb = *(qi->skbuff_vector + skb_index);
 359		/* mark as empty to ensure correct destruction if
 360		 * needed
 361		 */
 362		bytes_compl += skb->len;
 363		*(qi->skbuff_vector + skb_index) = NULL;
 364		dev_consume_skb_any(skb);
 365	}
 366	qi->dev->stats.tx_bytes += bytes_compl;
 367	qi->dev->stats.tx_packets += count;
 368	netdev_completed_queue(qi->dev, count, bytes_compl);
 369	return vector_advancehead(qi, count);
 370}
 371
 372/*
 373 * Generic vector deque via sendmmsg with support for forming headers
 374 * using transport specific callback. Allows GRE, L2TPv3, RAW and
 375 * other transports to use a common dequeue procedure in vector mode
 376 */
 377
 378
 379static int vector_send(struct vector_queue *qi)
 380{
 381	struct vector_private *vp = netdev_priv(qi->dev);
 382	struct mmsghdr *send_from;
 383	int result = 0, send_len, queue_depth = qi->max_depth;
 384
 385	if (spin_trylock(&qi->head_lock)) {
 386		if (spin_trylock(&qi->tail_lock)) {
 387			/* update queue_depth to current value */
 388			queue_depth = qi->queue_depth;
 389			spin_unlock(&qi->tail_lock);
 390			while (queue_depth > 0) {
 391				/* Calculate the start of the vector */
 392				send_len = queue_depth;
 393				send_from = qi->mmsg_vector;
 394				send_from += qi->head;
 395				/* Adjust vector size if wraparound */
 396				if (send_len + qi->head > qi->max_depth)
 397					send_len = qi->max_depth - qi->head;
 398				/* Try to TX as many packets as possible */
 399				if (send_len > 0) {
 400					result = uml_vector_sendmmsg(
 401						 vp->fds->tx_fd,
 402						 send_from,
 403						 send_len,
 404						 0
 405					);
 406					vp->in_write_poll =
 407						(result != send_len);
 408				}
 409				/* For some of the sendmmsg error scenarios
 410				 * we may end being unsure in the TX success
 411				 * for all packets. It is safer to declare
 412				 * them all TX-ed and blame the network.
 413				 */
 414				if (result < 0) {
 415					if (net_ratelimit())
 416						netdev_err(vp->dev, "sendmmsg err=%i\n",
 417							result);
 418					result = send_len;
 419				}
 420				if (result > 0) {
 421					queue_depth =
 422						consume_vector_skbs(qi, result);
 423					/* This is equivalent to an TX IRQ.
 424					 * Restart the upper layers to feed us
 425					 * more packets.
 426					 */
 427					if (result > vp->estats.tx_queue_max)
 428						vp->estats.tx_queue_max = result;
 429					vp->estats.tx_queue_running_average =
 430						(vp->estats.tx_queue_running_average + result) >> 1;
 431				}
 432				netif_trans_update(qi->dev);
 433				netif_wake_queue(qi->dev);
 434				/* if TX is busy, break out of the send loop,
 435				 *  poll write IRQ will reschedule xmit for us
 436				 */
 437				if (result != send_len) {
 438					vp->estats.tx_restart_queue++;
 439					break;
 440				}
 441			}
 442		}
 443		spin_unlock(&qi->head_lock);
 444	} else {
 445		tasklet_schedule(&vp->tx_poll);
 446	}
 447	return queue_depth;
 448}
 449
 450/* Queue destructor. Deliberately stateless so we can use
 451 * it in queue cleanup if initialization fails.
 452 */
 453
 454static void destroy_queue(struct vector_queue *qi)
 455{
 456	int i;
 457	struct iovec *iov;
 458	struct vector_private *vp = netdev_priv(qi->dev);
 459	struct mmsghdr *mmsg_vector;
 460
 461	if (qi == NULL)
 462		return;
 463	/* deallocate any skbuffs - we rely on any unused to be
 464	 * set to NULL.
 465	 */
 466	if (qi->skbuff_vector != NULL) {
 467		for (i = 0; i < qi->max_depth; i++) {
 468			if (*(qi->skbuff_vector + i) != NULL)
 469				dev_kfree_skb_any(*(qi->skbuff_vector + i));
 470		}
 471		kfree(qi->skbuff_vector);
 472	}
 473	/* deallocate matching IOV structures including header buffs */
 474	if (qi->mmsg_vector != NULL) {
 475		mmsg_vector = qi->mmsg_vector;
 476		for (i = 0; i < qi->max_depth; i++) {
 477			iov = mmsg_vector->msg_hdr.msg_iov;
 478			if (iov != NULL) {
 479				if ((vp->header_size > 0) &&
 480					(iov->iov_base != NULL))
 481					kfree(iov->iov_base);
 482				kfree(iov);
 483			}
 484			mmsg_vector++;
 485		}
 486		kfree(qi->mmsg_vector);
 487	}
 488	kfree(qi);
 489}
 490
 491/*
 492 * Queue constructor. Create a queue with a given side.
 493 */
 494static struct vector_queue *create_queue(
 495	struct vector_private *vp,
 496	int max_size,
 497	int header_size,
 498	int num_extra_frags)
 499{
 500	struct vector_queue *result;
 501	int i;
 502	struct iovec *iov;
 503	struct mmsghdr *mmsg_vector;
 504
 505	result = kmalloc(sizeof(struct vector_queue), GFP_KERNEL);
 506	if (result == NULL)
 507		goto out_fail;
 508	result->max_depth = max_size;
 509	result->dev = vp->dev;
 510	result->mmsg_vector = kmalloc(
 511		(sizeof(struct mmsghdr) * max_size), GFP_KERNEL);
 512	result->skbuff_vector = kmalloc(
 513		(sizeof(void *) * max_size), GFP_KERNEL);
 514	if (result->mmsg_vector == NULL || result->skbuff_vector == NULL)
 515		goto out_fail;
 516
 517	mmsg_vector = result->mmsg_vector;
 518	for (i = 0; i < max_size; i++) {
 519		/* Clear all pointers - we use non-NULL as marking on
 520		 * what to free on destruction
 521		 */
 522		*(result->skbuff_vector + i) = NULL;
 523		mmsg_vector->msg_hdr.msg_iov = NULL;
 524		mmsg_vector++;
 525	}
 526	mmsg_vector = result->mmsg_vector;
 527	result->max_iov_frags = num_extra_frags;
 528	for (i = 0; i < max_size; i++) {
 529		if (vp->header_size > 0)
 530			iov = kmalloc(
 531				sizeof(struct iovec) * (3 + num_extra_frags),
 532				GFP_KERNEL
 533			);
 534		else
 535			iov = kmalloc(
 536				sizeof(struct iovec) * (2 + num_extra_frags),
 537				GFP_KERNEL
 538			);
 539		if (iov == NULL)
 540			goto out_fail;
 541		mmsg_vector->msg_hdr.msg_iov = iov;
 542		mmsg_vector->msg_hdr.msg_iovlen = 1;
 543		mmsg_vector->msg_hdr.msg_control = NULL;
 544		mmsg_vector->msg_hdr.msg_controllen = 0;
 545		mmsg_vector->msg_hdr.msg_flags = MSG_DONTWAIT;
 546		mmsg_vector->msg_hdr.msg_name = NULL;
 547		mmsg_vector->msg_hdr.msg_namelen = 0;
 548		if (vp->header_size > 0) {
 549			iov->iov_base = kmalloc(header_size, GFP_KERNEL);
 550			if (iov->iov_base == NULL)
 551				goto out_fail;
 552			iov->iov_len = header_size;
 553			mmsg_vector->msg_hdr.msg_iovlen = 2;
 554			iov++;
 555		}
 556		iov->iov_base = NULL;
 557		iov->iov_len = 0;
 558		mmsg_vector++;
 559	}
 560	spin_lock_init(&result->head_lock);
 561	spin_lock_init(&result->tail_lock);
 562	result->queue_depth = 0;
 563	result->head = 0;
 564	result->tail = 0;
 565	return result;
 566out_fail:
 567	destroy_queue(result);
 568	return NULL;
 569}
 570
 571/*
 572 * We do not use the RX queue as a proper wraparound queue for now
 573 * This is not necessary because the consumption via netif_rx()
 574 * happens in-line. While we can try using the return code of
 575 * netif_rx() for flow control there are no drivers doing this today.
 576 * For this RX specific use we ignore the tail/head locks and
 577 * just read into a prepared queue filled with skbuffs.
 578 */
 579
 580static struct sk_buff *prep_skb(
 581	struct vector_private *vp,
 582	struct user_msghdr *msg)
 583{
 584	int linear = vp->max_packet + vp->headroom + SAFETY_MARGIN;
 585	struct sk_buff *result;
 586	int iov_index = 0, len;
 587	struct iovec *iov = msg->msg_iov;
 588	int err, nr_frags, frag;
 589	skb_frag_t *skb_frag;
 590
 591	if (vp->req_size <= linear)
 592		len = linear;
 593	else
 594		len = vp->req_size;
 595	result = alloc_skb_with_frags(
 596		linear,
 597		len - vp->max_packet,
 598		3,
 599		&err,
 600		GFP_ATOMIC
 601	);
 602	if (vp->header_size > 0)
 603		iov_index++;
 604	if (result == NULL) {
 605		iov[iov_index].iov_base = NULL;
 606		iov[iov_index].iov_len = 0;
 607		goto done;
 608	}
 609	skb_reserve(result, vp->headroom);
 610	result->dev = vp->dev;
 611	skb_put(result, vp->max_packet);
 612	result->data_len = len - vp->max_packet;
 613	result->len += len - vp->max_packet;
 614	skb_reset_mac_header(result);
 615	result->ip_summed = CHECKSUM_NONE;
 616	iov[iov_index].iov_base = result->data;
 617	iov[iov_index].iov_len = vp->max_packet;
 618	iov_index++;
 619
 620	nr_frags = skb_shinfo(result)->nr_frags;
 621	for (frag = 0; frag < nr_frags; frag++) {
 622		skb_frag = &skb_shinfo(result)->frags[frag];
 623		iov[iov_index].iov_base = skb_frag_address_safe(skb_frag);
 624		if (iov[iov_index].iov_base != NULL)
 625			iov[iov_index].iov_len = skb_frag_size(skb_frag);
 626		else
 627			iov[iov_index].iov_len = 0;
 628		iov_index++;
 629	}
 630done:
 631	msg->msg_iovlen = iov_index;
 632	return result;
 633}
 634
 635
 636/* Prepare queue for recvmmsg one-shot rx - fill with fresh sk_buffs*/
 637
 638static void prep_queue_for_rx(struct vector_queue *qi)
 639{
 640	struct vector_private *vp = netdev_priv(qi->dev);
 641	struct mmsghdr *mmsg_vector = qi->mmsg_vector;
 642	void **skbuff_vector = qi->skbuff_vector;
 643	int i;
 644
 645	if (qi->queue_depth == 0)
 646		return;
 647	for (i = 0; i < qi->queue_depth; i++) {
 648		/* it is OK if allocation fails - recvmmsg with NULL data in
 649		 * iov argument still performs an RX, just drops the packet
 650		 * This allows us stop faffing around with a "drop buffer"
 651		 */
 652
 653		*skbuff_vector = prep_skb(vp, &mmsg_vector->msg_hdr);
 654		skbuff_vector++;
 655		mmsg_vector++;
 656	}
 657	qi->queue_depth = 0;
 658}
 659
 660static struct vector_device *find_device(int n)
 661{
 662	struct vector_device *device;
 663	struct list_head *ele;
 664
 665	spin_lock(&vector_devices_lock);
 666	list_for_each(ele, &vector_devices) {
 667		device = list_entry(ele, struct vector_device, list);
 668		if (device->unit == n)
 669			goto out;
 670	}
 671	device = NULL;
 672 out:
 673	spin_unlock(&vector_devices_lock);
 674	return device;
 675}
 676
 677static int vector_parse(char *str, int *index_out, char **str_out,
 678			char **error_out)
 679{
 680	int n, len, err;
 681	char *start = str;
 682
 683	len = strlen(str);
 684
 685	while ((*str != ':') && (strlen(str) > 1))
 686		str++;
 687	if (*str != ':') {
 688		*error_out = "Expected ':' after device number";
 689		return -EINVAL;
 690	}
 691	*str = '\0';
 692
 693	err = kstrtouint(start, 0, &n);
 694	if (err < 0) {
 695		*error_out = "Bad device number";
 696		return err;
 697	}
 698
 699	str++;
 700	if (find_device(n)) {
 701		*error_out = "Device already configured";
 702		return -EINVAL;
 703	}
 704
 705	*index_out = n;
 706	*str_out = str;
 707	return 0;
 708}
 709
 710static int vector_config(char *str, char **error_out)
 711{
 712	int err, n;
 713	char *params;
 714	struct arglist *parsed;
 715
 716	err = vector_parse(str, &n, &params, error_out);
 717	if (err != 0)
 718		return err;
 719
 720	/* This string is broken up and the pieces used by the underlying
 721	 * driver. We should copy it to make sure things do not go wrong
 722	 * later.
 723	 */
 724
 725	params = kstrdup(params, GFP_KERNEL);
 726	if (params == NULL) {
 727		*error_out = "vector_config failed to strdup string";
 728		return -ENOMEM;
 729	}
 730
 731	parsed = uml_parse_vector_ifspec(params);
 732
 733	if (parsed == NULL) {
 734		*error_out = "vector_config failed to parse parameters";
 735		return -EINVAL;
 736	}
 737
 738	vector_eth_configure(n, parsed);
 739	return 0;
 740}
 741
 742static int vector_id(char **str, int *start_out, int *end_out)
 743{
 744	char *end;
 745	int n;
 746
 747	n = simple_strtoul(*str, &end, 0);
 748	if ((*end != '\0') || (end == *str))
 749		return -1;
 750
 751	*start_out = n;
 752	*end_out = n;
 753	*str = end;
 754	return n;
 755}
 756
 757static int vector_remove(int n, char **error_out)
 758{
 759	struct vector_device *vec_d;
 760	struct net_device *dev;
 761	struct vector_private *vp;
 762
 763	vec_d = find_device(n);
 764	if (vec_d == NULL)
 765		return -ENODEV;
 766	dev = vec_d->dev;
 767	vp = netdev_priv(dev);
 768	if (vp->fds != NULL)
 769		return -EBUSY;
 770	unregister_netdev(dev);
 771	platform_device_unregister(&vec_d->pdev);
 772	return 0;
 773}
 774
 775/*
 776 * There is no shared per-transport initialization code, so
 777 * we will just initialize each interface one by one and
 778 * add them to a list
 779 */
 780
 781static struct platform_driver uml_net_driver = {
 782	.driver = {
 783		.name = DRIVER_NAME,
 784	},
 785};
 786
 787
 788static void vector_device_release(struct device *dev)
 789{
 790	struct vector_device *device = dev_get_drvdata(dev);
 791	struct net_device *netdev = device->dev;
 792
 793	list_del(&device->list);
 794	kfree(device);
 795	free_netdev(netdev);
 796}
 797
 798/* Bog standard recv using recvmsg - not used normally unless the user
 799 * explicitly specifies not to use recvmmsg vector RX.
 800 */
 801
 802static int vector_legacy_rx(struct vector_private *vp)
 803{
 804	int pkt_len;
 805	struct user_msghdr hdr;
 806	struct iovec iov[2 + MAX_IOV_SIZE]; /* header + data use case only */
 807	int iovpos = 0;
 808	struct sk_buff *skb;
 809	int header_check;
 810
 811	hdr.msg_name = NULL;
 812	hdr.msg_namelen = 0;
 813	hdr.msg_iov = (struct iovec *) &iov;
 814	hdr.msg_control = NULL;
 815	hdr.msg_controllen = 0;
 816	hdr.msg_flags = 0;
 817
 818	if (vp->header_size > 0) {
 819		iov[0].iov_base = vp->header_rxbuffer;
 820		iov[0].iov_len = vp->header_size;
 821	}
 822
 823	skb = prep_skb(vp, &hdr);
 824
 825	if (skb == NULL) {
 826		/* Read a packet into drop_buffer and don't do
 827		 * anything with it.
 828		 */
 829		iov[iovpos].iov_base = drop_buffer;
 830		iov[iovpos].iov_len = DROP_BUFFER_SIZE;
 831		hdr.msg_iovlen = 1;
 832		vp->dev->stats.rx_dropped++;
 833	}
 834
 835	pkt_len = uml_vector_recvmsg(vp->fds->rx_fd, &hdr, 0);
 836
 837	if (skb != NULL) {
 838		if (pkt_len > vp->header_size) {
 839			if (vp->header_size > 0) {
 840				header_check = vp->verify_header(
 841					vp->header_rxbuffer, skb, vp);
 842				if (header_check < 0) {
 843					dev_kfree_skb_irq(skb);
 844					vp->dev->stats.rx_dropped++;
 845					vp->estats.rx_encaps_errors++;
 846					return 0;
 847				}
 848				if (header_check > 0) {
 849					vp->estats.rx_csum_offload_good++;
 850					skb->ip_summed = CHECKSUM_UNNECESSARY;
 851				}
 852			}
 853			pskb_trim(skb, pkt_len - vp->rx_header_size);
 854			skb->protocol = eth_type_trans(skb, skb->dev);
 855			vp->dev->stats.rx_bytes += skb->len;
 856			vp->dev->stats.rx_packets++;
 857			netif_rx(skb);
 858		} else {
 859			dev_kfree_skb_irq(skb);
 860		}
 861	}
 862	return pkt_len;
 863}
 864
 865/*
 866 * Packet at a time TX which falls back to vector TX if the
 867 * underlying transport is busy.
 868 */
 869
 870
 871
 872static int writev_tx(struct vector_private *vp, struct sk_buff *skb)
 873{
 874	struct iovec iov[3 + MAX_IOV_SIZE];
 875	int iov_count, pkt_len = 0;
 876
 877	iov[0].iov_base = vp->header_txbuffer;
 878	iov_count = prep_msg(vp, skb, (struct iovec *) &iov);
 879
 880	if (iov_count < 1)
 881		goto drop;
 882	pkt_len = uml_vector_writev(
 883		vp->fds->tx_fd,
 884		(struct iovec *) &iov,
 885		iov_count
 886	);
 887
 888	netif_trans_update(vp->dev);
 889	netif_wake_queue(vp->dev);
 890
 891	if (pkt_len > 0) {
 892		vp->dev->stats.tx_bytes += skb->len;
 893		vp->dev->stats.tx_packets++;
 894	} else {
 895		vp->dev->stats.tx_dropped++;
 896	}
 897	consume_skb(skb);
 898	return pkt_len;
 899drop:
 900	vp->dev->stats.tx_dropped++;
 901	consume_skb(skb);
 902	return pkt_len;
 903}
 904
 905/*
 906 * Receive as many messages as we can in one call using the special
 907 * mmsg vector matched to an skb vector which we prepared earlier.
 908 */
 909
 910static int vector_mmsg_rx(struct vector_private *vp)
 911{
 912	int packet_count, i;
 913	struct vector_queue *qi = vp->rx_queue;
 914	struct sk_buff *skb;
 915	struct mmsghdr *mmsg_vector = qi->mmsg_vector;
 916	void **skbuff_vector = qi->skbuff_vector;
 917	int header_check;
 918
 919	/* Refresh the vector and make sure it is with new skbs and the
 920	 * iovs are updated to point to them.
 921	 */
 922
 923	prep_queue_for_rx(qi);
 924
 925	/* Fire the Lazy Gun - get as many packets as we can in one go. */
 926
 927	packet_count = uml_vector_recvmmsg(
 928		vp->fds->rx_fd, qi->mmsg_vector, qi->max_depth, 0);
 929
 930	if (packet_count <= 0)
 931		return packet_count;
 932
 933	/* We treat packet processing as enqueue, buffer refresh as dequeue
 934	 * The queue_depth tells us how many buffers have been used and how
 935	 * many do we need to prep the next time prep_queue_for_rx() is called.
 936	 */
 937
 938	qi->queue_depth = packet_count;
 939
 940	for (i = 0; i < packet_count; i++) {
 941		skb = (*skbuff_vector);
 942		if (mmsg_vector->msg_len > vp->header_size) {
 943			if (vp->header_size > 0) {
 944				header_check = vp->verify_header(
 945					mmsg_vector->msg_hdr.msg_iov->iov_base,
 946					skb,
 947					vp
 948				);
 949				if (header_check < 0) {
 950				/* Overlay header failed to verify - discard.
 951				 * We can actually keep this skb and reuse it,
 952				 * but that will make the prep logic too
 953				 * complex.
 954				 */
 955					dev_kfree_skb_irq(skb);
 956					vp->estats.rx_encaps_errors++;
 957					continue;
 958				}
 959				if (header_check > 0) {
 960					vp->estats.rx_csum_offload_good++;
 961					skb->ip_summed = CHECKSUM_UNNECESSARY;
 962				}
 963			}
 964			pskb_trim(skb,
 965				mmsg_vector->msg_len - vp->rx_header_size);
 966			skb->protocol = eth_type_trans(skb, skb->dev);
 967			/*
 968			 * We do not need to lock on updating stats here
 969			 * The interrupt loop is non-reentrant.
 970			 */
 971			vp->dev->stats.rx_bytes += skb->len;
 972			vp->dev->stats.rx_packets++;
 973			netif_rx(skb);
 974		} else {
 975			/* Overlay header too short to do anything - discard.
 976			 * We can actually keep this skb and reuse it,
 977			 * but that will make the prep logic too complex.
 978			 */
 979			if (skb != NULL)
 980				dev_kfree_skb_irq(skb);
 981		}
 982		(*skbuff_vector) = NULL;
 983		/* Move to the next buffer element */
 984		mmsg_vector++;
 985		skbuff_vector++;
 986	}
 987	if (packet_count > 0) {
 988		if (vp->estats.rx_queue_max < packet_count)
 989			vp->estats.rx_queue_max = packet_count;
 990		vp->estats.rx_queue_running_average =
 991			(vp->estats.rx_queue_running_average + packet_count) >> 1;
 992	}
 993	return packet_count;
 994}
 995
 996static void vector_rx(struct vector_private *vp)
 997{
 998	int err;
 999
1000	if ((vp->options & VECTOR_RX) > 0)
1001		while ((err = vector_mmsg_rx(vp)) > 0)
1002			;
1003	else
1004		while ((err = vector_legacy_rx(vp)) > 0)
1005			;
1006	if ((err != 0) && net_ratelimit())
1007		netdev_err(vp->dev, "vector_rx: error(%d)\n", err);
1008}
1009
1010static int vector_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
1011{
1012	struct vector_private *vp = netdev_priv(dev);
1013	int queue_depth = 0;
1014
1015	if ((vp->options & VECTOR_TX) == 0) {
1016		writev_tx(vp, skb);
1017		return NETDEV_TX_OK;
1018	}
1019
1020	/* We do BQL only in the vector path, no point doing it in
1021	 * packet at a time mode as there is no device queue
1022	 */
1023
1024	netdev_sent_queue(vp->dev, skb->len);
1025	queue_depth = vector_enqueue(vp->tx_queue, skb);
1026
1027	/* if the device queue is full, stop the upper layers and
1028	 * flush it.
1029	 */
1030
1031	if (queue_depth >= vp->tx_queue->max_depth - 1) {
1032		vp->estats.tx_kicks++;
1033		netif_stop_queue(dev);
1034		vector_send(vp->tx_queue);
1035		return NETDEV_TX_OK;
1036	}
1037	if (skb->xmit_more) {
1038		mod_timer(&vp->tl, vp->coalesce);
1039		return NETDEV_TX_OK;
1040	}
1041	if (skb->len < TX_SMALL_PACKET) {
1042		vp->estats.tx_kicks++;
1043		vector_send(vp->tx_queue);
1044	} else
1045		tasklet_schedule(&vp->tx_poll);
1046	return NETDEV_TX_OK;
1047}
1048
1049static irqreturn_t vector_rx_interrupt(int irq, void *dev_id)
1050{
1051	struct net_device *dev = dev_id;
1052	struct vector_private *vp = netdev_priv(dev);
1053
1054	if (!netif_running(dev))
1055		return IRQ_NONE;
1056	vector_rx(vp);
1057	return IRQ_HANDLED;
1058
1059}
1060
1061static irqreturn_t vector_tx_interrupt(int irq, void *dev_id)
1062{
1063	struct net_device *dev = dev_id;
1064	struct vector_private *vp = netdev_priv(dev);
1065
1066	if (!netif_running(dev))
1067		return IRQ_NONE;
1068	/* We need to pay attention to it only if we got
1069	 * -EAGAIN or -ENOBUFFS from sendmmsg. Otherwise
1070	 * we ignore it. In the future, it may be worth
1071	 * it to improve the IRQ controller a bit to make
1072	 * tweaking the IRQ mask less costly
1073	 */
1074
1075	if (vp->in_write_poll)
1076		tasklet_schedule(&vp->tx_poll);
1077	return IRQ_HANDLED;
1078
1079}
1080
1081static int irq_rr;
1082
1083static int vector_net_close(struct net_device *dev)
1084{
1085	struct vector_private *vp = netdev_priv(dev);
1086	unsigned long flags;
1087
1088	netif_stop_queue(dev);
1089	del_timer(&vp->tl);
1090
1091	if (vp->fds == NULL)
1092		return 0;
1093
1094	/* Disable and free all IRQS */
1095	if (vp->rx_irq > 0) {
1096		um_free_irq(vp->rx_irq, dev);
1097		vp->rx_irq = 0;
1098	}
1099	if (vp->tx_irq > 0) {
1100		um_free_irq(vp->tx_irq, dev);
1101		vp->tx_irq = 0;
1102	}
1103	tasklet_kill(&vp->tx_poll);
1104	if (vp->fds->rx_fd > 0) {
1105		os_close_file(vp->fds->rx_fd);
1106		vp->fds->rx_fd = -1;
1107	}
1108	if (vp->fds->tx_fd > 0) {
1109		os_close_file(vp->fds->tx_fd);
1110		vp->fds->tx_fd = -1;
1111	}
1112	if (vp->bpf != NULL)
1113		kfree(vp->bpf);
1114	if (vp->fds->remote_addr != NULL)
1115		kfree(vp->fds->remote_addr);
1116	if (vp->transport_data != NULL)
1117		kfree(vp->transport_data);
1118	if (vp->header_rxbuffer != NULL)
1119		kfree(vp->header_rxbuffer);
1120	if (vp->header_txbuffer != NULL)
1121		kfree(vp->header_txbuffer);
1122	if (vp->rx_queue != NULL)
1123		destroy_queue(vp->rx_queue);
1124	if (vp->tx_queue != NULL)
1125		destroy_queue(vp->tx_queue);
1126	kfree(vp->fds);
1127	vp->fds = NULL;
1128	spin_lock_irqsave(&vp->lock, flags);
1129	vp->opened = false;
1130	spin_unlock_irqrestore(&vp->lock, flags);
1131	return 0;
1132}
1133
1134/* TX tasklet */
1135
1136static void vector_tx_poll(unsigned long data)
1137{
1138	struct vector_private *vp = (struct vector_private *)data;
1139
1140	vp->estats.tx_kicks++;
1141	vector_send(vp->tx_queue);
1142}
1143static void vector_reset_tx(struct work_struct *work)
1144{
1145	struct vector_private *vp =
1146		container_of(work, struct vector_private, reset_tx);
1147	netdev_reset_queue(vp->dev);
1148	netif_start_queue(vp->dev);
1149	netif_wake_queue(vp->dev);
1150}
1151static int vector_net_open(struct net_device *dev)
1152{
1153	struct vector_private *vp = netdev_priv(dev);
1154	unsigned long flags;
1155	int err = -EINVAL;
1156	struct vector_device *vdevice;
1157
1158	spin_lock_irqsave(&vp->lock, flags);
1159	if (vp->opened) {
1160		spin_unlock_irqrestore(&vp->lock, flags);
1161		return -ENXIO;
1162	}
1163	vp->opened = true;
1164	spin_unlock_irqrestore(&vp->lock, flags);
1165
1166	vp->fds = uml_vector_user_open(vp->unit, vp->parsed);
1167
1168	if (vp->fds == NULL)
1169		goto out_close;
1170
1171	if (build_transport_data(vp) < 0)
1172		goto out_close;
1173
1174	if ((vp->options & VECTOR_RX) > 0) {
1175		vp->rx_queue = create_queue(
1176			vp,
1177			get_depth(vp->parsed),
1178			vp->rx_header_size,
1179			MAX_IOV_SIZE
1180		);
1181		vp->rx_queue->queue_depth = get_depth(vp->parsed);
1182	} else {
1183		vp->header_rxbuffer = kmalloc(
1184			vp->rx_header_size,
1185			GFP_KERNEL
1186		);
1187		if (vp->header_rxbuffer == NULL)
1188			goto out_close;
1189	}
1190	if ((vp->options & VECTOR_TX) > 0) {
1191		vp->tx_queue = create_queue(
1192			vp,
1193			get_depth(vp->parsed),
1194			vp->header_size,
1195			MAX_IOV_SIZE
1196		);
1197	} else {
1198		vp->header_txbuffer = kmalloc(vp->header_size, GFP_KERNEL);
1199		if (vp->header_txbuffer == NULL)
1200			goto out_close;
1201	}
1202
1203	/* READ IRQ */
1204	err = um_request_irq(
1205		irq_rr + VECTOR_BASE_IRQ, vp->fds->rx_fd,
1206			IRQ_READ, vector_rx_interrupt,
1207			IRQF_SHARED, dev->name, dev);
1208	if (err != 0) {
1209		netdev_err(dev, "vector_open: failed to get rx irq(%d)\n", err);
1210		err = -ENETUNREACH;
1211		goto out_close;
1212	}
1213	vp->rx_irq = irq_rr + VECTOR_BASE_IRQ;
1214	dev->irq = irq_rr + VECTOR_BASE_IRQ;
1215	irq_rr = (irq_rr + 1) % VECTOR_IRQ_SPACE;
1216
1217	/* WRITE IRQ - we need it only if we have vector TX */
1218	if ((vp->options & VECTOR_TX) > 0) {
1219		err = um_request_irq(
1220			irq_rr + VECTOR_BASE_IRQ, vp->fds->tx_fd,
1221				IRQ_WRITE, vector_tx_interrupt,
1222				IRQF_SHARED, dev->name, dev);
1223		if (err != 0) {
1224			netdev_err(dev,
1225				"vector_open: failed to get tx irq(%d)\n", err);
1226			err = -ENETUNREACH;
1227			goto out_close;
1228		}
1229		vp->tx_irq = irq_rr + VECTOR_BASE_IRQ;
1230		irq_rr = (irq_rr + 1) % VECTOR_IRQ_SPACE;
1231	}
1232
1233	if ((vp->options & VECTOR_QDISC_BYPASS) != 0) {
1234		if (!uml_raw_enable_qdisc_bypass(vp->fds->rx_fd))
1235			vp->options = vp->options | VECTOR_BPF;
1236	}
1237
1238	if ((vp->options & VECTOR_BPF) != 0)
1239		vp->bpf = uml_vector_default_bpf(vp->fds->rx_fd, dev->dev_addr);
1240
1241	netif_start_queue(dev);
1242
1243	/* clear buffer - it can happen that the host side of the interface
1244	 * is full when we get here. In this case, new data is never queued,
1245	 * SIGIOs never arrive, and the net never works.
1246	 */
1247
1248	vector_rx(vp);
1249
1250	vector_reset_stats(vp);
1251	vdevice = find_device(vp->unit);
1252	vdevice->opened = 1;
1253
1254	if ((vp->options & VECTOR_TX) != 0)
1255		add_timer(&vp->tl);
1256	return 0;
1257out_close:
1258	vector_net_close(dev);
1259	return err;
1260}
1261
1262
1263static void vector_net_set_multicast_list(struct net_device *dev)
1264{
1265	/* TODO: - we can do some BPF games here */
1266	return;
1267}
1268
1269static void vector_net_tx_timeout(struct net_device *dev)
1270{
1271	struct vector_private *vp = netdev_priv(dev);
1272
1273	vp->estats.tx_timeout_count++;
1274	netif_trans_update(dev);
1275	schedule_work(&vp->reset_tx);
1276}
1277
1278static netdev_features_t vector_fix_features(struct net_device *dev,
1279	netdev_features_t features)
1280{
1281	features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
1282	return features;
1283}
1284
1285static int vector_set_features(struct net_device *dev,
1286	netdev_features_t features)
1287{
1288	struct vector_private *vp = netdev_priv(dev);
1289	/* Adjust buffer sizes for GSO/GRO. Unfortunately, there is
1290	 * no way to negotiate it on raw sockets, so we can change
1291	 * only our side.
1292	 */
1293	if (features & NETIF_F_GRO)
1294		/* All new frame buffers will be GRO-sized */
1295		vp->req_size = 65536;
1296	else
1297		/* All new frame buffers will be normal sized */
1298		vp->req_size = vp->max_packet + vp->headroom + SAFETY_MARGIN;
1299	return 0;
1300}
1301
1302#ifdef CONFIG_NET_POLL_CONTROLLER
1303static void vector_net_poll_controller(struct net_device *dev)
1304{
1305	disable_irq(dev->irq);
1306	vector_rx_interrupt(dev->irq, dev);
1307	enable_irq(dev->irq);
1308}
1309#endif
1310
1311static void vector_net_get_drvinfo(struct net_device *dev,
1312				struct ethtool_drvinfo *info)
1313{
1314	strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver));
1315	strlcpy(info->version, DRIVER_VERSION, sizeof(info->version));
1316}
1317
1318static void vector_get_ringparam(struct net_device *netdev,
1319				struct ethtool_ringparam *ring)
1320{
1321	struct vector_private *vp = netdev_priv(netdev);
1322
1323	ring->rx_max_pending = vp->rx_queue->max_depth;
1324	ring->tx_max_pending = vp->tx_queue->max_depth;
1325	ring->rx_pending = vp->rx_queue->max_depth;
1326	ring->tx_pending = vp->tx_queue->max_depth;
1327}
1328
1329static void vector_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
1330{
1331	switch (stringset) {
1332	case ETH_SS_TEST:
1333		*buf = '\0';
1334		break;
1335	case ETH_SS_STATS:
1336		memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
1337		break;
1338	default:
1339		WARN_ON(1);
1340		break;
1341	}
1342}
1343
1344static int vector_get_sset_count(struct net_device *dev, int sset)
1345{
1346	switch (sset) {
1347	case ETH_SS_TEST:
1348		return 0;
1349	case ETH_SS_STATS:
1350		return VECTOR_NUM_STATS;
1351	default:
1352		return -EOPNOTSUPP;
1353	}
1354}
1355
1356static void vector_get_ethtool_stats(struct net_device *dev,
1357	struct ethtool_stats *estats,
1358	u64 *tmp_stats)
1359{
1360	struct vector_private *vp = netdev_priv(dev);
1361
1362	memcpy(tmp_stats, &vp->estats, sizeof(struct vector_estats));
1363}
1364
1365static int vector_get_coalesce(struct net_device *netdev,
1366					struct ethtool_coalesce *ec)
1367{
1368	struct vector_private *vp = netdev_priv(netdev);
1369
1370	ec->tx_coalesce_usecs = (vp->coalesce * 1000000) / HZ;
1371	return 0;
1372}
1373
1374static int vector_set_coalesce(struct net_device *netdev,
1375					struct ethtool_coalesce *ec)
1376{
1377	struct vector_private *vp = netdev_priv(netdev);
1378
1379	vp->coalesce = (ec->tx_coalesce_usecs * HZ) / 1000000;
1380	if (vp->coalesce == 0)
1381		vp->coalesce = 1;
1382	return 0;
1383}
1384
1385static const struct ethtool_ops vector_net_ethtool_ops = {
1386	.get_drvinfo	= vector_net_get_drvinfo,
1387	.get_link	= ethtool_op_get_link,
1388	.get_ts_info	= ethtool_op_get_ts_info,
1389	.get_ringparam	= vector_get_ringparam,
1390	.get_strings	= vector_get_strings,
1391	.get_sset_count	= vector_get_sset_count,
1392	.get_ethtool_stats = vector_get_ethtool_stats,
1393	.get_coalesce	= vector_get_coalesce,
1394	.set_coalesce	= vector_set_coalesce,
1395};
1396
1397
1398static const struct net_device_ops vector_netdev_ops = {
1399	.ndo_open		= vector_net_open,
1400	.ndo_stop		= vector_net_close,
1401	.ndo_start_xmit		= vector_net_start_xmit,
1402	.ndo_set_rx_mode	= vector_net_set_multicast_list,
1403	.ndo_tx_timeout		= vector_net_tx_timeout,
1404	.ndo_set_mac_address	= eth_mac_addr,
1405	.ndo_validate_addr	= eth_validate_addr,
1406	.ndo_fix_features	= vector_fix_features,
1407	.ndo_set_features	= vector_set_features,
1408#ifdef CONFIG_NET_POLL_CONTROLLER
1409	.ndo_poll_controller = vector_net_poll_controller,
1410#endif
1411};
1412
1413
1414static void vector_timer_expire(struct timer_list *t)
1415{
1416	struct vector_private *vp = from_timer(vp, t, tl);
1417
1418	vp->estats.tx_kicks++;
1419	vector_send(vp->tx_queue);
1420}
1421
1422static void vector_eth_configure(
1423		int n,
1424		struct arglist *def
1425	)
1426{
1427	struct vector_device *device;
1428	struct net_device *dev;
1429	struct vector_private *vp;
1430	int err;
1431
1432	device = kzalloc(sizeof(*device), GFP_KERNEL);
1433	if (device == NULL) {
1434		printk(KERN_ERR "eth_configure failed to allocate struct "
1435				 "vector_device\n");
1436		return;
1437	}
1438	dev = alloc_etherdev(sizeof(struct vector_private));
1439	if (dev == NULL) {
1440		printk(KERN_ERR "eth_configure: failed to allocate struct "
1441				 "net_device for vec%d\n", n);
1442		goto out_free_device;
1443	}
1444
1445	dev->mtu = get_mtu(def);
1446
1447	INIT_LIST_HEAD(&device->list);
1448	device->unit = n;
1449
1450	/* If this name ends up conflicting with an existing registered
1451	 * netdevice, that is OK, register_netdev{,ice}() will notice this
1452	 * and fail.
1453	 */
1454	snprintf(dev->name, sizeof(dev->name), "vec%d", n);
1455	uml_net_setup_etheraddr(dev, uml_vector_fetch_arg(def, "mac"));
1456	vp = netdev_priv(dev);
1457
1458	/* sysfs register */
1459	if (!driver_registered) {
1460		platform_driver_register(&uml_net_driver);
1461		driver_registered = 1;
1462	}
1463	device->pdev.id = n;
1464	device->pdev.name = DRIVER_NAME;
1465	device->pdev.dev.release = vector_device_release;
1466	dev_set_drvdata(&device->pdev.dev, device);
1467	if (platform_device_register(&device->pdev))
1468		goto out_free_netdev;
1469	SET_NETDEV_DEV(dev, &device->pdev.dev);
1470
1471	device->dev = dev;
1472
1473	*vp = ((struct vector_private)
1474		{
1475		.list			= LIST_HEAD_INIT(vp->list),
1476		.dev			= dev,
1477		.unit			= n,
1478		.options		= get_transport_options(def),
1479		.rx_irq			= 0,
1480		.tx_irq			= 0,
1481		.parsed			= def,
1482		.max_packet		= get_mtu(def) + ETH_HEADER_OTHER,
1483		/* TODO - we need to calculate headroom so that ip header
1484		 * is 16 byte aligned all the time
1485		 */
1486		.headroom		= get_headroom(def),
1487		.form_header		= NULL,
1488		.verify_header		= NULL,
1489		.header_rxbuffer	= NULL,
1490		.header_txbuffer	= NULL,
1491		.header_size		= 0,
1492		.rx_header_size		= 0,
1493		.rexmit_scheduled	= false,
1494		.opened			= false,
1495		.transport_data		= NULL,
1496		.in_write_poll		= false,
1497		.coalesce		= 2,
1498		.req_size		= get_req_size(def)
1499		});
1500
1501	dev->features = dev->hw_features = (NETIF_F_SG | NETIF_F_FRAGLIST);
1502	tasklet_init(&vp->tx_poll, vector_tx_poll, (unsigned long)vp);
1503	INIT_WORK(&vp->reset_tx, vector_reset_tx);
1504
1505	timer_setup(&vp->tl, vector_timer_expire, 0);
1506	spin_lock_init(&vp->lock);
1507
1508	/* FIXME */
1509	dev->netdev_ops = &vector_netdev_ops;
1510	dev->ethtool_ops = &vector_net_ethtool_ops;
1511	dev->watchdog_timeo = (HZ >> 1);
1512	/* primary IRQ - fixme */
1513	dev->irq = 0; /* we will adjust this once opened */
1514
1515	rtnl_lock();
1516	err = register_netdevice(dev);
1517	rtnl_unlock();
1518	if (err)
1519		goto out_undo_user_init;
1520
1521	spin_lock(&vector_devices_lock);
1522	list_add(&device->list, &vector_devices);
1523	spin_unlock(&vector_devices_lock);
1524
1525	return;
1526
1527out_undo_user_init:
1528	return;
1529out_free_netdev:
1530	free_netdev(dev);
1531out_free_device:
1532	kfree(device);
1533}
1534
1535
1536
1537
1538/*
1539 * Invoked late in the init
1540 */
1541
1542static int __init vector_init(void)
1543{
1544	struct list_head *ele;
1545	struct vector_cmd_line_arg *def;
1546	struct arglist *parsed;
1547
1548	list_for_each(ele, &vec_cmd_line) {
1549		def = list_entry(ele, struct vector_cmd_line_arg, list);
1550		parsed = uml_parse_vector_ifspec(def->arguments);
1551		if (parsed != NULL)
1552			vector_eth_configure(def->unit, parsed);
1553	}
1554	return 0;
1555}
1556
1557
1558/* Invoked at initial argument parsing, only stores
1559 * arguments until a proper vector_init is called
1560 * later
1561 */
1562
1563static int __init vector_setup(char *str)
1564{
1565	char *error;
1566	int n, err;
1567	struct vector_cmd_line_arg *new;
1568
1569	err = vector_parse(str, &n, &str, &error);
1570	if (err) {
1571		printk(KERN_ERR "vector_setup - Couldn't parse '%s' : %s\n",
1572				 str, error);
1573		return 1;
1574	}
1575	new = alloc_bootmem(sizeof(*new));
1576	INIT_LIST_HEAD(&new->list);
1577	new->unit = n;
1578	new->arguments = str;
1579	list_add_tail(&new->list, &vec_cmd_line);
1580	return 1;
1581}
1582
1583__setup("vec", vector_setup);
1584__uml_help(vector_setup,
1585"vec[0-9]+:<option>=<value>,<option>=<value>\n"
1586"	 Configure a vector io network device.\n\n"
1587);
1588
1589late_initcall(vector_init);
1590
1591static struct mc_device vector_mc = {
1592	.list		= LIST_HEAD_INIT(vector_mc.list),
1593	.name		= "vec",
1594	.config		= vector_config,
1595	.get_config	= NULL,
1596	.id		= vector_id,
1597	.remove		= vector_remove,
1598};
1599
1600#ifdef CONFIG_INET
1601static int vector_inetaddr_event(
1602	struct notifier_block *this,
1603	unsigned long event,
1604	void *ptr)
1605{
1606	return NOTIFY_DONE;
1607}
1608
1609static struct notifier_block vector_inetaddr_notifier = {
1610	.notifier_call		= vector_inetaddr_event,
1611};
1612
1613static void inet_register(void)
1614{
1615	register_inetaddr_notifier(&vector_inetaddr_notifier);
1616}
1617#else
1618static inline void inet_register(void)
1619{
1620}
1621#endif
1622
1623static int vector_net_init(void)
1624{
1625	mconsole_register_dev(&vector_mc);
1626	inet_register();
1627	return 0;
1628}
1629
1630__initcall(vector_net_init);
1631
1632
1633