1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2020 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef _PHL_ECSA_H_ 16*4882a593Smuzhiyun #define _PHL_ECSA_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define ECSA_UPDATE_BCN_BEFORE_TBTT 25 /* unit: TU */ 19*4882a593Smuzhiyun #define ECSA_UPDATE_BCN_BEFORE_TBTT_US (ECSA_UPDATE_BCN_BEFORE_TBTT * TU) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define ECSA_DEFAULT_CHANNEL_SWITCH_COUNT 10 22*4882a593Smuzhiyun #define ECSA_SWITCH_TIME_AFTER_LAST_COUNT_DOWN (10 * TU) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define IS_ECSA_TYPE_AP(_ecsa_ctrl) (_ecsa_ctrl->ecsa_param.ecsa_type == ECSA_TYPE_AP) 25*4882a593Smuzhiyun #define IS_ECSA_TYPE_STA(_ecsa_ctrl) (_ecsa_ctrl->ecsa_param.ecsa_type == ECSA_TYPE_STA) 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun enum phl_ecsa_state{ 28*4882a593Smuzhiyun ECSA_STATE_NONE = 0, 29*4882a593Smuzhiyun ECSA_STATE_WAIT_DELAY = 1, 30*4882a593Smuzhiyun ECSA_STATE_START, 31*4882a593Smuzhiyun ECSA_STATE_UPDATE_FIRST_BCN_DONE, 32*4882a593Smuzhiyun ECSA_STATE_COUNT_DOWN, 33*4882a593Smuzhiyun ECSA_STATE_SWITCH, 34*4882a593Smuzhiyun ECSA_STATE_DONE 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun struct phl_ecsa_ctrl_t{ 38*4882a593Smuzhiyun enum phl_ecsa_state state; 39*4882a593Smuzhiyun struct rtw_phl_com_t *phl_com; 40*4882a593Smuzhiyun struct rtw_wifi_role_t *role; 41*4882a593Smuzhiyun struct rtw_phl_ecsa_param ecsa_param; 42*4882a593Smuzhiyun struct rtw_phl_ecsa_ops ops; 43*4882a593Smuzhiyun _os_timer timer; 44*4882a593Smuzhiyun _os_lock lock; 45*4882a593Smuzhiyun u32 expected_tbtt_ms; 46*4882a593Smuzhiyun u32 req_hdl; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #ifdef CONFIG_PHL_ECSA 50*4882a593Smuzhiyun enum rtw_phl_status phl_ecsa_ctrl_init(struct phl_info_t *phl_info); 51*4882a593Smuzhiyun void phl_ecsa_ctrl_deinit(struct phl_info_t *phl_info); 52*4882a593Smuzhiyun #else 53*4882a593Smuzhiyun #define phl_ecsa_ctrl_init(_phl_info) RTW_PHL_STATUS_SUCCESS 54*4882a593Smuzhiyun #define phl_ecsa_ctrl_deinit(_phl_info) 55*4882a593Smuzhiyun #endif /* CONFIG_PHL_ECSA */ 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #endif /*_PHL_ECSA_H_*/ 58