Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

+281 -26
+2 -2
drivers/net/bonding/bond_alb.c
··· 169 index = next_index; 170 } 171 172 - _unlock_tx_hashtbl(bond); 173 - 174 tlb_init_slave(slave); 175 } 176 177 /* Must be called before starting the monitor timer */
··· 169 index = next_index; 170 } 171 172 tlb_init_slave(slave); 173 + 174 + _unlock_tx_hashtbl(bond); 175 } 176 177 /* Must be called before starting the monitor timer */
+2 -2
drivers/net/bonding/bonding.h
··· 22 #include "bond_3ad.h" 23 #include "bond_alb.h" 24 25 - #define DRV_VERSION "3.0.0" 26 - #define DRV_RELDATE "November 8, 2005" 27 #define DRV_NAME "bonding" 28 #define DRV_DESCRIPTION "Ethernet Channel Bonding Driver" 29
··· 22 #include "bond_3ad.h" 23 #include "bond_alb.h" 24 25 + #define DRV_VERSION "3.0.1" 26 + #define DRV_RELDATE "January 9, 2006" 27 #define DRV_NAME "bonding" 28 #define DRV_DESCRIPTION "Ethernet Channel Bonding Driver" 29
+29 -3
drivers/net/e100.c
··· 132 * TODO: 133 * o several entry points race with dev->close 134 * o check for tx-no-resources/stop Q races with tx clean/wake Q 135 */ 136 137 #include <linux/config.h> ··· 582 u16 leds; 583 u16 eeprom_wc; 584 u16 eeprom[256]; 585 }; 586 587 static inline void e100_write_flush(struct nic *nic) ··· 881 { 882 u32 data_out = 0; 883 unsigned int i; 884 885 writel((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl); 886 887 - for(i = 0; i < 100; i++) { 888 udelay(20); 889 - if((data_out = readl(&nic->csr->mdi_ctrl)) & mdi_ready) 890 break; 891 } 892 - 893 DPRINTK(HW, DEBUG, 894 "%s:addr=%d, reg=%d, data_in=0x%04X, data_out=0x%04X\n", 895 dir == mdi_read ? "READ" : "WRITE", addr, reg, data, data_out); ··· 2587 /* locks must be initialized before calling hw_reset */ 2588 spin_lock_init(&nic->cb_lock); 2589 spin_lock_init(&nic->cmd_lock); 2590 2591 /* Reset the device before pci_set_master() in case device is in some 2592 * funky state and has an interrupt pending - hint: we don't have the
··· 132 * TODO: 133 * o several entry points race with dev->close 134 * o check for tx-no-resources/stop Q races with tx clean/wake Q 135 + * 136 + * FIXES: 137 + * 2005/12/02 - Michael O'Donnell <Michael.ODonnell at stratus dot com> 138 + * - Stratus87247: protect MDI control register manipulations 139 */ 140 141 #include <linux/config.h> ··· 578 u16 leds; 579 u16 eeprom_wc; 580 u16 eeprom[256]; 581 + spinlock_t mdio_lock; 582 }; 583 584 static inline void e100_write_flush(struct nic *nic) ··· 876 { 877 u32 data_out = 0; 878 unsigned int i; 879 + unsigned long flags; 880 881 + 882 + /* 883 + * Stratus87247: we shouldn't be writing the MDI control 884 + * register until the Ready bit shows True. Also, since 885 + * manipulation of the MDI control registers is a multi-step 886 + * procedure it should be done under lock. 887 + */ 888 + spin_lock_irqsave(&nic->mdio_lock, flags); 889 + for (i = 100; i; --i) { 890 + if (readl(&nic->csr->mdi_ctrl) & mdi_ready) 891 + break; 892 + udelay(20); 893 + } 894 + if (unlikely(!i)) { 895 + printk("e100.mdio_ctrl(%s) won't go Ready\n", 896 + nic->netdev->name ); 897 + spin_unlock_irqrestore(&nic->mdio_lock, flags); 898 + return 0; /* No way to indicate timeout error */ 899 + } 900 writel((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl); 901 902 + for (i = 0; i < 100; i++) { 903 udelay(20); 904 + if ((data_out = readl(&nic->csr->mdi_ctrl)) & mdi_ready) 905 break; 906 } 907 + spin_unlock_irqrestore(&nic->mdio_lock, flags); 908 DPRINTK(HW, DEBUG, 909 "%s:addr=%d, reg=%d, data_in=0x%04X, data_out=0x%04X\n", 910 dir == mdi_read ? "READ" : "WRITE", addr, reg, data, data_out); ··· 2562 /* locks must be initialized before calling hw_reset */ 2563 spin_lock_init(&nic->cb_lock); 2564 spin_lock_init(&nic->cmd_lock); 2565 + spin_lock_init(&nic->mdio_lock); 2566 2567 /* Reset the device before pci_set_master() in case device is in some 2568 * funky state and has an interrupt pending - hint: we don't have the
+5 -1
drivers/net/gianfar.c
··· 84 #include <linux/ip.h> 85 #include <linux/tcp.h> 86 #include <linux/udp.h> 87 88 #include <asm/io.h> 89 #include <asm/irq.h> ··· 399 priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ? 400 SUPPORTED_1000baseT_Full : 0; 401 struct phy_device *phydev; 402 403 priv->oldlink = 0; 404 priv->oldspeed = 0; 405 priv->oldduplex = -1; 406 407 - phydev = phy_connect(dev, priv->einfo->bus_id, &adjust_link, 0); 408 409 if (IS_ERR(phydev)) { 410 printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
··· 84 #include <linux/ip.h> 85 #include <linux/tcp.h> 86 #include <linux/udp.h> 87 + #include <linux/in.h> 88 89 #include <asm/io.h> 90 #include <asm/irq.h> ··· 398 priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ? 399 SUPPORTED_1000baseT_Full : 0; 400 struct phy_device *phydev; 401 + char phy_id[BUS_ID_SIZE]; 402 403 priv->oldlink = 0; 404 priv->oldspeed = 0; 405 priv->oldduplex = -1; 406 407 + snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, priv->einfo->bus_id, priv->einfo->phy_id); 408 + 409 + phydev = phy_connect(dev, phy_id, &adjust_link, 0); 410 411 if (IS_ERR(phydev)) { 412 printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
+4 -1
drivers/net/gianfar_mii.c
··· 128 struct gianfar_mdio_data *pdata; 129 struct gfar_mii *regs; 130 struct mii_bus *new_bus; 131 int err = 0; 132 133 if (NULL == dev) ··· 152 return -ENODEV; 153 } 154 155 /* Set the PHY base address */ 156 - regs = (struct gfar_mii *) ioremap(pdata->paddr, 157 sizeof (struct gfar_mii)); 158 159 if (NULL == regs) {
··· 128 struct gianfar_mdio_data *pdata; 129 struct gfar_mii *regs; 130 struct mii_bus *new_bus; 131 + struct resource *r; 132 int err = 0; 133 134 if (NULL == dev) ··· 151 return -ENODEV; 152 } 153 154 + r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 155 + 156 /* Set the PHY base address */ 157 + regs = (struct gfar_mii *) ioremap(r->start, 158 sizeof (struct gfar_mii)); 159 160 if (NULL == regs) {
+1 -1
drivers/net/phy/mdio_bus.c
··· 81 82 phydev->dev.parent = bus->dev; 83 phydev->dev.bus = &mdio_bus_type; 84 - sprintf(phydev->dev.bus_id, "phy%d:%d", bus->id, i); 85 86 phydev->bus = bus; 87
··· 81 82 phydev->dev.parent = bus->dev; 83 phydev->dev.bus = &mdio_bus_type; 84 + snprintf(phydev->dev.bus_id, BUS_ID_SIZE, PHY_ID_FMT, bus->id, i); 85 86 phydev->bus = bus; 87
+1 -1
drivers/net/phy/phy.c
··· 42 */ 43 void phy_print_status(struct phy_device *phydev) 44 { 45 - pr_info("%s: Link is %s", phydev->dev.bus_id, 46 phydev->link ? "Up" : "Down"); 47 if (phydev->link) 48 printk(" - %d/%s", phydev->speed,
··· 42 */ 43 void phy_print_status(struct phy_device *phydev) 44 { 45 + pr_info("PHY: %s - Link is %s", phydev->dev.bus_id, 46 phydev->link ? "Up" : "Down"); 47 if (phydev->link) 48 printk(" - %d/%s", phydev->speed,
+3 -3
drivers/net/tulip/uli526x.c
··· 1689 MODULE_DESCRIPTION("ULi M5261/M5263 fast ethernet driver"); 1690 MODULE_LICENSE("GPL"); 1691 1692 - MODULE_PARM(debug, "i"); 1693 - MODULE_PARM(mode, "i"); 1694 - MODULE_PARM(cr6set, "i"); 1695 MODULE_PARM_DESC(debug, "ULi M5261/M5263 enable debugging (0-1)"); 1696 MODULE_PARM_DESC(mode, "ULi M5261/M5263: Bit 0: 10/100Mbps, bit 2: duplex, bit 8: HomePNA"); 1697
··· 1689 MODULE_DESCRIPTION("ULi M5261/M5263 fast ethernet driver"); 1690 MODULE_LICENSE("GPL"); 1691 1692 + module_param(debug, int, 0644); 1693 + module_param(mode, int, 0); 1694 + module_param(cr6set, int, 0); 1695 MODULE_PARM_DESC(debug, "ULi M5261/M5263 enable debugging (0-1)"); 1696 MODULE_PARM_DESC(mode, "ULi M5261/M5263: Bit 0: 10/100Mbps, bit 2: duplex, bit 8: HomePNA"); 1697
+1 -1
drivers/net/via-velocity.c
··· 791 #endif 792 793 if (vptr->flags & VELOCITY_FLAGS_TX_CSUM) { 794 - dev->features |= NETIF_F_HW_CSUM; 795 } 796 797 ret = register_netdev(dev);
··· 791 #endif 792 793 if (vptr->flags & VELOCITY_FLAGS_TX_CSUM) { 794 + dev->features |= NETIF_F_IP_CSUM; 795 } 796 797 ret = register_netdev(dev);
+1 -1
drivers/net/wireless/Kconfig
··· 243 244 config AIRO 245 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" 246 - depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN) 247 ---help--- 248 This is the standard Linux driver to support Cisco/Aironet ISA and 249 PCI 802.11 wireless cards.
··· 243 244 config AIRO 245 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" 246 + depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN) 247 ---help--- 248 This is the standard Linux driver to support Cisco/Aironet ISA and 249 PCI 802.11 wireless cards.
+223 -4
drivers/net/wireless/atmel.c
··· 1407 { 1408 struct atmel_private *priv = netdev_priv(dev); 1409 1410 atmel_enter_state(priv, STATION_STATE_DOWN); 1411 1412 if (priv->bus_type == BUS_TYPE_PCCARD) ··· 1791 priv->wep_is_on = 1; 1792 priv->exclude_unencrypted = 1; 1793 if (priv->wep_key_len[index] > 5) { 1794 - priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_64; 1795 priv->encryption_level = 2; 1796 } else { 1797 - priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_128; 1798 priv->encryption_level = 1; 1799 } 1800 } ··· 1863 1864 return 0; 1865 } 1866 1867 static int atmel_get_name(struct net_device *dev, 1868 struct iw_request_info *info, ··· 2475 { 2476 struct atmel_private *priv = netdev_priv(dev); 2477 int i; 2478 - static const u8 bcast[] = { 255, 255, 255, 255, 255, 255 }; 2479 unsigned long flags; 2480 2481 if (awrq->sa_family != ARPHRD_ETHER) 2482 return -EINVAL; 2483 2484 - if (memcmp(bcast, awrq->sa_data, 6) == 0) { 2485 del_timer_sync(&priv->management_timer); 2486 spin_lock_irqsave(&priv->irqlock, flags); 2487 atmel_scan(priv, 1); ··· 2566 (iw_handler) atmel_get_encode, /* SIOCGIWENCODE */ 2567 (iw_handler) atmel_set_power, /* SIOCSIWPOWER */ 2568 (iw_handler) atmel_get_power, /* SIOCGIWPOWER */ 2569 }; 2570 2571 static const iw_handler atmel_private_handler[] = ··· 3121 u16 ass_id = le16_to_cpu(ass_resp->ass_id); 3122 u16 rates_len = ass_resp->length > 4 ? 4 : ass_resp->length; 3123 3124 if (frame_len < 8 + rates_len) 3125 return; 3126 ··· 3153 priv->station_is_associated = 1; 3154 priv->station_was_associated = 1; 3155 atmel_enter_state(priv, STATION_STATE_READY); 3156 return; 3157 } 3158 ··· 3839 3840 struct atmel_private *priv = netdev_priv(dev); 3841 u8 configuration; 3842 3843 /* data to add to the firmware names, in priority order 3844 this implemenents firmware versioning */ ··· 3999 build_wpa_mib(priv); 4000 else 4001 build_wep_mib(priv); 4002 4003 return 1; 4004 }
··· 1407 { 1408 struct atmel_private *priv = netdev_priv(dev); 1409 1410 + /* Send event to userspace that we are disassociating */ 1411 + if (priv->station_state == STATION_STATE_READY) { 1412 + union iwreq_data wrqu; 1413 + 1414 + wrqu.data.length = 0; 1415 + wrqu.data.flags = 0; 1416 + wrqu.ap_addr.sa_family = ARPHRD_ETHER; 1417 + memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); 1418 + wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); 1419 + } 1420 + 1421 atmel_enter_state(priv, STATION_STATE_DOWN); 1422 1423 if (priv->bus_type == BUS_TYPE_PCCARD) ··· 1780 priv->wep_is_on = 1; 1781 priv->exclude_unencrypted = 1; 1782 if (priv->wep_key_len[index] > 5) { 1783 + priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_128; 1784 priv->encryption_level = 2; 1785 } else { 1786 + priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_64; 1787 priv->encryption_level = 1; 1788 } 1789 } ··· 1852 1853 return 0; 1854 } 1855 + 1856 + static int atmel_set_encodeext(struct net_device *dev, 1857 + struct iw_request_info *info, 1858 + union iwreq_data *wrqu, 1859 + char *extra) 1860 + { 1861 + struct atmel_private *priv = netdev_priv(dev); 1862 + struct iw_point *encoding = &wrqu->encoding; 1863 + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; 1864 + int idx, key_len; 1865 + 1866 + /* Determine and validate the key index */ 1867 + idx = encoding->flags & IW_ENCODE_INDEX; 1868 + if (idx) { 1869 + if (idx < 1 || idx > WEP_KEYS) 1870 + return -EINVAL; 1871 + idx--; 1872 + } else 1873 + idx = priv->default_key; 1874 + 1875 + if ((encoding->flags & IW_ENCODE_DISABLED) || 1876 + ext->alg == IW_ENCODE_ALG_NONE) { 1877 + priv->wep_is_on = 0; 1878 + priv->encryption_level = 0; 1879 + priv->pairwise_cipher_suite = CIPHER_SUITE_NONE; 1880 + } 1881 + 1882 + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) 1883 + priv->default_key = idx; 1884 + 1885 + /* Set the requested key */ 1886 + switch (ext->alg) { 1887 + case IW_ENCODE_ALG_NONE: 1888 + break; 1889 + case IW_ENCODE_ALG_WEP: 1890 + if (ext->key_len > 5) { 1891 + priv->wep_key_len[idx] = 13; 1892 + priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_128; 1893 + priv->encryption_level = 2; 1894 + } else if (ext->key_len > 0) { 1895 + priv->wep_key_len[idx] = 5; 1896 + priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_64; 1897 + priv->encryption_level = 1; 1898 + } else { 1899 + return -EINVAL; 1900 + } 1901 + priv->wep_is_on = 1; 1902 + memset(priv->wep_keys[idx], 0, 13); 1903 + key_len = min ((int)ext->key_len, priv->wep_key_len[idx]); 1904 + memcpy(priv->wep_keys[idx], ext->key, key_len); 1905 + break; 1906 + default: 1907 + return -EINVAL; 1908 + } 1909 + 1910 + return -EINPROGRESS; 1911 + } 1912 + 1913 + static int atmel_get_encodeext(struct net_device *dev, 1914 + struct iw_request_info *info, 1915 + union iwreq_data *wrqu, 1916 + char *extra) 1917 + { 1918 + struct atmel_private *priv = netdev_priv(dev); 1919 + struct iw_point *encoding = &wrqu->encoding; 1920 + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; 1921 + int idx, max_key_len; 1922 + 1923 + max_key_len = encoding->length - sizeof(*ext); 1924 + if (max_key_len < 0) 1925 + return -EINVAL; 1926 + 1927 + idx = encoding->flags & IW_ENCODE_INDEX; 1928 + if (idx) { 1929 + if (idx < 1 || idx > WEP_KEYS) 1930 + return -EINVAL; 1931 + idx--; 1932 + } else 1933 + idx = priv->default_key; 1934 + 1935 + encoding->flags = idx + 1; 1936 + memset(ext, 0, sizeof(*ext)); 1937 + 1938 + if (!priv->wep_is_on) { 1939 + ext->alg = IW_ENCODE_ALG_NONE; 1940 + ext->key_len = 0; 1941 + encoding->flags |= IW_ENCODE_DISABLED; 1942 + } else { 1943 + if (priv->encryption_level > 0) 1944 + ext->alg = IW_ENCODE_ALG_WEP; 1945 + else 1946 + return -EINVAL; 1947 + 1948 + ext->key_len = priv->wep_key_len[idx]; 1949 + memcpy(ext->key, priv->wep_keys[idx], ext->key_len); 1950 + encoding->flags |= IW_ENCODE_ENABLED; 1951 + } 1952 + 1953 + return 0; 1954 + } 1955 + 1956 + static int atmel_set_auth(struct net_device *dev, 1957 + struct iw_request_info *info, 1958 + union iwreq_data *wrqu, char *extra) 1959 + { 1960 + struct atmel_private *priv = netdev_priv(dev); 1961 + struct iw_param *param = &wrqu->param; 1962 + 1963 + switch (param->flags & IW_AUTH_INDEX) { 1964 + case IW_AUTH_WPA_VERSION: 1965 + case IW_AUTH_CIPHER_PAIRWISE: 1966 + case IW_AUTH_CIPHER_GROUP: 1967 + case IW_AUTH_KEY_MGMT: 1968 + case IW_AUTH_RX_UNENCRYPTED_EAPOL: 1969 + case IW_AUTH_PRIVACY_INVOKED: 1970 + /* 1971 + * atmel does not use these parameters 1972 + */ 1973 + break; 1974 + 1975 + case IW_AUTH_DROP_UNENCRYPTED: 1976 + priv->exclude_unencrypted = param->value ? 1 : 0; 1977 + break; 1978 + 1979 + case IW_AUTH_80211_AUTH_ALG: { 1980 + if (param->value & IW_AUTH_ALG_SHARED_KEY) { 1981 + priv->exclude_unencrypted = 1; 1982 + } else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) { 1983 + priv->exclude_unencrypted = 0; 1984 + } else 1985 + return -EINVAL; 1986 + break; 1987 + } 1988 + 1989 + case IW_AUTH_WPA_ENABLED: 1990 + /* Silently accept disable of WPA */ 1991 + if (param->value > 0) 1992 + return -EOPNOTSUPP; 1993 + break; 1994 + 1995 + default: 1996 + return -EOPNOTSUPP; 1997 + } 1998 + return -EINPROGRESS; 1999 + } 2000 + 2001 + static int atmel_get_auth(struct net_device *dev, 2002 + struct iw_request_info *info, 2003 + union iwreq_data *wrqu, char *extra) 2004 + { 2005 + struct atmel_private *priv = netdev_priv(dev); 2006 + struct iw_param *param = &wrqu->param; 2007 + 2008 + switch (param->flags & IW_AUTH_INDEX) { 2009 + case IW_AUTH_DROP_UNENCRYPTED: 2010 + param->value = priv->exclude_unencrypted; 2011 + break; 2012 + 2013 + case IW_AUTH_80211_AUTH_ALG: 2014 + if (priv->exclude_unencrypted == 1) 2015 + param->value = IW_AUTH_ALG_SHARED_KEY; 2016 + else 2017 + param->value = IW_AUTH_ALG_OPEN_SYSTEM; 2018 + break; 2019 + 2020 + case IW_AUTH_WPA_ENABLED: 2021 + param->value = 0; 2022 + break; 2023 + 2024 + default: 2025 + return -EOPNOTSUPP; 2026 + } 2027 + return 0; 2028 + } 2029 + 2030 2031 static int atmel_get_name(struct net_device *dev, 2032 struct iw_request_info *info, ··· 2289 { 2290 struct atmel_private *priv = netdev_priv(dev); 2291 int i; 2292 + static const u8 any[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; 2293 + static const u8 off[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 2294 unsigned long flags; 2295 2296 if (awrq->sa_family != ARPHRD_ETHER) 2297 return -EINVAL; 2298 2299 + if (!memcmp(any, awrq->sa_data, 6) || 2300 + !memcmp(off, awrq->sa_data, 6)) { 2301 del_timer_sync(&priv->management_timer); 2302 spin_lock_irqsave(&priv->irqlock, flags); 2303 atmel_scan(priv, 1); ··· 2378 (iw_handler) atmel_get_encode, /* SIOCGIWENCODE */ 2379 (iw_handler) atmel_set_power, /* SIOCSIWPOWER */ 2380 (iw_handler) atmel_get_power, /* SIOCGIWPOWER */ 2381 + (iw_handler) NULL, /* -- hole -- */ 2382 + (iw_handler) NULL, /* -- hole -- */ 2383 + (iw_handler) NULL, /* SIOCSIWGENIE */ 2384 + (iw_handler) NULL, /* SIOCGIWGENIE */ 2385 + (iw_handler) atmel_set_auth, /* SIOCSIWAUTH */ 2386 + (iw_handler) atmel_get_auth, /* SIOCGIWAUTH */ 2387 + (iw_handler) atmel_set_encodeext, /* SIOCSIWENCODEEXT */ 2388 + (iw_handler) atmel_get_encodeext, /* SIOCGIWENCODEEXT */ 2389 + (iw_handler) NULL, /* SIOCSIWPMKSA */ 2390 }; 2391 2392 static const iw_handler atmel_private_handler[] = ··· 2924 u16 ass_id = le16_to_cpu(ass_resp->ass_id); 2925 u16 rates_len = ass_resp->length > 4 ? 4 : ass_resp->length; 2926 2927 + union iwreq_data wrqu; 2928 + 2929 if (frame_len < 8 + rates_len) 2930 return; 2931 ··· 2954 priv->station_is_associated = 1; 2955 priv->station_was_associated = 1; 2956 atmel_enter_state(priv, STATION_STATE_READY); 2957 + 2958 + /* Send association event to userspace */ 2959 + wrqu.data.length = 0; 2960 + wrqu.data.flags = 0; 2961 + memcpy(wrqu.ap_addr.sa_data, priv->CurrentBSSID, ETH_ALEN); 2962 + wrqu.ap_addr.sa_family = ARPHRD_ETHER; 2963 + wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); 2964 + 2965 return; 2966 } 2967 ··· 3632 3633 struct atmel_private *priv = netdev_priv(dev); 3634 u8 configuration; 3635 + int old_state = priv->station_state; 3636 3637 /* data to add to the firmware names, in priority order 3638 this implemenents firmware versioning */ ··· 3791 build_wpa_mib(priv); 3792 else 3793 build_wep_mib(priv); 3794 + 3795 + if (old_state == STATION_STATE_READY) 3796 + { 3797 + union iwreq_data wrqu; 3798 + 3799 + wrqu.data.length = 0; 3800 + wrqu.data.flags = 0; 3801 + wrqu.ap_addr.sa_family = ARPHRD_ETHER; 3802 + memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); 3803 + wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); 3804 + } 3805 3806 return 1; 3807 }
+2 -4
include/linux/fsl_devices.h
··· 50 51 /* board specific information */ 52 u32 board_flags; 53 - const char *bus_id; 54 u8 mac_addr[6]; 55 }; 56 57 struct gianfar_mdio_data { 58 - /* device specific information */ 59 - u32 paddr; 60 - 61 /* board specific information */ 62 int irq[32]; 63 };
··· 50 51 /* board specific information */ 52 u32 board_flags; 53 + u32 bus_id; 54 + u32 phy_id; 55 u8 mac_addr[6]; 56 }; 57 58 struct gianfar_mdio_data { 59 /* board specific information */ 60 int irq[32]; 61 };
+3
include/linux/phy.h
··· 53 54 #define PHY_MAX_ADDR 32 55 56 /* The Bus class for PHYs. Devices which provide access to 57 * PHYs should register using this structure */ 58 struct mii_bus {
··· 53 54 #define PHY_MAX_ADDR 32 55 56 + /* Used when trying to connect to a specific phy (mii bus id:phy device id) */ 57 + #define PHY_ID_FMT "%x:%02x" 58 + 59 /* The Bus class for PHYs. Devices which provide access to 60 * PHYs should register using this structure */ 61 struct mii_bus {
+4 -2
include/net/ieee80211.h
··· 363 #define IEEE80211_OFDM_SHIFT_MASK_A 4 364 365 /* NOTE: This data is for statistical purposes; not all hardware provides this 366 - * information for frames received. Not setting these will not cause 367 - * any adverse affects. */ 368 struct ieee80211_rx_stats { 369 u32 mac_time; 370 s8 rssi; ··· 1089 /* ieee80211_rx.c */ 1090 extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, 1091 struct ieee80211_rx_stats *rx_stats); 1092 extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, 1093 struct ieee80211_hdr_4addr *header, 1094 struct ieee80211_rx_stats *stats);
··· 363 #define IEEE80211_OFDM_SHIFT_MASK_A 4 364 365 /* NOTE: This data is for statistical purposes; not all hardware provides this 366 + * information for frames received. 367 + * For ieee80211_rx_mgt, you need to set at least the 'len' parameter. 368 + */ 369 struct ieee80211_rx_stats { 370 u32 mac_time; 371 s8 rssi; ··· 1088 /* ieee80211_rx.c */ 1089 extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, 1090 struct ieee80211_rx_stats *rx_stats); 1091 + /* make sure to set stats->len */ 1092 extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, 1093 struct ieee80211_hdr_4addr *header, 1094 struct ieee80211_rx_stats *stats);