* special purpose in wilc device, so we add 1 to the index to starts from 1.
  * As a result, the returned index will be 1 to NUM_CONCURRENT_IFC.
  */
-static int wilc_get_vif_idx(struct wilc_vif *vif)
+int wilc_get_vif_idx(struct wilc_vif *vif)
 {
        return vif->u8IfIdx + 1;
 }
 {
        s32 result = 0;
        struct wid wid;
-       struct host_if_drv *hif_drv = vif->hif_drv;
 
        wid.id = (u16)WID_SET_DRV_HANDLER;
        wid.type = WID_INT;
        wid.val = (s8 *)&hif_drv_handler->handler;
        wid.size = sizeof(u32);
 
-       result = wilc_send_config_pkt(hif_drv->wilc, SET_CFG, &wid, 1,
+       result = wilc_send_config_pkt(vif->wilc, SET_CFG, &wid, 1,
                                      hif_drv_handler->handler);
 
-       if (!hif_drv)
+       if (!hif_drv_handler->handler)
                up(&hif_sema_driver);
 
        if (result) {
        return result;
 }
 
-int wilc_set_wfi_drv_handler(struct wilc_vif *vif, struct host_if_drv *hif_drv)
+int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index)
 {
        int result = 0;
        struct host_if_msg msg;
 
        memset(&msg, 0, sizeof(struct host_if_msg));
        msg.id = HOST_IF_MSG_SET_WFIDRV_HANDLER;
-       msg.body.drv.handler = get_id_from_handler(hif_drv);
-       msg.drv = hif_drv;
+       msg.body.drv.handler = index;
        msg.vif = vif;
 
        result = wilc_mq_send(&hif_msg_q, &msg, sizeof(struct host_if_msg));
 
        del_timer_sync(&hif_drv->remain_on_ch_timer);
 
-       wilc_set_wfi_drv_handler(vif, NULL);
+       wilc_set_wfi_drv_handler(vif, 0);
        down(&hif_sema_driver);
 
        if (hif_drv->usr_scan_req.scan_result) {
 
                           void *pvUserArg);
 s32 wilc_listen_state_expired(struct wilc_vif *vif, u32 u32SessionID);
 s32 wilc_frame_register(struct wilc_vif *vif, u16 u16FrameType, bool bReg);
-int wilc_set_wfi_drv_handler(struct wilc_vif *vif, struct host_if_drv *hif_drv);
+int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index);
 int wilc_set_operation_mode(struct wilc_vif *vif, u32 mode);
 
 void wilc_free_join_params(void *pJoinParams);
 
 s32 wilc_get_statistics(struct wilc_vif *vif, struct rf_info *pstrStatistics);
 void wilc_resolve_disconnect_aberration(struct wilc_vif *vif);
+int wilc_get_vif_idx(struct wilc_vif *vif);
 
 extern bool wilc_optaining_ip;
 extern u8 wilc_connected_ssid[6];
 
 
        priv->u32RcvdChCount = 0;
 
-       wilc_set_wfi_drv_handler(vif, priv->hWILCWFIDrv);
+       wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(vif));
        reset_shadow_found();
 
        priv->bCfgScanning = true;
        vif = netdev_priv(priv->dev);
        pstrWFIDrv = (struct host_if_drv *)(priv->hWILCWFIDrv);
 
-       wilc_set_wfi_drv_handler(vif, priv->hWILCWFIDrv);
+       wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(vif));
 
        PRINT_D(CFG80211_DBG, "Connecting to SSID [%s] on netdev [%p] host if [%p]\n", sme->ssid, dev, priv->hWILCWFIDrv);
        if (!(strncmp(sme->ssid, "DIRECT-", 7))) {
                        wilc_initialized = 1;
                        vif->iftype = interface_type;
 
-                       wilc_set_wfi_drv_handler(vif, wl->vif[0]->hif_drv);
+                       wilc_set_wfi_drv_handler(vif,
+                                                wilc_get_vif_idx(wl->vif[0]));
                        wilc_set_mac_address(wl->vif[0], wl->vif[0]->src_addr);
                        wilc_set_operation_mode(vif, STATION_MODE);
 
                        wilc1000_wlan_init(dev, vif);
                        wilc_initialized = 1;
 
-                       wilc_set_wfi_drv_handler(vif, wl->vif[0]->hif_drv);
+                       wilc_set_wfi_drv_handler(vif,
+                                                wilc_get_vif_idx(wl->vif[0]));
                        wilc_set_mac_address(wl->vif[0], wl->vif[0]->src_addr);
                        wilc_set_operation_mode(vif, STATION_MODE);
 
                wilc1000_wlan_init(dev, vif);
                wilc_initialized = 1;
 
-               wilc_set_wfi_drv_handler(vif, wl->vif[0]->hif_drv);
+               wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(wl->vif[0]));
                wilc_set_mac_address(wl->vif[0], wl->vif[0]->src_addr);
                wilc_set_operation_mode(vif, AP_MODE);