Commit 56d90f4c authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Wey-Yi Guy

iwlagn: add kick_nic API to transport layer

kick_nic means to remove the RESET bit from the embedded CPU
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.guy@intel.com>
parent d9319986
...@@ -494,8 +494,7 @@ int iwlagn_load_ucode_wait_alive(struct iwl_priv *priv, ...@@ -494,8 +494,7 @@ int iwlagn_load_ucode_wait_alive(struct iwl_priv *priv,
return ret; return ret;
} }
/* Remove all resets to allow NIC to operate */ trans_kick_nic(priv);
iwl_write32(priv, CSR_RESET, 0);
/* /*
* Some things may run in the background now, but we * Some things may run in the background now, but we
......
...@@ -1245,6 +1245,7 @@ struct iwl_trans; ...@@ -1245,6 +1245,7 @@ struct iwl_trans;
* @send_cmd_pdu:send a host command: flags can be CMD_* * @send_cmd_pdu:send a host command: flags can be CMD_*
* @get_tx_cmd: returns a pointer to a new Tx cmd for the upper layer use * @get_tx_cmd: returns a pointer to a new Tx cmd for the upper layer use
* @tx: send an skb * @tx: send an skb
* @kick_nic: remove the RESET from the embedded CPU and let it run
* @sync_irq: the upper layer will typically disable interrupt and call this * @sync_irq: the upper layer will typically disable interrupt and call this
* handler. After this handler returns, it is guaranteed that all * handler. After this handler returns, it is guaranteed that all
* the ISR / tasklet etc... have finished running and the transport * the ISR / tasklet etc... have finished running and the transport
...@@ -1271,6 +1272,8 @@ struct iwl_trans_ops { ...@@ -1271,6 +1272,8 @@ struct iwl_trans_ops {
struct iwl_tx_cmd *tx_cmd, int txq_id, __le16 fc, bool ampdu, struct iwl_tx_cmd *tx_cmd, int txq_id, __le16 fc, bool ampdu,
struct iwl_rxon_context *ctx); struct iwl_rxon_context *ctx);
void (*kick_nic)(struct iwl_priv *priv);
void (*sync_irq)(struct iwl_priv *priv); void (*sync_irq)(struct iwl_priv *priv);
void (*free)(struct iwl_priv *priv); void (*free)(struct iwl_priv *priv);
}; };
......
...@@ -952,6 +952,12 @@ static int iwl_trans_tx(struct iwl_priv *priv, struct sk_buff *skb, ...@@ -952,6 +952,12 @@ static int iwl_trans_tx(struct iwl_priv *priv, struct sk_buff *skb,
return 0; return 0;
} }
static void iwl_trans_kick_nic(struct iwl_priv *priv)
{
/* Remove all resets to allow NIC to operate */
iwl_write32(priv, CSR_RESET, 0);
}
static void iwl_trans_sync_irq(struct iwl_priv *priv) static void iwl_trans_sync_irq(struct iwl_priv *priv)
{ {
/* wait to make sure we flush pending tasklet*/ /* wait to make sure we flush pending tasklet*/
...@@ -980,6 +986,7 @@ static const struct iwl_trans_ops trans_ops = { ...@@ -980,6 +986,7 @@ static const struct iwl_trans_ops trans_ops = {
.get_tx_cmd = iwl_trans_get_tx_cmd, .get_tx_cmd = iwl_trans_get_tx_cmd,
.tx = iwl_trans_tx, .tx = iwl_trans_tx,
.kick_nic = iwl_trans_kick_nic,
.sync_irq = iwl_trans_sync_irq, .sync_irq = iwl_trans_sync_irq,
.free = iwl_trans_free, .free = iwl_trans_free,
......
...@@ -119,6 +119,11 @@ static inline int trans_tx(struct iwl_priv *priv, struct sk_buff *skb, ...@@ -119,6 +119,11 @@ static inline int trans_tx(struct iwl_priv *priv, struct sk_buff *skb,
return priv->trans.ops->tx(priv, skb, tx_cmd, txq_id, fc, ampdu, ctx); return priv->trans.ops->tx(priv, skb, tx_cmd, txq_id, fc, ampdu, ctx);
} }
static inline void trans_kick_nic(struct iwl_priv *priv)
{
priv->trans.ops->kick_nic(priv);
}
static inline void trans_sync_irq(struct iwl_priv *priv) static inline void trans_sync_irq(struct iwl_priv *priv)
{ {
priv->trans.ops->sync_irq(priv); priv->trans.ops->sync_irq(priv);
......
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