}
/* tasklet for iwlagn interrupt */
-static void iwl_irq_tasklet(struct iwl_priv *priv)
+void iwl_irq_tasklet(struct iwl_priv *priv)
{
u32 inta = 0;
u32 handled = 0;
release_firmware(ucode_raw);
}
-static const char *desc_lookup_text[] = {
+static const char * const desc_lookup_text[] = {
"OK",
"FAIL",
"BAD_PARAM",
"NMI_INTERRUPT_DATA_ACTION_PT",
"NMI_TRM_HW_ER",
"NMI_INTERRUPT_TRM",
- "NMI_INTERRUPT_BREAK_POINT"
+ "NMI_INTERRUPT_BREAK_POINT",
"DEBUG_0",
"DEBUG_1",
"DEBUG_2",
init_timer(&priv->watchdog);
priv->watchdog.data = (unsigned long)priv;
priv->watchdog.function = iwl_bg_watchdog;
-
- tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
- iwl_irq_tasklet, (unsigned long)priv);
}
static void iwl_cancel_deferred_work(struct iwl_priv *priv)
kfree(priv->beacon_cmd);
}
-void iwl_mac_rssi_callback(struct ieee80211_hw *hw,
+static void iwl_mac_rssi_callback(struct ieee80211_hw *hw,
enum ieee80211_rssi_event rssi_event)
{
struct iwl_priv *priv = hw->priv;
priv->bus.ops->set_drv_data(&priv->bus, priv);
priv->bus.dev = priv->bus.ops->get_dev(&priv->bus);
- iwl_trans_register(&priv->trans);
-
/* At this point both hw and priv are allocated. */
SET_IEEE80211_DEV(hw, priv->bus.dev);
priv->cfg = cfg;
priv->inta_mask = CSR_INI_SET_MASK;
+ err = iwl_trans_register(priv);
+ if (err)
+ goto out_free_priv;
+
/* is antenna coupling more than 35dB ? */
priv->bt_ant_couple_ok =
(iwlagn_ant_coupling > IWL_BT_ANTENNA_COUPLING_THRESHOLD) ?
/********************
* 7. Setup services
********************/
- iwl_alloc_isr_ict(priv);
-
- err = request_irq(priv->bus.irq, iwl_isr_ict, IRQF_SHARED,
- DRV_NAME, priv);
- if (err) {
- IWL_ERR(priv, "Error allocating IRQ %d\n", priv->bus.irq);
- goto out_uninit_drv;
- }
-
iwl_setup_deferred_work(priv);
iwl_setup_rx_handlers(priv);
iwl_testmode_init(priv);
return 0;
- out_destroy_workqueue:
+out_destroy_workqueue:
destroy_workqueue(priv->workqueue);
priv->workqueue = NULL;
- free_irq(priv->bus.irq, priv);
- iwl_free_isr_ict(priv);
- out_uninit_drv:
iwl_uninit_drv(priv);
- out_free_eeprom:
+out_free_eeprom:
iwl_eeprom_free(priv);
- out_free_traffic_mem:
+out_free_traffic_mem:
iwl_free_traffic_mem(priv);
+ trans_free(priv);
+out_free_priv:
ieee80211_free_hw(priv->hw);
- out:
+out:
return err;
}
iwl_disable_interrupts(priv);
spin_unlock_irqrestore(&priv->lock, flags);
- iwl_synchronize_irq(priv);
+ trans_sync_irq(priv);
iwl_dealloc_ucode(priv);
iwl_eeprom_free(priv);
-
/*netif_stop_queue(dev); */
flush_workqueue(priv->workqueue);
priv->workqueue = NULL;
iwl_free_traffic_mem(priv);
- free_irq(priv->bus.irq, priv);
+ trans_free(priv);
+
priv->bus.ops->set_drv_data(&priv->bus, NULL);
iwl_uninit_drv(priv);
- iwl_free_isr_ict(priv);
-
dev_kfree_skb(priv->beacon_skb);
ieee80211_free_hw(priv->hw);