From 115b1d1aef97516a0af32e119079736d76fbd09a Mon Sep 17 00:00:00 2001 From: gkrzystek <76957657+gkrzystek@users.noreply.github.com> Date: Tue, 25 Apr 2023 09:45:55 +0200 Subject: [PATCH] Fix for edimax EW-7822ULC BUG #769 (#47) * Edimax AC1200 MU-MIMO USB2.0 * 7392:b822 is 8822B not 8821, so handled by rtl88x2bu --- .../net/wireless/realtek/rtl8812au/Makefile | 2 +- .../rtl8812au/os_dep/linux/ioctl_cfg80211.c | 8 + .../realtek/rtl8812au/os_dep/linux/usb_intf.c | 1 - .../realtek/rtl8821au/hal/phydm/phydm_debug.h | 2 +- .../rtl8821au/os_dep/linux/ioctl_cfg80211.c | 8 + .../realtek/rtl8821cu/core/rtw_mlme_ext.c | 13 +- .../wireless/realtek/rtl8821cu/core/rtw_odm.c | 14 +- .../realtek/rtl8821cu/core/rtw_recv.c | 4 +- .../wireless/realtek/rtl8821cu/hal/hal_com.c | 214 +++++++++--------- .../realtek/rtl8821cu/hal/phydm/phydm_debug.h | 2 +- .../realtek/rtl8821cu/include/rtw_mlme.h | 24 +- .../rtl8821cu/os_dep/linux/ioctl_cfg80211.c | 8 + .../realtek/rtl8821cu/os_dep/linux/os_intfs.c | 2 +- .../realtek/rtl88x2bu/hal/phydm/phydm_debug.h | 2 +- .../rtl88x2bu/os_dep/linux/ioctl_cfg80211.c | 8 + 15 files changed, 172 insertions(+), 140 deletions(-) diff --git a/drivers/net/wireless/realtek/rtl8812au/Makefile b/drivers/net/wireless/realtek/rtl8812au/Makefile index 8a0454292..6a7e70389 100644 --- a/drivers/net/wireless/realtek/rtl8812au/Makefile +++ b/drivers/net/wireless/realtek/rtl8812au/Makefile @@ -93,7 +93,7 @@ CONFIG_SIGNAL_SCALE_MAPPING = n CONFIG_80211W = y CONFIG_REDUCE_TX_CPU_LOADING = n CONFIG_BR_EXT = y -CONFIG_TDLS = n +CONFIG_TDLS = y CONFIG_WIFI_MONITOR = y CONFIG_MCC_MODE = n CONFIG_APPEND_VENDOR_IE_ENABLE = n diff --git a/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/ioctl_cfg80211.c index 482967f23..1695f9c2d 100644 --- a/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/ioctl_cfg80211.c +++ b/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/ioctl_cfg80211.c @@ -465,7 +465,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false, 0); +#else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false); +#endif #else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, false); #endif @@ -480,7 +484,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, goto exit; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0, 0); +#else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0); +#endif #else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); #endif diff --git a/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/usb_intf.c b/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/usb_intf.c index 242ea996a..fbf07c573 100644 --- a/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/usb_intf.c +++ b/drivers/net/wireless/realtek/rtl8812au/os_dep/linux/usb_intf.c @@ -162,7 +162,6 @@ static struct usb_device_id rtw_usb_id_tbl[] = { {USB_DEVICE(0x050D, 0x1106), .driver_info = RTL8812}, /* Belkin - sercomm */ {USB_DEVICE(0x2001, 0x330E), .driver_info = RTL8812}, /* D-Link - ALPHA */ {USB_DEVICE(0x7392, 0xA822), .driver_info = RTL8812}, /* Edimax - Edimax */ - {USB_DEVICE(0x7392, 0xB822), .driver_info = RTL8812}, /* Edimax EW-7822ULC */ {USB_DEVICE(0x0DF6, 0x0074), .driver_info = RTL8812}, /* Sitecom - Edimax */ {USB_DEVICE(0x04BB, 0x0952), .driver_info = RTL8812}, /* I-O DATA - Edimax */ {USB_DEVICE(0x0789, 0x016E), .driver_info = RTL8812}, /* Logitec - Edimax */ diff --git a/drivers/net/wireless/realtek/rtl8821au/hal/phydm/phydm_debug.h b/drivers/net/wireless/realtek/rtl8821au/hal/phydm/phydm_debug.h index 06e809b57..ab1043191 100644 --- a/drivers/net/wireless/realtek/rtl8821au/hal/phydm/phydm_debug.h +++ b/drivers/net/wireless/realtek/rtl8821au/hal/phydm/phydm_debug.h @@ -89,7 +89,7 @@ #define PHYDM_SNPRINTF snprintf #elif (DM_ODM_SUPPORT_TYPE == ODM_CE) #undef pr_debug - #define pr_debug printk + #define pr_debug _RTW_DBG #define RT_PRINTK(fmt, args...) pr_debug(fmt, ## args) #define RT_DISP(dbgtype, dbgflag, printstr) #define RT_TRACE(adapter, comp, drv_level, fmt, args...) \ diff --git a/drivers/net/wireless/realtek/rtl8821au/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/realtek/rtl8821au/os_dep/linux/ioctl_cfg80211.c index 482967f23..1695f9c2d 100644 --- a/drivers/net/wireless/realtek/rtl8821au/os_dep/linux/ioctl_cfg80211.c +++ b/drivers/net/wireless/realtek/rtl8821au/os_dep/linux/ioctl_cfg80211.c @@ -465,7 +465,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false, 0); +#else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false); +#endif #else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, false); #endif @@ -480,7 +484,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, goto exit; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0, 0); +#else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0); +#endif #else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); #endif diff --git a/drivers/net/wireless/realtek/rtl8821cu/core/rtw_mlme_ext.c b/drivers/net/wireless/realtek/rtl8821cu/core/rtw_mlme_ext.c index 5fa200031..ebb93e583 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/core/rtw_mlme_ext.c +++ b/drivers/net/wireless/realtek/rtl8821cu/core/rtw_mlme_ext.c @@ -12799,14 +12799,15 @@ void linked_status_chk(_adapter *padapter, u8 from_timer) #elif defined(CONFIG_LAYER2_ROAMING) if (rtw_chk_roam_flags(padapter, RTW_ROAM_ACTIVE)) { RTW_INFO("signal_strength_data.avg_val = %d\n", precvpriv->signal_strength_data.avg_val); - if ((precvpriv->signal_strength_data.avg_val < pmlmepriv->roam_rssi_threshold) - && (rtw_get_passing_time_ms(pmlmepriv->last_roaming) >= pmlmepriv->roam_scan_int*2000)) { + if (precvpriv->signal_strength_data.avg_val < pmlmepriv->roam_rssi_threshold) { + if (rtw_get_passing_time_ms(pmlmepriv->last_roaming) >= pmlmepriv->roam_scan_int*2000) { #ifdef CONFIG_RTW_80211K - rtw_roam_nb_discover(padapter, _FALSE); + rtw_roam_nb_discover(padapter, _FALSE); #endif - pmlmepriv->need_to_roam = _TRUE; - rtw_drv_scan_by_self(padapter, RTW_AUTO_SCAN_REASON_ROAM); - pmlmepriv->last_roaming = rtw_get_current_time(); + pmlmepriv->need_to_roam = _TRUE; + rtw_drv_scan_by_self(padapter, RTW_AUTO_SCAN_REASON_ROAM); + pmlmepriv->last_roaming = rtw_get_current_time(); + } } else pmlmepriv->need_to_roam = _FALSE; } diff --git a/drivers/net/wireless/realtek/rtl8821cu/core/rtw_odm.c b/drivers/net/wireless/realtek/rtl8821cu/core/rtw_odm.c index 61749442a..2d454f49b 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/core/rtw_odm.c +++ b/drivers/net/wireless/realtek/rtl8821cu/core/rtw_odm.c @@ -495,7 +495,7 @@ debug_IQK( if (idx == TX_IQK) {//TXCFIR odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x3); } else {//RXCFIR - odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x1); + odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x1); } odm_set_bb_reg(dm, R_0x1bd4, BIT(21), 0x1); odm_set_bb_reg(dm, R_0x1bd4, bit_mask_20_16, 0x10); @@ -506,7 +506,7 @@ debug_IQK( //iqk_info->iqk_cfir_real[ch][path][idx][i] = // (tmp & 0x0fff0000) >> 16; RTW_INFO("iqk_cfir_imag[%d][%d][%d] = 0x%x\n", path, idx, i, (tmp & 0x0fff)); - //iqk_info->iqk_cfir_imag[ch][path][idx][i] = tmp & 0x0fff; + //iqk_info->iqk_cfir_imag[ch][path][idx][i] = tmp & 0x0fff; } odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x0); //odm_set_bb_reg(dm, R_0x1bd8, MASKDWORD, 0x0); @@ -542,7 +542,7 @@ extern void _dpk_get_coef_8822c(void *dm_void, u8 path); __odm_func__ void debug_reload_data_8822c( void *dm_void) -{ +{ struct dm_struct *dm = (struct dm_struct *)dm_void; struct dm_dpk_info *dpk_info = &dm->dpk_info; @@ -567,7 +567,7 @@ debug_reload_data_8822c( u32tmp = odm_get_bb_reg(dm, R_0x1b64, MASKBYTE3); RTW_INFO("[DPK] dpk_txagc = 0x%08x\n", u32tmp); - + //debug_coef_write_8822c(dm, path, dpk_info->dpk_path_ok & BIT(path) >> path); _dpk_get_coef_8822c(dm, path); @@ -577,11 +577,11 @@ debug_reload_data_8822c( if (path == RF_PATH_A) u32tmp = odm_get_bb_reg(dm, R_0x1b04, 0x0fffffff); - else + else u32tmp = odm_get_bb_reg(dm, R_0x1b5c, 0x0fffffff); RTW_INFO("[DPK] dpk_gs = 0x%08x\n", u32tmp); - + } } @@ -593,7 +593,7 @@ void odm_lps_pg_debug_8822c(void *dm_void) debug_IQK(dm, TX_IQK, RF_PATH_A); debug_IQK(dm, RX_IQK, RF_PATH_A); debug_IQK(dm, TX_IQK, RF_PATH_B); - debug_IQK(dm, RX_IQK, RF_PATH_B); + debug_IQK(dm, RX_IQK, RF_PATH_B); debug_reload_data_8822c(dm); } #endif /* defined(CONFIG_RTL8822C) && defined(CONFIG_LPS_PG) */ diff --git a/drivers/net/wireless/realtek/rtl8821cu/core/rtw_recv.c b/drivers/net/wireless/realtek/rtl8821cu/core/rtw_recv.c index b63f0599e..fda004367 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/core/rtw_recv.c +++ b/drivers/net/wireless/realtek/rtl8821cu/core/rtw_recv.c @@ -4083,7 +4083,7 @@ int recv_frame_monitor(_adapter *padapter, union recv_frame *rframe) if (!RTW_CANNOT_RUN(padapter)) { /* indicate this recv_frame */ ret = rtw_recv_monitor(padapter, rframe); - } else + } else ret = _FAIL; exit: @@ -4252,7 +4252,7 @@ int recv_func(_adapter *padapter, union recv_frame *rframe) u8 type; #endif - if (check_fwstate(mlmepriv, WIFI_MONITOR_STATE) + if (check_fwstate(mlmepriv, WIFI_MONITOR_STATE) #ifdef RTW_SIMPLE_CONFIG || (check_fwstate(mlmepriv, WIFI_AP_STATE) && padapter->rtw_simple_config == _TRUE && IS_MCAST(rtl_get_ra(ptr))) #endif diff --git a/drivers/net/wireless/realtek/rtl8821cu/hal/hal_com.c b/drivers/net/wireless/realtek/rtl8821cu/hal/hal_com.c index f3c3d6b2a..4ebcae743 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/hal/hal_com.c +++ b/drivers/net/wireless/realtek/rtl8821cu/hal/hal_com.c @@ -277,7 +277,7 @@ void dump_chip_info(HAL_VERSION ChipVersion) cnt += sprintf((buf + cnt), "Chip Version Info: CHIP_UNKNOWN_"); cnt += sprintf((buf + cnt), "%s", IS_NORMAL_CHIP(ChipVersion) ? "" : "T_"); - + if (IS_CHIP_VENDOR_TSMC(ChipVersion)) cnt += sprintf((buf + cnt), "%s", "T"); else if (IS_CHIP_VENDOR_UMC(ChipVersion)) @@ -1263,7 +1263,7 @@ void rtw_hal_c2h_pkt_pre_hdl(_adapter *adapter, u8 *buf, u16 len) } hdl_here = rtw_hal_c2h_id_handle_directly(adapter, id, seq, plen, payload) == _TRUE ? 1 : 0; - if (hdl_here) + if (hdl_here) ret = rtw_hal_c2h_handler(adapter, id, seq, plen, payload); else ret = rtw_c2h_packet_wk_cmd(adapter, buf, len); @@ -1635,7 +1635,7 @@ int c2h_defeature_dbg_hdl(_adapter *adapter, u8 *data, u8 len) RTW_PRINT("%s: 0x%02X\n", __func__, *(data + i)); ret = _SUCCESS; - + exit: return ret; } @@ -1879,9 +1879,9 @@ u8 rtw_hal_set_req_per_rpt_cmd(_adapter *adapter, u8 group_macid, SET_H2CCMD_REQ_PER_RPT_RPT_TYPE(cmd_buf, rpt_type); SET_H2CCMD_REQ_PER_RPT_MACID_BMAP(cmd_buf, macid_bitmap); - ret = rtw_hal_fill_h2c_cmd(adapter, - H2C_REQ_PER_RPT, - H2C_REQ_PER_RPT_LEN, + ret = rtw_hal_fill_h2c_cmd(adapter, + H2C_REQ_PER_RPT, + H2C_REQ_PER_RPT_LEN, cmd_buf); return ret; } @@ -2001,15 +2001,15 @@ int c2h_lps_status_rpt(PADAPTER adapter, u8 *data, u8 len) /* action=0: report force leave null data status */ /* action=1: report Rf on status when receiving a SetPwrMode H2C with PwrState = RFON */ switch (action) { - case 0: + case 0: /* status code 0: success, 1: no ack, 2: timeout, 3: cancel */ - case 1: + case 1: /* status code 0: FW has already turn to RFON */ pwrpriv->lps_ack_status = status_code; if (DBG_LPS_STATUS_RPT) RTW_INFO("=== [C2H LPS Action(%d)] LPS Status Code:%d ===\n", action, status_code); - + break; default: RTW_INFO("UnKnown Action(%d) for C2H LPS RPT\n", action); @@ -3136,7 +3136,7 @@ void rtw_ap_multi_bcn_cfg(_adapter *adapter) if (IS_HARDWARE_TYPE_8821(adapter) || IS_HARDWARE_TYPE_8192E(adapter))/* select BCN on port 0 for DualBeacon*/ rtw_write8(adapter, REG_CCK_CHECK, rtw_read8(adapter, REG_CCK_CHECK) & (~BIT_BCN_PORT_SEL)); - /* Enable HW seq for BCN + /* Enable HW seq for BCN * 0x4FC[0]: EN_HWSEQ / 0x4FC[1]: EN_HWSEQEXT */ #ifdef CONFIG_RTL8822B if (IS_HARDWARE_TYPE_8822B(adapter)) @@ -3694,7 +3694,7 @@ void rtw_hal_rcr_set_chk_bssid(_adapter *adapter, u8 self_action) else if ((MSTATE_AP_NUM(&mstate) && adapter->registrypriv.wifi_spec) /* for 11n Logo 4.2.31/4.2.32 */ || MSTATE_MESH_NUM(&mstate) ) - rcr_new &= ~RCR_CBSSID_BCN; + rcr_new &= ~RCR_CBSSID_BCN; else rcr_new |= RCR_CBSSID_BCN; @@ -3870,7 +3870,7 @@ void dump_tx_aclt_confs(void *sel, struct dvobj_priv *dvobj) cnt += snprintf(buf + cnt, TX_ACLT_CONF_MSG_LEN - cnt - 1, " N/A"); if (cnt >= TX_ACLT_CONF_MSG_LEN - 1) continue; - + if (conf->be_bk) cnt += snprintf(buf + cnt, TX_ACLT_CONF_MSG_LEN - cnt - 1, " 0x%04x", conf->be_bk); else @@ -3933,7 +3933,7 @@ void rtw_hal_update_tx_aclt(_adapter *adapter) iface = dvobj->padapters[i]; if (!iface) continue; - + if (MLME_IS_AP(iface) && ((iface->b2u_flags_ap_src & RTW_AP_B2U_IP_MCAST) || (iface->b2u_flags_ap_fwd & RTW_AP_B2U_IP_MCAST)) @@ -5778,11 +5778,11 @@ static u8 rtw_hal_set_wowlan_ctrl_cmd(_adapter *adapter, u8 enable, u8 change_un gpionum = ppwrpriv->wowlan_gpio_index; sdio_wakeup_enable = 0; #endif /* CONFIG_GPIO_WAKEUP */ - + if(registry_par->suspend_type == FW_IPS_DISABLE_BBRF && !check_fwstate(pmlmepriv, WIFI_ASOC_STATE)) no_wake = 1; - + if (!ppwrpriv->wowlan_pno_enable && registry_par->wakeup_event & BIT(0) && !no_wake) magic_pkt = enable; @@ -5906,20 +5906,20 @@ static u8 rtw_hal_set_remote_wake_ctrl_cmd(_adapter *adapter, u8 enable) u1H2CRemoteWakeCtrlParm, 0); } #endif /* CONFIG_GTK_OL */ - + #ifdef CONFIG_IPV6 if (ppwrpriv->wowlan_ns_offload_en == _TRUE) { RTW_INFO("enable NS offload\n"); SET_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN( u1H2CRemoteWakeCtrlParm, enable); } - + /* * filter NetBios name service pkt to avoid being waked-up * by this kind of unicast pkt this exceptional modification * is used for match competitor's behavior */ - + SET_H2CCMD_REMOTE_WAKE_CTRL_NBNS_FILTER_EN( u1H2CRemoteWakeCtrlParm, enable); #endif /*CONFIG_IPV6*/ @@ -5979,7 +5979,7 @@ static u8 rtw_hal_set_remote_wake_ctrl_cmd(_adapter *adapter, u8 enable) u1H2CRemoteWakeCtrlParm, enable); } #endif - + #ifdef CONFIG_P2P_WOWLAN if (_TRUE == ppwrpriv->wowlan_p2p_mode) { RTW_INFO("P2P OFFLOAD ENABLE\n"); @@ -6117,7 +6117,7 @@ void rtw_hal_set_fw_wow_related_cmd(_adapter *padapter, u8 enable) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct registry_priv *pregistry = &padapter->registrypriv; u8 pkt_type = 0, no_wake = 0; - + if(pregistry->suspend_type == FW_IPS_DISABLE_BBRF && !check_fwstate(pmlmepriv, WIFI_ASOC_STATE)) no_wake = 1; @@ -6374,7 +6374,7 @@ static void rtw_hal_ap_wow_enable(_adapter *padapter) rtw_hal_set_output_gpio(padapter, pwrpriv->wowlan_gpio_index, val8); rtw_hal_switch_gpio_wl_ctrl(padapter, pwrpriv->wowlan_gpio_index, _TRUE); RTW_INFO("%s: set GPIO_%d to OUTPUT %s state in ap wow suspend and %s_ACTIVE.\n", - __func__, pwrpriv->wowlan_gpio_index, + __func__, pwrpriv->wowlan_gpio_index, pwrpriv->wowlan_gpio_output_state ? "HIGH" : "LOW", pwrpriv->is_high_active ? "HIGI" : "LOW"); #endif /* CONFIG_WAKEUP_GPIO_INPUT_MODE */ @@ -6444,10 +6444,10 @@ static void rtw_hal_ap_wow_disable(_adapter *padapter) rtw_hal_set_output_gpio(padapter, pwrctl->wowlan_gpio_index , GPIO_OUTPUT_LOW); #else - rtw_hal_set_output_gpio(padapter, pwrctl->wowlan_gpio_index, + rtw_hal_set_output_gpio(padapter, pwrctl->wowlan_gpio_index, pwrctl->wowlan_gpio_output_state); RTW_INFO("%s: set GPIO_%d to OUTPUT %s state in ap wow resume and %s_ACTIVE.\n", - __func__, pwrctl->wowlan_gpio_index, + __func__, pwrctl->wowlan_gpio_index, pwrctl->wowlan_gpio_output_state ? "HIGH" : "LOW", pwrctl->is_high_active ? "HIGI" : "LOW"); #endif /*CONFIG_WAKEUP_GPIO_INPUT_MODE*/ @@ -8442,14 +8442,14 @@ static void rtw_hal_construct_keepalive( PADAPTER padapter, /* LLC header */ _rtw_memcpy(pKeepAlivePkt, LLCHeader, 6); *pLength += 6; - + /*From protocol type*/ pKeepAlivePkt+=6; _rtw_memcpy(pKeepAlivePkt,pwrpriv->keep_alive_pattern+12,pwrpriv->keep_alive_pattern_len-12); *pLength+=pwrpriv->keep_alive_pattern_len-12; - + if (psecuritypriv->dot11PrivacyAlgrthm == _TKIP_) { *pLength += 8; } @@ -8461,7 +8461,7 @@ static void rtw_hal_construct_keepalive( PADAPTER padapter, RTW_INFO("\n"); } */ - + RTW_INFO("%s <======\n", __func__); } @@ -8979,7 +8979,7 @@ static void rtw_hal_construct_mdns_rsp_v6( struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct security_priv *psecuritypriv = &padapter->securitypriv; - static u8 ICMPLLCHeader[8] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x86, 0xDD}; + static u8 ICMPLLCHeader[8] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x86, 0xDD}; u8 mulicast_ipv6_addr[16] = {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb}; u8 mulicast_mac_addr_for_mdns[6] = {0x33, 0x33, 0x00, 0x00, 0x00, 0xfb}; /* could be revise by fw */ u8 *pMdnsRspPkt = pframe; @@ -9317,7 +9317,7 @@ void rtw_hal_set_wow_fw_rsvd_page(_adapter *adapter, u8 *pframe, u16 index, if ((0 != pwrctl->wowlan_war_offload_ipv4.ip_addr[0]) && (_FALSE == _rtw_memcmp(&pwrctl->wowlan_war_offload_ipv4.ip_addr[0], pmlmeinfo->ip_addr, 4))) { _rtw_memcpy(pmlmeinfo->ip_addr, &pwrctl->wowlan_war_offload_ipv4.ip_addr[0], 4); - RTW_INFO("Update IP(%d.%d.%d.%d) to arp rsvd page\n", + RTW_INFO("Update IP(%d.%d.%d.%d) to arp rsvd page\n", pmlmeinfo->ip_addr[0], pmlmeinfo->ip_addr[1], pmlmeinfo->ip_addr[2], pmlmeinfo->ip_addr[3]); } @@ -9517,7 +9517,7 @@ void rtw_hal_set_wow_fw_rsvd_page(_adapter *adapter, u8 *pframe, u16 index, if(_TRUE == pwrctl->wowlan_war_offload_mode) { u8 zero_ary[16] = {0x00}; u8 war_tmp_cnt = 0; - + /* Reserve 2 page for Ip parameters */ /* First page | Byte 15 -----------Byte 0 | @@ -9535,100 +9535,100 @@ void rtw_hal_set_wow_fw_rsvd_page(_adapter *adapter, u8 *pframe, u16 index, | IPv6 - 7 | | IPv6 - 8 | */ - + /* location of each feature : Byte 22 ~ Byte 31 * Byte22 : location of SNMP RX * Byte23 : location of SNMP V4 * Byte24 : location of SNMP V6 * Byte25 : location of MDNS Param - * Byte26 : location of MDNS V4 + * Byte26 : location of MDNS V4 * Byte27 : location of MDNS V6 * Byte28 : location of SSDP pattern - * Byte29 : location of WSD pattern + * Byte29 : location of WSD pattern * Byte30 : location of SLP pattern * Byte31 : location of LLMNR */ - + /* ipv4 : 4 */ if (0 == pwrctl->wowlan_war_offload_ipv4.ip_addr[0]) _rtw_memcpy(&pwrctl->wowlan_war_offload_ipv4.ip_addr[0], pmlmeinfo->ip_addr, 4); for(war_tmp_cnt=0; war_tmp_cnt<4 ;war_tmp_cnt++) _rtw_memcpy(pframe + index - tx_desc + (war_tmp_cnt*4), &pwrctl->wowlan_war_offload_ipv4.ip_addr[war_tmp_cnt], 4); - + if (is_zero_mac_addr(pwrctl->wowlan_war_offload_mac)) { _rtw_memcpy(pwrctl->wowlan_war_offload_mac, adapter_mac_addr(adapter), 6); } _rtw_memcpy(pframe + index + 16 - tx_desc, pwrctl->wowlan_war_offload_mac, 6); - - + + /* ipv6 : 8 */ if (_TRUE == _rtw_memcmp(pwrctl->wowlan_war_offload_ipv6.ipv6_addr[0], zero_ary, RTW_IPv6_ADDR_LEN)) _rtw_memcpy(pwrctl->wowlan_war_offload_ipv6.ipv6_addr[0], pmlmeinfo->ip6_addr, RTW_IPv6_ADDR_LEN); - + for(war_tmp_cnt=0; war_tmp_cnt<8 ;war_tmp_cnt++) _rtw_memcpy(pframe + index + page_size - tx_desc + (war_tmp_cnt*16), pwrctl->wowlan_war_offload_ipv6.ipv6_addr[war_tmp_cnt], 16); - + rsvd_page_loc->LocIpParm = *page_num; - + tmp_idx = index; CurtPktPageNum = 2; *page_num += CurtPktPageNum; *total_pkt_len = index + (page_size * CurtPktPageNum); index += (CurtPktPageNum * page_size); - - + + #if defined(CONFIG_OFFLOAD_MDNS_V4) || defined(CONFIG_OFFLOAD_MDNS_V6) - if ( (WAR_MDNS_V4_RSP_EN & pwrctl->wowlan_war_offload_ctrl) || - (WAR_MDNS_V6_RSP_EN & pwrctl->wowlan_war_offload_ctrl) || - (WAR_MDNS_V4_WAKEUP_EN & pwrctl->wowlan_war_offload_ctrl) || + if ( (WAR_MDNS_V4_RSP_EN & pwrctl->wowlan_war_offload_ctrl) || + (WAR_MDNS_V6_RSP_EN & pwrctl->wowlan_war_offload_ctrl) || + (WAR_MDNS_V4_WAKEUP_EN & pwrctl->wowlan_war_offload_ctrl) || (WAR_MDNS_V6_WAKEUP_EN & pwrctl->wowlan_war_offload_ctrl)) { - + struct war_mdns_service_info *psinfo = pwrctl->wowlan_war_offload_mdns_service; - u8 txt_in_ptr[31]={ 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x13, 0x09, 0x74, 0x78, 0x74, 0x76, 0x65, 0x72, 0x73, + u8 txt_in_ptr[31]={ 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x13, 0x09, 0x74, 0x78, 0x74, 0x76, 0x65, 0x72, 0x73, 0x3d, 0x31, 0x08, 0x71, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x3d, 0x31}; u16 mdns_offset = index - tx_desc; u8 i = 0; - + rsvd_page_loc->LocMdnsPara = *page_num; RTW_INFO("LocMdnsPara : %d\n", rsvd_page_loc->LocMdnsPara); - + /* 1. service info */ pframe[mdns_offset] = 0x01; // TLV(T) mdns_offset += 1; _rtw_memcpy(pframe + mdns_offset, &pwrctl->wowlan_war_offload_mdns_service_info_num, 1); mdns_offset += 1; - + for(i=0; iwowlan_war_offload_mdns_service_info_num ;i++) { u16 srv_rsp_len = 0; - + // 1.1 : construct service name string // : length of total service name string (service+transport+domain) pframe[mdns_offset] = psinfo[i].service_len + psinfo[i].transport_len + psinfo[i].domain_len + 4; mdns_offset += 1; - + // : service name pframe[mdns_offset] = psinfo[i].service_len; mdns_offset += 1; _rtw_memcpy(pframe + mdns_offset, &psinfo[i].service, psinfo[i].service_len); mdns_offset += psinfo[i].service_len; - + // : transport name pframe[mdns_offset] = psinfo[i].transport_len; mdns_offset += 1; _rtw_memcpy(pframe + mdns_offset, &psinfo[i].transport, psinfo[i].transport_len); mdns_offset += psinfo[i].transport_len; - + // : domain name pframe[mdns_offset] = psinfo[i].domain_len; mdns_offset += 1; _rtw_memcpy(pframe + mdns_offset, &psinfo[i].domain, psinfo[i].domain_len); mdns_offset += psinfo[i].domain_len; - + // : delimiter mdns_offset += 1; - + // 1.2 : construct type srv rsp pframe[mdns_offset] = psinfo[i].target_len + 19; // length pframe[mdns_offset + 2] = 0x21; // rsp type (srv) @@ -9644,26 +9644,26 @@ void rtw_hal_set_wow_fw_rsvd_page(_adapter *adapter, u8 *pframe, u16 index, _rtw_memcpy(pframe + mdns_offset + 18, &psinfo[i].target, psinfo[i].target_len); // target pframe[mdns_offset + 18 + psinfo[i].target_len] = 0xc0; // message compresion, offset will be filled by fw. mdns_offset += (1 + psinfo[i].target_len + 19); - + // 1.3 : set the idx of txt rsp pframe[mdns_offset] = psinfo[i].txt_rsp_idx; mdns_offset += 1; } - + /* 2. machine name */ pframe[mdns_offset] = 0x02; // TLV(T) mdns_offset += 1; _rtw_memcpy(pframe + mdns_offset, &pwrctl->wowlan_war_offload_mdns_mnane_num, 1); // NUM mdns_offset += 1; - + for(i=0; iwowlan_war_offload_mdns_mnane_num; i++) { pframe[mdns_offset] = pwrctl->wowlan_war_offload_mdns_mnane[i].name_len; - _rtw_memcpy(pframe + mdns_offset + 1, pwrctl->wowlan_war_offload_mdns_mnane[i].name, + _rtw_memcpy(pframe + mdns_offset + 1, pwrctl->wowlan_war_offload_mdns_mnane[i].name, pwrctl->wowlan_war_offload_mdns_mnane[i].name_len); // machine name mdns_offset += (1+pwrctl->wowlan_war_offload_mdns_mnane[i].name_len); } - + /* 3. A rsp */ pframe[mdns_offset] = 0x03; // TLV(T) pframe[mdns_offset + 1] = 14; // TLV(L) @@ -9673,7 +9673,7 @@ void rtw_hal_set_wow_fw_rsvd_page(_adapter *adapter, u8 *pframe, u16 index, pframe[mdns_offset + 11] = 4; // length of ipv4 addr. _rtw_memcpy(pframe + mdns_offset + 12, &pwrctl->wowlan_war_offload_ipv4.ip_addr[0], 4); mdns_offset += (2 + 14); - + /* 4. AAAA rsp */ pframe[mdns_offset] = 0x04; // TLV(T) pframe[mdns_offset + 1] = 26; // TLV(L) @@ -9683,96 +9683,96 @@ void rtw_hal_set_wow_fw_rsvd_page(_adapter *adapter, u8 *pframe, u16 index, pframe[mdns_offset + 11] = 16; // length of ipv6 addr. _rtw_memcpy(pframe + mdns_offset + 12, &pwrctl->wowlan_war_offload_ipv6.ipv6_addr[0], 16); mdns_offset += (2 + 26); - + /* 5. PTR rsp */ pframe[mdns_offset] = 0x05; // TLV(T) pframe[mdns_offset + 1] = 13 + pwrctl->wowlan_war_offload_mdns_domain_name_len; // TLV(L) pframe[mdns_offset + 3] = 0x0c; // rsp type (aaaa) pframe[mdns_offset + 5] = 0x01; // cache flush + class - pframe[mdns_offset + 8] = 0x1c; // ttl + pframe[mdns_offset + 8] = 0x1c; // ttl pframe[mdns_offset + 9] = 0x20; // ttl (7200 sec) - pframe[mdns_offset + 11] = 3 + pwrctl->wowlan_war_offload_mdns_domain_name_len; // data length - pframe[mdns_offset + 12] = pwrctl->wowlan_war_offload_mdns_domain_name_len; // domain name length - _rtw_memcpy(pframe + mdns_offset + 13, &pwrctl->wowlan_war_offload_mdns_domain_name, + pframe[mdns_offset + 11] = 3 + pwrctl->wowlan_war_offload_mdns_domain_name_len; // data length + pframe[mdns_offset + 12] = pwrctl->wowlan_war_offload_mdns_domain_name_len; // domain name length + _rtw_memcpy(pframe + mdns_offset + 13, &pwrctl->wowlan_war_offload_mdns_domain_name, pwrctl->wowlan_war_offload_mdns_domain_name_len); pframe[mdns_offset + 13 + pwrctl->wowlan_war_offload_mdns_domain_name_len] = 0xc0; // message compression mdns_offset += (2 + 13 + pwrctl->wowlan_war_offload_mdns_domain_name_len); - + /* 6. TXT in PTR rsp */ pframe[mdns_offset] = 0x06; // TLV(T) pframe[mdns_offset + 1] = 31; // TLV(L) _rtw_memcpy(pframe + mdns_offset + 2, &txt_in_ptr, 31); mdns_offset += (2 + 31); - + /* 7. TXT rsp */ pframe[mdns_offset] = 0x07; // TLV(T) mdns_offset += 1; _rtw_memcpy(pframe + mdns_offset, &pwrctl->wowlan_war_offload_mdns_txt_rsp_num, 1); // NUM mdns_offset += 1; - + for(i=0; iwowlan_war_offload_mdns_txt_rsp_num; i++) { u16 txt_rsp_len = pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt_len; - + if(pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt_len==0) { _rtw_memcpy(pframe + mdns_offset, &txt_rsp_len, 2); mdns_offset += ( 2 + txt_rsp_len ); continue; } - + txt_rsp_len += 10; _rtw_memcpy(pframe + mdns_offset, &txt_rsp_len, 2); pframe[mdns_offset + 3] = 0x10; // rsp type (txt) pframe[mdns_offset + 5] = 0x01; // cache flush + class - pframe[mdns_offset + 8] = 0x1c; // ttl + pframe[mdns_offset + 8] = 0x1c; // ttl pframe[mdns_offset + 9] = 0x20; // ttl (7200 sec) - pframe[mdns_offset + 10] = (u8) ((pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt_len & 0xff00) >> 8); + pframe[mdns_offset + 10] = (u8) ((pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt_len & 0xff00) >> 8); pframe[mdns_offset + 11] = (u8) (pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt_len & 0x00ff); - _rtw_memcpy(pframe + mdns_offset + 12, &pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt, + _rtw_memcpy(pframe + mdns_offset + 12, &pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt, pwrctl->wowlan_war_offload_mdns_txt_rsp[i].txt_len); mdns_offset += ( 2 + txt_rsp_len ); } - + CurtPktPageNum = (u8)PageNum(mdns_offset - index, page_size)+1; *page_num += CurtPktPageNum; *total_pkt_len = index + (page_size * CurtPktPageNum); index += (CurtPktPageNum * page_size); } #endif /* defined(CONFIG_OFFLOAD_MDNS_V4) || defined(CONFIG_OFFLOAD_MDNS_V6) */ - + #ifdef CONFIG_OFFLOAD_MDNS_V4 if (WAR_MDNS_V4_RSP_EN & pwrctl->wowlan_war_offload_ctrl) { rsvd_page_loc->LocMdnsv4 = *page_num; RTW_INFO("LocMdnsv4: %d\n", rsvd_page_loc->LocMdnsv4); - + rtw_hal_construct_mdns_rsp_v4(adapter, &pframe[index], &buf_len, pmlmeinfo->ip_addr); rtw_hal_fill_fake_txdesc(adapter, &pframe[index - tx_desc], buf_len, _FALSE, _FALSE, _TRUE); CurtPktPageNum = 16; *page_num += CurtPktPageNum; - index += (CurtPktPageNum * page_size); + index += (CurtPktPageNum * page_size); } #endif /* CONFIG_OFFLOAD_MDNS_V4 */ - + #ifdef CONFIG_OFFLOAD_MDNS_V6 if (WAR_MDNS_V6_RSP_EN & pwrctl->wowlan_war_offload_ctrl) { rsvd_page_loc->LocMdnsv6 = *page_num; RTW_INFO("LocMdnsv6: %d\n", rsvd_page_loc->LocMdnsv6); - + rtw_hal_construct_mdns_rsp_v6(adapter, &pframe[index], &buf_len, pmlmeinfo->ip_addr); rtw_hal_fill_fake_txdesc(adapter, &pframe[index - tx_desc], buf_len, _FALSE, _FALSE, _TRUE); CurtPktPageNum = 16; *page_num += CurtPktPageNum; - index += (CurtPktPageNum * page_size); + index += (CurtPktPageNum * page_size); } #endif /* CONFIG_OFFLOAD_MDNS_V6 */ - + #if defined(CONFIG_OFFLOAD_MDNS_V4) || defined(CONFIG_OFFLOAD_MDNS_V6) *(pframe+tmp_idx+25-tx_desc) = rsvd_page_loc->LocMdnsPara; *(pframe+tmp_idx+26-tx_desc) = rsvd_page_loc->LocMdnsv4; *(pframe+tmp_idx+27-tx_desc) = rsvd_page_loc->LocMdnsv6; #endif /* defined(CONFIG_OFFLOAD_MDNS_V4) || defined(CONFIG_OFFLOAD_MDNS_V6) */ - + } //rtw_dump_rsvd_page(RTW_DBGDUMP, adapter, rsvd_page_loc->LocIpParm, 46); #endif /* CONFIG_WAR_OFFLOAD */ @@ -10890,7 +10890,7 @@ static void rtw_hal_wow_enable(_adapter *adapter) RTW_PRINT(FUNC_ADPT_FMT " WOWLAN_ENABLE\n", FUNC_ADPT_ARG(adapter)); rtw_hal_gate_bb(adapter, _TRUE); - + for (i = 0; i < dvobj->iface_nums; i++) { iface = dvobj->padapters[i]; /* Start Usb TxDMA */ @@ -10899,7 +10899,7 @@ static void rtw_hal_wow_enable(_adapter *adapter) RTW_ENABLE_FUNC(iface, DF_TX_BIT); } } - + #ifdef CONFIG_GTK_OL if (psecuritypriv->binstallKCK_KEK == _TRUE) rtw_hal_fw_sync_cam_id(adapter); @@ -10981,7 +10981,7 @@ static void rtw_hal_wow_enable(_adapter *adapter) rtw_hal_set_output_gpio(adapter, pwrctl->wowlan_gpio_index, val8); rtw_hal_switch_gpio_wl_ctrl(adapter, pwrctl->wowlan_gpio_index, _TRUE); RTW_INFO("%s: set GPIO_%d to OUTPUT %s state in wow suspend and %s_ACTIVE.\n", - __func__, pwrctl->wowlan_gpio_index, + __func__, pwrctl->wowlan_gpio_index, pwrctl->wowlan_gpio_output_state ? "HIGH" : "LOW", pwrctl->is_high_active ? "HIGI" : "LOW"); #endif /* CONFIG_WAKEUP_GPIO_INPUT_MODE */ @@ -11097,12 +11097,12 @@ static void rtw_hal_wow_disable(_adapter *adapter) u16 media_status_rpt; RTW_PRINT("%s, WOWLAN_DISABLE\n", __func__); - + if(registry_par->suspend_type == FW_IPS_DISABLE_BBRF && !check_fwstate(pmlmepriv, WIFI_ASOC_STATE)) { RTW_INFO("FW_IPS_DISABLE_BBRF resume\n"); return; } - + if (!pwrctl->wowlan_pno_enable) { psta = rtw_get_stainfo(&adapter->stapriv, get_bssid(pmlmepriv)); if (psta != NULL) @@ -11181,7 +11181,7 @@ static void rtw_hal_wow_disable(_adapter *adapter) rtw_hal_set_output_gpio(adapter, pwrctl->wowlan_gpio_index , pwrctl->wowlan_gpio_output_state); RTW_INFO("%s: set GPIO_%d to OUTPUT %s state in wow resume and %s_ACTIVE.\n", - __func__, pwrctl->wowlan_gpio_index, + __func__, pwrctl->wowlan_gpio_index, pwrctl->wowlan_gpio_output_state ? "HIGH" : "LOW", pwrctl->is_high_active ? "HIGI" : "LOW"); #endif /* CONFIG_WAKEUP_GPIO_INPUT_MODE */ @@ -12081,7 +12081,7 @@ static void _rtw_hal_set_fw_rsvd_page(_adapter *adapter, bool finished, u8 *page /*======== Qos null data * 1 page ======== */ if (pwrctl->wowlan_mode == _FALSE || - pwrctl->wowlan_in_resume == _TRUE) {/*Normal mode*/ + pwrctl->wowlan_in_resume == _TRUE) {/*Normal mode*/ if (MLME_IS_STA(sta_iface) || (nr_assoc_if == 0)) { RsvdPageLoc.LocQosNull = TotalPageNum; RTW_INFO("LocQosNull: %d\n", RsvdPageLoc.LocQosNull); @@ -13023,7 +13023,7 @@ u64 rtw_hal_get_tsftr_by_port(_adapter *adapter, u8 port) case RTL8814A: case RTL8822B: case RTL8821C: - case RTL8822C: + case RTL8822C: { u8 val8; @@ -13117,7 +13117,7 @@ void rtw_hal_update_uapsd_tid(_adapter *adapter) struct mlme_priv *pmlmepriv = &adapter->mlmepriv; struct qos_priv *pqospriv = &pmlmepriv->qospriv; - /* write complement of pqospriv->uapsd_tid to mac register 0x693 because + /* write complement of pqospriv->uapsd_tid to mac register 0x693 because it's designed for "0" represents "enable" and "1" represents "disable" */ rtw_write8(adapter, REG_WMMPS_UAPSD_TID, (u8)(~pqospriv->uapsd_tid)); } @@ -13544,7 +13544,7 @@ u8 SetHwReg(_adapter *adapter, u8 variable, u8 *val) break; #endif/*CONFIG_RTS_FULL_BW*/ #if defined(CONFIG_PCI_HCI) - case HW_VAR_ENSWBCN: + case HW_VAR_ENSWBCN: if (*val == _TRUE) { rtw_write8(adapter, REG_CR + 1, rtw_read8(adapter, REG_CR + 1) | BIT(0)); @@ -13829,7 +13829,7 @@ GetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value) *((u32 *)value) = _get_page_size(adapter); break; case HAL_DEF_TX_STBC: - #ifdef CONFIG_ALPHA_SMART_ANTENNA + #ifdef CONFIG_ALPHA_SMART_ANTENNA *(u8 *)value = 0; #else *(u8 *)value = hal_data->max_tx_cnt > 1 ? 1 : 0; @@ -14569,7 +14569,7 @@ u32 Hal_readPGDataFromConfigFile(PADAPTER padapter) if (maplen < 256 || maplen > EEPROM_MAX_SIZE) { RTW_ERR("eFuse length error :%d\n", maplen); return _FALSE; - } + } #ifdef CONFIG_MP_INCLUDED if (pmp_priv->efuse_update_file == _TRUE && (rtw_mp_mode_check(padapter))) { RTW_INFO("%s, eFuse read from file :%s\n", __func__, pmp_priv->efuse_file_path); @@ -14901,7 +14901,7 @@ void dm_DynamicUsbTxAgg(_adapter *padapter, u8 from_timer) return; #ifdef RTW_HALMAC - if (IS_HARDWARE_TYPE_8822BU(padapter) || IS_HARDWARE_TYPE_8821CU(padapter) + if (IS_HARDWARE_TYPE_8822BU(padapter) || IS_HARDWARE_TYPE_8821CU(padapter) || IS_HARDWARE_TYPE_8822CU(padapter) || IS_HARDWARE_TYPE_8814BU(padapter) || IS_HARDWARE_TYPE_8723FU(padapter)) rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, NULL); @@ -15607,7 +15607,7 @@ void update_IOT_info(_adapter *padapter) } } -#ifdef CONFIG_RTS_FULL_BW +#ifdef CONFIG_RTS_FULL_BW /* 8188E: not support full RTS BW feature(mac REG no define 480[5]) */ @@ -15626,18 +15626,18 @@ void rtw_set_rts_bw(_adapter *padapter) { station = NULL; station = macid_ctl->sta[i]; if(station) { - + _adapter *sta_adapter =station->padapter; struct mlme_ext_priv *pmlmeext = &(sta_adapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - + if ( pmlmeinfo->state != WIFI_FW_NULL_STATE) { if(_rtw_memcmp(macid_ctl->sta[i]->cmn.mac_addr, bc_addr, ETH_ALEN) != _TRUE) { if ( macid_ctl->sta[i]->vendor_8812) { connect_to_8812 = _TRUE; enable = 0; - } - } + } + } } } } @@ -15645,7 +15645,7 @@ void rtw_set_rts_bw(_adapter *padapter) { if(connect_to_8812) break; } - + RTW_INFO("%s connect_to_8812=%d,enable=%u\n", __FUNCTION__,connect_to_8812,enable); rtw_hal_set_hwreg(padapter, HW_VAR_SET_RTS_BW, &enable); } @@ -16106,8 +16106,8 @@ void hw_var_set_opmode_mbid(_adapter *Adapter, u8 mode) rtw_hw_client_port_release(Adapter); #endif #if defined(CONFIG_RTL8192F) - rtw_write16(Adapter, REG_WLAN_ACT_MASK_CTRL_1, rtw_read16(Adapter, - REG_WLAN_ACT_MASK_CTRL_1) | EN_PORT_0_FUNCTION); + rtw_write16(Adapter, REG_WLAN_ACT_MASK_CTRL_1, rtw_read16(Adapter, + REG_WLAN_ACT_MASK_CTRL_1) | EN_PORT_0_FUNCTION); #endif } #endif @@ -16221,7 +16221,7 @@ void rtw_dump_phy_cap_by_hal(void *sel, _adapter *adapter) phy_cap = _FALSE; rtw_hal_get_def_var(adapter, HAL_DEF_RX_LDPC, (u8 *)&phy_cap); RTW_PRINT_SEL(sel, "[HAL] LDPC Rx : %s\n\n", (_TRUE == phy_cap) ? "Supported" : "N/A"); - + #ifdef CONFIG_BEAMFORMING phy_cap = _FALSE; rtw_hal_get_def_var(adapter, HAL_DEF_EXPLICIT_BEAMFORMER, (u8 *)&phy_cap); @@ -16410,7 +16410,7 @@ u8 * rtw_hal_set_8812a_vendor_ie(_adapter *padapter , u8 *pframe ,uint *frlen ) else vendor_info[6] = RT_HT_CAP_USE_JAGUAR_BCUT; pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_,vender_len,vendor_info , frlen); - + return pframe; } #endif /*CONFIG_RTL8812A*/ diff --git a/drivers/net/wireless/realtek/rtl8821cu/hal/phydm/phydm_debug.h b/drivers/net/wireless/realtek/rtl8821cu/hal/phydm/phydm_debug.h index 06e809b57..ab1043191 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/hal/phydm/phydm_debug.h +++ b/drivers/net/wireless/realtek/rtl8821cu/hal/phydm/phydm_debug.h @@ -89,7 +89,7 @@ #define PHYDM_SNPRINTF snprintf #elif (DM_ODM_SUPPORT_TYPE == ODM_CE) #undef pr_debug - #define pr_debug printk + #define pr_debug _RTW_DBG #define RT_PRINTK(fmt, args...) pr_debug(fmt, ## args) #define RT_DISP(dbgtype, dbgflag, printstr) #define RT_TRACE(adapter, comp, drv_level, fmt, args...) \ diff --git a/drivers/net/wireless/realtek/rtl8821cu/include/rtw_mlme.h b/drivers/net/wireless/realtek/rtl8821cu/include/rtw_mlme.h index e3095a562..6d48fbad1 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/include/rtw_mlme.h +++ b/drivers/net/wireless/realtek/rtl8821cu/include/rtw_mlme.h @@ -539,9 +539,9 @@ struct tdls_txmgmt { /* used for mlme_priv.roam_flags */ enum { - RTW_ROAM_ON_EXPIRED = BIT0, - RTW_ROAM_ON_RESUME = BIT1, - RTW_ROAM_ACTIVE = BIT2, + RTW_ROAM_ON_EXPIRED = BIT0, /* roam when AP is expired */ + RTW_ROAM_ON_RESUME = BIT1, /* roam when device is resumed (after being suspended) */ + RTW_ROAM_ACTIVE = BIT2, /* active roam when current rssi (signal strength) is too low */ }; #define UNASOC_STA_SRC_RX_BMC 0 @@ -568,22 +568,22 @@ struct unassoc_sta_info { #endif struct mlme_priv { - _lock lock; sint fw_state; /* shall we protect this variable? maybe not necessarily... */ u8 to_join; /* flag */ u16 join_status; #ifdef CONFIG_LAYER2_ROAMING - u8 to_roam; /* roaming trying times */ + u8 to_roam; /* internal counter for #roaming scans */ struct wlan_network *roam_network; /* the target of active roam */ - u8 roam_flags; - u8 roam_rssi_diff_th; /* rssi difference threshold for active scan candidate selection */ - u32 roam_scan_int; /* scan interval for active roam (Unit:2 second)*/ - u32 roam_scanr_exp_ms; /* scan result expire time in ms for roam */ + u8 roam_flags; /* defines roam types - check enum above */ + u8 roam_rssi_diff_th; /* during network scan/survey: the rssi difference between the current network and + * the candidate network must be above this threshold to withhold the candidate */ + u32 roam_scan_int; /* minimum interval (unit: 2 seconds) between roaming scans */ + u32 roam_scanr_exp_ms; /* expire time in ms: only withhold candidate if last seen within expire time */ u8 roam_tgt_addr[ETH_ALEN]; /* request to roam to speicific target without other consideration */ - u8 roam_rssi_threshold; - systime last_roaming; - bool need_to_roam; + u8 roam_rssi_threshold; /* rssi (signal strength) must be below this threshold to start a roaming scan */ + systime last_roaming; /* time of start of last roaming scan */ + bool need_to_roam; /* flag to check if roaming is (still) necessary */ #endif u32 defs_lmt_sta; diff --git a/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/ioctl_cfg80211.c index 40cdc58ae..20aa25b54 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/ioctl_cfg80211.c +++ b/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/ioctl_cfg80211.c @@ -465,7 +465,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false, 0); +#else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false); +#endif #else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, false); #endif @@ -480,7 +484,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, goto exit; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0, 0); +#else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0); +#endif #else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); #endif diff --git a/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/os_intfs.c b/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/os_intfs.c index 1df74ceea..bb4e15dd2 100644 --- a/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/os_intfs.c +++ b/drivers/net/wireless/realtek/rtl8821cu/os_dep/linux/os_intfs.c @@ -250,7 +250,7 @@ int rtw_bw_mode = CONFIG_RTW_CUSTOMIZE_BWMODE; int rtw_bw_mode = 0x21; #endif int rtw_ampdu_enable = 1;/* for enable tx_ampdu , */ /* 0: disable, 0x1:enable */ -int rtw_rx_stbc = 1;/* 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ */ +int rtw_rx_stbc = 3;/* 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ */ #if (defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8814B) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8822C)) && defined(CONFIG_PCI_HCI) int rtw_rx_ampdu_amsdu = 2;/* 0: disabled, 1:enabled, 2:auto . There is an IOT issu with DLINK DIR-629 when the flag turn on */ #elif ((defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8822C)) && defined(CONFIG_SDIO_HCI)) diff --git a/drivers/net/wireless/realtek/rtl88x2bu/hal/phydm/phydm_debug.h b/drivers/net/wireless/realtek/rtl88x2bu/hal/phydm/phydm_debug.h index 06e809b57..ab1043191 100644 --- a/drivers/net/wireless/realtek/rtl88x2bu/hal/phydm/phydm_debug.h +++ b/drivers/net/wireless/realtek/rtl88x2bu/hal/phydm/phydm_debug.h @@ -89,7 +89,7 @@ #define PHYDM_SNPRINTF snprintf #elif (DM_ODM_SUPPORT_TYPE == ODM_CE) #undef pr_debug - #define pr_debug printk + #define pr_debug _RTW_DBG #define RT_PRINTK(fmt, args...) pr_debug(fmt, ## args) #define RT_DISP(dbgtype, dbgflag, printstr) #define RT_TRACE(adapter, comp, drv_level, fmt, args...) \ diff --git a/drivers/net/wireless/realtek/rtl88x2bu/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/realtek/rtl88x2bu/os_dep/linux/ioctl_cfg80211.c index f1f67ba5e..0b9a78cca 100644 --- a/drivers/net/wireless/realtek/rtl88x2bu/os_dep/linux/ioctl_cfg80211.c +++ b/drivers/net/wireless/realtek/rtl88x2bu/os_dep/linux/ioctl_cfg80211.c @@ -465,7 +465,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false, 0); +#else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false); +#endif #else cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, false); #endif @@ -480,7 +484,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, goto exit; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0, 0); +#else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0); +#endif #else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); #endif