Commit 72012474 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by John W. Linville
Browse files

iwlagn: move hcmd_lock to transport layer



Since it is needed for host commands only, it is needed in transport layer only

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 6d8f6eeb
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3059,7 +3059,6 @@ static int iwl_init_drv(struct iwl_priv *priv)
	int ret;

	spin_lock_init(&priv->shrd->sta_lock);
	spin_lock_init(&priv->hcmd_lock);

	mutex_init(&priv->shrd->mutex);

+0 −1
Original line number Diff line number Diff line
@@ -1178,7 +1178,6 @@ struct iwl_priv {
	u8 mgmt_tx_ant;

	/* spinlock */
	spinlock_t hcmd_lock;	/* protect hcmd */
	spinlock_t reg_lock;	/* protect hw register access */

	/*TODO: remove these pointers - use bus(priv) instead */
+5 −5
Original line number Diff line number Diff line
@@ -601,10 +601,10 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
		return -EIO;
	}

	spin_lock_irqsave(&priv->hcmd_lock, flags);
	spin_lock_irqsave(&trans->hcmd_lock, flags);

	if (iwl_queue_space(q) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
		spin_unlock_irqrestore(&priv->hcmd_lock, flags);
		spin_unlock_irqrestore(&trans->hcmd_lock, flags);

		IWL_ERR(trans, "No space in command queue\n");
		is_ct_kill = iwl_check_for_ct_kill(priv);
@@ -713,7 +713,7 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
	iwl_txq_update_write_ptr(priv, txq);

 out:
	spin_unlock_irqrestore(&priv->hcmd_lock, flags);
	spin_unlock_irqrestore(&trans->hcmd_lock, flags);
	return idx;
}

@@ -796,7 +796,7 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)
	} else if (meta->callback)
		meta->callback(priv, cmd, pkt);

	spin_lock_irqsave(&priv->hcmd_lock, flags);
	spin_lock_irqsave(&trans->hcmd_lock, flags);

	iwl_hcmd_queue_reclaim(priv, txq_id, index);

@@ -809,7 +809,7 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)

	meta->flags = 0;

	spin_unlock_irqrestore(&priv->hcmd_lock, flags);
	spin_unlock_irqrestore(&trans->hcmd_lock, flags);
}

const char *get_cmd_string(u8 cmd)
+1 −0
Original line number Diff line number Diff line
@@ -1284,6 +1284,7 @@ static struct iwl_trans *iwl_trans_pcie_alloc(struct iwl_shared *shrd)
		iwl_trans->ops = &trans_ops_pcie;
		iwl_trans->shrd = shrd;
		trans_pcie->trans = iwl_trans;
		spin_lock_init(&iwl_trans->hcmd_lock);
	}

	return iwl_trans;
+2 −0
Original line number Diff line number Diff line
@@ -146,10 +146,12 @@ struct iwl_trans_ops {
 * struct iwl_trans - transport common data
 * @ops - pointer to iwl_trans_ops
 * @shrd - pointer to iwl_shared which holds shared data from the upper layer
 * @hcmd_lock: protects HCMD
 */
struct iwl_trans {
	const struct iwl_trans_ops *ops;
	struct iwl_shared *shrd;
	spinlock_t hcmd_lock;

	/* pointer to trans specific struct */
	/*Ensure that this pointer will always be aligned to sizeof pointer */