OSDN Git Service

Add rtl8821ce driver version 5.5.2
[android-x86/external-kernel-drivers.git] / rtl8821ce / hal / phydm / phydm_dig.h
diff --git a/rtl8821ce/hal/phydm/phydm_dig.h b/rtl8821ce/hal/phydm/phydm_dig.h
new file mode 100644 (file)
index 0000000..b9a2d08
--- /dev/null
@@ -0,0 +1,315 @@
+/******************************************************************************
+ *
+ * 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.
+ *
+ * The full GNU General Public License is included in this distribution in the
+ * file called LICENSE.
+ *
+ * Contact Information:
+ * wlanfae <wlanfae@realtek.com>
+ * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
+ * Hsinchu 300, Taiwan.
+ *
+ * Larry Finger <Larry.Finger@lwfinger.net>
+ *
+ *****************************************************************************/
+
+#ifndef __PHYDMDIG_H__
+#define __PHYDMDIG_H__
+
+#define DIG_VERSION "2.3"
+
+#define        DIG_HW          0
+#define DIG_LIMIT_PERIOD 60 /*@60 sec*/
+
+/*@--------------------Define ---------------------------------------*/
+
+/*@=== [DIG Boundary] ========================================*/
+/*@DIG coverage mode*/
+#define        DIG_MAX_COVERAGR                0x26
+#define        DIG_MIN_COVERAGE                0x1c
+#define        DIG_MAX_OF_MIN_COVERAGE         0x22
+
+/*@[DIG Balance mode]*/
+#if (DIG_HW == 1)
+#define        DIG_MAX_BALANCE_MODE            0x32
+#else
+#define        DIG_MAX_BALANCE_MODE            0x3e
+#endif
+#define        DIG_MAX_OF_MIN_BALANCE_MODE     0x2a
+
+/*@[DIG Performance mode]*/
+#define        DIG_MAX_PERFORMANCE_MODE        0x5a
+#define        DIG_MAX_OF_MIN_PERFORMANCE_MODE 0x40    /*@[WLANBB-871]*/
+#define        DIG_MIN_PERFORMANCE             0x20
+
+/*@DIG DFS function*/
+#define        DIG_MAX_DFS                     0x28
+#define        DIG_MIN_DFS                     0x20
+
+/*@DIG LPS function*/
+#define        DIG_MAX_LPS                     0x3e
+#define        DIG_MIN_LPS                     0x20
+
+#ifdef PHYDM_TDMA_DIG_SUPPORT
+#define DIG_NUM_OF_TDMA_STATES 2 /*@L, H state*/
+#endif
+
+/*@=== [DIG FA Threshold] ======================================*/
+
+/*Normal*/
+#define        DM_DIG_FA_TH0                   500
+#define        DM_DIG_FA_TH1                   750
+
+/*@LPS*/
+#define        DM_DIG_FA_TH0_LPS               4       /* @-> 4 lps */
+#define        DM_DIG_FA_TH1_LPS               15      /* @-> 15 lps */
+#define        DM_DIG_FA_TH2_LPS               30      /* @-> 30 lps */
+
+#define        RSSI_OFFSET_DIG_LPS             5
+#define DIG_RECORD_NUM                 4
+
+/*@--------------------Enum-----------------------------------*/
+enum dig_goupcheck_level {
+       DIG_GOUPCHECK_LEVEL_0,
+       DIG_GOUPCHECK_LEVEL_1,
+       DIG_GOUPCHECK_LEVEL_2
+};
+
+enum phydm_dig_mode {
+       PHYDM_DIG_PERFORAMNCE_MODE      = 0,
+       PHYDM_DIG_COVERAGE_MODE         = 1,
+};
+
+#ifdef IS_USE_NEW_TDMA
+enum tdma_dig_timer {
+       INIT_TDMA_DIG_TIMMER,
+       CANCEL_TDMA_DIG_TIMMER,
+       RELEASE_TDMA_DIG_TIMMER
+};
+
+enum tdma_dig_state {
+       TDMA_DIG_LOW_STATE = 0,
+       TDMA_DIG_HIGH_STATE = 1,
+       NORMAL_DIG = 2
+};
+#endif
+
+/*@--------------------Define Struct-----------------------------------*/
+#ifdef CFG_DIG_DAMPING_CHK
+struct phydm_dig_recorder_strcut {
+       u8              igi_bitmap; /*@Don't add any new parameter before this*/
+       u8              igi_history[DIG_RECORD_NUM];
+       u32             fa_history[DIG_RECORD_NUM];
+       u8              damping_limit_en;
+       u8              damping_limit_val; /*@Limit IGI_dyn_min*/
+       u32             limit_time;
+       u8              limit_rssi;
+};
+#endif
+
+struct phydm_mcc_dig {
+       u8              mcc_rssi_A;
+       u8              mcc_rssi_B;
+};
+
+struct phydm_dig_struct {
+#ifdef CFG_DIG_DAMPING_CHK
+       struct phydm_dig_recorder_strcut dig_recorder_t;
+       u8              dig_dl_en; /*@damping limit function enable*/
+#endif
+       boolean         is_dbg_fa_th;
+       u8              cur_ig_value;
+       u8              rvrt_val;
+       u8              igi_backup;
+       u8              rx_gain_range_max;      /*@dig_dynamic_max*/
+       u8              rx_gain_range_min;      /*@dig_dynamic_min*/
+       u8              dm_dig_max;             /*@Absolutly upper bound*/
+       u8              dm_dig_min;             /*@Absolutly lower bound*/
+       u8              dig_max_of_min;         /*@Absolutly max of min*/
+       boolean         is_media_connect;
+       u32             ant_div_rssi_max;
+       u8              *is_p2p_in_process;
+       enum dig_goupcheck_level        go_up_chk_lv;
+       u16             fa_th[3];
+#if (RTL8822B_SUPPORT || RTL8197F_SUPPORT || RTL8821C_SUPPORT ||\
+       RTL8198F_SUPPORT || RTL8192F_SUPPORT || RTL8195B_SUPPORT ||\
+       RTL8822C_SUPPORT || RTL8814B_SUPPORT)
+       u8              rf_gain_idx;
+       u8              agc_table_idx;
+       u8              big_jump_lmt[16];
+       u8              enable_adjust_big_jump:1;
+       u8              big_jump_step1:3;
+       u8              big_jump_step2:2;
+       u8              big_jump_step3:2;
+#endif
+       u8              upcheck_init_val;
+       u8              lv0_ratio_reciprocal;
+       u8              lv1_ratio_reciprocal;
+#ifdef PHYDM_TDMA_DIG_SUPPORT
+       u8              cur_ig_value_tdma;
+       u8              low_ig_value;
+       u8              tdma_dig_state; /*@To distinguish which state is now.(L-sate or H-state)*/
+       u8              tdma_dig_cnt;   /*@for phydm_tdma_dig_timer_check use*/
+       u8              pre_tdma_dig_cnt;
+       u8              sec_factor;
+       u32             cur_timestamp;
+       u32             pre_timestamp;
+       u32             fa_start_timestamp;
+       u32             fa_end_timestamp;
+       u32             fa_acc_1sec_timestamp;
+#ifdef IS_USE_NEW_TDMA
+       u8              tdma_dig_block_cnt;/*@for 1 second dump indicator use*/
+                       /*@dynamic upper bound for L/H state*/
+       u8              tdma_rx_gain_max[DIG_NUM_OF_TDMA_STATES];
+                       /*@dynamic lower bound for L/H state*/
+       u8              tdma_rx_gain_min[DIG_NUM_OF_TDMA_STATES];
+                       /*To distinguish current state(L-sate or H-state)*/
+#endif
+#endif
+};
+
+struct phydm_fa_struct {
+       u32             cnt_parity_fail;
+       u32             cnt_rate_illegal;
+       u32             cnt_crc8_fail;
+       u32             cnt_crc8_fail_vht;
+       u32             cnt_mcs_fail;
+       u32             cnt_mcs_fail_vht;
+       u32             cnt_ofdm_fail;
+       u32             cnt_ofdm_fail_pre;      /* @For RTL8881A */
+       u32             cnt_cck_fail;
+       u32             cnt_all;
+       u32             cnt_all_pre;
+       u32             cnt_fast_fsync;
+       u32             cnt_sb_search_fail;
+       u32             cnt_ofdm_cca;
+       u32             cnt_cck_cca;
+       u32             cnt_cca_all;
+       u32             cnt_bw_usc;
+       u32             cnt_bw_lsc;
+       u32             cnt_cck_crc32_error;
+       u32             cnt_cck_crc32_ok;
+       u32             cnt_ofdm_crc32_error;
+       u32             cnt_ofdm_crc32_ok;
+       u32             cnt_ht_crc32_error;
+       u32             cnt_ht_crc32_ok;
+       u32             cnt_ht_crc32_error_agg;
+       u32             cnt_ht_crc32_ok_agg;
+       u32             cnt_vht_crc32_error;
+       u32             cnt_vht_crc32_ok;
+       u32             cnt_crc32_error_all;
+       u32             cnt_crc32_ok_all;
+       u32             time_fa_all;
+       boolean         cck_block_enable;
+       boolean         ofdm_block_enable;
+       u32             dbg_port0;
+       boolean         edcca_flag;
+};
+
+#ifdef PHYDM_TDMA_DIG_SUPPORT
+struct phydm_fa_acc_struct {
+       u32             cnt_parity_fail;
+       u32             cnt_rate_illegal;
+       u32             cnt_crc8_fail;
+       u32             cnt_mcs_fail;
+       u32             cnt_ofdm_fail;
+       u32             cnt_ofdm_fail_pre;      /*@For RTL8881A*/
+       u32             cnt_cck_fail;
+       u32             cnt_all;
+       u32             cnt_all_pre;
+       u32             cnt_fast_fsync;
+       u32             cnt_sb_search_fail;
+       u32             cnt_ofdm_cca;
+       u32             cnt_cck_cca;
+       u32             cnt_cca_all;
+       u32             cnt_cck_crc32_error;
+       u32             cnt_cck_crc32_ok;
+       u32             cnt_ofdm_crc32_error;
+       u32             cnt_ofdm_crc32_ok;
+       u32             cnt_ht_crc32_error;
+       u32             cnt_ht_crc32_ok;
+       u32             cnt_vht_crc32_error;
+       u32             cnt_vht_crc32_ok;
+       u32             cnt_crc32_error_all;
+       u32             cnt_crc32_ok_all;
+       u32             cnt_all_1sec;
+       u32             cnt_cca_all_1sec;
+       u32             cnt_cck_fail_1sec;
+};
+
+#endif /*@#ifdef PHYDM_TDMA_DIG_SUPPORT*/
+
+/*@--------------------Function declaration-----------------------------*/
+void odm_write_dig(void *dm_void, u8 current_igi);
+
+u8 phydm_get_igi(void *dm_void, enum bb_path path);
+
+void phydm_set_dig_val(void *dm_void, u32 *val_buf, u8 val_len);
+
+void odm_pause_dig(void *dm_void, enum phydm_pause_type pause_type,
+                  enum phydm_pause_level pause_level, u8 igi_value);
+
+void phydm_dig_init(void *dm_void);
+
+void phydm_dig(void *dm_void);
+
+void phydm_dig_lps_32k(void *dm_void);
+
+void phydm_dig_by_rssi_lps(void *dm_void);
+
+void phydm_false_alarm_counter_statistics(void *dm_void);
+
+#ifdef PHYDM_TDMA_DIG_SUPPORT
+void phydm_set_tdma_dig_timer(void *dm_void);
+
+void phydm_tdma_dig_timer_check(void *dm_void);
+
+void phydm_tdma_dig(void *dm_void);
+
+void phydm_tdma_false_alarm_counter_check(void *dm_void);
+
+void phydm_tdma_dig_add_interrupt_mask_handler(void *dm_void);
+
+void phydm_false_alarm_counter_reset(void *dm_void);
+
+void phydm_false_alarm_counter_acc(void *dm_void, boolean rssi_dump_en);
+
+void phydm_false_alarm_counter_acc_reset(void *dm_void);
+
+#ifdef IS_USE_NEW_TDMA
+void phydm_tdma_dig_timers(void *dm_void, u8 state);
+
+void phydm_tdma_dig_cbk(void *dm_void);
+
+void phydm_tdma_fa_cnt_chk(void *dm_void);
+
+void phydm_tdma_low_dig(void *dm_void);
+
+void phydm_tdma_high_dig(void *dm_void);
+
+void phydm_fa_cnt_acc(void *dm_void, boolean rssi_dump_en,
+                     u8 cur_tdma_dig_state);
+#endif /*@#ifdef IS_USE_NEW_TDMA*/
+#endif /*@#ifdef PHYDM_TDMA_DIG_SUPPORT*/
+
+void phydm_set_ofdm_agc_tab(void *dm_void, u8 tab_sel);
+
+void phydm_dig_debug(void *dm_void, char input[][16], u32 *_used, char *output,
+                    u32 *_out_len);
+
+#ifdef CONFIG_MCC_DM
+void phydm_mcc_igi_cal(void *dm_void);
+#endif
+
+
+#endif