| /****************************************************************************** |
| * |
| * 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. |
| * |
| *****************************************************************************/ |
| |
| /* ************************************************************ |
| * include files |
| * ************************************************************ */ |
| |
| #include "mp_precomp.h" |
| #include "phydm_precomp.h" |
| |
| #ifdef PHYDM_AUTO_DEGBUG |
| |
| void |
| phydm_check_hang_reset( |
| void *p_dm_void |
| ) |
| { |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| struct phydm_auto_dbg_struc *p_atd_t = &(p_dm->auto_dbg_table); |
| |
| dbg_print("%s ======>\n", __func__); |
| |
| p_atd_t->dbg_step = 0; |
| p_atd_t->auto_dbg_type = AUTO_DBG_STOP; |
| phydm_pause_dm_watchdog(p_dm, PHYDM_RESUME); |
| p_dm->debug_components &= (~ODM_COMP_API); |
| } |
| |
| #if (ODM_IC_11N_SERIES_SUPPORT == 1) |
| void |
| phydm_auto_check_hang_engine_n( |
| void *p_dm_void |
| ) |
| { |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| struct phydm_auto_dbg_struc *p_atd_t = &(p_dm->auto_dbg_table); |
| struct n_dbgport_803 dbgport_803 = {0}; |
| u32 value32_tmp = 0, value32_tmp_2 = 0; |
| u8 i; |
| u32 curr_dbg_port_val[DBGPORT_CHK_NUM]; |
| u16 curr_ofdm_t_cnt; |
| u16 curr_ofdm_r_cnt; |
| u16 curr_cck_t_cnt; |
| u16 curr_cck_r_cnt; |
| u16 curr_ofdm_crc_error_cnt; |
| u16 curr_cck_crc_error_cnt; |
| u16 diff_ofdm_t_cnt; |
| u16 diff_ofdm_r_cnt; |
| u16 diff_cck_t_cnt; |
| u16 diff_cck_r_cnt; |
| u16 diff_ofdm_crc_error_cnt; |
| u16 diff_cck_crc_error_cnt; |
| u8 rf_mode; |
| |
| |
| if (p_atd_t->auto_dbg_type == AUTO_DBG_STOP) |
| return; |
| |
| if (p_dm->support_ic_type & ODM_IC_11AC_SERIES) { |
| |
| phydm_check_hang_reset(p_dm); |
| return; |
| } |
| |
| if (p_atd_t->dbg_step == 0) { |
| |
| dbg_print("dbg_step=0\n\n"); |
| |
| /*Reset all packet counter*/ |
| odm_set_bb_reg(p_dm, 0xf14, BIT(16), 1); |
| odm_set_bb_reg(p_dm, 0xf14, BIT(16), 0); |
| |
| |
| |
| } else if (p_atd_t->dbg_step == 1) { |
| |
| dbg_print("dbg_step=1\n\n"); |
| |
| /*Check packet counter Register*/ |
| p_atd_t->ofdm_t_cnt = (u16)odm_get_bb_reg(p_dm, 0x9cc, MASKHWORD); |
| p_atd_t->ofdm_r_cnt = (u16)odm_get_bb_reg(p_dm, 0xf94, MASKLWORD); |
| p_atd_t->ofdm_crc_error_cnt = (u16)odm_get_bb_reg(p_dm, 0xf94, MASKHWORD); |
| |
| p_atd_t->cck_t_cnt = (u16)odm_get_bb_reg(p_dm, 0x9d0, MASKHWORD);; |
| p_atd_t->cck_r_cnt = (u16)odm_get_bb_reg(p_dm, 0xfa0, MASKHWORD); |
| p_atd_t->cck_crc_error_cnt = (u16)odm_get_bb_reg(p_dm, 0xf84, 0x3fff); |
| |
| |
| /*Check Debug Port*/ |
| for (i = 0; i < DBGPORT_CHK_NUM; i++) { |
| |
| if (phydm_set_bb_dbg_port(p_dm, BB_DBGPORT_PRIORITY_3, (u32)p_atd_t->dbg_port_table[i])) { |
| p_atd_t->dbg_port_val[i] = phydm_get_bb_dbg_port_value(p_dm); |
| phydm_release_bb_dbg_port(p_dm); |
| } |
| } |
| |
| } else if (p_atd_t->dbg_step == 2) { |
| |
| dbg_print("dbg_step=2\n\n"); |
| |
| /*Check packet counter Register*/ |
| curr_ofdm_t_cnt = (u16)odm_get_bb_reg(p_dm, 0x9cc, MASKHWORD); |
| curr_ofdm_r_cnt = (u16)odm_get_bb_reg(p_dm, 0xf94, MASKLWORD); |
| curr_ofdm_crc_error_cnt = (u16)odm_get_bb_reg(p_dm, 0xf94, MASKHWORD); |
| |
| curr_cck_t_cnt = (u16)odm_get_bb_reg(p_dm, 0x9d0, MASKHWORD);; |
| curr_cck_r_cnt = (u16)odm_get_bb_reg(p_dm, 0xfa0, MASKHWORD); |
| curr_cck_crc_error_cnt = (u16)odm_get_bb_reg(p_dm, 0xf84, 0x3fff); |
| |
| /*Check Debug Port*/ |
| for (i = 0; i < DBGPORT_CHK_NUM; i++) { |
| |
| if (phydm_set_bb_dbg_port(p_dm, BB_DBGPORT_PRIORITY_3, (u32)p_atd_t->dbg_port_table[i])) { |
| curr_dbg_port_val[i] = phydm_get_bb_dbg_port_value(p_dm); |
| phydm_release_bb_dbg_port(p_dm); |
| } |
| } |
| |
| /*=== Make check hang decision ================================*/ |
| dbg_print("Check Hang Decision\n\n"); |
| |
| /* ----- Check RF Register -----------------------------------*/ |
| for (i = 0; i < p_dm->num_rf_path; i++) { |
| |
| rf_mode = (u8)odm_get_rf_reg(p_dm, i, 0x0, 0xf0000); |
| |
| dbg_print("RF0x0[%d] = 0x%x\n", i, rf_mode); |
| |
| if (rf_mode > 3) { |
| dbg_print("Incorrect RF mode\n"); |
| dbg_print("ReasonCode:RHN-1\n"); |
| |
| |
| } |
| } |
| |
| value32_tmp = odm_get_rf_reg(p_dm, 0, 0xb0, 0xf0000); |
| |
| if (p_dm->support_ic_type == ODM_RTL8188E) { |
| if (value32_tmp != 0xff8c8) { |
| dbg_print("ReasonCode:RHN-3\n"); |
| } |
| } |
| |
| /* ----- Check BB Register -----------------------------------*/ |
| |
| /*BB mode table*/ |
| value32_tmp = odm_get_bb_reg(p_dm, 0x824, 0xe); |
| value32_tmp_2 = odm_get_bb_reg(p_dm, 0x82c, 0xe); |
| dbg_print("BB TX mode table {A, B}= {%d, %d}\n", value32_tmp, value32_tmp_2); |
| |
| if ((value32_tmp > 3) || (value32_tmp_2 > 3)) { |
| |
| dbg_print("ReasonCode:RHN-2\n"); |
| } |
| |
| value32_tmp = odm_get_bb_reg(p_dm, 0x824, 0x700000); |
| value32_tmp_2 = odm_get_bb_reg(p_dm, 0x82c, 0x700000); |
| dbg_print("BB RX mode table {A, B}= {%d, %d}\n", value32_tmp, value32_tmp_2); |
| |
| if ((value32_tmp > 3) || (value32_tmp_2 > 3)) { |
| |
| dbg_print("ReasonCode:RHN-2\n"); |
| } |
| |
| |
| /*BB HW Block*/ |
| value32_tmp = odm_get_bb_reg(p_dm, 0x800, MASKDWORD); |
| |
| if (!(value32_tmp & BIT(24))) { |
| dbg_print("Reg0x800[24] = 0, CCK BLK is disabled\n"); |
| dbg_print("ReasonCode: THN-3\n"); |
| } |
| |
| if (!(value32_tmp & BIT(25))) { |
| dbg_print("Reg0x800[24] = 0, OFDM BLK is disabled\n"); |
| dbg_print("ReasonCode:THN-3\n"); |
| } |
| |
| /*BB Continue TX*/ |
| value32_tmp = odm_get_bb_reg(p_dm, 0xd00, 0x70000000); |
| dbg_print("Continue TX=%d\n", value32_tmp); |
| if (value32_tmp != 0) { |
| dbg_print("ReasonCode: THN-4\n"); |
| } |
| |
| |
| /* ----- Check Packet Counter --------------------------------*/ |
| diff_ofdm_t_cnt = curr_ofdm_t_cnt - p_atd_t->ofdm_t_cnt; |
| diff_ofdm_r_cnt = curr_ofdm_r_cnt - p_atd_t->ofdm_r_cnt; |
| diff_ofdm_crc_error_cnt = curr_ofdm_crc_error_cnt - p_atd_t->ofdm_crc_error_cnt; |
| |
| diff_cck_t_cnt = curr_cck_t_cnt - p_atd_t->cck_t_cnt; |
| diff_cck_r_cnt = curr_cck_r_cnt - p_atd_t->cck_r_cnt; |
| diff_cck_crc_error_cnt = curr_cck_crc_error_cnt - p_atd_t->cck_crc_error_cnt; |
| |
| dbg_print("OFDM[t=0~1] {TX, RX, CRC_error} = {%d, %d, %d}\n", |
| p_atd_t->ofdm_t_cnt, p_atd_t->ofdm_r_cnt, p_atd_t->ofdm_crc_error_cnt); |
| dbg_print("OFDM[t=1~2] {TX, RX, CRC_error} = {%d, %d, %d}\n", |
| curr_ofdm_t_cnt, curr_ofdm_r_cnt, curr_ofdm_crc_error_cnt); |
| dbg_print("OFDM_diff {TX, RX, CRC_error} = {%d, %d, %d}\n", |
| diff_ofdm_t_cnt, diff_ofdm_r_cnt, diff_ofdm_crc_error_cnt); |
| |
| dbg_print("CCK[t=0~1] {TX, RX, CRC_error} = {%d, %d, %d}\n", |
| p_atd_t->cck_t_cnt, p_atd_t->cck_r_cnt, p_atd_t->cck_crc_error_cnt); |
| dbg_print("CCK[t=1~2] {TX, RX, CRC_error} = {%d, %d, %d}\n", |
| curr_cck_t_cnt, curr_cck_r_cnt, curr_cck_crc_error_cnt); |
| dbg_print("CCK_diff {TX, RX, CRC_error} = {%d, %d, %d}\n", |
| diff_cck_t_cnt, diff_cck_r_cnt, diff_cck_crc_error_cnt); |
| |
| /* ----- Check Dbg Port --------------------------------*/ |
| |
| for (i = 0; i < DBGPORT_CHK_NUM; i++) { |
| |
| dbg_print("Dbg_port=((0x%x))\n", p_atd_t->dbg_port_table[i]); |
| dbg_print("Val{pre, curr}={0x%x, 0x%x}\n", p_atd_t->dbg_port_val[i], curr_dbg_port_val[i]); |
| |
| if ((p_atd_t->dbg_port_table[i]) == 0) { |
| |
| if (p_atd_t->dbg_port_val[i] == curr_dbg_port_val[i]) { |
| |
| dbg_print("BB state hang\n"); |
| dbg_print("ReasonCode:\n"); |
| } |
| |
| } else if (p_atd_t->dbg_port_table[i] == 0x803) { |
| |
| if (p_atd_t->dbg_port_val[i] == curr_dbg_port_val[i]) { |
| |
| //dbgport_803 = (struct n_dbgport_803 )(p_atd_t->dbg_port_val[i]); |
| |
| odm_move_memory(p_dm, &(dbgport_803), &(p_atd_t->dbg_port_val[i]), sizeof(struct n_dbgport_803)); |
| |
| dbg_print("RSTB{BB, GLB, OFDM}={%d, %d, %d}\n", dbgport_803.bb_rst_b, dbgport_803.glb_rst_b, dbgport_803.ofdm_rst_b); |
| dbg_print("{ofdm_tx_en, cck_tx_en, phy_tx_on}={%d, %d, %d}\n", dbgport_803.ofdm_tx_en, dbgport_803.cck_tx_en, dbgport_803.phy_tx_on); |
| dbg_print("CCA_PP{OFDM, CCK}={%d, %d}\n", dbgport_803.ofdm_cca_pp, dbgport_803.cck_cca_pp); |
| |
| if (dbgport_803.phy_tx_on) |
| dbg_print("Maybe TX Hang\n"); |
| else if (dbgport_803.ofdm_cca_pp || dbgport_803.cck_cca_pp) |
| dbg_print("Maybe RX Hang\n"); |
| } |
| |
| } else if (p_atd_t->dbg_port_table[i] == 0x208) { |
| |
| if ((p_atd_t->dbg_port_val[i] & BIT(30)) && (curr_dbg_port_val[i] & BIT(30))) { |
| |
| dbg_print("EDCCA Pause TX\n"); |
| dbg_print("ReasonCode: THN-2\n"); |
| } |
| |
| } else if (p_atd_t->dbg_port_table[i] == 0xab0) { |
| |
| if (((p_atd_t->dbg_port_val[i] & 0xffffff) == 0) || |
| ((curr_dbg_port_val[i] & 0xffffff) == 0)) { |
| |
| dbg_print("Wrong L-SIG formate\n"); |
| dbg_print("ReasonCode: THN-1\n"); |
| } |
| } |
| } |
| |
| phydm_check_hang_reset(p_dm); |
| } |
| |
| p_atd_t->dbg_step++; |
| |
| } |
| |
| void |
| phydm_bb_auto_check_hang_start_n( |
| void *p_dm_void, |
| u32 *_used, |
| char *output, |
| u32 *_out_len |
| ) |
| { |
| u32 value32 = 0; |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| struct phydm_auto_dbg_struc *p_atd_t = &(p_dm->auto_dbg_table); |
| u32 used = *_used; |
| u32 out_len = *_out_len; |
| |
| if (p_dm->support_ic_type & ODM_IC_11AC_SERIES) |
| return; |
| |
| PHYDM_SNPRINTF((output + used, out_len - used, |
| "PHYDM auto check hang (N-series) is started, Please check the system log\n")); |
| |
| p_dm->debug_components |= ODM_COMP_API; |
| p_atd_t->auto_dbg_type = AUTO_DBG_CHECK_HANG; |
| p_atd_t->dbg_step = 0; |
| |
| |
| phydm_pause_dm_watchdog(p_dm, PHYDM_PAUSE); |
| |
| |
| |
| *_used = used; |
| *_out_len = out_len; |
| } |
| |
| void |
| phydm_bb_rx_hang_info_n( |
| void *p_dm_void, |
| u32 *_used, |
| char *output, |
| u32 *_out_len |
| ) |
| { |
| u32 value32 = 0; |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| u32 used = *_used; |
| u32 out_len = *_out_len; |
| |
| if (p_dm->support_ic_type & ODM_IC_11AC_SERIES) |
| return; |
| |
| PHYDM_SNPRINTF((output + used, out_len - used, "not support now\n")); |
| |
| *_used = used; |
| *_out_len = out_len; |
| } |
| |
| #endif |
| |
| #if (ODM_IC_11AC_SERIES_SUPPORT == 1) |
| void |
| phydm_bb_rx_hang_info_ac( |
| void *p_dm_void, |
| u32 *_used, |
| char *output, |
| u32 *_out_len |
| ) |
| { |
| u32 value32 = 0; |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| u32 used = *_used; |
| u32 out_len = *_out_len; |
| |
| if (p_dm->support_ic_type & ODM_IC_11N_SERIES) |
| return; |
| |
| value32 = odm_get_bb_reg(p_dm, 0xF80, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rptreg of sc/bw/ht/...", value32)); |
| |
| if (p_dm->support_ic_type & ODM_RTL8822B) |
| odm_set_bb_reg(p_dm, 0x198c, BIT(2) | BIT(1) | BIT(0), 7); |
| |
| /* dbg_port = basic state machine */ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x000); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "basic state machine", value32)); |
| } |
| |
| /* dbg_port = state machine */ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x007); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "state machine", value32)); |
| } |
| |
| /* dbg_port = CCA-related*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x204); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "CCA-related", value32)); |
| } |
| |
| |
| /* dbg_port = edcca/rxd*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x278); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "edcca/rxd", value32)); |
| } |
| |
| /* dbg_port = rx_state/mux_state/ADC_MASK_OFDM*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x290); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rx_state/mux_state/ADC_MASK_OFDM", value32)); |
| } |
| |
| /* dbg_port = bf-related*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x2B2); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "bf-related", value32)); |
| } |
| |
| /* dbg_port = bf-related*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0x2B8); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "bf-related", value32)); |
| } |
| |
| /* dbg_port = txon/rxd*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xA03); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "txon/rxd", value32)); |
| } |
| |
| /* dbg_port = l_rate/l_length*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xA0B); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "l_rate/l_length", value32)); |
| } |
| |
| /* dbg_port = rxd/rxd_hit*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xA0D); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rxd/rxd_hit", value32)); |
| } |
| |
| /* dbg_port = dis_cca*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xAA0); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "dis_cca", value32)); |
| } |
| |
| |
| /* dbg_port = tx*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xAB0); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "tx", value32)); |
| } |
| |
| /* dbg_port = rx plcp*/ |
| { |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xAD0); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rx plcp", value32)); |
| |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xAD1); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rx plcp", value32)); |
| |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xAD2); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rx plcp", value32)); |
| |
| odm_set_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD, 0xAD3); |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_DBG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "0x8fc", value32)); |
| |
| value32 = odm_get_bb_reg(p_dm, ODM_REG_RPT_11AC, MASKDWORD); |
| PHYDM_SNPRINTF((output + used, out_len - used, "\r\n %-35s = 0x%x", "rx plcp", value32)); |
| } |
| *_used = used; |
| *_out_len = out_len; |
| } |
| #endif |
| |
| void |
| phydm_auto_dbg_console( |
| void *p_dm_void, |
| char input[][16], |
| u32 *_used, |
| char *output, |
| u32 *_out_len, |
| u32 input_num |
| ) |
| { |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| char help[] = "-h"; |
| u32 var1[10] = {0}; |
| u32 used = *_used; |
| u32 out_len = *_out_len; |
| |
| |
| PHYDM_SSCANF(input[1], DCMD_DECIMAL, &var1[0]); |
| |
| if ((strcmp(input[1], help) == 0)) { |
| PHYDM_SNPRINTF((output + used, out_len - used, "Show dbg port: {1} {1}\n")); |
| PHYDM_SNPRINTF((output + used, out_len - used, "Auto check hang: {1} {2}\n")); |
| return; |
| } else if (var1[0] == 1) { |
| |
| PHYDM_SSCANF(input[2], DCMD_DECIMAL, &var1[1]); |
| |
| if (var1[1] == 1) { |
| if (p_dm->support_ic_type & ODM_IC_11AC_SERIES) { |
| #if (ODM_IC_11AC_SERIES_SUPPORT == 1) |
| phydm_bb_rx_hang_info_ac(p_dm, &used, output, &out_len); |
| #else |
| PHYDM_SNPRINTF((output + used, out_len - used, "Not support\n")); |
| #endif |
| } else { |
| #if (ODM_IC_11N_SERIES_SUPPORT == 1) |
| phydm_bb_rx_hang_info_n(p_dm, &used, output, &out_len); |
| #else |
| PHYDM_SNPRINTF((output + used, out_len - used, "Not support\n")); |
| #endif |
| } |
| } else if (var1[1] == 2) { |
| |
| if (p_dm->support_ic_type & ODM_IC_11AC_SERIES) { |
| PHYDM_SNPRINTF((output + used, out_len - used, "Not support\n")); |
| } else { |
| #if (ODM_IC_11N_SERIES_SUPPORT == 1) |
| phydm_bb_auto_check_hang_start_n(p_dm, &used, output, &out_len); |
| #else |
| PHYDM_SNPRINTF((output + used, out_len - used, "Not support\n")); |
| #endif |
| } |
| } |
| } |
| |
| *_used = used; |
| *_out_len = out_len; |
| } |
| |
| |
| #endif |
| |
| void |
| phydm_auto_dbg_engine( |
| void *p_dm_void |
| ) |
| { |
| #ifdef PHYDM_AUTO_DEGBUG |
| u32 value32 = 0; |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| struct phydm_auto_dbg_struc *p_atd_t = &(p_dm->auto_dbg_table); |
| |
| if (p_atd_t->auto_dbg_type == AUTO_DBG_STOP) |
| return; |
| |
| dbg_print("%s ======>\n", __func__); |
| |
| if (p_atd_t->auto_dbg_type == AUTO_DBG_CHECK_HANG) { |
| |
| if (p_dm->support_ic_type & ODM_IC_11AC_SERIES) { |
| dbg_print("Not Support\n"); |
| } else { |
| #if (ODM_IC_11N_SERIES_SUPPORT == 1) |
| phydm_auto_check_hang_engine_n(p_dm); |
| #else |
| dbg_print("Not Support\n"); |
| #endif |
| } |
| |
| } else if (p_atd_t->auto_dbg_type == AUTO_DBG_CHECK_RA) { |
| |
| dbg_print("Not Support\n"); |
| |
| } |
| #endif |
| } |
| |
| void |
| phydm_auto_dbg_engine_init( |
| void *p_dm_void |
| ) |
| { |
| #ifdef PHYDM_AUTO_DEGBUG |
| struct PHY_DM_STRUCT *p_dm = (struct PHY_DM_STRUCT *)p_dm_void; |
| struct phydm_auto_dbg_struc *p_atd_t = &(p_dm->auto_dbg_table); |
| u16 dbg_port_table[DBGPORT_CHK_NUM] = {0x0, 0x803, 0x208, 0xab0, 0xab1, 0xab2}; |
| |
| PHYDM_DBG(p_dm, ODM_COMP_API, ("%s ======>n", __func__)); |
| |
| odm_move_memory(p_dm, &(p_atd_t->dbg_port_table[0]), &(dbg_port_table[0]), (DBGPORT_CHK_NUM * 2)); |
| |
| phydm_check_hang_reset(p_dm); |
| #endif |
| } |
| |
| |