Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/external/cache/sources/wl/include/linux_osl.h
Views: 3959
/*1* Linux OS Independent Layer2*3* $Copyright Open Broadcom Corporation$4*5* $Id: linux_osl.h 383331 2013-02-06 10:27:24Z $6*/78#ifndef _linux_osl_h_9#define _linux_osl_h_1011#include <typedefs.h>121314extern void * osl_os_open_image(char * filename);15extern int osl_os_get_image_block(char * buf, int len, void * image);16extern void osl_os_close_image(void * image);17extern int osl_os_image_size(void *image);181920#ifdef BCMDRIVER212223extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag);24extern void osl_detach(osl_t *osh);252627extern uint32 g_assert_type;282930#if defined(BCMASSERT_LOG)31#define ASSERT(exp) \32do { if (!(exp)) osl_assert(#exp, __FILE__, __LINE__); } while (0)33extern void osl_assert(const char *exp, const char *file, int line);34#else35#ifdef __GNUC__36#define GCC_VERSION \37(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)38#if GCC_VERSION > 3010039#define ASSERT(exp) do {} while (0)40#else4142#define ASSERT(exp)43#endif44#endif45#endif464748#define OSL_DELAY(usec) osl_delay(usec)49extern void osl_delay(uint usec);5051#define OSL_PCMCIA_READ_ATTR(osh, offset, buf, size) \52osl_pcmcia_read_attr((osh), (offset), (buf), (size))53#define OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size) \54osl_pcmcia_write_attr((osh), (offset), (buf), (size))55extern void osl_pcmcia_read_attr(osl_t *osh, uint offset, void *buf, int size);56extern void osl_pcmcia_write_attr(osl_t *osh, uint offset, void *buf, int size);575859#define OSL_PCI_READ_CONFIG(osh, offset, size) \60osl_pci_read_config((osh), (offset), (size))61#define OSL_PCI_WRITE_CONFIG(osh, offset, size, val) \62osl_pci_write_config((osh), (offset), (size), (val))63extern uint32 osl_pci_read_config(osl_t *osh, uint offset, uint size);64extern void osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val);656667#define OSL_PCI_BUS(osh) osl_pci_bus(osh)68#define OSL_PCI_SLOT(osh) osl_pci_slot(osh)69extern uint osl_pci_bus(osl_t *osh);70extern uint osl_pci_slot(osl_t *osh);71extern struct pci_dev *osl_pci_device(osl_t *osh);727374typedef struct {75bool pkttag;76bool mmbus;77pktfree_cb_fn_t tx_fn;78void *tx_ctx;79void *unused[3];80} osl_pubinfo_t;8182#define PKTFREESETCB(osh, _tx_fn, _tx_ctx) \83do { \84((osl_pubinfo_t*)osh)->tx_fn = _tx_fn; \85((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \86} while (0)87888990#define BUS_SWAP32(v) (v)9192#define MALLOC(osh, size) osl_malloc((osh), (size))93#define MFREE(osh, addr, size) osl_mfree((osh), (addr), (size))94#define MALLOCED(osh) osl_malloced((osh))95extern void *osl_malloc(osl_t *osh, uint size);96extern void osl_mfree(osl_t *osh, void *addr, uint size);97extern uint osl_malloced(osl_t *osh);9899#define NATIVE_MALLOC(osh, size) kmalloc(size, GFP_ATOMIC)100#define NATIVE_MFREE(osh, addr, size) kfree(addr)101102#define MALLOC_FAILED(osh) osl_malloc_failed((osh))103extern uint osl_malloc_failed(osl_t *osh);104105106#define DMA_CONSISTENT_ALIGN osl_dma_consistent_align()107#define DMA_ALLOC_CONSISTENT(osh, size, align, tot, pap, dmah) \108osl_dma_alloc_consistent((osh), (size), (align), (tot), (pap))109#define DMA_FREE_CONSISTENT(osh, va, size, pa, dmah) \110osl_dma_free_consistent((osh), (void*)(va), (size), (pa))111112#define DMA_ALLOC_CONSISTENT_FORCE32(osh, size, align, tot, pap, dmah) \113osl_dma_alloc_consistent((osh), (size), (align), (tot), (pap))114#define DMA_FREE_CONSISTENT_FORCE32(osh, va, size, pa, dmah) \115osl_dma_free_consistent((osh), (void*)(va), (size), (pa))116117extern uint osl_dma_consistent_align(void);118extern void *osl_dma_alloc_consistent(osl_t *osh, uint size, uint16 align, uint *tot, ulong *pap);119extern void osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa);120121122#define DMA_TX 1123#define DMA_RX 2124125126#define DMA_UNMAP(osh, pa, size, direction, p, dmah) \127osl_dma_unmap((osh), (pa), (size), (direction))128extern uint osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p,129hnddma_seg_map_t *txp_dmah);130extern void osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction);131132133#define OSL_DMADDRWIDTH(osh, addrwidth) do {} while (0)134135136#include <bcmsdh.h>137#define OSL_WRITE_REG(osh, r, v) (bcmsdh_reg_write(NULL, (uintptr)(r), sizeof(*(r)), (v)))138#define OSL_READ_REG(osh, r) (bcmsdh_reg_read(NULL, (uintptr)(r), sizeof(*(r))))139140#define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \141mmap_op else bus_op142#define SELECT_BUS_READ(osh, mmap_op, bus_op) (((osl_pubinfo_t*)(osh))->mmbus) ? \143mmap_op : bus_op144145#define OSL_ERROR(bcmerror) osl_error(bcmerror)146extern int osl_error(int bcmerror);147148149#define PKTBUFSZ 2048150151152#include <linuxver.h>153#include <linux/kernel.h>154#include <linux/string.h>155156#define OSL_SYSUPTIME() ((uint32)jiffies * (1000 / HZ))157#define printf(fmt, args...) printk(fmt , ## args)158#include <linux/kernel.h>159#include <linux/string.h>160161#define bcopy(src, dst, len) memcpy((dst), (src), (len))162#define bcmp(b1, b2, len) memcmp((b1), (b2), (len))163#define bzero(b, len) memset((b), '\0', (len))164165166167#define R_REG(osh, r) (\168SELECT_BUS_READ(osh, \169({ \170__typeof(*(r)) __osl_v; \171BCM_REFERENCE(osh); \172switch (sizeof(*(r))) { \173case sizeof(uint8): __osl_v = \174readb((volatile uint8*)(r)); break; \175case sizeof(uint16): __osl_v = \176readw((volatile uint16*)(r)); break; \177case sizeof(uint32): __osl_v = \178readl((volatile uint32*)(r)); break; \179} \180__osl_v; \181}), \182OSL_READ_REG(osh, r)) \183)184185#define W_REG(osh, r, v) do { \186BCM_REFERENCE(osh); \187SELECT_BUS_WRITE(osh, \188switch (sizeof(*(r))) { \189case sizeof(uint8): writeb((uint8)(v), (volatile uint8*)(r)); break; \190case sizeof(uint16): writew((uint16)(v), (volatile uint16*)(r)); break; \191case sizeof(uint32): writel((uint32)(v), (volatile uint32*)(r)); break; \192}, \193(OSL_WRITE_REG(osh, r, v))); \194} while (0)195196#define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v))197#define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v))198199200#define bcopy(src, dst, len) memcpy((dst), (src), (len))201#define bcmp(b1, b2, len) memcmp((b1), (b2), (len))202#define bzero(b, len) memset((b), '\0', (len))203204205#define OSL_UNCACHED(va) ((void *)va)206#define OSL_CACHED(va) ((void *)va)207208209#define OSL_CACHE_FLUSH(va, len)210211#define OSL_PREF_RANGE_LD(va, sz)212#define OSL_PREF_RANGE_ST(va, sz)213214215#if defined(__i386__)216#define OSL_GETCYCLES(x) rdtscl((x))217#else218#define OSL_GETCYCLES(x) ((x) = 0)219#endif220221222#define BUSPROBE(val, addr) ({ (val) = R_REG(NULL, (addr)); 0; })223224225#if !defined(CONFIG_MMC_MSM7X00A)226#define REG_MAP(pa, size) ioremap_nocache((unsigned long)(pa), (unsigned long)(size))227#else228#define REG_MAP(pa, size) (void *)(0)229#endif230#define REG_UNMAP(va) iounmap((va))231232233#define R_SM(r) *(r)234#define W_SM(r, v) (*(r) = (v))235#define BZERO_SM(r, len) memset((r), '\0', (len))236237238#include <linuxver.h>239240241#ifdef BCMDBG_CTRACE242#define PKTGET(osh, len, send) osl_pktget((osh), (len), __LINE__, __FILE__)243#define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__)244#else245#define PKTGET(osh, len, send) osl_pktget((osh), (len))246#define PKTDUP(osh, skb) osl_pktdup((osh), (skb))247#endif248#define PKTLIST_DUMP(osh, buf)249#define PKTDBG_TRACE(osh, pkt, bit)250#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send))251#ifdef DHD_USE_STATIC_BUF252#define PKTGET_STATIC(osh, len, send) osl_pktget_static((osh), (len))253#define PKTFREE_STATIC(osh, skb, send) osl_pktfree_static((osh), (skb), (send))254#endif255#define PKTDATA(osh, skb) (((struct sk_buff*)(skb))->data)256#define PKTLEN(osh, skb) (((struct sk_buff*)(skb))->len)257#define PKTHEADROOM(osh, skb) (PKTDATA(osh, skb)-(((struct sk_buff*)(skb))->head))258#define PKTTAILROOM(osh, skb) skb_tailroom((struct sk_buff*)(skb))259#define PKTNEXT(osh, skb) (((struct sk_buff*)(skb))->next)260#define PKTSETNEXT(osh, skb, x) (((struct sk_buff*)(skb))->next = (struct sk_buff*)(x))261#define PKTSETLEN(osh, skb, len) __skb_trim((struct sk_buff*)(skb), (len))262#define PKTPUSH(osh, skb, bytes) skb_push((struct sk_buff*)(skb), (bytes))263#define PKTPULL(osh, skb, bytes) skb_pull((struct sk_buff*)(skb), (bytes))264#define PKTTAG(skb) ((void*)(((struct sk_buff*)(skb))->cb))265#define PKTSETPOOL(osh, skb, x, y) do {} while (0)266#define PKTPOOL(osh, skb) FALSE267#define PKTSHRINK(osh, m) (m)268269#ifdef BCMDBG_CTRACE270#define DEL_CTRACE(zosh, zskb) { \271unsigned long zflags; \272spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \273list_del(&(zskb)->ctrace_list); \274(zosh)->ctrace_num--; \275(zskb)->ctrace_start = 0; \276(zskb)->ctrace_count = 0; \277spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \278}279280#define UPDATE_CTRACE(zskb, zfile, zline) { \281struct sk_buff *_zskb = (struct sk_buff *)(zskb); \282if (_zskb->ctrace_count < CTRACE_NUM) { \283_zskb->func[_zskb->ctrace_count] = zfile; \284_zskb->line[_zskb->ctrace_count] = zline; \285_zskb->ctrace_count++; \286} \287else { \288_zskb->func[_zskb->ctrace_start] = zfile; \289_zskb->line[_zskb->ctrace_start] = zline; \290_zskb->ctrace_start++; \291if (_zskb->ctrace_start >= CTRACE_NUM) \292_zskb->ctrace_start = 0; \293} \294}295296#define ADD_CTRACE(zosh, zskb, zfile, zline) { \297unsigned long zflags; \298spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \299list_add(&(zskb)->ctrace_list, &(zosh)->ctrace_list); \300(zosh)->ctrace_num++; \301UPDATE_CTRACE(zskb, zfile, zline); \302spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \303}304305#define PKTCALLER(zskb) UPDATE_CTRACE((struct sk_buff *)zskb, (char *)__FUNCTION__, __LINE__)306#endif307308#ifdef CTFPOOL309#define CTFPOOL_REFILL_THRESH 3310typedef struct ctfpool {311void *head;312spinlock_t lock;313uint max_obj;314uint curr_obj;315uint obj_size;316uint refills;317uint fast_allocs;318uint fast_frees;319uint slow_allocs;320} ctfpool_t;321#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)322323#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)324#define FASTBUF (1 << 0)325#define CTFBUF (1 << 1)326#define PKTSETFAST(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) |= FASTBUF)327#define PKTCLRFAST(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) &= (~FASTBUF))328#define PKTSETCTF(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) |= CTFBUF)329#define PKTCLRCTF(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) &= (~CTFBUF))330#define PKTISFAST(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) & FASTBUF)331#define PKTISCTF(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) & CTFBUF)332#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->pktc_flags)333#else334#define FASTBUF (1 << 16)335#define CTFBUF (1 << 17)336#define PKTSETFAST(osh, skb) ((((struct sk_buff*)(skb))->mac_len) |= FASTBUF)337#define PKTCLRFAST(osh, skb) ((((struct sk_buff*)(skb))->mac_len) &= (~FASTBUF))338#define PKTSETCTF(osh, skb) ((((struct sk_buff*)(skb))->mac_len) |= CTFBUF)339#define PKTCLRCTF(osh, skb) ((((struct sk_buff*)(skb))->mac_len) &= (~CTFBUF))340#define PKTISFAST(osh, skb) ((((struct sk_buff*)(skb))->mac_len) & FASTBUF)341#define PKTISCTF(osh, skb) ((((struct sk_buff*)(skb))->mac_len) & CTFBUF)342#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->mac_len)343#endif344#else345#define FASTBUF (1 << 0)346#define CTFBUF (1 << 1)347#define PKTSETFAST(osh, skb) ((((struct sk_buff*)(skb))->__unused) |= FASTBUF)348#define PKTCLRFAST(osh, skb) ((((struct sk_buff*)(skb))->__unused) &= (~FASTBUF))349#define PKTSETCTF(osh, skb) ((((struct sk_buff*)(skb))->__unused) |= CTFBUF)350#define PKTCLRCTF(osh, skb) ((((struct sk_buff*)(skb))->__unused) &= (~CTFBUF))351#define PKTISFAST(osh, skb) ((((struct sk_buff*)(skb))->__unused) & FASTBUF)352#define PKTISCTF(osh, skb) ((((struct sk_buff*)(skb))->__unused) & CTFBUF)353#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->__unused)354#endif355356#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)357#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->ctfpool)358#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->ctfpool)->head)359#else360#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->sk)361#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->sk)->head)362#endif363364extern void *osl_ctfpool_add(osl_t *osh);365extern void osl_ctfpool_replenish(osl_t *osh, uint thresh);366extern int32 osl_ctfpool_init(osl_t *osh, uint numobj, uint size);367extern void osl_ctfpool_cleanup(osl_t *osh);368extern void osl_ctfpool_stats(osl_t *osh, void *b);369#endif370371372#ifdef HNDCTF373#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)374375#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)376#define SKIPCT (1 << 2)377#define CHAINED (1 << 3)378#define PKTSETSKIPCT(osh, skb) (((struct sk_buff*)(skb))->pktc_flags |= SKIPCT)379#define PKTCLRSKIPCT(osh, skb) (((struct sk_buff*)(skb))->pktc_flags &= (~SKIPCT))380#define PKTSKIPCT(osh, skb) (((struct sk_buff*)(skb))->pktc_flags & SKIPCT)381#define PKTSETCHAINED(osh, skb) (((struct sk_buff*)(skb))->pktc_flags |= CHAINED)382#define PKTCLRCHAINED(osh, skb) (((struct sk_buff*)(skb))->pktc_flags &= (~CHAINED))383#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->pktc_flags & CHAINED)384#else385#define SKIPCT (1 << 18)386#define CHAINED (1 << 19)387#define PKTSETSKIPCT(osh, skb) (((struct sk_buff*)(skb))->mac_len |= SKIPCT)388#define PKTCLRSKIPCT(osh, skb) (((struct sk_buff*)(skb))->mac_len &= (~SKIPCT))389#define PKTSKIPCT(osh, skb) (((struct sk_buff*)(skb))->mac_len & SKIPCT)390#define PKTSETCHAINED(osh, skb) (((struct sk_buff*)(skb))->mac_len |= CHAINED)391#define PKTCLRCHAINED(osh, skb) (((struct sk_buff*)(skb))->mac_len &= (~CHAINED))392#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->mac_len & CHAINED)393#endif394#else395#define SKIPCT (1 << 2)396#define CHAINED (1 << 3)397#define PKTSETSKIPCT(osh, skb) (((struct sk_buff*)(skb))->__unused |= SKIPCT)398#define PKTCLRSKIPCT(osh, skb) (((struct sk_buff*)(skb))->__unused &= (~SKIPCT))399#define PKTSKIPCT(osh, skb) (((struct sk_buff*)(skb))->__unused & SKIPCT)400#define PKTSETCHAINED(osh, skb) (((struct sk_buff*)(skb))->__unused |= CHAINED)401#define PKTCLRCHAINED(osh, skb) (((struct sk_buff*)(skb))->__unused &= (~CHAINED))402#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->__unused & CHAINED)403#endif404typedef struct ctf_mark {405uint32 value;406} ctf_mark_t;407#define CTF_MARK(m) (m.value)408#else409#define PKTSETSKIPCT(osh, skb)410#define PKTCLRSKIPCT(osh, skb)411#define PKTSKIPCT(osh, skb)412#define CTF_MARK(m) 0413#endif414415extern void osl_pktfree(osl_t *osh, void *skb, bool send);416extern void *osl_pktget_static(osl_t *osh, uint len);417extern void osl_pktfree_static(osl_t *osh, void *skb, bool send);418419#ifdef BCMDBG_CTRACE420#define PKT_CTRACE_DUMP(osh, b) osl_ctrace_dump((osh), (b))421extern void *osl_pktget(osl_t *osh, uint len, int line, char *file);422extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file);423extern int osl_pkt_is_frmnative(osl_t *osh, struct sk_buff *pkt);424extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file);425struct bcmstrbuf;426extern void osl_ctrace_dump(osl_t *osh, struct bcmstrbuf *b);427#else428extern void *osl_pkt_frmnative(osl_t *osh, void *skb);429extern void *osl_pktget(osl_t *osh, uint len);430extern void *osl_pktdup(osl_t *osh, void *skb);431#endif432extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt);433#ifdef BCMDBG_CTRACE434#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), \435(struct sk_buff*)(skb), __LINE__, __FILE__)436#define PKTISFRMNATIVE(osh, skb) osl_pkt_is_frmnative((osl_t *)(osh), (struct sk_buff *)(skb))437#else438#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), (struct sk_buff*)(skb))439#endif440#define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osl_t *)(osh), (pkt))441442#define PKTLINK(skb) (((struct sk_buff*)(skb))->prev)443#define PKTSETLINK(skb, x) (((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x))444#define PKTPRIO(skb) (((struct sk_buff*)(skb))->priority)445#define PKTSETPRIO(skb, x) (((struct sk_buff*)(skb))->priority = (x))446#define PKTSUMNEEDED(skb) (((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW)447#define PKTSETSUMGOOD(skb, x) (((struct sk_buff*)(skb))->ip_summed = \448((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE))449450#define PKTSHARED(skb) (((struct sk_buff*)(skb))->cloned)451452#ifdef CONFIG_NF_CONNTRACK_MARK453#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))454#define PKTMARK(p) (((struct sk_buff *)(p))->mark)455#define PKTSETMARK(p, m) ((struct sk_buff *)(p))->mark = (m)456#else457#define PKTMARK(p) (((struct sk_buff *)(p))->nfmark)458#define PKTSETMARK(p, m) ((struct sk_buff *)(p))->nfmark = (m)459#endif460#else461#define PKTMARK(p) 0462#define PKTSETMARK(p, m)463#endif464465#define PKTALLOCED(osh) osl_pktalloced(osh)466extern uint osl_pktalloced(osl_t *osh);467468#define DMA_MAP(osh, va, size, direction, p, dmah) \469osl_dma_map((osh), (va), (size), (direction), (p), (dmah))470471#ifdef PKTC472473struct chain_node {474struct sk_buff *link;475unsigned int flags:3, pkts:9, bytes:20;476};477478#define CHAIN_NODE(skb) ((struct chain_node*)(((struct sk_buff*)skb)->pktc_cb))479480#define PKTCSETATTR(s, f, p, b) ({CHAIN_NODE(s)->flags = (f); CHAIN_NODE(s)->pkts = (p); \481CHAIN_NODE(s)->bytes = (b);})482#define PKTCCLRATTR(s) ({CHAIN_NODE(s)->flags = CHAIN_NODE(s)->pkts = \483CHAIN_NODE(s)->bytes = 0;})484#define PKTCGETATTR(s) (CHAIN_NODE(s)->flags << 29 | CHAIN_NODE(s)->pkts << 20 | \485CHAIN_NODE(s)->bytes)486#define PKTCCNT(skb) (CHAIN_NODE(skb)->pkts)487#define PKTCLEN(skb) (CHAIN_NODE(skb)->bytes)488#define PKTCGETFLAGS(skb) (CHAIN_NODE(skb)->flags)489#define PKTCSETFLAGS(skb, f) (CHAIN_NODE(skb)->flags = (f))490#define PKTCCLRFLAGS(skb) (CHAIN_NODE(skb)->flags = 0)491#define PKTCFLAGS(skb) (CHAIN_NODE(skb)->flags)492#define PKTCSETCNT(skb, c) (CHAIN_NODE(skb)->pkts = (c))493#define PKTCINCRCNT(skb) (CHAIN_NODE(skb)->pkts++)494#define PKTCADDCNT(skb, c) (CHAIN_NODE(skb)->pkts += (c))495#define PKTCSETLEN(skb, l) (CHAIN_NODE(skb)->bytes = (l))496#define PKTCADDLEN(skb, l) (CHAIN_NODE(skb)->bytes += (l))497#define PKTCSETFLAG(skb, fb) (CHAIN_NODE(skb)->flags |= (fb))498#define PKTCCLRFLAG(skb, fb) (CHAIN_NODE(skb)->flags &= ~(fb))499#define PKTCLINK(skb) (CHAIN_NODE(skb)->link)500#define PKTSETCLINK(skb, x) (CHAIN_NODE(skb)->link = (struct sk_buff*)(x))501#define FOREACH_CHAINED_PKT(skb, nskb) \502for (; (skb) != NULL; (skb) = (nskb)) \503if ((nskb) = (PKTISCHAINED(skb) ? PKTCLINK(skb) : NULL), \504PKTSETCLINK((skb), NULL), 1)505#define PKTCFREE(osh, skb, send) \506do { \507void *nskb; \508ASSERT((skb) != NULL); \509FOREACH_CHAINED_PKT((skb), nskb) { \510PKTCLRCHAINED((osh), (skb)); \511PKTCCLRFLAGS((skb)); \512PKTFREE((osh), (skb), (send)); \513} \514} while (0)515#define PKTCENQTAIL(h, t, p) \516do { \517if ((t) == NULL) { \518(h) = (t) = (p); \519} else { \520PKTSETCLINK((t), (p)); \521(t) = (p); \522} \523} while (0)524#endif525526#else527528529530#define ASSERT(exp) do {} while (0)531532533#define MALLOC(o, l) malloc(l)534#define MFREE(o, p, l) free(p)535#include <stdlib.h>536537538#include <string.h>539540541#include <stdio.h>542543544extern void bcopy(const void *src, void *dst, size_t len);545extern int bcmp(const void *b1, const void *b2, size_t len);546extern void bzero(void *b, size_t len);547#endif548549#endif550551552