Update to 5.13.1 from upstream

This commit is contained in:
Rin Cat (鈴猫)
2021-12-04 07:42:09 -05:00
parent aab1daf818
commit c0e109d401
352 changed files with 50307 additions and 18938 deletions

View File

@@ -120,18 +120,14 @@ void rtl8822b_query_rx_desc(union recv_frame *, u8 *pdesc);
/* rtl8822b_cmd.c */
s32 rtl8822b_fillh2ccmd(PADAPTER, u8 id, u32 buf_len, u8 *pbuf);
void rtl8822b_set_FwPwrMode_cmd(PADAPTER, u8 psmode);
void _rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode, u8 rfon_ctrl);
void rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode);
void rtl8822b_set_FwPwrMode_rfon_ctrl_cmd(PADAPTER adapter, u8 rfon_ctrl);
#ifdef CONFIG_USB_CONFIG_OFFLOAD_8822B
void rtl8822b_set_usb_config_offload(PADAPTER adapter);
#endif
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_CH_SW
void rtl8822b_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
#endif
#endif
void rtl8822b_set_FwPwrModeInIPS_cmd(PADAPTER adapter, u8 cmd_param);
#ifdef CONFIG_WOWLAN
void rtl8822b_set_fw_pwrmode_inips_cmd_wowlan(PADAPTER padapter, u8 ps_mode);

View File

