iwlagn: add kick_nic API to transport layer
kick_nic means to remove the RESET bit from the embedded CPU Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.guy@intel.com>
This commit is contained in:
Родитель
d931998669
Коммит
56d90f4c8a
|
@ -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;
|
||||||
* @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 {
|
||||||
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,
|
||||||
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 = {
|
||||||
|
|
||||||
.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,
|
||||||
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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче