Commit 46d14a58 authored by Sujith's avatar Sujith Committed by John W. Linville

ath9k: General code scrub

Replace TRUE/FALSE macros with VALID/INVALID macros.
Follow a consistent variable convention.
Remove unnecessary comments.
Add all RC phy macros into a single enum.
Merge functions into reasonably sized entities.
Signed-off-by: default avatarSujith <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e63835b0
...@@ -686,13 +686,19 @@ enum ath9k_ani_cmd { ...@@ -686,13 +686,19 @@ enum ath9k_ani_cmd {
ATH9K_ANI_ALL = 0xff ATH9K_ANI_ALL = 0xff
}; };
enum phytype { enum {
PHY_DS, WLAN_RC_PHY_OFDM,
PHY_FH, WLAN_RC_PHY_CCK,
PHY_OFDM, WLAN_RC_PHY_HT_20_SS,
PHY_HT, WLAN_RC_PHY_HT_20_DS,
WLAN_RC_PHY_HT_40_SS,
WLAN_RC_PHY_HT_40_DS,
WLAN_RC_PHY_HT_20_SS_HGI,
WLAN_RC_PHY_HT_20_DS_HGI,
WLAN_RC_PHY_HT_40_SS_HGI,
WLAN_RC_PHY_HT_40_DS_HGI,
WLAN_RC_PHY_MAX
}; };
#define PHY_CCK PHY_DS
enum ath9k_tp_scale { enum ath9k_tp_scale {
ATH9K_TP_SCALE_MAX = 0, ATH9K_TP_SCALE_MAX = 0,
......
...@@ -155,14 +155,14 @@ u16 ath9k_hw_computetxtime(struct ath_hal *ah, ...@@ -155,14 +155,14 @@ u16 ath9k_hw_computetxtime(struct ath_hal *ah,
return 0; return 0;
switch (rates->info[rateix].phy) { switch (rates->info[rateix].phy) {
case PHY_CCK: case WLAN_RC_PHY_CCK:
phyTime = CCK_PREAMBLE_BITS + CCK_PLCP_BITS; phyTime = CCK_PREAMBLE_BITS + CCK_PLCP_BITS;
if (shortPreamble && rates->info[rateix].short_preamble) if (shortPreamble && rates->info[rateix].short_preamble)
phyTime >>= 1; phyTime >>= 1;
numBits = frameLen << 3; numBits = frameLen << 3;
txTime = CCK_SIFS_TIME + phyTime + ((numBits * 1000) / kbps); txTime = CCK_SIFS_TIME + phyTime + ((numBits * 1000) / kbps);
break; break;
case PHY_OFDM: case WLAN_RC_PHY_OFDM:
if (ah->ah_curchan && IS_CHAN_QUARTER_RATE(ah->ah_curchan)) { if (ah->ah_curchan && IS_CHAN_QUARTER_RATE(ah->ah_curchan)) {
bitsPerSymbol = (kbps * OFDM_SYMBOL_TIME_QUARTER) / 1000; bitsPerSymbol = (kbps * OFDM_SYMBOL_TIME_QUARTER) / 1000;
numBits = OFDM_PLCP_BITS + (frameLen << 3); numBits = OFDM_PLCP_BITS + (frameLen << 3);
......
...@@ -346,17 +346,16 @@ void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, ...@@ -346,17 +346,16 @@ void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb,
{ {
struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw;
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
struct ath_tx_info_priv *tx_info_priv = ATH_TX_INFO_PRIV(tx_info);
DPRINTF(sc, ATH_DBG_XMIT, DPRINTF(sc, ATH_DBG_XMIT,
"%s: TX complete: skb: %p\n", __func__, skb); "%s: TX complete: skb: %p\n", __func__, skb);
if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK || if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK ||
tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) { tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) {
if (tx_info->rate_driver_data[0] != NULL) { kfree(tx_info_priv);
kfree(tx_info->rate_driver_data[0]);
tx_info->rate_driver_data[0] = NULL; tx_info->rate_driver_data[0] = NULL;
} }
}
if (tx_status->flags & ATH_TX_BAR) { if (tx_status->flags & ATH_TX_BAR) {
tx_info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK; tx_info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
......
This diff is collapsed.
...@@ -20,73 +20,19 @@ ...@@ -20,73 +20,19 @@
#define RC_H #define RC_H
#include "ath9k.h" #include "ath9k.h"
/*
* Interface definitions for transmit rate control modules for the
* Atheros driver.
*
* A rate control module is responsible for choosing the transmit rate
* for each data frame. Management+control frames are always sent at
* a fixed rate.
*
* Only one module may be present at a time; the driver references
* rate control interfaces by symbol name. If multiple modules are
* to be supported we'll need to switch to a registration-based scheme
* as is currently done, for example, for authentication modules.
*
* An instance of the rate control module is attached to each device
* at attach time and detached when the device is destroyed. The module
* may associate data with each device and each node (station). Both
* sets of storage are opaque except for the size of the per-node storage
* which must be provided when the module is attached.
*
* The rate control module is notified for each state transition and
* station association/reassociation. Otherwise it is queried for a
* rate for each outgoing frame and provided status from each transmitted
* frame. Any ancillary processing is the responsibility of the module
* (e.g. if periodic processing is required then the module should setup
* it's own timer).
*
* In addition to the transmit rate for each frame the module must also
* indicate the number of attempts to make at the specified rate. If this
* number is != ATH_TXMAXTRY then an additional callback is made to setup
* additional transmit state. The rate control code is assumed to write
* this additional data directly to the transmit descriptor.
*/
struct ath_softc; struct ath_softc;
#define TRUE 1
#define FALSE 0
#define ATH_RATE_MAX 30 #define ATH_RATE_MAX 30
#define RATE_TABLE_SIZE 64
#define MAX_TX_RATE_PHY 48
#define WLAN_PHY_HT_20_SS WLAN_RC_PHY_HT_20_SS #define INVALID 0x0
#define WLAN_PHY_HT_20_DS WLAN_RC_PHY_HT_20_DS #define VALID 0x1
#define WLAN_PHY_HT_20_DS_HGI WLAN_RC_PHY_HT_20_DS_HGI #define VALID_20 0x2
#define WLAN_PHY_HT_40_SS WLAN_RC_PHY_HT_40_SS #define VALID_40 0x4
#define WLAN_PHY_HT_40_SS_HGI WLAN_RC_PHY_HT_40_SS_HGI #define VALID_2040 (VALID_20|VALID_40)
#define WLAN_PHY_HT_40_DS WLAN_RC_PHY_HT_40_DS #define VALID_ALL (VALID_2040|VALID)
#define WLAN_PHY_HT_40_DS_HGI WLAN_RC_PHY_HT_40_DS_HGI
#define WLAN_PHY_OFDM PHY_OFDM
#define WLAN_PHY_CCK PHY_CCK
#define TRUE_20 0x2
#define TRUE_40 0x4
#define TRUE_2040 (TRUE_20|TRUE_40)
#define TRUE_ALL (TRUE_2040|TRUE)
enum {
WLAN_RC_PHY_HT_20_SS = 4,
WLAN_RC_PHY_HT_20_DS,
WLAN_RC_PHY_HT_40_SS,
WLAN_RC_PHY_HT_40_DS,
WLAN_RC_PHY_HT_20_SS_HGI,
WLAN_RC_PHY_HT_20_DS_HGI,
WLAN_RC_PHY_HT_40_SS_HGI,
WLAN_RC_PHY_HT_40_DS_HGI,
WLAN_RC_PHY_MAX
};
#define WLAN_RC_PHY_DS(_phy) ((_phy == WLAN_RC_PHY_HT_20_DS) \ #define WLAN_RC_PHY_DS(_phy) ((_phy == WLAN_RC_PHY_HT_20_DS) \
|| (_phy == WLAN_RC_PHY_HT_40_DS) \ || (_phy == WLAN_RC_PHY_HT_40_DS) \
...@@ -103,26 +49,22 @@ enum { ...@@ -103,26 +49,22 @@ enum {
#define WLAN_RC_PHY_HT(_phy) (_phy >= WLAN_RC_PHY_HT_20_SS) #define WLAN_RC_PHY_HT(_phy) (_phy >= WLAN_RC_PHY_HT_20_SS)
/* Returns the capflag mode */
#define WLAN_RC_CAP_MODE(capflag) (((capflag & WLAN_RC_HT_FLAG) ? \ #define WLAN_RC_CAP_MODE(capflag) (((capflag & WLAN_RC_HT_FLAG) ? \
(capflag & WLAN_RC_40_FLAG) ? TRUE_40 : TRUE_20 : TRUE)) (capflag & WLAN_RC_40_FLAG) ? VALID_40 : VALID_20 : VALID))
/* Return TRUE if flag supports HT20 && client supports HT20 or /* Return TRUE if flag supports HT20 && client supports HT20 or
* return TRUE if flag supports HT40 && client supports HT40. * return TRUE if flag supports HT40 && client supports HT40.
* This is used becos some rates overlap between HT20/HT40. * This is used becos some rates overlap between HT20/HT40.
*/ */
#define WLAN_RC_PHY_HT_VALID(flag, capflag) \
#define WLAN_RC_PHY_HT_VALID(flag, capflag) (((flag & TRUE_20) && !(capflag \ (((flag & VALID_20) && !(capflag & WLAN_RC_40_FLAG)) || \
& WLAN_RC_40_FLAG)) || ((flag & TRUE_40) && \ ((flag & VALID_40) && (capflag & WLAN_RC_40_FLAG)))
(capflag & WLAN_RC_40_FLAG)))
#define WLAN_RC_DS_FLAG (0x01) #define WLAN_RC_DS_FLAG (0x01)
#define WLAN_RC_40_FLAG (0x02) #define WLAN_RC_40_FLAG (0x02)
#define WLAN_RC_SGI_FLAG (0x04) #define WLAN_RC_SGI_FLAG (0x04)
#define WLAN_RC_HT_FLAG (0x08) #define WLAN_RC_HT_FLAG (0x08)
#define RATE_TABLE_SIZE 64
/** /**
* struct ath_rate_table - Rate Control table * struct ath_rate_table - Rate Control table
* @valid: valid for use in rate control * @valid: valid for use in rate control
...@@ -139,7 +81,7 @@ enum { ...@@ -139,7 +81,7 @@ enum {
* @max_4ms_framelen: maximum frame length(bytes) for tx duration * @max_4ms_framelen: maximum frame length(bytes) for tx duration
* @probe_interval: interval for rate control to probe for other rates * @probe_interval: interval for rate control to probe for other rates
* @rssi_reduce_interval: interval for rate control to reduce rssi * @rssi_reduce_interval: interval for rate control to reduce rssi
* @initial_ratemax: initial ratemax value used in ath_rc_sib_update() * @initial_ratemax: initial ratemax value
*/ */
struct ath_rate_table { struct ath_rate_table {
int rate_cnt; int rate_cnt;
...@@ -169,15 +111,6 @@ struct ath_rate_table { ...@@ -169,15 +111,6 @@ struct ath_rate_table {
u8 initial_ratemax; u8 initial_ratemax;
}; };
#define ATH_RC_PROBE_ALLOWED 0x00000001
#define ATH_RC_MINRATE_LASTRATE 0x00000002
/*
* State structures for new rate adaptation code
*/
#define MAX_TX_RATE_TBL 64
#define MAX_TX_RATE_PHY 48
struct ath_tx_ratectrl_state { struct ath_tx_ratectrl_state {
int8_t rssi_thres; /* required rssi for this rate (dB) */ int8_t rssi_thres; /* required rssi for this rate (dB) */
u8 per; /* recent estimate of packet error rate (%) */ u8 per; /* recent estimate of packet error rate (%) */
...@@ -189,7 +122,7 @@ struct ath_rateset { ...@@ -189,7 +122,7 @@ struct ath_rateset {
}; };
/** /**
* struct ath_rate_node - Rate Control priv data * struct ath_rate_priv - Rate Control priv data
* @state: RC state * @state: RC state
* @rssi_last: last ACK rssi * @rssi_last: last ACK rssi
* @rssi_last_lookup: last ACK rssi used for lookup * @rssi_last_lookup: last ACK rssi used for lookup
...@@ -214,9 +147,7 @@ struct ath_rateset { ...@@ -214,9 +147,7 @@ struct ath_rateset {
* @neg_rates: Negotatied rates * @neg_rates: Negotatied rates
* @neg_ht_rates: Negotiated HT rates * @neg_ht_rates: Negotiated HT rates
*/ */
struct ath_rate_priv {
/* per-node state */
struct ath_rate_node {
int8_t rssi_last; int8_t rssi_last;
int8_t rssi_last_lookup; int8_t rssi_last_lookup;
int8_t rssi_last_prev; int8_t rssi_last_prev;
...@@ -228,11 +159,11 @@ struct ath_rate_node { ...@@ -228,11 +159,11 @@ struct ath_rate_node {
u8 probe_rate; u8 probe_rate;
u8 hw_maxretry_pktcnt; u8 hw_maxretry_pktcnt;
u8 max_valid_rate; u8 max_valid_rate;
u8 valid_rate_index[MAX_TX_RATE_TBL]; u8 valid_rate_index[RATE_TABLE_SIZE];
u8 ht_cap; u8 ht_cap;
u8 single_stream; u8 single_stream;
u8 valid_phy_ratecnt[WLAN_RC_PHY_MAX]; u8 valid_phy_ratecnt[WLAN_RC_PHY_MAX];
u8 valid_phy_rateidx[WLAN_RC_PHY_MAX][MAX_TX_RATE_TBL]; u8 valid_phy_rateidx[WLAN_RC_PHY_MAX][RATE_TABLE_SIZE];
u8 rc_phy_mode; u8 rc_phy_mode;
u8 rate_max_phy; u8 rate_max_phy;
u32 rssi_time; u32 rssi_time;
...@@ -242,7 +173,7 @@ struct ath_rate_node { ...@@ -242,7 +173,7 @@ struct ath_rate_node {
u32 probe_interval; u32 probe_interval;
u32 prev_data_rix; u32 prev_data_rix;
u32 tx_triglevel_max; u32 tx_triglevel_max;
struct ath_tx_ratectrl_state state[MAX_TX_RATE_TBL]; struct ath_tx_ratectrl_state state[RATE_TABLE_SIZE];
struct ath_rateset neg_rates; struct ath_rateset neg_rates;
struct ath_rateset neg_ht_rates; struct ath_rateset neg_ht_rates;
struct ath_rate_softc *asc; struct ath_rate_softc *asc;
...@@ -254,6 +185,9 @@ struct ath_tx_info_priv { ...@@ -254,6 +185,9 @@ struct ath_tx_info_priv {
int n_bad_frames; int n_bad_frames;
}; };
#define ATH_TX_INFO_PRIV(tx_info) \
((struct ath_tx_info_priv *)((tx_info)->rate_driver_data[0]))
void ath_rate_attach(struct ath_softc *sc); void ath_rate_attach(struct ath_softc *sc);
u8 ath_rate_findrateix(struct ath_softc *sc, u8 dot11_rate); u8 ath_rate_findrateix(struct ath_softc *sc, u8 dot11_rate);
int ath_rate_control_register(void); int ath_rate_control_register(void);
......
...@@ -536,7 +536,7 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf) ...@@ -536,7 +536,7 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf)
* just CTS. Note that this is only done for OFDM/HT unicast frames. * just CTS. Note that this is only done for OFDM/HT unicast frames.
*/ */
if (sc->sc_protmode != PROT_M_NONE && !(bf->bf_flags & ATH9K_TXDESC_NOACK) if (sc->sc_protmode != PROT_M_NONE && !(bf->bf_flags & ATH9K_TXDESC_NOACK)
&& (rt->info[rix].phy == WLAN_PHY_OFDM || && (rt->info[rix].phy == WLAN_RC_PHY_OFDM ||
WLAN_RC_PHY_HT(rt->info[rix].phy))) { WLAN_RC_PHY_HT(rt->info[rix].phy))) {
if (sc->sc_protmode == PROT_M_RTSCTS) if (sc->sc_protmode == PROT_M_RTSCTS)
flags = ATH9K_TXDESC_RTSENA; flags = ATH9K_TXDESC_RTSENA;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment