These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / net / mac80211 / mesh_ps.c
index ad8b377..90a268a 100644 (file)
@@ -92,16 +92,16 @@ u32 ieee80211_mps_local_status_update(struct ieee80211_sub_if_data *sdata)
                if (sdata != sta->sdata)
                        continue;
 
-               switch (sta->plink_state) {
+               switch (sta->mesh->plink_state) {
                case NL80211_PLINK_OPN_SNT:
                case NL80211_PLINK_OPN_RCVD:
                case NL80211_PLINK_CNF_RCVD:
                        peering = true;
                        break;
                case NL80211_PLINK_ESTAB:
-                       if (sta->local_pm == NL80211_MESH_POWER_LIGHT_SLEEP)
+                       if (sta->mesh->local_pm == NL80211_MESH_POWER_LIGHT_SLEEP)
                                light_sleep_cnt++;
-                       else if (sta->local_pm == NL80211_MESH_POWER_DEEP_SLEEP)
+                       else if (sta->mesh->local_pm == NL80211_MESH_POWER_DEEP_SLEEP)
                                deep_sleep_cnt++;
                        break;
                default:
@@ -153,19 +153,19 @@ u32 ieee80211_mps_set_sta_local_pm(struct sta_info *sta,
 {
        struct ieee80211_sub_if_data *sdata = sta->sdata;
 
-       if (sta->local_pm == pm)
+       if (sta->mesh->local_pm == pm)
                return 0;
 
        mps_dbg(sdata, "local STA operates in mode %d with %pM\n",
                pm, sta->sta.addr);
 
-       sta->local_pm = pm;
+       sta->mesh->local_pm = pm;
 
        /*
         * announce peer-specific power mode transition
         * (see IEEE802.11-2012 13.14.3.2 and 13.14.3.3)
         */
-       if (sta->plink_state == NL80211_PLINK_ESTAB)
+       if (sta->mesh->plink_state == NL80211_PLINK_ESTAB)
                mps_qos_null_tx(sta);
 
        return ieee80211_mps_local_status_update(sdata);
@@ -197,8 +197,8 @@ void ieee80211_mps_set_frame_flags(struct ieee80211_sub_if_data *sdata,
 
        if (is_unicast_ether_addr(hdr->addr1) &&
            ieee80211_is_data_qos(hdr->frame_control) &&
-           sta->plink_state == NL80211_PLINK_ESTAB)
-               pm = sta->local_pm;
+           sta->mesh->plink_state == NL80211_PLINK_ESTAB)
+               pm = sta->mesh->local_pm;
        else
                pm = sdata->u.mesh.nonpeer_pm;
 
@@ -241,16 +241,16 @@ void ieee80211_mps_sta_status_update(struct sta_info *sta)
         * use peer-specific power mode if peering is established and the
         * peer's power mode is known
         */
-       if (sta->plink_state == NL80211_PLINK_ESTAB &&
-           sta->peer_pm != NL80211_MESH_POWER_UNKNOWN)
-               pm = sta->peer_pm;
+       if (sta->mesh->plink_state == NL80211_PLINK_ESTAB &&
+           sta->mesh->peer_pm != NL80211_MESH_POWER_UNKNOWN)
+               pm = sta->mesh->peer_pm;
        else
-               pm = sta->nonpeer_pm;
+               pm = sta->mesh->nonpeer_pm;
 
        do_buffer = (pm != NL80211_MESH_POWER_ACTIVE);
 
        /* clear the MPSP flags for non-peers or active STA */
-       if (sta->plink_state != NL80211_PLINK_ESTAB) {
+       if (sta->mesh->plink_state != NL80211_PLINK_ESTAB) {
                clear_sta_flag(sta, WLAN_STA_MPSP_OWNER);
                clear_sta_flag(sta, WLAN_STA_MPSP_RECIPIENT);
        } else if (!do_buffer) {
@@ -296,13 +296,13 @@ static void mps_set_sta_peer_pm(struct sta_info *sta,
                pm = NL80211_MESH_POWER_ACTIVE;
        }
 
-       if (sta->peer_pm == pm)
+       if (sta->mesh->peer_pm == pm)
                return;
 
        mps_dbg(sta->sdata, "STA %pM enters mode %d\n",
                sta->sta.addr, pm);
 
-       sta->peer_pm = pm;
+       sta->mesh->peer_pm = pm;
 
        ieee80211_mps_sta_status_update(sta);
 }
@@ -317,13 +317,13 @@ static void mps_set_sta_nonpeer_pm(struct sta_info *sta,
        else
                pm = NL80211_MESH_POWER_ACTIVE;
 
-       if (sta->nonpeer_pm == pm)
+       if (sta->mesh->nonpeer_pm == pm)
                return;
 
        mps_dbg(sta->sdata, "STA %pM sets non-peer mode to %d\n",
                sta->sta.addr, pm);
 
-       sta->nonpeer_pm = pm;
+       sta->mesh->nonpeer_pm = pm;
 
        ieee80211_mps_sta_status_update(sta);
 }
@@ -552,7 +552,7 @@ void ieee80211_mpsp_trigger_process(u8 *qc, struct sta_info *sta,
        } else {
                if (eosp)
                        clear_sta_flag(sta, WLAN_STA_MPSP_RECIPIENT);
-               else if (sta->local_pm != NL80211_MESH_POWER_ACTIVE)
+               else if (sta->mesh->local_pm != NL80211_MESH_POWER_ACTIVE)
                        set_sta_flag(sta, WLAN_STA_MPSP_RECIPIENT);
 
                if (rspi && !test_and_set_sta_flag(sta, WLAN_STA_MPSP_OWNER))
@@ -577,9 +577,9 @@ void ieee80211_mps_frame_release(struct sta_info *sta,
        int ac, buffer_local = 0;
        bool has_buffered = false;
 
-       if (sta->plink_state == NL80211_PLINK_ESTAB)
+       if (sta->mesh->plink_state == NL80211_PLINK_ESTAB)
                has_buffered = ieee80211_check_tim(elems->tim, elems->tim_len,
-                                                  sta->llid);
+                                                  sta->mesh->aid);
 
        if (has_buffered)
                mps_dbg(sta->sdata, "%pM indicates buffered frames\n",
@@ -598,7 +598,7 @@ void ieee80211_mps_frame_release(struct sta_info *sta,
        if (!has_buffered && !buffer_local)
                return;
 
-       if (sta->plink_state == NL80211_PLINK_ESTAB)
+       if (sta->mesh->plink_state == NL80211_PLINK_ESTAB)
                mpsp_trigger_send(sta, has_buffered, !buffer_local);
        else
                mps_frame_deliver(sta, 1);