/****************************************************************************** * * 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 _HALRF_H__ #define _HALRF_H__ /*============================================================*/ /*include files*/ /*============================================================*/ #include "halrf/halrf_psd.h" /*============================================================*/ /*Definition */ /*============================================================*/ /*IQK version*/ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) #define IQK_VERSION_8188E "0x14" #define IQK_VERSION_8192E "0x01" #define IQK_VERSION_8723B "0x1e" #define IQK_VERSION_8812A "0x01" #define IQK_VERSION_8821A "0x01" #elif (DM_ODM_SUPPORT_TYPE & (ODM_CE)) #define IQK_VERSION_8188E "0x01" #define IQK_VERSION_8192E "0x01" #define IQK_VERSION_8723B "0x1e" #define IQK_VERSION_8812A "0x01" #define IQK_VERSION_8821A "0x01" #elif (DM_ODM_SUPPORT_TYPE & (ODM_AP)) #define IQK_VERSION_8188E "0x01" #define IQK_VERSION_8192E "0x01" #define IQK_VERSION_8723B "0x1e" #define IQK_VERSION_8812A "0x01" #define IQK_VERSION_8821A "0x01" #endif #define IQK_VERSION_8814A "0x0f" #define IQK_VERSION_8188F "0x01" #define IQK_VERSION_8197F "0x01" #define IQK_VERSION_8703B "0x05" #define IQK_VERSION_8710B "0x01" #define IQK_VERSION_8723D "0x02" #define IQK_VERSION_8822B "0x2f" #define IQK_VERSION_8821C "0x23" /*LCK version*/ #define LCK_VERSION_8188E "0x01" #define LCK_VERSION_8192E "0x01" #define LCK_VERSION_8723B "0x01" #define LCK_VERSION_8812A "0x01" #define LCK_VERSION_8821A "0x01" #define LCK_VERSION_8814A "0x01" #define LCK_VERSION_8188F "0x01" #define LCK_VERSION_8197F "0x01" #define LCK_VERSION_8703B "0x01" #define LCK_VERSION_8710B "0x01" #define LCK_VERSION_8723D "0x01" #define LCK_VERSION_8822B "0x01" #define LCK_VERSION_8821C "0x01" #define HALRF_IQK_VER (p_dm->support_ic_type == ODM_RTL8188E)? IQK_VERSION_8188E :\ (p_dm->support_ic_type == ODM_RTL8192E)? IQK_VERSION_8192E :\ (p_dm->support_ic_type == ODM_RTL8723B)? IQK_VERSION_8723B :\ (p_dm->support_ic_type == ODM_RTL8812)? IQK_VERSION_8812A :\ (p_dm->support_ic_type == ODM_RTL8821)? IQK_VERSION_8821A :\ (p_dm->support_ic_type == ODM_RTL8814A)? IQK_VERSION_8814A :\ (p_dm->support_ic_type == ODM_RTL8188F)? IQK_VERSION_8188F :\ (p_dm->support_ic_type == ODM_RTL8197F)? IQK_VERSION_8197F :\ (p_dm->support_ic_type == ODM_RTL8703B)? IQK_VERSION_8703B :\ (p_dm->support_ic_type == ODM_RTL8710B)? IQK_VERSION_8710B :\ (p_dm->support_ic_type == ODM_RTL8723D)? IQK_VERSION_8723D :\ (p_dm->support_ic_type == ODM_RTL8822B)? IQK_VERSION_8822B :\ (p_dm->support_ic_type == ODM_RTL8821C)? IQK_VERSION_8821C :"unknown" #define HALRF_LCK_VER (p_dm->support_ic_type == ODM_RTL8188E)? LCK_VERSION_8188E :\ (p_dm->support_ic_type == ODM_RTL8192E)? LCK_VERSION_8192E :\ (p_dm->support_ic_type == ODM_RTL8723B)? LCK_VERSION_8723B :\ (p_dm->support_ic_type == ODM_RTL8812)? LCK_VERSION_8812A :\ (p_dm->support_ic_type == ODM_RTL8821)? LCK_VERSION_8821A :\ (p_dm->support_ic_type == ODM_RTL8814A)? LCK_VERSION_8814A :\ (p_dm->support_ic_type == ODM_RTL8188F)? LCK_VERSION_8188F :\ (p_dm->support_ic_type == ODM_RTL8197F)? LCK_VERSION_8197F :\ (p_dm->support_ic_type == ODM_RTL8703B)? LCK_VERSION_8703B :\ (p_dm->support_ic_type == ODM_RTL8710B)? LCK_VERSION_8710B :\ (p_dm->support_ic_type == ODM_RTL8723D)? LCK_VERSION_8723D :\ (p_dm->support_ic_type == ODM_RTL8822B)? LCK_VERSION_8822B :\ (p_dm->support_ic_type == ODM_RTL8821C)? LCK_VERSION_8821C :"unknown" #define HALRF_DPK_VER "0x02" #define IQK_THRESHOLD 8 #define DPK_THRESHOLD 4 /*============================================================*/ /* enumeration */ /*============================================================*/ enum halrf_ability_e { HAL_RF_TX_PWR_TRACK = BIT(0), HAL_RF_IQK = BIT(1), HAL_RF_LCK = BIT(2), HAL_RF_DPK = BIT(3), HAL_RF_TXGAPK = BIT(4) }; enum halrf_cmninfo_init_e { HALRF_CMNINFO_ABILITY = 0, HALRF_CMNINFO_DPK_EN = 1, HALRF_CMNINFO_EEPROM_THERMAL_VALUE, HALRF_CMNINFO_FW_VER, HALRF_CMNINFO_RFK_FORBIDDEN, HALRF_CMNINFO_IQK_SEGMENT, HALRF_CMNINFO_RATE_INDEX, HALRF_CMNINFO_MP_PSD_POINT, HALRF_CMNINFO_MP_PSD_START_POINT, HALRF_CMNINFO_MP_PSD_STOP_POINT, HALRF_CMNINFO_MP_PSD_AVERAGE }; enum halrf_cmninfo_hook_e { HALRF_CMNINFO_CON_TX, HALRF_CMNINFO_SINGLE_TONE, HALRF_CMNINFO_CARRIER_SUPPRESSION, HALRF_CMNINFO_MP_RATE_INDEX }; enum phydm_lna_set { phydm_lna_disable = 0, phydm_lna_enable = 1, }; /*============================================================*/ /* structure */ /*============================================================*/ struct _hal_rf_ { /*hook*/ u8 *test1; /*update*/ u32 rf_supportability; u8 eeprom_thermal; u8 dpk_en; /*Enable Function DPK OFF/ON = 0/1*/ boolean dpk_done; u32 fw_ver; boolean *p_is_con_tx; boolean *p_is_single_tone; boolean *p_is_carrier_suppresion; u8 *p_mp_rate_index; u32 p_rate_index; #if (DM_ODM_SUPPORT_TYPE & ODM_WIN) struct _halrf_psd_data halrf_psd_data; #endif }; /*============================================================*/ /* function prototype */ /*============================================================*/ void halrf_basic_profile( void *p_dm_void, u32 *_used, char *output, u32 *_out_len ); #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1) void halrf_iqk_info_dump( void *p_dm_void, u32 *_used, char *output, u32 *_out_len ); void halrf_iqk_hwtx_check( void *p_dm_void, boolean is_check ); #endif void halrf_support_ability_debug( void *p_dm_void, char input[][16], u32 *_used, char *output, u32 *_out_len ); void halrf_cmn_info_init( void *p_dm_void, enum halrf_cmninfo_init_e cmn_info, u32 value ); void halrf_cmn_info_hook( void *p_dm_void, u32 cmn_info, void *p_value ); void halrf_cmn_info_set( void *p_dm_void, u32 cmn_info, u64 value ); u64 halrf_cmn_info_get( void *p_dm_void, u32 cmn_info ); void halrf_watchdog( void *p_dm_void ); void halrf_supportability_init( void *p_dm_void ); void halrf_init( void *p_dm_void ); void halrf_iqk_trigger( void *p_dm_void, boolean is_recovery ); void halrf_segment_iqk_trigger( void *p_dm_void, boolean clear, boolean segment_iqk ); void halrf_lck_trigger( void *p_dm_void ); void halrf_iqk_debug( void *p_dm_void, u32 *const dm_value, u32 *_used, char *output, u32 *_out_len ); void phydm_get_iqk_cfir( void *p_dm_void, u8 idx, u8 path, boolean debug ); void halrf_iqk_xym_read( void *p_dm_void, u8 path, u8 xym_type ); void halrf_rf_lna_setting( void *p_dm_void, enum phydm_lna_set type ); void halrf_do_imr_test( void *p_dm_void, u8 data ); u32 halrf_psd_log2base( IN u32 val ); #if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1) void halrf_iqk_dbg(void *p_dm_void); #endif #endif