diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/mlme.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 10ac6324c1d0..cf3ae9348a9d 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -3419,6 +3419,26 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, | |||
3419 | if (ifmgd->csa_waiting_bcn) | 3419 | if (ifmgd->csa_waiting_bcn) |
3420 | ieee80211_chswitch_post_beacon(sdata); | 3420 | ieee80211_chswitch_post_beacon(sdata); |
3421 | 3421 | ||
3422 | /* | ||
3423 | * Update beacon timing and dtim count on every beacon appearance. This | ||
3424 | * will allow the driver to use the most updated values. Do it before | ||
3425 | * comparing this one with last received beacon. | ||
3426 | * IMPORTANT: These parameters would possibly be out of sync by the time | ||
3427 | * the driver will use them. The synchronized view is currently | ||
3428 | * guaranteed only in certain callbacks. | ||
3429 | */ | ||
3430 | if (local->hw.flags & IEEE80211_HW_TIMING_BEACON_ONLY) { | ||
3431 | sdata->vif.bss_conf.sync_tsf = | ||
3432 | le64_to_cpu(mgmt->u.beacon.timestamp); | ||
3433 | sdata->vif.bss_conf.sync_device_ts = | ||
3434 | rx_status->device_timestamp; | ||
3435 | if (elems.tim) | ||
3436 | sdata->vif.bss_conf.sync_dtim_count = | ||
3437 | elems.tim->dtim_count; | ||
3438 | else | ||
3439 | sdata->vif.bss_conf.sync_dtim_count = 0; | ||
3440 | } | ||
3441 | |||
3422 | if (ncrc == ifmgd->beacon_crc && ifmgd->beacon_crc_valid) | 3442 | if (ncrc == ifmgd->beacon_crc && ifmgd->beacon_crc_valid) |
3423 | return; | 3443 | return; |
3424 | ifmgd->beacon_crc = ncrc; | 3444 | ifmgd->beacon_crc = ncrc; |
@@ -3446,18 +3466,6 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, | |||
3446 | else | 3466 | else |
3447 | bss_conf->dtim_period = 1; | 3467 | bss_conf->dtim_period = 1; |
3448 | 3468 | ||
3449 | if (local->hw.flags & IEEE80211_HW_TIMING_BEACON_ONLY) { | ||
3450 | sdata->vif.bss_conf.sync_tsf = | ||
3451 | le64_to_cpu(mgmt->u.beacon.timestamp); | ||
3452 | sdata->vif.bss_conf.sync_device_ts = | ||
3453 | rx_status->device_timestamp; | ||
3454 | if (elems.tim) | ||
3455 | sdata->vif.bss_conf.sync_dtim_count = | ||
3456 | elems.tim->dtim_count; | ||
3457 | else | ||
3458 | sdata->vif.bss_conf.sync_dtim_count = 0; | ||
3459 | } | ||
3460 | |||
3461 | changed |= BSS_CHANGED_BEACON_INFO; | 3469 | changed |= BSS_CHANGED_BEACON_INFO; |
3462 | ifmgd->have_beacon = true; | 3470 | ifmgd->have_beacon = true; |
3463 | 3471 | ||