Lines Matching refs:adapter

49 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
55 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_enable_intr() argument
57 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0); in vmxnet3_enable_intr()
62 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_disable_intr() argument
64 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1); in vmxnet3_disable_intr()
72 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_enable_all_intrs() argument
76 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_enable_all_intrs()
77 vmxnet3_enable_intr(adapter, i); in vmxnet3_enable_all_intrs()
78 adapter->shared->devRead.intrConf.intrCtrl &= in vmxnet3_enable_all_intrs()
84 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_disable_all_intrs() argument
88 adapter->shared->devRead.intrConf.intrCtrl |= in vmxnet3_disable_all_intrs()
90 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_disable_all_intrs()
91 vmxnet3_disable_intr(adapter, i); in vmxnet3_disable_all_intrs()
96 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events) in vmxnet3_ack_events() argument
98 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events); in vmxnet3_ack_events()
103 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stopped() argument
110 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_start() argument
113 netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue); in vmxnet3_tq_start()
118 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_wake() argument
121 netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_wake()
126 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stop() argument
130 netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_stop()
138 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue) in vmxnet3_check_link() argument
144 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_check_link()
145 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); in vmxnet3_check_link()
146 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_check_link()
147 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_check_link()
149 adapter->link_speed = ret >> 16; in vmxnet3_check_link()
151 netdev_info(adapter->netdev, "NIC Link is Up %d Mbps\n", in vmxnet3_check_link()
152 adapter->link_speed); in vmxnet3_check_link()
153 netif_carrier_on(adapter->netdev); in vmxnet3_check_link()
156 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
157 vmxnet3_tq_start(&adapter->tx_queue[i], in vmxnet3_check_link()
158 adapter); in vmxnet3_check_link()
161 netdev_info(adapter->netdev, "NIC Link is Down\n"); in vmxnet3_check_link()
162 netif_carrier_off(adapter->netdev); in vmxnet3_check_link()
165 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
166 vmxnet3_tq_stop(&adapter->tx_queue[i], adapter); in vmxnet3_check_link()
172 vmxnet3_process_events(struct vmxnet3_adapter *adapter) in vmxnet3_process_events() argument
176 u32 events = le32_to_cpu(adapter->shared->ecr); in vmxnet3_process_events()
180 vmxnet3_ack_events(adapter, events); in vmxnet3_process_events()
184 vmxnet3_check_link(adapter, true); in vmxnet3_process_events()
188 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_process_events()
189 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_process_events()
191 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_process_events()
193 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_process_events()
194 if (adapter->tqd_start[i].status.stopped) in vmxnet3_process_events()
195 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
197 adapter->netdev->name, i, le32_to_cpu( in vmxnet3_process_events()
198 adapter->tqd_start[i].status.error)); in vmxnet3_process_events()
199 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_process_events()
200 if (adapter->rqd_start[i].status.stopped) in vmxnet3_process_events()
201 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
203 adapter->netdev->name, i, in vmxnet3_process_events()
204 adapter->rqd_start[i].status.error); in vmxnet3_process_events()
206 schedule_work(&adapter->work); in vmxnet3_process_events()
330 struct pci_dev *pdev, struct vmxnet3_adapter *adapter) in vmxnet3_unmap_pkt() argument
365 struct vmxnet3_adapter *adapter) in vmxnet3_tq_tx_complete() argument
373 &gdesc->tcd), tq, adapter->pdev, in vmxnet3_tq_tx_complete()
374 adapter); in vmxnet3_tq_tx_complete()
382 if (unlikely(vmxnet3_tq_stopped(tq, adapter) && in vmxnet3_tq_tx_complete()
385 netif_carrier_ok(adapter->netdev))) { in vmxnet3_tq_tx_complete()
386 vmxnet3_tq_wake(tq, adapter); in vmxnet3_tq_tx_complete()
396 struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup() argument
405 vmxnet3_unmap_tx_buf(tbi, adapter->pdev); in vmxnet3_tq_cleanup()
429 struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy() argument
432 dma_free_coherent(&adapter->pdev->dev, tq->tx_ring.size * in vmxnet3_tq_destroy()
438 dma_free_coherent(&adapter->pdev->dev, tq->data_ring.size * in vmxnet3_tq_destroy()
444 dma_free_coherent(&adapter->pdev->dev, tq->comp_ring.size * in vmxnet3_tq_destroy()
450 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_tq_destroy()
460 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy_all() argument
464 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_destroy_all()
465 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter); in vmxnet3_tq_destroy_all()
471 struct vmxnet3_adapter *adapter) in vmxnet3_tq_init() argument
501 struct vmxnet3_adapter *adapter) in vmxnet3_tq_create() argument
508 tq->tx_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
512 netdev_err(adapter->netdev, "failed to allocate tx ring\n"); in vmxnet3_tq_create()
516 tq->data_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
520 netdev_err(adapter->netdev, "failed to allocate data ring\n"); in vmxnet3_tq_create()
524 tq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_tq_create()
528 netdev_err(adapter->netdev, "failed to allocate tx comp ring\n"); in vmxnet3_tq_create()
533 tq->buf_info = dma_zalloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_tq_create()
541 vmxnet3_tq_destroy(tq, adapter); in vmxnet3_tq_create()
546 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup_all() argument
550 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_cleanup_all()
551 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter); in vmxnet3_tq_cleanup_all()
562 int num_to_alloc, struct vmxnet3_adapter *adapter) in vmxnet3_rq_alloc_rx_buf() argument
578 rbi->skb = __netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
587 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
605 &adapter->pdev->dev, in vmxnet3_rq_alloc_rx_buf()
629 netdev_dbg(adapter->netdev, in vmxnet3_rq_alloc_rx_buf()
661 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
688 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
715 tbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_map_pkt()
728 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
755 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
768 netdev_dbg(adapter->netdev, in vmxnet3_map_pkt()
790 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
794 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
795 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
819 struct vmxnet3_adapter *adapter) in vmxnet3_parse_and_copy_hdr() argument
878 netdev_dbg(adapter->netdev, in vmxnet3_parse_and_copy_hdr()
936 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
985 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
987 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
990 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
996 ret = vmxnet3_parse_and_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
1020 vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter); in vmxnet3_tq_xmit()
1068 netdev_dbg(adapter->netdev, in vmxnet3_tq_xmit()
1079 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1100 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1102 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1104 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1105 adapter, netdev); in vmxnet3_xmit_frame()
1110 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1114 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1138 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1165 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1197 ring_idx = rcd->rqID < adapter->num_rx_queues ? 0 : 1; in vmxnet3_rq_rx_complete()
1207 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1221 netdev_dbg(adapter->netdev, in vmxnet3_rq_rx_complete()
1229 new_skb = netdev_alloc_skb_ip_align(adapter->netdev, in vmxnet3_rq_rx_complete()
1242 dma_unmap_single(&adapter->pdev->dev, rbi->dma_addr, in vmxnet3_rq_rx_complete()
1248 (adapter->netdev->features & NETIF_F_RXHASH)) in vmxnet3_rq_rx_complete()
1257 rbi->dma_addr = dma_map_single(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1291 dma_unmap_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1300 rbi->dma_addr = dma_map_page(&adapter->pdev->dev, in vmxnet3_rq_rx_complete()
1313 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1315 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1320 if (adapter->netdev->features & NETIF_F_LRO) in vmxnet3_rq_rx_complete()
1346 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
1362 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
1377 dma_unmap_single(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1383 dma_unmap_page(&adapter->pdev->dev, rxd->addr, in vmxnet3_rq_cleanup()
1401 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
1405 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
1406 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
1411 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
1427 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_rq_destroy()
1438 dma_free_coherent(&adapter->pdev->dev, rq->comp_ring.size in vmxnet3_rq_destroy()
1447 dma_free_coherent(&adapter->pdev->dev, sz, rq->buf_info[0], in vmxnet3_rq_destroy()
1455 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
1463 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
1465 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
1485 adapter) == 0) { in vmxnet3_rq_init()
1489 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
1506 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
1510 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
1511 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
1513 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
1515 adapter->netdev->name, i); in vmxnet3_rq_init_all()
1525 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
1535 &adapter->pdev->dev, sz, in vmxnet3_rq_create()
1539 netdev_err(adapter->netdev, in vmxnet3_rq_create()
1546 rq->comp_ring.base = dma_alloc_coherent(&adapter->pdev->dev, sz, in vmxnet3_rq_create()
1550 netdev_err(adapter->netdev, "failed to allocate rx comp ring\n"); in vmxnet3_rq_create()
1556 bi = dma_zalloc_coherent(&adapter->pdev->dev, sz, &rq->buf_info_pa, in vmxnet3_rq_create()
1567 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
1573 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
1577 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
1578 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
1580 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
1582 adapter->netdev->name, i); in vmxnet3_rq_create_all()
1588 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
1596 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
1599 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
1600 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
1601 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
1602 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
1604 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
1605 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
1606 adapter, budget); in vmxnet3_do_poll()
1618 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
1622 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
1637 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
1643 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
1645 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
1646 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
1649 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
1653 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
1670 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
1672 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
1673 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
1676 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
1678 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
1679 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
1680 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
1683 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
1685 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
1700 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
1703 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
1704 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
1727 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
1730 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
1731 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
1733 if (adapter->shared->ecr) in vmxnet3_msix_event()
1734 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
1736 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
1749 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
1751 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
1752 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
1760 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
1761 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
1763 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
1774 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
1776 switch (adapter->intr.type) { in vmxnet3_netpoll()
1780 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_netpoll()
1781 vmxnet3_msix_rx(0, &adapter->rx_queue[i]); in vmxnet3_netpoll()
1787 vmxnet3_intr(0, adapter->netdev); in vmxnet3_netpoll()
1795 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
1797 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
1802 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
1803 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
1804 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
1805 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
1806 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1810 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
1811 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
1813 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
1814 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1817 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
1820 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
1826 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
1827 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
1828 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
1833 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
1837 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
1840 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
1841 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
1842 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
1843 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1845 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
1846 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1849 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
1850 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
1852 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
1855 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
1859 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
1863 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1866 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
1870 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
1871 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
1872 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
1875 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
1876 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
1877 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
1878 adapter->netdev); in vmxnet3_request_irqs()
1884 netdev_err(adapter->netdev, in vmxnet3_request_irqs()
1889 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
1890 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
1892 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
1900 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
1901 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
1902 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
1903 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
1904 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
1907 netdev_info(adapter->netdev, in vmxnet3_request_irqs()
1917 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
1919 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
1928 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
1929 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
1931 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
1932 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
1937 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
1939 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
1943 adapter->netdev); in vmxnet3_free_irqs()
1949 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
1952 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
1961 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
1963 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
1969 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
1977 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
1980 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
1984 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
1985 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
1987 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
1990 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
1999 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
2002 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
2006 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2007 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
2009 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
2012 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
2044 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
2047 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2053 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2058 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2073 &adapter->pdev->dev, in vmxnet3_set_mc()
2094 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2097 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2099 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2103 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2105 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2108 dma_unmap_single(&adapter->pdev->dev, new_table_pa, in vmxnet3_set_mc()
2114 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2118 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2119 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2128 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2130 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2150 devRead->misc.ddPA = cpu_to_le64(adapter->adapter_pa); in vmxnet3_setup_driver_shared()
2154 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2157 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2161 if (adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_RX) in vmxnet3_setup_driver_shared()
2164 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2165 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2167 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2168 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2171 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2172 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2173 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2174 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2175 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2190 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2191 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2192 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2193 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2209 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2211 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2212 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2215 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2227 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
2232 cpu_to_le64(adapter->rss_conf_pa); in vmxnet3_setup_driver_shared()
2238 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2240 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2241 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2242 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2244 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2249 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
2250 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
2257 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
2263 netdev_dbg(adapter->netdev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
2264 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
2265 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
2266 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
2267 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
2268 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
2270 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
2271 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
2273 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2278 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
2280 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2285 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
2287 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
2288 adapter->shared_pa)); in vmxnet3_activate_dev()
2289 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
2290 adapter->shared_pa)); in vmxnet3_activate_dev()
2291 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2292 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
2294 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
2295 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2298 netdev_err(adapter->netdev, in vmxnet3_activate_dev()
2304 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
2305 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
2307 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
2308 VMXNET3_WRITE_BAR0_REG(adapter, (VMXNET3_REG_RXPROD2 + in vmxnet3_activate_dev()
2310 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
2314 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
2320 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
2321 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
2322 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
2323 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
2324 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
2328 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
2329 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
2330 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
2334 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
2340 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
2343 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2344 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
2345 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2350 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
2354 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
2358 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2359 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
2361 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2362 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
2364 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
2365 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
2366 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
2367 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
2368 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
2370 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2371 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2372 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
2378 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_write_mac_addr() argument
2383 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
2386 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
2394 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
2397 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
2406 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64) in vmxnet3_alloc_pci_resources() argument
2410 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
2448 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2449 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
2457 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2458 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
2466 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
2476 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
2478 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
2480 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
2481 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
2482 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
2483 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
2488 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
2491 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[0]; in vmxnet3_adjust_rx_ring_size()
2494 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
2496 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
2498 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
2499 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2501 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
2503 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2504 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
2506 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
2513 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
2514 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
2518 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
2524 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
2525 rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
2534 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
2539 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
2540 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
2544 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
2546 tq->adapter = adapter; in vmxnet3_create_queues()
2548 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
2557 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
2558 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
2559 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
2560 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
2561 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
2564 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
2565 rq->adapter = adapter; in vmxnet3_create_queues()
2566 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
2569 netdev_err(adapter->netdev, in vmxnet3_create_queues()
2574 netdev_info(adapter->netdev, in vmxnet3_create_queues()
2577 adapter->num_rx_queues = i; in vmxnet3_create_queues()
2585 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
2592 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
2595 adapter = netdev_priv(netdev); in vmxnet3_open()
2597 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
2598 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
2600 err = vmxnet3_create_queues(adapter, adapter->tx_ring_size, in vmxnet3_open()
2601 adapter->rx_ring_size, in vmxnet3_open()
2602 adapter->rx_ring2_size); in vmxnet3_open()
2606 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
2613 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
2614 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
2623 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
2629 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
2632 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
2634 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
2635 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
2637 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
2645 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
2653 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
2656 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
2657 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
2658 dev_close(adapter->netdev); in vmxnet3_force_close()
2665 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
2677 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
2681 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
2682 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
2685 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
2686 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
2687 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
2695 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
2705 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
2707 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
2714 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64) in vmxnet3_declare_features() argument
2716 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
2732 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
2736 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
2739 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
2756 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int nvec) in vmxnet3_acquire_msix_vectors() argument
2758 int ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
2759 adapter->intr.msix_entries, nvec, nvec); in vmxnet3_acquire_msix_vectors()
2762 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
2766 ret = pci_enable_msix_range(adapter->pdev, in vmxnet3_acquire_msix_vectors()
2767 adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
2773 dev_err(&adapter->netdev->dev, in vmxnet3_acquire_msix_vectors()
2784 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
2790 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
2791 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
2793 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
2794 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
2795 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
2796 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
2798 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
2799 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
2803 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
2806 nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ? in vmxnet3_alloc_intr_resources()
2807 1 : adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
2808 nvec += adapter->share_intr == VMXNET3_INTR_BUDDYSHARE ? in vmxnet3_alloc_intr_resources()
2809 0 : adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
2815 adapter->intr.msix_entries[i].entry = i; in vmxnet3_alloc_intr_resources()
2817 nvec = vmxnet3_acquire_msix_vectors(adapter, nvec); in vmxnet3_alloc_intr_resources()
2825 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
2826 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
2827 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
2828 netdev_err(adapter->netdev, in vmxnet3_alloc_intr_resources()
2830 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
2834 adapter->intr.num_intrs = nvec; in vmxnet3_alloc_intr_resources()
2839 dev_info(&adapter->pdev->dev, in vmxnet3_alloc_intr_resources()
2843 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
2846 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
2847 if (!pci_enable_msi(adapter->pdev)) { in vmxnet3_alloc_intr_resources()
2848 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
2849 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
2855 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
2856 dev_info(&adapter->netdev->dev, in vmxnet3_alloc_intr_resources()
2858 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
2861 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
2866 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
2868 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
2869 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
2870 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
2871 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
2873 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
2880 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
2881 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
2883 netdev_err(adapter->netdev, "tx hang\n"); in vmxnet3_tx_timeout()
2884 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
2885 netif_wake_queue(adapter->netdev); in vmxnet3_tx_timeout()
2892 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
2894 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
2897 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
2902 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
2903 netdev_notice(adapter->netdev, "resetting\n"); in vmxnet3_reset_work()
2904 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
2905 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
2906 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
2908 netdev_info(adapter->netdev, "already closed\n"); in vmxnet3_reset_work()
2912 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
2940 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
2975 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
2976 adapter->netdev = netdev; in vmxnet3_probe_device()
2977 adapter->pdev = pdev; in vmxnet3_probe_device()
2979 adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE; in vmxnet3_probe_device()
2980 adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE; in vmxnet3_probe_device()
2981 adapter->rx_ring2_size = VMXNET3_DEF_RX_RING2_SIZE; in vmxnet3_probe_device()
2983 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
2984 adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter, in vmxnet3_probe_device()
2987 adapter->shared = dma_alloc_coherent( in vmxnet3_probe_device()
2988 &adapter->pdev->dev, in vmxnet3_probe_device()
2990 &adapter->shared_pa, GFP_KERNEL); in vmxnet3_probe_device()
2991 if (!adapter->shared) { in vmxnet3_probe_device()
2997 adapter->num_rx_queues = num_rx_queues; in vmxnet3_probe_device()
2998 adapter->num_tx_queues = num_tx_queues; in vmxnet3_probe_device()
2999 adapter->rx_buf_per_pkt = 1; in vmxnet3_probe_device()
3001 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
3002 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
3003 adapter->tqd_start = dma_alloc_coherent(&adapter->pdev->dev, size, in vmxnet3_probe_device()
3004 &adapter->queue_desc_pa, in vmxnet3_probe_device()
3007 if (!adapter->tqd_start) { in vmxnet3_probe_device()
3012 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
3013 adapter->num_tx_queues); in vmxnet3_probe_device()
3015 adapter->pm_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3017 &adapter->pm_conf_pa, in vmxnet3_probe_device()
3019 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
3026 adapter->rss_conf = dma_alloc_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3028 &adapter->rss_conf_pa, in vmxnet3_probe_device()
3030 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
3036 err = vmxnet3_alloc_pci_resources(adapter, &dma64); in vmxnet3_probe_device()
3040 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
3042 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1); in vmxnet3_probe_device()
3050 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
3052 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
3061 vmxnet3_declare_features(adapter, dma64); in vmxnet3_probe_device()
3063 if (adapter->num_tx_queues == adapter->num_rx_queues) in vmxnet3_probe_device()
3064 adapter->share_intr = VMXNET3_INTR_BUDDYSHARE; in vmxnet3_probe_device()
3066 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
3068 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
3071 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
3072 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3073 adapter->rss = true; in vmxnet3_probe_device()
3078 adapter->rss = false; in vmxnet3_probe_device()
3082 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
3089 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
3090 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
3092 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3094 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
3095 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
3096 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
3100 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
3104 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
3105 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
3115 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
3119 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
3121 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
3124 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_probe_device()
3125 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_probe_device()
3128 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_probe_device()
3129 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_probe_device()
3131 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_probe_device()
3132 adapter->queue_desc_pa); in vmxnet3_probe_device()
3134 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_probe_device()
3136 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
3138 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_probe_device()
3149 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
3162 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
3166 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
3167 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
3169 dma_free_coherent(&adapter->pdev->dev, sizeof(struct UPT1_RSSConf), in vmxnet3_remove_device()
3170 adapter->rss_conf, adapter->rss_conf_pa); in vmxnet3_remove_device()
3172 dma_free_coherent(&adapter->pdev->dev, sizeof(struct Vmxnet3_PMConf), in vmxnet3_remove_device()
3173 adapter->pm_conf, adapter->pm_conf_pa); in vmxnet3_remove_device()
3175 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
3177 dma_free_coherent(&adapter->pdev->dev, size, adapter->tqd_start, in vmxnet3_remove_device()
3178 adapter->queue_desc_pa); in vmxnet3_remove_device()
3179 dma_free_coherent(&adapter->pdev->dev, in vmxnet3_remove_device()
3181 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
3182 dma_unmap_single(&adapter->pdev->dev, adapter->adapter_pa, in vmxnet3_remove_device()
3195 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
3208 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
3209 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
3211 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
3212 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
3213 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
3219 pmConf = adapter->pm_conf; in vmxnet3_suspend()
3222 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
3232 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
3275 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
3280 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
3281 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
3283 adapter->shared->devRead.pmConfDesc.confPA = in vmxnet3_suspend()
3284 cpu_to_le64(adapter->pm_conf_pa); in vmxnet3_suspend()
3286 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3287 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
3289 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3293 adapter->wol); in vmxnet3_suspend()
3308 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
3321 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
3330 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
3331 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
3333 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
3334 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_resume()
3335 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_resume()
3337 vmxnet3_reset_dev(adapter); in vmxnet3_resume()
3338 err = vmxnet3_activate_dev(adapter); in vmxnet3_resume()
3342 vmxnet3_force_close(adapter); in vmxnet3_resume()