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
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_RTL8192C)? _func##_ic(_name, _8192C): \
\r
82 // ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D): \
\r
83 // ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S): \
\r
84 // ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A): \
\r
85 // ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \
\r
86 // _func##_ic(_name, _8195) \
\r
90 // _name: name of register or bit.
\r
91 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)"
\r
92 // gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.
\r
94 #define ODM_REG(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _reg)
\r
95 #define ODM_BIT(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _bit)
\r
97 #define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg)
\r
98 #define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit)
\r
100 typedef enum _ODM_H2C_CMD
\r
102 ODM_H2C_RSSI_REPORT = 0,
\r
103 ODM_H2C_PSD_RESULT=1,
\r
104 ODM_H2C_PathDiv = 2,
\r
105 ODM_H2C_WIFI_CALIBRATION = 3,
\r
106 ODM_H2C_IQ_CALIBRATION = 4,
\r
112 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
\r
113 // Suggest HW team to use thread instead of workitem. Windows also support the feature.
\r
115 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)
\r
116 typedef void *PRT_WORK_ITEM ;
\r
117 typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
\r
118 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);
\r
121 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;
\r
123 typedef struct _RT_WORK_ITEM
\r
126 RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.
\r
127 PVOID Adapter; // Pointer to Adapter object.
\r
128 PVOID pContext; // Parameter to passed to CallBackFunc().
\r
129 RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.
\r
130 u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled.
\r
131 PVOID pPlatformExt; // Pointer to platform-dependent extension.
\r
133 char szID[36]; // An identity string of this workitem.
\r
134 }RT_WORK_ITEM, *PRT_WORK_ITEM;
\r
142 // =========== Extern Variable ??? It should be forbidden.
\r
147 // =========== EXtern Function Prototype
\r
153 IN PDM_ODM_T pDM_Odm,
\r
159 IN PDM_ODM_T pDM_Odm,
\r
165 IN PDM_ODM_T pDM_Odm,
\r
171 IN PDM_ODM_T pDM_Odm,
\r
178 IN PDM_ODM_T pDM_Odm,
\r
185 IN PDM_ODM_T pDM_Odm,
\r
192 IN PDM_ODM_T pDM_Odm,
\r
200 IN PDM_ODM_T pDM_Odm,
\r
207 IN PDM_ODM_T pDM_Odm,
\r
215 IN PDM_ODM_T pDM_Odm,
\r
222 IN PDM_ODM_T pDM_Odm,
\r
223 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
231 IN PDM_ODM_T pDM_Odm,
\r
232 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
239 // Memory Relative Function.
\r
242 ODM_AllocateMemory(
\r
243 IN PDM_ODM_T pDM_Odm,
\r
249 IN PDM_ODM_T pDM_Odm,
\r
256 IN PDM_ODM_T pDM_Odm,
\r
262 s4Byte ODM_CompareMemory(
\r
263 IN PDM_ODM_T pDM_Odm,
\r
269 void ODM_Memory_Set
\r
270 (IN PDM_ODM_T pDM_Odm,
\r
276 // ODM MISC-spin lock relative API.
\r
279 ODM_AcquireSpinLock(
\r
280 IN PDM_ODM_T pDM_Odm,
\r
281 IN RT_SPINLOCK_TYPE type
\r
285 ODM_ReleaseSpinLock(
\r
286 IN PDM_ODM_T pDM_Odm,
\r
287 IN RT_SPINLOCK_TYPE type
\r
292 // ODM MISC-workitem relative API.
\r
295 ODM_InitializeWorkItem(
\r
296 IN PDM_ODM_T pDM_Odm,
\r
297 IN PRT_WORK_ITEM pRtWorkItem,
\r
298 IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
\r
300 IN const char* szID
\r
304 ODM_StartWorkItem(
\r
305 IN PRT_WORK_ITEM pRtWorkItem
\r
310 IN PRT_WORK_ITEM pRtWorkItem
\r
315 IN PRT_WORK_ITEM pRtWorkItem
\r
319 ODM_ScheduleWorkItem(
\r
320 IN PRT_WORK_ITEM pRtWorkItem
\r
324 ODM_IsWorkItemScheduled(
\r
325 IN PRT_WORK_ITEM pRtWorkItem
\r
329 // ODM Timer relative API.
\r
332 ODM_StallExecution(
\r
337 ODM_delay_ms(IN u4Byte ms);
\r
342 ODM_delay_us(IN u4Byte us);
\r
345 ODM_sleep_ms(IN u4Byte ms);
\r
348 ODM_sleep_us(IN u4Byte us);
\r
352 IN PDM_ODM_T pDM_Odm,
\r
353 IN PRT_TIMER pTimer,
\r
358 ODM_InitializeTimer(
\r
359 IN PDM_ODM_T pDM_Odm,
\r
360 IN PRT_TIMER pTimer,
\r
361 IN RT_TIMER_CALL_BACK CallBackFunc,
\r
363 IN const char* szID
\r
368 IN PDM_ODM_T pDM_Odm,
\r
369 IN PRT_TIMER pTimer
\r
374 IN PDM_ODM_T pDM_Odm,
\r
375 IN PRT_TIMER pTimer
\r
380 // ODM FW relative API.
\r
382 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
385 IN PDM_ODM_T pDM_Odm,
\r
386 IN u1Byte ElementID,
\r
388 IN pu1Byte pCmdBuffer
\r
393 IN pu1Byte pH2CBuffer,
\r
394 IN u4Byte H2CBufferLen,
\r
396 IN pu4Byte pElementID,
\r
397 IN pu4Byte pCmdLen,
\r
398 IN pu1Byte* pCmbBuffer,
\r
399 IN pu1Byte CmdStartSeq
\r
404 ODM_GetCurrentTime(
\r
405 IN PDM_ODM_T pDM_Odm
\r
408 ODM_GetProgressingTime(
\r
409 IN PDM_ODM_T pDM_Odm,
\r
410 IN u8Byte Start_Time
\r
413 #endif // __ODM_INTERFACE_H__
\r