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
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 "vmxnet3_int.h"
29 char vmxnet3_driver_name
[] = "vmxnet3";
30 #define VMXNET3_DRIVER_DESC "VMware vmxnet3 virtual NIC driver"
35 * Last entry must be all 0s
37 static const struct pci_device_id vmxnet3_pciid_table
[] = {
38 {PCI_VDEVICE(VMWARE
, PCI_DEVICE_ID_VMWARE_VMXNET3
)},
42 MODULE_DEVICE_TABLE(pci
, vmxnet3_pciid_table
);
44 static atomic_t devices_found
;
48 * Enable/Disable the given intr
51 vmxnet3_enable_intr(struct vmxnet3_adapter
*adapter
, unsigned intr_idx
)
53 VMXNET3_WRITE_BAR0_REG(adapter
, VMXNET3_REG_IMR
+ intr_idx
* 8, 0);
58 vmxnet3_disable_intr(struct vmxnet3_adapter
*adapter
, unsigned intr_idx
)
60 VMXNET3_WRITE_BAR0_REG(adapter
, VMXNET3_REG_IMR
+ intr_idx
* 8, 1);
65 * Enable/Disable all intrs used by the device
68 vmxnet3_enable_all_intrs(struct vmxnet3_adapter
*adapter
)
72 for (i
= 0; i
< adapter
->intr
.num_intrs
; i
++)
73 vmxnet3_enable_intr(adapter
, i
);
78 vmxnet3_disable_all_intrs(struct vmxnet3_adapter
*adapter
)
82 for (i
= 0; i
< adapter
->intr
.num_intrs
; i
++)
83 vmxnet3_disable_intr(adapter
, i
);
88 vmxnet3_ack_events(struct vmxnet3_adapter
*adapter
, u32 events
)
90 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_ECR
, events
);
95 vmxnet3_tq_stopped(struct vmxnet3_tx_queue
*tq
, struct vmxnet3_adapter
*adapter
)
97 return netif_queue_stopped(adapter
->netdev
);
102 vmxnet3_tq_start(struct vmxnet3_tx_queue
*tq
, struct vmxnet3_adapter
*adapter
)
105 netif_start_queue(adapter
->netdev
);
110 vmxnet3_tq_wake(struct vmxnet3_tx_queue
*tq
, struct vmxnet3_adapter
*adapter
)
113 netif_wake_queue(adapter
->netdev
);
118 vmxnet3_tq_stop(struct vmxnet3_tx_queue
*tq
, struct vmxnet3_adapter
*adapter
)
122 netif_stop_queue(adapter
->netdev
);
127 * Check the link state. This may start or stop the tx queue.
130 vmxnet3_check_link(struct vmxnet3_adapter
*adapter
)
134 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
, VMXNET3_CMD_GET_LINK
);
135 ret
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_CMD
);
136 adapter
->link_speed
= ret
>> 16;
137 if (ret
& 1) { /* Link is up. */
138 printk(KERN_INFO
"%s: NIC Link is Up %d Mbps\n",
139 adapter
->netdev
->name
, adapter
->link_speed
);
140 if (!netif_carrier_ok(adapter
->netdev
))
141 netif_carrier_on(adapter
->netdev
);
143 vmxnet3_tq_start(&adapter
->tx_queue
, adapter
);
145 printk(KERN_INFO
"%s: NIC Link is Down\n",
146 adapter
->netdev
->name
);
147 if (netif_carrier_ok(adapter
->netdev
))
148 netif_carrier_off(adapter
->netdev
);
150 vmxnet3_tq_stop(&adapter
->tx_queue
, adapter
);
156 vmxnet3_process_events(struct vmxnet3_adapter
*adapter
)
158 u32 events
= adapter
->shared
->ecr
;
162 vmxnet3_ack_events(adapter
, events
);
164 /* Check if link state has changed */
165 if (events
& VMXNET3_ECR_LINK
)
166 vmxnet3_check_link(adapter
);
168 /* Check if there is an error on xmit/recv queues */
169 if (events
& (VMXNET3_ECR_TQERR
| VMXNET3_ECR_RQERR
)) {
170 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
171 VMXNET3_CMD_GET_QUEUE_STATUS
);
173 if (adapter
->tqd_start
->status
.stopped
) {
174 printk(KERN_ERR
"%s: tq error 0x%x\n",
175 adapter
->netdev
->name
,
176 adapter
->tqd_start
->status
.error
);
178 if (adapter
->rqd_start
->status
.stopped
) {
179 printk(KERN_ERR
"%s: rq error 0x%x\n",
180 adapter
->netdev
->name
,
181 adapter
->rqd_start
->status
.error
);
184 schedule_work(&adapter
->work
);
190 vmxnet3_unmap_tx_buf(struct vmxnet3_tx_buf_info
*tbi
,
191 struct pci_dev
*pdev
)
193 if (tbi
->map_type
== VMXNET3_MAP_SINGLE
)
194 pci_unmap_single(pdev
, tbi
->dma_addr
, tbi
->len
,
196 else if (tbi
->map_type
== VMXNET3_MAP_PAGE
)
197 pci_unmap_page(pdev
, tbi
->dma_addr
, tbi
->len
,
200 BUG_ON(tbi
->map_type
!= VMXNET3_MAP_NONE
);
202 tbi
->map_type
= VMXNET3_MAP_NONE
; /* to help debugging */
207 vmxnet3_unmap_pkt(u32 eop_idx
, struct vmxnet3_tx_queue
*tq
,
208 struct pci_dev
*pdev
, struct vmxnet3_adapter
*adapter
)
213 /* no out of order completion */
214 BUG_ON(tq
->buf_info
[eop_idx
].sop_idx
!= tq
->tx_ring
.next2comp
);
215 BUG_ON(tq
->tx_ring
.base
[eop_idx
].txd
.eop
!= 1);
217 skb
= tq
->buf_info
[eop_idx
].skb
;
219 tq
->buf_info
[eop_idx
].skb
= NULL
;
221 VMXNET3_INC_RING_IDX_ONLY(eop_idx
, tq
->tx_ring
.size
);
223 while (tq
->tx_ring
.next2comp
!= eop_idx
) {
224 vmxnet3_unmap_tx_buf(tq
->buf_info
+ tq
->tx_ring
.next2comp
,
227 /* update next2comp w/o tx_lock. Since we are marking more,
228 * instead of less, tx ring entries avail, the worst case is
229 * that the tx routine incorrectly re-queues a pkt due to
230 * insufficient tx ring entries.
232 vmxnet3_cmd_ring_adv_next2comp(&tq
->tx_ring
);
236 dev_kfree_skb_any(skb
);
242 vmxnet3_tq_tx_complete(struct vmxnet3_tx_queue
*tq
,
243 struct vmxnet3_adapter
*adapter
)
246 union Vmxnet3_GenericDesc
*gdesc
;
248 gdesc
= tq
->comp_ring
.base
+ tq
->comp_ring
.next2proc
;
249 while (gdesc
->tcd
.gen
== tq
->comp_ring
.gen
) {
250 completed
+= vmxnet3_unmap_pkt(gdesc
->tcd
.txdIdx
, tq
,
251 adapter
->pdev
, adapter
);
253 vmxnet3_comp_ring_adv_next2proc(&tq
->comp_ring
);
254 gdesc
= tq
->comp_ring
.base
+ tq
->comp_ring
.next2proc
;
258 spin_lock(&tq
->tx_lock
);
259 if (unlikely(vmxnet3_tq_stopped(tq
, adapter
) &&
260 vmxnet3_cmd_ring_desc_avail(&tq
->tx_ring
) >
261 VMXNET3_WAKE_QUEUE_THRESHOLD(tq
) &&
262 netif_carrier_ok(adapter
->netdev
))) {
263 vmxnet3_tq_wake(tq
, adapter
);
265 spin_unlock(&tq
->tx_lock
);
272 vmxnet3_tq_cleanup(struct vmxnet3_tx_queue
*tq
,
273 struct vmxnet3_adapter
*adapter
)
277 while (tq
->tx_ring
.next2comp
!= tq
->tx_ring
.next2fill
) {
278 struct vmxnet3_tx_buf_info
*tbi
;
279 union Vmxnet3_GenericDesc
*gdesc
;
281 tbi
= tq
->buf_info
+ tq
->tx_ring
.next2comp
;
282 gdesc
= tq
->tx_ring
.base
+ tq
->tx_ring
.next2comp
;
284 vmxnet3_unmap_tx_buf(tbi
, adapter
->pdev
);
286 dev_kfree_skb_any(tbi
->skb
);
289 vmxnet3_cmd_ring_adv_next2comp(&tq
->tx_ring
);
292 /* sanity check, verify all buffers are indeed unmapped and freed */
293 for (i
= 0; i
< tq
->tx_ring
.size
; i
++) {
294 BUG_ON(tq
->buf_info
[i
].skb
!= NULL
||
295 tq
->buf_info
[i
].map_type
!= VMXNET3_MAP_NONE
);
298 tq
->tx_ring
.gen
= VMXNET3_INIT_GEN
;
299 tq
->tx_ring
.next2fill
= tq
->tx_ring
.next2comp
= 0;
301 tq
->comp_ring
.gen
= VMXNET3_INIT_GEN
;
302 tq
->comp_ring
.next2proc
= 0;
307 vmxnet3_tq_destroy(struct vmxnet3_tx_queue
*tq
,
308 struct vmxnet3_adapter
*adapter
)
310 if (tq
->tx_ring
.base
) {
311 pci_free_consistent(adapter
->pdev
, tq
->tx_ring
.size
*
312 sizeof(struct Vmxnet3_TxDesc
),
313 tq
->tx_ring
.base
, tq
->tx_ring
.basePA
);
314 tq
->tx_ring
.base
= NULL
;
316 if (tq
->data_ring
.base
) {
317 pci_free_consistent(adapter
->pdev
, tq
->data_ring
.size
*
318 sizeof(struct Vmxnet3_TxDataDesc
),
319 tq
->data_ring
.base
, tq
->data_ring
.basePA
);
320 tq
->data_ring
.base
= NULL
;
322 if (tq
->comp_ring
.base
) {
323 pci_free_consistent(adapter
->pdev
, tq
->comp_ring
.size
*
324 sizeof(struct Vmxnet3_TxCompDesc
),
325 tq
->comp_ring
.base
, tq
->comp_ring
.basePA
);
326 tq
->comp_ring
.base
= NULL
;
334 vmxnet3_tq_init(struct vmxnet3_tx_queue
*tq
,
335 struct vmxnet3_adapter
*adapter
)
339 /* reset the tx ring contents to 0 and reset the tx ring states */
340 memset(tq
->tx_ring
.base
, 0, tq
->tx_ring
.size
*
341 sizeof(struct Vmxnet3_TxDesc
));
342 tq
->tx_ring
.next2fill
= tq
->tx_ring
.next2comp
= 0;
343 tq
->tx_ring
.gen
= VMXNET3_INIT_GEN
;
345 memset(tq
->data_ring
.base
, 0, tq
->data_ring
.size
*
346 sizeof(struct Vmxnet3_TxDataDesc
));
348 /* reset the tx comp ring contents to 0 and reset comp ring states */
349 memset(tq
->comp_ring
.base
, 0, tq
->comp_ring
.size
*
350 sizeof(struct Vmxnet3_TxCompDesc
));
351 tq
->comp_ring
.next2proc
= 0;
352 tq
->comp_ring
.gen
= VMXNET3_INIT_GEN
;
354 /* reset the bookkeeping data */
355 memset(tq
->buf_info
, 0, sizeof(tq
->buf_info
[0]) * tq
->tx_ring
.size
);
356 for (i
= 0; i
< tq
->tx_ring
.size
; i
++)
357 tq
->buf_info
[i
].map_type
= VMXNET3_MAP_NONE
;
359 /* stats are not reset */
364 vmxnet3_tq_create(struct vmxnet3_tx_queue
*tq
,
365 struct vmxnet3_adapter
*adapter
)
367 BUG_ON(tq
->tx_ring
.base
|| tq
->data_ring
.base
||
368 tq
->comp_ring
.base
|| tq
->buf_info
);
370 tq
->tx_ring
.base
= pci_alloc_consistent(adapter
->pdev
, tq
->tx_ring
.size
371 * sizeof(struct Vmxnet3_TxDesc
),
372 &tq
->tx_ring
.basePA
);
373 if (!tq
->tx_ring
.base
) {
374 printk(KERN_ERR
"%s: failed to allocate tx ring\n",
375 adapter
->netdev
->name
);
379 tq
->data_ring
.base
= pci_alloc_consistent(adapter
->pdev
,
381 sizeof(struct Vmxnet3_TxDataDesc
),
382 &tq
->data_ring
.basePA
);
383 if (!tq
->data_ring
.base
) {
384 printk(KERN_ERR
"%s: failed to allocate data ring\n",
385 adapter
->netdev
->name
);
389 tq
->comp_ring
.base
= pci_alloc_consistent(adapter
->pdev
,
391 sizeof(struct Vmxnet3_TxCompDesc
),
392 &tq
->comp_ring
.basePA
);
393 if (!tq
->comp_ring
.base
) {
394 printk(KERN_ERR
"%s: failed to allocate tx comp ring\n",
395 adapter
->netdev
->name
);
399 tq
->buf_info
= kcalloc(tq
->tx_ring
.size
, sizeof(tq
->buf_info
[0]),
402 printk(KERN_ERR
"%s: failed to allocate tx bufinfo\n",
403 adapter
->netdev
->name
);
410 vmxnet3_tq_destroy(tq
, adapter
);
416 * starting from ring->next2fill, allocate rx buffers for the given ring
417 * of the rx queue and update the rx desc. stop after @num_to_alloc buffers
418 * are allocated or allocation fails
422 vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue
*rq
, u32 ring_idx
,
423 int num_to_alloc
, struct vmxnet3_adapter
*adapter
)
425 int num_allocated
= 0;
426 struct vmxnet3_rx_buf_info
*rbi_base
= rq
->buf_info
[ring_idx
];
427 struct vmxnet3_cmd_ring
*ring
= &rq
->rx_ring
[ring_idx
];
430 while (num_allocated
< num_to_alloc
) {
431 struct vmxnet3_rx_buf_info
*rbi
;
432 union Vmxnet3_GenericDesc
*gd
;
434 rbi
= rbi_base
+ ring
->next2fill
;
435 gd
= ring
->base
+ ring
->next2fill
;
437 if (rbi
->buf_type
== VMXNET3_RX_BUF_SKB
) {
438 if (rbi
->skb
== NULL
) {
439 rbi
->skb
= dev_alloc_skb(rbi
->len
+
441 if (unlikely(rbi
->skb
== NULL
)) {
442 rq
->stats
.rx_buf_alloc_failure
++;
445 rbi
->skb
->dev
= adapter
->netdev
;
447 skb_reserve(rbi
->skb
, NET_IP_ALIGN
);
448 rbi
->dma_addr
= pci_map_single(adapter
->pdev
,
449 rbi
->skb
->data
, rbi
->len
,
452 /* rx buffer skipped by the device */
454 val
= VMXNET3_RXD_BTYPE_HEAD
<< VMXNET3_RXD_BTYPE_SHIFT
;
456 BUG_ON(rbi
->buf_type
!= VMXNET3_RX_BUF_PAGE
||
457 rbi
->len
!= PAGE_SIZE
);
459 if (rbi
->page
== NULL
) {
460 rbi
->page
= alloc_page(GFP_ATOMIC
);
461 if (unlikely(rbi
->page
== NULL
)) {
462 rq
->stats
.rx_buf_alloc_failure
++;
465 rbi
->dma_addr
= pci_map_page(adapter
->pdev
,
466 rbi
->page
, 0, PAGE_SIZE
,
469 /* rx buffers skipped by the device */
471 val
= VMXNET3_RXD_BTYPE_BODY
<< VMXNET3_RXD_BTYPE_SHIFT
;
474 BUG_ON(rbi
->dma_addr
== 0);
475 gd
->rxd
.addr
= rbi
->dma_addr
;
476 gd
->dword
[2] = (ring
->gen
<< VMXNET3_RXD_GEN_SHIFT
) | val
|
480 vmxnet3_cmd_ring_adv_next2fill(ring
);
482 rq
->uncommitted
[ring_idx
] += num_allocated
;
484 dev_dbg(&adapter
->netdev
->dev
,
485 "alloc_rx_buf: %d allocated, next2fill %u, next2comp "
486 "%u, uncommited %u\n", num_allocated
, ring
->next2fill
,
487 ring
->next2comp
, rq
->uncommitted
[ring_idx
]);
489 /* so that the device can distinguish a full ring and an empty ring */
490 BUG_ON(num_allocated
!= 0 && ring
->next2fill
== ring
->next2comp
);
492 return num_allocated
;
497 vmxnet3_append_frag(struct sk_buff
*skb
, struct Vmxnet3_RxCompDesc
*rcd
,
498 struct vmxnet3_rx_buf_info
*rbi
)
500 struct skb_frag_struct
*frag
= skb_shinfo(skb
)->frags
+
501 skb_shinfo(skb
)->nr_frags
;
503 BUG_ON(skb_shinfo(skb
)->nr_frags
>= MAX_SKB_FRAGS
);
505 frag
->page
= rbi
->page
;
506 frag
->page_offset
= 0;
507 frag
->size
= rcd
->len
;
508 skb
->data_len
+= frag
->size
;
509 skb_shinfo(skb
)->nr_frags
++;
514 vmxnet3_map_pkt(struct sk_buff
*skb
, struct vmxnet3_tx_ctx
*ctx
,
515 struct vmxnet3_tx_queue
*tq
, struct pci_dev
*pdev
,
516 struct vmxnet3_adapter
*adapter
)
519 unsigned long buf_offset
;
521 union Vmxnet3_GenericDesc
*gdesc
;
522 struct vmxnet3_tx_buf_info
*tbi
= NULL
;
524 BUG_ON(ctx
->copy_size
> skb_headlen(skb
));
526 /* use the previous gen bit for the SOP desc */
527 dw2
= (tq
->tx_ring
.gen
^ 0x1) << VMXNET3_TXD_GEN_SHIFT
;
529 ctx
->sop_txd
= tq
->tx_ring
.base
+ tq
->tx_ring
.next2fill
;
530 gdesc
= ctx
->sop_txd
; /* both loops below can be skipped */
532 /* no need to map the buffer if headers are copied */
533 if (ctx
->copy_size
) {
534 ctx
->sop_txd
->txd
.addr
= tq
->data_ring
.basePA
+
535 tq
->tx_ring
.next2fill
*
536 sizeof(struct Vmxnet3_TxDataDesc
);
537 ctx
->sop_txd
->dword
[2] = dw2
| ctx
->copy_size
;
538 ctx
->sop_txd
->dword
[3] = 0;
540 tbi
= tq
->buf_info
+ tq
->tx_ring
.next2fill
;
541 tbi
->map_type
= VMXNET3_MAP_NONE
;
543 dev_dbg(&adapter
->netdev
->dev
,
544 "txd[%u]: 0x%Lx 0x%x 0x%x\n",
545 tq
->tx_ring
.next2fill
, ctx
->sop_txd
->txd
.addr
,
546 ctx
->sop_txd
->dword
[2], ctx
->sop_txd
->dword
[3]);
547 vmxnet3_cmd_ring_adv_next2fill(&tq
->tx_ring
);
549 /* use the right gen for non-SOP desc */
550 dw2
= tq
->tx_ring
.gen
<< VMXNET3_TXD_GEN_SHIFT
;
553 /* linear part can use multiple tx desc if it's big */
554 len
= skb_headlen(skb
) - ctx
->copy_size
;
555 buf_offset
= ctx
->copy_size
;
559 buf_size
= len
> VMXNET3_MAX_TX_BUF_SIZE
?
560 VMXNET3_MAX_TX_BUF_SIZE
: len
;
562 tbi
= tq
->buf_info
+ tq
->tx_ring
.next2fill
;
563 tbi
->map_type
= VMXNET3_MAP_SINGLE
;
564 tbi
->dma_addr
= pci_map_single(adapter
->pdev
,
565 skb
->data
+ buf_offset
, buf_size
,
568 tbi
->len
= buf_size
; /* this automatically convert 2^14 to 0 */
570 gdesc
= tq
->tx_ring
.base
+ tq
->tx_ring
.next2fill
;
571 BUG_ON(gdesc
->txd
.gen
== tq
->tx_ring
.gen
);
573 gdesc
->txd
.addr
= tbi
->dma_addr
;
574 gdesc
->dword
[2] = dw2
| buf_size
;
577 dev_dbg(&adapter
->netdev
->dev
,
578 "txd[%u]: 0x%Lx 0x%x 0x%x\n",
579 tq
->tx_ring
.next2fill
, gdesc
->txd
.addr
,
580 gdesc
->dword
[2], gdesc
->dword
[3]);
581 vmxnet3_cmd_ring_adv_next2fill(&tq
->tx_ring
);
582 dw2
= tq
->tx_ring
.gen
<< VMXNET3_TXD_GEN_SHIFT
;
585 buf_offset
+= buf_size
;
588 for (i
= 0; i
< skb_shinfo(skb
)->nr_frags
; i
++) {
589 struct skb_frag_struct
*frag
= &skb_shinfo(skb
)->frags
[i
];
591 tbi
= tq
->buf_info
+ tq
->tx_ring
.next2fill
;
592 tbi
->map_type
= VMXNET3_MAP_PAGE
;
593 tbi
->dma_addr
= pci_map_page(adapter
->pdev
, frag
->page
,
594 frag
->page_offset
, frag
->size
,
597 tbi
->len
= frag
->size
;
599 gdesc
= tq
->tx_ring
.base
+ tq
->tx_ring
.next2fill
;
600 BUG_ON(gdesc
->txd
.gen
== tq
->tx_ring
.gen
);
602 gdesc
->txd
.addr
= tbi
->dma_addr
;
603 gdesc
->dword
[2] = dw2
| frag
->size
;
606 dev_dbg(&adapter
->netdev
->dev
,
607 "txd[%u]: 0x%llu %u %u\n",
608 tq
->tx_ring
.next2fill
, gdesc
->txd
.addr
,
609 gdesc
->dword
[2], gdesc
->dword
[3]);
610 vmxnet3_cmd_ring_adv_next2fill(&tq
->tx_ring
);
611 dw2
= tq
->tx_ring
.gen
<< VMXNET3_TXD_GEN_SHIFT
;
614 ctx
->eop_txd
= gdesc
;
616 /* set the last buf_info for the pkt */
618 tbi
->sop_idx
= ctx
->sop_txd
- tq
->tx_ring
.base
;
623 * parse and copy relevant protocol headers:
624 * For a tso pkt, relevant headers are L2/3/4 including options
625 * For a pkt requesting csum offloading, they are L2/3 and may include L4
626 * if it's a TCP/UDP pkt
629 * -1: error happens during parsing
630 * 0: protocol headers parsed, but too big to be copied
631 * 1: protocol headers parsed and copied
634 * 1. related *ctx fields are updated.
635 * 2. ctx->copy_size is # of bytes copied
636 * 3. the portion copied is guaranteed to be in the linear part
640 vmxnet3_parse_and_copy_hdr(struct sk_buff
*skb
, struct vmxnet3_tx_queue
*tq
,
641 struct vmxnet3_tx_ctx
*ctx
,
642 struct vmxnet3_adapter
*adapter
)
644 struct Vmxnet3_TxDataDesc
*tdd
;
647 ctx
->eth_ip_hdr_size
= skb_transport_offset(skb
);
648 ctx
->l4_hdr_size
= ((struct tcphdr
*)
649 skb_transport_header(skb
))->doff
* 4;
650 ctx
->copy_size
= ctx
->eth_ip_hdr_size
+ ctx
->l4_hdr_size
;
652 unsigned int pull_size
;
654 if (skb
->ip_summed
== CHECKSUM_PARTIAL
) {
655 ctx
->eth_ip_hdr_size
= skb_transport_offset(skb
);
658 struct iphdr
*iph
= (struct iphdr
*)
659 skb_network_header(skb
);
660 if (iph
->protocol
== IPPROTO_TCP
) {
661 pull_size
= ctx
->eth_ip_hdr_size
+
662 sizeof(struct tcphdr
);
664 if (unlikely(!pskb_may_pull(skb
,
668 ctx
->l4_hdr_size
= ((struct tcphdr
*)
669 skb_transport_header(skb
))->doff
* 4;
670 } else if (iph
->protocol
== IPPROTO_UDP
) {
672 sizeof(struct udphdr
);
674 ctx
->l4_hdr_size
= 0;
677 /* for simplicity, don't copy L4 headers */
678 ctx
->l4_hdr_size
= 0;
680 ctx
->copy_size
= ctx
->eth_ip_hdr_size
+
683 ctx
->eth_ip_hdr_size
= 0;
684 ctx
->l4_hdr_size
= 0;
685 /* copy as much as allowed */
686 ctx
->copy_size
= min((unsigned int)VMXNET3_HDR_COPY_SIZE
690 /* make sure headers are accessible directly */
691 if (unlikely(!pskb_may_pull(skb
, ctx
->copy_size
)))
695 if (unlikely(ctx
->copy_size
> VMXNET3_HDR_COPY_SIZE
)) {
696 tq
->stats
.oversized_hdr
++;
701 tdd
= tq
->data_ring
.base
+ tq
->tx_ring
.next2fill
;
703 memcpy(tdd
->data
, skb
->data
, ctx
->copy_size
);
704 dev_dbg(&adapter
->netdev
->dev
,
705 "copy %u bytes to dataRing[%u]\n",
706 ctx
->copy_size
, tq
->tx_ring
.next2fill
);
715 vmxnet3_prepare_tso(struct sk_buff
*skb
,
716 struct vmxnet3_tx_ctx
*ctx
)
718 struct tcphdr
*tcph
= (struct tcphdr
*)skb_transport_header(skb
);
720 struct iphdr
*iph
= (struct iphdr
*)skb_network_header(skb
);
722 tcph
->check
= ~csum_tcpudp_magic(iph
->saddr
, iph
->daddr
, 0,
725 struct ipv6hdr
*iph
= (struct ipv6hdr
*)skb_network_header(skb
);
726 tcph
->check
= ~csum_ipv6_magic(&iph
->saddr
, &iph
->daddr
, 0,
733 * Transmits a pkt thru a given tq
735 * NETDEV_TX_OK: descriptors are setup successfully
736 * NETDEV_TX_OK: error occured, the pkt is dropped
737 * NETDEV_TX_BUSY: tx ring is full, queue is stopped
740 * 1. tx ring may be changed
741 * 2. tq stats may be updated accordingly
742 * 3. shared->txNumDeferred may be updated
746 vmxnet3_tq_xmit(struct sk_buff
*skb
, struct vmxnet3_tx_queue
*tq
,
747 struct vmxnet3_adapter
*adapter
, struct net_device
*netdev
)
752 struct vmxnet3_tx_ctx ctx
;
753 union Vmxnet3_GenericDesc
*gdesc
;
755 /* conservatively estimate # of descriptors to use */
756 count
= VMXNET3_TXD_NEEDED(skb_headlen(skb
)) +
757 skb_shinfo(skb
)->nr_frags
+ 1;
759 ctx
.ipv4
= (skb
->protocol
== __constant_ntohs(ETH_P_IP
));
761 ctx
.mss
= skb_shinfo(skb
)->gso_size
;
763 if (skb_header_cloned(skb
)) {
764 if (unlikely(pskb_expand_head(skb
, 0, 0,
766 tq
->stats
.drop_tso
++;
769 tq
->stats
.copy_skb_header
++;
771 vmxnet3_prepare_tso(skb
, &ctx
);
773 if (unlikely(count
> VMXNET3_MAX_TXD_PER_PKT
)) {
775 /* non-tso pkts must not use more than
776 * VMXNET3_MAX_TXD_PER_PKT entries
778 if (skb_linearize(skb
) != 0) {
779 tq
->stats
.drop_too_many_frags
++;
782 tq
->stats
.linearized
++;
784 /* recalculate the # of descriptors to use */
785 count
= VMXNET3_TXD_NEEDED(skb_headlen(skb
)) + 1;
789 ret
= vmxnet3_parse_and_copy_hdr(skb
, tq
, &ctx
, adapter
);
791 BUG_ON(ret
<= 0 && ctx
.copy_size
!= 0);
792 /* hdrs parsed, check against other limits */
794 if (unlikely(ctx
.eth_ip_hdr_size
+ ctx
.l4_hdr_size
>
795 VMXNET3_MAX_TX_BUF_SIZE
)) {
799 if (skb
->ip_summed
== CHECKSUM_PARTIAL
) {
800 if (unlikely(ctx
.eth_ip_hdr_size
+
802 VMXNET3_MAX_CSUM_OFFSET
)) {
808 tq
->stats
.drop_hdr_inspect_err
++;
812 spin_lock_irqsave(&tq
->tx_lock
, flags
);
814 if (count
> vmxnet3_cmd_ring_desc_avail(&tq
->tx_ring
)) {
815 tq
->stats
.tx_ring_full
++;
816 dev_dbg(&adapter
->netdev
->dev
,
817 "tx queue stopped on %s, next2comp %u"
818 " next2fill %u\n", adapter
->netdev
->name
,
819 tq
->tx_ring
.next2comp
, tq
->tx_ring
.next2fill
);
821 vmxnet3_tq_stop(tq
, adapter
);
822 spin_unlock_irqrestore(&tq
->tx_lock
, flags
);
823 return NETDEV_TX_BUSY
;
826 /* fill tx descs related to addr & len */
827 vmxnet3_map_pkt(skb
, &ctx
, tq
, adapter
->pdev
, adapter
);
829 /* setup the EOP desc */
830 ctx
.eop_txd
->dword
[3] = VMXNET3_TXD_CQ
| VMXNET3_TXD_EOP
;
832 /* setup the SOP desc */
835 gdesc
->txd
.hlen
= ctx
.eth_ip_hdr_size
+ ctx
.l4_hdr_size
;
836 gdesc
->txd
.om
= VMXNET3_OM_TSO
;
837 gdesc
->txd
.msscof
= ctx
.mss
;
838 tq
->shared
->txNumDeferred
+= (skb
->len
- gdesc
->txd
.hlen
+
839 ctx
.mss
- 1) / ctx
.mss
;
841 if (skb
->ip_summed
== CHECKSUM_PARTIAL
) {
842 gdesc
->txd
.hlen
= ctx
.eth_ip_hdr_size
;
843 gdesc
->txd
.om
= VMXNET3_OM_CSUM
;
844 gdesc
->txd
.msscof
= ctx
.eth_ip_hdr_size
+
848 gdesc
->txd
.msscof
= 0;
850 tq
->shared
->txNumDeferred
++;
853 if (vlan_tx_tag_present(skb
)) {
855 gdesc
->txd
.tci
= vlan_tx_tag_get(skb
);
860 /* finally flips the GEN bit of the SOP desc */
861 gdesc
->dword
[2] ^= VMXNET3_TXD_GEN
;
862 dev_dbg(&adapter
->netdev
->dev
,
863 "txd[%u]: SOP 0x%Lx 0x%x 0x%x\n",
864 (u32
)((union Vmxnet3_GenericDesc
*)ctx
.sop_txd
-
865 tq
->tx_ring
.base
), gdesc
->txd
.addr
, gdesc
->dword
[2],
868 spin_unlock_irqrestore(&tq
->tx_lock
, flags
);
870 if (tq
->shared
->txNumDeferred
>= tq
->shared
->txThreshold
) {
871 tq
->shared
->txNumDeferred
= 0;
872 VMXNET3_WRITE_BAR0_REG(adapter
, VMXNET3_REG_TXPROD
,
873 tq
->tx_ring
.next2fill
);
875 netdev
->trans_start
= jiffies
;
880 tq
->stats
.drop_oversized_hdr
++;
882 tq
->stats
.drop_total
++;
889 vmxnet3_xmit_frame(struct sk_buff
*skb
, struct net_device
*netdev
)
891 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
892 struct vmxnet3_tx_queue
*tq
= &adapter
->tx_queue
;
894 return vmxnet3_tq_xmit(skb
, tq
, adapter
, netdev
);
899 vmxnet3_rx_csum(struct vmxnet3_adapter
*adapter
,
901 union Vmxnet3_GenericDesc
*gdesc
)
903 if (!gdesc
->rcd
.cnc
&& adapter
->rxcsum
) {
904 /* typical case: TCP/UDP over IP and both csums are correct */
905 if ((gdesc
->dword
[3] & VMXNET3_RCD_CSUM_OK
) ==
906 VMXNET3_RCD_CSUM_OK
) {
907 skb
->ip_summed
= CHECKSUM_UNNECESSARY
;
908 BUG_ON(!(gdesc
->rcd
.tcp
|| gdesc
->rcd
.udp
));
909 BUG_ON(!(gdesc
->rcd
.v4
|| gdesc
->rcd
.v6
));
910 BUG_ON(gdesc
->rcd
.frg
);
912 if (gdesc
->rcd
.csum
) {
913 skb
->csum
= htons(gdesc
->rcd
.csum
);
914 skb
->ip_summed
= CHECKSUM_PARTIAL
;
916 skb
->ip_summed
= CHECKSUM_NONE
;
920 skb
->ip_summed
= CHECKSUM_NONE
;
926 vmxnet3_rx_error(struct vmxnet3_rx_queue
*rq
, struct Vmxnet3_RxCompDesc
*rcd
,
927 struct vmxnet3_rx_ctx
*ctx
, struct vmxnet3_adapter
*adapter
)
929 rq
->stats
.drop_err
++;
931 rq
->stats
.drop_fcs
++;
933 rq
->stats
.drop_total
++;
936 * We do not unmap and chain the rx buffer to the skb.
937 * We basically pretend this buffer is not used and will be recycled
938 * by vmxnet3_rq_alloc_rx_buf()
942 * ctx->skb may be NULL if this is the first and the only one
946 dev_kfree_skb_irq(ctx
->skb
);
953 vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue
*rq
,
954 struct vmxnet3_adapter
*adapter
, int quota
)
956 static u32 rxprod_reg
[2] = {VMXNET3_REG_RXPROD
, VMXNET3_REG_RXPROD2
};
958 struct Vmxnet3_RxCompDesc
*rcd
;
959 struct vmxnet3_rx_ctx
*ctx
= &rq
->rx_ctx
;
961 rcd
= &rq
->comp_ring
.base
[rq
->comp_ring
.next2proc
].rcd
;
962 while (rcd
->gen
== rq
->comp_ring
.gen
) {
963 struct vmxnet3_rx_buf_info
*rbi
;
966 struct Vmxnet3_RxDesc
*rxd
;
969 if (num_rxd
>= quota
) {
970 /* we may stop even before we see the EOP desc of
978 ring_idx
= rcd
->rqID
== rq
->qid
? 0 : 1;
980 rxd
= &rq
->rx_ring
[ring_idx
].base
[idx
].rxd
;
981 rbi
= rq
->buf_info
[ring_idx
] + idx
;
983 BUG_ON(rxd
->addr
!= rbi
->dma_addr
|| rxd
->len
!= rbi
->len
);
985 if (unlikely(rcd
->eop
&& rcd
->err
)) {
986 vmxnet3_rx_error(rq
, rcd
, ctx
, adapter
);
990 if (rcd
->sop
) { /* first buf of the pkt */
991 BUG_ON(rxd
->btype
!= VMXNET3_RXD_BTYPE_HEAD
||
992 rcd
->rqID
!= rq
->qid
);
994 BUG_ON(rbi
->buf_type
!= VMXNET3_RX_BUF_SKB
);
995 BUG_ON(ctx
->skb
!= NULL
|| rbi
->skb
== NULL
);
997 if (unlikely(rcd
->len
== 0)) {
998 /* Pretend the rx buffer is skipped. */
999 BUG_ON(!(rcd
->sop
&& rcd
->eop
));
1000 dev_dbg(&adapter
->netdev
->dev
,
1001 "rxRing[%u][%u] 0 length\n",
1006 ctx
->skb
= rbi
->skb
;
1009 pci_unmap_single(adapter
->pdev
, rbi
->dma_addr
, rbi
->len
,
1010 PCI_DMA_FROMDEVICE
);
1012 skb_put(ctx
->skb
, rcd
->len
);
1014 BUG_ON(ctx
->skb
== NULL
);
1015 /* non SOP buffer must be type 1 in most cases */
1016 if (rbi
->buf_type
== VMXNET3_RX_BUF_PAGE
) {
1017 BUG_ON(rxd
->btype
!= VMXNET3_RXD_BTYPE_BODY
);
1020 pci_unmap_page(adapter
->pdev
,
1021 rbi
->dma_addr
, rbi
->len
,
1022 PCI_DMA_FROMDEVICE
);
1024 vmxnet3_append_frag(ctx
->skb
, rcd
, rbi
);
1029 * The only time a non-SOP buffer is type 0 is
1030 * when it's EOP and error flag is raised, which
1031 * has already been handled.
1039 skb
->len
+= skb
->data_len
;
1040 skb
->truesize
+= skb
->data_len
;
1042 vmxnet3_rx_csum(adapter
, skb
,
1043 (union Vmxnet3_GenericDesc
*)rcd
);
1044 skb
->protocol
= eth_type_trans(skb
, adapter
->netdev
);
1046 if (unlikely(adapter
->vlan_grp
&& rcd
->ts
)) {
1047 vlan_hwaccel_receive_skb(skb
,
1048 adapter
->vlan_grp
, rcd
->tci
);
1050 netif_receive_skb(skb
);
1053 adapter
->netdev
->last_rx
= jiffies
;
1058 /* device may skip some rx descs */
1059 rq
->rx_ring
[ring_idx
].next2comp
= idx
;
1060 VMXNET3_INC_RING_IDX_ONLY(rq
->rx_ring
[ring_idx
].next2comp
,
1061 rq
->rx_ring
[ring_idx
].size
);
1063 /* refill rx buffers frequently to avoid starving the h/w */
1064 num_to_alloc
= vmxnet3_cmd_ring_desc_avail(rq
->rx_ring
+
1066 if (unlikely(num_to_alloc
> VMXNET3_RX_ALLOC_THRESHOLD(rq
,
1067 ring_idx
, adapter
))) {
1068 vmxnet3_rq_alloc_rx_buf(rq
, ring_idx
, num_to_alloc
,
1071 /* if needed, update the register */
1072 if (unlikely(rq
->shared
->updateRxProd
)) {
1073 VMXNET3_WRITE_BAR0_REG(adapter
,
1074 rxprod_reg
[ring_idx
] + rq
->qid
* 8,
1075 rq
->rx_ring
[ring_idx
].next2fill
);
1076 rq
->uncommitted
[ring_idx
] = 0;
1080 vmxnet3_comp_ring_adv_next2proc(&rq
->comp_ring
);
1081 rcd
= &rq
->comp_ring
.base
[rq
->comp_ring
.next2proc
].rcd
;
1089 vmxnet3_rq_cleanup(struct vmxnet3_rx_queue
*rq
,
1090 struct vmxnet3_adapter
*adapter
)
1093 struct Vmxnet3_RxDesc
*rxd
;
1095 for (ring_idx
= 0; ring_idx
< 2; ring_idx
++) {
1096 for (i
= 0; i
< rq
->rx_ring
[ring_idx
].size
; i
++) {
1097 rxd
= &rq
->rx_ring
[ring_idx
].base
[i
].rxd
;
1099 if (rxd
->btype
== VMXNET3_RXD_BTYPE_HEAD
&&
1100 rq
->buf_info
[ring_idx
][i
].skb
) {
1101 pci_unmap_single(adapter
->pdev
, rxd
->addr
,
1102 rxd
->len
, PCI_DMA_FROMDEVICE
);
1103 dev_kfree_skb(rq
->buf_info
[ring_idx
][i
].skb
);
1104 rq
->buf_info
[ring_idx
][i
].skb
= NULL
;
1105 } else if (rxd
->btype
== VMXNET3_RXD_BTYPE_BODY
&&
1106 rq
->buf_info
[ring_idx
][i
].page
) {
1107 pci_unmap_page(adapter
->pdev
, rxd
->addr
,
1108 rxd
->len
, PCI_DMA_FROMDEVICE
);
1109 put_page(rq
->buf_info
[ring_idx
][i
].page
);
1110 rq
->buf_info
[ring_idx
][i
].page
= NULL
;
1114 rq
->rx_ring
[ring_idx
].gen
= VMXNET3_INIT_GEN
;
1115 rq
->rx_ring
[ring_idx
].next2fill
=
1116 rq
->rx_ring
[ring_idx
].next2comp
= 0;
1117 rq
->uncommitted
[ring_idx
] = 0;
1120 rq
->comp_ring
.gen
= VMXNET3_INIT_GEN
;
1121 rq
->comp_ring
.next2proc
= 0;
1125 void vmxnet3_rq_destroy(struct vmxnet3_rx_queue
*rq
,
1126 struct vmxnet3_adapter
*adapter
)
1131 /* all rx buffers must have already been freed */
1132 for (i
= 0; i
< 2; i
++) {
1133 if (rq
->buf_info
[i
]) {
1134 for (j
= 0; j
< rq
->rx_ring
[i
].size
; j
++)
1135 BUG_ON(rq
->buf_info
[i
][j
].page
!= NULL
);
1140 kfree(rq
->buf_info
[0]);
1142 for (i
= 0; i
< 2; i
++) {
1143 if (rq
->rx_ring
[i
].base
) {
1144 pci_free_consistent(adapter
->pdev
, rq
->rx_ring
[i
].size
1145 * sizeof(struct Vmxnet3_RxDesc
),
1146 rq
->rx_ring
[i
].base
,
1147 rq
->rx_ring
[i
].basePA
);
1148 rq
->rx_ring
[i
].base
= NULL
;
1150 rq
->buf_info
[i
] = NULL
;
1153 if (rq
->comp_ring
.base
) {
1154 pci_free_consistent(adapter
->pdev
, rq
->comp_ring
.size
*
1155 sizeof(struct Vmxnet3_RxCompDesc
),
1156 rq
->comp_ring
.base
, rq
->comp_ring
.basePA
);
1157 rq
->comp_ring
.base
= NULL
;
1163 vmxnet3_rq_init(struct vmxnet3_rx_queue
*rq
,
1164 struct vmxnet3_adapter
*adapter
)
1168 /* initialize buf_info */
1169 for (i
= 0; i
< rq
->rx_ring
[0].size
; i
++) {
1171 /* 1st buf for a pkt is skbuff */
1172 if (i
% adapter
->rx_buf_per_pkt
== 0) {
1173 rq
->buf_info
[0][i
].buf_type
= VMXNET3_RX_BUF_SKB
;
1174 rq
->buf_info
[0][i
].len
= adapter
->skb_buf_size
;
1175 } else { /* subsequent bufs for a pkt is frag */
1176 rq
->buf_info
[0][i
].buf_type
= VMXNET3_RX_BUF_PAGE
;
1177 rq
->buf_info
[0][i
].len
= PAGE_SIZE
;
1180 for (i
= 0; i
< rq
->rx_ring
[1].size
; i
++) {
1181 rq
->buf_info
[1][i
].buf_type
= VMXNET3_RX_BUF_PAGE
;
1182 rq
->buf_info
[1][i
].len
= PAGE_SIZE
;
1185 /* reset internal state and allocate buffers for both rings */
1186 for (i
= 0; i
< 2; i
++) {
1187 rq
->rx_ring
[i
].next2fill
= rq
->rx_ring
[i
].next2comp
= 0;
1188 rq
->uncommitted
[i
] = 0;
1190 memset(rq
->rx_ring
[i
].base
, 0, rq
->rx_ring
[i
].size
*
1191 sizeof(struct Vmxnet3_RxDesc
));
1192 rq
->rx_ring
[i
].gen
= VMXNET3_INIT_GEN
;
1194 if (vmxnet3_rq_alloc_rx_buf(rq
, 0, rq
->rx_ring
[0].size
- 1,
1196 /* at least has 1 rx buffer for the 1st ring */
1199 vmxnet3_rq_alloc_rx_buf(rq
, 1, rq
->rx_ring
[1].size
- 1, adapter
);
1201 /* reset the comp ring */
1202 rq
->comp_ring
.next2proc
= 0;
1203 memset(rq
->comp_ring
.base
, 0, rq
->comp_ring
.size
*
1204 sizeof(struct Vmxnet3_RxCompDesc
));
1205 rq
->comp_ring
.gen
= VMXNET3_INIT_GEN
;
1208 rq
->rx_ctx
.skb
= NULL
;
1210 /* stats are not reset */
1216 vmxnet3_rq_create(struct vmxnet3_rx_queue
*rq
, struct vmxnet3_adapter
*adapter
)
1220 struct vmxnet3_rx_buf_info
*bi
;
1222 for (i
= 0; i
< 2; i
++) {
1224 sz
= rq
->rx_ring
[i
].size
* sizeof(struct Vmxnet3_RxDesc
);
1225 rq
->rx_ring
[i
].base
= pci_alloc_consistent(adapter
->pdev
, sz
,
1226 &rq
->rx_ring
[i
].basePA
);
1227 if (!rq
->rx_ring
[i
].base
) {
1228 printk(KERN_ERR
"%s: failed to allocate rx ring %d\n",
1229 adapter
->netdev
->name
, i
);
1234 sz
= rq
->comp_ring
.size
* sizeof(struct Vmxnet3_RxCompDesc
);
1235 rq
->comp_ring
.base
= pci_alloc_consistent(adapter
->pdev
, sz
,
1236 &rq
->comp_ring
.basePA
);
1237 if (!rq
->comp_ring
.base
) {
1238 printk(KERN_ERR
"%s: failed to allocate rx comp ring\n",
1239 adapter
->netdev
->name
);
1243 sz
= sizeof(struct vmxnet3_rx_buf_info
) * (rq
->rx_ring
[0].size
+
1244 rq
->rx_ring
[1].size
);
1245 bi
= kmalloc(sz
, GFP_KERNEL
);
1247 printk(KERN_ERR
"%s: failed to allocate rx bufinfo\n",
1248 adapter
->netdev
->name
);
1252 rq
->buf_info
[0] = bi
;
1253 rq
->buf_info
[1] = bi
+ rq
->rx_ring
[0].size
;
1258 vmxnet3_rq_destroy(rq
, adapter
);
1264 vmxnet3_do_poll(struct vmxnet3_adapter
*adapter
, int budget
)
1266 if (unlikely(adapter
->shared
->ecr
))
1267 vmxnet3_process_events(adapter
);
1269 vmxnet3_tq_tx_complete(&adapter
->tx_queue
, adapter
);
1270 return vmxnet3_rq_rx_complete(&adapter
->rx_queue
, adapter
, budget
);
1275 vmxnet3_poll(struct napi_struct
*napi
, int budget
)
1277 struct vmxnet3_adapter
*adapter
= container_of(napi
,
1278 struct vmxnet3_adapter
, napi
);
1281 rxd_done
= vmxnet3_do_poll(adapter
, budget
);
1283 if (rxd_done
< budget
) {
1284 napi_complete(napi
);
1285 vmxnet3_enable_intr(adapter
, 0);
1291 /* Interrupt handler for vmxnet3 */
1293 vmxnet3_intr(int irq
, void *dev_id
)
1295 struct net_device
*dev
= dev_id
;
1296 struct vmxnet3_adapter
*adapter
= netdev_priv(dev
);
1298 if (unlikely(adapter
->intr
.type
== VMXNET3_IT_INTX
)) {
1299 u32 icr
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_ICR
);
1300 if (unlikely(icr
== 0))
1306 /* disable intr if needed */
1307 if (adapter
->intr
.mask_mode
== VMXNET3_IMM_ACTIVE
)
1308 vmxnet3_disable_intr(adapter
, 0);
1310 napi_schedule(&adapter
->napi
);
1315 #ifdef CONFIG_NET_POLL_CONTROLLER
1318 /* netpoll callback. */
1320 vmxnet3_netpoll(struct net_device
*netdev
)
1322 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
1325 #ifdef CONFIG_PCI_MSI
1326 if (adapter
->intr
.type
== VMXNET3_IT_MSIX
)
1327 irq
= adapter
->intr
.msix_entries
[0].vector
;
1330 irq
= adapter
->pdev
->irq
;
1333 vmxnet3_intr(irq
, netdev
);
1339 vmxnet3_request_irqs(struct vmxnet3_adapter
*adapter
)
1343 #ifdef CONFIG_PCI_MSI
1344 if (adapter
->intr
.type
== VMXNET3_IT_MSIX
) {
1345 /* we only use 1 MSI-X vector */
1346 err
= request_irq(adapter
->intr
.msix_entries
[0].vector
,
1347 vmxnet3_intr
, 0, adapter
->netdev
->name
,
1351 if (adapter
->intr
.type
== VMXNET3_IT_MSI
) {
1352 err
= request_irq(adapter
->pdev
->irq
, vmxnet3_intr
, 0,
1353 adapter
->netdev
->name
, adapter
->netdev
);
1355 err
= request_irq(adapter
->pdev
->irq
, vmxnet3_intr
,
1356 IRQF_SHARED
, adapter
->netdev
->name
,
1361 printk(KERN_ERR
"Failed to request irq %s (intr type:%d), error"
1362 ":%d\n", adapter
->netdev
->name
, adapter
->intr
.type
, err
);
1367 /* init our intr settings */
1368 for (i
= 0; i
< adapter
->intr
.num_intrs
; i
++)
1369 adapter
->intr
.mod_levels
[i
] = UPT1_IML_ADAPTIVE
;
1371 /* next setup intr index for all intr sources */
1372 adapter
->tx_queue
.comp_ring
.intr_idx
= 0;
1373 adapter
->rx_queue
.comp_ring
.intr_idx
= 0;
1374 adapter
->intr
.event_intr_idx
= 0;
1376 printk(KERN_INFO
"%s: intr type %u, mode %u, %u vectors "
1377 "allocated\n", adapter
->netdev
->name
, adapter
->intr
.type
,
1378 adapter
->intr
.mask_mode
, adapter
->intr
.num_intrs
);
1386 vmxnet3_free_irqs(struct vmxnet3_adapter
*adapter
)
1388 BUG_ON(adapter
->intr
.type
== VMXNET3_IT_AUTO
||
1389 adapter
->intr
.num_intrs
<= 0);
1391 switch (adapter
->intr
.type
) {
1392 #ifdef CONFIG_PCI_MSI
1393 case VMXNET3_IT_MSIX
:
1397 for (i
= 0; i
< adapter
->intr
.num_intrs
; i
++)
1398 free_irq(adapter
->intr
.msix_entries
[i
].vector
,
1403 case VMXNET3_IT_MSI
:
1404 free_irq(adapter
->pdev
->irq
, adapter
->netdev
);
1406 case VMXNET3_IT_INTX
:
1407 free_irq(adapter
->pdev
->irq
, adapter
->netdev
);
1416 vmxnet3_vlan_rx_register(struct net_device
*netdev
, struct vlan_group
*grp
)
1418 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
1419 struct Vmxnet3_DriverShared
*shared
= adapter
->shared
;
1420 u32
*vfTable
= adapter
->shared
->devRead
.rxFilterConf
.vfTable
;
1423 /* add vlan rx stripping. */
1424 if (adapter
->netdev
->features
& NETIF_F_HW_VLAN_RX
) {
1426 struct Vmxnet3_DSDevRead
*devRead
= &shared
->devRead
;
1427 adapter
->vlan_grp
= grp
;
1429 /* update FEATURES to device */
1430 devRead
->misc
.uptFeatures
|= UPT1_F_RXVLAN
;
1431 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1432 VMXNET3_CMD_UPDATE_FEATURE
);
1434 * Clear entire vfTable; then enable untagged pkts.
1435 * Note: setting one entry in vfTable to non-zero turns
1436 * on VLAN rx filtering.
1438 for (i
= 0; i
< VMXNET3_VFT_SIZE
; i
++)
1441 VMXNET3_SET_VFTABLE_ENTRY(vfTable
, 0);
1442 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1443 VMXNET3_CMD_UPDATE_VLAN_FILTERS
);
1445 printk(KERN_ERR
"%s: vlan_rx_register when device has "
1446 "no NETIF_F_HW_VLAN_RX\n", netdev
->name
);
1449 /* remove vlan rx stripping. */
1450 struct Vmxnet3_DSDevRead
*devRead
= &shared
->devRead
;
1451 adapter
->vlan_grp
= NULL
;
1453 if (devRead
->misc
.uptFeatures
& UPT1_F_RXVLAN
) {
1456 for (i
= 0; i
< VMXNET3_VFT_SIZE
; i
++) {
1457 /* clear entire vfTable; this also disables
1462 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1463 VMXNET3_CMD_UPDATE_VLAN_FILTERS
);
1465 /* update FEATURES to device */
1466 devRead
->misc
.uptFeatures
&= ~UPT1_F_RXVLAN
;
1467 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1468 VMXNET3_CMD_UPDATE_FEATURE
);
1475 vmxnet3_restore_vlan(struct vmxnet3_adapter
*adapter
)
1477 if (adapter
->vlan_grp
) {
1479 u32
*vfTable
= adapter
->shared
->devRead
.rxFilterConf
.vfTable
;
1480 bool activeVlan
= false;
1482 for (vid
= 0; vid
< VLAN_GROUP_ARRAY_LEN
; vid
++) {
1483 if (vlan_group_get_device(adapter
->vlan_grp
, vid
)) {
1484 VMXNET3_SET_VFTABLE_ENTRY(vfTable
, vid
);
1489 /* continue to allow untagged pkts */
1490 VMXNET3_SET_VFTABLE_ENTRY(vfTable
, 0);
1497 vmxnet3_vlan_rx_add_vid(struct net_device
*netdev
, u16 vid
)
1499 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
1500 u32
*vfTable
= adapter
->shared
->devRead
.rxFilterConf
.vfTable
;
1502 VMXNET3_SET_VFTABLE_ENTRY(vfTable
, vid
);
1503 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1504 VMXNET3_CMD_UPDATE_VLAN_FILTERS
);
1509 vmxnet3_vlan_rx_kill_vid(struct net_device
*netdev
, u16 vid
)
1511 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
1512 u32
*vfTable
= adapter
->shared
->devRead
.rxFilterConf
.vfTable
;
1514 VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable
, vid
);
1515 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1516 VMXNET3_CMD_UPDATE_VLAN_FILTERS
);
1521 vmxnet3_copy_mc(struct net_device
*netdev
)
1524 u32 sz
= netdev
->mc_count
* ETH_ALEN
;
1526 /* struct Vmxnet3_RxFilterConf.mfTableLen is u16. */
1528 /* We may be called with BH disabled */
1529 buf
= kmalloc(sz
, GFP_ATOMIC
);
1532 struct dev_mc_list
*mc
= netdev
->mc_list
;
1534 for (i
= 0; i
< netdev
->mc_count
; i
++) {
1536 memcpy(buf
+ i
* ETH_ALEN
, mc
->dmi_addr
,
1547 vmxnet3_set_mc(struct net_device
*netdev
)
1549 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
1550 struct Vmxnet3_RxFilterConf
*rxConf
=
1551 &adapter
->shared
->devRead
.rxFilterConf
;
1552 u8
*new_table
= NULL
;
1553 u32 new_mode
= VMXNET3_RXM_UCAST
;
1555 if (netdev
->flags
& IFF_PROMISC
)
1556 new_mode
|= VMXNET3_RXM_PROMISC
;
1558 if (netdev
->flags
& IFF_BROADCAST
)
1559 new_mode
|= VMXNET3_RXM_BCAST
;
1561 if (netdev
->flags
& IFF_ALLMULTI
)
1562 new_mode
|= VMXNET3_RXM_ALL_MULTI
;
1564 if (netdev
->mc_count
> 0) {
1565 new_table
= vmxnet3_copy_mc(netdev
);
1567 new_mode
|= VMXNET3_RXM_MCAST
;
1568 rxConf
->mfTableLen
= netdev
->mc_count
*
1570 rxConf
->mfTablePA
= virt_to_phys(new_table
);
1572 printk(KERN_INFO
"%s: failed to copy mcast list"
1573 ", setting ALL_MULTI\n", netdev
->name
);
1574 new_mode
|= VMXNET3_RXM_ALL_MULTI
;
1579 if (!(new_mode
& VMXNET3_RXM_MCAST
)) {
1580 rxConf
->mfTableLen
= 0;
1581 rxConf
->mfTablePA
= 0;
1584 if (new_mode
!= rxConf
->rxMode
) {
1585 rxConf
->rxMode
= new_mode
;
1586 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1587 VMXNET3_CMD_UPDATE_RX_MODE
);
1590 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1591 VMXNET3_CMD_UPDATE_MAC_FILTERS
);
1598 * Set up driver_shared based on settings in adapter.
1602 vmxnet3_setup_driver_shared(struct vmxnet3_adapter
*adapter
)
1604 struct Vmxnet3_DriverShared
*shared
= adapter
->shared
;
1605 struct Vmxnet3_DSDevRead
*devRead
= &shared
->devRead
;
1606 struct Vmxnet3_TxQueueConf
*tqc
;
1607 struct Vmxnet3_RxQueueConf
*rqc
;
1610 memset(shared
, 0, sizeof(*shared
));
1612 /* driver settings */
1613 shared
->magic
= VMXNET3_REV1_MAGIC
;
1614 devRead
->misc
.driverInfo
.version
= VMXNET3_DRIVER_VERSION_NUM
;
1615 devRead
->misc
.driverInfo
.gos
.gosBits
= (sizeof(void *) == 4 ?
1616 VMXNET3_GOS_BITS_32
: VMXNET3_GOS_BITS_64
);
1617 devRead
->misc
.driverInfo
.gos
.gosType
= VMXNET3_GOS_TYPE_LINUX
;
1618 devRead
->misc
.driverInfo
.vmxnet3RevSpt
= 1;
1619 devRead
->misc
.driverInfo
.uptVerSpt
= 1;
1621 devRead
->misc
.ddPA
= virt_to_phys(adapter
);
1622 devRead
->misc
.ddLen
= sizeof(struct vmxnet3_adapter
);
1624 /* set up feature flags */
1625 if (adapter
->rxcsum
)
1626 devRead
->misc
.uptFeatures
|= UPT1_F_RXCSUM
;
1629 devRead
->misc
.uptFeatures
|= UPT1_F_LRO
;
1630 devRead
->misc
.maxNumRxSG
= 1 + MAX_SKB_FRAGS
;
1632 if ((adapter
->netdev
->features
& NETIF_F_HW_VLAN_RX
)
1633 && adapter
->vlan_grp
) {
1634 devRead
->misc
.uptFeatures
|= UPT1_F_RXVLAN
;
1637 devRead
->misc
.mtu
= adapter
->netdev
->mtu
;
1638 devRead
->misc
.queueDescPA
= adapter
->queue_desc_pa
;
1639 devRead
->misc
.queueDescLen
= sizeof(struct Vmxnet3_TxQueueDesc
) +
1640 sizeof(struct Vmxnet3_RxQueueDesc
);
1642 /* tx queue settings */
1643 BUG_ON(adapter
->tx_queue
.tx_ring
.base
== NULL
);
1645 devRead
->misc
.numTxQueues
= 1;
1646 tqc
= &adapter
->tqd_start
->conf
;
1647 tqc
->txRingBasePA
= adapter
->tx_queue
.tx_ring
.basePA
;
1648 tqc
->dataRingBasePA
= adapter
->tx_queue
.data_ring
.basePA
;
1649 tqc
->compRingBasePA
= adapter
->tx_queue
.comp_ring
.basePA
;
1650 tqc
->ddPA
= virt_to_phys(adapter
->tx_queue
.buf_info
);
1651 tqc
->txRingSize
= adapter
->tx_queue
.tx_ring
.size
;
1652 tqc
->dataRingSize
= adapter
->tx_queue
.data_ring
.size
;
1653 tqc
->compRingSize
= adapter
->tx_queue
.comp_ring
.size
;
1654 tqc
->ddLen
= sizeof(struct vmxnet3_tx_buf_info
) *
1656 tqc
->intrIdx
= adapter
->tx_queue
.comp_ring
.intr_idx
;
1658 /* rx queue settings */
1659 devRead
->misc
.numRxQueues
= 1;
1660 rqc
= &adapter
->rqd_start
->conf
;
1661 rqc
->rxRingBasePA
[0] = adapter
->rx_queue
.rx_ring
[0].basePA
;
1662 rqc
->rxRingBasePA
[1] = adapter
->rx_queue
.rx_ring
[1].basePA
;
1663 rqc
->compRingBasePA
= adapter
->rx_queue
.comp_ring
.basePA
;
1664 rqc
->ddPA
= virt_to_phys(adapter
->rx_queue
.buf_info
);
1665 rqc
->rxRingSize
[0] = adapter
->rx_queue
.rx_ring
[0].size
;
1666 rqc
->rxRingSize
[1] = adapter
->rx_queue
.rx_ring
[1].size
;
1667 rqc
->compRingSize
= adapter
->rx_queue
.comp_ring
.size
;
1668 rqc
->ddLen
= sizeof(struct vmxnet3_rx_buf_info
) *
1669 (rqc
->rxRingSize
[0] + rqc
->rxRingSize
[1]);
1670 rqc
->intrIdx
= adapter
->rx_queue
.comp_ring
.intr_idx
;
1673 devRead
->intrConf
.autoMask
= adapter
->intr
.mask_mode
==
1675 devRead
->intrConf
.numIntrs
= adapter
->intr
.num_intrs
;
1676 for (i
= 0; i
< adapter
->intr
.num_intrs
; i
++)
1677 devRead
->intrConf
.modLevels
[i
] = adapter
->intr
.mod_levels
[i
];
1679 devRead
->intrConf
.eventIntrIdx
= adapter
->intr
.event_intr_idx
;
1681 /* rx filter settings */
1682 devRead
->rxFilterConf
.rxMode
= 0;
1683 vmxnet3_restore_vlan(adapter
);
1684 /* the rest are already zeroed */
1689 vmxnet3_activate_dev(struct vmxnet3_adapter
*adapter
)
1694 dev_dbg(&adapter
->netdev
->dev
,
1695 "%s: skb_buf_size %d, rx_buf_per_pkt %d, ring sizes"
1696 " %u %u %u\n", adapter
->netdev
->name
, adapter
->skb_buf_size
,
1697 adapter
->rx_buf_per_pkt
, adapter
->tx_queue
.tx_ring
.size
,
1698 adapter
->rx_queue
.rx_ring
[0].size
,
1699 adapter
->rx_queue
.rx_ring
[1].size
);
1701 vmxnet3_tq_init(&adapter
->tx_queue
, adapter
);
1702 err
= vmxnet3_rq_init(&adapter
->rx_queue
, adapter
);
1704 printk(KERN_ERR
"Failed to init rx queue for %s: error %d\n",
1705 adapter
->netdev
->name
, err
);
1709 err
= vmxnet3_request_irqs(adapter
);
1711 printk(KERN_ERR
"Failed to setup irq for %s: error %d\n",
1712 adapter
->netdev
->name
, err
);
1716 vmxnet3_setup_driver_shared(adapter
);
1718 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_DSAL
,
1719 VMXNET3_GET_ADDR_LO(adapter
->shared_pa
));
1720 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_DSAH
,
1721 VMXNET3_GET_ADDR_HI(adapter
->shared_pa
));
1723 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1724 VMXNET3_CMD_ACTIVATE_DEV
);
1725 ret
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_CMD
);
1728 printk(KERN_ERR
"Failed to activate dev %s: error %u\n",
1729 adapter
->netdev
->name
, ret
);
1733 VMXNET3_WRITE_BAR0_REG(adapter
, VMXNET3_REG_RXPROD
,
1734 adapter
->rx_queue
.rx_ring
[0].next2fill
);
1735 VMXNET3_WRITE_BAR0_REG(adapter
, VMXNET3_REG_RXPROD2
,
1736 adapter
->rx_queue
.rx_ring
[1].next2fill
);
1738 /* Apply the rx filter settins last. */
1739 vmxnet3_set_mc(adapter
->netdev
);
1742 * Check link state when first activating device. It will start the
1743 * tx queue if the link is up.
1745 vmxnet3_check_link(adapter
);
1747 napi_enable(&adapter
->napi
);
1748 vmxnet3_enable_all_intrs(adapter
);
1749 clear_bit(VMXNET3_STATE_BIT_QUIESCED
, &adapter
->state
);
1753 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_DSAL
, 0);
1754 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_DSAH
, 0);
1755 vmxnet3_free_irqs(adapter
);
1758 /* free up buffers we allocated */
1759 vmxnet3_rq_cleanup(&adapter
->rx_queue
, adapter
);
1765 vmxnet3_reset_dev(struct vmxnet3_adapter
*adapter
)
1767 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
, VMXNET3_CMD_RESET_DEV
);
1772 vmxnet3_quiesce_dev(struct vmxnet3_adapter
*adapter
)
1774 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED
, &adapter
->state
))
1778 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
1779 VMXNET3_CMD_QUIESCE_DEV
);
1780 vmxnet3_disable_all_intrs(adapter
);
1782 napi_disable(&adapter
->napi
);
1783 netif_tx_disable(adapter
->netdev
);
1784 adapter
->link_speed
= 0;
1785 netif_carrier_off(adapter
->netdev
);
1787 vmxnet3_tq_cleanup(&adapter
->tx_queue
, adapter
);
1788 vmxnet3_rq_cleanup(&adapter
->rx_queue
, adapter
);
1789 vmxnet3_free_irqs(adapter
);
1795 vmxnet3_write_mac_addr(struct vmxnet3_adapter
*adapter
, u8
*mac
)
1800 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_MACL
, tmp
);
1802 tmp
= (mac
[5] << 8) | mac
[4];
1803 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_MACH
, tmp
);
1808 vmxnet3_set_mac_addr(struct net_device
*netdev
, void *p
)
1810 struct sockaddr
*addr
= p
;
1811 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
1813 memcpy(netdev
->dev_addr
, addr
->sa_data
, netdev
->addr_len
);
1814 vmxnet3_write_mac_addr(adapter
, addr
->sa_data
);
1820 /* ==================== initialization and cleanup routines ============ */
1823 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter
*adapter
, bool *dma64
)
1826 unsigned long mmio_start
, mmio_len
;
1827 struct pci_dev
*pdev
= adapter
->pdev
;
1829 err
= pci_enable_device(pdev
);
1831 printk(KERN_ERR
"Failed to enable adapter %s: error %d\n",
1832 pci_name(pdev
), err
);
1836 if (pci_set_dma_mask(pdev
, DMA_BIT_MASK(64)) == 0) {
1837 if (pci_set_consistent_dma_mask(pdev
, DMA_BIT_MASK(64)) != 0) {
1838 printk(KERN_ERR
"pci_set_consistent_dma_mask failed "
1839 "for adapter %s\n", pci_name(pdev
));
1845 if (pci_set_dma_mask(pdev
, DMA_BIT_MASK(32)) != 0) {
1846 printk(KERN_ERR
"pci_set_dma_mask failed for adapter "
1847 "%s\n", pci_name(pdev
));
1854 err
= pci_request_selected_regions(pdev
, (1 << 2) - 1,
1855 vmxnet3_driver_name
);
1857 printk(KERN_ERR
"Failed to request region for adapter %s: "
1858 "error %d\n", pci_name(pdev
), err
);
1862 pci_set_master(pdev
);
1864 mmio_start
= pci_resource_start(pdev
, 0);
1865 mmio_len
= pci_resource_len(pdev
, 0);
1866 adapter
->hw_addr0
= ioremap(mmio_start
, mmio_len
);
1867 if (!adapter
->hw_addr0
) {
1868 printk(KERN_ERR
"Failed to map bar0 for adapter %s\n",
1874 mmio_start
= pci_resource_start(pdev
, 1);
1875 mmio_len
= pci_resource_len(pdev
, 1);
1876 adapter
->hw_addr1
= ioremap(mmio_start
, mmio_len
);
1877 if (!adapter
->hw_addr1
) {
1878 printk(KERN_ERR
"Failed to map bar1 for adapter %s\n",
1886 iounmap(adapter
->hw_addr0
);
1888 pci_release_selected_regions(pdev
, (1 << 2) - 1);
1890 pci_disable_device(pdev
);
1896 vmxnet3_free_pci_resources(struct vmxnet3_adapter
*adapter
)
1898 BUG_ON(!adapter
->pdev
);
1900 iounmap(adapter
->hw_addr0
);
1901 iounmap(adapter
->hw_addr1
);
1902 pci_release_selected_regions(adapter
->pdev
, (1 << 2) - 1);
1903 pci_disable_device(adapter
->pdev
);
1908 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter
*adapter
)
1912 if (adapter
->netdev
->mtu
<= VMXNET3_MAX_SKB_BUF_SIZE
-
1913 VMXNET3_MAX_ETH_HDR_SIZE
) {
1914 adapter
->skb_buf_size
= adapter
->netdev
->mtu
+
1915 VMXNET3_MAX_ETH_HDR_SIZE
;
1916 if (adapter
->skb_buf_size
< VMXNET3_MIN_T0_BUF_SIZE
)
1917 adapter
->skb_buf_size
= VMXNET3_MIN_T0_BUF_SIZE
;
1919 adapter
->rx_buf_per_pkt
= 1;
1921 adapter
->skb_buf_size
= VMXNET3_MAX_SKB_BUF_SIZE
;
1922 sz
= adapter
->netdev
->mtu
- VMXNET3_MAX_SKB_BUF_SIZE
+
1923 VMXNET3_MAX_ETH_HDR_SIZE
;
1924 adapter
->rx_buf_per_pkt
= 1 + (sz
+ PAGE_SIZE
- 1) / PAGE_SIZE
;
1928 * for simplicity, force the ring0 size to be a multiple of
1929 * rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN
1931 sz
= adapter
->rx_buf_per_pkt
* VMXNET3_RING_SIZE_ALIGN
;
1932 adapter
->rx_queue
.rx_ring
[0].size
= (adapter
->rx_queue
.rx_ring
[0].size
+
1934 adapter
->rx_queue
.rx_ring
[0].size
= min_t(u32
,
1935 adapter
->rx_queue
.rx_ring
[0].size
,
1936 VMXNET3_RX_RING_MAX_SIZE
/ sz
* sz
);
1941 vmxnet3_create_queues(struct vmxnet3_adapter
*adapter
, u32 tx_ring_size
,
1942 u32 rx_ring_size
, u32 rx_ring2_size
)
1946 adapter
->tx_queue
.tx_ring
.size
= tx_ring_size
;
1947 adapter
->tx_queue
.data_ring
.size
= tx_ring_size
;
1948 adapter
->tx_queue
.comp_ring
.size
= tx_ring_size
;
1949 adapter
->tx_queue
.shared
= &adapter
->tqd_start
->ctrl
;
1950 adapter
->tx_queue
.stopped
= true;
1951 err
= vmxnet3_tq_create(&adapter
->tx_queue
, adapter
);
1955 adapter
->rx_queue
.rx_ring
[0].size
= rx_ring_size
;
1956 adapter
->rx_queue
.rx_ring
[1].size
= rx_ring2_size
;
1957 vmxnet3_adjust_rx_ring_size(adapter
);
1958 adapter
->rx_queue
.comp_ring
.size
= adapter
->rx_queue
.rx_ring
[0].size
+
1959 adapter
->rx_queue
.rx_ring
[1].size
;
1960 adapter
->rx_queue
.qid
= 0;
1961 adapter
->rx_queue
.qid2
= 1;
1962 adapter
->rx_queue
.shared
= &adapter
->rqd_start
->ctrl
;
1963 err
= vmxnet3_rq_create(&adapter
->rx_queue
, adapter
);
1965 vmxnet3_tq_destroy(&adapter
->tx_queue
, adapter
);
1971 vmxnet3_open(struct net_device
*netdev
)
1973 struct vmxnet3_adapter
*adapter
;
1976 adapter
= netdev_priv(netdev
);
1978 spin_lock_init(&adapter
->tx_queue
.tx_lock
);
1980 err
= vmxnet3_create_queues(adapter
, VMXNET3_DEF_TX_RING_SIZE
,
1981 VMXNET3_DEF_RX_RING_SIZE
,
1982 VMXNET3_DEF_RX_RING_SIZE
);
1986 err
= vmxnet3_activate_dev(adapter
);
1993 vmxnet3_rq_destroy(&adapter
->rx_queue
, adapter
);
1994 vmxnet3_tq_destroy(&adapter
->tx_queue
, adapter
);
2001 vmxnet3_close(struct net_device
*netdev
)
2003 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
2006 * Reset_work may be in the middle of resetting the device, wait for its
2009 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
))
2012 vmxnet3_quiesce_dev(adapter
);
2014 vmxnet3_rq_destroy(&adapter
->rx_queue
, adapter
);
2015 vmxnet3_tq_destroy(&adapter
->tx_queue
, adapter
);
2017 clear_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
);
2025 vmxnet3_force_close(struct vmxnet3_adapter
*adapter
)
2028 * we must clear VMXNET3_STATE_BIT_RESETTING, otherwise
2029 * vmxnet3_close() will deadlock.
2031 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
));
2033 /* we need to enable NAPI, otherwise dev_close will deadlock */
2034 napi_enable(&adapter
->napi
);
2035 dev_close(adapter
->netdev
);
2040 vmxnet3_change_mtu(struct net_device
*netdev
, int new_mtu
)
2042 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
2045 if (new_mtu
< VMXNET3_MIN_MTU
|| new_mtu
> VMXNET3_MAX_MTU
)
2048 if (new_mtu
> 1500 && !adapter
->jumbo_frame
)
2051 netdev
->mtu
= new_mtu
;
2054 * Reset_work may be in the middle of resetting the device, wait for its
2057 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
))
2060 if (netif_running(netdev
)) {
2061 vmxnet3_quiesce_dev(adapter
);
2062 vmxnet3_reset_dev(adapter
);
2064 /* we need to re-create the rx queue based on the new mtu */
2065 vmxnet3_rq_destroy(&adapter
->rx_queue
, adapter
);
2066 vmxnet3_adjust_rx_ring_size(adapter
);
2067 adapter
->rx_queue
.comp_ring
.size
=
2068 adapter
->rx_queue
.rx_ring
[0].size
+
2069 adapter
->rx_queue
.rx_ring
[1].size
;
2070 err
= vmxnet3_rq_create(&adapter
->rx_queue
, adapter
);
2072 printk(KERN_ERR
"%s: failed to re-create rx queue,"
2073 " error %d. Closing it.\n", netdev
->name
, err
);
2077 err
= vmxnet3_activate_dev(adapter
);
2079 printk(KERN_ERR
"%s: failed to re-activate, error %d. "
2080 "Closing it\n", netdev
->name
, err
);
2086 clear_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
);
2088 vmxnet3_force_close(adapter
);
2095 vmxnet3_declare_features(struct vmxnet3_adapter
*adapter
, bool dma64
)
2097 struct net_device
*netdev
= adapter
->netdev
;
2099 netdev
->features
= NETIF_F_SG
|
2101 NETIF_F_HW_VLAN_TX
|
2102 NETIF_F_HW_VLAN_RX
|
2103 NETIF_F_HW_VLAN_FILTER
|
2108 printk(KERN_INFO
"features: sg csum vlan jf tso tsoIPv6 lro");
2110 adapter
->rxcsum
= true;
2111 adapter
->jumbo_frame
= true;
2112 adapter
->lro
= true;
2115 netdev
->features
|= NETIF_F_HIGHDMA
;
2119 netdev
->vlan_features
= netdev
->features
;
2125 vmxnet3_read_mac_addr(struct vmxnet3_adapter
*adapter
, u8
*mac
)
2129 tmp
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_MACL
);
2132 tmp
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_MACH
);
2133 mac
[4] = tmp
& 0xff;
2134 mac
[5] = (tmp
>> 8) & 0xff;
2139 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter
*adapter
)
2144 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
2145 VMXNET3_CMD_GET_CONF_INTR
);
2146 cfg
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_CMD
);
2147 adapter
->intr
.type
= cfg
& 0x3;
2148 adapter
->intr
.mask_mode
= (cfg
>> 2) & 0x3;
2150 if (adapter
->intr
.type
== VMXNET3_IT_AUTO
) {
2153 #ifdef CONFIG_PCI_MSI
2154 adapter
->intr
.msix_entries
[0].entry
= 0;
2155 err
= pci_enable_msix(adapter
->pdev
, adapter
->intr
.msix_entries
,
2156 VMXNET3_LINUX_MAX_MSIX_VECT
);
2158 adapter
->intr
.num_intrs
= 1;
2159 adapter
->intr
.type
= VMXNET3_IT_MSIX
;
2164 err
= pci_enable_msi(adapter
->pdev
);
2166 adapter
->intr
.num_intrs
= 1;
2167 adapter
->intr
.type
= VMXNET3_IT_MSI
;
2172 adapter
->intr
.type
= VMXNET3_IT_INTX
;
2174 /* INT-X related setting */
2175 adapter
->intr
.num_intrs
= 1;
2180 vmxnet3_free_intr_resources(struct vmxnet3_adapter
*adapter
)
2182 if (adapter
->intr
.type
== VMXNET3_IT_MSIX
)
2183 pci_disable_msix(adapter
->pdev
);
2184 else if (adapter
->intr
.type
== VMXNET3_IT_MSI
)
2185 pci_disable_msi(adapter
->pdev
);
2187 BUG_ON(adapter
->intr
.type
!= VMXNET3_IT_INTX
);
2192 vmxnet3_tx_timeout(struct net_device
*netdev
)
2194 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
2195 adapter
->tx_timeout_count
++;
2197 printk(KERN_ERR
"%s: tx hang\n", adapter
->netdev
->name
);
2198 schedule_work(&adapter
->work
);
2203 vmxnet3_reset_work(struct work_struct
*data
)
2205 struct vmxnet3_adapter
*adapter
;
2207 adapter
= container_of(data
, struct vmxnet3_adapter
, work
);
2209 /* if another thread is resetting the device, no need to proceed */
2210 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
))
2213 /* if the device is closed, we must leave it alone */
2214 if (netif_running(adapter
->netdev
)) {
2215 printk(KERN_INFO
"%s: resetting\n", adapter
->netdev
->name
);
2216 vmxnet3_quiesce_dev(adapter
);
2217 vmxnet3_reset_dev(adapter
);
2218 vmxnet3_activate_dev(adapter
);
2220 printk(KERN_INFO
"%s: already closed\n", adapter
->netdev
->name
);
2223 clear_bit(VMXNET3_STATE_BIT_RESETTING
, &adapter
->state
);
2227 static int __devinit
2228 vmxnet3_probe_device(struct pci_dev
*pdev
,
2229 const struct pci_device_id
*id
)
2231 static const struct net_device_ops vmxnet3_netdev_ops
= {
2232 .ndo_open
= vmxnet3_open
,
2233 .ndo_stop
= vmxnet3_close
,
2234 .ndo_start_xmit
= vmxnet3_xmit_frame
,
2235 .ndo_set_mac_address
= vmxnet3_set_mac_addr
,
2236 .ndo_change_mtu
= vmxnet3_change_mtu
,
2237 .ndo_get_stats
= vmxnet3_get_stats
,
2238 .ndo_tx_timeout
= vmxnet3_tx_timeout
,
2239 .ndo_set_multicast_list
= vmxnet3_set_mc
,
2240 .ndo_vlan_rx_register
= vmxnet3_vlan_rx_register
,
2241 .ndo_vlan_rx_add_vid
= vmxnet3_vlan_rx_add_vid
,
2242 .ndo_vlan_rx_kill_vid
= vmxnet3_vlan_rx_kill_vid
,
2243 #ifdef CONFIG_NET_POLL_CONTROLLER
2244 .ndo_poll_controller
= vmxnet3_netpoll
,
2248 bool dma64
= false; /* stupid gcc */
2250 struct net_device
*netdev
;
2251 struct vmxnet3_adapter
*adapter
;
2254 netdev
= alloc_etherdev(sizeof(struct vmxnet3_adapter
));
2256 printk(KERN_ERR
"Failed to alloc ethernet device for adapter "
2257 "%s\n", pci_name(pdev
));
2261 pci_set_drvdata(pdev
, netdev
);
2262 adapter
= netdev_priv(netdev
);
2263 adapter
->netdev
= netdev
;
2264 adapter
->pdev
= pdev
;
2266 adapter
->shared
= pci_alloc_consistent(adapter
->pdev
,
2267 sizeof(struct Vmxnet3_DriverShared
),
2268 &adapter
->shared_pa
);
2269 if (!adapter
->shared
) {
2270 printk(KERN_ERR
"Failed to allocate memory for %s\n",
2273 goto err_alloc_shared
;
2276 adapter
->tqd_start
= pci_alloc_consistent(adapter
->pdev
,
2277 sizeof(struct Vmxnet3_TxQueueDesc
) +
2278 sizeof(struct Vmxnet3_RxQueueDesc
),
2279 &adapter
->queue_desc_pa
);
2281 if (!adapter
->tqd_start
) {
2282 printk(KERN_ERR
"Failed to allocate memory for %s\n",
2285 goto err_alloc_queue_desc
;
2287 adapter
->rqd_start
= (struct Vmxnet3_RxQueueDesc
*)(adapter
->tqd_start
2290 adapter
->pm_conf
= kmalloc(sizeof(struct Vmxnet3_PMConf
), GFP_KERNEL
);
2291 if (adapter
->pm_conf
== NULL
) {
2292 printk(KERN_ERR
"Failed to allocate memory for %s\n",
2298 err
= vmxnet3_alloc_pci_resources(adapter
, &dma64
);
2302 ver
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_VRRS
);
2304 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_VRRS
, 1);
2306 printk(KERN_ERR
"Incompatible h/w version (0x%x) for adapter"
2307 " %s\n", ver
, pci_name(pdev
));
2312 ver
= VMXNET3_READ_BAR1_REG(adapter
, VMXNET3_REG_UVRS
);
2314 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_UVRS
, 1);
2316 printk(KERN_ERR
"Incompatible upt version (0x%x) for "
2317 "adapter %s\n", ver
, pci_name(pdev
));
2322 vmxnet3_declare_features(adapter
, dma64
);
2324 adapter
->dev_number
= atomic_read(&devices_found
);
2325 vmxnet3_alloc_intr_resources(adapter
);
2327 vmxnet3_read_mac_addr(adapter
, mac
);
2328 memcpy(netdev
->dev_addr
, mac
, netdev
->addr_len
);
2330 netdev
->netdev_ops
= &vmxnet3_netdev_ops
;
2331 netdev
->watchdog_timeo
= 5 * HZ
;
2332 vmxnet3_set_ethtool_ops(netdev
);
2334 INIT_WORK(&adapter
->work
, vmxnet3_reset_work
);
2336 netif_napi_add(netdev
, &adapter
->napi
, vmxnet3_poll
, 64);
2337 SET_NETDEV_DEV(netdev
, &pdev
->dev
);
2338 err
= register_netdev(netdev
);
2341 printk(KERN_ERR
"Failed to register adapter %s\n",
2346 set_bit(VMXNET3_STATE_BIT_QUIESCED
, &adapter
->state
);
2347 atomic_inc(&devices_found
);
2351 vmxnet3_free_intr_resources(adapter
);
2353 vmxnet3_free_pci_resources(adapter
);
2355 kfree(adapter
->pm_conf
);
2357 pci_free_consistent(adapter
->pdev
, sizeof(struct Vmxnet3_TxQueueDesc
) +
2358 sizeof(struct Vmxnet3_RxQueueDesc
),
2359 adapter
->tqd_start
, adapter
->queue_desc_pa
);
2360 err_alloc_queue_desc
:
2361 pci_free_consistent(adapter
->pdev
, sizeof(struct Vmxnet3_DriverShared
),
2362 adapter
->shared
, adapter
->shared_pa
);
2364 pci_set_drvdata(pdev
, NULL
);
2365 free_netdev(netdev
);
2370 static void __devexit
2371 vmxnet3_remove_device(struct pci_dev
*pdev
)
2373 struct net_device
*netdev
= pci_get_drvdata(pdev
);
2374 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
2376 flush_scheduled_work();
2378 unregister_netdev(netdev
);
2380 vmxnet3_free_intr_resources(adapter
);
2381 vmxnet3_free_pci_resources(adapter
);
2382 kfree(adapter
->pm_conf
);
2383 pci_free_consistent(adapter
->pdev
, sizeof(struct Vmxnet3_TxQueueDesc
) +
2384 sizeof(struct Vmxnet3_RxQueueDesc
),
2385 adapter
->tqd_start
, adapter
->queue_desc_pa
);
2386 pci_free_consistent(adapter
->pdev
, sizeof(struct Vmxnet3_DriverShared
),
2387 adapter
->shared
, adapter
->shared_pa
);
2388 free_netdev(netdev
);
2395 vmxnet3_suspend(struct device
*device
)
2397 struct pci_dev
*pdev
= to_pci_dev(device
);
2398 struct net_device
*netdev
= pci_get_drvdata(pdev
);
2399 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
2400 struct Vmxnet3_PMConf
*pmConf
;
2401 struct ethhdr
*ehdr
;
2402 struct arphdr
*ahdr
;
2404 struct in_device
*in_dev
;
2405 struct in_ifaddr
*ifa
;
2408 if (!netif_running(netdev
))
2411 vmxnet3_disable_all_intrs(adapter
);
2412 vmxnet3_free_irqs(adapter
);
2413 vmxnet3_free_intr_resources(adapter
);
2415 netif_device_detach(netdev
);
2416 netif_stop_queue(netdev
);
2418 /* Create wake-up filters. */
2419 pmConf
= adapter
->pm_conf
;
2420 memset(pmConf
, 0, sizeof(*pmConf
));
2422 if (adapter
->wol
& WAKE_UCAST
) {
2423 pmConf
->filters
[i
].patternSize
= ETH_ALEN
;
2424 pmConf
->filters
[i
].maskSize
= 1;
2425 memcpy(pmConf
->filters
[i
].pattern
, netdev
->dev_addr
, ETH_ALEN
);
2426 pmConf
->filters
[i
].mask
[0] = 0x3F; /* LSB ETH_ALEN bits */
2428 pmConf
->wakeUpEvents
|= VMXNET3_PM_WAKEUP_FILTER
;
2432 if (adapter
->wol
& WAKE_ARP
) {
2433 in_dev
= in_dev_get(netdev
);
2437 ifa
= (struct in_ifaddr
*)in_dev
->ifa_list
;
2441 pmConf
->filters
[i
].patternSize
= ETH_HLEN
+ /* Ethernet header*/
2442 sizeof(struct arphdr
) + /* ARP header */
2443 2 * ETH_ALEN
+ /* 2 Ethernet addresses*/
2444 2 * sizeof(u32
); /*2 IPv4 addresses */
2445 pmConf
->filters
[i
].maskSize
=
2446 (pmConf
->filters
[i
].patternSize
- 1) / 8 + 1;
2448 /* ETH_P_ARP in Ethernet header. */
2449 ehdr
= (struct ethhdr
*)pmConf
->filters
[i
].pattern
;
2450 ehdr
->h_proto
= htons(ETH_P_ARP
);
2452 /* ARPOP_REQUEST in ARP header. */
2453 ahdr
= (struct arphdr
*)&pmConf
->filters
[i
].pattern
[ETH_HLEN
];
2454 ahdr
->ar_op
= htons(ARPOP_REQUEST
);
2455 arpreq
= (u8
*)(ahdr
+ 1);
2457 /* The Unicast IPv4 address in 'tip' field. */
2458 arpreq
+= 2 * ETH_ALEN
+ sizeof(u32
);
2459 *(u32
*)arpreq
= ifa
->ifa_address
;
2461 /* The mask for the relevant bits. */
2462 pmConf
->filters
[i
].mask
[0] = 0x00;
2463 pmConf
->filters
[i
].mask
[1] = 0x30; /* ETH_P_ARP */
2464 pmConf
->filters
[i
].mask
[2] = 0x30; /* ARPOP_REQUEST */
2465 pmConf
->filters
[i
].mask
[3] = 0x00;
2466 pmConf
->filters
[i
].mask
[4] = 0xC0; /* IPv4 TIP */
2467 pmConf
->filters
[i
].mask
[5] = 0x03; /* IPv4 TIP */
2470 pmConf
->wakeUpEvents
|= VMXNET3_PM_WAKEUP_FILTER
;
2475 if (adapter
->wol
& WAKE_MAGIC
)
2476 pmConf
->wakeUpEvents
|= VMXNET3_PM_WAKEUP_MAGIC
;
2478 pmConf
->numFilters
= i
;
2480 adapter
->shared
->devRead
.pmConfDesc
.confVer
= 1;
2481 adapter
->shared
->devRead
.pmConfDesc
.confLen
= sizeof(*pmConf
);
2482 adapter
->shared
->devRead
.pmConfDesc
.confPA
= virt_to_phys(pmConf
);
2484 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
2485 VMXNET3_CMD_UPDATE_PMCFG
);
2487 pci_save_state(pdev
);
2488 pci_enable_wake(pdev
, pci_choose_state(pdev
, PMSG_SUSPEND
),
2490 pci_disable_device(pdev
);
2491 pci_set_power_state(pdev
, pci_choose_state(pdev
, PMSG_SUSPEND
));
2498 vmxnet3_resume(struct device
*device
)
2501 struct pci_dev
*pdev
= to_pci_dev(device
);
2502 struct net_device
*netdev
= pci_get_drvdata(pdev
);
2503 struct vmxnet3_adapter
*adapter
= netdev_priv(netdev
);
2504 struct Vmxnet3_PMConf
*pmConf
;
2506 if (!netif_running(netdev
))
2509 /* Destroy wake-up filters. */
2510 pmConf
= adapter
->pm_conf
;
2511 memset(pmConf
, 0, sizeof(*pmConf
));
2513 adapter
->shared
->devRead
.pmConfDesc
.confVer
= 1;
2514 adapter
->shared
->devRead
.pmConfDesc
.confLen
= sizeof(*pmConf
);
2515 adapter
->shared
->devRead
.pmConfDesc
.confPA
= virt_to_phys(pmConf
);
2517 netif_device_attach(netdev
);
2518 pci_set_power_state(pdev
, PCI_D0
);
2519 pci_restore_state(pdev
);
2520 err
= pci_enable_device_mem(pdev
);
2524 pci_enable_wake(pdev
, PCI_D0
, 0);
2526 VMXNET3_WRITE_BAR1_REG(adapter
, VMXNET3_REG_CMD
,
2527 VMXNET3_CMD_UPDATE_PMCFG
);
2528 vmxnet3_alloc_intr_resources(adapter
);
2529 vmxnet3_request_irqs(adapter
);
2530 vmxnet3_enable_all_intrs(adapter
);
2535 static struct dev_pm_ops vmxnet3_pm_ops
= {
2536 .suspend
= vmxnet3_suspend
,
2537 .resume
= vmxnet3_resume
,
2541 static struct pci_driver vmxnet3_driver
= {
2542 .name
= vmxnet3_driver_name
,
2543 .id_table
= vmxnet3_pciid_table
,
2544 .probe
= vmxnet3_probe_device
,
2545 .remove
= __devexit_p(vmxnet3_remove_device
),
2547 .driver
.pm
= &vmxnet3_pm_ops
,
2553 vmxnet3_init_module(void)
2555 printk(KERN_INFO
"%s - version %s\n", VMXNET3_DRIVER_DESC
,
2556 VMXNET3_DRIVER_VERSION_REPORT
);
2557 return pci_register_driver(&vmxnet3_driver
);
2560 module_init(vmxnet3_init_module
);
2564 vmxnet3_exit_module(void)
2566 pci_unregister_driver(&vmxnet3_driver
);
2569 module_exit(vmxnet3_exit_module
);
2571 MODULE_AUTHOR("VMware, Inc.");
2572 MODULE_DESCRIPTION(VMXNET3_DRIVER_DESC
);
2573 MODULE_LICENSE("GPL v2");
2574 MODULE_VERSION(VMXNET3_DRIVER_VERSION_STRING
);