--- /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_INTERFACE_H__\r
+#define __ODM_INTERFACE_H__\r
+\r
+#define INTERFACE_VERSION "1.1" /*2015.07.29 YuChen*/\r
+\r
+//\r
+// =========== Constant/Structure/Enum/... Define\r
+//\r
+\r
+\r
+\r
+//\r
+// =========== Macro Define\r
+//\r
+\r
+#define _reg_all(_name) ODM_##_name\r
+#define _reg_ic(_name, _ic) ODM_##_name##_ic\r
+#define _bit_all(_name) BIT_##_name\r
+#define _bit_ic(_name, _ic) BIT_##_name##_ic\r
+\r
+// _cat: implemented by Token-Pasting Operator.\r
+#if 0\r
+#define _cat(_name, _ic_type, _func) \\r
+ ( \\r
+ _func##_all(_name) \\r
+ )\r
+#endif\r
+\r
+/*===================================\r
+\r
+#define ODM_REG_DIG_11N 0xC50\r
+#define ODM_REG_DIG_11AC 0xDDD\r
+\r
+ODM_REG(DIG,_pDM_Odm)\r
+=====================================*/\r
+\r
+#define _reg_11N(_name) ODM_REG_##_name##_11N \r
+#define _reg_11AC(_name) ODM_REG_##_name##_11AC\r
+#define _bit_11N(_name) ODM_BIT_##_name##_11N \r
+#define _bit_11AC(_name) ODM_BIT_##_name##_11AC\r
+\r
+#ifdef __ECOS\r
+#define _rtk_cat(_name, _ic_type, _func) \\r
+ ( \\r
+ ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \\r
+ _func##_11AC(_name) \\r
+ )\r
+#else\r
+\r
+#define _cat(_name, _ic_type, _func) \\r
+ ( \\r
+ ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \\r
+ _func##_11AC(_name) \\r
+ )\r
+#endif\r
+/* \r
+// only sample code\r
+//#define _cat(_name, _ic_type, _func) \\r
+// ( \\r
+// ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \\r
+// _func##_ic(_name, _8195) \\r
+// )\r
+*/\r
+\r
+// _name: name of register or bit.\r
+// Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" \r
+// gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.\r
+#ifdef __ECOS\r
+#define ODM_REG(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _reg)\r
+#define ODM_BIT(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _bit)\r
+#else\r
+#define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg)\r
+#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit)\r
+#endif\r
+typedef enum _PHYDM_H2C_CMD {\r
+ ODM_H2C_RSSI_REPORT = 0,\r
+ ODM_H2C_PSD_RESULT = 1, \r
+ ODM_H2C_PathDiv = 2,\r
+ ODM_H2C_WIFI_CALIBRATION = 3,\r
+ ODM_H2C_IQ_CALIBRATION = 4,\r
+ ODM_H2C_RA_PARA_ADJUST = 5,\r
+ PHYDM_H2C_DYNAMIC_TX_PATH = 6,\r
+ PHYDM_H2C_FW_TRACE_EN = 7,\r
+ PHYDM_H2C_TXBF = 8,\r
+ PHYDM_H2C_MU = 9,\r
+ ODM_MAX_H2CCMD\r
+}PHYDM_H2C_CMD;\r
+\r
+typedef enum _PHYDM_C2H_EVT {\r
+ PHYDM_C2H_DBG = 0,\r
+ PHYDM_C2H_LB = 1,\r
+ PHYDM_C2H_XBF = 2,\r
+ PHYDM_C2H_TX_REPORT = 3,\r
+ PHYDM_C2H_INFO = 9,\r
+ PHYDM_C2H_BT_MP = 11,\r
+ PHYDM_C2H_RA_RPT = 12,\r
+ PHYDM_C2H_RA_PARA_RPT=14,\r
+ PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,\r
+ PHYDM_C2H_IQK_FINISH = 17, /*0x11*/\r
+ PHYDM_C2H_DBG_CODE = 0xFE,\r
+ PHYDM_C2H_EXTEND = 0xFF,\r
+}PHYDM_C2H_EVT;\r
+\r
+typedef enum _PHYDM_EXTEND_C2H_EVT {\r
+ PHYDM_EXTEND_C2H_DBG_PRINT = 0\r
+\r
+}PHYDM_EXTEND_C2H_EVT;\r
+\r
+\r
+//\r
+// 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.\r
+// Suggest HW team to use thread instead of workitem. Windows also support the feature.\r
+//\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
+typedef void *PRT_WORK_ITEM ;\r
+typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;\r
+typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);\r
+\r
+#if 0\r
+typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;\r
+\r
+typedef struct _RT_WORK_ITEM\r
+{\r
+ \r
+ RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.\r
+ PVOID Adapter; // Pointer to Adapter object.\r
+ PVOID pContext; // Parameter to passed to CallBackFunc(). \r
+ RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.\r
+ u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. \r
+ PVOID pPlatformExt; // Pointer to platform-dependent extension. \r
+ BOOLEAN bFree;\r
+ char szID[36]; // An identity string of this workitem.\r
+}RT_WORK_ITEM, *PRT_WORK_ITEM;\r
+\r
+#endif\r
+\r
+\r
+#endif\r
+\r
+//\r
+// =========== Extern Variable ??? It should be forbidden.\r
+//\r
+\r
+\r
+//\r
+// =========== EXtern Function Prototype\r
+//\r
+\r
+\r
+u1Byte\r
+ODM_Read1Byte(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr\r
+ );\r
+\r
+u2Byte\r
+ODM_Read2Byte(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr\r
+ );\r
+\r
+u4Byte\r
+ODM_Read4Byte(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr\r
+ );\r
+\r
+VOID\r
+ODM_Write1Byte(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u1Byte Data\r
+ );\r
+\r
+VOID\r
+ODM_Write2Byte(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u2Byte Data\r
+ );\r
+\r
+VOID\r
+ODM_Write4Byte(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte Data\r
+ );\r
+\r
+VOID\r
+ODM_SetMACReg( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte BitMask,\r
+ IN u4Byte Data\r
+ );\r
+\r
+u4Byte \r
+ODM_GetMACReg( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte BitMask\r
+ );\r
+\r
+VOID\r
+ODM_SetBBReg( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte BitMask,\r
+ IN u4Byte Data\r
+ );\r
+\r
+u4Byte \r
+ODM_GetBBReg( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte BitMask\r
+ );\r
+\r
+VOID\r
+ODM_SetRFReg( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN ODM_RF_RADIO_PATH_E eRFPath,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte BitMask,\r
+ IN u4Byte Data\r
+ );\r
+\r
+u4Byte \r
+ODM_GetRFReg( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN ODM_RF_RADIO_PATH_E eRFPath,\r
+ IN u4Byte RegAddr,\r
+ IN u4Byte BitMask\r
+ );\r
+\r
+\r
+//\r
+// Memory Relative Function.\r
+//\r
+VOID\r
+ODM_AllocateMemory( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ OUT PVOID *pPtr,\r
+ IN u4Byte length\r
+ );\r
+VOID\r
+ODM_FreeMemory( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ OUT PVOID pPtr,\r
+ IN u4Byte length\r
+ );\r
+\r
+VOID\r
+ODM_MoveMemory( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ OUT PVOID pDest,\r
+ IN PVOID pSrc,\r
+ IN u4Byte Length\r
+ );\r
+\r
+s4Byte ODM_CompareMemory(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN PVOID pBuf1,\r
+ IN PVOID pBuf2,\r
+ IN u4Byte length\r
+ );\r
+\r
+void ODM_Memory_Set\r
+ (IN PDM_ODM_T pDM_Odm,\r
+ IN PVOID pbuf,\r
+ IN s1Byte value,\r
+ IN u4Byte length);\r
+ \r
+//\r
+// ODM MISC-spin lock relative API.\r
+//\r
+VOID\r
+ODM_AcquireSpinLock( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN RT_SPINLOCK_TYPE type\r
+ );\r
+\r
+VOID\r
+ODM_ReleaseSpinLock( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN RT_SPINLOCK_TYPE type\r
+ );\r
+\r
+\r
+//\r
+// ODM MISC-workitem relative API.\r
+//\r
+VOID\r
+ODM_InitializeWorkItem( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN PRT_WORK_ITEM pRtWorkItem,\r
+ IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,\r
+ IN PVOID pContext,\r
+ IN const char* szID\r
+ );\r
+\r
+VOID\r
+ODM_StartWorkItem( \r
+ IN PRT_WORK_ITEM pRtWorkItem\r
+ );\r
+\r
+VOID\r
+ODM_StopWorkItem( \r
+ IN PRT_WORK_ITEM pRtWorkItem\r
+ );\r
+\r
+VOID\r
+ODM_FreeWorkItem( \r
+ IN PRT_WORK_ITEM pRtWorkItem\r
+ );\r
+\r
+VOID\r
+ODM_ScheduleWorkItem( \r
+ IN PRT_WORK_ITEM pRtWorkItem\r
+ );\r
+\r
+VOID\r
+ODM_IsWorkItemScheduled( \r
+ IN PRT_WORK_ITEM pRtWorkItem\r
+ );\r
+\r
+//\r
+// ODM Timer relative API.\r
+//\r
+VOID\r
+ODM_StallExecution( \r
+ IN u4Byte usDelay\r
+ );\r
+\r
+VOID\r
+ODM_delay_ms(IN u4Byte ms);\r
+\r
+\r
+\r
+VOID\r
+ODM_delay_us(IN u4Byte us);\r
+\r
+VOID\r
+ODM_sleep_ms(IN u4Byte ms);\r
+\r
+VOID\r
+ODM_sleep_us(IN u4Byte us);\r
+\r
+VOID\r
+ODM_SetTimer( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN PRT_TIMER pTimer, \r
+ IN u4Byte msDelay\r
+ );\r
+\r
+VOID\r
+ODM_InitializeTimer(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN PRT_TIMER pTimer, \r
+ IN RT_TIMER_CALL_BACK CallBackFunc, \r
+ IN PVOID pContext,\r
+ IN const char* szID\r
+ );\r
+\r
+VOID\r
+ODM_CancelTimer(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN PRT_TIMER pTimer\r
+ );\r
+\r
+VOID\r
+ODM_ReleaseTimer(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN PRT_TIMER pTimer\r
+ );\r
+\r
+//\r
+// ODM FW relative API.\r
+//\r
+VOID\r
+ODM_FillH2CCmd(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u1Byte ElementID,\r
+ IN u4Byte CmdLen,\r
+ IN pu1Byte pCmdBuffer\r
+);\r
+\r
+u1Byte\r
+phydm_c2H_content_parsing(\r
+ IN PVOID pDM_VOID,\r
+ IN u1Byte c2hCmdId,\r
+ IN u1Byte c2hCmdLen,\r
+ IN pu1Byte tmpBuf\r
+);\r
+\r
+u8Byte\r
+ODM_GetCurrentTime( \r
+ IN PDM_ODM_T pDM_Odm\r
+ );\r
+u8Byte\r
+ODM_GetProgressingTime( \r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u8Byte Start_Time\r
+ );\r
+\r
+#endif // __ODM_INTERFACE_H__\r
+\r