Commit f2c95b04 authored by Wey-Yi Guy's avatar Wey-Yi Guy Committed by John W. Linville

iwlwifi: default WMM AC parameters

Set the default WMM AC parameters for BK/BE/VI/VO parameters:

AC        CWmin         CW max      AIFSN      TXOP Limit    TXOP Limit
                                              (802.11b)      (802.11a/g)
AC_BK      15            1023        7           0               0
AC_BE      15            1023        3           0               0
AC_VI       7              15        2          188             94
                                              (6.016ms)       (3.008ms)
AC_VO       3               7        2          102             47
                                              (3.264ms)       (1.504ms)
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0b4d0ab4
...@@ -273,6 +273,14 @@ void iwl_activate_qos(struct iwl_priv *priv, u8 force) ...@@ -273,6 +273,14 @@ void iwl_activate_qos(struct iwl_priv *priv, u8 force)
} }
EXPORT_SYMBOL(iwl_activate_qos); EXPORT_SYMBOL(iwl_activate_qos);
/*
* AC CWmin CW max AIFSN TXOP Limit TXOP Limit
* (802.11b) (802.11a/g)
* AC_BK 15 1023 7 0 0
* AC_BE 15 1023 3 0 0
* AC_VI 7 15 2 6.016ms 3.008ms
* AC_VO 3 7 2 3.264ms 1.504ms
*/
void iwl_reset_qos(struct iwl_priv *priv) void iwl_reset_qos(struct iwl_priv *priv)
{ {
u16 cw_min = 15; u16 cw_min = 15;
...@@ -304,6 +312,7 @@ void iwl_reset_qos(struct iwl_priv *priv) ...@@ -304,6 +312,7 @@ void iwl_reset_qos(struct iwl_priv *priv)
if (priv->qos_data.qos_active) if (priv->qos_data.qos_active)
aifs = 3; aifs = 3;
/* AC_BE */
priv->qos_data.def_qos_parm.ac[0].cw_min = cpu_to_le16(cw_min); priv->qos_data.def_qos_parm.ac[0].cw_min = cpu_to_le16(cw_min);
priv->qos_data.def_qos_parm.ac[0].cw_max = cpu_to_le16(cw_max); priv->qos_data.def_qos_parm.ac[0].cw_max = cpu_to_le16(cw_max);
priv->qos_data.def_qos_parm.ac[0].aifsn = aifs; priv->qos_data.def_qos_parm.ac[0].aifsn = aifs;
...@@ -311,6 +320,7 @@ void iwl_reset_qos(struct iwl_priv *priv) ...@@ -311,6 +320,7 @@ void iwl_reset_qos(struct iwl_priv *priv)
priv->qos_data.def_qos_parm.ac[0].reserved1 = 0; priv->qos_data.def_qos_parm.ac[0].reserved1 = 0;
if (priv->qos_data.qos_active) { if (priv->qos_data.qos_active) {
/* AC_BK */
i = 1; i = 1;
priv->qos_data.def_qos_parm.ac[i].cw_min = cpu_to_le16(cw_min); priv->qos_data.def_qos_parm.ac[i].cw_min = cpu_to_le16(cw_min);
priv->qos_data.def_qos_parm.ac[i].cw_max = cpu_to_le16(cw_max); priv->qos_data.def_qos_parm.ac[i].cw_max = cpu_to_le16(cw_max);
...@@ -318,11 +328,12 @@ void iwl_reset_qos(struct iwl_priv *priv) ...@@ -318,11 +328,12 @@ void iwl_reset_qos(struct iwl_priv *priv)
priv->qos_data.def_qos_parm.ac[i].edca_txop = 0; priv->qos_data.def_qos_parm.ac[i].edca_txop = 0;
priv->qos_data.def_qos_parm.ac[i].reserved1 = 0; priv->qos_data.def_qos_parm.ac[i].reserved1 = 0;
/* AC_VI */
i = 2; i = 2;
priv->qos_data.def_qos_parm.ac[i].cw_min = priv->qos_data.def_qos_parm.ac[i].cw_min =
cpu_to_le16((cw_min + 1) / 2 - 1); cpu_to_le16((cw_min + 1) / 2 - 1);
priv->qos_data.def_qos_parm.ac[i].cw_max = priv->qos_data.def_qos_parm.ac[i].cw_max =
cpu_to_le16(cw_max); cpu_to_le16(cw_min);
priv->qos_data.def_qos_parm.ac[i].aifsn = 2; priv->qos_data.def_qos_parm.ac[i].aifsn = 2;
if (is_legacy) if (is_legacy)
priv->qos_data.def_qos_parm.ac[i].edca_txop = priv->qos_data.def_qos_parm.ac[i].edca_txop =
...@@ -332,11 +343,12 @@ void iwl_reset_qos(struct iwl_priv *priv) ...@@ -332,11 +343,12 @@ void iwl_reset_qos(struct iwl_priv *priv)
cpu_to_le16(3008); cpu_to_le16(3008);
priv->qos_data.def_qos_parm.ac[i].reserved1 = 0; priv->qos_data.def_qos_parm.ac[i].reserved1 = 0;
/* AC_VO */
i = 3; i = 3;
priv->qos_data.def_qos_parm.ac[i].cw_min = priv->qos_data.def_qos_parm.ac[i].cw_min =
cpu_to_le16((cw_min + 1) / 4 - 1); cpu_to_le16((cw_min + 1) / 4 - 1);
priv->qos_data.def_qos_parm.ac[i].cw_max = priv->qos_data.def_qos_parm.ac[i].cw_max =
cpu_to_le16((cw_max + 1) / 2 - 1); cpu_to_le16((cw_min + 1) / 2 - 1);
priv->qos_data.def_qos_parm.ac[i].aifsn = 2; priv->qos_data.def_qos_parm.ac[i].aifsn = 2;
priv->qos_data.def_qos_parm.ac[i].reserved1 = 0; priv->qos_data.def_qos_parm.ac[i].reserved1 = 0;
if (is_legacy) if (is_legacy)
......
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