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()
461 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy_all() argument
465 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_destroy_all()
466 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter); in vmxnet3_tq_destroy_all()
472 struct vmxnet3_adapter *adapter) in vmxnet3_tq_init() argument
502 struct vmxnet3_adapter *adapter) in vmxnet3_tq_create() argument
507 tq->tx_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
511 netdev_err(adapter->netdev, "failed to allocate tx ring\n"); in vmxnet3_tq_create()
515 tq->data_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
519 netdev_err(adapter->netdev, "failed to allocate tx data ring\n"); in vmxnet3_tq_create()
523 tq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
527 netdev_err(adapter->netdev, "failed to allocate tx comp ring\n"); in vmxnet3_tq_create()
533 dev_to_node(&adapter->pdev->dev)); in vmxnet3_tq_create()
540 vmxnet3_tq_destroy(tq, adapter); in vmxnet3_tq_create()
545 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup_all() argument
549 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_cleanup_all()
550 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter); in vmxnet3_tq_cleanup_all()
561 int num_to_alloc, struct vmxnet3_adapter *adapter) in vmxnet3_rq_alloc_rx_buf() argument
577 rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
586 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
589 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
610 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
613 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
639 netdev_dbg(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
670 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
697 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
724 tbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_map_pkt()
727 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
739 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
766 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
769 if (dma_mapping_error(&adapter->pdev->dev, tbi->dma_addr)) in vmxnet3_map_pkt()
781 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
805 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
809 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
810 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
834 struct vmxnet3_adapter *adapter) in vmxnet3_parse_hdr() argument
839 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_parse_hdr()
856 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_parse_hdr()
937 struct vmxnet3_adapter *adapter) in vmxnet3_copy_hdr() argument
946 netdev_dbg(adapter->netdev, in vmxnet3_copy_hdr()
1016 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
1067 ret = vmxnet3_parse_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1096 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1098 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
1101 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
1107 vmxnet3_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1110 if (vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter)) in vmxnet3_tq_xmit()
1126 if (VMXNET3_VERSION_GE_4(adapter) && skb->encapsulation) { in vmxnet3_tq_xmit()
1141 if (VMXNET3_VERSION_GE_4(adapter) && in vmxnet3_tq_xmit()
1183 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1193 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1212 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1214 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1216 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1217 adapter, netdev); in vmxnet3_xmit_frame()
1222 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1226 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1262 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1288 vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb, in vmxnet3_get_hdr_len() argument
1344 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1384 ring_idx = VMXNET3_GET_RING_IDX(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1394 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1412 netdev_dbg(adapter->netdev, in vmxnet3_rq_rx_complete()
1422 VMXNET3_RX_DATA_RING(adapter, rcd->rqID); in vmxnet3_rq_rx_complete()
1424 new_skb = netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_rx_complete()
1450 dma_map_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1453 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1467 dma_unmap_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1481 (adapter->netdev->features & NETIF_F_RXHASH)) { in vmxnet3_rq_rx_complete()
1506 if (VMXNET3_VERSION_GE_2(adapter) && in vmxnet3_rq_rx_complete()
1546 new_dma_addr = dma_map_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1550 if (dma_mapping_error(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1560 dma_unmap_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1577 u32 mtu = adapter->netdev->mtu; in vmxnet3_rq_rx_complete()
1580 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1582 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1584 !(adapter->netdev->features & NETIF_F_LRO)) in vmxnet3_rq_rx_complete()
1595 hlen = vmxnet3_get_hdr_len(adapter, skb, in vmxnet3_rq_rx_complete()
1615 if (adapter->netdev->features & NETIF_F_LRO) in vmxnet3_rq_rx_complete()
1648 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
1664 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
1679 dma_unmap_single(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1685 dma_unmap_page(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1703 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
1707 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
1708 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
1713 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
1729 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1739 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1746 dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size in vmxnet3_rq_destroy()
1758 vmxnet3_rq_destroy_all_rxdataring(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all_rxdataring() argument
1762 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_destroy_all_rxdataring()
1763 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_rq_destroy_all_rxdataring()
1766 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy_all_rxdataring()
1779 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
1787 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
1789 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
1809 adapter) == 0) { in vmxnet3_rq_init()
1813 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
1830 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
1834 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
1835 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
1837 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
1839 adapter->netdev->name, i); in vmxnet3_rq_init_all()
1849 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
1859 &adapter->pdev->dev, sz, in vmxnet3_rq_create()
1863 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1869 if ((adapter->rxdataring_enabled) && (rq->data_ring.desc_size != 0)) { in vmxnet3_rq_create()
1872 dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1876 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1878 adapter->rxdataring_enabled = false; in vmxnet3_rq_create()
1886 rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1890 netdev_err(adapter->netdev, "failed to allocate rx comp ring\n"); in vmxnet3_rq_create()
1896 dev_to_node(&adapter->pdev->dev)); in vmxnet3_rq_create()
1906 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
1912 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
1916 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_rq_create_all()
1918 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
1919 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
1921 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
1923 adapter->netdev->name, i); in vmxnet3_rq_create_all()
1928 if (!adapter->rxdataring_enabled) in vmxnet3_rq_create_all()
1929 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_rq_create_all()
1933 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
1941 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
1944 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
1945 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
1946 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
1947 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
1949 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
1950 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
1951 adapter, budget); in vmxnet3_do_poll()
1963 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
1967 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
1982 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
1988 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
1990 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
1991 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
1994 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
1998 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
2015 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
2017 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
2018 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2021 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
2023 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
2024 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
2025 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
2028 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
2030 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
2045 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
2048 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
2049 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
2072 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
2075 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
2076 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2078 if (adapter->shared->ecr) in vmxnet3_msix_event()
2079 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
2081 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
2094 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
2096 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
2097 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
2105 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
2106 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
2108 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
2119 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
2121 switch (adapter->intr.type) { in vmxnet3_netpoll()
2125 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_netpoll()
2126 vmxnet3_msix_rx(0, &adapter->rx_queue[i]); in vmxnet3_netpoll()
2132 vmxnet3_intr(0, adapter->netdev); in vmxnet3_netpoll()
2140 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
2142 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
2147 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2148 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
2149 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
2150 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
2151 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2155 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
2156 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
2158 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2159 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2162 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
2165 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
2171 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
2172 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2173 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2178 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
2182 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2185 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2186 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
2187 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
2188 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2190 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
2191 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2194 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
2195 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
2197 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2200 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
2204 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
2208 adapter->netdev->name, vector); in vmxnet3_request_irqs()
2211 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
2215 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2216 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
2217 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
2220 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
2221 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
2222 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
2223 adapter->netdev); in vmxnet3_request_irqs()
2229 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
2234 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
2235 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
2237 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
2238 rq->dataRingQid = i + 2 * adapter->num_rx_queues; in vmxnet3_request_irqs()
2244 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
2245 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
2246 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
2247 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2248 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
2251 netdev_info(adapter->netdev, in vmxnet3_request_irqs()
2261 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
2263 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
2272 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
2273 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
2275 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
2276 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
2281 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
2283 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
2287 adapter->netdev); in vmxnet3_free_irqs()
2293 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2296 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
2305 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
2307 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
2313 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
2321 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
2324 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
2328 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2329 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
2331 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
2334 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
2343 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
2346 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
2350 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2351 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
2353 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2356 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
2388 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
2391 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2398 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2403 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2419 &adapter->pdev->dev, in vmxnet3_set_mc()
2423 if (!dma_mapping_error(&adapter->pdev->dev, in vmxnet3_set_mc()
2443 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2446 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2448 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2452 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2454 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2457 dma_unmap_single(&adapter->pdev->dev, new_table_pa, in vmxnet3_set_mc()
2463 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2467 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2468 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2473 * Set up driver_shared based on settings in adapter.
2477 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2479 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2500 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa); in vmxnet3_setup_driver_shared()
2504 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2507 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2511 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in vmxnet3_setup_driver_shared()
2514 if (adapter->netdev->features & (NETIF_F_GSO_UDP_TUNNEL | in vmxnet3_setup_driver_shared()
2518 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2519 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2521 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2522 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2525 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2526 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2527 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2528 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2529 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2543 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2544 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2545 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2546 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2556 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_setup_driver_shared()
2565 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2567 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2568 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2571 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2583 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
2588 cpu_to_le64(adapter->rss_conf_pa); in vmxnet3_setup_driver_shared()
2594 if (!VMXNET3_VERSION_GE_6(adapter) || in vmxnet3_setup_driver_shared()
2595 !adapter->queuesExtEnabled) { in vmxnet3_setup_driver_shared()
2596 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2598 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2599 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2600 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2602 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2605 devReadExt->intrConfExt.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2607 devReadExt->intrConfExt.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2608 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2609 devReadExt->intrConfExt.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2611 devReadExt->intrConfExt.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2617 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
2618 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
2624 vmxnet3_init_coalesce(struct vmxnet3_adapter *adapter) in vmxnet3_init_coalesce() argument
2626 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_coalesce()
2630 if (!VMXNET3_VERSION_GE_3(adapter)) in vmxnet3_init_coalesce()
2633 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
2636 cpu_to_le32(sizeof(*adapter->coal_conf)); in vmxnet3_init_coalesce()
2637 cmdInfo->varConf.confPA = cpu_to_le64(adapter->coal_conf_pa); in vmxnet3_init_coalesce()
2639 if (adapter->default_coal_mode) { in vmxnet3_init_coalesce()
2640 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
2643 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_coalesce()
2647 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_coalesce()
2651 vmxnet3_init_rssfields(struct vmxnet3_adapter *adapter) in vmxnet3_init_rssfields() argument
2653 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_init_rssfields()
2657 if (!VMXNET3_VERSION_GE_4(adapter)) in vmxnet3_init_rssfields()
2660 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
2662 if (adapter->default_rss_fields) { in vmxnet3_init_rssfields()
2663 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2665 adapter->rss_fields = in vmxnet3_init_rssfields()
2666 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
2668 cmdInfo->setRssFields = adapter->rss_fields; in vmxnet3_init_rssfields()
2669 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2674 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_init_rssfields()
2676 adapter->rss_fields = in vmxnet3_init_rssfields()
2677 VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_init_rssfields()
2680 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_init_rssfields()
2684 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
2690 netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
2691 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
2692 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
2693 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
2694 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
2695 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
2697 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
2698 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
2700 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2705 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
2707 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2712 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
2714 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
2715 adapter->shared_pa)); in vmxnet3_activate_dev()
2716 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
2717 adapter->shared_pa)); in vmxnet3_activate_dev()
2718 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2719 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
2721 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
2722 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2725 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2731 vmxnet3_init_coalesce(adapter); in vmxnet3_activate_dev()
2732 vmxnet3_init_rssfields(adapter); in vmxnet3_activate_dev()
2734 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
2735 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
2737 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
2738 VMXNET3_WRITE_BAR0_REG(adapter, (VMXNET3_REG_RXPROD2 + in vmxnet3_activate_dev()
2740 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
2744 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
2750 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
2751 netif_tx_wake_all_queues(adapter->netdev); in vmxnet3_activate_dev()
2752 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
2753 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
2754 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
2755 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
2759 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
2760 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
2761 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
2765 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
2771 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
2774 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2775 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
2776 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2781 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
2785 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
2789 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2790 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
2792 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2793 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
2795 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
2796 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
2797 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
2798 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
2799 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
2801 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2802 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2803 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
2809 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_write_mac_addr() argument
2814 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
2817 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
2825 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
2828 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
2837 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_pci_resources() argument
2841 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
2845 dev_err(&pdev->dev, "Failed to enable adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
2853 "Failed to request region for adapter: error %d\n", err); in vmxnet3_alloc_pci_resources()
2861 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2862 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
2870 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2871 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
2879 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
2889 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
2891 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
2893 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
2894 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
2895 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
2896 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
2901 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
2904 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
2906 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
2908 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
2909 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2911 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
2913 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2914 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
2916 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
2923 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
2924 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
2928 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
2934 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
2935 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
2945 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
2951 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
2952 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
2957 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
2959 tq->adapter = adapter; in vmxnet3_create_queues()
2961 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
2970 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
2971 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
2972 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
2974 adapter->rxdataring_enabled = VMXNET3_VERSION_GE_3(adapter); in vmxnet3_create_queues()
2975 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
2976 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
2979 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
2980 rq->adapter = adapter; in vmxnet3_create_queues()
2982 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
2985 netdev_err(adapter->netdev, in vmxnet3_create_queues()
2990 netdev_info(adapter->netdev, in vmxnet3_create_queues()
2993 adapter->num_rx_queues = i; in vmxnet3_create_queues()
3000 if (!adapter->rxdataring_enabled) in vmxnet3_create_queues()
3001 vmxnet3_rq_destroy_all_rxdataring(adapter); in vmxnet3_create_queues()
3005 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
3012 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
3015 adapter = netdev_priv(netdev); in vmxnet3_open()
3017 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
3018 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
3020 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_open()
3024 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_open()
3025 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_open()
3027 txdata_desc_size = VMXNET3_READ_BAR1_REG(adapter, in vmxnet3_open()
3029 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_open()
3034 adapter->txdata_desc_size = in vmxnet3_open()
3037 adapter->txdata_desc_size = txdata_desc_size; in vmxnet3_open()
3040 adapter->txdata_desc_size = sizeof(struct Vmxnet3_TxDataDesc); in vmxnet3_open()
3043 err = vmxnet3_create_queues(adapter, in vmxnet3_open()
3044 adapter->tx_ring_size, in vmxnet3_open()
3045 adapter->rx_ring_size, in vmxnet3_open()
3046 adapter->rx_ring2_size, in vmxnet3_open()
3047 adapter->txdata_desc_size, in vmxnet3_open()
3048 adapter->rxdata_desc_size); in vmxnet3_open()
3052 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
3059 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
3060 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
3069 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
3075 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
3078 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
3080 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
3081 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
3083 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
3091 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
3099 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
3102 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
3103 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
3108 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_force_close()
3109 dev_close(adapter->netdev); in vmxnet3_force_close()
3116 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
3125 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
3129 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
3130 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
3133 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
3134 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
3135 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
3143 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
3153 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
3155 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
3162 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64) in vmxnet3_declare_features() argument
3164 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
3171 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_declare_features()
3192 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
3196 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
3199 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
3216 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec) in vmxnet3_acquire_msix_vectors() argument
3218 int ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3219 adapter->intr.msix_entries, nvec, nvec); in vmxnet3_acquire_msix_vectors()
3222 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3226 ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
3227 adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
3233 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
3244 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
3250 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3251 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
3253 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
3254 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
3255 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
3256 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
3258 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
3259 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
3263 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
3266 nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ? in vmxnet3_alloc_intr_resources()
3267 1 : adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
3268 nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ? in vmxnet3_alloc_intr_resources()
3269 0 : adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
3275 adapter->intr.msix_entries[i].entry = i; in vmxnet3_alloc_intr_resources()
3277 nvec = vmxnet3_acquire_msix_vectors(adapter, nvec); in vmxnet3_alloc_intr_resources()
3285 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
3286 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
3287 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
3288 netdev_err(adapter->netdev, in vmxnet3_alloc_intr_resources()
3290 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3294 adapter->intr.num_intrs = nvec; in vmxnet3_alloc_intr_resources()
3299 dev_info(&adapter->pdev->dev, in vmxnet3_alloc_intr_resources()
3303 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
3306 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
3307 if (!pci_enable_msi(adapter->pdev)) { in vmxnet3_alloc_intr_resources()
3308 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3309 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3315 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
3316 dev_info(&adapter->netdev->dev, in vmxnet3_alloc_intr_resources()
3318 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
3321 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
3326 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
3328 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
3329 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
3330 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
3331 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
3333 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
3340 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
3341 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
3343 netdev_err(adapter->netdev, "tx hang\n"); in vmxnet3_tx_timeout()
3344 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
3351 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
3353 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
3356 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
3361 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
3362 netdev_notice(adapter->netdev, "resetting\n"); in vmxnet3_reset_work()
3363 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
3364 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
3365 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
3367 netdev_info(adapter->netdev, "already closed\n"); in vmxnet3_reset_work()
3371 netif_wake_queue(adapter->netdev); in vmxnet3_reset_work()
3372 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
3402 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
3433 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
3434 adapter->netdev = netdev; in vmxnet3_probe_device()
3435 adapter->pdev = pdev; in vmxnet3_probe_device()
3437 adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE; in vmxnet3_probe_device()
3438 adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE; in vmxnet3_probe_device()
3439 adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE; in vmxnet3_probe_device()
3452 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
3453 adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter, in vmxnet3_probe_device()
3456 if (dma_mapping_error(&adapter->pdev->dev, adapter->adapter_pa)) { in vmxnet3_probe_device()
3461 adapter->shared = dma_alloc_coherent( in vmxnet3_probe_device()
3462 &adapter->pdev->dev, in vmxnet3_probe_device()
3464 &adapter->shared_pa, GFP_KERNEL); in vmxnet3_probe_device()
3465 if (!adapter->shared) { in vmxnet3_probe_device()
3471 err = vmxnet3_alloc_pci_resources(adapter); in vmxnet3_probe_device()
3475 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
3477 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3480 adapter->version = VMXNET3_REV_6 + 1; in vmxnet3_probe_device()
3482 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3485 adapter->version = VMXNET3_REV_5 + 1; in vmxnet3_probe_device()
3487 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3490 adapter->version = VMXNET3_REV_4 + 1; in vmxnet3_probe_device()
3492 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3495 adapter->version = VMXNET3_REV_3 + 1; in vmxnet3_probe_device()
3497 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3500 adapter->version = VMXNET3_REV_2 + 1; in vmxnet3_probe_device()
3502 VMXNET3_WRITE_BAR1_REG(adapter, in vmxnet3_probe_device()
3505 adapter->version = VMXNET3_REV_1 + 1; in vmxnet3_probe_device()
3508 "Incompatible h/w version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
3512 dev_dbg(&pdev->dev, "Using device version %d\n", adapter->version); in vmxnet3_probe_device()
3514 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
3516 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
3519 "Incompatible upt version (0x%x) for adapter\n", ver); in vmxnet3_probe_device()
3524 if (VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_probe_device()
3525 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
3526 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_probe_device()
3528 queues = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_probe_device()
3529 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_probe_device()
3531 adapter->num_rx_queues = min(num_rx_queues, ((queues >> 8) & 0xff)); in vmxnet3_probe_device()
3532 adapter->num_tx_queues = min(num_tx_queues, (queues & 0xff)); in vmxnet3_probe_device()
3534 adapter->num_rx_queues = min(num_rx_queues, in vmxnet3_probe_device()
3536 adapter->num_tx_queues = min(num_tx_queues, in vmxnet3_probe_device()
3539 if (adapter->num_rx_queues > VMXNET3_MAX_RX_QUEUES || in vmxnet3_probe_device()
3540 adapter->num_tx_queues > VMXNET3_MAX_TX_QUEUES) { in vmxnet3_probe_device()
3541 adapter->queuesExtEnabled = true; in vmxnet3_probe_device()
3543 adapter->queuesExtEnabled = false; in vmxnet3_probe_device()
3546 adapter->queuesExtEnabled = false; in vmxnet3_probe_device()
3549 adapter->num_rx_queues = min(num_rx_queues, in vmxnet3_probe_device()
3551 adapter->num_tx_queues = min(num_tx_queues, in vmxnet3_probe_device()
3556 adapter->num_tx_queues, adapter->num_rx_queues); in vmxnet3_probe_device()
3558 adapter->rx_buf_per_pkt = 1; in vmxnet3_probe_device()
3560 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
3561 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
3562 adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size, in vmxnet3_probe_device()
3563 &adapter->queue_desc_pa, in vmxnet3_probe_device()
3566 if (!adapter->tqd_start) { in vmxnet3_probe_device()
3571 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
3572 adapter->num_tx_queues); in vmxnet3_probe_device()
3574 adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3576 &adapter->pm_conf_pa, in vmxnet3_probe_device()
3578 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
3585 adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3587 &adapter->rss_conf_pa, in vmxnet3_probe_device()
3589 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
3595 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
3596 adapter->coal_conf = in vmxnet3_probe_device()
3597 dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3600 &adapter->coal_conf_pa, in vmxnet3_probe_device()
3602 if (!adapter->coal_conf) { in vmxnet3_probe_device()
3606 adapter->coal_conf->coalMode = VMXNET3_COALESCE_DISABLED; in vmxnet3_probe_device()
3607 adapter->default_coal_mode = true; in vmxnet3_probe_device()
3610 if (VMXNET3_VERSION_GE_4(adapter)) { in vmxnet3_probe_device()
3611 adapter->default_rss_fields = true; in vmxnet3_probe_device()
3612 adapter->rss_fields = VMXNET3_RSS_FIELDS_DEFAULT; in vmxnet3_probe_device()
3616 vmxnet3_declare_features(adapter, dma64); in vmxnet3_probe_device()
3618 adapter->rxdata_desc_size = VMXNET3_VERSION_GE_3(adapter) ? in vmxnet3_probe_device()
3621 if (adapter->num_tx_queues == adapter->num_rx_queues) in vmxnet3_probe_device()
3622 adapter->share_intr = VMXNET3_INTR_BUDDYSHARE; in vmxnet3_probe_device()
3624 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
3626 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
3629 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
3630 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3631 adapter->rss = true; in vmxnet3_probe_device()
3636 adapter->rss = false; in vmxnet3_probe_device()
3640 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
3649 if (VMXNET3_VERSION_GE_6(adapter)) in vmxnet3_probe_device()
3654 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
3655 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
3657 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3659 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
3660 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
3661 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
3665 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
3669 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
3670 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
3676 dev_err(&pdev->dev, "Failed to register adapter\n"); in vmxnet3_probe_device()
3680 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
3684 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_probe_device()
3685 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3687 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_probe_device()
3689 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
3692 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_probe_device()
3693 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_probe_device()
3696 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_probe_device()
3697 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_probe_device()
3699 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_probe_device()
3700 adapter->queue_desc_pa); in vmxnet3_probe_device()
3702 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
3704 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3706 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
3708 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_probe_device()
3720 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
3732 if (!VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_remove_device()
3735 if (VMXNET3_VERSION_GE_6(adapter)) { in vmxnet3_remove_device()
3736 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_remove_device()
3737 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_remove_device()
3739 rx_queues = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_remove_device()
3740 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_remove_device()
3751 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
3755 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
3756 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
3757 if (VMXNET3_VERSION_GE_3(adapter)) { in vmxnet3_remove_device()
3758 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3760 adapter->coal_conf, adapter->coal_conf_pa); in vmxnet3_remove_device()
3763 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_remove_device()
3764 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_remove_device()
3766 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_remove_device()
3767 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_remove_device()
3769 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
3771 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_remove_device()
3772 adapter->queue_desc_pa); in vmxnet3_remove_device()
3773 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3775 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
3776 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_remove_device()
3784 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_shutdown_device() local
3790 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_shutdown_device()
3794 &adapter->state)) { in vmxnet3_shutdown_device()
3795 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
3798 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
3799 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_shutdown_device()
3801 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_shutdown_device()
3802 vmxnet3_disable_all_intrs(adapter); in vmxnet3_shutdown_device()
3804 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_shutdown_device()
3815 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
3828 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
3829 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
3831 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
3832 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
3833 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
3838 pmConf = adapter->pm_conf; in vmxnet3_suspend()
3841 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
3851 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
3901 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
3906 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
3907 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
3909 adapter->shared->devRead.pmConfDesc.confPA = in vmxnet3_suspend()
3910 cpu_to_le64(adapter->pm_conf_pa); in vmxnet3_suspend()
3912 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3913 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
3915 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3919 adapter->wol); in vmxnet3_suspend()
3934 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
3947 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
3953 /* Need not check adapter state as other reset tasks cannot run during in vmxnet3_resume()
3956 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
3957 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
3959 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
3960 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_resume()
3961 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_resume()
3963 vmxnet3_reset_dev(adapter); in vmxnet3_resume()
3964 err = vmxnet3_activate_dev(adapter); in vmxnet3_resume()
3968 vmxnet3_force_close(adapter); in vmxnet3_resume()