This is the merge of the bcm43xx driver, along with a variety of smaller changes. I would really like to see this in 2.6.17 if at all possible.
Thanks! John --- The following changes since commit 5d5d7727a8cde78f798ecf04bac8031eff536f9d: David S. Miller: [SPARC64]: Kill duplicate exports of string library functions. are found in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 upstream Adrian Bunk: PCMCIA_SPECTRUM must select FW_LOADER Danny van Dyk: Sync bcm43xx_phy_initb6() with specs David Woodhouse: softmac: reduce scan dwell time softmac: reduce default rate to 11Mbps. Jean Tourrilhes: zd1201 wireless stat update John W. Linville: wireless: import bcm43xx sources bcm43xx: patch Kconfig and wireless/Makefile for import Jouni Malinen: hostap: Make hostap_tx_encrypt() static hostap: Fix EAPOL frame encryption Larry Finger: Minor (janitorial) change to ieee80211 Michael Buesch: bcm43xx: sync with svn.berlios.de bcm43xx: remove linux version compatibility code. bcm43xx: Move README file to Documentation directory. bcm43xx: remove redundant COPYING file. bcm43xx: add DEBUG Kconfig option. Also fix indention. bcm43xx: Fix makefile. Remove all the "out-of-tree" stuff. bcm43xx: Add more initvals sanity checks and error out, if one sanity check fails. bcm43xx: Remove function bcm43xx_channel_is_allowed() bcm43xx: basic ethtool support bcm43xx: Wireless Ext update bcm43xx: fix txpower reporting in WE. bcm43xx: enable SPROM writing. bcm43xx: heavily increase mac_suspend timeout. bcm43xx: fix compiletime warning (phy_xmitpower) bcm43xx: remove WX debugging. bcm43xx: Partially fix PIO code. Add Kconfig option for PIO or DMA mode (or both). bcm43xx: add a note that not all devices support PIO. Apple Airport: Add Kconfig note that the bcm43xx driver has to be used for Airport Extreme cards. bcm43xx: update README bcm43xx: fix LED code. bcm43xx: rewrite and simplify the periodic task handling. bcm43xx: Code cleanups. This removes various "inline" statements and reduces codesize. bcm43xx: Move sprom lowlevel reading/writing to its own functions. bcm43xx: make bcm43xx_sprom_crc() static. bcm43xx: split the channel helper functions, so that they can be used without a valid running core. bcm43xx: remove old unused struct. bcm43xx: Fix Kconfig typo (transfer mode default) bcm43xx: Workaround init_board vs IRQ race. bcm43xx: move initialized = 1 to the end of init_board. bcm43xx: add assert(bcm->initialized) to periodic_tasks_setup(). bcm43xx: Move TX/RX related functions to its own file. Add basic RTS/CTS code. bcm43xx: Add sysfs attributes for device specific tunables. bcm43xx: Set both, the DMAmask and the coherent DMAmask. bcm43xx: Abstract the locking mechanism. bcm43xx: Remove the mmio access printing facility overhead. bcm43xx: fix some stuff, add a few missing mmiowb(), remove dead code. bcm43xx: receive TX status on MMIO or DMA unconditionally regarding the 80211 core rev. bcm43xx: add functions bcm43xx_dma_read/write, bcm43xx_dma_tx_suspend/resume. bcm43xx: reduce the size of bcm43xx_private by removing unneeded members. bcm43xx: Fix crash on ifdown, by being careful in pio/dma freeing. bcm43xx: Remove the workaround in dummy_transmission, bcm43xx: Do boardflags workarounds for specific boards. bcm43xx: properly mask txctl1 before writing it to hardware. bcm43xx: remove check for mmio length, as it differs among platforms. (especially embedded) bcm43xx: fix some gpio register trashing (hopefully :D) bcm43xx: merge all iwmode code into the set_iwmode function. bcm43xx: some IRQ handler cleanups. bcm43xx: set default attenuation values. bcm43xx: sync interference mitigation code to the specs. bcm43xx: fix nrssi_threshold calculation. bcm43xx: add useless and broken statistics stuff. People seem to want it. well... bcm43xx: get rid of "/* vim: ..." lines at the end of several files. bcm43xx: fix "include" issues on some platforms. bcm43xx: remove some compilerwarnings. bcm43xx: fix the remaining sparse warnings. bcm43xx: sync GPHY init with the specs. bcm43xx: don't set the channel on a device, which is down. Pete Zaitcev: bcm43xx: fix DMA TX skb freeing in case of fragmented packets. Documentation/networking/bcm43xx.txt | 36 drivers/net/wireless/Kconfig | 7 drivers/net/wireless/Makefile | 1 drivers/net/wireless/bcm43xx/Kconfig | 62 drivers/net/wireless/bcm43xx/Makefile | 12 drivers/net/wireless/bcm43xx/bcm43xx.h | 926 +++++ drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c | 499 +++ drivers/net/wireless/bcm43xx/bcm43xx_debugfs.h | 117 + drivers/net/wireless/bcm43xx/bcm43xx_dma.c | 968 ++++++ drivers/net/wireless/bcm43xx/bcm43xx_dma.h | 218 + drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c | 50 drivers/net/wireless/bcm43xx/bcm43xx_ethtool.h | 8 drivers/net/wireless/bcm43xx/bcm43xx_ilt.c | 337 ++ drivers/net/wireless/bcm43xx/bcm43xx_ilt.h | 32 drivers/net/wireless/bcm43xx/bcm43xx_leds.c | 293 ++ drivers/net/wireless/bcm43xx/bcm43xx_leds.h | 56 drivers/net/wireless/bcm43xx/bcm43xx_main.c | 3973 +++++++++++++++++++++++ drivers/net/wireless/bcm43xx/bcm43xx_main.h | 168 + drivers/net/wireless/bcm43xx/bcm43xx_phy.c | 2345 ++++++++++++++ drivers/net/wireless/bcm43xx/bcm43xx_phy.h | 74 drivers/net/wireless/bcm43xx/bcm43xx_pio.c | 606 ++++ drivers/net/wireless/bcm43xx/bcm43xx_pio.h | 138 + drivers/net/wireless/bcm43xx/bcm43xx_power.c | 358 ++ drivers/net/wireless/bcm43xx/bcm43xx_power.h | 47 drivers/net/wireless/bcm43xx/bcm43xx_radio.c | 2026 ++++++++++++ drivers/net/wireless/bcm43xx/bcm43xx_radio.h | 99 + drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c | 322 ++ drivers/net/wireless/bcm43xx/bcm43xx_sysfs.h | 25 drivers/net/wireless/bcm43xx/bcm43xx_wx.c | 1002 ++++++ drivers/net/wireless/bcm43xx/bcm43xx_wx.h | 36 drivers/net/wireless/bcm43xx/bcm43xx_xmit.c | 582 +++ drivers/net/wireless/bcm43xx/bcm43xx_xmit.h | 156 + drivers/net/wireless/hostap/hostap_80211.h | 2 drivers/net/wireless/hostap/hostap_80211_tx.c | 9 drivers/usb/net/zd1201.c | 2 net/ieee80211/ieee80211_wx.c | 4 net/ieee80211/softmac/ieee80211softmac_module.c | 17 net/ieee80211/softmac/ieee80211softmac_priv.h | 2 net/ieee80211/softmac/ieee80211softmac_wx.c | 12 39 files changed, 15605 insertions(+), 22 deletions(-) create mode 100644 Documentation/networking/bcm43xx.txt create mode 100644 drivers/net/wireless/bcm43xx/Kconfig create mode 100644 drivers/net/wireless/bcm43xx/Makefile create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_debugfs.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_dma.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_dma.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_ethtool.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_ilt.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_ilt.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_leds.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_leds.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_main.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_main.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_phy.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_phy.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_pio.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_pio.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_power.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_power.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_radio.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_radio.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_sysfs.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_wx.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_wx.h create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_xmit.c create mode 100644 drivers/net/wireless/bcm43xx/bcm43xx_xmit.h The bcm43xx patch is omitted from here due to size constraints. It is available here: http://www.kernel.org/pub/linux/kernel/people/linville/bcm43xx.patch diff -u b/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig --- b/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig @@ -404,6 +404,7 @@ config PCMCIA_SPECTRUM tristate "Symbol Spectrum24 Trilogy PCMCIA card support" depends on NET_RADIO && PCMCIA && HERMES + select FW_LOADER ---help--- This is a driver for 802.11b cards using RAM-loadable Symbol only in patch2: unchanged: --- a/drivers/net/wireless/hostap/hostap_80211.h +++ b/drivers/net/wireless/hostap/hostap_80211.h @@ -92,8 +92,6 @@ void hostap_dump_rx_80211(const char *na void hostap_dump_tx_80211(const char *name, struct sk_buff *skb); int hostap_data_start_xmit(struct sk_buff *skb, struct net_device *dev); int hostap_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev); -struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, - struct ieee80211_crypt_data *crypt); int hostap_master_start_xmit(struct sk_buff *skb, struct net_device *dev); #endif /* HOSTAP_80211_H */ only in patch2: unchanged: --- a/drivers/net/wireless/hostap/hostap_80211_tx.c +++ b/drivers/net/wireless/hostap/hostap_80211_tx.c @@ -299,8 +299,8 @@ int hostap_mgmt_start_xmit(struct sk_buf /* Called only from software IRQ */ -struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, - struct ieee80211_crypt_data *crypt) +static struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, + struct ieee80211_crypt_data *crypt) { struct hostap_interface *iface; local_info_t *local; @@ -317,7 +317,7 @@ struct sk_buff * hostap_tx_encrypt(struc } if (local->tkip_countermeasures && - crypt && crypt->ops && strcmp(crypt->ops->name, "TKIP") == 0) { + strcmp(crypt->ops->name, "TKIP") == 0) { hdr = (struct ieee80211_hdr_4addr *) skb->data; if (net_ratelimit()) { printk(KERN_DEBUG "%s: TKIP countermeasures: dropped " @@ -469,7 +469,7 @@ int hostap_master_start_xmit(struct sk_b } if (local->ieee_802_1x && meta->ethertype == ETH_P_PAE && tx.crypt && - !(fc & IEEE80211_FCTL_VERS)) { + !(fc & IEEE80211_FCTL_PROTECTED)) { no_encrypt = 1; PDEBUG(DEBUG_EXTRA2, "%s: TX: IEEE 802.1X - passing " "unencrypted EAPOL frame\n", dev->name); @@ -535,5 +535,4 @@ int hostap_master_start_xmit(struct sk_b EXPORT_SYMBOL(hostap_dump_tx_80211); -EXPORT_SYMBOL(hostap_tx_encrypt); EXPORT_SYMBOL(hostap_master_start_xmit); only in patch2: unchanged: --- a/drivers/usb/net/zd1201.c +++ b/drivers/usb/net/zd1201.c @@ -1736,6 +1736,7 @@ static const struct iw_handler_def zd120 .standard = (iw_handler *)zd1201_iw_handler, .private = (iw_handler *)zd1201_private_handler, .private_args = (struct iw_priv_args *) zd1201_private_args, + .get_wireless_stats = zd1201_get_wireless_stats, }; static int zd1201_probe(struct usb_interface *interface, @@ -1796,7 +1797,6 @@ static int zd1201_probe(struct usb_inter zd->dev->open = zd1201_net_open; zd->dev->stop = zd1201_net_stop; zd->dev->get_stats = zd1201_get_stats; - zd->dev->get_wireless_stats = zd1201_get_wireless_stats; zd->dev->wireless_handlers = (struct iw_handler_def *)&zd1201_iw_handlers; zd->dev->hard_start_xmit = zd1201_hard_start_xmit; only in patch2: unchanged: --- a/net/ieee80211/ieee80211_wx.c +++ b/net/ieee80211/ieee80211_wx.c @@ -42,7 +42,7 @@ static const char *ieee80211_modes[] = { }; #define MAX_CUSTOM_LEN 64 -static char *ipw2100_translate_scan(struct ieee80211_device *ieee, +static char *ieee80211_translate_scan(struct ieee80211_device *ieee, char *start, char *stop, struct ieee80211_network *network) { @@ -274,7 +274,7 @@ int ieee80211_wx_get_scan(struct ieee802 if (ieee->scan_age == 0 || time_after(network->last_scanned + ieee->scan_age, jiffies)) - ev = ipw2100_translate_scan(ieee, ev, stop, network); + ev = ieee80211_translate_scan(ieee, ev, stop, network); else IEEE80211_DEBUG_SCAN("Not showing network '%s (" MAC_FMT ")' due to age (%dms).\n", only in patch2: unchanged: --- a/net/ieee80211/softmac/ieee80211softmac_module.c +++ b/net/ieee80211/softmac/ieee80211softmac_module.c @@ -183,16 +183,21 @@ void ieee80211softmac_start(struct net_d */ if (mac->txrates_change) oldrates = mac->txrates; - if (ieee->modulation & IEEE80211_OFDM_MODULATION) { - mac->txrates.default_rate = IEEE80211_OFDM_RATE_54MB; - change |= IEEE80211SOFTMAC_TXRATECHG_DEFAULT; - mac->txrates.default_fallback = IEEE80211_OFDM_RATE_24MB; - change |= IEEE80211SOFTMAC_TXRATECHG_DEFAULT_FBACK; - } else if (ieee->modulation & IEEE80211_CCK_MODULATION) { + /* FIXME: We don't correctly handle backing down to lower + rates, so 801.11g devices start off at 11M for now. People + can manually change it if they really need to, but 11M is + more reliable. Note similar logic in + ieee80211softmac_wx_set_rate() */ + if (ieee->modulation & IEEE80211_CCK_MODULATION) { mac->txrates.default_rate = IEEE80211_CCK_RATE_11MB; change |= IEEE80211SOFTMAC_TXRATECHG_DEFAULT; mac->txrates.default_fallback = IEEE80211_CCK_RATE_5MB; change |= IEEE80211SOFTMAC_TXRATECHG_DEFAULT_FBACK; + } else if (ieee->modulation & IEEE80211_OFDM_MODULATION) { + mac->txrates.default_rate = IEEE80211_OFDM_RATE_54MB; + change |= IEEE80211SOFTMAC_TXRATECHG_DEFAULT; + mac->txrates.default_fallback = IEEE80211_OFDM_RATE_24MB; + change |= IEEE80211SOFTMAC_TXRATECHG_DEFAULT_FBACK; } else assert(0); if (mac->txrates_change) only in patch2: unchanged: --- a/net/ieee80211/softmac/ieee80211softmac_priv.h +++ b/net/ieee80211/softmac/ieee80211softmac_priv.h @@ -167,7 +167,7 @@ static inline int ieee80211softmac_scan_ ) || ieee80211softmac_scan_handlers_check_self(sm); } -#define IEEE80211SOFTMAC_PROBE_DELAY HZ/2 +#define IEEE80211SOFTMAC_PROBE_DELAY HZ/50 #define IEEE80211SOFTMAC_WORKQUEUE_NAME_LEN (17 + IFNAMSIZ) struct ieee80211softmac_network { only in patch2: unchanged: --- a/net/ieee80211/softmac/ieee80211softmac_wx.c +++ b/net/ieee80211/softmac/ieee80211softmac_wx.c @@ -135,11 +135,15 @@ ieee80211softmac_wx_set_rate(struct net_ int err = -EINVAL; if (in_rate == -1) { - /* automatic detect */ - if (ieee->modulation & IEEE80211_OFDM_MODULATION) - in_rate = 54000000; - else + /* FIXME: We don't correctly handle backing down to lower + rates, so 801.11g devices start off at 11M for now. People + can manually change it if they really need to, but 11M is + more reliable. Note similar logic in + ieee80211softmac_wx_set_rate() */ + if (ieee->modulation & IEEE80211_CCK_MODULATION) in_rate = 11000000; + else + in_rate = 54000000; } switch (in_rate) { -- John W. Linville [EMAIL PROTECTED] - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html