xref: /OK3568_Linux_fs/external/rkwifibt/drivers/bcmdhd/include/linux_pkt.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Linux Packet (skb) interface
3  *
4  * Copyright (C) 2020, Broadcom.
5  *
6  *      Unless you and Broadcom execute a separate written software license
7  * agreement governing use of this software, this software is licensed to you
8  * under the terms of the GNU General Public License version 2 (the "GPL"),
9  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10  * following added to such license:
11  *
12  *      As a special exception, the copyright holders of this software give you
13  * permission to link this software with independent modules, and to copy and
14  * distribute the resulting executable under terms of your choice, provided that
15  * you also meet, for each linked independent module, the terms and conditions of
16  * the license of that module.  An independent module is a module which is not
17  * derived from this software.  The special exception does not apply to any
18  * modifications of the software.
19  *
20  *
21  * <<Broadcom-WL-IPTag/Dual:>>
22  */
23 
24 #ifndef _linux_pkt_h_
25 #define _linux_pkt_h_
26 
27 #include <typedefs.h>
28 
29 #ifdef __ARM_ARCH_7A__
30 #define PKT_HEADROOM_DEFAULT NET_SKB_PAD /**< NET_SKB_PAD is defined in a linux kernel header */
31 #else
32 #define PKT_HEADROOM_DEFAULT 16
33 #endif /* __ARM_ARCH_7A__ */
34 
35 #ifdef BCMDRIVER
36 /*
37  * BINOSL selects the slightly slower function-call-based binary compatible osl.
38  * Macros expand to calls to functions defined in linux_osl.c .
39  */
40 #ifndef BINOSL
41 /* Because the non BINOSL implemenation of the PKT OSL routines are macros (for
42  * performance reasons),  we need the Linux headers.
43  */
44 #include <linuxver.h>
45 
46 /* packet primitives */
47 #ifndef BCMDBG_PKT
48 #ifdef BCMDBG_CTRACE
49 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len), __LINE__, __FILE__)
50 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb), __LINE__, __FILE__)
51 #else
52 #ifdef BCM_OBJECT_TRACE
53 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len), __LINE__, __FUNCTION__)
54 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb), __LINE__, __FUNCTION__)
55 #else
56 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len))
57 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb))
58 #endif /* BCM_OBJECT_TRACE */
59 #endif /* BCMDBG_CTRACE */
60 #define PKTLIST_DUMP(osh, buf)		BCM_REFERENCE(osh)
61 #define PKTDBG_TRACE(osh, pkt, bit)	BCM_REFERENCE(osh)
62 #else /* BCMDBG_PKT pkt logging for debugging */
63 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len), __LINE__, __FILE__)
64 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb), __LINE__, __FILE__)
65 #define PKTLIST_DUMP(osh, buf) 		osl_pktlist_dump(osh, buf)
66 #define BCMDBG_PTRACE
67 #define PKTLIST_IDX(skb)		((uint16 *)((char *)PKTTAG(skb) + \
68 					sizeof(((struct sk_buff*)(skb))->cb) - sizeof(uint16)))
69 #define PKTDBG_TRACE(osh, pkt, bit)     osl_pkttrace(osh, pkt, bit)
70 #endif /* BCMDBG_PKT */
71 #if defined(BCM_OBJECT_TRACE)
72 #define	PKTFREE(osh, skb, send)		linux_pktfree((osh), (skb), (send), __LINE__, __FUNCTION__)
73 #else
74 #define	PKTFREE(osh, skb, send)		linux_pktfree((osh), (skb), (send))
75 #endif /* BCM_OBJECT_TRACE */
76 #ifdef CONFIG_DHD_USE_STATIC_BUF
77 #define	PKTGET_STATIC(osh, len, send)		osl_pktget_static((osh), (len))
78 #define	PKTFREE_STATIC(osh, skb, send)		osl_pktfree_static((osh), (skb), (send))
79 #else
80 #define	PKTGET_STATIC	PKTGET
81 #define	PKTFREE_STATIC	PKTFREE
82 #endif /* CONFIG_DHD_USE_STATIC_BUF */
83 
84 #define	PKTDATA(osh, skb)		({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->data);})
85 #define	PKTLEN(osh, skb)		({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->len);})
86 #define	PKTHEAD(osh, skb)		({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->head);})
87 #define	PKTSOCK(osh, skb)		({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->sk);})
88 #define PKTSETHEAD(osh, skb, h)		({BCM_REFERENCE(osh); \
89 					(((struct sk_buff *)(skb))->head = (h));})
90 #define PKTHEADROOM(osh, skb)		(PKTDATA(osh, skb)-(((struct sk_buff*)(skb))->head))
91 #define PKTEXPHEADROOM(osh, skb, b)	\
92 	({ \
93 	 BCM_REFERENCE(osh); \
94 	 skb_realloc_headroom((struct sk_buff*)(skb), (b)); \
95 	 })
96 #define PKTTAILROOM(osh, skb)		\
97 	({ \
98 	 BCM_REFERENCE(osh); \
99 	 skb_tailroom((struct sk_buff*)(skb)); \
100 	 })
101 #define PKTPADTAILROOM(osh, skb, padlen) \
102 	({ \
103 	 BCM_REFERENCE(osh); \
104 	 skb_pad((struct sk_buff*)(skb), (padlen)); \
105 	 })
106 #define	PKTNEXT(osh, skb)		({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->next);})
107 #define	PKTSETNEXT(osh, skb, x)		\
108 	({ \
109 	 BCM_REFERENCE(osh); \
110 	 (((struct sk_buff*)(skb))->next = (struct sk_buff*)(x)); \
111 	 })
112 #define	PKTSETLEN(osh, skb, len)	\
113 	({ \
114 	 BCM_REFERENCE(osh); \
115 	 __skb_trim((struct sk_buff*)(skb), (len)); \
116 	 })
117 #define	PKTPUSH(osh, skb, bytes)	\
118 	({ \
119 	 BCM_REFERENCE(osh); \
120 	 skb_push((struct sk_buff*)(skb), (bytes)); \
121 	 })
122 #define	PKTPULL(osh, skb, bytes)	\
123 	({ \
124 	 BCM_REFERENCE(osh); \
125 	 skb_pull((struct sk_buff*)(skb), (bytes)); \
126 	 })
127 #define	PKTTAG(skb)			((void*)(((struct sk_buff*)(skb))->cb))
128 #define PKTSETPOOL(osh, skb, x, y)	BCM_REFERENCE(osh)
129 #define	PKTPOOL(osh, skb)		({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;})
130 #define PKTFREELIST(skb)        PKTLINK(skb)
131 #define PKTSETFREELIST(skb, x)  PKTSETLINK((skb), (x))
132 #define PKTPTR(skb)             (skb)
133 #define PKTID(skb)              ({BCM_REFERENCE(skb); 0;})
134 #define PKTSETID(skb, id)       ({BCM_REFERENCE(skb); BCM_REFERENCE(id);})
135 #define PKTIDAVAIL()            (0xFFFFFFFFu)
136 #define PKTSHRINK(osh, m)		({BCM_REFERENCE(osh); m;})
137 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) && defined(TSQ_MULTIPLIER)
138 #define PKTORPHAN(skb, tsq)          osl_pkt_orphan_partial(skb, tsq)
139 extern void osl_pkt_orphan_partial(struct sk_buff *skb, int tsq);
140 #else
141 #define PKTORPHAN(skb, tsq)          ({BCM_REFERENCE(skb); 0;})
142 #endif /* Linux Version >= 3.6 */
143 
144 #ifdef BCMDBG_CTRACE
145 #define	DEL_CTRACE(zosh, zskb) { \
146 	unsigned long zflags; \
147 	OSL_CTRACE_LOCK(&(zosh)->ctrace_lock, zflags); \
148 	list_del(&(zskb)->ctrace_list); \
149 	(zosh)->ctrace_num--; \
150 	(zskb)->ctrace_start = 0; \
151 	(zskb)->ctrace_count = 0; \
152 	OSL_CTRACE_UNLOCK(&(zosh)->ctrace_lock, zflags); \
153 }
154 
155 #define	UPDATE_CTRACE(zskb, zfile, zline) { \
156 	struct sk_buff *_zskb = (struct sk_buff *)(zskb); \
157 	if (_zskb->ctrace_count < CTRACE_NUM) { \
158 		_zskb->func[_zskb->ctrace_count] = zfile; \
159 		_zskb->line[_zskb->ctrace_count] = zline; \
160 		_zskb->ctrace_count++; \
161 	} \
162 	else { \
163 		_zskb->func[_zskb->ctrace_start] = zfile; \
164 		_zskb->line[_zskb->ctrace_start] = zline; \
165 		_zskb->ctrace_start++; \
166 		if (_zskb->ctrace_start >= CTRACE_NUM) \
167 			_zskb->ctrace_start = 0; \
168 	} \
169 }
170 
171 #define	ADD_CTRACE(zosh, zskb, zfile, zline) { \
172 	unsigned long zflags; \
173 	OSL_CTRACE_LOCK(&(zosh)->ctrace_lock, zflags); \
174 	list_add(&(zskb)->ctrace_list, &(zosh)->ctrace_list); \
175 	(zosh)->ctrace_num++; \
176 	UPDATE_CTRACE(zskb, zfile, zline); \
177 	OSL_CTRACE_UNLOCK(&(zosh)->ctrace_lock, zflags); \
178 }
179 
180 #define PKTCALLER(zskb)	UPDATE_CTRACE((struct sk_buff *)zskb, (char *)__FUNCTION__, __LINE__)
181 #endif /* BCMDBG_CTRACE */
182 
183 #define	PKTSETFAST(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
184 #define	PKTCLRFAST(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
185 #define	PKTISFAST(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;})
186 #define PKTLITIDX(skb)		({BCM_REFERENCE(skb); 0;})
187 #define PKTSETLITIDX(skb, idx)	({BCM_REFERENCE(skb); BCM_REFERENCE(idx);})
188 #define PKTRESETLITIDX(skb)	({BCM_REFERENCE(skb);})
189 #define PKTRITIDX(skb)		({BCM_REFERENCE(skb); 0;})
190 #define PKTSETRITIDX(skb, idx)	({BCM_REFERENCE(skb); BCM_REFERENCE(idx);})
191 #define PKTRESETRITIDX(skb)	({BCM_REFERENCE(skb);})
192 
193 #define	PKTSETSKIPCT(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
194 #define	PKTCLRSKIPCT(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
195 #define	PKTSKIPCT(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
196 
197 #define PKTFRAGLEN(osh, lb, ix)			(0)
198 #define PKTSETFRAGLEN(osh, lb, ix, len)		BCM_REFERENCE(osh)
199 
200 #define	PKTSETTOBR(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
201 #define	PKTCLRTOBR(osh, skb)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
202 #define	PKTISTOBR(skb)	({BCM_REFERENCE(skb); FALSE;})
203 
204 #ifdef BCMFA
205 #ifdef BCMFA_HW_HASH
206 #define PKTSETFAHIDX(skb, idx)	(((struct sk_buff*)(skb))->napt_idx = idx)
207 #else
208 #define PKTSETFAHIDX(skb, idx)	({BCM_REFERENCE(skb); BCM_REFERENCE(idx);})
209 #endif /* BCMFA_SW_HASH */
210 #define PKTGETFAHIDX(skb)	(((struct sk_buff*)(skb))->napt_idx)
211 #define PKTSETFADEV(skb, imp)	(((struct sk_buff*)(skb))->dev = imp)
212 #define PKTSETRXDEV(skb)	(((struct sk_buff*)(skb))->rxdev = ((struct sk_buff*)(skb))->dev)
213 
214 #define	AUX_TCP_FIN_RST	(1 << 0)
215 #define	AUX_FREED	(1 << 1)
216 #define PKTSETFAAUX(skb)	(((struct sk_buff*)(skb))->napt_flags |= AUX_TCP_FIN_RST)
217 #define	PKTCLRFAAUX(skb)	(((struct sk_buff*)(skb))->napt_flags &= (~AUX_TCP_FIN_RST))
218 #define	PKTISFAAUX(skb)		(((struct sk_buff*)(skb))->napt_flags & AUX_TCP_FIN_RST)
219 #define PKTSETFAFREED(skb)	(((struct sk_buff*)(skb))->napt_flags |= AUX_FREED)
220 #define	PKTCLRFAFREED(skb)	(((struct sk_buff*)(skb))->napt_flags &= (~AUX_FREED))
221 #define	PKTISFAFREED(skb)	(((struct sk_buff*)(skb))->napt_flags & AUX_FREED)
222 #define	PKTISFABRIDGED(skb)	PKTISFAAUX(skb)
223 #else
224 #define	PKTISFAAUX(skb)		({BCM_REFERENCE(skb); FALSE;})
225 #define	PKTISFABRIDGED(skb)	({BCM_REFERENCE(skb); FALSE;})
226 #define	PKTISFAFREED(skb)	({BCM_REFERENCE(skb); FALSE;})
227 
228 #define	PKTCLRFAAUX(skb)	BCM_REFERENCE(skb)
229 #define PKTSETFAFREED(skb)	BCM_REFERENCE(skb)
230 #define	PKTCLRFAFREED(skb)	BCM_REFERENCE(skb)
231 #endif /* BCMFA */
232 
233 #if defined(BCM_OBJECT_TRACE)
234 extern void linux_pktfree(osl_t *osh, void *skb, bool send, int line, const char *caller);
235 #else
236 extern void linux_pktfree(osl_t *osh, void *skb, bool send);
237 #endif /* BCM_OBJECT_TRACE */
238 extern void *osl_pktget_static(osl_t *osh, uint len);
239 extern void osl_pktfree_static(osl_t *osh, void *skb, bool send);
240 extern void osl_pktclone(osl_t *osh, void **pkt);
241 
242 #ifdef BCMDBG_PKT /* pkt logging for debugging */
243 extern void *linux_pktget(osl_t *osh, uint len, int line, char *file);
244 extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file);
245 extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file);
246 extern void osl_pktlist_add(osl_t *osh, void *p, int line, char *file);
247 extern void osl_pktlist_remove(osl_t *osh, void *p);
248 extern char *osl_pktlist_dump(osl_t *osh, char *buf);
249 #ifdef BCMDBG_PTRACE
250 extern void osl_pkttrace(osl_t *osh, void *pkt, uint16 bit);
251 #endif /* BCMDBG_PTRACE */
252 #else /* BCMDBG_PKT */
253 #ifdef BCMDBG_CTRACE
254 #define PKT_CTRACE_DUMP(osh, b)	osl_ctrace_dump((osh), (b))
255 extern void *linux_pktget(osl_t *osh, uint len, int line, char *file);
256 extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file);
257 extern int osl_pkt_is_frmnative(osl_t *osh, struct sk_buff *pkt);
258 extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file);
259 struct bcmstrbuf;
260 extern void osl_ctrace_dump(osl_t *osh, struct bcmstrbuf *b);
261 #else
262 #ifdef BCM_OBJECT_TRACE
263 extern void *linux_pktget(osl_t *osh, uint len, int line, const char *caller);
264 extern void *osl_pktdup(osl_t *osh, void *skb, int line, const char *caller);
265 #else
266 extern void *linux_pktget(osl_t *osh, uint len);
267 extern void *osl_pktdup(osl_t *osh, void *skb);
268 #endif /* BCM_OBJECT_TRACE */
269 extern void *osl_pkt_frmnative(osl_t *osh, void *skb);
270 #endif /* BCMDBG_CTRACE */
271 #endif /* BCMDBG_PKT */
272 extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt);
273 #ifdef BCMDBG_PKT
274 #define PKTFRMNATIVE(osh, skb)  osl_pkt_frmnative(((osl_t *)osh), \
275 				(struct sk_buff*)(skb), __LINE__, __FILE__)
276 #else /* BCMDBG_PKT */
277 #ifdef BCMDBG_CTRACE
278 #define PKTFRMNATIVE(osh, skb)  osl_pkt_frmnative(((osl_t *)osh), \
279 				(struct sk_buff*)(skb), __LINE__, __FILE__)
280 #define	PKTISFRMNATIVE(osh, skb) osl_pkt_is_frmnative((osl_t *)(osh), (struct sk_buff *)(skb))
281 #else
282 #define PKTFRMNATIVE(osh, skb)	osl_pkt_frmnative(((osl_t *)osh), (struct sk_buff*)(skb))
283 #endif /* BCMDBG_CTRACE */
284 #endif /* BCMDBG_PKT */
285 #define PKTTONATIVE(osh, pkt)		osl_pkt_tonative((osl_t *)(osh), (pkt))
286 
287 #define	PKTLINK(skb)			(((struct sk_buff*)(skb))->prev)
288 #define	PKTSETLINK(skb, x)		(((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x))
289 #define	PKTPRIO(skb)			(((struct sk_buff*)(skb))->priority)
290 #define	PKTSETPRIO(skb, x)		(((struct sk_buff*)(skb))->priority = (x))
291 #define PKTSUMNEEDED(skb)		(((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW)
292 #define PKTSETSUMGOOD(skb, x)		(((struct sk_buff*)(skb))->ip_summed = \
293 						((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE))
294 /* PKTSETSUMNEEDED and PKTSUMGOOD are not possible because skb->ip_summed is overloaded */
295 #define PKTSHARED(skb)                  (((struct sk_buff*)(skb))->cloned)
296 
297 #ifdef CONFIG_NF_CONNTRACK_MARK
298 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
299 #define PKTMARK(p)                     (((struct sk_buff *)(p))->mark)
300 #define PKTSETMARK(p, m)               ((struct sk_buff *)(p))->mark = (m)
301 #else /* !2.6.0 */
302 #define PKTMARK(p)                     (((struct sk_buff *)(p))->nfmark)
303 #define PKTSETMARK(p, m)               ((struct sk_buff *)(p))->nfmark = (m)
304 #endif /* 2.6.0 */
305 #else /* CONFIG_NF_CONNTRACK_MARK */
306 #define PKTMARK(p)                     0
307 #define PKTSETMARK(p, m)
308 #endif /* CONFIG_NF_CONNTRACK_MARK */
309 
310 #else	/* BINOSL */
311 
312 #define OSL_PREF_RANGE_LD(va, sz)
313 #define OSL_PREF_RANGE_ST(va, sz)
314 
315 /* packet primitives */
316 #ifdef BCMDBG_PKT
317 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len), __LINE__, __FILE__)
318 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb), __LINE__, __FILE__)
319 #define PKTFRMNATIVE(osh, skb)		osl_pkt_frmnative((osh), (skb), __LINE__, __FILE__)
320 #define PKTLIST_DUMP(osh, buf) 		osl_pktlist_dump(osh, buf)
321 #define PKTDBG_TRACE(osh, pkt, bit)	BCM_REFERENCE(osh)
322 #else /* BCMDBG_PKT */
323 #ifdef BCMDBG_CTRACE
324 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len), __LINE__, __FILE__)
325 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb), __LINE__, __FILE__)
326 #define PKTFRMNATIVE(osh, skb)		osl_pkt_frmnative((osh), (skb), __LINE__, __FILE__)
327 #else
328 #ifdef BCM_OBJECT_TRACE
329 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len), __LINE__, __FUNCTION__)
330 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb), __LINE__, __FUNCTION__)
331 #else
332 #define	PKTGET(osh, len, send)		linux_pktget((osh), (len))
333 #define	PKTDUP(osh, skb)		osl_pktdup((osh), (skb))
334 #endif /* BCM_OBJECT_TRACE */
335 #define PKTFRMNATIVE(osh, skb)		osl_pkt_frmnative((osh), (skb))
336 #endif /* BCMDBG_CTRACE */
337 #define PKTLIST_DUMP(osh, buf)		({BCM_REFERENCE(osh); BCM_REFERENCE(buf);})
338 #define PKTDBG_TRACE(osh, pkt, bit)	({BCM_REFERENCE(osh); BCM_REFERENCE(pkt);})
339 #endif /* BCMDBG_PKT */
340 #if defined(BCM_OBJECT_TRACE)
341 #define	PKTFREE(osh, skb, send)		linux_pktfree((osh), (skb), (send), __LINE__, __FUNCTION__)
342 #else
343 #define	PKTFREE(osh, skb, send)		linux_pktfree((osh), (skb), (send))
344 #endif /* BCM_OBJECT_TRACE */
345 #define	PKTDATA(osh, skb)		osl_pktdata((osh), (skb))
346 #define	PKTLEN(osh, skb)		osl_pktlen((osh), (skb))
347 #define PKTHEADROOM(osh, skb)		osl_pktheadroom((osh), (skb))
348 #define PKTTAILROOM(osh, skb)		osl_pkttailroom((osh), (skb))
349 #define	PKTNEXT(osh, skb)		osl_pktnext((osh), (skb))
350 #define	PKTSETNEXT(osh, skb, x)		({BCM_REFERENCE(osh); osl_pktsetnext((skb), (x));})
351 #define	PKTSETLEN(osh, skb, len)	osl_pktsetlen((osh), (skb), (len))
352 #define	PKTPUSH(osh, skb, bytes)	osl_pktpush((osh), (skb), (bytes))
353 #define	PKTPULL(osh, skb, bytes)	osl_pktpull((osh), (skb), (bytes))
354 #define PKTTAG(skb)			osl_pkttag((skb))
355 #define PKTTONATIVE(osh, pkt)		osl_pkt_tonative((osh), (pkt))
356 #define	PKTLINK(skb)			osl_pktlink((skb))
357 #define	PKTSETLINK(skb, x)		osl_pktsetlink((skb), (x))
358 #define	PKTPRIO(skb)			osl_pktprio((skb))
359 #define	PKTSETPRIO(skb, x)		osl_pktsetprio((skb), (x))
360 #define PKTSHARED(skb)                  osl_pktshared((skb))
361 #define PKTSETPOOL(osh, skb, x, y)	({BCM_REFERENCE(osh); BCM_REFERENCE(skb);})
362 #define	PKTPOOL(osh, skb)		({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;})
363 #define PKTFREELIST(skb)        PKTLINK(skb)
364 #define PKTSETFREELIST(skb, x)  PKTSETLINK((skb), (x))
365 #define PKTPTR(skb)             (skb)
366 #define PKTID(skb)              ({BCM_REFERENCE(skb); 0;})
367 #define PKTSETID(skb, id)       ({BCM_REFERENCE(skb); BCM_REFERENCE(id);})
368 #define PKTIDAVAIL()            (0xFFFFFFFFu)
369 
370 #ifdef BCMDBG_PKT /* pkt logging for debugging */
371 extern void *linux_pktget(osl_t *osh, uint len, int line, char *file);
372 extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file);
373 extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file);
374 #else /* BCMDBG_PKT */
375 #ifdef BCM_OBJECT_TRACE
376 extern void *linux_pktget(osl_t *osh, uint len, int line, const char *caller);
377 extern void *osl_pktdup(osl_t *osh, void *skb, int line, const char *caller);
378 #else
379 extern void *linux_pktget(osl_t *osh, uint len);
380 extern void *osl_pktdup(osl_t *osh, void *skb);
381 #endif /* BCM_OBJECT_TRACE */
382 extern void *osl_pkt_frmnative(osl_t *osh, void *skb);
383 #endif /* BCMDBG_PKT */
384 #if defined(BCM_OBJECT_TRACE)
385 extern void linux_pktfree(osl_t *osh, void *skb, bool send, int line, const char *caller);
386 #else
387 extern void linux_pktfree(osl_t *osh, void *skb, bool send);
388 #endif /* BCM_OBJECT_TRACE */
389 extern uchar *osl_pktdata(osl_t *osh, void *skb);
390 extern uint osl_pktlen(osl_t *osh, void *skb);
391 extern uint osl_pktheadroom(osl_t *osh, void *skb);
392 extern uint osl_pkttailroom(osl_t *osh, void *skb);
393 extern void *osl_pktnext(osl_t *osh, void *skb);
394 extern void osl_pktsetnext(void *skb, void *x);
395 extern void osl_pktsetlen(osl_t *osh, void *skb, uint len);
396 extern uchar *osl_pktpush(osl_t *osh, void *skb, int bytes);
397 extern uchar *osl_pktpull(osl_t *osh, void *skb, int bytes);
398 extern void *osl_pkttag(void *skb);
399 extern void *osl_pktlink(void *skb);
400 extern void osl_pktsetlink(void *skb, void *x);
401 extern uint osl_pktprio(void *skb);
402 extern void osl_pktsetprio(void *skb, uint x);
403 extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt);
404 extern bool osl_pktshared(void *skb);
405 
406 #ifdef BCMDBG_PKT /* pkt logging for debugging */
407 extern char *osl_pktlist_dump(osl_t *osh, char *buf);
408 extern void osl_pktlist_add(osl_t *osh, void *p, int line, char *file);
409 extern void osl_pktlist_remove(osl_t *osh, void *p);
410 #endif /* BCMDBG_PKT */
411 
412 #endif	/* BINOSL */
413 
414 #define PKTALLOCED(osh)		osl_pktalloced(osh)
415 extern uint osl_pktalloced(osl_t *osh);
416 
417 #define PKTPOOLHEAPCOUNT()            (0u)
418 
419 #endif /* BCMDRIVER */
420 
421 #endif	/* _linux_pkt_h_ */
422