/****************************************************************************** * * Copyright(c) 2015 - 2016 Realtek Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * ******************************************************************************/ #define _RTL8822B_MAC_C_ #include /* PADAPTER, basic_types.h and etc. */ #include /* HAL_DATA_TYPE */ #include "../hal_halmac.h" /* Register Definition and etc. */ inline u8 rtl8822b_rcr_config(PADAPTER p, u32 rcr) { u32 v32; int err; v32 = GET_HAL_DATA(p)->ReceiveConfig; v32 ^= rcr; v32 &= BIT_APP_PHYSTS_8822B; if (v32) { v32 = rcr & BIT_APP_PHYSTS_8822B; RTW_INFO("%s: runtime %s rx phy status!\n", __FUNCTION__, v32 ? "ENABLE" : "DISABLE"); if (v32) { err = rtw_halmac_config_rx_info(adapter_to_dvobj(p), HALMAC_DRV_INFO_PHY_STATUS); if (err) { RTW_INFO("%s: Enable rx phy status FAIL!!", __FUNCTION__); rcr &= ~BIT_APP_PHYSTS_8822B; } } else { err = rtw_halmac_config_rx_info(adapter_to_dvobj(p), HALMAC_DRV_INFO_NONE); if (err) { RTW_INFO("%s: Disable rx phy status FAIL!!", __FUNCTION__); rcr |= BIT_APP_PHYSTS_8822B; } } } err = rtw_write32(p, REG_RCR_8822B, rcr); if (_FAIL == err) return _FALSE; GET_HAL_DATA(p)->ReceiveConfig = rcr; return _TRUE; } inline u8 rtl8822b_rcr_get(PADAPTER p, u32 *rcr) { u32 v32; v32 = rtw_read32(p, REG_RCR_8822B); if (rcr) *rcr = v32; GET_HAL_DATA(p)->ReceiveConfig = v32; return _TRUE; } inline u8 rtl8822b_rcr_check(PADAPTER p, u32 check_bit) { PHAL_DATA_TYPE hal; u32 rcr; hal = GET_HAL_DATA(p); rcr = hal->ReceiveConfig; if ((rcr & check_bit) == check_bit) return _TRUE; return _FALSE; } inline u8 rtl8822b_rcr_add(PADAPTER p, u32 add) { PHAL_DATA_TYPE hal; u32 rcr; u8 ret = _TRUE; hal = GET_HAL_DATA(p); rcr = hal->ReceiveConfig; rcr |= add; if (rcr != hal->ReceiveConfig) ret = rtl8822b_rcr_config(p, rcr); return ret; } inline u8 rtl8822b_rcr_clear(PADAPTER p, u32 clear) { PHAL_DATA_TYPE hal; u32 rcr; u8 ret = _TRUE; hal = GET_HAL_DATA(p); rcr = hal->ReceiveConfig; rcr &= ~clear; if (rcr != hal->ReceiveConfig) ret = rtl8822b_rcr_config(p, rcr); return ret; } inline u8 rtl8822b_rx_ba_ssn_appended(PADAPTER p) { return rtl8822b_rcr_check(p, BIT_APP_BASSN_8822B); } inline u8 rtl8822b_rx_fcs_append_switch(PADAPTER p, u8 enable) { u32 rcr_bit; u8 ret = _TRUE; rcr_bit = BIT_APP_FCS_8822B; if (_TRUE == enable) ret = rtl8822b_rcr_add(p, rcr_bit); else ret = rtl8822b_rcr_clear(p, rcr_bit); return ret; } inline u8 rtl8822b_rx_fcs_appended(PADAPTER p) { return rtl8822b_rcr_check(p, BIT_APP_FCS_8822B); } inline u8 rtl8822b_rx_tsf_addr_filter_config(PADAPTER p, u8 config) { u8 v8; int err; v8 = GET_HAL_DATA(p)->rx_tsf_addr_filter_config; if (v8 != config) { err = rtw_write8(p, REG_NAN_RX_TSF_FILTER_8822B, config); if (_FAIL == err) return _FALSE; } GET_HAL_DATA(p)->rx_tsf_addr_filter_config = config; return _TRUE; } /* * Return: * _SUCCESS Download Firmware OK. * _FAIL Download Firmware FAIL! */ s32 rtl8822b_fw_dl(PADAPTER adapter, u8 wowlan) { struct dvobj_priv *d; int err; if (_TRUE == wowlan) { RTW_INFO("%s: NOT support WOWLan firmware yet!\n", __FUNCTION__); return _FAIL; } d = adapter_to_dvobj(adapter); err = rtw_halmac_dlfw_from_file(d, REALTEK_CONFIG_PATH "RTL8822Bfw_NIC.bin"); if (err) { RTW_INFO("%s: Download Firmware fail\n", __FUNCTION__); return _FALSE; } return _SUCCESS; }