92 lines
2.9 KiB
C
Executable File
92 lines
2.9 KiB
C
Executable File
/******************************************************************************
|
|
*
|
|
* Copyright(c) 2019 - 2021 Realtek Corporation.
|
|
*
|
|
* 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.
|
|
*
|
|
*****************************************************************************/
|
|
#ifndef __RTW_CSA_H_
|
|
#define __RTW_CSA_H_
|
|
|
|
#if CONFIG_DFS
|
|
#define CSA_IE_LEN 3 /* Length of Channel Switch element */
|
|
#define CSA_SWITCH_MODE 0
|
|
#define CSA_NEW_CH 1
|
|
#define CSA_SWITCH_COUNT 2
|
|
#define MAX_CSA_CNT 10
|
|
|
|
#define CS_WR_DATA_LEN 5 /* Length of Channel Switch Wrapper element */
|
|
|
|
void reset_csa_param(struct rf_ctl_t *rfctl);
|
|
bool rtw_get_csa_setting(struct dvobj_priv *d, s16 *req_ch, u8 *req_bw, u8 *req_offset);
|
|
|
|
#ifdef CONFIG_ECSA_PHL
|
|
#define MCC_ECSA_DELAY_START_TIME 30000 /* ms */
|
|
|
|
enum ecsa_state_t {
|
|
ECSA_ST_NONE,
|
|
ECSA_ST_SW_START, /* ready to switch */
|
|
ECSA_ST_SW_DONE /* switch done */
|
|
};
|
|
|
|
struct core_ecsa_info {
|
|
enum ecsa_state_t state;
|
|
u32 ecsa_allow_case;
|
|
u32 ecsa_delay_time;
|
|
|
|
/* @channel_width defined in 802.11-2016, Table 9-252 VHT operation information subfields
|
|
* 0 for 20 MHz or 40 MHz
|
|
* 1 for 80 MHz, 160 MHz or 80+80 MHz
|
|
* 2 for 160 MHz (deprecated)
|
|
* 3 for non-contiguous 80+80 MHz (deprecated)
|
|
*/
|
|
u8 channel_width;
|
|
struct createbss_parm *bss_param;
|
|
struct rtw_phl_ecsa_param phl_ecsa_param;
|
|
};
|
|
|
|
__inline static void set_ecsa_state(struct core_ecsa_info *ecsa_info, enum ecsa_state_t state)
|
|
{
|
|
ecsa_info->state = state;
|
|
}
|
|
|
|
__inline static bool check_ecsa_state(struct core_ecsa_info *ecsa_info, enum ecsa_state_t state)
|
|
{
|
|
if (ecsa_info->state == state)
|
|
return _TRUE;
|
|
return _FALSE;
|
|
}
|
|
|
|
#define SET_ECSA_STATE(adapter, state) set_ecsa_state(&((adapter)->ecsa_info), (state))
|
|
#define CHK_ECSA_STATE(adapter, state) check_ecsa_state(&((adapter)->ecsa_info), (state))
|
|
|
|
bool rtw_mr_is_ecsa_running(struct _ADAPTER *a);
|
|
void rtw_ecsa_update_probe_resp(struct xmit_frame *xframe);
|
|
void rtw_ecsa_update_beacon(void *priv, struct rtw_wifi_role_t *role);
|
|
bool rtw_ap_check_ecsa_allow(
|
|
void *priv,
|
|
struct rtw_wifi_role_t *role,
|
|
struct rtw_chan_def chan_def,
|
|
enum phl_ecsa_start_reason reason,
|
|
u32 *delay_start_ms
|
|
);
|
|
void rtw_ecsa_mr_update_chan_info_by_role(
|
|
void *priv,
|
|
struct rtw_wifi_role_t *role,
|
|
struct rtw_chan_def new_chan_def
|
|
);
|
|
bool rtw_ecsa_check_tx_resume_allow(void *priv, struct rtw_wifi_role_t *role);
|
|
void rtw_ecsa_complete(void *priv, struct rtw_wifi_role_t *role);
|
|
void rtw_trigger_phl_ecsa_start(struct _ADAPTER *a);
|
|
#endif /* CONFIG_ECSA_PHL */
|
|
#endif /* CONFIG_DFS */
|
|
|
|
#endif
|