| .. | .. |
|---|
| 211 | 211 | t1_interrupts_clear(adapter); |
|---|
| 212 | 212 | |
|---|
| 213 | 213 | adapter->params.has_msi = !disable_msi && !pci_enable_msi(adapter->pdev); |
|---|
| 214 | | - err = request_irq(adapter->pdev->irq, t1_interrupt, |
|---|
| 215 | | - adapter->params.has_msi ? 0 : IRQF_SHARED, |
|---|
| 216 | | - adapter->name, adapter); |
|---|
| 214 | + err = request_threaded_irq(adapter->pdev->irq, t1_interrupt, |
|---|
| 215 | + t1_interrupt_thread, |
|---|
| 216 | + adapter->params.has_msi ? 0 : IRQF_SHARED, |
|---|
| 217 | + adapter->name, adapter); |
|---|
| 217 | 218 | if (err) { |
|---|
| 218 | 219 | if (adapter->params.has_msi) |
|---|
| 219 | 220 | pci_disable_msi(adapter->pdev); |
|---|
| .. | .. |
|---|
| 429 | 430 | struct adapter *adapter = dev->ml_priv; |
|---|
| 430 | 431 | |
|---|
| 431 | 432 | strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); |
|---|
| 432 | | - strlcpy(info->version, DRV_VERSION, sizeof(info->version)); |
|---|
| 433 | 433 | strlcpy(info->bus_info, pci_name(adapter->pdev), |
|---|
| 434 | 434 | sizeof(info->bus_info)); |
|---|
| 435 | 435 | } |
|---|
| .. | .. |
|---|
| 794 | 794 | } |
|---|
| 795 | 795 | |
|---|
| 796 | 796 | static const struct ethtool_ops t1_ethtool_ops = { |
|---|
| 797 | + .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS | |
|---|
| 798 | + ETHTOOL_COALESCE_USE_ADAPTIVE_RX | |
|---|
| 799 | + ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL, |
|---|
| 797 | 800 | .get_drvinfo = get_drvinfo, |
|---|
| 798 | 801 | .get_msglevel = get_msglevel, |
|---|
| 799 | 802 | .set_msglevel = set_msglevel, |
|---|
| .. | .. |
|---|
| 914 | 917 | spin_unlock(&adapter->work_lock); |
|---|
| 915 | 918 | } |
|---|
| 916 | 919 | |
|---|
| 917 | | -/* |
|---|
| 918 | | - * Processes elmer0 external interrupts in process context. |
|---|
| 919 | | - */ |
|---|
| 920 | | -static void ext_intr_task(struct work_struct *work) |
|---|
| 921 | | -{ |
|---|
| 922 | | - struct adapter *adapter = |
|---|
| 923 | | - container_of(work, struct adapter, ext_intr_handler_task); |
|---|
| 924 | | - |
|---|
| 925 | | - t1_elmer0_ext_intr_handler(adapter); |
|---|
| 926 | | - |
|---|
| 927 | | - /* Now reenable external interrupts */ |
|---|
| 928 | | - spin_lock_irq(&adapter->async_lock); |
|---|
| 929 | | - adapter->slow_intr_mask |= F_PL_INTR_EXT; |
|---|
| 930 | | - writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE); |
|---|
| 931 | | - writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, |
|---|
| 932 | | - adapter->regs + A_PL_ENABLE); |
|---|
| 933 | | - spin_unlock_irq(&adapter->async_lock); |
|---|
| 934 | | -} |
|---|
| 935 | | - |
|---|
| 936 | | -/* |
|---|
| 937 | | - * Interrupt-context handler for elmer0 external interrupts. |
|---|
| 938 | | - */ |
|---|
| 939 | | -void t1_elmer0_ext_intr(struct adapter *adapter) |
|---|
| 940 | | -{ |
|---|
| 941 | | - /* |
|---|
| 942 | | - * Schedule a task to handle external interrupts as we require |
|---|
| 943 | | - * a process context. We disable EXT interrupts in the interim |
|---|
| 944 | | - * and let the task reenable them when it's done. |
|---|
| 945 | | - */ |
|---|
| 946 | | - adapter->slow_intr_mask &= ~F_PL_INTR_EXT; |
|---|
| 947 | | - writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, |
|---|
| 948 | | - adapter->regs + A_PL_ENABLE); |
|---|
| 949 | | - schedule_work(&adapter->ext_intr_handler_task); |
|---|
| 950 | | -} |
|---|
| 951 | | - |
|---|
| 952 | | -void t1_fatal_err(struct adapter *adapter) |
|---|
| 953 | | -{ |
|---|
| 954 | | - if (adapter->flags & FULL_INIT_DONE) { |
|---|
| 955 | | - t1_sge_stop(adapter->sge); |
|---|
| 956 | | - t1_interrupts_disable(adapter); |
|---|
| 957 | | - } |
|---|
| 958 | | - pr_alert("%s: encountered fatal error, operation suspended\n", |
|---|
| 959 | | - adapter->name); |
|---|
| 960 | | -} |
|---|
| 961 | | - |
|---|
| 962 | 920 | static const struct net_device_ops cxgb_netdev_ops = { |
|---|
| 963 | 921 | .ndo_open = cxgb_open, |
|---|
| 964 | 922 | .ndo_stop = cxgb_close, |
|---|
| .. | .. |
|---|
| 984 | 942 | struct adapter *adapter = NULL; |
|---|
| 985 | 943 | struct port_info *pi; |
|---|
| 986 | 944 | |
|---|
| 987 | | - pr_info_once("%s - version %s\n", DRV_DESCRIPTION, DRV_VERSION); |
|---|
| 988 | | - |
|---|
| 989 | 945 | err = pci_enable_device(pdev); |
|---|
| 990 | 946 | if (err) |
|---|
| 991 | 947 | return err; |
|---|
| .. | .. |
|---|
| 997 | 953 | goto out_disable_pdev; |
|---|
| 998 | 954 | } |
|---|
| 999 | 955 | |
|---|
| 1000 | | - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { |
|---|
| 956 | + if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) { |
|---|
| 1001 | 957 | pci_using_dac = 1; |
|---|
| 1002 | 958 | |
|---|
| 1003 | | - if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) { |
|---|
| 1004 | | - pr_err("%s: unable to obtain 64-bit DMA for " |
|---|
| 1005 | | - "consistent allocations\n", pci_name(pdev)); |
|---|
| 959 | + if (dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) { |
|---|
| 960 | + pr_err("%s: unable to obtain 64-bit DMA for coherent allocations\n", |
|---|
| 961 | + pci_name(pdev)); |
|---|
| 1006 | 962 | err = -ENODEV; |
|---|
| 1007 | 963 | goto out_disable_pdev; |
|---|
| 1008 | 964 | } |
|---|
| 1009 | 965 | |
|---|
| 1010 | | - } else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) { |
|---|
| 966 | + } else if ((err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) != 0) { |
|---|
| 1011 | 967 | pr_err("%s: no usable DMA configuration\n", pci_name(pdev)); |
|---|
| 1012 | 968 | goto out_disable_pdev; |
|---|
| 1013 | 969 | } |
|---|
| .. | .. |
|---|
| 1062 | 1018 | spin_lock_init(&adapter->async_lock); |
|---|
| 1063 | 1019 | spin_lock_init(&adapter->mac_lock); |
|---|
| 1064 | 1020 | |
|---|
| 1065 | | - INIT_WORK(&adapter->ext_intr_handler_task, |
|---|
| 1066 | | - ext_intr_task); |
|---|
| 1067 | 1021 | INIT_DELAYED_WORK(&adapter->stats_update_task, |
|---|
| 1068 | 1022 | mac_stats_task); |
|---|
| 1069 | 1023 | |
|---|