INT WdsVirtualIF_ioctl( IN PNET_DEV net_dev, IN OUT VOID *rq, IN INT cmd) { VOID *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); /*RTMP_OS_NETDEV_GET_PRIV(pVirtualAd->RtmpDev); */ /* if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) */ if (RTMP_DRIVER_IOCTL_SANITY_CHECK(pAd) != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_TRACE, ("VirtualIF_ioctl(%s)::Network is down!\n", RTMP_OS_NETDEV_GET_DEVNAME(net_dev))); return -ENETDOWN; } return rt28xx_ioctl(net_dev, rq, cmd); }
/* ======================================================================== Routine Description: IOCTL to WLAN. Arguments: dev_p which WLAN network interface rq_p command information cmd command ID Return Value: 0: IOCTL successfully otherwise: IOCTL fail Note: SIOCETHTOOL 8946 New drivers use this ETHTOOL interface to report link failure activity. ======================================================================== */ int ApCli_VirtualIF_Ioctl( IN PNET_DEV dev_p, IN OUT VOID *rq_p, IN int cmd) { VOID *pAd; pAd = RTMP_OS_NETDEV_GET_PRIV(dev_p); ASSERT(pAd); /* if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) */ if (RTMP_DRIVER_IOCTL_SANITY_CHECK(pAd, NULL) != NDIS_STATUS_SUCCESS) return -ENETDOWN; /* do real IOCTL */ return (rt28xx_ioctl(dev_p, rq_p, cmd)); } /* End of ApCli_VirtualIF_Ioctl */
/* ======================================================================== Routine Description: IOCTL to WLAN. Arguments: pDev which WLAN network interface pIoCtrl command information Command command ID Return Value: 0: IOCTL successfully otherwise: IOCTL fail Note: SIOCETHTOOL 8946 New drivers use this ETHTOOL interface to report link failure activity. ======================================================================== */ INT MBSS_VirtualIF_Ioctl( IN PNET_DEV pDev, IN OUT VOID *pIoCtrl, IN INT Command) { VOID *pAd; pAd = RTMP_OS_NETDEV_GET_PRIV(pDev); ASSERT(pAd); if (!pAd) return -EINVAL; /* if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) */ if (RTMP_DRIVER_IOCTL_SANITY_CHECK(pAd, NULL) != NDIS_STATUS_SUCCESS) return -ENETDOWN; return rt28xx_ioctl(pDev, pIoCtrl, Command); }
/* ======================================================================== Routine Description: Request to do a scan. If returning zero, the scan request is given the driver, and will be valid until passed to cfg80211_scan_done(). For scan results, call cfg80211_inform_bss(); you can call this outside the scan/scan_done bracket too. Arguments: pWiphy - Wireless hardware description pNdev - Network device interface pRequest - Scan request Return Value: 0 - success -x - fail Note: For iw utility: scan struct cfg80211_scan_request { struct cfg80211_ssid *ssids; int n_ssids; struct ieee80211_channel **channels; u32 n_channels; const u8 *ie; size_t ie_len; * @ssids: SSIDs to scan for (active scan only) * @n_ssids: number of SSIDs * @channels: channels to scan on. * @n_channels: number of channels for each band * @ie: optional information element(s) to add into Probe Request or %NULL * @ie_len: length of ie in octets ======================================================================== */ static int CFG80211_OpsScan( IN struct wiphy *pWiphy, IN struct cfg80211_scan_request *pRequest) { #ifdef CONFIG_STA_SUPPORT struct rtmp_adapter *pAd; CFG80211_CB *pCfg80211_CB; #ifdef WPA_SUPPLICANT_SUPPORT struct iw_scan_req IwReq; union iwreq_data Wreq; #endif /* WPA_SUPPLICANT_SUPPORT */ struct net_device *pNdev = NULL; CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s ==>\n", __FUNCTION__)); MAC80211_PAD_GET(pAd, pWiphy); RTMP_DRIVER_NET_DEV_GET(pAd, &pNdev); /* sanity check */ if ((pNdev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) && (pNdev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC)) { return -EOPNOTSUPP; } /* End of if */ if (RTMP_DRIVER_IOCTL_SANITY_CHECK(pAd, NULL) != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_TRACE, ("80211> Network is down!\n")); return -ENETDOWN; } /* End of if */ if (RTMP_DRIVER_80211_SCAN(pAd) != NDIS_STATUS_SUCCESS) return -EBUSY; /* scanning */ /* End of if */ RTMP_DRIVER_80211_CB_GET(pAd, &pCfg80211_CB); pCfg80211_CB->pCfg80211_ScanReq = pRequest; /* used in scan end */ #ifdef WPA_SUPPLICANT_SUPPORT memset(&Wreq, 0, sizeof(Wreq)); memset(&IwReq, 0, sizeof(IwReq)); if ((pRequest->ssids != NULL) && (sizeof(pRequest->ssids->ssid) <= sizeof(IwReq.essid))) { /* use 1st SSID in the requested SSID list */ IwReq.essid_len = pRequest->ssids->ssid_len; memcpy(IwReq.essid, pRequest->ssids->ssid, sizeof(IwReq.essid)); Wreq.data.flags |= IW_SCAN_THIS_ESSID; Wreq.data.length = sizeof(struct iw_scan_req); } rt_ioctl_siwscan(pNdev, NULL, &Wreq, (char *)&IwReq); #else rt_ioctl_siwscan(pNdev, NULL, NULL, NULL); #endif /* WPA_SUPPLICANT_SUPPORT */ return 0; #else return -EOPNOTSUPP; #endif /* CONFIG_STA_SUPPORT */ } /* End of CFG80211_OpsScan */
int rtusb_fast_probe(VOID *handle, VOID **ppAd, struct usb_interface *intf) { VOID *pAd = *ppAd; VOID *pCookie = NULL; struct net_device *net_dev; #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) UCHAR WOWRun; #endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ #ifdef USB_SUPPORT_SELECTIVE_SUSPEND INT pm_usage_cnt; #endif /* USB_SUPPORT_SELECTIVE_SUSPEND */ struct usb_device *usb_dev = NULL; pCookie = RTMPCheckOsCookie(handle, &pAd); if (pCookie == NULL) return NDIS_STATUS_FAILURE; usb_dev = ((POS_COOKIE)pCookie)->pUsb_Dev; if (USBDevConfigInit(usb_dev, intf, pAd) == FALSE) { RTMPFreeAdapter(pAd); return NDIS_STATUS_FAILURE; } RTMP_DRIVER_USB_INIT(pAd, usb_dev, 0); /* netdevice-related structure set-up */ netdev_sysfs_reinit(&pAd, usb_dev); if (RTMP_DRIVER_IOCTL_SANITY_CHECK(pAd, NULL) != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_ERROR, ("Driver is not init, ignore %s\n", __func__)); return NDIS_STATUS_SUCCESS; } #ifdef USB_SUPPORT_SELECTIVE_SUSPEND #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) pm_usage_cnt = atomic_read(&intf->pm_usage_cnt); #else pm_usage_cnt = intf->pm_usage_cnt; #endif if(pm_usage_cnt <= 0) usb_autopm_get_interface(intf); RTMP_DRIVER_ADAPTER_RT28XX_CMD_RADIO_ON(pAd); DBGPRINT(RT_DEBUG_ERROR, ("%s(): <=autosuspend\n", __func__)); return NDIS_STATUS_SUCCESS; #endif /* USB_SUPPORT_SELECTIVE_SUSPEND */ #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) RTMP_DRIVER_ADAPTER_RT28XX_WOW_RUNSTATUS(pAd, &WOWRun); if (WOWRun) RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE(pAd); else #endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ { DBGPRINT(RT_DEBUG_ERROR, ("%s :radio_on \n", __func__)); RTMP_DRIVER_ADAPTER_RT28XX_CMD_RADIO_ON(pAd); RTMP_DRIVER_NET_DEV_GET(pAd, &net_dev); netif_device_attach(net_dev); netif_start_queue(net_dev); netif_carrier_on(net_dev); netif_wake_queue(net_dev); } RTMP_DRIVER_USB_RESUME(pAd); DBGPRINT(RT_DEBUG_TRACE, ("<=%s()\n", __func__)); return NDIS_STATUS_SUCCESS; }