Lines Matching full: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()
617 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
620 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
647 netdev_dbg(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
678 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
705 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
732 tbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_map_pkt()
735 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
747 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
774 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
777 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
789 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
813 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
817 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
818 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
842 struct vmxnet3_adapter *adapter) in vmxnet3_parse_hdr() argument
847 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_parse_hdr()
864 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_parse_hdr()
945 struct vmxnet3_adapter *adapter) in vmxnet3_copy_hdr() argument
954 netdev_dbg(adapter->netdev, in vmxnet3_copy_hdr()
1024 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
1075 ret = vmxnet3_parse_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1104 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1106 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
1109 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
1115 vmxnet3_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1118 if (vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter)) in vmxnet3_tq_xmit()
1134 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_tq_xmit()
1149 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_tq_xmit()
1191 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1201 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1220 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1222 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1224 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1225 adapter, netdev); in vmxnet3_xmit_frame()
1230 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1234 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1270 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1296 vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb, in vmxnet3_get_hdr_len() argument
1352 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1393 ring_idx = VMXNET3_GET_RING_IDX(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1403 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1421 netdev_dbg(adapter->netdev, in vmxnet3_rq_rx_complete()
1431 VMXNET3_RX_DATA_RING(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1433 new_skb = netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_rx_complete()
1459 dma_map_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1462 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1476 dma_unmap_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1490 (adapter->netdev->features & NETIF_F_RXHASH)) in vmxnet3_rq_rx_complete()
1497 if (VMXNET3_VERSION_GE_2(adapter) && in vmxnet3_rq_rx_complete()
1542 new_dma_addr = dma_map_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1546 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1556 dma_unmap_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1573 u32 mtu = adapter->netdev->mtu; in vmxnet3_rq_rx_complete()
1576 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1578 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1580 !(adapter->netdev->features & NETIF_F_LRO)) in vmxnet3_rq_rx_complete()
1591 hlen = vmxnet3_get_hdr_len(adapter, skb, in vmxnet3_rq_rx_complete()
1611 if (adapter->netdev->features & NETIF_F_LRO) in vmxnet3_rq_rx_complete()
1645 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
1661 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
1680 dma_unmap_single(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1686 dma_unmap_page(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1704 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
1708 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
1709 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
1714 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
1730 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1740 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1747 dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size in vmxnet3_rq_destroy()
1756 dma_free_coherent(&adapter->pdev->dev, sz, rq->buf_info[0], in vmxnet3_rq_destroy()
1763 vmxnet3_rq_destroy_all_rxdataring(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all_rxdataring() argument
1767 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_destroy_all_rxdataring()
1768 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_rq_destroy_all_rxdataring()
1771 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy_all_rxdataring()
1784 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
1792 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
1794 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
1814 adapter) == 0) { in vmxnet3_rq_init()
1818 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
1835 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
1839 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
1840 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
1842 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
1844 adapter->netdev->name, i); in vmxnet3_rq_init_all()
1854 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
1864 &adapter->pdev->dev, sz, in vmxnet3_rq_create()
1868 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1874 if ((adapter->rxdataring_enabled) && (rq->data_ring.desc_size != 0)) { in vmxnet3_rq_create()
1877 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1881 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1883 adapter->rxdataring_enabled = false; in vmxnet3_rq_create()
1891 rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1895 netdev_err(adapter->netdev, "failed to allocate rx comp ring\n"); in vmxnet3_rq_create()
1901 bi = dma_alloc_coherent(&adapter->pdev->dev, sz, &rq->buf_info_pa, in vmxnet3_rq_create()
1912 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
1918 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
1922 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_rq_create_all()
1924 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
1925 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
1927 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
1929 adapter->netdev->name, i); in vmxnet3_rq_create_all()
1934 if (!adapter->rxdataring_enabled) in vmxnet3_rq_create_all()
1935 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_rq_create_all()
1939 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
1947 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
1950 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
1951 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
1952 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
1953 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
1955 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
1956 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
1957 adapter, budget); in vmxnet3_do_poll()
1969 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
1973 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
1988 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
1994 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
1996 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
1997 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
2000 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
2004 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
2021 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
2023 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
2024 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2027 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
2029 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
2030 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
2031 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
2034 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
2036 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2051 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
2054 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
2055 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
2078 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
2081 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
2082 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2084 if (adapter->shared->ecr) in vmxnet3_msix_event()
2085 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
2087 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2100 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
2102 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
2103 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
2111 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
2112 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
2114 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
2125 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
2127 switch (adapter->intr.type) { in vmxnet3_netpoll()
2131 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_netpoll()
2132 vmxnet3_msix_rx(0, &adapter->rx_queue[i]); in vmxnet3_netpoll()
2138 vmxnet3_intr(0, adapter->netdev); in vmxnet3_netpoll()
2146 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
2148 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
2153 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2154 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
2155 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
2156 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
2157 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2161 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
2162 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
2164 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2165 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2168 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
2171 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
2177 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
2178 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2179 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2184 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2188 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2191 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2192 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2193 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
2194 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2196 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2197 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2200 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
2201 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
2203 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2206 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
2210 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
2214 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2217 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
2221 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2222 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
2223 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
2226 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2227 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
2228 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
2229 adapter->netdev); in vmxnet3_request_irqs()
2235 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2240 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2241 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
2243 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
2244 rq->dataRingQid = i + 2 * adapter->num_rx_queues; in vmxnet3_request_irqs()
2250 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2251 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
2252 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2253 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2254 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2257 netdev_info(adapter->netdev, in vmxnet3_request_irqs()
2267 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
2269 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
2278 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
2279 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
2281 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
2282 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
2287 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
2289 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
2293 adapter->netdev); in vmxnet3_free_irqs()
2299 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2302 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2311 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
2313 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
2319 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
2327 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
2330 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
2334 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2335 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
2337 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2340 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
2349 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
2352 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
2356 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2357 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
2359 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2362 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
2394 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
2397 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2404 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2409 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2425 &adapter->pdev->dev, in vmxnet3_set_mc()
2429 if (!dma_mapping_error(&adapter->pdev->dev, in vmxnet3_set_mc()
2449 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2452 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2454 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2458 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2460 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2463 dma_unmap_single(&adapter->pdev->dev, new_table_pa, in vmxnet3_set_mc()
2469 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2473 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2474 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2479 * Set up driver_shared based on settings in adapter.
2483 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2485 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2505 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa); in vmxnet3_setup_driver_shared()
2509 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2512 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2516 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in vmxnet3_setup_driver_shared()
2519 if (adapter->netdev->features & (NETIF_F_GSO_UDP_TUNNEL | in vmxnet3_setup_driver_shared()
2523 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2524 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2526 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2527 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2530 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2531 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2532 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2533 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2534 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2550 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2551 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2552 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2553 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2566 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_setup_driver_shared()
2575 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2577 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2578 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2581 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2593 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
2598 cpu_to_le64(adapter->rss_conf_pa); in vmxnet3_setup_driver_shared()
2604 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2606 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2607 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2608 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2610 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2615 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
2616 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
2622 vmxnet3_init_coalesce(struct vmxnet3_adapter *adapter) in vmxnet3_init_coalesce() argument
2624 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_coalesce()
2628 if (!VMXNET3_VERSION_GE_3(adapter)) in vmxnet3_init_coalesce()
2631 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
2634 cpu_to_le32(sizeof(*adapter->coal_conf)); in vmxnet3_init_coalesce()
2635 cmdInfo->varConf.confPA = cpu_to_le64(adapter->coal_conf_pa); in vmxnet3_init_coalesce()
2637 if (adapter->default_coal_mode) { in vmxnet3_init_coalesce()
2638 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
2641 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
2645 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
2649 vmxnet3_init_rssfields(struct vmxnet3_adapter *adapter) in vmxnet3_init_rssfields() argument
2651 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_rssfields()
2655 if (!VMXNET3_VERSION_GE_4(adapter)) in vmxnet3_init_rssfields()
2658 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
2660 if (adapter->default_rss_fields) { in vmxnet3_init_rssfields()
2661 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2663 adapter->rss_fields = in vmxnet3_init_rssfields()
2664 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
2666 cmdInfo->setRssFields = adapter->rss_fields; in vmxnet3_init_rssfields()
2667 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2672 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2674 adapter->rss_fields = in vmxnet3_init_rssfields()
2675 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
2678 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
2682 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
2688 netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
2689 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
2690 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
2691 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
2692 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
2693 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
2695 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
2696 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
2698 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2703 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
2705 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2710 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
2712 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
2713 adapter->shared_pa)); in vmxnet3_activate_dev()
2714 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
2715 adapter->shared_pa)); in vmxnet3_activate_dev()
2716 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2717 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
2719 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
2720 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2723 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2729 vmxnet3_init_coalesce(adapter); in vmxnet3_activate_dev()
2730 vmxnet3_init_rssfields(adapter); in vmxnet3_activate_dev()
2732 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
2733 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
2735 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
2736 VMXNET3_WRITE_BAR0_REG(adapter, (VMXNET3_REG_RXPROD2 + in vmxnet3_activate_dev()
2738 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
2742 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
2748 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
2749 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
2750 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
2751 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
2752 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
2756 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
2757 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
2758 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
2762 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
2768 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
2771 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2772 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
2773 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2778 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
2782 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
2786 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2787 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
2789 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2790 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
2792 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
2793 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
2794 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
2795 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
2796 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
2798 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2799 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2800 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
2806 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_write_mac_addr() argument
2811 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
2814 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
2822 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
2825 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
2834 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_pci_resources() argument
2838 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
2842 dev_err(&pdev->dev, "Failed to enable adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
2850 "Failed to request region for adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
2858 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2859 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
2867 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2868 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
2876 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
2886 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
2888 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
2890 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
2891 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
2892 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
2893 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
2898 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
2901 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
2903 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
2905 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
2906 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2908 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
2910 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2911 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
2913 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
2920 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
2921 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
2925 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
2931 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
2932 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
2942 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
2948 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
2949 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
2954 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
2956 tq->adapter = adapter; in vmxnet3_create_queues()
2958 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
2967 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
2968 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
2969 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
2971 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_create_queues()
2972 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
2973 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
2976 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
2977 rq->adapter = adapter; in vmxnet3_create_queues()
2979 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
2982 netdev_err(adapter->netdev, in vmxnet3_create_queues()
2987 netdev_info(adapter->netdev, in vmxnet3_create_queues()
2990 adapter->num_rx_queues = i; in vmxnet3_create_queues()
2997 if (!adapter->rxdataring_enabled) in vmxnet3_create_queues()
2998 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_create_queues()
3002 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
3009 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
3012 adapter = netdev_priv(netdev); in vmxnet3_open()
3014 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
3015 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
3017 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_open()
3021 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3022 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3024 txdata_desc_size = VMXNET3_READ_BAR1_REG(adapter, in vmxnet3_open()
3026 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3031 adapter->txdata_desc_size = in vmxnet3_open()
3034 adapter->txdata_desc_size = txdata_desc_size; in vmxnet3_open()
3037 adapter->txdata_desc_size = sizeof(struct Vmxnet3_TxDataDesc); in vmxnet3_open()
3040 err = vmxnet3_create_queues(adapter, in vmxnet3_open()
3041 adapter->tx_ring_size, in vmxnet3_open()
3042 adapter->rx_ring_size, in vmxnet3_open()
3043 adapter->rx_ring2_size, in vmxnet3_open()
3044 adapter->txdata_desc_size, in vmxnet3_open()
3045 adapter->rxdata_desc_size); in vmxnet3_open()
3049 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
3056 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
3057 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
3066 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
3072 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
3075 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
3077 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
3078 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
3080 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
3088 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
3096 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
3099 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
3100 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
3105 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_force_close()
3106 dev_close(adapter->netdev); in vmxnet3_force_close()
3113 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
3122 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
3126 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
3127 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
3130 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
3131 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
3132 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
3140 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
3150 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
3152 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
3159 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64) in vmxnet3_declare_features() argument
3161 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
3168 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_declare_features()
3189 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
3193 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
3196 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
3213 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec) in vmxnet3_acquire_msix_vectors() argument
3215 int ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3216 adapter->intr.msix_entries, nvec, nvec); in vmxnet3_acquire_msix_vectors()
3219 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3223 ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3224 adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
3230 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3241 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
3247 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3248 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
3250 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
3251 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3252 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
3253 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
3255 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
3256 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
3260 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
3263 nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ? in vmxnet3_alloc_intr_resources()
3264 1 : adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
3265 nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ? in vmxnet3_alloc_intr_resources()
3266 0 : adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
3272 adapter->intr.msix_entries[i].entry = i; in vmxnet3_alloc_intr_resources()
3274 nvec = vmxnet3_acquire_msix_vectors(adapter, nvec); in vmxnet3_alloc_intr_resources()
3282 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
3283 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
3284 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
3285 netdev_err(adapter->netdev, in vmxnet3_alloc_intr_resources()
3287 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3291 adapter->intr.num_intrs = nvec; in vmxnet3_alloc_intr_resources()
3296 dev_info(&adapter->pdev->dev, in vmxnet3_alloc_intr_resources()
3300 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
3303 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
3304 if (!pci_enable_msi(adapter->pdev)) { in vmxnet3_alloc_intr_resources()
3305 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3306 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3312 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3313 dev_info(&adapter->netdev->dev, in vmxnet3_alloc_intr_resources()
3315 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
3318 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3323 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
3325 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
3326 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
3327 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
3328 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
3330 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
3337 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
3338 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
3340 netdev_err(adapter->netdev, "tx hang\n"); in vmxnet3_tx_timeout()
3341 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
3348 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
3350 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
3353 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
3358 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
3359 netdev_notice(adapter->netdev, "resetting\n"); in vmxnet3_reset_work()
3360 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
3361 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
3362 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
3364 netdev_info(adapter->netdev, "already closed\n"); in vmxnet3_reset_work()
3368 netif_wake_queue(adapter->netdev); in vmxnet3_reset_work()
3369 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
3399 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
3434 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
3435 adapter->netdev = netdev; in vmxnet3_probe_device()
3436 adapter->pdev = pdev; in vmxnet3_probe_device()
3438 adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE; in vmxnet3_probe_device()
3439 adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE; in vmxnet3_probe_device()
3440 adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE; in vmxnet3_probe_device()
3460 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
3461 adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter, in vmxnet3_probe_device()
3464 if (dma_mapping_error(&adapter->pdev->dev, adapter->adapter_pa)) { in vmxnet3_probe_device()
3469 adapter->shared = dma_alloc_coherent( in vmxnet3_probe_device()
3470 &adapter->pdev->dev, in vmxnet3_probe_device()
3472 &adapter->shared_pa, GFP_KERNEL); in vmxnet3_probe_device()
3473 if (!adapter->shared) { in vmxnet3_probe_device()
3479 adapter->num_rx_queues = num_rx_queues; in vmxnet3_probe_device()
3480 adapter->num_tx_queues = num_tx_queues; in vmxnet3_probe_device()
3481 adapter->rx_buf_per_pkt = 1; in vmxnet3_probe_device()
3483 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
3484 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
3485 adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size, in vmxnet3_probe_device()
3486 &adapter->queue_desc_pa, in vmxnet3_probe_device()
3489 if (!adapter->tqd_start) { in vmxnet3_probe_device()
3494 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
3495 adapter->num_tx_queues); in vmxnet3_probe_device()
3497 adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3499 &adapter->pm_conf_pa, in vmxnet3_probe_device()
3501 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
3508 adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3510 &adapter->rss_conf_pa, in vmxnet3_probe_device()
3512 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
3518 err = vmxnet3_alloc_pci_resources(adapter); in vmxnet3_probe_device()
3522 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
3524 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3527 adapter->version = VMXNET3_REV_4 + 1; in vmxnet3_probe_device()
3529 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3532 adapter->version = VMXNET3_REV_3 + 1; in vmxnet3_probe_device()
3534 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3537 adapter->version = VMXNET3_REV_2 + 1; in vmxnet3_probe_device()
3539 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3542 adapter->version = VMXNET3_REV_1 + 1; in vmxnet3_probe_device()
3545 "Incompatible h/w version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
3549 dev_dbg(&pdev->dev, "Using device version %d\n", adapter->version); in vmxnet3_probe_device()
3551 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
3553 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
3556 "Incompatible upt version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
3561 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
3562 adapter->coal_conf = in vmxnet3_probe_device()
3563 dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3566 &adapter->coal_conf_pa, in vmxnet3_probe_device()
3568 if (!adapter->coal_conf) { in vmxnet3_probe_device()
3572 adapter->coal_conf->coalMode = VMXNET3_COALESCE_DISABLED; in vmxnet3_probe_device()
3573 adapter->default_coal_mode = true; in vmxnet3_probe_device()
3576 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_probe_device()
3577 adapter->default_rss_fields = true; in vmxnet3_probe_device()
3578 adapter->rss_fields = VMXNET3_RSS_FIELDS_DEFAULT; in vmxnet3_probe_device()
3582 vmxnet3_declare_features(adapter, dma64); in vmxnet3_probe_device()
3584 adapter->rxdata_desc_size = VMXNET3_VERSION_GE_3(adapter) ? in vmxnet3_probe_device()
3587 if (adapter->num_tx_queues == adapter->num_rx_queues) in vmxnet3_probe_device()
3588 adapter->share_intr = VMXNET3_INTR_BUDDYSHARE; in vmxnet3_probe_device()
3590 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
3592 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
3595 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
3596 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3597 adapter->rss = true; in vmxnet3_probe_device()
3602 adapter->rss = false; in vmxnet3_probe_device()
3606 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
3617 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
3618 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
3620 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3622 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
3623 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
3624 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
3628 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
3632 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
3633 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
3639 dev_err(&pdev->dev, "Failed to register adapter\n"); in vmxnet3_probe_device()
3643 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
3647 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
3648 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3650 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_probe_device()
3652 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
3654 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
3657 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_probe_device()
3658 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_probe_device()
3661 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_probe_device()
3662 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_probe_device()
3664 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_probe_device()
3665 adapter->queue_desc_pa); in vmxnet3_probe_device()
3667 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3669 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
3671 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_probe_device()
3683 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
3696 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
3700 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
3701 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
3702 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_remove_device()
3703 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3705 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_remove_device()
3708 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_remove_device()
3709 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_remove_device()
3711 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_remove_device()
3712 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_remove_device()
3714 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
3716 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_remove_device()
3717 adapter->queue_desc_pa); in vmxnet3_remove_device()
3718 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3720 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
3721 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_remove_device()
3729 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_shutdown_device() local
3735 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_shutdown_device()
3739 &adapter->state)) { in vmxnet3_shutdown_device()
3740 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
3743 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
3744 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_shutdown_device()
3746 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
3747 vmxnet3_disable_all_intrs(adapter); in vmxnet3_shutdown_device()
3749 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
3760 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
3773 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
3774 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
3776 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
3777 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
3778 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
3783 pmConf = adapter->pm_conf; in vmxnet3_suspend()
3786 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
3796 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
3846 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
3851 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
3852 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
3854 adapter->shared->devRead.pmConfDesc.confPA = in vmxnet3_suspend()
3855 cpu_to_le64(adapter->pm_conf_pa); in vmxnet3_suspend()
3857 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3858 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
3860 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3864 adapter->wol); in vmxnet3_suspend()
3879 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
3892 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
3898 /* Need not check adapter state as other reset tasks cannot run during in vmxnet3_resume()
3901 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
3902 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
3904 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
3905 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_resume()
3906 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_resume()
3908 vmxnet3_reset_dev(adapter); in vmxnet3_resume()
3909 err = vmxnet3_activate_dev(adapter); in vmxnet3_resume()
3913 vmxnet3_force_close(adapter); in vmxnet3_resume()