mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-31 23:15:06 +08:00
iwl3945: use iwl_isr
iwl3945 uses iwl_isr and deletes duplicated iwl3945_isr. Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com> Acked-by: Samuel Ortiz <samuel.ortiz@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
ed3b932e01
commit
f17d08a657
@ -1280,64 +1280,6 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
|
|||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t iwl_isr(int irq, void *data)
|
|
||||||
{
|
|
||||||
struct iwl_priv *priv = data;
|
|
||||||
u32 inta, inta_mask;
|
|
||||||
u32 inta_fh;
|
|
||||||
if (!priv)
|
|
||||||
return IRQ_NONE;
|
|
||||||
|
|
||||||
spin_lock(&priv->lock);
|
|
||||||
|
|
||||||
/* 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(&priv->lock);
|
|
||||||
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(&priv->lock);
|
|
||||||
return IRQ_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* uCode download functions
|
* uCode download functions
|
||||||
|
@ -1444,6 +1444,65 @@ void iwl_enable_interrupts(struct iwl_priv *priv)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iwl_enable_interrupts);
|
EXPORT_SYMBOL(iwl_enable_interrupts);
|
||||||
|
|
||||||
|
irqreturn_t iwl_isr(int irq, void *data)
|
||||||
|
{
|
||||||
|
struct iwl_priv *priv = data;
|
||||||
|
u32 inta, inta_mask;
|
||||||
|
u32 inta_fh;
|
||||||
|
if (!priv)
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
|
spin_lock(&priv->lock);
|
||||||
|
|
||||||
|
/* 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(&priv->lock);
|
||||||
|
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(&priv->lock);
|
||||||
|
return IRQ_NONE;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(iwl_isr);
|
||||||
|
|
||||||
int iwl_send_bt_config(struct iwl_priv *priv)
|
int iwl_send_bt_config(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
struct iwl_bt_cmd bt_cmd = {
|
struct iwl_bt_cmd bt_cmd = {
|
||||||
|
@ -421,6 +421,7 @@ int iwl_send_card_state(struct iwl_priv *priv, u32 flags,
|
|||||||
*****************************************************/
|
*****************************************************/
|
||||||
void iwl_disable_interrupts(struct iwl_priv *priv);
|
void iwl_disable_interrupts(struct iwl_priv *priv);
|
||||||
void iwl_enable_interrupts(struct iwl_priv *priv);
|
void iwl_enable_interrupts(struct iwl_priv *priv);
|
||||||
|
irqreturn_t iwl_isr(int irq, void *data);
|
||||||
static inline u16 iwl_pcie_link_ctl(struct iwl_priv *priv)
|
static inline u16 iwl_pcie_link_ctl(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
int pos;
|
int pos;
|
||||||
|
@ -2325,63 +2325,6 @@ static void iwl3945_irq_tasklet(struct iwl_priv *priv)
|
|||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t iwl3945_isr(int irq, void *data)
|
|
||||||
{
|
|
||||||
struct iwl_priv *priv = data;
|
|
||||||
u32 inta, inta_mask;
|
|
||||||
u32 inta_fh;
|
|
||||||
if (!priv)
|
|
||||||
return IRQ_NONE;
|
|
||||||
|
|
||||||
spin_lock(&priv->lock);
|
|
||||||
|
|
||||||
/* 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 */
|
|
||||||
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;
|
|
||||||
|
|
||||||
/* iwl3945_irq_tasklet() will service interrupts and re-enable them */
|
|
||||||
if (likely(inta || inta_fh))
|
|
||||||
tasklet_schedule(&priv->irq_tasklet);
|
|
||||||
unplugged:
|
|
||||||
spin_unlock(&priv->lock);
|
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
|
||||||
|
|
||||||
none:
|
|
||||||
/* re-enable interrupts here since we don't have anything to service. */
|
|
||||||
/* only Re-enable if disabled by irq */
|
|
||||||
if (test_bit(STATUS_INT_ENABLED, &priv->status))
|
|
||||||
iwl_enable_interrupts(priv);
|
|
||||||
spin_unlock(&priv->lock);
|
|
||||||
return IRQ_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int iwl3945_get_channels_for_scan(struct iwl_priv *priv,
|
static int iwl3945_get_channels_for_scan(struct iwl_priv *priv,
|
||||||
enum ieee80211_band band,
|
enum ieee80211_band band,
|
||||||
u8 is_active, u8 n_probes,
|
u8 is_active, u8 n_probes,
|
||||||
@ -5235,7 +5178,7 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
|
|||||||
|
|
||||||
pci_enable_msi(priv->pci_dev);
|
pci_enable_msi(priv->pci_dev);
|
||||||
|
|
||||||
err = request_irq(priv->pci_dev->irq, iwl3945_isr, IRQF_SHARED,
|
err = request_irq(priv->pci_dev->irq, iwl_isr, IRQF_SHARED,
|
||||||
DRV_NAME, priv);
|
DRV_NAME, priv);
|
||||||
if (err) {
|
if (err) {
|
||||||
IWL_ERR(priv, "Error allocating IRQ %d\n", priv->pci_dev->irq);
|
IWL_ERR(priv, "Error allocating IRQ %d\n", priv->pci_dev->irq);
|
||||||
|
Loading…
Reference in New Issue
Block a user