iwlwifi: differentiate 4965 and 5000 hw ampdu queues number
This patch asks to allocate the correct amount of sw queues according to hw ampdu queues number. Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
1ff50bda6e
commit
9f17b318a1
@@ -819,6 +819,7 @@ enum {
|
|||||||
#define IWL49_NUM_FIFOS 7
|
#define IWL49_NUM_FIFOS 7
|
||||||
#define IWL49_CMD_FIFO_NUM 4
|
#define IWL49_CMD_FIFO_NUM 4
|
||||||
#define IWL49_NUM_QUEUES 16
|
#define IWL49_NUM_QUEUES 16
|
||||||
|
#define IWL49_NUM_AMPDU_QUEUES 8
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_tfd_frame_data
|
* struct iwl_tfd_frame_data
|
||||||
|
@@ -52,6 +52,7 @@ static int iwl4965_hw_get_temperature(const struct iwl_priv *priv);
|
|||||||
/* module parameters */
|
/* module parameters */
|
||||||
static struct iwl_mod_params iwl4965_mod_params = {
|
static struct iwl_mod_params iwl4965_mod_params = {
|
||||||
.num_of_queues = IWL49_NUM_QUEUES,
|
.num_of_queues = IWL49_NUM_QUEUES,
|
||||||
|
.num_of_ampdu_queues = IWL49_NUM_AMPDU_QUEUES,
|
||||||
.enable_qos = 1,
|
.enable_qos = 1,
|
||||||
.amsdu_size_8K = 1,
|
.amsdu_size_8K = 1,
|
||||||
.restart_fw = 1,
|
.restart_fw = 1,
|
||||||
@@ -1943,9 +1944,11 @@ static int iwl4965_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (IWL49_FIRST_AMPDU_QUEUE > txq_id) {
|
if ((IWL49_FIRST_AMPDU_QUEUE > txq_id) ||
|
||||||
IWL_WARNING("queue number too small: %d, must be > %d\n",
|
(IWL49_FIRST_AMPDU_QUEUE + IWL49_NUM_AMPDU_QUEUES <= txq_id)) {
|
||||||
txq_id, IWL49_FIRST_AMPDU_QUEUE);
|
IWL_WARNING("queue number out of range: %d, must be %d to %d\n",
|
||||||
|
txq_id, IWL49_FIRST_AMPDU_QUEUE,
|
||||||
|
IWL49_FIRST_AMPDU_QUEUE + IWL49_NUM_AMPDU_QUEUES - 1);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2012,9 +2015,13 @@ static int iwl4965_txq_agg_enable(struct iwl_priv *priv, int txq_id,
|
|||||||
int ret;
|
int ret;
|
||||||
u16 ra_tid;
|
u16 ra_tid;
|
||||||
|
|
||||||
if (IWL49_FIRST_AMPDU_QUEUE > txq_id)
|
if ((IWL49_FIRST_AMPDU_QUEUE > txq_id) ||
|
||||||
IWL_WARNING("queue number too small: %d, must be > %d\n",
|
(IWL49_FIRST_AMPDU_QUEUE + IWL49_NUM_AMPDU_QUEUES <= txq_id)) {
|
||||||
txq_id, IWL49_FIRST_AMPDU_QUEUE);
|
IWL_WARNING("queue number out of range: %d, must be %d to %d\n",
|
||||||
|
txq_id, IWL49_FIRST_AMPDU_QUEUE,
|
||||||
|
IWL49_FIRST_AMPDU_QUEUE + IWL49_NUM_AMPDU_QUEUES - 1);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
ra_tid = BUILD_RAxTID(sta_id, tid);
|
ra_tid = BUILD_RAxTID(sta_id, tid);
|
||||||
|
|
||||||
|
@@ -81,6 +81,7 @@
|
|||||||
#define IWL50_QUEUE_SIZE 256
|
#define IWL50_QUEUE_SIZE 256
|
||||||
#define IWL50_CMD_FIFO_NUM 7
|
#define IWL50_CMD_FIFO_NUM 7
|
||||||
#define IWL50_NUM_QUEUES 20
|
#define IWL50_NUM_QUEUES 20
|
||||||
|
#define IWL50_NUM_AMPDU_QUEUES 10
|
||||||
#define IWL50_FIRST_AMPDU_QUEUE 10
|
#define IWL50_FIRST_AMPDU_QUEUE 10
|
||||||
|
|
||||||
#define IWL_sta_id_POS 12
|
#define IWL_sta_id_POS 12
|
||||||
|
@@ -1016,9 +1016,13 @@ static int iwl5000_txq_agg_enable(struct iwl_priv *priv, int txq_id,
|
|||||||
int ret;
|
int ret;
|
||||||
u16 ra_tid;
|
u16 ra_tid;
|
||||||
|
|
||||||
if (IWL50_FIRST_AMPDU_QUEUE > txq_id)
|
if ((IWL50_FIRST_AMPDU_QUEUE > txq_id) ||
|
||||||
IWL_WARNING("queue number too small: %d, must be > %d\n",
|
(IWL50_FIRST_AMPDU_QUEUE + IWL50_NUM_AMPDU_QUEUES <= txq_id)) {
|
||||||
txq_id, IWL50_FIRST_AMPDU_QUEUE);
|
IWL_WARNING("queue number out of range: %d, must be %d to %d\n",
|
||||||
|
txq_id, IWL50_FIRST_AMPDU_QUEUE,
|
||||||
|
IWL50_FIRST_AMPDU_QUEUE + IWL50_NUM_AMPDU_QUEUES - 1);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
ra_tid = BUILD_RAxTID(sta_id, tid);
|
ra_tid = BUILD_RAxTID(sta_id, tid);
|
||||||
|
|
||||||
@@ -1077,9 +1081,11 @@ static int iwl5000_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (IWL50_FIRST_AMPDU_QUEUE > txq_id) {
|
if ((IWL50_FIRST_AMPDU_QUEUE > txq_id) ||
|
||||||
IWL_WARNING("queue number too small: %d, must be > %d\n",
|
(IWL50_FIRST_AMPDU_QUEUE + IWL50_NUM_AMPDU_QUEUES <= txq_id)) {
|
||||||
txq_id, IWL50_FIRST_AMPDU_QUEUE);
|
IWL_WARNING("queue number out of range: %d, must be %d to %d\n",
|
||||||
|
txq_id, IWL50_FIRST_AMPDU_QUEUE,
|
||||||
|
IWL50_FIRST_AMPDU_QUEUE + IWL50_NUM_AMPDU_QUEUES - 1);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1501,6 +1507,7 @@ static struct iwl_ops iwl5000_ops = {
|
|||||||
|
|
||||||
static struct iwl_mod_params iwl50_mod_params = {
|
static struct iwl_mod_params iwl50_mod_params = {
|
||||||
.num_of_queues = IWL50_NUM_QUEUES,
|
.num_of_queues = IWL50_NUM_QUEUES,
|
||||||
|
.num_of_ampdu_queues = IWL50_NUM_AMPDU_QUEUES,
|
||||||
.enable_qos = 1,
|
.enable_qos = 1,
|
||||||
.amsdu_size_8K = 1,
|
.amsdu_size_8K = 1,
|
||||||
.restart_fw = 1,
|
.restart_fw = 1,
|
||||||
|
@@ -825,7 +825,7 @@ int iwl_setup_mac(struct iwl_priv *priv)
|
|||||||
hw->queues = 4;
|
hw->queues = 4;
|
||||||
/* queues to support 11n aggregation */
|
/* queues to support 11n aggregation */
|
||||||
if (priv->cfg->sku & IWL_SKU_N)
|
if (priv->cfg->sku & IWL_SKU_N)
|
||||||
hw->ampdu_queues = 12;
|
hw->ampdu_queues = priv->cfg->mod_params->num_of_ampdu_queues;
|
||||||
|
|
||||||
hw->conf.beacon_int = 100;
|
hw->conf.beacon_int = 100;
|
||||||
|
|
||||||
|
@@ -159,6 +159,7 @@ struct iwl_mod_params {
|
|||||||
int debug; /* def: 0 = minimal debug log messages */
|
int debug; /* def: 0 = minimal debug log messages */
|
||||||
int disable_hw_scan; /* def: 0 = use h/w scan */
|
int disable_hw_scan; /* def: 0 = use h/w scan */
|
||||||
int num_of_queues; /* def: HW dependent */
|
int num_of_queues; /* def: HW dependent */
|
||||||
|
int num_of_ampdu_queues;/* def: HW dependent */
|
||||||
int enable_qos; /* def: 1 = use quality of service */
|
int enable_qos; /* def: 1 = use quality of service */
|
||||||
int disable_11n; /* def: 0 = disable 11n capabilities */
|
int disable_11n; /* def: 0 = disable 11n capabilities */
|
||||||
int amsdu_size_8K; /* def: 1 = enable 8K amsdu size */
|
int amsdu_size_8K; /* def: 1 = enable 8K amsdu size */
|
||||||
|
Reference in New Issue
Block a user