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.0" /*2015.01.13 Dino*/
\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 _PHYDM_H2C_CMD {
\r
101 ODM_H2C_RSSI_REPORT = 0,
\r
102 ODM_H2C_PSD_RESULT = 1,
\r
103 ODM_H2C_PathDiv = 2,
\r
104 ODM_H2C_WIFI_CALIBRATION = 3,
\r
105 ODM_H2C_IQ_CALIBRATION = 4,
\r
106 ODM_H2C_RA_PARA_ADJUST = 5,
\r
107 PHYDM_H2C_DYNAMIC_TX_PATH = 6,
\r
108 PHYDM_H2C_FW_TRACE_EN = 7,
\r
109 PHYDM_H2C_TXBF = 8,
\r
113 typedef enum _PHYDM_C2H_EVT {
\r
117 PHYDM_C2H_TX_REPORT = 3,
\r
118 PHYDM_C2H_INFO = 9,
\r
119 PHYDM_C2H_BT_MP = 11,
\r
120 PHYDM_C2H_RA_RPT = 12,
\r
121 PHYDM_C2H_RA_PARA_RPT = 14,
\r
122 PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,
\r
123 PHYDM_C2H_IQK_FINISH = 17, /*0x11*/
\r
124 PHYDM_C2H_DBG_CODE = 0xFE,
\r
125 PHYDM_C2H_EXTEND = 0xFF,
\r
128 typedef enum _PHYDM_EXTEND_C2H_EVT {
\r
129 PHYDM_EXTEND_C2H_DBG_PRINT = 0
\r
131 } PHYDM_EXTEND_C2H_EVT;
\r
133 typedef enum _PHYDM_ACTING_TYPE {
\r
134 PhyDM_ACTING_AS_IBSS = 0,
\r
135 PhyDM_ACTING_AS_AP = 1
\r
136 } PHYDM_ACTING_TYPE;
\r
140 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
\r
141 // Suggest HW team to use thread instead of workitem. Windows also support the feature.
\r
143 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)
\r
144 typedef void *PRT_WORK_ITEM ;
\r
145 typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
\r
146 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);
\r
149 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;
\r
151 typedef struct _RT_WORK_ITEM
\r
154 RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.
\r
155 PVOID Adapter; // Pointer to Adapter object.
\r
156 PVOID pContext; // Parameter to passed to CallBackFunc().
\r
157 RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.
\r
158 u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled.
\r
159 PVOID pPlatformExt; // Pointer to platform-dependent extension.
\r
161 char szID[36]; // An identity string of this workitem.
\r
162 }RT_WORK_ITEM, *PRT_WORK_ITEM;
\r
170 // =========== Extern Variable ??? It should be forbidden.
\r
175 // =========== EXtern Function Prototype
\r
181 IN PDM_ODM_T pDM_Odm,
\r
187 IN PDM_ODM_T pDM_Odm,
\r
193 IN PDM_ODM_T pDM_Odm,
\r
199 IN PDM_ODM_T pDM_Odm,
\r
206 IN PDM_ODM_T pDM_Odm,
\r
213 IN PDM_ODM_T pDM_Odm,
\r
220 IN PDM_ODM_T pDM_Odm,
\r
228 IN PDM_ODM_T pDM_Odm,
\r
235 IN PDM_ODM_T pDM_Odm,
\r
243 IN PDM_ODM_T pDM_Odm,
\r
250 IN PDM_ODM_T pDM_Odm,
\r
251 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
259 IN PDM_ODM_T pDM_Odm,
\r
260 IN ODM_RF_RADIO_PATH_E eRFPath,
\r
267 // Memory Relative Function.
\r
270 ODM_AllocateMemory(
\r
271 IN PDM_ODM_T pDM_Odm,
\r
277 IN PDM_ODM_T pDM_Odm,
\r
284 IN PDM_ODM_T pDM_Odm,
\r
290 s4Byte ODM_CompareMemory(
\r
291 IN PDM_ODM_T pDM_Odm,
\r
297 void ODM_Memory_Set
\r
298 (IN PDM_ODM_T pDM_Odm,
\r
304 // ODM MISC-spin lock relative API.
\r
307 ODM_AcquireSpinLock(
\r
308 IN PDM_ODM_T pDM_Odm,
\r
309 IN RT_SPINLOCK_TYPE type
\r
313 ODM_ReleaseSpinLock(
\r
314 IN PDM_ODM_T pDM_Odm,
\r
315 IN RT_SPINLOCK_TYPE type
\r
320 // ODM MISC-workitem relative API.
\r
323 ODM_InitializeWorkItem(
\r
324 IN PDM_ODM_T pDM_Odm,
\r
325 IN PRT_WORK_ITEM pRtWorkItem,
\r
326 IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
\r
328 IN const char* szID
\r
332 ODM_StartWorkItem(
\r
333 IN PRT_WORK_ITEM pRtWorkItem
\r
338 IN PRT_WORK_ITEM pRtWorkItem
\r
343 IN PRT_WORK_ITEM pRtWorkItem
\r
347 ODM_ScheduleWorkItem(
\r
348 IN PRT_WORK_ITEM pRtWorkItem
\r
352 ODM_IsWorkItemScheduled(
\r
353 IN PRT_WORK_ITEM pRtWorkItem
\r
357 // ODM Timer relative API.
\r
360 ODM_StallExecution(
\r
365 ODM_delay_ms(IN u4Byte ms);
\r
370 ODM_delay_us(IN u4Byte us);
\r
373 ODM_sleep_ms(IN u4Byte ms);
\r
376 ODM_sleep_us(IN u4Byte us);
\r
380 IN PDM_ODM_T pDM_Odm,
\r
381 IN PRT_TIMER pTimer,
\r
386 ODM_InitializeTimer(
\r
387 IN PDM_ODM_T pDM_Odm,
\r
388 IN PRT_TIMER pTimer,
\r
389 IN RT_TIMER_CALL_BACK CallBackFunc,
\r
391 IN const char* szID
\r
396 IN PDM_ODM_T pDM_Odm,
\r
397 IN PRT_TIMER pTimer
\r
402 IN PDM_ODM_T pDM_Odm,
\r
403 IN PRT_TIMER pTimer
\r
407 phydm_actingDetermine(
\r
408 IN PDM_ODM_T pDM_Odm,
\r
409 IN PHYDM_ACTING_TYPE type
\r
413 // ODM FW relative API.
\r
417 IN PDM_ODM_T pDM_Odm,
\r
418 IN u1Byte ElementID,
\r
420 IN pu1Byte pCmdBuffer
\r
424 phydm_c2H_content_parsing(
\r
426 IN u1Byte c2hCmdId,
\r
427 IN u1Byte c2hCmdLen,
\r
432 ODM_GetCurrentTime(
\r
433 IN PDM_ODM_T pDM_Odm
\r
436 ODM_GetProgressingTime(
\r
437 IN PDM_ODM_T pDM_Odm,
\r
438 IN u8Byte Start_Time
\r
441 #endif // __ODM_INTERFACE_H__
\r