Guest User

osdep_service.h

a guest
Dec 10th, 2018
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 21.90 KB | None | 0 0
  1. /******************************************************************************
  2.  *
  3.  * Copyright(c) 2007 - 2013 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. #ifndef __OSDEP_SERVICE_H_
  21. #define __OSDEP_SERVICE_H_
  22.  
  23.  
  24. #define _FAIL       0
  25. #define _SUCCESS    1
  26. #define RTW_RX_HANDLED 2
  27. //#define RTW_STATUS_TIMEDOUT -110
  28.  
  29. #undef _TRUE
  30. #define _TRUE       1
  31.  
  32. #undef _FALSE
  33. #define _FALSE      0
  34.  
  35.  
  36. #ifdef PLATFORM_FREEBSD
  37. #include <osdep_service_bsd.h>
  38. #endif
  39.  
  40. #ifdef PLATFORM_LINUX
  41. #include <osdep_service_linux.h>
  42. #endif
  43.  
  44. #ifdef PLATFORM_OS_XP
  45. #include <osdep_service_xp.h>
  46. #endif
  47.  
  48. #ifdef PLATFORM_OS_CE
  49. #include <osdep_service_ce.h>
  50. #endif
  51.  
  52. #include <linux/version.h>
  53. #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
  54. #include <linux/sched/signal.h>
  55. #endif
  56.  
  57. #define RTW_TIMER_HDL_NAME(name) rtw_##name##_timer_hdl
  58. #define RTW_DECLARE_TIMER_HDL(name) void RTW_TIMER_HDL_NAME(name)(RTW_TIMER_HDL_ARGS)
  59.  
  60. //#include <rtw_byteorder.h>
  61.  
  62. #ifndef BIT
  63.     #define BIT(x)  ( 1 << (x))
  64. #endif
  65.  
  66. #define BIT0    0x00000001
  67. #define BIT1    0x00000002
  68. #define BIT2    0x00000004
  69. #define BIT3    0x00000008
  70. #define BIT4    0x00000010
  71. #define BIT5    0x00000020
  72. #define BIT6    0x00000040
  73. #define BIT7    0x00000080
  74. #define BIT8    0x00000100
  75. #define BIT9    0x00000200
  76. #define BIT10   0x00000400
  77. #define BIT11   0x00000800
  78. #define BIT12   0x00001000
  79. #define BIT13   0x00002000
  80. #define BIT14   0x00004000
  81. #define BIT15   0x00008000
  82. #define BIT16   0x00010000
  83. #define BIT17   0x00020000
  84. #define BIT18   0x00040000
  85. #define BIT19   0x00080000
  86. #define BIT20   0x00100000
  87. #define BIT21   0x00200000
  88. #define BIT22   0x00400000
  89. #define BIT23   0x00800000
  90. #define BIT24   0x01000000
  91. #define BIT25   0x02000000
  92. #define BIT26   0x04000000
  93. #define BIT27   0x08000000
  94. #define BIT28   0x10000000
  95. #define BIT29   0x20000000
  96. #define BIT30   0x40000000
  97. #define BIT31   0x80000000
  98. #define BIT32   0x0100000000
  99. #define BIT33   0x0200000000
  100. #define BIT34   0x0400000000
  101. #define BIT35   0x0800000000
  102. #define BIT36   0x1000000000
  103.  
  104. extern int RTW_STATUS_CODE(int error_code);
  105.  
  106. #ifndef RTK_DMP_PLATFORM
  107. #define CONFIG_USE_VMALLOC
  108. #endif
  109.  
  110. /* flags used for rtw_mstat_update() */
  111. enum mstat_f {
  112.     /* type: 0x00ff */
  113.     MSTAT_TYPE_VIR = 0x00,
  114.     MSTAT_TYPE_PHY= 0x01,
  115.     MSTAT_TYPE_SKB = 0x02,
  116.     MSTAT_TYPE_USB = 0x03,
  117.     MSTAT_TYPE_MAX = 0x04,
  118.  
  119.     /* func: 0xff00 */
  120.     MSTAT_FUNC_UNSPECIFIED = 0x00<<8,
  121.     MSTAT_FUNC_IO = 0x01<<8,
  122.     MSTAT_FUNC_TX_IO = 0x02<<8,
  123.     MSTAT_FUNC_RX_IO = 0x03<<8,
  124.     MSTAT_FUNC_TX = 0x04<<8,
  125.     MSTAT_FUNC_RX = 0x05<<8,
  126.     MSTAT_FUNC_CFG_VENDOR = 0x06<<8,
  127.     MSTAT_FUNC_MAX = 0x07<<8,
  128. };
  129.  
  130. #define mstat_tf_idx(flags) ((flags)&0xff)
  131. #define mstat_ff_idx(flags) (((flags)&0xff00) >> 8)
  132.  
  133. typedef enum mstat_status{
  134.     MSTAT_ALLOC_SUCCESS = 0,
  135.     MSTAT_ALLOC_FAIL,
  136.     MSTAT_FREE
  137. } MSTAT_STATUS;
  138.  
  139. #ifdef DBG_MEM_ALLOC
  140. void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz);
  141. void rtw_mstat_dump (void *sel);
  142. u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
  143. u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
  144. void dbg_rtw_vmfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
  145. u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
  146. u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
  147. void dbg_rtw_mfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
  148.  
  149. struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, const int line);
  150. void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
  151. struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
  152. struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
  153. int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line);
  154. void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line);
  155. #ifdef CONFIG_USB_HCI
  156. void *dbg_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma, const enum mstat_f flags, const char *func, const int line);
  157. void dbg_rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma, const enum mstat_f flags, const char *func, const int line);
  158. #endif /* CONFIG_USB_HCI */
  159.  
  160. #ifdef CONFIG_USE_VMALLOC
  161. #define rtw_vmalloc(sz)         dbg_rtw_vmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
  162. #define rtw_zvmalloc(sz)            dbg_rtw_zvmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
  163. #define rtw_vmfree(pbuf, sz)        dbg_rtw_vmfree((pbuf), (sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
  164. #define rtw_vmalloc_f(sz, mstat_f)          dbg_rtw_vmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
  165. #define rtw_zvmalloc_f(sz, mstat_f)     dbg_rtw_zvmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
  166. #define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_vmfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
  167. #else /* CONFIG_USE_VMALLOC */
  168. #define rtw_vmalloc(sz)         dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  169. #define rtw_zvmalloc(sz)            dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  170. #define rtw_vmfree(pbuf, sz)        dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  171. #define rtw_vmalloc_f(sz, mstat_f)          dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  172. #define rtw_zvmalloc_f(sz, mstat_f)     dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  173. #define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  174. #endif /* CONFIG_USE_VMALLOC */
  175. #define rtw_malloc(sz)          dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  176. #define rtw_zmalloc(sz)         dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  177. #define rtw_mfree(pbuf, sz)     dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  178. #define rtw_malloc_f(sz, mstat_f)           dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  179. #define rtw_zmalloc_f(sz, mstat_f)          dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  180. #define rtw_mfree_f(pbuf, sz, mstat_f)      dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
  181.  
  182. #define rtw_skb_alloc(size) dbg_rtw_skb_alloc((size), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  183. #define rtw_skb_free(skb)   dbg_rtw_skb_free((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  184. #define rtw_skb_alloc_f(size, mstat_f)  dbg_rtw_skb_alloc((size), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  185. #define rtw_skb_free_f(skb, mstat_f)    dbg_rtw_skb_free((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  186. #define rtw_skb_copy(skb)   dbg_rtw_skb_copy((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  187. #define rtw_skb_clone(skb)  dbg_rtw_skb_clone((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  188. #define rtw_skb_copy_f(skb, mstat_f)    dbg_rtw_skb_copy((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  189. #define rtw_skb_clone_f(skb, mstat_f)   dbg_rtw_skb_clone((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  190. #define rtw_netif_rx(ndev, skb) dbg_rtw_netif_rx(ndev, skb, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  191. #define rtw_skb_queue_purge(sk_buff_head) dbg_rtw_skb_queue_purge(sk_buff_head, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
  192. #ifdef CONFIG_USB_HCI
  193. #define rtw_usb_buffer_alloc(dev, size, dma)        dbg_rtw_usb_buffer_alloc((dev), (size), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
  194. #define rtw_usb_buffer_free(dev, size, addr, dma)   dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
  195. #define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f)         dbg_rtw_usb_buffer_alloc((dev), (size), (dma), ((mstat_f)&0xff00)|MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
  196. #define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f)    dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), ((mstat_f)&0xff00)|MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
  197. #endif /* CONFIG_USB_HCI */
  198.  
  199. #else /* DBG_MEM_ALLOC */
  200. #define rtw_mstat_update(flag, status, sz) do {} while(0)
  201. #define rtw_mstat_dump(sel) do {} while(0)
  202. u8* _rtw_vmalloc(u32 sz);
  203. u8* _rtw_zvmalloc(u32 sz);
  204. void    _rtw_vmfree(u8 *pbuf, u32 sz);
  205. u8* _rtw_zmalloc(u32 sz);
  206. u8* _rtw_malloc(u32 sz);
  207. void    _rtw_mfree(u8 *pbuf, u32 sz);
  208.  
  209. struct sk_buff *_rtw_skb_alloc(u32 sz);
  210. void _rtw_skb_free(struct sk_buff *skb);
  211. struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb);
  212. struct sk_buff *_rtw_skb_clone(struct sk_buff *skb);
  213. int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
  214. void _rtw_skb_queue_purge(struct sk_buff_head *list);
  215.  
  216. #ifdef CONFIG_USB_HCI
  217. void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma);
  218. void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma);
  219. #endif /* CONFIG_USB_HCI */
  220.  
  221. #ifdef CONFIG_USE_VMALLOC
  222. #define rtw_vmalloc(sz)         _rtw_vmalloc((sz))
  223. #define rtw_zvmalloc(sz)            _rtw_zvmalloc((sz))
  224. #define rtw_vmfree(pbuf, sz)        _rtw_vmfree((pbuf), (sz))
  225. #define rtw_vmalloc_f(sz, mstat_f)          _rtw_vmalloc((sz))
  226. #define rtw_zvmalloc_f(sz, mstat_f)     _rtw_zvmalloc((sz))
  227. #define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_vmfree((pbuf), (sz))
  228. #else /* CONFIG_USE_VMALLOC */
  229. #define rtw_vmalloc(sz)         _rtw_malloc((sz))
  230. #define rtw_zvmalloc(sz)            _rtw_zmalloc((sz))
  231. #define rtw_vmfree(pbuf, sz)        _rtw_mfree((pbuf), (sz))
  232. #define rtw_vmalloc_f(sz, mstat_f)          _rtw_malloc((sz))
  233. #define rtw_zvmalloc_f(sz, mstat_f)     _rtw_zmalloc((sz))
  234. #define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
  235. #endif /* CONFIG_USE_VMALLOC */
  236. #define rtw_malloc(sz)          _rtw_malloc((sz))
  237. #define rtw_zmalloc(sz)         _rtw_zmalloc((sz))
  238. #define rtw_mfree(pbuf, sz)     _rtw_mfree((pbuf), (sz))
  239. #define rtw_malloc_f(sz, mstat_f)           _rtw_malloc((sz))
  240. #define rtw_zmalloc_f(sz, mstat_f)          _rtw_zmalloc((sz))
  241. #define rtw_mfree_f(pbuf, sz, mstat_f)      _rtw_mfree((pbuf), (sz))
  242.  
  243. #define rtw_skb_alloc(size) _rtw_skb_alloc((size))
  244. #define rtw_skb_free(skb) _rtw_skb_free((skb))
  245. #define rtw_skb_alloc_f(size, mstat_f)  _rtw_skb_alloc((size))
  246. #define rtw_skb_free_f(skb, mstat_f)    _rtw_skb_free((skb))
  247. #define rtw_skb_copy(skb)   _rtw_skb_copy((skb))
  248. #define rtw_skb_clone(skb)  _rtw_skb_clone((skb))
  249. #define rtw_skb_copy_f(skb, mstat_f)    _rtw_skb_copy((skb))
  250. #define rtw_skb_clone_f(skb, mstat_f)   _rtw_skb_clone((skb))
  251. #define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
  252. #define rtw_skb_queue_purge(sk_buff_head) _rtw_skb_queue_purge(sk_buff_head)
  253. #ifdef CONFIG_USB_HCI
  254. #define rtw_usb_buffer_alloc(dev, size, dma) _rtw_usb_buffer_alloc((dev), (size), (dma))
  255. #define rtw_usb_buffer_free(dev, size, addr, dma) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
  256. #define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f) _rtw_usb_buffer_alloc((dev), (size), (dma))
  257. #define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
  258. #endif /* CONFIG_USB_HCI */
  259. #endif /* DBG_MEM_ALLOC */
  260.  
  261. extern void*    rtw_malloc2d(int h, int w, size_t size);
  262. extern void rtw_mfree2d(void *pbuf, int h, int w, int size);
  263.  
  264. extern void _rtw_memcpy(void *dec, const void *sour, u32 sz);
  265. extern void _rtw_memmove(void *dst, const void *src, u32 sz);
  266. extern int  _rtw_memcmp(const void *dst, const void *src, u32 sz);
  267. extern void _rtw_memset(void *pbuf, int c, u32 sz);
  268.  
  269. extern void _rtw_init_listhead(_list *list);
  270. extern u32  rtw_is_list_empty(_list *phead);
  271. extern void rtw_list_insert_head(_list *plist, _list *phead);
  272. extern void rtw_list_insert_tail(_list *plist, _list *phead);
  273. #ifndef PLATFORM_FREEBSD
  274. extern void rtw_list_delete(_list *plist);
  275. #endif //PLATFORM_FREEBSD
  276.  
  277. extern void _rtw_init_sema(_sema *sema, int init_val);
  278. extern void _rtw_free_sema(_sema    *sema);
  279. extern void _rtw_up_sema(_sema  *sema);
  280. extern u32  _rtw_down_sema(_sema *sema);
  281. extern void _rtw_mutex_init(_mutex *pmutex);
  282. extern void _rtw_mutex_free(_mutex *pmutex);
  283. #ifndef PLATFORM_FREEBSD
  284. extern void _rtw_spinlock_init(_lock *plock);
  285. #endif //PLATFORM_FREEBSD
  286. extern void _rtw_spinlock_free(_lock *plock);
  287. extern void _rtw_spinlock(_lock *plock);
  288. extern void _rtw_spinunlock(_lock   *plock);
  289. extern void _rtw_spinlock_ex(_lock  *plock);
  290. extern void _rtw_spinunlock_ex(_lock    *plock);
  291.  
  292. extern void _rtw_init_queue(_queue *pqueue);
  293. extern void _rtw_deinit_queue(_queue *pqueue);
  294. extern u32  _rtw_queue_empty(_queue *pqueue);
  295. extern u32  rtw_end_of_queue_search(_list *queue, _list *pelement);
  296.  
  297. extern u32  rtw_get_current_time(void);
  298. extern u32  rtw_systime_to_ms(u32 systime);
  299. extern u32  rtw_ms_to_systime(u32 ms);
  300. extern s32  rtw_get_passing_time_ms(u32 start);
  301. extern s32  rtw_get_time_interval_ms(u32 start, u32 end);
  302.  
  303. extern void rtw_sleep_schedulable(int ms);
  304.  
  305. extern void rtw_msleep_os(int ms);
  306. extern void rtw_usleep_os(int us);
  307.  
  308. extern u32  rtw_atoi(u8* s);
  309.  
  310. #ifdef DBG_DELAY_OS
  311. #define rtw_mdelay_os(ms) _rtw_mdelay_os((ms), __FUNCTION__, __LINE__)
  312. #define rtw_udelay_os(ms) _rtw_udelay_os((ms), __FUNCTION__, __LINE__)
  313. extern void _rtw_mdelay_os(int ms, const char *func, const int line);
  314. extern void _rtw_udelay_os(int us, const char *func, const int line);
  315. #else
  316. extern void rtw_mdelay_os(int ms);
  317. extern void rtw_udelay_os(int us);
  318. #endif
  319.  
  320. extern void rtw_yield_os(void);
  321.  
  322.  
  323. extern void rtw_init_timer(_timer *ptimer, void *padapter, void *pfunc);
  324.  
  325.  
  326. __inline static unsigned char _cancel_timer_ex(_timer *ptimer)
  327. {
  328. #ifdef PLATFORM_LINUX
  329. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
  330.     return del_timer_sync(&ptimer->t);
  331. #else
  332.     return del_timer_sync(ptimer);
  333. #endif
  334.  
  335. #endif
  336. #ifdef PLATFORM_FREEBSD
  337.     _cancel_timer(ptimer,0);
  338.     return 0;
  339. #endif
  340. #ifdef PLATFORM_WINDOWS
  341.     u8 bcancelled;
  342.    
  343.     _cancel_timer(ptimer, &bcancelled);
  344.    
  345.     return bcancelled;
  346. #endif
  347. }
  348.  
  349. static __inline void thread_enter(char *name)
  350. {
  351. #ifdef PLATFORM_LINUX
  352.     #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0))
  353.     daemonize("%s", name);
  354.     #endif
  355.     allow_signal(SIGTERM);
  356. #endif
  357. #ifdef PLATFORM_FREEBSD
  358.     printf("%s", "RTKTHREAD_enter");
  359. #endif
  360. }
  361.  
  362. __inline static void flush_signals_thread(void)
  363. {
  364. #ifdef PLATFORM_LINUX
  365.     if (signal_pending (current))
  366.     {
  367.         flush_signals(current);
  368.     }
  369. #endif
  370. }
  371.  
  372. __inline static _OS_STATUS res_to_status(sint res)
  373. {
  374.  
  375. #if defined (PLATFORM_LINUX) || defined (PLATFORM_MPIXEL) || defined (PLATFORM_FREEBSD)
  376.     return res;
  377. #endif
  378.  
  379. #ifdef PLATFORM_WINDOWS
  380.  
  381.     if (res == _SUCCESS)
  382.         return NDIS_STATUS_SUCCESS;
  383.     else
  384.         return NDIS_STATUS_FAILURE;
  385.  
  386. #endif 
  387.    
  388. }
  389.  
  390. __inline static void rtw_dump_stack(void)
  391. {
  392. #ifdef PLATFORM_LINUX
  393.     dump_stack();
  394. #endif
  395. }
  396.  
  397. #ifdef PLATFORM_LINUX
  398. #define rtw_warn_on(condition) WARN_ON(condition)
  399. #else
  400. #define rtw_warn_on(condition) do {} while (0)
  401. #endif
  402.  
  403. __inline static int rtw_bug_check(void *parg1, void *parg2, void *parg3, void *parg4)
  404. {
  405.     int ret = _TRUE;
  406.  
  407. #ifdef PLATFORM_WINDOWS
  408.     if ( ((uint)parg1) <= 0x7fffffff ||
  409.         ((uint)parg2) <= 0x7fffffff ||
  410.         ((uint)parg3) <= 0x7fffffff ||
  411.         ((uint)parg4) <= 0x7fffffff)
  412.     {
  413.         ret = _FALSE;
  414.         KeBugCheckEx(0x87110000, (ULONG_PTR)parg1, (ULONG_PTR)parg2, (ULONG_PTR)parg3, (ULONG_PTR)parg4);      
  415.     }
  416. #endif
  417.  
  418.     return ret;
  419.  
  420. }
  421.  
  422. #define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r))
  423. #define RND4(x) (((x >> 2) + (((x & 3) == 0) ?  0: 1)) << 2)
  424.  
  425. __inline static u32 _RND4(u32 sz)
  426. {
  427.  
  428.     u32 val;
  429.  
  430.     val = ((sz >> 2) + ((sz & 3) ? 1: 0)) << 2;
  431.    
  432.     return val;
  433.  
  434. }
  435.  
  436. __inline static u32 _RND8(u32 sz)
  437. {
  438.  
  439.     u32 val;
  440.  
  441.     val = ((sz >> 3) + ((sz & 7) ? 1: 0)) << 3;
  442.    
  443.     return val;
  444.  
  445. }
  446.  
  447. __inline static u32 _RND128(u32 sz)
  448. {
  449.  
  450.     u32 val;
  451.  
  452.     val = ((sz >> 7) + ((sz & 127) ? 1: 0)) << 7;
  453.    
  454.     return val;
  455.  
  456. }
  457.  
  458. __inline static u32 _RND256(u32 sz)
  459. {
  460.  
  461.     u32 val;
  462.  
  463.     val = ((sz >> 8) + ((sz & 255) ? 1: 0)) << 8;
  464.    
  465.     return val;
  466.  
  467. }
  468.  
  469. __inline static u32 _RND512(u32 sz)
  470. {
  471.  
  472.     u32 val;
  473.  
  474.     val = ((sz >> 9) + ((sz & 511) ? 1: 0)) << 9;
  475.    
  476.     return val;
  477.  
  478. }
  479.  
  480. __inline static u32 bitshift(u32 bitmask)
  481. {
  482.     u32 i;
  483.  
  484.     for (i = 0; i <= 31; i++)
  485.         if (((bitmask>>i) &  0x1) == 1) break;
  486.  
  487.     return i;
  488. }
  489.  
  490. #define rtw_min(a, b) ((a>b)?b:a)
  491. #define rtw_is_range_a_in_b(hi_a, lo_a, hi_b, lo_b) (((hi_a) <= (hi_b)) && ((lo_a) >= (lo_b)))
  492. #define rtw_is_range_overlap(hi_a, lo_a, hi_b, lo_b) (((hi_a) > (lo_b)) && ((lo_a) < (hi_b)))
  493.  
  494. #ifndef MAC_FMT
  495. #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
  496. #endif
  497. #ifndef MAC_ARG
  498. #define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
  499. #endif
  500.  
  501.  
  502. extern void rtw_suspend_lock_init(void);
  503. extern void rtw_suspend_lock_uninit(void);
  504. extern void rtw_lock_suspend(void);
  505. extern void rtw_unlock_suspend(void);
  506. extern void rtw_lock_suspend_timeout(u32 timeout_ms);
  507. extern void rtw_lock_ext_suspend_timeout(u32 timeout_ms);
  508. extern void rtw_lock_rx_suspend_timeout(u32 timeout_ms);
  509. extern void rtw_lock_traffic_suspend_timeout(u32 timeout_ms);
  510. extern void rtw_lock_resume_scan_timeout(u32 timeout_ms);
  511. extern void rtw_resume_lock_suspend(void);
  512. extern void rtw_resume_unlock_suspend(void);
  513. #ifdef CONFIG_AP_WOWLAN
  514. extern void rtw_softap_lock_suspend(void);
  515. extern void rtw_softap_unlock_suspend(void);
  516. #endif
  517.  
  518. extern void ATOMIC_SET(ATOMIC_T *v, int i);
  519. extern int ATOMIC_READ(ATOMIC_T *v);
  520. extern void ATOMIC_ADD(ATOMIC_T *v, int i);
  521. extern void ATOMIC_SUB(ATOMIC_T *v, int i);
  522. extern void ATOMIC_INC(ATOMIC_T *v);
  523. extern void ATOMIC_DEC(ATOMIC_T *v);
  524. extern int ATOMIC_ADD_RETURN(ATOMIC_T *v, int i);
  525. extern int ATOMIC_SUB_RETURN(ATOMIC_T *v, int i);
  526. extern int ATOMIC_INC_RETURN(ATOMIC_T *v);
  527. extern int ATOMIC_DEC_RETURN(ATOMIC_T *v);
  528.  
  529. //File operation APIs, just for linux now
  530. extern int rtw_is_file_readable(char *path);
  531. extern int rtw_retrieve_from_file(char *path, u8 *buf, u32 sz);
  532. extern int rtw_store_to_file(char *path, u8* buf, u32 sz);
  533.  
  534.  
  535. #ifndef PLATFORM_FREEBSD
  536. extern void rtw_free_netdev(struct net_device * netdev);
  537. #endif //PLATFORM_FREEBSD
  538.  
  539.  
  540. extern u64 rtw_modular64(u64 x, u64 y);
  541. extern u64 rtw_division64(u64 x, u64 y);
  542. extern u32 rtw_random32(void);
  543.  
  544. /* Macros for handling unaligned memory accesses */
  545.  
  546. #define RTW_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1]))
  547. #define RTW_PUT_BE16(a, val)            \
  548.     do {                    \
  549.         (a)[0] = ((u16) (val)) >> 8;    \
  550.         (a)[1] = ((u16) (val)) & 0xff;  \
  551.     } while (0)
  552.  
  553. #define RTW_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0]))
  554. #define RTW_PUT_LE16(a, val)            \
  555.     do {                    \
  556.         (a)[1] = ((u16) (val)) >> 8;    \
  557.         (a)[0] = ((u16) (val)) & 0xff;  \
  558.     } while (0)
  559.  
  560. #define RTW_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \
  561.              ((u32) (a)[2]))             
  562. #define RTW_PUT_BE24(a, val)                    \
  563.     do {                            \
  564.         (a)[0] = (u8) ((((u32) (val)) >> 16) & 0xff);   \
  565.         (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff);    \
  566.         (a)[2] = (u8) (((u32) (val)) & 0xff);       \
  567.     } while (0)
  568.  
  569. #define RTW_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
  570.              (((u32) (a)[2]) << 8) | ((u32) (a)[3]))             
  571. #define RTW_PUT_BE32(a, val)                    \
  572.     do {                            \
  573.         (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff);   \
  574.         (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff);   \
  575.         (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff);    \
  576.         (a)[3] = (u8) (((u32) (val)) & 0xff);       \
  577.     } while (0)
  578.  
  579. #define RTW_GET_LE32(a) ((((u32) (a)[3]) << 24) | (((u32) (a)[2]) << 16) | \
  580.              (((u32) (a)[1]) << 8) | ((u32) (a)[0]))             
  581. #define RTW_PUT_LE32(a, val)                    \
  582.     do {                            \
  583.         (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff);   \
  584.         (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff);   \
  585.         (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff);    \
  586.         (a)[0] = (u8) (((u32) (val)) & 0xff);       \
  587.     } while (0)
  588.  
  589. #define RTW_GET_BE64(a) ((((u64) (a)[0]) << 56) | (((u64) (a)[1]) << 48) | \
  590.              (((u64) (a)[2]) << 40) | (((u64) (a)[3]) << 32) | \
  591.              (((u64) (a)[4]) << 24) | (((u64) (a)[5]) << 16) | \
  592.              (((u64) (a)[6]) << 8) | ((u64) (a)[7]))             
  593. #define RTW_PUT_BE64(a, val)                \
  594.     do {                        \
  595.         (a)[0] = (u8) (((u64) (val)) >> 56);    \
  596.         (a)[1] = (u8) (((u64) (val)) >> 48);    \
  597.         (a)[2] = (u8) (((u64) (val)) >> 40);    \
  598.         (a)[3] = (u8) (((u64) (val)) >> 32);    \
  599.         (a)[4] = (u8) (((u64) (val)) >> 24);    \
  600.         (a)[5] = (u8) (((u64) (val)) >> 16);    \
  601.         (a)[6] = (u8) (((u64) (val)) >> 8); \
  602.         (a)[7] = (u8) (((u64) (val)) & 0xff);   \
  603.     } while (0)
  604.  
  605. #define RTW_GET_LE64(a) ((((u64) (a)[7]) << 56) | (((u64) (a)[6]) << 48) | \
  606.              (((u64) (a)[5]) << 40) | (((u64) (a)[4]) << 32) | \
  607.              (((u64) (a)[3]) << 24) | (((u64) (a)[2]) << 16) | \
  608.              (((u64) (a)[1]) << 8) | ((u64) (a)[0]))
  609.  
  610. void rtw_buf_free(u8 **buf, u32 *buf_len);
  611. void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len);
  612.  
  613. struct rtw_cbuf {
  614.     u32 write;
  615.     u32 read;
  616.     u32 size;
  617.     void *bufs[0];
  618. };
  619.  
  620. bool rtw_cbuf_full(struct rtw_cbuf *cbuf);
  621. bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
  622. bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf);
  623. void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
  624. struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
  625. void rtw_cbuf_free(struct rtw_cbuf *cbuf);
  626.  
  627. // String handler
  628.  
  629. BOOLEAN IsHexDigit(char chTmp);
  630. BOOLEAN is_alpha(char chTmp);
  631. char alpha_to_upper(char c);
  632.  
  633. /*
  634.  * Write formatted output to sized buffer
  635.  */
  636. #ifdef PLATFORM_LINUX
  637. #define rtw_sprintf(buf, size, format, arg...)  snprintf(buf, size, format, ##arg)
  638. #else // !PLATFORM_LINUX
  639. #error "NOT DEFINE \"rtw_sprintf\"!!"
  640. #endif // !PLATFORM_LINUX
  641.  
  642. #endif
Add Comment
Please, Sign In to add comment