net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / hal / halmac / halmac_88xx / halmac_8822b / halmac_api_8822b_pcie.c
1 #include "../halmac_88xx_cfg.h"
2 #include "halmac_8822b_cfg.h"
3
4
5 /**
6  * halmac_mac_power_switch_8822b_pcie() - change mac power
7  * @pHalmac_adapter
8  * @halmac_power
9  * Author : KaiYuan Chang
10  * Return : HALMAC_RET_STATUS
11  */
12 HALMAC_RET_STATUS
13 halmac_mac_power_switch_8822b_pcie(
14         IN PHALMAC_ADAPTER pHalmac_adapter,
15         IN HALMAC_MAC_POWER     halmac_power
16 )
17 {
18         u8 interface_mask;
19         VOID *pDriver_adapter = NULL;
20         PHALMAC_API pHalmac_api;
21
22         if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
23                 return HALMAC_RET_ADAPTER_INVALID;
24
25         if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
26                 return HALMAC_RET_API_INVALID;
27
28         halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_MAC_POWER_SWITCH);
29
30         pDriver_adapter = pHalmac_adapter->pDriver_adapter;
31         pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
32
33         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "halmac_mac_power_switch_88xx_pcie halmac_power =  %x ==========>\n", halmac_power);
34         interface_mask = HALMAC_PWR_INTF_PCI_MSK;
35
36         if (0xEA == HALMAC_REG_READ_8(pHalmac_adapter, REG_CR))
37                 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
38
39         /* Check if power switch is needed */
40         if (halmac_power == pHalmac_adapter->halmac_state.mac_power) {
41                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_WARN, "halmac_mac_power_switch power state unchange!\n");
42         } else {
43                 if (HALMAC_MAC_POWER_OFF == halmac_power) {
44                         if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_TESTCHIP_MSK, HALMAC_PWR_FAB_TSMC_MSK,
45                                     interface_mask, halmac_8822b_card_disable_flow)) {
46                                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "Handle power off cmd error\n");
47                                 return HALMAC_RET_POWER_OFF_FAIL;
48                         }
49
50                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
51                         pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_UNDEFINE;
52                         pHalmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
53                 } else {
54                         if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_TESTCHIP_MSK, HALMAC_PWR_FAB_TSMC_MSK,
55                                     interface_mask, halmac_8822b_card_enable_flow)) {
56                                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "Handle power on cmd error\n");
57                                 return HALMAC_RET_POWER_ON_FAIL;
58                         }
59
60                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
61                         pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
62                 }
63         }
64
65         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "halmac_mac_power_switch_88xx_pcie <==========\n");
66
67         return HALMAC_RET_SUCCESS;
68 }