Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
authorJohn W. Linville <linville@tuxdriver.com>
Fri, 25 Jul 2014 14:22:36 +0000 (10:22 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 25 Jul 2014 14:22:36 +0000 (10:22 -0400)
Conflicts:
net/mac80211/cfg.c

Signed-off-by: John W. Linville <linville@tuxdriver.com>
1  2 
drivers/net/wireless/ath/ath9k/xmit.c
net/mac80211/sta_info.c
net/mac80211/tx.c
net/wireless/trace.h

Simple merge
index f41177f58b30c483f95596bc3e9d5acf90b00512,a9b46d8ea22ff696623cec4cad55949fc5afd2a1..c6ee2139fbc579bab35e8cc5bfb6f3b4994930d2
@@@ -1719,137 -1704,3 +1719,140 @@@ u8 sta_info_tx_streams(struct sta_info 
        return ((ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK)
                        >> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT) + 1;
  }
-       struct rate_control_ref *ref = local->rate_ctrl;
 +
 +void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
 +{
 +      struct ieee80211_sub_if_data *sdata = sta->sdata;
 +      struct ieee80211_local *local = sdata->local;
++      struct rate_control_ref *ref = NULL;
 +      struct timespec uptime;
 +      u64 packets = 0;
 +      u32 thr = 0;
 +      int i, ac;
 +
++      if (test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
++              ref = local->rate_ctrl;
++
 +      sinfo->generation = sdata->local->sta_generation;
 +
 +      sinfo->filled = STATION_INFO_INACTIVE_TIME |
 +                      STATION_INFO_RX_BYTES64 |
 +                      STATION_INFO_TX_BYTES64 |
 +                      STATION_INFO_RX_PACKETS |
 +                      STATION_INFO_TX_PACKETS |
 +                      STATION_INFO_TX_RETRIES |
 +                      STATION_INFO_TX_FAILED |
 +                      STATION_INFO_TX_BITRATE |
 +                      STATION_INFO_RX_BITRATE |
 +                      STATION_INFO_RX_DROP_MISC |
 +                      STATION_INFO_BSS_PARAM |
 +                      STATION_INFO_CONNECTED_TIME |
 +                      STATION_INFO_STA_FLAGS |
 +                      STATION_INFO_BEACON_LOSS_COUNT;
 +
 +      ktime_get_ts(&uptime);
 +      sinfo->connected_time = uptime.tv_sec - sta->last_connected;
 +
 +      sinfo->inactive_time = jiffies_to_msecs(jiffies - sta->last_rx);
 +      sinfo->tx_bytes = 0;
 +      for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
 +              sinfo->tx_bytes += sta->tx_bytes[ac];
 +              packets += sta->tx_packets[ac];
 +      }
 +      sinfo->tx_packets = packets;
 +      sinfo->rx_bytes = sta->rx_bytes;
 +      sinfo->rx_packets = sta->rx_packets;
 +      sinfo->tx_retries = sta->tx_retry_count;
 +      sinfo->tx_failed = sta->tx_retry_failed;
 +      sinfo->rx_dropped_misc = sta->rx_dropped;
 +      sinfo->beacon_loss_count = sta->beacon_loss_count;
 +
 +      if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) ||
 +          (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) {
 +              sinfo->filled |= STATION_INFO_SIGNAL | STATION_INFO_SIGNAL_AVG;
 +              if (!local->ops->get_rssi ||
 +                  drv_get_rssi(local, sdata, &sta->sta, &sinfo->signal))
 +                      sinfo->signal = (s8)sta->last_signal;
 +              sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal);
 +      }
 +      if (sta->chains) {
 +              sinfo->filled |= STATION_INFO_CHAIN_SIGNAL |
 +                               STATION_INFO_CHAIN_SIGNAL_AVG;
 +
 +              sinfo->chains = sta->chains;
 +              for (i = 0; i < ARRAY_SIZE(sinfo->chain_signal); i++) {
 +                      sinfo->chain_signal[i] = sta->chain_signal_last[i];
 +                      sinfo->chain_signal_avg[i] =
 +                              (s8) -ewma_read(&sta->chain_signal_avg[i]);
 +              }
 +      }
 +
 +      sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);
 +      sta_set_rate_info_rx(sta, &sinfo->rxrate);
 +
 +      if (ieee80211_vif_is_mesh(&sdata->vif)) {
 +#ifdef CONFIG_MAC80211_MESH
 +              sinfo->filled |= STATION_INFO_LLID |
 +                               STATION_INFO_PLID |
 +                               STATION_INFO_PLINK_STATE |
 +                               STATION_INFO_LOCAL_PM |
 +                               STATION_INFO_PEER_PM |
 +                               STATION_INFO_NONPEER_PM;
 +
 +              sinfo->llid = sta->llid;
 +              sinfo->plid = sta->plid;
 +              sinfo->plink_state = sta->plink_state;
 +              if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) {
 +                      sinfo->filled |= STATION_INFO_T_OFFSET;
 +                      sinfo->t_offset = sta->t_offset;
 +              }
 +              sinfo->local_pm = sta->local_pm;
 +              sinfo->peer_pm = sta->peer_pm;
 +              sinfo->nonpeer_pm = sta->nonpeer_pm;
 +#endif
 +      }
 +
 +      sinfo->bss_param.flags = 0;
 +      if (sdata->vif.bss_conf.use_cts_prot)
 +              sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT;
 +      if (sdata->vif.bss_conf.use_short_preamble)
 +              sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
 +      if (sdata->vif.bss_conf.use_short_slot)
 +              sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
 +      sinfo->bss_param.dtim_period = sdata->local->hw.conf.ps_dtim_period;
 +      sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int;
 +
 +      sinfo->sta_flags.set = 0;
 +      sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) |
 +                              BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) |
 +                              BIT(NL80211_STA_FLAG_WME) |
 +                              BIT(NL80211_STA_FLAG_MFP) |
 +                              BIT(NL80211_STA_FLAG_AUTHENTICATED) |
 +                              BIT(NL80211_STA_FLAG_ASSOCIATED) |
 +                              BIT(NL80211_STA_FLAG_TDLS_PEER);
 +      if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHORIZED);
 +      if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_SHORT_PREAMBLE);
 +      if (test_sta_flag(sta, WLAN_STA_WME))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_WME);
 +      if (test_sta_flag(sta, WLAN_STA_MFP))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_MFP);
 +      if (test_sta_flag(sta, WLAN_STA_AUTH))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHENTICATED);
 +      if (test_sta_flag(sta, WLAN_STA_ASSOC))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_ASSOCIATED);
 +      if (test_sta_flag(sta, WLAN_STA_TDLS_PEER))
 +              sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER);
 +
 +      /* check if the driver has a SW RC implementation */
 +      if (ref && ref->ops->get_expected_throughput)
 +              thr = ref->ops->get_expected_throughput(sta->rate_ctrl_priv);
 +      else
 +              thr = drv_get_expected_throughput(local, &sta->sta);
 +
 +      if (thr != 0) {
 +              sinfo->filled |= STATION_INFO_EXPECTED_THROUGHPUT;
 +              sinfo->expected_throughput = thr;
 +      }
 +}
Simple merge
Simple merge