/****************************************************************************** * * Copyright(c) 2007 - 2017 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 __PHYDMCCX_H__ #define __PHYDMCCX_H__ /* 1 ============================================================ * 1 Definition * 1 ============================================================ */ #define CCX_EN 1 #define IGI_TO_NHM_TH_MULTIPLIER 2 #define MS_TO_4US_RATIO 250 #define CCA_CAP 14 #define CLM_MAX_REPORT_TIME 10 #define DEVIDER_ERROR 0xffff /*FAHM*/ #define FAHM_INCLD_FA BIT(0) #define FAHM_INCLD_CRC_OK BIT(1) #define FAHM_INCLD_CRC_ER BIT(2) /* 1 ============================================================ * 1 enumrate * 1 ============================================================ */ enum nhm_setting { SET_NHM_SETTING, STORE_NHM_SETTING, RESTORE_NHM_SETTING }; enum nhm_inexclude_cca { NHM_EXCLUDE_CCA, NHM_INCLUDE_CCA }; enum nhm_inexclude_txon { NHM_EXCLUDE_TXON, NHM_INCLUDE_TXON }; enum clm_monitor_mode_e { CLM_ECHO_DBG_MODE = 0, CLM_DRIVER_MNTR = 1, CLM_FW_MNTR = 2 }; /* 1 ============================================================ * 1 structure * 1 ============================================================ */ struct _CCX_INFO { /*Settings*/ u8 nhm_th[11]; u16 nhm_period; /* 4us per unit */ u16 clm_period; /* 4us per unit */ enum nhm_inexclude_txon nhm_inexclude_txon; enum nhm_inexclude_cca nhm_inexclude_cca; /*Previous Settings*/ u8 nhm_th_restore[11]; u16 nhm_period_restore; /* 4us per unit */ u16 clm_period_restore; /* 4us per unit */ enum nhm_inexclude_txon nhm_inexclude_txon_restore; enum nhm_inexclude_cca nhm_inexclude_cca_restore; /*Report*/ u8 nhm_result[12]; u8 nhm_ratio; /*1% per nuit, it means the interference igi can't overcome.*/ u8 nhm_result_total; u16 nhm_duration; u16 clm_result; u8 clm_ratio; u8 echo_igi; /* nhm_result comes from this igi */ u32 clm_fw_result_acc; u8 clm_fw_result_cnt; enum clm_monitor_mode_e clm_mntr_mode; u8 env_mntr_igi; #ifdef FAHM_SUPPORT u8 fahm_nume_sel; /*fahm_numerator_sel: select {FA, CRCOK, CRC_fail} */ u8 fahm_denum_sel; /*fahm_denumerator_sel: select {FA, CRCOK, CRC_fail} */ u16 fahm_period; /*unit: 4us*/ #endif }; /* 1 ============================================================ * 1 structure * 1 ============================================================ */ #ifdef FAHM_SUPPORT void phydm_fahm_init( void *p_dm_void ); void phydm_fahm_dbg( void *p_dm_void, char input[][16], u32 *_used, char *output, u32 *_out_len, u32 input_num ); #endif void phydm_c2h_clm_report_handler( void *p_dm_void, u8 *cmd_buf, u8 cmd_len ); /*NHM*/ boolean phydm_cal_nhm_cnt( void *p_dm_void ); void phydm_nhm_setting( void *p_dm_void, u8 nhm_setting ); void phydm_nhm_trigger( void *p_dm_void ); void phydm_get_nhm_result( void *p_dm_void ); /*CLM*/ void phydm_clm_setting( void *p_dm_void ); void phydm_clm_trigger( void *p_dm_void ); void phydm_get_clm_result( void *p_dm_void ); void phydm_ccx_monitor( void *p_dm_void ); void phydm_ccx_monitor_trigger( void *p_dm_void, u16 monitor_time ); void phydm_ccx_monitor_result( void *p_dm_void ); void phydm_set_clm_mntr_mode( void *p_dm_void, enum clm_monitor_mode_e mode ); void phydm_env_monitor_init( void *p_dm_void ); void phydm_clm_dbg( void *p_dm_void, char input[][16], u32 *_used, char *output, u32 *_out_len, u32 input_num ); #endif