iwlagn: move sync_irq to transport layer
[pandora-kernel.git] / drivers / net / wireless / iwlwifi / iwl-agn.c
index cbd8d10..c91e010 100644 (file)
@@ -625,7 +625,7 @@ static void iwl_rx_handle(struct iwl_priv *priv)
 }
 
 /* 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;
@@ -1565,7 +1565,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
        release_firmware(ucode_raw);
 }
 
-static const char *desc_lookup_text[] = {
+static const char * const desc_lookup_text[] = {
        "OK",
        "FAIL",
        "BAD_PARAM",
@@ -1589,7 +1589,7 @@ static const char *desc_lookup_text[] = {
        "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",
@@ -3227,9 +3227,6 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)
        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)
@@ -3342,7 +3339,7 @@ static void iwl_uninit_drv(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;
@@ -3548,8 +3545,6 @@ int iwl_probe(void *bus_specific, struct iwl_bus_ops *bus_ops,
        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);
@@ -3558,6 +3553,10 @@ int iwl_probe(void *bus_specific, struct iwl_bus_ops *bus_ops,
        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) ?
@@ -3652,15 +3651,6 @@ int iwl_probe(void *bus_specific, struct iwl_bus_ops *bus_ops,
        /********************
         * 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);
@@ -3691,19 +3681,18 @@ int iwl_probe(void *bus_specific, struct iwl_bus_ops *bus_ops,
 
        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;
 }
 
@@ -3745,7 +3734,7 @@ void __devexit iwl_remove(struct iwl_priv * priv)
        iwl_disable_interrupts(priv);
        spin_unlock_irqrestore(&priv->lock, flags);
 
-       iwl_synchronize_irq(priv);
+       trans_sync_irq(priv);
 
        iwl_dealloc_ucode(priv);
 
@@ -3754,7 +3743,6 @@ void __devexit iwl_remove(struct iwl_priv * priv)
 
        iwl_eeprom_free(priv);
 
-
        /*netif_stop_queue(dev); */
        flush_workqueue(priv->workqueue);
 
@@ -3765,13 +3753,12 @@ void __devexit iwl_remove(struct iwl_priv * priv)
        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);