/* notification wait support */
 void iwlagn_init_notification_wait(struct iwl_priv *priv,
                                   struct iwl_notification_wait *wait_entry,
+                                  u8 cmd,
                                   void (*fn)(struct iwl_priv *priv,
-                                             struct iwl_rx_packet *pkt),
-                                  u8 cmd)
+                                             struct iwl_rx_packet *pkt,
+                                             void *data),
+                                  void *fn_data)
 {
        wait_entry->fn = fn;
+       wait_entry->fn_data = fn_data;
        wait_entry->cmd = cmd;
        wait_entry->triggered = false;
 
 
        u8 old_dev_type = send->dev_type;
        int ret;
 
-       iwlagn_init_notification_wait(priv, &disable_wait, NULL,
-                                     REPLY_WIPAN_DEACTIVATION_COMPLETE);
+       iwlagn_init_notification_wait(priv, &disable_wait,
+                                     REPLY_WIPAN_DEACTIVATION_COMPLETE,
+                                     NULL, NULL);
 
        send->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
        send->dev_type = RXON_DEV_TYPE_P2P;
 
                                if (w->cmd == pkt->hdr.cmd) {
                                        w->triggered = true;
                                        if (w->fn)
-                                               w->fn(priv, pkt);
+                                               w->fn(priv, pkt, w->fn_data);
                                }
                        }
                        spin_unlock(&priv->_agn.notif_wait_lock);
 
 void __acquires(wait_entry)
 iwlagn_init_notification_wait(struct iwl_priv *priv,
                              struct iwl_notification_wait *wait_entry,
+                             u8 cmd,
                              void (*fn)(struct iwl_priv *priv,
-                                        struct iwl_rx_packet *pkt),
-                             u8 cmd);
+                                        struct iwl_rx_packet *pkt,
+                                        void *data),
+                             void *fn_data);
 signed long __releases(wait_entry)
 iwlagn_wait_notification(struct iwl_priv *priv,
                         struct iwl_notification_wait *wait_entry,
 
 struct iwl_notification_wait {
        struct list_head list;
 
-       void (*fn)(struct iwl_priv *priv, struct iwl_rx_packet *pkt);
+       void (*fn)(struct iwl_priv *priv, struct iwl_rx_packet *pkt,
+                  void *data);
+       void *fn_data;
 
        u8 cmd;
        bool triggered;