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