Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts: drivers/net/wireless/libertas_tf/cmd.c drivers/net/wireless/libertas_tf/main.c
This commit is contained in:
@@ -85,7 +85,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
|
||||
{
|
||||
struct cfg80211_bss *cbss;
|
||||
struct ieee80211_bss *bss;
|
||||
int clen;
|
||||
int clen, srlen;
|
||||
s32 signal = 0;
|
||||
|
||||
if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
|
||||
@@ -114,23 +114,24 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
|
||||
bss->dtim_period = tim_ie->dtim_period;
|
||||
}
|
||||
|
||||
bss->supp_rates_len = 0;
|
||||
/* replace old supported rates if we get new values */
|
||||
srlen = 0;
|
||||
if (elems->supp_rates) {
|
||||
clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;
|
||||
clen = IEEE80211_MAX_SUPP_RATES;
|
||||
if (clen > elems->supp_rates_len)
|
||||
clen = elems->supp_rates_len;
|
||||
memcpy(&bss->supp_rates[bss->supp_rates_len], elems->supp_rates,
|
||||
clen);
|
||||
bss->supp_rates_len += clen;
|
||||
memcpy(bss->supp_rates, elems->supp_rates, clen);
|
||||
srlen += clen;
|
||||
}
|
||||
if (elems->ext_supp_rates) {
|
||||
clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;
|
||||
clen = IEEE80211_MAX_SUPP_RATES - srlen;
|
||||
if (clen > elems->ext_supp_rates_len)
|
||||
clen = elems->ext_supp_rates_len;
|
||||
memcpy(&bss->supp_rates[bss->supp_rates_len],
|
||||
elems->ext_supp_rates, clen);
|
||||
bss->supp_rates_len += clen;
|
||||
memcpy(bss->supp_rates + srlen, elems->ext_supp_rates, clen);
|
||||
srlen += clen;
|
||||
}
|
||||
if (srlen)
|
||||
bss->supp_rates_len = srlen;
|
||||
|
||||
bss->wmm_used = elems->wmm_param || elems->wmm_info;
|
||||
bss->uapsd_supported = is_uapsd_supported(elems);
|
||||
@@ -411,7 +412,7 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
if (local->ops->hw_scan) {
|
||||
WARN_ON(!ieee80211_prep_hw_scan(local));
|
||||
rc = drv_hw_scan(local, local->hw_scan_req);
|
||||
rc = drv_hw_scan(local, sdata, local->hw_scan_req);
|
||||
} else
|
||||
rc = ieee80211_start_sw_scan(local);
|
||||
|
||||
@@ -655,7 +656,7 @@ void ieee80211_scan_work(struct work_struct *work)
|
||||
}
|
||||
|
||||
if (local->hw_scan_req) {
|
||||
int rc = drv_hw_scan(local, local->hw_scan_req);
|
||||
int rc = drv_hw_scan(local, sdata, local->hw_scan_req);
|
||||
mutex_unlock(&local->scan_mtx);
|
||||
if (rc)
|
||||
ieee80211_scan_completed(&local->hw, true);
|
||||
@@ -728,10 +729,12 @@ int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
|
||||
}
|
||||
|
||||
int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
|
||||
const u8 *ssid, u8 ssid_len)
|
||||
const u8 *ssid, u8 ssid_len,
|
||||
struct ieee80211_channel *chan)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
int ret = -EBUSY;
|
||||
enum nl80211_band band;
|
||||
|
||||
mutex_lock(&local->scan_mtx);
|
||||
|
||||
@@ -739,6 +742,30 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
|
||||
if (local->scan_req)
|
||||
goto unlock;
|
||||
|
||||
/* fill internal scan request */
|
||||
if (!chan) {
|
||||
int i, nchan = 0;
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
||||
if (!local->hw.wiphy->bands[band])
|
||||
continue;
|
||||
for (i = 0;
|
||||
i < local->hw.wiphy->bands[band]->n_channels;
|
||||
i++) {
|
||||
local->int_scan_req->channels[nchan] =
|
||||
&local->hw.wiphy->bands[band]->channels[i];
|
||||
nchan++;
|
||||
}
|
||||
}
|
||||
|
||||
local->int_scan_req->n_channels = nchan;
|
||||
} else {
|
||||
local->int_scan_req->channels[0] = chan;
|
||||
local->int_scan_req->n_channels = 1;
|
||||
}
|
||||
|
||||
local->int_scan_req->ssids = &local->scan_ssid;
|
||||
local->int_scan_req->n_ssids = 1;
|
||||
memcpy(local->int_scan_req->ssids[0].ssid, ssid, IEEE80211_MAX_SSID_LEN);
|
||||
local->int_scan_req->ssids[0].ssid_len = ssid_len;
|
||||
|
||||
|
Fai riferimento in un nuovo problema
Block a user