}
 
 static s32
-brcmf_cfg80211_escan_handler(struct brcmf_cfg80211_info *cfg,
-                            struct net_device *ndev,
+brcmf_cfg80211_escan_handler(struct brcmf_if *ifp,
                             const struct brcmf_event_msg *e, void *data)
 {
+       struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
+       struct net_device *ndev = ifp->ndev;
        s32 status;
        s32 err = 0;
        struct brcmf_escan_result_le *escan_result_le;
  * cfg80211_scan_request one out of the received PNO event.
  */
 static s32
-brcmf_notify_sched_scan_results(struct brcmf_cfg80211_info *cfg,
-                               struct net_device *ndev,
+brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
                                const struct brcmf_event_msg *e, void *data)
 {
+       struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
+       struct net_device *ndev = ifp->ndev;
        struct brcmf_pno_net_info_le *netinfo, *netinfo_start;
        struct cfg80211_scan_request *request = NULL;
        struct cfg80211_ssid *ssid = NULL;
 }
 
 static s32
-brcmf_notify_connect_status(struct brcmf_cfg80211_info *cfg,
-                           struct net_device *ndev,
+brcmf_notify_connect_status(struct brcmf_if *ifp,
                            const struct brcmf_event_msg *e, void *data)
 {
-       struct brcmf_if *ifp = netdev_priv(ndev);
+       struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
+       struct net_device *ndev = ifp->ndev;
        struct brcmf_cfg80211_profile *profile = &ifp->vif->profile;
        s32 err = 0;
 
 }
 
 static s32
-brcmf_notify_roaming_status(struct brcmf_cfg80211_info *cfg,
-                           struct net_device *ndev,
+brcmf_notify_roaming_status(struct brcmf_if *ifp,
                            const struct brcmf_event_msg *e, void *data)
 {
-       struct brcmf_if *ifp = netdev_priv(ndev);
+       struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
        s32 err = 0;
        u32 event = be32_to_cpu(e->event_type);
        u32 status = be32_to_cpu(e->status);
 
        if (event == BRCMF_E_ROAM && status == BRCMF_E_STATUS_SUCCESS) {
                if (test_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state))
-                       brcmf_bss_roaming_done(cfg, ndev, e);
+                       brcmf_bss_roaming_done(cfg, ifp->ndev, e);
                else
-                       brcmf_bss_connect_done(cfg, ndev, e, true);
+                       brcmf_bss_connect_done(cfg, ifp->ndev, e, true);
        }
 
        return err;
 }
 
 static s32
-brcmf_notify_mic_status(struct brcmf_cfg80211_info *cfg,
-                       struct net_device *ndev,
+brcmf_notify_mic_status(struct brcmf_if *ifp,
                        const struct brcmf_event_msg *e, void *data)
 {
        u16 flags = be16_to_cpu(e->flags);
        else
                key_type = NL80211_KEYTYPE_PAIRWISE;
 
-       cfg80211_michael_mic_failure(ndev, (u8 *)&e->addr, key_type, -1,
+       cfg80211_michael_mic_failure(ifp->ndev, (u8 *)&e->addr, key_type, -1,
                                     NULL, GFP_KERNEL);
 
        return 0;
 */
 
 static s32
-brcmf_enq_event(struct brcmf_cfg80211_info *cfg, u32 event,
+brcmf_enq_event(struct brcmf_if *ifp, u32 event,
                const struct brcmf_event_msg *msg, void *data)
 {
+       struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
        struct brcmf_cfg80211_event_q *e;
        s32 err = 0;
        ulong flags;
                return -ENOMEM;
 
        e->etype = event;
+       e->ifp = ifp;
        memcpy(&e->emsg, msg, sizeof(struct brcmf_event_msg));
        if (data)
                memcpy(&e->edata, data, data_len);
        do {
                WL_INFO("event type (%d)\n", e->etype);
                if (cfg->el.handler[e->etype])
-                       cfg->el.handler[e->etype](cfg,
-                                                      cfg_to_ndev(cfg),
-                                                      &e->emsg, e->edata);
+                       cfg->el.handler[e->etype](e->ifp, &e->emsg, e->edata);
                else
                        WL_INFO("Unknown Event (%d): ignoring\n", e->etype);
                brcmf_put_event(e);
        }
 }
 
-void
-brcmf_cfg80211_event(struct net_device *ndev,
-                 const struct brcmf_event_msg *e, void *data)
+void brcmf_cfg80211_event(struct brcmf_if *ifp,
+                         const struct brcmf_event_msg *e, void *data)
 {
+       struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
        u32 event_type = be32_to_cpu(e->event_type);
-       struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev);
 
-       if (!brcmf_enq_event(cfg, event_type, e, data))
+       if (!brcmf_enq_event(ifp, event_type, e, data))
                schedule_work(&cfg->event_work);
 }
 
 
        struct ieee80211_channel channel;
 };
 
-/* forward declaration */
-struct brcmf_cfg80211_info;
-
-/* cfg80211 main event loop */
-struct brcmf_cfg80211_event_loop {
-       s32(*handler[BRCMF_E_LAST]) (struct brcmf_cfg80211_info *cfg,
-                                    struct net_device *ndev,
-                                    const struct brcmf_event_msg *e,
-                                    void *data);
-};
-
 /* basic structure of scan request */
 struct brcmf_cfg80211_scan_req {
        struct brcmf_ssid_le ssid_le;
        u8 buf[WL_TLV_INFO_MAX];
 };
 
-/* event queue for cfg80211 main event */
-struct brcmf_cfg80211_event_q {
-       struct list_head evt_q_list;
-       u32 etype;
-       struct brcmf_event_msg emsg;
-       s8 edata[1];
-};
-
 /* security information with currently associated ap */
 struct brcmf_cfg80211_security {
        u32 wpa_versions;
        struct list_head list;
 };
 
+/* forward declaration */
+struct brcmf_cfg80211_info;
+
+/* cfg80211 main event loop */
+struct brcmf_cfg80211_event_loop {
+       s32(*handler[BRCMF_E_LAST]) (struct brcmf_if *ifp,
+                                    const struct brcmf_event_msg *e,
+                                    void *data);
+};
+
+/* event queue for cfg80211 main event */
+struct brcmf_cfg80211_event_q {
+       struct list_head evt_q_list;
+       u32 etype;
+       struct brcmf_if *ifp;
+       struct brcmf_event_msg emsg;
+       s8 edata[1];
+};
+
 /* association inform */
 struct brcmf_cfg80211_connect_info {
        u8 *req_ie;
 void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg);
 
 /* event handler from dongle */
-void brcmf_cfg80211_event(struct net_device *ndev,
-                         const struct brcmf_event_msg *e, void *data);
+void brcmf_cfg80211_event(struct brcmf_if *ifp, const struct brcmf_event_msg *e,
+                         void *data);
 s32 brcmf_cfg80211_up(struct brcmf_cfg80211_info *cfg);
 s32 brcmf_cfg80211_down(struct brcmf_cfg80211_info *cfg);