OSDN Git Service

rtl8723au: Replace u1Byte with u8
[android-x86/external-modules-rtl8723au.git] / include / odm_interface.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20
21
22 #ifndef __ODM_INTERFACE_H__
23 #define __ODM_INTERFACE_H__
24
25
26
27 //
28 // =========== Constant/Structure/Enum/... Define
29 //
30
31
32
33 //
34 // =========== Macro Define
35 //
36
37 #define _reg_all(_name)                 ODM_##_name
38 #define _reg_ic(_name, _ic)             ODM_##_name##_ic
39 #define _bit_all(_name)                 BIT_##_name
40 #define _bit_ic(_name, _ic)             BIT_##_name##_ic
41
42 // _cat: implemented by Token-Pasting Operator.
43
44 /*===================================
45
46 #define ODM_REG_DIG_11N         0xC50
47 #define ODM_REG_DIG_11AC        0xDDD
48
49 ODM_REG(DIG,_pDM_Odm)
50 =====================================*/
51
52 #define _reg_11N(_name)                 ODM_REG_##_name##_11N
53 #define _reg_11AC(_name)                ODM_REG_##_name##_11AC
54 #define _bit_11N(_name)                 ODM_BIT_##_name##_11N
55 #define _bit_11AC(_name)                ODM_BIT_##_name##_11AC
56
57 #if 1 //TODO: enable it if we need to support run-time to differentiate between 92C_SERIES and JAGUAR_SERIES.
58 #define _cat(_name, _ic_type, _func)                                                                    \
59         (                                                                                                                       \
60                 ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name):           \
61                 _func##_11AC(_name)                                                                     \
62         )
63 #endif
64
65 // _name: name of register or bit.
66 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)"
67 //        gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.
68 #define ODM_REG(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _reg)
69 #define ODM_BIT(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _bit)
70
71 typedef enum _ODM_H2C_CMD
72 {
73         ODM_H2C_RSSI_REPORT = 0,
74         ODM_H2C_PSD_RESULT=1,
75         ODM_H2C_PathDiv = 2,
76         ODM_MAX_H2CCMD
77 }ODM_H2C_CMD;
78
79
80 //
81 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
82 // Suggest HW team to use thread instead of workitem. Windows also support the feature.
83 //
84 #if (DM_ODM_SUPPORT_TYPE != ODM_MP)
85 typedef  void *PRT_WORK_ITEM ;
86 typedef  void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
87 typedef void (*RT_WORKITEM_CALL_BACK)(struct work_struct * pContext);
88
89 #endif
90
91 //
92 // =========== Extern Variable ??? It should be forbidden.
93 //
94
95
96 //
97 // =========== EXtern Function Prototype
98 //
99
100
101 u8
102 ODM_Read1Byte(
103         PDM_ODM_T               pDM_Odm,
104         u4Byte                  RegAddr
105         );
106
107 u2Byte
108 ODM_Read2Byte(
109         PDM_ODM_T               pDM_Odm,
110         u4Byte                  RegAddr
111         );
112
113 u4Byte
114 ODM_Read4Byte(
115         PDM_ODM_T               pDM_Odm,
116         u4Byte                  RegAddr
117         );
118
119 void
120 ODM_Write1Byte(
121         PDM_ODM_T               pDM_Odm,
122         u4Byte                  RegAddr,
123         u8                      Data
124         );
125
126 void
127 ODM_Write2Byte(
128         PDM_ODM_T               pDM_Odm,
129         u4Byte                  RegAddr,
130         u2Byte                  Data
131         );
132
133 void
134 ODM_Write4Byte(
135         PDM_ODM_T               pDM_Odm,
136         u4Byte                  RegAddr,
137         u4Byte                  Data
138         );
139
140 void
141 ODM_SetMACReg(
142         PDM_ODM_T       pDM_Odm,
143         u4Byte          RegAddr,
144         u4Byte          BitMask,
145         u4Byte          Data
146         );
147
148 u4Byte
149 ODM_GetMACReg(
150         PDM_ODM_T       pDM_Odm,
151         u4Byte          RegAddr,
152         u4Byte          BitMask
153         );
154
155 void
156 ODM_SetBBReg(
157         PDM_ODM_T       pDM_Odm,
158         u4Byte          RegAddr,
159         u4Byte          BitMask,
160         u4Byte          Data
161         );
162
163 u4Byte
164 ODM_GetBBReg(
165         PDM_ODM_T       pDM_Odm,
166         u4Byte          RegAddr,
167         u4Byte          BitMask
168         );
169
170 void
171 ODM_SetRFReg(
172         PDM_ODM_T                               pDM_Odm,
173         ODM_RF_RADIO_PATH_E     eRFPath,
174         u4Byte                                  RegAddr,
175         u4Byte                                  BitMask,
176         u4Byte                                  Data
177         );
178
179 u4Byte
180 ODM_GetRFReg(
181         PDM_ODM_T                               pDM_Odm,
182         ODM_RF_RADIO_PATH_E     eRFPath,
183         u4Byte                                  RegAddr,
184         u4Byte                                  BitMask
185         );
186
187
188 //
189 // Memory Relative Function.
190 //
191 void
192 ODM_AllocateMemory(
193         PDM_ODM_T       pDM_Odm,
194         void *          *pPtr,
195         u4Byte          length
196         );
197 void
198 ODM_FreeMemory(
199         PDM_ODM_T       pDM_Odm,
200         void *          pPtr,
201         u4Byte          length
202         );
203
204 s4Byte ODM_CompareMemory(
205         PDM_ODM_T       pDM_Odm,
206         void *           pBuf1,
207         void *           pBuf2,
208         u4Byte          length
209        );
210
211 //
212 // ODM MISC-spin lock relative API.
213 //
214 void
215 ODM_AcquireSpinLock(
216         PDM_ODM_T                       pDM_Odm,
217         RT_SPINLOCK_TYPE        type
218         );
219
220 void
221 ODM_ReleaseSpinLock(
222         PDM_ODM_T                       pDM_Odm,
223         RT_SPINLOCK_TYPE        type
224         );
225
226
227 //
228 // ODM MISC-workitem relative API.
229 //
230 void
231 ODM_InitializeWorkItem(
232         PDM_ODM_T                                       pDM_Odm,
233         PRT_WORK_ITEM                           pRtWorkItem,
234         RT_WORKITEM_CALL_BACK           RtWorkItemCallback,
235         void *                                          pContext,
236         const char*                                     szID
237         );
238
239 void
240 ODM_StartWorkItem(
241         PRT_WORK_ITEM   pRtWorkItem
242         );
243
244 void
245 ODM_StopWorkItem(
246         PRT_WORK_ITEM   pRtWorkItem
247         );
248
249 void
250 ODM_FreeWorkItem(
251         PRT_WORK_ITEM   pRtWorkItem
252         );
253
254 void
255 ODM_ScheduleWorkItem(
256         PRT_WORK_ITEM   pRtWorkItem
257         );
258
259 void
260 ODM_IsWorkItemScheduled(
261         PRT_WORK_ITEM   pRtWorkItem
262         );
263
264 //
265 // ODM Timer relative API.
266 //
267 void
268 ODM_StallExecution(
269         u4Byte  usDelay
270         );
271
272 void
273 ODM_delay_ms(u4Byte     ms);
274
275
276 void
277 ODM_delay_us(u4Byte     us);
278
279 void
280 ODM_sleep_ms(u4Byte     ms);
281
282 void
283 ODM_sleep_us(u4Byte     us);
284
285 void
286 ODM_SetTimer(
287         PDM_ODM_T               pDM_Odm,
288         PRT_TIMER               pTimer,
289         u4Byte                  msDelay
290         );
291
292 void
293 ODM_InitializeTimer(
294         PDM_ODM_T                       pDM_Odm,
295         PRT_TIMER                       pTimer,
296         RT_TIMER_CALL_BACK      CallBackFunc,
297         void *                          pContext,
298         const char*                     szID
299         );
300
301 void
302 ODM_CancelTimer(
303         PDM_ODM_T               pDM_Odm,
304         PRT_TIMER               pTimer
305         );
306
307 void
308 ODM_ReleaseTimer(
309         PDM_ODM_T               pDM_Odm,
310         PRT_TIMER               pTimer
311         );
312
313
314 //
315 // ODM FW relative API.
316 //
317 #if (DM_ODM_SUPPORT_TYPE & ODM_MP)
318 void
319 ODM_FillH2CCmd(
320         PADAPTER                Adapter,
321         u8      ElementID,
322         u4Byte  CmdLen,
323         u8 *    pCmdBuffer
324 );
325 #else
326 u4Byte
327 ODM_FillH2CCmd(
328         u8 *            pH2CBuffer,
329         u4Byte          H2CBufferLen,
330         u4Byte          CmdNum,
331         pu4Byte         pElementID,
332         pu4Byte         pCmdLen,
333         u8 **           pCmbBuffer,
334         u8 *            CmdStartSeq
335         );
336 #endif
337 #endif  // __ODM_INTERFACE_H__