1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
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.
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
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
19 ******************************************************************************/
21 //============================================================
23 //============================================================
25 #include "odm_precomp.h"
27 // ODM IO Relative API.
36 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
37 prtl8192cd_priv priv = pDM_Odm->priv;
38 return RTL_R8(RegAddr);
39 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
40 PADAPTER Adapter = pDM_Odm->Adapter;
41 return rtw_read8(Adapter,RegAddr);
42 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
43 PADAPTER Adapter = pDM_Odm->Adapter;
44 return PlatformEFIORead1Byte(Adapter, RegAddr);
56 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
57 prtl8192cd_priv priv = pDM_Odm->priv;
58 return RTL_R16(RegAddr);
59 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
60 PADAPTER Adapter = pDM_Odm->Adapter;
61 return rtw_read16(Adapter,RegAddr);
62 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
63 PADAPTER Adapter = pDM_Odm->Adapter;
64 return PlatformEFIORead2Byte(Adapter, RegAddr);
76 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
77 prtl8192cd_priv priv = pDM_Odm->priv;
78 return RTL_R32(RegAddr);
79 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
80 PADAPTER Adapter = pDM_Odm->Adapter;
81 return rtw_read32(Adapter,RegAddr);
82 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
83 PADAPTER Adapter = pDM_Odm->Adapter;
84 return PlatformEFIORead4Byte(Adapter, RegAddr);
97 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
98 prtl8192cd_priv priv = pDM_Odm->priv;
99 RTL_W8(RegAddr, Data);
100 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
101 PADAPTER Adapter = pDM_Odm->Adapter;
102 rtw_write8(Adapter,RegAddr, Data);
103 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
104 PADAPTER Adapter = pDM_Odm->Adapter;
105 PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);
118 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
119 prtl8192cd_priv priv = pDM_Odm->priv;
120 RTL_W16(RegAddr, Data);
121 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
122 PADAPTER Adapter = pDM_Odm->Adapter;
123 rtw_write16(Adapter,RegAddr, Data);
124 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
125 PADAPTER Adapter = pDM_Odm->Adapter;
126 PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);
139 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
140 prtl8192cd_priv priv = pDM_Odm->priv;
141 RTL_W32(RegAddr, Data);
142 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
143 PADAPTER Adapter = pDM_Odm->Adapter;
144 rtw_write32(Adapter,RegAddr, Data);
145 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
146 PADAPTER Adapter = pDM_Odm->Adapter;
147 PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);
161 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
162 PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
163 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
164 PADAPTER Adapter = pDM_Odm->Adapter;
165 PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
177 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
178 return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
179 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
180 PADAPTER Adapter = pDM_Odm->Adapter;
181 return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
194 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
195 PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
196 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
197 PADAPTER Adapter = pDM_Odm->Adapter;
198 PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
210 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
211 return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
212 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
213 PADAPTER Adapter = pDM_Odm->Adapter;
214 return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
222 ODM_RF_RADIO_PATH_E eRFPath,
228 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
229 PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);
230 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
231 PADAPTER Adapter = pDM_Odm->Adapter;
232 PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);
240 ODM_RF_RADIO_PATH_E eRFPath,
245 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
246 return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);
247 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
248 PADAPTER Adapter = pDM_Odm->Adapter;
249 return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);
257 // ODM Memory relative API.
266 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
267 *pPtr = kmalloc(length, GFP_ATOMIC);
268 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
269 *pPtr = rtw_zvmalloc(length);
270 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
271 PADAPTER Adapter = pDM_Odm->Adapter;
272 PlatformAllocateMemory(Adapter, pPtr, length);
276 // length could be ignored, used to detect memory leakage.
284 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
286 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
287 rtw_vmfree(pPtr, length);
288 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
289 //PADAPTER Adapter = pDM_Odm->Adapter;
290 PlatformFreeMemory(pPtr, length);
296 // ODM MISC relative API.
301 RT_SPINLOCK_TYPE type
304 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
306 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
308 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
309 PADAPTER Adapter = pDM_Odm->Adapter;
310 PlatformAcquireSpinLock(Adapter, type);
316 RT_SPINLOCK_TYPE type
319 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
321 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
323 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
324 PADAPTER Adapter = pDM_Odm->Adapter;
325 PlatformReleaseSpinLock(Adapter, type);
330 // Work item relative API. FOr MP driver only~!
333 ODM_InitializeWorkItem(
335 PRT_WORK_ITEM pRtWorkItem,
336 RT_WORKITEM_CALL_BACK RtWorkItemCallback,
341 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
343 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
345 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
346 PADAPTER Adapter = pDM_Odm->Adapter;
347 PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);
354 PRT_WORK_ITEM pRtWorkItem
357 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
359 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
361 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
362 PlatformStartWorkItem(pRtWorkItem);
369 PRT_WORK_ITEM pRtWorkItem
372 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
374 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
376 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
377 PlatformStopWorkItem(pRtWorkItem);
384 PRT_WORK_ITEM pRtWorkItem
387 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
389 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
391 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
392 PlatformFreeWorkItem(pRtWorkItem);
398 ODM_ScheduleWorkItem(
399 PRT_WORK_ITEM pRtWorkItem
402 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
404 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
406 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
407 PlatformScheduleWorkItem(pRtWorkItem);
413 ODM_IsWorkItemScheduled(
414 PRT_WORK_ITEM pRtWorkItem
417 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
419 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
421 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
422 PlatformIsWorkItemScheduled(pRtWorkItem);
429 // ODM Timer relative API.
436 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
438 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
439 rtw_udelay_os(usDelay);
440 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
441 PlatformStallExecution(usDelay);
446 ODM_delay_ms(u4Byte ms)
448 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
450 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
452 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
458 ODM_delay_us(u4Byte us)
460 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
462 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
464 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
465 PlatformStallExecution(us);
470 ODM_sleep_ms(u4Byte ms)
472 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
474 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
476 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
481 ODM_sleep_us(u4Byte us)
483 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
485 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
487 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
498 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
499 mod_timer(pTimer, jiffies + (msDelay+9)/10);
500 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
501 _set_timer(pTimer,msDelay ); //ms
502 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
503 PADAPTER Adapter = pDM_Odm->Adapter;
504 PlatformSetTimer(Adapter, pTimer, msDelay);
513 RT_TIMER_CALL_BACK CallBackFunc,
518 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
519 pTimer->function = CallBackFunc;
520 pTimer->data = (unsigned long)pDM_Odm;
522 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
523 PADAPTER Adapter = pDM_Odm->Adapter;
524 _init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);
525 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
526 PADAPTER Adapter = pDM_Odm->Adapter;
527 PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);
538 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
539 del_timer_sync(pTimer);
540 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
541 _cancel_timer_ex(pTimer);
542 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
543 PADAPTER Adapter = pDM_Odm->Adapter;
544 PlatformCancelTimer(Adapter, pTimer);
555 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
557 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
559 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
561 PADAPTER Adapter = pDM_Odm->Adapter;
563 // <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm.
564 // Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.
567 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
571 PlatformReleaseTimer(Adapter, pTimer);
577 // ODM FW relative API.
579 #if (DM_ODM_SUPPORT_TYPE & ODM_MP)
588 if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
592 case ODM_H2C_RSSI_REPORT:
593 FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
599 else if(IS_HARDWARE_TYPE_8188E(Adapter))
603 case ODM_H2C_PSD_RESULT:
604 FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
613 case ODM_H2C_RSSI_REPORT:
614 FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
615 case ODM_H2C_PSD_RESULT:
616 FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
634 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
636 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
638 #elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
639 //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);