wl1271: Add TX rate reporting
Add reporting of the used TX rate to mac80211 in the tx_status. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Kalle Valo <kalle.valo@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
f876bb9aaf
commit
31627dc59b
|
@ -2127,6 +2127,7 @@ int wl1271_init_ieee80211(struct wl1271 *wl)
|
||||||
wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
|
wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
|
||||||
|
|
||||||
wl->hw->queues = 4;
|
wl->hw->queues = 4;
|
||||||
|
wl->hw->max_rates = 1;
|
||||||
|
|
||||||
SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
|
SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
|
||||||
|
|
||||||
|
|
|
@ -304,6 +304,8 @@ static void wl1271_tx_complete_packet(struct wl1271 *wl,
|
||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
int id = result->id;
|
int id = result->id;
|
||||||
|
int rate = -1;
|
||||||
|
u8 retries = 0;
|
||||||
|
|
||||||
/* check for id legality */
|
/* check for id legality */
|
||||||
if (unlikely(id >= ACX_TX_DESCRIPTORS || wl->tx_frames[id] == NULL)) {
|
if (unlikely(id >= ACX_TX_DESCRIPTORS || wl->tx_frames[id] == NULL)) {
|
||||||
|
@ -314,19 +316,22 @@ static void wl1271_tx_complete_packet(struct wl1271 *wl,
|
||||||
skb = wl->tx_frames[id];
|
skb = wl->tx_frames[id];
|
||||||
info = IEEE80211_SKB_CB(skb);
|
info = IEEE80211_SKB_CB(skb);
|
||||||
|
|
||||||
/* update packet status */
|
/* update the TX status info */
|
||||||
if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
|
if (result->status == TX_SUCCESS) {
|
||||||
if (result->status == TX_SUCCESS)
|
if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
|
||||||
info->flags |= IEEE80211_TX_STAT_ACK;
|
info->flags |= IEEE80211_TX_STAT_ACK;
|
||||||
if (result->status & TX_RETRY_EXCEEDED) {
|
rate = wl1271_rate_to_idx(wl, result->rate_class_index);
|
||||||
/* FIXME */
|
retries = result->ack_failures;
|
||||||
/* info->status.excessive_retries = 1; */
|
} else if (result->status == TX_RETRY_EXCEEDED) {
|
||||||
wl->stats.excessive_retries++;
|
wl->stats.excessive_retries++;
|
||||||
}
|
retries = result->ack_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME */
|
info->status.rates[0].idx = rate;
|
||||||
/* info->status.retry_count = result->ack_failures; */
|
info->status.rates[0].count = retries;
|
||||||
|
info->status.rates[0].flags = 0;
|
||||||
|
info->status.ack_signal = -1;
|
||||||
|
|
||||||
wl->stats.retry_count += result->ack_failures;
|
wl->stats.retry_count += result->ack_failures;
|
||||||
|
|
||||||
/* update security sequence number */
|
/* update security sequence number */
|
||||||
|
@ -350,8 +355,6 @@ static void wl1271_tx_complete_packet(struct wl1271 *wl,
|
||||||
result->id, skb, result->ack_failures,
|
result->id, skb, result->ack_failures,
|
||||||
result->rate_class_index, result->status);
|
result->rate_class_index, result->status);
|
||||||
|
|
||||||
/* FIXME: do we need to tell the stack about the used rate? */
|
|
||||||
|
|
||||||
/* return the packet to the stack */
|
/* return the packet to the stack */
|
||||||
ieee80211_tx_status(wl->hw, skb);
|
ieee80211_tx_status(wl->hw, skb);
|
||||||
wl->tx_frames[result->id] = NULL;
|
wl->tx_frames[result->id] = NULL;
|
||||||
|
|
|
@ -159,5 +159,6 @@ static inline int wl1271_tx_ac_to_tid(int ac)
|
||||||
void wl1271_tx_work(struct work_struct *work);
|
void wl1271_tx_work(struct work_struct *work);
|
||||||
void wl1271_tx_complete(struct wl1271 *wl);
|
void wl1271_tx_complete(struct wl1271 *wl);
|
||||||
void wl1271_tx_flush(struct wl1271 *wl);
|
void wl1271_tx_flush(struct wl1271 *wl);
|
||||||
|
u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue