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; |
