osdep_service.c 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
  4. *
  5. ******************************************************************************/
  6. #include <osdep_service.h>
  7. #if CONFIG_USE_TCM_HEAP
  8. #include "tcm_heap.h"
  9. #endif
  10. #define OSDEP_DBG(x, ...) do {} while(0)
  11. extern struct osdep_service_ops osdep_service;
  12. #if CONFIG_LITTLE_ENDIAN
  13. u16
  14. _htons(u16 n)
  15. {
  16. return ((n & 0xff) << 8) | ((n & 0xff00) >> 8);
  17. }
  18. u16
  19. _ntohs(u16 n)
  20. {
  21. return _htons(n);
  22. }
  23. u32
  24. _htonl(u32 n)
  25. {
  26. return ((n & 0xff) << 24) |
  27. ((n & 0xff00) << 8) |
  28. ((n & 0xff0000UL) >> 8) |
  29. ((n & 0xff000000UL) >> 24);
  30. }
  31. u32
  32. _ntohl(u32 n)
  33. {
  34. return _htonl(n);
  35. }
  36. #endif /* CONFIG_LITTLE_ENDIAN */
  37. /*
  38. * Translate the OS dependent @param error_code to OS independent RTW_STATUS_CODE
  39. * @return: one of RTW_STATUS_CODE
  40. */
  41. int RTW_STATUS_CODE(int error_code)
  42. {
  43. if(error_code >= 0)
  44. return _SUCCESS;
  45. return _FAIL;
  46. }
  47. u32 rtw_atoi(u8* s)
  48. {
  49. int num=0,flag=0;
  50. int i;
  51. for(i=0;i<=strlen((char *)s);i++)
  52. {
  53. if(s[i] >= '0' && s[i] <= '9')
  54. num = num * 10 + s[i] -'0';
  55. else if(s[0] == '-' && i==0)
  56. flag =1;
  57. else
  58. break;
  59. }
  60. if(flag == 1)
  61. num = num * -1;
  62. return(num);
  63. }
  64. #if CONFIG_USE_TCM_HEAP
  65. void *tcm_heap_malloc(int size);
  66. void *tcm_heap_calloc(int size);
  67. #endif
  68. u8* _rtw_vmalloc(u32 sz)
  69. {
  70. u8 *pbuf = NULL;
  71. #if CONFIG_USE_TCM_HEAP
  72. pbuf = tcm_heap_malloc(sz);
  73. #endif
  74. if(pbuf==NULL){
  75. if(osdep_service.rtw_vmalloc) {
  76. pbuf = osdep_service.rtw_vmalloc(sz);
  77. } else
  78. OSDEP_DBG("Not implement osdep service: rtw_vmalloc");
  79. }
  80. return pbuf;
  81. }
  82. u8* _rtw_zvmalloc(u32 sz)
  83. {
  84. u8 *pbuf = NULL;
  85. #if CONFIG_USE_TCM_HEAP
  86. pbuf = tcm_heap_calloc(sz);
  87. #endif
  88. if(pbuf==NULL){
  89. if(osdep_service.rtw_zvmalloc) {
  90. pbuf = osdep_service.rtw_zvmalloc(sz);
  91. } else
  92. OSDEP_DBG("Not implement osdep service: rtw_zvmalloc");
  93. }
  94. return pbuf;
  95. }
  96. void _rtw_vmfree(u8 *pbuf, u32 sz)
  97. {
  98. #if CONFIG_USE_TCM_HEAP
  99. if( (u32)pbuf > 0x1FFF0000 && (u32)pbuf < 0x20000000 )
  100. tcm_heap_free(pbuf);
  101. else
  102. #endif
  103. {
  104. if(osdep_service.rtw_vmfree) {
  105. osdep_service.rtw_vmfree(pbuf, sz);
  106. } else
  107. OSDEP_DBG("Not implement osdep service: rtw_vmfree");
  108. }
  109. }
  110. u8* _rtw_malloc(u32 sz)
  111. {
  112. if(osdep_service.rtw_malloc) {
  113. u8 *pbuf = osdep_service.rtw_malloc(sz);
  114. return pbuf;
  115. } else
  116. OSDEP_DBG("Not implement osdep service: rtw_malloc");
  117. return NULL;
  118. }
  119. u8* _rtw_zmalloc(u32 sz)
  120. {
  121. if(osdep_service.rtw_zmalloc) {
  122. u8 *pbuf = osdep_service.rtw_zmalloc(sz);
  123. return pbuf;
  124. } else
  125. OSDEP_DBG("Not implement osdep service: rtw_zmalloc");
  126. return NULL;
  127. }
  128. void _rtw_mfree(u8 *pbuf, u32 sz)
  129. {
  130. if(osdep_service.rtw_mfree) {
  131. osdep_service.rtw_mfree(pbuf, sz);
  132. } else
  133. OSDEP_DBG("Not implement osdep service: rtw_mfree");
  134. }
  135. #ifdef CONFIG_MEM_MONITOR
  136. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  137. _list mem_table;
  138. int mem_used_num;
  139. #endif
  140. int min_free_heap_size;
  141. void init_mem_monitor(_list *pmem_table, int *used_num)
  142. {
  143. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  144. rtw_init_listhead(pmem_table);
  145. *used_num = 0;
  146. #endif
  147. min_free_heap_size = rtw_getFreeHeapSize();
  148. }
  149. void deinit_mem_monitor(_list *pmem_table, int *used_num)
  150. {
  151. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  152. _list *plist;
  153. struct mem_entry *mem_entry;
  154. if(*used_num > 0)
  155. DBG_INFO("Have %d mem_entry kept in monitor", *used_num);
  156. else
  157. DBG_TRACE("No mem_entry kept in monitor");
  158. save_and_cli();
  159. while (rtw_end_of_queue_search(pmem_table, get_next(pmem_table)) == _FALSE) {
  160. plist = get_next(pmem_table);
  161. mem_entry = LIST_CONTAINOR(plist, struct mem_entry, list);
  162. DBG_INFO("Not release memory at %p with size of %d", mem_entry->ptr, mem_entry->size);
  163. rtw_list_delete(plist);
  164. _rtw_mfree((u8 *) mem_entry, sizeof(struct mem_entry));
  165. }
  166. restore_flags();
  167. #endif
  168. }
  169. void add_mem_usage(_list *pmem_table, void *ptr, int size, int *used_num, int flag)
  170. {
  171. int free_heap_size = rtw_getFreeHeapSize();
  172. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  173. struct mem_entry *mem_entry;
  174. #endif
  175. if(ptr == NULL) {
  176. DBG_INFO("Catch a mem alloc fail with size of %d, current heap free size = %d", size, free_heap_size);
  177. return;
  178. }
  179. else{
  180. if(flag == MEM_MONITOR_FLAG_WPAS)
  181. DBG_TRACE("Alloc memory at %p with size of %d", ptr, size);
  182. else
  183. DBG_TRACE("Alloc memory at %p with size of %d", ptr, size);
  184. }
  185. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  186. mem_entry = (struct mem_entry *) _rtw_malloc(sizeof(struct mem_entry));
  187. if(mem_entry == NULL) {
  188. DBG_INFO("Fail to alloc mem_entry");
  189. return;
  190. }
  191. memset(mem_entry, 0, sizeof(struct mem_entry));
  192. mem_entry->ptr = ptr;
  193. mem_entry->size = size;
  194. save_and_cli();
  195. rtw_list_insert_head(&mem_entry->list, pmem_table);
  196. restore_flags();
  197. *used_num ++;
  198. #endif
  199. if(min_free_heap_size > free_heap_size)
  200. min_free_heap_size = free_heap_size;
  201. }
  202. void del_mem_usage(_list *pmem_table, void *ptr, int *used_num, int flag)
  203. {
  204. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  205. _list *plist;
  206. struct mem_entry *mem_entry = NULL;
  207. if(ptr == NULL)
  208. return;
  209. if(flag == MEM_MONITOR_FLAG_WPAS)
  210. DBG_TRACE("Free memory at %p", ptr);
  211. else
  212. DBG_TRACE("Free memory at %p", ptr);
  213. save_and_cli();
  214. plist = get_next(pmem_table);
  215. while ((rtw_end_of_queue_search(pmem_table, plist)) == _FALSE)
  216. {
  217. mem_entry = LIST_CONTAINOR(plist, struct mem_entry, list);
  218. if(mem_entry->ptr == ptr) {
  219. rtw_list_delete(plist);
  220. break;
  221. }
  222. plist = get_next(plist);
  223. }
  224. restore_flags();
  225. if(plist == pmem_table)
  226. DBG_INFO("Fail to find the mem_entry in mem table");
  227. else {
  228. *used_num --;
  229. _rtw_mfree((u8 *) mem_entry, sizeof(struct mem_entry));
  230. }
  231. #endif
  232. }
  233. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  234. int get_mem_usage(_list *pmem_table)
  235. {
  236. _list *plist;
  237. struct mem_entry *mem_entry;
  238. int mem_usage = 0;
  239. int entry_num = 0;
  240. save_and_cli();
  241. if((plist = get_next(pmem_table)) == NULL) {
  242. DBG_INFO("No mem table available\n");
  243. restore_flags();
  244. return 0;
  245. }
  246. while (rtw_end_of_queue_search(pmem_table, plist) == _FALSE) {
  247. entry_num ++;
  248. mem_entry = LIST_CONTAINOR(plist, struct mem_entry, list);
  249. mem_usage += mem_entry->size;
  250. DBG_TRACE("size of mem_entry(%d)=%d\n", entry_num, mem_entry->size);
  251. plist = get_next(plist);
  252. }
  253. restore_flags();
  254. DBG_TRACE("Get %d mem_entry\n", entry_num);
  255. return mem_usage;
  256. }
  257. #endif
  258. u8* rtw_vmalloc(u32 sz)
  259. {
  260. u8 *pbuf = _rtw_vmalloc(sz);
  261. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  262. add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV);
  263. #else
  264. add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV);
  265. #endif
  266. return pbuf;
  267. }
  268. u8* rtw_zvmalloc(u32 sz)
  269. {
  270. u8 *pbuf = _rtw_zvmalloc(sz);
  271. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  272. add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV);
  273. #else
  274. add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV);
  275. #endif
  276. return pbuf;
  277. }
  278. void rtw_vmfree(u8 *pbuf, u32 sz)
  279. {
  280. _rtw_vmfree(pbuf, sz);
  281. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  282. del_mem_usage(&mem_table, pbuf, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV);
  283. #else
  284. del_mem_usage(NULL, pbuf, NULL, MEM_MONITOR_FLAG_WIFI_DRV);
  285. #endif
  286. }
  287. u8* rtw_malloc(u32 sz)
  288. {
  289. u8 *pbuf = _rtw_malloc(sz);
  290. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  291. add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV);
  292. #else
  293. add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV);
  294. #endif
  295. return pbuf;
  296. }
  297. u8* rtw_zmalloc(u32 sz)
  298. {
  299. u8 *pbuf = _rtw_zmalloc(sz);
  300. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  301. add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV);
  302. #else
  303. add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV);
  304. #endif
  305. return pbuf;
  306. }
  307. void rtw_mfree(u8 *pbuf, u32 sz)
  308. {
  309. _rtw_mfree(pbuf, sz);
  310. #if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK
  311. del_mem_usage(&mem_table, pbuf, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV);
  312. #else
  313. del_mem_usage(NULL, pbuf, NULL, MEM_MONITOR_FLAG_WIFI_DRV);
  314. #endif
  315. }
  316. #endif
  317. void* rtw_malloc2d(int h, int w, int size)
  318. {
  319. int j;
  320. void **a = (void **) rtw_zmalloc( h*sizeof(void *) + h*w*size );
  321. if(a == NULL)
  322. {
  323. OSDEP_DBG("%s: alloc memory fail!\n", __FUNCTION__);
  324. return NULL;
  325. }
  326. for( j=0; j<h; j++ )
  327. a[j] = ((char *)(a+h)) + j*w*size;
  328. return a;
  329. }
  330. void rtw_mfree2d(void *pbuf, int h, int w, int size)
  331. {
  332. rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size);
  333. }
  334. void rtw_memcpy(void* dst, const void* src, u32 sz)
  335. {
  336. if(osdep_service.rtw_memcpy)
  337. osdep_service.rtw_memcpy(dst, src, sz);
  338. else
  339. OSDEP_DBG("Not implement osdep service: rtw_memcpy");
  340. }
  341. int rtw_memcmp(void *dst, void *src, u32 sz)
  342. {
  343. if(osdep_service.rtw_memcmp)
  344. return osdep_service.rtw_memcmp(dst, src, sz);
  345. else
  346. OSDEP_DBG("Not implement osdep service: rtw_memcmp");
  347. return _FALSE;
  348. }
  349. void rtw_memset(void *pbuf, int c, u32 sz)
  350. {
  351. if(osdep_service.rtw_memset)
  352. osdep_service.rtw_memset(pbuf, c, sz);
  353. else
  354. OSDEP_DBG("Not implement osdep service: rtw_memset");
  355. }
  356. void rtw_init_listhead(_list *list)
  357. {
  358. INIT_LIST_HEAD(list);
  359. }
  360. /*
  361. For the following list_xxx operations,
  362. caller must guarantee the atomic context.
  363. Otherwise, there will be racing condition.
  364. */
  365. u32 rtw_is_list_empty(_list *phead)
  366. {
  367. if(list_empty(phead))
  368. return _TRUE;
  369. return _FALSE;
  370. }
  371. void rtw_list_insert_head(_list *plist, _list *phead)
  372. {
  373. list_add(plist, phead);
  374. }
  375. void rtw_list_insert_tail(_list *plist, _list *phead)
  376. {
  377. list_add_tail(plist, phead);
  378. }
  379. /*
  380. Caller must check if the list is empty before calling rtw_list_delete
  381. */
  382. void rtw_list_delete(_list *plist)
  383. {
  384. list_del_init(plist);
  385. }
  386. void rtw_init_sema(_sema *sema, int init_val)
  387. {
  388. if(osdep_service.rtw_init_sema)
  389. osdep_service.rtw_init_sema(sema, init_val);
  390. else
  391. OSDEP_DBG("Not implement osdep service: rtw_init_sema");
  392. }
  393. void rtw_free_sema(_sema *sema)
  394. {
  395. if(osdep_service.rtw_free_sema)
  396. osdep_service.rtw_free_sema(sema);
  397. else
  398. OSDEP_DBG("Not implement osdep service: rtw_free_sema");
  399. }
  400. void rtw_up_sema(_sema *sema)
  401. {
  402. if(osdep_service.rtw_up_sema)
  403. osdep_service.rtw_up_sema(sema);
  404. else
  405. OSDEP_DBG("Not implement osdep service: rtw_up_sema");
  406. }
  407. void rtw_up_sema_from_isr(_sema *sema)
  408. {
  409. if(osdep_service.rtw_up_sema_from_isr)
  410. osdep_service.rtw_up_sema_from_isr(sema);
  411. else
  412. OSDEP_DBG("Not implement osdep service: rtw_up_sema_from_isr");
  413. }
  414. u32 rtw_down_timeout_sema(_sema *sema, u32 timeout)
  415. {
  416. if(osdep_service.rtw_down_timeout_sema)
  417. return osdep_service.rtw_down_timeout_sema(sema, timeout);
  418. else
  419. OSDEP_DBG("Not implement osdep service: rtw_down_timeout_sema");
  420. return _FAIL;
  421. }
  422. u32 rtw_down_sema(_sema *sema)
  423. {
  424. while(rtw_down_timeout_sema(sema, RTW_MAX_DELAY) != _TRUE)
  425. OSDEP_DBG("%s(%p) failed, retry\n", __FUNCTION__, sema);
  426. return _TRUE;
  427. }
  428. void rtw_mutex_init(_mutex *pmutex)
  429. {
  430. if(osdep_service.rtw_mutex_init)
  431. osdep_service.rtw_mutex_init(pmutex);
  432. else
  433. OSDEP_DBG("Not implement osdep service: rtw_mutex_init");
  434. }
  435. void rtw_mutex_free(_mutex *pmutex)
  436. {
  437. if(osdep_service.rtw_mutex_free)
  438. osdep_service.rtw_mutex_free(pmutex);
  439. else
  440. OSDEP_DBG("Not implement osdep service: rtw_mutex_free");
  441. }
  442. void rtw_mutex_put(_mutex *pmutex)
  443. {
  444. if(osdep_service.rtw_mutex_put)
  445. osdep_service.rtw_mutex_put(pmutex);
  446. else
  447. OSDEP_DBG("Not implement osdep service: rtw_mutex_put");
  448. }
  449. void rtw_mutex_get(_mutex *pmutex)
  450. {
  451. if(osdep_service.rtw_mutex_get)
  452. osdep_service.rtw_mutex_get(pmutex);
  453. else
  454. OSDEP_DBG("Not implement osdep service: rtw_mutex_get");
  455. }
  456. int rtw_mutex_get_timeout(_mutex *pmutex, u32 timeout_ms)
  457. {
  458. if(osdep_service.rtw_mutex_get_timeout)
  459. return osdep_service.rtw_mutex_get_timeout(pmutex, timeout_ms);
  460. else{
  461. OSDEP_DBG("Not implement osdep service: rtw_mutex_get_timeout");
  462. return -1;
  463. }
  464. }
  465. void rtw_enter_critical(_lock *plock, _irqL *pirqL)
  466. {
  467. if(osdep_service.rtw_enter_critical)
  468. osdep_service.rtw_enter_critical(plock, pirqL);
  469. else
  470. OSDEP_DBG("Not implement osdep service: rtw_enter_critical");
  471. }
  472. void rtw_exit_critical(_lock *plock, _irqL *pirqL)
  473. {
  474. if(osdep_service.rtw_exit_critical)
  475. osdep_service.rtw_exit_critical(plock, pirqL);
  476. else
  477. OSDEP_DBG("Not implement osdep service: rtw_exit_critical");
  478. }
  479. void rtw_enter_critical_from_isr(_lock *plock, _irqL *pirqL)
  480. {
  481. if(osdep_service.rtw_enter_critical)
  482. osdep_service.rtw_enter_critical(plock, pirqL);
  483. else
  484. OSDEP_DBG("Not implement osdep service: rtw_enter_critical_from_isr");
  485. }
  486. void rtw_exit_critical_from_isr(_lock *plock, _irqL *pirqL)
  487. {
  488. if(osdep_service.rtw_exit_critical)
  489. osdep_service.rtw_exit_critical(plock, pirqL);
  490. else
  491. OSDEP_DBG("Not implement osdep service: rtw_exit_critical_from_isr");
  492. }
  493. void rtw_enter_critical_bh(_lock *plock, _irqL *pirqL)
  494. {
  495. rtw_spin_lock(plock);
  496. }
  497. void rtw_exit_critical_bh(_lock *plock, _irqL *pirqL)
  498. {
  499. rtw_spin_unlock(plock);
  500. }
  501. int rtw_enter_critical_mutex(_mutex *pmutex, _irqL *pirqL)
  502. {
  503. if(osdep_service.rtw_enter_critical_mutex)
  504. return osdep_service.rtw_enter_critical_mutex(pmutex, pirqL);
  505. else
  506. OSDEP_DBG("Not implement osdep service: rtw_enter_critical_mutex");
  507. return 0;
  508. }
  509. void rtw_exit_critical_mutex(_mutex *pmutex, _irqL *pirqL)
  510. {
  511. if(osdep_service.rtw_exit_critical_mutex)
  512. osdep_service.rtw_exit_critical_mutex(pmutex, pirqL);
  513. else
  514. OSDEP_DBG("Not implement osdep service: rtw_exit_critical_mutex");
  515. }
  516. void rtw_cpu_lock(void)
  517. {
  518. if(osdep_service.rtw_cpu_lock)
  519. osdep_service.rtw_cpu_lock();
  520. else
  521. OSDEP_DBG("Not implement osdep service: rtw_cpu_lock");
  522. }
  523. void rtw_cpu_unlock(void)
  524. {
  525. if(osdep_service.rtw_cpu_unlock)
  526. osdep_service.rtw_cpu_unlock();
  527. else
  528. OSDEP_DBG("Not implement osdep service: rtw_cpu_unlock");
  529. }
  530. void rtw_init_queue(_queue *pqueue)
  531. {
  532. rtw_init_listhead(&(pqueue->queue));
  533. rtw_spinlock_init(&(pqueue->lock));
  534. }
  535. u32 rtw_queue_empty(_queue *pqueue)
  536. {
  537. return (rtw_is_list_empty(&(pqueue->queue)));
  538. }
  539. u32 rtw_end_of_queue_search(_list *head, _list *plist)
  540. {
  541. if (head == plist)
  542. return _TRUE;
  543. else
  544. return _FALSE;
  545. }
  546. #if 1
  547. void rtw_spinlock_init(_lock *plock)
  548. {
  549. if(osdep_service.rtw_spinlock_init)
  550. osdep_service.rtw_spinlock_init(plock);
  551. else
  552. OSDEP_DBG("Not implement osdep service: rtw_spinlock_init");
  553. }
  554. void rtw_spinlock_free(_lock *plock)
  555. {
  556. if(osdep_service.rtw_spinlock_free)
  557. osdep_service.rtw_spinlock_free(plock);
  558. else
  559. OSDEP_DBG("Not implement osdep service: rtw_spinlock_free");
  560. }
  561. void rtw_spin_lock(_lock *plock)
  562. {
  563. if(osdep_service.rtw_spin_lock)
  564. osdep_service.rtw_spin_lock(plock);
  565. else
  566. OSDEP_DBG("Not implement osdep service: rtw_spin_lock");
  567. }
  568. void rtw_spin_unlock(_lock *plock)
  569. {
  570. if(osdep_service.rtw_spin_unlock)
  571. osdep_service.rtw_spin_unlock(plock);
  572. else
  573. OSDEP_DBG("Not implement osdep service: rtw_spin_unlock");
  574. }
  575. void rtw_spinlock_irqsave(_lock *plock, _irqL *irqL)
  576. {
  577. if(osdep_service.rtw_spinlock_irqsave)
  578. osdep_service.rtw_spinlock_irqsave(plock, irqL);
  579. else
  580. OSDEP_DBG("Not implement osdep service: rtw_spinlock_irqsave");
  581. }
  582. void rtw_spinunlock_irqsave(_lock *plock, _irqL *irqL)
  583. {
  584. if(osdep_service.rtw_spinunlock_irqsave)
  585. osdep_service.rtw_spinunlock_irqsave(plock, irqL);
  586. else
  587. OSDEP_DBG("Not implement osdep service: rtw_spinunlock_irqsave");
  588. }
  589. #endif
  590. int rtw_init_xqueue( _xqueue* queue, const char* name, u32 message_size, u32 number_of_messages )
  591. {
  592. if(osdep_service.rtw_init_xqueue)
  593. return (int)osdep_service.rtw_init_xqueue(queue, name, message_size, number_of_messages);
  594. else
  595. OSDEP_DBG("Not implement osdep service: rtw_init_xqueue");
  596. return FAIL;
  597. }
  598. int rtw_push_to_xqueue( _xqueue* queue, void* message, u32 timeout_ms )
  599. {
  600. if(osdep_service.rtw_push_to_xqueue)
  601. return (int)osdep_service.rtw_push_to_xqueue(queue, message, timeout_ms);
  602. else
  603. OSDEP_DBG("Not implement osdep service: rtw_push_to_xqueue");
  604. return FAIL;
  605. }
  606. int rtw_pop_from_xqueue( _xqueue* queue, void* message, u32 timeout_ms )
  607. {
  608. if(osdep_service.rtw_pop_from_xqueue)
  609. return (int)osdep_service.rtw_pop_from_xqueue(queue, message, timeout_ms);
  610. else
  611. OSDEP_DBG("Not implement osdep service: rtw_pop_from_xqueue");
  612. return FAIL;
  613. }
  614. int rtw_deinit_xqueue( _xqueue* queue )
  615. {
  616. if(osdep_service.rtw_deinit_xqueue)
  617. return (int)osdep_service.rtw_deinit_xqueue(queue);
  618. else
  619. OSDEP_DBG("Not implement osdep service: rtw_deinit_xqueue");
  620. return FAIL;
  621. }
  622. #if 0
  623. void rtw_init_queue(_queue *pqueue)
  624. {
  625. rtw_init_listhead(&(pqueue->queue));
  626. rtw_mutex_init(&(pqueue->lock));
  627. }
  628. void rtw_deinit_queue(_queue *pqueue)
  629. {
  630. rtw_mutex_free(&(pqueue->lock));
  631. }
  632. u32 rtw_is_queue_empty(_queue *pqueue)
  633. {
  634. return (rtw_is_list_empty(&(pqueue->queue)));
  635. }
  636. u32 rtw_end_of_queue_search(_list *head, _list *plist)
  637. {
  638. if (head == plist)
  639. return _TRUE;
  640. return _FALSE;
  641. }
  642. _list *rtw_get_queue_head(_queue *queue)
  643. {
  644. return (&(queue->queue));
  645. }
  646. #endif
  647. u32 rtw_get_current_time(void)
  648. {
  649. if(osdep_service.rtw_get_current_time)
  650. return osdep_service.rtw_get_current_time();
  651. else
  652. OSDEP_DBG("Not implement osdep service: rtw_get_current_time");
  653. return 0;
  654. }
  655. u32 rtw_systime_to_ms(u32 systime)
  656. {
  657. if(osdep_service.rtw_systime_to_ms)
  658. return osdep_service.rtw_systime_to_ms(systime);
  659. else
  660. OSDEP_DBG("Not implement osdep service: rtw_systime_to_ms");
  661. return 0;
  662. }
  663. u32 rtw_systime_to_sec(u32 systime)
  664. {
  665. if(osdep_service.rtw_systime_to_sec)
  666. return osdep_service.rtw_systime_to_sec(systime);
  667. else
  668. OSDEP_DBG("Not implement osdep service: rtw_systime_to_sec");
  669. return 0;
  670. }
  671. u32 rtw_ms_to_systime(u32 ms)
  672. {
  673. if(osdep_service.rtw_ms_to_systime)
  674. return osdep_service.rtw_ms_to_systime(ms);
  675. else
  676. OSDEP_DBG("Not implement osdep service: rtw_ms_to_systime");
  677. return 0;
  678. }
  679. u32 rtw_sec_to_systime(u32 sec)
  680. {
  681. if(osdep_service.rtw_sec_to_systime)
  682. return osdep_service.rtw_sec_to_systime(sec);
  683. else
  684. OSDEP_DBG("Not implement osdep service: rtw_sec_to_systime");
  685. return 0;
  686. }
  687. // the input parameter start use the same unit as returned by rtw_get_current_time
  688. s32 rtw_get_passing_time_ms(u32 start)
  689. {
  690. return rtw_systime_to_ms(rtw_get_current_time() - start);
  691. }
  692. s32 rtw_get_time_interval_ms(u32 start, u32 end)
  693. {
  694. return rtw_systime_to_ms(end - start);
  695. }
  696. void rtw_msleep_os(int ms)
  697. {
  698. if(osdep_service.rtw_msleep_os)
  699. osdep_service.rtw_msleep_os(ms);
  700. else
  701. OSDEP_DBG("Not implement osdep service: rtw_msleep_os");
  702. }
  703. void rtw_usleep_os(int us)
  704. {
  705. if(osdep_service.rtw_usleep_os)
  706. osdep_service.rtw_usleep_os(us);
  707. else
  708. OSDEP_DBG("Not implement osdep service: rtw_usleep_os");
  709. }
  710. void rtw_mdelay_os(int ms)
  711. {
  712. if(osdep_service.rtw_mdelay_os)
  713. osdep_service.rtw_mdelay_os(ms);
  714. else
  715. OSDEP_DBG("Not implement osdep service: rtw_mdelay_os");
  716. }
  717. void rtw_udelay_os(int us)
  718. {
  719. if(osdep_service.rtw_udelay_os)
  720. osdep_service.rtw_udelay_os(us);
  721. else
  722. OSDEP_DBG("Not implement osdep service: rtw_udelay_os");
  723. }
  724. void rtw_yield_os(void)
  725. {
  726. if(osdep_service.rtw_yield_os)
  727. osdep_service.rtw_yield_os();
  728. else
  729. OSDEP_DBG("Not implement osdep service: rtw_yield_os");
  730. }
  731. void ATOMIC_SET(ATOMIC_T *v, int i)
  732. {
  733. if(osdep_service.ATOMIC_SET)
  734. osdep_service.ATOMIC_SET(v, i);
  735. else
  736. OSDEP_DBG("Not implement osdep service: ATOMIC_SET");
  737. }
  738. int ATOMIC_READ(ATOMIC_T *v)
  739. {
  740. if(osdep_service.ATOMIC_READ)
  741. return osdep_service.ATOMIC_READ(v);
  742. else
  743. OSDEP_DBG("Not implement osdep service: ATOMIC_READ");
  744. return 0;
  745. }
  746. void ATOMIC_ADD(ATOMIC_T *v, int i)
  747. {
  748. if(osdep_service.ATOMIC_ADD)
  749. osdep_service.ATOMIC_ADD(v, i);
  750. else
  751. OSDEP_DBG("Not implement osdep service: ATOMIC_ADD");
  752. }
  753. void ATOMIC_SUB(ATOMIC_T *v, int i)
  754. {
  755. if(osdep_service.ATOMIC_SUB)
  756. osdep_service.ATOMIC_SUB(v, i);
  757. else
  758. OSDEP_DBG("Not implement osdep service: ATOMIC_SUB");
  759. }
  760. void ATOMIC_INC(ATOMIC_T *v)
  761. {
  762. if(osdep_service.ATOMIC_INC)
  763. osdep_service.ATOMIC_INC(v);
  764. else
  765. OSDEP_DBG("Not implement osdep service: ATOMIC_INC");
  766. }
  767. void ATOMIC_DEC(ATOMIC_T *v)
  768. {
  769. if(osdep_service.ATOMIC_DEC)
  770. osdep_service.ATOMIC_DEC(v);
  771. else
  772. OSDEP_DBG("Not implement osdep service: ATOMIC_DEC");
  773. }
  774. int ATOMIC_ADD_RETURN(ATOMIC_T *v, int i)
  775. {
  776. if(osdep_service.ATOMIC_ADD_RETURN)
  777. return osdep_service.ATOMIC_ADD_RETURN(v, i);
  778. else
  779. OSDEP_DBG("Not implement osdep service: ATOMIC_ADD_RETURN");
  780. return 0;
  781. }
  782. int ATOMIC_SUB_RETURN(ATOMIC_T *v, int i)
  783. {
  784. if(osdep_service.ATOMIC_SUB_RETURN)
  785. return osdep_service.ATOMIC_SUB_RETURN(v, i);
  786. else
  787. OSDEP_DBG("Not implement osdep service: ATOMIC_SUB_RETURN");
  788. return 0;
  789. }
  790. int ATOMIC_INC_RETURN(ATOMIC_T *v)
  791. {
  792. if(osdep_service.ATOMIC_INC_RETURN)
  793. return osdep_service.ATOMIC_INC_RETURN(v);
  794. else
  795. OSDEP_DBG("Not implement osdep service: ATOMIC_INC_RETURN");
  796. return 0;
  797. }
  798. int ATOMIC_DEC_RETURN(ATOMIC_T *v)
  799. {
  800. if(osdep_service.ATOMIC_DEC_RETURN)
  801. return osdep_service.ATOMIC_DEC_RETURN(v);
  802. else
  803. OSDEP_DBG("Not implement osdep service: ATOMIC_DEC_RETURN");
  804. return 0;
  805. }
  806. int ATOMIC_DEC_AND_TEST(ATOMIC_T *v)
  807. {
  808. return ATOMIC_DEC_RETURN(v) == 0;
  809. }
  810. u64 rtw_modular64(u64 x, u64 y)
  811. {
  812. if(osdep_service.rtw_modular64)
  813. return osdep_service.rtw_modular64(x, y);
  814. else
  815. OSDEP_DBG("Not implement osdep service: rtw_modular64");
  816. return 0;
  817. }
  818. int rtw_get_random_bytes(void* dst, u32 size)
  819. {
  820. if(osdep_service.rtw_get_random_bytes)
  821. return osdep_service.rtw_get_random_bytes(dst, size);
  822. else
  823. OSDEP_DBG("Not implement osdep service: rtw_get_random_bytes");
  824. return 0;
  825. }
  826. u32 rtw_getFreeHeapSize(void)
  827. {
  828. if(osdep_service.rtw_getFreeHeapSize)
  829. return osdep_service.rtw_getFreeHeapSize();
  830. else
  831. OSDEP_DBG("Not implement osdep service: rtw_getFreeHeapSize");
  832. return 0;
  833. }
  834. int rtw_netif_queue_stopped(void *pnetdev)
  835. {
  836. return 0;
  837. }
  838. void rtw_netif_wake_queue(void *pnetdev)
  839. {
  840. }
  841. void rtw_netif_start_queue(void *pnetdev)
  842. {
  843. }
  844. void rtw_netif_stop_queue(void *pnetdev)
  845. {
  846. }
  847. void flush_signals_thread(void)
  848. {
  849. }
  850. void rtw_acquire_wakelock(void)
  851. {
  852. if (osdep_service.rtw_acquire_wakelock)
  853. osdep_service.rtw_acquire_wakelock();
  854. else
  855. OSDEP_DBG("Not implement osdep service: rtw_acquire_wakelock");
  856. }
  857. void rtw_release_wakelock(void)
  858. {
  859. if (osdep_service.rtw_release_wakelock)
  860. osdep_service.rtw_release_wakelock();
  861. else
  862. OSDEP_DBG("Not implement osdep service: rtw_release_wakelock");
  863. }
  864. void rtw_wakelock_timeout(u32 timeoutms)
  865. {
  866. if (osdep_service.rtw_wakelock_timeout)
  867. osdep_service.rtw_wakelock_timeout(timeoutms);
  868. else
  869. OSDEP_DBG("Not implement osdep service: rtw_wakelock_timeout");
  870. }
  871. int rtw_create_task(struct task_struct *task, const char *name,
  872. u32 stack_size, u32 priority, thread_func_t func, void *thctx)
  873. {
  874. if(osdep_service.rtw_create_task)
  875. return osdep_service.rtw_create_task(task, name, stack_size, priority, func, thctx);
  876. else
  877. OSDEP_DBG("Not implement osdep service: rtw_create_task");
  878. return 1;
  879. }
  880. void rtw_delete_task(struct task_struct *task)
  881. {
  882. if(osdep_service.rtw_delete_task)
  883. osdep_service.rtw_delete_task(task);
  884. else
  885. OSDEP_DBG("Not implement osdep service: rtw_delete_task");
  886. return;
  887. }
  888. void rtw_wakeup_task(struct task_struct *task)
  889. {
  890. if(osdep_service.rtw_wakeup_task)
  891. osdep_service.rtw_wakeup_task(task);
  892. else
  893. OSDEP_DBG("Not implement osdep service: rtw_wakeup_task");
  894. return;
  895. }
  896. static void worker_thread_main( void *arg )
  897. {
  898. rtw_worker_thread_t* worker_thread = (rtw_worker_thread_t*) arg;
  899. while ( 1 )
  900. {
  901. rtw_event_message_t message;
  902. if ( rtw_pop_from_xqueue( &worker_thread->event_queue, &message, RTW_WAIT_FOREVER ) == SUCCESS )
  903. {
  904. message.function(message.buf, message.buf_len, message.flags, message.user_data);
  905. if(message.buf){
  906. _rtw_mfree((u8 *)message.buf, message.buf_len);
  907. }
  908. }
  909. }
  910. }
  911. int rtw_create_worker_thread( rtw_worker_thread_t* worker_thread, u8 priority, u32 stack_size, u32 event_queue_size )
  912. {
  913. if(NULL == worker_thread)
  914. return FAIL;
  915. memset( worker_thread, 0, sizeof( *worker_thread ) );
  916. if ( rtw_init_xqueue( &worker_thread->event_queue, "worker queue", sizeof(rtw_event_message_t), event_queue_size ) != SUCCESS )
  917. {
  918. return FAIL;
  919. }
  920. if ( !rtw_create_task( &worker_thread->thread, "worker thread", stack_size, priority, worker_thread_main, (void*) worker_thread ) )
  921. {
  922. rtw_deinit_xqueue( &worker_thread->event_queue );
  923. return FAIL;
  924. }
  925. return SUCCESS;
  926. }
  927. int rtw_delete_worker_thread( rtw_worker_thread_t* worker_thread )
  928. {
  929. if(NULL == worker_thread)
  930. return FAIL;
  931. rtw_deinit_xqueue( &worker_thread->event_queue );
  932. rtw_delete_task(&worker_thread->thread);
  933. return SUCCESS;
  934. }
  935. #ifndef CONFIG_PLATFORM_TIZENRT
  936. _timerHandle rtw_timerCreate( const signed char *pcTimerName,
  937. osdepTickType xTimerPeriodInTicks,
  938. u32 uxAutoReload,
  939. void * pvTimerID,
  940. TIMER_FUN pxCallbackFunction )
  941. {
  942. if(osdep_service.rtw_timerCreate)
  943. return osdep_service.rtw_timerCreate(pcTimerName, xTimerPeriodInTicks, uxAutoReload,
  944. pvTimerID, pxCallbackFunction);
  945. else
  946. OSDEP_DBG("Not implement osdep service: rtw_timerCreate");
  947. return 0;
  948. }
  949. u32 rtw_timerDelete( _timerHandle xTimer,
  950. osdepTickType xBlockTime )
  951. {
  952. if(osdep_service.rtw_timerDelete)
  953. return osdep_service.rtw_timerDelete( xTimer, xBlockTime );
  954. else
  955. OSDEP_DBG("Not implement osdep service: rtw_timerDelete");
  956. return 0;
  957. }
  958. u32 rtw_timerIsTimerActive( _timerHandle xTimer )
  959. {
  960. if(osdep_service.rtw_timerIsTimerActive)
  961. return osdep_service.rtw_timerIsTimerActive(xTimer);
  962. else
  963. OSDEP_DBG("Not implement osdep service: rtw_timerIsTimerActive");
  964. return 0;
  965. }
  966. u32 rtw_timerStop( _timerHandle xTimer,
  967. osdepTickType xBlockTime )
  968. {
  969. if(osdep_service.rtw_timerStop)
  970. return osdep_service.rtw_timerStop(xTimer, xBlockTime);
  971. else
  972. OSDEP_DBG("Not implement osdep service: rtw_timerStop");
  973. return 0;
  974. }
  975. u32 rtw_timerChangePeriod( _timerHandle xTimer,
  976. osdepTickType xNewPeriod,
  977. osdepTickType xBlockTime )
  978. {
  979. if(osdep_service.rtw_timerChangePeriod)
  980. return osdep_service.rtw_timerChangePeriod(xTimer, xNewPeriod, xBlockTime);
  981. else
  982. OSDEP_DBG("Not implement osdep service: rtw_timerChangePeriod");
  983. return 0;
  984. }
  985. #else
  986. _timerHandle rtw_timerCreate( _timer *timer ,
  987. const signed char *pcTimerName,
  988. osdepTickType xTimerPeriodInTicks,
  989. u32 uxAutoReload,
  990. void * pvTimerID
  991. )
  992. {
  993. if(osdep_service.rtw_timerCreate)
  994. return osdep_service.rtw_timerCreate(timer,pcTimerName, xTimerPeriodInTicks, uxAutoReload,
  995. pvTimerID);
  996. else
  997. OSDEP_DBG("Not implement osdep service: rtw_timerCreate");
  998. return 0;
  999. }
  1000. u32 rtw_timerDelete( _timer *timer,
  1001. osdepTickType xBlockTime )
  1002. {
  1003. if(osdep_service.rtw_timerDelete)
  1004. return osdep_service.rtw_timerDelete( timer, xBlockTime );
  1005. else
  1006. OSDEP_DBG("Not implement osdep service: rtw_timerDelete");
  1007. return 0;
  1008. }
  1009. u32 rtw_timerIsTimerActive( _timer *timer )
  1010. {
  1011. if(osdep_service.rtw_timerIsTimerActive)
  1012. return osdep_service.rtw_timerIsTimerActive(timer);
  1013. else
  1014. OSDEP_DBG("Not implement osdep service: rtw_timerIsTimerActive");
  1015. return 0;
  1016. }
  1017. u32 rtw_timerStop( _timer *timer,
  1018. osdepTickType xBlockTime )
  1019. {
  1020. if(osdep_service.rtw_timerStop)
  1021. return osdep_service.rtw_timerStop(timer, xBlockTime);
  1022. else
  1023. OSDEP_DBG("Not implement osdep service: rtw_timerStop");
  1024. return 0;
  1025. }
  1026. u32 rtw_timerChangePeriod( _timer *timer,
  1027. osdepTickType xNewPeriod,
  1028. osdepTickType xBlockTime )
  1029. {
  1030. if(osdep_service.rtw_timerChangePeriod)
  1031. return osdep_service.rtw_timerChangePeriod(timer, xNewPeriod, xBlockTime);
  1032. else
  1033. OSDEP_DBG("Not implement osdep service: rtw_timerChangePeriod");
  1034. return 0;
  1035. }
  1036. #endif
  1037. void *rtw_timerGetID( _timerHandle xTimer )
  1038. {
  1039. if(osdep_service.rtw_timerGetID)
  1040. return osdep_service.rtw_timerGetID(xTimer);
  1041. else
  1042. OSDEP_DBG("Not implement osdep service: rtw_timerGetID");
  1043. return NULL;
  1044. }
  1045. u32 rtw_timerStart( _timerHandle xTimer, osdepTickType xBlockTime )
  1046. {
  1047. if(osdep_service.rtw_timerStart)
  1048. return osdep_service.rtw_timerStart(xTimer, xBlockTime);
  1049. else
  1050. OSDEP_DBG("Not implement osdep service: rtw_timerStart");
  1051. return 0;
  1052. }
  1053. u32 rtw_timerStartFromISR( _timerHandle xTimer,
  1054. osdepBASE_TYPE *pxHigherPriorityTaskWoken )
  1055. {
  1056. if(osdep_service.rtw_timerStartFromISR)
  1057. return osdep_service.rtw_timerStartFromISR(xTimer, pxHigherPriorityTaskWoken);
  1058. else
  1059. OSDEP_DBG("Not implement osdep service: rtw_timerStartFromISR");
  1060. return 0;
  1061. }
  1062. u32 rtw_timerStopFromISR( _timerHandle xTimer,
  1063. osdepBASE_TYPE *pxHigherPriorityTaskWoken )
  1064. {
  1065. if(osdep_service.rtw_timerStopFromISR)
  1066. return osdep_service.rtw_timerStopFromISR(xTimer, pxHigherPriorityTaskWoken);
  1067. else
  1068. OSDEP_DBG("Not implement osdep service: rtw_timerStopFromISR");
  1069. return 0;
  1070. }
  1071. u32 rtw_timerResetFromISR( _timerHandle xTimer,
  1072. osdepBASE_TYPE *pxHigherPriorityTaskWoken )
  1073. {
  1074. if(osdep_service.rtw_timerResetFromISR)
  1075. return osdep_service.rtw_timerResetFromISR(xTimer, pxHigherPriorityTaskWoken);
  1076. else
  1077. OSDEP_DBG("Not implement osdep service: rtw_timerResetFromISR");
  1078. return 0;
  1079. }
  1080. u32 rtw_timerChangePeriodFromISR( _timerHandle xTimer,
  1081. osdepTickType xNewPeriod,
  1082. osdepBASE_TYPE *pxHigherPriorityTaskWoken )
  1083. {
  1084. if(osdep_service.rtw_timerChangePeriodFromISR)
  1085. return osdep_service.rtw_timerChangePeriodFromISR(xTimer, xNewPeriod, pxHigherPriorityTaskWoken);
  1086. else
  1087. OSDEP_DBG("Not implement osdep service: rtw_timerChangePeriodFromISR");
  1088. return 0;
  1089. }
  1090. u32 rtw_timerReset( _timerHandle xTimer,
  1091. osdepTickType xBlockTime )
  1092. {
  1093. if(osdep_service.rtw_timerReset)
  1094. return osdep_service.rtw_timerReset(xTimer, xBlockTime);
  1095. else
  1096. OSDEP_DBG("Not implement osdep service: rtw_timerReset");
  1097. return 0;
  1098. }
  1099. #if 0 //TODO
  1100. void rtw_init_delayed_work(struct delayed_work *dwork, work_func_t func, const char *name)
  1101. {
  1102. if(osdep_service.rtw_init_delayed_work)
  1103. osdep_service.rtw_init_delayed_work(dwork, func, name);
  1104. else
  1105. OSDEP_DBG("Not implement osdep service: rtw_init_delayed_work");
  1106. return;
  1107. }
  1108. void rtw_deinit_delayed_work(struct delayed_work *dwork)
  1109. {
  1110. if(osdep_service.rtw_deinit_delayed_work)
  1111. osdep_service.rtw_deinit_delayed_work(dwork);
  1112. else
  1113. OSDEP_DBG("Not implement osdep service: rtw_deinit_delayed_work");
  1114. return;
  1115. }
  1116. int rtw_queue_delayed_work(struct workqueue_struct *wq,
  1117. struct delayed_work *dwork, u32 delay, void* context)
  1118. {
  1119. if(osdep_service.rtw_queue_delayed_work)
  1120. osdep_service.rtw_queue_delayed_work(wq, dwork, delay, context);
  1121. else
  1122. OSDEP_DBG("Not implement osdep service: rtw_queue_delayed_work");
  1123. return;
  1124. }
  1125. BOOLEAN rtw_cancel_delayed_work(struct delayed_work *dwork)
  1126. {
  1127. if(osdep_service.rtw_cancel_delayed_work)
  1128. osdep_service.rtw_cancel_delayed_work(dwork);
  1129. else
  1130. OSDEP_DBG("Not implement osdep service: rtw_cancel_delayed_work");
  1131. return;
  1132. }
  1133. #endif
  1134. void rtw_thread_enter(char *name)
  1135. {
  1136. if(osdep_service.rtw_thread_enter)
  1137. osdep_service.rtw_thread_enter(name);
  1138. else
  1139. OSDEP_DBG("Not implement osdep service: rtw_thread_enter");
  1140. }
  1141. void rtw_thread_exit()
  1142. {
  1143. if(osdep_service.rtw_thread_exit)
  1144. osdep_service.rtw_thread_exit();
  1145. else
  1146. OSDEP_DBG("Not implement osdep service: rtw_thread_exit");
  1147. }
  1148. u8 rtw_get_scheduler_state()
  1149. {
  1150. // OS_SCHEDULER_NOT_STARTED 0
  1151. // OS_SCHEDULER_RUNNING 1
  1152. // OS_SCHEDULER_SUSPENDED 2
  1153. // OS_SCHEDULER_UNREACHABLE 3
  1154. if(osdep_service.rtw_get_scheduler_state)
  1155. return osdep_service.rtw_get_scheduler_state();
  1156. else{
  1157. OSDEP_DBG("Not implement osdep service: rtw_get_scheduler_state");
  1158. return 3;
  1159. }
  1160. }