|
@@ -1227,66 +1227,6 @@ int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force)
|
|
|
}
|
|
|
EXPORT_SYMBOL(iwl_set_tx_power);
|
|
|
|
|
|
-irqreturn_t iwl_isr_legacy(int irq, void *data)
|
|
|
-{
|
|
|
- struct iwl_priv *priv = data;
|
|
|
- u32 inta, inta_mask;
|
|
|
- u32 inta_fh;
|
|
|
- unsigned long flags;
|
|
|
- if (!priv)
|
|
|
- return IRQ_NONE;
|
|
|
-
|
|
|
- spin_lock_irqsave(&priv->lock, flags);
|
|
|
-
|
|
|
- /* Disable (but don't clear!) interrupts here to avoid
|
|
|
- * back-to-back ISRs and sporadic interrupts from our NIC.
|
|
|
- * If we have something to service, the tasklet will re-enable ints.
|
|
|
- * If we *don't* have something, we'll re-enable before leaving here. */
|
|
|
- inta_mask = iwl_read32(priv, CSR_INT_MASK); /* just for debug */
|
|
|
- iwl_write32(priv, CSR_INT_MASK, 0x00000000);
|
|
|
-
|
|
|
- /* Discover which interrupts are active/pending */
|
|
|
- inta = iwl_read32(priv, CSR_INT);
|
|
|
- inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
|
|
|
-
|
|
|
- /* Ignore interrupt if there's nothing in NIC to service.
|
|
|
- * This may be due to IRQ shared with another device,
|
|
|
- * or due to sporadic interrupts thrown from our NIC. */
|
|
|
- if (!inta && !inta_fh) {
|
|
|
- IWL_DEBUG_ISR(priv, "Ignore interrupt, inta == 0, inta_fh == 0\n");
|
|
|
- goto none;
|
|
|
- }
|
|
|
-
|
|
|
- if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) {
|
|
|
- /* Hardware disappeared. It might have already raised
|
|
|
- * an interrupt */
|
|
|
- IWL_WARN(priv, "HARDWARE GONE?? INTA == 0x%08x\n", inta);
|
|
|
- goto unplugged;
|
|
|
- }
|
|
|
-
|
|
|
- IWL_DEBUG_ISR(priv, "ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
|
|
|
- inta, inta_mask, inta_fh);
|
|
|
-
|
|
|
- inta &= ~CSR_INT_BIT_SCD;
|
|
|
-
|
|
|
- /* iwl_irq_tasklet() will service interrupts and re-enable them */
|
|
|
- if (likely(inta || inta_fh))
|
|
|
- tasklet_schedule(&priv->irq_tasklet);
|
|
|
-
|
|
|
- unplugged:
|
|
|
- spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
- return IRQ_HANDLED;
|
|
|
-
|
|
|
- none:
|
|
|
- /* re-enable interrupts here since we don't have anything to service. */
|
|
|
- /* only Re-enable if diabled by irq */
|
|
|
- if (test_bit(STATUS_INT_ENABLED, &priv->status))
|
|
|
- iwl_enable_interrupts(priv);
|
|
|
- spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
- return IRQ_NONE;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(iwl_isr_legacy);
|
|
|
-
|
|
|
void iwl_send_bt_config(struct iwl_priv *priv)
|
|
|
{
|
|
|
struct iwl_bt_cmd bt_cmd = {
|