OSDN Git Service

Add rtl8821ce driver version 5.5.2
[android-x86/external-kernel-drivers.git] / rtl8821ce / hal / phydm / halrf / halrf_debug.c
diff --git a/rtl8821ce/hal/phydm/halrf/halrf_debug.c b/rtl8821ce/hal/phydm/halrf/halrf_debug.c
new file mode 100644 (file)
index 0000000..8bd6809
--- /dev/null
@@ -0,0 +1,259 @@
+/******************************************************************************
+ *
+ * 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>
+ *
+ *****************************************************************************/
+
+/* ************************************************************
+ * include files
+ * ************************************************************
+ */
+
+#include "mp_precomp.h"
+#include "phydm_precomp.h"
+
+void halrf_basic_profile(void *dm_void, u32 *_used, char *output, u32 *_out_len)
+{
+#ifdef CONFIG_PHYDM_DEBUG_FUNCTION
+       struct dm_struct *dm = (struct dm_struct *)dm_void;
+       u32 used = *_used;
+       u32 out_len = *_out_len;
+
+       /* HAL RF version List */
+       PDM_SNPF(out_len, used, output + used, out_len - used, "%-35s\n",
+                "% HAL RF version %");
+       PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
+                "Power Tracking", HALRF_POWRTRACKING_VER);
+       PDM_SNPF(out_len, used, output + used, out_len - used,
+                "  %-35s: %s %s\n", "IQK",
+                (dm->fw_offload_ability & PHYDM_RF_IQK_OFFLOAD) ? "FW" :
+                HALRF_IQK_VER,
+                (halrf_match_iqk_version(dm_void)) ? "(match)" : "(mismatch)");
+
+       PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
+                "LCK", HALRF_LCK_VER);
+       PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
+                "DPK", HALRF_DPK_VER);
+       PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
+                "KFREE", HALRF_KFREE_VER);
+       PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
+                "TX 2G Current Calibration", HALRF_PABIASK_VER);
+       PDM_SNPF(out_len, used, output + used, out_len - used, "  %-35s: %s\n",
+                "RFK Init. Parameter", HALRF_RFK_INIT_VER);
+
+       *_used = used;
+       *_out_len = out_len;
+#endif
+}
+
+void halrf_debug_trace(void *dm_void, char input[][16], u32 *_used,
+                      char *output, u32 *_out_len)
+{
+       struct dm_struct *dm = (struct dm_struct *)dm_void;
+       struct _hal_rf_ *rf = &dm->rf_table;
+       u32 one = 1;
+       u32 used = *_used;
+       u32 out_len = *_out_len;
+       u32 rf_var[10] = {0};
+       u8 i;
+
+       for (i = 0; i < 5; i++)
+               if (input[i + 1])
+                       PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &rf_var[i]);
+
+       if (rf_var[0] == 100) {
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "\n[DBG MSG] RF Selection\n");
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "00. (( %s ))TX_PWR_TRACK\n",
+                        ((rf->rf_dbg_comp & DBG_RF_TX_PWR_TRACK) ? ("V") :
+                        (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "01. (( %s ))IQK\n",
+                        ((rf->rf_dbg_comp & DBG_RF_IQK) ? ("V") : (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "02. (( %s ))LCK\n",
+                        ((rf->rf_dbg_comp & DBG_RF_LCK) ? ("V") : (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "03. (( %s ))DPK\n",
+                        ((rf->rf_dbg_comp & DBG_RF_DPK) ? ("V") : (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "04. (( %s ))TXGAPK\n",
+                        ((rf->rf_dbg_comp & DBG_RF_TXGAPK) ? ("V") : (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "29. (( %s ))MP\n",
+                        ((rf->rf_dbg_comp & DBG_RF_MP) ? ("V") : (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "30. (( %s ))TMP\n",
+                        ((rf->rf_dbg_comp & DBG_RF_TMP) ? ("V") : (".")));
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "31. (( %s ))INIT\n",
+                        ((rf->rf_dbg_comp & DBG_RF_INIT) ? ("V") : (".")));
+
+       } else if (rf_var[0] == 101) {
+               rf->rf_dbg_comp = 0;
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "Disable all DBG COMP\n");
+       } else {
+               if (rf_var[1] == 1) /*enable*/
+                       rf->rf_dbg_comp |= (one << rf_var[0]);
+               else if (rf_var[1] == 2) /*disable*/
+                       rf->rf_dbg_comp &= ~(one << rf_var[0]);
+       }
+       PDM_SNPF(out_len, used, output + used, out_len - used,
+                "\nCurr-RF_Dbg_Comp = 0x%x\n", rf->rf_dbg_comp);
+
+       *_used = used;
+       *_out_len = out_len;
+}
+
+struct halrf_command {
+       char name[16];
+       u8 id;
+};
+
+enum halrf_CMD_ID {
+       HALRF_HELP,
+       HALRF_SUPPORTABILITY,
+       HALRF_DBG_COMP,
+       HALRF_PROFILE,
+       HALRF_IQK_INFO,
+       HALRF_IQK,
+       HALRF_IQK_DEBUG,
+};
+
+struct halrf_command halrf_cmd_ary[] = {
+       {"-h", HALRF_HELP},
+       {"ability", HALRF_SUPPORTABILITY},
+       {"dbg", HALRF_DBG_COMP},
+       {"profile", HALRF_PROFILE},
+       {"iqk_info", HALRF_IQK_INFO},
+       {"iqk", HALRF_IQK},
+       {"iqk_dbg", HALRF_IQK_DEBUG},
+};
+
+void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output,
+                     u32 *_out_len, u32 input_num)
+{
+       struct dm_struct *dm = (struct dm_struct *)dm_void;
+#ifdef CONFIG_PHYDM_DEBUG_FUNCTION
+       u8 id = 0;
+       u32 rf_var[10] = {0};
+       u32 i, input_idx = 0;
+       u32 halrf_ary_size =
+                       sizeof(halrf_cmd_ary) / sizeof(struct halrf_command);
+       u32 used = *_used;
+       u32 out_len = *_out_len;
+
+       /* Parsing Cmd ID */
+       for (i = 0; i < halrf_ary_size; i++) {
+               if (strcmp(halrf_cmd_ary[i].name, input[1]) == 0) {
+                       id = halrf_cmd_ary[i].id;
+                       break;
+               }
+       }
+
+       if (i == halrf_ary_size) {
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "RF Cmd not found\n");
+               return;
+       }
+
+       switch (id) {
+       case HALRF_HELP:
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "RF cmd ==>\n");
+
+               for (i = 0; i < halrf_ary_size - 1; i++) {
+                       PDM_SNPF(out_len, used, output + used, out_len - used,
+                                "  %-5d: %s\n", i, halrf_cmd_ary[i + 1].name);
+               }
+               break;
+       case HALRF_SUPPORTABILITY:
+               halrf_support_ability_debug(dm, &input[0], &used, output,
+                                           &out_len);
+               break;
+       case HALRF_DBG_COMP:
+               halrf_debug_trace(dm, &input[0], &used, output, &out_len);
+               break;
+       case HALRF_PROFILE:
+               halrf_basic_profile(dm, &used, output, &out_len);
+               break;
+       case HALRF_IQK_INFO:
+#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
+               halrf_iqk_info_dump(dm, &used, output, &out_len);
+#endif
+               break;
+       case HALRF_IQK:
+               PDM_SNPF(out_len, used, output + used, out_len - used,
+                        "TRX IQK Trigger\n");
+               halrf_iqk_trigger(dm, false);
+#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
+               halrf_iqk_info_dump(dm, &used, output, &out_len);
+#endif
+               break;
+       case HALRF_IQK_DEBUG:
+
+               for (i = 0; i < 5; i++) {
+                       if (input[i + 1]) {
+                               PHYDM_SSCANF(input[i + 2], DCMD_HEX,
+                                            &rf_var[i]);
+                               input_idx++;
+                       }
+               }
+
+               if (input_idx >= 1) {
+#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
+                       if (dm->support_ic_type & (ODM_RTL8822B | ODM_RTL8821C))
+                               halrf_iqk_debug(dm, (u32 *)rf_var, &used,
+                                               output, &out_len);
+#endif
+               }
+               break;
+       default:
+               break;
+       }
+
+       *_used = used;
+       *_out_len = out_len;
+#endif
+}
+
+void halrf_init_debug_setting(void *dm_void)
+{
+       struct dm_struct *dm = (struct dm_struct *)dm_void;
+       struct _hal_rf_ *rf = &dm->rf_table;
+
+       rf->rf_dbg_comp =
+#if DBG
+#if 0
+       /*DBG_RF_TX_PWR_TRACK   |*/
+       /*DBG_RF_IQK            | */
+       /*DBG_RF_LCK            | */
+       /*DBG_RF_DPK            | */
+       /*DBG_RF_TXGAPK         | */
+       /*DBG_RF_TMP            | */
+       /*DBG_RF_INIT           | */
+#endif
+#endif
+       0;
+}