update for 2.6.40
cover update for 2.6.40
We do more clean up works in iwlagn for driver split We also make new rate scale changes to improve HT performance
Daniel Halperin (4):
iwlwifi: limit number of attempts for highest HT rate
iwlwifi: cleanup and bugfix tx aggregation code
iwlwifi: add RATE_MCS_RATE_MSK
iwlwifi: set default aggregation frame limit to 63
Johannes Berg (2):
iwlagn: clean up TX aggregation code
iwlagn: fix aggregation queue scheduler setup
Wey-Yi Guy (6):
iwlegacy: MAINTAINERS
iwlagn: use 6030 configuration for 6035 series
iwlwifi: remove legacy isr tasklet
iwlagn: remove 3945 only station code
iwlagn: remove reference to 3945 and 4965
iwlagn: remove deprecated module parameters
these patches are also available from wireless-next-2.6 branch on
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
MAINTAINERS | 10 + drivers/net/wireless/iwlwifi/iwl-1000.c | 2 - drivers/net/wireless/iwlwifi/iwl-2000.c | 33 ---- drivers/net/wireless/iwlwifi/iwl-5000.c | 4 - drivers/net/wireless/iwlwifi/iwl-6000.c | 20 ++- drivers/net/wireless/iwlwifi/iwl-agn-ict.c | 2 - drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 3 +- drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 18 +- drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 140 ++++++-------- drivers/net/wireless/iwlwifi/iwl-agn.c | 266 ++------------------------ drivers/net/wireless/iwlwifi/iwl-agn.h | 9 +- drivers/net/wireless/iwlwifi/iwl-commands.h | 4 +- drivers/net/wireless/iwlwifi/iwl-core.h | 10 - drivers/net/wireless/iwlwifi/iwl-csr.h | 39 +--- drivers/net/wireless/iwlwifi/iwl-dev.h | 1 + drivers/net/wireless/iwlwifi/iwl-eeprom.c | 2 - drivers/net/wireless/iwlwifi/iwl-sta.c | 6 - 17 files changed, 136 insertions(+), 433 deletions(-)
PATCH 1/12 iwlegacy: MAINTAINERS
Add iwlegacy driver to MAINTAINERS file and mark as 'Orphan'
--- MAINTAINERS | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
MAINTAINERS +10 -0
@@ -3322,6 +3322,16 @@ F: Documentation/wimax/README.i2400m F: drivers/net/wimax/i2400m/ F: include/linux/wimax/i2400m.h +INTEL PRO/WIRELESS 3945ABG/BG NETWORK CONNECTION SUPPORT +L: [email protected] +S: Orphan +F: drivers/net/wireless/iwlegacy/ + +INTEL WIRELESS WIFI 4965AGN NETWORK CONNECTION SUPPORT +L: [email protected] +S: Orphan +F: drivers/net/wireless/iwlegacy/ + INTEL WIRELESS WIFI LINK (iwlwifi) M: Wey-Yi Guy <[email protected]> M: Intel Linux Wireless <[email protected]>
Signature · 1 line
1.7.0.4
Re: [PATCH 01/12] iwlegacy: MAINTAINERS
Quoted 1 line · Wey-Yi Guy
Add iwlegacy driver to
MAINTAINERSfile and mark as 'Orphan'
I'll take these.
Quoted 12 lines
Signed-off-by Wey-Yi Guy <[email protected]>--- MAINTAINERS | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)MAINTAINERS +0
-0@@ -3322,6 +3322,16 @@ F: Documentation/wimax/README.i2400m F: drivers/net/wimax/i2400m/ F: include/linux/wimax/i2400m.h
MAINTAINERS F: Documentation/wimax/README.i2400m · line 3333
Quoted 10 lines
MAINTAINERS +9
-0+INTEL PRO/WIRELESS 3945ABG/BG NETWORK CONNECTION SUPPORT +L: [email protected] +S: Orphan +F: drivers/net/wireless/iwlegacy/ + +INTEL WIRELESS WIFI 4965AGN NETWORK CONNECTION SUPPORT +L: [email protected] +S: Orphan +F: drivers/net/wireless/iwlegacy/
Since path is the same it should be one entry,
I will post patch soon.
There are some iwlegacy bugs, which seem to be 2.6.34 -> 2.6.35 regression. I'm not seeing other way to fix them as moving iwlegacy code back to 2.6.34 level. I plan to do this ...
Stanislaw
Re: [PATCH 01/12] iwlegacy: MAINTAINERS
Hi Stanislaw,
Quoted 29 lines · Stanislaw Gruszka
Quoted 1 line · Wey-Yi Guy
Add iwlegacy driver to
MAINTAINERSfile and mark as 'Orphan'I'll take these.
Quoted 12 lines
Signed-off-by Wey-Yi Guy <[email protected]>--- MAINTAINERS | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)MAINTAINERS +0
-0@@ -3322,6 +3322,16 @@ F: Documentation/wimax/README.i2400m F: drivers/net/wimax/i2400m/ F: include/linux/wimax/i2400m.hMAINTAINERS F: Documentation/wimax/README.i2400m · line 3333
Quoted 10 lines
MAINTAINERS +9
-0+INTEL PRO/WIRELESS 3945ABG/BG NETWORK CONNECTION SUPPORT +L: [email protected] +S: Orphan +F: drivers/net/wireless/iwlegacy/ + +INTEL WIRELESS WIFI 4965AGN NETWORK CONNECTION SUPPORT +L: [email protected] +S: Orphan +F: drivers/net/wireless/iwlegacy/Since path is the same it should be one entry,
I will post patch soon.
Quoted 4 lines
There are some iwlegacy bugs, which seem to be 2.6.34 -> 2.6.35 regression. I'm not seeing other way to fix them as moving iwlegacy code back to 2.6.34 level. I plan to do this ...
Thank you very much for taking on the responsibilities
Wey
PATCH v2 1/12 iwlegacy: MAINTAINERS
In reply to Wey-Yi GuyAdd iwlegacy driver to MAINTAINERS.
--- MAINTAINERS | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
MAINTAINERS +6 -0
@@ -3381,6 +3381,12 @@ F: Documentation/wimax/README.i2400m F: drivers/net/wimax/i2400m/ F: include/linux/wimax/i2400m.h +INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) +M: Stanislaw Gruszka <[email protected]> +L: [email protected] +S: Supported +F: drivers/net/wireless/iwlegacy/ + INTEL WIRELESS WIFI LINK (iwlwifi) M: Wey-Yi Guy <[email protected]> M: Intel Linux Wireless <[email protected]>
Signature · 1 line
1.7.1
PATCH 2/12 iwlagn: use 6030 configuration for 6035 series
In reply to Wey-Yi Guy6035 series of devices should use the same uCode as 6030 series, change it.
--- drivers/net/wireless/iwlwifi/iwl-2000.c | 31 ------------------------------- drivers/net/wireless/iwlwifi/iwl-6000.c | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 31 deletions(-)
drivers/net/wireless/iwlwifi/iwl-2000.c +0 -31
@@ -471,37 +471,6 @@ struct iwl_cfg iwl2030_2bg_cfg = { IWL_DEVICE_2030, }; -#define IWL_DEVICE_6035 \ - .fw_name_pre = IWL2030_FW_PRE, \ - .ucode_api_max = IWL2030_UCODE_API_MAX, \ - .ucode_api_min = IWL2030_UCODE_API_MIN, \ - .eeprom_ver = EEPROM_6035_EEPROM_VERSION, \ - .eeprom_calib_ver = EEPROM_6035_TX_POWER_VERSION, \ - .ops = &iwl2030_ops, \ - .mod_params = &iwlagn_mod_params, \ - .base_params = &iwl2030_base_params, \ - .bt_params = &iwl2030_bt_params, \ - .need_dc_calib = true, \ - .need_temp_offset_calib = true, \ - .led_mode = IWL_LED_RF_STATE, \ - .adv_pm = true \ - -struct iwl_cfg iwl6035_2agn_cfg = { - .name ="2000 Series 2x2 AGN/BT" , -IWL_DEVICE_6035 , - .ht_params = &iwl2000_ht_params, -}; - -struct iwl_cfg iwl6035_2abg_cfg = { - .name ="2000 Series 2x2 ABG/BT" , -IWL_DEVICE_6035 , -}; - -struct iwl_cfg iwl6035_2bg_cfg = { - .name ="2000 Series 2x2 BG/BT" , -IWL_DEVICE_6035 , -}; -#define IWL_DEVICE_200 \ .fw_name_pre = IWL200_FW_PRE, \ .ucode_api_max = IWL200_UCODE_API_MAX, \
drivers/net/wireless/iwlwifi/iwl-6000.c +16 -0
@@ -613,6 +613,22 @@ struct iwl_cfg iwl6030_2bg_cfg = { IWL_DEVICE_6030, }; +struct iwl_cfg iwl6035_2agn_cfg = { + .name ="6035 Series 2x2 AGN/BT" , +IWL_DEVICE_6030 , + .ht_params = &iwl6000_ht_params, +}; + +struct iwl_cfg iwl6035_2abg_cfg = { + .name ="6035 Series 2x2 ABG/BT" , +IWL_DEVICE_6030 , +}; + +struct iwl_cfg iwl6035_2bg_cfg = { + .name ="6035 Series 2x2 BG/BT" , +IWL_DEVICE_6030 , +}; +struct iwl_cfg iwl1030_bgn_cfg = { .name ="Intel(R) Centrino(R) Wireless-N 1030 BGN" ,IWL_DEVICE_6030 ,
Signature · 1 line
1.7.0.4
PATCH 3/12 iwlagn: clean up TX aggregation code
In reply to Wey-Yi GuyFrom: Johannes Berg <[email protected]>
Since the driver split, there's no need for function pointers any more for aggregation queue setup and teardown as all devices now share the same code. Simplify this.
--- drivers/net/wireless/iwlwifi/iwl-1000.c | 2 -- drivers/net/wireless/iwlwifi/iwl-2000.c | 2 -- drivers/net/wireless/iwlwifi/iwl-5000.c | 4 ---- drivers/net/wireless/iwlwifi/iwl-6000.c | 4 ---- drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 17 +++++++---------- drivers/net/wireless/iwlwifi/iwl-agn.h | 4 ---- drivers/net/wireless/iwlwifi/iwl-core.h | 5 ----- 7 files changed, 7 insertions(+), 31 deletions(-)
drivers/net/wireless/iwlwifi/iwl-1000.c +0 -2
@@ -179,8 +179,6 @@ static struct iwl_lib_ops iwl1000_lib = { .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, .txq_set_sched = iwlagn_txq_set_sched, - .txq_agg_enable = iwlagn_txq_agg_enable, - .txq_agg_disable = iwlagn_txq_agg_disable, .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, .txq_free_tfd = iwl_hw_txq_free_tfd, .txq_init = iwl_hw_tx_queue_init,
drivers/net/wireless/iwlwifi/iwl-2000.c +0 -2
@@ -259,8 +259,6 @@ static struct iwl_lib_ops iwl2000_lib = { .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, .txq_set_sched = iwlagn_txq_set_sched, - .txq_agg_enable = iwlagn_txq_agg_enable, - .txq_agg_disable = iwlagn_txq_agg_disable, .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, .txq_free_tfd = iwl_hw_txq_free_tfd, .txq_init = iwl_hw_tx_queue_init,
drivers/net/wireless/iwlwifi/iwl-5000.c +0 -4
@@ -348,8 +348,6 @@ static struct iwl_lib_ops iwl5000_lib = { .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, .txq_set_sched = iwlagn_txq_set_sched, - .txq_agg_enable = iwlagn_txq_agg_enable, - .txq_agg_disable = iwlagn_txq_agg_disable, .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, .txq_free_tfd = iwl_hw_txq_free_tfd, .txq_init = iwl_hw_tx_queue_init,
@@ -416,8 +414,6 @@ static struct iwl_lib_ops iwl5150_lib = { .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, .txq_set_sched = iwlagn_txq_set_sched, - .txq_agg_enable = iwlagn_txq_agg_enable, - .txq_agg_disable = iwlagn_txq_agg_disable, .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, .txq_free_tfd = iwl_hw_txq_free_tfd, .txq_init = iwl_hw_tx_queue_init,
drivers/net/wireless/iwlwifi/iwl-6000.c +0 -4
@@ -288,8 +288,6 @@ static struct iwl_lib_ops iwl6000_lib = { .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, .txq_set_sched = iwlagn_txq_set_sched, - .txq_agg_enable = iwlagn_txq_agg_enable, - .txq_agg_disable = iwlagn_txq_agg_disable, .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, .txq_free_tfd = iwl_hw_txq_free_tfd, .txq_init = iwl_hw_tx_queue_init,
@@ -357,8 +355,6 @@ static struct iwl_lib_ops iwl6030_lib = { .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, .txq_set_sched = iwlagn_txq_set_sched, - .txq_agg_enable = iwlagn_txq_agg_enable, - .txq_agg_disable = iwlagn_txq_agg_disable, .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, .txq_free_tfd = iwl_hw_txq_free_tfd, .txq_init = iwl_hw_tx_queue_init,
drivers/net/wireless/iwlwifi/iwl-agn-tx.c +7 -10
@@ -222,8 +222,8 @@ void iwlagn_tx_queue_set_status(struct iwl_priv *priv, scd_retry ? "BA" : "AC/CMD", txq_id, tx_fifo_id); } -int iwlagn_txq_agg_enable (struct iwl_priv *priv,int txq_id, -int tx_fifo,int sta_id,int tid,u16 ssn_idx) +static int iwlagn_txq_agg_enable (struct iwl_priv *priv,int txq_id, +int tx_fifo,int sta_id,int tid,u16 ssn_idx) {unsigned long flags;u16 ra_tid;
@@ -288,8 +288,8 @@ int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,return 0 ; } -int iwlagn_txq_agg_disable (struct iwl_priv *priv,u16 txq_id, -u16 ssn_idx,u8 tx_fifo) +static int iwlagn_txq_agg_disable (struct iwl_priv *priv,u16 txq_id, +u16 ssn_idx,u8 tx_fifo) { if ((IWLAGN_FIRST_AMPDU_QUEUE > txq_id) || (IWLAGN_FIRST_AMPDU_QUEUE +
@@ -1037,8 +1037,7 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,iwl_set_swq_id (&priv->txq[txq_id],get_ac_from_tid (tid), txq_id);spin_unlock_irqrestore (&priv->sta_lock, flags); - ret = priv->cfg->ops->lib->txq_agg_enable (priv, txq_id, tx_fifo, - sta_id, tid, *ssn); + ret =iwlagn_txq_agg_enable (priv, txq_id, tx_fifo, sta_id, tid, *ssn);if (ret)return ret;
@@ -1125,8 +1124,7 @@ int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,* to deactivate the uCode queue, just return "success" to allow * mac80211 to clean up it own data. */ - priv->cfg->ops->lib->txq_agg_disable (priv, txq_id, ssn, - tx_fifo_id); +iwlagn_txq_agg_disable (priv, txq_id, ssn, tx_fifo_id);spin_unlock_irqrestore (&priv->lock, flags);ieee80211_stop_tx_ba_cb_irqsafe (vif, sta->addr, tid);
@@ -1155,8 +1153,7 @@ int iwlagn_txq_check_empty(struct iwl_priv *priv,u16 ssn =SEQ_TO_SN (tid_data->seq_number);int tx_fifo =get_fifo_from_tid (ctx, tid);IWL_DEBUG_HT (priv,"HW queue empty: continue DELBA flow\n" ); - priv->cfg->ops->lib->txq_agg_disable (priv, txq_id, - ssn, tx_fifo); +iwlagn_txq_agg_disable (priv, txq_id, ssn, tx_fifo); tid_data->agg.state =IWL_AGG_OFF ;ieee80211_stop_tx_ba_cb_irqsafe (ctx->vif, addr, tid); }
drivers/net/wireless/iwlwifi/iwl-agn.h +0 -4
@@ -133,10 +133,6 @@ void iwlagn_txq_update_byte_cnt_tbl(struct iwl_priv *priv, u16 byte_cnt);void iwlagn_txq_inval_byte_cnt_tbl (struct iwl_priv *priv,struct iwl_tx_queue *txq); -int iwlagn_txq_agg_enable (struct iwl_priv *priv,int txq_id, -int tx_fifo,int sta_id,int tid,u16 ssn_idx); -int iwlagn_txq_agg_disable (struct iwl_priv *priv,u16 txq_id, -u16 ssn_idx,u8 tx_fifo);void iwlagn_txq_set_sched (struct iwl_priv *priv,u32 mask);void iwl_free_tfds_in_queue (struct iwl_priv *priv,int sta_id,int tid,int freed);
drivers/net/wireless/iwlwifi/iwl-core.h +0 -5
@@ -171,11 +171,6 @@ struct iwl_lib_ops { struct iwl_tx_queue *txq);int (*txq_init)(struct iwl_priv *priv,struct iwl_tx_queue *txq); -/* aggregations */ -int (*txq_agg_enable)(struct iwl_priv *priv,int txq_id,int tx_fifo, -int sta_id,int tid,u16 ssn_idx); -int (*txq_agg_disable)(struct iwl_priv *priv,u16 txq_id,u16 ssn_idx, -u8 tx_fifo);/* setup Rx handler */ void (*rx_handler_setup)(struct iwl_priv *priv);/* setup deferred work */
Signature · 1 line
1.7.0.4
PATCH 4/12 iwlagn: fix aggregation queue scheduler setup
In reply to Wey-Yi GuyFrom: Johannes Berg <[email protected]>
iwlagn's hardware scheduler needs to be set up with the right aggregation frame limit and buffer sizes. To achieve this, we need to move the hardware queue setup to when the session becomes operational.
--- drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 47 +++++++++++++++++++---------- drivers/net/wireless/iwlwifi/iwl-agn.c | 4 ++ drivers/net/wireless/iwlwifi/iwl-agn.h | 3 ++ drivers/net/wireless/iwlwifi/iwl-dev.h | 1 + 4 files changed, 39 insertions(+), 16 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn-tx.c +31 -16
@@ -222,13 +222,8 @@ void iwlagn_tx_queue_set_status(struct iwl_priv *priv, scd_retry ? "BA" : "AC/CMD", txq_id, tx_fifo_id); } -static int iwlagn_txq_agg_enable (struct iwl_priv *priv,int txq_id, -int tx_fifo,int sta_id,int tid,u16 ssn_idx) +static int iwlagn_txq_agg_enable (struct iwl_priv *priv,int txq_id,int sta_id,int tid) { -unsigned long flags; -u16 ra_tid; -int ret; -if ((IWLAGN_FIRST_AMPDU_QUEUE > txq_id) || (IWLAGN_FIRST_AMPDU_QUEUE + priv->cfg->base_params->num_of_ampdu_queues <= txq_id)) {
@@ -240,12 +235,33 @@ static int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,return -EINVAL ; } - ra_tid =BUILD_RAxTID (sta_id, tid); -/* Modify device's station table to Tx this TID */ - ret =iwl_sta_tx_modify_enable_tid (priv, sta_id, tid); -if (ret) -return ret; +return iwl_sta_tx_modify_enable_tid (priv, sta_id, tid); +} + +void iwlagn_txq_agg_queue_setup (struct iwl_priv *priv, +struct ieee80211_sta *sta, +int tid,int frame_limit) +{ +int sta_id, tx_fifo, txq_id, ssn_idx; +u16 ra_tid; +unsigned long flags; +struct iwl_tid_data *tid_data; + + sta_id =iwl_sta_id (sta); +if (WARN_ON (sta_id ==IWL_INVALID_STATION )) +return ; +if (WARN_ON (tid >=MAX_TID_COUNT )) +return ; + +spin_lock_irqsave (&priv->sta_lock, flags); + tid_data = &priv->stations[sta_id].tid[tid]; + ssn_idx =SEQ_TO_SN (tid_data->seq_number); + txq_id = tid_data->agg.txq_id; + tx_fifo = tid_data->agg.tx_fifo; +spin_unlock_irqrestore (&priv->sta_lock, flags); + + ra_tid =BUILD_RAxTID (sta_id, tid);spin_lock_irqsave (&priv->lock, flags);
@@ -271,10 +287,10 @@ static int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,iwl_write_targ_mem (priv, priv->scd_base_addr +IWLAGN_SCD_CONTEXT_QUEUE_OFFSET (txq_id) +sizeof (u32), - ((SCD_WIN_SIZE << + ((frame_limit <<IWLAGN_SCD_QUEUE_CTX_REG2_WIN_SIZE_POS ) &IWLAGN_SCD_QUEUE_CTX_REG2_WIN_SIZE_MSK ) | - ((SCD_FRAME_LIMIT << + ((frame_limit <<IWLAGN_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS ) &IWLAGN_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK ));
@@ -284,8 +300,6 @@ static int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,iwlagn_tx_queue_set_status (priv, &priv->txq[txq_id], tx_fifo,1 );spin_unlock_irqrestore (&priv->lock, flags); - -return 0 ; } static int iwlagn_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
@@ -1034,10 +1048,11 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif, tid_data = &priv->stations[sta_id].tid[tid]; *ssn =SEQ_TO_SN (tid_data->seq_number); tid_data->agg.txq_id = txq_id; + tid_data->agg.tx_fifo = tx_fifo;iwl_set_swq_id (&priv->txq[txq_id],get_ac_from_tid (tid), txq_id);spin_unlock_irqrestore (&priv->sta_lock, flags); - ret =iwlagn_txq_agg_enable (priv, txq_id, tx_fifo, sta_id, tid, *ssn); + ret =iwlagn_txq_agg_enable (priv, txq_id, sta_id, tid);if (ret)return ret;
drivers/net/wireless/iwlwifi/iwl-agn.c +4 -0
@@ -3345,6 +3345,10 @@ int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, }break ;case IEEE80211_AMPDU_TX_OPERATIONAL : + buf_size =min_t (int, buf_size,LINK_QUAL_AGG_FRAME_LIMIT_DEF ); + +iwlagn_txq_agg_queue_setup (priv, sta, tid, buf_size); +/* * If the limit is 0, then it wasn't initialised yet, * use the default. We can do that since we take the
drivers/net/wireless/iwlwifi/iwl-agn.h +3 -0
@@ -202,6 +202,9 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif, struct ieee80211_sta *sta, u16 tid, u16 *ssn);int iwlagn_tx_agg_stop (struct iwl_priv *priv,struct ieee80211_vif *vif,struct ieee80211_sta *sta,u16 tid); +void iwlagn_txq_agg_queue_setup (struct iwl_priv *priv, +struct ieee80211_sta *sta, +int tid,int frame_limit);int iwlagn_txq_check_empty (struct iwl_priv *priv,int sta_id,u8 tid,int txq_id); void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
drivers/net/wireless/iwlwifi/iwl-dev.h +1 -0
@@ -416,6 +416,7 @@ struct iwl_ht_agg {#define IWL_EMPTYING_HW_QUEUE_ADDBA 2#define IWL_EMPTYING_HW_QUEUE_DELBA 3u8 state; +u8 tx_fifo; };
Signature · 1 line
1.7.0.4
PATCH 5/12 iwlwifi: limit number of attempts for highest HT rate
In reply to Wey-Yi GuyFrom: Daniel Halperin <[email protected]>
When filling out its rate scale table, iwlwifi repeats the first HT rate IWL_HT_NUMBER_TRY times. The hardware scheduler will stop using aggregation for any frame that fails LINK_QUAL_AGG_DISABLE_START_DEF times. Currently, both these constants equal 3.
If iwlwifi probes a faster rate than the link supports, all frames in a (potentially tens of frames large) batch will fail IWL_HT_NUMBER_TRY times. Because this happens to be as large as LINK_QUAL_AGG_DISABLE_START_DEF, all frames will then be sent individually. This leads to a short, but performance-degrading window where the legacy stop-and-wait MAC takes over.
Bounding the initial rate by (LINK_QUAL_AGG_DISABLE_START_DEF-1) attempts makes the third try use a lower rate and hence more be likely to succeed. This somewhat mitigates the above described behavior.
--- drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn-rs.c +2 -1
@@ -2912,7 +2912,8 @@ static void rs_fill_link_cmd(struct iwl_priv *priv, ant_toggle_cnt =1 ; repeat_rate =IWL_NUMBER_TRY ; }else { - repeat_rate =IWL_HT_NUMBER_TRY ; + repeat_rate =min (IWL_HT_NUMBER_TRY , +LINK_QUAL_AGG_DISABLE_START_DEF -1 ); } lq_cmd->general_params.mimo_delimiter =
Signature · 1 line
1.7.0.4
PATCH 6/12 iwlwifi: cleanup and bugfix tx aggregation code
In reply to Wey-Yi GuyFrom: Daniel Halperin <[email protected]>
Since the driver split, there's no need for no_agg_framecnt_info since all devices have this set to false. Secondly, the compressed block ack handling code was broken. Fix this.
(1) A shift less than zero simply implies that the buffer wrapped, this is expected. Remove the incorrect comment.
(2) The (agg->frame_count > (64-sh)) condition can happen if the last frame is dropped. E.g., if I send 7 frames and the 6th is received but the 7th is lost, the other side may only shift the window 6, not 7 frames since the last bit is a 0. This is perfectly fine behavior and doesn't invalidate the feedback.
(3) Store the feedback from a Compressed BA in the first newly received frame, rather than the start of the window. This way it will get processed by the rate selection code. Feedback stored in a non-received frame is likely to get overwritten by the retransmission. This is based on the approach taken by minstrel_ht.
--- drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 82 +++++++++------------------- drivers/net/wireless/iwlwifi/iwl-core.h | 3 - 2 files changed, 27 insertions(+), 58 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn-tx.c +27 -55
@@ -1263,11 +1263,11 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv, struct iwl_compressed_ba_resp *ba_resp) { -int i, sh, ack; +int sh;u16 seq_ctl =le16_to_cpu (ba_resp->seq_ctl);u16 scd_flow =le16_to_cpu (ba_resp->scd_flow); -int successes =0 ;struct ieee80211_tx_info *info; +u64 bitmap, sent_bitmap;if (unlikely (!agg->wait_for_ba)) {if (unlikely (ba_resp->bitmap))
@@ -1281,70 +1281,42 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,/* Calculate shift to align block-ack bits with our Tx window bits */ sh = agg->start_idx -SEQ_TO_INDEX (seq_ctl >>4 ); -if (sh <0 )/* tbw something is wrong with indices */ +if (sh <0 ) sh +=0x100 ; -if (agg->frame_count > (64 - sh)) { -IWL_DEBUG_TX_REPLY (priv,"more frames than bitmap size" ); -return -1 ; - } -if (!priv->cfg->base_params->no_agg_framecnt_info && ba_resp->txed) { +/* +* Check for success or failure according to the +* transmitted bitmap and block-ack bitmap +*/ + bitmap =le64_to_cpu (ba_resp->bitmap) >> sh; + sent_bitmap = bitmap & agg->bitmap; + +/* Sanity check values reported by uCode */ +if (ba_resp->txed_2_done > ba_resp->txed) { +IWL_DEBUG_TX_REPLY (priv, +"bogus sent(%d) and ack(%d) count\n" , + ba_resp->txed, ba_resp->txed_2_done);/* -* sent and ack information provided by uCode -* use it instead of figure out ourself +* set txed_2_done = txed, +* so it won't impact rate scale */ -if (ba_resp->txed_2_done > ba_resp->txed) { -IWL_DEBUG_TX_REPLY (priv, -"bogus sent(%d) and ack(%d) count\n" , - ba_resp->txed, ba_resp->txed_2_done); -/* -* set txed_2_done = txed, -* so it won't impact rate scale -*/ - ba_resp->txed = ba_resp->txed_2_done; - } -IWL_DEBUG_HT (priv,"agg frames sent:%d, acked:%d\n" , - ba_resp->txed, ba_resp->txed_2_done); - }else { -u64 bitmap, sent_bitmap; - -/* don't use 64-bit values for now */ - bitmap =le64_to_cpu (ba_resp->bitmap) >> sh; - -/* check for success or failure according to the -* transmitted bitmap and block-ack bitmap */ - sent_bitmap = bitmap & agg->bitmap; - -/* For each frame attempted in aggregation, -* update driver's record of tx frame's status. */ - i =0 ; -while (sent_bitmap) { - ack = sent_bitmap &1ULL ; - successes += ack; -IWL_DEBUG_TX_REPLY (priv,"%s ON i=%d idx=%d raw=%d\n" , - ack ?"ACK" :"NACK" , i, - (agg->start_idx + i) &0xff , - agg->start_idx + i); - sent_bitmap >>=1 ; - ++i; - } + ba_resp->txed = ba_resp->txed_2_done; + } +IWL_DEBUG_HT (priv,"agg frames sent:%d, acked:%d\n" , + ba_resp->txed, ba_resp->txed_2_done); -IWL_DEBUG_TX_REPLY (priv,"Bitmap %llx\n" , - (unsigned long long )bitmap); +/* Find the first ACKed frame to store the TX status */ +while (sent_bitmap && !(sent_bitmap &1 )) { + agg->start_idx = (agg->start_idx +1 ) &0xff ; + sent_bitmap >>=1 ; } info =IEEE80211_SKB_CB (priv->txq[scd_flow].txb[agg->start_idx].skb);memset (&info->status,0 ,sizeof (info->status)); info->flags |=IEEE80211_TX_STAT_ACK ; info->flags |=IEEE80211_TX_STAT_AMPDU ; -if (!priv->cfg->base_params->no_agg_framecnt_info && ba_resp->txed) { - info->status.ampdu_ack_len = ba_resp->txed_2_done; - info->status.ampdu_len = ba_resp->txed; - - }else { - info->status.ampdu_ack_len = successes; - info->status.ampdu_len = agg->frame_count; - } + info->status.ampdu_ack_len = ba_resp->txed_2_done; + info->status.ampdu_len = ba_resp->txed;iwlagn_hwrate_to_tx_control (priv, agg->rate_n_flags, info);return 0 ;
drivers/net/wireless/iwlwifi/iwl-core.h +0 -3
@@ -281,8 +281,6 @@ struct iwl_mod_params {* @chain_noise_calib_by_driver: driver has the capability to perform * chain noise calibration operation * @shadow_reg_enable: HW shadhow register bit -* @no_agg_framecnt_info: uCode do not provide aggregation frame count -* information */ struct iwl_base_params {int eeprom_size;
@@ -312,7 +310,6 @@ struct iwl_base_params {const bool sensitivity_calib_by_driver;const bool chain_noise_calib_by_driver;const bool shadow_reg_enable; -const bool no_agg_framecnt_info; };/* * @advanced_bt_coexist: support advanced bt coexist
Signature · 1 line
1.7.0.4
PATCH 7/12 iwlwifi: add RATE_MCS_RATE_MSK
In reply to Wey-Yi GuyFrom: Daniel Halperin <[email protected]>
Throughout the code we use rate_n_flags & 0xff to extract the lower byte of the rate_n_flags u32 that contains the information about the rate. Add a #define and remove the use of the magic number.
--- drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 15 ++++++++------- drivers/net/wireless/iwlwifi/iwl-agn.h | 2 +- drivers/net/wireless/iwlwifi/iwl-commands.h | 2 ++ 3 files changed, 11 insertions(+), 8 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn-rs.c +8 -7
@@ -115,13 +115,18 @@ const struct iwl_rate_info iwl_rates[IWL_RATE_COUNT] = {/* FIXME:RS: ^^ should be INV (legacy) */ }; +static inline u8 rs_extract_rate (u32 rate_n_flags) +{ +return (u8)(rate_n_flags &RATE_MCS_RATE_MSK ); +} +static int iwl_hwrate_to_plcp_idx (u32 rate_n_flags) {int idx =0 ;/* HT rate format */ if (rate_n_flags &RATE_MCS_HT_MSK ) { - idx = (rate_n_flags &0xff ); + idx =rs_extract_rate (rate_n_flags);if (idx >=IWL_RATE_MIMO3_6M_PLCP ) idx = idx -IWL_RATE_MIMO3_6M_PLCP ;
@@ -138,7 +143,8 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)/* legacy rate format, search for match in table */ }else {for (idx =0 ; idx <ARRAY_SIZE (iwl_rates); idx++) -if (iwl_rates[idx].plcp == (rate_n_flags &0xFF )) +if (iwl_rates[idx].plcp == +rs_extract_rate (rate_n_flags))return idx; }
@@ -239,11 +245,6 @@ static const struct iwl_rate_mcs_info iwl_rate_mcs[IWL_RATE_COUNT] = {#define MCS_INDEX_PER_STREAM (8) -static inline u8 rs_extract_rate (u32 rate_n_flags) -{ -return (u8)(rate_n_flags &0xFF ); -} -static void rs_rate_scale_clear_window (struct iwl_rate_scale_data *window) { window->data =0 ;
drivers/net/wireless/iwlwifi/iwl-agn.h +1 -1
@@ -310,7 +310,7 @@ static inline u32 iwl_ant_idx_to_flags(u8 ant_idx)static inline u8 iwl_hw_get_rate (__le32 rate_n_flags) { -return le32_to_cpu (rate_n_flags) &0xFF ; +return le32_to_cpu (rate_n_flags) &RATE_MCS_RATE_MSK ; }static inline __le32 iwl_hw_set_rate_n_flags (u8 rate,u32 flags)
drivers/net/wireless/iwlwifi/iwl-commands.h +2 -0
@@ -324,6 +324,8 @@ struct iwl3945_power_per_rate {#define RATE_MCS_SPATIAL_MSK 0x18#define RATE_MCS_HT_DUP_POS 5#define RATE_MCS_HT_DUP_MSK 0x20 +/* Both legacy and HT use bits 7:0 as the CCK/OFDM rate or HT MCS */ +#define RATE_MCS_RATE_MSK 0xff/* Bit 8: (1) HT format, (0) legacy format in bits 7:0 */ #define RATE_MCS_FLAGS_POS 8
Signature · 1 line
1.7.0.4
PATCH 8/12 iwlwifi: set default aggregation frame limit to 63
In reply to Wey-Yi GuyFrom: Daniel Halperin <[email protected]>
This gives much better performance at fast 3x3 rates (up to ~160 Mbps). The scheduler will still make most decisions about batch size based on available packets and RX parameters.
--- drivers/net/wireless/iwlwifi/iwl-commands.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/wireless/iwlwifi/iwl-commands.h +1 -1
@@ -2132,7 +2132,7 @@ struct iwl_link_qual_general_params {#define LINK_QUAL_AGG_DISABLE_START_MAX (255)#define LINK_QUAL_AGG_DISABLE_START_MIN (0) -#define LINK_QUAL_AGG_FRAME_LIMIT_DEF (31) +#define LINK_QUAL_AGG_FRAME_LIMIT_DEF (63)#define LINK_QUAL_AGG_FRAME_LIMIT_MAX (63)#define LINK_QUAL_AGG_FRAME_LIMIT_MIN (0)
Signature · 1 line
1.7.0.4
PATCH 9/12 iwlwifi: remove legacy isr tasklet
In reply to Wey-Yi GuyAfter driver split, no need for support legacy isr, remove it.
--- drivers/net/wireless/iwlwifi/iwl-agn-ict.c | 2 - drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 3 +- drivers/net/wireless/iwlwifi/iwl-agn.c | 193 +--------------------------- drivers/net/wireless/iwlwifi/iwl-core.h | 1 - 4 files changed, 3 insertions(+), 196 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn-ict.c +0 -2
@@ -59,8 +59,6 @@ void iwl_free_isr_ict(struct iwl_priv *priv)int iwl_alloc_isr_ict (struct iwl_priv *priv) { -if (priv->cfg->base_params->use_isr_legacy) -return 0 ;/* allocate shrared data table */ priv->_agn.ict_tbl_vir = dma_alloc_coherent(&priv->pci_dev->dev,
drivers/net/wireless/iwlwifi/iwl-agn-lib.c +1 -2
@@ -652,8 +652,7 @@ int iwlagn_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)const u32 rfdnlog =RX_QUEUE_SIZE_LOG ;/* 256 RBDs */ u32 rb_timeout =0 ;/* FIXME: RX_RB_TIMEOUT for all devices? */ -if (!priv->cfg->base_params->use_isr_legacy) - rb_timeout =RX_RB_TIMEOUT ; + rb_timeout =RX_RB_TIMEOUT ;if (priv->cfg->mod_params->amsdu_size_8K) rb_size =FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K ;
drivers/net/wireless/iwlwifi/iwl-agn.c +2 -191
205 lines not on this page · raw message
drivers/net/wireless/iwlwifi/iwl-core.h +0 -1
@@ -291,7 +291,6 @@ struct iwl_base_params {bool set_l0s;bool use_bsm; -bool use_isr_legacy;const u16 max_ll_items;const bool shadow_ram_support;u16 led_compensation;
Signature · 1 line
1.7.0.4
PATCH 10/12 iwlagn: remove 3945 only station code
In reply to Wey-Yi GuyAfter driver split, no more 3945 only station support needed.
--- drivers/net/wireless/iwlwifi/iwl-sta.c | 6 ------ 1 files changed, 0 insertions(+), 6 deletions(-)
drivers/net/wireless/iwlwifi/iwl-sta.c +0 -6
@@ -306,12 +306,6 @@ u8 iwl_prep_station(struct iwl_priv *priv, struct iwl_rxon_context *ctx,*/ iwl_set_ht_add_station (priv, sta_id, sta, ctx); -/* 3945 only */ - rate = (priv->band ==IEEE80211_BAND_5GHZ ) ? -IWL_RATE_6M_PLCP :IWL_RATE_1M_PLCP ; -/* Turn on both antennas for the station... */ - station->sta.rate_n_flags =cpu_to_le16 (rate |RATE_MCS_ANT_AB_MSK ); -return sta_id; }
Signature · 1 line
1.7.0.4
PATCH 11/12 iwlagn: remove reference to 3945 and 4965
In reply to Wey-Yi GuyAfter driver split, remove the unused reference to 3945 and 4965
--- drivers/net/wireless/iwlwifi/iwl-agn.c | 39 +++++++++++----------------- drivers/net/wireless/iwlwifi/iwl-csr.h | 39 ++++++----------------------- drivers/net/wireless/iwlwifi/iwl-eeprom.c | 2 - 3 files changed, 23 insertions(+), 57 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn.c +15 -24
@@ -409,7 +409,7 @@ int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv,* Tell nic where to find circular buffer of Tx Frame Descriptors for * given Tx queue, and enable the DMA channel used for that queue. * -* 4965 supports up to 16 Tx queues in DRAM, mapped to up to 8 Tx DMA +* supports up to 16 Tx queues in DRAM, mapped to up to 8 Tx DMA * channels supported in hardware. */ int iwl_hw_tx_queue_init(struct iwl_priv *priv,
@@ -986,7 +986,7 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)if (inta & (CSR_INT_BIT_FH_RX |CSR_INT_BIT_SW_RX )) { handled |= (CSR_INT_BIT_FH_RX |CSR_INT_BIT_SW_RX );iwl_write32 (priv,CSR_FH_INT_STATUS , -CSR49_FH_INT_RX_MASK ); +CSR_FH_INT_RX_MASK ); }if (inta &CSR_INT_BIT_RX_PERIODIC ) { handled |=CSR_INT_BIT_RX_PERIODIC ;
@@ -1024,7 +1024,7 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)/* This "Tx" DMA channel is used only for loading uCode */ if (inta &CSR_INT_BIT_FH_TX ) { -iwl_write32 (priv,CSR_FH_INT_STATUS ,CSR49_FH_INT_TX_MASK ); +iwl_write32 (priv,CSR_FH_INT_STATUS ,CSR_FH_INT_TX_MASK );IWL_DEBUG_ISR (priv,"uCode load interrupt\n" ); priv->isr_stats.tx++; handled |=CSR_INT_BIT_FH_TX ;
@@ -1259,28 +1259,19 @@ static int iwlagn_load_legacy_firmware(struct iwl_priv *priv,switch (api_ver) {default : -/* -* 4965 doesn't revision the firmware file format -* along with the API version, it always uses v1 -* file format. -*/ -if ((priv->hw_rev &CSR_HW_REV_TYPE_MSK ) != -CSR_HW_REV_TYPE_4965 ) { - hdr_size =28 ; -if (ucode_raw->size < hdr_size) { -IWL_ERR (priv,"File size too small!\n" ); -return -EINVAL ; - } - pieces->build =le32_to_cpu (ucode->u.v2.build); - pieces->inst_size =le32_to_cpu (ucode->u.v2.inst_size); - pieces->data_size =le32_to_cpu (ucode->u.v2.data_size); - pieces->init_size =le32_to_cpu (ucode->u.v2.init_size); - pieces->init_data_size =le32_to_cpu (ucode->u.v2.init_data_size); - pieces->boot_size =le32_to_cpu (ucode->u.v2.boot_size); - src = ucode->u.v2.data; -break ; + hdr_size =28 ; +if (ucode_raw->size < hdr_size) { +IWL_ERR (priv,"File size too small!\n" ); +return -EINVAL ; } -/* fall through for 4965 */ + pieces->build =le32_to_cpu (ucode->u.v2.build); + pieces->inst_size =le32_to_cpu (ucode->u.v2.inst_size); + pieces->data_size =le32_to_cpu (ucode->u.v2.data_size); + pieces->init_size =le32_to_cpu (ucode->u.v2.init_size); + pieces->init_data_size =le32_to_cpu (ucode->u.v2.init_data_size); + pieces->boot_size =le32_to_cpu (ucode->u.v2.boot_size); + src = ucode->u.v2.data; +break ;case 0 :case 1 :case 2 :
drivers/net/wireless/iwlwifi/iwl-csr.h +8 -31
@@ -155,18 +155,10 @@#define CSR_DBG_LINK_PWR_MGMT_REG (CSR_BASE+0x250)/* Bits for CSR_HW_IF_CONFIG_REG */ -#define CSR49_HW_IF_CONFIG_REG_BIT_4965_R (0x00000010)#define CSR_HW_IF_CONFIG_REG_MSK_BOARD_VER (0x00000C00)#define CSR_HW_IF_CONFIG_REG_BIT_MAC_SI (0x00000100)#define CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI (0x00000200) -#define CSR39_HW_IF_CONFIG_REG_BIT_3945_MB (0x00000100) -#define CSR39_HW_IF_CONFIG_REG_BIT_3945_MM (0x00000200) -#define CSR39_HW_IF_CONFIG_REG_BIT_SKU_MRC (0x00000400) -#define CSR39_HW_IF_CONFIG_REG_BIT_BOARD_TYPE (0x00000800) -#define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A (0x00000000) -#define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B (0x00001000) -#define CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A (0x00080000)#define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM (0x00200000)#define CSR_HW_IF_CONFIG_REG_BIT_NIC_READY (0x00400000)/* PCI_OWN_SEM */
@@ -186,7 +178,7 @@#define CSR_INT_BIT_SW_ERR (1 << 25)/* uCode error */ #define CSR_INT_BIT_RF_KILL (1 << 7)/* HW RFKILL switch GP_CNTRL[27] toggled */ #define CSR_INT_BIT_CT_KILL (1 << 6)/* Critical temp (chip too hot) rfkill */ -#define CSR_INT_BIT_SW_RX (1 << 3)/* Rx, command responses, 3945 */ +#define CSR_INT_BIT_SW_RX (1 << 3)/* Rx, command responses */ #define CSR_INT_BIT_WAKEUP (1 << 1)/* NIC controller waking up (pwr mgmt) */ #define CSR_INT_BIT_ALIVE (1 << 0)/* uCode interrupts once it initializes */
@@ -202,29 +194,17 @@/* interrupt flags in FH (flow handler) (PCI busmaster DMA) */ #define CSR_FH_INT_BIT_ERR (1 << 31)/* Error */ #define CSR_FH_INT_BIT_HI_PRIOR (1 << 30)/* High priority Rx, bypass coalescing */ -#define CSR39_FH_INT_BIT_RX_CHNL2 (1 << 18)/* Rx channel 2 (3945 only) */ #define CSR_FH_INT_BIT_RX_CHNL1 (1 << 17)/* Rx channel 1 */ #define CSR_FH_INT_BIT_RX_CHNL0 (1 << 16)/* Rx channel 0 */ -#define CSR39_FH_INT_BIT_TX_CHNL6 (1 << 6)/* Tx channel 6 (3945 only) */ #define CSR_FH_INT_BIT_TX_CHNL1 (1 << 1)/* Tx channel 1 */ #define CSR_FH_INT_BIT_TX_CHNL0 (1 << 0)/* Tx channel 0 */ -#define CSR39_FH_INT_RX_MASK (CSR_FH_INT_BIT_HI_PRIOR | \ - CSR39_FH_INT_BIT_RX_CHNL2 | \ - CSR_FH_INT_BIT_RX_CHNL1 | \ - CSR_FH_INT_BIT_RX_CHNL0) - - -#define CSR39_FH_INT_TX_MASK (CSR39_FH_INT_BIT_TX_CHNL6 | \ - CSR_FH_INT_BIT_TX_CHNL1 | \ - CSR_FH_INT_BIT_TX_CHNL0) - -#define CSR49_FH_INT_RX_MASK (CSR_FH_INT_BIT_HI_PRIOR | \ - CSR_FH_INT_BIT_RX_CHNL1 | \ - CSR_FH_INT_BIT_RX_CHNL0) +#define CSR_FH_INT_RX_MASK (CSR_FH_INT_BIT_HI_PRIOR | \ + CSR_FH_INT_BIT_RX_CHNL1 | \ + CSR_FH_INT_BIT_RX_CHNL0) -#define CSR49_FH_INT_TX_MASK (CSR_FH_INT_BIT_TX_CHNL1 | \ - CSR_FH_INT_BIT_TX_CHNL0) +#define CSR_FH_INT_TX_MASK (CSR_FH_INT_BIT_TX_CHNL1 | \ + CSR_FH_INT_BIT_TX_CHNL0)/* GPIO */ #define CSR_GPIO_IN_BIT_AUX_POWER (0x00000200)
@@ -268,7 +248,7 @@* Indicates MAC (ucode processor, etc.) is powered up and can run. * Internal resources are accessible. * NOTE: This does not indicate that the processor is actually running. -* NOTE: This does not indicate that 4965 or 3945 has completed +* NOTE: This does not indicate that device has completed * init or post-power-down restore of internal SRAM memory. * Use CSR_UCODE_DRV_GP1_BIT_MAC_SLEEP as indication that * SRAM is restored and uCode is in normal operation mode.
@@ -291,8 +271,6 @@/* HW REV */ #define CSR_HW_REV_TYPE_MSK (0x00001F0) -#define CSR_HW_REV_TYPE_3945 (0x00000D0) -#define CSR_HW_REV_TYPE_4965 (0x0000000)#define CSR_HW_REV_TYPE_5300 (0x0000020)#define CSR_HW_REV_TYPE_5350 (0x0000030)#define CSR_HW_REV_TYPE_5100 (0x0000050)
@@ -363,7 +341,7 @@* 0: MAC_SLEEP * uCode sets this when preparing a power-saving power-down. * uCode resets this when power-up is complete and SRAM is sane. -* NOTE: 3945/4965 saves internal SRAM data to host when powering down, +* NOTE: device saves internal SRAM data to host when powering down, * and must restore this data after powering back up. * MAC_SLEEP is the best indication that restore is complete. * Later devices (5xxx/6xxx/1xxx) use non-volatile SRAM, and
@@ -394,7 +372,6 @@#define CSR_LED_REG_TRUN_OFF (0x38)/* ANA_PLL */ -#define CSR39_ANA_PLL_CFG_VAL (0x01000000)#define CSR50_ANA_PLL_CFG_VAL (0x00880300)/* HPET MEM debug */
drivers/net/wireless/iwlwifi/iwl-eeprom.c +0 -2
@@ -198,8 +198,6 @@ static int iwlcore_get_nvm_type(struct iwl_priv *priv)case CSR_HW_REV_TYPE_NONE :IWL_ERR (priv,"Unknown hardware type\n" );return -ENOENT ; -case CSR_HW_REV_TYPE_3945 : -case CSR_HW_REV_TYPE_4965 :case CSR_HW_REV_TYPE_5300 :case CSR_HW_REV_TYPE_5350 :case CSR_HW_REV_TYPE_5100 :
Signature · 1 line
1.7.0.4
PATCH 12/12 iwlagn: remove deprecated module parameters
In reply to Wey-Yi GuyNumber of deprecated module parameters need to be remove for 2.6.40 kernel
--- drivers/net/wireless/iwlwifi/iwl-agn.c | 30 ------------------------------ drivers/net/wireless/iwlwifi/iwl-core.h | 1 - 2 files changed, 0 insertions(+), 31 deletions(-)
drivers/net/wireless/iwlwifi/iwl-agn.c +0 -30
@@ -3771,14 +3771,6 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)* 1. Allocating HW data ************************/ -/* Disabling hardware scan means that mac80211 will perform scans -* "the hard way", rather than using device's scan. */ -if (cfg->mod_params->disable_hw_scan) { -dev_printk (KERN_DEBUG , &(pdev->dev), -"sw scan support is deprecated\n" ); - iwlagn_hw_ops.hw_scan =NULL ; - } - hw =iwl_alloc_all (cfg);if (!hw) { err = -ENOMEM ;
@@ -4388,43 +4380,21 @@ module_exit(iwl_exit);module_init (iwl_init);#ifdef CONFIG_IWLWIFI_DEBUG -module_param_named (debug50, iwl_debug_level, uint,S_IRUGO ); -MODULE_PARM_DESC (debug50,"50XX debug output mask (deprecated)" );module_param_named (debug, iwl_debug_level, uint,S_IRUGO |S_IWUSR );MODULE_PARM_DESC (debug,"debug output mask" );#endif -module_param_named (swcrypto50, iwlagn_mod_params.sw_crypto, bool,S_IRUGO ); -MODULE_PARM_DESC (swcrypto50, -"using crypto in software (default 0 [hardware]) (deprecated)" );module_param_named (swcrypto, iwlagn_mod_params.sw_crypto, int,S_IRUGO );MODULE_PARM_DESC (swcrypto,"using crypto in software (default 0 [hardware])" ); -module_param_named (queues_num50, - iwlagn_mod_params.num_of_queues, int,S_IRUGO ); -MODULE_PARM_DESC (queues_num50, -"number of hw queues in 50xx series (deprecated)" );module_param_named (queues_num, iwlagn_mod_params.num_of_queues, int,S_IRUGO );MODULE_PARM_DESC (queues_num,"number of hw queues." ); -module_param_named(11n_disable50, iwlagn_mod_params.disable_11n, int, S_IRUGO); -MODULE_PARM_DESC(11n_disable50, "disable 50XX 11n functionality (deprecated)"); module_param_named(11n_disable, iwlagn_mod_params.disable_11n, int, S_IRUGO); MODULE_PARM_DESC(11n_disable, "disable 11n functionality"); -module_param_named (amsdu_size_8K50, iwlagn_mod_params.amsdu_size_8K, - int,S_IRUGO ); -MODULE_PARM_DESC (amsdu_size_8K50, -"enable 8K amsdu size in 50XX series (deprecated)" );module_param_named (amsdu_size_8K, iwlagn_mod_params.amsdu_size_8K, int,S_IRUGO );MODULE_PARM_DESC (amsdu_size_8K,"enable 8K amsdu size" ); -module_param_named (fw_restart50, iwlagn_mod_params.restart_fw, int,S_IRUGO ); -MODULE_PARM_DESC (fw_restart50, -"restart firmware in case of error (deprecated)" );module_param_named (fw_restart, iwlagn_mod_params.restart_fw, int,S_IRUGO );MODULE_PARM_DESC (fw_restart,"restart firmware in case of error" ); -module_param_named ( - disable_hw_scan, iwlagn_mod_params.disable_hw_scan, int,S_IRUGO ); -MODULE_PARM_DESC (disable_hw_scan, -"disable hardware scanning (default 0) (deprecated)" );module_param_named (ucode_alternative, iwlagn_wanted_ucode_alternative, int,S_IRUGO );
drivers/net/wireless/iwlwifi/iwl-core.h +0 -1
@@ -247,7 +247,6 @@ struct iwl_ops {struct iwl_mod_params {int sw_crypto;/* def: 0 = using hardware encryption */ -int disable_hw_scan;/* def: 0 = use h/w scan */ int num_of_queues;/* def: HW dependent */ int disable_11n;/* def: 0 = 11n capabilities enabled */ int amsdu_size_8K;/* def: 1 = enable 8K amsdu size */
Signature · 1 line
1.7.0.4