1 /******************************************************************************
\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
\r
5 * This program is free software; you can redistribute it and/or modify it
\r
6 * under the terms of version 2 of the GNU General Public License as
\r
7 * published by the Free Software Foundation.
\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
\r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
\r
14 * You should have received a copy of the GNU General Public License along with
\r
15 * this program; if not, write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
\r
19 ******************************************************************************/
\r
22 #ifndef __ODM_INTERFACE_H__
\r
23 #define __ODM_INTERFACE_H__
\r
25 #define INTERFACE_VERSION "1.1" /*2015.07.29 YuChen*/
\r
28 // =========== Constant/Structure/Enum/... Define
\r
34 // =========== Macro Define
\r
37 #define _reg_all(_name) ODM_##_name
\r
38 #define _reg_ic(_name, _ic) ODM_##_name##_ic
\r
39 #define _bit_all(_name) BIT_##_name
\r
40 #define _bit_ic(_name, _ic) BIT_##_name##_ic
\r
42 // _cat: implemented by Token-Pasting Operator.
\r
44 #define _cat(_name, _ic_type, _func) \
\r
46 _func##_all(_name) \
\r
50 /*===================================
\r
52 #define ODM_REG_DIG_11N 0xC50
\r
53 #define ODM_REG_DIG_11AC 0xDDD
\r
55 ODM_REG(DIG,_pDM_Odm)
\r
56 =====================================*/
\r
58 #define _reg_11N(_name) ODM_REG_##_name##_11N
\r
59 #define _reg_11AC(_name) ODM_REG_##_name##_11AC
\r
60 #define _bit_11N(_name) ODM_BIT_##_name##_11N
\r
61 #define _bit_11AC(_name) ODM_BIT_##_name##_11AC
\r
64 #define _rtk_cat(_name, _ic_type, _func) \
\r
66 ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \
\r
67 _func##_11AC(_name) \
\r
71 #define _cat(_name, _ic_type, _func) \
\r
73 ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \
\r
74 _func##_11AC(_name) \
\r
79 //#define _cat(_name, _ic_type, _func) \
\r
81 // ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \
\r
82 // _func##_ic(_name, _8195) \
\r
86 // _name: name of register or bit.
\r
87 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)"
\r
88 // gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.
\r
90 #define ODM_REG(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _reg)
\r
91 #define ODM_BIT(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _bit)
\r
93 #define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg)
\r
94 #define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit)
\r
96 typedef enum _PHYDM_H2C_CMD {
\r
97 ODM_H2C_RSSI_REPORT = 0,
\r
98 ODM_H2C_PSD_RESULT = 1,
\r
99 ODM_H2C_PathDiv = 2,
\r
100 ODM_H2C_WIFI_CALIBRATION = 3,
\r
101 ODM_H2C_IQ_CALIBRATION = 4,
\r
102 ODM_H2C_RA_PARA_ADJUST = 5,
\r
103 PHYDM_H2C_DYNAMIC_TX_PATH = 6,
\r
104 PHYDM_H2C_FW_TRACE_EN = 7,
\r
105 PHYDM_H2C_TXBF = 8,
\r
110 typedef enum _PHYDM_C2H_EVT {
\r
114 PHYDM_C2H_TX_REPORT = 3,
\r
115 PHYDM_C2H_INFO = 9,
\r
116 PHYDM_C2H_BT_MP = 11,
\r
117 PHYDM_C2H_RA_RPT = 12,
\r
118 PHYDM_C2H_RA_PARA_RPT=14,
\r
119 PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,
\r
120 PHYDM_C2H_IQK_FINISH = 17, /*0x11*/
\r
121 PHYDM_C2H_DBG_CODE = 0xFE,
\r
122 PHYDM_C2H_EXTEND = 0xFF,
\r
125 typedef enum _PHYDM_EXTEND_C2H_EVT {
\r
126 PHYDM_EXTEND_C2H_DBG_PRINT = 0
\r
128 }PHYDM_EXTEND_C2H_EVT;
\r
132 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
\r
133 // Suggest HW team to use thread instead of workitem. Windows also support the feature.
\r
135 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)
\r
136 typedef void *PRT_WORK_ITEM ;
\r
137 typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
\r
138 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);
\r
141 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;
\r
143 typedef struct _RT_WORK_ITEM
\r
146 RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.
\r
147 PVOID Adapter; // Pointer to Adapter object.
\r
148 PVOID pContext; // Parameter to passed to CallBackFunc().
\r
149 RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.
\r
150 u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled.
\r
151 PVOID pPlatformExt; // Pointer to platform-dependent extension.
\r
153 char szID[36]; // An identity string of this workitem.
\r
154 }RT_WORK_ITEM, *PRT_WORK_ITEM;
\r
162 // =========== Extern Variable ??? It should be forbidden.
\r
167 // =========== EXtern Function Prototype
\r
173 IN PDM_ODM_T pDM_Odm,
\r
179 IN PDM_ODM_T pDM_Odm,
\r
185 IN PDM_ODM_T pDM_Odm,
\r
191 IN PDM_ODM_T pDM_Odm,
\r
198 IN PDM_ODM_T pDM_Odm,
\r
205 IN PDM_ODM_T pDM_Odm,
\r
212 IN PDM_ODM_T pDM_Odm,
\r
220 IN PDM_ODM_T pDM_Odm,
\r
227 IN PDM_ODM_T pDM_Odm,
\r
235 IN PDM_ODM_T pDM_Odm,
\r
242 IN PDM_ODM_T pDM_Odm,
\r
243 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
251 IN PDM_ODM_T pDM_Odm,
\r
252 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
259 // Memory Relative Function.
\r
262 ODM_AllocateMemory(
\r
263 IN PDM_ODM_T pDM_Odm,
\r
269 IN PDM_ODM_T pDM_Odm,
\r
276 IN PDM_ODM_T pDM_Odm,
\r
282 s4Byte ODM_CompareMemory(
\r
283 IN PDM_ODM_T pDM_Odm,
\r
289 void ODM_Memory_Set
\r
290 (IN PDM_ODM_T pDM_Odm,
\r
296 // ODM MISC-spin lock relative API.
\r
299 ODM_AcquireSpinLock(
\r
300 IN PDM_ODM_T pDM_Odm,
\r
301 IN RT_SPINLOCK_TYPE type
\r
305 ODM_ReleaseSpinLock(
\r
306 IN PDM_ODM_T pDM_Odm,
\r
307 IN RT_SPINLOCK_TYPE type
\r
312 // ODM MISC-workitem relative API.
\r
315 ODM_InitializeWorkItem(
\r
316 IN PDM_ODM_T pDM_Odm,
\r
317 IN PRT_WORK_ITEM pRtWorkItem,
\r
318 IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
\r
320 IN const char* szID
\r
324 ODM_StartWorkItem(
\r
325 IN PRT_WORK_ITEM pRtWorkItem
\r
330 IN PRT_WORK_ITEM pRtWorkItem
\r
335 IN PRT_WORK_ITEM pRtWorkItem
\r
339 ODM_ScheduleWorkItem(
\r
340 IN PRT_WORK_ITEM pRtWorkItem
\r
344 ODM_IsWorkItemScheduled(
\r
345 IN PRT_WORK_ITEM pRtWorkItem
\r
349 // ODM Timer relative API.
\r
352 ODM_StallExecution(
\r
357 ODM_delay_ms(IN u4Byte ms);
\r
362 ODM_delay_us(IN u4Byte us);
\r
365 ODM_sleep_ms(IN u4Byte ms);
\r
368 ODM_sleep_us(IN u4Byte us);
\r
372 IN PDM_ODM_T pDM_Odm,
\r
373 IN PRT_TIMER pTimer,
\r
378 ODM_InitializeTimer(
\r
379 IN PDM_ODM_T pDM_Odm,
\r
380 IN PRT_TIMER pTimer,
\r
381 IN RT_TIMER_CALL_BACK CallBackFunc,
\r
383 IN const char* szID
\r
388 IN PDM_ODM_T pDM_Odm,
\r
389 IN PRT_TIMER pTimer
\r
394 IN PDM_ODM_T pDM_Odm,
\r
395 IN PRT_TIMER pTimer
\r
399 // ODM FW relative API.
\r
403 IN PDM_ODM_T pDM_Odm,
\r
404 IN u1Byte ElementID,
\r
406 IN pu1Byte pCmdBuffer
\r
410 phydm_c2H_content_parsing(
\r
412 IN u1Byte c2hCmdId,
\r
413 IN u1Byte c2hCmdLen,
\r
418 ODM_GetCurrentTime(
\r
419 IN PDM_ODM_T pDM_Odm
\r
422 ODM_GetProgressingTime(
\r
423 IN PDM_ODM_T pDM_Odm,
\r
424 IN u8Byte Start_Time
\r
427 #endif // __ODM_INTERFACE_H__
\r