| /* |
| * Linux Packet (skb) interface |
| * |
| * Copyright (C) 2023, Broadcom. |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * |
| * <<Broadcom-WL-IPTag/Dual:>> |
| */ |
| |
| #ifndef _linux_pkt_h_ |
| #define _linux_pkt_h_ |
| |
| #include <typedefs.h> |
| |
| #ifdef __ARM_ARCH_7A__ |
| #define PKT_HEADROOM_DEFAULT NET_SKB_PAD /**< NET_SKB_PAD is defined in a linux kernel header */ |
| #else |
| #define PKT_HEADROOM_DEFAULT 16 |
| #endif /* __ARM_ARCH_7A__ */ |
| |
| #ifdef BCMDRIVER |
| /* |
| * BINOSL selects the slightly slower function-call-based binary compatible osl. |
| * Macros expand to calls to functions defined in linux_osl.c . |
| */ |
| #ifndef BINOSL |
| /* Because the non BINOSL implemenation of the PKT OSL routines are macros (for |
| * performance reasons), we need the Linux headers. |
| */ |
| #include <linuxver.h> |
| |
| /* packet primitives */ |
| #ifndef BCMDBG_PKT |
| #ifdef BCMDBG_CTRACE |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len), __LINE__, __FILE__) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__) |
| #else |
| #ifdef BCM_OBJECT_TRACE |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len), __LINE__, __FUNCTION__) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FUNCTION__) |
| #else |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len)) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb)) |
| #endif /* BCM_OBJECT_TRACE */ |
| #endif /* BCMDBG_CTRACE */ |
| #define PKTLIST_DUMP(osh, buf, bufsz) BCM_REFERENCE(osh) |
| #define PKTDBG_TRACE(osh, pkt, bit) BCM_REFERENCE(osh) |
| #else /* BCMDBG_PKT pkt logging for debugging */ |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len), __LINE__, __FILE__) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__) |
| #define PKTLIST_DUMP(osh, buf, bufsz) osl_pktlist_dump(osh, buf, bufsz) |
| #define BCMDBG_PTRACE |
| #define PKTLIST_IDX(skb) ((uint16 *)((char *)PKTTAG(skb) + \ |
| sizeof(((struct sk_buff*)(skb))->cb) - sizeof(uint16))) |
| #define PKTDBG_TRACE(osh, pkt, bit) osl_pkttrace(osh, pkt, bit) |
| #endif /* BCMDBG_PKT */ |
| #if defined(BCM_OBJECT_TRACE) |
| #define PKTFREE(osh, skb, send) linux_pktfree((osh), (skb), (send), __LINE__, __FUNCTION__) |
| #else |
| #define PKTFREE(osh, skb, send) linux_pktfree((osh), (skb), (send)) |
| #endif /* BCM_OBJECT_TRACE */ |
| #ifdef CONFIG_DHD_USE_STATIC_BUF |
| #define PKTGET_STATIC(osh, len, send) osl_pktget_static((osh), (len)) |
| #define PKTFREE_STATIC(osh, skb, send) osl_pktfree_static((osh), (skb), (send)) |
| #else |
| #define PKTGET_STATIC PKTGET |
| #define PKTFREE_STATIC PKTFREE |
| #endif /* CONFIG_DHD_USE_STATIC_BUF */ |
| |
| #define PKTDATA(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->data);}) |
| #define PKTLEN(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->len);}) |
| #define PKTHEAD(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->head);}) |
| #define PKTSOCK(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->sk);}) |
| #define PKTSETHEAD(osh, skb, h) ({BCM_REFERENCE(osh); \ |
| (((struct sk_buff *)(skb))->head = (h));}) |
| #define PKTHEADROOM(osh, skb) (PKTDATA(osh, skb)-(((struct sk_buff*)(skb))->head)) |
| #define PKTEXPHEADROOM(osh, skb, b) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| skb_realloc_headroom((struct sk_buff*)(skb), (b)); \ |
| }) |
| #define PKTTAILROOM(osh, skb) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| skb_tailroom((struct sk_buff*)(skb)); \ |
| }) |
| #define PKTPADTAILROOM(osh, skb, padlen) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| skb_pad((struct sk_buff*)(skb), (padlen)); \ |
| }) |
| #define PKTNEXT(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->next);}) |
| #define PKTSETNEXT(osh, skb, x) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| (((struct sk_buff*)(skb))->next = (struct sk_buff*)(x)); \ |
| }) |
| #define PKTSETLEN(osh, skb, len) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| __skb_trim((struct sk_buff*)(skb), (len)); \ |
| }) |
| #define PKTPUSH(osh, skb, bytes) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| skb_push((struct sk_buff*)(skb), (bytes)); \ |
| }) |
| #define PKTPULL(osh, skb, bytes) \ |
| ({ \ |
| BCM_REFERENCE(osh); \ |
| skb_pull((struct sk_buff*)(skb), (bytes)); \ |
| }) |
| #define PKTTAG(skb) ((void*)(((struct sk_buff*)(skb))->cb)) |
| #define PKTSETPOOL(osh, skb, x, y) BCM_REFERENCE(osh) |
| #define PKTPOOL(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
| #define PKTFREELIST(skb) PKTLINK(skb) |
| #define PKTSETFREELIST(skb, x) PKTSETLINK((skb), (x)) |
| #define PKTPTR(skb) (skb) |
| #define PKTID(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETID(skb, id) ({BCM_REFERENCE(skb); BCM_REFERENCE(id);}) |
| #define PKTIDAVAIL() (0xFFFFFFFFu) |
| #define PKTSHRINK(osh, m) ({BCM_REFERENCE(osh); m;}) |
| #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) && defined(TSQ_MULTIPLIER) |
| #define PKTORPHAN(skb) osl_pkt_orphan_partial(skb) |
| extern void osl_pkt_orphan_partial(struct sk_buff *skb); |
| #else |
| #define PKTORPHAN(skb) ({BCM_REFERENCE(skb); 0;}) |
| #endif /* Linux Version >= 3.6 */ |
| |
| #ifdef RX_PKT_POOL |
| #ifdef DHD_USE_ATOMIC_PKTGET |
| #error "Don't enable both DHD_USE_ATOMIC_PKTGET and RX_PKT_POOL, " |
| "as RX_PKT_POOL runs in non atomic context" |
| #endif /* DHD_USE_ATOMIC_PKTGET */ |
| #define PKTGET_RX_POOL(osh, dhd, len, send) dhd_rxpool_pktget((osh), (dhd), (len)) |
| #endif /* RX_PKT_POOL */ |
| |
| #ifdef BCMDBG_CTRACE |
| #define DEL_CTRACE(zosh, zskb) { \ |
| unsigned long zflags; \ |
| OSL_CTRACE_LOCK(&(zosh)->ctrace_lock, zflags); \ |
| list_del(&(zskb)->ctrace_list); \ |
| (zosh)->ctrace_num--; \ |
| (zskb)->ctrace_start = 0; \ |
| (zskb)->ctrace_count = 0; \ |
| OSL_CTRACE_UNLOCK(&(zosh)->ctrace_lock, zflags); \ |
| } |
| |
| #define UPDATE_CTRACE(zskb, zfile, zline) { \ |
| struct sk_buff *_zskb = (struct sk_buff *)(zskb); \ |
| if (_zskb->ctrace_count < CTRACE_NUM) { \ |
| _zskb->func[_zskb->ctrace_count] = zfile; \ |
| _zskb->line[_zskb->ctrace_count] = zline; \ |
| _zskb->ctrace_count++; \ |
| } \ |
| else { \ |
| _zskb->func[_zskb->ctrace_start] = zfile; \ |
| _zskb->line[_zskb->ctrace_start] = zline; \ |
| _zskb->ctrace_start++; \ |
| if (_zskb->ctrace_start >= CTRACE_NUM) \ |
| _zskb->ctrace_start = 0; \ |
| } \ |
| } |
| |
| #define ADD_CTRACE(zosh, zskb, zfile, zline) { \ |
| unsigned long zflags; \ |
| OSL_CTRACE_LOCK(&(zosh)->ctrace_lock, zflags); \ |
| list_add(&(zskb)->ctrace_list, &(zosh)->ctrace_list); \ |
| (zosh)->ctrace_num++; \ |
| UPDATE_CTRACE(zskb, zfile, zline); \ |
| OSL_CTRACE_UNLOCK(&(zosh)->ctrace_lock, zflags); \ |
| } |
| |
| #define PKTCALLER(zskb) UPDATE_CTRACE((struct sk_buff *)zskb, (char *)__FUNCTION__, __LINE__) |
| #endif /* BCMDBG_CTRACE */ |
| |
| #define PKTSETFAST(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTCLRFAST(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTISFAST(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
| |
| #define PKTLITIDX(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETLITIDX(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #define PKTRESETLITIDX(skb) ({BCM_REFERENCE(skb);}) |
| #define PKTLITIDX_1(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETLITIDX_1(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #define PKTRESETLITIDX_1(skb) ({BCM_REFERENCE(skb);}) |
| #define PKTLITIDX_2(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETLITIDX_2(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #define PKTRESETLITIDX_2(skb) ({BCM_REFERENCE(skb);}) |
| |
| #define PKTRITIDX(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETRITIDX(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #define PKTRESETRITIDX(skb) ({BCM_REFERENCE(skb);}) |
| #define PKTRITIDX_1(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETRITIDX_1(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #define PKTRESETRITIDX_1(skb) ({BCM_REFERENCE(skb);}) |
| #define PKTRITIDX_2(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETRITIDX_2(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #define PKTRESETRITIDX_2(skb) ({BCM_REFERENCE(skb);}) |
| |
| #define PKTSETSKIPCT(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTCLRSKIPCT(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTSKIPCT(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| |
| #define PKTFRAGLEN(osh, lb, ix) (0) |
| #define PKTSETFRAGLEN(osh, lb, ix, len) BCM_REFERENCE(osh) |
| |
| #define PKTSETTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTCLRTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTISTOBR(skb) ({BCM_REFERENCE(skb); FALSE;}) |
| |
| |
| #ifdef BCMFA |
| #ifdef BCMFA_HW_HASH |
| #define PKTSETFAHIDX(skb, idx) (((struct sk_buff*)(skb))->napt_idx = idx) |
| #else |
| #define PKTSETFAHIDX(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
| #endif /* BCMFA_SW_HASH */ |
| #define PKTGETFAHIDX(skb) (((struct sk_buff*)(skb))->napt_idx) |
| #define PKTSETFADEV(skb, imp) (((struct sk_buff*)(skb))->dev = imp) |
| #define PKTSETRXDEV(skb) (((struct sk_buff*)(skb))->rxdev = ((struct sk_buff*)(skb))->dev) |
| |
| #define AUX_TCP_FIN_RST (1 << 0) |
| #define AUX_FREED (1 << 1) |
| #define PKTSETFAAUX(skb) (((struct sk_buff*)(skb))->napt_flags |= AUX_TCP_FIN_RST) |
| #define PKTCLRFAAUX(skb) (((struct sk_buff*)(skb))->napt_flags &= (~AUX_TCP_FIN_RST)) |
| #define PKTISFAAUX(skb) (((struct sk_buff*)(skb))->napt_flags & AUX_TCP_FIN_RST) |
| #define PKTSETFAFREED(skb) (((struct sk_buff*)(skb))->napt_flags |= AUX_FREED) |
| #define PKTCLRFAFREED(skb) (((struct sk_buff*)(skb))->napt_flags &= (~AUX_FREED)) |
| #define PKTISFAFREED(skb) (((struct sk_buff*)(skb))->napt_flags & AUX_FREED) |
| #define PKTISFABRIDGED(skb) PKTISFAAUX(skb) |
| #else |
| #define PKTISFAAUX(skb) ({BCM_REFERENCE(skb); FALSE;}) |
| #define PKTISFABRIDGED(skb) ({BCM_REFERENCE(skb); FALSE;}) |
| #define PKTISFAFREED(skb) ({BCM_REFERENCE(skb); FALSE;}) |
| |
| #define PKTCLRFAAUX(skb) BCM_REFERENCE(skb) |
| #define PKTSETFAFREED(skb) BCM_REFERENCE(skb) |
| #define PKTCLRFAFREED(skb) BCM_REFERENCE(skb) |
| #endif /* BCMFA */ |
| |
| #if defined(BCM_OBJECT_TRACE) |
| extern void linux_pktfree(osl_t *osh, void *skb, bool send, int line, const char *caller); |
| #else |
| extern void linux_pktfree(osl_t *osh, void *skb, bool send); |
| #endif /* BCM_OBJECT_TRACE */ |
| extern void *osl_pktget_static(osl_t *osh, uint len); |
| extern void osl_pktfree_static(osl_t *osh, void *skb, bool send); |
| extern void osl_pktclone(osl_t *osh, void **pkt); |
| |
| #ifdef BCMDBG_PKT /* pkt logging for debugging */ |
| extern void *linux_pktget(osl_t *osh, uint len, int line, char *file); |
| extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file); |
| extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file); |
| extern void osl_pktlist_add(osl_t *osh, void *p, int line, char *file); |
| extern void osl_pktlist_remove(osl_t *osh, void *p); |
| extern char *osl_pktlist_dump(osl_t *osh, char *buf, uint bufsz); |
| #ifdef BCMDBG_PTRACE |
| extern void osl_pkttrace(osl_t *osh, void *pkt, uint16 bit); |
| #endif /* BCMDBG_PTRACE */ |
| #else /* BCMDBG_PKT */ |
| #ifdef BCMDBG_CTRACE |
| #define PKT_CTRACE_DUMP(osh, b) osl_ctrace_dump((osh), (b)) |
| extern void *linux_pktget(osl_t *osh, uint len, int line, char *file); |
| extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file); |
| extern int osl_pkt_is_frmnative(osl_t *osh, struct sk_buff *pkt); |
| extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file); |
| struct bcmstrbuf; |
| extern void osl_ctrace_dump(osl_t *osh, struct bcmstrbuf *b); |
| #else |
| #ifdef BCM_OBJECT_TRACE |
| extern void *linux_pktget(osl_t *osh, uint len, int line, const char *caller); |
| extern void *osl_pktdup(osl_t *osh, void *skb, int line, const char *caller); |
| #else |
| extern void *linux_pktget(osl_t *osh, uint len); |
| extern void *osl_pktdup(osl_t *osh, void *skb); |
| #endif /* BCM_OBJECT_TRACE */ |
| extern void *osl_pkt_frmnative(osl_t *osh, void *skb); |
| #endif /* BCMDBG_CTRACE */ |
| #endif /* BCMDBG_PKT */ |
| extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt); |
| #ifdef BCMDBG_PKT |
| #define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), \ |
| (struct sk_buff*)(skb), __LINE__, __FILE__) |
| #else /* BCMDBG_PKT */ |
| #ifdef BCMDBG_CTRACE |
| #define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), \ |
| (struct sk_buff*)(skb), __LINE__, __FILE__) |
| #define PKTISFRMNATIVE(osh, skb) osl_pkt_is_frmnative((osl_t *)(osh), (struct sk_buff *)(skb)) |
| #else |
| #define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), (struct sk_buff*)(skb)) |
| #endif /* BCMDBG_CTRACE */ |
| #endif /* BCMDBG_PKT */ |
| #define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osl_t *)(osh), (pkt)) |
| |
| #define PKTLINK(skb) (((struct sk_buff*)(skb))->prev) |
| #define PKTSETLINK(skb, x) (((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x)) |
| #define PKTPRIO(skb) (((struct sk_buff*)(skb))->priority) |
| #define PKTSETPRIO(skb, x) (((struct sk_buff*)(skb))->priority = (x)) |
| #define PKTSUMNEEDED(skb) (((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW) |
| #define PKTSETSUMGOOD(skb, x) (((struct sk_buff*)(skb))->ip_summed = \ |
| ((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE)) |
| /* PKTSETSUMNEEDED and PKTSUMGOOD are not possible because skb->ip_summed is overloaded */ |
| #define PKTSHARED(skb) (((struct sk_buff*)(skb))->cloned) |
| |
| #ifdef CONFIG_NF_CONNTRACK_MARK |
| #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)) |
| #define PKTMARK(p) (((struct sk_buff *)(p))->mark) |
| #define PKTSETMARK(p, m) ((struct sk_buff *)(p))->mark = (m) |
| #else /* !2.6.0 */ |
| #define PKTMARK(p) (((struct sk_buff *)(p))->nfmark) |
| #define PKTSETMARK(p, m) ((struct sk_buff *)(p))->nfmark = (m) |
| #endif /* 2.6.0 */ |
| #else /* CONFIG_NF_CONNTRACK_MARK */ |
| #define PKTMARK(p) 0 |
| #define PKTSETMARK(p, m) |
| #endif /* CONFIG_NF_CONNTRACK_MARK */ |
| |
| #else /* BINOSL */ |
| |
| #define OSL_PREF_RANGE_LD(va, sz) |
| #define OSL_PREF_RANGE_ST(va, sz) |
| |
| /* packet primitives */ |
| #ifdef BCMDBG_PKT |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len), __LINE__, __FILE__) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__) |
| #define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative((osh), (skb), __LINE__, __FILE__) |
| #define PKTLIST_DUMP(osh, buf, bufsz) osl_pktlist_dump(osh, buf, bufsz) |
| #define PKTDBG_TRACE(osh, pkt, bit) BCM_REFERENCE(osh) |
| #else /* BCMDBG_PKT */ |
| #ifdef BCMDBG_CTRACE |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len), __LINE__, __FILE__) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__) |
| #define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative((osh), (skb), __LINE__, __FILE__) |
| #else |
| #ifdef BCM_OBJECT_TRACE |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len), __LINE__, __FUNCTION__) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FUNCTION__) |
| #else |
| #define PKTGET(osh, len, send) linux_pktget((osh), (len)) |
| #define PKTDUP(osh, skb) osl_pktdup((osh), (skb)) |
| #endif /* BCM_OBJECT_TRACE */ |
| #define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative((osh), (skb)) |
| #endif /* BCMDBG_CTRACE */ |
| #define PKTLIST_DUMP(osh, buf, bufsz) ({BCM_REFERENCE(osh); BCM_REFERENCE(buf);}) |
| #define PKTDBG_TRACE(osh, pkt, bit) ({BCM_REFERENCE(osh); BCM_REFERENCE(pkt);}) |
| #endif /* BCMDBG_PKT */ |
| #if defined(BCM_OBJECT_TRACE) |
| #define PKTFREE(osh, skb, send) linux_pktfree((osh), (skb), (send), __LINE__, __FUNCTION__) |
| #else |
| #define PKTFREE(osh, skb, send) linux_pktfree((osh), (skb), (send)) |
| #endif /* BCM_OBJECT_TRACE */ |
| #define PKTDATA(osh, skb) osl_pktdata((osh), (skb)) |
| #define PKTLEN(osh, skb) osl_pktlen((osh), (skb)) |
| #define PKTHEADROOM(osh, skb) osl_pktheadroom((osh), (skb)) |
| #define PKTTAILROOM(osh, skb) osl_pkttailroom((osh), (skb)) |
| #define PKTNEXT(osh, skb) osl_pktnext((osh), (skb)) |
| #define PKTSETNEXT(osh, skb, x) ({BCM_REFERENCE(osh); osl_pktsetnext((skb), (x));}) |
| #define PKTSETLEN(osh, skb, len) osl_pktsetlen((osh), (skb), (len)) |
| #define PKTPUSH(osh, skb, bytes) osl_pktpush((osh), (skb), (bytes)) |
| #define PKTPULL(osh, skb, bytes) osl_pktpull((osh), (skb), (bytes)) |
| #define PKTTAG(skb) osl_pkttag((skb)) |
| #define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osh), (pkt)) |
| #define PKTLINK(skb) osl_pktlink((skb)) |
| #define PKTSETLINK(skb, x) osl_pktsetlink((skb), (x)) |
| #define PKTPRIO(skb) osl_pktprio((skb)) |
| #define PKTSETPRIO(skb, x) osl_pktsetprio((skb), (x)) |
| #define PKTSHARED(skb) osl_pktshared((skb)) |
| #define PKTSETPOOL(osh, skb, x, y) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
| #define PKTPOOL(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
| #define PKTFREELIST(skb) PKTLINK(skb) |
| #define PKTSETFREELIST(skb, x) PKTSETLINK((skb), (x)) |
| #define PKTPTR(skb) (skb) |
| #define PKTID(skb) ({BCM_REFERENCE(skb); 0;}) |
| #define PKTSETID(skb, id) ({BCM_REFERENCE(skb); BCM_REFERENCE(id);}) |
| #define PKTIDAVAIL() (0xFFFFFFFFu) |
| |
| #ifdef BCMDBG_PKT /* pkt logging for debugging */ |
| extern void *linux_pktget(osl_t *osh, uint len, int line, char *file); |
| extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file); |
| extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file); |
| #else /* BCMDBG_PKT */ |
| #ifdef BCM_OBJECT_TRACE |
| extern void *linux_pktget(osl_t *osh, uint len, int line, const char *caller); |
| extern void *osl_pktdup(osl_t *osh, void *skb, int line, const char *caller); |
| #else |
| extern void *linux_pktget(osl_t *osh, uint len); |
| extern void *osl_pktdup(osl_t *osh, void *skb); |
| #endif /* BCM_OBJECT_TRACE */ |
| extern void *osl_pkt_frmnative(osl_t *osh, void *skb); |
| #endif /* BCMDBG_PKT */ |
| #if defined(BCM_OBJECT_TRACE) |
| extern void linux_pktfree(osl_t *osh, void *skb, bool send, int line, const char *caller); |
| #else |
| extern void linux_pktfree(osl_t *osh, void *skb, bool send); |
| #endif /* BCM_OBJECT_TRACE */ |
| extern uchar *osl_pktdata(osl_t *osh, void *skb); |
| extern uint osl_pktlen(osl_t *osh, void *skb); |
| extern uint osl_pktheadroom(osl_t *osh, void *skb); |
| extern uint osl_pkttailroom(osl_t *osh, void *skb); |
| extern void *osl_pktnext(osl_t *osh, void *skb); |
| extern void osl_pktsetnext(void *skb, void *x); |
| extern void osl_pktsetlen(osl_t *osh, void *skb, uint len); |
| extern uchar *osl_pktpush(osl_t *osh, void *skb, int bytes); |
| extern uchar *osl_pktpull(osl_t *osh, void *skb, int bytes); |
| extern void *osl_pkttag(void *skb); |
| extern void *osl_pktlink(void *skb); |
| extern void osl_pktsetlink(void *skb, void *x); |
| extern uint osl_pktprio(void *skb); |
| extern void osl_pktsetprio(void *skb, uint x); |
| extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt); |
| extern bool osl_pktshared(void *skb); |
| |
| #ifdef BCMDBG_PKT /* pkt logging for debugging */ |
| extern char *osl_pktlist_dump(osl_t *osh, char *buf, uint bufsz); |
| extern void osl_pktlist_add(osl_t *osh, void *p, int line, char *file); |
| extern void osl_pktlist_remove(osl_t *osh, void *p); |
| #endif /* BCMDBG_PKT */ |
| |
| #endif /* BINOSL */ |
| |
| #define PKTALLOCED(osh) osl_pktalloced(osh) |
| extern uint osl_pktalloced(osl_t *osh); |
| |
| #define PKTPOOLHEAPCOUNT() (0u) |
| |
| #if !defined(BCMDONGLEHOST) && !defined(DONGLEBUILD) |
| #define PKT_IS_HOST_SFHLLC(osh, lb) (FALSE) |
| #define PKT_SET_HOST_SFHLLC(osh, lb) ({;}) |
| #define PKT_IS_HOST_SFHLLC_DONE(osh, lb) (FALSE) |
| #define PKT_SET_HOST_SFHLLC_DONE(osh, lb) ({;}) |
| #define PKT_RESET_HOST_SFHLLC(osh, lb) ({;}) |
| #define PKTISPKTFETCHED(osh, lb) (FALSE) |
| |
| #define PKTTAG_SCB_HANDLE 20u |
| |
| #define PKTTAG_GET_SCBHNDL(lfrag) ((int8*)PKTTAG(lfrag))[PKTTAG_SCB_HANDLE] |
| #define PKTTAG_SET_SCBHNDL(lfrag, handle) ((int8*)PKTTAG(lfrag))[PKTTAG_SCB_HANDLE] = \ |
| (int8)handle |
| |
| #define PKTHASMETADATA(osh, lb) FALSE |
| |
| #define PKTRXMETADATA(osh, lb) PKTDATA(osh, p) |
| #define PKTSETHWRXOFF(lb, rxoff) ({BCM_REFERENCE(rxoff); (lb = 0u);}) |
| /* Used for rev88 and above */ |
| #define PKT_SET_FRAMEID(lb, id) ({BCM_REFERENCE(lb); BCM_REFERENCE(id);}) |
| /* Used for rev88 and above */ |
| #define PKTFRAGRINGINDEX(osh, lb) (0u) |
| #define PKTFRAGFLOWRINGID(osh, lb) (0u) |
| #define PKTFRAGFLOWRINGID(osh, lb) (0u) |
| |
| #define PKTRXCPLID(osh, lb) ({BCM_REFERENCE(osh); BCM_REFERENCE(lb);0u;}) |
| |
| /* ============MLO========================= */ |
| /* MLO related */ |
| #define PKT_GET_LINKINFO(lb, link) (0u) |
| #define PKT_SET_PREF_LINKID(lb, val) (lb = val) |
| #define PKT_GET_PREF_LINKID(lb) NULL |
| #define PKT_SET_LINKINFO(lb, link, val) ({BCM_REFERENCE(lb); BCM_REFERENCE(val); \ |
| BCM_REFERENCE(link);0u;}) |
| #define PKT_GET_LINK_RATEPROBE(lb, link) ({BCM_REFERENCE(lb); BCM_REFERENCE(link);0u;}) |
| #define PKT_SET_LINK_RATEPROBE(lb, link) ({;}) |
| /* ============MLO========================= */ |
| #endif /* !BCMDONGLEHOST && !DONGLEBUILD */ |
| #endif /* BCMDRIVER */ |
| |
| #endif /* _linux_pkt_h_ */ |