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
63 #if 1 //TODO: enable it if we need to support run-time to differentiate between 92C_SERIES and JAGUAR_SERIES.
\r
64 #define _cat(_name, _ic_type, _func) \
\r
66 ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \
\r
67 _func##_11AC(_name) \
\r
70 #if 0 // only sample code
\r
71 #define _cat(_name, _ic_type, _func) \
\r
73 ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C): \
\r
74 ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D): \
\r
75 ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S): \
\r
76 ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A): \
\r
77 ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \
\r
78 _func##_ic(_name, _8195) \
\r
82 // _name: name of register or bit.
\r
83 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)"
\r
84 // gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.
\r
85 #define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg)
\r
86 #define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit)
\r
88 typedef enum _ODM_H2C_CMD
\r
90 ODM_H2C_RSSI_REPORT = 0,
\r
91 ODM_H2C_PSD_RESULT=1,
\r
92 ODM_H2C_PathDiv = 2,
\r
98 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
\r
99 // Suggest HW team to use thread instead of workitem. Windows also support the feature.
\r
101 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)
\r
102 typedef void *PRT_WORK_ITEM ;
\r
103 typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
\r
104 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);
\r
107 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;
\r
109 typedef struct _RT_WORK_ITEM
\r
112 RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.
\r
113 PVOID Adapter; // Pointer to Adapter object.
\r
114 PVOID pContext; // Parameter to passed to CallBackFunc().
\r
115 RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.
\r
116 u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled.
\r
117 PVOID pPlatformExt; // Pointer to platform-dependent extension.
\r
119 char szID[36]; // An identity string of this workitem.
\r
120 }RT_WORK_ITEM, *PRT_WORK_ITEM;
\r
128 // =========== Extern Variable ??? It should be forbidden.
\r
133 // =========== EXtern Function Prototype
\r
139 IN PDM_ODM_T pDM_Odm,
\r
145 IN PDM_ODM_T pDM_Odm,
\r
151 IN PDM_ODM_T pDM_Odm,
\r
157 IN PDM_ODM_T pDM_Odm,
\r
164 IN PDM_ODM_T pDM_Odm,
\r
171 IN PDM_ODM_T pDM_Odm,
\r
178 IN PDM_ODM_T pDM_Odm,
\r
186 IN PDM_ODM_T pDM_Odm,
\r
193 IN PDM_ODM_T pDM_Odm,
\r
201 IN PDM_ODM_T pDM_Odm,
\r
208 IN PDM_ODM_T pDM_Odm,
\r
209 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
217 IN PDM_ODM_T pDM_Odm,
\r
218 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
225 // Memory Relative Function.
\r
228 ODM_AllocateMemory(
\r
229 IN PDM_ODM_T pDM_Odm,
\r
235 IN PDM_ODM_T pDM_Odm,
\r
242 IN PDM_ODM_T pDM_Odm,
\r
248 s4Byte ODM_CompareMemory(
\r
249 IN PDM_ODM_T pDM_Odm,
\r
256 // ODM MISC-spin lock relative API.
\r
259 ODM_AcquireSpinLock(
\r
260 IN PDM_ODM_T pDM_Odm,
\r
261 IN RT_SPINLOCK_TYPE type
\r
265 ODM_ReleaseSpinLock(
\r
266 IN PDM_ODM_T pDM_Odm,
\r
267 IN RT_SPINLOCK_TYPE type
\r
272 // ODM MISC-workitem relative API.
\r
275 ODM_InitializeWorkItem(
\r
276 IN PDM_ODM_T pDM_Odm,
\r
277 IN PRT_WORK_ITEM pRtWorkItem,
\r
278 IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
\r
280 IN const char* szID
\r
284 ODM_StartWorkItem(
\r
285 IN PRT_WORK_ITEM pRtWorkItem
\r
290 IN PRT_WORK_ITEM pRtWorkItem
\r
295 IN PRT_WORK_ITEM pRtWorkItem
\r
299 ODM_ScheduleWorkItem(
\r
300 IN PRT_WORK_ITEM pRtWorkItem
\r
304 ODM_IsWorkItemScheduled(
\r
305 IN PRT_WORK_ITEM pRtWorkItem
\r
309 // ODM Timer relative API.
\r
312 ODM_StallExecution(
\r
317 ODM_delay_ms(IN u4Byte ms);
\r
322 ODM_delay_us(IN u4Byte us);
\r
325 ODM_sleep_ms(IN u4Byte ms);
\r
328 ODM_sleep_us(IN u4Byte us);
\r
332 IN PDM_ODM_T pDM_Odm,
\r
333 IN PRT_TIMER pTimer,
\r
338 ODM_InitializeTimer(
\r
339 IN PDM_ODM_T pDM_Odm,
\r
340 IN PRT_TIMER pTimer,
\r
341 IN RT_TIMER_CALL_BACK CallBackFunc,
\r
343 IN const char* szID
\r
348 IN PDM_ODM_T pDM_Odm,
\r
349 IN PRT_TIMER pTimer
\r
354 IN PDM_ODM_T pDM_Odm,
\r
355 IN PRT_TIMER pTimer
\r
360 // ODM FW relative API.
\r
362 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
365 IN PADAPTER Adapter,
\r
366 IN u1Byte ElementID,
\r
368 IN pu1Byte pCmdBuffer
\r
373 IN pu1Byte pH2CBuffer,
\r
374 IN u4Byte H2CBufferLen,
\r
376 IN pu4Byte pElementID,
\r
377 IN pu4Byte pCmdLen,
\r
378 IN pu1Byte* pCmbBuffer,
\r
379 IN pu1Byte CmdStartSeq
\r
384 ODM_GetCurrentTime(
\r
385 IN PDM_ODM_T pDM_Odm
\r
388 ODM_GetProgressingTime(
\r
389 IN PDM_ODM_T pDM_Odm,
\r
390 IN u4Byte Start_Time
\r
393 #endif // __ODM_INTERFACE_H__
\r