diff options
| -rw-r--r-- | MAINTAINERS | 1 | ||||
| -rw-r--r-- | drivers/acpi/osl.c | 60 | ||||
| -rw-r--r-- | drivers/ide/legacy/ide-cs.c | 81 | ||||
| -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 | ||||
| -rw-r--r-- | drivers/w1/masters/ds2482.c | 2 | ||||
| -rw-r--r-- | drivers/w1/w1_io.h | 36 |
20 files changed, 288 insertions, 337 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 645a9f85f33f..491e034f3475 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -3180,7 +3180,6 @@ S: Maintained | |||
| 3180 | W1 DALLAS'S 1-WIRE BUS | 3180 | W1 DALLAS'S 1-WIRE BUS |
| 3181 | P: Evgeniy Polyakov | 3181 | P: Evgeniy Polyakov |
| 3182 | M: johnpol@2ka.mipt.ru | 3182 | M: johnpol@2ka.mipt.ru |
| 3183 | L: lm-sensors@lm-sensors.org | ||
| 3184 | S: Maintained | 3183 | S: Maintained |
| 3185 | 3184 | ||
| 3186 | W83L51xD SD/MMC CARD INTERFACE DRIVER | 3185 | W83L51xD SD/MMC CARD INTERFACE DRIVER |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 47dfde95b8f8..b7d1514cd199 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
| @@ -36,7 +36,6 @@ | |||
| 36 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
| 37 | #include <linux/workqueue.h> | 37 | #include <linux/workqueue.h> |
| 38 | #include <linux/nmi.h> | 38 | #include <linux/nmi.h> |
| 39 | #include <linux/kthread.h> | ||
| 40 | #include <acpi/acpi.h> | 39 | #include <acpi/acpi.h> |
| 41 | #include <asm/io.h> | 40 | #include <asm/io.h> |
| 42 | #include <acpi/acpi_bus.h> | 41 | #include <acpi/acpi_bus.h> |
| @@ -583,16 +582,6 @@ static void acpi_os_execute_deferred(void *context) | |||
| 583 | return; | 582 | return; |
| 584 | } | 583 | } |
| 585 | 584 | ||
| 586 | static int acpi_os_execute_thread(void *context) | ||
| 587 | { | ||
| 588 | struct acpi_os_dpc *dpc = (struct acpi_os_dpc *)context; | ||
| 589 | if (dpc) { | ||
| 590 | dpc->function(dpc->context); | ||
| 591 | kfree(dpc); | ||
| 592 | } | ||
| 593 | do_exit(0); | ||
| 594 | } | ||
| 595 | |||
| 596 | /******************************************************************************* | 585 | /******************************************************************************* |
| 597 | * | 586 | * |
| 598 | * FUNCTION: acpi_os_execute | 587 | * FUNCTION: acpi_os_execute |
| @@ -614,10 +603,16 @@ acpi_status acpi_os_execute(acpi_execute_type type, | |||
| 614 | acpi_status status = AE_OK; | 603 | acpi_status status = AE_OK; |
| 615 | struct acpi_os_dpc *dpc; | 604 | struct acpi_os_dpc *dpc; |
| 616 | struct work_struct *task; | 605 | struct work_struct *task; |
| 617 | struct task_struct *p; | 606 | |
| 607 | ACPI_FUNCTION_TRACE("os_queue_for_execution"); | ||
| 608 | |||
| 609 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | ||
| 610 | "Scheduling function [%p(%p)] for deferred execution.\n", | ||
| 611 | function, context)); | ||
| 618 | 612 | ||
| 619 | if (!function) | 613 | if (!function) |
| 620 | return AE_BAD_PARAMETER; | 614 | return_ACPI_STATUS(AE_BAD_PARAMETER); |
| 615 | |||
| 621 | /* | 616 | /* |
| 622 | * Allocate/initialize DPC structure. Note that this memory will be | 617 | * Allocate/initialize DPC structure. Note that this memory will be |
| 623 | * freed by the callee. The kernel handles the tq_struct list in a | 618 | * freed by the callee. The kernel handles the tq_struct list in a |
| @@ -628,34 +623,27 @@ acpi_status acpi_os_execute(acpi_execute_type type, | |||
| 628 | * We can save time and code by allocating the DPC and tq_structs | 623 | * We can save time and code by allocating the DPC and tq_structs |
| 629 | * from the same memory. | 624 | * from the same memory. |
| 630 | */ | 625 | */ |
| 631 | if (type == OSL_NOTIFY_HANDLER) { | 626 | |
| 632 | dpc = kmalloc(sizeof(struct acpi_os_dpc), GFP_KERNEL); | 627 | dpc = |
| 633 | } else { | 628 | kmalloc(sizeof(struct acpi_os_dpc) + sizeof(struct work_struct), |
| 634 | dpc = kmalloc(sizeof(struct acpi_os_dpc) + | 629 | GFP_ATOMIC); |
| 635 | sizeof(struct work_struct), GFP_ATOMIC); | ||
| 636 | } | ||
| 637 | if (!dpc) | 630 | if (!dpc) |
| 638 | return AE_NO_MEMORY; | 631 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 632 | |||
| 639 | dpc->function = function; | 633 | dpc->function = function; |
| 640 | dpc->context = context; | 634 | dpc->context = context; |
| 641 | 635 | ||
| 642 | if (type == OSL_NOTIFY_HANDLER) { | 636 | task = (void *)(dpc + 1); |
| 643 | p = kthread_create(acpi_os_execute_thread, dpc, "kacpid_notify"); | 637 | INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc); |
| 644 | if (!IS_ERR(p)) { | 638 | |
| 645 | wake_up_process(p); | 639 | if (!queue_work(kacpid_wq, task)) { |
| 646 | } else { | 640 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
| 647 | status = AE_NO_MEMORY; | 641 | "Call to queue_work() failed.\n")); |
| 648 | kfree(dpc); | 642 | kfree(dpc); |
| 649 | } | 643 | status = AE_ERROR; |
| 650 | } else { | ||
| 651 | task = (void *)(dpc + 1); | ||
| 652 | INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc); | ||
| 653 | if (!queue_work(kacpid_wq, task)) { | ||
| 654 | status = AE_ERROR; | ||
| 655 | kfree(dpc); | ||
| 656 | } | ||
| 657 | } | 644 | } |
| 658 | return status; | 645 | |
| 646 | return_ACPI_STATUS(status); | ||
| 659 | } | 647 | } |
| 660 | 648 | ||
| 661 | EXPORT_SYMBOL(acpi_os_execute); | 649 | EXPORT_SYMBOL(acpi_os_execute); |
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index b7e459e4f284..602797a44208 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
| @@ -146,16 +146,7 @@ static void ide_detach(struct pcmcia_device *link) | |||
| 146 | kfree(link->priv); | 146 | kfree(link->priv); |
| 147 | } /* ide_detach */ | 147 | } /* ide_detach */ |
| 148 | 148 | ||
| 149 | static void idecs_mmio_fixup(ide_hwif_t *hwif) | 149 | static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq, struct pcmcia_device *handle) |
| 150 | { | ||
| 151 | default_hwif_mmiops(hwif); | ||
| 152 | hwif->mmio = 2; | ||
| 153 | |||
| 154 | ide_undecoded_slave(hwif); | ||
| 155 | } | ||
| 156 | |||
| 157 | static int idecs_register(unsigned long io, unsigned long ctl, | ||
| 158 | unsigned long irq, struct pcmcia_device *handle, int is_mmio) | ||
| 159 | { | 150 | { |
| 160 | hw_regs_t hw; | 151 | hw_regs_t hw; |
| 161 | memset(&hw, 0, sizeof(hw)); | 152 | memset(&hw, 0, sizeof(hw)); |
| @@ -163,19 +154,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, | |||
| 163 | hw.irq = irq; | 154 | hw.irq = irq; |
| 164 | hw.chipset = ide_pci; | 155 | hw.chipset = ide_pci; |
| 165 | hw.dev = &handle->dev; | 156 | hw.dev = &handle->dev; |
| 166 | 157 | return ide_register_hw_with_fixup(&hw, NULL, ide_undecoded_slave); | |
| 167 | if(is_mmio) | ||
| 168 | return ide_register_hw_with_fixup(&hw, NULL, idecs_mmio_fixup); | ||
| 169 | else | ||
| 170 | return ide_register_hw_with_fixup(&hw, NULL, ide_undecoded_slave); | ||
| 171 | } | ||
| 172 | |||
| 173 | void outb_io(unsigned char value, unsigned long port) { | ||
| 174 | outb(value, port); | ||
| 175 | } | ||
| 176 | |||
| 177 | void outb_mem(unsigned char value, unsigned long port) { | ||
| 178 | writeb(value, (void __iomem *) port); | ||
| 179 | } | 158 | } |
| 180 | 159 | ||
| 181 | /*====================================================================== | 160 | /*====================================================================== |
| @@ -201,8 +180,7 @@ static int ide_config(struct pcmcia_device *link) | |||
| 201 | } *stk = NULL; | 180 | } *stk = NULL; |
| 202 | cistpl_cftable_entry_t *cfg; | 181 | cistpl_cftable_entry_t *cfg; |
| 203 | int i, pass, last_ret = 0, last_fn = 0, hd, is_kme = 0; | 182 | int i, pass, last_ret = 0, last_fn = 0, hd, is_kme = 0; |
| 204 | unsigned long io_base, ctl_base, is_mmio, try_slave; | 183 | unsigned long io_base, ctl_base; |
| 205 | void (*my_outb)(unsigned char, unsigned long); | ||
| 206 | 184 | ||
| 207 | DEBUG(0, "ide_config(0x%p)\n", link); | 185 | DEBUG(0, "ide_config(0x%p)\n", link); |
| 208 | 186 | ||
| @@ -232,7 +210,7 @@ static int ide_config(struct pcmcia_device *link) | |||
| 232 | /* Not sure if this is right... look up the current Vcc */ | 210 | /* Not sure if this is right... look up the current Vcc */ |
| 233 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf)); | 211 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf)); |
| 234 | 212 | ||
| 235 | pass = io_base = ctl_base = is_mmio = try_slave = 0; | 213 | pass = io_base = ctl_base = 0; |
| 236 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 214 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
| 237 | tuple.Attributes = 0; | 215 | tuple.Attributes = 0; |
| 238 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 216 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
| @@ -280,45 +258,11 @@ static int ide_config(struct pcmcia_device *link) | |||
| 280 | goto next_entry; | 258 | goto next_entry; |
| 281 | io_base = link->io.BasePort1; | 259 | io_base = link->io.BasePort1; |
| 282 | ctl_base = link->io.BasePort1 + 0x0e; | 260 | ctl_base = link->io.BasePort1 + 0x0e; |
| 283 | |||
| 284 | if (io->win[0].len >= 0x20) | ||
| 285 | try_slave = 1; | ||
| 286 | |||
| 287 | } else goto next_entry; | 261 | } else goto next_entry; |
| 288 | /* If we've got this far, we're done */ | 262 | /* If we've got this far, we're done */ |
| 289 | break; | 263 | break; |
| 290 | } | 264 | } |
| 291 | 265 | ||
| 292 | if ((cfg->mem.nwin > 0) || (stk->dflt.mem.nwin > 0)) { | ||
| 293 | win_req_t req; | ||
| 294 | memreq_t map; | ||
| 295 | cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &stk->dflt.mem; | ||
| 296 | |||
| 297 | if (mem->win[0].len < 16) | ||
| 298 | goto next_entry; | ||
| 299 | |||
| 300 | req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM; | ||
| 301 | req.Attributes |= WIN_ENABLE; | ||
| 302 | req.Base = mem->win[0].host_addr; | ||
| 303 | req.Size = 0; | ||
| 304 | |||
| 305 | req.AccessSpeed = 0; | ||
| 306 | if (pcmcia_request_window(&link, &req, &link->win) != 0) | ||
| 307 | goto next_entry; | ||
| 308 | map.Page = 0; map.CardOffset = mem->win[0].card_addr; | ||
| 309 | if (pcmcia_map_mem_page(link->win, &map) != 0) | ||
| 310 | goto next_entry; | ||
| 311 | |||
| 312 | io_base = (unsigned long) ioremap(req.Base, req.Size); | ||
| 313 | ctl_base = io_base + 0x0e; | ||
| 314 | is_mmio = 1; | ||
| 315 | |||
| 316 | if (mem->win[0].len >= 0x20) | ||
| 317 | try_slave = 1; | ||
| 318 | |||
| 319 | break; | ||
| 320 | } | ||
| 321 | |||
| 322 | next_entry: | 266 | next_entry: |
| 323 | if (cfg->flags & CISTPL_CFTABLE_DEFAULT) | 267 | if (cfg->flags & CISTPL_CFTABLE_DEFAULT) |
| 324 | memcpy(&stk->dflt, cfg, sizeof(stk->dflt)); | 268 | memcpy(&stk->dflt, cfg, sizeof(stk->dflt)); |
| @@ -334,26 +278,21 @@ static int ide_config(struct pcmcia_device *link) | |||
| 334 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | 278 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); |
| 335 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); | 279 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); |
| 336 | 280 | ||
| 337 | if(is_mmio) | ||
| 338 | my_outb = outb_mem; | ||
| 339 | else | ||
| 340 | my_outb = outb_io; | ||
| 341 | |||
| 342 | /* disable drive interrupts during IDE probe */ | 281 | /* disable drive interrupts during IDE probe */ |
| 343 | my_outb(0x02, ctl_base); | 282 | outb(0x02, ctl_base); |
| 344 | 283 | ||
| 345 | /* special setup for KXLC005 card */ | 284 | /* special setup for KXLC005 card */ |
| 346 | if (is_kme) | 285 | if (is_kme) |
| 347 | my_outb(0x81, ctl_base+1); | 286 | outb(0x81, ctl_base+1); |
| 348 | 287 | ||
| 349 | /* retry registration in case device is still spinning up */ | 288 | /* retry registration in case device is still spinning up */ |
| 350 | for (hd = -1, i = 0; i < 10; i++) { | 289 | for (hd = -1, i = 0; i < 10; i++) { |
| 351 | hd = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ, link, is_mmio); | 290 | hd = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ, link); |
| 352 | if (hd >= 0) break; | 291 | if (hd >= 0) break; |
| 353 | if (try_slave) { | 292 | if (link->io.NumPorts1 == 0x20) { |
| 354 | my_outb(0x02, ctl_base + 0x10); | 293 | outb(0x02, ctl_base + 0x10); |
| 355 | hd = idecs_register(io_base + 0x10, ctl_base + 0x10, | 294 | hd = idecs_register(io_base + 0x10, ctl_base + 0x10, |
| 356 | link->irq.AssignedIRQ, link, is_mmio); | 295 | link->irq.AssignedIRQ, link); |
| 357 | if (hd >= 0) { | 296 | if (hd >= 0) { |
| 358 | io_base += 0x10; | 297 | io_base += 0x10; |
| 359 | ctl_base += 0x10; | 298 | ctl_base += 0x10; |
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; |
diff --git a/drivers/w1/masters/ds2482.c b/drivers/w1/masters/ds2482.c index af492cc48db2..d93eb626b2f0 100644 --- a/drivers/w1/masters/ds2482.c +++ b/drivers/w1/masters/ds2482.c | |||
| @@ -218,7 +218,7 @@ static int ds2482_wait_1wire_idle(struct ds2482_data *pdev) | |||
| 218 | do { | 218 | do { |
| 219 | temp = i2c_smbus_read_byte(&pdev->client); | 219 | temp = i2c_smbus_read_byte(&pdev->client); |
| 220 | } while ((temp >= 0) && (temp & DS2482_REG_STS_1WB) && | 220 | } while ((temp >= 0) && (temp & DS2482_REG_STS_1WB) && |
| 221 | (++retries > DS2482_WAIT_IDLE_TIMEOUT)); | 221 | (++retries < DS2482_WAIT_IDLE_TIMEOUT)); |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | if (retries > DS2482_WAIT_IDLE_TIMEOUT) | 224 | if (retries > DS2482_WAIT_IDLE_TIMEOUT) |
diff --git a/drivers/w1/w1_io.h b/drivers/w1/w1_io.h deleted file mode 100644 index 9a76d2ad69c5..000000000000 --- a/drivers/w1/w1_io.h +++ /dev/null | |||
| @@ -1,36 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * w1_io.h | ||
| 3 | * | ||
| 4 | * Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru> | ||
| 5 | * | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef __W1_IO_H | ||
| 23 | #define __W1_IO_H | ||
| 24 | |||
| 25 | #include "w1.h" | ||
| 26 | |||
| 27 | u8 w1_triplet(struct w1_master *dev, int bdir); | ||
| 28 | void w1_write_8(struct w1_master *, u8); | ||
| 29 | int w1_reset_bus(struct w1_master *); | ||
| 30 | u8 w1_calc_crc8(u8 *, int); | ||
| 31 | void w1_write_block(struct w1_master *, const u8 *, int); | ||
| 32 | u8 w1_read_block(struct w1_master *, u8 *, int); | ||
| 33 | void w1_search_devices(struct w1_master *dev, w1_slave_found_callback cb); | ||
| 34 | int w1_reset_select_slave(struct w1_slave *sl); | ||
| 35 | |||
| 36 | #endif /* __W1_IO_H */ | ||
