|
@@ -134,7 +134,7 @@ EXPORT_SYMBOL(iwl_tx_queue_free);
|
|
|
*/
|
|
|
void iwl_cmd_queue_free(struct iwl_priv *priv)
|
|
|
{
|
|
|
- struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM];
|
|
|
+ struct iwl_tx_queue *txq = &priv->txq[priv->cmd_queue];
|
|
|
struct iwl_queue *q = &txq->q;
|
|
|
struct device *dev = &priv->pci_dev->dev;
|
|
|
int i;
|
|
@@ -271,7 +271,7 @@ static int iwl_tx_queue_alloc(struct iwl_priv *priv,
|
|
|
|
|
|
/* Driver private data, only for Tx (not command) queues,
|
|
|
* not shared with device. */
|
|
|
- if (id != IWL_CMD_QUEUE_NUM) {
|
|
|
+ if (id != priv->cmd_queue) {
|
|
|
txq->txb = kzalloc(sizeof(txq->txb[0]) *
|
|
|
TFD_QUEUE_SIZE_MAX, GFP_KERNEL);
|
|
|
if (!txq->txb) {
|
|
@@ -314,13 +314,13 @@ int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq,
|
|
|
|
|
|
/*
|
|
|
* Alloc buffer array for commands (Tx or other types of commands).
|
|
|
- * For the command queue (#4), allocate command space + one big
|
|
|
+ * For the command queue (#4/#9), allocate command space + one big
|
|
|
* command for scan, since scan command is very huge; the system will
|
|
|
* not have two scans at the same time, so only one is needed.
|
|
|
* For normal Tx queues (all other queues), no super-size command
|
|
|
* space is needed.
|
|
|
*/
|
|
|
- if (txq_id == IWL_CMD_QUEUE_NUM)
|
|
|
+ if (txq_id == priv->cmd_queue)
|
|
|
actual_slots++;
|
|
|
|
|
|
txq->meta = kzalloc(sizeof(struct iwl_cmd_meta) * actual_slots,
|
|
@@ -355,7 +355,7 @@ int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq,
|
|
|
* need an swq_id so don't set one to catch errors, all others can
|
|
|
* be set up to the identity mapping.
|
|
|
*/
|
|
|
- if (txq_id != IWL_CMD_QUEUE_NUM)
|
|
|
+ if (txq_id != priv->cmd_queue)
|
|
|
txq->swq_id = txq_id;
|
|
|
|
|
|
/* TFD_QUEUE_SIZE_MAX must be power-of-two size, otherwise
|
|
@@ -385,7 +385,7 @@ void iwl_tx_queue_reset(struct iwl_priv *priv, struct iwl_tx_queue *txq,
|
|
|
{
|
|
|
int actual_slots = slots_num;
|
|
|
|
|
|
- if (txq_id == IWL_CMD_QUEUE_NUM)
|
|
|
+ if (txq_id == priv->cmd_queue)
|
|
|
actual_slots++;
|
|
|
|
|
|
memset(txq->meta, 0, sizeof(struct iwl_cmd_meta) * actual_slots);
|
|
@@ -413,7 +413,7 @@ EXPORT_SYMBOL(iwl_tx_queue_reset);
|
|
|
*/
|
|
|
int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
|
|
|
{
|
|
|
- struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM];
|
|
|
+ struct iwl_tx_queue *txq = &priv->txq[priv->cmd_queue];
|
|
|
struct iwl_queue *q = &txq->q;
|
|
|
struct iwl_device_cmd *out_cmd;
|
|
|
struct iwl_cmd_meta *out_meta;
|
|
@@ -483,7 +483,7 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
|
|
|
* information */
|
|
|
|
|
|
out_cmd->hdr.flags = 0;
|
|
|
- out_cmd->hdr.sequence = cpu_to_le16(QUEUE_TO_SEQ(IWL_CMD_QUEUE_NUM) |
|
|
|
+ out_cmd->hdr.sequence = cpu_to_le16(QUEUE_TO_SEQ(priv->cmd_queue) |
|
|
|
INDEX_TO_SEQ(q->write_ptr));
|
|
|
if (cmd->flags & CMD_SIZE_HUGE)
|
|
|
out_cmd->hdr.sequence |= SEQ_HUGE_FRAME;
|
|
@@ -500,15 +500,15 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
|
|
|
get_cmd_string(out_cmd->hdr.cmd),
|
|
|
out_cmd->hdr.cmd,
|
|
|
le16_to_cpu(out_cmd->hdr.sequence), fix_size,
|
|
|
- q->write_ptr, idx, IWL_CMD_QUEUE_NUM);
|
|
|
- break;
|
|
|
+ q->write_ptr, idx, priv->cmd_queue);
|
|
|
+ break;
|
|
|
default:
|
|
|
IWL_DEBUG_HC(priv, "Sending command %s (#%x), seq: 0x%04X, "
|
|
|
"%d bytes at %d[%d]:%d\n",
|
|
|
get_cmd_string(out_cmd->hdr.cmd),
|
|
|
out_cmd->hdr.cmd,
|
|
|
le16_to_cpu(out_cmd->hdr.sequence), fix_size,
|
|
|
- q->write_ptr, idx, IWL_CMD_QUEUE_NUM);
|
|
|
+ q->write_ptr, idx, priv->cmd_queue);
|
|
|
}
|
|
|
#endif
|
|
|
txq->need_update = 1;
|
|
@@ -587,16 +587,16 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)
|
|
|
bool huge = !!(pkt->hdr.sequence & SEQ_HUGE_FRAME);
|
|
|
struct iwl_device_cmd *cmd;
|
|
|
struct iwl_cmd_meta *meta;
|
|
|
- struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM];
|
|
|
+ struct iwl_tx_queue *txq = &priv->txq[priv->cmd_queue];
|
|
|
|
|
|
/* If a Tx command is being handled and it isn't in the actual
|
|
|
* command queue then there a command routing bug has been introduced
|
|
|
* in the queue management code. */
|
|
|
- if (WARN(txq_id != IWL_CMD_QUEUE_NUM,
|
|
|
- "wrong command queue %d, sequence 0x%X readp=%d writep=%d\n",
|
|
|
- txq_id, sequence,
|
|
|
- priv->txq[IWL_CMD_QUEUE_NUM].q.read_ptr,
|
|
|
- priv->txq[IWL_CMD_QUEUE_NUM].q.write_ptr)) {
|
|
|
+ if (WARN(txq_id != priv->cmd_queue,
|
|
|
+ "wrong command queue %d (should be %d), sequence 0x%X readp=%d writep=%d\n",
|
|
|
+ txq_id, priv->cmd_queue, sequence,
|
|
|
+ priv->txq[priv->cmd_queue].q.read_ptr,
|
|
|
+ priv->txq[priv->cmd_queue].q.write_ptr)) {
|
|
|
iwl_print_hex_error(priv, pkt, 32);
|
|
|
return;
|
|
|
}
|