diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2011-08-26 02:11:07 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-08-29 15:30:27 -0400 |
commit | 72012474b01e2f2d433e4253505f5dcfb3345d17 (patch) | |
tree | ab5453126e619bdfc8fab5584fe4a3df8ee795e7 | |
parent | 6d8f6eeb350696050a1f5cf8f9d0daabab68eaf5 (diff) |
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: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.h | 2 |
5 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index f559c6362a00..9c5f08a938eb 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -3059,7 +3059,6 @@ static int iwl_init_drv(struct iwl_priv *priv) | |||
3059 | int ret; | 3059 | int ret; |
3060 | 3060 | ||
3061 | spin_lock_init(&priv->shrd->sta_lock); | 3061 | spin_lock_init(&priv->shrd->sta_lock); |
3062 | spin_lock_init(&priv->hcmd_lock); | ||
3063 | 3062 | ||
3064 | mutex_init(&priv->shrd->mutex); | 3063 | mutex_init(&priv->shrd->mutex); |
3065 | 3064 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index eac25c507d30..de293cf02177 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -1178,7 +1178,6 @@ struct iwl_priv { | |||
1178 | u8 mgmt_tx_ant; | 1178 | u8 mgmt_tx_ant; |
1179 | 1179 | ||
1180 | /* spinlock */ | 1180 | /* spinlock */ |
1181 | spinlock_t hcmd_lock; /* protect hcmd */ | ||
1182 | spinlock_t reg_lock; /* protect hw register access */ | 1181 | spinlock_t reg_lock; /* protect hw register access */ |
1183 | 1182 | ||
1184 | /*TODO: remove these pointers - use bus(priv) instead */ | 1183 | /*TODO: remove these pointers - use bus(priv) instead */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c index 1704eab8ddf2..835e3edb9cce 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c | |||
@@ -601,10 +601,10 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) | |||
601 | return -EIO; | 601 | return -EIO; |
602 | } | 602 | } |
603 | 603 | ||
604 | spin_lock_irqsave(&priv->hcmd_lock, flags); | 604 | spin_lock_irqsave(&trans->hcmd_lock, flags); |
605 | 605 | ||
606 | if (iwl_queue_space(q) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) { | 606 | if (iwl_queue_space(q) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) { |
607 | spin_unlock_irqrestore(&priv->hcmd_lock, flags); | 607 | spin_unlock_irqrestore(&trans->hcmd_lock, flags); |
608 | 608 | ||
609 | IWL_ERR(trans, "No space in command queue\n"); | 609 | IWL_ERR(trans, "No space in command queue\n"); |
610 | is_ct_kill = iwl_check_for_ct_kill(priv); | 610 | 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) | |||
713 | iwl_txq_update_write_ptr(priv, txq); | 713 | iwl_txq_update_write_ptr(priv, txq); |
714 | 714 | ||
715 | out: | 715 | out: |
716 | spin_unlock_irqrestore(&priv->hcmd_lock, flags); | 716 | spin_unlock_irqrestore(&trans->hcmd_lock, flags); |
717 | return idx; | 717 | return idx; |
718 | } | 718 | } |
719 | 719 | ||
@@ -796,7 +796,7 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb) | |||
796 | } else if (meta->callback) | 796 | } else if (meta->callback) |
797 | meta->callback(priv, cmd, pkt); | 797 | meta->callback(priv, cmd, pkt); |
798 | 798 | ||
799 | spin_lock_irqsave(&priv->hcmd_lock, flags); | 799 | spin_lock_irqsave(&trans->hcmd_lock, flags); |
800 | 800 | ||
801 | iwl_hcmd_queue_reclaim(priv, txq_id, index); | 801 | iwl_hcmd_queue_reclaim(priv, txq_id, index); |
802 | 802 | ||
@@ -809,7 +809,7 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb) | |||
809 | 809 | ||
810 | meta->flags = 0; | 810 | meta->flags = 0; |
811 | 811 | ||
812 | spin_unlock_irqrestore(&priv->hcmd_lock, flags); | 812 | spin_unlock_irqrestore(&trans->hcmd_lock, flags); |
813 | } | 813 | } |
814 | 814 | ||
815 | const char *get_cmd_string(u8 cmd) | 815 | const char *get_cmd_string(u8 cmd) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.c b/drivers/net/wireless/iwlwifi/iwl-trans.c index b448e79c259b..73883fe1c2d1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans.c | |||
@@ -1284,6 +1284,7 @@ static struct iwl_trans *iwl_trans_pcie_alloc(struct iwl_shared *shrd) | |||
1284 | iwl_trans->ops = &trans_ops_pcie; | 1284 | iwl_trans->ops = &trans_ops_pcie; |
1285 | iwl_trans->shrd = shrd; | 1285 | iwl_trans->shrd = shrd; |
1286 | trans_pcie->trans = iwl_trans; | 1286 | trans_pcie->trans = iwl_trans; |
1287 | spin_lock_init(&iwl_trans->hcmd_lock); | ||
1287 | } | 1288 | } |
1288 | 1289 | ||
1289 | return iwl_trans; | 1290 | return iwl_trans; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h index da6cc59dfa2b..78bd2f636452 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/iwlwifi/iwl-trans.h | |||
@@ -146,10 +146,12 @@ struct iwl_trans_ops { | |||
146 | * struct iwl_trans - transport common data | 146 | * struct iwl_trans - transport common data |
147 | * @ops - pointer to iwl_trans_ops | 147 | * @ops - pointer to iwl_trans_ops |
148 | * @shrd - pointer to iwl_shared which holds shared data from the upper layer | 148 | * @shrd - pointer to iwl_shared which holds shared data from the upper layer |
149 | * @hcmd_lock: protects HCMD | ||
149 | */ | 150 | */ |
150 | struct iwl_trans { | 151 | struct iwl_trans { |
151 | const struct iwl_trans_ops *ops; | 152 | const struct iwl_trans_ops *ops; |
152 | struct iwl_shared *shrd; | 153 | struct iwl_shared *shrd; |
154 | spinlock_t hcmd_lock; | ||
153 | 155 | ||
154 | /* pointer to trans specific struct */ | 156 | /* pointer to trans specific struct */ |
155 | /*Ensure that this pointer will always be aligned to sizeof pointer */ | 157 | /*Ensure that this pointer will always be aligned to sizeof pointer */ |