1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun *
3*4882a593Smuzhiyun * Copyright(c) 2019 - 2020 Realtek Corporation.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun * published by the Free Software Foundation.
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun * more details.
13*4882a593Smuzhiyun *
14*4882a593Smuzhiyun *****************************************************************************/
15*4882a593Smuzhiyun #ifndef _HAL_PLTFM_WINDOWS_H_
16*4882a593Smuzhiyun #define _HAL_PLTFM_WINDOWS_H_
17*4882a593Smuzhiyun #include <ntdef.h>
18*4882a593Smuzhiyun #include <ndis.h>
19*4882a593Smuzhiyun #include <stdio.h>
20*4882a593Smuzhiyun #include <stdarg.h>
21*4882a593Smuzhiyun #include <ntstrsafe.h>
22*4882a593Smuzhiyun #include "StatusCode.h"
23*4882a593Smuzhiyun #include "EndianFree.h"
24*4882a593Smuzhiyun #include "LinkList.h" //for N6C_pltfmdef - _RT_TIMER_HANDLE
25*4882a593Smuzhiyun #include "N6C_pltfmdef.h" //defined u8 :: XXX_pltfmdef.h must before pltfm_def.h
26*4882a593Smuzhiyun #include "pltfm_def.h"
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun #if defined(CONFIG_USB_HCI)
29*4882a593Smuzhiyun #include <wdftypes.h> //for WDFUSBPIPE
30*4882a593Smuzhiyun #include "core_util.h"
31*4882a593Smuzhiyun #include "core_usb.h"
32*4882a593Smuzhiyun #include "pltfm_usb.h"
33*4882a593Smuzhiyun #endif
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun #include "phl_config.h"
36*4882a593Smuzhiyun #ifdef CONFIG_PHL_WPP
37*4882a593Smuzhiyun //#include "hal_g6\phy\rf\halrf_wpp.h"
38*4882a593Smuzhiyun #include "hal_g6\mac\halmac_wpp.h"
39*4882a593Smuzhiyun #include "hal_g6\phy\bb\halbb_wpp.h"
40*4882a593Smuzhiyun #include "phl_wpp.h"
41*4882a593Smuzhiyun #include <rtwlanwpp.h>
42*4882a593Smuzhiyun #endif
43*4882a593Smuzhiyun #include "phl_types.h"
44*4882a593Smuzhiyun #include "phl_util.h"
45*4882a593Smuzhiyun #include "phl_def.h"
46*4882a593Smuzhiyun //#include "phl_types.h"
47*4882a593Smuzhiyun //#include "PlatformDef.h"
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun #define WriteLE4Byte(_ptr, _val) WriteEF4Byte(_ptr,_val)
50*4882a593Smuzhiyun #define WriteLE2Byte(_ptr, _val) WriteEF2Byte(_ptr,_val)
51*4882a593Smuzhiyun #define WriteLE1Byte(_ptr, _val) WriteEF1Byte(_ptr,_val)
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun #define WriteBE4Byte(_ptr, _val) WriteEF4Byte(_ptr,H2N1BYTE(_val))
54*4882a593Smuzhiyun #define WriteBE2Byte(_ptr, _val) WriteEF2Byte(_ptr,H2N2BYTE(_val))
55*4882a593Smuzhiyun #define WriteBE1Byte(_ptr, _val) WriteEF1Byte(_ptr,H2N4BYTE(_val))
56*4882a593Smuzhiyun
_os_strpbrk(const char * cs,const char * ct)57*4882a593Smuzhiyun static inline char *_os_strpbrk(const char *cs, const char *ct)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun const char *sc1, *sc2;
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun for (sc1 = cs; *sc1 != '\0'; ++sc1) {
62*4882a593Smuzhiyun for (sc2 = ct; *sc2 != '\0'; ++sc2) {
63*4882a593Smuzhiyun if (*sc1 == *sc2)
64*4882a593Smuzhiyun return (char *)sc1;
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun return NULL;
68*4882a593Smuzhiyun }
69*4882a593Smuzhiyun
_os_strsep(char ** s,const char * ct)70*4882a593Smuzhiyun static inline char *_os_strsep(char **s, const char *ct)
71*4882a593Smuzhiyun {
72*4882a593Smuzhiyun char *sbegin = *s;
73*4882a593Smuzhiyun char *end;
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun if (sbegin == NULL)
76*4882a593Smuzhiyun return NULL;
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun end = _os_strpbrk((const char *)sbegin, ct);
79*4882a593Smuzhiyun if (end)
80*4882a593Smuzhiyun *end++ = '\0';
81*4882a593Smuzhiyun *s = end;
82*4882a593Smuzhiyun return sbegin;
83*4882a593Smuzhiyun }
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun
_os_strcmp(const char * s1,const char * s2)86*4882a593Smuzhiyun static inline int _os_strcmp(const char *s1, const char *s2)
87*4882a593Smuzhiyun {
88*4882a593Smuzhiyun return strcmp(s1, s2);
89*4882a593Smuzhiyun }
_os_strncmp(const char * s1,const char * s2,size_t n)90*4882a593Smuzhiyun static inline int _os_strncmp(const char *s1, const char *s2, size_t n)
91*4882a593Smuzhiyun {
92*4882a593Smuzhiyun return strncmp(s1, s2, n);
93*4882a593Smuzhiyun }
_os_strcpy(char * dest,const char * src)94*4882a593Smuzhiyun static __inline char *_os_strcpy(char *dest, const char *src)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun return strcpy(dest, src);
97*4882a593Smuzhiyun }
_os_strncpy(char * dest,const char * src,size_t n)98*4882a593Smuzhiyun static inline char *_os_strncpy(char *dest, const char *src, size_t n)
99*4882a593Smuzhiyun {
100*4882a593Smuzhiyun return strncpy(dest, src, n);
101*4882a593Smuzhiyun }
_os_strchr(const char * s,int c)102*4882a593Smuzhiyun static __inline char *_os_strchr(const char *s, int c)
103*4882a593Smuzhiyun {
104*4882a593Smuzhiyun return strchr(s, c);
105*4882a593Smuzhiyun }
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun #define _os_snprintf(s, sz, fmt, ...) _snprintf(s, sz, fmt, ##__VA_ARGS__)
108*4882a593Smuzhiyun #define _os_vsnprintf(str, size, fmt, args) RtlStringCbVPrintfA(str, size, fmt, args)
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun #define _os_strncat strncat
111*4882a593Smuzhiyun
_os_strlen(u8 * buf)112*4882a593Smuzhiyun static __inline u32 _os_strlen(u8 *buf)
113*4882a593Smuzhiyun {
114*4882a593Smuzhiyun return (u32)strlen((const char *)buf);
115*4882a593Smuzhiyun }
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun #define _os_sscanf(buf, fmt, ...) sscanf_s(buf, fmt, ##__VA_ARGS__)
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun /* delay */
_os_delay_ms(void * drv_priv,u32 ms)120*4882a593Smuzhiyun static __inline void _os_delay_ms(void * drv_priv, u32 ms)
121*4882a593Smuzhiyun {
122*4882a593Smuzhiyun PlatformForceStallExecution(1000 * ms);
123*4882a593Smuzhiyun }
_os_delay_us(void * h,u32 us)124*4882a593Smuzhiyun static __inline void _os_delay_us(void *h, u32 us)
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun PlatformForceStallExecution(us);
127*4882a593Smuzhiyun }
_os_sleep_ms(void * h,u32 ms)128*4882a593Smuzhiyun static __inline void _os_sleep_ms(void *h, u32 ms)
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun PlatformForceStallExecution(1000 * ms);
131*4882a593Smuzhiyun }
_os_sleep_us(void * h,u32 us)132*4882a593Smuzhiyun static __inline void _os_sleep_us(void *h, u32 us)
133*4882a593Smuzhiyun {
134*4882a593Smuzhiyun PlatformForceStallExecution(us);
135*4882a593Smuzhiyun }
136*4882a593Smuzhiyun
_os_get_cur_time_us(void)137*4882a593Smuzhiyun static inline u32 _os_get_cur_time_us(void)
138*4882a593Smuzhiyun {
139*4882a593Smuzhiyun u64 ret;
140*4882a593Smuzhiyun ret = PlatformGetCurrentTime();
141*4882a593Smuzhiyun return (u32)ret;
142*4882a593Smuzhiyun }
143*4882a593Smuzhiyun
_os_get_cur_time_ms(void)144*4882a593Smuzhiyun static inline u32 _os_get_cur_time_ms(void)
145*4882a593Smuzhiyun {
146*4882a593Smuzhiyun u64 ret;
147*4882a593Smuzhiyun ret = PlatformGetCurrentTime() / 1000;
148*4882a593Smuzhiyun return (u32)ret;
149*4882a593Smuzhiyun }
150*4882a593Smuzhiyun
_os_modular64(u64 x,u64 y)151*4882a593Smuzhiyun static inline u64 _os_modular64(u64 x, u64 y)
152*4882a593Smuzhiyun {
153*4882a593Smuzhiyun return x % y;
154*4882a593Smuzhiyun }
_os_division64(u64 x,u64 y)155*4882a593Smuzhiyun static inline u64 _os_division64(u64 x, u64 y)
156*4882a593Smuzhiyun {
157*4882a593Smuzhiyun return x / y;
158*4882a593Smuzhiyun }
159*4882a593Smuzhiyun
_os_minus64(u64 x,u64 y)160*4882a593Smuzhiyun static inline u64 _os_minus64(u64 x, u64 y)
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun {
163*4882a593Smuzhiyun return x - y;
164*4882a593Smuzhiyun }
165*4882a593Smuzhiyun
_os_add64(u64 x,u64 y)166*4882a593Smuzhiyun static inline u64 _os_add64(u64 x, u64 y)
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun {
169*4882a593Smuzhiyun return x + y;
170*4882a593Smuzhiyun }
171*4882a593Smuzhiyun
_os_div_round_up(u32 x,u32 y)172*4882a593Smuzhiyun static inline u32 _os_div_round_up(u32 x, u32 y)
173*4882a593Smuzhiyun {
174*4882a593Smuzhiyun return (x + y - 1) / y;
175*4882a593Smuzhiyun }
176*4882a593Smuzhiyun
_os_pkt_buf_unmap_rx(void * d,_dma bus_addr_l,_dma bus_addr_h,u32 buf_sz)177*4882a593Smuzhiyun static inline void *_os_pkt_buf_unmap_rx(void *d, _dma bus_addr_l, _dma bus_addr_h, u32 buf_sz)
178*4882a593Smuzhiyun {
179*4882a593Smuzhiyun return NULL;
180*4882a593Smuzhiyun }
181*4882a593Smuzhiyun
_os_pkt_buf_map_rx(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,void * os_priv)182*4882a593Smuzhiyun static inline void *_os_pkt_buf_map_rx(void *d, _dma *bus_addr_l, _dma *bus_addr_h,
183*4882a593Smuzhiyun u32 buf_sz, void *os_priv)
184*4882a593Smuzhiyun {
185*4882a593Smuzhiyun return NULL;
186*4882a593Smuzhiyun }
187*4882a593Smuzhiyun
_os_pkt_buf_alloc_rx(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,void ** os_priv)188*4882a593Smuzhiyun static inline void *_os_pkt_buf_alloc_rx(void *d, _dma *bus_addr_l,
189*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz, void **os_priv)
190*4882a593Smuzhiyun {
191*4882a593Smuzhiyun struct _SHARED_MEMORY share_mem;
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun PlatformZeroMemory(&share_mem, sizeof(share_mem));
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun if (PlatformAllocateSharedMemory(d, &share_mem, buf_sz) != RT_STATUS_SUCCESS) {
196*4882a593Smuzhiyun share_mem.VirtualAddress = NULL;
197*4882a593Smuzhiyun *bus_addr_l = 0;
198*4882a593Smuzhiyun *bus_addr_h = 0;
199*4882a593Smuzhiyun *os_priv = NULL;
200*4882a593Smuzhiyun } else {
201*4882a593Smuzhiyun PlatformZeroMemory(share_mem.VirtualAddress, buf_sz);
202*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
203*4882a593Smuzhiyun *bus_addr_l = (_dma)share_mem.PhysicalAddressLow;
204*4882a593Smuzhiyun *bus_addr_h = (_dma)share_mem.PhysicalAddressHigh;
205*4882a593Smuzhiyun #endif
206*4882a593Smuzhiyun #if WIFICX_BASED
207*4882a593Smuzhiyun *os_priv = share_mem.pltfm_rsvd[0];
208*4882a593Smuzhiyun #endif
209*4882a593Smuzhiyun }
210*4882a593Smuzhiyun return (u8 *)share_mem.VirtualAddress;
211*4882a593Smuzhiyun }
_os_pkt_buf_free_rx(void * d,u8 * vir_addr,_dma bus_addr_l,_dma bus_addr_h,u32 buf_sz,void * os_priv)212*4882a593Smuzhiyun static inline void _os_pkt_buf_free_rx(void *d, u8 *vir_addr, _dma bus_addr_l,
213*4882a593Smuzhiyun _dma bus_addr_h, u32 buf_sz, void *os_priv)
214*4882a593Smuzhiyun {
215*4882a593Smuzhiyun struct _SHARED_MEMORY share_mem;
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun if (NULL != vir_addr) {
218*4882a593Smuzhiyun share_mem.VirtualAddress = (pu1Byte)vir_addr;
219*4882a593Smuzhiyun share_mem.PhysicalAddressLow = (u4Byte)bus_addr_l;
220*4882a593Smuzhiyun share_mem.PhysicalAddressHigh = (u4Byte)bus_addr_h;
221*4882a593Smuzhiyun share_mem.Length = (u4Byte)buf_sz;
222*4882a593Smuzhiyun #if WIFICX_BASED
223*4882a593Smuzhiyun share_mem.pltfm_rsvd[0] = os_priv;
224*4882a593Smuzhiyun #endif
225*4882a593Smuzhiyun PlatformFreeSharedMemory(d, &share_mem);
226*4882a593Smuzhiyun }
227*4882a593Smuzhiyun }
228*4882a593Smuzhiyun
229*4882a593Smuzhiyun /* phl pre-alloc network layer buffer */
_os_alloc_netbuf(void * d,u32 buf_sz,void ** os_priv)230*4882a593Smuzhiyun static inline void * _os_alloc_netbuf(void *d, u32 buf_sz, void **os_priv)
231*4882a593Smuzhiyun {
232*4882a593Smuzhiyun return NULL; // windows never do this.
233*4882a593Smuzhiyun }
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun /* Free netbuf for error case. (ex. drop rx-reorder packet) */
_os_free_netbuf(void * d,u8 * vir_addr,u32 buf_sz,void * os_priv)236*4882a593Smuzhiyun static inline void _os_free_netbuf(void *d, u8 *vir_addr, u32 buf_sz, void *os_priv)
237*4882a593Smuzhiyun {
238*4882a593Smuzhiyun }
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
_os_cache_inv(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 direction)241*4882a593Smuzhiyun static inline void _os_cache_inv(void *d, _dma *bus_addr_l, _dma *bus_addr_h,
242*4882a593Smuzhiyun u32 buf_sz, u8 direction)
243*4882a593Smuzhiyun {
244*4882a593Smuzhiyun }
_os_cache_wback(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 direction)245*4882a593Smuzhiyun static inline void _os_cache_wback(void *d, _dma *bus_addr_l,
246*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz, u8 direction)
247*4882a593Smuzhiyun {
248*4882a593Smuzhiyun }
249*4882a593Smuzhiyun
250*4882a593Smuzhiyun /* txbd, rxbd, wd */
_os_shmem_alloc(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 cache,u8 direction,void ** os_rsvd)251*4882a593Smuzhiyun static inline void *_os_shmem_alloc(void *d, _dma *bus_addr_l,
252*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz,
253*4882a593Smuzhiyun u8 cache, u8 direction, void **os_rsvd)
254*4882a593Smuzhiyun {
255*4882a593Smuzhiyun struct _SHARED_MEMORY share_mem;
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun PlatformZeroMemory(&share_mem, sizeof(share_mem));
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun if (PlatformAllocateSharedMemory(d, &share_mem, buf_sz) != RT_STATUS_SUCCESS) {
260*4882a593Smuzhiyun share_mem.VirtualAddress = NULL;
261*4882a593Smuzhiyun *bus_addr_l = 0;
262*4882a593Smuzhiyun *bus_addr_h = 0;
263*4882a593Smuzhiyun } else {
264*4882a593Smuzhiyun PlatformZeroMemory(share_mem.VirtualAddress, buf_sz);
265*4882a593Smuzhiyun *bus_addr_l = (_dma)share_mem.PhysicalAddressLow;
266*4882a593Smuzhiyun *bus_addr_h = (_dma)share_mem.PhysicalAddressHigh;
267*4882a593Smuzhiyun #if WIFICX_BASED
268*4882a593Smuzhiyun *os_rsvd = share_mem.pltfm_rsvd[0];
269*4882a593Smuzhiyun #endif
270*4882a593Smuzhiyun }
271*4882a593Smuzhiyun return (u8 *)share_mem.VirtualAddress;
272*4882a593Smuzhiyun }
_os_shmem_free(void * d,u8 * vir_addr,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 cache,u8 direction,void * os_rsvd)273*4882a593Smuzhiyun static inline void _os_shmem_free(void *d, u8 *vir_addr, _dma *bus_addr_l,
274*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz,
275*4882a593Smuzhiyun u8 cache, u8 direction, void *os_rsvd)
276*4882a593Smuzhiyun {
277*4882a593Smuzhiyun struct _SHARED_MEMORY share_mem;
278*4882a593Smuzhiyun
279*4882a593Smuzhiyun PlatformZeroMemory(&share_mem, sizeof(share_mem));
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun if (NULL != vir_addr) {
282*4882a593Smuzhiyun share_mem.VirtualAddress = (pu1Byte)vir_addr;
283*4882a593Smuzhiyun share_mem.PhysicalAddressLow = (u4Byte)*bus_addr_l;
284*4882a593Smuzhiyun share_mem.PhysicalAddressHigh = (u4Byte)*bus_addr_h;
285*4882a593Smuzhiyun share_mem.Length = (u4Byte)buf_sz;
286*4882a593Smuzhiyun #if WIFICX_BASED
287*4882a593Smuzhiyun share_mem.pltfm_rsvd[0] = os_rsvd;
288*4882a593Smuzhiyun #endif
289*4882a593Smuzhiyun PlatformFreeSharedMemory(d, &share_mem);
290*4882a593Smuzhiyun }
291*4882a593Smuzhiyun }
292*4882a593Smuzhiyun #endif /*CONFIG_PCI_HCI*/
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun #define _os_mem_alloc(h, buf_sz) _os_mem_alloc_with_tag(h, GenTag(__func__), buf_sz)
295*4882a593Smuzhiyun /* memory */
_os_mem_alloc_with_tag(void * h,u32 tag,u32 buf_sz)296*4882a593Smuzhiyun static __inline void *_os_mem_alloc_with_tag(void *h, u32 tag, u32 buf_sz)
297*4882a593Smuzhiyun {
298*4882a593Smuzhiyun PVOID ptr = NULL;
299*4882a593Smuzhiyun if (PlatformAllocateMemoryWithTag(tag, &ptr, buf_sz) != RT_STATUS_SUCCESS)
300*4882a593Smuzhiyun return NULL;
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun PlatformZeroMemory(ptr, buf_sz);
303*4882a593Smuzhiyun return ptr;
304*4882a593Smuzhiyun }
_os_mem_free(void * h,void * buf,u32 buf_sz)305*4882a593Smuzhiyun static __inline void _os_mem_free(void *h, void *buf, u32 buf_sz)
306*4882a593Smuzhiyun {
307*4882a593Smuzhiyun if(buf)
308*4882a593Smuzhiyun PlatformFreeMemory(buf, buf_sz);
309*4882a593Smuzhiyun }
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun #define _os_kmem_alloc(h, buf_sz) _os_kmem_alloc_with_tag(h, GenTag(__func__), buf_sz)
312*4882a593Smuzhiyun /*physically contiguous memory if the buffer will be accessed by a DMA device*/
_os_kmem_alloc_with_tag(void * h,u32 tag,u32 buf_sz)313*4882a593Smuzhiyun static __inline void *_os_kmem_alloc_with_tag(void *h, u32 tag, u32 buf_sz)
314*4882a593Smuzhiyun {
315*4882a593Smuzhiyun PVOID ptr = NULL;
316*4882a593Smuzhiyun if (PlatformAllocateMemoryWithTag(tag, &ptr, buf_sz) != RT_STATUS_SUCCESS)
317*4882a593Smuzhiyun return NULL;
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun PlatformZeroMemory(ptr, buf_sz);
320*4882a593Smuzhiyun return ptr;
321*4882a593Smuzhiyun }
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun /*physically contiguous memory if the buffer will be accessed by a DMA device*/
_os_kmem_free(void * h,void * buf,u32 buf_sz)324*4882a593Smuzhiyun static __inline void _os_kmem_free(void *h, void *buf, u32 buf_sz)
325*4882a593Smuzhiyun {
326*4882a593Smuzhiyun if(buf)
327*4882a593Smuzhiyun PlatformFreeMemory(buf, buf_sz);
328*4882a593Smuzhiyun }
329*4882a593Smuzhiyun /*static __inline void *_os_aligment_mem_alloc(void *h, u32 buf_sz)
330*4882a593Smuzhiyun {
331*4882a593Smuzhiyun PALIGNED_SHARED_MEMORY pAlignedSharedMemory=NULL;
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun PlatformAllocateAlignedSharedMemory()
334*4882a593Smuzhiyun }*/
335*4882a593Smuzhiyun
_os_mem_set(void * h,void * buf,s8 value,u32 buf_sz)336*4882a593Smuzhiyun static __inline void _os_mem_set(void *h, void *buf, s8 value, u32 buf_sz)
337*4882a593Smuzhiyun {
338*4882a593Smuzhiyun PlatformFillMemory(buf, buf_sz, value);
339*4882a593Smuzhiyun }
_os_mem_cpy(void * h,void * dest,void * src,u32 buf_sz)340*4882a593Smuzhiyun static __inline void _os_mem_cpy(void *h, void *dest, void *src, u32 buf_sz)
341*4882a593Smuzhiyun {
342*4882a593Smuzhiyun PlatformMoveMemory(dest, src, buf_sz);
343*4882a593Smuzhiyun }
_os_mem_cmp(void * h,void * ptr1,void * ptr2,u32 buf_sz)344*4882a593Smuzhiyun static __inline int _os_mem_cmp(void *h, void *ptr1, void *ptr2, u32 buf_sz)
345*4882a593Smuzhiyun {
346*4882a593Smuzhiyun
347*4882a593Smuzhiyun return PlatformCompareMemory(ptr1, ptr2, buf_sz);
348*4882a593Smuzhiyun }
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun /* timer */
_os_init_timer(void * drv_priv,_os_timer * timer,void (* call_back_func)(void * context),void * context,const char * sz_id)351*4882a593Smuzhiyun static __inline void _os_init_timer(void *drv_priv, _os_timer *timer,
352*4882a593Smuzhiyun void (*call_back_func)(void *context), void *context,
353*4882a593Smuzhiyun const char *sz_id)
354*4882a593Smuzhiyun {
355*4882a593Smuzhiyun PlatformInitializeTimer(drv_priv, timer, (RT_TIMER_CALL_BACK)call_back_func, context, sz_id);
356*4882a593Smuzhiyun }
_os_set_timer(void * drv_priv,_os_timer * timer,u32 ms_delay)357*4882a593Smuzhiyun static __inline void _os_set_timer(void *drv_priv, _os_timer *timer, u32 ms_delay)
358*4882a593Smuzhiyun {
359*4882a593Smuzhiyun PlatformSetTimer(drv_priv, timer, ms_delay);
360*4882a593Smuzhiyun }
_os_cancel_timer(void * drv_priv,_os_timer * timer)361*4882a593Smuzhiyun static __inline void _os_cancel_timer(void *drv_priv, _os_timer *timer)
362*4882a593Smuzhiyun {
363*4882a593Smuzhiyun PlatformCancelTimer(drv_priv, timer);
364*4882a593Smuzhiyun }
_os_cancel_timer_async(void * drv_priv,_os_timer * timer)365*4882a593Smuzhiyun static inline void _os_cancel_timer_async(void *drv_priv, _os_timer *timer)
366*4882a593Smuzhiyun {
367*4882a593Smuzhiyun PlatformCancelTimer(drv_priv, timer);
368*4882a593Smuzhiyun }
_os_release_timer(void * drv_priv,_os_timer * timer)369*4882a593Smuzhiyun static __inline void _os_release_timer(void *drv_priv, _os_timer *timer)
370*4882a593Smuzhiyun {
371*4882a593Smuzhiyun PlatformReleaseTimer(drv_priv, timer);
372*4882a593Smuzhiyun }
373*4882a593Smuzhiyun
374*4882a593Smuzhiyun
375*4882a593Smuzhiyun /* mutex */
_os_mutex_init(void * h,_os_mutex * mutex)376*4882a593Smuzhiyun static __inline void _os_mutex_init(void *h, _os_mutex *mutex)
377*4882a593Smuzhiyun {
378*4882a593Smuzhiyun PlatformInitializeMutex(mutex);
379*4882a593Smuzhiyun }
380*4882a593Smuzhiyun
_os_mutex_deinit(void * h,_os_mutex * mutex)381*4882a593Smuzhiyun static __inline void _os_mutex_deinit(void *h, _os_mutex *mutex)
382*4882a593Smuzhiyun {
383*4882a593Smuzhiyun PlatformFreeMutex(mutex);
384*4882a593Smuzhiyun }
385*4882a593Smuzhiyun
_os_mutex_lock(void * h,_os_mutex * mutex)386*4882a593Smuzhiyun static __inline void _os_mutex_lock(void *h, _os_mutex *mutex)
387*4882a593Smuzhiyun {
388*4882a593Smuzhiyun PlatformAcquireMutex(mutex);
389*4882a593Smuzhiyun }
390*4882a593Smuzhiyun
_os_mutex_unlock(void * h,_os_mutex * mutex)391*4882a593Smuzhiyun static __inline void _os_mutex_unlock(void *h, _os_mutex *mutex)
392*4882a593Smuzhiyun {
393*4882a593Smuzhiyun PlatformReleaseMutex(mutex);
394*4882a593Smuzhiyun }
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun /* Semaphore */
_os_sema_init(void * h,_os_sema * sema,int int_cnt)398*4882a593Smuzhiyun static inline void _os_sema_init(void *h, _os_sema *sema, int int_cnt)
399*4882a593Smuzhiyun {
400*4882a593Smuzhiyun PlatformInitializeSemaphore(sema, int_cnt);
401*4882a593Smuzhiyun }
402*4882a593Smuzhiyun
_os_sema_free(void * h,_os_sema * sema)403*4882a593Smuzhiyun static inline void _os_sema_free(void *h, _os_sema *sema)
404*4882a593Smuzhiyun {
405*4882a593Smuzhiyun PlatformFreeSemaphore(sema);
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun
_os_sema_up(void * h,_os_sema * sema)408*4882a593Smuzhiyun static inline void _os_sema_up(void *h, _os_sema *sema)
409*4882a593Smuzhiyun {
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun PlatformReleaseSemaphore(sema);
412*4882a593Smuzhiyun }
413*4882a593Smuzhiyun
_os_sema_down(void * h,_os_sema * sema)414*4882a593Smuzhiyun static inline u8 _os_sema_down(void *h, _os_sema *sema)
415*4882a593Smuzhiyun {
416*4882a593Smuzhiyun if(PlatformAcquireSemaphore(sema)==RT_STATUS_SUCCESS)
417*4882a593Smuzhiyun return 0; //// RTW_PHL_STATUS_SUCCESS
418*4882a593Smuzhiyun else
419*4882a593Smuzhiyun return 1;
420*4882a593Smuzhiyun
421*4882a593Smuzhiyun }
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun /* event */
_os_event_init(void * h,_os_event * event)424*4882a593Smuzhiyun static __inline void _os_event_init(void *h, _os_event *event)
425*4882a593Smuzhiyun {
426*4882a593Smuzhiyun PlatformInitializeEvent(event);
427*4882a593Smuzhiyun }
428*4882a593Smuzhiyun
_os_event_free(void * h,_os_event * event)429*4882a593Smuzhiyun static __inline void _os_event_free(void *h, _os_event *event)
430*4882a593Smuzhiyun {
431*4882a593Smuzhiyun PlatformFreeEvent(event);
432*4882a593Smuzhiyun }
433*4882a593Smuzhiyun
_os_event_reset(void * h,_os_event * event)434*4882a593Smuzhiyun static __inline void _os_event_reset(void *h, _os_event *event)
435*4882a593Smuzhiyun {
436*4882a593Smuzhiyun PlatformResetEvent(event);
437*4882a593Smuzhiyun }
438*4882a593Smuzhiyun
_os_event_set(void * h,_os_event * event)439*4882a593Smuzhiyun static __inline void _os_event_set(void *h, _os_event *event)
440*4882a593Smuzhiyun {
441*4882a593Smuzhiyun PlatformSetEvent(event);
442*4882a593Smuzhiyun }
443*4882a593Smuzhiyun
444*4882a593Smuzhiyun /*
445*4882a593Smuzhiyun * m_sec
446*4882a593Smuzhiyun * == 0 : wait for completion
447*4882a593Smuzhiyun * > 0 : wait for timeout or completion
448*4882a593Smuzhiyun * return value
449*4882a593Smuzhiyun * 0:timeout
450*4882a593Smuzhiyun * otherwise:success
451*4882a593Smuzhiyun */
_os_event_wait(void * h,_os_event * event,u32 m_sec)452*4882a593Smuzhiyun static __inline int _os_event_wait(void *h, _os_event *event, u32 m_sec)
453*4882a593Smuzhiyun {
454*4882a593Smuzhiyun return PlatformWaitEvent(event, m_sec);
455*4882a593Smuzhiyun }
456*4882a593Smuzhiyun
457*4882a593Smuzhiyun
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun
460*4882a593Smuzhiyun /* spinlock */
_os_spinlock_init(void * d,_os_lock * plock)461*4882a593Smuzhiyun static __inline void _os_spinlock_init(void *d, _os_lock *plock)
462*4882a593Smuzhiyun {
463*4882a593Smuzhiyun PLATFORM_INIT_RT_SPINLOCK(*plock);
464*4882a593Smuzhiyun }
_os_spinlock_free(void * d,_os_lock * plock)465*4882a593Smuzhiyun static __inline void _os_spinlock_free(void *d, _os_lock *plock)
466*4882a593Smuzhiyun {
467*4882a593Smuzhiyun PLATFORM_FREE_RT_SPINLOCK(*plock);
468*4882a593Smuzhiyun }
469*4882a593Smuzhiyun
_os_spinlock(void * d,_os_lock * plock,enum lock_type type,_os_spinlockfg * flags)470*4882a593Smuzhiyun static inline void _os_spinlock(void *d, _os_lock *plock,
471*4882a593Smuzhiyun enum lock_type type, _os_spinlockfg *flags)
472*4882a593Smuzhiyun {
473*4882a593Smuzhiyun PLATFORM_ACQUIRE_RT_SPINLOCK(*plock);
474*4882a593Smuzhiyun }
_os_spinunlock(void * d,_os_lock * plock,enum lock_type type,_os_spinlockfg * flags)475*4882a593Smuzhiyun static inline void _os_spinunlock(void *d, _os_lock *plock,
476*4882a593Smuzhiyun enum lock_type type, _os_spinlockfg *flags)
477*4882a593Smuzhiyun {
478*4882a593Smuzhiyun PLATFORM_RELEASE_RT_SPINLOCK(*plock);
479*4882a593Smuzhiyun }
480*4882a593Smuzhiyun
481*4882a593Smuzhiyun /* tasklet/thread */
_os_thread_init(void * drv_priv,_os_thread * thread,int (* call_back_func)(void * context),void * context,const char namefmt[])482*4882a593Smuzhiyun static __inline u8 _os_thread_init( void *drv_priv, _os_thread *thread,
483*4882a593Smuzhiyun int (*call_back_func)(void * context),
484*4882a593Smuzhiyun void *context,
485*4882a593Smuzhiyun const char namefmt[])
486*4882a593Smuzhiyun {
487*4882a593Smuzhiyun if (PlatformInitializeThread(drv_priv,
488*4882a593Smuzhiyun thread,
489*4882a593Smuzhiyun (RT_THREAD_CALL_BACK)call_back_func,
490*4882a593Smuzhiyun namefmt,
491*4882a593Smuzhiyun 0,
492*4882a593Smuzhiyun context) == RT_STATUS_SUCCESS) //0: caller will wait for the event indefinitely.
493*4882a593Smuzhiyun return 0;
494*4882a593Smuzhiyun else
495*4882a593Smuzhiyun return 1;
496*4882a593Smuzhiyun }
497*4882a593Smuzhiyun
_os_thread_deinit(void * drv_priv,_os_thread * thread)498*4882a593Smuzhiyun static __inline u8 _os_thread_deinit(void *drv_priv, _os_thread *thread)
499*4882a593Smuzhiyun {
500*4882a593Smuzhiyun /* Terminate the thread */
501*4882a593Smuzhiyun PlatformWaitThreadEnd(drv_priv, thread);
502*4882a593Smuzhiyun PlatformCancelThread(drv_priv, thread);
503*4882a593Smuzhiyun PlatformReleaseThread(drv_priv, thread);
504*4882a593Smuzhiyun return 0;
505*4882a593Smuzhiyun }
506*4882a593Smuzhiyun
_os_thread_schedule(void * drv_priv,_os_thread * thread)507*4882a593Smuzhiyun static __inline enum rtw_phl_status _os_thread_schedule(void *drv_priv, _os_thread *thread)
508*4882a593Smuzhiyun {
509*4882a593Smuzhiyun //PlatformSetEventTrigerThread(drv_priv, thread, PASSIVE_LEVEL, thread->pContext);
510*4882a593Smuzhiyun PlatformRunThread(drv_priv, thread, PASSIVE_LEVEL);
511*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
512*4882a593Smuzhiyun }
_os_thread_stop(void * drv_priv,_os_thread * thread)513*4882a593Smuzhiyun static inline void _os_thread_stop(void *drv_priv, _os_thread *thread)
514*4882a593Smuzhiyun {
515*4882a593Smuzhiyun PlatformSetThreadEnd(drv_priv, thread);
516*4882a593Smuzhiyun }
_os_thread_check_stop(void * drv_priv,_os_thread * thread)517*4882a593Smuzhiyun static inline int _os_thread_check_stop(void *drv_priv, _os_thread *thread)
518*4882a593Smuzhiyun {
519*4882a593Smuzhiyun return PlatformIsThreadEnd(drv_priv, thread);
520*4882a593Smuzhiyun }
521*4882a593Smuzhiyun
_os_thread_wait_stop(void * drv_priv,_os_thread * thread)522*4882a593Smuzhiyun static inline int _os_thread_wait_stop(void *drv_priv, _os_thread *thread)
523*4882a593Smuzhiyun {
524*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
525*4882a593Smuzhiyun }
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun /* Workitem */
_os_workitem_init(void * drv_priv,_os_workitem * workitem,void (* call_back_func)(void * context),void * context)528*4882a593Smuzhiyun static __inline u8 _os_workitem_init(void *drv_priv, _os_workitem *workitem, void (*call_back_func)(void* context), void *context)
529*4882a593Smuzhiyun {
530*4882a593Smuzhiyun if (PlatformInitializeWorkItem(drv_priv, workitem, (RT_WORKITEM_CALL_BACK)call_back_func,
531*4882a593Smuzhiyun context, "phl_workitem") == RT_STATUS_SUCCESS)
532*4882a593Smuzhiyun {
533*4882a593Smuzhiyun PlatformStartWorkItem(workitem);
534*4882a593Smuzhiyun return 0; // RTW_PHL_STATUS_SUCCESS
535*4882a593Smuzhiyun }
536*4882a593Smuzhiyun else
537*4882a593Smuzhiyun return 1;
538*4882a593Smuzhiyun }
_os_workitem_deinit(void * drv_priv,_os_workitem * workitem)539*4882a593Smuzhiyun static __inline u8 _os_workitem_deinit(void *drv_priv, _os_workitem *workitem)
540*4882a593Smuzhiyun {
541*4882a593Smuzhiyun PlatformStopWorkItem(workitem);
542*4882a593Smuzhiyun PlatformFreeWorkItem(workitem);
543*4882a593Smuzhiyun return 0;
544*4882a593Smuzhiyun }
_os_workitem_schedule(void * drv_priv,_os_workitem * workitem)545*4882a593Smuzhiyun static __inline u8 _os_workitem_schedule(void *drv_priv, _os_workitem *workitem)
546*4882a593Smuzhiyun {
547*4882a593Smuzhiyun if(PlatformScheduleWorkItem(workitem) == TRUE)
548*4882a593Smuzhiyun return 0; // RTW_PHL_STATUS_SUCCESS
549*4882a593Smuzhiyun else
550*4882a593Smuzhiyun return 1;
551*4882a593Smuzhiyun }
552*4882a593Smuzhiyun
553*4882a593Smuzhiyun /*
554*4882a593Smuzhiyun static __inline void _os_workitem_run(void *h, hal_thread *thread)
555*4882a593Smuzhiyun {
556*4882a593Smuzhiyun //??
557*4882a593Smuzhiyun }
558*4882a593Smuzhiyun static __inline void _os_workitem_kill(void *h, hal_thread *thread)
559*4882a593Smuzhiyun {
560*4882a593Smuzhiyun PlatformStopWorkItem(thread);
561*4882a593Smuzhiyun }
562*4882a593Smuzhiyun static __inline void _os_workitem_pause(void *h, hal_thread *thread)
563*4882a593Smuzhiyun {
564*4882a593Smuzhiyun }
565*4882a593Smuzhiyun static __inline void _os_workitem_resume(void *h, hal_thread *thread)
566*4882a593Smuzhiyun {
567*4882a593Smuzhiyun }
568*4882a593Smuzhiyun */
569*4882a593Smuzhiyun
570*4882a593Smuzhiyun /* tasklet */
571*4882a593Smuzhiyun
phl_notify_thread_callback(void * context)572*4882a593Smuzhiyun static __inline int phl_notify_thread_callback(void *context)
573*4882a593Smuzhiyun {
574*4882a593Smuzhiyun struct rtw_phl_handler *handler = (struct rtw_phl_handler *)context;
575*4882a593Smuzhiyun _os_thread *thread = (_os_thread *) &(handler->os_handler.u.tasklet);
576*4882a593Smuzhiyun do {
577*4882a593Smuzhiyun if(_os_sema_down(handler->drv_priv, &(thread->sema)) != RTW_PHL_STATUS_SUCCESS )
578*4882a593Smuzhiyun break;
579*4882a593Smuzhiyun if(handler->status & RTW_PHL_HANDLER_STATUS_RELEASED)
580*4882a593Smuzhiyun break;
581*4882a593Smuzhiyun handler->callback(thread);
582*4882a593Smuzhiyun } while (true);
583*4882a593Smuzhiyun return 0;
584*4882a593Smuzhiyun }
585*4882a593Smuzhiyun
_os_tasklet_init(void * drv_priv,_os_tasklet * tasklet,void (* call_back_func)(void * context),void * context)586*4882a593Smuzhiyun static __inline u8 _os_tasklet_init(void *drv_priv, _os_tasklet *tasklet, void (*call_back_func)(void *context), void *context)
587*4882a593Smuzhiyun {
588*4882a593Smuzhiyun _os_thread *actual_thread = (_os_thread *)tasklet;
589*4882a593Smuzhiyun struct rtw_phl_handler *handler;
590*4882a593Smuzhiyun
591*4882a593Smuzhiyun _os_thread_init(drv_priv, actual_thread, phl_notify_thread_callback,
592*4882a593Smuzhiyun context, "phl_tasklet");
593*4882a593Smuzhiyun _os_thread_schedule(drv_priv, actual_thread);
594*4882a593Smuzhiyun
595*4882a593Smuzhiyun handler = (struct rtw_phl_handler *)actual_thread->pContext;
596*4882a593Smuzhiyun handler->status &= RTW_PHL_HANDLER_STATUS_INITIALIZED;
597*4882a593Smuzhiyun return 0;
598*4882a593Smuzhiyun }
599*4882a593Smuzhiyun
_os_tasklet_deinit(void * drv_priv,_os_tasklet * tasklet)600*4882a593Smuzhiyun static __inline u8 _os_tasklet_deinit(void *drv_priv, _os_tasklet *tasklet)
601*4882a593Smuzhiyun {
602*4882a593Smuzhiyun _os_thread *actual_thread = (_os_thread *)tasklet;
603*4882a593Smuzhiyun struct rtw_phl_handler *handler = (struct rtw_phl_handler *)actual_thread->pContext;
604*4882a593Smuzhiyun if (handler)
605*4882a593Smuzhiyun handler->status |= RTW_PHL_HANDLER_STATUS_RELEASED;
606*4882a593Smuzhiyun _os_sema_up(drv_priv, &(actual_thread->sema));
607*4882a593Smuzhiyun _os_thread_deinit(drv_priv, actual_thread);
608*4882a593Smuzhiyun return 0;
609*4882a593Smuzhiyun }
610*4882a593Smuzhiyun
_os_tasklet_schedule(void * drv_priv,_os_tasklet * tasklet)611*4882a593Smuzhiyun static __inline enum rtw_phl_status _os_tasklet_schedule(void *drv_priv, _os_tasklet *tasklet)
612*4882a593Smuzhiyun {
613*4882a593Smuzhiyun _os_thread *actual_thread = (_os_thread *)tasklet;
614*4882a593Smuzhiyun
615*4882a593Smuzhiyun _os_sema_up(drv_priv, &(actual_thread->sema));
616*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
617*4882a593Smuzhiyun }
618*4882a593Smuzhiyun
619*4882a593Smuzhiyun
_os_test_and_clear_bit(int nr,unsigned long * addr)620*4882a593Smuzhiyun static _inline int _os_test_and_clear_bit(int nr, unsigned long *addr)
621*4882a593Smuzhiyun {
622*4882a593Smuzhiyun /*UNDO*/
623*4882a593Smuzhiyun return 0;
624*4882a593Smuzhiyun }
_os_test_and_set_bit(int nr,unsigned long * addr)625*4882a593Smuzhiyun static _inline int _os_test_and_set_bit(int nr, unsigned long *addr)
626*4882a593Smuzhiyun {
627*4882a593Smuzhiyun /*UNDO*/
628*4882a593Smuzhiyun return 1;
629*4882a593Smuzhiyun }
630*4882a593Smuzhiyun
631*4882a593Smuzhiyun
632*4882a593Smuzhiyun /* Atomic integer operations */
_os_atomic_set(void * d,_os_atomic * v,int i)633*4882a593Smuzhiyun static __inline void _os_atomic_set(void *d, _os_atomic *v, int i)
634*4882a593Smuzhiyun {
635*4882a593Smuzhiyun InterlockedExchange(v, i);
636*4882a593Smuzhiyun }
637*4882a593Smuzhiyun
_os_atomic_read(void * d,_os_atomic * v)638*4882a593Smuzhiyun static __inline int _os_atomic_read(void *d, _os_atomic *v)
639*4882a593Smuzhiyun {
640*4882a593Smuzhiyun return *v;
641*4882a593Smuzhiyun }
642*4882a593Smuzhiyun
_os_atomic_add(void * d,_os_atomic * v,int i)643*4882a593Smuzhiyun static __inline void _os_atomic_add(void *d, _os_atomic *v, int i)
644*4882a593Smuzhiyun {
645*4882a593Smuzhiyun InterlockedExchangeAdd(v, i);
646*4882a593Smuzhiyun }
_os_atomic_sub(void * d,_os_atomic * v,int i)647*4882a593Smuzhiyun static __inline void _os_atomic_sub(void *d, _os_atomic *v, int i)
648*4882a593Smuzhiyun {
649*4882a593Smuzhiyun }
650*4882a593Smuzhiyun
_os_atomic_inc(void * d,_os_atomic * v)651*4882a593Smuzhiyun static __inline void _os_atomic_inc(void *d, _os_atomic *v)
652*4882a593Smuzhiyun {
653*4882a593Smuzhiyun InterlockedIncrement(v);
654*4882a593Smuzhiyun }
655*4882a593Smuzhiyun
_os_atomic_dec(void * d,_os_atomic * v)656*4882a593Smuzhiyun static __inline void _os_atomic_dec(void *d, _os_atomic *v)
657*4882a593Smuzhiyun {
658*4882a593Smuzhiyun InterlockedDecrement(v);
659*4882a593Smuzhiyun }
660*4882a593Smuzhiyun
_os_atomic_add_return(void * d,_os_atomic * v,int i)661*4882a593Smuzhiyun static __inline int _os_atomic_add_return(void *d, _os_atomic *v, int i)
662*4882a593Smuzhiyun {
663*4882a593Smuzhiyun return 0;
664*4882a593Smuzhiyun }
665*4882a593Smuzhiyun
_os_atomic_sub_return(void * d,_os_atomic * v,int i)666*4882a593Smuzhiyun static __inline int _os_atomic_sub_return(void *d, _os_atomic *v, int i)
667*4882a593Smuzhiyun {
668*4882a593Smuzhiyun return 0;
669*4882a593Smuzhiyun }
670*4882a593Smuzhiyun
_os_atomic_inc_return(void * d,_os_atomic * v)671*4882a593Smuzhiyun static __inline int _os_atomic_inc_return(void *d, _os_atomic *v)
672*4882a593Smuzhiyun {
673*4882a593Smuzhiyun return 0;
674*4882a593Smuzhiyun }
675*4882a593Smuzhiyun
_os_atomic_dec_return(void * d,_os_atomic * v)676*4882a593Smuzhiyun static __inline int _os_atomic_dec_return(void *d, _os_atomic *v)
677*4882a593Smuzhiyun {
678*4882a593Smuzhiyun return 0;
679*4882a593Smuzhiyun }
680*4882a593Smuzhiyun
681*4882a593Smuzhiyun /* File Operation */
_os_read_file(const char * path,u8 * buf,u32 sz)682*4882a593Smuzhiyun static inline u32 _os_read_file(const char *path, u8 *buf, u32 sz)
683*4882a593Smuzhiyun {
684*4882a593Smuzhiyun /* OS Dependent API */
685*4882a593Smuzhiyun return platform_read_file(path, buf, sz);
686*4882a593Smuzhiyun }
687*4882a593Smuzhiyun
688*4882a593Smuzhiyun /*
689*4882a593Smuzhiyun static __inline bool _os_atomic_inc_unless(void *d, _os_atomic *v, int u)
690*4882a593Smuzhiyun {
691*4882a593Smuzhiyun return 0;
692*4882a593Smuzhiyun }
693*4882a593Smuzhiyun */
694*4882a593Smuzhiyun
695*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
_os_read8_pcie(void * drv_priv,u32 addr)696*4882a593Smuzhiyun static __inline u8 _os_read8_pcie(void *drv_priv, u32 addr)
697*4882a593Smuzhiyun {
698*4882a593Smuzhiyun return PlatformEFIORead1Byte(drv_priv, addr);
699*4882a593Smuzhiyun }
_os_read16_pcie(void * drv_priv,u32 addr)700*4882a593Smuzhiyun static __inline u16 _os_read16_pcie(void *drv_priv, u32 addr)
701*4882a593Smuzhiyun {
702*4882a593Smuzhiyun return PlatformEFIORead2Byte(drv_priv, addr);
703*4882a593Smuzhiyun }
_os_read32_pcie(void * drv_priv,u32 addr)704*4882a593Smuzhiyun static __inline u32 _os_read32_pcie(void *drv_priv, u32 addr)
705*4882a593Smuzhiyun {
706*4882a593Smuzhiyun return PlatformEFIORead4Byte(drv_priv, addr);
707*4882a593Smuzhiyun }
708*4882a593Smuzhiyun
_os_write8_pcie(void * drv_priv,u32 addr,u8 val)709*4882a593Smuzhiyun static __inline u32 _os_write8_pcie(void *drv_priv, u32 addr, u8 val)
710*4882a593Smuzhiyun {
711*4882a593Smuzhiyun PlatformEFIOWrite1Byte(drv_priv, addr, val);
712*4882a593Smuzhiyun return 0;
713*4882a593Smuzhiyun }
_os_write16_pcie(void * drv_priv,u32 addr,u16 val)714*4882a593Smuzhiyun static __inline u32 _os_write16_pcie(void *drv_priv, u32 addr, u16 val)
715*4882a593Smuzhiyun {
716*4882a593Smuzhiyun PlatformEFIOWrite2Byte(drv_priv, addr, val);
717*4882a593Smuzhiyun return 0;
718*4882a593Smuzhiyun }
_os_write32_pcie(void * drv_priv,u32 addr,u32 val)719*4882a593Smuzhiyun static __inline u32 _os_write32_pcie(void *drv_priv, u32 addr, u32 val)
720*4882a593Smuzhiyun {
721*4882a593Smuzhiyun PlatformEFIOWrite4Byte(drv_priv, addr, val);
722*4882a593Smuzhiyun return 0;
723*4882a593Smuzhiyun }
724*4882a593Smuzhiyun #endif/*#ifdef CONFIG_PCI_HCI*/
725*4882a593Smuzhiyun
726*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI
727*4882a593Smuzhiyun
_os_usbctrl_vendorreq(void * drv_priv,u8 request,u16 value,u16 index,void * pdata,u16 len,u8 requesttype)728*4882a593Smuzhiyun static __inline u32 _os_usbctrl_vendorreq(void *drv_priv, u8 request, u16 value,
729*4882a593Smuzhiyun u16 index, void *pdata, u16 len, u8 requesttype)
730*4882a593Smuzhiyun {
731*4882a593Smuzhiyun // return value ?? RTW_PHL_STATUS or boolean??
732*4882a593Smuzhiyun return pltfm_usb_ctrl_vendor_request(
733*4882a593Smuzhiyun drv_priv,
734*4882a593Smuzhiyun request,
735*4882a593Smuzhiyun value,
736*4882a593Smuzhiyun index,
737*4882a593Smuzhiyun pdata,
738*4882a593Smuzhiyun len,
739*4882a593Smuzhiyun requesttype);
740*4882a593Smuzhiyun
741*4882a593Smuzhiyun }
742*4882a593Smuzhiyun
os_usb_tx(void * h,u8 * tx_buf_ptr,u8 bulk_id,u32 len,u8 * pkt_data_buf)743*4882a593Smuzhiyun static inline int os_usb_tx(void *h, u8 *tx_buf_ptr,
744*4882a593Smuzhiyun u8 bulk_id, u32 len, u8 *pkt_data_buf)
745*4882a593Smuzhiyun {
746*4882a593Smuzhiyun if(pltfm_usb_out_token_send(h, tx_buf_ptr, pkt_data_buf, len, bulk_id) == TRUE)
747*4882a593Smuzhiyun return 0; // RTW_PHL_STATUS_SUCCESS
748*4882a593Smuzhiyun else
749*4882a593Smuzhiyun return 1;
750*4882a593Smuzhiyun }
751*4882a593Smuzhiyun
os_enable_usb_out_pipes(void * drv_priv)752*4882a593Smuzhiyun static __inline void os_enable_usb_out_pipes(void *drv_priv)
753*4882a593Smuzhiyun {
754*4882a593Smuzhiyun pltfm_usb_out_pipes_start(drv_priv);
755*4882a593Smuzhiyun }
756*4882a593Smuzhiyun
os_disable_usb_out_pipes(void * drv_priv)757*4882a593Smuzhiyun static __inline void os_disable_usb_out_pipes(void *drv_priv)
758*4882a593Smuzhiyun {
759*4882a593Smuzhiyun pltfm_usb_out_pipes_stop(drv_priv);
760*4882a593Smuzhiyun }
761*4882a593Smuzhiyun
os_out_token_alloc(void * drv_priv)762*4882a593Smuzhiyun static __inline u8 os_out_token_alloc(void *drv_priv)
763*4882a593Smuzhiyun {
764*4882a593Smuzhiyun if(core_usb_out_token_init(drv_priv)== TRUE)
765*4882a593Smuzhiyun return 0; // RTW_PHL_STATUS_SUCCESS
766*4882a593Smuzhiyun else
767*4882a593Smuzhiyun return 1;
768*4882a593Smuzhiyun }
769*4882a593Smuzhiyun
os_out_token_free(void * drv_priv)770*4882a593Smuzhiyun static __inline void os_out_token_free(void *drv_priv)
771*4882a593Smuzhiyun {
772*4882a593Smuzhiyun core_usb_out_token_deinit(drv_priv);
773*4882a593Smuzhiyun }
774*4882a593Smuzhiyun
os_in_token_alloc(void * drv_priv)775*4882a593Smuzhiyun static __inline u8 os_in_token_alloc(void *drv_priv)
776*4882a593Smuzhiyun {
777*4882a593Smuzhiyun if(core_usb_in_token_init(drv_priv)== TRUE)
778*4882a593Smuzhiyun return 0; // RTW_PHL_STATUS_SUCCESS
779*4882a593Smuzhiyun else
780*4882a593Smuzhiyun return 1;
781*4882a593Smuzhiyun }
782*4882a593Smuzhiyun
os_in_token_free(void * drv_priv)783*4882a593Smuzhiyun static __inline void os_in_token_free(void *drv_priv)
784*4882a593Smuzhiyun {
785*4882a593Smuzhiyun core_usb_in_token_deinit(drv_priv);
786*4882a593Smuzhiyun }
787*4882a593Smuzhiyun
os_send_usb_in_token(void * drv_priv,void * rxobj,u8 * inbuf,u32 inbuf_len,u8 pipe_idx,u8 minLen)788*4882a593Smuzhiyun static __inline u8 os_send_usb_in_token(void *drv_priv, void *rxobj, u8 *inbuf, u32 inbuf_len, u8 pipe_idx, u8 minLen)
789*4882a593Smuzhiyun {
790*4882a593Smuzhiyun if(pltfm_usb_in_token_send(drv_priv, rxobj, inbuf, inbuf_len, pipe_idx, minLen) == TRUE)
791*4882a593Smuzhiyun return 0;// RTW_PHL_STATUS_SUCCESS
792*4882a593Smuzhiyun else
793*4882a593Smuzhiyun return 1;
794*4882a593Smuzhiyun }
795*4882a593Smuzhiyun
os_enable_usb_in_pipes(void * drv_priv)796*4882a593Smuzhiyun static __inline void os_enable_usb_in_pipes(void *drv_priv)
797*4882a593Smuzhiyun {
798*4882a593Smuzhiyun pltfm_usb_in_pipes_start(drv_priv);
799*4882a593Smuzhiyun }
800*4882a593Smuzhiyun
os_disable_usb_in_pipes(void * drv_priv)801*4882a593Smuzhiyun static __inline void os_disable_usb_in_pipes(void *drv_priv)
802*4882a593Smuzhiyun {
803*4882a593Smuzhiyun pltfm_usb_in_pipes_stop(drv_priv);
804*4882a593Smuzhiyun }
805*4882a593Smuzhiyun
806*4882a593Smuzhiyun #endif /*CONFIG_USB_HCI*/
807*4882a593Smuzhiyun
808*4882a593Smuzhiyun #ifdef CONFIG_SDIO_HCI
_os_sdio_cmd52_r8(void * d,u32 offset)809*4882a593Smuzhiyun static __inline u8 _os_sdio_cmd52_r8(void *d, u32 offset)
810*4882a593Smuzhiyun {
811*4882a593Smuzhiyun return PlatformEFSdioLocalCmd52Read1Byte(d, offset);
812*4882a593Smuzhiyun }
813*4882a593Smuzhiyun
_os_sdio_cmd53_r8(void * d,u32 offset)814*4882a593Smuzhiyun static __inline u8 _os_sdio_cmd53_r8(void *d, u32 offset)
815*4882a593Smuzhiyun {
816*4882a593Smuzhiyun return PlatformEFSdioLocalCmd53Read1Byte(d, offset);
817*4882a593Smuzhiyun }
818*4882a593Smuzhiyun
_os_sdio_cmd53_r16(void * d,u32 offset)819*4882a593Smuzhiyun static __inline u16 _os_sdio_cmd53_r16(void *d, u32 offset)
820*4882a593Smuzhiyun {
821*4882a593Smuzhiyun return PlatformEFSdioLocalCmd53Read2Byte(d, offset);
822*4882a593Smuzhiyun }
823*4882a593Smuzhiyun
_os_sdio_cmd53_r32(void * d,u32 offset)824*4882a593Smuzhiyun static __inline u32 _os_sdio_cmd53_r32(void *d, u32 offset)
825*4882a593Smuzhiyun {
826*4882a593Smuzhiyun return PlatformEFSdioLocalCmd53Read4Byte(d, offset);
827*4882a593Smuzhiyun }
828*4882a593Smuzhiyun
_os_sdio_cmd53_rn(void * d,u32 offset,u32 size,u8 * data)829*4882a593Smuzhiyun static __inline u8 _os_sdio_cmd53_rn(void *d, u32 offset, u32 size, u8 *data)
830*4882a593Smuzhiyun {
831*4882a593Smuzhiyun if (!data){
832*4882a593Smuzhiyun return _FAIL;
833*4882a593Smuzhiyun }
834*4882a593Smuzhiyun
835*4882a593Smuzhiyun PlatformEFSdioLocalCmd53ReadNByte(d, offset, size, (pu1Byte)data);
836*4882a593Smuzhiyun
837*4882a593Smuzhiyun return _SUCCESS;
838*4882a593Smuzhiyun }
839*4882a593Smuzhiyun
_os_sdio_cmd53_r(void * d,u32 offset,u32 size,u8 * data)840*4882a593Smuzhiyun static __inline u8 _os_sdio_cmd53_r(void *d, u32 offset, u32 size, u8 *data)
841*4882a593Smuzhiyun {
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun PlatformEFSdioLocalCmd53ReadNByte(d, offset, size, data);
844*4882a593Smuzhiyun
845*4882a593Smuzhiyun return _SUCCESS;
846*4882a593Smuzhiyun }
847*4882a593Smuzhiyun
_os_sdio_cmd52_w8(void * d,u32 offset,u8 val)848*4882a593Smuzhiyun static __inline void _os_sdio_cmd52_w8(void *d, u32 offset, u8 val)
849*4882a593Smuzhiyun {
850*4882a593Smuzhiyun PlatformEFSdioLocalCmd52Write1Byte(d, offset, val);
851*4882a593Smuzhiyun }
852*4882a593Smuzhiyun
_os_sdio_cmd53_w8(void * d,u32 offset,u8 val)853*4882a593Smuzhiyun static __inline void _os_sdio_cmd53_w8(void *d, u32 offset, u8 val)
854*4882a593Smuzhiyun {
855*4882a593Smuzhiyun PlatformEFSdioLocalCmd53Write1Byte(d, offset, val);
856*4882a593Smuzhiyun }
857*4882a593Smuzhiyun
_os_sdio_cmd53_w16(void * d,u32 offset,u16 val)858*4882a593Smuzhiyun static __inline void _os_sdio_cmd53_w16(void *d, u32 offset, u16 val)
859*4882a593Smuzhiyun {
860*4882a593Smuzhiyun PlatformEFSdioLocalCmd53Write2Byte(d, offset, val);
861*4882a593Smuzhiyun }
862*4882a593Smuzhiyun
_os_sdio_cmd53_w32(void * d,u32 offset,u32 val)863*4882a593Smuzhiyun static __inline void _os_sdio_cmd53_w32(void *d, u32 offset, u32 val)
864*4882a593Smuzhiyun {
865*4882a593Smuzhiyun PlatformEFSdioLocalCmd53Write4Byte(d, offset, val);
866*4882a593Smuzhiyun }
867*4882a593Smuzhiyun
_os_sdio_cmd53_wn(void * d,u32 offset,u32 size,u8 * data)868*4882a593Smuzhiyun static __inline void _os_sdio_cmd53_wn(void *d, u32 offset, u32 size, u8 *data)
869*4882a593Smuzhiyun {
870*4882a593Smuzhiyun PlatformEFSdioLocalCmd53WriteNByte(d, offset, size, (pu1Byte)data);
871*4882a593Smuzhiyun }
872*4882a593Smuzhiyun
_os_sdio_cmd53_w(void * d,u32 offset,u32 size,u8 * data)873*4882a593Smuzhiyun static __inline void _os_sdio_cmd53_w(void *d, u32 offset, u32 size, u8 *data)
874*4882a593Smuzhiyun {
875*4882a593Smuzhiyun PlatformEFSdioLocalCmd53WriteNByte(d, offset, size, (pu1Byte)data);
876*4882a593Smuzhiyun }
877*4882a593Smuzhiyun
_os_sdio_f0_read(void * d,u32 addr,void * buf,size_t len)878*4882a593Smuzhiyun static __inline u8 _os_sdio_f0_read(void *d, u32 addr, void *buf, size_t len)
879*4882a593Smuzhiyun {
880*4882a593Smuzhiyun return 0;
881*4882a593Smuzhiyun }
882*4882a593Smuzhiyun
_os_sdio_read_cia_r8(void * d,u32 addr)883*4882a593Smuzhiyun static __inline u8 _os_sdio_read_cia_r8(void *d, u32 addr)
884*4882a593Smuzhiyun {
885*4882a593Smuzhiyun return 0;
886*4882a593Smuzhiyun }
887*4882a593Smuzhiyun
888*4882a593Smuzhiyun #endif /*CONFIG_SDIO_HCI*/
889*4882a593Smuzhiyun
890*4882a593Smuzhiyun
891*4882a593Smuzhiyun #endif /*_HAL_PLTFM_WINDOWS_H_*/
892