Commit | Line | Data |
---|---|---|
58391efd | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
554c0a3a HG |
2 | /****************************************************************************** |
3 | * | |
4 | * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved. | |
5 | * | |
554c0a3a HG |
6 | ******************************************************************************/ |
7 | #ifndef __OSDEP_SERVICE_H_ | |
8 | #define __OSDEP_SERVICE_H_ | |
9 | ||
10 | ||
11 | #define _FAIL 0 | |
12 | #define _SUCCESS 1 | |
13 | #define RTW_RX_HANDLED 2 | |
14 | ||
15 | #include <osdep_service_linux.h> | |
16 | ||
17 | #ifndef BIT | |
18 | #define BIT(x) (1 << (x)) | |
19 | #endif | |
20 | ||
21 | #define BIT0 0x00000001 | |
22 | #define BIT1 0x00000002 | |
23 | #define BIT2 0x00000004 | |
24 | #define BIT3 0x00000008 | |
25 | #define BIT4 0x00000010 | |
26 | #define BIT5 0x00000020 | |
27 | #define BIT6 0x00000040 | |
28 | #define BIT7 0x00000080 | |
29 | #define BIT8 0x00000100 | |
30 | #define BIT9 0x00000200 | |
31 | #define BIT10 0x00000400 | |
32 | #define BIT11 0x00000800 | |
33 | #define BIT12 0x00001000 | |
34 | #define BIT13 0x00002000 | |
35 | #define BIT14 0x00004000 | |
36 | #define BIT15 0x00008000 | |
37 | #define BIT16 0x00010000 | |
38 | #define BIT17 0x00020000 | |
39 | #define BIT18 0x00040000 | |
40 | #define BIT19 0x00080000 | |
41 | #define BIT20 0x00100000 | |
42 | #define BIT21 0x00200000 | |
43 | #define BIT22 0x00400000 | |
44 | #define BIT23 0x00800000 | |
45 | #define BIT24 0x01000000 | |
46 | #define BIT25 0x02000000 | |
47 | #define BIT26 0x04000000 | |
48 | #define BIT27 0x08000000 | |
49 | #define BIT28 0x10000000 | |
50 | #define BIT29 0x20000000 | |
51 | #define BIT30 0x40000000 | |
52 | #define BIT31 0x80000000 | |
53 | #define BIT32 0x0100000000 | |
54 | #define BIT33 0x0200000000 | |
55 | #define BIT34 0x0400000000 | |
56 | #define BIT35 0x0800000000 | |
57 | #define BIT36 0x1000000000 | |
58 | ||
59 | extern int RTW_STATUS_CODE(int error_code); | |
60 | ||
61 | /* flags used for rtw_mstat_update() */ | |
62 | enum mstat_f { | |
63 | /* type: 0x00ff */ | |
64 | MSTAT_TYPE_VIR = 0x00, | |
65 | MSTAT_TYPE_PHY = 0x01, | |
66 | MSTAT_TYPE_SKB = 0x02, | |
67 | MSTAT_TYPE_USB = 0x03, | |
68 | MSTAT_TYPE_MAX = 0x04, | |
69 | ||
70 | /* func: 0xff00 */ | |
71 | MSTAT_FUNC_UNSPECIFIED = 0x00<<8, | |
72 | MSTAT_FUNC_IO = 0x01<<8, | |
73 | MSTAT_FUNC_TX_IO = 0x02<<8, | |
74 | MSTAT_FUNC_RX_IO = 0x03<<8, | |
75 | MSTAT_FUNC_TX = 0x04<<8, | |
76 | MSTAT_FUNC_RX = 0x05<<8, | |
77 | MSTAT_FUNC_MAX = 0x06<<8, | |
78 | }; | |
79 | ||
80 | #define mstat_tf_idx(flags) ((flags)&0xff) | |
81 | #define mstat_ff_idx(flags) (((flags)&0xff00) >> 8) | |
82 | ||
c77761d6 | 83 | typedef enum mstat_status { |
554c0a3a HG |
84 | MSTAT_ALLOC_SUCCESS = 0, |
85 | MSTAT_ALLOC_FAIL, | |
86 | MSTAT_FREE | |
87 | } MSTAT_STATUS; | |
88 | ||
89 | #define rtw_mstat_update(flag, status, sz) do {} while (0) | |
90 | #define rtw_mstat_dump(sel) do {} while (0) | |
35628c4a JP |
91 | void *_rtw_zmalloc(u32 sz); |
92 | void *_rtw_malloc(u32 sz); | |
554c0a3a HG |
93 | void _kfree(u8 *pbuf, u32 sz); |
94 | ||
95 | struct sk_buff *_rtw_skb_alloc(u32 sz); | |
96 | struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb); | |
97 | struct sk_buff *_rtw_skb_clone(struct sk_buff *skb); | |
98 | int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb); | |
99 | ||
100 | #define rtw_malloc(sz) _rtw_malloc((sz)) | |
101 | #define rtw_zmalloc(sz) _rtw_zmalloc((sz)) | |
102 | ||
103 | #define rtw_skb_alloc(size) _rtw_skb_alloc((size)) | |
104 | #define rtw_skb_alloc_f(size, mstat_f) _rtw_skb_alloc((size)) | |
105 | #define rtw_skb_copy(skb) _rtw_skb_copy((skb)) | |
106 | #define rtw_skb_clone(skb) _rtw_skb_clone((skb)) | |
107 | #define rtw_skb_copy_f(skb, mstat_f) _rtw_skb_copy((skb)) | |
108 | #define rtw_skb_clone_f(skb, mstat_f) _rtw_skb_clone((skb)) | |
109 | #define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb) | |
110 | ||
111 | extern void _rtw_init_queue(struct __queue *pqueue); | |
112 | ||
4a397521 | 113 | static inline void thread_enter(char *name) |
554c0a3a HG |
114 | { |
115 | allow_signal(SIGTERM); | |
116 | } | |
117 | ||
4a397521 | 118 | static inline void flush_signals_thread(void) |
554c0a3a | 119 | { |
c77761d6 | 120 | if (signal_pending(current)) |
554c0a3a HG |
121 | { |
122 | flush_signals(current); | |
123 | } | |
124 | } | |
125 | ||
126 | #define rtw_warn_on(condition) WARN_ON(condition) | |
127 | ||
4a397521 | 128 | static inline int rtw_bug_check(void *parg1, void *parg2, void *parg3, void *parg4) |
554c0a3a HG |
129 | { |
130 | int ret = true; | |
131 | ||
132 | return ret; | |
133 | ||
134 | } | |
135 | ||
136 | #define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r)) | |
c77761d6 | 137 | #define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0 : 1)) << 2) |
554c0a3a | 138 | |
4a397521 | 139 | static inline u32 _RND4(u32 sz) |
554c0a3a HG |
140 | { |
141 | ||
142 | u32 val; | |
143 | ||
c77761d6 | 144 | val = ((sz >> 2) + ((sz & 3) ? 1 : 0)) << 2; |
554c0a3a HG |
145 | |
146 | return val; | |
147 | ||
148 | } | |
149 | ||
4a397521 | 150 | static inline u32 _RND8(u32 sz) |
554c0a3a HG |
151 | { |
152 | ||
153 | u32 val; | |
154 | ||
c77761d6 | 155 | val = ((sz >> 3) + ((sz & 7) ? 1 : 0)) << 3; |
554c0a3a HG |
156 | |
157 | return val; | |
158 | ||
159 | } | |
160 | ||
161 | #ifndef MAC_FMT | |
12cc28ba | 162 | #define MAC_FMT "%pM" |
554c0a3a HG |
163 | #endif |
164 | #ifndef MAC_ARG | |
12cc28ba | 165 | #define MAC_ARG(x) (x) |
554c0a3a HG |
166 | #endif |
167 | ||
168 | ||
169 | #ifdef CONFIG_AP_WOWLAN | |
170 | extern void rtw_softap_lock_suspend(void); | |
171 | extern void rtw_softap_unlock_suspend(void); | |
172 | #endif | |
173 | ||
554c0a3a HG |
174 | extern void rtw_free_netdev(struct net_device * netdev); |
175 | ||
176 | ||
554c0a3a HG |
177 | /* Macros for handling unaligned memory accesses */ |
178 | ||
179 | #define RTW_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1])) | |
180 | #define RTW_PUT_BE16(a, val) \ | |
181 | do { \ | |
182 | (a)[0] = ((u16) (val)) >> 8; \ | |
183 | (a)[1] = ((u16) (val)) & 0xff; \ | |
184 | } while (0) | |
185 | ||
186 | #define RTW_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0])) | |
187 | #define RTW_PUT_LE16(a, val) \ | |
188 | do { \ | |
189 | (a)[1] = ((u16) (val)) >> 8; \ | |
190 | (a)[0] = ((u16) (val)) & 0xff; \ | |
191 | } while (0) | |
192 | ||
193 | #define RTW_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \ | |
194 | ((u32) (a)[2])) | |
195 | #define RTW_PUT_BE24(a, val) \ | |
196 | do { \ | |
197 | (a)[0] = (u8) ((((u32) (val)) >> 16) & 0xff); \ | |
198 | (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \ | |
199 | (a)[2] = (u8) (((u32) (val)) & 0xff); \ | |
200 | } while (0) | |
201 | ||
202 | #define RTW_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \ | |
203 | (((u32) (a)[2]) << 8) | ((u32) (a)[3])) | |
204 | #define RTW_PUT_BE32(a, val) \ | |
205 | do { \ | |
206 | (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \ | |
207 | (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \ | |
208 | (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \ | |
209 | (a)[3] = (u8) (((u32) (val)) & 0xff); \ | |
210 | } while (0) | |
211 | ||
212 | #define RTW_GET_LE32(a) ((((u32) (a)[3]) << 24) | (((u32) (a)[2]) << 16) | \ | |
213 | (((u32) (a)[1]) << 8) | ((u32) (a)[0])) | |
214 | #define RTW_PUT_LE32(a, val) \ | |
215 | do { \ | |
216 | (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff); \ | |
217 | (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff); \ | |
218 | (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \ | |
219 | (a)[0] = (u8) (((u32) (val)) & 0xff); \ | |
220 | } while (0) | |
221 | ||
222 | #define RTW_GET_BE64(a) ((((u64) (a)[0]) << 56) | (((u64) (a)[1]) << 48) | \ | |
223 | (((u64) (a)[2]) << 40) | (((u64) (a)[3]) << 32) | \ | |
224 | (((u64) (a)[4]) << 24) | (((u64) (a)[5]) << 16) | \ | |
225 | (((u64) (a)[6]) << 8) | ((u64) (a)[7])) | |
226 | #define RTW_PUT_BE64(a, val) \ | |
227 | do { \ | |
228 | (a)[0] = (u8) (((u64) (val)) >> 56); \ | |
229 | (a)[1] = (u8) (((u64) (val)) >> 48); \ | |
230 | (a)[2] = (u8) (((u64) (val)) >> 40); \ | |
231 | (a)[3] = (u8) (((u64) (val)) >> 32); \ | |
232 | (a)[4] = (u8) (((u64) (val)) >> 24); \ | |
233 | (a)[5] = (u8) (((u64) (val)) >> 16); \ | |
234 | (a)[6] = (u8) (((u64) (val)) >> 8); \ | |
235 | (a)[7] = (u8) (((u64) (val)) & 0xff); \ | |
236 | } while (0) | |
237 | ||
238 | #define RTW_GET_LE64(a) ((((u64) (a)[7]) << 56) | (((u64) (a)[6]) << 48) | \ | |
239 | (((u64) (a)[5]) << 40) | (((u64) (a)[4]) << 32) | \ | |
240 | (((u64) (a)[3]) << 24) | (((u64) (a)[2]) << 16) | \ | |
241 | (((u64) (a)[1]) << 8) | ((u64) (a)[0])) | |
242 | ||
243 | void rtw_buf_free(u8 **buf, u32 *buf_len); | |
244 | void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len); | |
245 | ||
246 | struct rtw_cbuf { | |
247 | u32 write; | |
248 | u32 read; | |
249 | u32 size; | |
250 | void *bufs[0]; | |
251 | }; | |
252 | ||
253 | bool rtw_cbuf_full(struct rtw_cbuf *cbuf); | |
254 | bool rtw_cbuf_empty(struct rtw_cbuf *cbuf); | |
255 | bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf); | |
256 | void *rtw_cbuf_pop(struct rtw_cbuf *cbuf); | |
257 | struct rtw_cbuf *rtw_cbuf_alloc(u32 size); | |
258 | ||
259 | /* String handler */ | |
260 | /* | |
261 | * Write formatted output to sized buffer | |
262 | */ | |
263 | #define rtw_sprintf(buf, size, format, arg...) snprintf(buf, size, format, ##arg) | |
264 | ||
265 | #endif |