Lines Matching full:adapter

53 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
59 vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_enable_intr() argument
61 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0); in vmxnet3_enable_intr()
66 vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx) in vmxnet3_disable_intr() argument
68 VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1); in vmxnet3_disable_intr()
76 vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_enable_all_intrs() argument
80 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_enable_all_intrs()
81 vmxnet3_enable_intr(adapter, i); in vmxnet3_enable_all_intrs()
82 adapter->shared->devRead.intrConf.intrCtrl &= in vmxnet3_enable_all_intrs()
88 vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter) in vmxnet3_disable_all_intrs() argument
92 adapter->shared->devRead.intrConf.intrCtrl |= in vmxnet3_disable_all_intrs()
94 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_disable_all_intrs()
95 vmxnet3_disable_intr(adapter, i); in vmxnet3_disable_all_intrs()
100 vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events) in vmxnet3_ack_events() argument
102 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events); in vmxnet3_ack_events()
107 vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stopped() argument
114 vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_start() argument
117 netif_start_subqueue(adapter->netdev, tq - adapter->tx_queue); in vmxnet3_tq_start()
122 vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_wake() argument
125 netif_wake_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_wake()
130 vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter) in vmxnet3_tq_stop() argument
134 netif_stop_subqueue(adapter->netdev, (tq - adapter->tx_queue)); in vmxnet3_tq_stop()
142 vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue) in vmxnet3_check_link() argument
148 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_check_link()
149 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); in vmxnet3_check_link()
150 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_check_link()
151 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_check_link()
153 adapter->link_speed = ret >> 16; in vmxnet3_check_link()
156 adapter->netdev->name, adapter->link_speed); in vmxnet3_check_link()
157 if (!netif_carrier_ok(adapter->netdev)) in vmxnet3_check_link()
158 netif_carrier_on(adapter->netdev); in vmxnet3_check_link()
161 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
162 vmxnet3_tq_start(&adapter->tx_queue[i], in vmxnet3_check_link()
163 adapter); in vmxnet3_check_link()
167 adapter->netdev->name); in vmxnet3_check_link()
168 if (netif_carrier_ok(adapter->netdev)) in vmxnet3_check_link()
169 netif_carrier_off(adapter->netdev); in vmxnet3_check_link()
172 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_check_link()
173 vmxnet3_tq_stop(&adapter->tx_queue[i], adapter); in vmxnet3_check_link()
179 vmxnet3_process_events(struct vmxnet3_adapter *adapter) in vmxnet3_process_events() argument
183 u32 events = le32_to_cpu(adapter->shared->ecr); in vmxnet3_process_events()
187 vmxnet3_ack_events(adapter, events); in vmxnet3_process_events()
191 vmxnet3_check_link(adapter, true); in vmxnet3_process_events()
195 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_process_events()
196 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_process_events()
198 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_process_events()
200 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_process_events()
201 if (adapter->tqd_start[i].status.stopped) in vmxnet3_process_events()
202 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
204 adapter->netdev->name, i, le32_to_cpu( in vmxnet3_process_events()
205 adapter->tqd_start[i].status.error)); in vmxnet3_process_events()
206 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_process_events()
207 if (adapter->rqd_start[i].status.stopped) in vmxnet3_process_events()
208 dev_err(&adapter->netdev->dev, in vmxnet3_process_events()
210 adapter->netdev->name, i, in vmxnet3_process_events()
211 adapter->rqd_start[i].status.error); in vmxnet3_process_events()
213 schedule_work(&adapter->work); in vmxnet3_process_events()
337 struct pci_dev *pdev, struct vmxnet3_adapter *adapter) in vmxnet3_unmap_pkt() argument
372 struct vmxnet3_adapter *adapter) in vmxnet3_tq_tx_complete() argument
380 &gdesc->tcd), tq, adapter->pdev, in vmxnet3_tq_tx_complete()
381 adapter); in vmxnet3_tq_tx_complete()
389 if (unlikely(vmxnet3_tq_stopped(tq, adapter) && in vmxnet3_tq_tx_complete()
392 netif_carrier_ok(adapter->netdev))) { in vmxnet3_tq_tx_complete()
393 vmxnet3_tq_wake(tq, adapter); in vmxnet3_tq_tx_complete()
403 struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup() argument
412 vmxnet3_unmap_tx_buf(tbi, adapter->pdev); in vmxnet3_tq_cleanup()
436 struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy() argument
439 pci_free_consistent(adapter->pdev, tq->tx_ring.size * in vmxnet3_tq_destroy()
445 pci_free_consistent(adapter->pdev, tq->data_ring.size * in vmxnet3_tq_destroy()
451 pci_free_consistent(adapter->pdev, tq->comp_ring.size * in vmxnet3_tq_destroy()
463 vmxnet3_tq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_destroy_all() argument
467 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_destroy_all()
468 vmxnet3_tq_destroy(&adapter->tx_queue[i], adapter); in vmxnet3_tq_destroy_all()
474 struct vmxnet3_adapter *adapter) in vmxnet3_tq_init() argument
504 struct vmxnet3_adapter *adapter) in vmxnet3_tq_create() argument
509 tq->tx_ring.base = pci_alloc_consistent(adapter->pdev, tq->tx_ring.size in vmxnet3_tq_create()
514 adapter->netdev->name); in vmxnet3_tq_create()
518 tq->data_ring.base = pci_alloc_consistent(adapter->pdev, in vmxnet3_tq_create()
524 adapter->netdev->name); in vmxnet3_tq_create()
528 tq->comp_ring.base = pci_alloc_consistent(adapter->pdev, in vmxnet3_tq_create()
534 adapter->netdev->name); in vmxnet3_tq_create()
542 adapter->netdev->name); in vmxnet3_tq_create()
549 vmxnet3_tq_destroy(tq, adapter); in vmxnet3_tq_create()
554 vmxnet3_tq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_cleanup_all() argument
558 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_cleanup_all()
559 vmxnet3_tq_cleanup(&adapter->tx_queue[i], adapter); in vmxnet3_tq_cleanup_all()
570 int num_to_alloc, struct vmxnet3_adapter *adapter) in vmxnet3_rq_alloc_rx_buf() argument
592 rbi->skb->dev = adapter->netdev; in vmxnet3_rq_alloc_rx_buf()
595 rbi->dma_addr = pci_map_single(adapter->pdev, in vmxnet3_rq_alloc_rx_buf()
612 rbi->dma_addr = pci_map_page(adapter->pdev, in vmxnet3_rq_alloc_rx_buf()
637 dev_dbg(&adapter->netdev->dev, in vmxnet3_rq_alloc_rx_buf()
670 struct vmxnet3_adapter *adapter) in vmxnet3_map_pkt() argument
697 dev_dbg(&adapter->netdev->dev, in vmxnet3_map_pkt()
724 tbi->dma_addr = pci_map_single(adapter->pdev, in vmxnet3_map_pkt()
737 dev_dbg(&adapter->netdev->dev, in vmxnet3_map_pkt()
753 tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, in vmxnet3_map_pkt()
766 dev_dbg(&adapter->netdev->dev, in vmxnet3_map_pkt()
784 vmxnet3_tq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_tq_init_all() argument
788 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_tq_init_all()
789 vmxnet3_tq_init(&adapter->tx_queue[i], adapter); in vmxnet3_tq_init_all()
813 struct vmxnet3_adapter *adapter) in vmxnet3_parse_and_copy_hdr() argument
865 dev_dbg(&adapter->netdev->dev, in vmxnet3_parse_and_copy_hdr()
908 struct vmxnet3_adapter *adapter, struct net_device *netdev) in vmxnet3_tq_xmit() argument
958 dev_dbg(&adapter->netdev->dev, in vmxnet3_tq_xmit()
960 " next2fill %u\n", adapter->netdev->name, in vmxnet3_tq_xmit()
963 vmxnet3_tq_stop(tq, adapter); in vmxnet3_tq_xmit()
969 ret = vmxnet3_parse_and_copy_hdr(skb, tq, &ctx, adapter); in vmxnet3_tq_xmit()
993 vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter); in vmxnet3_tq_xmit()
1041 dev_dbg(&adapter->netdev->dev, in vmxnet3_tq_xmit()
1052 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_tq_xmit()
1073 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_xmit_frame() local
1075 BUG_ON(skb->queue_mapping > adapter->num_tx_queues); in vmxnet3_xmit_frame()
1077 &adapter->tx_queue[skb->queue_mapping], in vmxnet3_xmit_frame()
1078 adapter, netdev); in vmxnet3_xmit_frame()
1083 vmxnet3_rx_csum(struct vmxnet3_adapter *adapter, in vmxnet3_rx_csum() argument
1087 if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) { in vmxnet3_rx_csum()
1111 struct vmxnet3_rx_ctx *ctx, struct vmxnet3_adapter *adapter) in vmxnet3_rx_error() argument
1138 struct vmxnet3_adapter *adapter, int quota) in vmxnet3_rq_rx_complete() argument
1170 ring_idx = rcd->rqID < adapter->num_rx_queues ? 0 : 1; in vmxnet3_rq_rx_complete()
1180 vmxnet3_rx_error(rq, rcd, ctx, adapter); in vmxnet3_rq_rx_complete()
1194 dev_dbg(&adapter->netdev->dev, in vmxnet3_rq_rx_complete()
1214 pci_unmap_single(adapter->pdev, rbi->dma_addr, rbi->len, in vmxnet3_rq_rx_complete()
1220 new_skb->dev = adapter->netdev; in vmxnet3_rq_rx_complete()
1223 rbi->dma_addr = pci_map_single(adapter->pdev, in vmxnet3_rq_rx_complete()
1257 pci_unmap_page(adapter->pdev, in vmxnet3_rq_rx_complete()
1266 rbi->dma_addr = pci_map_page(adapter->pdev, rbi->page, in vmxnet3_rq_rx_complete()
1278 vmxnet3_rx_csum(adapter, skb, in vmxnet3_rq_rx_complete()
1280 skb->protocol = eth_type_trans(skb, adapter->netdev); in vmxnet3_rq_rx_complete()
1285 if (adapter->netdev->features & NETIF_F_LRO) in vmxnet3_rq_rx_complete()
1311 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_rq_rx_complete()
1328 struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup() argument
1343 pci_unmap_single(adapter->pdev, rxd->addr, in vmxnet3_rq_cleanup()
1349 pci_unmap_page(adapter->pdev, rxd->addr, in vmxnet3_rq_cleanup()
1368 vmxnet3_rq_cleanup_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_cleanup_all() argument
1372 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_cleanup_all()
1373 vmxnet3_rq_cleanup(&adapter->rx_queue[i], adapter); in vmxnet3_rq_cleanup_all()
1378 struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy() argument
1396 pci_free_consistent(adapter->pdev, rq->rx_ring[i].size in vmxnet3_rq_destroy()
1406 pci_free_consistent(adapter->pdev, rq->comp_ring.size * in vmxnet3_rq_destroy()
1416 struct vmxnet3_adapter *adapter) in vmxnet3_rq_init() argument
1424 if (i % adapter->rx_buf_per_pkt == 0) { in vmxnet3_rq_init()
1426 rq->buf_info[0][i].len = adapter->skb_buf_size; in vmxnet3_rq_init()
1447 adapter) == 0) { in vmxnet3_rq_init()
1451 vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter); in vmxnet3_rq_init()
1468 vmxnet3_rq_init_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_init_all() argument
1472 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_init_all()
1473 err = vmxnet3_rq_init(&adapter->rx_queue[i], adapter); in vmxnet3_rq_init_all()
1475 dev_err(&adapter->netdev->dev, "%s: failed to " in vmxnet3_rq_init_all()
1477 adapter->netdev->name, i); in vmxnet3_rq_init_all()
1487 vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter) in vmxnet3_rq_create() argument
1496 rq->rx_ring[i].base = pci_alloc_consistent(adapter->pdev, sz, in vmxnet3_rq_create()
1500 adapter->netdev->name, i); in vmxnet3_rq_create()
1506 rq->comp_ring.base = pci_alloc_consistent(adapter->pdev, sz, in vmxnet3_rq_create()
1510 adapter->netdev->name); in vmxnet3_rq_create()
1519 adapter->netdev->name); in vmxnet3_rq_create()
1528 vmxnet3_rq_destroy(rq, adapter); in vmxnet3_rq_create()
1534 vmxnet3_rq_create_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_create_all() argument
1538 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_rq_create_all()
1539 err = vmxnet3_rq_create(&adapter->rx_queue[i], adapter); in vmxnet3_rq_create_all()
1541 dev_err(&adapter->netdev->dev, in vmxnet3_rq_create_all()
1543 adapter->netdev->name, i); in vmxnet3_rq_create_all()
1549 vmxnet3_rq_destroy_all(adapter); in vmxnet3_rq_create_all()
1557 vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget) in vmxnet3_do_poll() argument
1560 if (unlikely(adapter->shared->ecr)) in vmxnet3_do_poll()
1561 vmxnet3_process_events(adapter); in vmxnet3_do_poll()
1562 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_do_poll()
1563 vmxnet3_tq_tx_complete(&adapter->tx_queue[i], adapter); in vmxnet3_do_poll()
1565 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_do_poll()
1566 rcd_done += vmxnet3_rq_rx_complete(&adapter->rx_queue[i], in vmxnet3_do_poll()
1567 adapter, budget); in vmxnet3_do_poll()
1579 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); in vmxnet3_poll()
1583 vmxnet3_enable_all_intrs(rx_queue->adapter); in vmxnet3_poll()
1598 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_poll_rx_only() local
1604 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_poll_rx_only()
1606 &adapter->tx_queue[rq - adapter->rx_queue]; in vmxnet3_poll_rx_only()
1607 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_poll_rx_only()
1610 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); in vmxnet3_poll_rx_only()
1614 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_poll_rx_only()
1631 struct vmxnet3_adapter *adapter = tq->adapter; in vmxnet3_msix_tx() local
1633 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_tx()
1634 vmxnet3_disable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
1637 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_msix_tx()
1639 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_msix_tx()
1640 struct vmxnet3_tx_queue *txq = &adapter->tx_queue[i]; in vmxnet3_msix_tx()
1641 vmxnet3_tq_tx_complete(txq, adapter); in vmxnet3_msix_tx()
1644 vmxnet3_tq_tx_complete(tq, adapter); in vmxnet3_msix_tx()
1646 vmxnet3_enable_intr(adapter, tq->comp_ring.intr_idx); in vmxnet3_msix_tx()
1661 struct vmxnet3_adapter *adapter = rq->adapter; in vmxnet3_msix_rx() local
1664 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_rx()
1665 vmxnet3_disable_intr(adapter, rq->comp_ring.intr_idx); in vmxnet3_msix_rx()
1688 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_msix_event() local
1691 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_msix_event()
1692 vmxnet3_disable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
1694 if (adapter->shared->ecr) in vmxnet3_msix_event()
1695 vmxnet3_process_events(adapter); in vmxnet3_msix_event()
1697 vmxnet3_enable_intr(adapter, adapter->intr.event_intr_idx); in vmxnet3_msix_event()
1710 struct vmxnet3_adapter *adapter = netdev_priv(dev); in vmxnet3_intr() local
1712 if (adapter->intr.type == VMXNET3_IT_INTX) { in vmxnet3_intr()
1713 u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR); in vmxnet3_intr()
1721 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_intr()
1722 vmxnet3_disable_all_intrs(adapter); in vmxnet3_intr()
1724 napi_schedule(&adapter->rx_queue[0].napi); in vmxnet3_intr()
1735 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_netpoll() local
1737 if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE) in vmxnet3_netpoll()
1738 vmxnet3_disable_all_intrs(adapter); in vmxnet3_netpoll()
1740 vmxnet3_do_poll(adapter, adapter->rx_queue[0].rx_ring[0].size); in vmxnet3_netpoll()
1741 vmxnet3_enable_all_intrs(adapter); in vmxnet3_netpoll()
1747 vmxnet3_request_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_request_irqs() argument
1749 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_request_irqs()
1754 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
1755 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_request_irqs()
1756 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_request_irqs()
1757 sprintf(adapter->tx_queue[i].name, "%s-tx-%d", in vmxnet3_request_irqs()
1758 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1762 adapter->tx_queue[i].name, in vmxnet3_request_irqs()
1763 &adapter->tx_queue[i]); in vmxnet3_request_irqs()
1765 sprintf(adapter->tx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
1766 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1769 dev_err(&adapter->netdev->dev, in vmxnet3_request_irqs()
1772 adapter->tx_queue[i].name, err); in vmxnet3_request_irqs()
1778 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) { in vmxnet3_request_irqs()
1779 for (; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
1780 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
1785 adapter->tx_queue[i].comp_ring.intr_idx in vmxnet3_request_irqs()
1789 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
1792 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
1793 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) in vmxnet3_request_irqs()
1794 sprintf(adapter->rx_queue[i].name, "%s-rx-%d", in vmxnet3_request_irqs()
1795 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1797 sprintf(adapter->rx_queue[i].name, "%s-rxtx-%d", in vmxnet3_request_irqs()
1798 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1801 adapter->rx_queue[i].name, in vmxnet3_request_irqs()
1802 &(adapter->rx_queue[i])); in vmxnet3_request_irqs()
1806 adapter->rx_queue[i].name, err); in vmxnet3_request_irqs()
1810 adapter->rx_queue[i].comp_ring.intr_idx = vector++; in vmxnet3_request_irqs()
1814 adapter->netdev->name, vector); in vmxnet3_request_irqs()
1817 intr->event_msi_vector_name, adapter->netdev); in vmxnet3_request_irqs()
1821 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
1822 err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0, in vmxnet3_request_irqs()
1823 adapter->netdev->name, adapter->netdev); in vmxnet3_request_irqs()
1826 adapter->num_rx_queues = 1; in vmxnet3_request_irqs()
1827 err = request_irq(adapter->pdev->irq, vmxnet3_intr, in vmxnet3_request_irqs()
1828 IRQF_SHARED, adapter->netdev->name, in vmxnet3_request_irqs()
1829 adapter->netdev); in vmxnet3_request_irqs()
1836 ":%d\n", adapter->netdev->name, intr->type, err); in vmxnet3_request_irqs()
1839 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_request_irqs()
1840 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_request_irqs()
1842 rq->qid2 = i + adapter->num_rx_queues; in vmxnet3_request_irqs()
1850 if (adapter->intr.type != VMXNET3_IT_MSIX) { in vmxnet3_request_irqs()
1851 adapter->intr.event_intr_idx = 0; in vmxnet3_request_irqs()
1852 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_request_irqs()
1853 adapter->tx_queue[i].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
1854 adapter->rx_queue[0].comp_ring.intr_idx = 0; in vmxnet3_request_irqs()
1858 "allocated\n", adapter->netdev->name, intr->type, in vmxnet3_request_irqs()
1867 vmxnet3_free_irqs(struct vmxnet3_adapter *adapter) in vmxnet3_free_irqs() argument
1869 struct vmxnet3_intr *intr = &adapter->intr; in vmxnet3_free_irqs()
1878 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE) { in vmxnet3_free_irqs()
1879 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_free_irqs()
1881 &(adapter->tx_queue[i])); in vmxnet3_free_irqs()
1882 if (adapter->share_intr == VMXNET3_INTR_TXSHARE) in vmxnet3_free_irqs()
1887 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_free_irqs()
1889 &(adapter->rx_queue[i])); in vmxnet3_free_irqs()
1893 adapter->netdev); in vmxnet3_free_irqs()
1899 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
1902 free_irq(adapter->pdev->irq, adapter->netdev); in vmxnet3_free_irqs()
1911 vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) in vmxnet3_restore_vlan() argument
1913 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_restore_vlan()
1919 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in vmxnet3_restore_vlan()
1927 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_add_vid() local
1930 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_add_vid()
1934 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
1935 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_add_vid()
1937 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_add_vid()
1940 set_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_add_vid()
1949 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_vlan_rx_kill_vid() local
1952 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_vlan_rx_kill_vid()
1956 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
1957 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_vlan_rx_kill_vid()
1959 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_vlan_rx_kill_vid()
1962 clear_bit(vid, adapter->active_vlans); in vmxnet3_vlan_rx_kill_vid()
1994 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mc() local
1997 &adapter->shared->devRead.rxFilterConf; in vmxnet3_set_mc()
2002 u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; in vmxnet3_set_mc()
2007 vmxnet3_restore_vlan(adapter); in vmxnet3_set_mc()
2037 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2040 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2042 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2046 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_set_mc()
2048 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_set_mc()
2054 vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter) in vmxnet3_rq_destroy_all() argument
2058 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_rq_destroy_all()
2059 vmxnet3_rq_destroy(&adapter->rx_queue[i], adapter); in vmxnet3_rq_destroy_all()
2064 * Set up driver_shared based on settings in adapter.
2068 vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) in vmxnet3_setup_driver_shared() argument
2070 struct Vmxnet3_DriverShared *shared = adapter->shared; in vmxnet3_setup_driver_shared()
2090 devRead->misc.ddPA = cpu_to_le64(virt_to_phys(adapter)); in vmxnet3_setup_driver_shared()
2094 if (adapter->netdev->features & NETIF_F_RXCSUM) in vmxnet3_setup_driver_shared()
2097 if (adapter->netdev->features & NETIF_F_LRO) { in vmxnet3_setup_driver_shared()
2101 if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) in vmxnet3_setup_driver_shared()
2104 devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); in vmxnet3_setup_driver_shared()
2105 devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); in vmxnet3_setup_driver_shared()
2107 adapter->num_tx_queues * sizeof(struct Vmxnet3_TxQueueDesc) + in vmxnet3_setup_driver_shared()
2108 adapter->num_rx_queues * sizeof(struct Vmxnet3_RxQueueDesc)); in vmxnet3_setup_driver_shared()
2111 devRead->misc.numTxQueues = adapter->num_tx_queues; in vmxnet3_setup_driver_shared()
2112 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_setup_driver_shared()
2113 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_setup_driver_shared()
2114 BUG_ON(adapter->tx_queue[i].tx_ring.base == NULL); in vmxnet3_setup_driver_shared()
2115 tqc = &adapter->tqd_start[i].conf; in vmxnet3_setup_driver_shared()
2130 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2131 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_setup_driver_shared()
2132 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_setup_driver_shared()
2133 rqc = &adapter->rqd_start[i].conf; in vmxnet3_setup_driver_shared()
2150 memset(adapter->rss_conf, 0, sizeof(*adapter->rss_conf)); in vmxnet3_setup_driver_shared()
2152 if (adapter->rss) { in vmxnet3_setup_driver_shared()
2153 struct UPT1_RSSConf *rssConf = adapter->rss_conf; in vmxnet3_setup_driver_shared()
2155 devRead->misc.numRxQueues = adapter->num_rx_queues; in vmxnet3_setup_driver_shared()
2166 i, adapter->num_rx_queues); in vmxnet3_setup_driver_shared()
2176 devRead->intrConf.autoMask = adapter->intr.mask_mode == in vmxnet3_setup_driver_shared()
2178 devRead->intrConf.numIntrs = adapter->intr.num_intrs; in vmxnet3_setup_driver_shared()
2179 for (i = 0; i < adapter->intr.num_intrs; i++) in vmxnet3_setup_driver_shared()
2180 devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; in vmxnet3_setup_driver_shared()
2182 devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; in vmxnet3_setup_driver_shared()
2187 vmxnet3_restore_vlan(adapter); in vmxnet3_setup_driver_shared()
2188 vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); in vmxnet3_setup_driver_shared()
2195 vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) in vmxnet3_activate_dev() argument
2201 dev_dbg(&adapter->netdev->dev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," in vmxnet3_activate_dev()
2202 " ring sizes %u %u %u\n", adapter->netdev->name, in vmxnet3_activate_dev()
2203 adapter->skb_buf_size, adapter->rx_buf_per_pkt, in vmxnet3_activate_dev()
2204 adapter->tx_queue[0].tx_ring.size, in vmxnet3_activate_dev()
2205 adapter->rx_queue[0].rx_ring[0].size, in vmxnet3_activate_dev()
2206 adapter->rx_queue[0].rx_ring[1].size); in vmxnet3_activate_dev()
2208 vmxnet3_tq_init_all(adapter); in vmxnet3_activate_dev()
2209 err = vmxnet3_rq_init_all(adapter); in vmxnet3_activate_dev()
2212 adapter->netdev->name, err); in vmxnet3_activate_dev()
2216 err = vmxnet3_request_irqs(adapter); in vmxnet3_activate_dev()
2219 adapter->netdev->name, err); in vmxnet3_activate_dev()
2223 vmxnet3_setup_driver_shared(adapter); in vmxnet3_activate_dev()
2225 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, VMXNET3_GET_ADDR_LO( in vmxnet3_activate_dev()
2226 adapter->shared_pa)); in vmxnet3_activate_dev()
2227 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( in vmxnet3_activate_dev()
2228 adapter->shared_pa)); in vmxnet3_activate_dev()
2229 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2230 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_activate_dev()
2232 ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_activate_dev()
2233 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_activate_dev()
2237 adapter->netdev->name, ret); in vmxnet3_activate_dev()
2242 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_activate_dev()
2243 VMXNET3_WRITE_BAR0_REG(adapter, in vmxnet3_activate_dev()
2245 adapter->rx_queue[i].rx_ring[0].next2fill); in vmxnet3_activate_dev()
2246 VMXNET3_WRITE_BAR0_REG(adapter, (VMXNET3_REG_RXPROD2 + in vmxnet3_activate_dev()
2248 adapter->rx_queue[i].rx_ring[1].next2fill); in vmxnet3_activate_dev()
2252 vmxnet3_set_mc(adapter->netdev); in vmxnet3_activate_dev()
2258 vmxnet3_check_link(adapter, true); in vmxnet3_activate_dev()
2259 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_activate_dev()
2260 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_activate_dev()
2261 vmxnet3_enable_all_intrs(adapter); in vmxnet3_activate_dev()
2262 clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_activate_dev()
2266 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0); in vmxnet3_activate_dev()
2267 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0); in vmxnet3_activate_dev()
2268 vmxnet3_free_irqs(adapter); in vmxnet3_activate_dev()
2272 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_activate_dev()
2278 vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) in vmxnet3_reset_dev() argument
2281 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2282 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); in vmxnet3_reset_dev()
2283 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_reset_dev()
2288 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) in vmxnet3_quiesce_dev() argument
2292 if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) in vmxnet3_quiesce_dev()
2296 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2297 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_quiesce_dev()
2299 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_quiesce_dev()
2300 vmxnet3_disable_all_intrs(adapter); in vmxnet3_quiesce_dev()
2302 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_quiesce_dev()
2303 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_quiesce_dev()
2304 netif_tx_disable(adapter->netdev); in vmxnet3_quiesce_dev()
2305 adapter->link_speed = 0; in vmxnet3_quiesce_dev()
2306 netif_carrier_off(adapter->netdev); in vmxnet3_quiesce_dev()
2308 vmxnet3_tq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2309 vmxnet3_rq_cleanup_all(adapter); in vmxnet3_quiesce_dev()
2310 vmxnet3_free_irqs(adapter); in vmxnet3_quiesce_dev()
2316 vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_write_mac_addr() argument
2321 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp); in vmxnet3_write_mac_addr()
2324 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp); in vmxnet3_write_mac_addr()
2332 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_set_mac_addr() local
2335 vmxnet3_write_mac_addr(adapter, addr->sa_data); in vmxnet3_set_mac_addr()
2344 vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64) in vmxnet3_alloc_pci_resources() argument
2348 struct pci_dev *pdev = adapter->pdev; in vmxnet3_alloc_pci_resources()
2352 printk(KERN_ERR "Failed to enable adapter %s: error %d\n", in vmxnet3_alloc_pci_resources()
2360 "for adapter %s\n", pci_name(pdev)); in vmxnet3_alloc_pci_resources()
2367 printk(KERN_ERR "pci_set_dma_mask failed for adapter " in vmxnet3_alloc_pci_resources()
2378 printk(KERN_ERR "Failed to request region for adapter %s: " in vmxnet3_alloc_pci_resources()
2387 adapter->hw_addr0 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2388 if (!adapter->hw_addr0) { in vmxnet3_alloc_pci_resources()
2389 printk(KERN_ERR "Failed to map bar0 for adapter %s\n", in vmxnet3_alloc_pci_resources()
2397 adapter->hw_addr1 = ioremap(mmio_start, mmio_len); in vmxnet3_alloc_pci_resources()
2398 if (!adapter->hw_addr1) { in vmxnet3_alloc_pci_resources()
2399 printk(KERN_ERR "Failed to map bar1 for adapter %s\n", in vmxnet3_alloc_pci_resources()
2407 iounmap(adapter->hw_addr0); in vmxnet3_alloc_pci_resources()
2417 vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_pci_resources() argument
2419 BUG_ON(!adapter->pdev); in vmxnet3_free_pci_resources()
2421 iounmap(adapter->hw_addr0); in vmxnet3_free_pci_resources()
2422 iounmap(adapter->hw_addr1); in vmxnet3_free_pci_resources()
2423 pci_release_selected_regions(adapter->pdev, (1 << 2) - 1); in vmxnet3_free_pci_resources()
2424 pci_disable_device(adapter->pdev); in vmxnet3_free_pci_resources()
2429 vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) in vmxnet3_adjust_rx_ring_size() argument
2432 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[0]; in vmxnet3_adjust_rx_ring_size()
2435 if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE - in vmxnet3_adjust_rx_ring_size()
2437 adapter->skb_buf_size = adapter->netdev->mtu + in vmxnet3_adjust_rx_ring_size()
2439 if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE) in vmxnet3_adjust_rx_ring_size()
2440 adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2442 adapter->rx_buf_per_pkt = 1; in vmxnet3_adjust_rx_ring_size()
2444 adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE; in vmxnet3_adjust_rx_ring_size()
2445 sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE + in vmxnet3_adjust_rx_ring_size()
2447 adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; in vmxnet3_adjust_rx_ring_size()
2454 sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; in vmxnet3_adjust_rx_ring_size()
2455 ring0_size = adapter->rx_queue[0].rx_ring[0].size; in vmxnet3_adjust_rx_ring_size()
2459 ring1_size = adapter->rx_queue[0].rx_ring[1].size; in vmxnet3_adjust_rx_ring_size()
2462 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_adjust_rx_ring_size()
2463 rq = &adapter->rx_queue[i]; in vmxnet3_adjust_rx_ring_size()
2472 vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size, in vmxnet3_create_queues() argument
2477 for (i = 0; i < adapter->num_tx_queues; i++) { in vmxnet3_create_queues()
2478 struct vmxnet3_tx_queue *tq = &adapter->tx_queue[i]; in vmxnet3_create_queues()
2482 tq->shared = &adapter->tqd_start[i].ctrl; in vmxnet3_create_queues()
2484 tq->adapter = adapter; in vmxnet3_create_queues()
2486 err = vmxnet3_tq_create(tq, adapter); in vmxnet3_create_queues()
2495 adapter->rx_queue[0].rx_ring[0].size = rx_ring_size; in vmxnet3_create_queues()
2496 adapter->rx_queue[0].rx_ring[1].size = rx_ring2_size; in vmxnet3_create_queues()
2497 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_create_queues()
2498 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_create_queues()
2499 struct vmxnet3_rx_queue *rq = &adapter->rx_queue[i]; in vmxnet3_create_queues()
2502 rq->shared = &adapter->rqd_start[i].ctrl; in vmxnet3_create_queues()
2503 rq->adapter = adapter; in vmxnet3_create_queues()
2504 err = vmxnet3_rq_create(rq, adapter); in vmxnet3_create_queues()
2513 adapter->num_rx_queues = i; in vmxnet3_create_queues()
2521 vmxnet3_tq_destroy_all(adapter); in vmxnet3_create_queues()
2528 struct vmxnet3_adapter *adapter; in vmxnet3_open() local
2531 adapter = netdev_priv(netdev); in vmxnet3_open()
2533 for (i = 0; i < adapter->num_tx_queues; i++) in vmxnet3_open()
2534 spin_lock_init(&adapter->tx_queue[i].tx_lock); in vmxnet3_open()
2536 err = vmxnet3_create_queues(adapter, VMXNET3_DEF_TX_RING_SIZE, in vmxnet3_open()
2542 err = vmxnet3_activate_dev(adapter); in vmxnet3_open()
2549 vmxnet3_rq_destroy_all(adapter); in vmxnet3_open()
2550 vmxnet3_tq_destroy_all(adapter); in vmxnet3_open()
2559 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_close() local
2565 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_close()
2568 vmxnet3_quiesce_dev(adapter); in vmxnet3_close()
2570 vmxnet3_rq_destroy_all(adapter); in vmxnet3_close()
2571 vmxnet3_tq_destroy_all(adapter); in vmxnet3_close()
2573 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_close()
2581 vmxnet3_force_close(struct vmxnet3_adapter *adapter) in vmxnet3_force_close() argument
2589 BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)); in vmxnet3_force_close()
2592 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_force_close()
2593 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_force_close()
2594 dev_close(adapter->netdev); in vmxnet3_force_close()
2601 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_change_mtu() local
2613 while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_change_mtu()
2617 vmxnet3_quiesce_dev(adapter); in vmxnet3_change_mtu()
2618 vmxnet3_reset_dev(adapter); in vmxnet3_change_mtu()
2621 vmxnet3_rq_destroy_all(adapter); in vmxnet3_change_mtu()
2622 vmxnet3_adjust_rx_ring_size(adapter); in vmxnet3_change_mtu()
2623 err = vmxnet3_rq_create_all(adapter); in vmxnet3_change_mtu()
2630 err = vmxnet3_activate_dev(adapter); in vmxnet3_change_mtu()
2639 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_change_mtu()
2641 vmxnet3_force_close(adapter); in vmxnet3_change_mtu()
2648 vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64) in vmxnet3_declare_features() argument
2650 struct net_device *netdev = adapter->netdev; in vmxnet3_declare_features()
2662 netdev_info(adapter->netdev, in vmxnet3_declare_features()
2669 vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac) in vmxnet3_read_mac_addr() argument
2673 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL); in vmxnet3_read_mac_addr()
2676 tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH); in vmxnet3_read_mac_addr()
2694 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, in vmxnet3_acquire_msix_vectors() argument
2701 err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries, in vmxnet3_acquire_msix_vectors()
2704 adapter->intr.num_intrs = vectors; in vmxnet3_acquire_msix_vectors()
2708 " %d\n", adapter->netdev->name, err); in vmxnet3_acquire_msix_vectors()
2718 " %d instead\n", vectors, adapter->netdev->name, in vmxnet3_acquire_msix_vectors()
2732 vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_alloc_intr_resources() argument
2738 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
2739 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_alloc_intr_resources()
2741 cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); in vmxnet3_alloc_intr_resources()
2742 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_alloc_intr_resources()
2743 adapter->intr.type = cfg & 0x3; in vmxnet3_alloc_intr_resources()
2744 adapter->intr.mask_mode = (cfg >> 2) & 0x3; in vmxnet3_alloc_intr_resources()
2746 if (adapter->intr.type == VMXNET3_IT_AUTO) { in vmxnet3_alloc_intr_resources()
2747 adapter->intr.type = VMXNET3_IT_MSIX; in vmxnet3_alloc_intr_resources()
2751 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_alloc_intr_resources()
2754 adapter->intr.num_intrs = (adapter->share_intr == in vmxnet3_alloc_intr_resources()
2756 adapter->num_tx_queues; in vmxnet3_alloc_intr_resources()
2757 adapter->intr.num_intrs += (adapter->share_intr == in vmxnet3_alloc_intr_resources()
2759 adapter->num_rx_queues; in vmxnet3_alloc_intr_resources()
2760 adapter->intr.num_intrs += 1; /* for link event */ in vmxnet3_alloc_intr_resources()
2762 adapter->intr.num_intrs = (adapter->intr.num_intrs > in vmxnet3_alloc_intr_resources()
2764 ? adapter->intr.num_intrs : in vmxnet3_alloc_intr_resources()
2767 for (vector = 0; vector < adapter->intr.num_intrs; vector++) in vmxnet3_alloc_intr_resources()
2768 adapter->intr.msix_entries[vector].entry = vector; in vmxnet3_alloc_intr_resources()
2770 err = vmxnet3_acquire_msix_vectors(adapter, in vmxnet3_alloc_intr_resources()
2771 adapter->intr.num_intrs); in vmxnet3_alloc_intr_resources()
2776 if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE in vmxnet3_alloc_intr_resources()
2777 || adapter->num_rx_queues != 1) { in vmxnet3_alloc_intr_resources()
2778 adapter->share_intr = VMXNET3_INTR_TXSHARE; in vmxnet3_alloc_intr_resources()
2780 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
2781 adapter->intr.num_intrs = in vmxnet3_alloc_intr_resources()
2791 "#rx queues : 1, try MSI\n", adapter->netdev->name, err); in vmxnet3_alloc_intr_resources()
2793 adapter->intr.type = VMXNET3_IT_MSI; in vmxnet3_alloc_intr_resources()
2796 if (adapter->intr.type == VMXNET3_IT_MSI) { in vmxnet3_alloc_intr_resources()
2798 err = pci_enable_msi(adapter->pdev); in vmxnet3_alloc_intr_resources()
2800 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
2801 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
2807 adapter->num_rx_queues = 1; in vmxnet3_alloc_intr_resources()
2809 adapter->intr.type = VMXNET3_IT_INTX; in vmxnet3_alloc_intr_resources()
2812 adapter->intr.num_intrs = 1; in vmxnet3_alloc_intr_resources()
2817 vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter) in vmxnet3_free_intr_resources() argument
2819 if (adapter->intr.type == VMXNET3_IT_MSIX) in vmxnet3_free_intr_resources()
2820 pci_disable_msix(adapter->pdev); in vmxnet3_free_intr_resources()
2821 else if (adapter->intr.type == VMXNET3_IT_MSI) in vmxnet3_free_intr_resources()
2822 pci_disable_msi(adapter->pdev); in vmxnet3_free_intr_resources()
2824 BUG_ON(adapter->intr.type != VMXNET3_IT_INTX); in vmxnet3_free_intr_resources()
2831 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_tx_timeout() local
2832 adapter->tx_timeout_count++; in vmxnet3_tx_timeout()
2834 printk(KERN_ERR "%s: tx hang\n", adapter->netdev->name); in vmxnet3_tx_timeout()
2835 schedule_work(&adapter->work); in vmxnet3_tx_timeout()
2836 netif_wake_queue(adapter->netdev); in vmxnet3_tx_timeout()
2843 struct vmxnet3_adapter *adapter; in vmxnet3_reset_work() local
2845 adapter = container_of(data, struct vmxnet3_adapter, work); in vmxnet3_reset_work()
2848 if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state)) in vmxnet3_reset_work()
2853 if (netif_running(adapter->netdev)) { in vmxnet3_reset_work()
2854 printk(KERN_INFO "%s: resetting\n", adapter->netdev->name); in vmxnet3_reset_work()
2855 vmxnet3_quiesce_dev(adapter); in vmxnet3_reset_work()
2856 vmxnet3_reset_dev(adapter); in vmxnet3_reset_work()
2857 vmxnet3_activate_dev(adapter); in vmxnet3_reset_work()
2859 printk(KERN_INFO "%s: already closed\n", adapter->netdev->name); in vmxnet3_reset_work()
2863 clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); in vmxnet3_reset_work()
2891 struct vmxnet3_adapter *adapter; in vmxnet3_probe_device() local
2922 printk(KERN_ERR "Failed to alloc ethernet device for adapter " in vmxnet3_probe_device()
2928 adapter = netdev_priv(netdev); in vmxnet3_probe_device()
2929 adapter->netdev = netdev; in vmxnet3_probe_device()
2930 adapter->pdev = pdev; in vmxnet3_probe_device()
2932 spin_lock_init(&adapter->cmd_lock); in vmxnet3_probe_device()
2933 adapter->shared = pci_alloc_consistent(adapter->pdev, in vmxnet3_probe_device()
2935 &adapter->shared_pa); in vmxnet3_probe_device()
2936 if (!adapter->shared) { in vmxnet3_probe_device()
2943 adapter->num_rx_queues = num_rx_queues; in vmxnet3_probe_device()
2944 adapter->num_tx_queues = num_tx_queues; in vmxnet3_probe_device()
2946 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_probe_device()
2947 size += sizeof(struct Vmxnet3_RxQueueDesc) * adapter->num_rx_queues; in vmxnet3_probe_device()
2948 adapter->tqd_start = pci_alloc_consistent(adapter->pdev, size, in vmxnet3_probe_device()
2949 &adapter->queue_desc_pa); in vmxnet3_probe_device()
2951 if (!adapter->tqd_start) { in vmxnet3_probe_device()
2957 adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start + in vmxnet3_probe_device()
2958 adapter->num_tx_queues); in vmxnet3_probe_device()
2960 adapter->pm_conf = kmalloc(sizeof(struct Vmxnet3_PMConf), GFP_KERNEL); in vmxnet3_probe_device()
2961 if (adapter->pm_conf == NULL) { in vmxnet3_probe_device()
2970 adapter->rss_conf = kmalloc(sizeof(struct UPT1_RSSConf), GFP_KERNEL); in vmxnet3_probe_device()
2971 if (adapter->rss_conf == NULL) { in vmxnet3_probe_device()
2979 err = vmxnet3_alloc_pci_resources(adapter, &dma64); in vmxnet3_probe_device()
2983 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS); in vmxnet3_probe_device()
2985 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1); in vmxnet3_probe_device()
2987 printk(KERN_ERR "Incompatible h/w version (0x%x) for adapter" in vmxnet3_probe_device()
2993 ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS); in vmxnet3_probe_device()
2995 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1); in vmxnet3_probe_device()
2998 "adapter %s\n", ver, pci_name(pdev)); in vmxnet3_probe_device()
3004 vmxnet3_declare_features(adapter, dma64); in vmxnet3_probe_device()
3006 adapter->dev_number = atomic_read(&devices_found); in vmxnet3_probe_device()
3008 adapter->share_intr = irq_share_mode; in vmxnet3_probe_device()
3009 if (adapter->share_intr == VMXNET3_INTR_BUDDYSHARE && in vmxnet3_probe_device()
3010 adapter->num_tx_queues != adapter->num_rx_queues) in vmxnet3_probe_device()
3011 adapter->share_intr = VMXNET3_INTR_DONTSHARE; in vmxnet3_probe_device()
3013 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_probe_device()
3016 if (adapter->num_rx_queues > 1 && in vmxnet3_probe_device()
3017 adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3018 adapter->rss = true; in vmxnet3_probe_device()
3021 adapter->rss = false; in vmxnet3_probe_device()
3025 vmxnet3_read_mac_addr(adapter, mac); in vmxnet3_probe_device()
3032 INIT_WORK(&adapter->work, vmxnet3_reset_work); in vmxnet3_probe_device()
3034 if (adapter->intr.type == VMXNET3_IT_MSIX) { in vmxnet3_probe_device()
3036 for (i = 0; i < adapter->num_rx_queues; i++) { in vmxnet3_probe_device()
3037 netif_napi_add(adapter->netdev, in vmxnet3_probe_device()
3038 &adapter->rx_queue[i].napi, in vmxnet3_probe_device()
3042 netif_napi_add(adapter->netdev, &adapter->rx_queue[0].napi, in vmxnet3_probe_device()
3046 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); in vmxnet3_probe_device()
3047 netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); in vmxnet3_probe_device()
3052 printk(KERN_ERR "Failed to register adapter %s\n", in vmxnet3_probe_device()
3057 set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); in vmxnet3_probe_device()
3058 vmxnet3_check_link(adapter, false); in vmxnet3_probe_device()
3063 vmxnet3_free_intr_resources(adapter); in vmxnet3_probe_device()
3065 vmxnet3_free_pci_resources(adapter); in vmxnet3_probe_device()
3068 kfree(adapter->rss_conf); in vmxnet3_probe_device()
3071 kfree(adapter->pm_conf); in vmxnet3_probe_device()
3073 pci_free_consistent(adapter->pdev, size, adapter->tqd_start, in vmxnet3_probe_device()
3074 adapter->queue_desc_pa); in vmxnet3_probe_device()
3076 pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_DriverShared), in vmxnet3_probe_device()
3077 adapter->shared, adapter->shared_pa); in vmxnet3_probe_device()
3089 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_remove_device() local
3102 cancel_work_sync(&adapter->work); in vmxnet3_remove_device()
3106 vmxnet3_free_intr_resources(adapter); in vmxnet3_remove_device()
3107 vmxnet3_free_pci_resources(adapter); in vmxnet3_remove_device()
3109 kfree(adapter->rss_conf); in vmxnet3_remove_device()
3111 kfree(adapter->pm_conf); in vmxnet3_remove_device()
3113 size = sizeof(struct Vmxnet3_TxQueueDesc) * adapter->num_tx_queues; in vmxnet3_remove_device()
3115 pci_free_consistent(adapter->pdev, size, adapter->tqd_start, in vmxnet3_remove_device()
3116 adapter->queue_desc_pa); in vmxnet3_remove_device()
3117 pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_DriverShared), in vmxnet3_remove_device()
3118 adapter->shared, adapter->shared_pa); in vmxnet3_remove_device()
3130 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_suspend() local
3143 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_suspend()
3144 napi_disable(&adapter->rx_queue[i].napi); in vmxnet3_suspend()
3146 vmxnet3_disable_all_intrs(adapter); in vmxnet3_suspend()
3147 vmxnet3_free_irqs(adapter); in vmxnet3_suspend()
3148 vmxnet3_free_intr_resources(adapter); in vmxnet3_suspend()
3154 pmConf = adapter->pm_conf; in vmxnet3_suspend()
3157 if (adapter->wol & WAKE_UCAST) { in vmxnet3_suspend()
3167 if (adapter->wol & WAKE_ARP) { in vmxnet3_suspend()
3210 if (adapter->wol & WAKE_MAGIC) in vmxnet3_suspend()
3215 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_suspend()
3216 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_suspend()
3218 adapter->shared->devRead.pmConfDesc.confPA = cpu_to_le64(virt_to_phys( in vmxnet3_suspend()
3221 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3222 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_suspend()
3224 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_suspend()
3228 adapter->wol); in vmxnet3_suspend()
3243 struct vmxnet3_adapter *adapter = netdev_priv(netdev); in vmxnet3_resume() local
3250 pmConf = adapter->pm_conf; in vmxnet3_resume()
3253 adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); in vmxnet3_resume()
3254 adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( in vmxnet3_resume()
3256 adapter->shared->devRead.pmConfDesc.confPA = cpu_to_le64(virt_to_phys( in vmxnet3_resume()
3268 spin_lock_irqsave(&adapter->cmd_lock, flags); in vmxnet3_resume()
3269 VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, in vmxnet3_resume()
3271 spin_unlock_irqrestore(&adapter->cmd_lock, flags); in vmxnet3_resume()
3272 vmxnet3_alloc_intr_resources(adapter); in vmxnet3_resume()
3273 vmxnet3_request_irqs(adapter); in vmxnet3_resume()
3274 for (i = 0; i < adapter->num_rx_queues; i++) in vmxnet3_resume()
3275 napi_enable(&adapter->rx_queue[i].napi); in vmxnet3_resume()
3276 vmxnet3_enable_all_intrs(adapter); in vmxnet3_resume()