diff options
-rw-r--r-- | drivers/net/8139cp.c | 2 | ||||
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 2 | ||||
-rw-r--r-- | drivers/net/forcedeth.c | 49 | ||||
-rw-r--r-- | drivers/net/irda/smsc-ircc2.c | 2 | ||||
-rw-r--r-- | drivers/net/ixgb/ixgb_main.c | 4 | ||||
-rw-r--r-- | drivers/net/myri10ge/myri10ge.c | 13 | ||||
-rw-r--r-- | drivers/net/s2io.c | 285 | ||||
-rw-r--r-- | drivers/net/s2io.h | 5 | ||||
-rw-r--r-- | drivers/net/sk98lin/h/xmac_ii.h | 2 | ||||
-rw-r--r-- | drivers/net/skge.h | 4 | ||||
-rw-r--r-- | drivers/net/sky2.c | 43 | ||||
-rw-r--r-- | drivers/net/sky2.h | 2 | ||||
-rw-r--r-- | drivers/net/smc91x.h | 18 | ||||
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 12 |
15 files changed, 253 insertions, 192 deletions
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index d2150baa7e35..1428bb7715af 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c | |||
@@ -1916,7 +1916,7 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1916 | regs = ioremap(pciaddr, CP_REGS_SIZE); | 1916 | regs = ioremap(pciaddr, CP_REGS_SIZE); |
1917 | if (!regs) { | 1917 | if (!regs) { |
1918 | rc = -EIO; | 1918 | rc = -EIO; |
1919 | dev_err(&pdev->dev, "Cannot map PCI MMIO (%lx@%lx)\n", | 1919 | dev_err(&pdev->dev, "Cannot map PCI MMIO (%Lx@%Lx)\n", |
1920 | (unsigned long long)pci_resource_len(pdev, 1), | 1920 | (unsigned long long)pci_resource_len(pdev, 1), |
1921 | (unsigned long long)pciaddr); | 1921 | (unsigned long long)pciaddr); |
1922 | goto err_out_res; | 1922 | goto err_out_res; |
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 6e7d31bacf4d..6d3d41934503 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -283,7 +283,7 @@ static int e1000_request_irq(struct e1000_adapter *adapter) | |||
283 | } | 283 | } |
284 | } | 284 | } |
285 | if (adapter->have_msi) | 285 | if (adapter->have_msi) |
286 | flags &= ~SA_SHIRQ; | 286 | flags &= ~IRQF_SHARED; |
287 | #endif | 287 | #endif |
288 | if ((err = request_irq(adapter->pdev->irq, &e1000_intr, flags, | 288 | if ((err = request_irq(adapter->pdev->irq, &e1000_intr, flags, |
289 | netdev->name, netdev))) | 289 | netdev->name, netdev))) |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index ad81ec68f887..11b8f1b43dd5 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
@@ -240,10 +240,12 @@ enum { | |||
240 | #define NVREG_RNDSEED_FORCE2 0x2d00 | 240 | #define NVREG_RNDSEED_FORCE2 0x2d00 |
241 | #define NVREG_RNDSEED_FORCE3 0x7400 | 241 | #define NVREG_RNDSEED_FORCE3 0x7400 |
242 | 242 | ||
243 | NvRegUnknownSetupReg1 = 0xA0, | 243 | NvRegTxDeferral = 0xA0, |
244 | #define NVREG_UNKSETUP1_VAL 0x16070f | 244 | #define NVREG_TX_DEFERRAL_DEFAULT 0x15050f |
245 | NvRegUnknownSetupReg2 = 0xA4, | 245 | #define NVREG_TX_DEFERRAL_RGMII_10_100 0x16070f |
246 | #define NVREG_UNKSETUP2_VAL 0x16 | 246 | #define NVREG_TX_DEFERRAL_RGMII_1000 0x14050f |
247 | NvRegRxDeferral = 0xA4, | ||
248 | #define NVREG_RX_DEFERRAL_DEFAULT 0x16 | ||
247 | NvRegMacAddrA = 0xA8, | 249 | NvRegMacAddrA = 0xA8, |
248 | NvRegMacAddrB = 0xAC, | 250 | NvRegMacAddrB = 0xAC, |
249 | NvRegMulticastAddrA = 0xB0, | 251 | NvRegMulticastAddrA = 0xB0, |
@@ -269,8 +271,10 @@ enum { | |||
269 | #define NVREG_LINKSPEED_MASK (0xFFF) | 271 | #define NVREG_LINKSPEED_MASK (0xFFF) |
270 | NvRegUnknownSetupReg5 = 0x130, | 272 | NvRegUnknownSetupReg5 = 0x130, |
271 | #define NVREG_UNKSETUP5_BIT31 (1<<31) | 273 | #define NVREG_UNKSETUP5_BIT31 (1<<31) |
272 | NvRegUnknownSetupReg3 = 0x13c, | 274 | NvRegTxWatermark = 0x13c, |
273 | #define NVREG_UNKSETUP3_VAL1 0x200010 | 275 | #define NVREG_TX_WM_DESC1_DEFAULT 0x0200010 |
276 | #define NVREG_TX_WM_DESC2_3_DEFAULT 0x1e08000 | ||
277 | #define NVREG_TX_WM_DESC2_3_1000 0xfe08000 | ||
274 | NvRegTxRxControl = 0x144, | 278 | NvRegTxRxControl = 0x144, |
275 | #define NVREG_TXRXCTL_KICK 0x0001 | 279 | #define NVREG_TXRXCTL_KICK 0x0001 |
276 | #define NVREG_TXRXCTL_BIT1 0x0002 | 280 | #define NVREG_TXRXCTL_BIT1 0x0002 |
@@ -658,7 +662,7 @@ static const struct register_test nv_registers_test[] = { | |||
658 | { NvRegMisc1, 0x03c }, | 662 | { NvRegMisc1, 0x03c }, |
659 | { NvRegOffloadConfig, 0x03ff }, | 663 | { NvRegOffloadConfig, 0x03ff }, |
660 | { NvRegMulticastAddrA, 0xffffffff }, | 664 | { NvRegMulticastAddrA, 0xffffffff }, |
661 | { NvRegUnknownSetupReg3, 0x0ff }, | 665 | { NvRegTxWatermark, 0x0ff }, |
662 | { NvRegWakeUpFlags, 0x07777 }, | 666 | { NvRegWakeUpFlags, 0x07777 }, |
663 | { 0,0 } | 667 | { 0,0 } |
664 | }; | 668 | }; |
@@ -2127,7 +2131,7 @@ static int nv_update_linkspeed(struct net_device *dev) | |||
2127 | int newdup = np->duplex; | 2131 | int newdup = np->duplex; |
2128 | int mii_status; | 2132 | int mii_status; |
2129 | int retval = 0; | 2133 | int retval = 0; |
2130 | u32 control_1000, status_1000, phyreg, pause_flags; | 2134 | u32 control_1000, status_1000, phyreg, pause_flags, txreg; |
2131 | 2135 | ||
2132 | /* BMSR_LSTATUS is latched, read it twice: | 2136 | /* BMSR_LSTATUS is latched, read it twice: |
2133 | * we want the current value. | 2137 | * we want the current value. |
@@ -2245,6 +2249,26 @@ set_speed: | |||
2245 | phyreg |= PHY_1000; | 2249 | phyreg |= PHY_1000; |
2246 | writel(phyreg, base + NvRegPhyInterface); | 2250 | writel(phyreg, base + NvRegPhyInterface); |
2247 | 2251 | ||
2252 | if (phyreg & PHY_RGMII) { | ||
2253 | if ((np->linkspeed & NVREG_LINKSPEED_MASK) == NVREG_LINKSPEED_1000) | ||
2254 | txreg = NVREG_TX_DEFERRAL_RGMII_1000; | ||
2255 | else | ||
2256 | txreg = NVREG_TX_DEFERRAL_RGMII_10_100; | ||
2257 | } else { | ||
2258 | txreg = NVREG_TX_DEFERRAL_DEFAULT; | ||
2259 | } | ||
2260 | writel(txreg, base + NvRegTxDeferral); | ||
2261 | |||
2262 | if (np->desc_ver == DESC_VER_1) { | ||
2263 | txreg = NVREG_TX_WM_DESC1_DEFAULT; | ||
2264 | } else { | ||
2265 | if ((np->linkspeed & NVREG_LINKSPEED_MASK) == NVREG_LINKSPEED_1000) | ||
2266 | txreg = NVREG_TX_WM_DESC2_3_1000; | ||
2267 | else | ||
2268 | txreg = NVREG_TX_WM_DESC2_3_DEFAULT; | ||
2269 | } | ||
2270 | writel(txreg, base + NvRegTxWatermark); | ||
2271 | |||
2248 | writel(NVREG_MISC1_FORCE | ( np->duplex ? 0 : NVREG_MISC1_HD), | 2272 | writel(NVREG_MISC1_FORCE | ( np->duplex ? 0 : NVREG_MISC1_HD), |
2249 | base + NvRegMisc1); | 2273 | base + NvRegMisc1); |
2250 | pci_push(base); | 2274 | pci_push(base); |
@@ -3910,7 +3934,10 @@ static int nv_open(struct net_device *dev) | |||
3910 | 3934 | ||
3911 | /* 5) continue setup */ | 3935 | /* 5) continue setup */ |
3912 | writel(np->linkspeed, base + NvRegLinkSpeed); | 3936 | writel(np->linkspeed, base + NvRegLinkSpeed); |
3913 | writel(NVREG_UNKSETUP3_VAL1, base + NvRegUnknownSetupReg3); | 3937 | if (np->desc_ver == DESC_VER_1) |
3938 | writel(NVREG_TX_WM_DESC1_DEFAULT, base + NvRegTxWatermark); | ||
3939 | else | ||
3940 | writel(NVREG_TX_WM_DESC2_3_DEFAULT, base + NvRegTxWatermark); | ||
3914 | writel(np->txrxctl_bits, base + NvRegTxRxControl); | 3941 | writel(np->txrxctl_bits, base + NvRegTxRxControl); |
3915 | writel(np->vlanctl_bits, base + NvRegVlanControl); | 3942 | writel(np->vlanctl_bits, base + NvRegVlanControl); |
3916 | pci_push(base); | 3943 | pci_push(base); |
@@ -3932,8 +3959,8 @@ static int nv_open(struct net_device *dev) | |||
3932 | writel(readl(base + NvRegReceiverStatus), base + NvRegReceiverStatus); | 3959 | writel(readl(base + NvRegReceiverStatus), base + NvRegReceiverStatus); |
3933 | get_random_bytes(&i, sizeof(i)); | 3960 | get_random_bytes(&i, sizeof(i)); |
3934 | writel(NVREG_RNDSEED_FORCE | (i&NVREG_RNDSEED_MASK), base + NvRegRandomSeed); | 3961 | writel(NVREG_RNDSEED_FORCE | (i&NVREG_RNDSEED_MASK), base + NvRegRandomSeed); |
3935 | writel(NVREG_UNKSETUP1_VAL, base + NvRegUnknownSetupReg1); | 3962 | writel(NVREG_TX_DEFERRAL_DEFAULT, base + NvRegTxDeferral); |
3936 | writel(NVREG_UNKSETUP2_VAL, base + NvRegUnknownSetupReg2); | 3963 | writel(NVREG_RX_DEFERRAL_DEFAULT, base + NvRegRxDeferral); |
3937 | if (poll_interval == -1) { | 3964 | if (poll_interval == -1) { |
3938 | if (optimization_mode == NV_OPTIMIZATION_MODE_THROUGHPUT) | 3965 | if (optimization_mode == NV_OPTIMIZATION_MODE_THROUGHPUT) |
3939 | writel(NVREG_POLL_DEFAULT_THROUGHPUT, base + NvRegPollingInterval); | 3966 | writel(NVREG_POLL_DEFAULT_THROUGHPUT, base + NvRegPollingInterval); |
diff --git a/drivers/net/irda/smsc-ircc2.c b/drivers/net/irda/smsc-ircc2.c index a4674044bd6f..2eff45bedc7c 100644 --- a/drivers/net/irda/smsc-ircc2.c +++ b/drivers/net/irda/smsc-ircc2.c | |||
@@ -2353,7 +2353,7 @@ static int __init smsc_superio_lpc(unsigned short cfg_base) | |||
2353 | #ifdef CONFIG_PCI | 2353 | #ifdef CONFIG_PCI |
2354 | #define PCIID_VENDOR_INTEL 0x8086 | 2354 | #define PCIID_VENDOR_INTEL 0x8086 |
2355 | #define PCIID_VENDOR_ALI 0x10b9 | 2355 | #define PCIID_VENDOR_ALI 0x10b9 |
2356 | static struct smsc_ircc_subsystem_configuration subsystem_configurations[] __devinitdata = { | 2356 | static struct smsc_ircc_subsystem_configuration subsystem_configurations[] __initdata = { |
2357 | { | 2357 | { |
2358 | .vendor = PCIID_VENDOR_INTEL, /* Intel 82801DBM LPC bridge */ | 2358 | .vendor = PCIID_VENDOR_INTEL, /* Intel 82801DBM LPC bridge */ |
2359 | .device = 0x24cc, | 2359 | .device = 0x24cc, |
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index 7eb08d929139..7bbd447289b5 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c | |||
@@ -1281,7 +1281,7 @@ ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb, | |||
1281 | 1281 | ||
1282 | while(len) { | 1282 | while(len) { |
1283 | buffer_info = &tx_ring->buffer_info[i]; | 1283 | buffer_info = &tx_ring->buffer_info[i]; |
1284 | size = min(len, IXGB_MAX_JUMBO_FRAME_SIZE); | 1284 | size = min(len, IXGB_MAX_DATA_PER_TXD); |
1285 | buffer_info->length = size; | 1285 | buffer_info->length = size; |
1286 | buffer_info->dma = | 1286 | buffer_info->dma = |
1287 | pci_map_single(adapter->pdev, | 1287 | pci_map_single(adapter->pdev, |
@@ -1306,7 +1306,7 @@ ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb, | |||
1306 | 1306 | ||
1307 | while(len) { | 1307 | while(len) { |
1308 | buffer_info = &tx_ring->buffer_info[i]; | 1308 | buffer_info = &tx_ring->buffer_info[i]; |
1309 | size = min(len, IXGB_MAX_JUMBO_FRAME_SIZE); | 1309 | size = min(len, IXGB_MAX_DATA_PER_TXD); |
1310 | buffer_info->length = size; | 1310 | buffer_info->length = size; |
1311 | buffer_info->dma = | 1311 | buffer_info->dma = |
1312 | pci_map_page(adapter->pdev, | 1312 | pci_map_page(adapter->pdev, |
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index ee1de971a712..07ca9480a6fe 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
@@ -2412,14 +2412,20 @@ static int myri10ge_resume(struct pci_dev *pdev) | |||
2412 | return -EIO; | 2412 | return -EIO; |
2413 | } | 2413 | } |
2414 | myri10ge_restore_state(mgp); | 2414 | myri10ge_restore_state(mgp); |
2415 | pci_enable_device(pdev); | 2415 | |
2416 | status = pci_enable_device(pdev); | ||
2417 | if (status < 0) { | ||
2418 | dev_err(&pdev->dev, "failed to enable device\n"); | ||
2419 | return -EIO; | ||
2420 | } | ||
2421 | |||
2416 | pci_set_master(pdev); | 2422 | pci_set_master(pdev); |
2417 | 2423 | ||
2418 | status = request_irq(pdev->irq, myri10ge_intr, IRQF_SHARED, | 2424 | status = request_irq(pdev->irq, myri10ge_intr, IRQF_SHARED, |
2419 | netdev->name, mgp); | 2425 | netdev->name, mgp); |
2420 | if (status != 0) { | 2426 | if (status != 0) { |
2421 | dev_err(&pdev->dev, "failed to allocate IRQ\n"); | 2427 | dev_err(&pdev->dev, "failed to allocate IRQ\n"); |
2422 | goto abort_with_msi; | 2428 | goto abort_with_enabled; |
2423 | } | 2429 | } |
2424 | 2430 | ||
2425 | myri10ge_reset(mgp); | 2431 | myri10ge_reset(mgp); |
@@ -2438,7 +2444,8 @@ static int myri10ge_resume(struct pci_dev *pdev) | |||
2438 | 2444 | ||
2439 | return 0; | 2445 | return 0; |
2440 | 2446 | ||
2441 | abort_with_msi: | 2447 | abort_with_enabled: |
2448 | pci_disable_device(pdev); | ||
2442 | return -EIO; | 2449 | return -EIO; |
2443 | 2450 | ||
2444 | } | 2451 | } |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index c6b77acb35ef..e1fe3a0a7b0b 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -1976,7 +1976,6 @@ static int start_nic(struct s2io_nic *nic) | |||
1976 | XENA_dev_config_t __iomem *bar0 = nic->bar0; | 1976 | XENA_dev_config_t __iomem *bar0 = nic->bar0; |
1977 | struct net_device *dev = nic->dev; | 1977 | struct net_device *dev = nic->dev; |
1978 | register u64 val64 = 0; | 1978 | register u64 val64 = 0; |
1979 | u16 interruptible; | ||
1980 | u16 subid, i; | 1979 | u16 subid, i; |
1981 | mac_info_t *mac_control; | 1980 | mac_info_t *mac_control; |
1982 | struct config_param *config; | 1981 | struct config_param *config; |
@@ -2047,16 +2046,6 @@ static int start_nic(struct s2io_nic *nic) | |||
2047 | return FAILURE; | 2046 | return FAILURE; |
2048 | } | 2047 | } |
2049 | 2048 | ||
2050 | /* Enable select interrupts */ | ||
2051 | if (nic->intr_type != INTA) | ||
2052 | en_dis_able_nic_intrs(nic, ENA_ALL_INTRS, DISABLE_INTRS); | ||
2053 | else { | ||
2054 | interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR; | ||
2055 | interruptible |= TX_PIC_INTR | RX_PIC_INTR; | ||
2056 | interruptible |= TX_MAC_INTR | RX_MAC_INTR; | ||
2057 | en_dis_able_nic_intrs(nic, interruptible, ENABLE_INTRS); | ||
2058 | } | ||
2059 | |||
2060 | /* | 2049 | /* |
2061 | * With some switches, link might be already up at this point. | 2050 | * With some switches, link might be already up at this point. |
2062 | * Because of this weird behavior, when we enable laser, | 2051 | * Because of this weird behavior, when we enable laser, |
@@ -3749,101 +3738,19 @@ static int s2io_open(struct net_device *dev) | |||
3749 | if (err) { | 3738 | if (err) { |
3750 | DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n", | 3739 | DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n", |
3751 | dev->name); | 3740 | dev->name); |
3752 | if (err == -ENODEV) | 3741 | goto hw_init_failed; |
3753 | goto hw_init_failed; | ||
3754 | else | ||
3755 | goto hw_enable_failed; | ||
3756 | } | ||
3757 | |||
3758 | /* Store the values of the MSIX table in the nic_t structure */ | ||
3759 | store_xmsi_data(sp); | ||
3760 | |||
3761 | /* After proper initialization of H/W, register ISR */ | ||
3762 | if (sp->intr_type == MSI) { | ||
3763 | err = request_irq((int) sp->pdev->irq, s2io_msi_handle, | ||
3764 | IRQF_SHARED, sp->name, dev); | ||
3765 | if (err) { | ||
3766 | DBG_PRINT(ERR_DBG, "%s: MSI registration \ | ||
3767 | failed\n", dev->name); | ||
3768 | goto isr_registration_failed; | ||
3769 | } | ||
3770 | } | ||
3771 | if (sp->intr_type == MSI_X) { | ||
3772 | int i; | ||
3773 | |||
3774 | for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) { | ||
3775 | if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) { | ||
3776 | sprintf(sp->desc1, "%s:MSI-X-%d-TX", | ||
3777 | dev->name, i); | ||
3778 | err = request_irq(sp->entries[i].vector, | ||
3779 | s2io_msix_fifo_handle, 0, sp->desc1, | ||
3780 | sp->s2io_entries[i].arg); | ||
3781 | DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc1, | ||
3782 | (unsigned long long)sp->msix_info[i].addr); | ||
3783 | } else { | ||
3784 | sprintf(sp->desc2, "%s:MSI-X-%d-RX", | ||
3785 | dev->name, i); | ||
3786 | err = request_irq(sp->entries[i].vector, | ||
3787 | s2io_msix_ring_handle, 0, sp->desc2, | ||
3788 | sp->s2io_entries[i].arg); | ||
3789 | DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc2, | ||
3790 | (unsigned long long)sp->msix_info[i].addr); | ||
3791 | } | ||
3792 | if (err) { | ||
3793 | DBG_PRINT(ERR_DBG, "%s: MSI-X-%d registration \ | ||
3794 | failed\n", dev->name, i); | ||
3795 | DBG_PRINT(ERR_DBG, "Returned: %d\n", err); | ||
3796 | goto isr_registration_failed; | ||
3797 | } | ||
3798 | sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS; | ||
3799 | } | ||
3800 | } | ||
3801 | if (sp->intr_type == INTA) { | ||
3802 | err = request_irq((int) sp->pdev->irq, s2io_isr, IRQF_SHARED, | ||
3803 | sp->name, dev); | ||
3804 | if (err) { | ||
3805 | DBG_PRINT(ERR_DBG, "%s: ISR registration failed\n", | ||
3806 | dev->name); | ||
3807 | goto isr_registration_failed; | ||
3808 | } | ||
3809 | } | 3742 | } |
3810 | 3743 | ||
3811 | if (s2io_set_mac_addr(dev, dev->dev_addr) == FAILURE) { | 3744 | if (s2io_set_mac_addr(dev, dev->dev_addr) == FAILURE) { |
3812 | DBG_PRINT(ERR_DBG, "Set Mac Address Failed\n"); | 3745 | DBG_PRINT(ERR_DBG, "Set Mac Address Failed\n"); |
3746 | s2io_card_down(sp); | ||
3813 | err = -ENODEV; | 3747 | err = -ENODEV; |
3814 | goto setting_mac_address_failed; | 3748 | goto hw_init_failed; |
3815 | } | 3749 | } |
3816 | 3750 | ||
3817 | netif_start_queue(dev); | 3751 | netif_start_queue(dev); |
3818 | return 0; | 3752 | return 0; |
3819 | 3753 | ||
3820 | setting_mac_address_failed: | ||
3821 | if (sp->intr_type != MSI_X) | ||
3822 | free_irq(sp->pdev->irq, dev); | ||
3823 | isr_registration_failed: | ||
3824 | del_timer_sync(&sp->alarm_timer); | ||
3825 | if (sp->intr_type == MSI_X) { | ||
3826 | int i; | ||
3827 | u16 msi_control; /* Temp variable */ | ||
3828 | |||
3829 | for (i=1; (sp->s2io_entries[i].in_use == | ||
3830 | MSIX_REGISTERED_SUCCESS); i++) { | ||
3831 | int vector = sp->entries[i].vector; | ||
3832 | void *arg = sp->s2io_entries[i].arg; | ||
3833 | |||
3834 | free_irq(vector, arg); | ||
3835 | } | ||
3836 | pci_disable_msix(sp->pdev); | ||
3837 | |||
3838 | /* Temp */ | ||
3839 | pci_read_config_word(sp->pdev, 0x42, &msi_control); | ||
3840 | msi_control &= 0xFFFE; /* Disable MSI */ | ||
3841 | pci_write_config_word(sp->pdev, 0x42, msi_control); | ||
3842 | } | ||
3843 | else if (sp->intr_type == MSI) | ||
3844 | pci_disable_msi(sp->pdev); | ||
3845 | hw_enable_failed: | ||
3846 | s2io_reset(sp); | ||
3847 | hw_init_failed: | 3754 | hw_init_failed: |
3848 | if (sp->intr_type == MSI_X) { | 3755 | if (sp->intr_type == MSI_X) { |
3849 | if (sp->entries) | 3756 | if (sp->entries) |
@@ -3874,7 +3781,7 @@ static int s2io_close(struct net_device *dev) | |||
3874 | flush_scheduled_work(); | 3781 | flush_scheduled_work(); |
3875 | netif_stop_queue(dev); | 3782 | netif_stop_queue(dev); |
3876 | /* Reset card, kill tasklet and free Tx and Rx buffers. */ | 3783 | /* Reset card, kill tasklet and free Tx and Rx buffers. */ |
3877 | s2io_card_down(sp, 1); | 3784 | s2io_card_down(sp); |
3878 | 3785 | ||
3879 | sp->device_close_flag = TRUE; /* Device is shut down. */ | 3786 | sp->device_close_flag = TRUE; /* Device is shut down. */ |
3880 | return 0; | 3787 | return 0; |
@@ -5919,7 +5826,7 @@ static int s2io_change_mtu(struct net_device *dev, int new_mtu) | |||
5919 | 5826 | ||
5920 | dev->mtu = new_mtu; | 5827 | dev->mtu = new_mtu; |
5921 | if (netif_running(dev)) { | 5828 | if (netif_running(dev)) { |
5922 | s2io_card_down(sp, 0); | 5829 | s2io_card_down(sp); |
5923 | netif_stop_queue(dev); | 5830 | netif_stop_queue(dev); |
5924 | if (s2io_card_up(sp)) { | 5831 | if (s2io_card_up(sp)) { |
5925 | DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", | 5832 | DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", |
@@ -6216,43 +6123,106 @@ static int rxd_owner_bit_reset(nic_t *sp) | |||
6216 | 6123 | ||
6217 | } | 6124 | } |
6218 | 6125 | ||
6219 | static void s2io_card_down(nic_t * sp, int flag) | 6126 | static int s2io_add_isr(nic_t * sp) |
6220 | { | 6127 | { |
6221 | int cnt = 0; | 6128 | int ret = 0; |
6222 | XENA_dev_config_t __iomem *bar0 = sp->bar0; | ||
6223 | unsigned long flags; | ||
6224 | register u64 val64 = 0; | ||
6225 | struct net_device *dev = sp->dev; | 6129 | struct net_device *dev = sp->dev; |
6130 | int err = 0; | ||
6226 | 6131 | ||
6227 | del_timer_sync(&sp->alarm_timer); | 6132 | if (sp->intr_type == MSI) |
6228 | /* If s2io_set_link task is executing, wait till it completes. */ | 6133 | ret = s2io_enable_msi(sp); |
6229 | while (test_and_set_bit(0, &(sp->link_state))) { | 6134 | else if (sp->intr_type == MSI_X) |
6230 | msleep(50); | 6135 | ret = s2io_enable_msi_x(sp); |
6136 | if (ret) { | ||
6137 | DBG_PRINT(ERR_DBG, "%s: Defaulting to INTA\n", dev->name); | ||
6138 | sp->intr_type = INTA; | ||
6231 | } | 6139 | } |
6232 | atomic_set(&sp->card_state, CARD_DOWN); | ||
6233 | 6140 | ||
6234 | /* disable Tx and Rx traffic on the NIC */ | 6141 | /* Store the values of the MSIX table in the nic_t structure */ |
6235 | stop_nic(sp); | 6142 | store_xmsi_data(sp); |
6236 | if (flag) { | ||
6237 | if (sp->intr_type == MSI_X) { | ||
6238 | int i; | ||
6239 | u16 msi_control; | ||
6240 | 6143 | ||
6241 | for (i=1; (sp->s2io_entries[i].in_use == | 6144 | /* After proper initialization of H/W, register ISR */ |
6242 | MSIX_REGISTERED_SUCCESS); i++) { | 6145 | if (sp->intr_type == MSI) { |
6243 | int vector = sp->entries[i].vector; | 6146 | err = request_irq((int) sp->pdev->irq, s2io_msi_handle, |
6244 | void *arg = sp->s2io_entries[i].arg; | 6147 | IRQF_SHARED, sp->name, dev); |
6148 | if (err) { | ||
6149 | pci_disable_msi(sp->pdev); | ||
6150 | DBG_PRINT(ERR_DBG, "%s: MSI registration failed\n", | ||
6151 | dev->name); | ||
6152 | return -1; | ||
6153 | } | ||
6154 | } | ||
6155 | if (sp->intr_type == MSI_X) { | ||
6156 | int i; | ||
6245 | 6157 | ||
6246 | free_irq(vector, arg); | 6158 | for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) { |
6159 | if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) { | ||
6160 | sprintf(sp->desc[i], "%s:MSI-X-%d-TX", | ||
6161 | dev->name, i); | ||
6162 | err = request_irq(sp->entries[i].vector, | ||
6163 | s2io_msix_fifo_handle, 0, sp->desc[i], | ||
6164 | sp->s2io_entries[i].arg); | ||
6165 | DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc[i], | ||
6166 | (unsigned long long)sp->msix_info[i].addr); | ||
6167 | } else { | ||
6168 | sprintf(sp->desc[i], "%s:MSI-X-%d-RX", | ||
6169 | dev->name, i); | ||
6170 | err = request_irq(sp->entries[i].vector, | ||
6171 | s2io_msix_ring_handle, 0, sp->desc[i], | ||
6172 | sp->s2io_entries[i].arg); | ||
6173 | DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc[i], | ||
6174 | (unsigned long long)sp->msix_info[i].addr); | ||
6247 | } | 6175 | } |
6248 | pci_read_config_word(sp->pdev, 0x42, &msi_control); | 6176 | if (err) { |
6249 | msi_control &= 0xFFFE; /* Disable MSI */ | 6177 | DBG_PRINT(ERR_DBG,"%s:MSI-X-%d registration " |
6250 | pci_write_config_word(sp->pdev, 0x42, msi_control); | 6178 | "failed\n", dev->name, i); |
6251 | pci_disable_msix(sp->pdev); | 6179 | DBG_PRINT(ERR_DBG, "Returned: %d\n", err); |
6252 | } else { | 6180 | return -1; |
6253 | free_irq(sp->pdev->irq, dev); | 6181 | } |
6254 | if (sp->intr_type == MSI) | 6182 | sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS; |
6255 | pci_disable_msi(sp->pdev); | 6183 | } |
6184 | } | ||
6185 | if (sp->intr_type == INTA) { | ||
6186 | err = request_irq((int) sp->pdev->irq, s2io_isr, IRQF_SHARED, | ||
6187 | sp->name, dev); | ||
6188 | if (err) { | ||
6189 | DBG_PRINT(ERR_DBG, "%s: ISR registration failed\n", | ||
6190 | dev->name); | ||
6191 | return -1; | ||
6192 | } | ||
6193 | } | ||
6194 | return 0; | ||
6195 | } | ||
6196 | static void s2io_rem_isr(nic_t * sp) | ||
6197 | { | ||
6198 | int cnt = 0; | ||
6199 | struct net_device *dev = sp->dev; | ||
6200 | |||
6201 | if (sp->intr_type == MSI_X) { | ||
6202 | int i; | ||
6203 | u16 msi_control; | ||
6204 | |||
6205 | for (i=1; (sp->s2io_entries[i].in_use == | ||
6206 | MSIX_REGISTERED_SUCCESS); i++) { | ||
6207 | int vector = sp->entries[i].vector; | ||
6208 | void *arg = sp->s2io_entries[i].arg; | ||
6209 | |||
6210 | free_irq(vector, arg); | ||
6211 | } | ||
6212 | pci_read_config_word(sp->pdev, 0x42, &msi_control); | ||
6213 | msi_control &= 0xFFFE; /* Disable MSI */ | ||
6214 | pci_write_config_word(sp->pdev, 0x42, msi_control); | ||
6215 | |||
6216 | pci_disable_msix(sp->pdev); | ||
6217 | } else { | ||
6218 | free_irq(sp->pdev->irq, dev); | ||
6219 | if (sp->intr_type == MSI) { | ||
6220 | u16 val; | ||
6221 | |||
6222 | pci_disable_msi(sp->pdev); | ||
6223 | pci_read_config_word(sp->pdev, 0x4c, &val); | ||
6224 | val ^= 0x1; | ||
6225 | pci_write_config_word(sp->pdev, 0x4c, val); | ||
6256 | } | 6226 | } |
6257 | } | 6227 | } |
6258 | /* Waiting till all Interrupt handlers are complete */ | 6228 | /* Waiting till all Interrupt handlers are complete */ |
@@ -6263,6 +6233,26 @@ static void s2io_card_down(nic_t * sp, int flag) | |||
6263 | break; | 6233 | break; |
6264 | cnt++; | 6234 | cnt++; |
6265 | } while(cnt < 5); | 6235 | } while(cnt < 5); |
6236 | } | ||
6237 | |||
6238 | static void s2io_card_down(nic_t * sp) | ||
6239 | { | ||
6240 | int cnt = 0; | ||
6241 | XENA_dev_config_t __iomem *bar0 = sp->bar0; | ||
6242 | unsigned long flags; | ||
6243 | register u64 val64 = 0; | ||
6244 | |||
6245 | del_timer_sync(&sp->alarm_timer); | ||
6246 | /* If s2io_set_link task is executing, wait till it completes. */ | ||
6247 | while (test_and_set_bit(0, &(sp->link_state))) { | ||
6248 | msleep(50); | ||
6249 | } | ||
6250 | atomic_set(&sp->card_state, CARD_DOWN); | ||
6251 | |||
6252 | /* disable Tx and Rx traffic on the NIC */ | ||
6253 | stop_nic(sp); | ||
6254 | |||
6255 | s2io_rem_isr(sp); | ||
6266 | 6256 | ||
6267 | /* Kill tasklet. */ | 6257 | /* Kill tasklet. */ |
6268 | tasklet_kill(&sp->task); | 6258 | tasklet_kill(&sp->task); |
@@ -6314,23 +6304,16 @@ static int s2io_card_up(nic_t * sp) | |||
6314 | mac_info_t *mac_control; | 6304 | mac_info_t *mac_control; |
6315 | struct config_param *config; | 6305 | struct config_param *config; |
6316 | struct net_device *dev = (struct net_device *) sp->dev; | 6306 | struct net_device *dev = (struct net_device *) sp->dev; |
6307 | u16 interruptible; | ||
6317 | 6308 | ||
6318 | /* Initialize the H/W I/O registers */ | 6309 | /* Initialize the H/W I/O registers */ |
6319 | if (init_nic(sp) != 0) { | 6310 | if (init_nic(sp) != 0) { |
6320 | DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n", | 6311 | DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n", |
6321 | dev->name); | 6312 | dev->name); |
6313 | s2io_reset(sp); | ||
6322 | return -ENODEV; | 6314 | return -ENODEV; |
6323 | } | 6315 | } |
6324 | 6316 | ||
6325 | if (sp->intr_type == MSI) | ||
6326 | ret = s2io_enable_msi(sp); | ||
6327 | else if (sp->intr_type == MSI_X) | ||
6328 | ret = s2io_enable_msi_x(sp); | ||
6329 | if (ret) { | ||
6330 | DBG_PRINT(ERR_DBG, "%s: Defaulting to INTA\n", dev->name); | ||
6331 | sp->intr_type = INTA; | ||
6332 | } | ||
6333 | |||
6334 | /* | 6317 | /* |
6335 | * Initializing the Rx buffers. For now we are considering only 1 | 6318 | * Initializing the Rx buffers. For now we are considering only 1 |
6336 | * Rx ring and initializing buffers into 30 Rx blocks | 6319 | * Rx ring and initializing buffers into 30 Rx blocks |
@@ -6361,21 +6344,39 @@ static int s2io_card_up(nic_t * sp) | |||
6361 | sp->lro_max_aggr_per_sess = lro_max_pkts; | 6344 | sp->lro_max_aggr_per_sess = lro_max_pkts; |
6362 | } | 6345 | } |
6363 | 6346 | ||
6364 | /* Enable tasklet for the device */ | ||
6365 | tasklet_init(&sp->task, s2io_tasklet, (unsigned long) dev); | ||
6366 | |||
6367 | /* Enable Rx Traffic and interrupts on the NIC */ | 6347 | /* Enable Rx Traffic and interrupts on the NIC */ |
6368 | if (start_nic(sp)) { | 6348 | if (start_nic(sp)) { |
6369 | DBG_PRINT(ERR_DBG, "%s: Starting NIC failed\n", dev->name); | 6349 | DBG_PRINT(ERR_DBG, "%s: Starting NIC failed\n", dev->name); |
6370 | tasklet_kill(&sp->task); | ||
6371 | s2io_reset(sp); | 6350 | s2io_reset(sp); |
6372 | free_irq(dev->irq, dev); | 6351 | free_rx_buffers(sp); |
6352 | return -ENODEV; | ||
6353 | } | ||
6354 | |||
6355 | /* Add interrupt service routine */ | ||
6356 | if (s2io_add_isr(sp) != 0) { | ||
6357 | if (sp->intr_type == MSI_X) | ||
6358 | s2io_rem_isr(sp); | ||
6359 | s2io_reset(sp); | ||
6373 | free_rx_buffers(sp); | 6360 | free_rx_buffers(sp); |
6374 | return -ENODEV; | 6361 | return -ENODEV; |
6375 | } | 6362 | } |
6376 | 6363 | ||
6377 | S2IO_TIMER_CONF(sp->alarm_timer, s2io_alarm_handle, sp, (HZ/2)); | 6364 | S2IO_TIMER_CONF(sp->alarm_timer, s2io_alarm_handle, sp, (HZ/2)); |
6378 | 6365 | ||
6366 | /* Enable tasklet for the device */ | ||
6367 | tasklet_init(&sp->task, s2io_tasklet, (unsigned long) dev); | ||
6368 | |||
6369 | /* Enable select interrupts */ | ||
6370 | if (sp->intr_type != INTA) | ||
6371 | en_dis_able_nic_intrs(sp, ENA_ALL_INTRS, DISABLE_INTRS); | ||
6372 | else { | ||
6373 | interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR; | ||
6374 | interruptible |= TX_PIC_INTR | RX_PIC_INTR; | ||
6375 | interruptible |= TX_MAC_INTR | RX_MAC_INTR; | ||
6376 | en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS); | ||
6377 | } | ||
6378 | |||
6379 | |||
6379 | atomic_set(&sp->card_state, CARD_UP); | 6380 | atomic_set(&sp->card_state, CARD_UP); |
6380 | return 0; | 6381 | return 0; |
6381 | } | 6382 | } |
@@ -6395,7 +6396,7 @@ static void s2io_restart_nic(unsigned long data) | |||
6395 | struct net_device *dev = (struct net_device *) data; | 6396 | struct net_device *dev = (struct net_device *) data; |
6396 | nic_t *sp = dev->priv; | 6397 | nic_t *sp = dev->priv; |
6397 | 6398 | ||
6398 | s2io_card_down(sp, 0); | 6399 | s2io_card_down(sp); |
6399 | if (s2io_card_up(sp)) { | 6400 | if (s2io_card_up(sp)) { |
6400 | DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", | 6401 | DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", |
6401 | dev->name); | 6402 | dev->name); |
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index c43f52179708..217097bc22f1 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h | |||
@@ -829,8 +829,7 @@ struct s2io_nic { | |||
829 | #define MSIX_FLG 0xA5 | 829 | #define MSIX_FLG 0xA5 |
830 | struct msix_entry *entries; | 830 | struct msix_entry *entries; |
831 | struct s2io_msix_entry *s2io_entries; | 831 | struct s2io_msix_entry *s2io_entries; |
832 | char desc1[35]; | 832 | char desc[MAX_REQUESTED_MSI_X][25]; |
833 | char desc2[35]; | ||
834 | 833 | ||
835 | int avail_msix_vectors; /* No. of MSI-X vectors granted by system */ | 834 | int avail_msix_vectors; /* No. of MSI-X vectors granted by system */ |
836 | 835 | ||
@@ -1002,7 +1001,7 @@ static int verify_xena_quiescence(nic_t *sp, u64 val64, int flag); | |||
1002 | static struct ethtool_ops netdev_ethtool_ops; | 1001 | static struct ethtool_ops netdev_ethtool_ops; |
1003 | static void s2io_set_link(unsigned long data); | 1002 | static void s2io_set_link(unsigned long data); |
1004 | static int s2io_set_swapper(nic_t * sp); | 1003 | static int s2io_set_swapper(nic_t * sp); |
1005 | static void s2io_card_down(nic_t *nic, int flag); | 1004 | static void s2io_card_down(nic_t *nic); |
1006 | static int s2io_card_up(nic_t *nic); | 1005 | static int s2io_card_up(nic_t *nic); |
1007 | static int get_xena_rev_id(struct pci_dev *pdev); | 1006 | static int get_xena_rev_id(struct pci_dev *pdev); |
1008 | static void restore_xmsi_data(nic_t *nic); | 1007 | static void restore_xmsi_data(nic_t *nic); |
diff --git a/drivers/net/sk98lin/h/xmac_ii.h b/drivers/net/sk98lin/h/xmac_ii.h index 2b19f8ad0318..7f8e6d0084c7 100644 --- a/drivers/net/sk98lin/h/xmac_ii.h +++ b/drivers/net/sk98lin/h/xmac_ii.h | |||
@@ -1473,7 +1473,7 @@ extern "C" { | |||
1473 | #define GM_TXCR_FORCE_JAM (1<<15) /* Bit 15: Force Jam / Flow-Control */ | 1473 | #define GM_TXCR_FORCE_JAM (1<<15) /* Bit 15: Force Jam / Flow-Control */ |
1474 | #define GM_TXCR_CRC_DIS (1<<14) /* Bit 14: Disable insertion of CRC */ | 1474 | #define GM_TXCR_CRC_DIS (1<<14) /* Bit 14: Disable insertion of CRC */ |
1475 | #define GM_TXCR_PAD_DIS (1<<13) /* Bit 13: Disable padding of packets */ | 1475 | #define GM_TXCR_PAD_DIS (1<<13) /* Bit 13: Disable padding of packets */ |
1476 | #define GM_TXCR_COL_THR_MSK (1<<10) /* Bit 12..10: Collision Threshold */ | 1476 | #define GM_TXCR_COL_THR_MSK (7<<10) /* Bit 12..10: Collision Threshold */ |
1477 | 1477 | ||
1478 | #define TX_COL_THR(x) (SHIFT10(x) & GM_TXCR_COL_THR_MSK) | 1478 | #define TX_COL_THR(x) (SHIFT10(x) & GM_TXCR_COL_THR_MSK) |
1479 | 1479 | ||
diff --git a/drivers/net/skge.h b/drivers/net/skge.h index ed19ff47ce11..593387b3c0dd 100644 --- a/drivers/net/skge.h +++ b/drivers/net/skge.h | |||
@@ -1734,11 +1734,11 @@ enum { | |||
1734 | GM_TXCR_FORCE_JAM = 1<<15, /* Bit 15: Force Jam / Flow-Control */ | 1734 | GM_TXCR_FORCE_JAM = 1<<15, /* Bit 15: Force Jam / Flow-Control */ |
1735 | GM_TXCR_CRC_DIS = 1<<14, /* Bit 14: Disable insertion of CRC */ | 1735 | GM_TXCR_CRC_DIS = 1<<14, /* Bit 14: Disable insertion of CRC */ |
1736 | GM_TXCR_PAD_DIS = 1<<13, /* Bit 13: Disable padding of packets */ | 1736 | GM_TXCR_PAD_DIS = 1<<13, /* Bit 13: Disable padding of packets */ |
1737 | GM_TXCR_COL_THR_MSK = 1<<10, /* Bit 12..10: Collision Threshold */ | 1737 | GM_TXCR_COL_THR_MSK = 7<<10, /* Bit 12..10: Collision Threshold */ |
1738 | }; | 1738 | }; |
1739 | 1739 | ||
1740 | #define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK) | 1740 | #define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK) |
1741 | #define TX_COL_DEF 0x04 | 1741 | #define TX_COL_DEF 0x04 /* late collision after 64 byte */ |
1742 | 1742 | ||
1743 | /* GM_RX_CTRL 16 bit r/w Receive Control Register */ | 1743 | /* GM_RX_CTRL 16 bit r/w Receive Control Register */ |
1744 | enum { | 1744 | enum { |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 31093760aa1e..d98f28c34e5c 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -65,6 +65,7 @@ | |||
65 | #define RX_MAX_PENDING (RX_LE_SIZE/2 - 2) | 65 | #define RX_MAX_PENDING (RX_LE_SIZE/2 - 2) |
66 | #define RX_DEF_PENDING RX_MAX_PENDING | 66 | #define RX_DEF_PENDING RX_MAX_PENDING |
67 | #define RX_SKB_ALIGN 8 | 67 | #define RX_SKB_ALIGN 8 |
68 | #define RX_BUF_WRITE 16 | ||
68 | 69 | ||
69 | #define TX_RING_SIZE 512 | 70 | #define TX_RING_SIZE 512 |
70 | #define TX_DEF_PENDING (TX_RING_SIZE - 1) | 71 | #define TX_DEF_PENDING (TX_RING_SIZE - 1) |
@@ -234,7 +235,6 @@ static void sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) | |||
234 | } | 235 | } |
235 | 236 | ||
236 | if (hw->chip_id == CHIP_ID_YUKON_EC_U) { | 237 | if (hw->chip_id == CHIP_ID_YUKON_EC_U) { |
237 | sky2_write16(hw, B0_CTST, Y2_HW_WOL_ON); | ||
238 | sky2_pci_write32(hw, PCI_DEV_REG3, 0); | 238 | sky2_pci_write32(hw, PCI_DEV_REG3, 0); |
239 | reg1 = sky2_pci_read32(hw, PCI_DEV_REG4); | 239 | reg1 = sky2_pci_read32(hw, PCI_DEV_REG4); |
240 | reg1 &= P_ASPM_CONTROL_MSK; | 240 | reg1 &= P_ASPM_CONTROL_MSK; |
@@ -243,6 +243,7 @@ static void sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) | |||
243 | } | 243 | } |
244 | 244 | ||
245 | sky2_pci_write32(hw, PCI_DEV_REG1, reg1); | 245 | sky2_pci_write32(hw, PCI_DEV_REG1, reg1); |
246 | udelay(100); | ||
246 | 247 | ||
247 | break; | 248 | break; |
248 | 249 | ||
@@ -255,6 +256,7 @@ static void sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) | |||
255 | else | 256 | else |
256 | reg1 |= (PCI_Y2_PHY1_POWD | PCI_Y2_PHY2_POWD); | 257 | reg1 |= (PCI_Y2_PHY1_POWD | PCI_Y2_PHY2_POWD); |
257 | sky2_pci_write32(hw, PCI_DEV_REG1, reg1); | 258 | sky2_pci_write32(hw, PCI_DEV_REG1, reg1); |
259 | udelay(100); | ||
258 | 260 | ||
259 | if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1) | 261 | if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1) |
260 | sky2_write8(hw, B2_Y2_CLK_GATE, 0); | 262 | sky2_write8(hw, B2_Y2_CLK_GATE, 0); |
@@ -1389,7 +1391,7 @@ static void sky2_tx_complete(struct sky2_port *sky2, u16 done) | |||
1389 | } | 1391 | } |
1390 | 1392 | ||
1391 | sky2->tx_cons = put; | 1393 | sky2->tx_cons = put; |
1392 | if (tx_avail(sky2) > MAX_SKB_TX_LE) | 1394 | if (tx_avail(sky2) > MAX_SKB_TX_LE + 4) |
1393 | netif_wake_queue(dev); | 1395 | netif_wake_queue(dev); |
1394 | } | 1396 | } |
1395 | 1397 | ||
@@ -1888,9 +1890,6 @@ resubmit: | |||
1888 | re->skb->ip_summed = CHECKSUM_NONE; | 1890 | re->skb->ip_summed = CHECKSUM_NONE; |
1889 | sky2_rx_add(sky2, re->mapaddr); | 1891 | sky2_rx_add(sky2, re->mapaddr); |
1890 | 1892 | ||
1891 | /* Tell receiver about new buffers. */ | ||
1892 | sky2_put_idx(sky2->hw, rxqaddr[sky2->port], sky2->rx_put); | ||
1893 | |||
1894 | return skb; | 1893 | return skb; |
1895 | 1894 | ||
1896 | oversize: | 1895 | oversize: |
@@ -1937,7 +1936,9 @@ static inline int sky2_more_work(const struct sky2_hw *hw) | |||
1937 | /* Process status response ring */ | 1936 | /* Process status response ring */ |
1938 | static int sky2_status_intr(struct sky2_hw *hw, int to_do) | 1937 | static int sky2_status_intr(struct sky2_hw *hw, int to_do) |
1939 | { | 1938 | { |
1939 | struct sky2_port *sky2; | ||
1940 | int work_done = 0; | 1940 | int work_done = 0; |
1941 | unsigned buf_write[2] = { 0, 0 }; | ||
1941 | u16 hwidx = sky2_read16(hw, STAT_PUT_IDX); | 1942 | u16 hwidx = sky2_read16(hw, STAT_PUT_IDX); |
1942 | 1943 | ||
1943 | rmb(); | 1944 | rmb(); |
@@ -1945,7 +1946,6 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do) | |||
1945 | while (hw->st_idx != hwidx) { | 1946 | while (hw->st_idx != hwidx) { |
1946 | struct sky2_status_le *le = hw->st_le + hw->st_idx; | 1947 | struct sky2_status_le *le = hw->st_le + hw->st_idx; |
1947 | struct net_device *dev; | 1948 | struct net_device *dev; |
1948 | struct sky2_port *sky2; | ||
1949 | struct sk_buff *skb; | 1949 | struct sk_buff *skb; |
1950 | u32 status; | 1950 | u32 status; |
1951 | u16 length; | 1951 | u16 length; |
@@ -1978,6 +1978,14 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do) | |||
1978 | #endif | 1978 | #endif |
1979 | netif_receive_skb(skb); | 1979 | netif_receive_skb(skb); |
1980 | 1980 | ||
1981 | /* Update receiver after 16 frames */ | ||
1982 | if (++buf_write[le->link] == RX_BUF_WRITE) { | ||
1983 | sky2_put_idx(hw, rxqaddr[le->link], | ||
1984 | sky2->rx_put); | ||
1985 | buf_write[le->link] = 0; | ||
1986 | } | ||
1987 | |||
1988 | /* Stop after net poll weight */ | ||
1981 | if (++work_done >= to_do) | 1989 | if (++work_done >= to_do) |
1982 | goto exit_loop; | 1990 | goto exit_loop; |
1983 | break; | 1991 | break; |
@@ -2016,6 +2024,16 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do) | |||
2016 | } | 2024 | } |
2017 | 2025 | ||
2018 | exit_loop: | 2026 | exit_loop: |
2027 | if (buf_write[0]) { | ||
2028 | sky2 = netdev_priv(hw->dev[0]); | ||
2029 | sky2_put_idx(hw, Q_R1, sky2->rx_put); | ||
2030 | } | ||
2031 | |||
2032 | if (buf_write[1]) { | ||
2033 | sky2 = netdev_priv(hw->dev[1]); | ||
2034 | sky2_put_idx(hw, Q_R2, sky2->rx_put); | ||
2035 | } | ||
2036 | |||
2019 | return work_done; | 2037 | return work_done; |
2020 | } | 2038 | } |
2021 | 2039 | ||
@@ -2286,7 +2304,7 @@ static inline u32 sky2_clk2us(const struct sky2_hw *hw, u32 clk) | |||
2286 | } | 2304 | } |
2287 | 2305 | ||
2288 | 2306 | ||
2289 | static int __devinit sky2_reset(struct sky2_hw *hw) | 2307 | static int sky2_reset(struct sky2_hw *hw) |
2290 | { | 2308 | { |
2291 | u16 status; | 2309 | u16 status; |
2292 | u8 t8, pmd_type; | 2310 | u8 t8, pmd_type; |
@@ -3437,17 +3455,14 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state) | |||
3437 | return -EINVAL; | 3455 | return -EINVAL; |
3438 | 3456 | ||
3439 | del_timer_sync(&hw->idle_timer); | 3457 | del_timer_sync(&hw->idle_timer); |
3458 | netif_poll_disable(hw->dev[0]); | ||
3440 | 3459 | ||
3441 | for (i = 0; i < hw->ports; i++) { | 3460 | for (i = 0; i < hw->ports; i++) { |
3442 | struct net_device *dev = hw->dev[i]; | 3461 | struct net_device *dev = hw->dev[i]; |
3443 | 3462 | ||
3444 | if (dev) { | 3463 | if (netif_running(dev)) { |
3445 | if (!netif_running(dev)) | ||
3446 | continue; | ||
3447 | |||
3448 | sky2_down(dev); | 3464 | sky2_down(dev); |
3449 | netif_device_detach(dev); | 3465 | netif_device_detach(dev); |
3450 | netif_poll_disable(dev); | ||
3451 | } | 3466 | } |
3452 | } | 3467 | } |
3453 | 3468 | ||
@@ -3474,9 +3489,8 @@ static int sky2_resume(struct pci_dev *pdev) | |||
3474 | 3489 | ||
3475 | for (i = 0; i < hw->ports; i++) { | 3490 | for (i = 0; i < hw->ports; i++) { |
3476 | struct net_device *dev = hw->dev[i]; | 3491 | struct net_device *dev = hw->dev[i]; |
3477 | if (dev && netif_running(dev)) { | 3492 | if (netif_running(dev)) { |
3478 | netif_device_attach(dev); | 3493 | netif_device_attach(dev); |
3479 | netif_poll_enable(dev); | ||
3480 | 3494 | ||
3481 | err = sky2_up(dev); | 3495 | err = sky2_up(dev); |
3482 | if (err) { | 3496 | if (err) { |
@@ -3488,6 +3502,7 @@ static int sky2_resume(struct pci_dev *pdev) | |||
3488 | } | 3502 | } |
3489 | } | 3503 | } |
3490 | 3504 | ||
3505 | netif_poll_enable(hw->dev[0]); | ||
3491 | sky2_idle_start(hw); | 3506 | sky2_idle_start(hw); |
3492 | out: | 3507 | out: |
3493 | return err; | 3508 | return err; |
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h index 8a0bc5525f0a..2db8d19b22d1 100644 --- a/drivers/net/sky2.h +++ b/drivers/net/sky2.h | |||
@@ -1480,7 +1480,7 @@ enum { | |||
1480 | GM_TXCR_FORCE_JAM = 1<<15, /* Bit 15: Force Jam / Flow-Control */ | 1480 | GM_TXCR_FORCE_JAM = 1<<15, /* Bit 15: Force Jam / Flow-Control */ |
1481 | GM_TXCR_CRC_DIS = 1<<14, /* Bit 14: Disable insertion of CRC */ | 1481 | GM_TXCR_CRC_DIS = 1<<14, /* Bit 14: Disable insertion of CRC */ |
1482 | GM_TXCR_PAD_DIS = 1<<13, /* Bit 13: Disable padding of packets */ | 1482 | GM_TXCR_PAD_DIS = 1<<13, /* Bit 13: Disable padding of packets */ |
1483 | GM_TXCR_COL_THR_MSK = 1<<10, /* Bit 12..10: Collision Threshold */ | 1483 | GM_TXCR_COL_THR_MSK = 7<<10, /* Bit 12..10: Collision Threshold */ |
1484 | }; | 1484 | }; |
1485 | 1485 | ||
1486 | #define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK) | 1486 | #define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK) |
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h index b4028049ed76..4ec4b4d23ae5 100644 --- a/drivers/net/smc91x.h +++ b/drivers/net/smc91x.h | |||
@@ -354,6 +354,24 @@ static inline void LPD7_SMC_outsw (unsigned char* a, int r, | |||
354 | 354 | ||
355 | #define SMC_IRQ_FLAGS (0) | 355 | #define SMC_IRQ_FLAGS (0) |
356 | 356 | ||
357 | #elif defined(CONFIG_ARCH_VERSATILE) | ||
358 | |||
359 | #define SMC_CAN_USE_8BIT 1 | ||
360 | #define SMC_CAN_USE_16BIT 1 | ||
361 | #define SMC_CAN_USE_32BIT 1 | ||
362 | #define SMC_NOWAIT 1 | ||
363 | |||
364 | #define SMC_inb(a, r) readb((a) + (r)) | ||
365 | #define SMC_inw(a, r) readw((a) + (r)) | ||
366 | #define SMC_inl(a, r) readl((a) + (r)) | ||
367 | #define SMC_outb(v, a, r) writeb(v, (a) + (r)) | ||
368 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) | ||
369 | #define SMC_outl(v, a, r) writel(v, (a) + (r)) | ||
370 | #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l) | ||
371 | #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l) | ||
372 | |||
373 | #define SMC_IRQ_FLAGS (0) | ||
374 | |||
357 | #else | 375 | #else |
358 | 376 | ||
359 | #define SMC_CAN_USE_8BIT 1 | 377 | #define SMC_CAN_USE_8BIT 1 |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index e1c5a939bca4..3889f79e7128 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
@@ -1547,7 +1547,7 @@ static void handle_irq_noise(struct bcm43xx_private *bcm) | |||
1547 | goto generate_new; | 1547 | goto generate_new; |
1548 | 1548 | ||
1549 | /* Get the noise samples. */ | 1549 | /* Get the noise samples. */ |
1550 | assert(bcm->noisecalc.nr_samples <= 8); | 1550 | assert(bcm->noisecalc.nr_samples < 8); |
1551 | i = bcm->noisecalc.nr_samples; | 1551 | i = bcm->noisecalc.nr_samples; |
1552 | noise[0] = limit_value(noise[0], 0, ARRAY_SIZE(radio->nrssi_lt) - 1); | 1552 | noise[0] = limit_value(noise[0], 0, ARRAY_SIZE(radio->nrssi_lt) - 1); |
1553 | noise[1] = limit_value(noise[1], 0, ARRAY_SIZE(radio->nrssi_lt) - 1); | 1553 | noise[1] = limit_value(noise[1], 0, ARRAY_SIZE(radio->nrssi_lt) - 1); |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index ce1cb2c6aa8d..72f90525bf68 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -375,10 +375,8 @@ static void int_urb_complete(struct urb *urb, struct pt_regs *pt_regs) | |||
375 | case -ENODEV: | 375 | case -ENODEV: |
376 | case -ENOENT: | 376 | case -ENOENT: |
377 | case -ECONNRESET: | 377 | case -ECONNRESET: |
378 | goto kfree; | ||
379 | case -EPIPE: | 378 | case -EPIPE: |
380 | usb_clear_halt(urb->dev, EP_INT_IN); | 379 | goto kfree; |
381 | /* FALL-THROUGH */ | ||
382 | default: | 380 | default: |
383 | goto resubmit; | 381 | goto resubmit; |
384 | } | 382 | } |
@@ -580,10 +578,8 @@ static void rx_urb_complete(struct urb *urb, struct pt_regs *pt_regs) | |||
580 | case -ENODEV: | 578 | case -ENODEV: |
581 | case -ENOENT: | 579 | case -ENOENT: |
582 | case -ECONNRESET: | 580 | case -ECONNRESET: |
583 | return; | ||
584 | case -EPIPE: | 581 | case -EPIPE: |
585 | usb_clear_halt(urb->dev, EP_DATA_IN); | 582 | return; |
586 | /* FALL-THROUGH */ | ||
587 | default: | 583 | default: |
588 | dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); | 584 | dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); |
589 | goto resubmit; | 585 | goto resubmit; |
@@ -749,11 +745,9 @@ static void tx_urb_complete(struct urb *urb, struct pt_regs *pt_regs) | |||
749 | case -ENODEV: | 745 | case -ENODEV: |
750 | case -ENOENT: | 746 | case -ENOENT: |
751 | case -ECONNRESET: | 747 | case -ECONNRESET: |
748 | case -EPIPE: | ||
752 | dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); | 749 | dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); |
753 | break; | 750 | break; |
754 | case -EPIPE: | ||
755 | usb_clear_halt(urb->dev, EP_DATA_OUT); | ||
756 | /* FALL-THROUGH */ | ||
757 | default: | 751 | default: |
758 | dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); | 752 | dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status); |
759 | goto resubmit; | 753 | goto resubmit; |