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