Lines Matching full:adapter

54 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, const u8 *mac);
60 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_enable_intr() argument
62 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0); in vmxnet3_enable_intr()
67 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_disable_intr() argument
69 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1); in vmxnet3_disable_intr()
77 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_enable_all_intrs() argument
81 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_enable_all_intrs()
82 vmxnet3_enable_intr(adapter, i); in vmxnet3_enable_all_intrs()
83 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_enable_all_intrs()
84 !adapter->queuesExtEnabled) { in vmxnet3_enable_all_intrs()
85 adapter->shared->devRead.intrConf.intrCtrl &= in vmxnet3_enable_all_intrs()
88 adapter->shared->devReadExt.intrConfExt.intrCtrl &= in vmxnet3_enable_all_intrs()
95 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_disable_all_intrs() argument
99 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_disable_all_intrs()
100 !adapter->queuesExtEnabled) { in vmxnet3_disable_all_intrs()
101 adapter->shared->devRead.intrConf.intrCtrl |= in vmxnet3_disable_all_intrs()
104 adapter->shared->devReadExt.intrConfExt.intrCtrl |= in vmxnet3_disable_all_intrs()
107 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_disable_all_intrs()
108 vmxnet3_disable_intr(adapter, i); in vmxnet3_disable_all_intrs()
113 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events) in vmxnet3_ack_events() argument
115 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events); in vmxnet3_ack_events()
120 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stopped() argument
127 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_start() argument
130 netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue); in vmxnet3_tq_start()
135 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_wake() argument
138 netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_wake()
143 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stop() argument
147 netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_stop()
195 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue) in vmxnet3_check_link() argument
201 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_check_link()
202 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); in vmxnet3_check_link()
203 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_check_link()
204 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_check_link()
206 adapter->link_speed = ret >> 16; in vmxnet3_check_link()
213 if (VMXNET3_VERSION_GE_9(adapter) && in vmxnet3_check_link()
214 adapter->link_speed < 10000) in vmxnet3_check_link()
215 adapter->link_speed = adapter->link_speed * 1000; in vmxnet3_check_link()
216 netdev_info(adapter->netdev, "NIC Link is Up %d Mbps\n", in vmxnet3_check_link()
217 adapter->link_speed); in vmxnet3_check_link()
218 netif_carrier_on(adapter->netdev); in vmxnet3_check_link()
221 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
222 vmxnet3_tq_start(&adapter->tx_queue[i], in vmxnet3_check_link()
223 adapter); in vmxnet3_check_link()
226 netdev_info(adapter->netdev, "NIC Link is Down\n"); in vmxnet3_check_link()
227 netif_carrier_off(adapter->netdev); in vmxnet3_check_link()
230 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
231 vmxnet3_tq_stop(&adapter->tx_queue[i], adapter); in vmxnet3_check_link()
237 vmxnet3_process_events(struct vmxnet3_adapter *adapter) in vmxnet3_process_events() argument
241 u32 events = le32_to_cpu(adapter->shared->ecr); in vmxnet3_process_events()
245 vmxnet3_ack_events(adapter, events); in vmxnet3_process_events()
249 vmxnet3_check_link(adapter, true); in vmxnet3_process_events()
253 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_process_events()
254 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_process_events()
256 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_process_events()
258 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_process_events()
259 if (adapter->tqd_start[i].status.stopped) in vmxnet3_process_events()
260 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
262 adapter->netdev->name, i, le32_to_cpu( in vmxnet3_process_events()
263 adapter->tqd_start[i].status.error)); in vmxnet3_process_events()
264 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_process_events()
265 if (adapter->rqd_start[i].status.stopped) in vmxnet3_process_events()
266 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
268 adapter->netdev->name, i, in vmxnet3_process_events()
269 adapter->rqd_start[i].status.error); in vmxnet3_process_events()
271 schedule_work(&adapter->work); in vmxnet3_process_events()
397 struct pci_dev *pdev, struct vmxnet3_adapter *adapter, in vmxnet3_unmap_pkt() argument
440 struct vmxnet3_adapter *adapter) in vmxnet3_tq_tx_complete() argument
457 &gdesc->tcd), tq, adapter->pdev, in vmxnet3_tq_tx_complete()
458 adapter, &bq); in vmxnet3_tq_tx_complete()
468 if (unlikely(vmxnet3_tq_stopped(tq, adapter) && in vmxnet3_tq_tx_complete()
471 netif_carrier_ok(adapter->netdev))) { in vmxnet3_tq_tx_complete()
472 vmxnet3_tq_wake(tq, adapter); in vmxnet3_tq_tx_complete()
482 struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup() argument
497 vmxnet3_unmap_tx_buf(tbi, adapter->pdev); in vmxnet3_tq_cleanup()
525 struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy() argument
528 dma_free_coherent(&adapter->pdev->dev, tq->tx_ring.size * in vmxnet3_tq_destroy()
534 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
540 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
546 dma_free_coherent(&adapter->pdev->dev, tq->comp_ring.size * in vmxnet3_tq_destroy()
558 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy_all() argument
562 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_destroy_all()
563 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter); in vmxnet3_tq_destroy_all()
569 struct vmxnet3_adapter *adapter) in vmxnet3_tq_init() argument
603 struct vmxnet3_adapter *adapter) in vmxnet3_tq_create() argument
608 tq->tx_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
612 netdev_err(adapter->netdev, "failed to allocate tx ring\n"); in vmxnet3_tq_create()
616 tq->data_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
620 netdev_err(adapter->netdev, "failed to allocate tx data ring\n"); in vmxnet3_tq_create()
625 tq->ts_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
629 netdev_err(adapter->netdev, "failed to allocate tx ts ring\n"); in vmxnet3_tq_create()
636 tq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
640 netdev_err(adapter->netdev, "failed to allocate tx comp ring\n"); in vmxnet3_tq_create()
646 dev_to_node(&adapter->pdev->dev)); in vmxnet3_tq_create()
653 vmxnet3_tq_destroy(tq, adapter); in vmxnet3_tq_create()
658 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup_all() argument
662 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_cleanup_all()
663 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter); in vmxnet3_tq_cleanup_all()
674 int num_to_alloc, struct vmxnet3_adapter *adapter) in vmxnet3_rq_alloc_rx_buf() argument
701 rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
710 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
713 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
735 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
738 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
767 netdev_dbg(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
796 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
823 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
850 tbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_map_pkt()
853 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
865 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
892 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
895 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
907 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
936 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
940 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
941 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
965 struct vmxnet3_adapter *adapter) in vmxnet3_parse_hdr() argument
970 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_parse_hdr()
987 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_parse_hdr()
1068 struct vmxnet3_adapter *adapter) in vmxnet3_copy_hdr() argument
1077 netdev_dbg(adapter->netdev, in vmxnet3_copy_hdr()
1147 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
1215 ret = vmxnet3_parse_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1244 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1246 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
1249 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
1255 vmxnet3_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1258 if (vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter)) in vmxnet3_tq_xmit()
1274 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_tq_xmit()
1276 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_tq_xmit()
1294 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_tq_xmit()
1298 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_tq_xmit()
1328 adapter->latencyConf->sampleRate != 0) { in vmxnet3_tq_xmit()
1329 if (vmxnet3_apply_timestamp(tq, adapter->latencyConf->sampleRate)) { in vmxnet3_tq_xmit()
1351 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1361 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1362 adapter->tx_prod_offset + tq->qid * 8, in vmxnet3_tq_xmit()
1377 vmxnet3_create_pp(struct vmxnet3_adapter *adapter, in vmxnet3_create_pp() argument
1380 bool xdp_prog = vmxnet3_xdp_enabled(adapter); in vmxnet3_create_pp()
1386 .dev = &adapter->pdev->dev, in vmxnet3_create_pp()
1398 err = xdp_rxq_info_reg(&rq->xdp_rxq, adapter->netdev, rq->qid, in vmxnet3_create_pp()
1437 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1439 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1441 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1442 adapter, netdev); in vmxnet3_xmit_frame()
1447 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1451 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1495 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1521 vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb, in vmxnet3_get_hdr_len() argument
1601 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1604 adapter->rx_prod_offset, adapter->rx_prod2_offset in vmxnet3_rq_rx_complete()
1645 ring_idx = VMXNET3_GET_RING_IDX(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1655 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1659 if (rcd->sop && rcd->eop && vmxnet3_xdp_enabled(adapter)) { in vmxnet3_rq_rx_complete()
1663 if (VMXNET3_RX_DATA_RING(adapter, rcd->rqID)) { in vmxnet3_rq_rx_complete()
1671 act = vmxnet3_process_xdp(adapter, rq, rcd, rbi, rxd, in vmxnet3_rq_rx_complete()
1699 netdev_dbg(adapter->netdev, in vmxnet3_rq_rx_complete()
1718 VMXNET3_RX_DATA_RING(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1721 if (rxDataRingUsed && vmxnet3_xdp_enabled(adapter)) { in vmxnet3_rq_rx_complete()
1727 act = vmxnet3_process_xdp_small(adapter, rq, in vmxnet3_rq_rx_complete()
1739 new_skb = netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_rx_complete()
1752 if (rxDataRingUsed && adapter->rxdataring_enabled) { in vmxnet3_rq_rx_complete()
1765 dma_map_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1768 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1782 dma_unmap_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1797 if (VMXNET3_VERSION_GE_2(adapter) && in vmxnet3_rq_rx_complete()
1842 new_dma_addr = dma_map_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1846 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1856 dma_unmap_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1874 u32 mtu = adapter->netdev->mtu; in vmxnet3_rq_rx_complete()
1879 (adapter->netdev->features & NETIF_F_RXHASH)) { in vmxnet3_rq_rx_complete()
1902 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1904 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1906 !(adapter->netdev->features & NETIF_F_LRO)) in vmxnet3_rq_rx_complete()
1919 hlen = vmxnet3_get_hdr_len(adapter, skb, in vmxnet3_rq_rx_complete()
1940 if ((adapter->netdev->features & NETIF_F_LRO) && in vmxnet3_rq_rx_complete()
1970 if (!(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_OOORX_COMP))) in vmxnet3_rq_rx_complete()
2001 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
2019 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
2046 dma_unmap_single(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
2052 dma_unmap_page(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
2075 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
2079 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
2080 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
2081 rcu_assign_pointer(adapter->xdp_bpf_prog, NULL); in vmxnet3_rq_cleanup_all()
2086 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
2102 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
2112 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
2119 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
2126 dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size in vmxnet3_rq_destroy()
2138 vmxnet3_rq_destroy_all_rxdataring(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all_rxdataring() argument
2142 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_destroy_all_rxdataring()
2143 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_rq_destroy_all_rxdataring()
2146 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy_all_rxdataring()
2159 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
2167 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
2168 rq->buf_info[0][i].buf_type = vmxnet3_xdp_enabled(adapter) ? in vmxnet3_rq_init()
2171 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
2192 err = vmxnet3_create_pp(adapter, rq, in vmxnet3_rq_init()
2198 adapter) == 0) { in vmxnet3_rq_init()
2206 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
2227 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
2231 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
2232 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
2234 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
2236 adapter->netdev->name, i); in vmxnet3_rq_init_all()
2246 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
2256 &adapter->pdev->dev, sz, in vmxnet3_rq_create()
2260 netdev_err(adapter->netdev, in vmxnet3_rq_create()
2266 if ((adapter->rxdataring_enabled) && (rq->data_ring.desc_size != 0)) { in vmxnet3_rq_create()
2269 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
2273 netdev_err(adapter->netdev, in vmxnet3_rq_create()
2275 adapter->rxdataring_enabled = false; in vmxnet3_rq_create()
2285 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
2289 netdev_err(adapter->netdev, in vmxnet3_rq_create()
2298 rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
2302 netdev_err(adapter->netdev, "failed to allocate rx comp ring\n"); in vmxnet3_rq_create()
2308 dev_to_node(&adapter->pdev->dev)); in vmxnet3_rq_create()
2318 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
2324 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
2328 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_rq_create_all()
2330 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
2331 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
2333 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
2335 adapter->netdev->name, i); in vmxnet3_rq_create_all()
2340 if (!adapter->rxdataring_enabled) in vmxnet3_rq_create_all()
2341 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_rq_create_all()
2345 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
2353 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
2356 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
2357 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
2358 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
2359 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
2361 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
2362 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
2363 adapter, budget); in vmxnet3_do_poll()
2375 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
2379 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
2394 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
2400 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
2402 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
2403 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
2406 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
2410 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
2427 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
2429 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
2430 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2433 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
2435 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
2436 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
2437 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
2440 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
2442 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2457 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
2460 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
2461 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
2484 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
2487 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
2488 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2490 if (adapter->shared->ecr) in vmxnet3_msix_event()
2491 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
2493 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2506 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
2508 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
2509 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
2517 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
2518 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
2520 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
2531 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
2533 switch (adapter->intr.type) { in vmxnet3_netpoll()
2537 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_netpoll()
2538 vmxnet3_msix_rx(0, &adapter->rx_queue[i]); in vmxnet3_netpoll()
2544 vmxnet3_intr(0, adapter->netdev); in vmxnet3_netpoll()
2552 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
2554 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
2559 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2560 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
2561 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
2562 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
2563 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2567 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
2568 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
2570 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2571 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2574 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
2577 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
2583 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
2584 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2585 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2590 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2594 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2597 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2598 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2599 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
2600 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2602 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2603 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2606 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
2607 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
2609 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2612 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
2616 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
2620 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2623 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
2627 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2628 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
2629 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
2632 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2633 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
2634 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
2635 adapter->netdev); in vmxnet3_request_irqs()
2641 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2646 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2647 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
2649 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
2650 rq->dataRingQid = i + 2 * adapter->num_rx_queues; in vmxnet3_request_irqs()
2656 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2657 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
2658 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2659 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2660 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2663 netdev_info(adapter->netdev, in vmxnet3_request_irqs()
2673 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
2675 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
2684 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
2685 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
2687 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
2688 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
2693 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
2695 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
2699 adapter->netdev); in vmxnet3_free_irqs()
2705 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2708 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2717 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
2719 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
2725 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
2733 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
2736 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
2740 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2741 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
2743 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2746 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
2755 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
2758 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
2762 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2763 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
2765 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2768 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
2800 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
2803 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2810 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2815 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2831 &adapter->pdev->dev, in vmxnet3_set_mc()
2835 if (!dma_mapping_error(&adapter->pdev->dev, in vmxnet3_set_mc()
2855 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2858 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2860 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2864 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2866 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2869 dma_unmap_single(&adapter->pdev->dev, new_table_pa, in vmxnet3_set_mc()
2875 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2879 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2880 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2885 * Set up driver_shared based on settings in adapter.
2889 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2891 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2914 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa); in vmxnet3_setup_driver_shared()
2918 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2921 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2925 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in vmxnet3_setup_driver_shared()
2928 if (adapter->netdev->features & (NETIF_F_GSO_UDP_TUNNEL | in vmxnet3_setup_driver_shared()
2932 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2933 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2935 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2936 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2939 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2940 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2941 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2942 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2943 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2954 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_setup_driver_shared()
2955 tqtsc = &adapter->tqd_start[i].tsConf; in vmxnet3_setup_driver_shared()
2962 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2963 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2964 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2965 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2975 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_setup_driver_shared()
2981 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_setup_driver_shared()
2982 rqtsc = &adapter->rqd_start[i].tsConf; in vmxnet3_setup_driver_shared()
2989 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2991 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2992 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2995 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
3007 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
3012 cpu_to_le64(adapter->rss_conf_pa); in vmxnet3_setup_driver_shared()
3018 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_setup_driver_shared()
3019 !adapter->queuesExtEnabled) { in vmxnet3_setup_driver_shared()
3020 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
3022 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
3023 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
3024 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
3026 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
3029 devReadExt->intrConfExt.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
3031 devReadExt->intrConfExt.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
3032 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
3033 devReadExt->intrConfExt.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
3035 devReadExt->intrConfExt.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
3041 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
3042 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
3048 vmxnet3_init_bufsize(struct vmxnet3_adapter *adapter) in vmxnet3_init_bufsize() argument
3050 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_bufsize()
3054 if (!VMXNET3_VERSION_GE_7(adapter)) in vmxnet3_init_bufsize()
3057 cmdInfo->ringBufSize = adapter->ringBufSize; in vmxnet3_init_bufsize()
3058 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_bufsize()
3059 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_bufsize()
3061 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_bufsize()
3065 vmxnet3_init_coalesce(struct vmxnet3_adapter *adapter) in vmxnet3_init_coalesce() argument
3067 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_coalesce()
3071 if (!VMXNET3_VERSION_GE_3(adapter)) in vmxnet3_init_coalesce()
3074 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
3077 cpu_to_le32(sizeof(*adapter->coal_conf)); in vmxnet3_init_coalesce()
3078 cmdInfo->varConf.confPA = cpu_to_le64(adapter->coal_conf_pa); in vmxnet3_init_coalesce()
3080 if (adapter->default_coal_mode) { in vmxnet3_init_coalesce()
3081 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
3084 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
3088 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
3092 vmxnet3_init_rssfields(struct vmxnet3_adapter *adapter) in vmxnet3_init_rssfields() argument
3094 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_rssfields()
3098 if (!VMXNET3_VERSION_GE_4(adapter)) in vmxnet3_init_rssfields()
3101 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
3103 if (adapter->default_rss_fields) { in vmxnet3_init_rssfields()
3104 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
3106 adapter->rss_fields = in vmxnet3_init_rssfields()
3107 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
3109 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_init_rssfields()
3110 if ((adapter->rss_fields & VMXNET3_RSS_FIELDS_UDPIP4 || in vmxnet3_init_rssfields()
3111 adapter->rss_fields & VMXNET3_RSS_FIELDS_UDPIP6) && in vmxnet3_init_rssfields()
3112 vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_init_rssfields()
3114 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_UDP_RSS; in vmxnet3_init_rssfields()
3116 adapter->dev_caps[0] &= ~(1UL << VMXNET3_CAP_UDP_RSS); in vmxnet3_init_rssfields()
3119 if ((adapter->rss_fields & VMXNET3_RSS_FIELDS_ESPIP4) && in vmxnet3_init_rssfields()
3120 vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_init_rssfields()
3122 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_ESP_RSS_IPV4; in vmxnet3_init_rssfields()
3124 adapter->dev_caps[0] &= ~(1UL << VMXNET3_CAP_ESP_RSS_IPV4); in vmxnet3_init_rssfields()
3127 if ((adapter->rss_fields & VMXNET3_RSS_FIELDS_ESPIP6) && in vmxnet3_init_rssfields()
3128 vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_init_rssfields()
3130 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_ESP_RSS_IPV6; in vmxnet3_init_rssfields()
3132 adapter->dev_caps[0] &= ~(1UL << VMXNET3_CAP_ESP_RSS_IPV6); in vmxnet3_init_rssfields()
3135 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DCR, adapter->dev_caps[0]); in vmxnet3_init_rssfields()
3136 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DCR0_REG); in vmxnet3_init_rssfields()
3137 adapter->dev_caps[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
3139 cmdInfo->setRssFields = adapter->rss_fields; in vmxnet3_init_rssfields()
3140 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
3145 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
3147 adapter->rss_fields = in vmxnet3_init_rssfields()
3148 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
3151 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
3155 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
3161 netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
3162 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
3163 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
3164 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
3165 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
3166 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
3168 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
3169 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
3171 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
3176 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
3178 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
3183 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
3185 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
3186 adapter->shared_pa)); in vmxnet3_activate_dev()
3187 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
3188 adapter->shared_pa)); in vmxnet3_activate_dev()
3189 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
3190 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
3192 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
3193 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
3196 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
3202 vmxnet3_init_bufsize(adapter); in vmxnet3_activate_dev()
3203 vmxnet3_init_coalesce(adapter); in vmxnet3_activate_dev()
3204 vmxnet3_init_rssfields(adapter); in vmxnet3_activate_dev()
3206 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
3207 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
3208 adapter->rx_prod_offset + i * VMXNET3_REG_ALIGN, in vmxnet3_activate_dev()
3209 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
3210 VMXNET3_WRITE_BAR0_REG(adapter, (adapter->rx_prod2_offset + in vmxnet3_activate_dev()
3212 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
3216 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
3222 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
3223 netif_tx_wake_all_queues(adapter->netdev); in vmxnet3_activate_dev()
3224 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
3225 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
3226 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
3227 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
3231 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
3232 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
3233 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
3237 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
3243 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
3246 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
3247 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
3248 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
3253 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
3257 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
3261 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
3262 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
3264 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
3265 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
3267 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
3268 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
3269 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
3270 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
3271 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
3273 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
3274 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
3275 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
3281 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, const u8 *mac) in vmxnet3_write_mac_addr() argument
3286 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
3289 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
3297 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
3300 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
3309 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_pci_resources() argument
3313 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
3317 dev_err(&pdev->dev, "Failed to enable adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
3325 "Failed to request region for adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
3333 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
3334 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
3342 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
3343 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
3351 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
3361 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
3363 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
3365 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
3366 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
3367 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
3368 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
3373 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
3377 if (!VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_adjust_rx_ring_size()
3378 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
3380 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
3382 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
3383 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
3385 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
3387 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
3388 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
3390 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
3393 adapter->skb_buf_size = min((int)adapter->netdev->mtu + VMXNET3_MAX_ETH_HDR_SIZE, in vmxnet3_adjust_rx_ring_size()
3395 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
3396 adapter->ringBufSize.ring1BufSizeType0 = cpu_to_le16(adapter->skb_buf_size); in vmxnet3_adjust_rx_ring_size()
3397 adapter->ringBufSize.ring1BufSizeType1 = 0; in vmxnet3_adjust_rx_ring_size()
3398 adapter->ringBufSize.ring2BufSizeType1 = cpu_to_le16(PAGE_SIZE); in vmxnet3_adjust_rx_ring_size()
3405 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
3406 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
3410 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
3415 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_adjust_rx_ring_size()
3421 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
3422 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
3432 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
3438 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
3439 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
3444 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
3446 tq->adapter = adapter; in vmxnet3_create_queues()
3448 tq->tx_ts_desc_size = adapter->tx_ts_desc_size; in vmxnet3_create_queues()
3450 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
3459 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
3460 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
3461 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
3463 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_create_queues()
3464 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
3465 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
3468 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
3469 rq->adapter = adapter; in vmxnet3_create_queues()
3471 rq->rx_ts_desc_size = adapter->rx_ts_desc_size; in vmxnet3_create_queues()
3472 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
3475 netdev_err(adapter->netdev, in vmxnet3_create_queues()
3480 netdev_info(adapter->netdev, in vmxnet3_create_queues()
3483 adapter->num_rx_queues = i; in vmxnet3_create_queues()
3490 if (!adapter->rxdataring_enabled) in vmxnet3_create_queues()
3491 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_create_queues()
3495 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
3502 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
3505 adapter = netdev_priv(netdev); in vmxnet3_open()
3507 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
3508 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
3510 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_open()
3515 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3516 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3518 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_open()
3519 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3525 adapter->txdata_desc_size = in vmxnet3_open()
3528 adapter->txdata_desc_size = txdata_desc_size; in vmxnet3_open()
3530 if (VMXNET3_VERSION_GE_9(adapter)) in vmxnet3_open()
3531 adapter->rxdata_desc_size = (ret >> 16) & 0xffff; in vmxnet3_open()
3533 adapter->txdata_desc_size = sizeof(struct Vmxnet3_TxDataDesc); in vmxnet3_open()
3536 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_open()
3542 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3543 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3545 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_open()
3546 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3557 adapter->tx_ts_desc_size = tx_ts_desc_size; in vmxnet3_open()
3558 adapter->rx_ts_desc_size = rx_ts_desc_size; in vmxnet3_open()
3560 adapter->tx_ts_desc_size = 0; in vmxnet3_open()
3561 adapter->rx_ts_desc_size = 0; in vmxnet3_open()
3564 err = vmxnet3_create_queues(adapter, in vmxnet3_open()
3565 adapter->tx_ring_size, in vmxnet3_open()
3566 adapter->rx_ring_size, in vmxnet3_open()
3567 adapter->rx_ring2_size, in vmxnet3_open()
3568 adapter->txdata_desc_size, in vmxnet3_open()
3569 adapter->rxdata_desc_size); in vmxnet3_open()
3573 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
3580 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
3581 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
3590 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
3596 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
3599 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
3601 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
3602 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
3604 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
3612 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
3620 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
3623 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
3624 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
3629 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_force_close()
3630 dev_close(adapter->netdev); in vmxnet3_force_close()
3637 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
3644 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
3648 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
3649 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
3652 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
3654 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
3655 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
3663 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
3675 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
3677 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
3684 vmxnet3_declare_features(struct vmxnet3_adapter *adapter) in vmxnet3_declare_features() argument
3686 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
3689 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_declare_features()
3690 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3691 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_declare_features()
3693 adapter->disabledOffloads = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_declare_features()
3694 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3702 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_declare_features()
3713 if (adapter->disabledOffloads & VMXNET3_OFFLOAD_TSO) { in vmxnet3_declare_features()
3718 if (adapter->disabledOffloads & VMXNET3_OFFLOAD_LRO) { in vmxnet3_declare_features()
3723 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_declare_features()
3726 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3728 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_GENEVE_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3730 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3732 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_VXLAN_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3734 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3736 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_GENEVE_TSO; in vmxnet3_declare_features()
3738 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3740 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_VXLAN_TSO; in vmxnet3_declare_features()
3742 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3744 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_GENEVE_OUTER_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3746 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3748 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_VXLAN_OUTER_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3751 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DCR, adapter->dev_caps[0]); in vmxnet3_declare_features()
3752 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3753 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DCR0_REG); in vmxnet3_declare_features()
3754 adapter->dev_caps[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_declare_features()
3755 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3757 if (!(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_GENEVE_CHECKSUM_OFFLOAD)) && in vmxnet3_declare_features()
3758 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_VXLAN_CHECKSUM_OFFLOAD)) && in vmxnet3_declare_features()
3759 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_GENEVE_TSO)) && in vmxnet3_declare_features()
3760 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_VXLAN_TSO))) { in vmxnet3_declare_features()
3764 if (!(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_GENEVE_OUTER_CHECKSUM_OFFLOAD)) && in vmxnet3_declare_features()
3765 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_VXLAN_OUTER_CHECKSUM_OFFLOAD))) { in vmxnet3_declare_features()
3779 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
3783 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
3786 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
3803 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec) in vmxnet3_acquire_msix_vectors() argument
3805 int ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3806 adapter->intr.msix_entries, nvec, nvec); in vmxnet3_acquire_msix_vectors()
3809 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3813 ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3814 adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
3820 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3831 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
3837 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3838 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
3840 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
3841 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3842 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
3843 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
3845 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
3846 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
3850 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
3853 nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ? in vmxnet3_alloc_intr_resources()
3854 1 : adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
3855 nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ? in vmxnet3_alloc_intr_resources()
3856 0 : adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
3862 adapter->intr.msix_entries[i].entry = i; in vmxnet3_alloc_intr_resources()
3864 nvec_allocated = vmxnet3_acquire_msix_vectors(adapter, nvec); in vmxnet3_alloc_intr_resources()
3873 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
3874 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
3875 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
3876 netdev_err(adapter->netdev, in vmxnet3_alloc_intr_resources()
3878 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3882 adapter->intr.num_intrs = nvec_allocated; in vmxnet3_alloc_intr_resources()
3887 dev_info(&adapter->pdev->dev, in vmxnet3_alloc_intr_resources()
3891 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
3894 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
3895 if (!pci_enable_msi(adapter->pdev)) { in vmxnet3_alloc_intr_resources()
3896 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3897 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3903 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3904 dev_info(&adapter->netdev->dev, in vmxnet3_alloc_intr_resources()
3906 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
3909 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3914 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
3916 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
3917 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
3918 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
3919 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
3921 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
3928 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
3929 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
3931 netdev_err(adapter->netdev, "tx hang\n"); in vmxnet3_tx_timeout()
3932 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
3939 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
3941 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
3944 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
3949 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
3950 netdev_notice(adapter->netdev, "resetting\n"); in vmxnet3_reset_work()
3951 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
3952 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
3953 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
3955 netdev_info(adapter->netdev, "already closed\n"); in vmxnet3_reset_work()
3959 netif_wake_queue(adapter->netdev); in vmxnet3_reset_work()
3960 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
3991 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
4022 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
4023 adapter->netdev = netdev; in vmxnet3_probe_device()
4024 adapter->pdev = pdev; in vmxnet3_probe_device()
4026 adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE; in vmxnet3_probe_device()
4027 adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE; in vmxnet3_probe_device()
4028 adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE; in vmxnet3_probe_device()
4036 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
4037 adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter, in vmxnet3_probe_device()
4040 if (dma_mapping_error(&adapter->pdev->dev, adapter->adapter_pa)) { in vmxnet3_probe_device()
4045 adapter->shared = dma_alloc_coherent( in vmxnet3_probe_device()
4046 &adapter->pdev->dev, in vmxnet3_probe_device()
4048 &adapter->shared_pa, GFP_KERNEL); in vmxnet3_probe_device()
4049 if (!adapter->shared) { in vmxnet3_probe_device()
4055 err = vmxnet3_alloc_pci_resources(adapter); in vmxnet3_probe_device()
4059 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
4062 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1 << i); in vmxnet3_probe_device()
4063 adapter->version = i + 1; in vmxnet3_probe_device()
4069 "Incompatible h/w version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
4073 dev_dbg(&pdev->dev, "Using device version %d\n", adapter->version); in vmxnet3_probe_device()
4075 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
4077 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
4080 "Incompatible upt version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
4085 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_probe_device()
4086 adapter->devcap_supported[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_DCR); in vmxnet3_probe_device()
4087 adapter->ptcap_supported[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_PTCR); in vmxnet3_probe_device()
4088 if (adapter->devcap_supported[0] & (1UL << VMXNET3_CAP_LARGE_BAR)) { in vmxnet3_probe_device()
4089 adapter->dev_caps[0] = adapter->devcap_supported[0] & in vmxnet3_probe_device()
4092 if (!(adapter->ptcap_supported[0] & (1UL << VMXNET3_DCR_ERROR)) && in vmxnet3_probe_device()
4093 adapter->ptcap_supported[0] & (1UL << VMXNET3_CAP_OOORX_COMP) && in vmxnet3_probe_device()
4094 adapter->devcap_supported[0] & (1UL << VMXNET3_CAP_OOORX_COMP)) { in vmxnet3_probe_device()
4095 adapter->dev_caps[0] |= adapter->devcap_supported[0] & in vmxnet3_probe_device()
4098 if (adapter->dev_caps[0]) in vmxnet3_probe_device()
4099 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DCR, adapter->dev_caps[0]); in vmxnet3_probe_device()
4101 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4102 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DCR0_REG); in vmxnet3_probe_device()
4103 adapter->dev_caps[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_probe_device()
4104 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4107 if (VMXNET3_VERSION_GE_7(adapter) && in vmxnet3_probe_device()
4108 adapter->dev_caps[0] & (1UL << VMXNET3_CAP_LARGE_BAR)) { in vmxnet3_probe_device()
4109 adapter->tx_prod_offset = VMXNET3_REG_LB_TXPROD; in vmxnet3_probe_device()
4110 adapter->rx_prod_offset = VMXNET3_REG_LB_RXPROD; in vmxnet3_probe_device()
4111 adapter->rx_prod2_offset = VMXNET3_REG_LB_RXPROD2; in vmxnet3_probe_device()
4113 adapter->tx_prod_offset = VMXNET3_REG_TXPROD; in vmxnet3_probe_device()
4114 adapter->rx_prod_offset = VMXNET3_REG_RXPROD; in vmxnet3_probe_device()
4115 adapter->rx_prod2_offset = VMXNET3_REG_RXPROD2; in vmxnet3_probe_device()
4118 if (VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_probe_device()
4119 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4120 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_probe_device()
4122 queues = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_probe_device()
4123 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4125 adapter->num_rx_queues = min(num_rx_queues, ((queues >> 8) & 0xff)); in vmxnet3_probe_device()
4126 adapter->num_tx_queues = min(num_tx_queues, (queues & 0xff)); in vmxnet3_probe_device()
4128 adapter->num_rx_queues = min(num_rx_queues, in vmxnet3_probe_device()
4130 adapter->num_tx_queues = min(num_tx_queues, in vmxnet3_probe_device()
4133 if (adapter->num_rx_queues > VMXNET3_MAX_RX_QUEUES || in vmxnet3_probe_device()
4134 adapter->num_tx_queues > VMXNET3_MAX_TX_QUEUES) { in vmxnet3_probe_device()
4135 adapter->queuesExtEnabled = true; in vmxnet3_probe_device()
4137 adapter->queuesExtEnabled = false; in vmxnet3_probe_device()
4140 adapter->queuesExtEnabled = false; in vmxnet3_probe_device()
4143 adapter->num_rx_queues = min(num_rx_queues, in vmxnet3_probe_device()
4145 adapter->num_tx_queues = min(num_tx_queues, in vmxnet3_probe_device()
4150 adapter->num_tx_queues, adapter->num_rx_queues); in vmxnet3_probe_device()
4152 adapter->rx_buf_per_pkt = 1; in vmxnet3_probe_device()
4154 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
4155 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
4156 adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size, in vmxnet3_probe_device()
4157 &adapter->queue_desc_pa, in vmxnet3_probe_device()
4160 if (!adapter->tqd_start) { in vmxnet3_probe_device()
4165 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
4166 adapter->num_tx_queues); in vmxnet3_probe_device()
4167 if (VMXNET3_VERSION_GE_9(adapter)) in vmxnet3_probe_device()
4168 adapter->latencyConf = &adapter->tqd_start->tsConf.latencyConf; in vmxnet3_probe_device()
4170 adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4172 &adapter->pm_conf_pa, in vmxnet3_probe_device()
4174 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
4181 adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4183 &adapter->rss_conf_pa, in vmxnet3_probe_device()
4185 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
4191 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
4192 adapter->coal_conf = in vmxnet3_probe_device()
4193 dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4196 &adapter->coal_conf_pa, in vmxnet3_probe_device()
4198 if (!adapter->coal_conf) { in vmxnet3_probe_device()
4202 adapter->coal_conf->coalMode = VMXNET3_COALESCE_DISABLED; in vmxnet3_probe_device()
4203 adapter->default_coal_mode = true; in vmxnet3_probe_device()
4206 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_probe_device()
4207 adapter->default_rss_fields = true; in vmxnet3_probe_device()
4208 adapter->rss_fields = VMXNET3_RSS_FIELDS_DEFAULT; in vmxnet3_probe_device()
4212 vmxnet3_declare_features(adapter); in vmxnet3_probe_device()
4216 adapter->rxdata_desc_size = VMXNET3_VERSION_GE_3(adapter) ? in vmxnet3_probe_device()
4219 if (adapter->num_tx_queues == adapter->num_rx_queues) in vmxnet3_probe_device()
4220 adapter->share_intr = VMXNET3_INTR_BUDDYSHARE; in vmxnet3_probe_device()
4222 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
4224 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
4227 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
4228 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
4229 adapter->rss = true; in vmxnet3_probe_device()
4234 adapter->rss = false; in vmxnet3_probe_device()
4238 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
4247 if (VMXNET3_VERSION_GE_6(adapter)) in vmxnet3_probe_device()
4252 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
4253 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
4255 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
4257 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
4258 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
4259 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
4263 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
4267 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
4268 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
4274 dev_err(&pdev->dev, "Failed to register adapter\n"); in vmxnet3_probe_device()
4278 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
4282 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
4283 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4285 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_probe_device()
4287 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
4290 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_probe_device()
4291 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_probe_device()
4294 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_probe_device()
4295 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_probe_device()
4297 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_probe_device()
4298 adapter->queue_desc_pa); in vmxnet3_probe_device()
4300 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
4302 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4304 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
4306 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_probe_device()
4318 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
4330 if (!VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_remove_device()
4333 if (VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_remove_device()
4334 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_remove_device()
4335 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_remove_device()
4337 rx_queues = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_remove_device()
4338 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_remove_device()
4349 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
4353 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
4354 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
4355 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_remove_device()
4356 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
4358 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_remove_device()
4361 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_remove_device()
4362 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_remove_device()
4364 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_remove_device()
4365 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_remove_device()
4367 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
4369 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_remove_device()
4370 adapter->queue_desc_pa); in vmxnet3_remove_device()
4371 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
4373 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
4374 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_remove_device()
4382 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_shutdown_device() local
4388 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_shutdown_device()
4392 &adapter->state)) { in vmxnet3_shutdown_device()
4393 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
4396 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
4397 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_shutdown_device()
4399 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
4400 vmxnet3_disable_all_intrs(adapter); in vmxnet3_shutdown_device()
4402 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
4413 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
4426 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
4427 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
4429 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
4430 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
4431 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
4436 pmConf = adapter->pm_conf; in vmxnet3_suspend()
4439 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
4449 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
4499 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
4504 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
4505 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
4507 adapter->shared->devRead.pmConfDesc.confPA = in vmxnet3_suspend()
4508 cpu_to_le64(adapter->pm_conf_pa); in vmxnet3_suspend()
4510 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
4511 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
4513 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
4517 adapter->wol); in vmxnet3_suspend()
4532 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
4545 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
4551 /* Need not check adapter state as other reset tasks cannot run during in vmxnet3_resume()
4554 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
4555 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
4557 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
4558 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_resume()
4559 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_resume()
4561 vmxnet3_reset_dev(adapter); in vmxnet3_resume()
4562 err = vmxnet3_activate_dev(adapter); in vmxnet3_resume()
4566 vmxnet3_force_close(adapter); in vmxnet3_resume()