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 <linux/module.h>
28 #include <net/ip6_checksum.h>
29 
30 #include "vmxnet3_int.h"
31 
32 char vmxnet3_driver_name[] = "vmxnet3";
33 #define VMXNET3_DRIVER_DESC "VMware vmxnet3 virtual NIC driver"
34 
35 /*
36  * PCI Device ID Table
37  * Last entry must be all 0s
38  */
39 static DEFINE_PCI_DEVICE_TABLE(vmxnet3_pciid_table) = {
40 	{PCI_VDEVICE(VMWARE, PCI_DEVICE_ID_VMWARE_VMXNET3)},
41 	{0}
42 };
43 
44 MODULE_DEVICE_TABLE(pci, vmxnet3_pciid_table);
45 
46 static int enable_mq = 1;
47 
48 static void
49 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
50 
51 /*
52  *    Enable/Disable the given intr
53  */
54 static void
55 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
56 {
57 	VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0);
58 }
59 
60 
61 static void
62 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
63 {
64 	VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1);
65 }
66 
67 
68 /*
69  *    Enable/Disable all intrs used by the device
70  */
71 static void
72 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter)
73 {
74 	int i;
75 
76 	for (i = 0; i < adapter->intr.num_intrs; i++)
77 		vmxnet3_enable_intr(adapter, i);
78 	adapter->shared->devRead.intrConf.intrCtrl &=
79 					cpu_to_le32(~VMXNET3_IC_DISABLE_ALL);
80 }
81 
82 
83 static void
84 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter)
85 {
86 	int i;
87 
88 	adapter->shared->devRead.intrConf.intrCtrl |=
89 					cpu_to_le32(VMXNET3_IC_DISABLE_ALL);
90 	for (i = 0; i < adapter->intr.num_intrs; i++)
91 		vmxnet3_disable_intr(adapter, i);
92 }
93 
94 
95 static void
96 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events)
97 {
98 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events);
99 }
100 
101 
102 static bool
103 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
104 {
105 	return tq->stopped;
106 }
107 
108 
109 static void
110 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
111 {
112 	tq->stopped = false;
113 	netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue);
114 }
115 
116 
117 static void
118 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
119 {
120 	tq->stopped = false;
121 	netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue));
122 }
123 
124 
125 static void
126 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
127 {
128 	tq->stopped = true;
129 	tq->num_stop++;
130 	netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue));
131 }
132 
133 
134 /*
135  * Check the link state. This may start or stop the tx queue.
136  */
137 static void
138 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue)
139 {
140 	u32 ret;
141 	int i;
142 	unsigned long flags;
143 
144 	spin_lock_irqsave(&adapter->cmd_lock, flags);
145 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK);
146 	ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
147 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
148 
149 	adapter->link_speed = ret >> 16;
150 	if (ret & 1) { /* Link is up. */
151 		netdev_info(adapter->netdev, "NIC Link is Up %d Mbps\n",
152 			    adapter->link_speed);
153 		netif_carrier_on(adapter->netdev);
154 
155 		if (affectTxQueue) {
156 			for (i = 0; i < adapter->num_tx_queues; i++)
157 				vmxnet3_tq_start(&adapter->tx_queue[i],
158 						 adapter);
159 		}
160 	} else {
161 		netdev_info(adapter->netdev, "NIC Link is Down\n");
162 		netif_carrier_off(adapter->netdev);
163 
164 		if (affectTxQueue) {
165 			for (i = 0; i < adapter->num_tx_queues; i++)
166 				vmxnet3_tq_stop(&adapter->tx_queue[i], adapter);
167 		}
168 	}
169 }
170 
171 static void
172 vmxnet3_process_events(struct vmxnet3_adapter *adapter)
173 {
174 	int i;
175 	unsigned long flags;
176 	u32 events = le32_to_cpu(adapter->shared->ecr);
177 	if (!events)
178 		return;
179 
180 	vmxnet3_ack_events(adapter, events);
181 
182 	/* Check if link state has changed */
183 	if (events & VMXNET3_ECR_LINK)
184 		vmxnet3_check_link(adapter, true);
185 
186 	/* Check if there is an error on xmit/recv queues */
187 	if (events & (VMXNET3_ECR_TQERR | VMXNET3_ECR_RQERR)) {
188 		spin_lock_irqsave(&adapter->cmd_lock, flags);
189 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
190 				       VMXNET3_CMD_GET_QUEUE_STATUS);
191 		spin_unlock_irqrestore(&adapter->cmd_lock, flags);
192 
193 		for (i = 0; i < adapter->num_tx_queues; i++)
194 			if (adapter->tqd_start[i].status.stopped)
195 				dev_err(&adapter->netdev->dev,
196 					"%s: tq[%d] error 0x%x\n",
197 					adapter->netdev->name, i, le32_to_cpu(
198 					adapter->tqd_start[i].status.error));
199 		for (i = 0; i < adapter->num_rx_queues; i++)
200 			if (adapter->rqd_start[i].status.stopped)
201 				dev_err(&adapter->netdev->dev,
202 					"%s: rq[%d] error 0x%x\n",
203 					adapter->netdev->name, i,
204 					adapter->rqd_start[i].status.error);
205 
206 		schedule_work(&adapter->work);
207 	}
208 }
209 
210 #ifdef __BIG_ENDIAN_BITFIELD
211 /*
212  * The device expects the bitfields in shared structures to be written in
213  * little endian. When CPU is big endian, the following routines are used to
214  * correctly read and write into ABI.
215  * The general technique used here is : double word bitfields are defined in
216  * opposite order for big endian architecture. Then before reading them in
217  * driver the complete double word is translated using le32_to_cpu. Similarly
218  * After the driver writes into bitfields, cpu_to_le32 is used to translate the
219  * double words into required format.
220  * In order to avoid touching bits in shared structure more than once, temporary
221  * descriptors are used. These are passed as srcDesc to following functions.
222  */
223 static void vmxnet3_RxDescToCPU(const struct Vmxnet3_RxDesc *srcDesc,
224 				struct Vmxnet3_RxDesc *dstDesc)
225 {
226 	u32 *src = (u32 *)srcDesc + 2;
227 	u32 *dst = (u32 *)dstDesc + 2;
228 	dstDesc->addr = le64_to_cpu(srcDesc->addr);
229 	*dst = le32_to_cpu(*src);
230 	dstDesc->ext1 = le32_to_cpu(srcDesc->ext1);
231 }
232 
233 static void vmxnet3_TxDescToLe(const struct Vmxnet3_TxDesc *srcDesc,
234 			       struct Vmxnet3_TxDesc *dstDesc)
235 {
236 	int i;
237 	u32 *src = (u32 *)(srcDesc + 1);
238 	u32 *dst = (u32 *)(dstDesc + 1);
239 
240 	/* Working backwards so that the gen bit is set at the end. */
241 	for (i = 2; i > 0; i--) {
242 		src--;
243 		dst--;
244 		*dst = cpu_to_le32(*src);
245 	}
246 }
247 
248 
249 static void vmxnet3_RxCompToCPU(const struct Vmxnet3_RxCompDesc *srcDesc,
250 				struct Vmxnet3_RxCompDesc *dstDesc)
251 {
252 	int i = 0;
253 	u32 *src = (u32 *)srcDesc;
254 	u32 *dst = (u32 *)dstDesc;
255 	for (i = 0; i < sizeof(struct Vmxnet3_RxCompDesc) / sizeof(u32); i++) {
256 		*dst = le32_to_cpu(*src);
257 		src++;
258 		dst++;
259 	}
260 }
261 
262 
263 /* Used to read bitfield values from double words. */
264 static u32 get_bitfield32(const __le32 *bitfield, u32 pos, u32 size)
265 {
266 	u32 temp = le32_to_cpu(*bitfield);
267 	u32 mask = ((1 << size) - 1) << pos;
268 	temp &= mask;
269 	temp >>= pos;
270 	return temp;
271 }
272 
273 
274 
275 #endif  /* __BIG_ENDIAN_BITFIELD */
276 
277 #ifdef __BIG_ENDIAN_BITFIELD
278 
279 #   define VMXNET3_TXDESC_GET_GEN(txdesc) get_bitfield32(((const __le32 *) \
280 			txdesc) + VMXNET3_TXD_GEN_DWORD_SHIFT, \
281 			VMXNET3_TXD_GEN_SHIFT, VMXNET3_TXD_GEN_SIZE)
282 #   define VMXNET3_TXDESC_GET_EOP(txdesc) get_bitfield32(((const __le32 *) \
283 			txdesc) + VMXNET3_TXD_EOP_DWORD_SHIFT, \
284 			VMXNET3_TXD_EOP_SHIFT, VMXNET3_TXD_EOP_SIZE)
285 #   define VMXNET3_TCD_GET_GEN(tcd) get_bitfield32(((const __le32 *)tcd) + \
286 			VMXNET3_TCD_GEN_DWORD_SHIFT, VMXNET3_TCD_GEN_SHIFT, \
287 			VMXNET3_TCD_GEN_SIZE)
288 #   define VMXNET3_TCD_GET_TXIDX(tcd) get_bitfield32((const __le32 *)tcd, \
289 			VMXNET3_TCD_TXIDX_SHIFT, VMXNET3_TCD_TXIDX_SIZE)
290 #   define vmxnet3_getRxComp(dstrcd, rcd, tmp) do { \
291 			(dstrcd) = (tmp); \
292 			vmxnet3_RxCompToCPU((rcd), (tmp)); \
293 		} while (0)
294 #   define vmxnet3_getRxDesc(dstrxd, rxd, tmp) do { \
295 			(dstrxd) = (tmp); \
296 			vmxnet3_RxDescToCPU((rxd), (tmp)); \
297 		} while (0)
298 
299 #else
300 
301 #   define VMXNET3_TXDESC_GET_GEN(txdesc) ((txdesc)->gen)
302 #   define VMXNET3_TXDESC_GET_EOP(txdesc) ((txdesc)->eop)
303 #   define VMXNET3_TCD_GET_GEN(tcd) ((tcd)->gen)
304 #   define VMXNET3_TCD_GET_TXIDX(tcd) ((tcd)->txdIdx)
305 #   define vmxnet3_getRxComp(dstrcd, rcd, tmp) (dstrcd) = (rcd)
306 #   define vmxnet3_getRxDesc(dstrxd, rxd, tmp) (dstrxd) = (rxd)
307 
308 #endif /* __BIG_ENDIAN_BITFIELD  */
309 
310 
311 static void
312 vmxnet3_unmap_tx_buf(struct vmxnet3_tx_buf_info *tbi,
313 		     struct pci_dev *pdev)
314 {
315 	if (tbi->map_type == VMXNET3_MAP_SINGLE)
316 		dma_unmap_single(&pdev->dev, tbi->dma_addr, tbi->len,
317 				 PCI_DMA_TODEVICE);
318 	else if (tbi->map_type == VMXNET3_MAP_PAGE)
319 		dma_unmap_page(&pdev->dev, tbi->dma_addr, tbi->len,
320 			       PCI_DMA_TODEVICE);
321 	else
322 		BUG_ON(tbi->map_type != VMXNET3_MAP_NONE);
323 
324 	tbi->map_type = VMXNET3_MAP_NONE; /* to help debugging */
325 }
326 
327 
328 static int
329 vmxnet3_unmap_pkt(u32 eop_idx, struct vmxnet3_tx_queue *tq,
330 		  struct pci_dev *pdev,	struct vmxnet3_adapter *adapter)
331 {
332 	struct sk_buff *skb;
333 	int entries = 0;
334 
335 	/* no out of order completion */
336 	BUG_ON(tq->buf_info[eop_idx].sop_idx != tq->tx_ring.next2comp);
337 	BUG_ON(VMXNET3_TXDESC_GET_EOP(&(tq->tx_ring.base[eop_idx].txd)) != 1);
338 
339 	skb = tq->buf_info[eop_idx].skb;
340 	BUG_ON(skb == NULL);
341 	tq->buf_info[eop_idx].skb = NULL;
342 
343 	VMXNET3_INC_RING_IDX_ONLY(eop_idx, tq->tx_ring.size);
344 
345 	while (tq->tx_ring.next2comp != eop_idx) {
346 		vmxnet3_unmap_tx_buf(tq->buf_info + tq->tx_ring.next2comp,
347 				     pdev);
348 
349 		/* update next2comp w/o tx_lock. Since we are marking more,
350 		 * instead of less, tx ring entries avail, the worst case is
351 		 * that the tx routine incorrectly re-queues a pkt due to
352 		 * insufficient tx ring entries.
353 		 */
354 		vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
355 		entries++;
356 	}
357 
358 	dev_kfree_skb_any(skb);
359 	return entries;
360 }
361 
362 
363 static int
364 vmxnet3_tq_tx_complete(struct vmxnet3_tx_queue *tq,
365 			struct vmxnet3_adapter *adapter)
366 {
367 	int completed = 0;
368 	union Vmxnet3_GenericDesc *gdesc;
369 
370 	gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
371 	while (VMXNET3_TCD_GET_GEN(&gdesc->tcd) == tq->comp_ring.gen) {
372 		completed += vmxnet3_unmap_pkt(VMXNET3_TCD_GET_TXIDX(
373 					       &gdesc->tcd), tq, adapter->pdev,
374 					       adapter);
375 
376 		vmxnet3_comp_ring_adv_next2proc(&tq->comp_ring);
377 		gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
378 	}
379 
380 	if (completed) {
381 		spin_lock(&tq->tx_lock);
382 		if (unlikely(vmxnet3_tq_stopped(tq, adapter) &&
383 			     vmxnet3_cmd_ring_desc_avail(&tq->tx_ring) >
384 			     VMXNET3_WAKE_QUEUE_THRESHOLD(tq) &&
385 			     netif_carrier_ok(adapter->netdev))) {
386 			vmxnet3_tq_wake(tq, adapter);
387 		}
388 		spin_unlock(&tq->tx_lock);
389 	}
390 	return completed;
391 }
392 
393 
394 static void
395 vmxnet3_tq_cleanup(struct vmxnet3_tx_queue *tq,
396 		   struct vmxnet3_adapter *adapter)
397 {
398 	int i;
399 
400 	while (tq->tx_ring.next2comp != tq->tx_ring.next2fill) {
401 		struct vmxnet3_tx_buf_info *tbi;
402 
403 		tbi = tq->buf_info + tq->tx_ring.next2comp;
404 
405 		vmxnet3_unmap_tx_buf(tbi, adapter->pdev);
406 		if (tbi->skb) {
407 			dev_kfree_skb_any(tbi->skb);
408 			tbi->skb = NULL;
409 		}
410 		vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
411 	}
412 
413 	/* sanity check, verify all buffers are indeed unmapped and freed */
414 	for (i = 0; i < tq->tx_ring.size; i++) {
415 		BUG_ON(tq->buf_info[i].skb != NULL ||
416 		       tq->buf_info[i].map_type != VMXNET3_MAP_NONE);
417 	}
418 
419 	tq->tx_ring.gen = VMXNET3_INIT_GEN;
420 	tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
421 
422 	tq->comp_ring.gen = VMXNET3_INIT_GEN;
423 	tq->comp_ring.next2proc = 0;
424 }
425 
426 
427 static void
428 vmxnet3_tq_destroy(struct vmxnet3_tx_queue *tq,
429 		   struct vmxnet3_adapter *adapter)
430 {
431 	if (tq->tx_ring.base) {
432 		dma_free_coherent(&adapter->pdev->dev, tq->tx_ring.size *
433 				  sizeof(struct Vmxnet3_TxDesc),
434 				  tq->tx_ring.base, tq->tx_ring.basePA);
435 		tq->tx_ring.base = NULL;
436 	}
437 	if (tq->data_ring.base) {
438 		dma_free_coherent(&adapter->pdev->dev, tq->data_ring.size *
439 				  sizeof(struct Vmxnet3_TxDataDesc),
440 				  tq->data_ring.base, tq->data_ring.basePA);
441 		tq->data_ring.base = NULL;
442 	}
443 	if (tq->comp_ring.base) {
444 		dma_free_coherent(&adapter->pdev->dev, tq->comp_ring.size *
445 				  sizeof(struct Vmxnet3_TxCompDesc),
446 				  tq->comp_ring.base, tq->comp_ring.basePA);
447 		tq->comp_ring.base = NULL;
448 	}
449 	if (tq->buf_info) {
450 		dma_free_coherent(&adapter->pdev->dev,
451 				  tq->tx_ring.size * sizeof(tq->buf_info[0]),
452 				  tq->buf_info, tq->buf_info_pa);
453 		tq->buf_info = NULL;
454 	}
455 }
456 
457 
458 /* Destroy all tx queues */
459 void
460 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter)
461 {
462 	int i;
463 
464 	for (i = 0; i < adapter->num_tx_queues; i++)
465 		vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter);
466 }
467 
468 
469 static void
470 vmxnet3_tq_init(struct vmxnet3_tx_queue *tq,
471 		struct vmxnet3_adapter *adapter)
472 {
473 	int i;
474 
475 	/* reset the tx ring contents to 0 and reset the tx ring states */
476 	memset(tq->tx_ring.base, 0, tq->tx_ring.size *
477 	       sizeof(struct Vmxnet3_TxDesc));
478 	tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
479 	tq->tx_ring.gen = VMXNET3_INIT_GEN;
480 
481 	memset(tq->data_ring.base, 0, tq->data_ring.size *
482 	       sizeof(struct Vmxnet3_TxDataDesc));
483 
484 	/* reset the tx comp ring contents to 0 and reset comp ring states */
485 	memset(tq->comp_ring.base, 0, tq->comp_ring.size *
486 	       sizeof(struct Vmxnet3_TxCompDesc));
487 	tq->comp_ring.next2proc = 0;
488 	tq->comp_ring.gen = VMXNET3_INIT_GEN;
489 
490 	/* reset the bookkeeping data */
491 	memset(tq->buf_info, 0, sizeof(tq->buf_info[0]) * tq->tx_ring.size);
492 	for (i = 0; i < tq->tx_ring.size; i++)
493 		tq->buf_info[i].map_type = VMXNET3_MAP_NONE;
494 
495 	/* stats are not reset */
496 }
497 
498 
499 static int
500 vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
501 		  struct vmxnet3_adapter *adapter)
502 {
503 	size_t sz;
504 
505 	BUG_ON(tq->tx_ring.base || tq->data_ring.base ||
506 	       tq->comp_ring.base || tq->buf_info);
507 
508 	tq->tx_ring.base = dma_alloc_coherent(&adapter->pdev->dev,
509 			tq->tx_ring.size * sizeof(struct Vmxnet3_TxDesc),
510 			&tq->tx_ring.basePA, GFP_KERNEL);
511 	if (!tq->tx_ring.base) {
512 		netdev_err(adapter->netdev, "failed to allocate tx ring\n");
513 		goto err;
514 	}
515 
516 	tq->data_ring.base = dma_alloc_coherent(&adapter->pdev->dev,
517 			tq->data_ring.size * sizeof(struct Vmxnet3_TxDataDesc),
518 			&tq->data_ring.basePA, GFP_KERNEL);
519 	if (!tq->data_ring.base) {
520 		netdev_err(adapter->netdev, "failed to allocate data ring\n");
521 		goto err;
522 	}
523 
524 	tq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev,
525 			tq->comp_ring.size * sizeof(struct Vmxnet3_TxCompDesc),
526 			&tq->comp_ring.basePA, GFP_KERNEL);
527 	if (!tq->comp_ring.base) {
528 		netdev_err(adapter->netdev, "failed to allocate tx comp ring\n");
529 		goto err;
530 	}
531 
532 	sz = tq->tx_ring.size * sizeof(tq->buf_info[0]);
533 	tq->buf_info = dma_zalloc_coherent(&adapter->pdev->dev, sz,
534 					   &tq->buf_info_pa, GFP_KERNEL);
535 	if (!tq->buf_info)
536 		goto err;
537 
538 	return 0;
539 
540 err:
541 	vmxnet3_tq_destroy(tq, adapter);
542 	return -ENOMEM;
543 }
544 
545 static void
546 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter)
547 {
548 	int i;
549 
550 	for (i = 0; i < adapter->num_tx_queues; i++)
551 		vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter);
552 }
553 
554 /*
555  *    starting from ring->next2fill, allocate rx buffers for the given ring
556  *    of the rx queue and update the rx desc. stop after @num_to_alloc buffers
557  *    are allocated or allocation fails
558  */
559 
560 static int
561 vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
562 			int num_to_alloc, struct vmxnet3_adapter *adapter)
563 {
564 	int num_allocated = 0;
565 	struct vmxnet3_rx_buf_info *rbi_base = rq->buf_info[ring_idx];
566 	struct vmxnet3_cmd_ring *ring = &rq->rx_ring[ring_idx];
567 	u32 val;
568 
569 	while (num_allocated <= num_to_alloc) {
570 		struct vmxnet3_rx_buf_info *rbi;
571 		union Vmxnet3_GenericDesc *gd;
572 
573 		rbi = rbi_base + ring->next2fill;
574 		gd = ring->base + ring->next2fill;
575 
576 		if (rbi->buf_type == VMXNET3_RX_BUF_SKB) {
577 			if (rbi->skb == NULL) {
578 				rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev,
579 								       rbi->len,
580 								       GFP_KERNEL);
581 				if (unlikely(rbi->skb == NULL)) {
582 					rq->stats.rx_buf_alloc_failure++;
583 					break;
584 				}
585 
586 				rbi->dma_addr = dma_map_single(
587 						&adapter->pdev->dev,
588 						rbi->skb->data, rbi->len,
589 						PCI_DMA_FROMDEVICE);
590 			} else {
591 				/* rx buffer skipped by the device */
592 			}
593 			val = VMXNET3_RXD_BTYPE_HEAD << VMXNET3_RXD_BTYPE_SHIFT;
594 		} else {
595 			BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_PAGE ||
596 			       rbi->len  != PAGE_SIZE);
597 
598 			if (rbi->page == NULL) {
599 				rbi->page = alloc_page(GFP_ATOMIC);
600 				if (unlikely(rbi->page == NULL)) {
601 					rq->stats.rx_buf_alloc_failure++;
602 					break;
603 				}
604 				rbi->dma_addr = dma_map_page(
605 						&adapter->pdev->dev,
606 						rbi->page, 0, PAGE_SIZE,
607 						PCI_DMA_FROMDEVICE);
608 			} else {
609 				/* rx buffers skipped by the device */
610 			}
611 			val = VMXNET3_RXD_BTYPE_BODY << VMXNET3_RXD_BTYPE_SHIFT;
612 		}
613 
614 		BUG_ON(rbi->dma_addr == 0);
615 		gd->rxd.addr = cpu_to_le64(rbi->dma_addr);
616 		gd->dword[2] = cpu_to_le32((!ring->gen << VMXNET3_RXD_GEN_SHIFT)
617 					   | val | rbi->len);
618 
619 		/* Fill the last buffer but dont mark it ready, or else the
620 		 * device will think that the queue is full */
621 		if (num_allocated == num_to_alloc)
622 			break;
623 
624 		gd->dword[2] |= cpu_to_le32(ring->gen << VMXNET3_RXD_GEN_SHIFT);
625 		num_allocated++;
626 		vmxnet3_cmd_ring_adv_next2fill(ring);
627 	}
628 
629 	netdev_dbg(adapter->netdev,
630 		"alloc_rx_buf: %d allocated, next2fill %u, next2comp %u\n",
631 		num_allocated, ring->next2fill, ring->next2comp);
632 
633 	/* so that the device can distinguish a full ring and an empty ring */
634 	BUG_ON(num_allocated != 0 && ring->next2fill == ring->next2comp);
635 
636 	return num_allocated;
637 }
638 
639 
640 static void
641 vmxnet3_append_frag(struct sk_buff *skb, struct Vmxnet3_RxCompDesc *rcd,
642 		    struct vmxnet3_rx_buf_info *rbi)
643 {
644 	struct skb_frag_struct *frag = skb_shinfo(skb)->frags +
645 		skb_shinfo(skb)->nr_frags;
646 
647 	BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
648 
649 	__skb_frag_set_page(frag, rbi->page);
650 	frag->page_offset = 0;
651 	skb_frag_size_set(frag, rcd->len);
652 	skb->data_len += rcd->len;
653 	skb->truesize += PAGE_SIZE;
654 	skb_shinfo(skb)->nr_frags++;
655 }
656 
657 
658 static void
659 vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
660 		struct vmxnet3_tx_queue *tq, struct pci_dev *pdev,
661 		struct vmxnet3_adapter *adapter)
662 {
663 	u32 dw2, len;
664 	unsigned long buf_offset;
665 	int i;
666 	union Vmxnet3_GenericDesc *gdesc;
667 	struct vmxnet3_tx_buf_info *tbi = NULL;
668 
669 	BUG_ON(ctx->copy_size > skb_headlen(skb));
670 
671 	/* use the previous gen bit for the SOP desc */
672 	dw2 = (tq->tx_ring.gen ^ 0x1) << VMXNET3_TXD_GEN_SHIFT;
673 
674 	ctx->sop_txd = tq->tx_ring.base + tq->tx_ring.next2fill;
675 	gdesc = ctx->sop_txd; /* both loops below can be skipped */
676 
677 	/* no need to map the buffer if headers are copied */
678 	if (ctx->copy_size) {
679 		ctx->sop_txd->txd.addr = cpu_to_le64(tq->data_ring.basePA +
680 					tq->tx_ring.next2fill *
681 					sizeof(struct Vmxnet3_TxDataDesc));
682 		ctx->sop_txd->dword[2] = cpu_to_le32(dw2 | ctx->copy_size);
683 		ctx->sop_txd->dword[3] = 0;
684 
685 		tbi = tq->buf_info + tq->tx_ring.next2fill;
686 		tbi->map_type = VMXNET3_MAP_NONE;
687 
688 		netdev_dbg(adapter->netdev,
689 			"txd[%u]: 0x%Lx 0x%x 0x%x\n",
690 			tq->tx_ring.next2fill,
691 			le64_to_cpu(ctx->sop_txd->txd.addr),
692 			ctx->sop_txd->dword[2], ctx->sop_txd->dword[3]);
693 		vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
694 
695 		/* use the right gen for non-SOP desc */
696 		dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
697 	}
698 
699 	/* linear part can use multiple tx desc if it's big */
700 	len = skb_headlen(skb) - ctx->copy_size;
701 	buf_offset = ctx->copy_size;
702 	while (len) {
703 		u32 buf_size;
704 
705 		if (len < VMXNET3_MAX_TX_BUF_SIZE) {
706 			buf_size = len;
707 			dw2 |= len;
708 		} else {
709 			buf_size = VMXNET3_MAX_TX_BUF_SIZE;
710 			/* spec says that for TxDesc.len, 0 == 2^14 */
711 		}
712 
713 		tbi = tq->buf_info + tq->tx_ring.next2fill;
714 		tbi->map_type = VMXNET3_MAP_SINGLE;
715 		tbi->dma_addr = dma_map_single(&adapter->pdev->dev,
716 				skb->data + buf_offset, buf_size,
717 				PCI_DMA_TODEVICE);
718 
719 		tbi->len = buf_size;
720 
721 		gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
722 		BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
723 
724 		gdesc->txd.addr = cpu_to_le64(tbi->dma_addr);
725 		gdesc->dword[2] = cpu_to_le32(dw2);
726 		gdesc->dword[3] = 0;
727 
728 		netdev_dbg(adapter->netdev,
729 			"txd[%u]: 0x%Lx 0x%x 0x%x\n",
730 			tq->tx_ring.next2fill, le64_to_cpu(gdesc->txd.addr),
731 			le32_to_cpu(gdesc->dword[2]), gdesc->dword[3]);
732 		vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
733 		dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
734 
735 		len -= buf_size;
736 		buf_offset += buf_size;
737 	}
738 
739 	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
740 		const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
741 		u32 buf_size;
742 
743 		buf_offset = 0;
744 		len = skb_frag_size(frag);
745 		while (len) {
746 			tbi = tq->buf_info + tq->tx_ring.next2fill;
747 			if (len < VMXNET3_MAX_TX_BUF_SIZE) {
748 				buf_size = len;
749 				dw2 |= len;
750 			} else {
751 				buf_size = VMXNET3_MAX_TX_BUF_SIZE;
752 				/* spec says that for TxDesc.len, 0 == 2^14 */
753 			}
754 			tbi->map_type = VMXNET3_MAP_PAGE;
755 			tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag,
756 							 buf_offset, buf_size,
757 							 DMA_TO_DEVICE);
758 
759 			tbi->len = buf_size;
760 
761 			gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
762 			BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
763 
764 			gdesc->txd.addr = cpu_to_le64(tbi->dma_addr);
765 			gdesc->dword[2] = cpu_to_le32(dw2);
766 			gdesc->dword[3] = 0;
767 
768 			netdev_dbg(adapter->netdev,
769 				"txd[%u]: 0x%llu %u %u\n",
770 				tq->tx_ring.next2fill, le64_to_cpu(gdesc->txd.addr),
771 				le32_to_cpu(gdesc->dword[2]), gdesc->dword[3]);
772 			vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
773 			dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
774 
775 			len -= buf_size;
776 			buf_offset += buf_size;
777 		}
778 	}
779 
780 	ctx->eop_txd = gdesc;
781 
782 	/* set the last buf_info for the pkt */
783 	tbi->skb = skb;
784 	tbi->sop_idx = ctx->sop_txd - tq->tx_ring.base;
785 }
786 
787 
788 /* Init all tx queues */
789 static void
790 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter)
791 {
792 	int i;
793 
794 	for (i = 0; i < adapter->num_tx_queues; i++)
795 		vmxnet3_tq_init(&adapter->tx_queue[i], adapter);
796 }
797 
798 
799 /*
800  *    parse and copy relevant protocol headers:
801  *      For a tso pkt, relevant headers are L2/3/4 including options
802  *      For a pkt requesting csum offloading, they are L2/3 and may include L4
803  *      if it's a TCP/UDP pkt
804  *
805  * Returns:
806  *    -1:  error happens during parsing
807  *     0:  protocol headers parsed, but too big to be copied
808  *     1:  protocol headers parsed and copied
809  *
810  * Other effects:
811  *    1. related *ctx fields are updated.
812  *    2. ctx->copy_size is # of bytes copied
813  *    3. the portion copied is guaranteed to be in the linear part
814  *
815  */
816 static int
817 vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
818 			   struct vmxnet3_tx_ctx *ctx,
819 			   struct vmxnet3_adapter *adapter)
820 {
821 	struct Vmxnet3_TxDataDesc *tdd;
822 
823 	if (ctx->mss) {	/* TSO */
824 		ctx->eth_ip_hdr_size = skb_transport_offset(skb);
825 		ctx->l4_hdr_size = tcp_hdrlen(skb);
826 		ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size;
827 	} else {
828 		if (skb->ip_summed == CHECKSUM_PARTIAL) {
829 			ctx->eth_ip_hdr_size = skb_checksum_start_offset(skb);
830 
831 			if (ctx->ipv4) {
832 				const struct iphdr *iph = ip_hdr(skb);
833 
834 				if (iph->protocol == IPPROTO_TCP)
835 					ctx->l4_hdr_size = tcp_hdrlen(skb);
836 				else if (iph->protocol == IPPROTO_UDP)
837 					ctx->l4_hdr_size = sizeof(struct udphdr);
838 				else
839 					ctx->l4_hdr_size = 0;
840 			} else {
841 				/* for simplicity, don't copy L4 headers */
842 				ctx->l4_hdr_size = 0;
843 			}
844 			ctx->copy_size = min(ctx->eth_ip_hdr_size +
845 					 ctx->l4_hdr_size, skb->len);
846 		} else {
847 			ctx->eth_ip_hdr_size = 0;
848 			ctx->l4_hdr_size = 0;
849 			/* copy as much as allowed */
850 			ctx->copy_size = min((unsigned int)VMXNET3_HDR_COPY_SIZE
851 					     , skb_headlen(skb));
852 		}
853 
854 		/* make sure headers are accessible directly */
855 		if (unlikely(!pskb_may_pull(skb, ctx->copy_size)))
856 			goto err;
857 	}
858 
859 	if (unlikely(ctx->copy_size > VMXNET3_HDR_COPY_SIZE)) {
860 		tq->stats.oversized_hdr++;
861 		ctx->copy_size = 0;
862 		return 0;
863 	}
864 
865 	tdd = tq->data_ring.base + tq->tx_ring.next2fill;
866 
867 	memcpy(tdd->data, skb->data, ctx->copy_size);
868 	netdev_dbg(adapter->netdev,
869 		"copy %u bytes to dataRing[%u]\n",
870 		ctx->copy_size, tq->tx_ring.next2fill);
871 	return 1;
872 
873 err:
874 	return -1;
875 }
876 
877 
878 static void
879 vmxnet3_prepare_tso(struct sk_buff *skb,
880 		    struct vmxnet3_tx_ctx *ctx)
881 {
882 	struct tcphdr *tcph = tcp_hdr(skb);
883 
884 	if (ctx->ipv4) {
885 		struct iphdr *iph = ip_hdr(skb);
886 
887 		iph->check = 0;
888 		tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 0,
889 						 IPPROTO_TCP, 0);
890 	} else {
891 		struct ipv6hdr *iph = ipv6_hdr(skb);
892 
893 		tcph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, 0,
894 					       IPPROTO_TCP, 0);
895 	}
896 }
897 
898 static int txd_estimate(const struct sk_buff *skb)
899 {
900 	int count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1;
901 	int i;
902 
903 	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
904 		const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
905 
906 		count += VMXNET3_TXD_NEEDED(skb_frag_size(frag));
907 	}
908 	return count;
909 }
910 
911 /*
912  * Transmits a pkt thru a given tq
913  * Returns:
914  *    NETDEV_TX_OK:      descriptors are setup successfully
915  *    NETDEV_TX_OK:      error occurred, the pkt is dropped
916  *    NETDEV_TX_BUSY:    tx ring is full, queue is stopped
917  *
918  * Side-effects:
919  *    1. tx ring may be changed
920  *    2. tq stats may be updated accordingly
921  *    3. shared->txNumDeferred may be updated
922  */
923 
924 static int
925 vmxnet3_tq_xmit(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
926 		struct vmxnet3_adapter *adapter, struct net_device *netdev)
927 {
928 	int ret;
929 	u32 count;
930 	unsigned long flags;
931 	struct vmxnet3_tx_ctx ctx;
932 	union Vmxnet3_GenericDesc *gdesc;
933 #ifdef __BIG_ENDIAN_BITFIELD
934 	/* Use temporary descriptor to avoid touching bits multiple times */
935 	union Vmxnet3_GenericDesc tempTxDesc;
936 #endif
937 
938 	count = txd_estimate(skb);
939 
940 	ctx.ipv4 = (vlan_get_protocol(skb) == cpu_to_be16(ETH_P_IP));
941 
942 	ctx.mss = skb_shinfo(skb)->gso_size;
943 	if (ctx.mss) {
944 		if (skb_header_cloned(skb)) {
945 			if (unlikely(pskb_expand_head(skb, 0, 0,
946 						      GFP_ATOMIC) != 0)) {
947 				tq->stats.drop_tso++;
948 				goto drop_pkt;
949 			}
950 			tq->stats.copy_skb_header++;
951 		}
952 		vmxnet3_prepare_tso(skb, &ctx);
953 	} else {
954 		if (unlikely(count > VMXNET3_MAX_TXD_PER_PKT)) {
955 
956 			/* non-tso pkts must not use more than
957 			 * VMXNET3_MAX_TXD_PER_PKT entries
958 			 */
959 			if (skb_linearize(skb) != 0) {
960 				tq->stats.drop_too_many_frags++;
961 				goto drop_pkt;
962 			}
963 			tq->stats.linearized++;
964 
965 			/* recalculate the # of descriptors to use */
966 			count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1;
967 		}
968 	}
969 
970 	spin_lock_irqsave(&tq->tx_lock, flags);
971 
972 	if (count > vmxnet3_cmd_ring_desc_avail(&tq->tx_ring)) {
973 		tq->stats.tx_ring_full++;
974 		netdev_dbg(adapter->netdev,
975 			"tx queue stopped on %s, next2comp %u"
976 			" next2fill %u\n", adapter->netdev->name,
977 			tq->tx_ring.next2comp, tq->tx_ring.next2fill);
978 
979 		vmxnet3_tq_stop(tq, adapter);
980 		spin_unlock_irqrestore(&tq->tx_lock, flags);
981 		return NETDEV_TX_BUSY;
982 	}
983 
984 
985 	ret = vmxnet3_parse_and_copy_hdr(skb, tq, &ctx, adapter);
986 	if (ret >= 0) {
987 		BUG_ON(ret <= 0 && ctx.copy_size != 0);
988 		/* hdrs parsed, check against other limits */
989 		if (ctx.mss) {
990 			if (unlikely(ctx.eth_ip_hdr_size + ctx.l4_hdr_size >
991 				     VMXNET3_MAX_TX_BUF_SIZE)) {
992 				goto hdr_too_big;
993 			}
994 		} else {
995 			if (skb->ip_summed == CHECKSUM_PARTIAL) {
996 				if (unlikely(ctx.eth_ip_hdr_size +
997 					     skb->csum_offset >
998 					     VMXNET3_MAX_CSUM_OFFSET)) {
999 					goto hdr_too_big;
1000 				}
1001 			}
1002 		}
1003 	} else {
1004 		tq->stats.drop_hdr_inspect_err++;
1005 		goto unlock_drop_pkt;
1006 	}
1007 
1008 	/* fill tx descs related to addr & len */
1009 	vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter);
1010 
1011 	/* setup the EOP desc */
1012 	ctx.eop_txd->dword[3] = cpu_to_le32(VMXNET3_TXD_CQ | VMXNET3_TXD_EOP);
1013 
1014 	/* setup the SOP desc */
1015 #ifdef __BIG_ENDIAN_BITFIELD
1016 	gdesc = &tempTxDesc;
1017 	gdesc->dword[2] = ctx.sop_txd->dword[2];
1018 	gdesc->dword[3] = ctx.sop_txd->dword[3];
1019 #else
1020 	gdesc = ctx.sop_txd;
1021 #endif
1022 	if (ctx.mss) {
1023 		gdesc->txd.hlen = ctx.eth_ip_hdr_size + ctx.l4_hdr_size;
1024 		gdesc->txd.om = VMXNET3_OM_TSO;
1025 		gdesc->txd.msscof = ctx.mss;
1026 		le32_add_cpu(&tq->shared->txNumDeferred, (skb->len -
1027 			     gdesc->txd.hlen + ctx.mss - 1) / ctx.mss);
1028 	} else {
1029 		if (skb->ip_summed == CHECKSUM_PARTIAL) {
1030 			gdesc->txd.hlen = ctx.eth_ip_hdr_size;
1031 			gdesc->txd.om = VMXNET3_OM_CSUM;
1032 			gdesc->txd.msscof = ctx.eth_ip_hdr_size +
1033 					    skb->csum_offset;
1034 		} else {
1035 			gdesc->txd.om = 0;
1036 			gdesc->txd.msscof = 0;
1037 		}
1038 		le32_add_cpu(&tq->shared->txNumDeferred, 1);
1039 	}
1040 
1041 	if (vlan_tx_tag_present(skb)) {
1042 		gdesc->txd.ti = 1;
1043 		gdesc->txd.tci = vlan_tx_tag_get(skb);
1044 	}
1045 
1046 	/* finally flips the GEN bit of the SOP desc. */
1047 	gdesc->dword[2] = cpu_to_le32(le32_to_cpu(gdesc->dword[2]) ^
1048 						  VMXNET3_TXD_GEN);
1049 #ifdef __BIG_ENDIAN_BITFIELD
1050 	/* Finished updating in bitfields of Tx Desc, so write them in original
1051 	 * place.
1052 	 */
1053 	vmxnet3_TxDescToLe((struct Vmxnet3_TxDesc *)gdesc,
1054 			   (struct Vmxnet3_TxDesc *)ctx.sop_txd);
1055 	gdesc = ctx.sop_txd;
1056 #endif
1057 	netdev_dbg(adapter->netdev,
1058 		"txd[%u]: SOP 0x%Lx 0x%x 0x%x\n",
1059 		(u32)(ctx.sop_txd -
1060 		tq->tx_ring.base), le64_to_cpu(gdesc->txd.addr),
1061 		le32_to_cpu(gdesc->dword[2]), le32_to_cpu(gdesc->dword[3]));
1062 
1063 	spin_unlock_irqrestore(&tq->tx_lock, flags);
1064 
1065 	if (le32_to_cpu(tq->shared->txNumDeferred) >=
1066 					le32_to_cpu(tq->shared->txThreshold)) {
1067 		tq->shared->txNumDeferred = 0;
1068 		VMXNET3_WRITE_BAR0_REG(adapter,
1069 				       VMXNET3_REG_TXPROD + tq->qid * 8,
1070 				       tq->tx_ring.next2fill);
1071 	}
1072 
1073 	return NETDEV_TX_OK;
1074 
1075 hdr_too_big:
1076 	tq->stats.drop_oversized_hdr++;
1077 unlock_drop_pkt:
1078 	spin_unlock_irqrestore(&tq->tx_lock, flags);
1079 drop_pkt:
1080 	tq->stats.drop_total++;
1081 	dev_kfree_skb(skb);
1082 	return NETDEV_TX_OK;
1083 }
1084 
1085 
1086 static netdev_tx_t
1087 vmxnet3_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1088 {
1089 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1090 
1091 	BUG_ON(skb->queue_mapping > adapter->num_tx_queues);
1092 	return vmxnet3_tq_xmit(skb,
1093 			       &adapter->tx_queue[skb->queue_mapping],
1094 			       adapter, netdev);
1095 }
1096 
1097 
1098 static void
1099 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
1100 		struct sk_buff *skb,
1101 		union Vmxnet3_GenericDesc *gdesc)
1102 {
1103 	if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) {
1104 		/* typical case: TCP/UDP over IP and both csums are correct */
1105 		if ((le32_to_cpu(gdesc->dword[3]) & VMXNET3_RCD_CSUM_OK) ==
1106 							VMXNET3_RCD_CSUM_OK) {
1107 			skb->ip_summed = CHECKSUM_UNNECESSARY;
1108 			BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
1109 			BUG_ON(!(gdesc->rcd.v4  || gdesc->rcd.v6));
1110 			BUG_ON(gdesc->rcd.frg);
1111 		} else {
1112 			if (gdesc->rcd.csum) {
1113 				skb->csum = htons(gdesc->rcd.csum);
1114 				skb->ip_summed = CHECKSUM_PARTIAL;
1115 			} else {
1116 				skb_checksum_none_assert(skb);
1117 			}
1118 		}
1119 	} else {
1120 		skb_checksum_none_assert(skb);
1121 	}
1122 }
1123 
1124 
1125 static void
1126 vmxnet3_rx_error(struct vmxnet3_rx_queue *rq, struct Vmxnet3_RxCompDesc *rcd,
1127 		 struct vmxnet3_rx_ctx *ctx,  struct vmxnet3_adapter *adapter)
1128 {
1129 	rq->stats.drop_err++;
1130 	if (!rcd->fcs)
1131 		rq->stats.drop_fcs++;
1132 
1133 	rq->stats.drop_total++;
1134 
1135 	/*
1136 	 * We do not unmap and chain the rx buffer to the skb.
1137 	 * We basically pretend this buffer is not used and will be recycled
1138 	 * by vmxnet3_rq_alloc_rx_buf()
1139 	 */
1140 
1141 	/*
1142 	 * ctx->skb may be NULL if this is the first and the only one
1143 	 * desc for the pkt
1144 	 */
1145 	if (ctx->skb)
1146 		dev_kfree_skb_irq(ctx->skb);
1147 
1148 	ctx->skb = NULL;
1149 }
1150 
1151 
1152 static int
1153 vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
1154 		       struct vmxnet3_adapter *adapter, int quota)
1155 {
1156 	static const u32 rxprod_reg[2] = {
1157 		VMXNET3_REG_RXPROD, VMXNET3_REG_RXPROD2
1158 	};
1159 	u32 num_rxd = 0;
1160 	bool skip_page_frags = false;
1161 	struct Vmxnet3_RxCompDesc *rcd;
1162 	struct vmxnet3_rx_ctx *ctx = &rq->rx_ctx;
1163 #ifdef __BIG_ENDIAN_BITFIELD
1164 	struct Vmxnet3_RxDesc rxCmdDesc;
1165 	struct Vmxnet3_RxCompDesc rxComp;
1166 #endif
1167 	vmxnet3_getRxComp(rcd, &rq->comp_ring.base[rq->comp_ring.next2proc].rcd,
1168 			  &rxComp);
1169 	while (rcd->gen == rq->comp_ring.gen) {
1170 		struct vmxnet3_rx_buf_info *rbi;
1171 		struct sk_buff *skb, *new_skb = NULL;
1172 		struct page *new_page = NULL;
1173 		int num_to_alloc;
1174 		struct Vmxnet3_RxDesc *rxd;
1175 		u32 idx, ring_idx;
1176 		struct vmxnet3_cmd_ring	*ring = NULL;
1177 		if (num_rxd >= quota) {
1178 			/* we may stop even before we see the EOP desc of
1179 			 * the current pkt
1180 			 */
1181 			break;
1182 		}
1183 		num_rxd++;
1184 		BUG_ON(rcd->rqID != rq->qid && rcd->rqID != rq->qid2);
1185 		idx = rcd->rxdIdx;
1186 		ring_idx = rcd->rqID < adapter->num_rx_queues ? 0 : 1;
1187 		ring = rq->rx_ring + ring_idx;
1188 		vmxnet3_getRxDesc(rxd, &rq->rx_ring[ring_idx].base[idx].rxd,
1189 				  &rxCmdDesc);
1190 		rbi = rq->buf_info[ring_idx] + idx;
1191 
1192 		BUG_ON(rxd->addr != rbi->dma_addr ||
1193 		       rxd->len != rbi->len);
1194 
1195 		if (unlikely(rcd->eop && rcd->err)) {
1196 			vmxnet3_rx_error(rq, rcd, ctx, adapter);
1197 			goto rcd_done;
1198 		}
1199 
1200 		if (rcd->sop) { /* first buf of the pkt */
1201 			BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_HEAD ||
1202 			       rcd->rqID != rq->qid);
1203 
1204 			BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_SKB);
1205 			BUG_ON(ctx->skb != NULL || rbi->skb == NULL);
1206 
1207 			if (unlikely(rcd->len == 0)) {
1208 				/* Pretend the rx buffer is skipped. */
1209 				BUG_ON(!(rcd->sop && rcd->eop));
1210 				netdev_dbg(adapter->netdev,
1211 					"rxRing[%u][%u] 0 length\n",
1212 					ring_idx, idx);
1213 				goto rcd_done;
1214 			}
1215 
1216 			skip_page_frags = false;
1217 			ctx->skb = rbi->skb;
1218 			new_skb = netdev_alloc_skb_ip_align(adapter->netdev,
1219 							    rbi->len);
1220 			if (new_skb == NULL) {
1221 				/* Skb allocation failed, do not handover this
1222 				 * skb to stack. Reuse it. Drop the existing pkt
1223 				 */
1224 				rq->stats.rx_buf_alloc_failure++;
1225 				ctx->skb = NULL;
1226 				rq->stats.drop_total++;
1227 				skip_page_frags = true;
1228 				goto rcd_done;
1229 			}
1230 
1231 			dma_unmap_single(&adapter->pdev->dev, rbi->dma_addr,
1232 					 rbi->len,
1233 					 PCI_DMA_FROMDEVICE);
1234 
1235 #ifdef VMXNET3_RSS
1236 			if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE &&
1237 			    (adapter->netdev->features & NETIF_F_RXHASH))
1238 				skb_set_hash(ctx->skb,
1239 					     le32_to_cpu(rcd->rssHash),
1240 					     PKT_HASH_TYPE_L3);
1241 #endif
1242 			skb_put(ctx->skb, rcd->len);
1243 
1244 			/* Immediate refill */
1245 			rbi->skb = new_skb;
1246 			rbi->dma_addr = dma_map_single(&adapter->pdev->dev,
1247 						       rbi->skb->data, rbi->len,
1248 						       PCI_DMA_FROMDEVICE);
1249 			rxd->addr = cpu_to_le64(rbi->dma_addr);
1250 			rxd->len = rbi->len;
1251 
1252 		} else {
1253 			BUG_ON(ctx->skb == NULL && !skip_page_frags);
1254 
1255 			/* non SOP buffer must be type 1 in most cases */
1256 			BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_PAGE);
1257 			BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_BODY);
1258 
1259 			/* If an sop buffer was dropped, skip all
1260 			 * following non-sop fragments. They will be reused.
1261 			 */
1262 			if (skip_page_frags)
1263 				goto rcd_done;
1264 
1265 			new_page = alloc_page(GFP_ATOMIC);
1266 			if (unlikely(new_page == NULL)) {
1267 				/* Replacement page frag could not be allocated.
1268 				 * Reuse this page. Drop the pkt and free the
1269 				 * skb which contained this page as a frag. Skip
1270 				 * processing all the following non-sop frags.
1271 				 */
1272 				rq->stats.rx_buf_alloc_failure++;
1273 				dev_kfree_skb(ctx->skb);
1274 				ctx->skb = NULL;
1275 				skip_page_frags = true;
1276 				goto rcd_done;
1277 			}
1278 
1279 			if (rcd->len) {
1280 				dma_unmap_page(&adapter->pdev->dev,
1281 					       rbi->dma_addr, rbi->len,
1282 					       PCI_DMA_FROMDEVICE);
1283 
1284 				vmxnet3_append_frag(ctx->skb, rcd, rbi);
1285 			}
1286 
1287 			/* Immediate refill */
1288 			rbi->page = new_page;
1289 			rbi->dma_addr = dma_map_page(&adapter->pdev->dev,
1290 						     rbi->page,
1291 						     0, PAGE_SIZE,
1292 						     PCI_DMA_FROMDEVICE);
1293 			rxd->addr = cpu_to_le64(rbi->dma_addr);
1294 			rxd->len = rbi->len;
1295 		}
1296 
1297 
1298 		skb = ctx->skb;
1299 		if (rcd->eop) {
1300 			skb->len += skb->data_len;
1301 
1302 			vmxnet3_rx_csum(adapter, skb,
1303 					(union Vmxnet3_GenericDesc *)rcd);
1304 			skb->protocol = eth_type_trans(skb, adapter->netdev);
1305 
1306 			if (unlikely(rcd->ts))
1307 				__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rcd->tci);
1308 
1309 			if (adapter->netdev->features & NETIF_F_LRO)
1310 				netif_receive_skb(skb);
1311 			else
1312 				napi_gro_receive(&rq->napi, skb);
1313 
1314 			ctx->skb = NULL;
1315 		}
1316 
1317 rcd_done:
1318 		/* device may have skipped some rx descs */
1319 		ring->next2comp = idx;
1320 		num_to_alloc = vmxnet3_cmd_ring_desc_avail(ring);
1321 		ring = rq->rx_ring + ring_idx;
1322 		while (num_to_alloc) {
1323 			vmxnet3_getRxDesc(rxd, &ring->base[ring->next2fill].rxd,
1324 					  &rxCmdDesc);
1325 			BUG_ON(!rxd->addr);
1326 
1327 			/* Recv desc is ready to be used by the device */
1328 			rxd->gen = ring->gen;
1329 			vmxnet3_cmd_ring_adv_next2fill(ring);
1330 			num_to_alloc--;
1331 		}
1332 
1333 		/* if needed, update the register */
1334 		if (unlikely(rq->shared->updateRxProd)) {
1335 			VMXNET3_WRITE_BAR0_REG(adapter,
1336 					       rxprod_reg[ring_idx] + rq->qid * 8,
1337 					       ring->next2fill);
1338 		}
1339 
1340 		vmxnet3_comp_ring_adv_next2proc(&rq->comp_ring);
1341 		vmxnet3_getRxComp(rcd,
1342 				  &rq->comp_ring.base[rq->comp_ring.next2proc].rcd, &rxComp);
1343 	}
1344 
1345 	return num_rxd;
1346 }
1347 
1348 
1349 static void
1350 vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,
1351 		   struct vmxnet3_adapter *adapter)
1352 {
1353 	u32 i, ring_idx;
1354 	struct Vmxnet3_RxDesc *rxd;
1355 
1356 	for (ring_idx = 0; ring_idx < 2; ring_idx++) {
1357 		for (i = 0; i < rq->rx_ring[ring_idx].size; i++) {
1358 #ifdef __BIG_ENDIAN_BITFIELD
1359 			struct Vmxnet3_RxDesc rxDesc;
1360 #endif
1361 			vmxnet3_getRxDesc(rxd,
1362 				&rq->rx_ring[ring_idx].base[i].rxd, &rxDesc);
1363 
1364 			if (rxd->btype == VMXNET3_RXD_BTYPE_HEAD &&
1365 					rq->buf_info[ring_idx][i].skb) {
1366 				dma_unmap_single(&adapter->pdev->dev, rxd->addr,
1367 						 rxd->len, PCI_DMA_FROMDEVICE);
1368 				dev_kfree_skb(rq->buf_info[ring_idx][i].skb);
1369 				rq->buf_info[ring_idx][i].skb = NULL;
1370 			} else if (rxd->btype == VMXNET3_RXD_BTYPE_BODY &&
1371 					rq->buf_info[ring_idx][i].page) {
1372 				dma_unmap_page(&adapter->pdev->dev, rxd->addr,
1373 					       rxd->len, PCI_DMA_FROMDEVICE);
1374 				put_page(rq->buf_info[ring_idx][i].page);
1375 				rq->buf_info[ring_idx][i].page = NULL;
1376 			}
1377 		}
1378 
1379 		rq->rx_ring[ring_idx].gen = VMXNET3_INIT_GEN;
1380 		rq->rx_ring[ring_idx].next2fill =
1381 					rq->rx_ring[ring_idx].next2comp = 0;
1382 	}
1383 
1384 	rq->comp_ring.gen = VMXNET3_INIT_GEN;
1385 	rq->comp_ring.next2proc = 0;
1386 }
1387 
1388 
1389 static void
1390 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter)
1391 {
1392 	int i;
1393 
1394 	for (i = 0; i < adapter->num_rx_queues; i++)
1395 		vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter);
1396 }
1397 
1398 
1399 static void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
1400 			       struct vmxnet3_adapter *adapter)
1401 {
1402 	int i;
1403 	int j;
1404 
1405 	/* all rx buffers must have already been freed */
1406 	for (i = 0; i < 2; i++) {
1407 		if (rq->buf_info[i]) {
1408 			for (j = 0; j < rq->rx_ring[i].size; j++)
1409 				BUG_ON(rq->buf_info[i][j].page != NULL);
1410 		}
1411 	}
1412 
1413 
1414 	for (i = 0; i < 2; i++) {
1415 		if (rq->rx_ring[i].base) {
1416 			dma_free_coherent(&adapter->pdev->dev,
1417 					  rq->rx_ring[i].size
1418 					  * sizeof(struct Vmxnet3_RxDesc),
1419 					  rq->rx_ring[i].base,
1420 					  rq->rx_ring[i].basePA);
1421 			rq->rx_ring[i].base = NULL;
1422 		}
1423 		rq->buf_info[i] = NULL;
1424 	}
1425 
1426 	if (rq->comp_ring.base) {
1427 		dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size
1428 				  * sizeof(struct Vmxnet3_RxCompDesc),
1429 				  rq->comp_ring.base, rq->comp_ring.basePA);
1430 		rq->comp_ring.base = NULL;
1431 	}
1432 
1433 	if (rq->buf_info[0]) {
1434 		size_t sz = sizeof(struct vmxnet3_rx_buf_info) *
1435 			(rq->rx_ring[0].size + rq->rx_ring[1].size);
1436 		dma_free_coherent(&adapter->pdev->dev, sz, rq->buf_info[0],
1437 				  rq->buf_info_pa);
1438 	}
1439 }
1440 
1441 
1442 static int
1443 vmxnet3_rq_init(struct vmxnet3_rx_queue *rq,
1444 		struct vmxnet3_adapter  *adapter)
1445 {
1446 	int i;
1447 
1448 	/* initialize buf_info */
1449 	for (i = 0; i < rq->rx_ring[0].size; i++) {
1450 
1451 		/* 1st buf for a pkt is skbuff */
1452 		if (i % adapter->rx_buf_per_pkt == 0) {
1453 			rq->buf_info[0][i].buf_type = VMXNET3_RX_BUF_SKB;
1454 			rq->buf_info[0][i].len = adapter->skb_buf_size;
1455 		} else { /* subsequent bufs for a pkt is frag */
1456 			rq->buf_info[0][i].buf_type = VMXNET3_RX_BUF_PAGE;
1457 			rq->buf_info[0][i].len = PAGE_SIZE;
1458 		}
1459 	}
1460 	for (i = 0; i < rq->rx_ring[1].size; i++) {
1461 		rq->buf_info[1][i].buf_type = VMXNET3_RX_BUF_PAGE;
1462 		rq->buf_info[1][i].len = PAGE_SIZE;
1463 	}
1464 
1465 	/* reset internal state and allocate buffers for both rings */
1466 	for (i = 0; i < 2; i++) {
1467 		rq->rx_ring[i].next2fill = rq->rx_ring[i].next2comp = 0;
1468 
1469 		memset(rq->rx_ring[i].base, 0, rq->rx_ring[i].size *
1470 		       sizeof(struct Vmxnet3_RxDesc));
1471 		rq->rx_ring[i].gen = VMXNET3_INIT_GEN;
1472 	}
1473 	if (vmxnet3_rq_alloc_rx_buf(rq, 0, rq->rx_ring[0].size - 1,
1474 				    adapter) == 0) {
1475 		/* at least has 1 rx buffer for the 1st ring */
1476 		return -ENOMEM;
1477 	}
1478 	vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter);
1479 
1480 	/* reset the comp ring */
1481 	rq->comp_ring.next2proc = 0;
1482 	memset(rq->comp_ring.base, 0, rq->comp_ring.size *
1483 	       sizeof(struct Vmxnet3_RxCompDesc));
1484 	rq->comp_ring.gen = VMXNET3_INIT_GEN;
1485 
1486 	/* reset rxctx */
1487 	rq->rx_ctx.skb = NULL;
1488 
1489 	/* stats are not reset */
1490 	return 0;
1491 }
1492 
1493 
1494 static int
1495 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter)
1496 {
1497 	int i, err = 0;
1498 
1499 	for (i = 0; i < adapter->num_rx_queues; i++) {
1500 		err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter);
1501 		if (unlikely(err)) {
1502 			dev_err(&adapter->netdev->dev, "%s: failed to "
1503 				"initialize rx queue%i\n",
1504 				adapter->netdev->name, i);
1505 			break;
1506 		}
1507 	}
1508 	return err;
1509 
1510 }
1511 
1512 
1513 static int
1514 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter)
1515 {
1516 	int i;
1517 	size_t sz;
1518 	struct vmxnet3_rx_buf_info *bi;
1519 
1520 	for (i = 0; i < 2; i++) {
1521 
1522 		sz = rq->rx_ring[i].size * sizeof(struct Vmxnet3_RxDesc);
1523 		rq->rx_ring[i].base = dma_alloc_coherent(
1524 						&adapter->pdev->dev, sz,
1525 						&rq->rx_ring[i].basePA,
1526 						GFP_KERNEL);
1527 		if (!rq->rx_ring[i].base) {
1528 			netdev_err(adapter->netdev,
1529 				   "failed to allocate rx ring %d\n", i);
1530 			goto err;
1531 		}
1532 	}
1533 
1534 	sz = rq->comp_ring.size * sizeof(struct Vmxnet3_RxCompDesc);
1535 	rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz,
1536 						&rq->comp_ring.basePA,
1537 						GFP_KERNEL);
1538 	if (!rq->comp_ring.base) {
1539 		netdev_err(adapter->netdev, "failed to allocate rx comp ring\n");
1540 		goto err;
1541 	}
1542 
1543 	sz = sizeof(struct vmxnet3_rx_buf_info) * (rq->rx_ring[0].size +
1544 						   rq->rx_ring[1].size);
1545 	bi = dma_zalloc_coherent(&adapter->pdev->dev, sz, &rq->buf_info_pa,
1546 				 GFP_KERNEL);
1547 	if (!bi)
1548 		goto err;
1549 
1550 	rq->buf_info[0] = bi;
1551 	rq->buf_info[1] = bi + rq->rx_ring[0].size;
1552 
1553 	return 0;
1554 
1555 err:
1556 	vmxnet3_rq_destroy(rq, adapter);
1557 	return -ENOMEM;
1558 }
1559 
1560 
1561 static int
1562 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter)
1563 {
1564 	int i, err = 0;
1565 
1566 	for (i = 0; i < adapter->num_rx_queues; i++) {
1567 		err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter);
1568 		if (unlikely(err)) {
1569 			dev_err(&adapter->netdev->dev,
1570 				"%s: failed to create rx queue%i\n",
1571 				adapter->netdev->name, i);
1572 			goto err_out;
1573 		}
1574 	}
1575 	return err;
1576 err_out:
1577 	vmxnet3_rq_destroy_all(adapter);
1578 	return err;
1579 
1580 }
1581 
1582 /* Multiple queue aware polling function for tx and rx */
1583 
1584 static int
1585 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget)
1586 {
1587 	int rcd_done = 0, i;
1588 	if (unlikely(adapter->shared->ecr))
1589 		vmxnet3_process_events(adapter);
1590 	for (i = 0; i < adapter->num_tx_queues; i++)
1591 		vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter);
1592 
1593 	for (i = 0; i < adapter->num_rx_queues; i++)
1594 		rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i],
1595 						   adapter, budget);
1596 	return rcd_done;
1597 }
1598 
1599 
1600 static int
1601 vmxnet3_poll(struct napi_struct *napi, int budget)
1602 {
1603 	struct vmxnet3_rx_queue *rx_queue = container_of(napi,
1604 					  struct vmxnet3_rx_queue, napi);
1605 	int rxd_done;
1606 
1607 	rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget);
1608 
1609 	if (rxd_done < budget) {
1610 		napi_complete(napi);
1611 		vmxnet3_enable_all_intrs(rx_queue->adapter);
1612 	}
1613 	return rxd_done;
1614 }
1615 
1616 /*
1617  * NAPI polling function for MSI-X mode with multiple Rx queues
1618  * Returns the # of the NAPI credit consumed (# of rx descriptors processed)
1619  */
1620 
1621 static int
1622 vmxnet3_poll_rx_only(struct napi_struct *napi, int budget)
1623 {
1624 	struct vmxnet3_rx_queue *rq = container_of(napi,
1625 						struct vmxnet3_rx_queue, napi);
1626 	struct vmxnet3_adapter *adapter = rq->adapter;
1627 	int rxd_done;
1628 
1629 	/* When sharing interrupt with corresponding tx queue, process
1630 	 * tx completions in that queue as well
1631 	 */
1632 	if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) {
1633 		struct vmxnet3_tx_queue *tq =
1634 				&adapter->tx_queue[rq - adapter->rx_queue];
1635 		vmxnet3_tq_tx_complete(tq, adapter);
1636 	}
1637 
1638 	rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget);
1639 
1640 	if (rxd_done < budget) {
1641 		napi_complete(napi);
1642 		vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx);
1643 	}
1644 	return rxd_done;
1645 }
1646 
1647 
1648 #ifdef CONFIG_PCI_MSI
1649 
1650 /*
1651  * Handle completion interrupts on tx queues
1652  * Returns whether or not the intr is handled
1653  */
1654 
1655 static irqreturn_t
1656 vmxnet3_msix_tx(int irq, void *data)
1657 {
1658 	struct vmxnet3_tx_queue *tq = data;
1659 	struct vmxnet3_adapter *adapter = tq->adapter;
1660 
1661 	if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1662 		vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx);
1663 
1664 	/* Handle the case where only one irq is allocate for all tx queues */
1665 	if (adapter->share_intr == VMXNET3_INTR_TXSHARE) {
1666 		int i;
1667 		for (i = 0; i < adapter->num_tx_queues; i++) {
1668 			struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i];
1669 			vmxnet3_tq_tx_complete(txq, adapter);
1670 		}
1671 	} else {
1672 		vmxnet3_tq_tx_complete(tq, adapter);
1673 	}
1674 	vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx);
1675 
1676 	return IRQ_HANDLED;
1677 }
1678 
1679 
1680 /*
1681  * Handle completion interrupts on rx queues. Returns whether or not the
1682  * intr is handled
1683  */
1684 
1685 static irqreturn_t
1686 vmxnet3_msix_rx(int irq, void *data)
1687 {
1688 	struct vmxnet3_rx_queue *rq = data;
1689 	struct vmxnet3_adapter *adapter = rq->adapter;
1690 
1691 	/* disable intr if needed */
1692 	if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1693 		vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx);
1694 	napi_schedule(&rq->napi);
1695 
1696 	return IRQ_HANDLED;
1697 }
1698 
1699 /*
1700  *----------------------------------------------------------------------------
1701  *
1702  * vmxnet3_msix_event --
1703  *
1704  *    vmxnet3 msix event intr handler
1705  *
1706  * Result:
1707  *    whether or not the intr is handled
1708  *
1709  *----------------------------------------------------------------------------
1710  */
1711 
1712 static irqreturn_t
1713 vmxnet3_msix_event(int irq, void *data)
1714 {
1715 	struct net_device *dev = data;
1716 	struct vmxnet3_adapter *adapter = netdev_priv(dev);
1717 
1718 	/* disable intr if needed */
1719 	if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1720 		vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx);
1721 
1722 	if (adapter->shared->ecr)
1723 		vmxnet3_process_events(adapter);
1724 
1725 	vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx);
1726 
1727 	return IRQ_HANDLED;
1728 }
1729 
1730 #endif /* CONFIG_PCI_MSI  */
1731 
1732 
1733 /* Interrupt handler for vmxnet3  */
1734 static irqreturn_t
1735 vmxnet3_intr(int irq, void *dev_id)
1736 {
1737 	struct net_device *dev = dev_id;
1738 	struct vmxnet3_adapter *adapter = netdev_priv(dev);
1739 
1740 	if (adapter->intr.type == VMXNET3_IT_INTX) {
1741 		u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR);
1742 		if (unlikely(icr == 0))
1743 			/* not ours */
1744 			return IRQ_NONE;
1745 	}
1746 
1747 
1748 	/* disable intr if needed */
1749 	if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1750 		vmxnet3_disable_all_intrs(adapter);
1751 
1752 	napi_schedule(&adapter->rx_queue[0].napi);
1753 
1754 	return IRQ_HANDLED;
1755 }
1756 
1757 #ifdef CONFIG_NET_POLL_CONTROLLER
1758 
1759 /* netpoll callback. */
1760 static void
1761 vmxnet3_netpoll(struct net_device *netdev)
1762 {
1763 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1764 
1765 	if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1766 		vmxnet3_disable_all_intrs(adapter);
1767 
1768 	vmxnet3_do_poll(adapter, adapter->rx_queue[0].rx_ring[0].size);
1769 	vmxnet3_enable_all_intrs(adapter);
1770 
1771 }
1772 #endif	/* CONFIG_NET_POLL_CONTROLLER */
1773 
1774 static int
1775 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
1776 {
1777 	struct vmxnet3_intr *intr = &adapter->intr;
1778 	int err = 0, i;
1779 	int vector = 0;
1780 
1781 #ifdef CONFIG_PCI_MSI
1782 	if (adapter->intr.type == VMXNET3_IT_MSIX) {
1783 		for (i = 0; i < adapter->num_tx_queues; i++) {
1784 			if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) {
1785 				sprintf(adapter->tx_queue[i].name, "%s-tx-%d",
1786 					adapter->netdev->name, vector);
1787 				err = request_irq(
1788 					      intr->msix_entries[vector].vector,
1789 					      vmxnet3_msix_tx, 0,
1790 					      adapter->tx_queue[i].name,
1791 					      &adapter->tx_queue[i]);
1792 			} else {
1793 				sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d",
1794 					adapter->netdev->name, vector);
1795 			}
1796 			if (err) {
1797 				dev_err(&adapter->netdev->dev,
1798 					"Failed to request irq for MSIX, %s, "
1799 					"error %d\n",
1800 					adapter->tx_queue[i].name, err);
1801 				return err;
1802 			}
1803 
1804 			/* Handle the case where only 1 MSIx was allocated for
1805 			 * all tx queues */
1806 			if (adapter->share_intr == VMXNET3_INTR_TXSHARE) {
1807 				for (; i < adapter->num_tx_queues; i++)
1808 					adapter->tx_queue[i].comp_ring.intr_idx
1809 								= vector;
1810 				vector++;
1811 				break;
1812 			} else {
1813 				adapter->tx_queue[i].comp_ring.intr_idx
1814 								= vector++;
1815 			}
1816 		}
1817 		if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE)
1818 			vector = 0;
1819 
1820 		for (i = 0; i < adapter->num_rx_queues; i++) {
1821 			if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE)
1822 				sprintf(adapter->rx_queue[i].name, "%s-rx-%d",
1823 					adapter->netdev->name, vector);
1824 			else
1825 				sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d",
1826 					adapter->netdev->name, vector);
1827 			err = request_irq(intr->msix_entries[vector].vector,
1828 					  vmxnet3_msix_rx, 0,
1829 					  adapter->rx_queue[i].name,
1830 					  &(adapter->rx_queue[i]));
1831 			if (err) {
1832 				netdev_err(adapter->netdev,
1833 					   "Failed to request irq for MSIX, "
1834 					   "%s, error %d\n",
1835 					   adapter->rx_queue[i].name, err);
1836 				return err;
1837 			}
1838 
1839 			adapter->rx_queue[i].comp_ring.intr_idx = vector++;
1840 		}
1841 
1842 		sprintf(intr->event_msi_vector_name, "%s-event-%d",
1843 			adapter->netdev->name, vector);
1844 		err = request_irq(intr->msix_entries[vector].vector,
1845 				  vmxnet3_msix_event, 0,
1846 				  intr->event_msi_vector_name, adapter->netdev);
1847 		intr->event_intr_idx = vector;
1848 
1849 	} else if (intr->type == VMXNET3_IT_MSI) {
1850 		adapter->num_rx_queues = 1;
1851 		err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0,
1852 				  adapter->netdev->name, adapter->netdev);
1853 	} else {
1854 #endif
1855 		adapter->num_rx_queues = 1;
1856 		err = request_irq(adapter->pdev->irq, vmxnet3_intr,
1857 				  IRQF_SHARED, adapter->netdev->name,
1858 				  adapter->netdev);
1859 #ifdef CONFIG_PCI_MSI
1860 	}
1861 #endif
1862 	intr->num_intrs = vector + 1;
1863 	if (err) {
1864 		netdev_err(adapter->netdev,
1865 			   "Failed to request irq (intr type:%d), error %d\n",
1866 			   intr->type, err);
1867 	} else {
1868 		/* Number of rx queues will not change after this */
1869 		for (i = 0; i < adapter->num_rx_queues; i++) {
1870 			struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i];
1871 			rq->qid = i;
1872 			rq->qid2 = i + adapter->num_rx_queues;
1873 		}
1874 
1875 
1876 
1877 		/* init our intr settings */
1878 		for (i = 0; i < intr->num_intrs; i++)
1879 			intr->mod_levels[i] = UPT1_IML_ADAPTIVE;
1880 		if (adapter->intr.type != VMXNET3_IT_MSIX) {
1881 			adapter->intr.event_intr_idx = 0;
1882 			for (i = 0; i < adapter->num_tx_queues; i++)
1883 				adapter->tx_queue[i].comp_ring.intr_idx = 0;
1884 			adapter->rx_queue[0].comp_ring.intr_idx = 0;
1885 		}
1886 
1887 		netdev_info(adapter->netdev,
1888 			    "intr type %u, mode %u, %u vectors allocated\n",
1889 			    intr->type, intr->mask_mode, intr->num_intrs);
1890 	}
1891 
1892 	return err;
1893 }
1894 
1895 
1896 static void
1897 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter)
1898 {
1899 	struct vmxnet3_intr *intr = &adapter->intr;
1900 	BUG_ON(intr->type == VMXNET3_IT_AUTO || intr->num_intrs <= 0);
1901 
1902 	switch (intr->type) {
1903 #ifdef CONFIG_PCI_MSI
1904 	case VMXNET3_IT_MSIX:
1905 	{
1906 		int i, vector = 0;
1907 
1908 		if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) {
1909 			for (i = 0; i < adapter->num_tx_queues; i++) {
1910 				free_irq(intr->msix_entries[vector++].vector,
1911 					 &(adapter->tx_queue[i]));
1912 				if (adapter->share_intr == VMXNET3_INTR_TXSHARE)
1913 					break;
1914 			}
1915 		}
1916 
1917 		for (i = 0; i < adapter->num_rx_queues; i++) {
1918 			free_irq(intr->msix_entries[vector++].vector,
1919 				 &(adapter->rx_queue[i]));
1920 		}
1921 
1922 		free_irq(intr->msix_entries[vector].vector,
1923 			 adapter->netdev);
1924 		BUG_ON(vector >= intr->num_intrs);
1925 		break;
1926 	}
1927 #endif
1928 	case VMXNET3_IT_MSI:
1929 		free_irq(adapter->pdev->irq, adapter->netdev);
1930 		break;
1931 	case VMXNET3_IT_INTX:
1932 		free_irq(adapter->pdev->irq, adapter->netdev);
1933 		break;
1934 	default:
1935 		BUG();
1936 	}
1937 }
1938 
1939 
1940 static void
1941 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter)
1942 {
1943 	u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1944 	u16 vid;
1945 
1946 	/* allow untagged pkts */
1947 	VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
1948 
1949 	for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
1950 		VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1951 }
1952 
1953 
1954 static int
1955 vmxnet3_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
1956 {
1957 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1958 
1959 	if (!(netdev->flags & IFF_PROMISC)) {
1960 		u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1961 		unsigned long flags;
1962 
1963 		VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1964 		spin_lock_irqsave(&adapter->cmd_lock, flags);
1965 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1966 				       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1967 		spin_unlock_irqrestore(&adapter->cmd_lock, flags);
1968 	}
1969 
1970 	set_bit(vid, adapter->active_vlans);
1971 
1972 	return 0;
1973 }
1974 
1975 
1976 static int
1977 vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid)
1978 {
1979 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1980 
1981 	if (!(netdev->flags & IFF_PROMISC)) {
1982 		u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1983 		unsigned long flags;
1984 
1985 		VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
1986 		spin_lock_irqsave(&adapter->cmd_lock, flags);
1987 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1988 				       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1989 		spin_unlock_irqrestore(&adapter->cmd_lock, flags);
1990 	}
1991 
1992 	clear_bit(vid, adapter->active_vlans);
1993 
1994 	return 0;
1995 }
1996 
1997 
1998 static u8 *
1999 vmxnet3_copy_mc(struct net_device *netdev)
2000 {
2001 	u8 *buf = NULL;
2002 	u32 sz = netdev_mc_count(netdev) * ETH_ALEN;
2003 
2004 	/* struct Vmxnet3_RxFilterConf.mfTableLen is u16. */
2005 	if (sz <= 0xffff) {
2006 		/* We may be called with BH disabled */
2007 		buf = kmalloc(sz, GFP_ATOMIC);
2008 		if (buf) {
2009 			struct netdev_hw_addr *ha;
2010 			int i = 0;
2011 
2012 			netdev_for_each_mc_addr(ha, netdev)
2013 				memcpy(buf + i++ * ETH_ALEN, ha->addr,
2014 				       ETH_ALEN);
2015 		}
2016 	}
2017 	return buf;
2018 }
2019 
2020 
2021 static void
2022 vmxnet3_set_mc(struct net_device *netdev)
2023 {
2024 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2025 	unsigned long flags;
2026 	struct Vmxnet3_RxFilterConf *rxConf =
2027 					&adapter->shared->devRead.rxFilterConf;
2028 	u8 *new_table = NULL;
2029 	dma_addr_t new_table_pa = 0;
2030 	u32 new_mode = VMXNET3_RXM_UCAST;
2031 
2032 	if (netdev->flags & IFF_PROMISC) {
2033 		u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
2034 		memset(vfTable, 0, VMXNET3_VFT_SIZE * sizeof(*vfTable));
2035 
2036 		new_mode |= VMXNET3_RXM_PROMISC;
2037 	} else {
2038 		vmxnet3_restore_vlan(adapter);
2039 	}
2040 
2041 	if (netdev->flags & IFF_BROADCAST)
2042 		new_mode |= VMXNET3_RXM_BCAST;
2043 
2044 	if (netdev->flags & IFF_ALLMULTI)
2045 		new_mode |= VMXNET3_RXM_ALL_MULTI;
2046 	else
2047 		if (!netdev_mc_empty(netdev)) {
2048 			new_table = vmxnet3_copy_mc(netdev);
2049 			if (new_table) {
2050 				new_mode |= VMXNET3_RXM_MCAST;
2051 				rxConf->mfTableLen = cpu_to_le16(
2052 					netdev_mc_count(netdev) * ETH_ALEN);
2053 				new_table_pa = dma_map_single(
2054 							&adapter->pdev->dev,
2055 							new_table,
2056 							rxConf->mfTableLen,
2057 							PCI_DMA_TODEVICE);
2058 				rxConf->mfTablePA = cpu_to_le64(new_table_pa);
2059 			} else {
2060 				netdev_info(netdev, "failed to copy mcast list"
2061 					    ", setting ALL_MULTI\n");
2062 				new_mode |= VMXNET3_RXM_ALL_MULTI;
2063 			}
2064 		}
2065 
2066 
2067 	if (!(new_mode & VMXNET3_RXM_MCAST)) {
2068 		rxConf->mfTableLen = 0;
2069 		rxConf->mfTablePA = 0;
2070 	}
2071 
2072 	spin_lock_irqsave(&adapter->cmd_lock, flags);
2073 	if (new_mode != rxConf->rxMode) {
2074 		rxConf->rxMode = cpu_to_le32(new_mode);
2075 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2076 				       VMXNET3_CMD_UPDATE_RX_MODE);
2077 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2078 				       VMXNET3_CMD_UPDATE_VLAN_FILTERS);
2079 	}
2080 
2081 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2082 			       VMXNET3_CMD_UPDATE_MAC_FILTERS);
2083 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2084 
2085 	if (new_table) {
2086 		dma_unmap_single(&adapter->pdev->dev, new_table_pa,
2087 				 rxConf->mfTableLen, PCI_DMA_TODEVICE);
2088 		kfree(new_table);
2089 	}
2090 }
2091 
2092 void
2093 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter)
2094 {
2095 	int i;
2096 
2097 	for (i = 0; i < adapter->num_rx_queues; i++)
2098 		vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter);
2099 }
2100 
2101 
2102 /*
2103  *   Set up driver_shared based on settings in adapter.
2104  */
2105 
2106 static void
2107 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
2108 {
2109 	struct Vmxnet3_DriverShared *shared = adapter->shared;
2110 	struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
2111 	struct Vmxnet3_TxQueueConf *tqc;
2112 	struct Vmxnet3_RxQueueConf *rqc;
2113 	int i;
2114 
2115 	memset(shared, 0, sizeof(*shared));
2116 
2117 	/* driver settings */
2118 	shared->magic = cpu_to_le32(VMXNET3_REV1_MAGIC);
2119 	devRead->misc.driverInfo.version = cpu_to_le32(
2120 						VMXNET3_DRIVER_VERSION_NUM);
2121 	devRead->misc.driverInfo.gos.gosBits = (sizeof(void *) == 4 ?
2122 				VMXNET3_GOS_BITS_32 : VMXNET3_GOS_BITS_64);
2123 	devRead->misc.driverInfo.gos.gosType = VMXNET3_GOS_TYPE_LINUX;
2124 	*((u32 *)&devRead->misc.driverInfo.gos) = cpu_to_le32(
2125 				*((u32 *)&devRead->misc.driverInfo.gos));
2126 	devRead->misc.driverInfo.vmxnet3RevSpt = cpu_to_le32(1);
2127 	devRead->misc.driverInfo.uptVerSpt = cpu_to_le32(1);
2128 
2129 	devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa);
2130 	devRead->misc.ddLen = cpu_to_le32(sizeof(struct vmxnet3_adapter));
2131 
2132 	/* set up feature flags */
2133 	if (adapter->netdev->features & NETIF_F_RXCSUM)
2134 		devRead->misc.uptFeatures |= UPT1_F_RXCSUM;
2135 
2136 	if (adapter->netdev->features & NETIF_F_LRO) {
2137 		devRead->misc.uptFeatures |= UPT1_F_LRO;
2138 		devRead->misc.maxNumRxSG = cpu_to_le16(1 + MAX_SKB_FRAGS);
2139 	}
2140 	if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
2141 		devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
2142 
2143 	devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu);
2144 	devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa);
2145 	devRead->misc.queueDescLen = cpu_to_le32(
2146 		adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) +
2147 		adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc));
2148 
2149 	/* tx queue settings */
2150 	devRead->misc.numTxQueues =  adapter->num_tx_queues;
2151 	for (i = 0; i < adapter->num_tx_queues; i++) {
2152 		struct vmxnet3_tx_queue	*tq = &adapter->tx_queue[i];
2153 		BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL);
2154 		tqc = &adapter->tqd_start[i].conf;
2155 		tqc->txRingBasePA   = cpu_to_le64(tq->tx_ring.basePA);
2156 		tqc->dataRingBasePA = cpu_to_le64(tq->data_ring.basePA);
2157 		tqc->compRingBasePA = cpu_to_le64(tq->comp_ring.basePA);
2158 		tqc->ddPA           = cpu_to_le64(tq->buf_info_pa);
2159 		tqc->txRingSize     = cpu_to_le32(tq->tx_ring.size);
2160 		tqc->dataRingSize   = cpu_to_le32(tq->data_ring.size);
2161 		tqc->compRingSize   = cpu_to_le32(tq->comp_ring.size);
2162 		tqc->ddLen          = cpu_to_le32(
2163 					sizeof(struct vmxnet3_tx_buf_info) *
2164 					tqc->txRingSize);
2165 		tqc->intrIdx        = tq->comp_ring.intr_idx;
2166 	}
2167 
2168 	/* rx queue settings */
2169 	devRead->misc.numRxQueues = adapter->num_rx_queues;
2170 	for (i = 0; i < adapter->num_rx_queues; i++) {
2171 		struct vmxnet3_rx_queue	*rq = &adapter->rx_queue[i];
2172 		rqc = &adapter->rqd_start[i].conf;
2173 		rqc->rxRingBasePA[0] = cpu_to_le64(rq->rx_ring[0].basePA);
2174 		rqc->rxRingBasePA[1] = cpu_to_le64(rq->rx_ring[1].basePA);
2175 		rqc->compRingBasePA  = cpu_to_le64(rq->comp_ring.basePA);
2176 		rqc->ddPA            = cpu_to_le64(rq->buf_info_pa);
2177 		rqc->rxRingSize[0]   = cpu_to_le32(rq->rx_ring[0].size);
2178 		rqc->rxRingSize[1]   = cpu_to_le32(rq->rx_ring[1].size);
2179 		rqc->compRingSize    = cpu_to_le32(rq->comp_ring.size);
2180 		rqc->ddLen           = cpu_to_le32(
2181 					sizeof(struct vmxnet3_rx_buf_info) *
2182 					(rqc->rxRingSize[0] +
2183 					 rqc->rxRingSize[1]));
2184 		rqc->intrIdx         = rq->comp_ring.intr_idx;
2185 	}
2186 
2187 #ifdef VMXNET3_RSS
2188 	memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf));
2189 
2190 	if (adapter->rss) {
2191 		struct UPT1_RSSConf *rssConf = adapter->rss_conf;
2192 		static const uint8_t rss_key[UPT1_RSS_MAX_KEY_SIZE] = {
2193 			0x3b, 0x56, 0xd1, 0x56, 0x13, 0x4a, 0xe7, 0xac,
2194 			0xe8, 0x79, 0x09, 0x75, 0xe8, 0x65, 0x79, 0x28,
2195 			0x35, 0x12, 0xb9, 0x56, 0x7c, 0x76, 0x4b, 0x70,
2196 			0xd8, 0x56, 0xa3, 0x18, 0x9b, 0x0a, 0xee, 0xf3,
2197 			0x96, 0xa6, 0x9f, 0x8f, 0x9e, 0x8c, 0x90, 0xc9,
2198 		};
2199 
2200 		devRead->misc.uptFeatures |= UPT1_F_RSS;
2201 		devRead->misc.numRxQueues = adapter->num_rx_queues;
2202 		rssConf->hashType = UPT1_RSS_HASH_TYPE_TCP_IPV4 |
2203 				    UPT1_RSS_HASH_TYPE_IPV4 |
2204 				    UPT1_RSS_HASH_TYPE_TCP_IPV6 |
2205 				    UPT1_RSS_HASH_TYPE_IPV6;
2206 		rssConf->hashFunc = UPT1_RSS_HASH_FUNC_TOEPLITZ;
2207 		rssConf->hashKeySize = UPT1_RSS_MAX_KEY_SIZE;
2208 		rssConf->indTableSize = VMXNET3_RSS_IND_TABLE_SIZE;
2209 		memcpy(rssConf->hashKey, rss_key, sizeof(rss_key));
2210 
2211 		for (i = 0; i < rssConf->indTableSize; i++)
2212 			rssConf->indTable[i] = ethtool_rxfh_indir_default(
2213 				i, adapter->num_rx_queues);
2214 
2215 		devRead->rssConfDesc.confVer = 1;
2216 		devRead->rssConfDesc.confLen = cpu_to_le32(sizeof(*rssConf));
2217 		devRead->rssConfDesc.confPA =
2218 			cpu_to_le64(adapter->rss_conf_pa);
2219 	}
2220 
2221 #endif /* VMXNET3_RSS */
2222 
2223 	/* intr settings */
2224 	devRead->intrConf.autoMask = adapter->intr.mask_mode ==
2225 				     VMXNET3_IMM_AUTO;
2226 	devRead->intrConf.numIntrs = adapter->intr.num_intrs;
2227 	for (i = 0; i < adapter->intr.num_intrs; i++)
2228 		devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i];
2229 
2230 	devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx;
2231 	devRead->intrConf.intrCtrl |= cpu_to_le32(VMXNET3_IC_DISABLE_ALL);
2232 
2233 	/* rx filter settings */
2234 	devRead->rxFilterConf.rxMode = 0;
2235 	vmxnet3_restore_vlan(adapter);
2236 	vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr);
2237 
2238 	/* the rest are already zeroed */
2239 }
2240 
2241 
2242 int
2243 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
2244 {
2245 	int err, i;
2246 	u32 ret;
2247 	unsigned long flags;
2248 
2249 	netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d,"
2250 		" ring sizes %u %u %u\n", adapter->netdev->name,
2251 		adapter->skb_buf_size, adapter->rx_buf_per_pkt,
2252 		adapter->tx_queue[0].tx_ring.size,
2253 		adapter->rx_queue[0].rx_ring[0].size,
2254 		adapter->rx_queue[0].rx_ring[1].size);
2255 
2256 	vmxnet3_tq_init_all(adapter);
2257 	err = vmxnet3_rq_init_all(adapter);
2258 	if (err) {
2259 		netdev_err(adapter->netdev,
2260 			   "Failed to init rx queue error %d\n", err);
2261 		goto rq_err;
2262 	}
2263 
2264 	err = vmxnet3_request_irqs(adapter);
2265 	if (err) {
2266 		netdev_err(adapter->netdev,
2267 			   "Failed to setup irq for error %d\n", err);
2268 		goto irq_err;
2269 	}
2270 
2271 	vmxnet3_setup_driver_shared(adapter);
2272 
2273 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO(
2274 			       adapter->shared_pa));
2275 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI(
2276 			       adapter->shared_pa));
2277 	spin_lock_irqsave(&adapter->cmd_lock, flags);
2278 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2279 			       VMXNET3_CMD_ACTIVATE_DEV);
2280 	ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
2281 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2282 
2283 	if (ret != 0) {
2284 		netdev_err(adapter->netdev,
2285 			   "Failed to activate dev: error %u\n", ret);
2286 		err = -EINVAL;
2287 		goto activate_err;
2288 	}
2289 
2290 	for (i = 0; i < adapter->num_rx_queues; i++) {
2291 		VMXNET3_WRITE_BAR0_REG(adapter,
2292 				VMXNET3_REG_RXPROD + i * VMXNET3_REG_ALIGN,
2293 				adapter->rx_queue[i].rx_ring[0].next2fill);
2294 		VMXNET3_WRITE_BAR0_REG(adapter, (VMXNET3_REG_RXPROD2 +
2295 				(i * VMXNET3_REG_ALIGN)),
2296 				adapter->rx_queue[i].rx_ring[1].next2fill);
2297 	}
2298 
2299 	/* Apply the rx filter settins last. */
2300 	vmxnet3_set_mc(adapter->netdev);
2301 
2302 	/*
2303 	 * Check link state when first activating device. It will start the
2304 	 * tx queue if the link is up.
2305 	 */
2306 	vmxnet3_check_link(adapter, true);
2307 	for (i = 0; i < adapter->num_rx_queues; i++)
2308 		napi_enable(&adapter->rx_queue[i].napi);
2309 	vmxnet3_enable_all_intrs(adapter);
2310 	clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
2311 	return 0;
2312 
2313 activate_err:
2314 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0);
2315 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0);
2316 	vmxnet3_free_irqs(adapter);
2317 irq_err:
2318 rq_err:
2319 	/* free up buffers we allocated */
2320 	vmxnet3_rq_cleanup_all(adapter);
2321 	return err;
2322 }
2323 
2324 
2325 void
2326 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter)
2327 {
2328 	unsigned long flags;
2329 	spin_lock_irqsave(&adapter->cmd_lock, flags);
2330 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV);
2331 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2332 }
2333 
2334 
2335 int
2336 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter)
2337 {
2338 	int i;
2339 	unsigned long flags;
2340 	if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state))
2341 		return 0;
2342 
2343 
2344 	spin_lock_irqsave(&adapter->cmd_lock, flags);
2345 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2346 			       VMXNET3_CMD_QUIESCE_DEV);
2347 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2348 	vmxnet3_disable_all_intrs(adapter);
2349 
2350 	for (i = 0; i < adapter->num_rx_queues; i++)
2351 		napi_disable(&adapter->rx_queue[i].napi);
2352 	netif_tx_disable(adapter->netdev);
2353 	adapter->link_speed = 0;
2354 	netif_carrier_off(adapter->netdev);
2355 
2356 	vmxnet3_tq_cleanup_all(adapter);
2357 	vmxnet3_rq_cleanup_all(adapter);
2358 	vmxnet3_free_irqs(adapter);
2359 	return 0;
2360 }
2361 
2362 
2363 static void
2364 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
2365 {
2366 	u32 tmp;
2367 
2368 	tmp = *(u32 *)mac;
2369 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp);
2370 
2371 	tmp = (mac[5] << 8) | mac[4];
2372 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp);
2373 }
2374 
2375 
2376 static int
2377 vmxnet3_set_mac_addr(struct net_device *netdev, void *p)
2378 {
2379 	struct sockaddr *addr = p;
2380 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2381 
2382 	memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
2383 	vmxnet3_write_mac_addr(adapter, addr->sa_data);
2384 
2385 	return 0;
2386 }
2387 
2388 
2389 /* ==================== initialization and cleanup routines ============ */
2390 
2391 static int
2392 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
2393 {
2394 	int err;
2395 	unsigned long mmio_start, mmio_len;
2396 	struct pci_dev *pdev = adapter->pdev;
2397 
2398 	err = pci_enable_device(pdev);
2399 	if (err) {
2400 		dev_err(&pdev->dev, "Failed to enable adapter: error %d\n", err);
2401 		return err;
2402 	}
2403 
2404 	if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
2405 		if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
2406 			dev_err(&pdev->dev,
2407 				"pci_set_consistent_dma_mask failed\n");
2408 			err = -EIO;
2409 			goto err_set_mask;
2410 		}
2411 		*dma64 = true;
2412 	} else {
2413 		if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
2414 			dev_err(&pdev->dev,
2415 				"pci_set_dma_mask failed\n");
2416 			err = -EIO;
2417 			goto err_set_mask;
2418 		}
2419 		*dma64 = false;
2420 	}
2421 
2422 	err = pci_request_selected_regions(pdev, (1 << 2) - 1,
2423 					   vmxnet3_driver_name);
2424 	if (err) {
2425 		dev_err(&pdev->dev,
2426 			"Failed to request region for adapter: error %d\n", err);
2427 		goto err_set_mask;
2428 	}
2429 
2430 	pci_set_master(pdev);
2431 
2432 	mmio_start = pci_resource_start(pdev, 0);
2433 	mmio_len = pci_resource_len(pdev, 0);
2434 	adapter->hw_addr0 = ioremap(mmio_start, mmio_len);
2435 	if (!adapter->hw_addr0) {
2436 		dev_err(&pdev->dev, "Failed to map bar0\n");
2437 		err = -EIO;
2438 		goto err_ioremap;
2439 	}
2440 
2441 	mmio_start = pci_resource_start(pdev, 1);
2442 	mmio_len = pci_resource_len(pdev, 1);
2443 	adapter->hw_addr1 = ioremap(mmio_start, mmio_len);
2444 	if (!adapter->hw_addr1) {
2445 		dev_err(&pdev->dev, "Failed to map bar1\n");
2446 		err = -EIO;
2447 		goto err_bar1;
2448 	}
2449 	return 0;
2450 
2451 err_bar1:
2452 	iounmap(adapter->hw_addr0);
2453 err_ioremap:
2454 	pci_release_selected_regions(pdev, (1 << 2) - 1);
2455 err_set_mask:
2456 	pci_disable_device(pdev);
2457 	return err;
2458 }
2459 
2460 
2461 static void
2462 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter)
2463 {
2464 	BUG_ON(!adapter->pdev);
2465 
2466 	iounmap(adapter->hw_addr0);
2467 	iounmap(adapter->hw_addr1);
2468 	pci_release_selected_regions(adapter->pdev, (1 << 2) - 1);
2469 	pci_disable_device(adapter->pdev);
2470 }
2471 
2472 
2473 static void
2474 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter)
2475 {
2476 	size_t sz, i, ring0_size, ring1_size, comp_size;
2477 	struct vmxnet3_rx_queue	*rq = &adapter->rx_queue[0];
2478 
2479 
2480 	if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE -
2481 				    VMXNET3_MAX_ETH_HDR_SIZE) {
2482 		adapter->skb_buf_size = adapter->netdev->mtu +
2483 					VMXNET3_MAX_ETH_HDR_SIZE;
2484 		if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE)
2485 			adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE;
2486 
2487 		adapter->rx_buf_per_pkt = 1;
2488 	} else {
2489 		adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE;
2490 		sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE +
2491 					    VMXNET3_MAX_ETH_HDR_SIZE;
2492 		adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE;
2493 	}
2494 
2495 	/*
2496 	 * for simplicity, force the ring0 size to be a multiple of
2497 	 * rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN
2498 	 */
2499 	sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN;
2500 	ring0_size = adapter->rx_queue[0].rx_ring[0].size;
2501 	ring0_size = (ring0_size + sz - 1) / sz * sz;
2502 	ring0_size = min_t(u32, ring0_size, VMXNET3_RX_RING_MAX_SIZE /
2503 			   sz * sz);
2504 	ring1_size = adapter->rx_queue[0].rx_ring[1].size;
2505 	comp_size = ring0_size + ring1_size;
2506 
2507 	for (i = 0; i < adapter->num_rx_queues; i++) {
2508 		rq = &adapter->rx_queue[i];
2509 		rq->rx_ring[0].size = ring0_size;
2510 		rq->rx_ring[1].size = ring1_size;
2511 		rq->comp_ring.size = comp_size;
2512 	}
2513 }
2514 
2515 
2516 int
2517 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size,
2518 		      u32 rx_ring_size, u32 rx_ring2_size)
2519 {
2520 	int err = 0, i;
2521 
2522 	for (i = 0; i < adapter->num_tx_queues; i++) {
2523 		struct vmxnet3_tx_queue	*tq = &adapter->tx_queue[i];
2524 		tq->tx_ring.size   = tx_ring_size;
2525 		tq->data_ring.size = tx_ring_size;
2526 		tq->comp_ring.size = tx_ring_size;
2527 		tq->shared = &adapter->tqd_start[i].ctrl;
2528 		tq->stopped = true;
2529 		tq->adapter = adapter;
2530 		tq->qid = i;
2531 		err = vmxnet3_tq_create(tq, adapter);
2532 		/*
2533 		 * Too late to change num_tx_queues. We cannot do away with
2534 		 * lesser number of queues than what we asked for
2535 		 */
2536 		if (err)
2537 			goto queue_err;
2538 	}
2539 
2540 	adapter->rx_queue[0].rx_ring[0].size = rx_ring_size;
2541 	adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size;
2542 	vmxnet3_adjust_rx_ring_size(adapter);
2543 	for (i = 0; i < adapter->num_rx_queues; i++) {
2544 		struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i];
2545 		/* qid and qid2 for rx queues will be assigned later when num
2546 		 * of rx queues is finalized after allocating intrs */
2547 		rq->shared = &adapter->rqd_start[i].ctrl;
2548 		rq->adapter = adapter;
2549 		err = vmxnet3_rq_create(rq, adapter);
2550 		if (err) {
2551 			if (i == 0) {
2552 				netdev_err(adapter->netdev,
2553 					   "Could not allocate any rx queues. "
2554 					   "Aborting.\n");
2555 				goto queue_err;
2556 			} else {
2557 				netdev_info(adapter->netdev,
2558 					    "Number of rx queues changed "
2559 					    "to : %d.\n", i);
2560 				adapter->num_rx_queues = i;
2561 				err = 0;
2562 				break;
2563 			}
2564 		}
2565 	}
2566 	return err;
2567 queue_err:
2568 	vmxnet3_tq_destroy_all(adapter);
2569 	return err;
2570 }
2571 
2572 static int
2573 vmxnet3_open(struct net_device *netdev)
2574 {
2575 	struct vmxnet3_adapter *adapter;
2576 	int err, i;
2577 
2578 	adapter = netdev_priv(netdev);
2579 
2580 	for (i = 0; i < adapter->num_tx_queues; i++)
2581 		spin_lock_init(&adapter->tx_queue[i].tx_lock);
2582 
2583 	err = vmxnet3_create_queues(adapter, VMXNET3_DEF_TX_RING_SIZE,
2584 				    VMXNET3_DEF_RX_RING_SIZE,
2585 				    VMXNET3_DEF_RX_RING_SIZE);
2586 	if (err)
2587 		goto queue_err;
2588 
2589 	err = vmxnet3_activate_dev(adapter);
2590 	if (err)
2591 		goto activate_err;
2592 
2593 	return 0;
2594 
2595 activate_err:
2596 	vmxnet3_rq_destroy_all(adapter);
2597 	vmxnet3_tq_destroy_all(adapter);
2598 queue_err:
2599 	return err;
2600 }
2601 
2602 
2603 static int
2604 vmxnet3_close(struct net_device *netdev)
2605 {
2606 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2607 
2608 	/*
2609 	 * Reset_work may be in the middle of resetting the device, wait for its
2610 	 * completion.
2611 	 */
2612 	while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2613 		msleep(1);
2614 
2615 	vmxnet3_quiesce_dev(adapter);
2616 
2617 	vmxnet3_rq_destroy_all(adapter);
2618 	vmxnet3_tq_destroy_all(adapter);
2619 
2620 	clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2621 
2622 
2623 	return 0;
2624 }
2625 
2626 
2627 void
2628 vmxnet3_force_close(struct vmxnet3_adapter *adapter)
2629 {
2630 	int i;
2631 
2632 	/*
2633 	 * we must clear VMXNET3_STATE_BIT_RESETTING, otherwise
2634 	 * vmxnet3_close() will deadlock.
2635 	 */
2636 	BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state));
2637 
2638 	/* we need to enable NAPI, otherwise dev_close will deadlock */
2639 	for (i = 0; i < adapter->num_rx_queues; i++)
2640 		napi_enable(&adapter->rx_queue[i].napi);
2641 	dev_close(adapter->netdev);
2642 }
2643 
2644 
2645 static int
2646 vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)
2647 {
2648 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2649 	int err = 0;
2650 
2651 	if (new_mtu < VMXNET3_MIN_MTU || new_mtu > VMXNET3_MAX_MTU)
2652 		return -EINVAL;
2653 
2654 	netdev->mtu = new_mtu;
2655 
2656 	/*
2657 	 * Reset_work may be in the middle of resetting the device, wait for its
2658 	 * completion.
2659 	 */
2660 	while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2661 		msleep(1);
2662 
2663 	if (netif_running(netdev)) {
2664 		vmxnet3_quiesce_dev(adapter);
2665 		vmxnet3_reset_dev(adapter);
2666 
2667 		/* we need to re-create the rx queue based on the new mtu */
2668 		vmxnet3_rq_destroy_all(adapter);
2669 		vmxnet3_adjust_rx_ring_size(adapter);
2670 		err = vmxnet3_rq_create_all(adapter);
2671 		if (err) {
2672 			netdev_err(netdev,
2673 				   "failed to re-create rx queues, "
2674 				   " error %d. Closing it.\n", err);
2675 			goto out;
2676 		}
2677 
2678 		err = vmxnet3_activate_dev(adapter);
2679 		if (err) {
2680 			netdev_err(netdev,
2681 				   "failed to re-activate, error %d. "
2682 				   "Closing it\n", err);
2683 			goto out;
2684 		}
2685 	}
2686 
2687 out:
2688 	clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2689 	if (err)
2690 		vmxnet3_force_close(adapter);
2691 
2692 	return err;
2693 }
2694 
2695 
2696 static void
2697 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64)
2698 {
2699 	struct net_device *netdev = adapter->netdev;
2700 
2701 	netdev->hw_features = NETIF_F_SG | NETIF_F_RXCSUM |
2702 		NETIF_F_HW_CSUM | NETIF_F_HW_VLAN_CTAG_TX |
2703 		NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_TSO | NETIF_F_TSO6 |
2704 		NETIF_F_LRO;
2705 	if (dma64)
2706 		netdev->hw_features |= NETIF_F_HIGHDMA;
2707 	netdev->vlan_features = netdev->hw_features &
2708 				~(NETIF_F_HW_VLAN_CTAG_TX |
2709 				  NETIF_F_HW_VLAN_CTAG_RX);
2710 	netdev->features = netdev->hw_features | NETIF_F_HW_VLAN_CTAG_FILTER;
2711 }
2712 
2713 
2714 static void
2715 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
2716 {
2717 	u32 tmp;
2718 
2719 	tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL);
2720 	*(u32 *)mac = tmp;
2721 
2722 	tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH);
2723 	mac[4] = tmp & 0xff;
2724 	mac[5] = (tmp >> 8) & 0xff;
2725 }
2726 
2727 #ifdef CONFIG_PCI_MSI
2728 
2729 /*
2730  * Enable MSIx vectors.
2731  * Returns :
2732  *	0 on successful enabling of required vectors,
2733  *	VMXNET3_LINUX_MIN_MSIX_VECT when only minimum number of vectors required
2734  *	 could be enabled.
2735  *	number of vectors which can be enabled otherwise (this number is smaller
2736  *	 than VMXNET3_LINUX_MIN_MSIX_VECT)
2737  */
2738 
2739 static int
2740 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
2741 			     int vectors)
2742 {
2743 	int err = 0, vector_threshold;
2744 	vector_threshold = VMXNET3_LINUX_MIN_MSIX_VECT;
2745 
2746 	while (vectors >= vector_threshold) {
2747 		err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
2748 				      vectors);
2749 		if (!err) {
2750 			adapter->intr.num_intrs = vectors;
2751 			return 0;
2752 		} else if (err < 0) {
2753 			dev_err(&adapter->netdev->dev,
2754 				   "Failed to enable MSI-X, error: %d\n", err);
2755 			vectors = 0;
2756 		} else if (err < vector_threshold) {
2757 			break;
2758 		} else {
2759 			/* If fails to enable required number of MSI-x vectors
2760 			 * try enabling minimum number of vectors required.
2761 			 */
2762 			dev_err(&adapter->netdev->dev,
2763 				"Failed to enable %d MSI-X, trying %d instead\n",
2764 				    vectors, vector_threshold);
2765 			vectors = vector_threshold;
2766 		}
2767 	}
2768 
2769 	dev_info(&adapter->pdev->dev,
2770 		 "Number of MSI-X interrupts which can be allocated "
2771 		 "is lower than min threshold required.\n");
2772 	return err;
2773 }
2774 
2775 
2776 #endif /* CONFIG_PCI_MSI */
2777 
2778 static void
2779 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
2780 {
2781 	u32 cfg;
2782 	unsigned long flags;
2783 
2784 	/* intr settings */
2785 	spin_lock_irqsave(&adapter->cmd_lock, flags);
2786 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2787 			       VMXNET3_CMD_GET_CONF_INTR);
2788 	cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
2789 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2790 	adapter->intr.type = cfg & 0x3;
2791 	adapter->intr.mask_mode = (cfg >> 2) & 0x3;
2792 
2793 	if (adapter->intr.type == VMXNET3_IT_AUTO) {
2794 		adapter->intr.type = VMXNET3_IT_MSIX;
2795 	}
2796 
2797 #ifdef CONFIG_PCI_MSI
2798 	if (adapter->intr.type == VMXNET3_IT_MSIX) {
2799 		int vector, err = 0;
2800 
2801 		adapter->intr.num_intrs = (adapter->share_intr ==
2802 					   VMXNET3_INTR_TXSHARE) ? 1 :
2803 					   adapter->num_tx_queues;
2804 		adapter->intr.num_intrs += (adapter->share_intr ==
2805 					   VMXNET3_INTR_BUDDYSHARE) ? 0 :
2806 					   adapter->num_rx_queues;
2807 		adapter->intr.num_intrs += 1;		/* for link event */
2808 
2809 		adapter->intr.num_intrs = (adapter->intr.num_intrs >
2810 					   VMXNET3_LINUX_MIN_MSIX_VECT
2811 					   ? adapter->intr.num_intrs :
2812 					   VMXNET3_LINUX_MIN_MSIX_VECT);
2813 
2814 		for (vector = 0; vector < adapter->intr.num_intrs; vector++)
2815 			adapter->intr.msix_entries[vector].entry = vector;
2816 
2817 		err = vmxnet3_acquire_msix_vectors(adapter,
2818 						   adapter->intr.num_intrs);
2819 		/* If we cannot allocate one MSIx vector per queue
2820 		 * then limit the number of rx queues to 1
2821 		 */
2822 		if (err == VMXNET3_LINUX_MIN_MSIX_VECT) {
2823 			if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE
2824 			    || adapter->num_rx_queues != 1) {
2825 				adapter->share_intr = VMXNET3_INTR_TXSHARE;
2826 				netdev_err(adapter->netdev,
2827 					   "Number of rx queues : 1\n");
2828 				adapter->num_rx_queues = 1;
2829 				adapter->intr.num_intrs =
2830 						VMXNET3_LINUX_MIN_MSIX_VECT;
2831 			}
2832 			return;
2833 		}
2834 		if (!err)
2835 			return;
2836 
2837 		/* If we cannot allocate MSIx vectors use only one rx queue */
2838 		dev_info(&adapter->pdev->dev,
2839 			 "Failed to enable MSI-X, error %d. "
2840 			 "Limiting #rx queues to 1, try MSI.\n", err);
2841 
2842 		adapter->intr.type = VMXNET3_IT_MSI;
2843 	}
2844 
2845 	if (adapter->intr.type == VMXNET3_IT_MSI) {
2846 		int err;
2847 		err = pci_enable_msi(adapter->pdev);
2848 		if (!err) {
2849 			adapter->num_rx_queues = 1;
2850 			adapter->intr.num_intrs = 1;
2851 			return;
2852 		}
2853 	}
2854 #endif /* CONFIG_PCI_MSI */
2855 
2856 	adapter->num_rx_queues = 1;
2857 	dev_info(&adapter->netdev->dev,
2858 		 "Using INTx interrupt, #Rx queues: 1.\n");
2859 	adapter->intr.type = VMXNET3_IT_INTX;
2860 
2861 	/* INT-X related setting */
2862 	adapter->intr.num_intrs = 1;
2863 }
2864 
2865 
2866 static void
2867 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter)
2868 {
2869 	if (adapter->intr.type == VMXNET3_IT_MSIX)
2870 		pci_disable_msix(adapter->pdev);
2871 	else if (adapter->intr.type == VMXNET3_IT_MSI)
2872 		pci_disable_msi(adapter->pdev);
2873 	else
2874 		BUG_ON(adapter->intr.type != VMXNET3_IT_INTX);
2875 }
2876 
2877 
2878 static void
2879 vmxnet3_tx_timeout(struct net_device *netdev)
2880 {
2881 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2882 	adapter->tx_timeout_count++;
2883 
2884 	netdev_err(adapter->netdev, "tx hang\n");
2885 	schedule_work(&adapter->work);
2886 	netif_wake_queue(adapter->netdev);
2887 }
2888 
2889 
2890 static void
2891 vmxnet3_reset_work(struct work_struct *data)
2892 {
2893 	struct vmxnet3_adapter *adapter;
2894 
2895 	adapter = container_of(data, struct vmxnet3_adapter, work);
2896 
2897 	/* if another thread is resetting the device, no need to proceed */
2898 	if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2899 		return;
2900 
2901 	/* if the device is closed, we must leave it alone */
2902 	rtnl_lock();
2903 	if (netif_running(adapter->netdev)) {
2904 		netdev_notice(adapter->netdev, "resetting\n");
2905 		vmxnet3_quiesce_dev(adapter);
2906 		vmxnet3_reset_dev(adapter);
2907 		vmxnet3_activate_dev(adapter);
2908 	} else {
2909 		netdev_info(adapter->netdev, "already closed\n");
2910 	}
2911 	rtnl_unlock();
2912 
2913 	clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2914 }
2915 
2916 
2917 static int
2918 vmxnet3_probe_device(struct pci_dev *pdev,
2919 		     const struct pci_device_id *id)
2920 {
2921 	static const struct net_device_ops vmxnet3_netdev_ops = {
2922 		.ndo_open = vmxnet3_open,
2923 		.ndo_stop = vmxnet3_close,
2924 		.ndo_start_xmit = vmxnet3_xmit_frame,
2925 		.ndo_set_mac_address = vmxnet3_set_mac_addr,
2926 		.ndo_change_mtu = vmxnet3_change_mtu,
2927 		.ndo_set_features = vmxnet3_set_features,
2928 		.ndo_get_stats64 = vmxnet3_get_stats64,
2929 		.ndo_tx_timeout = vmxnet3_tx_timeout,
2930 		.ndo_set_rx_mode = vmxnet3_set_mc,
2931 		.ndo_vlan_rx_add_vid = vmxnet3_vlan_rx_add_vid,
2932 		.ndo_vlan_rx_kill_vid = vmxnet3_vlan_rx_kill_vid,
2933 #ifdef CONFIG_NET_POLL_CONTROLLER
2934 		.ndo_poll_controller = vmxnet3_netpoll,
2935 #endif
2936 	};
2937 	int err;
2938 	bool dma64 = false; /* stupid gcc */
2939 	u32 ver;
2940 	struct net_device *netdev;
2941 	struct vmxnet3_adapter *adapter;
2942 	u8 mac[ETH_ALEN];
2943 	int size;
2944 	int num_tx_queues;
2945 	int num_rx_queues;
2946 
2947 	if (!pci_msi_enabled())
2948 		enable_mq = 0;
2949 
2950 #ifdef VMXNET3_RSS
2951 	if (enable_mq)
2952 		num_rx_queues = min(VMXNET3_DEVICE_MAX_RX_QUEUES,
2953 				    (int)num_online_cpus());
2954 	else
2955 #endif
2956 		num_rx_queues = 1;
2957 	num_rx_queues = rounddown_pow_of_two(num_rx_queues);
2958 
2959 	if (enable_mq)
2960 		num_tx_queues = min(VMXNET3_DEVICE_MAX_TX_QUEUES,
2961 				    (int)num_online_cpus());
2962 	else
2963 		num_tx_queues = 1;
2964 
2965 	num_tx_queues = rounddown_pow_of_two(num_tx_queues);
2966 	netdev = alloc_etherdev_mq(sizeof(struct vmxnet3_adapter),
2967 				   max(num_tx_queues, num_rx_queues));
2968 	dev_info(&pdev->dev,
2969 		 "# of Tx queues : %d, # of Rx queues : %d\n",
2970 		 num_tx_queues, num_rx_queues);
2971 
2972 	if (!netdev)
2973 		return -ENOMEM;
2974 
2975 	pci_set_drvdata(pdev, netdev);
2976 	adapter = netdev_priv(netdev);
2977 	adapter->netdev = netdev;
2978 	adapter->pdev = pdev;
2979 
2980 	spin_lock_init(&adapter->cmd_lock);
2981 	adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter,
2982 					     sizeof(struct vmxnet3_adapter),
2983 					     PCI_DMA_TODEVICE);
2984 	adapter->shared = dma_alloc_coherent(
2985 				&adapter->pdev->dev,
2986 				sizeof(struct Vmxnet3_DriverShared),
2987 				&adapter->shared_pa, GFP_KERNEL);
2988 	if (!adapter->shared) {
2989 		dev_err(&pdev->dev, "Failed to allocate memory\n");
2990 		err = -ENOMEM;
2991 		goto err_alloc_shared;
2992 	}
2993 
2994 	adapter->num_rx_queues = num_rx_queues;
2995 	adapter->num_tx_queues = num_tx_queues;
2996 	adapter->rx_buf_per_pkt = 1;
2997 
2998 	size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues;
2999 	size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues;
3000 	adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size,
3001 						&adapter->queue_desc_pa,
3002 						GFP_KERNEL);
3003 
3004 	if (!adapter->tqd_start) {
3005 		dev_err(&pdev->dev, "Failed to allocate memory\n");
3006 		err = -ENOMEM;
3007 		goto err_alloc_queue_desc;
3008 	}
3009 	adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start +
3010 							    adapter->num_tx_queues);
3011 
3012 	adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev,
3013 					      sizeof(struct Vmxnet3_PMConf),
3014 					      &adapter->pm_conf_pa,
3015 					      GFP_KERNEL);
3016 	if (adapter->pm_conf == NULL) {
3017 		err = -ENOMEM;
3018 		goto err_alloc_pm;
3019 	}
3020 
3021 #ifdef VMXNET3_RSS
3022 
3023 	adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev,
3024 					       sizeof(struct UPT1_RSSConf),
3025 					       &adapter->rss_conf_pa,
3026 					       GFP_KERNEL);
3027 	if (adapter->rss_conf == NULL) {
3028 		err = -ENOMEM;
3029 		goto err_alloc_rss;
3030 	}
3031 #endif /* VMXNET3_RSS */
3032 
3033 	err = vmxnet3_alloc_pci_resources(adapter, &dma64);
3034 	if (err < 0)
3035 		goto err_alloc_pci;
3036 
3037 	ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS);
3038 	if (ver & 1) {
3039 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1);
3040 	} else {
3041 		dev_err(&pdev->dev,
3042 			"Incompatible h/w version (0x%x) for adapter\n", ver);
3043 		err = -EBUSY;
3044 		goto err_ver;
3045 	}
3046 
3047 	ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS);
3048 	if (ver & 1) {
3049 		VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1);
3050 	} else {
3051 		dev_err(&pdev->dev,
3052 			"Incompatible upt version (0x%x) for adapter\n", ver);
3053 		err = -EBUSY;
3054 		goto err_ver;
3055 	}
3056 
3057 	SET_NETDEV_DEV(netdev, &pdev->dev);
3058 	vmxnet3_declare_features(adapter, dma64);
3059 
3060 	if (adapter->num_tx_queues == adapter->num_rx_queues)
3061 		adapter->share_intr = VMXNET3_INTR_BUDDYSHARE;
3062 	else
3063 		adapter->share_intr = VMXNET3_INTR_DONTSHARE;
3064 
3065 	vmxnet3_alloc_intr_resources(adapter);
3066 
3067 #ifdef VMXNET3_RSS
3068 	if (adapter->num_rx_queues > 1 &&
3069 	    adapter->intr.type == VMXNET3_IT_MSIX) {
3070 		adapter->rss = true;
3071 		netdev->hw_features |= NETIF_F_RXHASH;
3072 		netdev->features |= NETIF_F_RXHASH;
3073 		dev_dbg(&pdev->dev, "RSS is enabled.\n");
3074 	} else {
3075 		adapter->rss = false;
3076 	}
3077 #endif
3078 
3079 	vmxnet3_read_mac_addr(adapter, mac);
3080 	memcpy(netdev->dev_addr,  mac, netdev->addr_len);
3081 
3082 	netdev->netdev_ops = &vmxnet3_netdev_ops;
3083 	vmxnet3_set_ethtool_ops(netdev);
3084 	netdev->watchdog_timeo = 5 * HZ;
3085 
3086 	INIT_WORK(&adapter->work, vmxnet3_reset_work);
3087 	set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
3088 
3089 	if (adapter->intr.type == VMXNET3_IT_MSIX) {
3090 		int i;
3091 		for (i = 0; i < adapter->num_rx_queues; i++) {
3092 			netif_napi_add(adapter->netdev,
3093 				       &adapter->rx_queue[i].napi,
3094 				       vmxnet3_poll_rx_only, 64);
3095 		}
3096 	} else {
3097 		netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi,
3098 			       vmxnet3_poll, 64);
3099 	}
3100 
3101 	netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues);
3102 	netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues);
3103 
3104 	netif_carrier_off(netdev);
3105 	err = register_netdev(netdev);
3106 
3107 	if (err) {
3108 		dev_err(&pdev->dev, "Failed to register adapter\n");
3109 		goto err_register;
3110 	}
3111 
3112 	vmxnet3_check_link(adapter, false);
3113 	return 0;
3114 
3115 err_register:
3116 	vmxnet3_free_intr_resources(adapter);
3117 err_ver:
3118 	vmxnet3_free_pci_resources(adapter);
3119 err_alloc_pci:
3120 #ifdef VMXNET3_RSS
3121 	dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf),
3122 			  adapter->rss_conf, adapter->rss_conf_pa);
3123 err_alloc_rss:
3124 #endif
3125 	dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf),
3126 			  adapter->pm_conf, adapter->pm_conf_pa);
3127 err_alloc_pm:
3128 	dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start,
3129 			  adapter->queue_desc_pa);
3130 err_alloc_queue_desc:
3131 	dma_free_coherent(&adapter->pdev->dev,
3132 			  sizeof(struct Vmxnet3_DriverShared),
3133 			  adapter->shared, adapter->shared_pa);
3134 err_alloc_shared:
3135 	dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa,
3136 			 sizeof(struct vmxnet3_adapter), PCI_DMA_TODEVICE);
3137 	free_netdev(netdev);
3138 	return err;
3139 }
3140 
3141 
3142 static void
3143 vmxnet3_remove_device(struct pci_dev *pdev)
3144 {
3145 	struct net_device *netdev = pci_get_drvdata(pdev);
3146 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
3147 	int size = 0;
3148 	int num_rx_queues;
3149 
3150 #ifdef VMXNET3_RSS
3151 	if (enable_mq)
3152 		num_rx_queues = min(VMXNET3_DEVICE_MAX_RX_QUEUES,
3153 				    (int)num_online_cpus());
3154 	else
3155 #endif
3156 		num_rx_queues = 1;
3157 	num_rx_queues = rounddown_pow_of_two(num_rx_queues);
3158 
3159 	cancel_work_sync(&adapter->work);
3160 
3161 	unregister_netdev(netdev);
3162 
3163 	vmxnet3_free_intr_resources(adapter);
3164 	vmxnet3_free_pci_resources(adapter);
3165 #ifdef VMXNET3_RSS
3166 	dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf),
3167 			  adapter->rss_conf, adapter->rss_conf_pa);
3168 #endif
3169 	dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf),
3170 			  adapter->pm_conf, adapter->pm_conf_pa);
3171 
3172 	size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues;
3173 	size += sizeof(struct Vmxnet3_RxQueueDesc) * num_rx_queues;
3174 	dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start,
3175 			  adapter->queue_desc_pa);
3176 	dma_free_coherent(&adapter->pdev->dev,
3177 			  sizeof(struct Vmxnet3_DriverShared),
3178 			  adapter->shared, adapter->shared_pa);
3179 	dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa,
3180 			 sizeof(struct vmxnet3_adapter), PCI_DMA_TODEVICE);
3181 	free_netdev(netdev);
3182 }
3183 
3184 
3185 #ifdef CONFIG_PM
3186 
3187 static int
3188 vmxnet3_suspend(struct device *device)
3189 {
3190 	struct pci_dev *pdev = to_pci_dev(device);
3191 	struct net_device *netdev = pci_get_drvdata(pdev);
3192 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
3193 	struct Vmxnet3_PMConf *pmConf;
3194 	struct ethhdr *ehdr;
3195 	struct arphdr *ahdr;
3196 	u8 *arpreq;
3197 	struct in_device *in_dev;
3198 	struct in_ifaddr *ifa;
3199 	unsigned long flags;
3200 	int i = 0;
3201 
3202 	if (!netif_running(netdev))
3203 		return 0;
3204 
3205 	for (i = 0; i < adapter->num_rx_queues; i++)
3206 		napi_disable(&adapter->rx_queue[i].napi);
3207 
3208 	vmxnet3_disable_all_intrs(adapter);
3209 	vmxnet3_free_irqs(adapter);
3210 	vmxnet3_free_intr_resources(adapter);
3211 
3212 	netif_device_detach(netdev);
3213 	netif_tx_stop_all_queues(netdev);
3214 
3215 	/* Create wake-up filters. */
3216 	pmConf = adapter->pm_conf;
3217 	memset(pmConf, 0, sizeof(*pmConf));
3218 
3219 	if (adapter->wol & WAKE_UCAST) {
3220 		pmConf->filters[i].patternSize = ETH_ALEN;
3221 		pmConf->filters[i].maskSize = 1;
3222 		memcpy(pmConf->filters[i].pattern, netdev->dev_addr, ETH_ALEN);
3223 		pmConf->filters[i].mask[0] = 0x3F; /* LSB ETH_ALEN bits */
3224 
3225 		pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
3226 		i++;
3227 	}
3228 
3229 	if (adapter->wol & WAKE_ARP) {
3230 		in_dev = in_dev_get(netdev);
3231 		if (!in_dev)
3232 			goto skip_arp;
3233 
3234 		ifa = (struct in_ifaddr *)in_dev->ifa_list;
3235 		if (!ifa)
3236 			goto skip_arp;
3237 
3238 		pmConf->filters[i].patternSize = ETH_HLEN + /* Ethernet header*/
3239 			sizeof(struct arphdr) +		/* ARP header */
3240 			2 * ETH_ALEN +		/* 2 Ethernet addresses*/
3241 			2 * sizeof(u32);	/*2 IPv4 addresses */
3242 		pmConf->filters[i].maskSize =
3243 			(pmConf->filters[i].patternSize - 1) / 8 + 1;
3244 
3245 		/* ETH_P_ARP in Ethernet header. */
3246 		ehdr = (struct ethhdr *)pmConf->filters[i].pattern;
3247 		ehdr->h_proto = htons(ETH_P_ARP);
3248 
3249 		/* ARPOP_REQUEST in ARP header. */
3250 		ahdr = (struct arphdr *)&pmConf->filters[i].pattern[ETH_HLEN];
3251 		ahdr->ar_op = htons(ARPOP_REQUEST);
3252 		arpreq = (u8 *)(ahdr + 1);
3253 
3254 		/* The Unicast IPv4 address in 'tip' field. */
3255 		arpreq += 2 * ETH_ALEN + sizeof(u32);
3256 		*(u32 *)arpreq = ifa->ifa_address;
3257 
3258 		/* The mask for the relevant bits. */
3259 		pmConf->filters[i].mask[0] = 0x00;
3260 		pmConf->filters[i].mask[1] = 0x30; /* ETH_P_ARP */
3261 		pmConf->filters[i].mask[2] = 0x30; /* ARPOP_REQUEST */
3262 		pmConf->filters[i].mask[3] = 0x00;
3263 		pmConf->filters[i].mask[4] = 0xC0; /* IPv4 TIP */
3264 		pmConf->filters[i].mask[5] = 0x03; /* IPv4 TIP */
3265 		in_dev_put(in_dev);
3266 
3267 		pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
3268 		i++;
3269 	}
3270 
3271 skip_arp:
3272 	if (adapter->wol & WAKE_MAGIC)
3273 		pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_MAGIC;
3274 
3275 	pmConf->numFilters = i;
3276 
3277 	adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1);
3278 	adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof(
3279 								  *pmConf));
3280 	adapter->shared->devRead.pmConfDesc.confPA =
3281 		cpu_to_le64(adapter->pm_conf_pa);
3282 
3283 	spin_lock_irqsave(&adapter->cmd_lock, flags);
3284 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
3285 			       VMXNET3_CMD_UPDATE_PMCFG);
3286 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
3287 
3288 	pci_save_state(pdev);
3289 	pci_enable_wake(pdev, pci_choose_state(pdev, PMSG_SUSPEND),
3290 			adapter->wol);
3291 	pci_disable_device(pdev);
3292 	pci_set_power_state(pdev, pci_choose_state(pdev, PMSG_SUSPEND));
3293 
3294 	return 0;
3295 }
3296 
3297 
3298 static int
3299 vmxnet3_resume(struct device *device)
3300 {
3301 	int err, i = 0;
3302 	unsigned long flags;
3303 	struct pci_dev *pdev = to_pci_dev(device);
3304 	struct net_device *netdev = pci_get_drvdata(pdev);
3305 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
3306 	struct Vmxnet3_PMConf *pmConf;
3307 
3308 	if (!netif_running(netdev))
3309 		return 0;
3310 
3311 	/* Destroy wake-up filters. */
3312 	pmConf = adapter->pm_conf;
3313 	memset(pmConf, 0, sizeof(*pmConf));
3314 
3315 	adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1);
3316 	adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof(
3317 								  *pmConf));
3318 	adapter->shared->devRead.pmConfDesc.confPA =
3319 		cpu_to_le64(adapter->pm_conf_pa);
3320 
3321 	netif_device_attach(netdev);
3322 	pci_set_power_state(pdev, PCI_D0);
3323 	pci_restore_state(pdev);
3324 	err = pci_enable_device_mem(pdev);
3325 	if (err != 0)
3326 		return err;
3327 
3328 	pci_enable_wake(pdev, PCI_D0, 0);
3329 
3330 	spin_lock_irqsave(&adapter->cmd_lock, flags);
3331 	VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
3332 			       VMXNET3_CMD_UPDATE_PMCFG);
3333 	spin_unlock_irqrestore(&adapter->cmd_lock, flags);
3334 	vmxnet3_alloc_intr_resources(adapter);
3335 	vmxnet3_request_irqs(adapter);
3336 	for (i = 0; i < adapter->num_rx_queues; i++)
3337 		napi_enable(&adapter->rx_queue[i].napi);
3338 	vmxnet3_enable_all_intrs(adapter);
3339 
3340 	return 0;
3341 }
3342 
3343 static const struct dev_pm_ops vmxnet3_pm_ops = {
3344 	.suspend = vmxnet3_suspend,
3345 	.resume = vmxnet3_resume,
3346 };
3347 #endif
3348 
3349 static struct pci_driver vmxnet3_driver = {
3350 	.name		= vmxnet3_driver_name,
3351 	.id_table	= vmxnet3_pciid_table,
3352 	.probe		= vmxnet3_probe_device,
3353 	.remove		= vmxnet3_remove_device,
3354 #ifdef CONFIG_PM
3355 	.driver.pm	= &vmxnet3_pm_ops,
3356 #endif
3357 };
3358 
3359 
3360 static int __init
3361 vmxnet3_init_module(void)
3362 {
3363 	pr_info("%s - version %s\n", VMXNET3_DRIVER_DESC,
3364 		VMXNET3_DRIVER_VERSION_REPORT);
3365 	return pci_register_driver(&vmxnet3_driver);
3366 }
3367 
3368 module_init(vmxnet3_init_module);
3369 
3370 
3371 static void
3372 vmxnet3_exit_module(void)
3373 {
3374 	pci_unregister_driver(&vmxnet3_driver);
3375 }
3376 
3377 module_exit(vmxnet3_exit_module);
3378 
3379 MODULE_AUTHOR("VMware, Inc.");
3380 MODULE_DESCRIPTION(VMXNET3_DRIVER_DESC);
3381 MODULE_LICENSE("GPL v2");
3382 MODULE_VERSION(VMXNET3_DRIVER_VERSION_STRING);
3383