mirror of
https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
synced 2026-01-29 07:16:35 +00:00
Update to 5.13.1 from upstream
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user