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