fix a kmap leak in virtio_console
[linux/fpc-iii.git] / drivers / net / vmxnet3 / vmxnet3_drv.c
blob3be786faaaec222f0226b8285dde01e88b147e59
1 /*
2 * Linux driver for VMware's vmxnet3 ethernet NIC.
4 * Copyright (C) 2008-2009, VMware, Inc. All Rights Reserved.
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.
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.
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.
20 * The full GNU General Public License is included in this distribution in
21 * the file called "COPYING".
23 * Maintained by: Shreyas Bhatewara <pv-drivers@vmware.com>
27 #include <linux/module.h>
28 #include <net/ip6_checksum.h>
30 #include "vmxnet3_int.h"
32 char vmxnet3_driver_name[] = "vmxnet3";
33 #define VMXNET3_DRIVER_DESC "VMware vmxnet3 virtual NIC driver"
36 * PCI Device ID Table
37 * Last entry must be all 0s
39 static DEFINE_PCI_DEVICE_TABLE(vmxnet3_pciid_table) = {
40 {PCI_VDEVICE(VMWARE, PCI_DEVICE_ID_VMWARE_VMXNET3)},
41 {0}
44 MODULE_DEVICE_TABLE(pci, vmxnet3_pciid_table);
46 static int enable_mq = 1;
48 static void
49 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
52 * Enable/Disable the given intr
54 static void
55 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
57 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0);
61 static void
62 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
64 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1);
69 * Enable/Disable all intrs used by the device
71 static void
72 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter)
74 int i;
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);
83 static void
84 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter)
86 int i;
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);
95 static void
96 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events)
98 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events);
102 static bool
103 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
105 return tq->stopped;
109 static void
110 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
112 tq->stopped = false;
113 netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue);
117 static void
118 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
120 tq->stopped = false;
121 netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue));
125 static void
126 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
128 tq->stopped = true;
129 tq->num_stop++;
130 netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue));
135 * Check the link state. This may start or stop the tx queue.
137 static void
138 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue)
140 u32 ret;
141 int i;
142 unsigned long flags;
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);
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);
155 if (affectTxQueue) {
156 for (i = 0; i < adapter->num_tx_queues; i++)
157 vmxnet3_tq_start(&adapter->tx_queue[i],
158 adapter);
160 } else {
161 netdev_info(adapter->netdev, "NIC Link is Down\n");
162 netif_carrier_off(adapter->netdev);
164 if (affectTxQueue) {
165 for (i = 0; i < adapter->num_tx_queues; i++)
166 vmxnet3_tq_stop(&adapter->tx_queue[i], adapter);
171 static void
172 vmxnet3_process_events(struct vmxnet3_adapter *adapter)
174 int i;
175 unsigned long flags;
176 u32 events = le32_to_cpu(adapter->shared->ecr);
177 if (!events)
178 return;
180 vmxnet3_ack_events(adapter, events);
182 /* Check if link state has changed */
183 if (events & VMXNET3_ECR_LINK)
184 vmxnet3_check_link(adapter, true);
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);
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);
206 schedule_work(&adapter->work);
210 #ifdef __BIG_ENDIAN_BITFIELD
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.
223 static void vmxnet3_RxDescToCPU(const struct Vmxnet3_RxDesc *srcDesc,
224 struct Vmxnet3_RxDesc *dstDesc)
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);
233 static void vmxnet3_TxDescToLe(const struct Vmxnet3_TxDesc *srcDesc,
234 struct Vmxnet3_TxDesc *dstDesc)
236 int i;
237 u32 *src = (u32 *)(srcDesc + 1);
238 u32 *dst = (u32 *)(dstDesc + 1);
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);
249 static void vmxnet3_RxCompToCPU(const struct Vmxnet3_RxCompDesc *srcDesc,
250 struct Vmxnet3_RxCompDesc *dstDesc)
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++;
263 /* Used to read bitfield values from double words. */
264 static u32 get_bitfield32(const __le32 *bitfield, u32 pos, u32 size)
266 u32 temp = le32_to_cpu(*bitfield);
267 u32 mask = ((1 << size) - 1) << pos;
268 temp &= mask;
269 temp >>= pos;
270 return temp;
275 #endif /* __BIG_ENDIAN_BITFIELD */
277 #ifdef __BIG_ENDIAN_BITFIELD
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)
299 #else
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)
308 #endif /* __BIG_ENDIAN_BITFIELD */
311 static void
312 vmxnet3_unmap_tx_buf(struct vmxnet3_tx_buf_info *tbi,
313 struct pci_dev *pdev)
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);
324 tbi->map_type = VMXNET3_MAP_NONE; /* to help debugging */
328 static int
329 vmxnet3_unmap_pkt(u32 eop_idx, struct vmxnet3_tx_queue *tq,
330 struct pci_dev *pdev, struct vmxnet3_adapter *adapter)
332 struct sk_buff *skb;
333 int entries = 0;
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);
339 skb = tq->buf_info[eop_idx].skb;
340 BUG_ON(skb == NULL);
341 tq->buf_info[eop_idx].skb = NULL;
343 VMXNET3_INC_RING_IDX_ONLY(eop_idx, tq->tx_ring.size);
345 while (tq->tx_ring.next2comp != eop_idx) {
346 vmxnet3_unmap_tx_buf(tq->buf_info + tq->tx_ring.next2comp,
347 pdev);
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.
354 vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
355 entries++;
358 dev_kfree_skb_any(skb);
359 return entries;
363 static int
364 vmxnet3_tq_tx_complete(struct vmxnet3_tx_queue *tq,
365 struct vmxnet3_adapter *adapter)
367 int completed = 0;
368 union Vmxnet3_GenericDesc *gdesc;
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);
376 vmxnet3_comp_ring_adv_next2proc(&tq->comp_ring);
377 gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
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);
388 spin_unlock(&tq->tx_lock);
390 return completed;
394 static void
395 vmxnet3_tq_cleanup(struct vmxnet3_tx_queue *tq,
396 struct vmxnet3_adapter *adapter)
398 int i;
400 while (tq->tx_ring.next2comp != tq->tx_ring.next2fill) {
401 struct vmxnet3_tx_buf_info *tbi;
403 tbi = tq->buf_info + tq->tx_ring.next2comp;
405 vmxnet3_unmap_tx_buf(tbi, adapter->pdev);
406 if (tbi->skb) {
407 dev_kfree_skb_any(tbi->skb);
408 tbi->skb = NULL;
410 vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
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);
419 tq->tx_ring.gen = VMXNET3_INIT_GEN;
420 tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
422 tq->comp_ring.gen = VMXNET3_INIT_GEN;
423 tq->comp_ring.next2proc = 0;
427 static void
428 vmxnet3_tq_destroy(struct vmxnet3_tx_queue *tq,
429 struct vmxnet3_adapter *adapter)
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;
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;
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;
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;
458 /* Destroy all tx queues */
459 void
460 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter)
462 int i;
464 for (i = 0; i < adapter->num_tx_queues; i++)
465 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter);
469 static void
470 vmxnet3_tq_init(struct vmxnet3_tx_queue *tq,
471 struct vmxnet3_adapter *adapter)
473 int i;
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;
481 memset(tq->data_ring.base, 0, tq->data_ring.size *
482 sizeof(struct Vmxnet3_TxDataDesc));
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;
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;
495 /* stats are not reset */
499 static int
500 vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
501 struct vmxnet3_adapter *adapter)
503 size_t sz;
505 BUG_ON(tq->tx_ring.base || tq->data_ring.base ||
506 tq->comp_ring.base || tq->buf_info);
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;
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;
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;
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;
538 return 0;
540 err:
541 vmxnet3_tq_destroy(tq, adapter);
542 return -ENOMEM;
545 static void
546 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter)
548 int i;
550 for (i = 0; i < adapter->num_tx_queues; i++)
551 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter);
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
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)
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;
569 while (num_allocated <= num_to_alloc) {
570 struct vmxnet3_rx_buf_info *rbi;
571 union Vmxnet3_GenericDesc *gd;
573 rbi = rbi_base + ring->next2fill;
574 gd = ring->base + ring->next2fill;
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;
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 */
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);
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;
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 */
611 val = VMXNET3_RXD_BTYPE_BODY << VMXNET3_RXD_BTYPE_SHIFT;
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);
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;
624 gd->dword[2] |= cpu_to_le32(ring->gen << VMXNET3_RXD_GEN_SHIFT);
625 num_allocated++;
626 vmxnet3_cmd_ring_adv_next2fill(ring);
629 netdev_dbg(adapter->netdev,
630 "alloc_rx_buf: %d allocated, next2fill %u, next2comp %u\n",
631 num_allocated, ring->next2fill, ring->next2comp);
633 /* so that the device can distinguish a full ring and an empty ring */
634 BUG_ON(num_allocated != 0 && ring->next2fill == ring->next2comp);
636 return num_allocated;
640 static void
641 vmxnet3_append_frag(struct sk_buff *skb, struct Vmxnet3_RxCompDesc *rcd,
642 struct vmxnet3_rx_buf_info *rbi)
644 struct skb_frag_struct *frag = skb_shinfo(skb)->frags +
645 skb_shinfo(skb)->nr_frags;
647 BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
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++;
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)
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;
669 BUG_ON(ctx->copy_size > skb_headlen(skb));
671 /* use the previous gen bit for the SOP desc */
672 dw2 = (tq->tx_ring.gen ^ 0x1) << VMXNET3_TXD_GEN_SHIFT;
674 ctx->sop_txd = tq->tx_ring.base + tq->tx_ring.next2fill;
675 gdesc = ctx->sop_txd; /* both loops below can be skipped */
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;
685 tbi = tq->buf_info + tq->tx_ring.next2fill;
686 tbi->map_type = VMXNET3_MAP_NONE;
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);
695 /* use the right gen for non-SOP desc */
696 dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
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;
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 */
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);
719 tbi->len = buf_size;
721 gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
722 BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
724 gdesc->txd.addr = cpu_to_le64(tbi->dma_addr);
725 gdesc->dword[2] = cpu_to_le32(dw2);
726 gdesc->dword[3] = 0;
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;
735 len -= buf_size;
736 buf_offset += buf_size;
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;
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 */
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);
759 tbi->len = buf_size;
761 gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
762 BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
764 gdesc->txd.addr = cpu_to_le64(tbi->dma_addr);
765 gdesc->dword[2] = cpu_to_le32(dw2);
766 gdesc->dword[3] = 0;
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;
775 len -= buf_size;
776 buf_offset += buf_size;
780 ctx->eop_txd = gdesc;
782 /* set the last buf_info for the pkt */
783 tbi->skb = skb;
784 tbi->sop_idx = ctx->sop_txd - tq->tx_ring.base;
788 /* Init all tx queues */
789 static void
790 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter)
792 int i;
794 for (i = 0; i < adapter->num_tx_queues; i++)
795 vmxnet3_tq_init(&adapter->tx_queue[i], adapter);
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
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
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
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)
821 struct Vmxnet3_TxDataDesc *tdd;
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);
831 if (ctx->ipv4) {
832 const struct iphdr *iph = ip_hdr(skb);
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;
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));
854 /* make sure headers are accessible directly */
855 if (unlikely(!pskb_may_pull(skb, ctx->copy_size)))
856 goto err;
859 if (unlikely(ctx->copy_size > VMXNET3_HDR_COPY_SIZE)) {
860 tq->stats.oversized_hdr++;
861 ctx->copy_size = 0;
862 return 0;
865 tdd = tq->data_ring.base + tq->tx_ring.next2fill;
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;
873 err:
874 return -1;
878 static void
879 vmxnet3_prepare_tso(struct sk_buff *skb,
880 struct vmxnet3_tx_ctx *ctx)
882 struct tcphdr *tcph = tcp_hdr(skb);
884 if (ctx->ipv4) {
885 struct iphdr *iph = ip_hdr(skb);
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);
893 tcph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, 0,
894 IPPROTO_TCP, 0);
898 static int txd_estimate(const struct sk_buff *skb)
900 int count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1;
901 int i;
903 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
904 const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
906 count += VMXNET3_TXD_NEEDED(skb_frag_size(frag));
908 return count;
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
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
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)
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
938 count = txd_estimate(skb);
940 ctx.ipv4 = (vlan_get_protocol(skb) == cpu_to_be16(ETH_P_IP));
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;
950 tq->stats.copy_skb_header++;
952 vmxnet3_prepare_tso(skb, &ctx);
953 } else {
954 if (unlikely(count > VMXNET3_MAX_TXD_PER_PKT)) {
956 /* non-tso pkts must not use more than
957 * VMXNET3_MAX_TXD_PER_PKT entries
959 if (skb_linearize(skb) != 0) {
960 tq->stats.drop_too_many_frags++;
961 goto drop_pkt;
963 tq->stats.linearized++;
965 /* recalculate the # of descriptors to use */
966 count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1;
970 spin_lock_irqsave(&tq->tx_lock, flags);
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);
979 vmxnet3_tq_stop(tq, adapter);
980 spin_unlock_irqrestore(&tq->tx_lock, flags);
981 return NETDEV_TX_BUSY;
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;
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;
1003 } else {
1004 tq->stats.drop_hdr_inspect_err++;
1005 goto unlock_drop_pkt;
1008 /* fill tx descs related to addr & len */
1009 vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter);
1011 /* setup the EOP desc */
1012 ctx.eop_txd->dword[3] = cpu_to_le32(VMXNET3_TXD_CQ | VMXNET3_TXD_EOP);
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;
1038 le32_add_cpu(&tq->shared->txNumDeferred, 1);
1041 if (vlan_tx_tag_present(skb)) {
1042 gdesc->txd.ti = 1;
1043 gdesc->txd.tci = vlan_tx_tag_get(skb);
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.
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]));
1063 spin_unlock_irqrestore(&tq->tx_lock, flags);
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);
1073 return NETDEV_TX_OK;
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;
1086 static netdev_tx_t
1087 vmxnet3_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1089 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
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);
1098 static void
1099 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
1100 struct sk_buff *skb,
1101 union Vmxnet3_GenericDesc *gdesc)
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);
1119 } else {
1120 skb_checksum_none_assert(skb);
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)
1129 rq->stats.drop_err++;
1130 if (!rcd->fcs)
1131 rq->stats.drop_fcs++;
1133 rq->stats.drop_total++;
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()
1142 * ctx->skb may be NULL if this is the first and the only one
1143 * desc for the pkt
1145 if (ctx->skb)
1146 dev_kfree_skb_irq(ctx->skb);
1148 ctx->skb = NULL;
1152 static int
1153 vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
1154 struct vmxnet3_adapter *adapter, int quota)
1156 static const u32 rxprod_reg[2] = {
1157 VMXNET3_REG_RXPROD, VMXNET3_REG_RXPROD2
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
1181 break;
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;
1192 BUG_ON(rxd->addr != rbi->dma_addr ||
1193 rxd->len != rbi->len);
1195 if (unlikely(rcd->eop && rcd->err)) {
1196 vmxnet3_rx_error(rq, rcd, ctx, adapter);
1197 goto rcd_done;
1200 if (rcd->sop) { /* first buf of the pkt */
1201 BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_HEAD ||
1202 rcd->rqID != rq->qid);
1204 BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_SKB);
1205 BUG_ON(ctx->skb != NULL || rbi->skb == NULL);
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;
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
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;
1231 dma_unmap_single(&adapter->pdev->dev, rbi->dma_addr,
1232 rbi->len,
1233 PCI_DMA_FROMDEVICE);
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);
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;
1252 } else {
1253 BUG_ON(ctx->skb == NULL && !skip_page_frags);
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);
1259 /* If an sop buffer was dropped, skip all
1260 * following non-sop fragments. They will be reused.
1262 if (skip_page_frags)
1263 goto rcd_done;
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.
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;
1279 if (rcd->len) {
1280 dma_unmap_page(&adapter->pdev->dev,
1281 rbi->dma_addr, rbi->len,
1282 PCI_DMA_FROMDEVICE);
1284 vmxnet3_append_frag(ctx->skb, rcd, rbi);
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;
1298 skb = ctx->skb;
1299 if (rcd->eop) {
1300 skb->len += skb->data_len;
1302 vmxnet3_rx_csum(adapter, skb,
1303 (union Vmxnet3_GenericDesc *)rcd);
1304 skb->protocol = eth_type_trans(skb, adapter->netdev);
1306 if (unlikely(rcd->ts))
1307 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rcd->tci);
1309 if (adapter->netdev->features & NETIF_F_LRO)
1310 netif_receive_skb(skb);
1311 else
1312 napi_gro_receive(&rq->napi, skb);
1314 ctx->skb = NULL;
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);
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--;
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);
1340 vmxnet3_comp_ring_adv_next2proc(&rq->comp_ring);
1341 vmxnet3_getRxComp(rcd,
1342 &rq->comp_ring.base[rq->comp_ring.next2proc].rcd, &rxComp);
1345 return num_rxd;
1349 static void
1350 vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,
1351 struct vmxnet3_adapter *adapter)
1353 u32 i, ring_idx;
1354 struct Vmxnet3_RxDesc *rxd;
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);
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;
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;
1384 rq->comp_ring.gen = VMXNET3_INIT_GEN;
1385 rq->comp_ring.next2proc = 0;
1389 static void
1390 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter)
1392 int i;
1394 for (i = 0; i < adapter->num_rx_queues; i++)
1395 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter);
1399 static void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
1400 struct vmxnet3_adapter *adapter)
1402 int i;
1403 int j;
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);
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;
1423 rq->buf_info[i] = NULL;
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;
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);
1442 static int
1443 vmxnet3_rq_init(struct vmxnet3_rx_queue *rq,
1444 struct vmxnet3_adapter *adapter)
1446 int i;
1448 /* initialize buf_info */
1449 for (i = 0; i < rq->rx_ring[0].size; i++) {
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;
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;
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;
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;
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;
1478 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter);
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;
1486 /* reset rxctx */
1487 rq->rx_ctx.skb = NULL;
1489 /* stats are not reset */
1490 return 0;
1494 static int
1495 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter)
1497 int i, err = 0;
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;
1508 return err;
1513 static int
1514 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter)
1516 int i;
1517 size_t sz;
1518 struct vmxnet3_rx_buf_info *bi;
1520 for (i = 0; i < 2; i++) {
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;
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;
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;
1550 rq->buf_info[0] = bi;
1551 rq->buf_info[1] = bi + rq->rx_ring[0].size;
1553 return 0;
1555 err:
1556 vmxnet3_rq_destroy(rq, adapter);
1557 return -ENOMEM;
1561 static int
1562 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter)
1564 int i, err = 0;
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;
1575 return err;
1576 err_out:
1577 vmxnet3_rq_destroy_all(adapter);
1578 return err;
1582 /* Multiple queue aware polling function for tx and rx */
1584 static int
1585 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget)
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);
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;
1600 static int
1601 vmxnet3_poll(struct napi_struct *napi, int budget)
1603 struct vmxnet3_rx_queue *rx_queue = container_of(napi,
1604 struct vmxnet3_rx_queue, napi);
1605 int rxd_done;
1607 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget);
1609 if (rxd_done < budget) {
1610 napi_complete(napi);
1611 vmxnet3_enable_all_intrs(rx_queue->adapter);
1613 return rxd_done;
1617 * NAPI polling function for MSI-X mode with multiple Rx queues
1618 * Returns the # of the NAPI credit consumed (# of rx descriptors processed)
1621 static int
1622 vmxnet3_poll_rx_only(struct napi_struct *napi, int budget)
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;
1629 /* When sharing interrupt with corresponding tx queue, process
1630 * tx completions in that queue as well
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);
1638 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget);
1640 if (rxd_done < budget) {
1641 napi_complete(napi);
1642 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx);
1644 return rxd_done;
1648 #ifdef CONFIG_PCI_MSI
1651 * Handle completion interrupts on tx queues
1652 * Returns whether or not the intr is handled
1655 static irqreturn_t
1656 vmxnet3_msix_tx(int irq, void *data)
1658 struct vmxnet3_tx_queue *tq = data;
1659 struct vmxnet3_adapter *adapter = tq->adapter;
1661 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1662 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx);
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);
1671 } else {
1672 vmxnet3_tq_tx_complete(tq, adapter);
1674 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx);
1676 return IRQ_HANDLED;
1681 * Handle completion interrupts on rx queues. Returns whether or not the
1682 * intr is handled
1685 static irqreturn_t
1686 vmxnet3_msix_rx(int irq, void *data)
1688 struct vmxnet3_rx_queue *rq = data;
1689 struct vmxnet3_adapter *adapter = rq->adapter;
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);
1696 return IRQ_HANDLED;
1700 *----------------------------------------------------------------------------
1702 * vmxnet3_msix_event --
1704 * vmxnet3 msix event intr handler
1706 * Result:
1707 * whether or not the intr is handled
1709 *----------------------------------------------------------------------------
1712 static irqreturn_t
1713 vmxnet3_msix_event(int irq, void *data)
1715 struct net_device *dev = data;
1716 struct vmxnet3_adapter *adapter = netdev_priv(dev);
1718 /* disable intr if needed */
1719 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1720 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx);
1722 if (adapter->shared->ecr)
1723 vmxnet3_process_events(adapter);
1725 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx);
1727 return IRQ_HANDLED;
1730 #endif /* CONFIG_PCI_MSI */
1733 /* Interrupt handler for vmxnet3 */
1734 static irqreturn_t
1735 vmxnet3_intr(int irq, void *dev_id)
1737 struct net_device *dev = dev_id;
1738 struct vmxnet3_adapter *adapter = netdev_priv(dev);
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;
1748 /* disable intr if needed */
1749 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1750 vmxnet3_disable_all_intrs(adapter);
1752 napi_schedule(&adapter->rx_queue[0].napi);
1754 return IRQ_HANDLED;
1757 #ifdef CONFIG_NET_POLL_CONTROLLER
1759 /* netpoll callback. */
1760 static void
1761 vmxnet3_netpoll(struct net_device *netdev)
1763 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1765 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1766 vmxnet3_disable_all_intrs(adapter);
1768 vmxnet3_do_poll(adapter, adapter->rx_queue[0].rx_ring[0].size);
1769 vmxnet3_enable_all_intrs(adapter);
1772 #endif /* CONFIG_NET_POLL_CONTROLLER */
1774 static int
1775 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
1777 struct vmxnet3_intr *intr = &adapter->intr;
1778 int err = 0, i;
1779 int vector = 0;
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);
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;
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++;
1817 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE)
1818 vector = 0;
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;
1839 adapter->rx_queue[i].comp_ring.intr_idx = vector++;
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;
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
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;
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;
1887 netdev_info(adapter->netdev,
1888 "intr type %u, mode %u, %u vectors allocated\n",
1889 intr->type, intr->mask_mode, intr->num_intrs);
1892 return err;
1896 static void
1897 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter)
1899 struct vmxnet3_intr *intr = &adapter->intr;
1900 BUG_ON(intr->type == VMXNET3_IT_AUTO || intr->num_intrs <= 0);
1902 switch (intr->type) {
1903 #ifdef CONFIG_PCI_MSI
1904 case VMXNET3_IT_MSIX:
1906 int i, vector = 0;
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;
1917 for (i = 0; i < adapter->num_rx_queues; i++) {
1918 free_irq(intr->msix_entries[vector++].vector,
1919 &(adapter->rx_queue[i]));
1922 free_irq(intr->msix_entries[vector].vector,
1923 adapter->netdev);
1924 BUG_ON(vector >= intr->num_intrs);
1925 break;
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();
1940 static void
1941 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter)
1943 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1944 u16 vid;
1946 /* allow untagged pkts */
1947 VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
1949 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
1950 VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1954 static int
1955 vmxnet3_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
1957 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1959 if (!(netdev->flags & IFF_PROMISC)) {
1960 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1961 unsigned long flags;
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);
1970 set_bit(vid, adapter->active_vlans);
1972 return 0;
1976 static int
1977 vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid)
1979 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1981 if (!(netdev->flags & IFF_PROMISC)) {
1982 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1983 unsigned long flags;
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);
1992 clear_bit(vid, adapter->active_vlans);
1994 return 0;
1998 static u8 *
1999 vmxnet3_copy_mc(struct net_device *netdev)
2001 u8 *buf = NULL;
2002 u32 sz = netdev_mc_count(netdev) * ETH_ALEN;
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;
2012 netdev_for_each_mc_addr(ha, netdev)
2013 memcpy(buf + i++ * ETH_ALEN, ha->addr,
2014 ETH_ALEN);
2017 return buf;
2021 static void
2022 vmxnet3_set_mc(struct net_device *netdev)
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;
2032 if (netdev->flags & IFF_PROMISC) {
2033 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
2034 memset(vfTable, 0, VMXNET3_VFT_SIZE * sizeof(*vfTable));
2036 new_mode |= VMXNET3_RXM_PROMISC;
2037 } else {
2038 vmxnet3_restore_vlan(adapter);
2041 if (netdev->flags & IFF_BROADCAST)
2042 new_mode |= VMXNET3_RXM_BCAST;
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;
2067 if (!(new_mode & VMXNET3_RXM_MCAST)) {
2068 rxConf->mfTableLen = 0;
2069 rxConf->mfTablePA = 0;
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);
2081 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2082 VMXNET3_CMD_UPDATE_MAC_FILTERS);
2083 spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2085 if (new_table) {
2086 dma_unmap_single(&adapter->pdev->dev, new_table_pa,
2087 rxConf->mfTableLen, PCI_DMA_TODEVICE);
2088 kfree(new_table);
2092 void
2093 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter)
2095 int i;
2097 for (i = 0; i < adapter->num_rx_queues; i++)
2098 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter);
2103 * Set up driver_shared based on settings in adapter.
2106 static void
2107 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
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;
2115 memset(shared, 0, sizeof(*shared));
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);
2129 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa);
2130 devRead->misc.ddLen = cpu_to_le32(sizeof(struct vmxnet3_adapter));
2132 /* set up feature flags */
2133 if (adapter->netdev->features & NETIF_F_RXCSUM)
2134 devRead->misc.uptFeatures |= UPT1_F_RXCSUM;
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);
2140 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
2141 devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
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));
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;
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;
2187 #ifdef VMXNET3_RSS
2188 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf));
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,
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));
2211 for (i = 0; i < rssConf->indTableSize; i++)
2212 rssConf->indTable[i] = ethtool_rxfh_indir_default(
2213 i, adapter->num_rx_queues);
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);
2221 #endif /* VMXNET3_RSS */
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];
2230 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx;
2231 devRead->intrConf.intrCtrl |= cpu_to_le32(VMXNET3_IC_DISABLE_ALL);
2233 /* rx filter settings */
2234 devRead->rxFilterConf.rxMode = 0;
2235 vmxnet3_restore_vlan(adapter);
2236 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr);
2238 /* the rest are already zeroed */
2243 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
2245 int err, i;
2246 u32 ret;
2247 unsigned long flags;
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);
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;
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;
2271 vmxnet3_setup_driver_shared(adapter);
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);
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;
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);
2299 /* Apply the rx filter settins last. */
2300 vmxnet3_set_mc(adapter->netdev);
2303 * Check link state when first activating device. It will start the
2304 * tx queue if the link is up.
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;
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;
2325 void
2326 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter)
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);
2336 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter)
2338 int i;
2339 unsigned long flags;
2340 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state))
2341 return 0;
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);
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);
2356 vmxnet3_tq_cleanup_all(adapter);
2357 vmxnet3_rq_cleanup_all(adapter);
2358 vmxnet3_free_irqs(adapter);
2359 return 0;
2363 static void
2364 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
2366 u32 tmp;
2368 tmp = *(u32 *)mac;
2369 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp);
2371 tmp = (mac[5] << 8) | mac[4];
2372 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp);
2376 static int
2377 vmxnet3_set_mac_addr(struct net_device *netdev, void *p)
2379 struct sockaddr *addr = p;
2380 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2382 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
2383 vmxnet3_write_mac_addr(adapter, addr->sa_data);
2385 return 0;
2389 /* ==================== initialization and cleanup routines ============ */
2391 static int
2392 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
2394 int err;
2395 unsigned long mmio_start, mmio_len;
2396 struct pci_dev *pdev = adapter->pdev;
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;
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;
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;
2419 *dma64 = false;
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;
2430 pci_set_master(pdev);
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;
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;
2449 return 0;
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;
2461 static void
2462 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter)
2464 BUG_ON(!adapter->pdev);
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);
2473 static void
2474 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter)
2476 size_t sz, i, ring0_size, ring1_size, comp_size;
2477 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[0];
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;
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;
2496 * for simplicity, force the ring0 size to be a multiple of
2497 * rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN
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;
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;
2517 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size,
2518 u32 rx_ring_size, u32 rx_ring2_size)
2520 int err = 0, i;
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);
2533 * Too late to change num_tx_queues. We cannot do away with
2534 * lesser number of queues than what we asked for
2536 if (err)
2537 goto queue_err;
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;
2566 return err;
2567 queue_err:
2568 vmxnet3_tq_destroy_all(adapter);
2569 return err;
2572 static int
2573 vmxnet3_open(struct net_device *netdev)
2575 struct vmxnet3_adapter *adapter;
2576 int err, i;
2578 adapter = netdev_priv(netdev);
2580 for (i = 0; i < adapter->num_tx_queues; i++)
2581 spin_lock_init(&adapter->tx_queue[i].tx_lock);
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;
2589 err = vmxnet3_activate_dev(adapter);
2590 if (err)
2591 goto activate_err;
2593 return 0;
2595 activate_err:
2596 vmxnet3_rq_destroy_all(adapter);
2597 vmxnet3_tq_destroy_all(adapter);
2598 queue_err:
2599 return err;
2603 static int
2604 vmxnet3_close(struct net_device *netdev)
2606 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2609 * Reset_work may be in the middle of resetting the device, wait for its
2610 * completion.
2612 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2613 msleep(1);
2615 vmxnet3_quiesce_dev(adapter);
2617 vmxnet3_rq_destroy_all(adapter);
2618 vmxnet3_tq_destroy_all(adapter);
2620 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2623 return 0;
2627 void
2628 vmxnet3_force_close(struct vmxnet3_adapter *adapter)
2630 int i;
2633 * we must clear VMXNET3_STATE_BIT_RESETTING, otherwise
2634 * vmxnet3_close() will deadlock.
2636 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state));
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);
2645 static int
2646 vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)
2648 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2649 int err = 0;
2651 if (new_mtu < VMXNET3_MIN_MTU || new_mtu > VMXNET3_MAX_MTU)
2652 return -EINVAL;
2654 netdev->mtu = new_mtu;
2657 * Reset_work may be in the middle of resetting the device, wait for its
2658 * completion.
2660 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2661 msleep(1);
2663 if (netif_running(netdev)) {
2664 vmxnet3_quiesce_dev(adapter);
2665 vmxnet3_reset_dev(adapter);
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;
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;
2687 out:
2688 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2689 if (err)
2690 vmxnet3_force_close(adapter);
2692 return err;
2696 static void
2697 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64)
2699 struct net_device *netdev = adapter->netdev;
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;
2714 static void
2715 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
2717 u32 tmp;
2719 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL);
2720 *(u32 *)mac = tmp;
2722 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH);
2723 mac[4] = tmp & 0xff;
2724 mac[5] = (tmp >> 8) & 0xff;
2727 #ifdef CONFIG_PCI_MSI
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)
2739 static int
2740 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
2741 int vectors)
2743 int err = 0, vector_threshold;
2744 vector_threshold = VMXNET3_LINUX_MIN_MSIX_VECT;
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.
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;
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;
2776 #endif /* CONFIG_PCI_MSI */
2778 static void
2779 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
2781 u32 cfg;
2782 unsigned long flags;
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;
2793 if (adapter->intr.type == VMXNET3_IT_AUTO) {
2794 adapter->intr.type = VMXNET3_IT_MSIX;
2797 #ifdef CONFIG_PCI_MSI
2798 if (adapter->intr.type == VMXNET3_IT_MSIX) {
2799 int vector, err = 0;
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 */
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);
2814 for (vector = 0; vector < adapter->intr.num_intrs; vector++)
2815 adapter->intr.msix_entries[vector].entry = vector;
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
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;
2832 return;
2834 if (!err)
2835 return;
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);
2842 adapter->intr.type = VMXNET3_IT_MSI;
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;
2854 #endif /* CONFIG_PCI_MSI */
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;
2861 /* INT-X related setting */
2862 adapter->intr.num_intrs = 1;
2866 static void
2867 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter)
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);
2878 static void
2879 vmxnet3_tx_timeout(struct net_device *netdev)
2881 struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2882 adapter->tx_timeout_count++;
2884 netdev_err(adapter->netdev, "tx hang\n");
2885 schedule_work(&adapter->work);
2886 netif_wake_queue(adapter->netdev);
2890 static void
2891 vmxnet3_reset_work(struct work_struct *data)
2893 struct vmxnet3_adapter *adapter;
2895 adapter = container_of(data, struct vmxnet3_adapter, work);
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;
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");
2911 rtnl_unlock();
2913 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2917 static int
2918 vmxnet3_probe_device(struct pci_dev *pdev,
2919 const struct pci_device_id *id)
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
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;
2947 if (!pci_msi_enabled())
2948 enable_mq = 0;
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);
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;
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);
2972 if (!netdev)
2973 return -ENOMEM;
2975 pci_set_drvdata(pdev, netdev);
2976 adapter = netdev_priv(netdev);
2977 adapter->netdev = netdev;
2978 adapter->pdev = pdev;
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;
2994 adapter->num_rx_queues = num_rx_queues;
2995 adapter->num_tx_queues = num_tx_queues;
2996 adapter->rx_buf_per_pkt = 1;
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);
3004 if (!adapter->tqd_start) {
3005 dev_err(&pdev->dev, "Failed to allocate memory\n");
3006 err = -ENOMEM;
3007 goto err_alloc_queue_desc;
3009 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start +
3010 adapter->num_tx_queues);
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;
3021 #ifdef VMXNET3_RSS
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;
3031 #endif /* VMXNET3_RSS */
3033 err = vmxnet3_alloc_pci_resources(adapter, &dma64);
3034 if (err < 0)
3035 goto err_alloc_pci;
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;
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;
3057 SET_NETDEV_DEV(netdev, &pdev->dev);
3058 vmxnet3_declare_features(adapter, dma64);
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;
3065 vmxnet3_alloc_intr_resources(adapter);
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;
3077 #endif
3079 vmxnet3_read_mac_addr(adapter, mac);
3080 memcpy(netdev->dev_addr, mac, netdev->addr_len);
3082 netdev->netdev_ops = &vmxnet3_netdev_ops;
3083 vmxnet3_set_ethtool_ops(netdev);
3084 netdev->watchdog_timeo = 5 * HZ;
3086 INIT_WORK(&adapter->work, vmxnet3_reset_work);
3087 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
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);
3096 } else {
3097 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi,
3098 vmxnet3_poll, 64);
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);
3104 netif_carrier_off(netdev);
3105 err = register_netdev(netdev);
3107 if (err) {
3108 dev_err(&pdev->dev, "Failed to register adapter\n");
3109 goto err_register;
3112 vmxnet3_check_link(adapter, false);
3113 return 0;
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;
3142 static void
3143 vmxnet3_remove_device(struct pci_dev *pdev)
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;
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);
3159 cancel_work_sync(&adapter->work);
3161 unregister_netdev(netdev);
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);
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);
3185 #ifdef CONFIG_PM
3187 static int
3188 vmxnet3_suspend(struct device *device)
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;
3202 if (!netif_running(netdev))
3203 return 0;
3205 for (i = 0; i < adapter->num_rx_queues; i++)
3206 napi_disable(&adapter->rx_queue[i].napi);
3208 vmxnet3_disable_all_intrs(adapter);
3209 vmxnet3_free_irqs(adapter);
3210 vmxnet3_free_intr_resources(adapter);
3212 netif_device_detach(netdev);
3213 netif_tx_stop_all_queues(netdev);
3215 /* Create wake-up filters. */
3216 pmConf = adapter->pm_conf;
3217 memset(pmConf, 0, sizeof(*pmConf));
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 */
3225 pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
3226 i++;
3229 if (adapter->wol & WAKE_ARP) {
3230 in_dev = in_dev_get(netdev);
3231 if (!in_dev)
3232 goto skip_arp;
3234 ifa = (struct in_ifaddr *)in_dev->ifa_list;
3235 if (!ifa)
3236 goto skip_arp;
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;
3245 /* ETH_P_ARP in Ethernet header. */
3246 ehdr = (struct ethhdr *)pmConf->filters[i].pattern;
3247 ehdr->h_proto = htons(ETH_P_ARP);
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);
3254 /* The Unicast IPv4 address in 'tip' field. */
3255 arpreq += 2 * ETH_ALEN + sizeof(u32);
3256 *(u32 *)arpreq = ifa->ifa_address;
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);
3267 pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
3268 i++;
3271 skip_arp:
3272 if (adapter->wol & WAKE_MAGIC)
3273 pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_MAGIC;
3275 pmConf->numFilters = i;
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);
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);
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));
3294 return 0;
3298 static int
3299 vmxnet3_resume(struct device *device)
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;
3308 if (!netif_running(netdev))
3309 return 0;
3311 /* Destroy wake-up filters. */
3312 pmConf = adapter->pm_conf;
3313 memset(pmConf, 0, sizeof(*pmConf));
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);
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;
3328 pci_enable_wake(pdev, PCI_D0, 0);
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);
3340 return 0;
3343 static const struct dev_pm_ops vmxnet3_pm_ops = {
3344 .suspend = vmxnet3_suspend,
3345 .resume = vmxnet3_resume,
3347 #endif
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
3360 static int __init
3361 vmxnet3_init_module(void)
3363 pr_info("%s - version %s\n", VMXNET3_DRIVER_DESC,
3364 VMXNET3_DRIVER_VERSION_REPORT);
3365 return pci_register_driver(&vmxnet3_driver);
3368 module_init(vmxnet3_init_module);
3371 static void
3372 vmxnet3_exit_module(void)
3374 pci_unregister_driver(&vmxnet3_driver);
3377 module_exit(vmxnet3_exit_module);
3379 MODULE_AUTHOR("VMware, Inc.");
3380 MODULE_DESCRIPTION(VMXNET3_DRIVER_DESC);
3381 MODULE_LICENSE("GPL v2");
3382 MODULE_VERSION(VMXNET3_DRIVER_VERSION_STRING);