Lines Matching defs:drv

41 int wpa_driver_register_event_cb(struct wpa_driver_ndis_data *drv);
47 static void wpa_driver_ndis_poll(void *drv);
49 static int wpa_driver_ndis_adapter_init(struct wpa_driver_ndis_data *drv);
50 static int wpa_driver_ndis_adapter_open(struct wpa_driver_ndis_data *drv);
51 static void wpa_driver_ndis_adapter_close(struct wpa_driver_ndis_data *drv);
451 static int ndis_get_oid(struct wpa_driver_ndis_data *drv, unsigned int oid,
466 o->ptcDeviceName = drv->adapter_name;
468 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_QUERY_OID_VALUE,
506 if (!PacketRequest(drv->adapter, FALSE, o)) {
526 static int ndis_set_oid(struct wpa_driver_ndis_data *drv, unsigned int oid,
545 o->ptcDeviceName = drv->adapter_name;
549 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_SET_OID_VALUE,
575 if (!PacketRequest(drv->adapter, TRUE, o)) {
587 static int ndis_set_auth_mode(struct wpa_driver_ndis_data *drv, int mode)
590 if (ndis_set_oid(drv, OID_802_11_AUTHENTICATION_MODE,
601 static int ndis_get_auth_mode(struct wpa_driver_ndis_data *drv)
605 res = ndis_get_oid(drv, OID_802_11_AUTHENTICATION_MODE,
616 static int ndis_set_encr_status(struct wpa_driver_ndis_data *drv, int encr)
619 if (ndis_set_oid(drv, OID_802_11_ENCRYPTION_STATUS,
629 static int ndis_get_encr_status(struct wpa_driver_ndis_data *drv)
633 res = ndis_get_oid(drv, OID_802_11_ENCRYPTION_STATUS,
646 struct wpa_driver_ndis_data *drv = priv;
648 if (drv->wired) {
657 return ndis_get_oid(drv, OID_802_11_BSSID, (char *) bssid, ETH_ALEN) <
664 struct wpa_driver_ndis_data *drv = priv;
668 res = ndis_get_oid(drv, OID_802_11_SSID, (char *) &buf, sizeof(buf));
671 if (drv->wired) {
683 static int wpa_driver_ndis_set_ssid(struct wpa_driver_ndis_data *drv,
696 drv->radio_enabled = 1;
697 return ndis_set_oid(drv, OID_802_11_SSID, (char *) &buf, sizeof(buf));
703 static int wpa_driver_ndis_radio_off(struct wpa_driver_ndis_data *drv)
705 drv->radio_enabled = 0;
706 return ndis_set_oid(drv, OID_802_11_DISASSOCIATE, " ", 4);
711 static int wpa_driver_ndis_disconnect(struct wpa_driver_ndis_data *drv)
717 return wpa_driver_ndis_set_ssid(drv, (u8 *) ssid, SSID_MAX_LEN);
724 struct wpa_driver_ndis_data *drv = priv;
725 return wpa_driver_ndis_disconnect(drv);
737 struct wpa_driver_ndis_data *drv,
747 res = ndis_set_oid(drv, OID_DOT11_SCAN_REQUEST, (char *) &req,
749 eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx);
750 eloop_register_timeout(7, 0, wpa_driver_ndis_scan_timeout, drv,
751 drv->ctx);
759 struct wpa_driver_ndis_data *drv = priv;
762 if (drv->native80211)
763 return wpa_driver_ndis_scan_native80211(drv, params);
765 if (!drv->radio_enabled) {
768 if (wpa_driver_ndis_disconnect(drv) < 0) {
771 drv->radio_enabled = 1;
774 res = ndis_set_oid(drv, OID_802_11_BSSID_LIST_SCAN, " ", 4);
775 eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx);
776 eloop_register_timeout(7, 0, wpa_driver_ndis_scan_timeout, drv,
777 drv->ctx);
816 struct wpa_driver_ndis_data *drv = priv;
828 len = ndis_get_oid(drv, OID_802_11_BSSID_LIST, (char *) b, blen);
902 static int wpa_driver_ndis_remove_key(struct wpa_driver_ndis_data *drv,
918 res = ndis_set_oid(drv, OID_802_11_REMOVE_KEY, (char *) &rkey,
922 res2 = ndis_set_oid(drv, OID_802_11_REMOVE_WEP,
933 static int wpa_driver_ndis_add_wep(struct wpa_driver_ndis_data *drv,
958 res = ndis_set_oid(drv, OID_802_11_ADD_WEP, (char *) wep, len);
972 struct wpa_driver_ndis_data *drv = priv;
981 if (wpa_driver_ndis_get_bssid(drv, bssid) < 0)
990 return wpa_driver_ndis_remove_key(drv, key_idx, addr, bssid,
995 return wpa_driver_ndis_add_wep(drv, pairwise, key_idx, set_tx,
1029 res = ndis_set_oid(drv, OID_802_11_ADD_KEY, (char *) nkey, len);
1052 struct wpa_driver_ndis_data *drv = priv;
1056 drv->mode = params->mode;
1064 eloop_cancel_timeout(wpa_driver_ndis_poll_timeout, drv, NULL);
1066 drv, NULL);
1069 if (ndis_set_oid(drv, OID_802_11_INFRASTRUCTURE_MODE,
1086 wpa_driver_ndis_set_key(drv->ifname, drv, WPA_ALG_WEP,
1124 wpa_driver_ndis_set_key(drv->ifname, drv, WPA_ALG_WEP,
1176 if (ndis_set_oid(drv, OID_802_11_PRIVACY_FILTER,
1184 ndis_set_auth_mode(drv, auth_mode);
1185 ndis_set_encr_status(drv, encr);
1188 ndis_set_oid(drv, OID_802_11_BSSID, (char *) params->bssid,
1190 drv->oid_bssid_set = 1;
1191 } else if (drv->oid_bssid_set) {
1192 ndis_set_oid(drv, OID_802_11_BSSID, "\xff\xff\xff\xff\xff\xff",
1194 drv->oid_bssid_set = 0;
1197 return wpa_driver_ndis_set_ssid(drv, params->ssid, params->ssid_len);
1201 static int wpa_driver_ndis_set_pmkid(struct wpa_driver_ndis_data *drv)
1208 entry = drv->pmkid;
1211 if (count >= drv->no_of_pmkid)
1222 entry = drv->pmkid;
1229 ret = ndis_set_oid(drv, OID_802_11_PMKID, (char *) p, len);
1238 struct wpa_driver_ndis_data *drv = priv;
1245 if (drv->no_of_pmkid == 0)
1249 entry = drv->pmkid;
1263 entry->next = drv->pmkid;
1264 drv->pmkid = entry;
1271 entry->next = drv->pmkid;
1272 drv->pmkid = entry;
1276 return wpa_driver_ndis_set_pmkid(drv);
1283 struct wpa_driver_ndis_data *drv = priv;
1290 if (drv->no_of_pmkid == 0)
1293 entry = drv->pmkid;
1301 drv->pmkid = entry->next;
1308 return wpa_driver_ndis_set_pmkid(drv);
1314 struct wpa_driver_ndis_data *drv = priv;
1319 if (drv->no_of_pmkid == 0)
1322 pmkid = drv->pmkid;
1323 drv->pmkid = NULL;
1334 prev_authmode = ndis_get_auth_mode(drv);
1336 ndis_set_auth_mode(drv, Ndis802_11AuthModeWPA2);
1343 ret = ndis_set_oid(drv, OID_802_11_PMKID, (char *) &p, 8);
1346 ndis_set_auth_mode(drv, prev_authmode);
1352 static int wpa_driver_ndis_get_associnfo(struct wpa_driver_ndis_data *drv)
1361 len = ndis_get_oid(drv, OID_802_11_ASSOCIATION_INFORMATION, buf,
1375 len = ndis_get_oid(drv, OID_802_11_ASSOCIATION_INFORMATION,
1424 len = ndis_get_oid(drv, OID_802_11_BSSID_LIST, (char *) b, blen);
1437 if (ether_addr_equal(drv->bssid, bss->MacAddress) &&
1455 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &data);
1465 struct wpa_driver_ndis_data *drv = eloop_ctx;
1469 if (drv->wired)
1472 if (wpa_driver_ndis_get_bssid(drv, bssid)) {
1474 if (!is_zero_ether_addr(drv->bssid)) {
1475 os_memset(drv->bssid, 0, ETH_ALEN);
1476 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
1480 if (!ether_addr_equal(drv->bssid, bssid)) {
1481 os_memcpy(drv->bssid, bssid, ETH_ALEN);
1482 wpa_driver_ndis_get_associnfo(drv);
1483 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL);
1493 poll = drv->mode == IEEE80211_MODE_IBSS;
1502 drv, NULL);
1509 struct wpa_driver_ndis_data *drv = priv;
1510 eloop_cancel_timeout(wpa_driver_ndis_poll_timeout, drv, NULL);
1511 wpa_driver_ndis_poll_timeout(drv, NULL);
1517 void wpa_driver_ndis_event_connect(struct wpa_driver_ndis_data *drv)
1520 if (wpa_driver_ndis_get_bssid(drv, drv->bssid) == 0) {
1521 wpa_driver_ndis_get_associnfo(drv);
1522 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL);
1529 void wpa_driver_ndis_event_disconnect(struct wpa_driver_ndis_data *drv)
1532 os_memset(drv->bssid, 0, ETH_ALEN);
1533 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
1537 static void wpa_driver_ndis_event_auth(struct wpa_driver_ndis_data *drv,
1565 wpa_supplicant_event(drv->ctx, EVENT_MICHAEL_MIC_FAILURE,
1571 static void wpa_driver_ndis_event_pmkid(struct wpa_driver_ndis_data *drv,
1608 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE,
1616 void wpa_driver_ndis_event_media_specific(struct wpa_driver_ndis_data *drv,
1633 wpa_driver_ndis_event_auth(drv, data, data_len);
1636 wpa_driver_ndis_event_pmkid(drv, data, data_len);
1647 void wpa_driver_ndis_event_adapter_arrival(struct wpa_driver_ndis_data *drv)
1656 wpa_driver_ndis_adapter_close(drv);
1657 if (wpa_driver_ndis_adapter_init(drv) < 0 ||
1658 wpa_driver_ndis_adapter_open(drv) < 0) {
1669 os_strlcpy(event.interface_status.ifname, drv->ifname,
1672 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event);
1677 void wpa_driver_ndis_event_adapter_removal(struct wpa_driver_ndis_data *drv)
1683 os_strlcpy(event.interface_status.ifname, drv->ifname,
1686 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event);
1691 wpa_driver_ndis_get_wpa_capability(struct wpa_driver_ndis_data *drv)
1695 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeWPA) == 0 &&
1696 ndis_get_auth_mode(drv) == Ndis802_11AuthModeWPA) {
1698 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA;
1701 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeWPAPSK) == 0 &&
1702 ndis_get_auth_mode(drv) == Ndis802_11AuthModeWPAPSK) {
1705 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK;
1708 if (ndis_set_encr_status(drv, Ndis802_11Encryption3Enabled) == 0 &&
1709 ndis_get_encr_status(drv) == Ndis802_11Encryption3KeyAbsent) {
1711 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP;
1714 if (ndis_set_encr_status(drv, Ndis802_11Encryption2Enabled) == 0 &&
1715 ndis_get_encr_status(drv) == Ndis802_11Encryption2KeyAbsent) {
1717 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP;
1720 if (ndis_set_encr_status(drv, Ndis802_11Encryption1Enabled) == 0 &&
1721 ndis_get_encr_status(drv) == Ndis802_11Encryption1KeyAbsent) {
1723 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40 |
1727 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeShared) == 0 &&
1728 ndis_get_auth_mode(drv) == Ndis802_11AuthModeShared) {
1729 drv->capa.auth |= WPA_DRIVER_AUTH_SHARED;
1732 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeOpen) == 0 &&
1733 ndis_get_auth_mode(drv) == Ndis802_11AuthModeOpen) {
1734 drv->capa.auth |= WPA_DRIVER_AUTH_OPEN;
1737 ndis_set_encr_status(drv, Ndis802_11EncryptionDisabled);
1742 if (drv->capa.key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_WPA &&
1743 drv->capa.enc & (WPA_DRIVER_CAPA_ENC_TKIP |
1746 drv->has_capability = 1;
1753 drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth);
1757 static void wpa_driver_ndis_get_capability(struct wpa_driver_ndis_data *drv)
1764 drv->capa.flags = WPA_DRIVER_FLAGS_DRIVER_IE;
1766 len = ndis_get_oid(drv, OID_802_11_CAPABILITY, buf, sizeof(buf));
1768 wpa_driver_ndis_get_wpa_capability(drv);
1783 drv->has_capability = 1;
1784 drv->no_of_pmkid = c->NoOfPMKIDs;
1798 drv->capa.auth |= WPA_DRIVER_AUTH_OPEN;
1801 drv->capa.auth |= WPA_DRIVER_AUTH_SHARED;
1804 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA;
1807 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK;
1810 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA2;
1813 drv->capa.key_mgmt |=
1817 drv->capa.key_mgmt |=
1825 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40;
1826 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP104;
1829 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP;
1832 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP;
1841 drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth);
1847 struct wpa_driver_ndis_data *drv = priv;
1848 if (!drv->has_capability)
1850 os_memcpy(capa, &drv->capa, sizeof(*capa));
1857 struct wpa_driver_ndis_data *drv = priv;
1858 return drv->ifname;
1864 struct wpa_driver_ndis_data *drv = priv;
1865 return drv->own_addr;
1875 struct wpa_driver_ndis_data *drv = eloop_data;
1880 if (!ReadMsgQueue(drv->event_queue, buf, NDISUIO_MSG_SIZE, &len, 0,
1901 wpa_driver_ndis_event_adapter_arrival(drv);
1907 wpa_driver_ndis_event_adapter_removal(drv);
1912 SetEvent(drv->connected_event);
1913 wpa_driver_ndis_event_connect(drv);
1916 ResetEvent(drv->connected_event);
1918 wpa_driver_ndis_event_disconnect(drv);
1924 drv, hdr->pvStatusBuffer, hdr->uiStatusBufferSize);
1927 drv, ((const u8 *) hdr) + hdr->uiOffsetToStatusBuffer,
1939 static void ndisuio_notification_deinit(struct wpa_driver_ndis_data *drv)
1944 req.hMsgQueue = drv->event_queue;
1947 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_REQUEST_NOTIFICATION,
1954 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_CANCEL_NOTIFICATION,
1961 if (drv->event_queue) {
1962 eloop_unregister_event(drv->event_queue,
1963 sizeof(drv->event_queue));
1964 CloseHandle(drv->event_queue);
1965 drv->event_queue = NULL;
1968 if (drv->connected_event) {
1969 CloseHandle(drv->connected_event);
1970 drv->connected_event = NULL;
1975 static int ndisuio_notification_init(struct wpa_driver_ndis_data *drv)
1980 drv->connected_event =
1982 if (drv->connected_event == NULL) {
1995 drv->event_queue = CreateMsgQueue(NULL, &opt);
1996 if (drv->event_queue == NULL) {
2000 ndisuio_notification_deinit(drv);
2005 req.hMsgQueue = drv->event_queue;
2017 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_REQUEST_NOTIFICATION,
2022 ndisuio_notification_deinit(drv);
2026 eloop_register_event(drv->event_queue, sizeof(drv->event_queue),
2027 ndisuio_notification_receive, drv, NULL);
2034 static int wpa_driver_ndis_get_names(struct wpa_driver_ndis_data *drv)
2052 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_QUERY_BINDING,
2081 if (os_strstr(name, drv->ifname)) {
2087 if (os_strncmp(desc, drv->ifname, os_strlen(drv->ifname)) == 0)
2098 drv->ifname);
2103 os_strlcpy(drv->ifname,
2105 sizeof(drv->ifname));
2107 drv->adapter_name = wpa_strdup_tchar(drv->ifname);
2108 if (drv->adapter_name == NULL) {
2121 drv->adapter_desc = os_malloc(dlen + 1);
2122 if (drv->adapter_desc) {
2123 os_memcpy(drv->adapter_desc, desc, dlen);
2124 drv->adapter_desc[dlen] = '\0';
2127 if (drv->adapter_desc == NULL)
2131 drv->adapter_desc);
2257 if (found_name == -1 && os_strstr(name[i], drv->ifname))
2260 os_strncmp(desc[i], drv->ifname, os_strlen(drv->ifname)) ==
2270 os_strlcpy(drv->ifname,
2273 sizeof(drv->ifname));
2278 drv->ifname);
2293 drv->adapter_desc = os_malloc(dlen + 1);
2294 if (drv->adapter_desc) {
2295 os_memcpy(drv->adapter_desc, desc[i], dlen);
2296 drv->adapter_desc[dlen] = '\0';
2299 if (drv->adapter_desc == NULL)
2303 drv->adapter_desc);
2369 static int wpa_driver_ndis_rebind_adapter(struct wpa_driver_ndis_data *drv)
2375 len = _tcslen(drv->adapter_name);
2388 memcpy(multi, drv->adapter_name, len * sizeof(TCHAR));
2413 static int wpa_driver_ndis_set_wzc(struct wpa_driver_ndis_data *drv,
2435 return wpa_driver_ndis_rebind_adapter(drv);
2513 drv->wzc_disabled = 1;
2514 return wpa_driver_ndis_rebind_adapter(drv);
2583 if (os_strstr(drv->ifname, guid) == NULL)
2640 drv->wzc_disabled = 0;
2659 drv->wzc_disabled = 1;
2677 static int wpa_driver_ndis_set_wzc(struct wpa_driver_ndis_data *drv,
2701 static int wpa_driver_ndis_adapter_init(struct wpa_driver_ndis_data *drv)
2708 drv->ndisuio = CreateFile(NDISUIO_DEVICE_NAME,
2713 if (drv->ndisuio == INVALID_HANDLE_VALUE) {
2718 driver_ndis_ndisuio_handle = drv->ndisuio;
2721 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_BIND_WAIT, NULL, 0,
2725 CloseHandle(drv->ndisuio);
2726 drv->ndisuio = INVALID_HANDLE_VALUE;
2738 static int wpa_driver_ndis_adapter_open(struct wpa_driver_ndis_data *drv)
2752 len = pos + os_strlen(drv->ifname);
2758 ifname[i] = (WCHAR) drv->ifname[i - pos];
2761 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_OPEN_DEVICE,
2768 CloseHandle(drv->ndisuio);
2769 drv->ndisuio = INVALID_HANDLE_VALUE;
2778 os_snprintf(ifname, sizeof(ifname), "\\Device\\NPF_%s", drv->ifname);
2779 drv->adapter = PacketOpenAdapter(ifname);
2780 if (drv->adapter == NULL) {
2790 static void wpa_driver_ndis_adapter_close(struct wpa_driver_ndis_data *drv)
2794 if (drv->ndisuio != INVALID_HANDLE_VALUE)
2795 CloseHandle(drv->ndisuio);
2797 if (drv->adapter)
2798 PacketCloseAdapter(drv->adapter);
2803 static int ndis_add_multicast(struct wpa_driver_ndis_data *drv)
2805 if (ndis_set_oid(drv, OID_802_3_MULTICAST_LIST,
2818 struct wpa_driver_ndis_data *drv;
2822 drv = os_zalloc(sizeof(*drv));
2823 if (drv == NULL)
2825 drv->ctx = ctx;
2836 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
2838 if (wpa_driver_ndis_adapter_init(drv) < 0) {
2839 os_free(drv);
2843 if (wpa_driver_ndis_get_names(drv) < 0) {
2844 wpa_driver_ndis_adapter_close(drv);
2845 os_free(drv);
2849 wpa_driver_ndis_set_wzc(drv, 0);
2851 if (wpa_driver_ndis_adapter_open(drv) < 0) {
2852 wpa_driver_ndis_adapter_close(drv);
2853 os_free(drv);
2857 if (ndis_get_oid(drv, OID_802_3_CURRENT_ADDRESS,
2858 (char *) drv->own_addr, ETH_ALEN) < 0) {
2861 wpa_driver_ndis_adapter_close(drv);
2862 os_free(drv);
2865 wpa_driver_ndis_get_capability(drv);
2869 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt;
2874 wpa_driver_ndis_flush_pmkid(drv);
2880 wpa_driver_ndis_disconnect(drv);
2882 eloop_register_timeout(1, 0, wpa_driver_ndis_poll_timeout, drv, NULL);
2885 drv->events = ndis_events_init(&drv->events_pipe, &drv->event_avail,
2886 drv->ifname, drv->adapter_desc);
2887 if (drv->events == NULL) {
2888 wpa_driver_ndis_deinit(drv);
2891 eloop_register_event(drv->event_avail, sizeof(drv->event_avail),
2892 wpa_driver_ndis_event_pipe_cb, drv, NULL);
2896 if (ndisuio_notification_init(drv) < 0) {
2897 wpa_driver_ndis_deinit(drv);
2905 if (ndis_set_oid(drv, OID_802_11_INFRASTRUCTURE_MODE,
2914 res = ndis_get_oid(drv, OID_DOT11_CURRENT_OPERATION_MODE, buf,
2920 drv->native80211 = 1;
2921 } else if (!drv->has_capability || drv->capa.enc == 0) {
2929 drv->wired = 1;
2930 drv->capa.flags |= WPA_DRIVER_FLAGS_WIRED;
2931 drv->has_capability = 1;
2932 ndis_add_multicast(drv);
2936 return drv;
2942 struct wpa_driver_ndis_data *drv = priv;
2945 if (drv->events) {
2946 eloop_unregister_event(drv->event_avail,
2947 sizeof(drv->event_avail));
2948 ndis_events_deinit(drv->events);
2953 ndisuio_notification_deinit(drv);
2956 eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx);
2957 eloop_cancel_timeout(wpa_driver_ndis_poll_timeout, drv, NULL);
2958 wpa_driver_ndis_flush_pmkid(drv);
2959 wpa_driver_ndis_disconnect(drv);
2960 if (wpa_driver_ndis_radio_off(drv) < 0) {
2965 wpa_driver_ndis_adapter_close(drv);
2967 if (drv->wzc_disabled)
2968 wpa_driver_ndis_set_wzc(drv, 1);
2971 os_free(drv->adapter_name);
2973 os_free(drv->adapter_desc);
2974 os_free(drv);