@@ -98,7 +98,7 @@ void rtl8822b_req_txrpt_cmd(PADAPTER adapter, u8 macid)
#define SET_PWR_MODE_SET_ADOPT_BCN_RECEIVING_TIME(h2c_pkt, value) \
SET_BITS_TO_LE_4BYTE(h2c_pkt + 0X04, 31, 1, value)
void rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode)
void _rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode, u8 rfon_ctrl)
{
int i;
u8 smart_ps = 0, mode = 0;
@@ -120,12 +120,14 @@ void rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode)
#endif /* CONFIG_P2P */
u8 hw_port = rtw_hal_get_port(adapter);
if (pwrpriv->dtim > 0)
RTW_INFO(FUNC_ADPT_FMT ": dtim=%d, HW port id=%d\n", FUNC_ADPT_ARG(adapter),
pwrpriv->dtim, psmode == PS_MODE_ACTIVE ? pwrpriv->current_lps_hw_port_id : hw_port);
else
RTW_INFO(FUNC_ADPT_FMT ": HW port id=%d\n", FUNC_ADPT_ARG(adapter),
psmode == PS_MODE_ACTIVE ? pwrpriv->current_lps_hw_port_id : hw_port);
if (pwrpriv->pwr_mode != psmode) {
if (pwrpriv->dtim > 0)
RTW_INFO(FUNC_ADPT_FMT ": dtim=%d, HW port id=%d\n", FUNC_ADPT_ARG(adapter),
pwrpriv->dtim, psmode == PS_MODE_ACTIVE ? pwrpriv->current_lps_hw_port_id : hw_port);
else
RTW_INFO(FUNC_ADPT_FMT ": HW port id=%d\n", FUNC_ADPT_ARG(adapter),
psmode == PS_MODE_ACTIVE ? pwrpriv->current_lps_hw_port_id : hw_port);
}
if (psmode == PS_MODE_MIN || psmode == PS_MODE_MAX) {
#ifdef CONFIG_WMMPS_STA
@@ -194,19 +196,28 @@ void rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode)
PowerState = rtw_btcoex_RpwmVal(adapter);
else
#endif /* CONFIG_BT_COEXIST */
PowerState = 0x00; /* AllON(0x0C), RFON(0x04), RFOFF(0x00) */
{
if (rfon_ctrl == rf_on)
PowerState = 0x04; /* AllON(0x0C), RFON(0x04), RFOFF(0x00) */
else
PowerState = 0x00; /* AllON(0x0C), RFON(0x04), RFOFF(0x00) */
}
} else
PowerState = 0x0C; /* AllON(0x0C), RFON(0x04), RFOFF(0x00) */
if (mode == 0)
fw_psmode_str = "ACTIVE";
else if (mode == 1)
fw_psmode_str = "LPS";
else if (mode == 2)
fw_psmode_str = "WMMPS";
if (pwrpriv->pwr_mode != psmode) {
if (mode == 0)
fw_psmode_str = "ACTIVE";
else if (mode == 1)
fw_psmode_str = "LPS";
else if (mode == 2)
fw_psmode_str = "WMMPS";
RTW_INFO(FUNC_ADPT_FMT": fw ps mode = %s, drv ps mode = %d, rlbm = %d , smart_ps = %d, allQueueUAPSD = %d\n",
FUNC_ADPT_ARG(adapter), fw_psmode_str, psmode, rlbm, smart_ps, allQueueUAPSD);
RTW_INFO(FUNC_ADPT_FMT": fw ps mode = %s, drv ps mode = %d, rlbm = %d ,"
"smart_ps = %d, allQueueUAPSD = %d, PowerState = %d\n",
FUNC_ADPT_ARG(adapter), fw_psmode_str, psmode, rlbm, smart_ps,
allQueueUAPSD, PowerState);
}
SET_PWR_MODE_SET_CMD_ID(h2c, CMD_ID_SET_PWR_MODE);
SET_PWR_MODE_SET_CLASS(h2c, CLASS_SET_PWR_MODE);
@@ -245,23 +256,17 @@ void rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode)
rtw_halmac_send_h2c(adapter_to_dvobj(adapter), h2c);
}
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_CH_SW
void rtl8822b_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable)
void rtl8822b_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode)
{
u8 u1H2CSetPwrMode[RTW_HALMAC_H2C_MAX_SIZE] = {0};
SET_PWR_MODE_SET_CMD_ID(u1H2CSetPwrMode, CMD_ID_SET_PWR_MODE);
SET_PWR_MODE_SET_CLASS(u1H2CSetPwrMode, CLASS_SET_PWR_MODE);
SET_PWR_MODE_SET_MODE(u1H2CSetPwrMode, 1);
SET_PWR_MODE_SET_RLBM(u1H2CSetPwrMode, 1);
SET_PWR_MODE_SET_BCN_EARLY_RPT(u1H2CSetPwrMode, enable);
SET_PWR_MODE_SET_PWR_STATE(u1H2CSetPwrMode, 0x0C);
rtw_halmac_send_h2c(adapter_to_dvobj(padapter), u1H2CSetPwrMode);
return _rtl8822b_set_FwPwrMode_cmd(adapter, psmode, rf_off);
}
void rtl8822b_set_FwPwrMode_rfon_ctrl_cmd(PADAPTER adapter, u8 rfon_ctrl)
{
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(adapter);
return _rtl8822b_set_FwPwrMode_cmd(adapter, pwrpriv->power_mgnt, rfon_ctrl);
}
#endif
#endif
void rtl8822b_set_FwPwrModeInIPS_cmd(PADAPTER adapter, u8 cmd_param)
{
@@ -287,14 +292,19 @@ void rtl8822b_set_fw_pwrmode_inips_cmd_wowlan(PADAPTER padapter, u8 ps_mode)
struct registry_priv *registry_par = &padapter->registrypriv;
u8 param[H2C_INACTIVE_PS_LEN] = {0};
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
RTW_INFO("%s, ps_mode: %d\n", __func__, ps_mode);
if (ps_mode == PS_MODE_ACTIVE) {
SET_H2CCMD_INACTIVE_PS_EN(param, 0);
#ifdef CONFIG_FW_MULTI_PORT_SUPPORT
SET_H2CCMD_INACTIVE_PORT_NUM(param, pwrpriv->current_lps_hw_port_id);
RTW_DBG("pwrpriv->current_lps_hw_port_id = %d\n", pwrpriv->current_lps_hw_port_id);
#endif /* CONFIG_FW_MULTI_PORT_SUPPORT*/
}
else {
SET_H2CCMD_INACTIVE_PS_EN(param, 1);
if(registry_par->suspend_type == FW_IPS_DISABLE_BBRF && !check_fwstate(pmlmepriv, _FW_LINKED))
if(registry_par->suspend_type == FW_IPS_DISABLE_BBRF && !check_fwstate(pmlmepriv, WIFI_ASOC_STATE))
SET_H2CCMD_INACTIVE_DISBBRF(param, 1);
if(registry_par->suspend_type == FW_IPS_WRC) {
SET_H2CCMD_INACTIVE_PERIOD_SCAN_EN(param, 1);
@@ -302,6 +312,11 @@ void rtl8822b_set_fw_pwrmode_inips_cmd_wowlan(PADAPTER padapter, u8 ps_mode)
SET_H2CCMD_INACTIVE_PS_DURATION(param, 1);
SET_H2CCMD_INACTIVE_PS_PERIOD_SCAN_TIME(param, 3);
}
#ifdef CONFIG_FW_MULTI_PORT_SUPPORT
pwrpriv->current_lps_hw_port_id = get_hw_port(padapter);
SET_H2CCMD_INACTIVE_PORT_NUM(param, pwrpriv->current_lps_hw_port_id);
RTW_DBG("pwrpriv->current_lps_hw_port_id = %d\n", pwrpriv->current_lps_hw_port_id);
#endif /* CONFIG_FW_MULTI_PORT_SUPPORT*/
}
rtl8822b_fillh2ccmd(padapter, H2C_INACTIVE_PS_, sizeof(param), param);

View File

@@ -31,12 +31,14 @@ void rtl8822b_init_hal_spec(PADAPTER adapter)
hal_spec->ic_name = "rtl8822b";
hal_spec->macid_num = 128;
/* hal_spec->sec_cam_ent_num follow halmac setting */
hal_spec->sec_cap = SEC_CAP_CHK_BMC;
hal_spec->sec_cap = SEC_CAP_CHK_BMC | SEC_CAP_CHK_EXTRA_SEC;
hal_spec->wow_cap = WOW_CAP_TKIP_OL;
hal_spec->macid_cap = MACID_DROP;
hal_spec->rfpath_num_2g = 2;
hal_spec->rfpath_num_5g = 2;
hal_spec->rf_reg_path_num = 2;
hal_spec->rf_reg_path_num = hal_spec->rf_reg_path_avail_num = 2;
hal_spec->rf_reg_trx_path_bmp = 0x33;
hal_spec->max_tx_cnt = 2;
hal_spec->tx_nss_num = 2;
@@ -55,9 +57,7 @@ void rtl8822b_init_hal_spec(PADAPTER adapter)
| WL_FUNC_TDLS
;
#if CONFIG_TX_AC_LIFETIME
hal_spec->tx_aclt_unit_factor = 8;
#endif
hal_spec->rx_tsf_filter = 1;
@@ -71,6 +71,7 @@ void rtl8822b_init_hal_spec(PADAPTER adapter)
, REG_MACID_SLEEP1_8822B
, REG_MACID_SLEEP2_8822B
, REG_MACID_SLEEP3_8822B);
rtw_macid_ctl_init_drop_reg(adapter_to_macidctl(adapter)
, REG_MACID_DROP0_8822B
, REG_MACID_DROP1_8822B

View File

@@ -869,14 +869,11 @@ static void xmit_status_check(PADAPTER p)
else {
diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
if (diff_time > 4000) {
u32 ability = 0;
ability = rtw_phydm_ability_get(p);
RTW_INFO("%s tx hang %s\n", __FUNCTION__,
(ability & ODM_BB_ADAPTIVITY) ? "ODM_BB_ADAPTIVITY" : "");
(rtw_odm_adaptivity_needed(p)) ? "ODM_BB_ADAPTIVITY" : "");
if (!(ability & ODM_BB_ADAPTIVITY)) {
if (!rtw_odm_adaptivity_needed(p)) {
psrtpriv->self_dect_tx_cnt++;
psrtpriv->self_dect_case = 1;
rtw_hal_sreset_reset(p);
@@ -965,29 +962,47 @@ static void linked_status_check(PADAPTER p)
static void set_opmode_monitor(PADAPTER adapter)
{
u32 rcr_bits;
u16 value_rxfltmap2;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
#ifdef CONFIG_WIFI_MONITOR
u8 tmp_8bit;
u32 tmp_32bit;
struct net_device *ndev = adapter->pnetdev;
struct mon_reg_backup *mon = &GET_HAL_DATA(adapter)->mon_backup;
mon->known_rcr = 1;
rtw_hal_get_hwreg(adapter, HW_VAR_RCR, (u8 *)& mon->rcr);
/* Receive all type */
rcr_bits = BIT_AAP_8822B | BIT_APM_8822B | BIT_AM_8822B
| BIT_AB_8822B | BIT_APWRMGT_8822B
| BIT_APP_PHYSTS_8822B;
tmp_32bit = BIT_AAP_8822B | BIT_APP_PHYSTS_8822B;
#ifndef CONFIG_CUSTOMER_ALIBABA_GENERAL
/* Append FCS */
rcr_bits |= BIT_APP_FCS_8822B;
#endif
if (ndev->type == ARPHRD_IEEE80211_RADIOTAP) {
/* Append FCS */
tmp_32bit |= BIT_APP_FCS_8822B;
}
rtw_hal_get_hwreg(adapter, HW_VAR_RCR, (u8 *)&GET_HAL_DATA(adapter)->rcr_backup);
rtw_hal_set_hwreg(adapter, HW_VAR_RCR, (u8 *)&rcr_bits);
rtw_hal_set_hwreg(adapter, HW_VAR_RCR, (u8 *)& tmp_32bit);
if (1)
rtw_halmac_config_rx_info(adapter_to_dvobj(adapter),
HALMAC_DRV_INFO_PHY_SNIFFER);
else
rtw_halmac_config_rx_info(adapter_to_dvobj(adapter),
HALMAC_DRV_INFO_PHY_PLCP);
tmp_8bit = rtw_read8(adapter, REG_RX_DRVINFO_SZ_8822B);
rtw_write8(adapter, REG_RX_DRVINFO_SZ_8822B, (tmp_8bit | 0x80));
/* Receive all data frames */
value_rxfltmap2 = 0xFFFF;
rtw_write16(adapter, REG_RXFLTMAP2_8822B, value_rxfltmap2);
mon->known_rxfilter = 1;
mon->rxfilter0 = rtw_read16(adapter, REG_RXFLTMAP0_8822B);
mon->rxfilter1 = rtw_read16(adapter, REG_RXFLTMAP1_8822B);
mon->rxfilter2 = rtw_read16(adapter, REG_RXFLTMAP2_8822B);
rtw_write16(adapter, REG_RXFLTMAP0_8822B, 0xFFFF);
rtw_write16(adapter, REG_RXFLTMAP1_8822B, 0xFFFF);
rtw_write16(adapter, REG_RXFLTMAP2_8822B, 0xFFFF);
#endif /* CONFIG_WIFI_MONITOR */
}
#ifndef CONFIG_MI_WITH_MBSSID_CAM
static void set_opmode_port0(PADAPTER adapter, u8 mode)
{
u8 is_tx_bcn;
@@ -1069,7 +1084,7 @@ static void set_opmode_port0(PADAPTER adapter, u8 mode)
/* Enable HW seq for BCN
0x4FC[0]: EN_HWSEQ
= 0x4FC[1]: EN_HWSEQEXT
0x4FC[1]: EN_HWSEQEXT
According TX desc
*/
rtw_write8(adapter, REG_DUMMY_PAGE4_V1_8822B, 0x01);
@@ -1103,7 +1118,6 @@ static void set_opmode_port0(PADAPTER adapter, u8 mode)
break;
}
}
static void set_opmode_port1(PADAPTER adapter, u8 mode)
{
#ifdef CONFIG_CONCURRENT_MODE
@@ -1151,6 +1165,7 @@ static void set_opmode_port1(PADAPTER adapter, u8 mode)
}
#endif /* CONFIG_CONCURRENT_MODE */
}
#endif /* !CONFIG_MI_WITH_MBSSID_CAM */
void hw_tsf_reset(_adapter *adapter)
{
u8 hw_port = rtw_hal_get_port(adapter);
@@ -1252,14 +1267,32 @@ void rtw_hw_client_port_clr(_adapter *adapter)
static void hw_var_set_opmode(PADAPTER adapter, u8 mode)
{
u8 val8;
static u8 isMonitor = _FALSE;
if (isMonitor == _TRUE) {
/* reset RCR from backup */
rtw_hal_set_hwreg(adapter, HW_VAR_RCR, (u8 *)&GET_HAL_DATA(adapter)->rcr_backup);
rtw_hal_rcr_set_chk_bssid(adapter, MLME_ACTION_NONE);
#ifdef CONFIG_WIFI_MONITOR
struct mon_reg_backup *backup = &GET_HAL_DATA(adapter)->mon_backup;
if (backup->known_rcr) {
backup->known_rcr = 0;
rtw_hal_set_hwreg(adapter, HW_VAR_RCR, (u8 *)&backup->rcr);
if (!!(backup->rcr &= BIT_APP_PHYSTS_8822B))
rtw_halmac_config_rx_info(adapter_to_dvobj(adapter),
HALMAC_DRV_INFO_PHY_STATUS);
else
rtw_halmac_config_rx_info(adapter_to_dvobj(adapter),
HALMAC_DRV_INFO_NONE);
rtw_hal_rcr_set_chk_bssid(adapter, MLME_ACTION_NONE);
}
if (backup->known_rxfilter) {
backup->known_rxfilter = 0;
rtw_write16(adapter, REG_RXFLTMAP0_8822B, backup->rxfilter0);
rtw_write16(adapter, REG_RXFLTMAP1_8822B, backup->rxfilter1);
rtw_write16(adapter, REG_RXFLTMAP2_8822B, backup->rxfilter2);
}
#endif /* CONFIG_WIFI_MONITOR */
isMonitor = _FALSE;
}
@@ -1472,16 +1505,18 @@ static void hw_var_set_mlme_sitesurvey(PADAPTER adapter, u8 enable)
* 2. config RCR not to receive different BSSID BCN or probe rsp
*/
if (rtw_mi_check_fwstate(adapter, _FW_LINKED | WIFI_AP_STATE | WIFI_MESH_STATE))
if (rtw_mi_check_fwstate(adapter, WIFI_ASOC_STATE | WIFI_AP_STATE | WIFI_MESH_STATE))
/* enable to rx data frame */
rtw_write16(adapter, REG_RXFLTMAP2_8822B, 0xFFFF);
rtw_hal_rcr_set_chk_bssid(adapter, MLME_SCAN_DONE);
#ifdef CONFIG_AP_MODE
if (rtw_mi_get_ap_num(adapter) || rtw_mi_get_mesh_num(adapter)) {
ResumeTxBeacon(adapter);
rtw_mi_tx_beacon_hdl(adapter);
}
#endif
}
}
@@ -1628,6 +1663,23 @@ static void hw_var_set_acm_ctrl(PADAPTER adapter, u8 ctrl)
rtw_write8(adapter, REG_ACMHWCTRL_8822B, hwctrl);
}
void hw_var_lps_rfon_chk(_adapter *adapter, u8 rfon_ctrl)
{
#ifdef CONFIG_LPS_ACK
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(adapter);
if (rfon_ctrl == rf_on) {
if (rtw_sctx_wait(&pwrpriv->lps_ack_sctx, __func__)) {
if (pwrpriv->lps_ack_status > 0)
RTW_INFO(FUNC_ADPT_FMT" RF_ON function is not ready !!!\n", FUNC_ADPT_ARG(adapter));
} else {
RTW_WARN("LPS RFON sctx query timeout, operation abort!!\n");
}
pwrpriv->lps_ack_status = -1;
}
#endif
}
static void hw_var_set_sec_dk_cfg(PADAPTER adapter, u8 enable)
{
struct security_priv *sec = &adapter->securitypriv;
@@ -1791,6 +1843,53 @@ static void hw_var_set_h2c_fw_joinbssrpt(PADAPTER adapter, u8 mstatus)
hw_var_set_dl_rsvd_page(adapter, RT_MEDIA_CONNECT);
}
#ifdef CONFIG_WOWLAN
static void hw_var_vendor_wow_mode(_adapter *adapter, u8 en)
{
#ifdef CONFIG_CONCURRENT_MODE
_adapter *iface = NULL;
struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
u8 igi = 0, mac_addr[ETH_ALEN];
RTW_INFO("%s: en(%d)--->\n", __func__, en);
if (en) {
rtw_hal_get_hwreg(adapter, HW_VAR_MAC_ADDR, mac_addr);
/* RTW_INFO("suspend mac addr: "MAC_FMT"\n", MAC_ARG(mac_addr)); */
rtw_halmac_set_bssid(dvobj, HW_PORT4, mac_addr);
dvobj->rxfltmap2_bf_suspend = rtw_read16(adapter, REG_RXFLTMAP2);
dvobj->bcn_ctrl_clint3_bf_suspend = rtw_read8(adapter, REG_BCN_CTRL_CLINT3);
dvobj->rcr_bf_suspend = rtw_read32(adapter, REG_RCR);
dvobj->cr_ext_bf_suspend = rtw_read32(adapter, REG_CR_EXT);
/*RTW_INFO("RCR: 0x%02x, REG_CR_EXT: 0x%02x , REG_BCN_CTRL_CLINT3: 0x%02x, REG_RXFLTMAP2:0x%02x, REG_MACID_DROP0_8822B:0x%02x\n"
, rtw_read32(adapter, REG_RCR), rtw_read8(adapter, REG_CR_EXT), rtw_read8(adapter, REG_BCN_CTRL_CLINT3)
, rtw_read32(adapter, REG_RXFLTMAP2), rtw_read8(adapter, REG_MACID_DROP0_8822B)); */
rtw_write32(adapter, REG_RCR, (rtw_read32(adapter, REG_RCR) & (~(RCR_AM))) | RCR_CBSSID_DATA | RCR_CBSSID_BCN);
/* set PORT4 to ad hoc mode to filter not necessary Beacons */
rtw_write8(adapter, REG_CR_EXT, (rtw_read8(adapter, REG_CR_EXT)& (~BIT5)) | BIT4);
rtw_write8(adapter, REG_BCN_CTRL_CLINT3, rtw_read8(adapter, REG_BCN_CTRL_CLINT3) | BIT3);
rtw_write16(adapter, REG_RXFLTMAP2, 0xffff);
/* RTW_INFO("RCR: 0x%02x, REG_CR_EXT: 0x%02x , REG_BCN_CTRL_CLINT3: 0x%02x, REG_RXFLTMAP2:0x%02x, REG_MACID_DROP0_8822B:0x%02x\n"
, rtw_read32(adapter, REG_RCR), rtw_read8(adapter, REG_CR_EXT), rtw_read8(adapter, REG_BCN_CTRL_CLINT3)
, rtw_read32(adapter, REG_RXFLTMAP2), rtw_read8(adapter, REG_MACID_DROP0_8822B)); */
/* The WRC's RSSI is weak. Set the IGI to lower */
odm_write_dig(adapter_to_phydm(adapter), 0x24);
} else {
/* restore the rcr, port ctrol setting */
rtw_write32(adapter, REG_CR_EXT, dvobj->cr_ext_bf_suspend);
rtw_write32(adapter, REG_RCR, dvobj->rcr_bf_suspend);
rtw_write8(adapter, REG_BCN_CTRL_CLINT3, dvobj->bcn_ctrl_clint3_bf_suspend);
rtw_write16(adapter, REG_RXFLTMAP2, dvobj->rxfltmap2_bf_suspend);
/* RTW_INFO("RCR: 0x%02x, REG_CR_EXT: 0x%02x , REG_BCN_CTRL_CLINT3: 0x%02x, REG_RXFLTMAP2:0x%02x, REG_MACID_DROP0_8822B:0x%02x\n"
, rtw_read32(adapter, REG_RCR), rtw_read8(adapter, REG_CR_EXT), rtw_read8(adapter, REG_BCN_CTRL_CLINT3)
, rtw_read32(adapter, REG_RXFLTMAP2), rtw_read8(adapter, REG_MACID_DROP0_8822B)); */
}
#endif /* CONFIG_CONCURRENT_MODE */
}
#endif /* CONFIG_WOWLAN */
/*
* Parameters:
* adapter
@@ -2070,6 +2169,14 @@ u8 rtl8822b_sethwreg(PADAPTER adapter, u8 variable, u8 *val)
case HW_VAR_H2C_FW_PWRMODE:
rtl8822b_set_FwPwrMode_cmd(adapter, *val);
break;
case HW_VAR_H2C_FW_PWRMODE_RFON_CTRL:
rtl8822b_set_FwPwrMode_rfon_ctrl_cmd(adapter, *val);
break;
case HW_VAR_LPS_RFON_CHK :
hw_var_lps_rfon_chk(adapter, *val);
break;
/*
case HW_VAR_H2C_PS_TUNE_PARAM:
break;
@@ -2082,6 +2189,11 @@ u8 rtl8822b_sethwreg(PADAPTER adapter, u8 variable, u8 *val)
case HW_VAR_H2C_FW_JOINBSSRPT:
hw_var_set_h2c_fw_joinbssrpt(adapter, *val);
break;
#ifdef CONFIG_WOWLAN
case HW_VAR_VENDOR_WOW_MODE:
hw_var_vendor_wow_mode(adapter, *(u8 *)val);
break;
#endif /* CONFIG_WOWLAN */
case HW_VAR_DL_RSVD_PAGE:
#ifdef CONFIG_BT_COEXIST
if (check_fwstate(&adapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
@@ -2218,11 +2330,12 @@ u8 rtl8822b_sethwreg(PADAPTER adapter, u8 variable, u8 *val)
*/
#ifdef CONFIG_GPIO_WAKEUP
case HW_SET_GPIO_WL_CTRL: {
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(adapter);
u8 enable = *val;
u8 value = 0;
u8 addr = REG_PAD_CTRL1_8822B + 3;
if (WAKEUP_GPIO_IDX == 6) {
if (pwrpriv->wowlan_gpio_index == 6) {
value = rtw_read8(adapter, addr);
if (enable == _TRUE && (value & BIT(1)))
@@ -2322,13 +2435,6 @@ u8 rtl8822b_sethwreg(PADAPTER adapter, u8 variable, u8 *val)
case HW_VAR_CH_SW_IQK_INFO_RESTORE:
break;
*/
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_CH_SW
case HW_VAR_TDLS_BCN_EARLY_C2H_RPT:
rtl8822b_set_BcnEarly_C2H_Rpt_cmd(adapter, *val);
break;
#endif
#endif
case HW_VAR_FREECNT:
@@ -2377,6 +2483,7 @@ u8 rtl8822b_sethwreg(PADAPTER adapter, u8 variable, u8 *val)
return ret;
}
#ifdef CONFIG_PROC_DEBUG
struct qinfo {
u32 head:11;
u32 tail:11;
@@ -2478,6 +2585,7 @@ static void dump_mac_txfifo(void *sel, _adapter *adapter)
RTW_PRINT_SEL(sel, "HPQ: %d, LPQ: %d, NPQ: %d, EPQ: %d, PUBQ: %d\n"
, hpq, lpq, npq, epq, pubq);
}
#endif
static u8 hw_var_get_bcn_valid(PADAPTER adapter)
{
@@ -2569,8 +2677,11 @@ void rtl8822b_gethwreg(PADAPTER adapter, u8 variable, u8 *val)
case HW_VAR_BCN_VALID:
*val = hw_var_get_bcn_valid(adapter);
break;
/*
case HW_VAR_FREECNT:
/* free run counter 0x577[3]=1 means running */
*val = rtw_read8(adapter, REG_MISC_CTRL)&BIT_EN_FREECNT;
break;
/*
case HW_VAR_CAM_INVALID_ALL:
*/
case HW_VAR_AC_PARAM_VO:
@@ -2723,6 +2834,7 @@ void rtl8822b_gethwreg(PADAPTER adapter, u8 variable, u8 *val)
*((u16 *)val) = rtw_read8(adapter, REG_SYS_CFG5);
break;
#ifdef CONFIG_PROC_DEBUG
case HW_VAR_DUMP_MAC_QUEUE_INFO:
dump_mac_qinfo(val, adapter);
break;
@@ -2730,6 +2842,7 @@ void rtl8822b_gethwreg(PADAPTER adapter, u8 variable, u8 *val)
case HW_VAR_DUMP_MAC_TXFIFO:
dump_mac_txfifo(val, adapter);
break;
#endif
/*
case HW_VAR_ASIX_IOT:
case HW_VAR_EN_HW_UPDATE_TSF:
@@ -2738,7 +2851,7 @@ void rtl8822b_gethwreg(PADAPTER adapter, u8 variable, u8 *val)
case HW_VAR_CH_SW_IQK_INFO_RESTORE:
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_CH_SW
case HW_VAR_TDLS_BCN_EARLY_C2H_RPT:
case HW_VAR_BCN_EARLY_C2H_RPT:
#endif
#endif
break;
@@ -2968,6 +3081,11 @@ void rtl8822b_fill_txdesc_sectype(struct pkt_attrib *pattrib, u8 *ptxdesc)
case _AES_:
SET_TX_DESC_SEC_TYPE_8822B(ptxdesc, 0x3);
break;
case _CCMP_256_:
case _GCMP_:
case _GCMP_256_:
SET_TX_DESC_SEC_TYPE_8822B(ptxdesc, 0x2);
break;
case _NO_PRIVACY_:
default:
SET_TX_DESC_SEC_TYPE_8822B(ptxdesc, 0x0);
@@ -3134,7 +3252,6 @@ static void rtl8822b_fill_txdesc_tx_rate(struct _ADAPTER *adapter,
}
}
#ifdef CONFIG_CONCURRENT_MODE
void rtl8822b_fill_txdesc_force_bmc_camid(struct pkt_attrib *pattrib, u8 *ptxdesc)
{
if ((pattrib->encrypt > 0) && (!pattrib->bswenc)
@@ -3143,7 +3260,6 @@ void rtl8822b_fill_txdesc_force_bmc_camid(struct pkt_attrib *pattrib, u8 *ptxdes
SET_TX_DESC_MACID_8822B(ptxdesc, pattrib->bmc_camid);
}
}
#endif
void rtl8822b_fill_txdesc_bmc_tx_rate(struct pkt_attrib *pattrib, u8 *ptxdesc)
{
@@ -3162,14 +3278,17 @@ void rtl8822b_fill_txdesc_bf(struct xmit_frame *frame, u8 *desc)
return;
#else /* CONFIG_BEAMFORMING */
struct pkt_attrib *attrib;
struct _ADAPTER *padapter = frame->padapter;
struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
u8 init_rate;
attrib = &frame->attrib;
init_rate = pHalData->INIDATA_RATE[attrib->mac_id] & 0x7F;
SET_TX_DESC_G_ID_8822B(desc, attrib->txbf_g_id);
SET_TX_DESC_P_AID_8822B(desc, attrib->txbf_p_aid);
SET_TX_DESC_MU_DATARATE_8822B(desc, MRateToHwRate(attrib->rate));
SET_TX_DESC_MU_DATARATE_8822B(desc, init_rate);
/*SET_TX_DESC_MU_RC_8822B(desc, 0);*/
/* Force to disable STBC when txbf is enabled */
@@ -3348,10 +3467,8 @@ static void fill_default_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf)
rtl8822b_fill_txdesc_sectype(pattrib, pbuf);
rtl8822b_fill_txdesc_vcs(adapter, pattrib, pbuf);
#ifdef CONFIG_CONCURRENT_MODE
if (bmcst)
rtl8822b_fill_txdesc_force_bmc_camid(pattrib, pbuf);
#endif
#ifdef CONFIG_P2P
if (!rtw_p2p_chk_state(&adapter->wdinfo, P2P_STATE_NONE)) {
@@ -3671,6 +3788,11 @@ static void fill_fake_txdesc(PADAPTER adapter, u8 *pDesc, u32 BufferLen,
case _AES_:
SET_TX_DESC_SEC_TYPE_8822B(pDesc, 0x3);
break;
case _CCMP_256_:
case _GCMP_:
case _GCMP_256_:
SET_TX_DESC_SEC_TYPE_8822B(pDesc, 0x2);
break;
default:
SET_TX_DESC_SEC_TYPE_8822B(pDesc, 0x0);
break;
@@ -3763,6 +3885,8 @@ void rtl8822b_rxdesc2attribute(struct rx_pkt_attrib *a, u8 *desc)
a->frag_num = (u8)GET_RX_DESC_FRAG_8822B(desc);
a->data_rate = (u8)GET_RX_DESC_RX_RATE_8822B(desc);
a->ampdu = (u8)GET_RX_DESC_PAGGR_8822B(desc);
a->ampdu_eof = (u8)GET_RX_DESC_RX_EOF_8822B(desc);
a->ppdu_cnt = (u8)GET_RX_DESC_PPDU_CNT_8822B(desc);
a->free_cnt = (u32)GET_RX_DESC_TSFL_8822B(desc);

View File

@@ -187,6 +187,7 @@ static u8 _init_rf_reg(PADAPTER adapter)
u8 path;
enum rf_path phydm_path;
PHAL_DATA_TYPE hal = GET_HAL_DATA(adapter);
struct hal_spec_t *hal_spec = GET_HAL_SPEC(adapter);
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
u8 *regfile;
#endif
@@ -198,7 +199,7 @@ static u8 _init_rf_reg(PADAPTER adapter)
/*
* Initialize RF
*/
for (path = 0; path < hal->NumTotalRFPath; path++) {
for (path = 0; path < hal_spec->rf_reg_path_num; path++) {
/* Initialize RF from configuration file */
switch (path) {
case 0:
@@ -387,7 +388,7 @@ void dm_InterruptMigration(PADAPTER adapter)
* when interrupt migration is set before. 2010.03.05.
*/
if (!adapter->registrypriv.wifi_spec
&& (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
&& (check_fwstate(pmlmepriv, WIFI_ASOC_STATE) == _TRUE)
&& pmlmepriv->LinkDetectInfo.bHigherBusyTraffic) {
IntMtToSet = _TRUE;
@@ -426,8 +427,6 @@ static void init_phydm_cominfo(PADAPTER adapter)
PHAL_DATA_TYPE hal;
struct dm_struct *p_dm_odm;
u32 support_ability = 0;
u8 cut_ver = ODM_CUT_A, fab_ver = ODM_TSMC;
hal = GET_HAL_DATA(adapter);
p_dm_odm = &hal->odmpriv;
@@ -437,41 +436,9 @@ static void init_phydm_cominfo(PADAPTER adapter)
odm_cmn_info_init(p_dm_odm, ODM_CMNINFO_PACKAGE_TYPE, hal->PackageType);
odm_cmn_info_init(p_dm_odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8822B);
if (IS_CHIP_VENDOR_TSMC(hal->version_id))
fab_ver = ODM_TSMC;
else if (IS_CHIP_VENDOR_UMC(hal->version_id))
fab_ver = ODM_UMC;
else if (IS_CHIP_VENDOR_SMIC(hal->version_id))
fab_ver = ODM_UMC + 1;
else
RTW_INFO("%s: unknown Fv=%d !!\n",
__FUNCTION__, GET_CVID_MANUFACTUER(hal->version_id));
if (IS_A_CUT(hal->version_id))
cut_ver = ODM_CUT_A;
else if (IS_B_CUT(hal->version_id))
cut_ver = ODM_CUT_B;
else if (IS_C_CUT(hal->version_id))
cut_ver = ODM_CUT_C;
else if (IS_D_CUT(hal->version_id))
cut_ver = ODM_CUT_D;
else if (IS_E_CUT(hal->version_id))
cut_ver = ODM_CUT_E;
else if (IS_F_CUT(hal->version_id))
cut_ver = ODM_CUT_F;
else if (IS_I_CUT(hal->version_id))
cut_ver = ODM_CUT_I;
else if (IS_J_CUT(hal->version_id))
cut_ver = ODM_CUT_J;
else if (IS_K_CUT(hal->version_id))
cut_ver = ODM_CUT_K;
else
RTW_INFO("%s: unknown Cv=%d !!\n",
__FUNCTION__, GET_CVID_CUT_VERSION(hal->version_id));
RTW_INFO("%s: Fv=%d Cv=%d\n", __FUNCTION__, fab_ver, cut_ver);
odm_cmn_info_init(p_dm_odm, ODM_CMNINFO_FAB_VER, fab_ver);
odm_cmn_info_init(p_dm_odm, ODM_CMNINFO_CUT_VER, cut_ver);
RTW_INFO("%s: Fv=%d Cv=%d\n", __FUNCTION__, hal->version_id.VendorType, hal->version_id.CUTVersion);
odm_cmn_info_init(p_dm_odm, ODM_CMNINFO_FAB_VER, hal->version_id.VendorType);
odm_cmn_info_init(p_dm_odm, ODM_CMNINFO_CUT_VER, hal->version_id.CUTVersion);
}
@@ -520,7 +487,6 @@ void rtl8822b_phy_haldm_watchdog(PADAPTER adapter)
BOOLEAN bFwCurrentInPSMode = _FALSE;
u8 bFwPSAwake = _TRUE;
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(adapter);
u8 lps_changed = _FALSE;
u8 in_lps = _FALSE;
PADAPTER current_lps_iface = NULL, iface = NULL;
struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
@@ -560,28 +526,29 @@ void rtl8822b_phy_haldm_watchdog(PADAPTER adapter)
}
#ifdef CONFIG_LPS
if (pwrpriv->bLeisurePs && bFwCurrentInPSMode && pwrpriv->pwr_mode != PS_MODE_ACTIVE
#ifdef CONFIG_WMMPS_STA
&& !rtw_is_wmmps_mode(adapter)
#endif /* CONFIG_WMMPS_STA */
) {
if (pwrpriv->bLeisurePs && bFwCurrentInPSMode && pwrpriv->pwr_mode != PS_MODE_ACTIVE) {
in_lps = _TRUE;
for (i = 0; i < dvobj->iface_nums; i++) {
iface = dvobj->padapters[i];
if (pwrpriv->current_lps_hw_port_id == rtw_hal_get_port(iface))
if (pwrpriv->current_lps_hw_port_id == rtw_hal_get_port(iface)) {
current_lps_iface = iface;
rtw_lps_rfon_ctrl(current_lps_iface, rf_on);
break;
}
}
lps_changed = _TRUE;
in_lps = _TRUE;
LPS_Leave(current_lps_iface, LPS_CTRL_PHYDM);
if (!current_lps_iface) {
RTW_WARN("Can't find a adapter with LPS to enable RFON function !\n");
goto skip_dm;
}
}
#endif
#ifdef CONFIG_BEAMFORMING
#ifdef RTW_BEAMFORMING_VERSION_2
if (check_fwstate(&adapter->mlmepriv, WIFI_STATION_STATE) &&
check_fwstate(&adapter->mlmepriv, _FW_LINKED))
check_fwstate(&adapter->mlmepriv, WIFI_ASOC_STATE))
rtw_hal_beamforming_config_csirate(adapter);
#endif
#endif
@@ -596,8 +563,8 @@ void rtl8822b_phy_haldm_watchdog(PADAPTER adapter)
skip_dm:
#ifdef CONFIG_LPS
if (lps_changed)
LPS_Enter(current_lps_iface, LPS_CTRL_PHYDM);
if (current_lps_iface)
rtw_lps_rfon_ctrl(current_lps_iface, rf_off);
#endif
/*
@@ -703,31 +670,12 @@ static void set_tx_power_level_by_path(PADAPTER adapter, u8 channel, u8 path)
void rtl8822b_set_tx_power_level(PADAPTER adapter, u8 channel)
{
PHAL_DATA_TYPE hal = GET_HAL_DATA(adapter);
struct dm_struct *phydm;
#ifdef CONFIG_ANTENNA_DIVERSITY
struct phydm_fat_struct *p_dm_fat_table;
#endif
struct hal_spec_t *hal_spec = GET_HAL_SPEC(adapter);
u8 path = RF_PATH_A;
hal = GET_HAL_DATA(adapter);
phydm = &hal->odmpriv;
#ifdef CONFIG_ANTENNA_DIVERSITY
p_dm_fat_table = &phydm->dm_fat_table;
if (hal->AntDivCfg) {
/* antenna diversity Enable */
path = (p_dm_fat_table->rx_idle_ant == MAIN_ANT) ? RF_PATH_A : RF_PATH_B;
set_tx_power_level_by_path(adapter, channel, path);
} else
#endif
{
/* antenna diversity disable */
for (path = RF_PATH_A; path < hal->NumTotalRFPath; ++path)
for (path = RF_PATH_A; path < hal_spec->rf_reg_path_num; ++path)
if (GET_HAL_TX_PATH_BMP(adapter) & BIT(path))
set_tx_power_level_by_path(adapter, channel, path);
}
}
/*

View File

@@ -49,6 +49,9 @@ s32 rtl8822bu_init_xmit_priv(PADAPTER);
void rtl8822bu_free_xmit_priv(PADAPTER);
s32 rtl8822bu_mgnt_xmit(PADAPTER, struct xmit_frame *);
s32 rtl8822bu_hal_xmit(PADAPTER, struct xmit_frame *);
#ifdef CONFIG_RTW_MGMT_QUEUE
s32 rtl8822bu_hal_mgmt_xmitframe_enqueue(PADAPTER, struct xmit_frame *);
#endif
s32 rtl8822bu_hal_xmitframe_enqueue(PADAPTER, struct xmit_frame *);
s32 rtl8822bu_hostap_mgnt_xmit_entry(PADAPTER, _pkt *);
#ifdef CONFIG_XMIT_THREAD_MODE

View File

@@ -255,6 +255,7 @@ exit:
u32 rtl8822bu_inirp_init(PADAPTER padapter)
{
struct registry_priv *regsty = adapter_to_regsty(padapter);
u8 i, status;
struct recv_buf *precvbuf;
struct dvobj_priv *pdev = adapter_to_dvobj(padapter);
@@ -285,7 +286,7 @@ u32 rtl8822bu_inirp_init(PADAPTER padapter)
/* issue Rx irp to receive data */
precvbuf = (struct recv_buf *)precvpriv->precv_buf;
for (i = 0; i < NR_RECVBUFF; i++) {
for (i = 0; i < regsty->recvbuf_nr; i++) {
if (_read_port(pintfhdl, precvpriv->ff_hwaddr, 0, (u8 *)precvbuf) == _FALSE) {
status = _FAIL;
goto exit;

View File

@@ -198,11 +198,6 @@ static u8 rtl8822bu_ps_func(PADAPTER padapter, HAL_INTF_PS_FUNC efunc_id, u8 *va
switch (efunc_id) {
#if defined(CONFIG_AUTOSUSPEND) && defined(SUPPORT_HW_RFOFF_DETECTED)
case HAL_USB_SELECT_SUSPEND:
break;
#endif /* CONFIG_AUTOSUSPEND && SUPPORT_HW_RFOFF_DETECTED */
default:
break;
}
@@ -321,6 +316,9 @@ void rtl8822bu_set_hal_ops(PADAPTER padapter)
ops->hal_xmit = rtl8822bu_hal_xmit;
ops->mgnt_xmit = rtl8822bu_mgnt_xmit;
#ifdef CONFIG_RTW_MGMT_QUEUE
ops->hal_mgmt_xmitframe_enqueue = rtl8822bu_hal_mgmt_xmitframe_enqueue;
#endif
ops->hal_xmitframe_enqueue = rtl8822bu_hal_xmitframe_enqueue;
#ifdef CONFIG_HOSTAPD_MLME

View File

@@ -132,10 +132,8 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bag
rtl8822b_fill_txdesc_vcs(padapter, pattrib, ptxdesc);
#ifdef CONFIG_CONCURRENT_MODE
if (bmcst)
rtl8822b_fill_txdesc_force_bmc_camid(pattrib, ptxdesc);
#endif
#ifdef CONFIG_SUPPORT_DYNAMIC_TXPWR
rtw_phydm_set_dyntxpwr(padapter, ptxdesc, pattrib->mac_id);
#endif
@@ -392,7 +390,7 @@ static s32 rtw_dump_xframe(PADAPTER padapter, struct xmit_frame *pxmitframe)
(pxmitframe->attrib.ether_type != 0x888e) &&
(pxmitframe->attrib.ether_type != 0x88b4) &&
(pxmitframe->attrib.dhcp_pkt != 1))
rtw_issue_addbareq_cmd(padapter, pxmitframe);
rtw_issue_addbareq_cmd(padapter, pxmitframe, _FALSE);
#endif /* CONFIG_80211N_HT */
mem_addr = pxmitframe->buf_addr;
@@ -499,7 +497,14 @@ static s32 rtl8822bu_xmitframe_complete(PADAPTER padapter, struct xmit_priv *pxm
int res = _SUCCESS;
#endif
#ifdef CONFIG_RTW_MGMT_QUEUE
/* dump management frame directly */
pxmitframe = rtw_dequeue_mgmt_xframe(pxmitpriv);
if (pxmitframe) {
rtw_dump_xframe(padapter, pxmitframe);
return _TRUE;
}
#endif
/* check xmitbuffer is ok */
if (pxmitbuf == NULL) {
@@ -711,7 +716,7 @@ agg_end:
(pfirstframe->attrib.ether_type != 0x888e) &&
(pfirstframe->attrib.ether_type != 0x88b4) &&
(pfirstframe->attrib.dhcp_pkt != 1))
rtw_issue_addbareq_cmd(padapter, pfirstframe);
rtw_issue_addbareq_cmd(padapter, pfirstframe, _FALSE);
#endif /* CONFIG_80211N_HT */
#ifndef CONFIG_USE_USB_BUFFER_ALLOC_TX
/* 3. update first frame txdesc */
@@ -782,6 +787,14 @@ static s32 rtl8822bu_xmitframe_complete(PADAPTER padapter, struct xmit_priv *pxm
phwxmits = pxmitpriv->hwxmits;
hwentry = pxmitpriv->hwxmit_entry;
#ifdef CONFIG_RTW_MGMT_QUEUE
/* dump management frame directly */
pxmitframe = rtw_dequeue_mgmt_xframe(pxmitpriv);
if (pxmitframe) {
rtw_dump_xframe(padapter, pxmitframe);
return _TRUE;
}
#endif
if (pxmitbuf == NULL) {
pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
@@ -963,6 +976,25 @@ s32 rtl8822bu_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe)
return pre_xmitframe(padapter, pxmitframe);
}
#ifdef CONFIG_RTW_MGMT_QUEUE
s32 rtl8822bu_hal_mgmt_xmitframe_enqueue(PADAPTER padapter, struct xmit_frame *pxmitframe)
{
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
s32 err;
err = rtw_mgmt_xmitframe_enqueue(padapter, pxmitframe);
if (err != _SUCCESS) {
rtw_free_xmitframe(pxmitpriv, pxmitframe);
pxmitpriv->tx_drop++;
} else {
#ifdef PLATFORM_LINUX
tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
#endif
}
return err;
}
#endif
s32 rtl8822bu_hal_xmitframe_enqueue(PADAPTER padapter, struct xmit_frame *pxmitframe)
{
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;