xref: /linux/drivers/net/vmxnet3/vmxnet3_drv.c (revision dfc349402de8e95f6a42e8341e9ea193b718eee3)
1 /*
2  * Linux driver for VMware's vmxnet3 ethernet NIC.
3  *
4  * Copyright (C) 2008-2009, VMware, Inc. All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation; version 2 of the License and no later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
13  * NON INFRINGEMENT. See the GNU General Public License for more
14  * details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19  *
20  * The full GNU General Public License is included in this distribution in
21  * the file called "COPYING".
22  *
23  * Maintained by: Shreyas Bhatewara <pv-drivers@vmware.com>
24  *
25  */
26 
27 #include "vmxnet3_int.h"
28 
29 char vmxnet3_driver_name[] = "vmxnet3";
30 #define VMXNET3_DRIVER_DESC "VMware vmxnet3 virtual NIC driver"
31 
32 
33 /*
34  * PCI Device ID Table
35  * Last entry must be all 0s
36  */
37 static const struct pci_device_id vmxnet3_pciid_table[] = {
38 	{PCI_VDEVICE(VMWARE, PCI_DEVICE_ID_VMWARE_VMXNET3)},
39 	{0}
40 };
41 
42 MODULE_DEVICE_TABLE(pci, vmxnet3_pciid_table);
43 
44 static atomic_t devices_found;
45 
46 
47 /*
48  *    Enable/Disable the given intr
49  */
50 static void
51 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
52 {
53 	VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0);
54 }
55 
56 
57 static void
58 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
59 {
60 	VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1);
61 }
62 
63 
64 /*
65  *    Enable/Disable all intrs used by the device
66  */
67 static void
68 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter)
69 {
70 	int i;
71 
72 	for (i = 0; i < adapter->intr.num_intrs; i++)
73 		vmxnet3_enable_intr(adapter, i);
74 }
75 
76 
77 static void
78 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter)
79 {
80 	int i;
81 
82 	for (i = 0; i < adapter->intr.num_intrs; i++)
83 		vmxnet3_disable_intr(adapter, i);
84 }
85 
86 
87 static void
88 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events)
89 {
90 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events);
91 }
92 
93 
94 static bool
95 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
96 {
97 	return netif_queue_stopped(adapter->netdev);
98 }
99 
100 
101 static void
102 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
103 {
104 	tq->stopped = false;
105 	netif_start_queue(adapter->netdev);
106 }
107 
108 
109 static void
110 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
111 {
112 	tq->stopped = false;
113 	netif_wake_queue(adapter->netdev);
114 }
115 
116 
117 static void
118 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
119 {
120 	tq->stopped = true;
121 	tq->num_stop++;
122 	netif_stop_queue(adapter->netdev);
123 }
124 
125 
126 /*
127  * Check the link state. This may start or stop the tx queue.
128  */
129 static void
130 vmxnet3_check_link(struct vmxnet3_adapter *adapter)
131 {
132 	u32 ret;
133 
134 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK);
135 	ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
136 	adapter->link_speed = ret >> 16;
137 	if (ret & 1) { /* Link is up. */
138 		printk(KERN_INFO "%s: NIC Link is Up %d Mbps\n",
139 		       adapter->netdev->name, adapter->link_speed);
140 		if (!netif_carrier_ok(adapter->netdev))
141 			netif_carrier_on(adapter->netdev);
142 
143 		vmxnet3_tq_start(&adapter->tx_queue, adapter);
144 	} else {
145 		printk(KERN_INFO "%s: NIC Link is Down\n",
146 		       adapter->netdev->name);
147 		if (netif_carrier_ok(adapter->netdev))
148 			netif_carrier_off(adapter->netdev);
149 
150 		vmxnet3_tq_stop(&adapter->tx_queue, adapter);
151 	}
152 }
153 
154 
155 static void
156 vmxnet3_process_events(struct vmxnet3_adapter *adapter)
157 {
158 	u32 events = adapter->shared->ecr;
159 	if (!events)
160 		return;
161 
162 	vmxnet3_ack_events(adapter, events);
163 
164 	/* Check if link state has changed */
165 	if (events & VMXNET3_ECR_LINK)
166 		vmxnet3_check_link(adapter);
167 
168 	/* Check if there is an error on xmit/recv queues */
169 	if (events & (VMXNET3_ECR_TQERR | VMXNET3_ECR_RQERR)) {
170 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
171 				       VMXNET3_CMD_GET_QUEUE_STATUS);
172 
173 		if (adapter->tqd_start->status.stopped) {
174 			printk(KERN_ERR "%s: tq error 0x%x\n",
175 			       adapter->netdev->name,
176 			       adapter->tqd_start->status.error);
177 		}
178 		if (adapter->rqd_start->status.stopped) {
179 			printk(KERN_ERR "%s: rq error 0x%x\n",
180 			       adapter->netdev->name,
181 			       adapter->rqd_start->status.error);
182 		}
183 
184 		schedule_work(&adapter->work);
185 	}
186 }
187 
188 
189 static void
190 vmxnet3_unmap_tx_buf(struct vmxnet3_tx_buf_info *tbi,
191 		     struct pci_dev *pdev)
192 {
193 	if (tbi->map_type == VMXNET3_MAP_SINGLE)
194 		pci_unmap_single(pdev, tbi->dma_addr, tbi->len,
195 				 PCI_DMA_TODEVICE);
196 	else if (tbi->map_type == VMXNET3_MAP_PAGE)
197 		pci_unmap_page(pdev, tbi->dma_addr, tbi->len,
198 			       PCI_DMA_TODEVICE);
199 	else
200 		BUG_ON(tbi->map_type != VMXNET3_MAP_NONE);
201 
202 	tbi->map_type = VMXNET3_MAP_NONE; /* to help debugging */
203 }
204 
205 
206 static int
207 vmxnet3_unmap_pkt(u32 eop_idx, struct vmxnet3_tx_queue *tq,
208 		  struct pci_dev *pdev,	struct vmxnet3_adapter *adapter)
209 {
210 	struct sk_buff *skb;
211 	int entries = 0;
212 
213 	/* no out of order completion */
214 	BUG_ON(tq->buf_info[eop_idx].sop_idx != tq->tx_ring.next2comp);
215 	BUG_ON(tq->tx_ring.base[eop_idx].txd.eop != 1);
216 
217 	skb = tq->buf_info[eop_idx].skb;
218 	BUG_ON(skb == NULL);
219 	tq->buf_info[eop_idx].skb = NULL;
220 
221 	VMXNET3_INC_RING_IDX_ONLY(eop_idx, tq->tx_ring.size);
222 
223 	while (tq->tx_ring.next2comp != eop_idx) {
224 		vmxnet3_unmap_tx_buf(tq->buf_info + tq->tx_ring.next2comp,
225 				     pdev);
226 
227 		/* update next2comp w/o tx_lock. Since we are marking more,
228 		 * instead of less, tx ring entries avail, the worst case is
229 		 * that the tx routine incorrectly re-queues a pkt due to
230 		 * insufficient tx ring entries.
231 		 */
232 		vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
233 		entries++;
234 	}
235 
236 	dev_kfree_skb_any(skb);
237 	return entries;
238 }
239 
240 
241 static int
242 vmxnet3_tq_tx_complete(struct vmxnet3_tx_queue *tq,
243 			struct vmxnet3_adapter *adapter)
244 {
245 	int completed = 0;
246 	union Vmxnet3_GenericDesc *gdesc;
247 
248 	gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
249 	while (gdesc->tcd.gen == tq->comp_ring.gen) {
250 		completed += vmxnet3_unmap_pkt(gdesc->tcd.txdIdx, tq,
251 					       adapter->pdev, adapter);
252 
253 		vmxnet3_comp_ring_adv_next2proc(&tq->comp_ring);
254 		gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
255 	}
256 
257 	if (completed) {
258 		spin_lock(&tq->tx_lock);
259 		if (unlikely(vmxnet3_tq_stopped(tq, adapter) &&
260 			     vmxnet3_cmd_ring_desc_avail(&tq->tx_ring) >
261 			     VMXNET3_WAKE_QUEUE_THRESHOLD(tq) &&
262 			     netif_carrier_ok(adapter->netdev))) {
263 			vmxnet3_tq_wake(tq, adapter);
264 		}
265 		spin_unlock(&tq->tx_lock);
266 	}
267 	return completed;
268 }
269 
270 
271 static void
272 vmxnet3_tq_cleanup(struct vmxnet3_tx_queue *tq,
273 		   struct vmxnet3_adapter *adapter)
274 {
275 	int i;
276 
277 	while (tq->tx_ring.next2comp != tq->tx_ring.next2fill) {
278 		struct vmxnet3_tx_buf_info *tbi;
279 		union Vmxnet3_GenericDesc *gdesc;
280 
281 		tbi = tq->buf_info + tq->tx_ring.next2comp;
282 		gdesc = tq->tx_ring.base + tq->tx_ring.next2comp;
283 
284 		vmxnet3_unmap_tx_buf(tbi, adapter->pdev);
285 		if (tbi->skb) {
286 			dev_kfree_skb_any(tbi->skb);
287 			tbi->skb = NULL;
288 		}
289 		vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
290 	}
291 
292 	/* sanity check, verify all buffers are indeed unmapped and freed */
293 	for (i = 0; i < tq->tx_ring.size; i++) {
294 		BUG_ON(tq->buf_info[i].skb != NULL ||
295 		       tq->buf_info[i].map_type != VMXNET3_MAP_NONE);
296 	}
297 
298 	tq->tx_ring.gen = VMXNET3_INIT_GEN;
299 	tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
300 
301 	tq->comp_ring.gen = VMXNET3_INIT_GEN;
302 	tq->comp_ring.next2proc = 0;
303 }
304 
305 
306 void
307 vmxnet3_tq_destroy(struct vmxnet3_tx_queue *tq,
308 		   struct vmxnet3_adapter *adapter)
309 {
310 	if (tq->tx_ring.base) {
311 		pci_free_consistent(adapter->pdev, tq->tx_ring.size *
312 				    sizeof(struct Vmxnet3_TxDesc),
313 				    tq->tx_ring.base, tq->tx_ring.basePA);
314 		tq->tx_ring.base = NULL;
315 	}
316 	if (tq->data_ring.base) {
317 		pci_free_consistent(adapter->pdev, tq->data_ring.size *
318 				    sizeof(struct Vmxnet3_TxDataDesc),
319 				    tq->data_ring.base, tq->data_ring.basePA);
320 		tq->data_ring.base = NULL;
321 	}
322 	if (tq->comp_ring.base) {
323 		pci_free_consistent(adapter->pdev, tq->comp_ring.size *
324 				    sizeof(struct Vmxnet3_TxCompDesc),
325 				    tq->comp_ring.base, tq->comp_ring.basePA);
326 		tq->comp_ring.base = NULL;
327 	}
328 	kfree(tq->buf_info);
329 	tq->buf_info = NULL;
330 }
331 
332 
333 static void
334 vmxnet3_tq_init(struct vmxnet3_tx_queue *tq,
335 		struct vmxnet3_adapter *adapter)
336 {
337 	int i;
338 
339 	/* reset the tx ring contents to 0 and reset the tx ring states */
340 	memset(tq->tx_ring.base, 0, tq->tx_ring.size *
341 	       sizeof(struct Vmxnet3_TxDesc));
342 	tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
343 	tq->tx_ring.gen = VMXNET3_INIT_GEN;
344 
345 	memset(tq->data_ring.base, 0, tq->data_ring.size *
346 	       sizeof(struct Vmxnet3_TxDataDesc));
347 
348 	/* reset the tx comp ring contents to 0 and reset comp ring states */
349 	memset(tq->comp_ring.base, 0, tq->comp_ring.size *
350 	       sizeof(struct Vmxnet3_TxCompDesc));
351 	tq->comp_ring.next2proc = 0;
352 	tq->comp_ring.gen = VMXNET3_INIT_GEN;
353 
354 	/* reset the bookkeeping data */
355 	memset(tq->buf_info, 0, sizeof(tq->buf_info[0]) * tq->tx_ring.size);
356 	for (i = 0; i < tq->tx_ring.size; i++)
357 		tq->buf_info[i].map_type = VMXNET3_MAP_NONE;
358 
359 	/* stats are not reset */
360 }
361 
362 
363 static int
364 vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
365 		  struct vmxnet3_adapter *adapter)
366 {
367 	BUG_ON(tq->tx_ring.base || tq->data_ring.base ||
368 	       tq->comp_ring.base || tq->buf_info);
369 
370 	tq->tx_ring.base = pci_alloc_consistent(adapter->pdev, tq->tx_ring.size
371 			   * sizeof(struct Vmxnet3_TxDesc),
372 			   &tq->tx_ring.basePA);
373 	if (!tq->tx_ring.base) {
374 		printk(KERN_ERR "%s: failed to allocate tx ring\n",
375 		       adapter->netdev->name);
376 		goto err;
377 	}
378 
379 	tq->data_ring.base = pci_alloc_consistent(adapter->pdev,
380 			     tq->data_ring.size *
381 			     sizeof(struct Vmxnet3_TxDataDesc),
382 			     &tq->data_ring.basePA);
383 	if (!tq->data_ring.base) {
384 		printk(KERN_ERR "%s: failed to allocate data ring\n",
385 		       adapter->netdev->name);
386 		goto err;
387 	}
388 
389 	tq->comp_ring.base = pci_alloc_consistent(adapter->pdev,
390 			     tq->comp_ring.size *
391 			     sizeof(struct Vmxnet3_TxCompDesc),
392 			     &tq->comp_ring.basePA);
393 	if (!tq->comp_ring.base) {
394 		printk(KERN_ERR "%s: failed to allocate tx comp ring\n",
395 		       adapter->netdev->name);
396 		goto err;
397 	}
398 
399 	tq->buf_info = kcalloc(tq->tx_ring.size, sizeof(tq->buf_info[0]),
400 			       GFP_KERNEL);
401 	if (!tq->buf_info) {
402 		printk(KERN_ERR "%s: failed to allocate tx bufinfo\n",
403 		       adapter->netdev->name);
404 		goto err;
405 	}
406 
407 	return 0;
408 
409 err:
410 	vmxnet3_tq_destroy(tq, adapter);
411 	return -ENOMEM;
412 }
413 
414 
415 /*
416  *    starting from ring->next2fill, allocate rx buffers for the given ring
417  *    of the rx queue and update the rx desc. stop after @num_to_alloc buffers
418  *    are allocated or allocation fails
419  */
420 
421 static int
422 vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
423 			int num_to_alloc, struct vmxnet3_adapter *adapter)
424 {
425 	int num_allocated = 0;
426 	struct vmxnet3_rx_buf_info *rbi_base = rq->buf_info[ring_idx];
427 	struct vmxnet3_cmd_ring *ring = &rq->rx_ring[ring_idx];
428 	u32 val;
429 
430 	while (num_allocated < num_to_alloc) {
431 		struct vmxnet3_rx_buf_info *rbi;
432 		union Vmxnet3_GenericDesc *gd;
433 
434 		rbi = rbi_base + ring->next2fill;
435 		gd = ring->base + ring->next2fill;
436 
437 		if (rbi->buf_type == VMXNET3_RX_BUF_SKB) {
438 			if (rbi->skb == NULL) {
439 				rbi->skb = dev_alloc_skb(rbi->len +
440 							 NET_IP_ALIGN);
441 				if (unlikely(rbi->skb == NULL)) {
442 					rq->stats.rx_buf_alloc_failure++;
443 					break;
444 				}
445 				rbi->skb->dev = adapter->netdev;
446 
447 				skb_reserve(rbi->skb, NET_IP_ALIGN);
448 				rbi->dma_addr = pci_map_single(adapter->pdev,
449 						rbi->skb->data, rbi->len,
450 						PCI_DMA_FROMDEVICE);
451 			} else {
452 				/* rx buffer skipped by the device */
453 			}
454 			val = VMXNET3_RXD_BTYPE_HEAD << VMXNET3_RXD_BTYPE_SHIFT;
455 		} else {
456 			BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_PAGE ||
457 			       rbi->len  != PAGE_SIZE);
458 
459 			if (rbi->page == NULL) {
460 				rbi->page = alloc_page(GFP_ATOMIC);
461 				if (unlikely(rbi->page == NULL)) {
462 					rq->stats.rx_buf_alloc_failure++;
463 					break;
464 				}
465 				rbi->dma_addr = pci_map_page(adapter->pdev,
466 						rbi->page, 0, PAGE_SIZE,
467 						PCI_DMA_FROMDEVICE);
468 			} else {
469 				/* rx buffers skipped by the device */
470 			}
471 			val = VMXNET3_RXD_BTYPE_BODY << VMXNET3_RXD_BTYPE_SHIFT;
472 		}
473 
474 		BUG_ON(rbi->dma_addr == 0);
475 		gd->rxd.addr = rbi->dma_addr;
476 		gd->dword[2] = (ring->gen << VMXNET3_RXD_GEN_SHIFT) | val |
477 				rbi->len;
478 
479 		num_allocated++;
480 		vmxnet3_cmd_ring_adv_next2fill(ring);
481 	}
482 	rq->uncommitted[ring_idx] += num_allocated;
483 
484 	dev_dbg(&adapter->netdev->dev,
485 		"alloc_rx_buf: %d allocated, next2fill %u, next2comp "
486 		"%u, uncommited %u\n", num_allocated, ring->next2fill,
487 		ring->next2comp, rq->uncommitted[ring_idx]);
488 
489 	/* so that the device can distinguish a full ring and an empty ring */
490 	BUG_ON(num_allocated != 0 && ring->next2fill == ring->next2comp);
491 
492 	return num_allocated;
493 }
494 
495 
496 static void
497 vmxnet3_append_frag(struct sk_buff *skb, struct Vmxnet3_RxCompDesc *rcd,
498 		    struct vmxnet3_rx_buf_info *rbi)
499 {
500 	struct skb_frag_struct *frag = skb_shinfo(skb)->frags +
501 		skb_shinfo(skb)->nr_frags;
502 
503 	BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
504 
505 	frag->page = rbi->page;
506 	frag->page_offset = 0;
507 	frag->size = rcd->len;
508 	skb->data_len += frag->size;
509 	skb_shinfo(skb)->nr_frags++;
510 }
511 
512 
513 static void
514 vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
515 		struct vmxnet3_tx_queue *tq, struct pci_dev *pdev,
516 		struct vmxnet3_adapter *adapter)
517 {
518 	u32 dw2, len;
519 	unsigned long buf_offset;
520 	int i;
521 	union Vmxnet3_GenericDesc *gdesc;
522 	struct vmxnet3_tx_buf_info *tbi = NULL;
523 
524 	BUG_ON(ctx->copy_size > skb_headlen(skb));
525 
526 	/* use the previous gen bit for the SOP desc */
527 	dw2 = (tq->tx_ring.gen ^ 0x1) << VMXNET3_TXD_GEN_SHIFT;
528 
529 	ctx->sop_txd = tq->tx_ring.base + tq->tx_ring.next2fill;
530 	gdesc = ctx->sop_txd; /* both loops below can be skipped */
531 
532 	/* no need to map the buffer if headers are copied */
533 	if (ctx->copy_size) {
534 		ctx->sop_txd->txd.addr = tq->data_ring.basePA +
535 					tq->tx_ring.next2fill *
536 					sizeof(struct Vmxnet3_TxDataDesc);
537 		ctx->sop_txd->dword[2] = dw2 | ctx->copy_size;
538 		ctx->sop_txd->dword[3] = 0;
539 
540 		tbi = tq->buf_info + tq->tx_ring.next2fill;
541 		tbi->map_type = VMXNET3_MAP_NONE;
542 
543 		dev_dbg(&adapter->netdev->dev,
544 			"txd[%u]: 0x%Lx 0x%x 0x%x\n",
545 			tq->tx_ring.next2fill, ctx->sop_txd->txd.addr,
546 			ctx->sop_txd->dword[2], ctx->sop_txd->dword[3]);
547 		vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
548 
549 		/* use the right gen for non-SOP desc */
550 		dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
551 	}
552 
553 	/* linear part can use multiple tx desc if it's big */
554 	len = skb_headlen(skb) - ctx->copy_size;
555 	buf_offset = ctx->copy_size;
556 	while (len) {
557 		u32 buf_size;
558 
559 		buf_size = len > VMXNET3_MAX_TX_BUF_SIZE ?
560 			   VMXNET3_MAX_TX_BUF_SIZE : len;
561 
562 		tbi = tq->buf_info + tq->tx_ring.next2fill;
563 		tbi->map_type = VMXNET3_MAP_SINGLE;
564 		tbi->dma_addr = pci_map_single(adapter->pdev,
565 				skb->data + buf_offset, buf_size,
566 				PCI_DMA_TODEVICE);
567 
568 		tbi->len = buf_size; /* this automatically convert 2^14 to 0 */
569 
570 		gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
571 		BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
572 
573 		gdesc->txd.addr = tbi->dma_addr;
574 		gdesc->dword[2] = dw2 | buf_size;
575 		gdesc->dword[3] = 0;
576 
577 		dev_dbg(&adapter->netdev->dev,
578 			"txd[%u]: 0x%Lx 0x%x 0x%x\n",
579 			tq->tx_ring.next2fill, gdesc->txd.addr,
580 			gdesc->dword[2], gdesc->dword[3]);
581 		vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
582 		dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
583 
584 		len -= buf_size;
585 		buf_offset += buf_size;
586 	}
587 
588 	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
589 		struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
590 
591 		tbi = tq->buf_info + tq->tx_ring.next2fill;
592 		tbi->map_type = VMXNET3_MAP_PAGE;
593 		tbi->dma_addr = pci_map_page(adapter->pdev, frag->page,
594 					     frag->page_offset, frag->size,
595 					     PCI_DMA_TODEVICE);
596 
597 		tbi->len = frag->size;
598 
599 		gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
600 		BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
601 
602 		gdesc->txd.addr = tbi->dma_addr;
603 		gdesc->dword[2] = dw2 | frag->size;
604 		gdesc->dword[3] = 0;
605 
606 		dev_dbg(&adapter->netdev->dev,
607 			"txd[%u]: 0x%llu %u %u\n",
608 			tq->tx_ring.next2fill, gdesc->txd.addr,
609 			gdesc->dword[2], gdesc->dword[3]);
610 		vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
611 		dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
612 	}
613 
614 	ctx->eop_txd = gdesc;
615 
616 	/* set the last buf_info for the pkt */
617 	tbi->skb = skb;
618 	tbi->sop_idx = ctx->sop_txd - tq->tx_ring.base;
619 }
620 
621 
622 /*
623  *    parse and copy relevant protocol headers:
624  *      For a tso pkt, relevant headers are L2/3/4 including options
625  *      For a pkt requesting csum offloading, they are L2/3 and may include L4
626  *      if it's a TCP/UDP pkt
627  *
628  * Returns:
629  *    -1:  error happens during parsing
630  *     0:  protocol headers parsed, but too big to be copied
631  *     1:  protocol headers parsed and copied
632  *
633  * Other effects:
634  *    1. related *ctx fields are updated.
635  *    2. ctx->copy_size is # of bytes copied
636  *    3. the portion copied is guaranteed to be in the linear part
637  *
638  */
639 static int
640 vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
641 			   struct vmxnet3_tx_ctx *ctx,
642 			   struct vmxnet3_adapter *adapter)
643 {
644 	struct Vmxnet3_TxDataDesc *tdd;
645 
646 	if (ctx->mss) {
647 		ctx->eth_ip_hdr_size = skb_transport_offset(skb);
648 		ctx->l4_hdr_size = ((struct tcphdr *)
649 				   skb_transport_header(skb))->doff * 4;
650 		ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size;
651 	} else {
652 		unsigned int pull_size;
653 
654 		if (skb->ip_summed == CHECKSUM_PARTIAL) {
655 			ctx->eth_ip_hdr_size = skb_transport_offset(skb);
656 
657 			if (ctx->ipv4) {
658 				struct iphdr *iph = (struct iphdr *)
659 						    skb_network_header(skb);
660 				if (iph->protocol == IPPROTO_TCP) {
661 					pull_size = ctx->eth_ip_hdr_size +
662 						    sizeof(struct tcphdr);
663 
664 					if (unlikely(!pskb_may_pull(skb,
665 								pull_size))) {
666 						goto err;
667 					}
668 					ctx->l4_hdr_size = ((struct tcphdr *)
669 					   skb_transport_header(skb))->doff * 4;
670 				} else if (iph->protocol == IPPROTO_UDP) {
671 					ctx->l4_hdr_size =
672 							sizeof(struct udphdr);
673 				} else {
674 					ctx->l4_hdr_size = 0;
675 				}
676 			} else {
677 				/* for simplicity, don't copy L4 headers */
678 				ctx->l4_hdr_size = 0;
679 			}
680 			ctx->copy_size = ctx->eth_ip_hdr_size +
681 					 ctx->l4_hdr_size;
682 		} else {
683 			ctx->eth_ip_hdr_size = 0;
684 			ctx->l4_hdr_size = 0;
685 			/* copy as much as allowed */
686 			ctx->copy_size = min((unsigned int)VMXNET3_HDR_COPY_SIZE
687 					     , skb_headlen(skb));
688 		}
689 
690 		/* make sure headers are accessible directly */
691 		if (unlikely(!pskb_may_pull(skb, ctx->copy_size)))
692 			goto err;
693 	}
694 
695 	if (unlikely(ctx->copy_size > VMXNET3_HDR_COPY_SIZE)) {
696 		tq->stats.oversized_hdr++;
697 		ctx->copy_size = 0;
698 		return 0;
699 	}
700 
701 	tdd = tq->data_ring.base + tq->tx_ring.next2fill;
702 
703 	memcpy(tdd->data, skb->data, ctx->copy_size);
704 	dev_dbg(&adapter->netdev->dev,
705 		"copy %u bytes to dataRing[%u]\n",
706 		ctx->copy_size, tq->tx_ring.next2fill);
707 	return 1;
708 
709 err:
710 	return -1;
711 }
712 
713 
714 static void
715 vmxnet3_prepare_tso(struct sk_buff *skb,
716 		    struct vmxnet3_tx_ctx *ctx)
717 {
718 	struct tcphdr *tcph = (struct tcphdr *)skb_transport_header(skb);
719 	if (ctx->ipv4) {
720 		struct iphdr *iph = (struct iphdr *)skb_network_header(skb);
721 		iph->check = 0;
722 		tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 0,
723 						 IPPROTO_TCP, 0);
724 	} else {
725 		struct ipv6hdr *iph = (struct ipv6hdr *)skb_network_header(skb);
726 		tcph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, 0,
727 					       IPPROTO_TCP, 0);
728 	}
729 }
730 
731 
732 /*
733  * Transmits a pkt thru a given tq
734  * Returns:
735  *    NETDEV_TX_OK:      descriptors are setup successfully
736  *    NETDEV_TX_OK:      error occured, the pkt is dropped
737  *    NETDEV_TX_BUSY:    tx ring is full, queue is stopped
738  *
739  * Side-effects:
740  *    1. tx ring may be changed
741  *    2. tq stats may be updated accordingly
742  *    3. shared->txNumDeferred may be updated
743  */
744 
745 static int
746 vmxnet3_tq_xmit(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
747 		struct vmxnet3_adapter *adapter, struct net_device *netdev)
748 {
749 	int ret;
750 	u32 count;
751 	unsigned long flags;
752 	struct vmxnet3_tx_ctx ctx;
753 	union Vmxnet3_GenericDesc *gdesc;
754 
755 	/* conservatively estimate # of descriptors to use */
756 	count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) +
757 		skb_shinfo(skb)->nr_frags + 1;
758 
759 	ctx.ipv4 = (skb->protocol == __constant_ntohs(ETH_P_IP));
760 
761 	ctx.mss = skb_shinfo(skb)->gso_size;
762 	if (ctx.mss) {
763 		if (skb_header_cloned(skb)) {
764 			if (unlikely(pskb_expand_head(skb, 0, 0,
765 						      GFP_ATOMIC) != 0)) {
766 				tq->stats.drop_tso++;
767 				goto drop_pkt;
768 			}
769 			tq->stats.copy_skb_header++;
770 		}
771 		vmxnet3_prepare_tso(skb, &ctx);
772 	} else {
773 		if (unlikely(count > VMXNET3_MAX_TXD_PER_PKT)) {
774 
775 			/* non-tso pkts must not use more than
776 			 * VMXNET3_MAX_TXD_PER_PKT entries
777 			 */
778 			if (skb_linearize(skb) != 0) {
779 				tq->stats.drop_too_many_frags++;
780 				goto drop_pkt;
781 			}
782 			tq->stats.linearized++;
783 
784 			/* recalculate the # of descriptors to use */
785 			count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1;
786 		}
787 	}
788 
789 	ret = vmxnet3_parse_and_copy_hdr(skb, tq, &ctx, adapter);
790 	if (ret >= 0) {
791 		BUG_ON(ret <= 0 && ctx.copy_size != 0);
792 		/* hdrs parsed, check against other limits */
793 		if (ctx.mss) {
794 			if (unlikely(ctx.eth_ip_hdr_size + ctx.l4_hdr_size >
795 				     VMXNET3_MAX_TX_BUF_SIZE)) {
796 				goto hdr_too_big;
797 			}
798 		} else {
799 			if (skb->ip_summed == CHECKSUM_PARTIAL) {
800 				if (unlikely(ctx.eth_ip_hdr_size +
801 					     skb->csum_offset >
802 					     VMXNET3_MAX_CSUM_OFFSET)) {
803 					goto hdr_too_big;
804 				}
805 			}
806 		}
807 	} else {
808 		tq->stats.drop_hdr_inspect_err++;
809 		goto drop_pkt;
810 	}
811 
812 	spin_lock_irqsave(&tq->tx_lock, flags);
813 
814 	if (count > vmxnet3_cmd_ring_desc_avail(&tq->tx_ring)) {
815 		tq->stats.tx_ring_full++;
816 		dev_dbg(&adapter->netdev->dev,
817 			"tx queue stopped on %s, next2comp %u"
818 			" next2fill %u\n", adapter->netdev->name,
819 			tq->tx_ring.next2comp, tq->tx_ring.next2fill);
820 
821 		vmxnet3_tq_stop(tq, adapter);
822 		spin_unlock_irqrestore(&tq->tx_lock, flags);
823 		return NETDEV_TX_BUSY;
824 	}
825 
826 	/* fill tx descs related to addr & len */
827 	vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter);
828 
829 	/* setup the EOP desc */
830 	ctx.eop_txd->dword[3] = VMXNET3_TXD_CQ | VMXNET3_TXD_EOP;
831 
832 	/* setup the SOP desc */
833 	gdesc = ctx.sop_txd;
834 	if (ctx.mss) {
835 		gdesc->txd.hlen = ctx.eth_ip_hdr_size + ctx.l4_hdr_size;
836 		gdesc->txd.om = VMXNET3_OM_TSO;
837 		gdesc->txd.msscof = ctx.mss;
838 		tq->shared->txNumDeferred += (skb->len - gdesc->txd.hlen +
839 					     ctx.mss - 1) / ctx.mss;
840 	} else {
841 		if (skb->ip_summed == CHECKSUM_PARTIAL) {
842 			gdesc->txd.hlen = ctx.eth_ip_hdr_size;
843 			gdesc->txd.om = VMXNET3_OM_CSUM;
844 			gdesc->txd.msscof = ctx.eth_ip_hdr_size +
845 					    skb->csum_offset;
846 		} else {
847 			gdesc->txd.om = 0;
848 			gdesc->txd.msscof = 0;
849 		}
850 		tq->shared->txNumDeferred++;
851 	}
852 
853 	if (vlan_tx_tag_present(skb)) {
854 		gdesc->txd.ti = 1;
855 		gdesc->txd.tci = vlan_tx_tag_get(skb);
856 	}
857 
858 	wmb();
859 
860 	/* finally flips the GEN bit of the SOP desc */
861 	gdesc->dword[2] ^= VMXNET3_TXD_GEN;
862 	dev_dbg(&adapter->netdev->dev,
863 		"txd[%u]: SOP 0x%Lx 0x%x 0x%x\n",
864 		(u32)((union Vmxnet3_GenericDesc *)ctx.sop_txd -
865 		tq->tx_ring.base), gdesc->txd.addr, gdesc->dword[2],
866 		gdesc->dword[3]);
867 
868 	spin_unlock_irqrestore(&tq->tx_lock, flags);
869 
870 	if (tq->shared->txNumDeferred >= tq->shared->txThreshold) {
871 		tq->shared->txNumDeferred = 0;
872 		VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_TXPROD,
873 				       tq->tx_ring.next2fill);
874 	}
875 	netdev->trans_start = jiffies;
876 
877 	return NETDEV_TX_OK;
878 
879 hdr_too_big:
880 	tq->stats.drop_oversized_hdr++;
881 drop_pkt:
882 	tq->stats.drop_total++;
883 	dev_kfree_skb(skb);
884 	return NETDEV_TX_OK;
885 }
886 
887 
888 static netdev_tx_t
889 vmxnet3_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
890 {
891 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
892 	struct vmxnet3_tx_queue *tq = &adapter->tx_queue;
893 
894 	return vmxnet3_tq_xmit(skb, tq, adapter, netdev);
895 }
896 
897 
898 static void
899 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
900 		struct sk_buff *skb,
901 		union Vmxnet3_GenericDesc *gdesc)
902 {
903 	if (!gdesc->rcd.cnc && adapter->rxcsum) {
904 		/* typical case: TCP/UDP over IP and both csums are correct */
905 		if ((gdesc->dword[3] & VMXNET3_RCD_CSUM_OK) ==
906 							VMXNET3_RCD_CSUM_OK) {
907 			skb->ip_summed = CHECKSUM_UNNECESSARY;
908 			BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
909 			BUG_ON(!(gdesc->rcd.v4  || gdesc->rcd.v6));
910 			BUG_ON(gdesc->rcd.frg);
911 		} else {
912 			if (gdesc->rcd.csum) {
913 				skb->csum = htons(gdesc->rcd.csum);
914 				skb->ip_summed = CHECKSUM_PARTIAL;
915 			} else {
916 				skb->ip_summed = CHECKSUM_NONE;
917 			}
918 		}
919 	} else {
920 		skb->ip_summed = CHECKSUM_NONE;
921 	}
922 }
923 
924 
925 static void
926 vmxnet3_rx_error(struct vmxnet3_rx_queue *rq, struct Vmxnet3_RxCompDesc *rcd,
927 		 struct vmxnet3_rx_ctx *ctx,  struct vmxnet3_adapter *adapter)
928 {
929 	rq->stats.drop_err++;
930 	if (!rcd->fcs)
931 		rq->stats.drop_fcs++;
932 
933 	rq->stats.drop_total++;
934 
935 	/*
936 	 * We do not unmap and chain the rx buffer to the skb.
937 	 * We basically pretend this buffer is not used and will be recycled
938 	 * by vmxnet3_rq_alloc_rx_buf()
939 	 */
940 
941 	/*
942 	 * ctx->skb may be NULL if this is the first and the only one
943 	 * desc for the pkt
944 	 */
945 	if (ctx->skb)
946 		dev_kfree_skb_irq(ctx->skb);
947 
948 	ctx->skb = NULL;
949 }
950 
951 
952 static int
953 vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
954 		       struct vmxnet3_adapter *adapter, int quota)
955 {
956 	static u32 rxprod_reg[2] = {VMXNET3_REG_RXPROD, VMXNET3_REG_RXPROD2};
957 	u32 num_rxd = 0;
958 	struct Vmxnet3_RxCompDesc *rcd;
959 	struct vmxnet3_rx_ctx *ctx = &rq->rx_ctx;
960 
961 	rcd = &rq->comp_ring.base[rq->comp_ring.next2proc].rcd;
962 	while (rcd->gen == rq->comp_ring.gen) {
963 		struct vmxnet3_rx_buf_info *rbi;
964 		struct sk_buff *skb;
965 		int num_to_alloc;
966 		struct Vmxnet3_RxDesc *rxd;
967 		u32 idx, ring_idx;
968 
969 		if (num_rxd >= quota) {
970 			/* we may stop even before we see the EOP desc of
971 			 * the current pkt
972 			 */
973 			break;
974 		}
975 		num_rxd++;
976 
977 		idx = rcd->rxdIdx;
978 		ring_idx = rcd->rqID == rq->qid ? 0 : 1;
979 
980 		rxd = &rq->rx_ring[ring_idx].base[idx].rxd;
981 		rbi = rq->buf_info[ring_idx] + idx;
982 
983 		BUG_ON(rxd->addr != rbi->dma_addr || rxd->len != rbi->len);
984 
985 		if (unlikely(rcd->eop && rcd->err)) {
986 			vmxnet3_rx_error(rq, rcd, ctx, adapter);
987 			goto rcd_done;
988 		}
989 
990 		if (rcd->sop) { /* first buf of the pkt */
991 			BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_HEAD ||
992 			       rcd->rqID != rq->qid);
993 
994 			BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_SKB);
995 			BUG_ON(ctx->skb != NULL || rbi->skb == NULL);
996 
997 			if (unlikely(rcd->len == 0)) {
998 				/* Pretend the rx buffer is skipped. */
999 				BUG_ON(!(rcd->sop && rcd->eop));
1000 				dev_dbg(&adapter->netdev->dev,
1001 					"rxRing[%u][%u] 0 length\n",
1002 					ring_idx, idx);
1003 				goto rcd_done;
1004 			}
1005 
1006 			ctx->skb = rbi->skb;
1007 			rbi->skb = NULL;
1008 
1009 			pci_unmap_single(adapter->pdev, rbi->dma_addr, rbi->len,
1010 					 PCI_DMA_FROMDEVICE);
1011 
1012 			skb_put(ctx->skb, rcd->len);
1013 		} else {
1014 			BUG_ON(ctx->skb == NULL);
1015 			/* non SOP buffer must be type 1 in most cases */
1016 			if (rbi->buf_type == VMXNET3_RX_BUF_PAGE) {
1017 				BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_BODY);
1018 
1019 				if (rcd->len) {
1020 					pci_unmap_page(adapter->pdev,
1021 						       rbi->dma_addr, rbi->len,
1022 						       PCI_DMA_FROMDEVICE);
1023 
1024 					vmxnet3_append_frag(ctx->skb, rcd, rbi);
1025 					rbi->page = NULL;
1026 				}
1027 			} else {
1028 				/*
1029 				 * The only time a non-SOP buffer is type 0 is
1030 				 * when it's EOP and error flag is raised, which
1031 				 * has already been handled.
1032 				 */
1033 				BUG_ON(true);
1034 			}
1035 		}
1036 
1037 		skb = ctx->skb;
1038 		if (rcd->eop) {
1039 			skb->len += skb->data_len;
1040 			skb->truesize += skb->data_len;
1041 
1042 			vmxnet3_rx_csum(adapter, skb,
1043 					(union Vmxnet3_GenericDesc *)rcd);
1044 			skb->protocol = eth_type_trans(skb, adapter->netdev);
1045 
1046 			if (unlikely(adapter->vlan_grp && rcd->ts)) {
1047 				vlan_hwaccel_receive_skb(skb,
1048 						adapter->vlan_grp, rcd->tci);
1049 			} else {
1050 				netif_receive_skb(skb);
1051 			}
1052 
1053 			adapter->netdev->last_rx = jiffies;
1054 			ctx->skb = NULL;
1055 		}
1056 
1057 rcd_done:
1058 		/* device may skip some rx descs */
1059 		rq->rx_ring[ring_idx].next2comp = idx;
1060 		VMXNET3_INC_RING_IDX_ONLY(rq->rx_ring[ring_idx].next2comp,
1061 					  rq->rx_ring[ring_idx].size);
1062 
1063 		/* refill rx buffers frequently to avoid starving the h/w */
1064 		num_to_alloc = vmxnet3_cmd_ring_desc_avail(rq->rx_ring +
1065 							   ring_idx);
1066 		if (unlikely(num_to_alloc > VMXNET3_RX_ALLOC_THRESHOLD(rq,
1067 							ring_idx, adapter))) {
1068 			vmxnet3_rq_alloc_rx_buf(rq, ring_idx, num_to_alloc,
1069 						adapter);
1070 
1071 			/* if needed, update the register */
1072 			if (unlikely(rq->shared->updateRxProd)) {
1073 				VMXNET3_WRITE_BAR0_REG(adapter,
1074 					rxprod_reg[ring_idx] + rq->qid * 8,
1075 					rq->rx_ring[ring_idx].next2fill);
1076 				rq->uncommitted[ring_idx] = 0;
1077 			}
1078 		}
1079 
1080 		vmxnet3_comp_ring_adv_next2proc(&rq->comp_ring);
1081 		rcd = &rq->comp_ring.base[rq->comp_ring.next2proc].rcd;
1082 	}
1083 
1084 	return num_rxd;
1085 }
1086 
1087 
1088 static void
1089 vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,
1090 		   struct vmxnet3_adapter *adapter)
1091 {
1092 	u32 i, ring_idx;
1093 	struct Vmxnet3_RxDesc *rxd;
1094 
1095 	for (ring_idx = 0; ring_idx < 2; ring_idx++) {
1096 		for (i = 0; i < rq->rx_ring[ring_idx].size; i++) {
1097 			rxd = &rq->rx_ring[ring_idx].base[i].rxd;
1098 
1099 			if (rxd->btype == VMXNET3_RXD_BTYPE_HEAD &&
1100 					rq->buf_info[ring_idx][i].skb) {
1101 				pci_unmap_single(adapter->pdev, rxd->addr,
1102 						 rxd->len, PCI_DMA_FROMDEVICE);
1103 				dev_kfree_skb(rq->buf_info[ring_idx][i].skb);
1104 				rq->buf_info[ring_idx][i].skb = NULL;
1105 			} else if (rxd->btype == VMXNET3_RXD_BTYPE_BODY &&
1106 					rq->buf_info[ring_idx][i].page) {
1107 				pci_unmap_page(adapter->pdev, rxd->addr,
1108 					       rxd->len, PCI_DMA_FROMDEVICE);
1109 				put_page(rq->buf_info[ring_idx][i].page);
1110 				rq->buf_info[ring_idx][i].page = NULL;
1111 			}
1112 		}
1113 
1114 		rq->rx_ring[ring_idx].gen = VMXNET3_INIT_GEN;
1115 		rq->rx_ring[ring_idx].next2fill =
1116 					rq->rx_ring[ring_idx].next2comp = 0;
1117 		rq->uncommitted[ring_idx] = 0;
1118 	}
1119 
1120 	rq->comp_ring.gen = VMXNET3_INIT_GEN;
1121 	rq->comp_ring.next2proc = 0;
1122 }
1123 
1124 
1125 void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
1126 			struct vmxnet3_adapter *adapter)
1127 {
1128 	int i;
1129 	int j;
1130 
1131 	/* all rx buffers must have already been freed */
1132 	for (i = 0; i < 2; i++) {
1133 		if (rq->buf_info[i]) {
1134 			for (j = 0; j < rq->rx_ring[i].size; j++)
1135 				BUG_ON(rq->buf_info[i][j].page != NULL);
1136 		}
1137 	}
1138 
1139 
1140 	kfree(rq->buf_info[0]);
1141 
1142 	for (i = 0; i < 2; i++) {
1143 		if (rq->rx_ring[i].base) {
1144 			pci_free_consistent(adapter->pdev, rq->rx_ring[i].size
1145 					    * sizeof(struct Vmxnet3_RxDesc),
1146 					    rq->rx_ring[i].base,
1147 					    rq->rx_ring[i].basePA);
1148 			rq->rx_ring[i].base = NULL;
1149 		}
1150 		rq->buf_info[i] = NULL;
1151 	}
1152 
1153 	if (rq->comp_ring.base) {
1154 		pci_free_consistent(adapter->pdev, rq->comp_ring.size *
1155 				    sizeof(struct Vmxnet3_RxCompDesc),
1156 				    rq->comp_ring.base, rq->comp_ring.basePA);
1157 		rq->comp_ring.base = NULL;
1158 	}
1159 }
1160 
1161 
1162 static int
1163 vmxnet3_rq_init(struct vmxnet3_rx_queue *rq,
1164 		struct vmxnet3_adapter  *adapter)
1165 {
1166 	int i;
1167 
1168 	/* initialize buf_info */
1169 	for (i = 0; i < rq->rx_ring[0].size; i++) {
1170 
1171 		/* 1st buf for a pkt is skbuff */
1172 		if (i % adapter->rx_buf_per_pkt == 0) {
1173 			rq->buf_info[0][i].buf_type = VMXNET3_RX_BUF_SKB;
1174 			rq->buf_info[0][i].len = adapter->skb_buf_size;
1175 		} else { /* subsequent bufs for a pkt is frag */
1176 			rq->buf_info[0][i].buf_type = VMXNET3_RX_BUF_PAGE;
1177 			rq->buf_info[0][i].len = PAGE_SIZE;
1178 		}
1179 	}
1180 	for (i = 0; i < rq->rx_ring[1].size; i++) {
1181 		rq->buf_info[1][i].buf_type = VMXNET3_RX_BUF_PAGE;
1182 		rq->buf_info[1][i].len = PAGE_SIZE;
1183 	}
1184 
1185 	/* reset internal state and allocate buffers for both rings */
1186 	for (i = 0; i < 2; i++) {
1187 		rq->rx_ring[i].next2fill = rq->rx_ring[i].next2comp = 0;
1188 		rq->uncommitted[i] = 0;
1189 
1190 		memset(rq->rx_ring[i].base, 0, rq->rx_ring[i].size *
1191 		       sizeof(struct Vmxnet3_RxDesc));
1192 		rq->rx_ring[i].gen = VMXNET3_INIT_GEN;
1193 	}
1194 	if (vmxnet3_rq_alloc_rx_buf(rq, 0, rq->rx_ring[0].size - 1,
1195 				    adapter) == 0) {
1196 		/* at least has 1 rx buffer for the 1st ring */
1197 		return -ENOMEM;
1198 	}
1199 	vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter);
1200 
1201 	/* reset the comp ring */
1202 	rq->comp_ring.next2proc = 0;
1203 	memset(rq->comp_ring.base, 0, rq->comp_ring.size *
1204 	       sizeof(struct Vmxnet3_RxCompDesc));
1205 	rq->comp_ring.gen = VMXNET3_INIT_GEN;
1206 
1207 	/* reset rxctx */
1208 	rq->rx_ctx.skb = NULL;
1209 
1210 	/* stats are not reset */
1211 	return 0;
1212 }
1213 
1214 
1215 static int
1216 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter)
1217 {
1218 	int i;
1219 	size_t sz;
1220 	struct vmxnet3_rx_buf_info *bi;
1221 
1222 	for (i = 0; i < 2; i++) {
1223 
1224 		sz = rq->rx_ring[i].size * sizeof(struct Vmxnet3_RxDesc);
1225 		rq->rx_ring[i].base = pci_alloc_consistent(adapter->pdev, sz,
1226 							&rq->rx_ring[i].basePA);
1227 		if (!rq->rx_ring[i].base) {
1228 			printk(KERN_ERR "%s: failed to allocate rx ring %d\n",
1229 			       adapter->netdev->name, i);
1230 			goto err;
1231 		}
1232 	}
1233 
1234 	sz = rq->comp_ring.size * sizeof(struct Vmxnet3_RxCompDesc);
1235 	rq->comp_ring.base = pci_alloc_consistent(adapter->pdev, sz,
1236 						  &rq->comp_ring.basePA);
1237 	if (!rq->comp_ring.base) {
1238 		printk(KERN_ERR "%s: failed to allocate rx comp ring\n",
1239 		       adapter->netdev->name);
1240 		goto err;
1241 	}
1242 
1243 	sz = sizeof(struct vmxnet3_rx_buf_info) * (rq->rx_ring[0].size +
1244 						   rq->rx_ring[1].size);
1245 	bi = kmalloc(sz, GFP_KERNEL);
1246 	if (!bi) {
1247 		printk(KERN_ERR "%s: failed to allocate rx bufinfo\n",
1248 		       adapter->netdev->name);
1249 		goto err;
1250 	}
1251 	memset(bi, 0, sz);
1252 	rq->buf_info[0] = bi;
1253 	rq->buf_info[1] = bi + rq->rx_ring[0].size;
1254 
1255 	return 0;
1256 
1257 err:
1258 	vmxnet3_rq_destroy(rq, adapter);
1259 	return -ENOMEM;
1260 }
1261 
1262 
1263 static int
1264 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget)
1265 {
1266 	if (unlikely(adapter->shared->ecr))
1267 		vmxnet3_process_events(adapter);
1268 
1269 	vmxnet3_tq_tx_complete(&adapter->tx_queue, adapter);
1270 	return vmxnet3_rq_rx_complete(&adapter->rx_queue, adapter, budget);
1271 }
1272 
1273 
1274 static int
1275 vmxnet3_poll(struct napi_struct *napi, int budget)
1276 {
1277 	struct vmxnet3_adapter *adapter = container_of(napi,
1278 					  struct vmxnet3_adapter, napi);
1279 	int rxd_done;
1280 
1281 	rxd_done = vmxnet3_do_poll(adapter, budget);
1282 
1283 	if (rxd_done < budget) {
1284 		napi_complete(napi);
1285 		vmxnet3_enable_intr(adapter, 0);
1286 	}
1287 	return rxd_done;
1288 }
1289 
1290 
1291 /* Interrupt handler for vmxnet3  */
1292 static irqreturn_t
1293 vmxnet3_intr(int irq, void *dev_id)
1294 {
1295 	struct net_device *dev = dev_id;
1296 	struct vmxnet3_adapter *adapter = netdev_priv(dev);
1297 
1298 	if (unlikely(adapter->intr.type == VMXNET3_IT_INTX)) {
1299 		u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR);
1300 		if (unlikely(icr == 0))
1301 			/* not ours */
1302 			return IRQ_NONE;
1303 	}
1304 
1305 
1306 	/* disable intr if needed */
1307 	if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1308 		vmxnet3_disable_intr(adapter, 0);
1309 
1310 	napi_schedule(&adapter->napi);
1311 
1312 	return IRQ_HANDLED;
1313 }
1314 
1315 #ifdef CONFIG_NET_POLL_CONTROLLER
1316 
1317 
1318 /* netpoll callback. */
1319 static void
1320 vmxnet3_netpoll(struct net_device *netdev)
1321 {
1322 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1323 	int irq;
1324 
1325 #ifdef CONFIG_PCI_MSI
1326 	if (adapter->intr.type == VMXNET3_IT_MSIX)
1327 		irq = adapter->intr.msix_entries[0].vector;
1328 	else
1329 #endif
1330 		irq = adapter->pdev->irq;
1331 
1332 	disable_irq(irq);
1333 	vmxnet3_intr(irq, netdev);
1334 	enable_irq(irq);
1335 }
1336 #endif
1337 
1338 static int
1339 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
1340 {
1341 	int err;
1342 
1343 #ifdef CONFIG_PCI_MSI
1344 	if (adapter->intr.type == VMXNET3_IT_MSIX) {
1345 		/* we only use 1 MSI-X vector */
1346 		err = request_irq(adapter->intr.msix_entries[0].vector,
1347 				  vmxnet3_intr, 0, adapter->netdev->name,
1348 				  adapter->netdev);
1349 	} else
1350 #endif
1351 	if (adapter->intr.type == VMXNET3_IT_MSI) {
1352 		err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0,
1353 				  adapter->netdev->name, adapter->netdev);
1354 	} else {
1355 		err = request_irq(adapter->pdev->irq, vmxnet3_intr,
1356 				  IRQF_SHARED, adapter->netdev->name,
1357 				  adapter->netdev);
1358 	}
1359 
1360 	if (err)
1361 		printk(KERN_ERR "Failed to request irq %s (intr type:%d), error"
1362 		       ":%d\n", adapter->netdev->name, adapter->intr.type, err);
1363 
1364 
1365 	if (!err) {
1366 		int i;
1367 		/* init our intr settings */
1368 		for (i = 0; i < adapter->intr.num_intrs; i++)
1369 			adapter->intr.mod_levels[i] = UPT1_IML_ADAPTIVE;
1370 
1371 		/* next setup intr index for all intr sources */
1372 		adapter->tx_queue.comp_ring.intr_idx = 0;
1373 		adapter->rx_queue.comp_ring.intr_idx = 0;
1374 		adapter->intr.event_intr_idx = 0;
1375 
1376 		printk(KERN_INFO "%s: intr type %u, mode %u, %u vectors "
1377 		       "allocated\n", adapter->netdev->name, adapter->intr.type,
1378 		       adapter->intr.mask_mode, adapter->intr.num_intrs);
1379 	}
1380 
1381 	return err;
1382 }
1383 
1384 
1385 static void
1386 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter)
1387 {
1388 	BUG_ON(adapter->intr.type == VMXNET3_IT_AUTO ||
1389 	       adapter->intr.num_intrs <= 0);
1390 
1391 	switch (adapter->intr.type) {
1392 #ifdef CONFIG_PCI_MSI
1393 	case VMXNET3_IT_MSIX:
1394 	{
1395 		int i;
1396 
1397 		for (i = 0; i < adapter->intr.num_intrs; i++)
1398 			free_irq(adapter->intr.msix_entries[i].vector,
1399 				 adapter->netdev);
1400 		break;
1401 	}
1402 #endif
1403 	case VMXNET3_IT_MSI:
1404 		free_irq(adapter->pdev->irq, adapter->netdev);
1405 		break;
1406 	case VMXNET3_IT_INTX:
1407 		free_irq(adapter->pdev->irq, adapter->netdev);
1408 		break;
1409 	default:
1410 		BUG_ON(true);
1411 	}
1412 }
1413 
1414 
1415 static void
1416 vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
1417 {
1418 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1419 	struct Vmxnet3_DriverShared *shared = adapter->shared;
1420 	u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1421 
1422 	if (grp) {
1423 		/* add vlan rx stripping. */
1424 		if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) {
1425 			int i;
1426 			struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
1427 			adapter->vlan_grp = grp;
1428 
1429 			/* update FEATURES to device */
1430 			devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
1431 			VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1432 					       VMXNET3_CMD_UPDATE_FEATURE);
1433 			/*
1434 			 *  Clear entire vfTable; then enable untagged pkts.
1435 			 *  Note: setting one entry in vfTable to non-zero turns
1436 			 *  on VLAN rx filtering.
1437 			 */
1438 			for (i = 0; i < VMXNET3_VFT_SIZE; i++)
1439 				vfTable[i] = 0;
1440 
1441 			VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
1442 			VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1443 					       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1444 		} else {
1445 			printk(KERN_ERR "%s: vlan_rx_register when device has "
1446 			       "no NETIF_F_HW_VLAN_RX\n", netdev->name);
1447 		}
1448 	} else {
1449 		/* remove vlan rx stripping. */
1450 		struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
1451 		adapter->vlan_grp = NULL;
1452 
1453 		if (devRead->misc.uptFeatures & UPT1_F_RXVLAN) {
1454 			int i;
1455 
1456 			for (i = 0; i < VMXNET3_VFT_SIZE; i++) {
1457 				/* clear entire vfTable; this also disables
1458 				 * VLAN rx filtering
1459 				 */
1460 				vfTable[i] = 0;
1461 			}
1462 			VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1463 					       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1464 
1465 			/* update FEATURES to device */
1466 			devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
1467 			VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1468 					       VMXNET3_CMD_UPDATE_FEATURE);
1469 		}
1470 	}
1471 }
1472 
1473 
1474 static void
1475 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter)
1476 {
1477 	if (adapter->vlan_grp) {
1478 		u16 vid;
1479 		u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1480 		bool activeVlan = false;
1481 
1482 		for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
1483 			if (vlan_group_get_device(adapter->vlan_grp, vid)) {
1484 				VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1485 				activeVlan = true;
1486 			}
1487 		}
1488 		if (activeVlan) {
1489 			/* continue to allow untagged pkts */
1490 			VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
1491 		}
1492 	}
1493 }
1494 
1495 
1496 static void
1497 vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
1498 {
1499 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1500 	u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1501 
1502 	VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1503 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1504 			       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1505 }
1506 
1507 
1508 static void
1509 vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
1510 {
1511 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1512 	u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1513 
1514 	VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
1515 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1516 			       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1517 }
1518 
1519 
1520 static u8 *
1521 vmxnet3_copy_mc(struct net_device *netdev)
1522 {
1523 	u8 *buf = NULL;
1524 	u32 sz = netdev->mc_count * ETH_ALEN;
1525 
1526 	/* struct Vmxnet3_RxFilterConf.mfTableLen is u16. */
1527 	if (sz <= 0xffff) {
1528 		/* We may be called with BH disabled */
1529 		buf = kmalloc(sz, GFP_ATOMIC);
1530 		if (buf) {
1531 			int i;
1532 			struct dev_mc_list *mc = netdev->mc_list;
1533 
1534 			for (i = 0; i < netdev->mc_count; i++) {
1535 				BUG_ON(!mc);
1536 				memcpy(buf + i * ETH_ALEN, mc->dmi_addr,
1537 				       ETH_ALEN);
1538 				mc = mc->next;
1539 			}
1540 		}
1541 	}
1542 	return buf;
1543 }
1544 
1545 
1546 static void
1547 vmxnet3_set_mc(struct net_device *netdev)
1548 {
1549 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1550 	struct Vmxnet3_RxFilterConf *rxConf =
1551 					&adapter->shared->devRead.rxFilterConf;
1552 	u8 *new_table = NULL;
1553 	u32 new_mode = VMXNET3_RXM_UCAST;
1554 
1555 	if (netdev->flags & IFF_PROMISC)
1556 		new_mode |= VMXNET3_RXM_PROMISC;
1557 
1558 	if (netdev->flags & IFF_BROADCAST)
1559 		new_mode |= VMXNET3_RXM_BCAST;
1560 
1561 	if (netdev->flags & IFF_ALLMULTI)
1562 		new_mode |= VMXNET3_RXM_ALL_MULTI;
1563 	else
1564 		if (netdev->mc_count > 0) {
1565 			new_table = vmxnet3_copy_mc(netdev);
1566 			if (new_table) {
1567 				new_mode |= VMXNET3_RXM_MCAST;
1568 				rxConf->mfTableLen = netdev->mc_count *
1569 						     ETH_ALEN;
1570 				rxConf->mfTablePA = virt_to_phys(new_table);
1571 			} else {
1572 				printk(KERN_INFO "%s: failed to copy mcast list"
1573 				       ", setting ALL_MULTI\n", netdev->name);
1574 				new_mode |= VMXNET3_RXM_ALL_MULTI;
1575 			}
1576 		}
1577 
1578 
1579 	if (!(new_mode & VMXNET3_RXM_MCAST)) {
1580 		rxConf->mfTableLen = 0;
1581 		rxConf->mfTablePA = 0;
1582 	}
1583 
1584 	if (new_mode != rxConf->rxMode) {
1585 		rxConf->rxMode = new_mode;
1586 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1587 				       VMXNET3_CMD_UPDATE_RX_MODE);
1588 	}
1589 
1590 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1591 			       VMXNET3_CMD_UPDATE_MAC_FILTERS);
1592 
1593 	kfree(new_table);
1594 }
1595 
1596 
1597 /*
1598  *   Set up driver_shared based on settings in adapter.
1599  */
1600 
1601 static void
1602 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
1603 {
1604 	struct Vmxnet3_DriverShared *shared = adapter->shared;
1605 	struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
1606 	struct Vmxnet3_TxQueueConf *tqc;
1607 	struct Vmxnet3_RxQueueConf *rqc;
1608 	int i;
1609 
1610 	memset(shared, 0, sizeof(*shared));
1611 
1612 	/* driver settings */
1613 	shared->magic = VMXNET3_REV1_MAGIC;
1614 	devRead->misc.driverInfo.version = VMXNET3_DRIVER_VERSION_NUM;
1615 	devRead->misc.driverInfo.gos.gosBits = (sizeof(void *) == 4 ?
1616 				VMXNET3_GOS_BITS_32 : VMXNET3_GOS_BITS_64);
1617 	devRead->misc.driverInfo.gos.gosType = VMXNET3_GOS_TYPE_LINUX;
1618 	devRead->misc.driverInfo.vmxnet3RevSpt = 1;
1619 	devRead->misc.driverInfo.uptVerSpt = 1;
1620 
1621 	devRead->misc.ddPA = virt_to_phys(adapter);
1622 	devRead->misc.ddLen = sizeof(struct vmxnet3_adapter);
1623 
1624 	/* set up feature flags */
1625 	if (adapter->rxcsum)
1626 		devRead->misc.uptFeatures |= UPT1_F_RXCSUM;
1627 
1628 	if (adapter->lro) {
1629 		devRead->misc.uptFeatures |= UPT1_F_LRO;
1630 		devRead->misc.maxNumRxSG = 1 + MAX_SKB_FRAGS;
1631 	}
1632 	if ((adapter->netdev->features & NETIF_F_HW_VLAN_RX)
1633 			&& adapter->vlan_grp) {
1634 		devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
1635 	}
1636 
1637 	devRead->misc.mtu = adapter->netdev->mtu;
1638 	devRead->misc.queueDescPA = adapter->queue_desc_pa;
1639 	devRead->misc.queueDescLen = sizeof(struct Vmxnet3_TxQueueDesc) +
1640 				     sizeof(struct Vmxnet3_RxQueueDesc);
1641 
1642 	/* tx queue settings */
1643 	BUG_ON(adapter->tx_queue.tx_ring.base == NULL);
1644 
1645 	devRead->misc.numTxQueues = 1;
1646 	tqc = &adapter->tqd_start->conf;
1647 	tqc->txRingBasePA   = adapter->tx_queue.tx_ring.basePA;
1648 	tqc->dataRingBasePA = adapter->tx_queue.data_ring.basePA;
1649 	tqc->compRingBasePA = adapter->tx_queue.comp_ring.basePA;
1650 	tqc->ddPA           = virt_to_phys(adapter->tx_queue.buf_info);
1651 	tqc->txRingSize     = adapter->tx_queue.tx_ring.size;
1652 	tqc->dataRingSize   = adapter->tx_queue.data_ring.size;
1653 	tqc->compRingSize   = adapter->tx_queue.comp_ring.size;
1654 	tqc->ddLen          = sizeof(struct vmxnet3_tx_buf_info) *
1655 			      tqc->txRingSize;
1656 	tqc->intrIdx        = adapter->tx_queue.comp_ring.intr_idx;
1657 
1658 	/* rx queue settings */
1659 	devRead->misc.numRxQueues = 1;
1660 	rqc = &adapter->rqd_start->conf;
1661 	rqc->rxRingBasePA[0] = adapter->rx_queue.rx_ring[0].basePA;
1662 	rqc->rxRingBasePA[1] = adapter->rx_queue.rx_ring[1].basePA;
1663 	rqc->compRingBasePA  = adapter->rx_queue.comp_ring.basePA;
1664 	rqc->ddPA            = virt_to_phys(adapter->rx_queue.buf_info);
1665 	rqc->rxRingSize[0]   = adapter->rx_queue.rx_ring[0].size;
1666 	rqc->rxRingSize[1]   = adapter->rx_queue.rx_ring[1].size;
1667 	rqc->compRingSize    = adapter->rx_queue.comp_ring.size;
1668 	rqc->ddLen           = sizeof(struct vmxnet3_rx_buf_info) *
1669 			       (rqc->rxRingSize[0] + rqc->rxRingSize[1]);
1670 	rqc->intrIdx         = adapter->rx_queue.comp_ring.intr_idx;
1671 
1672 	/* intr settings */
1673 	devRead->intrConf.autoMask = adapter->intr.mask_mode ==
1674 				     VMXNET3_IMM_AUTO;
1675 	devRead->intrConf.numIntrs = adapter->intr.num_intrs;
1676 	for (i = 0; i < adapter->intr.num_intrs; i++)
1677 		devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i];
1678 
1679 	devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx;
1680 
1681 	/* rx filter settings */
1682 	devRead->rxFilterConf.rxMode = 0;
1683 	vmxnet3_restore_vlan(adapter);
1684 	/* the rest are already zeroed */
1685 }
1686 
1687 
1688 int
1689 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
1690 {
1691 	int err;
1692 	u32 ret;
1693 
1694 	dev_dbg(&adapter->netdev->dev,
1695 		"%s: skb_buf_size %d, rx_buf_per_pkt %d, ring sizes"
1696 		" %u %u %u\n", adapter->netdev->name, adapter->skb_buf_size,
1697 		adapter->rx_buf_per_pkt, adapter->tx_queue.tx_ring.size,
1698 		adapter->rx_queue.rx_ring[0].size,
1699 		adapter->rx_queue.rx_ring[1].size);
1700 
1701 	vmxnet3_tq_init(&adapter->tx_queue, adapter);
1702 	err = vmxnet3_rq_init(&adapter->rx_queue, adapter);
1703 	if (err) {
1704 		printk(KERN_ERR "Failed to init rx queue for %s: error %d\n",
1705 		       adapter->netdev->name, err);
1706 		goto rq_err;
1707 	}
1708 
1709 	err = vmxnet3_request_irqs(adapter);
1710 	if (err) {
1711 		printk(KERN_ERR "Failed to setup irq for %s: error %d\n",
1712 		       adapter->netdev->name, err);
1713 		goto irq_err;
1714 	}
1715 
1716 	vmxnet3_setup_driver_shared(adapter);
1717 
1718 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL,
1719 			       VMXNET3_GET_ADDR_LO(adapter->shared_pa));
1720 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH,
1721 			       VMXNET3_GET_ADDR_HI(adapter->shared_pa));
1722 
1723 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1724 			       VMXNET3_CMD_ACTIVATE_DEV);
1725 	ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
1726 
1727 	if (ret != 0) {
1728 		printk(KERN_ERR "Failed to activate dev %s: error %u\n",
1729 		       adapter->netdev->name, ret);
1730 		err = -EINVAL;
1731 		goto activate_err;
1732 	}
1733 	VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_RXPROD,
1734 			       adapter->rx_queue.rx_ring[0].next2fill);
1735 	VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_RXPROD2,
1736 			       adapter->rx_queue.rx_ring[1].next2fill);
1737 
1738 	/* Apply the rx filter settins last. */
1739 	vmxnet3_set_mc(adapter->netdev);
1740 
1741 	/*
1742 	 * Check link state when first activating device. It will start the
1743 	 * tx queue if the link is up.
1744 	 */
1745 	vmxnet3_check_link(adapter);
1746 
1747 	napi_enable(&adapter->napi);
1748 	vmxnet3_enable_all_intrs(adapter);
1749 	clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
1750 	return 0;
1751 
1752 activate_err:
1753 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0);
1754 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0);
1755 	vmxnet3_free_irqs(adapter);
1756 irq_err:
1757 rq_err:
1758 	/* free up buffers we allocated */
1759 	vmxnet3_rq_cleanup(&adapter->rx_queue, adapter);
1760 	return err;
1761 }
1762 
1763 
1764 void
1765 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter)
1766 {
1767 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV);
1768 }
1769 
1770 
1771 int
1772 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter)
1773 {
1774 	if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state))
1775 		return 0;
1776 
1777 
1778 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1779 			       VMXNET3_CMD_QUIESCE_DEV);
1780 	vmxnet3_disable_all_intrs(adapter);
1781 
1782 	napi_disable(&adapter->napi);
1783 	netif_tx_disable(adapter->netdev);
1784 	adapter->link_speed = 0;
1785 	netif_carrier_off(adapter->netdev);
1786 
1787 	vmxnet3_tq_cleanup(&adapter->tx_queue, adapter);
1788 	vmxnet3_rq_cleanup(&adapter->rx_queue, adapter);
1789 	vmxnet3_free_irqs(adapter);
1790 	return 0;
1791 }
1792 
1793 
1794 static void
1795 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
1796 {
1797 	u32 tmp;
1798 
1799 	tmp = *(u32 *)mac;
1800 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp);
1801 
1802 	tmp = (mac[5] << 8) | mac[4];
1803 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp);
1804 }
1805 
1806 
1807 static int
1808 vmxnet3_set_mac_addr(struct net_device *netdev, void *p)
1809 {
1810 	struct sockaddr *addr = p;
1811 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1812 
1813 	memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1814 	vmxnet3_write_mac_addr(adapter, addr->sa_data);
1815 
1816 	return 0;
1817 }
1818 
1819 
1820 /* ==================== initialization and cleanup routines ============ */
1821 
1822 static int
1823 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
1824 {
1825 	int err;
1826 	unsigned long mmio_start, mmio_len;
1827 	struct pci_dev *pdev = adapter->pdev;
1828 
1829 	err = pci_enable_device(pdev);
1830 	if (err) {
1831 		printk(KERN_ERR "Failed to enable adapter %s: error %d\n",
1832 		       pci_name(pdev), err);
1833 		return err;
1834 	}
1835 
1836 	if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
1837 		if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
1838 			printk(KERN_ERR "pci_set_consistent_dma_mask failed "
1839 			       "for adapter %s\n", pci_name(pdev));
1840 			err = -EIO;
1841 			goto err_set_mask;
1842 		}
1843 		*dma64 = true;
1844 	} else {
1845 		if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
1846 			printk(KERN_ERR "pci_set_dma_mask failed for adapter "
1847 			       "%s\n",	pci_name(pdev));
1848 			err = -EIO;
1849 			goto err_set_mask;
1850 		}
1851 		*dma64 = false;
1852 	}
1853 
1854 	err = pci_request_selected_regions(pdev, (1 << 2) - 1,
1855 					   vmxnet3_driver_name);
1856 	if (err) {
1857 		printk(KERN_ERR "Failed to request region for adapter %s: "
1858 		       "error %d\n", pci_name(pdev), err);
1859 		goto err_set_mask;
1860 	}
1861 
1862 	pci_set_master(pdev);
1863 
1864 	mmio_start = pci_resource_start(pdev, 0);
1865 	mmio_len = pci_resource_len(pdev, 0);
1866 	adapter->hw_addr0 = ioremap(mmio_start, mmio_len);
1867 	if (!adapter->hw_addr0) {
1868 		printk(KERN_ERR "Failed to map bar0 for adapter %s\n",
1869 		       pci_name(pdev));
1870 		err = -EIO;
1871 		goto err_ioremap;
1872 	}
1873 
1874 	mmio_start = pci_resource_start(pdev, 1);
1875 	mmio_len = pci_resource_len(pdev, 1);
1876 	adapter->hw_addr1 = ioremap(mmio_start, mmio_len);
1877 	if (!adapter->hw_addr1) {
1878 		printk(KERN_ERR "Failed to map bar1 for adapter %s\n",
1879 		       pci_name(pdev));
1880 		err = -EIO;
1881 		goto err_bar1;
1882 	}
1883 	return 0;
1884 
1885 err_bar1:
1886 	iounmap(adapter->hw_addr0);
1887 err_ioremap:
1888 	pci_release_selected_regions(pdev, (1 << 2) - 1);
1889 err_set_mask:
1890 	pci_disable_device(pdev);
1891 	return err;
1892 }
1893 
1894 
1895 static void
1896 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter)
1897 {
1898 	BUG_ON(!adapter->pdev);
1899 
1900 	iounmap(adapter->hw_addr0);
1901 	iounmap(adapter->hw_addr1);
1902 	pci_release_selected_regions(adapter->pdev, (1 << 2) - 1);
1903 	pci_disable_device(adapter->pdev);
1904 }
1905 
1906 
1907 static void
1908 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter)
1909 {
1910 	size_t sz;
1911 
1912 	if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE -
1913 				    VMXNET3_MAX_ETH_HDR_SIZE) {
1914 		adapter->skb_buf_size = adapter->netdev->mtu +
1915 					VMXNET3_MAX_ETH_HDR_SIZE;
1916 		if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE)
1917 			adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE;
1918 
1919 		adapter->rx_buf_per_pkt = 1;
1920 	} else {
1921 		adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE;
1922 		sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE +
1923 					    VMXNET3_MAX_ETH_HDR_SIZE;
1924 		adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE;
1925 	}
1926 
1927 	/*
1928 	 * for simplicity, force the ring0 size to be a multiple of
1929 	 * rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN
1930 	 */
1931 	sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN;
1932 	adapter->rx_queue.rx_ring[0].size = (adapter->rx_queue.rx_ring[0].size +
1933 					     sz - 1) / sz * sz;
1934 	adapter->rx_queue.rx_ring[0].size = min_t(u32,
1935 					    adapter->rx_queue.rx_ring[0].size,
1936 					    VMXNET3_RX_RING_MAX_SIZE / sz * sz);
1937 }
1938 
1939 
1940 int
1941 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size,
1942 		      u32 rx_ring_size, u32 rx_ring2_size)
1943 {
1944 	int err;
1945 
1946 	adapter->tx_queue.tx_ring.size   = tx_ring_size;
1947 	adapter->tx_queue.data_ring.size = tx_ring_size;
1948 	adapter->tx_queue.comp_ring.size = tx_ring_size;
1949 	adapter->tx_queue.shared = &adapter->tqd_start->ctrl;
1950 	adapter->tx_queue.stopped = true;
1951 	err = vmxnet3_tq_create(&adapter->tx_queue, adapter);
1952 	if (err)
1953 		return err;
1954 
1955 	adapter->rx_queue.rx_ring[0].size = rx_ring_size;
1956 	adapter->rx_queue.rx_ring[1].size = rx_ring2_size;
1957 	vmxnet3_adjust_rx_ring_size(adapter);
1958 	adapter->rx_queue.comp_ring.size  = adapter->rx_queue.rx_ring[0].size +
1959 					    adapter->rx_queue.rx_ring[1].size;
1960 	adapter->rx_queue.qid  = 0;
1961 	adapter->rx_queue.qid2 = 1;
1962 	adapter->rx_queue.shared = &adapter->rqd_start->ctrl;
1963 	err = vmxnet3_rq_create(&adapter->rx_queue, adapter);
1964 	if (err)
1965 		vmxnet3_tq_destroy(&adapter->tx_queue, adapter);
1966 
1967 	return err;
1968 }
1969 
1970 static int
1971 vmxnet3_open(struct net_device *netdev)
1972 {
1973 	struct vmxnet3_adapter *adapter;
1974 	int err;
1975 
1976 	adapter = netdev_priv(netdev);
1977 
1978 	spin_lock_init(&adapter->tx_queue.tx_lock);
1979 
1980 	err = vmxnet3_create_queues(adapter, VMXNET3_DEF_TX_RING_SIZE,
1981 				    VMXNET3_DEF_RX_RING_SIZE,
1982 				    VMXNET3_DEF_RX_RING_SIZE);
1983 	if (err)
1984 		goto queue_err;
1985 
1986 	err = vmxnet3_activate_dev(adapter);
1987 	if (err)
1988 		goto activate_err;
1989 
1990 	return 0;
1991 
1992 activate_err:
1993 	vmxnet3_rq_destroy(&adapter->rx_queue, adapter);
1994 	vmxnet3_tq_destroy(&adapter->tx_queue, adapter);
1995 queue_err:
1996 	return err;
1997 }
1998 
1999 
2000 static int
2001 vmxnet3_close(struct net_device *netdev)
2002 {
2003 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2004 
2005 	/*
2006 	 * Reset_work may be in the middle of resetting the device, wait for its
2007 	 * completion.
2008 	 */
2009 	while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2010 		msleep(1);
2011 
2012 	vmxnet3_quiesce_dev(adapter);
2013 
2014 	vmxnet3_rq_destroy(&adapter->rx_queue, adapter);
2015 	vmxnet3_tq_destroy(&adapter->tx_queue, adapter);
2016 
2017 	clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2018 
2019 
2020 	return 0;
2021 }
2022 
2023 
2024 void
2025 vmxnet3_force_close(struct vmxnet3_adapter *adapter)
2026 {
2027 	/*
2028 	 * we must clear VMXNET3_STATE_BIT_RESETTING, otherwise
2029 	 * vmxnet3_close() will deadlock.
2030 	 */
2031 	BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state));
2032 
2033 	/* we need to enable NAPI, otherwise dev_close will deadlock */
2034 	napi_enable(&adapter->napi);
2035 	dev_close(adapter->netdev);
2036 }
2037 
2038 
2039 static int
2040 vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)
2041 {
2042 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2043 	int err = 0;
2044 
2045 	if (new_mtu < VMXNET3_MIN_MTU || new_mtu > VMXNET3_MAX_MTU)
2046 		return -EINVAL;
2047 
2048 	if (new_mtu > 1500 && !adapter->jumbo_frame)
2049 		return -EINVAL;
2050 
2051 	netdev->mtu = new_mtu;
2052 
2053 	/*
2054 	 * Reset_work may be in the middle of resetting the device, wait for its
2055 	 * completion.
2056 	 */
2057 	while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2058 		msleep(1);
2059 
2060 	if (netif_running(netdev)) {
2061 		vmxnet3_quiesce_dev(adapter);
2062 		vmxnet3_reset_dev(adapter);
2063 
2064 		/* we need to re-create the rx queue based on the new mtu */
2065 		vmxnet3_rq_destroy(&adapter->rx_queue, adapter);
2066 		vmxnet3_adjust_rx_ring_size(adapter);
2067 		adapter->rx_queue.comp_ring.size  =
2068 					adapter->rx_queue.rx_ring[0].size +
2069 					adapter->rx_queue.rx_ring[1].size;
2070 		err = vmxnet3_rq_create(&adapter->rx_queue, adapter);
2071 		if (err) {
2072 			printk(KERN_ERR "%s: failed to re-create rx queue,"
2073 				" error %d. Closing it.\n", netdev->name, err);
2074 			goto out;
2075 		}
2076 
2077 		err = vmxnet3_activate_dev(adapter);
2078 		if (err) {
2079 			printk(KERN_ERR "%s: failed to re-activate, error %d. "
2080 				"Closing it\n", netdev->name, err);
2081 			goto out;
2082 		}
2083 	}
2084 
2085 out:
2086 	clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2087 	if (err)
2088 		vmxnet3_force_close(adapter);
2089 
2090 	return err;
2091 }
2092 
2093 
2094 static void
2095 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64)
2096 {
2097 	struct net_device *netdev = adapter->netdev;
2098 
2099 	netdev->features = NETIF_F_SG |
2100 		NETIF_F_HW_CSUM |
2101 		NETIF_F_HW_VLAN_TX |
2102 		NETIF_F_HW_VLAN_RX |
2103 		NETIF_F_HW_VLAN_FILTER |
2104 		NETIF_F_TSO |
2105 		NETIF_F_TSO6 |
2106 		NETIF_F_LRO;
2107 
2108 	printk(KERN_INFO "features: sg csum vlan jf tso tsoIPv6 lro");
2109 
2110 	adapter->rxcsum = true;
2111 	adapter->jumbo_frame = true;
2112 	adapter->lro = true;
2113 
2114 	if (dma64) {
2115 		netdev->features |= NETIF_F_HIGHDMA;
2116 		printk(" highDMA");
2117 	}
2118 
2119 	netdev->vlan_features = netdev->features;
2120 	printk("\n");
2121 }
2122 
2123 
2124 static void
2125 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
2126 {
2127 	u32 tmp;
2128 
2129 	tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL);
2130 	*(u32 *)mac = tmp;
2131 
2132 	tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH);
2133 	mac[4] = tmp & 0xff;
2134 	mac[5] = (tmp >> 8) & 0xff;
2135 }
2136 
2137 
2138 static void
2139 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
2140 {
2141 	u32 cfg;
2142 
2143 	/* intr settings */
2144 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2145 			       VMXNET3_CMD_GET_CONF_INTR);
2146 	cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
2147 	adapter->intr.type = cfg & 0x3;
2148 	adapter->intr.mask_mode = (cfg >> 2) & 0x3;
2149 
2150 	if (adapter->intr.type == VMXNET3_IT_AUTO) {
2151 		int err;
2152 
2153 #ifdef CONFIG_PCI_MSI
2154 		adapter->intr.msix_entries[0].entry = 0;
2155 		err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
2156 				      VMXNET3_LINUX_MAX_MSIX_VECT);
2157 		if (!err) {
2158 			adapter->intr.num_intrs = 1;
2159 			adapter->intr.type = VMXNET3_IT_MSIX;
2160 			return;
2161 		}
2162 #endif
2163 
2164 		err = pci_enable_msi(adapter->pdev);
2165 		if (!err) {
2166 			adapter->intr.num_intrs = 1;
2167 			adapter->intr.type = VMXNET3_IT_MSI;
2168 			return;
2169 		}
2170 	}
2171 
2172 	adapter->intr.type = VMXNET3_IT_INTX;
2173 
2174 	/* INT-X related setting */
2175 	adapter->intr.num_intrs = 1;
2176 }
2177 
2178 
2179 static void
2180 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter)
2181 {
2182 	if (adapter->intr.type == VMXNET3_IT_MSIX)
2183 		pci_disable_msix(adapter->pdev);
2184 	else if (adapter->intr.type == VMXNET3_IT_MSI)
2185 		pci_disable_msi(adapter->pdev);
2186 	else
2187 		BUG_ON(adapter->intr.type != VMXNET3_IT_INTX);
2188 }
2189 
2190 
2191 static void
2192 vmxnet3_tx_timeout(struct net_device *netdev)
2193 {
2194 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2195 	adapter->tx_timeout_count++;
2196 
2197 	printk(KERN_ERR "%s: tx hang\n", adapter->netdev->name);
2198 	schedule_work(&adapter->work);
2199 }
2200 
2201 
2202 static void
2203 vmxnet3_reset_work(struct work_struct *data)
2204 {
2205 	struct vmxnet3_adapter *adapter;
2206 
2207 	adapter = container_of(data, struct vmxnet3_adapter, work);
2208 
2209 	/* if another thread is resetting the device, no need to proceed */
2210 	if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2211 		return;
2212 
2213 	/* if the device is closed, we must leave it alone */
2214 	if (netif_running(adapter->netdev)) {
2215 		printk(KERN_INFO "%s: resetting\n", adapter->netdev->name);
2216 		vmxnet3_quiesce_dev(adapter);
2217 		vmxnet3_reset_dev(adapter);
2218 		vmxnet3_activate_dev(adapter);
2219 	} else {
2220 		printk(KERN_INFO "%s: already closed\n", adapter->netdev->name);
2221 	}
2222 
2223 	clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2224 }
2225 
2226 
2227 static int __devinit
2228 vmxnet3_probe_device(struct pci_dev *pdev,
2229 		     const struct pci_device_id *id)
2230 {
2231 	static const struct net_device_ops vmxnet3_netdev_ops = {
2232 		.ndo_open = vmxnet3_open,
2233 		.ndo_stop = vmxnet3_close,
2234 		.ndo_start_xmit = vmxnet3_xmit_frame,
2235 		.ndo_set_mac_address = vmxnet3_set_mac_addr,
2236 		.ndo_change_mtu = vmxnet3_change_mtu,
2237 		.ndo_get_stats = vmxnet3_get_stats,
2238 		.ndo_tx_timeout = vmxnet3_tx_timeout,
2239 		.ndo_set_multicast_list = vmxnet3_set_mc,
2240 		.ndo_vlan_rx_register = vmxnet3_vlan_rx_register,
2241 		.ndo_vlan_rx_add_vid = vmxnet3_vlan_rx_add_vid,
2242 		.ndo_vlan_rx_kill_vid = vmxnet3_vlan_rx_kill_vid,
2243 #ifdef CONFIG_NET_POLL_CONTROLLER
2244 		.ndo_poll_controller = vmxnet3_netpoll,
2245 #endif
2246 	};
2247 	int err;
2248 	bool dma64 = false; /* stupid gcc */
2249 	u32 ver;
2250 	struct net_device *netdev;
2251 	struct vmxnet3_adapter *adapter;
2252 	u8 mac[ETH_ALEN];
2253 
2254 	netdev = alloc_etherdev(sizeof(struct vmxnet3_adapter));
2255 	if (!netdev) {
2256 		printk(KERN_ERR "Failed to alloc ethernet device for adapter "
2257 			"%s\n",	pci_name(pdev));
2258 		return -ENOMEM;
2259 	}
2260 
2261 	pci_set_drvdata(pdev, netdev);
2262 	adapter = netdev_priv(netdev);
2263 	adapter->netdev = netdev;
2264 	adapter->pdev = pdev;
2265 
2266 	adapter->shared = pci_alloc_consistent(adapter->pdev,
2267 			  sizeof(struct Vmxnet3_DriverShared),
2268 			  &adapter->shared_pa);
2269 	if (!adapter->shared) {
2270 		printk(KERN_ERR "Failed to allocate memory for %s\n",
2271 			pci_name(pdev));
2272 		err = -ENOMEM;
2273 		goto err_alloc_shared;
2274 	}
2275 
2276 	adapter->tqd_start = pci_alloc_consistent(adapter->pdev,
2277 			     sizeof(struct Vmxnet3_TxQueueDesc) +
2278 			     sizeof(struct Vmxnet3_RxQueueDesc),
2279 			     &adapter->queue_desc_pa);
2280 
2281 	if (!adapter->tqd_start) {
2282 		printk(KERN_ERR "Failed to allocate memory for %s\n",
2283 			pci_name(pdev));
2284 		err = -ENOMEM;
2285 		goto err_alloc_queue_desc;
2286 	}
2287 	adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start
2288 							    + 1);
2289 
2290 	adapter->pm_conf = kmalloc(sizeof(struct Vmxnet3_PMConf), GFP_KERNEL);
2291 	if (adapter->pm_conf == NULL) {
2292 		printk(KERN_ERR "Failed to allocate memory for %s\n",
2293 			pci_name(pdev));
2294 		err = -ENOMEM;
2295 		goto err_alloc_pm;
2296 	}
2297 
2298 	err = vmxnet3_alloc_pci_resources(adapter, &dma64);
2299 	if (err < 0)
2300 		goto err_alloc_pci;
2301 
2302 	ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS);
2303 	if (ver & 1) {
2304 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1);
2305 	} else {
2306 		printk(KERN_ERR "Incompatible h/w version (0x%x) for adapter"
2307 		       " %s\n",	ver, pci_name(pdev));
2308 		err = -EBUSY;
2309 		goto err_ver;
2310 	}
2311 
2312 	ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS);
2313 	if (ver & 1) {
2314 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1);
2315 	} else {
2316 		printk(KERN_ERR "Incompatible upt version (0x%x) for "
2317 		       "adapter %s\n", ver, pci_name(pdev));
2318 		err = -EBUSY;
2319 		goto err_ver;
2320 	}
2321 
2322 	vmxnet3_declare_features(adapter, dma64);
2323 
2324 	adapter->dev_number = atomic_read(&devices_found);
2325 	vmxnet3_alloc_intr_resources(adapter);
2326 
2327 	vmxnet3_read_mac_addr(adapter, mac);
2328 	memcpy(netdev->dev_addr,  mac, netdev->addr_len);
2329 
2330 	netdev->netdev_ops = &vmxnet3_netdev_ops;
2331 	netdev->watchdog_timeo = 5 * HZ;
2332 	vmxnet3_set_ethtool_ops(netdev);
2333 
2334 	INIT_WORK(&adapter->work, vmxnet3_reset_work);
2335 
2336 	netif_napi_add(netdev, &adapter->napi, vmxnet3_poll, 64);
2337 	SET_NETDEV_DEV(netdev, &pdev->dev);
2338 	err = register_netdev(netdev);
2339 
2340 	if (err) {
2341 		printk(KERN_ERR "Failed to register adapter %s\n",
2342 			pci_name(pdev));
2343 		goto err_register;
2344 	}
2345 
2346 	set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
2347 	atomic_inc(&devices_found);
2348 	return 0;
2349 
2350 err_register:
2351 	vmxnet3_free_intr_resources(adapter);
2352 err_ver:
2353 	vmxnet3_free_pci_resources(adapter);
2354 err_alloc_pci:
2355 	kfree(adapter->pm_conf);
2356 err_alloc_pm:
2357 	pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_TxQueueDesc) +
2358 			    sizeof(struct Vmxnet3_RxQueueDesc),
2359 			    adapter->tqd_start, adapter->queue_desc_pa);
2360 err_alloc_queue_desc:
2361 	pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_DriverShared),
2362 			    adapter->shared, adapter->shared_pa);
2363 err_alloc_shared:
2364 	pci_set_drvdata(pdev, NULL);
2365 	free_netdev(netdev);
2366 	return err;
2367 }
2368 
2369 
2370 static void __devexit
2371 vmxnet3_remove_device(struct pci_dev *pdev)
2372 {
2373 	struct net_device *netdev = pci_get_drvdata(pdev);
2374 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2375 
2376 	flush_scheduled_work();
2377 
2378 	unregister_netdev(netdev);
2379 
2380 	vmxnet3_free_intr_resources(adapter);
2381 	vmxnet3_free_pci_resources(adapter);
2382 	kfree(adapter->pm_conf);
2383 	pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_TxQueueDesc) +
2384 			    sizeof(struct Vmxnet3_RxQueueDesc),
2385 			    adapter->tqd_start, adapter->queue_desc_pa);
2386 	pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_DriverShared),
2387 			    adapter->shared, adapter->shared_pa);
2388 	free_netdev(netdev);
2389 }
2390 
2391 
2392 #ifdef CONFIG_PM
2393 
2394 static int
2395 vmxnet3_suspend(struct device *device)
2396 {
2397 	struct pci_dev *pdev = to_pci_dev(device);
2398 	struct net_device *netdev = pci_get_drvdata(pdev);
2399 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2400 	struct Vmxnet3_PMConf *pmConf;
2401 	struct ethhdr *ehdr;
2402 	struct arphdr *ahdr;
2403 	u8 *arpreq;
2404 	struct in_device *in_dev;
2405 	struct in_ifaddr *ifa;
2406 	int i = 0;
2407 
2408 	if (!netif_running(netdev))
2409 		return 0;
2410 
2411 	vmxnet3_disable_all_intrs(adapter);
2412 	vmxnet3_free_irqs(adapter);
2413 	vmxnet3_free_intr_resources(adapter);
2414 
2415 	netif_device_detach(netdev);
2416 	netif_stop_queue(netdev);
2417 
2418 	/* Create wake-up filters. */
2419 	pmConf = adapter->pm_conf;
2420 	memset(pmConf, 0, sizeof(*pmConf));
2421 
2422 	if (adapter->wol & WAKE_UCAST) {
2423 		pmConf->filters[i].patternSize = ETH_ALEN;
2424 		pmConf->filters[i].maskSize = 1;
2425 		memcpy(pmConf->filters[i].pattern, netdev->dev_addr, ETH_ALEN);
2426 		pmConf->filters[i].mask[0] = 0x3F; /* LSB ETH_ALEN bits */
2427 
2428 		pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
2429 		i++;
2430 	}
2431 
2432 	if (adapter->wol & WAKE_ARP) {
2433 		in_dev = in_dev_get(netdev);
2434 		if (!in_dev)
2435 			goto skip_arp;
2436 
2437 		ifa = (struct in_ifaddr *)in_dev->ifa_list;
2438 		if (!ifa)
2439 			goto skip_arp;
2440 
2441 		pmConf->filters[i].patternSize = ETH_HLEN + /* Ethernet header*/
2442 			sizeof(struct arphdr) +		/* ARP header */
2443 			2 * ETH_ALEN +		/* 2 Ethernet addresses*/
2444 			2 * sizeof(u32);	/*2 IPv4 addresses */
2445 		pmConf->filters[i].maskSize =
2446 			(pmConf->filters[i].patternSize - 1) / 8 + 1;
2447 
2448 		/* ETH_P_ARP in Ethernet header. */
2449 		ehdr = (struct ethhdr *)pmConf->filters[i].pattern;
2450 		ehdr->h_proto = htons(ETH_P_ARP);
2451 
2452 		/* ARPOP_REQUEST in ARP header. */
2453 		ahdr = (struct arphdr *)&pmConf->filters[i].pattern[ETH_HLEN];
2454 		ahdr->ar_op = htons(ARPOP_REQUEST);
2455 		arpreq = (u8 *)(ahdr + 1);
2456 
2457 		/* The Unicast IPv4 address in 'tip' field. */
2458 		arpreq += 2 * ETH_ALEN + sizeof(u32);
2459 		*(u32 *)arpreq = ifa->ifa_address;
2460 
2461 		/* The mask for the relevant bits. */
2462 		pmConf->filters[i].mask[0] = 0x00;
2463 		pmConf->filters[i].mask[1] = 0x30; /* ETH_P_ARP */
2464 		pmConf->filters[i].mask[2] = 0x30; /* ARPOP_REQUEST */
2465 		pmConf->filters[i].mask[3] = 0x00;
2466 		pmConf->filters[i].mask[4] = 0xC0; /* IPv4 TIP */
2467 		pmConf->filters[i].mask[5] = 0x03; /* IPv4 TIP */
2468 		in_dev_put(in_dev);
2469 
2470 		pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
2471 		i++;
2472 	}
2473 
2474 skip_arp:
2475 	if (adapter->wol & WAKE_MAGIC)
2476 		pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_MAGIC;
2477 
2478 	pmConf->numFilters = i;
2479 
2480 	adapter->shared->devRead.pmConfDesc.confVer = 1;
2481 	adapter->shared->devRead.pmConfDesc.confLen = sizeof(*pmConf);
2482 	adapter->shared->devRead.pmConfDesc.confPA = virt_to_phys(pmConf);
2483 
2484 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2485 			       VMXNET3_CMD_UPDATE_PMCFG);
2486 
2487 	pci_save_state(pdev);
2488 	pci_enable_wake(pdev, pci_choose_state(pdev, PMSG_SUSPEND),
2489 			adapter->wol);
2490 	pci_disable_device(pdev);
2491 	pci_set_power_state(pdev, pci_choose_state(pdev, PMSG_SUSPEND));
2492 
2493 	return 0;
2494 }
2495 
2496 
2497 static int
2498 vmxnet3_resume(struct device *device)
2499 {
2500 	int err;
2501 	struct pci_dev *pdev = to_pci_dev(device);
2502 	struct net_device *netdev = pci_get_drvdata(pdev);
2503 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2504 	struct Vmxnet3_PMConf *pmConf;
2505 
2506 	if (!netif_running(netdev))
2507 		return 0;
2508 
2509 	/* Destroy wake-up filters. */
2510 	pmConf = adapter->pm_conf;
2511 	memset(pmConf, 0, sizeof(*pmConf));
2512 
2513 	adapter->shared->devRead.pmConfDesc.confVer = 1;
2514 	adapter->shared->devRead.pmConfDesc.confLen = sizeof(*pmConf);
2515 	adapter->shared->devRead.pmConfDesc.confPA = virt_to_phys(pmConf);
2516 
2517 	netif_device_attach(netdev);
2518 	pci_set_power_state(pdev, PCI_D0);
2519 	pci_restore_state(pdev);
2520 	err = pci_enable_device_mem(pdev);
2521 	if (err != 0)
2522 		return err;
2523 
2524 	pci_enable_wake(pdev, PCI_D0, 0);
2525 
2526 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2527 			       VMXNET3_CMD_UPDATE_PMCFG);
2528 	vmxnet3_alloc_intr_resources(adapter);
2529 	vmxnet3_request_irqs(adapter);
2530 	vmxnet3_enable_all_intrs(adapter);
2531 
2532 	return 0;
2533 }
2534 
2535 static struct dev_pm_ops vmxnet3_pm_ops = {
2536 	.suspend = vmxnet3_suspend,
2537 	.resume = vmxnet3_resume,
2538 };
2539 #endif
2540 
2541 static struct pci_driver vmxnet3_driver = {
2542 	.name		= vmxnet3_driver_name,
2543 	.id_table	= vmxnet3_pciid_table,
2544 	.probe		= vmxnet3_probe_device,
2545 	.remove		= __devexit_p(vmxnet3_remove_device),
2546 #ifdef CONFIG_PM
2547 	.driver.pm	= &vmxnet3_pm_ops,
2548 #endif
2549 };
2550 
2551 
2552 static int __init
2553 vmxnet3_init_module(void)
2554 {
2555 	printk(KERN_INFO "%s - version %s\n", VMXNET3_DRIVER_DESC,
2556 		VMXNET3_DRIVER_VERSION_REPORT);
2557 	return pci_register_driver(&vmxnet3_driver);
2558 }
2559 
2560 module_init(vmxnet3_init_module);
2561 
2562 
2563 static void
2564 vmxnet3_exit_module(void)
2565 {
2566 	pci_unregister_driver(&vmxnet3_driver);
2567 }
2568 
2569 module_exit(vmxnet3_exit_module);
2570 
2571 MODULE_AUTHOR("VMware, Inc.");
2572 MODULE_DESCRIPTION(VMXNET3_DRIVER_DESC);
2573 MODULE_LICENSE("GPL v2");
2574 MODULE_VERSION(VMXNET3_DRIVER_VERSION_STRING);
2575