pull request: wireless 2012-08-03
Subsystems (7)
commit d4e5979c0da95791aa717c18e162540c7a596360
Dave,
This request covers a batch of fixes intended for the 3.6 stream.
Daniel Drake provides a pair of libertas fixes: one to avoid unnecessary resets in order to keep the MMC layer happy; and another to correct a couple of memory leaks.
Eliad Peller gives us a mac80211 fix for an issue that could fail to notify userland of a completed scan.
Johannes Berg provides "a few fixes for various things [Johannes] found doing code inspection for [his] multi-channel work".
Mohammed Shafi Shajakhan provides a simple hardware-enablement (i.e. device ID) patch for ath9k.
Paul Stewart provides a cfg80211 fix to ensure that the presence of beacons on a channel is recorded correctly.
Rafał Miłecki gives us a bcma device ID patch to support BCM43228 devices, and a b43 GPIO fix.
Seth Forshee provide a pair of patches to properly expose some regulatory information needed by brcmsmac. This corrects a lockdep issue created by a patch that is already in the tree.
Stanislaw Gruszka provides a regulatory code fix to correct an earlier regression with the rt2x00 drivers.
Woody Hung offers an rt2x00 fix to correct a regression when resuming an rt3290 device from S3/S4. This one seems big, but most of its size comes from moving a function between two source files.
Please let me know if there are problems!
Thanks,
John
---
The following changes since commit e33cdac014d50dd9753e1399ae8b0b5cd98d7aa0:
ipv4: route.c cleanup (2012-08-02 02:54:43 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless.git tags/master-2012-08-03
for you to fetch changes up to d4e5979c0da95791aa717c18e162540c7a596360:
ath9k: Add PID/VID support for AR1111 (2012-08-03 10:11:14 -0400)
----------------------------------------------------------------
Daniel Drake (2):
libertas: don't reset card on error when it is being removed
libertas: fix two memory leaks
Eliad Peller (1):
mac80211: don't clear sched_scan_sdata on sched scan stop request
Johannes Berg (4):
mac80211: fix scan_sdata assignment
Merge remote-tracking branch 'wireless/master' into mac80211
mac80211: clear timer bits when disconnecting
mac80211: cancel mesh path timer
John W. Linville (1):
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211
Mohammed Shafi Shajakhan (1):
ath9k: Add PID/VID support for AR1111
Paul Stewart (1):
cfg80211: Clear "beacon_found" on regulatory restore
Rafał Miłecki (2):
bcma: BCM43228 support
b43: fix logic in GPIO init
Seth Forshee (2):
cfg80211: add channel flag to prohibit OFDM operation
brcmsmac: use channel flags to restrict OFDM
Stanislaw Gruszka (1):
wireless: reg: restore previous behaviour of chan->max_power calculations
Woody Hung (1):
rt2x00 : fix rt3290 resuming failed.
drivers/bcma/host_pci.c | 1 + drivers/bcma/sprom.c | 4 +- drivers/net/wireless/ath/ath9k/hw.c | 1 + drivers/net/wireless/ath/ath9k/hw.h | 1 + drivers/net/wireless/ath/ath9k/pci.c | 1 + drivers/net/wireless/b43/main.c | 21 +++--- drivers/net/wireless/brcm80211/brcmsmac/channel.c | 5 +- .../net/wireless/brcm80211/brcmsmac/mac80211_if.c | 3 +- drivers/net/wireless/libertas/cfg.c | 1 + drivers/net/wireless/libertas/if_sdio.c | 1 + drivers/net/wireless/libertas/main.c | 5 +- drivers/net/wireless/rt2x00/rt2800lib.c | 68 +++++++++++++++++++ drivers/net/wireless/rt2x00/rt2800pci.c | 71 -------------------- include/linux/bcma/bcma_driver_chipcommon.h | 6 ++ include/net/cfg80211.h | 2 + net/mac80211/mesh.c | 3 + net/mac80211/mlme.c | 2 + net/mac80211/scan.c | 3 +- net/wireless/reg.c | 19 +++++- 19 files changed, 129 insertions(+), 89 deletions(-)
drivers/bcma/host_pci.c +1 -0
@@ -272,6 +272,7 @@ static DEFINE_PCI_DEVICE_TABLE(bcma_pci_bridge_tbl) = { { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4331) }, { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4353) }, { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4357) }, + { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4359) }, { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4727) }, { 0, }, };
drivers/bcma/sprom.c +3 -1
@@ -507,7 +507,9 @@ static bool bcma_sprom_onchip_available(struct bcma_bus *bus)/* for these chips OTP is always available */ present = true;break ; - +case BCMA_CHIP_ID_BCM43228 : + present = chip_status &BCMA_CC_CHIPST_43228_OTP_PRESENT ; +break ;default : present = false;break ;
drivers/net/wireless/ath/ath9k/hw.c +1 -0
@@ -730,6 +730,7 @@ int ath9k_hw_init(struct ath_hw *ah)case AR9300_DEVID_QCA955X :case AR9300_DEVID_AR9580 :case AR9300_DEVID_AR9462 : +case AR9485_DEVID_AR1111 :break ;default :if (common->bus_ops->ath_bus_type ==ATH_USB )
drivers/net/wireless/ath/ath9k/hw.h +1 -0
@@ -49,6 +49,7 @@#define AR9300_DEVID_AR9462 0x0034#define AR9300_DEVID_AR9330 0x0035#define AR9300_DEVID_QCA955X 0x0038 +#define AR9485_DEVID_AR1111 0x0037#define AR5416_AR9100_DEVID 0x000b
drivers/net/wireless/ath/ath9k/pci.c +1 -0
@@ -37,6 +37,7 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = { { PCI_VDEVICE(ATHEROS, 0x0032) }, /* PCI-E AR9485 */ { PCI_VDEVICE(ATHEROS, 0x0033) }, /* PCI-E AR9580 */ { PCI_VDEVICE(ATHEROS, 0x0034) }, /* PCI-E AR9462 */ + { PCI_VDEVICE(ATHEROS, 0x0037) }, /* PCI-E AR1111/AR9485 */ { 0 } };
drivers/net/wireless/b43/main.c +13 -8
@@ -2719,32 +2719,37 @@ static int b43_gpio_init(struct b43_wldev *dev)if (dev->dev->chip_id ==0x4301 ) { mask |=0x0060 ; set |=0x0060 ; + }else if (dev->dev->chip_id ==0x5354 ) { +/* Don't allow overtaking buttons GPIOs */ + set &=0x2 ;/* 0x2 is LED GPIO on BCM5354 */ } -if (dev->dev->chip_id ==0x5354 ) - set &=0xff02 ; +if (0 /* FIXME: conditional unknown */ ) {b43_write16 (dev,B43_MMIO_GPIO_MASK ,b43_read16 (dev,B43_MMIO_GPIO_MASK ) |0x0100 ); - mask |=0x0180 ; - set |=0x0180 ; +/* BT Coexistance Input */ + mask |=0x0080 ; + set |=0x0080 ; +/* BT Coexistance Out */ + mask |=0x0100 ; + set |=0x0100 ; }if (dev->dev->bus_sprom->boardflags_lo &B43_BFL_PACTRL ) { +/* PA is controlled by gpio 9, let ucode handle it */ b43_write16 (dev,B43_MMIO_GPIO_MASK ,b43_read16 (dev,B43_MMIO_GPIO_MASK ) |0x0200 ); mask |=0x0200 ; set |=0x0200 ; } -if (dev->dev->core_rev >=2 ) - mask |=0x0010 ;/* FIXME: This is redundant. */ switch (dev->dev->bus_type) {#ifdef CONFIG_B43_BCMA case B43_BUS_BCMA :bcma_cc_write32 (&dev->dev->bdev->bus->drv_cc,BCMA_CC_GPIOCTL , (bcma_cc_read32 (&dev->dev->bdev->bus->drv_cc, -BCMA_CC_GPIOCTL ) & mask) | set); +BCMA_CC_GPIOCTL ) & ~mask) | set);break ;#endif #ifdef CONFIG_B43_SSB
@@ -2753,7 +2758,7 @@ static int b43_gpio_init(struct b43_wldev *dev)if (gpiodev)ssb_write32 (gpiodev,B43_GPIO_CONTROL , (ssb_read32 (gpiodev,B43_GPIO_CONTROL ) - & mask) | set); + & ~mask) | set);break ;#endif }
drivers/net/wireless/brcm80211/brcmsmac/channel.c +1 -4
@@ -382,9 +382,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec, {struct brcms_c_info *wlc = wlc_cm->wlc;struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel; -const struct ieee80211_reg_rule *reg_rule;struct txpwr_limits txpwr; -int ret;brcms_c_channel_reg_limits (wlc_cm, chanspec, &txpwr);
@@ -393,8 +391,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec, );/* set or restore gmode as required by regulatory */ - ret =freq_reg_info (wlc->wiphy, ch->center_freq,0 , ®_rule); -if (!ret && (reg_rule->flags &NL80211_RRF_NO_OFDM )) +if (ch->flags &IEEE80211_CHAN_NO_OFDM )brcms_c_set_gmode (wlc,GMODE_LEGACY_B , false);else brcms_c_set_gmode (wlc, wlc->protection->gmode_user, false);
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +2 -1
@@ -121,7 +121,8 @@ static struct ieee80211_channel brcms_2ghz_chantable[] = { IEEE80211_CHAN_NO_HT40PLUS),CHAN2GHZ (14 ,2484 ,IEEE80211_CHAN_PASSIVE_SCAN |IEEE80211_CHAN_NO_IBSS | -IEEE80211_CHAN_NO_HT40PLUS |IEEE80211_CHAN_NO_HT40MINUS ) +IEEE80211_CHAN_NO_HT40PLUS |IEEE80211_CHAN_NO_HT40MINUS | +IEEE80211_CHAN_NO_OFDM ) }; static struct ieee80211_channel brcms_5ghz_nphy_chantable[] = {
drivers/net/wireless/libertas/cfg.c +1 -0
@@ -1254,6 +1254,7 @@ static int lbs_associate(struct lbs_private *priv,netif_tx_wake_all_queues (priv->dev); } +kfree (cmd); done:lbs_deb_leave_args (LBS_DEB_CFG80211 ,"ret %d" , ret);return ret;
drivers/net/wireless/libertas/if_sdio.c +1 -0
@@ -1314,6 +1314,7 @@ static void if_sdio_remove(struct sdio_func *func)kfree (packet); } +kfree (card);lbs_deb_leave (LBS_DEB_SDIO ); }
drivers/net/wireless/libertas/main.c +4 -1
@@ -571,7 +571,10 @@ static int lbs_thread(void *data)netdev_info (dev,"Timeout submitting command 0x%04x\n" ,le16_to_cpu (cmdnode->cmdbuf->command));lbs_complete_command (priv, cmdnode, -ETIMEDOUT ); -if (priv->reset_card) + +/* Reset card, but only when it isn't in the process +* of being shutdown anyway. */ +if (!dev->dismantle && priv->reset_card) priv->reset_card (priv); } priv->cmd_timed_out =0 ;
drivers/net/wireless/rt2x00/rt2800lib.c +68 -0
80 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2800pci.c +0 -71
83 lines not on this page · raw message
include/linux/bcma/bcma_driver_chipcommon.h +6 -0
@@ -89,6 +89,12 @@#define BCMA_CC_CHIPST_4313_OTP_PRESENT 2#define BCMA_CC_CHIPST_4331_SPROM_PRESENT 2#define BCMA_CC_CHIPST_4331_OTP_PRESENT 4 +#define BCMA_CC_CHIPST_43228_ILP_DIV_EN 0x00000001 +#define BCMA_CC_CHIPST_43228_OTP_PRESENT 0x00000002 +#define BCMA_CC_CHIPST_43228_SERDES_REFCLK_PADSEL 0x00000004 +#define BCMA_CC_CHIPST_43228_SDIO_MODE 0x00000008 +#define BCMA_CC_CHIPST_43228_SDIO_OTP_PRESENT 0x00000010 +#define BCMA_CC_CHIPST_43228_SDIO_RESET 0x00000020#define BCMA_CC_CHIPST_4706_PKG_OPTION BIT(0)/* 0: full-featured package 1: low-cost package */ #define BCMA_CC_CHIPST_4706_SFLASH_PRESENT BIT(1)/* 0: parallel, 1: serial flash is present */ #define BCMA_CC_CHIPST_4706_SFLASH_TYPE BIT(2)/* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */
include/net/cfg80211.h +2 -0
@@ -96,6 +96,7 @@ enum ieee80211_band {* is not permitted. * @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel * is not permitted. +* @IEEE80211_CHAN_NO_OFDM: OFDM is not allowed on this channel. */ enum ieee80211_channel_flags {IEEE80211_CHAN_DISABLED =1 <<0 ,
@@ -104,6 +105,7 @@ enum ieee80211_channel_flags {IEEE80211_CHAN_RADAR =1 <<3 ,IEEE80211_CHAN_NO_HT40PLUS =1 <<4 ,IEEE80211_CHAN_NO_HT40MINUS =1 <<5 , + IEEE80211_CHAN_NO_OFDM = 1<<6, };#define IEEE80211_CHAN_NO_HT40 \
net/mac80211/mesh.c +3 -0
@@ -622,6 +622,7 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)del_timer_sync (&sdata->u.mesh.housekeeping_timer);del_timer_sync (&sdata->u.mesh.mesh_path_root_timer); +del_timer_sync (&sdata->u.mesh.mesh_path_timer);/* * If the timer fired while we waited for it, it will have * requeued the work. Now the work will be running again
@@ -634,6 +635,8 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) local->fif_other_bss--;atomic_dec (&local->iff_allmultis);ieee80211_configure_filter (local); + + sdata->u.mesh.timers_running =0 ; } static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
net/mac80211/mlme.c +2 -0
@@ -1430,6 +1430,8 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,del_timer_sync (&sdata->u.mgd.bcn_mon_timer);del_timer_sync (&sdata->u.mgd.timer);del_timer_sync (&sdata->u.mgd.chswitch_timer); + + sdata->u.mgd.timers_running =0 ; } void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
net/mac80211/scan.c +1 -2
@@ -299,7 +299,7 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted,if (local->scan_req != local->int_scan_req)cfg80211_scan_done (local->scan_req, aborted); local->scan_req =NULL ; - local->scan_sdata =NULL ; +rcu_assign_pointer (local->scan_sdata,NULL ); local->scanning =0 ; local->scan_channel =NULL ;
@@ -984,7 +984,6 @@ int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata)kfree (local->sched_scan_ies.ie[i]);drv_sched_scan_stop (local, sdata); -rcu_assign_pointer (local->sched_scan_sdata,NULL ); } out:mutex_unlock (&local->mtx);
net/wireless/reg.c +18 -1
@@ -680,6 +680,8 @@ static u32 map_regdom_flags(u32 rd_flags) channel_flags |=IEEE80211_CHAN_NO_IBSS ;if (rd_flags &NL80211_RRF_DFS ) channel_flags |=IEEE80211_CHAN_RADAR ; +if (rd_flags &NL80211_RRF_NO_OFDM ) + channel_flags |=IEEE80211_CHAN_NO_OFDM ;return channel_flags; }
@@ -901,7 +903,21 @@ static void handle_channel(struct wiphy *wiphy, chan->max_antenna_gain =min (chan->orig_mag, (int )MBI_TO_DBI (power_rule->max_antenna_gain)); chan->max_reg_power = (int )MBM_TO_DBM (power_rule->max_eirp); - chan->max_power =min (chan->max_power, chan->max_reg_power); +if (chan->orig_mpwr) { +/* +* Devices that have their own custom regulatory domain +* but also use WIPHY_FLAG_STRICT_REGULATORY will follow the +* passed country IE power settings. +*/ +if (initiator ==NL80211_REGDOM_SET_BY_COUNTRY_IE && + wiphy->flags &WIPHY_FLAG_CUSTOM_REGULATORY && + wiphy->flags &WIPHY_FLAG_STRICT_REGULATORY ) + chan->max_power = chan->max_reg_power; +else + chan->max_power =min (chan->orig_mpwr, + chan->max_reg_power); + }else + chan->max_power = chan->max_reg_power; } static void handle_band(struct wiphy *wiphy,
@@ -1885,6 +1901,7 @@ static void restore_custom_reg_settings(struct wiphy *wiphy) chan->flags = chan->orig_flags; chan->max_antenna_gain = chan->orig_mag; chan->max_power = chan->orig_mpwr; + chan->beacon_found = false; } } }
Signature · 2 lines
John W. Linville Someday the world will need a hero, and you [email protected] might be all we have. Be ready.
David Miller
maintainerFrom: "John W. Linville" <[email protected]>
Date: Fri, 3 Aug 2012 10:56:04 -0400
Quoted 1 line
This request covers a batch of fixes intended for the 3.6 stream.
Pulled, thanks John.