--- /dev/null
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
+ * \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+\r
+\r
+#ifndef __ODM_DBG_H__\r
+#define __ODM_DBG_H__\r
+\r
+#define DEBUG_VERSION "1.0" /*2015.01.13 Dino*/\r
+//-----------------------------------------------------------------------------\r
+// Define the debug levels\r
+//\r
+// 1. DBG_TRACE and DBG_LOUD are used for normal cases.\r
+// So that, they can help SW engineer to develope or trace states changed \r
+// and also help HW enginner to trace every operation to and from HW, \r
+// e.g IO, Tx, Rx. \r
+//\r
+// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, \r
+// which help us to debug SW or HW.\r
+//\r
+//-----------------------------------------------------------------------------\r
+//\r
+// Never used in a call to ODM_RT_TRACE()!\r
+//\r
+#define ODM_DBG_OFF 1\r
+\r
+//\r
+// Fatal bug. \r
+// For example, Tx/Rx/IO locked up, OS hangs, memory access violation, \r
+// resource allocation failed, unexpected HW behavior, HW BUG and so on.\r
+//\r
+#define ODM_DBG_SERIOUS 2\r
+\r
+//\r
+// Abnormal, rare, or unexpeted cases.\r
+// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.\r
+//\r
+#define ODM_DBG_WARNING 3\r
+\r
+//\r
+// Normal case with useful information about current SW or HW state. \r
+// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, \r
+// SW protocol state change, dynamic mechanism state change and so on.\r
+//\r
+#define ODM_DBG_LOUD 4\r
+\r
+//\r
+// Normal case with detail execution flow or information.\r
+//\r
+#define ODM_DBG_TRACE 5\r
+\r
+/*FW DBG MSG*/\r
+#define RATE_DECISION BIT0\r
+#define INIT_RA_TABLE BIT1\r
+#define RATE_UP BIT2\r
+#define RATE_DOWN BIT3\r
+#define TRY_DONE BIT4\r
+#define F_RATE_AP_RPT BIT7\r
+\r
+//-----------------------------------------------------------------------------\r
+// Define the tracing components\r
+//\r
+//-----------------------------------------------------------------------------\r
+//BB Functions\r
+#define ODM_COMP_DIG BIT0 \r
+#define ODM_COMP_RA_MASK BIT1 \r
+#define ODM_COMP_DYNAMIC_TXPWR BIT2\r
+#define ODM_COMP_FA_CNT BIT3\r
+#define ODM_COMP_RSSI_MONITOR BIT4\r
+#define ODM_COMP_CCK_PD BIT5\r
+#define ODM_COMP_ANT_DIV BIT6\r
+#define ODM_COMP_PWR_SAVE BIT7\r
+#define ODM_COMP_PWR_TRAIN BIT8\r
+#define ODM_COMP_RATE_ADAPTIVE BIT9\r
+#define ODM_COMP_PATH_DIV BIT10\r
+#define ODM_COMP_PSD BIT11\r
+#define ODM_COMP_DYNAMIC_PRICCA BIT12\r
+#define ODM_COMP_RXHP BIT13\r
+#define ODM_COMP_MP BIT14\r
+#define ODM_COMP_CFO_TRACKING BIT15\r
+#define ODM_COMP_ACS BIT16\r
+#define PHYDM_COMP_ADAPTIVITY BIT17\r
+#define PHYDM_COMP_RA_DBG BIT18\r
+#define PHYDM_COMP_TXBF BIT19\r
+//MAC Functions\r
+#define ODM_COMP_EDCA_TURBO BIT20\r
+#define ODM_COMP_EARLY_MODE BIT21\r
+#define ODM_FW_DEBUG_TRACE BIT22\r
+//RF Functions\r
+#define ODM_COMP_TX_PWR_TRACK BIT24\r
+#define ODM_COMP_RX_GAIN_TRACK BIT25\r
+#define ODM_COMP_CALIBRATION BIT26\r
+//Common Functions\r
+#define ODM_PHY_CONFIG BIT28\r
+#define BEAMFORMING_DEBUG BIT29\r
+#define ODM_COMP_COMMON BIT30\r
+#define ODM_COMP_INIT BIT31\r
+#define ODM_COMP_NOISY_DETECT BIT32\r
+\r
+/*------------------------Export Marco Definition---------------------------*/\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ #define RT_PRINTK DbgPrint\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+ #define DbgPrint printk\r
+ #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);\r
+ #define RT_DISP(dbgtype, dbgflag, printstr)\r
+#else\r
+ #define DbgPrint panic_printk\r
+ #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);\r
+#endif\r
+\r
+#ifndef ASSERT\r
+ #define ASSERT(expr)\r
+#endif\r
+\r
+#if DBG\r
+#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) \\r
+ do { \\r
+ if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel || level == ODM_DBG_SERIOUS)) \\r
+ { \\r
+ if(pDM_Odm->SupportICType == ODM_RTL8192C) \\r
+ DbgPrint("[ODM-92C] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8192D) \\r
+ DbgPrint("[ODM-92D] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8723A) \\r
+ DbgPrint("[ODM-8723A] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8188E) \\r
+ DbgPrint("[ODM-8188E] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8192E) \\r
+ DbgPrint("[ODM-8192E] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8812) \\r
+ DbgPrint("[ODM-8812] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8821) \\r
+ DbgPrint("[ODM-8821] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8814A) \\r
+ DbgPrint("[ODM-8814] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8703B) \\r
+ DbgPrint("[ODM-8703B] "); \\r
+ else if(pDM_Odm->SupportICType == ODM_RTL8822B) \\r
+ DbgPrint("[ODM-8822] "); \\r
+ else if (pDM_Odm->SupportICType == ODM_RTL8188F) \\r
+ DbgPrint("[ODM-8188F] "); \\r
+ RT_PRINTK fmt; \\r
+ } \\r
+ } while (0)\r
+ \r
+#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) \\r
+ if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \\r
+ { \\r
+ RT_PRINTK fmt; \\r
+ }\r
+\r
+#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) \\r
+ if(!(expr)) { \\r
+ DbgPrint( "Assertion failed! %s at ......\n", #expr); \\r
+ DbgPrint( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \\r
+ RT_PRINTK fmt; \\r
+ ASSERT(FALSE); \\r
+ }\r
+#define ODM_dbg_enter() { DbgPrint("==> %s\n", __FUNCTION__); }\r
+#define ODM_dbg_exit() { DbgPrint("<== %s\n", __FUNCTION__); }\r
+#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __FUNCTION__, str); }\r
+\r
+#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) \\r
+ if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \\r
+ { \\r
+ int __i; \\r
+ pu1Byte __ptr = (pu1Byte)ptr; \\r
+ DbgPrint("[ODM] "); \\r
+ DbgPrint(title_str); \\r
+ DbgPrint(" "); \\r
+ for( __i=0; __i<6; __i++ ) \\r
+ DbgPrint("%02X%s", __ptr[__i], (__i==5)?"":"-"); \\r
+ DbgPrint("\n"); \\r
+ }\r
+#else\r
+#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)\r
+#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt)\r
+#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)\r
+#define ODM_dbg_enter()\r
+#define ODM_dbg_exit()\r
+#define ODM_dbg_trace(str)\r
+#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr)\r
+#endif\r
+\r
+\r
+VOID \r
+PHYDM_InitDebugSetting(IN PDM_ODM_T pDM_Odm);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+VOID phydm_BB_RxHang_Info(IN PDM_ODM_T pDM_Odm);\r
+#endif\r
+\r
+#define BB_TMP_BUF_SIZE 100\r
+VOID phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm);\r
+VOID phydm_BasicDbgMessage( IN PVOID pDM_VOID);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#define PHYDM_DBGPRINT 0\r
+#define PHYDM_SSCANF(x, y, z) DCMD_Scanf(x, y, z)\r
+#if (PHYDM_DBGPRINT == 1)\r
+#define PHYDM_SNPRINTF(msg) \\r
+ do {\\r
+ rsprintf msg;\\r
+ DbgPrint(output);\\r
+ } while (0)\r
+#else\r
+#define PHYDM_SNPRINTF(msg) \\r
+ do {\\r
+ rsprintf msg;\\r
+ DCMD_Printf(output);\\r
+ } while (0)\r
+#endif\r
+#else\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+#define PHYDM_DBGPRINT 0\r
+#else\r
+#define PHYDM_DBGPRINT 1\r
+#endif\r
+#define MAX_ARGC 20\r
+#define MAX_ARGV 16\r
+#define DCMD_DECIMAL "%d"\r
+#define DCMD_CHAR "%c"\r
+#define DCMD_HEX "%x"\r
+\r
+#define PHYDM_SSCANF(x, y, z) sscanf(x, y, z)\r
+#if (PHYDM_DBGPRINT == 1)\r
+#define PHYDM_SNPRINTF(msg)\\r
+ do {\\r
+ snprintf msg;\\r
+ DbgPrint(output);\\r
+ } while (0)\r
+#else\r
+#define PHYDM_SNPRINTF(msg)\\r
+ do {\\r
+ if(out_len > used)\\r
+ used+=snprintf msg;\\r
+ } while (0)\r
+#endif\r
+#endif\r
+\r
+\r
+VOID phydm_BasicProfile(\r
+ IN PVOID pDM_VOID,\r
+ IN u4Byte *_used,\r
+ OUT char *output,\r
+ IN u4Byte *_out_len\r
+ );\r
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP))\r
+s4Byte\r
+phydm_cmd(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN char *input,\r
+ IN u4Byte in_len,\r
+ IN u1Byte flag,\r
+ OUT char *output,\r
+ IN u4Byte out_len\r
+);\r
+#endif\r
+VOID\r
+phydm_cmd_parser(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN char input[][16],\r
+ IN u4Byte input_num,\r
+ IN u1Byte flag,\r
+ OUT char *output,\r
+ IN u4Byte out_len\r
+);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+void phydm_sbd_check(\r
+ IN PDM_ODM_T pDM_Odm\r
+ );\r
+\r
+void phydm_sbd_callback(\r
+ PRT_TIMER pTimer\r
+ );\r
+\r
+void phydm_sbd_workitem_callback(\r
+ IN PVOID pContext\r
+ );\r
+#endif\r
+\r
+VOID\r
+phydm_fw_trace_en_h2c(\r
+ IN PVOID pDM_VOID,\r
+ IN BOOLEAN enable,\r
+ IN u4Byte monitor_mode,\r
+ IN u4Byte macid\r
+);\r
+\r
+VOID\r
+phydm_fw_trace_handler(\r
+ IN PVOID pDM_VOID,\r
+ IN pu1Byte CmdBuf,\r
+ IN u1Byte CmdLen\r
+);\r
+\r
+VOID\r
+phydm_fw_trace_handler_code(\r
+ IN PVOID pDM_VOID,\r
+ IN pu1Byte Buffer,\r
+ IN u1Byte CmdLen\r
+);\r
+\r
+VOID\r
+phydm_fw_trace_handler_8051(\r
+ IN PVOID pDM_VOID,\r
+ IN pu1Byte CmdBuf,\r
+ IN u1Byte CmdLen\r
+);\r
+\r
+#endif // __ODM_DBG_H__\r
+\r