diff options
Diffstat (limited to 'drivers/net')
33 files changed, 305 insertions, 145 deletions
diff --git a/drivers/net/arcnet/Kconfig b/drivers/net/arcnet/Kconfig index a73d9dc80ff6..84fb6349a59a 100644 --- a/drivers/net/arcnet/Kconfig +++ b/drivers/net/arcnet/Kconfig | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | menuconfig ARCNET | 5 | menuconfig ARCNET |
| 6 | depends on NETDEVICES && (ISA || PCI || PCMCIA) | 6 | depends on NETDEVICES && (ISA || PCI || PCMCIA) |
| 7 | bool "ARCnet support" | 7 | tristate "ARCnet support" |
| 8 | ---help--- | 8 | ---help--- |
| 9 | If you have a network card of this type, say Y and check out the | 9 | If you have a network card of this type, say Y and check out the |
| 10 | (arguably) beautiful poetry in | 10 | (arguably) beautiful poetry in |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index b0c577256487..7f8756825b8a 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -2553,30 +2553,6 @@ re_arm: | |||
| 2553 | } | 2553 | } |
| 2554 | } | 2554 | } |
| 2555 | 2555 | ||
| 2556 | static __be32 bond_glean_dev_ip(struct net_device *dev) | ||
| 2557 | { | ||
| 2558 | struct in_device *idev; | ||
| 2559 | struct in_ifaddr *ifa; | ||
| 2560 | __be32 addr = 0; | ||
| 2561 | |||
| 2562 | if (!dev) | ||
| 2563 | return 0; | ||
| 2564 | |||
| 2565 | rcu_read_lock(); | ||
| 2566 | idev = __in_dev_get_rcu(dev); | ||
| 2567 | if (!idev) | ||
| 2568 | goto out; | ||
| 2569 | |||
| 2570 | ifa = idev->ifa_list; | ||
| 2571 | if (!ifa) | ||
| 2572 | goto out; | ||
| 2573 | |||
| 2574 | addr = ifa->ifa_local; | ||
| 2575 | out: | ||
| 2576 | rcu_read_unlock(); | ||
| 2577 | return addr; | ||
| 2578 | } | ||
| 2579 | |||
| 2580 | static int bond_has_this_ip(struct bonding *bond, __be32 ip) | 2556 | static int bond_has_this_ip(struct bonding *bond, __be32 ip) |
| 2581 | { | 2557 | { |
| 2582 | struct vlan_entry *vlan; | 2558 | struct vlan_entry *vlan; |
| @@ -3322,6 +3298,10 @@ static int bond_inetaddr_event(struct notifier_block *this, unsigned long event, | |||
| 3322 | struct bonding *bond; | 3298 | struct bonding *bond; |
| 3323 | struct vlan_entry *vlan; | 3299 | struct vlan_entry *vlan; |
| 3324 | 3300 | ||
| 3301 | /* we only care about primary address */ | ||
| 3302 | if(ifa->ifa_flags & IFA_F_SECONDARY) | ||
| 3303 | return NOTIFY_DONE; | ||
| 3304 | |||
| 3325 | list_for_each_entry(bond, &bn->dev_list, bond_list) { | 3305 | list_for_each_entry(bond, &bn->dev_list, bond_list) { |
| 3326 | if (bond->dev == event_dev) { | 3306 | if (bond->dev == event_dev) { |
| 3327 | switch (event) { | 3307 | switch (event) { |
| @@ -3329,7 +3309,7 @@ static int bond_inetaddr_event(struct notifier_block *this, unsigned long event, | |||
| 3329 | bond->master_ip = ifa->ifa_local; | 3309 | bond->master_ip = ifa->ifa_local; |
| 3330 | return NOTIFY_OK; | 3310 | return NOTIFY_OK; |
| 3331 | case NETDEV_DOWN: | 3311 | case NETDEV_DOWN: |
| 3332 | bond->master_ip = bond_glean_dev_ip(bond->dev); | 3312 | bond->master_ip = 0; |
| 3333 | return NOTIFY_OK; | 3313 | return NOTIFY_OK; |
| 3334 | default: | 3314 | default: |
| 3335 | return NOTIFY_DONE; | 3315 | return NOTIFY_DONE; |
| @@ -3345,8 +3325,7 @@ static int bond_inetaddr_event(struct notifier_block *this, unsigned long event, | |||
| 3345 | vlan->vlan_ip = ifa->ifa_local; | 3325 | vlan->vlan_ip = ifa->ifa_local; |
| 3346 | return NOTIFY_OK; | 3326 | return NOTIFY_OK; |
| 3347 | case NETDEV_DOWN: | 3327 | case NETDEV_DOWN: |
| 3348 | vlan->vlan_ip = | 3328 | vlan->vlan_ip = 0; |
| 3349 | bond_glean_dev_ip(vlan_dev); | ||
| 3350 | return NOTIFY_OK; | 3329 | return NOTIFY_OK; |
| 3351 | default: | 3330 | default: |
| 3352 | return NOTIFY_DONE; | 3331 | return NOTIFY_DONE; |
diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c index 905bce0b3a43..2c7f5036f570 100644 --- a/drivers/net/can/sja1000/peak_pci.c +++ b/drivers/net/can/sja1000/peak_pci.c | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
| 23 | #include <linux/version.h> | ||
| 24 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| 25 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
| 26 | #include <linux/netdevice.h> | 25 | #include <linux/netdevice.h> |
diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 4cf835dbc122..3fb66d09ece5 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c | |||
| @@ -608,7 +608,7 @@ static void b44_tx(struct b44 *bp) | |||
| 608 | skb->len, | 608 | skb->len, |
| 609 | DMA_TO_DEVICE); | 609 | DMA_TO_DEVICE); |
| 610 | rp->skb = NULL; | 610 | rp->skb = NULL; |
| 611 | dev_kfree_skb(skb); | 611 | dev_kfree_skb_irq(skb); |
| 612 | } | 612 | } |
| 613 | 613 | ||
| 614 | bp->tx_cons = cons; | 614 | bp->tx_cons = cons; |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index bce203fa4b9e..882f48f0a03c 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | |||
| @@ -10327,6 +10327,43 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy, | |||
| 10327 | return 0; | 10327 | return 0; |
| 10328 | } | 10328 | } |
| 10329 | 10329 | ||
| 10330 | |||
| 10331 | static void bnx2x_5461x_set_link_led(struct bnx2x_phy *phy, | ||
| 10332 | struct link_params *params, u8 mode) | ||
| 10333 | { | ||
| 10334 | struct bnx2x *bp = params->bp; | ||
| 10335 | u16 temp; | ||
| 10336 | |||
| 10337 | bnx2x_cl22_write(bp, phy, | ||
| 10338 | MDIO_REG_GPHY_SHADOW, | ||
| 10339 | MDIO_REG_GPHY_SHADOW_LED_SEL1); | ||
| 10340 | bnx2x_cl22_read(bp, phy, | ||
| 10341 | MDIO_REG_GPHY_SHADOW, | ||
| 10342 | &temp); | ||
| 10343 | temp &= 0xff00; | ||
| 10344 | |||
| 10345 | DP(NETIF_MSG_LINK, "54618x set link led (mode=%x)\n", mode); | ||
| 10346 | switch (mode) { | ||
| 10347 | case LED_MODE_FRONT_PANEL_OFF: | ||
| 10348 | case LED_MODE_OFF: | ||
| 10349 | temp |= 0x00ee; | ||
| 10350 | break; | ||
| 10351 | case LED_MODE_OPER: | ||
| 10352 | temp |= 0x0001; | ||
| 10353 | break; | ||
| 10354 | case LED_MODE_ON: | ||
| 10355 | temp |= 0x00ff; | ||
| 10356 | break; | ||
| 10357 | default: | ||
| 10358 | break; | ||
| 10359 | } | ||
| 10360 | bnx2x_cl22_write(bp, phy, | ||
| 10361 | MDIO_REG_GPHY_SHADOW, | ||
| 10362 | MDIO_REG_GPHY_SHADOW_WR_ENA | temp); | ||
| 10363 | return; | ||
| 10364 | } | ||
| 10365 | |||
| 10366 | |||
| 10330 | static void bnx2x_54618se_link_reset(struct bnx2x_phy *phy, | 10367 | static void bnx2x_54618se_link_reset(struct bnx2x_phy *phy, |
| 10331 | struct link_params *params) | 10368 | struct link_params *params) |
| 10332 | { | 10369 | { |
| @@ -11103,7 +11140,7 @@ static struct bnx2x_phy phy_54618se = { | |||
| 11103 | .config_loopback = (config_loopback_t)bnx2x_54618se_config_loopback, | 11140 | .config_loopback = (config_loopback_t)bnx2x_54618se_config_loopback, |
| 11104 | .format_fw_ver = (format_fw_ver_t)NULL, | 11141 | .format_fw_ver = (format_fw_ver_t)NULL, |
| 11105 | .hw_reset = (hw_reset_t)NULL, | 11142 | .hw_reset = (hw_reset_t)NULL, |
| 11106 | .set_link_led = (set_link_led_t)NULL, | 11143 | .set_link_led = (set_link_led_t)bnx2x_5461x_set_link_led, |
| 11107 | .phy_specific_func = (phy_specific_func_t)NULL | 11144 | .phy_specific_func = (phy_specific_func_t)NULL |
| 11108 | }; | 11145 | }; |
| 11109 | /*****************************************************************/ | 11146 | /*****************************************************************/ |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h index fc7bd0f23c0b..e58073ef33b4 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h | |||
| @@ -6990,6 +6990,7 @@ Theotherbitsarereservedandshouldbezero*/ | |||
| 6990 | #define MDIO_REG_INTR_MASK 0x1b | 6990 | #define MDIO_REG_INTR_MASK 0x1b |
| 6991 | #define MDIO_REG_INTR_MASK_LINK_STATUS (0x1 << 1) | 6991 | #define MDIO_REG_INTR_MASK_LINK_STATUS (0x1 << 1) |
| 6992 | #define MDIO_REG_GPHY_SHADOW 0x1c | 6992 | #define MDIO_REG_GPHY_SHADOW 0x1c |
| 6993 | #define MDIO_REG_GPHY_SHADOW_LED_SEL1 (0x0d << 10) | ||
| 6993 | #define MDIO_REG_GPHY_SHADOW_LED_SEL2 (0x0e << 10) | 6994 | #define MDIO_REG_GPHY_SHADOW_LED_SEL2 (0x0e << 10) |
| 6994 | #define MDIO_REG_GPHY_SHADOW_WR_ENA (0x1 << 15) | 6995 | #define MDIO_REG_GPHY_SHADOW_WR_ENA (0x1 << 15) |
| 6995 | #define MDIO_REG_GPHY_SHADOW_AUTO_DET_MED (0x1e << 10) | 6996 | #define MDIO_REG_GPHY_SHADOW_AUTO_DET_MED (0x1e << 10) |
diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c index 438f4580bf66..2a22f5256353 100644 --- a/drivers/net/ethernet/davicom/dm9000.c +++ b/drivers/net/ethernet/davicom/dm9000.c | |||
| @@ -613,7 +613,7 @@ static int dm9000_set_wol(struct net_device *dev, struct ethtool_wolinfo *w) | |||
| 613 | 613 | ||
| 614 | if (!dm->wake_state) | 614 | if (!dm->wake_state) |
| 615 | irq_set_irq_wake(dm->irq_wake, 1); | 615 | irq_set_irq_wake(dm->irq_wake, 1); |
| 616 | else if (dm->wake_state & !opts) | 616 | else if (dm->wake_state && !opts) |
| 617 | irq_set_irq_wake(dm->irq_wake, 0); | 617 | irq_set_irq_wake(dm->irq_wake, 0); |
| 618 | } | 618 | } |
| 619 | 619 | ||
diff --git a/drivers/net/ethernet/freescale/Kconfig b/drivers/net/ethernet/freescale/Kconfig index c520cfd3b298..5272f9d4dda9 100644 --- a/drivers/net/ethernet/freescale/Kconfig +++ b/drivers/net/ethernet/freescale/Kconfig | |||
| @@ -24,6 +24,7 @@ config FEC | |||
| 24 | bool "FEC ethernet controller (of ColdFire and some i.MX CPUs)" | 24 | bool "FEC ethernet controller (of ColdFire and some i.MX CPUs)" |
| 25 | depends on (M523x || M527x || M5272 || M528x || M520x || M532x || \ | 25 | depends on (M523x || M527x || M5272 || M528x || M520x || M532x || \ |
| 26 | ARCH_MXC || ARCH_MXS) | 26 | ARCH_MXC || ARCH_MXS) |
| 27 | default ARCH_MXC || ARCH_MXS if ARM | ||
| 27 | select PHYLIB | 28 | select PHYLIB |
| 28 | ---help--- | 29 | ---help--- |
| 29 | Say Y here if you want to use the built-in 10/100 Fast ethernet | 30 | Say Y here if you want to use the built-in 10/100 Fast ethernet |
diff --git a/drivers/net/ethernet/ibm/ehea/ehea.h b/drivers/net/ethernet/ibm/ehea/ehea.h index 410d6a1984ed..6650068c996c 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea.h +++ b/drivers/net/ethernet/ibm/ehea/ehea.h | |||
| @@ -61,9 +61,9 @@ | |||
| 61 | #ifdef EHEA_SMALL_QUEUES | 61 | #ifdef EHEA_SMALL_QUEUES |
| 62 | #define EHEA_MAX_CQE_COUNT 1023 | 62 | #define EHEA_MAX_CQE_COUNT 1023 |
| 63 | #define EHEA_DEF_ENTRIES_SQ 1023 | 63 | #define EHEA_DEF_ENTRIES_SQ 1023 |
| 64 | #define EHEA_DEF_ENTRIES_RQ1 4095 | 64 | #define EHEA_DEF_ENTRIES_RQ1 1023 |
| 65 | #define EHEA_DEF_ENTRIES_RQ2 1023 | 65 | #define EHEA_DEF_ENTRIES_RQ2 1023 |
| 66 | #define EHEA_DEF_ENTRIES_RQ3 1023 | 66 | #define EHEA_DEF_ENTRIES_RQ3 511 |
| 67 | #else | 67 | #else |
| 68 | #define EHEA_MAX_CQE_COUNT 4080 | 68 | #define EHEA_MAX_CQE_COUNT 4080 |
| 69 | #define EHEA_DEF_ENTRIES_SQ 4080 | 69 | #define EHEA_DEF_ENTRIES_SQ 4080 |
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c index 37b70f7052b6..bfeccbfde236 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea_main.c +++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c | |||
| @@ -371,7 +371,8 @@ static void ehea_update_stats(struct work_struct *work) | |||
| 371 | out_herr: | 371 | out_herr: |
| 372 | free_page((unsigned long)cb2); | 372 | free_page((unsigned long)cb2); |
| 373 | resched: | 373 | resched: |
| 374 | schedule_delayed_work(&port->stats_work, msecs_to_jiffies(1000)); | 374 | schedule_delayed_work(&port->stats_work, |
| 375 | round_jiffies_relative(msecs_to_jiffies(1000))); | ||
| 375 | } | 376 | } |
| 376 | 377 | ||
| 377 | static void ehea_refill_rq1(struct ehea_port_res *pr, int index, int nr_of_wqes) | 378 | static void ehea_refill_rq1(struct ehea_port_res *pr, int index, int nr_of_wqes) |
| @@ -2434,7 +2435,8 @@ static int ehea_open(struct net_device *dev) | |||
| 2434 | } | 2435 | } |
| 2435 | 2436 | ||
| 2436 | mutex_unlock(&port->port_lock); | 2437 | mutex_unlock(&port->port_lock); |
| 2437 | schedule_delayed_work(&port->stats_work, msecs_to_jiffies(1000)); | 2438 | schedule_delayed_work(&port->stats_work, |
| 2439 | round_jiffies_relative(msecs_to_jiffies(1000))); | ||
| 2438 | 2440 | ||
| 2439 | return ret; | 2441 | return ret; |
| 2440 | } | 2442 | } |
diff --git a/drivers/net/ethernet/ibm/iseries_veth.c b/drivers/net/ethernet/ibm/iseries_veth.c index 4326681df382..acc31af6594a 100644 --- a/drivers/net/ethernet/ibm/iseries_veth.c +++ b/drivers/net/ethernet/ibm/iseries_veth.c | |||
| @@ -1421,7 +1421,7 @@ static void veth_receive(struct veth_lpar_connection *cnx, | |||
| 1421 | 1421 | ||
| 1422 | /* FIXME: do we need this? */ | 1422 | /* FIXME: do we need this? */ |
| 1423 | memset(local_list, 0, sizeof(local_list)); | 1423 | memset(local_list, 0, sizeof(local_list)); |
| 1424 | memset(remote_list, 0, sizeof(VETH_MAX_FRAMES_PER_MSG)); | 1424 | memset(remote_list, 0, sizeof(remote_list)); |
| 1425 | 1425 | ||
| 1426 | /* a 0 address marks the end of the valid entries */ | 1426 | /* a 0 address marks the end of the valid entries */ |
| 1427 | if (senddata->addr[startchunk] == 0) | 1427 | if (senddata->addr[startchunk] == 0) |
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c index 7becff1f387d..76b84573566b 100644 --- a/drivers/net/ethernet/jme.c +++ b/drivers/net/ethernet/jme.c | |||
| @@ -1745,6 +1745,112 @@ jme_phy_off(struct jme_adapter *jme) | |||
| 1745 | } | 1745 | } |
| 1746 | 1746 | ||
| 1747 | static int | 1747 | static int |
| 1748 | jme_phy_specreg_read(struct jme_adapter *jme, u32 specreg) | ||
| 1749 | { | ||
| 1750 | u32 phy_addr; | ||
| 1751 | |||
| 1752 | phy_addr = JM_PHY_SPEC_REG_READ | specreg; | ||
| 1753 | jme_mdio_write(jme->dev, jme->mii_if.phy_id, JM_PHY_SPEC_ADDR_REG, | ||
| 1754 | phy_addr); | ||
| 1755 | return jme_mdio_read(jme->dev, jme->mii_if.phy_id, | ||
| 1756 | JM_PHY_SPEC_DATA_REG); | ||
| 1757 | } | ||
| 1758 | |||
| 1759 | static void | ||
| 1760 | jme_phy_specreg_write(struct jme_adapter *jme, u32 ext_reg, u32 phy_data) | ||
| 1761 | { | ||
| 1762 | u32 phy_addr; | ||
| 1763 | |||
| 1764 | phy_addr = JM_PHY_SPEC_REG_WRITE | ext_reg; | ||
| 1765 | jme_mdio_write(jme->dev, jme->mii_if.phy_id, JM_PHY_SPEC_DATA_REG, | ||
| 1766 | phy_data); | ||
| 1767 | jme_mdio_write(jme->dev, jme->mii_if.phy_id, JM_PHY_SPEC_ADDR_REG, | ||
| 1768 | phy_addr); | ||
| 1769 | } | ||
| 1770 | |||
| 1771 | static int | ||
| 1772 | jme_phy_calibration(struct jme_adapter *jme) | ||
| 1773 | { | ||
| 1774 | u32 ctrl1000, phy_data; | ||
| 1775 | |||
| 1776 | jme_phy_off(jme); | ||
| 1777 | jme_phy_on(jme); | ||
| 1778 | /* Enabel PHY test mode 1 */ | ||
| 1779 | ctrl1000 = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_CTRL1000); | ||
| 1780 | ctrl1000 &= ~PHY_GAD_TEST_MODE_MSK; | ||
| 1781 | ctrl1000 |= PHY_GAD_TEST_MODE_1; | ||
| 1782 | jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_CTRL1000, ctrl1000); | ||
| 1783 | |||
| 1784 | phy_data = jme_phy_specreg_read(jme, JM_PHY_EXT_COMM_2_REG); | ||
| 1785 | phy_data &= ~JM_PHY_EXT_COMM_2_CALI_MODE_0; | ||
| 1786 | phy_data |= JM_PHY_EXT_COMM_2_CALI_LATCH | | ||
| 1787 | JM_PHY_EXT_COMM_2_CALI_ENABLE; | ||
| 1788 | jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_2_REG, phy_data); | ||
| 1789 | msleep(20); | ||
| 1790 | phy_data = jme_phy_specreg_read(jme, JM_PHY_EXT_COMM_2_REG); | ||
| 1791 | phy_data &= ~(JM_PHY_EXT_COMM_2_CALI_ENABLE | | ||
| 1792 | JM_PHY_EXT_COMM_2_CALI_MODE_0 | | ||
| 1793 | JM_PHY_EXT_COMM_2_CALI_LATCH); | ||
| 1794 | jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_2_REG, phy_data); | ||
| 1795 | |||
| 1796 | /* Disable PHY test mode */ | ||
| 1797 | ctrl1000 = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_CTRL1000); | ||
| 1798 | ctrl1000 &= ~PHY_GAD_TEST_MODE_MSK; | ||
| 1799 | jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_CTRL1000, ctrl1000); | ||
| 1800 | return 0; | ||
| 1801 | } | ||
| 1802 | |||
| 1803 | static int | ||
| 1804 | jme_phy_setEA(struct jme_adapter *jme) | ||
| 1805 | { | ||
| 1806 | u32 phy_comm0 = 0, phy_comm1 = 0; | ||
| 1807 | u8 nic_ctrl; | ||
| 1808 | |||
| 1809 | pci_read_config_byte(jme->pdev, PCI_PRIV_SHARE_NICCTRL, &nic_ctrl); | ||
| 1810 | if ((nic_ctrl & 0x3) == JME_FLAG_PHYEA_ENABLE) | ||
| 1811 | return 0; | ||
| 1812 | |||
| 1813 | switch (jme->pdev->device) { | ||
| 1814 | case PCI_DEVICE_ID_JMICRON_JMC250: | ||
| 1815 | if (((jme->chip_main_rev == 5) && | ||
| 1816 | ((jme->chip_sub_rev == 0) || (jme->chip_sub_rev == 1) || | ||
| 1817 | (jme->chip_sub_rev == 3))) || | ||
| 1818 | (jme->chip_main_rev >= 6)) { | ||
| 1819 | phy_comm0 = 0x008A; | ||
| 1820 | phy_comm1 = 0x4109; | ||
| 1821 | } | ||
| 1822 | if ((jme->chip_main_rev == 3) && | ||
| 1823 | ((jme->chip_sub_rev == 1) || (jme->chip_sub_rev == 2))) | ||
| 1824 | phy_comm0 = 0xE088; | ||
| 1825 | break; | ||
| 1826 | case PCI_DEVICE_ID_JMICRON_JMC260: | ||
| 1827 | if (((jme->chip_main_rev == 5) && | ||
| 1828 | ((jme->chip_sub_rev == 0) || (jme->chip_sub_rev == 1) || | ||
| 1829 | (jme->chip_sub_rev == 3))) || | ||
| 1830 | (jme->chip_main_rev >= 6)) { | ||
| 1831 | phy_comm0 = 0x008A; | ||
| 1832 | phy_comm1 = 0x4109; | ||
| 1833 | } | ||
| 1834 | if ((jme->chip_main_rev == 3) && | ||
| 1835 | ((jme->chip_sub_rev == 1) || (jme->chip_sub_rev == 2))) | ||
| 1836 | phy_comm0 = 0xE088; | ||
| 1837 | if ((jme->chip_main_rev == 2) && (jme->chip_sub_rev == 0)) | ||
| 1838 | phy_comm0 = 0x608A; | ||
| 1839 | if ((jme->chip_main_rev == 2) && (jme->chip_sub_rev == 2)) | ||
| 1840 | phy_comm0 = 0x408A; | ||
| 1841 | break; | ||
| 1842 | default: | ||
| 1843 | return -ENODEV; | ||
| 1844 | } | ||
| 1845 | if (phy_comm0) | ||
| 1846 | jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_0_REG, phy_comm0); | ||
| 1847 | if (phy_comm1) | ||
| 1848 | jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_1_REG, phy_comm1); | ||
| 1849 | |||
| 1850 | return 0; | ||
| 1851 | } | ||
| 1852 | |||
| 1853 | static int | ||
| 1748 | jme_open(struct net_device *netdev) | 1854 | jme_open(struct net_device *netdev) |
| 1749 | { | 1855 | { |
| 1750 | struct jme_adapter *jme = netdev_priv(netdev); | 1856 | struct jme_adapter *jme = netdev_priv(netdev); |
| @@ -1769,7 +1875,8 @@ jme_open(struct net_device *netdev) | |||
| 1769 | jme_set_settings(netdev, &jme->old_ecmd); | 1875 | jme_set_settings(netdev, &jme->old_ecmd); |
| 1770 | else | 1876 | else |
| 1771 | jme_reset_phy_processor(jme); | 1877 | jme_reset_phy_processor(jme); |
| 1772 | 1878 | jme_phy_calibration(jme); | |
| 1879 | jme_phy_setEA(jme); | ||
| 1773 | jme_reset_link(jme); | 1880 | jme_reset_link(jme); |
| 1774 | 1881 | ||
| 1775 | return 0; | 1882 | return 0; |
| @@ -3184,7 +3291,8 @@ jme_resume(struct device *dev) | |||
| 3184 | jme_set_settings(netdev, &jme->old_ecmd); | 3291 | jme_set_settings(netdev, &jme->old_ecmd); |
| 3185 | else | 3292 | else |
| 3186 | jme_reset_phy_processor(jme); | 3293 | jme_reset_phy_processor(jme); |
| 3187 | 3294 | jme_phy_calibration(jme); | |
| 3295 | jme_phy_setEA(jme); | ||
| 3188 | jme_start_irq(jme); | 3296 | jme_start_irq(jme); |
| 3189 | netif_device_attach(netdev); | 3297 | netif_device_attach(netdev); |
| 3190 | 3298 | ||
| @@ -3239,4 +3347,3 @@ MODULE_DESCRIPTION("JMicron JMC2x0 PCI Express Ethernet driver"); | |||
| 3239 | MODULE_LICENSE("GPL"); | 3347 | MODULE_LICENSE("GPL"); |
| 3240 | MODULE_VERSION(DRV_VERSION); | 3348 | MODULE_VERSION(DRV_VERSION); |
| 3241 | MODULE_DEVICE_TABLE(pci, jme_pci_tbl); | 3349 | MODULE_DEVICE_TABLE(pci, jme_pci_tbl); |
| 3242 | |||
diff --git a/drivers/net/ethernet/jme.h b/drivers/net/ethernet/jme.h index 02ea27c1dcb5..4304072bd3c5 100644 --- a/drivers/net/ethernet/jme.h +++ b/drivers/net/ethernet/jme.h | |||
| @@ -760,6 +760,25 @@ enum jme_rxmcs_bits { | |||
| 760 | RXMCS_CHECKSUM, | 760 | RXMCS_CHECKSUM, |
| 761 | }; | 761 | }; |
| 762 | 762 | ||
| 763 | /* Extern PHY common register 2 */ | ||
| 764 | |||
| 765 | #define PHY_GAD_TEST_MODE_1 0x00002000 | ||
| 766 | #define PHY_GAD_TEST_MODE_MSK 0x0000E000 | ||
| 767 | #define JM_PHY_SPEC_REG_READ 0x00004000 | ||
| 768 | #define JM_PHY_SPEC_REG_WRITE 0x00008000 | ||
| 769 | #define PHY_CALIBRATION_DELAY 20 | ||
| 770 | #define JM_PHY_SPEC_ADDR_REG 0x1E | ||
| 771 | #define JM_PHY_SPEC_DATA_REG 0x1F | ||
| 772 | |||
| 773 | #define JM_PHY_EXT_COMM_0_REG 0x30 | ||
| 774 | #define JM_PHY_EXT_COMM_1_REG 0x31 | ||
| 775 | #define JM_PHY_EXT_COMM_2_REG 0x32 | ||
| 776 | #define JM_PHY_EXT_COMM_2_CALI_ENABLE 0x01 | ||
| 777 | #define JM_PHY_EXT_COMM_2_CALI_MODE_0 0x02 | ||
| 778 | #define JM_PHY_EXT_COMM_2_CALI_LATCH 0x10 | ||
| 779 | #define PCI_PRIV_SHARE_NICCTRL 0xF5 | ||
| 780 | #define JME_FLAG_PHYEA_ENABLE 0x2 | ||
| 781 | |||
| 763 | /* | 782 | /* |
| 764 | * Wakeup Frame setup interface registers | 783 | * Wakeup Frame setup interface registers |
| 765 | */ | 784 | */ |
diff --git a/drivers/net/ethernet/pasemi/Makefile b/drivers/net/ethernet/pasemi/Makefile index 05db5434bafc..90497ffb1ac3 100644 --- a/drivers/net/ethernet/pasemi/Makefile +++ b/drivers/net/ethernet/pasemi/Makefile | |||
| @@ -2,4 +2,5 @@ | |||
| 2 | # Makefile for the A Semi network device drivers. | 2 | # Makefile for the A Semi network device drivers. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o pasemi_mac_ethtool.o | 5 | obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o |
| 6 | pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o | ||
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge.h b/drivers/net/ethernet/qlogic/qlge/qlge.h index 8731f79c9efc..b8478aab050e 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge.h +++ b/drivers/net/ethernet/qlogic/qlge/qlge.h | |||
| @@ -58,10 +58,8 @@ | |||
| 58 | 58 | ||
| 59 | 59 | ||
| 60 | #define TX_DESC_PER_IOCB 8 | 60 | #define TX_DESC_PER_IOCB 8 |
| 61 | /* The maximum number of frags we handle is based | 61 | |
| 62 | * on PAGE_SIZE... | 62 | #if ((MAX_SKB_FRAGS - TX_DESC_PER_IOCB) + 2) > 0 |
| 63 | */ | ||
| 64 | #if (PAGE_SHIFT == 12) || (PAGE_SHIFT == 13) /* 4k & 8k pages */ | ||
| 65 | #define TX_DESC_PER_OAL ((MAX_SKB_FRAGS - TX_DESC_PER_IOCB) + 2) | 63 | #define TX_DESC_PER_OAL ((MAX_SKB_FRAGS - TX_DESC_PER_IOCB) + 2) |
| 66 | #else /* all other page sizes */ | 64 | #else /* all other page sizes */ |
| 67 | #define TX_DESC_PER_OAL 0 | 65 | #define TX_DESC_PER_OAL 0 |
| @@ -1353,7 +1351,7 @@ struct tx_ring_desc { | |||
| 1353 | struct ob_mac_iocb_req *queue_entry; | 1351 | struct ob_mac_iocb_req *queue_entry; |
| 1354 | u32 index; | 1352 | u32 index; |
| 1355 | struct oal oal; | 1353 | struct oal oal; |
| 1356 | struct map_list map[MAX_SKB_FRAGS + 1]; | 1354 | struct map_list map[MAX_SKB_FRAGS + 2]; |
| 1357 | int map_cnt; | 1355 | int map_cnt; |
| 1358 | struct tx_ring_desc *next; | 1356 | struct tx_ring_desc *next; |
| 1359 | }; | 1357 | }; |
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 6f06aa10f0d7..67bf07819992 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
| @@ -1183,11 +1183,13 @@ static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr) | |||
| 1183 | return value; | 1183 | return value; |
| 1184 | } | 1184 | } |
| 1185 | 1185 | ||
| 1186 | static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr) | 1186 | static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp) |
| 1187 | { | 1187 | { |
| 1188 | RTL_W16(IntrMask, 0x0000); | 1188 | void __iomem *ioaddr = tp->mmio_addr; |
| 1189 | 1189 | ||
| 1190 | RTL_W16(IntrStatus, 0xffff); | 1190 | RTL_W16(IntrMask, 0x0000); |
| 1191 | RTL_W16(IntrStatus, tp->intr_event); | ||
| 1192 | RTL_R8(ChipCmd); | ||
| 1191 | } | 1193 | } |
| 1192 | 1194 | ||
| 1193 | static unsigned int rtl8169_tbi_reset_pending(struct rtl8169_private *tp) | 1195 | static unsigned int rtl8169_tbi_reset_pending(struct rtl8169_private *tp) |
| @@ -3933,8 +3935,6 @@ static void rtl_hw_reset(struct rtl8169_private *tp) | |||
| 3933 | break; | 3935 | break; |
| 3934 | udelay(100); | 3936 | udelay(100); |
| 3935 | } | 3937 | } |
| 3936 | |||
| 3937 | rtl8169_init_ring_indexes(tp); | ||
| 3938 | } | 3938 | } |
| 3939 | 3939 | ||
| 3940 | static int __devinit | 3940 | static int __devinit |
| @@ -4339,7 +4339,7 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp) | |||
| 4339 | void __iomem *ioaddr = tp->mmio_addr; | 4339 | void __iomem *ioaddr = tp->mmio_addr; |
| 4340 | 4340 | ||
| 4341 | /* Disable interrupts */ | 4341 | /* Disable interrupts */ |
| 4342 | rtl8169_irq_mask_and_ack(ioaddr); | 4342 | rtl8169_irq_mask_and_ack(tp); |
| 4343 | 4343 | ||
| 4344 | rtl_rx_close(tp); | 4344 | rtl_rx_close(tp); |
| 4345 | 4345 | ||
| @@ -4885,8 +4885,7 @@ static void rtl_hw_start_8168(struct net_device *dev) | |||
| 4885 | RTL_W16(IntrMitigate, 0x5151); | 4885 | RTL_W16(IntrMitigate, 0x5151); |
| 4886 | 4886 | ||
| 4887 | /* Work around for RxFIFO overflow. */ | 4887 | /* Work around for RxFIFO overflow. */ |
| 4888 | if (tp->mac_version == RTL_GIGA_MAC_VER_11 || | 4888 | if (tp->mac_version == RTL_GIGA_MAC_VER_11) { |
| 4889 | tp->mac_version == RTL_GIGA_MAC_VER_22) { | ||
| 4890 | tp->intr_event |= RxFIFOOver | PCSTimeout; | 4889 | tp->intr_event |= RxFIFOOver | PCSTimeout; |
| 4891 | tp->intr_event &= ~RxOverflow; | 4890 | tp->intr_event &= ~RxOverflow; |
| 4892 | } | 4891 | } |
| @@ -5076,6 +5075,11 @@ static void rtl_hw_start_8101(struct net_device *dev) | |||
| 5076 | void __iomem *ioaddr = tp->mmio_addr; | 5075 | void __iomem *ioaddr = tp->mmio_addr; |
| 5077 | struct pci_dev *pdev = tp->pci_dev; | 5076 | struct pci_dev *pdev = tp->pci_dev; |
| 5078 | 5077 | ||
| 5078 | if (tp->mac_version >= RTL_GIGA_MAC_VER_30) { | ||
| 5079 | tp->intr_event &= ~RxFIFOOver; | ||
| 5080 | tp->napi_event &= ~RxFIFOOver; | ||
| 5081 | } | ||
| 5082 | |||
| 5079 | if (tp->mac_version == RTL_GIGA_MAC_VER_13 || | 5083 | if (tp->mac_version == RTL_GIGA_MAC_VER_13 || |
| 5080 | tp->mac_version == RTL_GIGA_MAC_VER_16) { | 5084 | tp->mac_version == RTL_GIGA_MAC_VER_16) { |
| 5081 | int cap = pci_pcie_cap(pdev); | 5085 | int cap = pci_pcie_cap(pdev); |
| @@ -5342,7 +5346,7 @@ static void rtl8169_wait_for_quiescence(struct net_device *dev) | |||
| 5342 | /* Wait for any pending NAPI task to complete */ | 5346 | /* Wait for any pending NAPI task to complete */ |
| 5343 | napi_disable(&tp->napi); | 5347 | napi_disable(&tp->napi); |
| 5344 | 5348 | ||
| 5345 | rtl8169_irq_mask_and_ack(ioaddr); | 5349 | rtl8169_irq_mask_and_ack(tp); |
| 5346 | 5350 | ||
| 5347 | tp->intr_mask = 0xffff; | 5351 | tp->intr_mask = 0xffff; |
| 5348 | RTL_W16(IntrMask, tp->intr_event); | 5352 | RTL_W16(IntrMask, tp->intr_event); |
| @@ -5389,14 +5393,16 @@ static void rtl8169_reset_task(struct work_struct *work) | |||
| 5389 | if (!netif_running(dev)) | 5393 | if (!netif_running(dev)) |
| 5390 | goto out_unlock; | 5394 | goto out_unlock; |
| 5391 | 5395 | ||
| 5396 | rtl8169_hw_reset(tp); | ||
| 5397 | |||
| 5392 | rtl8169_wait_for_quiescence(dev); | 5398 | rtl8169_wait_for_quiescence(dev); |
| 5393 | 5399 | ||
| 5394 | for (i = 0; i < NUM_RX_DESC; i++) | 5400 | for (i = 0; i < NUM_RX_DESC; i++) |
| 5395 | rtl8169_mark_to_asic(tp->RxDescArray + i, rx_buf_sz); | 5401 | rtl8169_mark_to_asic(tp->RxDescArray + i, rx_buf_sz); |
| 5396 | 5402 | ||
| 5397 | rtl8169_tx_clear(tp); | 5403 | rtl8169_tx_clear(tp); |
| 5404 | rtl8169_init_ring_indexes(tp); | ||
| 5398 | 5405 | ||
| 5399 | rtl8169_hw_reset(tp); | ||
| 5400 | rtl_hw_start(dev); | 5406 | rtl_hw_start(dev); |
| 5401 | netif_wake_queue(dev); | 5407 | netif_wake_queue(dev); |
| 5402 | rtl8169_check_link_status(dev, tp, tp->mmio_addr); | 5408 | rtl8169_check_link_status(dev, tp, tp->mmio_addr); |
| @@ -5407,11 +5413,6 @@ out_unlock: | |||
| 5407 | 5413 | ||
| 5408 | static void rtl8169_tx_timeout(struct net_device *dev) | 5414 | static void rtl8169_tx_timeout(struct net_device *dev) |
| 5409 | { | 5415 | { |
| 5410 | struct rtl8169_private *tp = netdev_priv(dev); | ||
| 5411 | |||
| 5412 | rtl8169_hw_reset(tp); | ||
| 5413 | |||
| 5414 | /* Let's wait a bit while any (async) irq lands on */ | ||
| 5415 | rtl8169_schedule_work(dev, rtl8169_reset_task); | 5416 | rtl8169_schedule_work(dev, rtl8169_reset_task); |
| 5416 | } | 5417 | } |
| 5417 | 5418 | ||
| @@ -5804,6 +5805,10 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance) | |||
| 5804 | */ | 5805 | */ |
| 5805 | status = RTL_R16(IntrStatus); | 5806 | status = RTL_R16(IntrStatus); |
| 5806 | while (status && status != 0xffff) { | 5807 | while (status && status != 0xffff) { |
| 5808 | status &= tp->intr_event; | ||
| 5809 | if (!status) | ||
| 5810 | break; | ||
| 5811 | |||
| 5807 | handled = 1; | 5812 | handled = 1; |
| 5808 | 5813 | ||
| 5809 | /* Handle all of the error cases first. These will reset | 5814 | /* Handle all of the error cases first. These will reset |
| @@ -5818,27 +5823,9 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance) | |||
| 5818 | switch (tp->mac_version) { | 5823 | switch (tp->mac_version) { |
| 5819 | /* Work around for rx fifo overflow */ | 5824 | /* Work around for rx fifo overflow */ |
| 5820 | case RTL_GIGA_MAC_VER_11: | 5825 | case RTL_GIGA_MAC_VER_11: |
| 5821 | case RTL_GIGA_MAC_VER_22: | ||
| 5822 | case RTL_GIGA_MAC_VER_26: | ||
| 5823 | netif_stop_queue(dev); | 5826 | netif_stop_queue(dev); |
| 5824 | rtl8169_tx_timeout(dev); | 5827 | rtl8169_tx_timeout(dev); |
| 5825 | goto done; | 5828 | goto done; |
| 5826 | /* Testers needed. */ | ||
| 5827 | case RTL_GIGA_MAC_VER_17: | ||
| 5828 | case RTL_GIGA_MAC_VER_19: | ||
| 5829 | case RTL_GIGA_MAC_VER_20: | ||
| 5830 | case RTL_GIGA_MAC_VER_21: | ||
| 5831 | case RTL_GIGA_MAC_VER_23: | ||
| 5832 | case RTL_GIGA_MAC_VER_24: | ||
| 5833 | case RTL_GIGA_MAC_VER_27: | ||
| 5834 | case RTL_GIGA_MAC_VER_28: | ||
| 5835 | case RTL_GIGA_MAC_VER_31: | ||
| 5836 | /* Experimental science. Pktgen proof. */ | ||
| 5837 | case RTL_GIGA_MAC_VER_12: | ||
| 5838 | case RTL_GIGA_MAC_VER_25: | ||
| 5839 | if (status == RxFIFOOver) | ||
| 5840 | goto done; | ||
| 5841 | break; | ||
| 5842 | default: | 5829 | default: |
| 5843 | break; | 5830 | break; |
| 5844 | } | 5831 | } |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 8ea770a89f25..72cd190b9c1a 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
| @@ -781,10 +781,15 @@ static void stmmac_mmc_setup(struct stmmac_priv *priv) | |||
| 781 | unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET | | 781 | unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET | |
| 782 | MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET; | 782 | MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET; |
| 783 | 783 | ||
| 784 | /* Do not manage MMC IRQ (FIXME) */ | 784 | /* Mask MMC irq, counters are managed in SW and registers |
| 785 | * are cleared on each READ eventually. */ | ||
| 785 | dwmac_mmc_intr_all_mask(priv->ioaddr); | 786 | dwmac_mmc_intr_all_mask(priv->ioaddr); |
| 786 | dwmac_mmc_ctrl(priv->ioaddr, mode); | 787 | |
| 787 | memset(&priv->mmc, 0, sizeof(struct stmmac_counters)); | 788 | if (priv->dma_cap.rmon) { |
| 789 | dwmac_mmc_ctrl(priv->ioaddr, mode); | ||
| 790 | memset(&priv->mmc, 0, sizeof(struct stmmac_counters)); | ||
| 791 | } else | ||
| 792 | pr_info(" No MAC Management Counters available"); | ||
| 788 | } | 793 | } |
| 789 | 794 | ||
| 790 | static u32 stmmac_get_synopsys_id(struct stmmac_priv *priv) | 795 | static u32 stmmac_get_synopsys_id(struct stmmac_priv *priv) |
| @@ -1012,8 +1017,7 @@ static int stmmac_open(struct net_device *dev) | |||
| 1012 | memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats)); | 1017 | memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats)); |
| 1013 | priv->xstats.threshold = tc; | 1018 | priv->xstats.threshold = tc; |
| 1014 | 1019 | ||
| 1015 | if (priv->dma_cap.rmon) | 1020 | stmmac_mmc_setup(priv); |
| 1016 | stmmac_mmc_setup(priv); | ||
| 1017 | 1021 | ||
| 1018 | /* Start the ball rolling... */ | 1022 | /* Start the ball rolling... */ |
| 1019 | DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name); | 1023 | DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name); |
diff --git a/drivers/net/ethernet/tile/tilepro.c b/drivers/net/ethernet/tile/tilepro.c index 10826d8a2a2d..1187a1169eb2 100644 --- a/drivers/net/ethernet/tile/tilepro.c +++ b/drivers/net/ethernet/tile/tilepro.c | |||
| @@ -926,7 +926,7 @@ static int tile_net_poll(struct napi_struct *napi, int budget) | |||
| 926 | goto done; | 926 | goto done; |
| 927 | 927 | ||
| 928 | /* Re-enable the ingress interrupt. */ | 928 | /* Re-enable the ingress interrupt. */ |
| 929 | enable_percpu_irq(priv->intr_id); | 929 | enable_percpu_irq(priv->intr_id, 0); |
| 930 | 930 | ||
| 931 | /* HACK: Avoid the "rotting packet" problem (see above). */ | 931 | /* HACK: Avoid the "rotting packet" problem (see above). */ |
| 932 | if (qup->__packet_receive_read != | 932 | if (qup->__packet_receive_read != |
| @@ -1296,7 +1296,7 @@ static void tile_net_open_enable(void *dev_ptr) | |||
| 1296 | info->napi_enabled = true; | 1296 | info->napi_enabled = true; |
| 1297 | 1297 | ||
| 1298 | /* Enable the ingress interrupt. */ | 1298 | /* Enable the ingress interrupt. */ |
| 1299 | enable_percpu_irq(priv->intr_id); | 1299 | enable_percpu_irq(priv->intr_id, 0); |
| 1300 | } | 1300 | } |
| 1301 | 1301 | ||
| 1302 | 1302 | ||
| @@ -1697,7 +1697,7 @@ static unsigned int tile_net_tx_frags(lepp_frag_t *frags, | |||
| 1697 | for (i = 0; i < sh->nr_frags; i++) { | 1697 | for (i = 0; i < sh->nr_frags; i++) { |
| 1698 | 1698 | ||
| 1699 | skb_frag_t *f = &sh->frags[i]; | 1699 | skb_frag_t *f = &sh->frags[i]; |
| 1700 | unsigned long pfn = page_to_pfn(f->page); | 1700 | unsigned long pfn = page_to_pfn(skb_frag_page(f)); |
| 1701 | 1701 | ||
| 1702 | /* FIXME: Compute "hash_for_home" properly. */ | 1702 | /* FIXME: Compute "hash_for_home" properly. */ |
| 1703 | /* ISSUE: The hypervisor checks CHIP_HAS_REV1_DMA_PACKETS(). */ | 1703 | /* ISSUE: The hypervisor checks CHIP_HAS_REV1_DMA_PACKETS(). */ |
| @@ -1706,7 +1706,7 @@ static unsigned int tile_net_tx_frags(lepp_frag_t *frags, | |||
| 1706 | /* FIXME: Hmmm. */ | 1706 | /* FIXME: Hmmm. */ |
| 1707 | if (!hash_default) { | 1707 | if (!hash_default) { |
| 1708 | void *va = pfn_to_kaddr(pfn) + f->page_offset; | 1708 | void *va = pfn_to_kaddr(pfn) + f->page_offset; |
| 1709 | BUG_ON(PageHighMem(f->page)); | 1709 | BUG_ON(PageHighMem(skb_frag_page(f))); |
| 1710 | finv_buffer_remote(va, f->size, 0); | 1710 | finv_buffer_remote(va, f->size, 0); |
| 1711 | } | 1711 | } |
| 1712 | 1712 | ||
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index bb88e12101c7..a70244306c94 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | menuconfig PHYLIB | 5 | menuconfig PHYLIB |
| 6 | bool "PHY Device support and infrastructure" | 6 | tristate "PHY Device support and infrastructure" |
| 7 | depends on !S390 | 7 | depends on !S390 |
| 8 | depends on NETDEVICES | 8 | depends on NETDEVICES |
| 9 | help | 9 | help |
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c index e12b48c2cff6..dd008b0e6417 100644 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c | |||
| @@ -191,6 +191,7 @@ static struct iwl_base_params iwl1000_base_params = { | |||
| 191 | .chain_noise_scale = 1000, | 191 | .chain_noise_scale = 1000, |
| 192 | .wd_timeout = IWL_DEF_WD_TIMEOUT, | 192 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
| 193 | .max_event_log_size = 128, | 193 | .max_event_log_size = 128, |
| 194 | .wd_disable = true, | ||
| 194 | }; | 195 | }; |
| 195 | static struct iwl_ht_params iwl1000_ht_params = { | 196 | static struct iwl_ht_params iwl1000_ht_params = { |
| 196 | .ht_greenfield_support = true, | 197 | .ht_greenfield_support = true, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index c511c98a89a8..f55fb2d1af52 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
| @@ -364,6 +364,7 @@ static struct iwl_base_params iwl5000_base_params = { | |||
| 364 | .wd_timeout = IWL_LONG_WD_TIMEOUT, | 364 | .wd_timeout = IWL_LONG_WD_TIMEOUT, |
| 365 | .max_event_log_size = 512, | 365 | .max_event_log_size = 512, |
| 366 | .no_idle_support = true, | 366 | .no_idle_support = true, |
| 367 | .wd_disable = true, | ||
| 367 | }; | 368 | }; |
| 368 | static struct iwl_ht_params iwl5000_ht_params = { | 369 | static struct iwl_ht_params iwl5000_ht_params = { |
| 369 | .ht_greenfield_support = true, | 370 | .ht_greenfield_support = true, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c index 58a381c01c89..a7a6def40d05 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | |||
| @@ -528,6 +528,24 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx) | |||
| 528 | return 0; | 528 | return 0; |
| 529 | } | 529 | } |
| 530 | 530 | ||
| 531 | void iwlagn_config_ht40(struct ieee80211_conf *conf, | ||
| 532 | struct iwl_rxon_context *ctx) | ||
| 533 | { | ||
| 534 | if (conf_is_ht40_minus(conf)) { | ||
| 535 | ctx->ht.extension_chan_offset = | ||
| 536 | IEEE80211_HT_PARAM_CHA_SEC_BELOW; | ||
| 537 | ctx->ht.is_40mhz = true; | ||
| 538 | } else if (conf_is_ht40_plus(conf)) { | ||
| 539 | ctx->ht.extension_chan_offset = | ||
| 540 | IEEE80211_HT_PARAM_CHA_SEC_ABOVE; | ||
| 541 | ctx->ht.is_40mhz = true; | ||
| 542 | } else { | ||
| 543 | ctx->ht.extension_chan_offset = | ||
| 544 | IEEE80211_HT_PARAM_CHA_SEC_NONE; | ||
| 545 | ctx->ht.is_40mhz = false; | ||
| 546 | } | ||
| 547 | } | ||
| 548 | |||
| 531 | int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed) | 549 | int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed) |
| 532 | { | 550 | { |
| 533 | struct iwl_priv *priv = hw->priv; | 551 | struct iwl_priv *priv = hw->priv; |
| @@ -586,19 +604,11 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed) | |||
| 586 | ctx->ht.enabled = conf_is_ht(conf); | 604 | ctx->ht.enabled = conf_is_ht(conf); |
| 587 | 605 | ||
| 588 | if (ctx->ht.enabled) { | 606 | if (ctx->ht.enabled) { |
| 589 | if (conf_is_ht40_minus(conf)) { | 607 | /* if HT40 is used, it should not change |
| 590 | ctx->ht.extension_chan_offset = | 608 | * after associated except channel switch */ |
| 591 | IEEE80211_HT_PARAM_CHA_SEC_BELOW; | 609 | if (iwl_is_associated_ctx(ctx) && |
| 592 | ctx->ht.is_40mhz = true; | 610 | !ctx->ht.is_40mhz) |
| 593 | } else if (conf_is_ht40_plus(conf)) { | 611 | iwlagn_config_ht40(conf, ctx); |
| 594 | ctx->ht.extension_chan_offset = | ||
| 595 | IEEE80211_HT_PARAM_CHA_SEC_ABOVE; | ||
| 596 | ctx->ht.is_40mhz = true; | ||
| 597 | } else { | ||
| 598 | ctx->ht.extension_chan_offset = | ||
| 599 | IEEE80211_HT_PARAM_CHA_SEC_NONE; | ||
| 600 | ctx->ht.is_40mhz = false; | ||
| 601 | } | ||
| 602 | } else | 612 | } else |
| 603 | ctx->ht.is_40mhz = false; | 613 | ctx->ht.is_40mhz = false; |
| 604 | 614 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c index ed6283623932..4b2aa1da0953 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c | |||
| @@ -1268,9 +1268,6 @@ int iwl_set_dynamic_key(struct iwl_priv *priv, | |||
| 1268 | 1268 | ||
| 1269 | switch (keyconf->cipher) { | 1269 | switch (keyconf->cipher) { |
| 1270 | case WLAN_CIPHER_SUITE_TKIP: | 1270 | case WLAN_CIPHER_SUITE_TKIP: |
| 1271 | keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; | ||
| 1272 | keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; | ||
| 1273 | |||
| 1274 | if (sta) | 1271 | if (sta) |
| 1275 | addr = sta->addr; | 1272 | addr = sta->addr; |
| 1276 | else /* station mode case only */ | 1273 | else /* station mode case only */ |
| @@ -1283,8 +1280,6 @@ int iwl_set_dynamic_key(struct iwl_priv *priv, | |||
| 1283 | seq.tkip.iv32, p1k, CMD_SYNC); | 1280 | seq.tkip.iv32, p1k, CMD_SYNC); |
| 1284 | break; | 1281 | break; |
| 1285 | case WLAN_CIPHER_SUITE_CCMP: | 1282 | case WLAN_CIPHER_SUITE_CCMP: |
| 1286 | keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; | ||
| 1287 | /* fall through */ | ||
| 1288 | case WLAN_CIPHER_SUITE_WEP40: | 1283 | case WLAN_CIPHER_SUITE_WEP40: |
| 1289 | case WLAN_CIPHER_SUITE_WEP104: | 1284 | case WLAN_CIPHER_SUITE_WEP104: |
| 1290 | ret = iwlagn_send_sta_key(priv, keyconf, sta_id, | 1285 | ret = iwlagn_send_sta_key(priv, keyconf, sta_id, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index ccba69b7f8a7..bacc06c95e7a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -2316,6 +2316,17 @@ static int iwlagn_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | |||
| 2316 | return -EOPNOTSUPP; | 2316 | return -EOPNOTSUPP; |
| 2317 | } | 2317 | } |
| 2318 | 2318 | ||
| 2319 | switch (key->cipher) { | ||
| 2320 | case WLAN_CIPHER_SUITE_TKIP: | ||
| 2321 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; | ||
| 2322 | /* fall through */ | ||
| 2323 | case WLAN_CIPHER_SUITE_CCMP: | ||
| 2324 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; | ||
| 2325 | break; | ||
| 2326 | default: | ||
| 2327 | break; | ||
| 2328 | } | ||
| 2329 | |||
| 2319 | /* | 2330 | /* |
| 2320 | * We could program these keys into the hardware as well, but we | 2331 | * We could program these keys into the hardware as well, but we |
| 2321 | * don't expect much multicast traffic in IBSS and having keys | 2332 | * don't expect much multicast traffic in IBSS and having keys |
| @@ -2599,21 +2610,9 @@ static void iwlagn_mac_channel_switch(struct ieee80211_hw *hw, | |||
| 2599 | 2610 | ||
| 2600 | /* Configure HT40 channels */ | 2611 | /* Configure HT40 channels */ |
| 2601 | ctx->ht.enabled = conf_is_ht(conf); | 2612 | ctx->ht.enabled = conf_is_ht(conf); |
| 2602 | if (ctx->ht.enabled) { | 2613 | if (ctx->ht.enabled) |
| 2603 | if (conf_is_ht40_minus(conf)) { | 2614 | iwlagn_config_ht40(conf, ctx); |
| 2604 | ctx->ht.extension_chan_offset = | 2615 | else |
| 2605 | IEEE80211_HT_PARAM_CHA_SEC_BELOW; | ||
| 2606 | ctx->ht.is_40mhz = true; | ||
| 2607 | } else if (conf_is_ht40_plus(conf)) { | ||
| 2608 | ctx->ht.extension_chan_offset = | ||
| 2609 | IEEE80211_HT_PARAM_CHA_SEC_ABOVE; | ||
| 2610 | ctx->ht.is_40mhz = true; | ||
| 2611 | } else { | ||
| 2612 | ctx->ht.extension_chan_offset = | ||
| 2613 | IEEE80211_HT_PARAM_CHA_SEC_NONE; | ||
| 2614 | ctx->ht.is_40mhz = false; | ||
| 2615 | } | ||
| 2616 | } else | ||
| 2617 | ctx->ht.is_40mhz = false; | 2616 | ctx->ht.is_40mhz = false; |
| 2618 | 2617 | ||
| 2619 | if ((le16_to_cpu(ctx->staging.channel) != ch)) | 2618 | if ((le16_to_cpu(ctx->staging.channel) != ch)) |
| @@ -3499,9 +3498,10 @@ MODULE_PARM_DESC(plcp_check, "Check plcp health (default: 1 [enabled])"); | |||
| 3499 | module_param_named(ack_check, iwlagn_mod_params.ack_check, bool, S_IRUGO); | 3498 | module_param_named(ack_check, iwlagn_mod_params.ack_check, bool, S_IRUGO); |
| 3500 | MODULE_PARM_DESC(ack_check, "Check ack health (default: 0 [disabled])"); | 3499 | MODULE_PARM_DESC(ack_check, "Check ack health (default: 0 [disabled])"); |
| 3501 | 3500 | ||
| 3502 | module_param_named(wd_disable, iwlagn_mod_params.wd_disable, bool, S_IRUGO); | 3501 | module_param_named(wd_disable, iwlagn_mod_params.wd_disable, int, S_IRUGO); |
| 3503 | MODULE_PARM_DESC(wd_disable, | 3502 | MODULE_PARM_DESC(wd_disable, |
| 3504 | "Disable stuck queue watchdog timer (default: 0 [enabled])"); | 3503 | "Disable stuck queue watchdog timer 0=system default, " |
| 3504 | "1=disable, 2=enable (default: 0)"); | ||
| 3505 | 3505 | ||
| 3506 | /* | 3506 | /* |
| 3507 | * set bt_coex_active to true, uCode will do kill/defer | 3507 | * set bt_coex_active to true, uCode will do kill/defer |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h index 5b936ec1a541..3856abaea507 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn.h | |||
| @@ -86,6 +86,8 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw, | |||
| 86 | struct ieee80211_vif *vif, | 86 | struct ieee80211_vif *vif, |
| 87 | struct ieee80211_bss_conf *bss_conf, | 87 | struct ieee80211_bss_conf *bss_conf, |
| 88 | u32 changes); | 88 | u32 changes); |
| 89 | void iwlagn_config_ht40(struct ieee80211_conf *conf, | ||
| 90 | struct iwl_rxon_context *ctx); | ||
| 89 | 91 | ||
| 90 | /* uCode */ | 92 | /* uCode */ |
| 91 | int iwlagn_rx_calib_result(struct iwl_priv *priv, | 93 | int iwlagn_rx_calib_result(struct iwl_priv *priv, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 001fdf140abb..fcf54160e4ed 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
| @@ -1810,11 +1810,23 @@ void iwl_setup_watchdog(struct iwl_priv *priv) | |||
| 1810 | { | 1810 | { |
| 1811 | unsigned int timeout = priv->cfg->base_params->wd_timeout; | 1811 | unsigned int timeout = priv->cfg->base_params->wd_timeout; |
| 1812 | 1812 | ||
| 1813 | if (timeout && !iwlagn_mod_params.wd_disable) | 1813 | if (!iwlagn_mod_params.wd_disable) { |
| 1814 | mod_timer(&priv->watchdog, | 1814 | /* use system default */ |
| 1815 | jiffies + msecs_to_jiffies(IWL_WD_TICK(timeout))); | 1815 | if (timeout && !priv->cfg->base_params->wd_disable) |
| 1816 | else | 1816 | mod_timer(&priv->watchdog, |
| 1817 | del_timer(&priv->watchdog); | 1817 | jiffies + |
| 1818 | msecs_to_jiffies(IWL_WD_TICK(timeout))); | ||
| 1819 | else | ||
| 1820 | del_timer(&priv->watchdog); | ||
| 1821 | } else { | ||
| 1822 | /* module parameter overwrite default configuration */ | ||
| 1823 | if (timeout && iwlagn_mod_params.wd_disable == 2) | ||
| 1824 | mod_timer(&priv->watchdog, | ||
| 1825 | jiffies + | ||
| 1826 | msecs_to_jiffies(IWL_WD_TICK(timeout))); | ||
| 1827 | else | ||
| 1828 | del_timer(&priv->watchdog); | ||
| 1829 | } | ||
| 1818 | } | 1830 | } |
| 1819 | 1831 | ||
| 1820 | /** | 1832 | /** |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 137da3380704..f2fc288f3dd3 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
| @@ -113,6 +113,7 @@ struct iwl_lib_ops { | |||
| 113 | * @shadow_reg_enable: HW shadhow register bit | 113 | * @shadow_reg_enable: HW shadhow register bit |
| 114 | * @no_idle_support: do not support idle mode | 114 | * @no_idle_support: do not support idle mode |
| 115 | * @hd_v2: v2 of enhanced sensitivity value, used for 2000 series and up | 115 | * @hd_v2: v2 of enhanced sensitivity value, used for 2000 series and up |
| 116 | * wd_disable: disable watchdog timer | ||
| 116 | */ | 117 | */ |
| 117 | struct iwl_base_params { | 118 | struct iwl_base_params { |
| 118 | int eeprom_size; | 119 | int eeprom_size; |
| @@ -134,6 +135,7 @@ struct iwl_base_params { | |||
| 134 | const bool shadow_reg_enable; | 135 | const bool shadow_reg_enable; |
| 135 | const bool no_idle_support; | 136 | const bool no_idle_support; |
| 136 | const bool hd_v2; | 137 | const bool hd_v2; |
| 138 | const bool wd_disable; | ||
| 137 | }; | 139 | }; |
| 138 | /* | 140 | /* |
| 139 | * @advanced_bt_coexist: support advanced bt coexist | 141 | * @advanced_bt_coexist: support advanced bt coexist |
diff --git a/drivers/net/wireless/iwlwifi/iwl-shared.h b/drivers/net/wireless/iwlwifi/iwl-shared.h index 1f7a93c67c45..14eaf37ce3b1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-shared.h +++ b/drivers/net/wireless/iwlwifi/iwl-shared.h | |||
| @@ -120,7 +120,7 @@ extern struct iwl_mod_params iwlagn_mod_params; | |||
| 120 | * @restart_fw: restart firmware, default = 1 | 120 | * @restart_fw: restart firmware, default = 1 |
| 121 | * @plcp_check: enable plcp health check, default = true | 121 | * @plcp_check: enable plcp health check, default = true |
| 122 | * @ack_check: disable ack health check, default = false | 122 | * @ack_check: disable ack health check, default = false |
| 123 | * @wd_disable: enable stuck queue check, default = false | 123 | * @wd_disable: enable stuck queue check, default = 0 |
| 124 | * @bt_coex_active: enable bt coex, default = true | 124 | * @bt_coex_active: enable bt coex, default = true |
| 125 | * @led_mode: system default, default = 0 | 125 | * @led_mode: system default, default = 0 |
| 126 | * @no_sleep_autoadjust: disable autoadjust, default = true | 126 | * @no_sleep_autoadjust: disable autoadjust, default = true |
| @@ -141,7 +141,7 @@ struct iwl_mod_params { | |||
| 141 | int restart_fw; | 141 | int restart_fw; |
| 142 | bool plcp_check; | 142 | bool plcp_check; |
| 143 | bool ack_check; | 143 | bool ack_check; |
| 144 | bool wd_disable; | 144 | int wd_disable; |
| 145 | bool bt_coex_active; | 145 | bool bt_coex_active; |
| 146 | int led_mode; | 146 | int led_mode; |
| 147 | bool no_sleep_autoadjust; | 147 | bool no_sleep_autoadjust; |
diff --git a/drivers/net/wireless/p54/p54spi.c b/drivers/net/wireless/p54/p54spi.c index f18df82eeb92..78d0d6988553 100644 --- a/drivers/net/wireless/p54/p54spi.c +++ b/drivers/net/wireless/p54/p54spi.c | |||
| @@ -588,8 +588,6 @@ static void p54spi_op_stop(struct ieee80211_hw *dev) | |||
| 588 | 588 | ||
| 589 | WARN_ON(priv->fw_state != FW_STATE_READY); | 589 | WARN_ON(priv->fw_state != FW_STATE_READY); |
| 590 | 590 | ||
| 591 | cancel_work_sync(&priv->work); | ||
| 592 | |||
| 593 | p54spi_power_off(priv); | 591 | p54spi_power_off(priv); |
| 594 | spin_lock_irqsave(&priv->tx_lock, flags); | 592 | spin_lock_irqsave(&priv->tx_lock, flags); |
| 595 | INIT_LIST_HEAD(&priv->tx_pending); | 593 | INIT_LIST_HEAD(&priv->tx_pending); |
| @@ -597,6 +595,8 @@ static void p54spi_op_stop(struct ieee80211_hw *dev) | |||
| 597 | 595 | ||
| 598 | priv->fw_state = FW_STATE_OFF; | 596 | priv->fw_state = FW_STATE_OFF; |
| 599 | mutex_unlock(&priv->mutex); | 597 | mutex_unlock(&priv->mutex); |
| 598 | |||
| 599 | cancel_work_sync(&priv->work); | ||
| 600 | } | 600 | } |
| 601 | 601 | ||
| 602 | static int __devinit p54spi_probe(struct spi_device *spi) | 602 | static int __devinit p54spi_probe(struct spi_device *spi) |
| @@ -656,6 +656,7 @@ static int __devinit p54spi_probe(struct spi_device *spi) | |||
| 656 | init_completion(&priv->fw_comp); | 656 | init_completion(&priv->fw_comp); |
| 657 | INIT_LIST_HEAD(&priv->tx_pending); | 657 | INIT_LIST_HEAD(&priv->tx_pending); |
| 658 | mutex_init(&priv->mutex); | 658 | mutex_init(&priv->mutex); |
| 659 | spin_lock_init(&priv->tx_lock); | ||
| 659 | SET_IEEE80211_DEV(hw, &spi->dev); | 660 | SET_IEEE80211_DEV(hw, &spi->dev); |
| 660 | priv->common.open = p54spi_op_start; | 661 | priv->common.open = p54spi_op_start; |
| 661 | priv->common.stop = p54spi_op_stop; | 662 | priv->common.stop = p54spi_op_stop; |
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c index d97a2caf582b..bc2ba80c47bb 100644 --- a/drivers/net/wireless/prism54/isl_ioctl.c +++ b/drivers/net/wireless/prism54/isl_ioctl.c | |||
| @@ -778,7 +778,7 @@ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info, | |||
| 778 | dwrq->flags = 0; | 778 | dwrq->flags = 0; |
| 779 | dwrq->length = 0; | 779 | dwrq->length = 0; |
| 780 | } | 780 | } |
| 781 | essid->octets[essid->length] = '\0'; | 781 | essid->octets[dwrq->length] = '\0'; |
| 782 | memcpy(extra, essid->octets, dwrq->length); | 782 | memcpy(extra, essid->octets, dwrq->length); |
| 783 | kfree(essid); | 783 | kfree(essid); |
| 784 | 784 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index 3f183a15186e..1ba079dffb11 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
| @@ -3771,7 +3771,7 @@ static void rt2800_efuse_read(struct rt2x00_dev *rt2x00dev, unsigned int i) | |||
| 3771 | /* Apparently the data is read from end to start */ | 3771 | /* Apparently the data is read from end to start */ |
| 3772 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, ®); | 3772 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, ®); |
| 3773 | /* The returned value is in CPU order, but eeprom is le */ | 3773 | /* The returned value is in CPU order, but eeprom is le */ |
| 3774 | rt2x00dev->eeprom[i] = cpu_to_le32(reg); | 3774 | *(u32 *)&rt2x00dev->eeprom[i] = cpu_to_le32(reg); |
| 3775 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, ®); | 3775 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, ®); |
| 3776 | *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg); | 3776 | *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg); |
| 3777 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, ®); | 3777 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, ®); |
diff --git a/drivers/net/wireless/rtlwifi/ps.c b/drivers/net/wireless/rtlwifi/ps.c index db5262844543..55c8e50f45fd 100644 --- a/drivers/net/wireless/rtlwifi/ps.c +++ b/drivers/net/wireless/rtlwifi/ps.c | |||
| @@ -395,7 +395,7 @@ void rtl_lps_enter(struct ieee80211_hw *hw) | |||
| 395 | if (mac->link_state != MAC80211_LINKED) | 395 | if (mac->link_state != MAC80211_LINKED) |
| 396 | return; | 396 | return; |
| 397 | 397 | ||
| 398 | spin_lock(&rtlpriv->locks.lps_lock); | 398 | spin_lock_irq(&rtlpriv->locks.lps_lock); |
| 399 | 399 | ||
| 400 | /* Idle for a while if we connect to AP a while ago. */ | 400 | /* Idle for a while if we connect to AP a while ago. */ |
| 401 | if (mac->cnt_after_linked >= 2) { | 401 | if (mac->cnt_after_linked >= 2) { |
| @@ -407,7 +407,7 @@ void rtl_lps_enter(struct ieee80211_hw *hw) | |||
| 407 | } | 407 | } |
| 408 | } | 408 | } |
| 409 | 409 | ||
| 410 | spin_unlock(&rtlpriv->locks.lps_lock); | 410 | spin_unlock_irq(&rtlpriv->locks.lps_lock); |
| 411 | } | 411 | } |
| 412 | 412 | ||
| 413 | /*Leave the leisure power save mode.*/ | 413 | /*Leave the leisure power save mode.*/ |
| @@ -416,8 +416,9 @@ void rtl_lps_leave(struct ieee80211_hw *hw) | |||
| 416 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 416 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
| 417 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); | 417 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); |
| 418 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | 418 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
| 419 | unsigned long flags; | ||
| 419 | 420 | ||
| 420 | spin_lock(&rtlpriv->locks.lps_lock); | 421 | spin_lock_irqsave(&rtlpriv->locks.lps_lock, flags); |
| 421 | 422 | ||
| 422 | if (ppsc->fwctrl_lps) { | 423 | if (ppsc->fwctrl_lps) { |
| 423 | if (ppsc->dot11_psmode != EACTIVE) { | 424 | if (ppsc->dot11_psmode != EACTIVE) { |
| @@ -438,7 +439,7 @@ void rtl_lps_leave(struct ieee80211_hw *hw) | |||
| 438 | rtl_lps_set_psmode(hw, EACTIVE); | 439 | rtl_lps_set_psmode(hw, EACTIVE); |
| 439 | } | 440 | } |
| 440 | } | 441 | } |
| 441 | spin_unlock(&rtlpriv->locks.lps_lock); | 442 | spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flags); |
| 442 | } | 443 | } |
| 443 | 444 | ||
| 444 | /* For sw LPS*/ | 445 | /* For sw LPS*/ |
| @@ -539,9 +540,9 @@ void rtl_swlps_rf_awake(struct ieee80211_hw *hw) | |||
| 539 | RT_CLEAR_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM); | 540 | RT_CLEAR_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM); |
| 540 | } | 541 | } |
| 541 | 542 | ||
| 542 | spin_lock(&rtlpriv->locks.lps_lock); | 543 | spin_lock_irq(&rtlpriv->locks.lps_lock); |
| 543 | rtl_ps_set_rf_state(hw, ERFON, RF_CHANGE_BY_PS); | 544 | rtl_ps_set_rf_state(hw, ERFON, RF_CHANGE_BY_PS); |
| 544 | spin_unlock(&rtlpriv->locks.lps_lock); | 545 | spin_unlock_irq(&rtlpriv->locks.lps_lock); |
| 545 | } | 546 | } |
| 546 | 547 | ||
| 547 | void rtl_swlps_rfon_wq_callback(void *data) | 548 | void rtl_swlps_rfon_wq_callback(void *data) |
| @@ -574,9 +575,9 @@ void rtl_swlps_rf_sleep(struct ieee80211_hw *hw) | |||
| 574 | if (rtlpriv->link_info.busytraffic) | 575 | if (rtlpriv->link_info.busytraffic) |
| 575 | return; | 576 | return; |
| 576 | 577 | ||
| 577 | spin_lock(&rtlpriv->locks.lps_lock); | 578 | spin_lock_irq(&rtlpriv->locks.lps_lock); |
| 578 | rtl_ps_set_rf_state(hw, ERFSLEEP, RF_CHANGE_BY_PS); | 579 | rtl_ps_set_rf_state(hw, ERFSLEEP, RF_CHANGE_BY_PS); |
| 579 | spin_unlock(&rtlpriv->locks.lps_lock); | 580 | spin_unlock_irq(&rtlpriv->locks.lps_lock); |
| 580 | 581 | ||
| 581 | if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_ASPM && | 582 | if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_ASPM && |
| 582 | !RT_IN_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM)) { | 583 | !RT_IN_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM)) { |
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index 0cb594c86090..15e332d08c8d 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c | |||
| @@ -1021,7 +1021,7 @@ static int xen_netbk_tx_check_gop(struct xen_netbk *netbk, | |||
| 1021 | pending_idx = *((u16 *)skb->data); | 1021 | pending_idx = *((u16 *)skb->data); |
| 1022 | xen_netbk_idx_release(netbk, pending_idx); | 1022 | xen_netbk_idx_release(netbk, pending_idx); |
| 1023 | for (j = start; j < i; j++) { | 1023 | for (j = start; j < i; j++) { |
| 1024 | pending_idx = frag_get_pending_idx(&shinfo->frags[i]); | 1024 | pending_idx = frag_get_pending_idx(&shinfo->frags[j]); |
| 1025 | xen_netbk_idx_release(netbk, pending_idx); | 1025 | xen_netbk_idx_release(netbk, pending_idx); |
| 1026 | } | 1026 | } |
| 1027 | 1027 | ||
| @@ -1668,7 +1668,7 @@ static int __init netback_init(void) | |||
| 1668 | "netback/%u", group); | 1668 | "netback/%u", group); |
| 1669 | 1669 | ||
| 1670 | if (IS_ERR(netbk->task)) { | 1670 | if (IS_ERR(netbk->task)) { |
| 1671 | printk(KERN_ALERT "kthread_run() fails at netback\n"); | 1671 | printk(KERN_ALERT "kthread_create() fails at netback\n"); |
| 1672 | del_timer(&netbk->net_timer); | 1672 | del_timer(&netbk->net_timer); |
| 1673 | rc = PTR_ERR(netbk->task); | 1673 | rc = PTR_ERR(netbk->task); |
| 1674 | goto failed_init; | 1674 | goto failed_init; |
