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 _PLTFM_OPS_NONE_H_
16*4882a593Smuzhiyun #define _PLTFM_OPS_NONE_H_
17*4882a593Smuzhiyun #include "phl_types.h"
18*4882a593Smuzhiyun
_os_strpbrk(const char * cs,const char * ct)19*4882a593Smuzhiyun static char *_os_strpbrk(const char *cs, const char *ct)
20*4882a593Smuzhiyun {
21*4882a593Smuzhiyun const char *sc1, *sc2;
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun for (sc1 = cs; *sc1 != '\0'; ++sc1) {
24*4882a593Smuzhiyun for (sc2 = ct; *sc2 != '\0'; ++sc2) {
25*4882a593Smuzhiyun if (*sc1 == *sc2)
26*4882a593Smuzhiyun return (char *)sc1;
27*4882a593Smuzhiyun }
28*4882a593Smuzhiyun }
29*4882a593Smuzhiyun return NULL;
30*4882a593Smuzhiyun }
_os_strsep(char ** s,const char * ct)31*4882a593Smuzhiyun static __inline char *_os_strsep(char **s, const char *ct)
32*4882a593Smuzhiyun {
33*4882a593Smuzhiyun char *sbegin = *s;
34*4882a593Smuzhiyun char *end;
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun if (sbegin == NULL)
37*4882a593Smuzhiyun return NULL;
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun end = _os_strpbrk(sbegin, ct);
40*4882a593Smuzhiyun if (end)
41*4882a593Smuzhiyun *end++ = '\0';
42*4882a593Smuzhiyun *s = end;
43*4882a593Smuzhiyun return sbegin;
44*4882a593Smuzhiyun }
_os_sscanf(const char * buf,const char * fmt,...)45*4882a593Smuzhiyun static __inline int _os_sscanf(const char *buf, const char *fmt, ...)
46*4882a593Smuzhiyun {
47*4882a593Smuzhiyun return 0;
48*4882a593Smuzhiyun }
_os_strcmp(const char * s1,const char * s2)49*4882a593Smuzhiyun static __inline int _os_strcmp(const char *s1, const char *s2)
50*4882a593Smuzhiyun {
51*4882a593Smuzhiyun while (*s1 == *s2) {
52*4882a593Smuzhiyun if (*s1 == '\0')
53*4882a593Smuzhiyun break;
54*4882a593Smuzhiyun s1++;
55*4882a593Smuzhiyun s2++;
56*4882a593Smuzhiyun }
57*4882a593Smuzhiyun return *s1 - *s2;
58*4882a593Smuzhiyun }
_os_strncmp(const char * s1,const char * s2,size_t n)59*4882a593Smuzhiyun static __inline int _os_strncmp(const char *s1, const char *s2, size_t n)
60*4882a593Smuzhiyun {
61*4882a593Smuzhiyun if (n == 0)
62*4882a593Smuzhiyun return 0;
63*4882a593Smuzhiyun while (*s1 == *s2) {
64*4882a593Smuzhiyun if (*s1 == '\0')
65*4882a593Smuzhiyun break;
66*4882a593Smuzhiyun s1++;
67*4882a593Smuzhiyun s2++;
68*4882a593Smuzhiyun n--;
69*4882a593Smuzhiyun if (n == 0)
70*4882a593Smuzhiyun return 0;
71*4882a593Smuzhiyun }
72*4882a593Smuzhiyun return *s1 - *s2;
73*4882a593Smuzhiyun }
_os_strcpy(char * dest,const char * src)74*4882a593Smuzhiyun static __inline char *_os_strcpy(char *dest, const char *src)
75*4882a593Smuzhiyun {
76*4882a593Smuzhiyun return NULL;
77*4882a593Smuzhiyun }
_os_strncpy(char * dest,const char * src,size_t n)78*4882a593Smuzhiyun static inline char *_os_strncpy(char *dest, const char *src, size_t n)
79*4882a593Smuzhiyun {
80*4882a593Smuzhiyun return NULL;
81*4882a593Smuzhiyun }
_os_strchr(const char * s,int c)82*4882a593Smuzhiyun static __inline char *_os_strchr(const char *s, int c)
83*4882a593Smuzhiyun {
84*4882a593Smuzhiyun while (*s != (char)c)
85*4882a593Smuzhiyun if (*s++ == '\0')
86*4882a593Smuzhiyun return NULL;
87*4882a593Smuzhiyun return (char *)s;
88*4882a593Smuzhiyun }
_os_snprintf(char * str,size_t size,const char * format,...)89*4882a593Smuzhiyun static __inline int _os_snprintf(char *str, size_t size, const char *format, ...)
90*4882a593Smuzhiyun {
91*4882a593Smuzhiyun return 0;
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun
_os_strncat(char * dest,char * src,size_t n)94*4882a593Smuzhiyun static __inline int _os_strncat(char *dest, char *src, size_t n)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun return 0;
97*4882a593Smuzhiyun }
98*4882a593Smuzhiyun
_os_strlen(u8 * buf)99*4882a593Smuzhiyun static __inline u32 _os_strlen(u8 *buf)
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun return 0;
102*4882a593Smuzhiyun }
_os_delay_ms(void * h,u32 ms)103*4882a593Smuzhiyun static __inline void _os_delay_ms(void *h, u32 ms)
104*4882a593Smuzhiyun {
105*4882a593Smuzhiyun }
_os_delay_us(void * h,u32 us)106*4882a593Smuzhiyun static __inline void _os_delay_us(void *h, u32 us)
107*4882a593Smuzhiyun {
108*4882a593Smuzhiyun }
_os_sleep_ms(void * h,u32 ms)109*4882a593Smuzhiyun static __inline void _os_sleep_ms(void *h, u32 ms)
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun }
_os_sleep_us(void * h,u32 us)112*4882a593Smuzhiyun static __inline void _os_sleep_us(void *h, u32 us)
113*4882a593Smuzhiyun {
114*4882a593Smuzhiyun }
_os_get_cur_time_us(void)115*4882a593Smuzhiyun static inline u32 _os_get_cur_time_us(void)
116*4882a593Smuzhiyun {
117*4882a593Smuzhiyun return 0;
118*4882a593Smuzhiyun }
_os_get_cur_time_ms(void)119*4882a593Smuzhiyun static inline u32 _os_get_cur_time_ms(void)
120*4882a593Smuzhiyun {
121*4882a593Smuzhiyun return (_os_get_cur_time_us() / 1000);
122*4882a593Smuzhiyun }
123*4882a593Smuzhiyun
_os_modular64(u64 x,u64 y)124*4882a593Smuzhiyun static inline u64 _os_modular64(u64 x, u64 y)
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun return x % y;
127*4882a593Smuzhiyun }
_os_division64(u64 x,u64 y)128*4882a593Smuzhiyun static inline u64 _os_division64(u64 x, u64 y)
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun u32 low, low2, high, rem, result;
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun low = x & 0xFFFFFFFF;
133*4882a593Smuzhiyun high = x >> 32;
134*4882a593Smuzhiyun rem = high % (u32)y;
135*4882a593Smuzhiyun high= high / (u32)y;
136*4882a593Smuzhiyun low2 = low >> 16;
137*4882a593Smuzhiyun low2 += rem << 16;
138*4882a593Smuzhiyun rem = low2 % (u32)y;
139*4882a593Smuzhiyun low2 = low2 / (u32)y;
140*4882a593Smuzhiyun low = low & 0xFFFFFFFF;
141*4882a593Smuzhiyun low += rem << 16;
142*4882a593Smuzhiyun rem = low % (u32)y;
143*4882a593Smuzhiyun low = low / (u32)y;
144*4882a593Smuzhiyun result = low + ((u64)low2 << 16) + ((u64)high << 32);
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun return result;
147*4882a593Smuzhiyun }
148*4882a593Smuzhiyun
_os_minus64(u64 x,u64 y)149*4882a593Smuzhiyun static inline u64 _os_minus64(u64 x, u64 y)
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun {
152*4882a593Smuzhiyun return x - y;
153*4882a593Smuzhiyun }
154*4882a593Smuzhiyun
_os_add64(u64 x,u64 y)155*4882a593Smuzhiyun static inline u64 _os_add64(u64 x, u64 y)
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun {
158*4882a593Smuzhiyun return x + y;
159*4882a593Smuzhiyun }
160*4882a593Smuzhiyun
_os_div_round_up(u32 x,u32 y)161*4882a593Smuzhiyun static inline u32 _os_div_round_up(u32 x, u32 y)
162*4882a593Smuzhiyun {
163*4882a593Smuzhiyun return (x + y - 1) / y;
164*4882a593Smuzhiyun }
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
_os_cache_inv(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 direction)167*4882a593Smuzhiyun static inline void _os_cache_inv(void *d, _dma *bus_addr_l, _dma *bus_addr_h,
168*4882a593Smuzhiyun u32 buf_sz, u8 direction)
169*4882a593Smuzhiyun {
170*4882a593Smuzhiyun }
_os_cache_wback(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 direction)171*4882a593Smuzhiyun static inline void _os_cache_wback(void *d, _dma *bus_addr_l,
172*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz, u8 direction)
173*4882a593Smuzhiyun {
174*4882a593Smuzhiyun }
175*4882a593Smuzhiyun
_os_dma_pool_create(void * d,char * name,u32 wd_page_sz)176*4882a593Smuzhiyun static inline void *_os_dma_pool_create(void *d, char *name, u32 wd_page_sz)
177*4882a593Smuzhiyun {
178*4882a593Smuzhiyun return NULL;
179*4882a593Smuzhiyun }
180*4882a593Smuzhiyun
_os_dma_pool_destory(void * d,void * pool)181*4882a593Smuzhiyun static inline void _os_dma_pool_destory(void *d, void *pool)
182*4882a593Smuzhiyun {
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun /* txbd, rxbd, wd */
_os_shmem_alloc(void * d,void * pool,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 cache,u8 direction,void ** os_rsvd)186*4882a593Smuzhiyun static inline void *_os_shmem_alloc(void *d, void *pool, _dma *bus_addr_l,
187*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz,
188*4882a593Smuzhiyun u8 cache, u8 direction, void **os_rsvd)
189*4882a593Smuzhiyun {
190*4882a593Smuzhiyun return NULL;
191*4882a593Smuzhiyun }
_os_shmem_free(void * d,void * pool,u8 * vir_addr,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 cache,u8 direction,void * os_rsvd)192*4882a593Smuzhiyun static inline void _os_shmem_free(void *d, void *pool, u8 *vir_addr, _dma *bus_addr_l,
193*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz,
194*4882a593Smuzhiyun u8 cache, u8 direction, void *os_rsvd)
195*4882a593Smuzhiyun {
196*4882a593Smuzhiyun }
197*4882a593Smuzhiyun #endif /*CONFIG_PCI_HCI*/
198*4882a593Smuzhiyun
_os_pkt_buf_unmap_rx(void * d,_dma bus_addr_l,_dma bus_addr_h,u32 buf_sz)199*4882a593Smuzhiyun static inline void *_os_pkt_buf_unmap_rx(void *d, _dma bus_addr_l, _dma bus_addr_h, u32 buf_sz)
200*4882a593Smuzhiyun {
201*4882a593Smuzhiyun return NULL;
202*4882a593Smuzhiyun }
203*4882a593Smuzhiyun
_os_pkt_buf_map_rx(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,void * os_priv)204*4882a593Smuzhiyun static inline void *_os_pkt_buf_map_rx(void *d, _dma *bus_addr_l, _dma *bus_addr_h,
205*4882a593Smuzhiyun u32 buf_sz, void *os_priv)
206*4882a593Smuzhiyun {
207*4882a593Smuzhiyun return NULL;
208*4882a593Smuzhiyun }
209*4882a593Smuzhiyun
_os_pkt_buf_alloc_rx(void * d,_dma * bus_addr_l,_dma * bus_addr_h,u32 buf_sz,u8 cache,void ** os_priv)210*4882a593Smuzhiyun static inline void *_os_pkt_buf_alloc_rx(void *d, _dma *bus_addr_l,
211*4882a593Smuzhiyun _dma *bus_addr_h, u32 buf_sz, u8 cache, void **os_priv)
212*4882a593Smuzhiyun {
213*4882a593Smuzhiyun return NULL;
214*4882a593Smuzhiyun }
_os_pkt_buf_free_rx(void * d,u8 * vir_addr,_dma bus_addr_l,_dma bus_addr_h,u32 buf_sz,u8 cache,void * os_priv)215*4882a593Smuzhiyun static inline u8 *_os_pkt_buf_free_rx(void *d, u8 *vir_addr, _dma bus_addr_l,
216*4882a593Smuzhiyun _dma bus_addr_h, u32 buf_sz, u8 cache, void *os_priv)
217*4882a593Smuzhiyun {
218*4882a593Smuzhiyun return NULL;
219*4882a593Smuzhiyun }
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun /* phl pre-alloc network layer buffer */
_os_alloc_netbuf(void * d,u32 buf_sz,void ** os_priv)222*4882a593Smuzhiyun static inline void * _os_alloc_netbuf(void *d, u32 buf_sz, void **os_priv)
223*4882a593Smuzhiyun {
224*4882a593Smuzhiyun return NULL; // windows never do this.
225*4882a593Smuzhiyun }
226*4882a593Smuzhiyun
227*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)228*4882a593Smuzhiyun static inline void _os_free_netbuf(void *d, u8 *vir_addr, u32 buf_sz, void *os_priv)
229*4882a593Smuzhiyun {
230*4882a593Smuzhiyun }
_os_mem_alloc(void * h,u32 buf_sz)231*4882a593Smuzhiyun static __inline void *_os_mem_alloc(void *h, u32 buf_sz)
232*4882a593Smuzhiyun {
233*4882a593Smuzhiyun return NULL;
234*4882a593Smuzhiyun }
235*4882a593Smuzhiyun
_os_mem_free(void * h,void * buf,u32 buf_sz)236*4882a593Smuzhiyun static __inline void _os_mem_free(void *h, void *buf, u32 buf_sz)
237*4882a593Smuzhiyun {
238*4882a593Smuzhiyun }
239*4882a593Smuzhiyun /*physically contiguous memory if the buffer will be accessed by a DMA device*/
_os_kmem_alloc(void * h,u32 buf_sz)240*4882a593Smuzhiyun static __inline void *_os_kmem_alloc(void *h, u32 buf_sz)
241*4882a593Smuzhiyun {
242*4882a593Smuzhiyun return NULL;
243*4882a593Smuzhiyun }
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun /*physically contiguous memory if the buffer will be accessed by a DMA device*/
_os_kmem_free(void * h,void * buf,u32 buf_sz)246*4882a593Smuzhiyun static __inline void _os_kmem_free(void *h, void *buf, u32 buf_sz)
247*4882a593Smuzhiyun {
248*4882a593Smuzhiyun }
_os_mem_set(void * h,void * buf,s8 value,u32 size)249*4882a593Smuzhiyun static __inline void _os_mem_set(void *h, void *buf, s8 value, u32 size)
250*4882a593Smuzhiyun {
251*4882a593Smuzhiyun }
_os_mem_cpy(void * h,void * dest,void * src,u32 size)252*4882a593Smuzhiyun static __inline void _os_mem_cpy(void *h, void *dest, void *src, u32 size)
253*4882a593Smuzhiyun {
254*4882a593Smuzhiyun }
_os_mem_cmp(void * h,void * ptr1,void * ptr2,u32 size)255*4882a593Smuzhiyun static __inline int _os_mem_cmp(void *h, void *ptr1, void *ptr2, u32 size)
256*4882a593Smuzhiyun {
257*4882a593Smuzhiyun return 0;
258*4882a593Smuzhiyun }
_os_init_timer(void * h,_os_timer * timer,void (* call_back_func)(void * context),void * context,const char * sz_id)259*4882a593Smuzhiyun static __inline void _os_init_timer(void *h, _os_timer *timer,
260*4882a593Smuzhiyun void (*call_back_func)(void *context), void *context,
261*4882a593Smuzhiyun const char *sz_id)
262*4882a593Smuzhiyun {
263*4882a593Smuzhiyun }
264*4882a593Smuzhiyun
_os_set_timer(void * h,_os_timer * timer,u32 ms_delay)265*4882a593Smuzhiyun static __inline void _os_set_timer(void *h, _os_timer *timer, u32 ms_delay)
266*4882a593Smuzhiyun {
267*4882a593Smuzhiyun }
268*4882a593Smuzhiyun
_os_cancel_timer(void * h,_os_timer * timer)269*4882a593Smuzhiyun static __inline void _os_cancel_timer(void *h, _os_timer *timer)
270*4882a593Smuzhiyun {
271*4882a593Smuzhiyun }
272*4882a593Smuzhiyun
_os_cancel_timer_async(void * d,_os_timer * timer)273*4882a593Smuzhiyun static inline void _os_cancel_timer_async(void *d, _os_timer *timer)
274*4882a593Smuzhiyun {
275*4882a593Smuzhiyun }
276*4882a593Smuzhiyun
_os_release_timer(void * h,_os_timer * timer)277*4882a593Smuzhiyun static __inline void _os_release_timer(void *h, _os_timer *timer)
278*4882a593Smuzhiyun {
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun }
_os_mutex_init(void * h,_os_mutex * mutex)281*4882a593Smuzhiyun static __inline void _os_mutex_init(void *h, _os_mutex *mutex)
282*4882a593Smuzhiyun {
283*4882a593Smuzhiyun }
284*4882a593Smuzhiyun
_os_mutex_deinit(void * h,_os_mutex * mutex)285*4882a593Smuzhiyun static __inline void _os_mutex_deinit(void *h, _os_mutex *mutex)
286*4882a593Smuzhiyun {
287*4882a593Smuzhiyun }
288*4882a593Smuzhiyun
_os_mutex_lock(void * h,_os_mutex * mutex)289*4882a593Smuzhiyun static __inline void _os_mutex_lock(void *h, _os_mutex *mutex)
290*4882a593Smuzhiyun {
291*4882a593Smuzhiyun }
292*4882a593Smuzhiyun
_os_mutex_unlock(void * h,_os_mutex * mutex)293*4882a593Smuzhiyun static __inline void _os_mutex_unlock(void *h, _os_mutex *mutex)
294*4882a593Smuzhiyun {
295*4882a593Smuzhiyun }
296*4882a593Smuzhiyun
_os_sema_init(void * d,_os_sema * sema,int int_cnt)297*4882a593Smuzhiyun static inline void _os_sema_init(void *d, _os_sema *sema, int int_cnt)
298*4882a593Smuzhiyun {
299*4882a593Smuzhiyun }
300*4882a593Smuzhiyun
_os_sema_free(void * d,_os_sema * sema)301*4882a593Smuzhiyun static inline void _os_sema_free(void *d, _os_sema *sema)
302*4882a593Smuzhiyun {
303*4882a593Smuzhiyun }
304*4882a593Smuzhiyun
_os_sema_up(void * d,_os_sema * sema)305*4882a593Smuzhiyun static inline void _os_sema_up(void *d, _os_sema *sema)
306*4882a593Smuzhiyun {
307*4882a593Smuzhiyun }
308*4882a593Smuzhiyun
_os_sema_down(void * d,_os_sema * sema)309*4882a593Smuzhiyun static inline u8 _os_sema_down(void *d, _os_sema *sema)
310*4882a593Smuzhiyun {
311*4882a593Smuzhiyun return 0; //success
312*4882a593Smuzhiyun }
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun /* event */
_os_event_init(void * h,_os_event * event)315*4882a593Smuzhiyun static __inline void _os_event_init(void *h, _os_event *event)
316*4882a593Smuzhiyun {
317*4882a593Smuzhiyun }
_os_event_free(void * h,_os_event * event)318*4882a593Smuzhiyun static __inline void _os_event_free(void *h, _os_event *event)
319*4882a593Smuzhiyun {
320*4882a593Smuzhiyun }
_os_event_reset(void * h,_os_event * event)321*4882a593Smuzhiyun static __inline void _os_event_reset(void *h, _os_event *event)
322*4882a593Smuzhiyun {
323*4882a593Smuzhiyun }
324*4882a593Smuzhiyun
_os_event_set(void * h,_os_event * event)325*4882a593Smuzhiyun static __inline void _os_event_set(void *h, _os_event *event)
326*4882a593Smuzhiyun {
327*4882a593Smuzhiyun }
328*4882a593Smuzhiyun
329*4882a593Smuzhiyun /*
330*4882a593Smuzhiyun * m_sec
331*4882a593Smuzhiyun * == 0 : wait for completion
332*4882a593Smuzhiyun * > 0 : wait for timeout or completion
333*4882a593Smuzhiyun * return value
334*4882a593Smuzhiyun * 0:timeout
335*4882a593Smuzhiyun * otherwise:success
336*4882a593Smuzhiyun */
_os_event_wait(void * h,_os_event * event,u32 m_sec)337*4882a593Smuzhiyun static __inline int _os_event_wait(void *h, _os_event *event, u32 m_sec)
338*4882a593Smuzhiyun {
339*4882a593Smuzhiyun return 0;
340*4882a593Smuzhiyun }
341*4882a593Smuzhiyun
342*4882a593Smuzhiyun /* spinlock */
_os_spinlock_init(void * d,_os_lock * plock)343*4882a593Smuzhiyun static __inline void _os_spinlock_init(void *d, _os_lock *plock)
344*4882a593Smuzhiyun {
345*4882a593Smuzhiyun }
_os_spinlock_free(void * d,_os_lock * plock)346*4882a593Smuzhiyun static __inline void _os_spinlock_free(void *d, _os_lock *plock)
347*4882a593Smuzhiyun {
348*4882a593Smuzhiyun }
349*4882a593Smuzhiyun
_os_spinlock(void * d,_os_lock * plock,enum lock_type type,_os_spinlockfg * flags)350*4882a593Smuzhiyun static inline void _os_spinlock(void *d, _os_lock *plock,
351*4882a593Smuzhiyun enum lock_type type, _os_spinlockfg *flags)
352*4882a593Smuzhiyun {
353*4882a593Smuzhiyun }
_os_spinunlock(void * d,_os_lock * plock,enum lock_type type,_os_spinlockfg * flags)354*4882a593Smuzhiyun static inline void _os_spinunlock(void *d, _os_lock *plock,
355*4882a593Smuzhiyun enum lock_type type, _os_spinlockfg *flags)
356*4882a593Smuzhiyun {
357*4882a593Smuzhiyun }
_os_test_and_clear_bit(int nr,unsigned long * addr)358*4882a593Smuzhiyun static inline int _os_test_and_clear_bit(int nr, unsigned long *addr)
359*4882a593Smuzhiyun {
360*4882a593Smuzhiyun /*UNDO*/
361*4882a593Smuzhiyun return 0;
362*4882a593Smuzhiyun }
_os_test_and_set_bit(int nr,unsigned long * addr)363*4882a593Smuzhiyun static inline int _os_test_and_set_bit(int nr, unsigned long *addr)
364*4882a593Smuzhiyun {
365*4882a593Smuzhiyun /*UNDO*/
366*4882a593Smuzhiyun return 1;
367*4882a593Smuzhiyun }
368*4882a593Smuzhiyun /* Atomic integer operations */
_os_atomic_set(void * d,_os_atomic * v,int i)369*4882a593Smuzhiyun static __inline void _os_atomic_set(void *d, _os_atomic *v, int i)
370*4882a593Smuzhiyun {
371*4882a593Smuzhiyun }
372*4882a593Smuzhiyun
_os_atomic_read(void * d,_os_atomic * v)373*4882a593Smuzhiyun static __inline int _os_atomic_read(void *d, _os_atomic *v)
374*4882a593Smuzhiyun {
375*4882a593Smuzhiyun return 0;
376*4882a593Smuzhiyun }
377*4882a593Smuzhiyun
_os_atomic_add(void * d,_os_atomic * v,int i)378*4882a593Smuzhiyun static __inline void _os_atomic_add(void *d, _os_atomic *v, int i)
379*4882a593Smuzhiyun {
380*4882a593Smuzhiyun }
_os_atomic_sub(void * d,_os_atomic * v,int i)381*4882a593Smuzhiyun static __inline void _os_atomic_sub(void *d, _os_atomic *v, int i)
382*4882a593Smuzhiyun {
383*4882a593Smuzhiyun }
384*4882a593Smuzhiyun
_os_atomic_inc(void * d,_os_atomic * v)385*4882a593Smuzhiyun static __inline void _os_atomic_inc(void *d, _os_atomic *v)
386*4882a593Smuzhiyun {
387*4882a593Smuzhiyun }
388*4882a593Smuzhiyun
_os_atomic_dec(void * d,_os_atomic * v)389*4882a593Smuzhiyun static __inline void _os_atomic_dec(void *d, _os_atomic *v)
390*4882a593Smuzhiyun {
391*4882a593Smuzhiyun }
392*4882a593Smuzhiyun
_os_atomic_add_return(void * d,_os_atomic * v,int i)393*4882a593Smuzhiyun static __inline int _os_atomic_add_return(void *d, _os_atomic *v, int i)
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun return 0;
396*4882a593Smuzhiyun }
397*4882a593Smuzhiyun
_os_atomic_sub_return(void * d,_os_atomic * v,int i)398*4882a593Smuzhiyun static __inline int _os_atomic_sub_return(void *d, _os_atomic *v, int i)
399*4882a593Smuzhiyun {
400*4882a593Smuzhiyun return 0;
401*4882a593Smuzhiyun }
402*4882a593Smuzhiyun
_os_atomic_inc_return(void * d,_os_atomic * v)403*4882a593Smuzhiyun static __inline int _os_atomic_inc_return(void *d, _os_atomic *v)
404*4882a593Smuzhiyun {
405*4882a593Smuzhiyun return 0;
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun
_os_atomic_dec_return(void * d,_os_atomic * v)408*4882a593Smuzhiyun static __inline int _os_atomic_dec_return(void *d, _os_atomic *v)
409*4882a593Smuzhiyun {
410*4882a593Smuzhiyun return 0;
411*4882a593Smuzhiyun }
412*4882a593Smuzhiyun /*
413*4882a593Smuzhiyun static __inline bool _os_atomic_inc_unless(void *d, _os_atomic *v, int u)
414*4882a593Smuzhiyun {
415*4882a593Smuzhiyun return 0;
416*4882a593Smuzhiyun }
417*4882a593Smuzhiyun */
418*4882a593Smuzhiyun
_os_tasklet_init(void * drv_priv,_os_tasklet * task,void (* call_back_func)(void * context),void * context)419*4882a593Smuzhiyun static inline enum rtw_phl_status _os_tasklet_init(void *drv_priv, _os_tasklet *task,
420*4882a593Smuzhiyun void (*call_back_func)(void* context), void *context)
421*4882a593Smuzhiyun {
422*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
423*4882a593Smuzhiyun }
424*4882a593Smuzhiyun
_os_tasklet_deinit(void * drv_priv,_os_tasklet * task)425*4882a593Smuzhiyun static inline enum rtw_phl_status _os_tasklet_deinit(void *drv_priv, _os_tasklet *task)
426*4882a593Smuzhiyun {
427*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
428*4882a593Smuzhiyun }
429*4882a593Smuzhiyun
_os_tasklet_schedule(void * drv_priv,_os_tasklet * task)430*4882a593Smuzhiyun static inline enum rtw_phl_status _os_tasklet_schedule(void *drv_priv, _os_tasklet *task)
431*4882a593Smuzhiyun {
432*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
433*4882a593Smuzhiyun }
434*4882a593Smuzhiyun
_os_thread_init(void * drv_priv,_os_thread * thread,int (* call_back_func)(void * context),void * context,const char namefmt[])435*4882a593Smuzhiyun static __inline u8 _os_thread_init( void *drv_priv, _os_thread *thread,
436*4882a593Smuzhiyun int (*call_back_func)(void * context),
437*4882a593Smuzhiyun void *context,
438*4882a593Smuzhiyun const char namefmt[])
439*4882a593Smuzhiyun {
440*4882a593Smuzhiyun return RTW_PHL_STATUS_FAILURE;
441*4882a593Smuzhiyun }
_os_thread_deinit(void * drv_priv,_os_thread * thread)442*4882a593Smuzhiyun static __inline u8 _os_thread_deinit(void *drv_priv, _os_thread *thread)
443*4882a593Smuzhiyun {
444*4882a593Smuzhiyun return RTW_PHL_STATUS_FAILURE;
445*4882a593Smuzhiyun }
_os_thread_schedule(void * drv_priv,_os_thread * thread)446*4882a593Smuzhiyun static __inline enum rtw_phl_status _os_thread_schedule(void *drv_priv, _os_thread *thread)
447*4882a593Smuzhiyun {
448*4882a593Smuzhiyun return RTW_PHL_STATUS_FAILURE;
449*4882a593Smuzhiyun }
_os_thread_stop(void * drv_priv,_os_thread * thread)450*4882a593Smuzhiyun static inline void _os_thread_stop(void *drv_priv, _os_thread *thread)
451*4882a593Smuzhiyun {
452*4882a593Smuzhiyun }
_os_thread_check_stop(void * drv_priv,_os_thread * thread)453*4882a593Smuzhiyun static __inline int _os_thread_check_stop(void *drv_priv, _os_thread *thread)
454*4882a593Smuzhiyun {
455*4882a593Smuzhiyun return 1;
456*4882a593Smuzhiyun }
_os_thread_wait_stop(void * drv_priv,_os_thread * thread)457*4882a593Smuzhiyun static inline int _os_thread_wait_stop(void *drv_priv, _os_thread *thread)
458*4882a593Smuzhiyun {
459*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
460*4882a593Smuzhiyun }
461*4882a593Smuzhiyun
462*4882a593Smuzhiyun #if 0
463*4882a593Smuzhiyun static inline _os_thread _os_thread_start(int (*threadfn)(void *data),
464*4882a593Smuzhiyun void *data, const char namefmt[])
465*4882a593Smuzhiyun {
466*4882a593Smuzhiyun return 0;
467*4882a593Smuzhiyun }
468*4882a593Smuzhiyun static inline bool _os_thread_stop(_os_thread th)
469*4882a593Smuzhiyun {
470*4882a593Smuzhiyun return 0;
471*4882a593Smuzhiyun }
472*4882a593Smuzhiyun static inline void _os_thread_wait_stop(void)
473*4882a593Smuzhiyun {
474*4882a593Smuzhiyun }
475*4882a593Smuzhiyun static inline int _os_thread_should_stop(void)
476*4882a593Smuzhiyun {
477*4882a593Smuzhiyun return 0;
478*4882a593Smuzhiyun }
479*4882a593Smuzhiyun #endif
480*4882a593Smuzhiyun
_os_workitem_init(void * drv_priv,_os_workitem * workitem,void (* call_back_func)(void * context),void * context)481*4882a593Smuzhiyun static inline enum rtw_phl_status _os_workitem_init(void *drv_priv, _os_workitem *workitem,
482*4882a593Smuzhiyun void (*call_back_func)(void* context), void *context)
483*4882a593Smuzhiyun {
484*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
485*4882a593Smuzhiyun }
486*4882a593Smuzhiyun
_os_workitem_schedule(void * drv_priv,_os_workitem * workitem)487*4882a593Smuzhiyun static inline enum rtw_phl_status _os_workitem_schedule(void *drv_priv, _os_workitem *workitem)
488*4882a593Smuzhiyun {
489*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
490*4882a593Smuzhiyun }
491*4882a593Smuzhiyun
_os_workitem_deinit(void * drv_priv,_os_workitem * workitem)492*4882a593Smuzhiyun static inline enum rtw_phl_status _os_workitem_deinit(void *drv_priv, _os_workitem *workitem)
493*4882a593Smuzhiyun {
494*4882a593Smuzhiyun return RTW_PHL_STATUS_SUCCESS;
495*4882a593Smuzhiyun }
496*4882a593Smuzhiyun
497*4882a593Smuzhiyun /*
498*4882a593Smuzhiyun * _os_read_file - phl read file api
499*4882a593Smuzhiyun * @path: path of the file to open and read
500*4882a593Smuzhiyun * @buf: the address of allocated buffer to store the file content
501*4882a593Smuzhiyun * @sz: the bytes to read at most
502*4882a593Smuzhiyun *
503*4882a593Smuzhiyun * returns bytes read
504*4882a593Smuzhiyun */
_os_read_file(const char * path,u8 * buf,u32 sz)505*4882a593Smuzhiyun static inline u32 _os_read_file(const char *path, u8 *buf, u32 sz)
506*4882a593Smuzhiyun {
507*4882a593Smuzhiyun /* OS Dependent API */
508*4882a593Smuzhiyun return 0;
509*4882a593Smuzhiyun }
510*4882a593Smuzhiyun
511*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
_os_read8_pcie(void * h,u32 addr)512*4882a593Smuzhiyun static __inline u8 _os_read8_pcie(void *h, u32 addr)
513*4882a593Smuzhiyun {
514*4882a593Smuzhiyun return 0;
515*4882a593Smuzhiyun }
_os_read16_pcie(void * h,u32 addr)516*4882a593Smuzhiyun static __inline u16 _os_read16_pcie(void *h, u32 addr)
517*4882a593Smuzhiyun {
518*4882a593Smuzhiyun return 0;
519*4882a593Smuzhiyun
520*4882a593Smuzhiyun }
_os_read32_pcie(void * h,u32 addr)521*4882a593Smuzhiyun static __inline u32 _os_read32_pcie(void *h, u32 addr)
522*4882a593Smuzhiyun {
523*4882a593Smuzhiyun return 0;
524*4882a593Smuzhiyun }
525*4882a593Smuzhiyun
_os_write8_pcie(void * h,u32 addr,u8 val)526*4882a593Smuzhiyun static __inline u32 _os_write8_pcie(void *h, u32 addr, u8 val)
527*4882a593Smuzhiyun {
528*4882a593Smuzhiyun return 0;
529*4882a593Smuzhiyun }
_os_write16_pcie(void * h,u32 addr,u16 val)530*4882a593Smuzhiyun static __inline u32 _os_write16_pcie(void *h, u32 addr, u16 val)
531*4882a593Smuzhiyun {
532*4882a593Smuzhiyun return 0;
533*4882a593Smuzhiyun }
_os_write32_pcie(void * h,u32 addr,u32 val)534*4882a593Smuzhiyun static __inline u32 _os_write32_pcie(void *h, u32 addr, u32 val)
535*4882a593Smuzhiyun {
536*4882a593Smuzhiyun return 0;
537*4882a593Smuzhiyun }
538*4882a593Smuzhiyun #endif/*#ifdef CONFIG_PCI_HCI*/
539*4882a593Smuzhiyun
540*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI
_os_usbctrl_vendorreq(void * h,u8 request,u16 value,u16 index,void * pdata,u16 len,u8 requesttype)541*4882a593Smuzhiyun static __inline u32 _os_usbctrl_vendorreq(void *h, u8 request, u16 value,
542*4882a593Smuzhiyun u16 index, void *pdata, u16 len, u8 requesttype)
543*4882a593Smuzhiyun {
544*4882a593Smuzhiyun return 0;
545*4882a593Smuzhiyun }
546*4882a593Smuzhiyun
os_usb_tx(void * h,u8 * tx_buf_ptr,u8 bulk_id,u32 len,u8 * pkt_data_buf)547*4882a593Smuzhiyun static inline int os_usb_tx(void *h, u8 *tx_buf_ptr,
548*4882a593Smuzhiyun u8 bulk_id, u32 len, u8 *pkt_data_buf)
549*4882a593Smuzhiyun {
550*4882a593Smuzhiyun return 1;
551*4882a593Smuzhiyun }
552*4882a593Smuzhiyun
os_enable_usb_out_pipes(void * drv_priv)553*4882a593Smuzhiyun static __inline void os_enable_usb_out_pipes(void *drv_priv)
554*4882a593Smuzhiyun {
555*4882a593Smuzhiyun }
556*4882a593Smuzhiyun
os_disable_usb_out_pipes(void * drv_priv)557*4882a593Smuzhiyun static __inline void os_disable_usb_out_pipes(void *drv_priv)
558*4882a593Smuzhiyun {
559*4882a593Smuzhiyun /* Free bulkout urb */
560*4882a593Smuzhiyun }
561*4882a593Smuzhiyun
os_out_token_alloc(void * drv_priv)562*4882a593Smuzhiyun static __inline u8 os_out_token_alloc(void *drv_priv)
563*4882a593Smuzhiyun {
564*4882a593Smuzhiyun return 0; // RTW_PHL_STATUS_SUCCESS
565*4882a593Smuzhiyun }
566*4882a593Smuzhiyun
os_out_token_free(void * drv_priv)567*4882a593Smuzhiyun static __inline void os_out_token_free(void *drv_priv)
568*4882a593Smuzhiyun {
569*4882a593Smuzhiyun }
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun
os_in_token_alloc(void * drv_priv)572*4882a593Smuzhiyun static __inline u8 os_in_token_alloc(void *drv_priv)
573*4882a593Smuzhiyun {
574*4882a593Smuzhiyun // Allocate in token (pUrb) list
575*4882a593Smuzhiyun return 0;
576*4882a593Smuzhiyun }
577*4882a593Smuzhiyun
os_in_token_free(void * drv_priv)578*4882a593Smuzhiyun static __inline void os_in_token_free(void *drv_priv)
579*4882a593Smuzhiyun {
580*4882a593Smuzhiyun // Free in token (pUrb) list
581*4882a593Smuzhiyun }
582*4882a593Smuzhiyun
583*4882a593Smuzhiyun
os_send_usb_in_token(void * drv_priv,void * rxobj,u8 * inbuf,u32 inbuf_len,u8 pipe_idx,u8 minLen)584*4882a593Smuzhiyun static __inline u8 os_send_usb_in_token(void *drv_priv, void *rxobj, u8 *inbuf, u32 inbuf_len, u8 pipe_idx, u8 minLen)
585*4882a593Smuzhiyun {
586*4882a593Smuzhiyun // send rtw_rx_buf to os
587*4882a593Smuzhiyun return 0;
588*4882a593Smuzhiyun }
589*4882a593Smuzhiyun
os_enable_usb_in_pipes(void * drv_priv)590*4882a593Smuzhiyun static __inline void os_enable_usb_in_pipes(void *drv_priv)
591*4882a593Smuzhiyun {
592*4882a593Smuzhiyun }
593*4882a593Smuzhiyun
os_disable_usb_in_pipes(void * drv_priv)594*4882a593Smuzhiyun static __inline void os_disable_usb_in_pipes(void *drv_priv)
595*4882a593Smuzhiyun {
596*4882a593Smuzhiyun }
597*4882a593Smuzhiyun
598*4882a593Smuzhiyun #endif /*CONFIG_USB_HCI*/
599*4882a593Smuzhiyun
600*4882a593Smuzhiyun #ifdef CONFIG_SDIO_HCI
_os_sdio_cmd52_r8(void * d,u32 offset)601*4882a593Smuzhiyun static inline u8 _os_sdio_cmd52_r8(void *d, u32 offset)
602*4882a593Smuzhiyun {
603*4882a593Smuzhiyun return 0;
604*4882a593Smuzhiyun }
605*4882a593Smuzhiyun
_os_sdio_cmd53_r8(void * d,u32 offset)606*4882a593Smuzhiyun static inline u8 _os_sdio_cmd53_r8(void *d, u32 offset)
607*4882a593Smuzhiyun {
608*4882a593Smuzhiyun return 0;
609*4882a593Smuzhiyun }
610*4882a593Smuzhiyun
_os_sdio_cmd53_r16(void * d,u32 offset)611*4882a593Smuzhiyun static inline u16 _os_sdio_cmd53_r16(void *d, u32 offset)
612*4882a593Smuzhiyun {
613*4882a593Smuzhiyun return 0;
614*4882a593Smuzhiyun }
615*4882a593Smuzhiyun
_os_sdio_cmd53_r32(void * d,u32 offset)616*4882a593Smuzhiyun static inline u32 _os_sdio_cmd53_r32(void *d, u32 offset)
617*4882a593Smuzhiyun {
618*4882a593Smuzhiyun return 0;
619*4882a593Smuzhiyun }
620*4882a593Smuzhiyun
_os_sdio_cmd53_rn(void * d,u32 offset,u32 size,u8 * data)621*4882a593Smuzhiyun static inline u8 _os_sdio_cmd53_rn(void *d, u32 offset, u32 size, u8 *data)
622*4882a593Smuzhiyun {
623*4882a593Smuzhiyun return 0;
624*4882a593Smuzhiyun }
625*4882a593Smuzhiyun
_os_sdio_cmd53_r(void * d,u32 offset,u32 size,u8 * data)626*4882a593Smuzhiyun static inline u8 _os_sdio_cmd53_r(void *d, u32 offset, u32 size, u8 *data)
627*4882a593Smuzhiyun {
628*4882a593Smuzhiyun return 0;
629*4882a593Smuzhiyun }
630*4882a593Smuzhiyun
_os_sdio_cmd52_w8(void * d,u32 offset,u8 val)631*4882a593Smuzhiyun static inline void _os_sdio_cmd52_w8(void *d, u32 offset, u8 val)
632*4882a593Smuzhiyun {
633*4882a593Smuzhiyun }
634*4882a593Smuzhiyun
_os_sdio_cmd53_w8(void * d,u32 offset,u8 val)635*4882a593Smuzhiyun static inline void _os_sdio_cmd53_w8(void *d, u32 offset, u8 val)
636*4882a593Smuzhiyun {
637*4882a593Smuzhiyun }
638*4882a593Smuzhiyun
_os_sdio_cmd53_w16(void * d,u32 offset,u16 val)639*4882a593Smuzhiyun static inline void _os_sdio_cmd53_w16(void *d, u32 offset, u16 val)
640*4882a593Smuzhiyun {
641*4882a593Smuzhiyun }
642*4882a593Smuzhiyun
_os_sdio_cmd53_w32(void * d,u32 offset,u32 val)643*4882a593Smuzhiyun static inline void _os_sdio_cmd53_w32(void *d, u32 offset, u32 val)
644*4882a593Smuzhiyun {
645*4882a593Smuzhiyun }
646*4882a593Smuzhiyun
_os_sdio_cmd53_wn(void * d,u32 offset,u32 size,u8 * data)647*4882a593Smuzhiyun static inline void _os_sdio_cmd53_wn(void *d, u32 offset, u32 size, u8 *data)
648*4882a593Smuzhiyun {
649*4882a593Smuzhiyun }
650*4882a593Smuzhiyun
_os_sdio_cmd53_w(void * d,u32 offset,u32 size,u8 * data)651*4882a593Smuzhiyun static inline void _os_sdio_cmd53_w(void *d, u32 offset, u32 size, u8 *data)
652*4882a593Smuzhiyun {
653*4882a593Smuzhiyun }
654*4882a593Smuzhiyun
_os_sdio_f0_read(void * d,u32 addr,void * buf,size_t len)655*4882a593Smuzhiyun static inline u8 _os_sdio_f0_read(void *d, u32 addr, void *buf, size_t len)
656*4882a593Smuzhiyun {
657*4882a593Smuzhiyun return 0;
658*4882a593Smuzhiyun }
659*4882a593Smuzhiyun
_os_sdio_read_cia_r8(void * d,u32 addr)660*4882a593Smuzhiyun static inline u8 _os_sdio_read_cia_r8(void *d, u32 addr)
661*4882a593Smuzhiyun {
662*4882a593Smuzhiyun return 0;
663*4882a593Smuzhiyun }
664*4882a593Smuzhiyun #endif /*CONFIG_SDIO_HCI*/
665*4882a593Smuzhiyun
666*4882a593Smuzhiyun
667*4882a593Smuzhiyun /*
668*4882a593Smuzhiyun * Continuous bits starting from least significant bit
669*4882a593Smuzhiyun * Example:
670*4882a593Smuzhiyun * BIT_LEN_MASK_32(0) => 0x00000000
671*4882a593Smuzhiyun * BIT_LEN_MASK_32(1) => 0x00000001
672*4882a593Smuzhiyun * BIT_LEN_MASK_32(2) => 0x00000003
673*4882a593Smuzhiyun * BIT_LEN_MASK_32(32) => 0xFFFFFFFF
674*4882a593Smuzhiyun */
675*4882a593Smuzhiyun #define BIT_LEN_MASK_32(__BitLen) ((u32)(0xFFFFFFFF >> (32 - (__BitLen))))
676*4882a593Smuzhiyun #define BIT_LEN_MASK_16(__BitLen) ((u16)(0xFFFF >> (16 - (__BitLen))))
677*4882a593Smuzhiyun #define BIT_LEN_MASK_8(__BitLen) ((u8)(0xFF >> (8 - (__BitLen))))
678*4882a593Smuzhiyun
679*4882a593Smuzhiyun /*
680*4882a593Smuzhiyun * Continuous bits starting from least significant bit
681*4882a593Smuzhiyun * Example:
682*4882a593Smuzhiyun * BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
683*4882a593Smuzhiyun * BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
684*4882a593Smuzhiyun */
685*4882a593Smuzhiyun #define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ((u32)(BIT_LEN_MASK_32(__BitLen) << (__BitOffset)))
686*4882a593Smuzhiyun #define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ((u16)(BIT_LEN_MASK_16(__BitLen) << (__BitOffset)))
687*4882a593Smuzhiyun #define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ((u8)(BIT_LEN_MASK_8(__BitLen) << (__BitOffset)))
688*4882a593Smuzhiyun
689*4882a593Smuzhiyun /*
690*4882a593Smuzhiyun * Convert LE data to host byte order
691*4882a593Smuzhiyun */
692*4882a593Smuzhiyun #define EF1Byte (u8)
693*4882a593Smuzhiyun #define EF2Byte le16_to_cpu
694*4882a593Smuzhiyun #define EF4Byte le32_to_cpu
695*4882a593Smuzhiyun
696*4882a593Smuzhiyun /*
697*4882a593Smuzhiyun * Read LE data from memory to host byte order
698*4882a593Smuzhiyun */
699*4882a593Smuzhiyun #define ReadLE4Byte(_ptr) le32_to_cpu(*((u32 *)(_ptr)))
700*4882a593Smuzhiyun #define ReadLE2Byte(_ptr) le16_to_cpu(*((u16 *)(_ptr)))
701*4882a593Smuzhiyun #define ReadLE1Byte(_ptr) (*((u8 *)(_ptr)))
702*4882a593Smuzhiyun
703*4882a593Smuzhiyun /*
704*4882a593Smuzhiyun * Read BE data from memory to host byte order
705*4882a593Smuzhiyun */
706*4882a593Smuzhiyun #define ReadBEE4Byte(_ptr) be32_to_cpu(*((u32 *)(_ptr)))
707*4882a593Smuzhiyun #define ReadBE2Byte(_ptr) be16_to_cpu(*((u16 *)(_ptr)))
708*4882a593Smuzhiyun #define ReadBE1Byte(_ptr) (*((u8 *)(_ptr)))
709*4882a593Smuzhiyun
710*4882a593Smuzhiyun /*
711*4882a593Smuzhiyun * Write host byte order data to memory in LE order
712*4882a593Smuzhiyun */
713*4882a593Smuzhiyun #define WriteLE4Byte(_ptr, _val) ((*((u32 *)(_ptr))) = cpu_to_le32(_val))
714*4882a593Smuzhiyun #define WriteLE2Byte(_ptr, _val) ((*((u16 *)(_ptr))) = cpu_to_le16(_val))
715*4882a593Smuzhiyun #define WriteLE1Byte(_ptr, _val) ((*((u8 *)(_ptr))) = ((u8)(_val)))
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun /*
718*4882a593Smuzhiyun * Write host byte order data to memory in BE order
719*4882a593Smuzhiyun */
720*4882a593Smuzhiyun #define WriteBE4Byte(_ptr, _val) ((*((u32 *)(_ptr))) = cpu_to_be32(_val))
721*4882a593Smuzhiyun #define WriteBE2Byte(_ptr, _val) ((*((u16 *)(_ptr))) = cpu_to_be16(_val))
722*4882a593Smuzhiyun #define WriteBE1Byte(_ptr, _val) ((*((u8 *)(_ptr))) = ((u8)(_val)))
723*4882a593Smuzhiyun
724*4882a593Smuzhiyun /*
725*4882a593Smuzhiyun * Return 4-byte value in host byte ordering from 4-byte pointer in litten-endian system.
726*4882a593Smuzhiyun */
727*4882a593Smuzhiyun #define LE_P4BYTE_TO_HOST_4BYTE(__pStart) (le32_to_cpu(*((u32 *)(__pStart))))
728*4882a593Smuzhiyun #define LE_P2BYTE_TO_HOST_2BYTE(__pStart) (le16_to_cpu(*((u16 *)(__pStart))))
729*4882a593Smuzhiyun #define LE_P1BYTE_TO_HOST_1BYTE(__pStart) ((*((u8 *)(__pStart))))
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun /*
732*4882a593Smuzhiyun * Return 4-byte value in host byte ordering from 4-byte pointer in big-endian system.
733*4882a593Smuzhiyun */
734*4882a593Smuzhiyun #define BE_P4BYTE_TO_HOST_4BYTE(__pStart) (be32_to_cpu(*((u32 *)(__pStart))))
735*4882a593Smuzhiyun #define BE_P2BYTE_TO_HOST_2BYTE(__pStart) (be16_to_cpu(*((u16 *)(__pStart))))
736*4882a593Smuzhiyun #define BE_P1BYTE_TO_HOST_1BYTE(__pStart) ((*((u8 *)(__pStart))))
737*4882a593Smuzhiyun
738*4882a593Smuzhiyun /*
739*4882a593Smuzhiyun * Translate subfield (continuous bits in little-endian) of 4-byte value in LE byte to
740*4882a593Smuzhiyun * 4-byte value in host byte ordering.
741*4882a593Smuzhiyun */
742*4882a593Smuzhiyun #define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
743*4882a593Smuzhiyun ((LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset)) & BIT_LEN_MASK_32(__BitLen))
744*4882a593Smuzhiyun
745*4882a593Smuzhiyun #define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
746*4882a593Smuzhiyun ((LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset)) & BIT_LEN_MASK_16(__BitLen))
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun #define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
749*4882a593Smuzhiyun ((LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset)) & BIT_LEN_MASK_8(__BitLen))
750*4882a593Smuzhiyun
751*4882a593Smuzhiyun /*
752*4882a593Smuzhiyun * Translate subfield (continuous bits in big-endian) of 4-byte value in BE byte to
753*4882a593Smuzhiyun * 4-byte value in host byte ordering.
754*4882a593Smuzhiyun */
755*4882a593Smuzhiyun #define BE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
756*4882a593Smuzhiyun ((BE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset)) & BIT_LEN_MASK_32(__BitLen))
757*4882a593Smuzhiyun
758*4882a593Smuzhiyun #define BE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
759*4882a593Smuzhiyun ((BE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset)) & BIT_LEN_MASK_16(__BitLen))
760*4882a593Smuzhiyun
761*4882a593Smuzhiyun #define BE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
762*4882a593Smuzhiyun ((BE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset)) & BIT_LEN_MASK_8(__BitLen))
763*4882a593Smuzhiyun
764*4882a593Smuzhiyun /*
765*4882a593Smuzhiyun * Mask subfield (continuous bits in little-endian) of 4-byte value in LE byte oredering
766*4882a593Smuzhiyun * and return the result in 4-byte value in host byte ordering.
767*4882a593Smuzhiyun */
768*4882a593Smuzhiyun #define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
769*4882a593Smuzhiyun (LE_P4BYTE_TO_HOST_4BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen)))
770*4882a593Smuzhiyun
771*4882a593Smuzhiyun #define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
772*4882a593Smuzhiyun (LE_P2BYTE_TO_HOST_2BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen)))
773*4882a593Smuzhiyun
774*4882a593Smuzhiyun #define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
775*4882a593Smuzhiyun (LE_P1BYTE_TO_HOST_1BYTE(__pStart) & ((u8)(~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen))))
776*4882a593Smuzhiyun
777*4882a593Smuzhiyun /*
778*4882a593Smuzhiyun * Mask subfield (continuous bits in big-endian) of 4-byte value in BE byte oredering
779*4882a593Smuzhiyun * and return the result in 4-byte value in host byte ordering.
780*4882a593Smuzhiyun */
781*4882a593Smuzhiyun #define BE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
782*4882a593Smuzhiyun (BE_P4BYTE_TO_HOST_4BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen)))
783*4882a593Smuzhiyun
784*4882a593Smuzhiyun #define BE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
785*4882a593Smuzhiyun (BE_P2BYTE_TO_HOST_2BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen)))
786*4882a593Smuzhiyun
787*4882a593Smuzhiyun #define BE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
788*4882a593Smuzhiyun (BE_P1BYTE_TO_HOST_1BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen)))
789*4882a593Smuzhiyun
790*4882a593Smuzhiyun /*
791*4882a593Smuzhiyun * Set subfield of little-endian 4-byte value to specified value.
792*4882a593Smuzhiyun */
793*4882a593Smuzhiyun #define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \
794*4882a593Smuzhiyun do { \
795*4882a593Smuzhiyun u8 __offset = __BitOffset, __len = __BitLen; \
796*4882a593Smuzhiyun if (__offset == 0 && __len == 32) \
797*4882a593Smuzhiyun WriteLE4Byte(__pStart, __Value); \
798*4882a593Smuzhiyun else { \
799*4882a593Smuzhiyun WriteLE4Byte(__pStart, \
800*4882a593Smuzhiyun LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
801*4882a593Smuzhiyun | \
802*4882a593Smuzhiyun ((((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset)) \
803*4882a593Smuzhiyun ); \
804*4882a593Smuzhiyun } \
805*4882a593Smuzhiyun } while (0)
806*4882a593Smuzhiyun
807*4882a593Smuzhiyun #define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
808*4882a593Smuzhiyun do { \
809*4882a593Smuzhiyun WriteLE2Byte(__pStart, \
810*4882a593Smuzhiyun LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
811*4882a593Smuzhiyun | \
812*4882a593Smuzhiyun ((((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset)) \
813*4882a593Smuzhiyun ); \
814*4882a593Smuzhiyun } while (0)
815*4882a593Smuzhiyun
816*4882a593Smuzhiyun #define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
817*4882a593Smuzhiyun do { \
818*4882a593Smuzhiyun u8 __offset = __BitOffset; u8 __len = __BitLen; \
819*4882a593Smuzhiyun if (__offset == 0 && __len == 8) \
820*4882a593Smuzhiyun WriteLE1Byte(__pStart, __Value); \
821*4882a593Smuzhiyun else { \
822*4882a593Smuzhiyun WriteLE1Byte(__pStart, \
823*4882a593Smuzhiyun LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __len) \
824*4882a593Smuzhiyun | \
825*4882a593Smuzhiyun ((((u8)__Value) & BIT_LEN_MASK_8(__len)) << (__BitOffset)) \
826*4882a593Smuzhiyun ); \
827*4882a593Smuzhiyun } \
828*4882a593Smuzhiyun } while (0)
829*4882a593Smuzhiyun
830*4882a593Smuzhiyun /*
831*4882a593Smuzhiyun * Set subfield of big-endian 4-byte value to specified value.
832*4882a593Smuzhiyun */
833*4882a593Smuzhiyun #define SET_BITS_TO_BE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \
834*4882a593Smuzhiyun do { \
835*4882a593Smuzhiyun if (__BitOffset == 0 && __BitLen == 32) \
836*4882a593Smuzhiyun WriteBE4Byte(__pStart, __Value); \
837*4882a593Smuzhiyun else { \
838*4882a593Smuzhiyun WriteBE4Byte(__pStart, \
839*4882a593Smuzhiyun BE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
840*4882a593Smuzhiyun | \
841*4882a593Smuzhiyun ((((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset)) \
842*4882a593Smuzhiyun ); \
843*4882a593Smuzhiyun } \
844*4882a593Smuzhiyun } while (0)
845*4882a593Smuzhiyun
846*4882a593Smuzhiyun #define SET_BITS_TO_BE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
847*4882a593Smuzhiyun do { \
848*4882a593Smuzhiyun if (__BitOffset == 0 && __BitLen == 16) \
849*4882a593Smuzhiyun WriteBE2Byte(__pStart, __Value); \
850*4882a593Smuzhiyun else { \
851*4882a593Smuzhiyun WriteBE2Byte(__pStart, \
852*4882a593Smuzhiyun BE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
853*4882a593Smuzhiyun | \
854*4882a593Smuzhiyun ((((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset)) \
855*4882a593Smuzhiyun ); \
856*4882a593Smuzhiyun } \
857*4882a593Smuzhiyun } while (0)
858*4882a593Smuzhiyun
859*4882a593Smuzhiyun #define SET_BITS_TO_BE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
860*4882a593Smuzhiyun do { \
861*4882a593Smuzhiyun if (__BitOffset == 0 && __BitLen == 8) \
862*4882a593Smuzhiyun WriteBE1Byte(__pStart, __Value); \
863*4882a593Smuzhiyun else { \
864*4882a593Smuzhiyun WriteBE1Byte(__pStart, \
865*4882a593Smuzhiyun BE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
866*4882a593Smuzhiyun | \
867*4882a593Smuzhiyun ((((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset)) \
868*4882a593Smuzhiyun ); \
869*4882a593Smuzhiyun } \
870*4882a593Smuzhiyun } while (0)
871*4882a593Smuzhiyun
872*4882a593Smuzhiyun #endif /*_PLTFM_OPS_NONE_H_*/
873