1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-08-19 18:31:30 +03:00

mac80211: sync with changes to patches submitted upstream

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18427 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nbd 2009-11-15 21:21:47 +00:00
parent 1300afab4c
commit b55e7ea676
2 changed files with 26 additions and 10 deletions

View File

@ -1,6 +1,6 @@
--- a/include/net/mac80211.h --- a/include/net/mac80211.h
+++ b/include/net/mac80211.h +++ b/include/net/mac80211.h
@@ -386,11 +386,12 @@ struct ieee80211_tx_rate { @@ -386,14 +386,17 @@ struct ieee80211_tx_rate {
* @flags: transmit info flags, defined above * @flags: transmit info flags, defined above
* @band: the band to transmit on (use for checking for races) * @band: the band to transmit on (use for checking for races)
* @antenna_sel_tx: antenna to use, 0 for automatic diversity * @antenna_sel_tx: antenna to use, 0 for automatic diversity
@ -10,18 +10,34 @@
* @status: union for status data * @status: union for status data
* @driver_data: array of driver_data pointers * @driver_data: array of driver_data pointers
- * @ampdu_ack_len: number of aggregated frames. - * @ampdu_ack_len: number of aggregated frames.
- * relevant only if IEEE80211_TX_STATUS_AMPDU was set.
+ * @ampdu_ack_len: number of acked aggregated frames. + * @ampdu_ack_len: number of acked aggregated frames.
* relevant only if IEEE80211_TX_STATUS_AMPDU was set. + * relevant only if ieee80211_tx_status_ampdu was set.
* @ampdu_ack_map: block ack bit map for the aggregation. * @ampdu_ack_map: block ack bit map for the aggregation.
* relevant only if IEEE80211_TX_STATUS_AMPDU was set. * relevant only if IEEE80211_TX_STATUS_AMPDU was set.
@@ -403,8 +404,8 @@ struct ieee80211_tx_info { + * @ampdu_len: number of aggregated frames.
+ * relevant only if ieee80211_tx_status_ampdu was set.
* @ack_signal: signal strength of the ACK frame
*/
struct ieee80211_tx_info {
@@ -403,8 +406,8 @@ struct ieee80211_tx_info {
u8 antenna_sel_tx; u8 antenna_sel_tx;
- /* 2 byte hole */ - /* 2 byte hole */
- u8 pad[2]; - u8 pad[2];
+ u8 driver_flags; + u8 driver_flags;
+ u8 ampdu_len; + u8 pad;
union { union {
struct { struct {
@@ -428,7 +431,8 @@ struct ieee80211_tx_info {
u8 ampdu_ack_len;
u64 ampdu_ack_map;
int ack_signal;
- /* 8 bytes free */
+ u8 ampdu_len;
+ /* 7 bytes free */
} status;
struct {
struct ieee80211_tx_rate driver_rates[

View File

@ -243,7 +243,7 @@
+ if ((ds->ds_txstat.ts_status & ATH9K_TXERR_XRETRY) || + if ((ds->ds_txstat.ts_status & ATH9K_TXERR_XRETRY) ||
+ (ds->ds_txstat.ts_status & ATH9K_TXERR_FIFO)) + (ds->ds_txstat.ts_status & ATH9K_TXERR_FIFO))
+ tx_info->driver_flags |= ATH_TX_INFO_XRETRY; + tx_info->driver_flags |= ATH_TX_INFO_XRETRY;
+ tx_info->ampdu_len = bf->bf_nframes; + tx_info->status.ampdu_len = bf->bf_nframes;
+ tx_info->status.ampdu_ack_len = bf->bf_nframes - nbad; + tx_info->status.ampdu_ack_len = bf->bf_nframes - nbad;
} }
} }
@ -293,7 +293,7 @@
}; };
last_per = ath_rc_priv->per[tx_rate]; last_per = ath_rc_priv->per[tx_rate];
+ n_bad_frames = tx_info->ampdu_len - tx_info->status.ampdu_ack_len; + n_bad_frames = tx_info->status.ampdu_len - tx_info->status.ampdu_ack_len;
if (xretries) { if (xretries) {
if (xretries == 1) { if (xretries == 1) {
@ -312,7 +312,7 @@
*/ */
- if (tx_info_priv->n_frames > 0) { - if (tx_info_priv->n_frames > 0) {
- int n_frames, n_bad_frames; - int n_frames, n_bad_frames;
+ if (tx_info->ampdu_len > 0) { + if (tx_info->status.ampdu_len > 0) {
+ int n_frames, n_bad_tries; + int n_frames, n_bad_tries;
u8 cur_per, new_per; u8 cur_per, new_per;
@ -320,9 +320,9 @@
- tx_info_priv->n_bad_frames; - tx_info_priv->n_bad_frames;
- n_frames = tx_info_priv->n_frames * (retries + 1); - n_frames = tx_info_priv->n_frames * (retries + 1);
- cur_per = (100 * n_bad_frames / n_frames) >> 3; - cur_per = (100 * n_bad_frames / n_frames) >> 3;
+ n_bad_tries = retries * tx_info->ampdu_len + + n_bad_tries = retries * tx_info->status.ampdu_len +
+ n_bad_frames; + n_bad_frames;
+ n_frames = tx_info->ampdu_len * (retries + 1); + n_frames = tx_info->status.ampdu_len * (retries + 1);
+ cur_per = (100 * n_bad_tries / n_frames) >> 3; + cur_per = (100 * n_bad_tries / n_frames) >> 3;
new_per = (u8)(last_per - (last_per >> 3) + cur_per); new_per = (u8)(last_per - (last_per >> 3) + cur_per);
ath_rc_priv->per[tx_rate] = new_per; ath_rc_priv->per[tx_rate] = new_per;
@ -333,7 +333,7 @@
if (ath_rc_priv->probe_rate && ath_rc_priv->probe_rate == tx_rate) { if (ath_rc_priv->probe_rate && ath_rc_priv->probe_rate == tx_rate) {
- if (retries > 0 || 2 * tx_info_priv->n_bad_frames > - if (retries > 0 || 2 * tx_info_priv->n_bad_frames >
- tx_info_priv->n_frames) { - tx_info_priv->n_frames) {
+ if (retries > 0 || 2 * n_bad_frames > tx_info->ampdu_len) { + if (retries > 0 || 2 * n_bad_frames > tx_info->status.ampdu_len) {
/* /*
* Since we probed with just a single attempt, * Since we probed with just a single attempt,
* any retries means the probe failed. Also, * any retries means the probe failed. Also,