Path: blob/master/ALFA-W1F1/RTL8814AU/hal/phydm/halrf/halrf_debug.c
1308 views
/******************************************************************************1*2* Copyright(c) 2007 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13* The full GNU General Public License is included in this distribution in the14* file called LICENSE.15*16* Contact Information:17* wlanfae <[email protected]>18* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,19* Hsinchu 300, Taiwan.20*21* Larry Finger <[email protected]>22*23*****************************************************************************/2425/*@************************************************************26* include files27* ************************************************************28*/2930#include "mp_precomp.h"31#include "phydm_precomp.h"3233void halrf_basic_profile(void *dm_void, u32 *_used, char *output, u32 *_out_len)34{35#ifdef CONFIG_PHYDM_DEBUG_FUNCTION36struct dm_struct *dm = (struct dm_struct *)dm_void;37u32 used = *_used;38u32 out_len = *_out_len;39u32 rf_release_ver = 0;4041switch (dm->support_ic_type) {42#if (RTL8814A_SUPPORT)43case ODM_RTL8814A:44rf_release_ver = RF_RELEASE_VERSION_8814A;45break;46#endif4748#if (RTL8821C_SUPPORT)49case ODM_RTL8821C:50rf_release_ver = RF_RELEASE_VERSION_8821C;51break;52#endif5354#if (RTL8822B_SUPPORT)55case ODM_RTL8822B:56rf_release_ver = RF_RELEASE_VERSION_8822B;57break;58#endif5960#if (RTL8822C_SUPPORT)61case ODM_RTL8822C:62rf_release_ver = RF_RELEASE_VERSION_8822C;63break;64#endif6566#if (RTL8814B_SUPPORT)67case ODM_RTL8814B:68rf_release_ver = RF_RELEASE_VERSION_8814B;69break;70#endif7172#if (RTL8812F_SUPPORT)73case ODM_RTL8812F:74rf_release_ver = RF_RELEASE_VERSION_8812F;75break;76#endif7778#if (RTL8198F_SUPPORT)79case ODM_RTL8198F:80rf_release_ver = RF_RELEASE_VERSION_8198F;81break;82#endif8384#if (RTL8197F_SUPPORT)85case ODM_RTL8197F:86rf_release_ver = RF_RELEASE_VERSION_8197F;87break;88#endif8990#if (RTL8192F_SUPPORT)91case ODM_RTL8197F:92rf_release_ver = RF_RELEASE_VERSION_8192F;93break;94#endif9596#if (RTL8710B_SUPPORT)97case ODM_RTL8710B:98rf_release_ver = RF_RELEASE_VERSION_8710B;99break;100#endif101102#if (RTL8195B_SUPPORT)103case ODM_RTL8195B:104rf_release_ver = RF_RELEASE_VERSION_8195B;105break;106#endif107}108109PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %d\n",110"RF Para Release Ver", rf_release_ver);111112/* HAL RF version List */113PDM_SNPF(out_len, used, output + used, out_len - used, "%-35s\n",114"% HAL RF version %");115PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",116"Power Tracking", HALRF_POWRTRACKING_VER);117PDM_SNPF(out_len, used, output + used, out_len - used,118" %-35s: %s %s\n", "IQK",119(dm->fw_offload_ability & PHYDM_RF_IQK_OFFLOAD) ? "FW" :120HALRF_IQK_VER,121(halrf_match_iqk_version(dm_void)) ? "(match)" : "(mismatch)");122123PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",124"LCK", HALRF_LCK_VER);125PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",126"DPK", HALRF_DPK_VER);127PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",128"TSSI", HALRF_TSSI_VER);129PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",130"KFREE", HALRF_KFREE_VER);131PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",132"TX 2G Current Calibration", HALRF_PABIASK_VER);133PDM_SNPF(out_len, used, output + used, out_len - used, " %-35s: %s\n",134"RFK Init. Parameter", HALRF_RFK_INIT_VER);135136*_used = used;137*_out_len = out_len;138#endif139}140141void halrf_debug_trace(void *dm_void, char input[][16], u32 *_used,142char *output, u32 *_out_len)143{144struct dm_struct *dm = (struct dm_struct *)dm_void;145struct _hal_rf_ *rf = &dm->rf_table;146u32 one = 1;147u32 used = *_used;148u32 out_len = *_out_len;149u32 rf_var[10] = {0};150u8 i;151152for (i = 0; i < 5; i++)153if (input[i + 1])154PHYDM_SSCANF(input[i + 2], DCMD_DECIMAL, &rf_var[i]);155156if (rf_var[0] == 100) {157PDM_SNPF(out_len, used, output + used, out_len - used,158"\n[DBG MSG] RF Selection\n");159PDM_SNPF(out_len, used, output + used, out_len - used,160"00. (( %s ))TX_PWR_TRACK\n",161((rf->rf_dbg_comp & DBG_RF_TX_PWR_TRACK) ? ("V") :162(".")));163PDM_SNPF(out_len, used, output + used, out_len - used,164"01. (( %s ))IQK\n",165((rf->rf_dbg_comp & DBG_RF_IQK) ? ("V") : (".")));166PDM_SNPF(out_len, used, output + used, out_len - used,167"02. (( %s ))LCK\n",168((rf->rf_dbg_comp & DBG_RF_LCK) ? ("V") : (".")));169PDM_SNPF(out_len, used, output + used, out_len - used,170"03. (( %s ))DPK\n",171((rf->rf_dbg_comp & DBG_RF_DPK) ? ("V") : (".")));172PDM_SNPF(out_len, used, output + used, out_len - used,173"04. (( %s ))TXGAPK\n",174((rf->rf_dbg_comp & DBG_RF_TXGAPK) ? ("V") : (".")));175PDM_SNPF(out_len, used, output + used, out_len - used,176"29. (( %s ))MP\n",177((rf->rf_dbg_comp & DBG_RF_MP) ? ("V") : (".")));178PDM_SNPF(out_len, used, output + used, out_len - used,179"30. (( %s ))TMP\n",180((rf->rf_dbg_comp & DBG_RF_TMP) ? ("V") : (".")));181PDM_SNPF(out_len, used, output + used, out_len - used,182"31. (( %s ))INIT\n",183((rf->rf_dbg_comp & DBG_RF_INIT) ? ("V") : (".")));184185} else if (rf_var[0] == 101) {186rf->rf_dbg_comp = 0;187PDM_SNPF(out_len, used, output + used, out_len - used,188"Disable all DBG COMP\n");189} else {190if (rf_var[1] == 1) /*enable*/191rf->rf_dbg_comp |= (one << rf_var[0]);192else if (rf_var[1] == 2) /*disable*/193rf->rf_dbg_comp &= ~(one << rf_var[0]);194}195PDM_SNPF(out_len, used, output + used, out_len - used,196"\nCurr-RF_Dbg_Comp = 0x%x\n", rf->rf_dbg_comp);197198*_used = used;199*_out_len = out_len;200}201202struct halrf_command {203char name[16];204u8 id;205};206207enum halrf_CMD_ID {208HALRF_HELP,209HALRF_SUPPORTABILITY,210HALRF_DBG_COMP,211HALRF_PROFILE,212HALRF_IQK_INFO,213HALRF_IQK,214HALRF_IQK_DEBUG,215HALRF_DPK,216#ifdef CONFIG_2G_BAND_SHIFT217HAL_BAND_SHIFT,218#endif219};220221struct halrf_command halrf_cmd_ary[] = {222{"-h", HALRF_HELP},223{"ability", HALRF_SUPPORTABILITY},224{"dbg", HALRF_DBG_COMP},225{"profile", HALRF_PROFILE},226{"iqk_info", HALRF_IQK_INFO},227{"iqk", HALRF_IQK},228{"dpk", HALRF_DPK},229{"iqk_dbg", HALRF_IQK_DEBUG},230#ifdef CONFIG_2G_BAND_SHIFT231{"band_shift", HAL_BAND_SHIFT},232#endif233};234235void halrf_cmd_parser(void *dm_void, char input[][16], u32 *_used, char *output,236u32 *_out_len, u32 input_num)237{238struct dm_struct *dm = (struct dm_struct *)dm_void;239#ifdef CONFIG_PHYDM_DEBUG_FUNCTION240u8 id = 0;241u32 rf_var[10] = {0};242u32 i, input_idx = 0;243u32 halrf_ary_size =244sizeof(halrf_cmd_ary) / sizeof(struct halrf_command);245u32 used = *_used;246u32 out_len = *_out_len;247248/* Parsing Cmd ID */249for (i = 0; i < halrf_ary_size; i++) {250if (strcmp(halrf_cmd_ary[i].name, input[1]) == 0) {251id = halrf_cmd_ary[i].id;252break;253}254}255256if (i == halrf_ary_size) {257PDM_SNPF(out_len, used, output + used, out_len - used,258"RF Cmd not found\n");259return;260}261262switch (id) {263case HALRF_HELP:264PDM_SNPF(out_len, used, output + used, out_len - used,265"RF cmd ==>\n");266267for (i = 0; i < halrf_ary_size - 1; i++) {268PDM_SNPF(out_len, used, output + used, out_len - used,269" %-5d: %s\n", i, halrf_cmd_ary[i + 1].name);270}271break;272case HALRF_SUPPORTABILITY:273halrf_support_ability_debug(dm, &input[0], &used, output,274&out_len);275break;276#ifdef CONFIG_2G_BAND_SHIFT277case HAL_BAND_SHIFT:278halrf_support_band_shift_debug(dm, &input[0], &used, output,279&out_len);280break;281#endif282case HALRF_DBG_COMP:283halrf_debug_trace(dm, &input[0], &used, output, &out_len);284break;285case HALRF_PROFILE:286halrf_basic_profile(dm, &used, output, &out_len);287break;288case HALRF_IQK_INFO:289#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)290halrf_iqk_info_dump(dm, &used, output, &out_len);291#endif292break;293case HALRF_IQK:294PDM_SNPF(out_len, used, output + used, out_len - used,295"TRX IQK Trigger\n");296halrf_iqk_trigger(dm, false);297#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)298halrf_iqk_info_dump(dm, &used, output, &out_len);299#endif300break;301case HALRF_IQK_DEBUG:302303for (i = 0; i < 5; i++) {304if (input[i + 1]) {305PHYDM_SSCANF(input[i + 2], DCMD_HEX,306&rf_var[i]);307input_idx++;308}309}310311if (input_idx >= 1) {312#if (RTL8822B_SUPPORT == 1 || RTL8821C_SUPPORT == 1)313if (dm->support_ic_type & (ODM_RTL8822B | ODM_RTL8821C))314halrf_iqk_debug(dm, (u32 *)rf_var, &used,315output, &out_len);316#endif317}318break;319case HALRF_DPK:320PDM_SNPF(out_len, used, output + used, out_len - used,321"DPK Trigger\n");322halrf_dpk_trigger(dm);323break;324default:325break;326}327328*_used = used;329*_out_len = out_len;330#endif331}332333void halrf_init_debug_setting(void *dm_void)334{335struct dm_struct *dm = (struct dm_struct *)dm_void;336struct _hal_rf_ *rf = &dm->rf_table;337338rf->rf_dbg_comp =339#if DBG340#if 0341/*DBG_RF_TX_PWR_TRACK |*/342/*DBG_RF_IQK | */343/*DBG_RF_LCK | */344/*DBG_RF_DPK | */345/*DBG_RF_DACK | */346/*DBG_RF_TXGAPK | */347/*DBG_RF_MP | */348/*DBG_RF_TMP | */349/*DBG_RF_INIT | */350#endif351#endif3520;353}354355356