diff --git a/dkms-install.sh b/dkms-install.sh new file mode 100644 index 0000000..51d8f66 --- /dev/null +++ b/dkms-install.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [[ $EUID -ne 0 ]]; then + echo "You must run this with superuser priviliges. Try \"sudo ./dkms-install.sh\"" 2>&1 + exit 1 +else + echo "About to run dkms install steps..." +fi + +DRV_DIR=rtl8812au +DRV_NAME=rtl8812au +DRV_VERSION=5.1.5 + +cp -r ../${DRV_DIR} /usr/src/${DRV_NAME}-${DRV_VERSION} + +dkms add -m ${DRV_NAME} -v ${DRV_VERSION} +dkms build -m ${DRV_NAME} -v ${DRV_VERSION} +dkms install -m ${DRV_NAME} -v ${DRV_VERSION} +RESULT=$? + +echo "Finished running dkms install steps." + +exit $RESULT diff --git a/dkms-remove.sh b/dkms-remove.sh new file mode 100644 index 0000000..51a3a32 --- /dev/null +++ b/dkms-remove.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +if [[ $EUID -ne 0 ]]; then + echo "You must run this with superuser priviliges. Try \"sudo ./dkms-remove.sh\"" 2>&1 + exit 1 +else + echo "About to run dkms removal steps..." +fi + +DRV_DIR=rtl8812au +DRV_NAME=rtl8812au +DRV_VERSION=5.1.5 + +dkms remove ${DRV_NAME}/${DRV_VERSION} --all +rm -rf /usr/src/${DRV_NAME}-${DRV_VERSION} + +RESULT=$? +if [[ "$RESULT" != "0" ]]; then + echo "Error occurred while running dkms remove." 2>&1 +else + echo "Finished running dkms removal steps." +fi + +exit $RESULT diff --git a/dkms.conf b/dkms.conf new file mode 100644 index 0000000..708263d --- /dev/null +++ b/dkms.conf @@ -0,0 +1,7 @@ +PACKAGE_NAME="rtl8812au" +PACKAGE_VERSION="#MODULE_VERSION#" +BUILT_MODULE_NAME[0]="8812au" +MAKE="'make' -j4" +CLEAN="'make' clean" +DEST_MODULE_LOCATION[0]="/updates/dkms" +AUTOINSTALL="YES" diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c index ccb9310..5895645 100644 --- a/os_dep/linux/ioctl_cfg80211.c +++ b/os_dep/linux/ioctl_cfg80211.c @@ -747,12 +747,28 @@ check_bss: struct ieee80211_channel *notify_channel; u32 freq; u16 channel = cur_network->network.Configuration.DSConfig; - + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) + struct cfg80211_roam_info roam_info = {}; + #endif + freq = rtw_ch2freq(channel); notify_channel = ieee80211_get_channel(wiphy, freq); #endif RTW_INFO(FUNC_ADPT_FMT" call cfg80211_roamed\n", FUNC_ADPT_ARG(padapter)); + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) + roam_info.channel = notify_channel; + roam_info.bssid = cur_network->network.MacAddress; + roam_info.req_ie = + pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2; + roam_info.req_ie_len = + pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2; + roam_info.resp_ie = + pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6; + roam_info.resp_ie_len = + pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6; + cfg80211_roamed(padapter->pnetdev, &roam_info, GFP_ATOMIC); + #else cfg80211_roamed(padapter->pnetdev #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE) , notify_channel @@ -763,6 +779,7 @@ check_bss: , pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6 , pmlmepriv->assoc_rsp_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 6 , GFP_ATOMIC); + #endif } else { #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE) RTW_INFO("pwdev->sme_state(b)=%d\n", pwdev->sme_state); @@ -1730,10 +1747,17 @@ enum nl80211_iftype { NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1 }; #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +static int cfg80211_rtw_change_iface(struct wiphy *wiphy, + struct net_device *ndev, + enum nl80211_iftype type, + struct vif_params *params) +#else static int cfg80211_rtw_change_iface(struct wiphy *wiphy, struct net_device *ndev, enum nl80211_iftype type, u32 *flags, struct vif_params *params) +#endif { enum nl80211_iftype old_type; NDIS_802_11_NETWORK_INFRASTRUCTURE networkType; @@ -3636,7 +3660,12 @@ static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct ne mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP; strncpy(mon_ndev->name, name, IFNAMSIZ); mon_ndev->name[IFNAMSIZ - 1] = 0; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 9)) + mon_ndev->needs_free_netdev = false; + mon_ndev->priv_destructor = rtw_ndev_destructor; +#else mon_ndev->destructor = rtw_ndev_destructor; +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)) mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops; @@ -3702,7 +3731,11 @@ static int #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) unsigned char name_assign_type, #endif + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)) + enum nl80211_iftype type, struct vif_params *params) + #else enum nl80211_iftype type, u32 *flags, struct vif_params *params) + #endif { int ret = 0; struct net_device *ndev = NULL; @@ -4273,8 +4306,8 @@ static int cfg80211_rtw_get_channel(struct wiphy *wiphy, struct wireless_dev *wd int channel; int control_freq; int center_freq; - int center_freq2 = 0; - int width = NL80211_CHAN_WIDTH_20; + int center_freq2=0; + int width; int band; int bandWidth; int offset; @@ -4286,7 +4319,7 @@ static int cfg80211_rtw_get_channel(struct wiphy *wiphy, struct wireless_dev *wd return -ENODEV; offset = rtw_get_oper_choffset(padapter); - center_freq = channel = adapter_to_dvobj(padapter)->oper_channel; + channel = adapter_to_dvobj(padapter)->oper_channel; if(channel >= 1){ switch(pHalData->CurrentBandType){ @@ -6330,7 +6363,11 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *adapter, struct wiphy *wiphy) #endif #if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)) + #if (LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)) wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; + #else // kernel >= 4.12 + wiphy->max_sched_scan_reqs = 1; + #endif #ifdef CONFIG_PNO_SUPPORT wiphy->max_sched_scan_ssids = MAX_PNO_LIST_COUNT; #endif