Lines Matching refs:status

116 	 *  (4) we get TX status before having processed the frame and
121 * even at the same time because we queue both TX status events and
123 * same order that they were received or TX status last. Hence, there
125 * status, which drivers can ensure, see below.
134 * (a) don't mix the irq-safe/not irq-safe TX status/RX processing
136 * (b) always process RX events before TX status events if ordering
137 * can be unknown, for example with different interrupt status
141 * changes before calling TX status events if ordering can be
247 struct ieee80211_tx_status *status)
252 if (status && status->rate && !(status->rate->flags &
259 else if (info->status.rates[0].idx >= 0 &&
260 !(info->status.rates[0].flags &
272 if (status && status->rate) {
273 if (status->rate->flags & RATE_INFO_FLAGS_MCS)
275 else if (status->rate->flags & RATE_INFO_FLAGS_VHT_MCS)
277 else if (status->rate->flags & RATE_INFO_FLAGS_HE_MCS)
279 } else if (info->status.rates[0].idx >= 0) {
280 if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS)
282 else if (info->status.rates[0].flags & IEEE80211_TX_RC_VHT_MCS)
294 struct ieee80211_tx_status *status)
320 if (status && status->rate) {
321 if (!(status->rate->flags & (RATE_INFO_FLAGS_MCS |
326 legacy_rate = status->rate->legacy;
327 } else if (info->status.rates[0].idx >= 0 &&
328 !(info->status.rates[0].flags & (IEEE80211_TX_RC_MCS |
331 sband->bitrates[info->status.rates[0].idx].bitrate;
346 if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
348 if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
359 if (status && status->rate &&
360 (status->rate->flags & RATE_INFO_FLAGS_MCS)) {
365 if (status->rate->flags & RATE_INFO_FLAGS_SHORT_GI)
367 if (status->rate->bw == RATE_INFO_BW_40)
369 pos[2] = status->rate->mcs;
371 } else if (status && status->rate &&
372 (status->rate->flags & RATE_INFO_FLAGS_VHT_MCS)) {
387 if (status->rate->flags & RATE_INFO_FLAGS_SHORT_GI)
392 switch (status->rate->bw) {
409 *pos = (status->rate->mcs << 4) | status->rate->nss;
418 } else if (status && status->rate &&
419 (status->rate->flags & RATE_INFO_FLAGS_HE_MCS)) {
437 he->data6 |= HE_PREP(DATA6_NSTS, status->rate->nss);
447 he->data3 |= HE_PREP(DATA3_DATA_MCS, status->rate->mcs);
448 he->data3 |= HE_PREP(DATA3_DATA_DCM, status->rate->he_dcm);
450 he->data5 |= HE_PREP(DATA5_GI, status->rate->he_gi);
452 switch (status->rate->bw) {
483 status->rate->he_ru_alloc + 4);
486 WARN_ONCE(1, "Invalid SU BW %d\n", status->rate->bw);
492 if ((status && status->rate) || info->status.rates[0].idx < 0)
497 if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
502 if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
504 if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
506 if (info->status.rates[0].flags & IEEE80211_TX_RC_GREEN_FIELD)
508 pos[2] = info->status.rates[0].idx;
510 } else if (info->status.rates[0].flags & IEEE80211_TX_RC_VHT_MCS) {
525 if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
530 if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
532 else if (info->status.rates[0].flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
534 else if (info->status.rates[0].flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
541 *pos = (ieee80211_rate_get_vht_mcs(&info->status.rates[0]) << 4) |
542 ieee80211_rate_get_vht_nss(&info->status.rates[0]);
650 info->status.ack_signal,
651 info->status.is_valid_ack_signal,
658 pr_warn("Unknown status report in ack skb\n");
763 /* This packet was aggregated but doesn't carry status info */
800 /* just the first aggr frame carry status info */
801 info->status.rates[i].idx = -1;
802 info->status.rates[i].count = 0;
804 } else if (info->status.rates[i].idx < 0) {
808 info->status.rates[i].idx = -1;
809 info->status.rates[i].count = 0;
813 count += info->status.rates[i].count;
826 struct ieee80211_tx_status *status)
835 rtap_len = ieee80211_tx_radiotap_len(info, status);
842 rtap_len, shift, status);
882 struct ieee80211_tx_status *status,
885 struct sk_buff *skb = status->skb;
888 struct ieee80211_tx_info *info = status->info;
902 if (status->sta) {
903 sta = container_of(status->sta, struct sta_info, sta);
923 info->status.rates[rates_idx];
1035 if (status->free_list)
1036 list_add_tail(&skb->list, status->free_list);
1044 send_to_cooked, status);
1051 struct ieee80211_tx_status status = {
1061 status.sta = &sta->sta;
1063 ieee80211_tx_status_ext(hw, &status);
1069 struct ieee80211_tx_status *status)
1072 struct ieee80211_tx_info *info = status->info;
1073 struct ieee80211_sta *pubsta = status->sta;
1074 struct sk_buff *skb = status->skb;
1084 if (status->rate)
1085 sta->tx_stats.last_rate_info = *status->rate;
1100 if (!status->info)
1121 acked, info->status.tx_time);
1137 if (info->status.is_valid_ack_signal) {
1139 (s8)info->status.ack_signal;
1142 -info->status.ack_signal);
1159 rate_control_tx_status(local, sband, status);
1161 ieee80211s_update_metric(local, sta, status);
1165 return __ieee80211_tx_status(hw, status, rates_idx,
1185 if (status->free_list)
1186 list_add_tail(&skb->list, status->free_list);
1199 struct ieee80211_tx_status status = {
1204 rate_control_tx_status(local, sband, &status);
1207 sta->tx_stats.last_rate = info->status.rates[0];
1216 struct ieee80211_tx_status status = {
1227 status.sta = &sta->sta;
1229 ieee80211_tx_status_ext(hw, &status);