Lines Matching full:adapter

50 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, const u8 *mac);
56 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_enable_intr() argument
58 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0); in vmxnet3_enable_intr()
63 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_disable_intr() argument
65 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1); in vmxnet3_disable_intr()
73 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_enable_all_intrs() argument
77 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_enable_all_intrs()
78 vmxnet3_enable_intr(adapter, i); in vmxnet3_enable_all_intrs()
79 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_enable_all_intrs()
80 !adapter->queuesExtEnabled) { in vmxnet3_enable_all_intrs()
81 adapter->shared->devRead.intrConf.intrCtrl &= in vmxnet3_enable_all_intrs()
84 adapter->shared->devReadExt.intrConfExt.intrCtrl &= in vmxnet3_enable_all_intrs()
91 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_disable_all_intrs() argument
95 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_disable_all_intrs()
96 !adapter->queuesExtEnabled) { in vmxnet3_disable_all_intrs()
97 adapter->shared->devRead.intrConf.intrCtrl |= in vmxnet3_disable_all_intrs()
100 adapter->shared->devReadExt.intrConfExt.intrCtrl |= in vmxnet3_disable_all_intrs()
103 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_disable_all_intrs()
104 vmxnet3_disable_intr(adapter, i); in vmxnet3_disable_all_intrs()
109 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events) in vmxnet3_ack_events() argument
111 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events); in vmxnet3_ack_events()
116 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stopped() argument
123 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_start() argument
126 netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue); in vmxnet3_tq_start()
131 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_wake() argument
134 netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_wake()
139 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stop() argument
143 netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_stop()
191 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue) in vmxnet3_check_link() argument
197 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_check_link()
198 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); in vmxnet3_check_link()
199 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_check_link()
200 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_check_link()
202 adapter->link_speed = ret >> 16; in vmxnet3_check_link()
209 if (VMXNET3_VERSION_GE_9(adapter) && in vmxnet3_check_link()
210 adapter->link_speed < 10000) in vmxnet3_check_link()
211 adapter->link_speed = adapter->link_speed * 1000; in vmxnet3_check_link()
212 netdev_info(adapter->netdev, "NIC Link is Up %d Mbps\n", in vmxnet3_check_link()
213 adapter->link_speed); in vmxnet3_check_link()
214 netif_carrier_on(adapter->netdev); in vmxnet3_check_link()
217 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
218 vmxnet3_tq_start(&adapter->tx_queue[i], in vmxnet3_check_link()
219 adapter); in vmxnet3_check_link()
222 netdev_info(adapter->netdev, "NIC Link is Down\n"); in vmxnet3_check_link()
223 netif_carrier_off(adapter->netdev); in vmxnet3_check_link()
226 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
227 vmxnet3_tq_stop(&adapter->tx_queue[i], adapter); in vmxnet3_check_link()
233 vmxnet3_process_events(struct vmxnet3_adapter *adapter) in vmxnet3_process_events() argument
237 u32 events = le32_to_cpu(adapter->shared->ecr); in vmxnet3_process_events()
241 vmxnet3_ack_events(adapter, events); in vmxnet3_process_events()
245 vmxnet3_check_link(adapter, true); in vmxnet3_process_events()
249 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_process_events()
250 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_process_events()
252 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_process_events()
254 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_process_events()
255 if (adapter->tqd_start[i].status.stopped) in vmxnet3_process_events()
256 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
258 adapter->netdev->name, i, le32_to_cpu( in vmxnet3_process_events()
259 adapter->tqd_start[i].status.error)); in vmxnet3_process_events()
260 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_process_events()
261 if (adapter->rqd_start[i].status.stopped) in vmxnet3_process_events()
262 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
264 adapter->netdev->name, i, in vmxnet3_process_events()
265 adapter->rqd_start[i].status.error); in vmxnet3_process_events()
267 schedule_work(&adapter->work); in vmxnet3_process_events()
393 struct pci_dev *pdev, struct vmxnet3_adapter *adapter, in vmxnet3_unmap_pkt() argument
436 struct vmxnet3_adapter *adapter) in vmxnet3_tq_tx_complete() argument
453 &gdesc->tcd), tq, adapter->pdev, in vmxnet3_tq_tx_complete()
454 adapter, &bq); in vmxnet3_tq_tx_complete()
464 if (unlikely(vmxnet3_tq_stopped(tq, adapter) && in vmxnet3_tq_tx_complete()
467 netif_carrier_ok(adapter->netdev))) { in vmxnet3_tq_tx_complete()
468 vmxnet3_tq_wake(tq, adapter); in vmxnet3_tq_tx_complete()
478 struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup() argument
493 vmxnet3_unmap_tx_buf(tbi, adapter->pdev); in vmxnet3_tq_cleanup()
521 struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy() argument
524 dma_free_coherent(&adapter->pdev->dev, tq->tx_ring.size * in vmxnet3_tq_destroy()
530 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
536 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
542 dma_free_coherent(&adapter->pdev->dev, tq->comp_ring.size * in vmxnet3_tq_destroy()
554 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy_all() argument
558 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_destroy_all()
559 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter); in vmxnet3_tq_destroy_all()
565 struct vmxnet3_adapter *adapter) in vmxnet3_tq_init() argument
599 struct vmxnet3_adapter *adapter) in vmxnet3_tq_create() argument
604 tq->tx_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
608 netdev_err(adapter->netdev, "failed to allocate tx ring\n"); in vmxnet3_tq_create()
612 tq->data_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
616 netdev_err(adapter->netdev, "failed to allocate tx data ring\n"); in vmxnet3_tq_create()
621 tq->ts_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
625 netdev_err(adapter->netdev, "failed to allocate tx ts ring\n"); in vmxnet3_tq_create()
632 tq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
636 netdev_err(adapter->netdev, "failed to allocate tx comp ring\n"); in vmxnet3_tq_create()
642 dev_to_node(&adapter->pdev->dev)); in vmxnet3_tq_create()
649 vmxnet3_tq_destroy(tq, adapter); in vmxnet3_tq_create()
654 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup_all() argument
658 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_cleanup_all()
659 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter); in vmxnet3_tq_cleanup_all()
670 int num_to_alloc, struct vmxnet3_adapter *adapter) in vmxnet3_rq_alloc_rx_buf() argument
697 rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
706 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
709 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
731 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
734 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
763 netdev_dbg(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
792 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
819 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
846 tbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_map_pkt()
849 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
861 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
888 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
891 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
903 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
932 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
936 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
937 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
961 struct vmxnet3_adapter *adapter) in vmxnet3_parse_hdr() argument
966 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_parse_hdr()
983 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_parse_hdr()
1064 struct vmxnet3_adapter *adapter) in vmxnet3_copy_hdr() argument
1073 netdev_dbg(adapter->netdev, in vmxnet3_copy_hdr()
1143 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
1211 ret = vmxnet3_parse_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1240 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1242 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
1245 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
1251 vmxnet3_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1254 if (vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter)) in vmxnet3_tq_xmit()
1270 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_tq_xmit()
1272 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_tq_xmit()
1290 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_tq_xmit()
1294 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_tq_xmit()
1324 adapter->latencyConf->sampleRate != 0) { in vmxnet3_tq_xmit()
1325 if (vmxnet3_apply_timestamp(tq, adapter->latencyConf->sampleRate)) { in vmxnet3_tq_xmit()
1347 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1357 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1358 adapter->tx_prod_offset + tq->qid * 8, in vmxnet3_tq_xmit()
1373 vmxnet3_create_pp(struct vmxnet3_adapter *adapter, in vmxnet3_create_pp() argument
1376 bool xdp_prog = vmxnet3_xdp_enabled(adapter); in vmxnet3_create_pp()
1382 .dev = &adapter->pdev->dev, in vmxnet3_create_pp()
1394 err = xdp_rxq_info_reg(&rq->xdp_rxq, adapter->netdev, rq->qid, in vmxnet3_create_pp()
1433 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1435 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1437 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1438 adapter, netdev); in vmxnet3_xmit_frame()
1443 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1447 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1491 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1517 vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb, in vmxnet3_get_hdr_len() argument
1573 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1576 adapter->rx_prod_offset, adapter->rx_prod2_offset in vmxnet3_rq_rx_complete()
1617 ring_idx = VMXNET3_GET_RING_IDX(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1627 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1631 if (rcd->sop && rcd->eop && vmxnet3_xdp_enabled(adapter)) { in vmxnet3_rq_rx_complete()
1635 if (VMXNET3_RX_DATA_RING(adapter, rcd->rqID)) { in vmxnet3_rq_rx_complete()
1643 act = vmxnet3_process_xdp(adapter, rq, rcd, rbi, rxd, in vmxnet3_rq_rx_complete()
1671 netdev_dbg(adapter->netdev, in vmxnet3_rq_rx_complete()
1690 VMXNET3_RX_DATA_RING(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1693 if (rxDataRingUsed && vmxnet3_xdp_enabled(adapter)) { in vmxnet3_rq_rx_complete()
1699 act = vmxnet3_process_xdp_small(adapter, rq, in vmxnet3_rq_rx_complete()
1711 new_skb = netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_rx_complete()
1724 if (rxDataRingUsed && adapter->rxdataring_enabled) { in vmxnet3_rq_rx_complete()
1737 dma_map_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1740 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1754 dma_unmap_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1769 if (VMXNET3_VERSION_GE_2(adapter) && in vmxnet3_rq_rx_complete()
1814 new_dma_addr = dma_map_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1818 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1828 dma_unmap_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1846 u32 mtu = adapter->netdev->mtu; in vmxnet3_rq_rx_complete()
1851 (adapter->netdev->features & NETIF_F_RXHASH)) { in vmxnet3_rq_rx_complete()
1874 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1876 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1878 !(adapter->netdev->features & NETIF_F_LRO)) in vmxnet3_rq_rx_complete()
1889 hlen = vmxnet3_get_hdr_len(adapter, skb, in vmxnet3_rq_rx_complete()
1910 if ((adapter->netdev->features & NETIF_F_LRO) && in vmxnet3_rq_rx_complete()
1940 if (!(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_OOORX_COMP))) in vmxnet3_rq_rx_complete()
1971 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
1989 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
2016 dma_unmap_single(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
2022 dma_unmap_page(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
2045 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
2049 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
2050 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
2051 rcu_assign_pointer(adapter->xdp_bpf_prog, NULL); in vmxnet3_rq_cleanup_all()
2056 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
2072 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
2082 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
2089 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
2096 dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size in vmxnet3_rq_destroy()
2108 vmxnet3_rq_destroy_all_rxdataring(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all_rxdataring() argument
2112 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_destroy_all_rxdataring()
2113 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_rq_destroy_all_rxdataring()
2116 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy_all_rxdataring()
2129 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
2137 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
2138 rq->buf_info[0][i].buf_type = vmxnet3_xdp_enabled(adapter) ? in vmxnet3_rq_init()
2141 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
2162 err = vmxnet3_create_pp(adapter, rq, in vmxnet3_rq_init()
2168 adapter) == 0) { in vmxnet3_rq_init()
2176 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
2197 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
2201 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
2202 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
2204 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
2206 adapter->netdev->name, i); in vmxnet3_rq_init_all()
2216 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
2226 &adapter->pdev->dev, sz, in vmxnet3_rq_create()
2230 netdev_err(adapter->netdev, in vmxnet3_rq_create()
2236 if ((adapter->rxdataring_enabled) && (rq->data_ring.desc_size != 0)) { in vmxnet3_rq_create()
2239 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
2243 netdev_err(adapter->netdev, in vmxnet3_rq_create()
2245 adapter->rxdataring_enabled = false; in vmxnet3_rq_create()
2255 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
2259 netdev_err(adapter->netdev, in vmxnet3_rq_create()
2268 rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
2272 netdev_err(adapter->netdev, "failed to allocate rx comp ring\n"); in vmxnet3_rq_create()
2278 dev_to_node(&adapter->pdev->dev)); in vmxnet3_rq_create()
2288 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
2294 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
2298 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_rq_create_all()
2300 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
2301 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
2303 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
2305 adapter->netdev->name, i); in vmxnet3_rq_create_all()
2310 if (!adapter->rxdataring_enabled) in vmxnet3_rq_create_all()
2311 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_rq_create_all()
2315 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
2323 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
2326 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
2327 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
2328 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
2329 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
2331 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
2332 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
2333 adapter, budget); in vmxnet3_do_poll()
2345 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
2349 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
2364 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
2370 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
2372 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
2373 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
2376 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
2380 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
2397 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
2399 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
2400 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2403 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
2405 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
2406 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
2407 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
2410 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
2412 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2427 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
2430 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
2431 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
2454 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
2457 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
2458 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2460 if (adapter->shared->ecr) in vmxnet3_msix_event()
2461 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
2463 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2476 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
2478 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
2479 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
2487 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
2488 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
2490 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
2501 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
2503 switch (adapter->intr.type) { in vmxnet3_netpoll()
2507 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_netpoll()
2508 vmxnet3_msix_rx(0, &adapter->rx_queue[i]); in vmxnet3_netpoll()
2514 vmxnet3_intr(0, adapter->netdev); in vmxnet3_netpoll()
2522 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
2524 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
2529 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2530 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
2531 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
2532 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
2533 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2537 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
2538 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
2540 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2541 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2544 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
2547 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
2553 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
2554 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2555 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2560 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2564 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2567 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2568 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2569 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
2570 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2572 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2573 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2576 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
2577 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
2579 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2582 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
2586 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
2590 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2593 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
2597 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2598 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
2599 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
2602 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2603 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
2604 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
2605 adapter->netdev); in vmxnet3_request_irqs()
2611 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2616 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2617 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
2619 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
2620 rq->dataRingQid = i + 2 * adapter->num_rx_queues; in vmxnet3_request_irqs()
2626 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2627 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
2628 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2629 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2630 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2633 netdev_info(adapter->netdev, in vmxnet3_request_irqs()
2643 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
2645 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
2654 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
2655 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
2657 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
2658 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
2663 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
2665 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
2669 adapter->netdev); in vmxnet3_free_irqs()
2675 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2678 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2687 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
2689 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
2695 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
2703 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
2706 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
2710 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2711 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
2713 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2716 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
2725 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
2728 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
2732 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2733 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
2735 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2738 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
2770 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
2773 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2780 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2785 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2801 &adapter->pdev->dev, in vmxnet3_set_mc()
2805 if (!dma_mapping_error(&adapter->pdev->dev, in vmxnet3_set_mc()
2825 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2828 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2830 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2834 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2836 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2839 dma_unmap_single(&adapter->pdev->dev, new_table_pa, in vmxnet3_set_mc()
2845 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2849 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2850 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2855 * Set up driver_shared based on settings in adapter.
2859 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2861 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2884 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa); in vmxnet3_setup_driver_shared()
2888 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2891 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2895 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in vmxnet3_setup_driver_shared()
2898 if (adapter->netdev->features & (NETIF_F_GSO_UDP_TUNNEL | in vmxnet3_setup_driver_shared()
2902 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2903 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2905 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2906 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2909 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2910 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2911 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2912 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2913 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2924 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_setup_driver_shared()
2925 tqtsc = &adapter->tqd_start[i].tsConf; in vmxnet3_setup_driver_shared()
2932 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2933 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2934 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2935 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2945 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_setup_driver_shared()
2951 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_setup_driver_shared()
2952 rqtsc = &adapter->rqd_start[i].tsConf; in vmxnet3_setup_driver_shared()
2959 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2961 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2962 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2965 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2977 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
2982 cpu_to_le64(adapter->rss_conf_pa); in vmxnet3_setup_driver_shared()
2988 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_setup_driver_shared()
2989 !adapter->queuesExtEnabled) { in vmxnet3_setup_driver_shared()
2990 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2992 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2993 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2994 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2996 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2999 devReadExt->intrConfExt.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
3001 devReadExt->intrConfExt.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
3002 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
3003 devReadExt->intrConfExt.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
3005 devReadExt->intrConfExt.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
3011 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
3012 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
3018 vmxnet3_init_bufsize(struct vmxnet3_adapter *adapter) in vmxnet3_init_bufsize() argument
3020 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_bufsize()
3024 if (!VMXNET3_VERSION_GE_7(adapter)) in vmxnet3_init_bufsize()
3027 cmdInfo->ringBufSize = adapter->ringBufSize; in vmxnet3_init_bufsize()
3028 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_bufsize()
3029 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_bufsize()
3031 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_bufsize()
3035 vmxnet3_init_coalesce(struct vmxnet3_adapter *adapter) in vmxnet3_init_coalesce() argument
3037 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_coalesce()
3041 if (!VMXNET3_VERSION_GE_3(adapter)) in vmxnet3_init_coalesce()
3044 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
3047 cpu_to_le32(sizeof(*adapter->coal_conf)); in vmxnet3_init_coalesce()
3048 cmdInfo->varConf.confPA = cpu_to_le64(adapter->coal_conf_pa); in vmxnet3_init_coalesce()
3050 if (adapter->default_coal_mode) { in vmxnet3_init_coalesce()
3051 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
3054 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
3058 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
3062 vmxnet3_init_rssfields(struct vmxnet3_adapter *adapter) in vmxnet3_init_rssfields() argument
3064 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_rssfields()
3068 if (!VMXNET3_VERSION_GE_4(adapter)) in vmxnet3_init_rssfields()
3071 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
3073 if (adapter->default_rss_fields) { in vmxnet3_init_rssfields()
3074 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
3076 adapter->rss_fields = in vmxnet3_init_rssfields()
3077 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
3079 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_init_rssfields()
3080 if ((adapter->rss_fields & VMXNET3_RSS_FIELDS_UDPIP4 || in vmxnet3_init_rssfields()
3081 adapter->rss_fields & VMXNET3_RSS_FIELDS_UDPIP6) && in vmxnet3_init_rssfields()
3082 vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_init_rssfields()
3084 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_UDP_RSS; in vmxnet3_init_rssfields()
3086 adapter->dev_caps[0] &= ~(1UL << VMXNET3_CAP_UDP_RSS); in vmxnet3_init_rssfields()
3089 if ((adapter->rss_fields & VMXNET3_RSS_FIELDS_ESPIP4) && in vmxnet3_init_rssfields()
3090 vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_init_rssfields()
3092 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_ESP_RSS_IPV4; in vmxnet3_init_rssfields()
3094 adapter->dev_caps[0] &= ~(1UL << VMXNET3_CAP_ESP_RSS_IPV4); in vmxnet3_init_rssfields()
3097 if ((adapter->rss_fields & VMXNET3_RSS_FIELDS_ESPIP6) && in vmxnet3_init_rssfields()
3098 vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_init_rssfields()
3100 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_ESP_RSS_IPV6; in vmxnet3_init_rssfields()
3102 adapter->dev_caps[0] &= ~(1UL << VMXNET3_CAP_ESP_RSS_IPV6); in vmxnet3_init_rssfields()
3105 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DCR, adapter->dev_caps[0]); in vmxnet3_init_rssfields()
3106 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DCR0_REG); in vmxnet3_init_rssfields()
3107 adapter->dev_caps[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
3109 cmdInfo->setRssFields = adapter->rss_fields; in vmxnet3_init_rssfields()
3110 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
3115 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
3117 adapter->rss_fields = in vmxnet3_init_rssfields()
3118 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
3121 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
3125 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
3131 netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
3132 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
3133 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
3134 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
3135 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
3136 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
3138 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
3139 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
3141 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
3146 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
3148 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
3153 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
3155 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
3156 adapter->shared_pa)); in vmxnet3_activate_dev()
3157 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
3158 adapter->shared_pa)); in vmxnet3_activate_dev()
3159 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
3160 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
3162 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
3163 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
3166 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
3172 vmxnet3_init_bufsize(adapter); in vmxnet3_activate_dev()
3173 vmxnet3_init_coalesce(adapter); in vmxnet3_activate_dev()
3174 vmxnet3_init_rssfields(adapter); in vmxnet3_activate_dev()
3176 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
3177 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
3178 adapter->rx_prod_offset + i * VMXNET3_REG_ALIGN, in vmxnet3_activate_dev()
3179 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
3180 VMXNET3_WRITE_BAR0_REG(adapter, (adapter->rx_prod2_offset + in vmxnet3_activate_dev()
3182 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
3186 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
3192 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
3193 netif_tx_wake_all_queues(adapter->netdev); in vmxnet3_activate_dev()
3194 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
3195 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
3196 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
3197 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
3201 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
3202 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
3203 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
3207 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
3213 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
3216 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
3217 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
3218 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
3223 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
3227 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
3231 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
3232 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
3234 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
3235 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
3237 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
3238 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
3239 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
3240 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
3241 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
3243 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
3244 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
3245 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
3251 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, const u8 *mac) in vmxnet3_write_mac_addr() argument
3256 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
3259 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
3267 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
3270 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
3279 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_pci_resources() argument
3283 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
3287 dev_err(&pdev->dev, "Failed to enable adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
3295 "Failed to request region for adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
3303 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
3304 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
3312 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
3313 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
3321 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
3331 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
3333 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
3335 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
3336 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
3337 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
3338 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
3343 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
3347 if (!VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_adjust_rx_ring_size()
3348 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
3350 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
3352 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
3353 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
3355 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
3357 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
3358 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
3360 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
3363 adapter->skb_buf_size = min((int)adapter->netdev->mtu + VMXNET3_MAX_ETH_HDR_SIZE, in vmxnet3_adjust_rx_ring_size()
3365 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
3366 adapter->ringBufSize.ring1BufSizeType0 = cpu_to_le16(adapter->skb_buf_size); in vmxnet3_adjust_rx_ring_size()
3367 adapter->ringBufSize.ring1BufSizeType1 = 0; in vmxnet3_adjust_rx_ring_size()
3368 adapter->ringBufSize.ring2BufSizeType1 = cpu_to_le16(PAGE_SIZE); in vmxnet3_adjust_rx_ring_size()
3375 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
3376 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
3380 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
3385 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_adjust_rx_ring_size()
3391 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
3392 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
3402 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
3408 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
3409 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
3414 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
3416 tq->adapter = adapter; in vmxnet3_create_queues()
3418 tq->tx_ts_desc_size = adapter->tx_ts_desc_size; in vmxnet3_create_queues()
3420 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
3429 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
3430 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
3431 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
3433 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_create_queues()
3434 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
3435 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
3438 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
3439 rq->adapter = adapter; in vmxnet3_create_queues()
3441 rq->rx_ts_desc_size = adapter->rx_ts_desc_size; in vmxnet3_create_queues()
3442 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
3445 netdev_err(adapter->netdev, in vmxnet3_create_queues()
3450 netdev_info(adapter->netdev, in vmxnet3_create_queues()
3453 adapter->num_rx_queues = i; in vmxnet3_create_queues()
3460 if (!adapter->rxdataring_enabled) in vmxnet3_create_queues()
3461 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_create_queues()
3465 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
3472 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
3475 adapter = netdev_priv(netdev); in vmxnet3_open()
3477 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
3478 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
3480 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_open()
3485 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3486 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3488 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_open()
3489 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3495 adapter->txdata_desc_size = in vmxnet3_open()
3498 adapter->txdata_desc_size = txdata_desc_size; in vmxnet3_open()
3500 if (VMXNET3_VERSION_GE_9(adapter)) in vmxnet3_open()
3501 adapter->rxdata_desc_size = (ret >> 16) & 0xffff; in vmxnet3_open()
3503 adapter->txdata_desc_size = sizeof(struct Vmxnet3_TxDataDesc); in vmxnet3_open()
3506 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_open()
3512 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3513 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3515 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_open()
3516 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3527 adapter->tx_ts_desc_size = tx_ts_desc_size; in vmxnet3_open()
3528 adapter->rx_ts_desc_size = rx_ts_desc_size; in vmxnet3_open()
3530 adapter->tx_ts_desc_size = 0; in vmxnet3_open()
3531 adapter->rx_ts_desc_size = 0; in vmxnet3_open()
3534 err = vmxnet3_create_queues(adapter, in vmxnet3_open()
3535 adapter->tx_ring_size, in vmxnet3_open()
3536 adapter->rx_ring_size, in vmxnet3_open()
3537 adapter->rx_ring2_size, in vmxnet3_open()
3538 adapter->txdata_desc_size, in vmxnet3_open()
3539 adapter->rxdata_desc_size); in vmxnet3_open()
3543 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
3550 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
3551 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
3560 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
3566 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
3569 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
3571 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
3572 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
3574 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
3582 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
3590 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
3593 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
3594 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
3599 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_force_close()
3600 dev_close(adapter->netdev); in vmxnet3_force_close()
3607 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
3616 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
3620 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
3621 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
3624 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
3625 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
3626 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
3634 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
3644 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
3646 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
3653 vmxnet3_declare_features(struct vmxnet3_adapter *adapter) in vmxnet3_declare_features() argument
3655 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
3658 if (VMXNET3_VERSION_GE_9(adapter)) { in vmxnet3_declare_features()
3659 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3660 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_declare_features()
3662 adapter->disabledOffloads = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_declare_features()
3663 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3671 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_declare_features()
3682 if (adapter->disabledOffloads & VMXNET3_OFFLOAD_TSO) { in vmxnet3_declare_features()
3687 if (adapter->disabledOffloads & VMXNET3_OFFLOAD_LRO) { in vmxnet3_declare_features()
3692 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_declare_features()
3695 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3697 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_GENEVE_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3699 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3701 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_VXLAN_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3703 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3705 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_GENEVE_TSO; in vmxnet3_declare_features()
3707 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3709 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_VXLAN_TSO; in vmxnet3_declare_features()
3711 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3713 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_GENEVE_OUTER_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3715 if (vmxnet3_check_ptcapability(adapter->ptcap_supported[0], in vmxnet3_declare_features()
3717 adapter->dev_caps[0] |= 1UL << VMXNET3_CAP_VXLAN_OUTER_CHECKSUM_OFFLOAD; in vmxnet3_declare_features()
3720 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DCR, adapter->dev_caps[0]); in vmxnet3_declare_features()
3721 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3722 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DCR0_REG); in vmxnet3_declare_features()
3723 adapter->dev_caps[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_declare_features()
3724 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_declare_features()
3726 if (!(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_GENEVE_CHECKSUM_OFFLOAD)) && in vmxnet3_declare_features()
3727 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_VXLAN_CHECKSUM_OFFLOAD)) && in vmxnet3_declare_features()
3728 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_GENEVE_TSO)) && in vmxnet3_declare_features()
3729 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_VXLAN_TSO))) { in vmxnet3_declare_features()
3733 if (!(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_GENEVE_OUTER_CHECKSUM_OFFLOAD)) && in vmxnet3_declare_features()
3734 !(adapter->dev_caps[0] & (1UL << VMXNET3_CAP_VXLAN_OUTER_CHECKSUM_OFFLOAD))) { in vmxnet3_declare_features()
3748 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
3752 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
3755 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
3772 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec) in vmxnet3_acquire_msix_vectors() argument
3774 int ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3775 adapter->intr.msix_entries, nvec, nvec); in vmxnet3_acquire_msix_vectors()
3778 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3782 ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3783 adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
3789 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3800 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
3806 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3807 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
3809 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
3810 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3811 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
3812 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
3814 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
3815 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
3819 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
3822 nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ? in vmxnet3_alloc_intr_resources()
3823 1 : adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
3824 nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ? in vmxnet3_alloc_intr_resources()
3825 0 : adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
3831 adapter->intr.msix_entries[i].entry = i; in vmxnet3_alloc_intr_resources()
3833 nvec_allocated = vmxnet3_acquire_msix_vectors(adapter, nvec); in vmxnet3_alloc_intr_resources()
3842 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
3843 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
3844 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
3845 netdev_err(adapter->netdev, in vmxnet3_alloc_intr_resources()
3847 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3851 adapter->intr.num_intrs = nvec_allocated; in vmxnet3_alloc_intr_resources()
3856 dev_info(&adapter->pdev->dev, in vmxnet3_alloc_intr_resources()
3860 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
3863 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
3864 if (!pci_enable_msi(adapter->pdev)) { in vmxnet3_alloc_intr_resources()
3865 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3866 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3872 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3873 dev_info(&adapter->netdev->dev, in vmxnet3_alloc_intr_resources()
3875 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
3878 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3883 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
3885 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
3886 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
3887 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
3888 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
3890 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
3897 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
3898 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
3900 netdev_err(adapter->netdev, "tx hang\n"); in vmxnet3_tx_timeout()
3901 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
3908 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
3910 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
3913 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
3918 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
3919 netdev_notice(adapter->netdev, "resetting\n"); in vmxnet3_reset_work()
3920 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
3921 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
3922 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
3924 netdev_info(adapter->netdev, "already closed\n"); in vmxnet3_reset_work()
3928 netif_wake_queue(adapter->netdev); in vmxnet3_reset_work()
3929 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
3960 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
3991 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
3992 adapter->netdev = netdev; in vmxnet3_probe_device()
3993 adapter->pdev = pdev; in vmxnet3_probe_device()
3995 adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE; in vmxnet3_probe_device()
3996 adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE; in vmxnet3_probe_device()
3997 adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE; in vmxnet3_probe_device()
4005 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
4006 adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter, in vmxnet3_probe_device()
4009 if (dma_mapping_error(&adapter->pdev->dev, adapter->adapter_pa)) { in vmxnet3_probe_device()
4014 adapter->shared = dma_alloc_coherent( in vmxnet3_probe_device()
4015 &adapter->pdev->dev, in vmxnet3_probe_device()
4017 &adapter->shared_pa, GFP_KERNEL); in vmxnet3_probe_device()
4018 if (!adapter->shared) { in vmxnet3_probe_device()
4024 err = vmxnet3_alloc_pci_resources(adapter); in vmxnet3_probe_device()
4028 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
4031 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1 << i); in vmxnet3_probe_device()
4032 adapter->version = i + 1; in vmxnet3_probe_device()
4038 "Incompatible h/w version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
4042 dev_dbg(&pdev->dev, "Using device version %d\n", adapter->version); in vmxnet3_probe_device()
4044 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
4046 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
4049 "Incompatible upt version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
4054 if (VMXNET3_VERSION_GE_7(adapter)) { in vmxnet3_probe_device()
4055 adapter->devcap_supported[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_DCR); in vmxnet3_probe_device()
4056 adapter->ptcap_supported[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_PTCR); in vmxnet3_probe_device()
4057 if (adapter->devcap_supported[0] & (1UL << VMXNET3_CAP_LARGE_BAR)) { in vmxnet3_probe_device()
4058 adapter->dev_caps[0] = adapter->devcap_supported[0] & in vmxnet3_probe_device()
4061 if (!(adapter->ptcap_supported[0] & (1UL << VMXNET3_DCR_ERROR)) && in vmxnet3_probe_device()
4062 adapter->ptcap_supported[0] & (1UL << VMXNET3_CAP_OOORX_COMP) && in vmxnet3_probe_device()
4063 adapter->devcap_supported[0] & (1UL << VMXNET3_CAP_OOORX_COMP)) { in vmxnet3_probe_device()
4064 adapter->dev_caps[0] |= adapter->devcap_supported[0] & in vmxnet3_probe_device()
4067 if (adapter->dev_caps[0]) in vmxnet3_probe_device()
4068 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DCR, adapter->dev_caps[0]); in vmxnet3_probe_device()
4070 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4071 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_DCR0_REG); in vmxnet3_probe_device()
4072 adapter->dev_caps[0] = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_probe_device()
4073 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4076 if (VMXNET3_VERSION_GE_7(adapter) && in vmxnet3_probe_device()
4077 adapter->dev_caps[0] & (1UL << VMXNET3_CAP_LARGE_BAR)) { in vmxnet3_probe_device()
4078 adapter->tx_prod_offset = VMXNET3_REG_LB_TXPROD; in vmxnet3_probe_device()
4079 adapter->rx_prod_offset = VMXNET3_REG_LB_RXPROD; in vmxnet3_probe_device()
4080 adapter->rx_prod2_offset = VMXNET3_REG_LB_RXPROD2; in vmxnet3_probe_device()
4082 adapter->tx_prod_offset = VMXNET3_REG_TXPROD; in vmxnet3_probe_device()
4083 adapter->rx_prod_offset = VMXNET3_REG_RXPROD; in vmxnet3_probe_device()
4084 adapter->rx_prod2_offset = VMXNET3_REG_RXPROD2; in vmxnet3_probe_device()
4087 if (VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_probe_device()
4088 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4089 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_probe_device()
4091 queues = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_probe_device()
4092 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
4094 adapter->num_rx_queues = min(num_rx_queues, ((queues >> 8) & 0xff)); in vmxnet3_probe_device()
4095 adapter->num_tx_queues = min(num_tx_queues, (queues & 0xff)); in vmxnet3_probe_device()
4097 adapter->num_rx_queues = min(num_rx_queues, in vmxnet3_probe_device()
4099 adapter->num_tx_queues = min(num_tx_queues, in vmxnet3_probe_device()
4102 if (adapter->num_rx_queues > VMXNET3_MAX_RX_QUEUES || in vmxnet3_probe_device()
4103 adapter->num_tx_queues > VMXNET3_MAX_TX_QUEUES) { in vmxnet3_probe_device()
4104 adapter->queuesExtEnabled = true; in vmxnet3_probe_device()
4106 adapter->queuesExtEnabled = false; in vmxnet3_probe_device()
4109 adapter->queuesExtEnabled = false; in vmxnet3_probe_device()
4112 adapter->num_rx_queues = min(num_rx_queues, in vmxnet3_probe_device()
4114 adapter->num_tx_queues = min(num_tx_queues, in vmxnet3_probe_device()
4119 adapter->num_tx_queues, adapter->num_rx_queues); in vmxnet3_probe_device()
4121 adapter->rx_buf_per_pkt = 1; in vmxnet3_probe_device()
4123 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
4124 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
4125 adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size, in vmxnet3_probe_device()
4126 &adapter->queue_desc_pa, in vmxnet3_probe_device()
4129 if (!adapter->tqd_start) { in vmxnet3_probe_device()
4134 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
4135 adapter->num_tx_queues); in vmxnet3_probe_device()
4136 if (VMXNET3_VERSION_GE_9(adapter)) in vmxnet3_probe_device()
4137 adapter->latencyConf = &adapter->tqd_start->tsConf.latencyConf; in vmxnet3_probe_device()
4139 adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4141 &adapter->pm_conf_pa, in vmxnet3_probe_device()
4143 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
4150 adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4152 &adapter->rss_conf_pa, in vmxnet3_probe_device()
4154 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
4160 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
4161 adapter->coal_conf = in vmxnet3_probe_device()
4162 dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4165 &adapter->coal_conf_pa, in vmxnet3_probe_device()
4167 if (!adapter->coal_conf) { in vmxnet3_probe_device()
4171 adapter->coal_conf->coalMode = VMXNET3_COALESCE_DISABLED; in vmxnet3_probe_device()
4172 adapter->default_coal_mode = true; in vmxnet3_probe_device()
4175 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_probe_device()
4176 adapter->default_rss_fields = true; in vmxnet3_probe_device()
4177 adapter->rss_fields = VMXNET3_RSS_FIELDS_DEFAULT; in vmxnet3_probe_device()
4181 vmxnet3_declare_features(adapter); in vmxnet3_probe_device()
4185 adapter->rxdata_desc_size = VMXNET3_VERSION_GE_3(adapter) ? in vmxnet3_probe_device()
4188 if (adapter->num_tx_queues == adapter->num_rx_queues) in vmxnet3_probe_device()
4189 adapter->share_intr = VMXNET3_INTR_BUDDYSHARE; in vmxnet3_probe_device()
4191 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
4193 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
4196 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
4197 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
4198 adapter->rss = true; in vmxnet3_probe_device()
4203 adapter->rss = false; in vmxnet3_probe_device()
4207 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
4216 if (VMXNET3_VERSION_GE_6(adapter)) in vmxnet3_probe_device()
4221 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
4222 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
4224 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
4226 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
4227 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
4228 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
4232 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
4236 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
4237 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
4243 dev_err(&pdev->dev, "Failed to register adapter\n"); in vmxnet3_probe_device()
4247 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
4251 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
4252 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4254 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_probe_device()
4256 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
4259 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_probe_device()
4260 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_probe_device()
4263 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_probe_device()
4264 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_probe_device()
4266 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_probe_device()
4267 adapter->queue_desc_pa); in vmxnet3_probe_device()
4269 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
4271 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
4273 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
4275 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_probe_device()
4287 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
4299 if (!VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_remove_device()
4302 if (VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_remove_device()
4303 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_remove_device()
4304 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_remove_device()
4306 rx_queues = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_remove_device()
4307 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_remove_device()
4318 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
4322 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
4323 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
4324 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_remove_device()
4325 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
4327 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_remove_device()
4330 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_remove_device()
4331 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_remove_device()
4333 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_remove_device()
4334 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_remove_device()
4336 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
4338 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_remove_device()
4339 adapter->queue_desc_pa); in vmxnet3_remove_device()
4340 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
4342 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
4343 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_remove_device()
4351 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_shutdown_device() local
4357 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_shutdown_device()
4361 &adapter->state)) { in vmxnet3_shutdown_device()
4362 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
4365 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
4366 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_shutdown_device()
4368 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
4369 vmxnet3_disable_all_intrs(adapter); in vmxnet3_shutdown_device()
4371 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
4382 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
4395 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
4396 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
4398 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
4399 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
4400 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
4405 pmConf = adapter->pm_conf; in vmxnet3_suspend()
4408 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
4418 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
4468 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
4473 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
4474 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
4476 adapter->shared->devRead.pmConfDesc.confPA = in vmxnet3_suspend()
4477 cpu_to_le64(adapter->pm_conf_pa); in vmxnet3_suspend()
4479 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
4480 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
4482 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
4486 adapter->wol); in vmxnet3_suspend()
4501 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
4514 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
4520 /* Need not check adapter state as other reset tasks cannot run during in vmxnet3_resume()
4523 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
4524 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
4526 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
4527 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_resume()
4528 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_resume()
4530 vmxnet3_reset_dev(adapter); in vmxnet3_resume()
4531 err = vmxnet3_activate_dev(adapter); in vmxnet3_resume()
4535 vmxnet3_force_close(adapter); in vmxnet3_resume()