summaryrefslogtreecommitdiff
path: root/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c')
-rw-r--r--drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c125
1 files changed, 17 insertions, 108 deletions
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
index 46f5abcbaeeb..8523908d5e5f 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
@@ -49,93 +49,14 @@ static void _FWDownloadEnable(struct rtw_adapter *padapter, bool enable)
static int _BlockWrite(struct rtw_adapter *padapter, void *buffer, u32 buffSize)
{
- int ret = _SUCCESS;
- /* (Default) Phase #1 : PCI muse use 4-byte write to download FW */
- u32 blockSize_p1 = 4;
- /* Phase #2 : Use 8-byte, if Phase#1 use big size to write FW. */
- u32 blockSize_p2 = 8;
- /* Phase #3 : Use 1-byte, the remnant of FW image. */
- u32 blockSize_p3 = 1;
- u32 blockCount_p1 = 0, blockCount_p2 = 0, blockCount_p3 = 0;
- u32 remainSize_p1 = 0, remainSize_p2 = 0;
- u8 *bufferPtr = (u8 *) buffer;
- u32 i = 0, offset = 0;
-
- blockSize_p1 = 254;
+ int ret;
- /* 3 Phase #1 */
- blockCount_p1 = buffSize / blockSize_p1;
- remainSize_p1 = buffSize % blockSize_p1;
-
- if (blockCount_p1) {
- RT_TRACE(_module_hal_init_c_, _drv_notice_,
- ("_BlockWrite: [P1] buffSize(%d) blockSize_p1(%d) "
- "blockCount_p1(%d) remainSize_p1(%d)\n",
- buffSize, blockSize_p1, blockCount_p1,
- remainSize_p1));
- }
-
- for (i = 0; i < blockCount_p1; i++) {
- ret = rtl8723au_writeN(padapter, (FW_8723A_START_ADDRESS +
- i * blockSize_p1),
- blockSize_p1,
- (bufferPtr + i * blockSize_p1));
- if (ret == _FAIL)
- goto exit;
- }
-
- /* 3 Phase #2 */
- if (remainSize_p1) {
- offset = blockCount_p1 * blockSize_p1;
-
- blockCount_p2 = remainSize_p1 / blockSize_p2;
- remainSize_p2 = remainSize_p1 % blockSize_p2;
-
- if (blockCount_p2) {
- RT_TRACE(_module_hal_init_c_, _drv_notice_,
- ("_BlockWrite: [P2] buffSize_p2(%d) "
- "blockSize_p2(%d) blockCount_p2(%d) "
- "remainSize_p2(%d)\n",
- (buffSize - offset), blockSize_p2,
- blockCount_p2, remainSize_p2));
- }
-
- for (i = 0; i < blockCount_p2; i++) {
- ret = rtl8723au_writeN(padapter,
- (FW_8723A_START_ADDRESS +
- offset + i * blockSize_p2),
- blockSize_p2,
- (bufferPtr + offset +
- i * blockSize_p2));
-
- if (ret == _FAIL)
- goto exit;
- }
- }
-
- /* 3 Phase #3 */
- if (remainSize_p2) {
- offset = (blockCount_p1 * blockSize_p1) +
- (blockCount_p2 * blockSize_p2);
-
- blockCount_p3 = remainSize_p2 / blockSize_p3;
-
- RT_TRACE(_module_hal_init_c_, _drv_notice_,
- ("_BlockWrite: [P3] buffSize_p3(%d) blockSize_p3(%d) "
- "blockCount_p3(%d)\n",
- (buffSize - offset), blockSize_p3, blockCount_p3));
-
- for (i = 0; i < blockCount_p3; i++) {
- ret = rtl8723au_write8(padapter,
- (FW_8723A_START_ADDRESS + offset + i),
- *(bufferPtr + offset + i));
+ if (buffSize > MAX_PAGE_SIZE)
+ return _FAIL;
- if (ret == _FAIL)
- goto exit;
- }
- }
+ ret = rtl8723au_writeN(padapter, FW_8723A_START_ADDRESS,
+ buffSize, buffer);
-exit:
return ret;
}
@@ -961,28 +882,18 @@ void rtl8723a_read_chip_version(struct rtw_adapter *padapter)
/* */
void SetBcnCtrlReg23a(struct rtw_adapter *padapter, u8 SetBits, u8 ClearBits)
{
- struct hal_data_8723a *pHalData;
- u32 addr;
- u8 *pRegBcnCtrlVal;
-
- pHalData = GET_HAL_DATA(padapter);
- pRegBcnCtrlVal = (u8 *)&pHalData->RegBcnCtrlVal;
-
- addr = REG_BCN_CTRL;
+ u8 val8;
- *pRegBcnCtrlVal = rtl8723au_read8(padapter, addr);
- *pRegBcnCtrlVal |= SetBits;
- *pRegBcnCtrlVal &= ~ClearBits;
+ val8 = rtl8723au_read8(padapter, REG_BCN_CTRL);
+ val8 |= SetBits;
+ val8 &= ~ClearBits;
- rtl8723au_write8(padapter, addr, *pRegBcnCtrlVal);
+ rtl8723au_write8(padapter, REG_BCN_CTRL, val8);
}
void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter)
{
- struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
rtl8723au_write16(padapter, REG_BCN_CTRL, 0x1010);
- pHalData->RegBcnCtrlVal = 0x1010;
/* TODO: Remove these magic number */
rtl8723au_write16(padapter, REG_TBTT_PROHIBIT, 0x6404); /* ms */
@@ -1034,8 +945,6 @@ static void StopTxBeacon(struct rtw_adapter *padapter)
rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 1, 0x64);
pHalData->RegReg542 &= ~BIT(0);
rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 2, pHalData->RegReg542);
-
- CheckFwRsvdPageContent23a(padapter); /* 2010.06.23. Added by tynli. */
}
static void _BeaconFunctionEnable(struct rtw_adapter *padapter, u8 Enable,
@@ -2381,18 +2290,18 @@ void hw_var_set_opmode(struct rtw_adapter *padapter, u8 mode)
{
u8 val8;
- if ((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_)) {
+ if (mode == MSR_INFRA || mode == MSR_NOLINK) {
StopTxBeacon(padapter);
/* disable atim wnd */
val8 = DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_ATIM;
SetBcnCtrlReg23a(padapter, val8, ~val8);
- } else if ((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_) */) {
+ } else if (mode == MSR_ADHOC) {
ResumeTxBeacon(padapter);
val8 = DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_BCNQ_SUB;
SetBcnCtrlReg23a(padapter, val8, ~val8);
- } else if (mode == _HW_STATE_AP_) {
+ } else if (mode == MSR_AP) {
/* add NULL Data and BT NULL Data Packets to FW RSVD Page */
rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(padapter);
@@ -2474,8 +2383,8 @@ void hw_var_set_correct_tsf(struct rtw_adapter *padapter)
do_div(pmlmeext->TSFValue,
(pmlmeinfo->bcn_interval * 1024)) - 1024; /* us */
- if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) ||
- ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) {
+ if (((pmlmeinfo->state & 0x03) == MSR_ADHOC) ||
+ ((pmlmeinfo->state & 0x03) == MSR_AP)) {
/* pHalData->RegTxPause |= STOP_BCNQ;BIT(6) */
/* rtl8723au_write8(padapter, REG_TXPAUSE,
(rtl8723au_read8(Adapter, REG_TXPAUSE)|BIT(6))); */
@@ -2493,8 +2402,8 @@ void hw_var_set_correct_tsf(struct rtw_adapter *padapter)
/* enable related TSF function */
SetBcnCtrlReg23a(padapter, EN_BCN_FUNCTION, 0);
- if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) ||
- ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE))
+ if (((pmlmeinfo->state & 0x03) == MSR_ADHOC) ||
+ ((pmlmeinfo->state & 0x03) == MSR_AP))
ResumeTxBeacon(padapter);
}