1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2019 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_MCC_H_ 16*4882a593Smuzhiyun #define _PHL_MCC_H_ 17*4882a593Smuzhiyun /* MCC definition for private usage */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define phl_to_com_mcc_info(_phl) ((struct phl_com_mcc_info *)(phl_to_mr_ctrl(_phl)->com_mcc)) 20*4882a593Smuzhiyun #define get_mcc_info(_phl, _band) ((struct phl_mcc_info *)((get_band_ctrl(_phl, _band)->mcc_info))) 21*4882a593Smuzhiyun #define set_mcc_init_state(_phl, _state) (((struct mr_ctl_t *)phl_to_mr_ctrl(_phl))->init_mcc = _state) 22*4882a593Smuzhiyun #define is_mcc_init(_phl) (((struct mr_ctl_t *)phl_to_mr_ctrl(_phl))->init_mcc == true) 23*4882a593Smuzhiyun #define get_ref_role(_en_info) ((struct rtw_phl_mcc_role *)&(_en_info->mcc_role[_en_info->ref_role_idx])) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define EARLY_TX_BCN_T 10 26*4882a593Smuzhiyun #define MIN_TX_BCN_T 10 27*4882a593Smuzhiyun #define EARLY_RX_BCN_T 5 28*4882a593Smuzhiyun #define MIN_RX_BCN_T 10 29*4882a593Smuzhiyun #define MIN_GO_STA_OFFSET_T 15 30*4882a593Smuzhiyun #define MIN_CLIENT_DUR (EARLY_RX_BCN_T + MIN_RX_BCN_T) 31*4882a593Smuzhiyun #define MIN_AP_DUR (EARLY_TX_BCN_T + MIN_GO_STA_OFFSET_T - EARLY_RX_BCN_T) 32*4882a593Smuzhiyun #define MIN_BCNS_OFFSET (EARLY_RX_BCN_T + MIN_RX_BCN_T) 33*4882a593Smuzhiyun #define MAX_MCC_GROUP_ROLE 2 34*4882a593Smuzhiyun #define DEFAULT_AP_DUR 60 35*4882a593Smuzhiyun #define DEFAULT_CLIENT_DUR 40 36*4882a593Smuzhiyun #define MCC_DUR_NONSPECIFIC 0xff 37*4882a593Smuzhiyun #define CLIENTS_WORSECASE_REF_TOA 30 38*4882a593Smuzhiyun #define CLIENTS_WORSECASE_SMALL_DUR 60 39*4882a593Smuzhiyun #define CLIENTS_WORSECASE_LARGE_DUR 90 40*4882a593Smuzhiyun #define WORSECASE_INTVL 150 41*4882a593Smuzhiyun #define MIN_TRIGGER_MCC_TIME 300/*TU*/ 42*4882a593Smuzhiyun #define CLIENTS_TRACKING_TH 3 43*4882a593Smuzhiyun #define CLIENTS_TRACKING_WORSECASE_TH 3 44*4882a593Smuzhiyun #define CLIENTS_TRACKING_COURTESY_TH 3 45*4882a593Smuzhiyun #define CLIENTS_TRACKING_CRITICAL_POINT_TH 2 46*4882a593Smuzhiyun #define HANDLE_BCN_INTVL 100 47*4882a593Smuzhiyun #define BT_DUR_SEG_TH 20 48*4882a593Smuzhiyun #define AP_CLIENT_OFFSET 40 49*4882a593Smuzhiyun #define REF_ROLE_IDX 0 50*4882a593Smuzhiyun #define BT_DUR_MAX_2WS 33 /*The max bt slot for 2wifi slot and 1 bt slot*/ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun enum _mcc_minfo_reset_type { 53*4882a593Smuzhiyun MINFO_RESET_EN_INFO = BIT(0), 54*4882a593Smuzhiyun MINFO_RESET_MODE = BIT(1), 55*4882a593Smuzhiyun MINFO_RESET_ROLE_MAP = BIT(2), 56*4882a593Smuzhiyun MINFO_RESET_STATE = BIT(3), 57*4882a593Smuzhiyun MINFO_RESET_COEX_MODE = BIT(4), 58*4882a593Smuzhiyun MINFO_RESET_BT_INFO = BIT(5), 59*4882a593Smuzhiyun MINFO_RESET_PATTERN_INFO = BIT(6), 60*4882a593Smuzhiyun MINFO_RESET_ALL = 0xFF 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun enum _mcc_role_cat { 64*4882a593Smuzhiyun MCC_ROLE_NONE = 0, 65*4882a593Smuzhiyun MCC_ROLE_AP_CAT, 66*4882a593Smuzhiyun MCC_ROLE_CLIENT_CAT 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun struct phl_mcc_fw_log_info { 70*4882a593Smuzhiyun bool en_fw_mcc_log; 71*4882a593Smuzhiyun u8 fw_mcc_log_lv;/* fw mcc log level */ 72*4882a593Smuzhiyun bool update; /*if update = true, we need to update setting to fw.*/ 73*4882a593Smuzhiyun }; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun struct phl_mcc_info { 76*4882a593Smuzhiyun struct rtw_phl_mcc_en_info en_info; 77*4882a593Smuzhiyun enum rtw_phl_tdmra_wmode mcc_mode; 78*4882a593Smuzhiyun u8 role_map; /*the wifi role map in operating mcc */ 79*4882a593Smuzhiyun enum rtw_phl_mcc_state state; 80*4882a593Smuzhiyun enum rtw_phl_mcc_coex_mode coex_mode; 81*4882a593Smuzhiyun struct rtw_phl_mcc_bt_info bt_info; 82*4882a593Smuzhiyun struct phl_mcc_fw_log_info fw_log_i; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #endif /*_PHL_MCC_H_*/ 88