Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: net/mac80211/scan.c
This commit is contained in:
Коммит
6e7e6213e4
|
@ -812,12 +812,11 @@ static void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath9k_hw_init_11a_eeprom_fix(struct ath_hw *ah)
|
static void ath9k_hw_init_eeprom_fix(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
u32 i, j;
|
u32 i, j;
|
||||||
|
|
||||||
if ((ah->hw_version.devid == AR9280_DEVID_PCI) &&
|
if (ah->hw_version.devid == AR9280_DEVID_PCI) {
|
||||||
test_bit(ATH9K_MODE_11A, ah->caps.wireless_modes)) {
|
|
||||||
|
|
||||||
/* EEPROM Fixup */
|
/* EEPROM Fixup */
|
||||||
for (i = 0; i < ah->iniModes.ia_rows; i++) {
|
for (i = 0; i < ah->iniModes.ia_rows; i++) {
|
||||||
|
@ -937,7 +936,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
ath9k_hw_init_11a_eeprom_fix(ah);
|
ath9k_hw_init_eeprom_fix(ah);
|
||||||
|
|
||||||
r = ath9k_hw_init_macaddr(ah);
|
r = ath9k_hw_init_macaddr(ah);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -1472,10 +1472,10 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,
|
||||||
(sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) {
|
(sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) {
|
||||||
ath9k_ps_wakeup(sc);
|
ath9k_ps_wakeup(sc);
|
||||||
ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
|
ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
|
||||||
ath_beacon_return(sc, avp);
|
|
||||||
ath9k_ps_restore(sc);
|
ath9k_ps_restore(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ath_beacon_return(sc, avp);
|
||||||
sc->sc_flags &= ~SC_OP_BEACONS;
|
sc->sc_flags &= ~SC_OP_BEACONS;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) {
|
for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) {
|
||||||
|
|
|
@ -115,6 +115,7 @@
|
||||||
#define B43_MMIO_TSF_2 0x636 /* core rev < 3 only */
|
#define B43_MMIO_TSF_2 0x636 /* core rev < 3 only */
|
||||||
#define B43_MMIO_TSF_3 0x638 /* core rev < 3 only */
|
#define B43_MMIO_TSF_3 0x638 /* core rev < 3 only */
|
||||||
#define B43_MMIO_RNG 0x65A
|
#define B43_MMIO_RNG 0x65A
|
||||||
|
#define B43_MMIO_IFSSLOT 0x684 /* Interframe slot time */
|
||||||
#define B43_MMIO_IFSCTL 0x688 /* Interframe space control */
|
#define B43_MMIO_IFSCTL 0x688 /* Interframe space control */
|
||||||
#define B43_MMIO_IFSCTL_USE_EDCF 0x0004
|
#define B43_MMIO_IFSCTL_USE_EDCF 0x0004
|
||||||
#define B43_MMIO_POWERUP_DELAY 0x6A8
|
#define B43_MMIO_POWERUP_DELAY 0x6A8
|
||||||
|
|
|
@ -637,10 +637,17 @@ static void b43_upload_card_macaddress(struct b43_wldev *dev)
|
||||||
static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time)
|
static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time)
|
||||||
{
|
{
|
||||||
/* slot_time is in usec. */
|
/* slot_time is in usec. */
|
||||||
if (dev->phy.type != B43_PHYTYPE_G)
|
/* This test used to exit for all but a G PHY. */
|
||||||
|
if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ)
|
||||||
return;
|
return;
|
||||||
b43_write16(dev, 0x684, 510 + slot_time);
|
b43_write16(dev, B43_MMIO_IFSSLOT, 510 + slot_time);
|
||||||
b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time);
|
/* Shared memory location 0x0010 is the slot time and should be
|
||||||
|
* set to slot_time; however, this register is initially 0 and changing
|
||||||
|
* the value adversely affects the transmit rate for BCM4311
|
||||||
|
* devices. Until this behavior is unterstood, delete this step
|
||||||
|
*
|
||||||
|
* b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void b43_short_slot_timing_enable(struct b43_wldev *dev)
|
static void b43_short_slot_timing_enable(struct b43_wldev *dev)
|
||||||
|
|
|
@ -2787,6 +2787,7 @@ int iwl_mac_config(struct ieee80211_hw *hw, u32 changed)
|
||||||
if ((le16_to_cpu(priv->staging_rxon.channel) != ch))
|
if ((le16_to_cpu(priv->staging_rxon.channel) != ch))
|
||||||
priv->staging_rxon.flags = 0;
|
priv->staging_rxon.flags = 0;
|
||||||
|
|
||||||
|
iwl_set_rxon_ht(priv, ht_conf);
|
||||||
iwl_set_rxon_channel(priv, conf->channel);
|
iwl_set_rxon_channel(priv, conf->channel);
|
||||||
|
|
||||||
iwl_set_flags_for_band(priv, conf->channel->band);
|
iwl_set_flags_for_band(priv, conf->channel->band);
|
||||||
|
|
|
@ -339,7 +339,7 @@ u8 iwl_add_station(struct iwl_priv *priv, const u8 *addr, bool is_ap, u8 flags,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iwl_add_station);
|
EXPORT_SYMBOL(iwl_add_station);
|
||||||
|
|
||||||
static void iwl_sta_ucode_deactivate(struct iwl_priv *priv, const char *addr)
|
static void iwl_sta_ucode_deactivate(struct iwl_priv *priv, const u8 *addr)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u8 sta_id = iwl_find_station(priv, addr);
|
u8 sta_id = iwl_find_station(priv, addr);
|
||||||
|
@ -366,7 +366,7 @@ static void iwl_remove_sta_callback(struct iwl_priv *priv,
|
||||||
{
|
{
|
||||||
struct iwl_rem_sta_cmd *rm_sta =
|
struct iwl_rem_sta_cmd *rm_sta =
|
||||||
(struct iwl_rem_sta_cmd *)cmd->cmd.payload;
|
(struct iwl_rem_sta_cmd *)cmd->cmd.payload;
|
||||||
const char *addr = rm_sta->addr;
|
const u8 *addr = rm_sta->addr;
|
||||||
|
|
||||||
if (pkt->hdr.flags & IWL_CMD_FAILED_MSK) {
|
if (pkt->hdr.flags & IWL_CMD_FAILED_MSK) {
|
||||||
IWL_ERR(priv, "Bad return from REPLY_REMOVE_STA (0x%08X)\n",
|
IWL_ERR(priv, "Bad return from REPLY_REMOVE_STA (0x%08X)\n",
|
||||||
|
|
|
@ -494,8 +494,7 @@ static int ssb_devices_register(struct ssb_bus *bus)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case SSB_BUSTYPE_SDIO:
|
case SSB_BUSTYPE_SDIO:
|
||||||
#ifdef CONFIG_SSB_SDIO
|
#ifdef CONFIG_SSB_SDIOHOST
|
||||||
sdev->irq = bus->host_sdio->dev.irq;
|
|
||||||
dev->parent = &bus->host_sdio->dev;
|
dev->parent = &bus->host_sdio->dev;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -708,7 +708,7 @@ TRACE_EVENT(drv_ampdu_action,
|
||||||
__entry->ret = ret;
|
__entry->ret = ret;
|
||||||
__entry->action = action;
|
__entry->action = action;
|
||||||
__entry->tid = tid;
|
__entry->tid = tid;
|
||||||
__entry->ssn = *ssn;
|
__entry->ssn = ssn ? *ssn : 0;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
|
|
|
@ -652,7 +652,7 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
|
||||||
}
|
}
|
||||||
if (pos[1] != 0 &&
|
if (pos[1] != 0 &&
|
||||||
(pos[1] != ifibss->ssid_len ||
|
(pos[1] != ifibss->ssid_len ||
|
||||||
!memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) {
|
memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) {
|
||||||
/* Ignore ProbeReq for foreign SSID */
|
/* Ignore ProbeReq for foreign SSID */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -345,6 +345,13 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
|
||||||
if (local->scan_req)
|
if (local->scan_req)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
|
if (!list_empty(&local->work_list)) {
|
||||||
|
/* wait for the work to finish/time out */
|
||||||
|
local->scan_req = req;
|
||||||
|
local->scan_sdata = sdata;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (local->ops->hw_scan) {
|
if (local->ops->hw_scan) {
|
||||||
u8 *ies;
|
u8 *ies;
|
||||||
|
|
||||||
|
@ -364,29 +371,33 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
|
||||||
local->hw_scan_req->ie = ies;
|
local->hw_scan_req->ie = ies;
|
||||||
|
|
||||||
local->hw_scan_band = 0;
|
local->hw_scan_band = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* After allocating local->hw_scan_req, we must
|
||||||
|
* go through until ieee80211_prep_hw_scan(), so
|
||||||
|
* anything that might be changed here and leave
|
||||||
|
* this function early must not go after this
|
||||||
|
* allocation.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
local->scan_req = req;
|
local->scan_req = req;
|
||||||
local->scan_sdata = sdata;
|
local->scan_sdata = sdata;
|
||||||
|
|
||||||
if (!list_empty(&local->work_list)) {
|
|
||||||
/* wait for the work to finish/time out */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (local->ops->hw_scan)
|
if (local->ops->hw_scan)
|
||||||
__set_bit(SCAN_HW_SCANNING, &local->scanning);
|
__set_bit(SCAN_HW_SCANNING, &local->scanning);
|
||||||
else
|
else
|
||||||
__set_bit(SCAN_SW_SCANNING, &local->scanning);
|
__set_bit(SCAN_SW_SCANNING, &local->scanning);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Kicking off the scan need not be protected,
|
* Kicking off the scan need not be protected,
|
||||||
* only the scan variable stuff, since now
|
* only the scan variable stuff, since now
|
||||||
* local->scan_req is assigned and other callers
|
* local->scan_req is assigned and other callers
|
||||||
* will abort their scan attempts.
|
* will abort their scan attempts.
|
||||||
*
|
*
|
||||||
* This avoids getting a scan_mtx -> iflist_mtx
|
* This avoids too many locking dependencies
|
||||||
* dependency, so that the scan completed calls
|
* so that the scan completed calls have more
|
||||||
* have more locking freedom.
|
* locking freedom.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ieee80211_recalc_idle(local);
|
ieee80211_recalc_idle(local);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче