Lines Matching refs:adapter

49 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
55 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_enable_intr() argument
57 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0); in vmxnet3_enable_intr()
62 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_disable_intr() argument
64 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1); in vmxnet3_disable_intr()
72 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_enable_all_intrs() argument
76 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_enable_all_intrs()
77 vmxnet3_enable_intr(adapter, i); in vmxnet3_enable_all_intrs()
78 adapter->shared->devRead.intrConf.intrCtrl &= in vmxnet3_enable_all_intrs()
84 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_disable_all_intrs() argument
88 adapter->shared->devRead.intrConf.intrCtrl |= in vmxnet3_disable_all_intrs()
90 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_disable_all_intrs()
91 vmxnet3_disable_intr(adapter, i); in vmxnet3_disable_all_intrs()
96 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events) in vmxnet3_ack_events() argument
98 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events); in vmxnet3_ack_events()
103 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stopped() argument
110 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_start() argument
113 netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue); in vmxnet3_tq_start()
118 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_wake() argument
121 netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_wake()
126 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stop() argument
130 netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_stop()
138 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue) in vmxnet3_check_link() argument
144 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_check_link()
145 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); in vmxnet3_check_link()
146 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_check_link()
147 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_check_link()
149 adapter->link_speed = ret >> 16; in vmxnet3_check_link()
151 netdev_info(adapter->netdev, "NIC Link is Up %d Mbps\n", in vmxnet3_check_link()
152 adapter->link_speed); in vmxnet3_check_link()
153 netif_carrier_on(adapter->netdev); in vmxnet3_check_link()
156 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
157 vmxnet3_tq_start(&adapter->tx_queue[i], in vmxnet3_check_link()
158 adapter); in vmxnet3_check_link()
161 netdev_info(adapter->netdev, "NIC Link is Down\n"); in vmxnet3_check_link()
162 netif_carrier_off(adapter->netdev); in vmxnet3_check_link()
165 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
166 vmxnet3_tq_stop(&adapter->tx_queue[i], adapter); in vmxnet3_check_link()
172 vmxnet3_process_events(struct vmxnet3_adapter *adapter) in vmxnet3_process_events() argument
176 u32 events = le32_to_cpu(adapter->shared->ecr); in vmxnet3_process_events()
180 vmxnet3_ack_events(adapter, events); in vmxnet3_process_events()
184 vmxnet3_check_link(adapter, true); in vmxnet3_process_events()
188 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_process_events()
189 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_process_events()
191 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_process_events()
193 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_process_events()
194 if (adapter->tqd_start[i].status.stopped) in vmxnet3_process_events()
195 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
197 adapter->netdev->name, i, le32_to_cpu( in vmxnet3_process_events()
198 adapter->tqd_start[i].status.error)); in vmxnet3_process_events()
199 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_process_events()
200 if (adapter->rqd_start[i].status.stopped) in vmxnet3_process_events()
201 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
203 adapter->netdev->name, i, in vmxnet3_process_events()
204 adapter->rqd_start[i].status.error); in vmxnet3_process_events()
206 schedule_work(&adapter->work); in vmxnet3_process_events()
330 struct pci_dev *pdev, struct vmxnet3_adapter *adapter) in vmxnet3_unmap_pkt() argument
365 struct vmxnet3_adapter *adapter) in vmxnet3_tq_tx_complete() argument
378 &gdesc->tcd), tq, adapter->pdev, in vmxnet3_tq_tx_complete()
379 adapter); in vmxnet3_tq_tx_complete()
387 if (unlikely(vmxnet3_tq_stopped(tq, adapter) && in vmxnet3_tq_tx_complete()
390 netif_carrier_ok(adapter->netdev))) { in vmxnet3_tq_tx_complete()
391 vmxnet3_tq_wake(tq, adapter); in vmxnet3_tq_tx_complete()
401 struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup() argument
410 vmxnet3_unmap_tx_buf(tbi, adapter->pdev); in vmxnet3_tq_cleanup()
434 struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy() argument
437 dma_free_coherent(&adapter->pdev->dev, tq->tx_ring.size * in vmxnet3_tq_destroy()
443 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
449 dma_free_coherent(&adapter->pdev->dev, tq->comp_ring.size * in vmxnet3_tq_destroy()
455 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
465 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy_all() argument
469 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_destroy_all()
470 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter); in vmxnet3_tq_destroy_all()
476 struct vmxnet3_adapter *adapter) in vmxnet3_tq_init() argument
506 struct vmxnet3_adapter *adapter) in vmxnet3_tq_create() argument
513 tq->tx_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
517 netdev_err(adapter->netdev, "failed to allocate tx ring\n"); in vmxnet3_tq_create()
521 tq->data_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
525 netdev_err(adapter->netdev, "failed to allocate tx data ring\n"); in vmxnet3_tq_create()
529 tq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
533 netdev_err(adapter->netdev, "failed to allocate tx comp ring\n"); in vmxnet3_tq_create()
538 tq->buf_info = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_tq_create()
546 vmxnet3_tq_destroy(tq, adapter); in vmxnet3_tq_create()
551 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup_all() argument
555 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_cleanup_all()
556 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter); in vmxnet3_tq_cleanup_all()
567 int num_to_alloc, struct vmxnet3_adapter *adapter) in vmxnet3_rq_alloc_rx_buf() argument
583 rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
592 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
595 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
616 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
619 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
645 netdev_dbg(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
676 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
703 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
730 tbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_map_pkt()
733 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
745 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
772 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
775 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
787 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
811 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
815 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
816 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
840 struct vmxnet3_adapter *adapter) in vmxnet3_parse_hdr() argument
845 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_parse_hdr()
862 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_parse_hdr()
943 struct vmxnet3_adapter *adapter) in vmxnet3_copy_hdr() argument
952 netdev_dbg(adapter->netdev, in vmxnet3_copy_hdr()
1022 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
1073 ret = vmxnet3_parse_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1102 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1104 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
1107 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
1113 vmxnet3_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1116 if (vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter)) in vmxnet3_tq_xmit()
1132 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_tq_xmit()
1147 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_tq_xmit()
1189 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1199 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1218 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1220 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1222 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1223 adapter, netdev); in vmxnet3_xmit_frame()
1228 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1232 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1268 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1294 vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb, in vmxnet3_get_hdr_len() argument
1350 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1390 ring_idx = VMXNET3_GET_RING_IDX(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1400 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1418 netdev_dbg(adapter->netdev, in vmxnet3_rq_rx_complete()
1428 VMXNET3_RX_DATA_RING(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1430 new_skb = netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_rx_complete()
1456 dma_map_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1459 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1473 dma_unmap_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1487 (adapter->netdev->features & NETIF_F_RXHASH)) in vmxnet3_rq_rx_complete()
1494 if (VMXNET3_VERSION_GE_2(adapter) && in vmxnet3_rq_rx_complete()
1534 new_dma_addr = dma_map_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1538 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1548 dma_unmap_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1565 u32 mtu = adapter->netdev->mtu; in vmxnet3_rq_rx_complete()
1568 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1570 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1572 !(adapter->netdev->features & NETIF_F_LRO)) in vmxnet3_rq_rx_complete()
1583 hlen = vmxnet3_get_hdr_len(adapter, skb, in vmxnet3_rq_rx_complete()
1603 if (adapter->netdev->features & NETIF_F_LRO) in vmxnet3_rq_rx_complete()
1636 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
1652 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
1667 dma_unmap_single(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1673 dma_unmap_page(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1691 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
1695 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
1696 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
1701 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
1717 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1727 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1734 dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size in vmxnet3_rq_destroy()
1743 dma_free_coherent(&adapter->pdev->dev, sz, rq->buf_info[0], in vmxnet3_rq_destroy()
1750 vmxnet3_rq_destroy_all_rxdataring(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all_rxdataring() argument
1754 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_destroy_all_rxdataring()
1755 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_rq_destroy_all_rxdataring()
1758 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy_all_rxdataring()
1771 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
1779 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
1781 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
1801 adapter) == 0) { in vmxnet3_rq_init()
1805 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
1822 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
1826 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
1827 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
1829 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
1831 adapter->netdev->name, i); in vmxnet3_rq_init_all()
1841 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
1851 &adapter->pdev->dev, sz, in vmxnet3_rq_create()
1855 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1861 if ((adapter->rxdataring_enabled) && (rq->data_ring.desc_size != 0)) { in vmxnet3_rq_create()
1864 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1868 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1870 adapter->rxdataring_enabled = false; in vmxnet3_rq_create()
1878 rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1882 netdev_err(adapter->netdev, "failed to allocate rx comp ring\n"); in vmxnet3_rq_create()
1888 bi = dma_alloc_coherent(&adapter->pdev->dev, sz, &rq->buf_info_pa, in vmxnet3_rq_create()
1899 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
1905 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
1909 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_rq_create_all()
1911 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
1912 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
1914 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
1916 adapter->netdev->name, i); in vmxnet3_rq_create_all()
1921 if (!adapter->rxdataring_enabled) in vmxnet3_rq_create_all()
1922 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_rq_create_all()
1926 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
1934 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
1937 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
1938 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
1939 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
1940 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
1942 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
1943 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
1944 adapter, budget); in vmxnet3_do_poll()
1956 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
1960 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
1975 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
1981 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
1983 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
1984 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
1987 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
1991 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
2008 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
2010 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
2011 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2014 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
2016 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
2017 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
2018 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
2021 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
2023 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2038 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
2041 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
2042 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
2065 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
2068 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
2069 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2071 if (adapter->shared->ecr) in vmxnet3_msix_event()
2072 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
2074 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2087 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
2089 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
2090 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
2098 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
2099 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
2101 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
2112 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
2114 switch (adapter->intr.type) { in vmxnet3_netpoll()
2118 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_netpoll()
2119 vmxnet3_msix_rx(0, &adapter->rx_queue[i]); in vmxnet3_netpoll()
2125 vmxnet3_intr(0, adapter->netdev); in vmxnet3_netpoll()
2133 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
2135 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
2140 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2141 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
2142 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
2143 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
2144 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2148 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
2149 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
2151 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2152 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2155 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
2158 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
2164 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
2165 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2166 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2171 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2175 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2178 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2179 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2180 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
2181 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2183 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2184 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2187 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
2188 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
2190 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2193 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
2197 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
2201 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2204 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
2208 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2209 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
2210 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
2213 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2214 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
2215 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
2216 adapter->netdev); in vmxnet3_request_irqs()
2222 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2227 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2228 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
2230 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
2231 rq->dataRingQid = i + 2 * adapter->num_rx_queues; in vmxnet3_request_irqs()
2237 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2238 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
2239 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2240 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2241 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2244 netdev_info(adapter->netdev, in vmxnet3_request_irqs()
2254 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
2256 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
2265 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
2266 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
2268 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
2269 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
2274 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
2276 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
2280 adapter->netdev); in vmxnet3_free_irqs()
2286 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2289 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2298 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
2300 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
2306 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
2314 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
2317 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
2321 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2322 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
2324 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2327 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
2336 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
2339 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
2343 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2344 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
2346 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2349 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
2381 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
2384 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2391 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2396 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2412 &adapter->pdev->dev, in vmxnet3_set_mc()
2416 if (!dma_mapping_error(&adapter->pdev->dev, in vmxnet3_set_mc()
2436 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2439 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2441 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2445 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2447 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2450 dma_unmap_single(&adapter->pdev->dev, new_table_pa, in vmxnet3_set_mc()
2456 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2460 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2461 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2470 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2472 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2492 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa); in vmxnet3_setup_driver_shared()
2496 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2499 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2503 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in vmxnet3_setup_driver_shared()
2506 if (adapter->netdev->features & (NETIF_F_GSO_UDP_TUNNEL | in vmxnet3_setup_driver_shared()
2510 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2511 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2513 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2514 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2517 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2518 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2519 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2520 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2521 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2537 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2538 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2539 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2540 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2553 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_setup_driver_shared()
2562 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2564 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2565 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2568 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2580 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
2585 cpu_to_le64(adapter->rss_conf_pa); in vmxnet3_setup_driver_shared()
2591 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2593 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2594 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2595 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2597 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2602 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
2603 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
2609 vmxnet3_init_coalesce(struct vmxnet3_adapter *adapter) in vmxnet3_init_coalesce() argument
2611 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_coalesce()
2615 if (!VMXNET3_VERSION_GE_3(adapter)) in vmxnet3_init_coalesce()
2618 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
2621 cpu_to_le32(sizeof(*adapter->coal_conf)); in vmxnet3_init_coalesce()
2622 cmdInfo->varConf.confPA = cpu_to_le64(adapter->coal_conf_pa); in vmxnet3_init_coalesce()
2624 if (adapter->default_coal_mode) { in vmxnet3_init_coalesce()
2625 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
2628 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
2632 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
2636 vmxnet3_init_rssfields(struct vmxnet3_adapter *adapter) in vmxnet3_init_rssfields() argument
2638 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_rssfields()
2642 if (!VMXNET3_VERSION_GE_4(adapter)) in vmxnet3_init_rssfields()
2645 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
2647 if (adapter->default_rss_fields) { in vmxnet3_init_rssfields()
2648 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2650 adapter->rss_fields = in vmxnet3_init_rssfields()
2651 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
2653 cmdInfo->setRssFields = adapter->rss_fields; in vmxnet3_init_rssfields()
2654 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2659 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2661 adapter->rss_fields = in vmxnet3_init_rssfields()
2662 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
2665 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
2669 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
2675 netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
2676 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
2677 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
2678 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
2679 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
2680 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
2682 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
2683 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
2685 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2690 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
2692 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2697 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
2699 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
2700 adapter->shared_pa)); in vmxnet3_activate_dev()
2701 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
2702 adapter->shared_pa)); in vmxnet3_activate_dev()
2703 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2704 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
2706 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
2707 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2710 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2716 vmxnet3_init_coalesce(adapter); in vmxnet3_activate_dev()
2717 vmxnet3_init_rssfields(adapter); in vmxnet3_activate_dev()
2719 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
2720 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
2722 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
2723 VMXNET3_WRITE_BAR0_REG(adapter, (VMXNET3_REG_RXPROD2 + in vmxnet3_activate_dev()
2725 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
2729 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
2735 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
2736 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
2737 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
2738 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
2739 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
2743 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
2744 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
2745 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
2749 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
2755 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
2758 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2759 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
2760 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2765 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
2769 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
2773 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2774 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
2776 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2777 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
2779 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
2780 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
2781 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
2782 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
2783 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
2785 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2786 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2787 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
2793 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_write_mac_addr() argument
2798 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
2801 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
2809 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
2812 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
2821 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_pci_resources() argument
2825 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
2845 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2846 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
2854 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2855 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
2863 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
2873 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
2875 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
2877 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
2878 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
2879 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
2880 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
2885 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
2888 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
2890 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
2892 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
2893 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2895 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
2897 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2898 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
2900 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
2907 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
2908 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
2912 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
2918 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
2919 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
2929 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
2935 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
2936 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
2941 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
2943 tq->adapter = adapter; in vmxnet3_create_queues()
2945 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
2954 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
2955 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
2956 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
2958 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_create_queues()
2959 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
2960 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
2963 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
2964 rq->adapter = adapter; in vmxnet3_create_queues()
2966 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
2969 netdev_err(adapter->netdev, in vmxnet3_create_queues()
2974 netdev_info(adapter->netdev, in vmxnet3_create_queues()
2977 adapter->num_rx_queues = i; in vmxnet3_create_queues()
2984 if (!adapter->rxdataring_enabled) in vmxnet3_create_queues()
2985 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_create_queues()
2989 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
2996 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
2999 adapter = netdev_priv(netdev); in vmxnet3_open()
3001 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
3002 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
3004 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_open()
3008 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3009 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3011 txdata_desc_size = VMXNET3_READ_BAR1_REG(adapter, in vmxnet3_open()
3013 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3018 adapter->txdata_desc_size = in vmxnet3_open()
3021 adapter->txdata_desc_size = txdata_desc_size; in vmxnet3_open()
3024 adapter->txdata_desc_size = sizeof(struct Vmxnet3_TxDataDesc); in vmxnet3_open()
3027 err = vmxnet3_create_queues(adapter, in vmxnet3_open()
3028 adapter->tx_ring_size, in vmxnet3_open()
3029 adapter->rx_ring_size, in vmxnet3_open()
3030 adapter->rx_ring2_size, in vmxnet3_open()
3031 adapter->txdata_desc_size, in vmxnet3_open()
3032 adapter->rxdata_desc_size); in vmxnet3_open()
3036 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
3043 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
3044 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
3053 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
3059 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
3062 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
3064 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
3065 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
3067 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
3075 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
3083 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
3086 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
3087 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
3092 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_force_close()
3093 dev_close(adapter->netdev); in vmxnet3_force_close()
3100 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
3109 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
3113 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
3114 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
3117 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
3118 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
3119 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
3127 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
3137 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
3139 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
3146 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64) in vmxnet3_declare_features() argument
3148 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
3155 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_declare_features()
3176 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
3180 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
3183 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
3200 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec) in vmxnet3_acquire_msix_vectors() argument
3202 int ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3203 adapter->intr.msix_entries, nvec, nvec); in vmxnet3_acquire_msix_vectors()
3206 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3210 ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3211 adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
3217 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3228 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
3234 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3235 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
3237 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
3238 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3239 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
3240 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
3242 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
3243 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
3247 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
3250 nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ? in vmxnet3_alloc_intr_resources()
3251 1 : adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
3252 nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ? in vmxnet3_alloc_intr_resources()
3253 0 : adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
3259 adapter->intr.msix_entries[i].entry = i; in vmxnet3_alloc_intr_resources()
3261 nvec = vmxnet3_acquire_msix_vectors(adapter, nvec); in vmxnet3_alloc_intr_resources()
3269 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
3270 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
3271 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
3272 netdev_err(adapter->netdev, in vmxnet3_alloc_intr_resources()
3274 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3278 adapter->intr.num_intrs = nvec; in vmxnet3_alloc_intr_resources()
3283 dev_info(&adapter->pdev->dev, in vmxnet3_alloc_intr_resources()
3287 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
3290 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
3291 if (!pci_enable_msi(adapter->pdev)) { in vmxnet3_alloc_intr_resources()
3292 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3293 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3299 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3300 dev_info(&adapter->netdev->dev, in vmxnet3_alloc_intr_resources()
3302 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
3305 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3310 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
3312 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
3313 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
3314 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
3315 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
3317 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
3324 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
3325 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
3327 netdev_err(adapter->netdev, "tx hang\n"); in vmxnet3_tx_timeout()
3328 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
3335 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
3337 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
3340 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
3345 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
3346 netdev_notice(adapter->netdev, "resetting\n"); in vmxnet3_reset_work()
3347 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
3348 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
3349 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
3351 netdev_info(adapter->netdev, "already closed\n"); in vmxnet3_reset_work()
3355 netif_wake_queue(adapter->netdev); in vmxnet3_reset_work()
3356 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
3386 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
3421 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
3422 adapter->netdev = netdev; in vmxnet3_probe_device()
3423 adapter->pdev = pdev; in vmxnet3_probe_device()
3425 adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE; in vmxnet3_probe_device()
3426 adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE; in vmxnet3_probe_device()
3427 adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE; in vmxnet3_probe_device()
3447 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
3448 adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter, in vmxnet3_probe_device()
3451 if (dma_mapping_error(&adapter->pdev->dev, adapter->adapter_pa)) { in vmxnet3_probe_device()
3456 adapter->shared = dma_alloc_coherent( in vmxnet3_probe_device()
3457 &adapter->pdev->dev, in vmxnet3_probe_device()
3459 &adapter->shared_pa, GFP_KERNEL); in vmxnet3_probe_device()
3460 if (!adapter->shared) { in vmxnet3_probe_device()
3466 adapter->num_rx_queues = num_rx_queues; in vmxnet3_probe_device()
3467 adapter->num_tx_queues = num_tx_queues; in vmxnet3_probe_device()
3468 adapter->rx_buf_per_pkt = 1; in vmxnet3_probe_device()
3470 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
3471 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
3472 adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size, in vmxnet3_probe_device()
3473 &adapter->queue_desc_pa, in vmxnet3_probe_device()
3476 if (!adapter->tqd_start) { in vmxnet3_probe_device()
3481 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
3482 adapter->num_tx_queues); in vmxnet3_probe_device()
3484 adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3486 &adapter->pm_conf_pa, in vmxnet3_probe_device()
3488 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
3495 adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3497 &adapter->rss_conf_pa, in vmxnet3_probe_device()
3499 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
3505 err = vmxnet3_alloc_pci_resources(adapter); in vmxnet3_probe_device()
3509 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
3511 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3514 adapter->version = VMXNET3_REV_4 + 1; in vmxnet3_probe_device()
3516 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3519 adapter->version = VMXNET3_REV_3 + 1; in vmxnet3_probe_device()
3521 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3524 adapter->version = VMXNET3_REV_2 + 1; in vmxnet3_probe_device()
3526 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3529 adapter->version = VMXNET3_REV_1 + 1; in vmxnet3_probe_device()
3536 dev_dbg(&pdev->dev, "Using device version %d\n", adapter->version); in vmxnet3_probe_device()
3538 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
3540 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
3548 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
3549 adapter->coal_conf = in vmxnet3_probe_device()
3550 dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3553 &adapter->coal_conf_pa, in vmxnet3_probe_device()
3555 if (!adapter->coal_conf) { in vmxnet3_probe_device()
3559 adapter->coal_conf->coalMode = VMXNET3_COALESCE_DISABLED; in vmxnet3_probe_device()
3560 adapter->default_coal_mode = true; in vmxnet3_probe_device()
3563 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_probe_device()
3564 adapter->default_rss_fields = true; in vmxnet3_probe_device()
3565 adapter->rss_fields = VMXNET3_RSS_FIELDS_DEFAULT; in vmxnet3_probe_device()
3569 vmxnet3_declare_features(adapter, dma64); in vmxnet3_probe_device()
3571 adapter->rxdata_desc_size = VMXNET3_VERSION_GE_3(adapter) ? in vmxnet3_probe_device()
3574 if (adapter->num_tx_queues == adapter->num_rx_queues) in vmxnet3_probe_device()
3575 adapter->share_intr = VMXNET3_INTR_BUDDYSHARE; in vmxnet3_probe_device()
3577 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
3579 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
3582 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
3583 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3584 adapter->rss = true; in vmxnet3_probe_device()
3589 adapter->rss = false; in vmxnet3_probe_device()
3593 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
3604 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
3605 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
3607 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3609 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
3610 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
3611 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
3615 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
3619 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
3620 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
3630 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
3634 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
3635 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3637 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_probe_device()
3639 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
3641 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
3644 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_probe_device()
3645 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_probe_device()
3648 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_probe_device()
3649 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_probe_device()
3651 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_probe_device()
3652 adapter->queue_desc_pa); in vmxnet3_probe_device()
3654 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3656 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
3658 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_probe_device()
3670 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
3683 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
3687 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
3688 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
3689 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_remove_device()
3690 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3692 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_remove_device()
3695 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_remove_device()
3696 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_remove_device()
3698 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_remove_device()
3699 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_remove_device()
3701 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
3703 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_remove_device()
3704 adapter->queue_desc_pa); in vmxnet3_remove_device()
3705 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3707 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
3708 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_remove_device()
3716 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_shutdown_device() local
3722 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_shutdown_device()
3726 &adapter->state)) { in vmxnet3_shutdown_device()
3727 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
3730 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
3731 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_shutdown_device()
3733 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
3734 vmxnet3_disable_all_intrs(adapter); in vmxnet3_shutdown_device()
3736 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
3747 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
3760 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
3761 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
3763 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
3764 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
3765 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
3771 pmConf = adapter->pm_conf; in vmxnet3_suspend()
3774 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
3784 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
3834 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
3839 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
3840 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
3842 adapter->shared->devRead.pmConfDesc.confPA = in vmxnet3_suspend()
3843 cpu_to_le64(adapter->pm_conf_pa); in vmxnet3_suspend()
3845 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3846 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
3848 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3852 adapter->wol); in vmxnet3_suspend()
3867 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
3880 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
3889 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
3890 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
3892 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
3893 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_resume()
3894 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_resume()
3896 vmxnet3_reset_dev(adapter); in vmxnet3_resume()
3897 err = vmxnet3_activate_dev(adapter); in vmxnet3_resume()
3901 vmxnet3_force_close(adapter); in vmxnet3_resume()