From 1c055e55a242a33e574e48be530e06770a210dcd Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 19 Feb 2024 03:26:26 +0000 Subject: [PATCH] add r8169 read mac form eeprom --- kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linux_osl.h | 827 +++++++++++----------------------------------------------- 1 files changed, 159 insertions(+), 668 deletions(-) diff --git a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linux_osl.h b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linux_osl.h index daab557..6c87ae5 100644 --- a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linux_osl.h +++ b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linux_osl.h @@ -1,15 +1,16 @@ -/* SPDX-License-Identifier: GPL-2.0 */ /* * Linux OS Independent Layer * - * Copyright (C) 1999-2019, Broadcom Corporation - * + * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation + * + * Copyright (C) 1999-2017, Broadcom Corporation + * * 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 @@ -17,7 +18,7 @@ * 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. - * + * * Notwithstanding the above, under no circumstances may you combine this * software in any way with any other Broadcom software provided under a license * other than the GPL, without Broadcom's express prior written consent. @@ -25,7 +26,7 @@ * * <<Broadcom-WL-IPTag/Open:>> * - * $Id: linux_osl.h 606142 2015-12-14 14:34:29Z $ + * $Id: linux_osl.h 692391 2017-03-28 00:29:04Z $ */ #ifndef _linux_osl_h_ @@ -33,7 +34,6 @@ #include <typedefs.h> #define DECLSPEC_ALIGN(x) __attribute__ ((aligned(x))) - /* Linux Kernel: File Operations: start */ extern void * osl_os_open_image(char * filename); extern int osl_os_get_image_block(char * buf, int len, void * image); @@ -44,17 +44,19 @@ #ifdef BCMDRIVER /* OSL initialization */ -#ifdef SHARED_OSL_CMN -extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag, void **osh_cmn); -#else extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag); -#endif /* SHARED_OSL_CMN */ extern void osl_detach(osl_t *osh); extern int osl_static_mem_init(osl_t *osh, void *adapter); extern int osl_static_mem_deinit(osl_t *osh, void *adapter); extern void osl_set_bus_handle(osl_t *osh, void *bus_handle); extern void* osl_get_bus_handle(osl_t *osh); +#ifdef DHD_MAP_LOGGING +extern void osl_dma_map_dump(osl_t *osh); +#define OSL_DMA_MAP_DUMP(osh) osl_dma_map_dump(osh) +#else +#define OSL_DMA_MAP_DUMP(osh) do {} while (0) +#endif /* DHD_MAP_LOGGING */ /* Global ASSERT type */ extern uint32 g_assert_type; @@ -71,6 +73,7 @@ #define PRI_FMT_d "d" #endif /* CONFIG_PHYS_ADDR_T_64BIT */ /* ASSERT */ +#ifndef ASSERT #if defined(BCMASSERT_LOG) #define ASSERT(exp) \ do { if (!(exp)) osl_assert(#exp, __FILE__, __LINE__); } while (0) @@ -86,7 +89,8 @@ #define ASSERT(exp) #endif /* GCC_VERSION > 30100 */ #endif /* __GNUC__ */ -#endif +#endif // endif +#endif /* ASSERT */ /* bcm_prefetch_32B */ static inline void bcm_prefetch_32B(const uint8 *addr, const int cachelines_32B) @@ -98,7 +102,7 @@ case 2: __asm__ __volatile__("pld\t%a0" :: "p"(addr + 32) : "cc"); case 1: __asm__ __volatile__("pld\t%a0" :: "p"(addr + 0) : "cc"); } -#endif +#endif // endif } /* microsecond delay */ @@ -144,6 +148,8 @@ pktfree_cb_fn_t tx_fn; /**< Callback function for PKTFREE */ void *tx_ctx; /**< Context to the callback function */ void *unused[3]; + void (*rx_fn)(void *rx_ctx, void *p); + void *rx_ctx; } osl_pubinfo_t; extern void osl_flag_set(osl_t *osh, uint32 mask); @@ -156,20 +162,30 @@ ((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \ } while (0) +#define PKTFREESETRXCB(osh, _rx_fn, _rx_ctx) \ + do { \ + ((osl_pubinfo_t*)osh)->rx_fn = _rx_fn; \ + ((osl_pubinfo_t*)osh)->rx_ctx = _rx_ctx; \ + } while (0) /* host/bus architecture-specific byte swap */ #define BUS_SWAP32(v) (v) #define MALLOC(osh, size) osl_malloc((osh), (size)) #define MALLOCZ(osh, size) osl_mallocz((osh), (size)) #define MFREE(osh, addr, size) osl_mfree((osh), (addr), (size)) + #define VMALLOC(osh, size) osl_vmalloc((osh), (size)) + #define VMALLOCZ(osh, size) osl_vmallocz((osh), (size)) + #define VMFREE(osh, addr, size) osl_vmfree((osh), (addr), (size)) #define MALLOCED(osh) osl_malloced((osh)) #define MEMORY_LEFTOVER(osh) osl_check_memleak(osh) extern void *osl_malloc(osl_t *osh, uint size); extern void *osl_mallocz(osl_t *osh, uint size); extern void osl_mfree(osl_t *osh, void *addr, uint size); + extern void *osl_vmalloc(osl_t *osh, uint size); + extern void *osl_vmallocz(osl_t *osh, uint size); + extern void osl_vmfree(osl_t *osh, void *addr, uint size); extern uint osl_malloced(osl_t *osh); extern uint osl_check_memleak(osl_t *osh); - #define MALLOC_FAILED(osh) osl_malloc_failed((osh)) extern uint osl_malloc_failed(osl_t *osh); @@ -199,9 +215,20 @@ /* map/unmap shared (dma-able) memory */ #define DMA_UNMAP(osh, pa, size, direction, p, dmah) \ osl_dma_unmap((osh), (pa), (size), (direction)) +extern void osl_dma_flush(osl_t *osh, void *va, uint size, int direction, void *p, + hnddma_seg_map_t *txp_dmah); extern dmaaddr_t osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p, hnddma_seg_map_t *txp_dmah); -extern void osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction); +extern void osl_dma_unmap(osl_t *osh, dmaaddr_t pa, uint size, int direction); + +#ifndef PHYS_TO_VIRT +#define PHYS_TO_VIRT(pa) osl_phys_to_virt(pa) +#endif // endif +#ifndef VIRT_TO_PHYS +#define VIRT_TO_PHYS(va) osl_virt_to_phys(va) +#endif // endif +extern void * osl_phys_to_virt(void * pa); +extern void * osl_virt_to_phys(void * va); /* API for DMA addressing capability */ #define OSL_DMADDRWIDTH(osh, addrwidth) ({BCM_REFERENCE(osh); BCM_REFERENCE(addrwidth);}) @@ -212,15 +239,20 @@ extern void osl_cpu_relax(void); #define OSL_CPU_RELAX() osl_cpu_relax() +extern void osl_preempt_disable(osl_t *osh); +extern void osl_preempt_enable(osl_t *osh); +#define OSL_DISABLE_PREEMPTION(osh) osl_preempt_disable(osh) +#define OSL_ENABLE_PREEMPTION(osh) osl_preempt_enable(osh) + #if (!defined(DHD_USE_COHERENT_MEM_FOR_RING) && defined(__ARM_ARCH_7A__)) || \ - (defined(STBLINUX) && defined(__ARM_ARCH_7A__)) + defined(STB_SOC_WIFI) extern void osl_cache_flush(void *va, uint size); extern void osl_cache_inv(void *va, uint size); extern void osl_prefetch(const void *ptr); #define OSL_CACHE_FLUSH(va, len) osl_cache_flush((void *)(va), len) #define OSL_CACHE_INV(va, len) osl_cache_inv((void *)(va), len) #define OSL_PREFETCH(ptr) osl_prefetch(ptr) -#if defined(__ARM_ARCH_7A__) +#if defined(__ARM_ARCH_7A__) || defined(STB_SOC_WIFI) extern int osl_arch_is_coherent(void); #define OSL_ARCH_IS_COHERENT() osl_arch_is_coherent() extern int osl_acp_war_enab(void); @@ -236,7 +268,16 @@ #define OSL_ARCH_IS_COHERENT() NULL #define OSL_ACP_WAR_ENAB() NULL -#endif +#endif // endif + +#ifdef BCM_BACKPLANE_TIMEOUT +extern void osl_set_bpt_cb(osl_t *osh, void *bpt_cb, void *bpt_ctx); +extern void osl_bpt_rreg(osl_t *osh, ulong addr, volatile void *v, uint size); +#endif /* BCM_BACKPLANE_TIMEOUT */ + +#if (defined(STB) && defined(__arm__)) +extern void osl_pcie_rreg(osl_t *osh, ulong addr, volatile void *v, uint size); +#endif // endif /* register access macros */ #if defined(BCMSDIO) @@ -245,21 +286,26 @@ (uintptr)(r), sizeof(*(r)), (v))) #define OSL_READ_REG(osh, r) (bcmsdh_reg_read(osl_get_bus_handle(osh), \ (uintptr)(r), sizeof(*(r)))) -#elif (defined(STB) && defined(__arm__)) -extern void osl_pcie_rreg(osl_t *osh, ulong addr, void *v, uint size); - +#elif defined(BCM_BACKPLANE_TIMEOUT) #define OSL_READ_REG(osh, r) \ ({\ __typeof(*(r)) __osl_v; \ - osl_pcie_rreg(osh, (uintptr)(r), (void *)&__osl_v, sizeof(*(r))); \ + osl_bpt_rreg(osh, (uintptr)(r), &__osl_v, sizeof(*(r))); \ __osl_v; \ }) -#endif +#elif (defined(STB) && defined(__arm__)) +#define OSL_READ_REG(osh, r) \ + ({\ + __typeof(*(r)) __osl_v; \ + osl_pcie_rreg(osh, (uintptr)(r), &__osl_v, sizeof(*(r))); \ + __osl_v; \ + }) +#endif // endif -#if (defined(STB) && defined(__arm__)) +#if defined(BCM_BACKPLANE_TIMEOUT) || (defined(STB) && defined(__arm__)) #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;}) #define SELECT_BUS_READ(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); bus_op;}) -#else /* !BCM47XX_CA9 */ +#else /* !BCM47XX_CA9 && !BCM_BACKPLANE_TIMEOUT && !(STB && __arm__) */ #if defined(BCMSDIO) #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \ mmap_op else bus_op @@ -268,8 +314,8 @@ #else #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;}) #define SELECT_BUS_READ(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;}) -#endif -#endif +#endif // endif +#endif // endif #define OSL_ERROR(bcmerror) osl_error(bcmerror) extern int osl_error(int bcmerror); @@ -286,27 +332,35 @@ #include <linuxver.h> /* use current 2.4.x calling conventions */ #include <linux/kernel.h> /* for vsn/printf's */ #include <linux/string.h> /* for mem*, str* */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 29) +extern uint64 osl_sysuptime_us(void); #define OSL_SYSUPTIME() ((uint32)jiffies_to_msecs(jiffies)) -#else -#define OSL_SYSUPTIME() ((uint32)jiffies * (1000 / HZ)) -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 29) */ +#define OSL_SYSUPTIME_US() osl_sysuptime_us() +extern uint64 osl_localtime_ns(void); +extern void osl_get_localtime(uint64 *sec, uint64 *usec); +extern uint64 osl_systztime_us(void); +#define OSL_LOCALTIME_NS() osl_localtime_ns() +#define OSL_GET_LOCALTIME(sec, usec) osl_get_localtime((sec), (usec)) +#define OSL_SYSTZTIME_US() osl_systztime_us() #define printf(fmt, args...) printk(fmt , ## args) #include <linux/kernel.h> /* for vsn/printf's */ #include <linux/string.h> /* for mem*, str* */ /* bcopy's: Linux kernel doesn't provide these (anymore) */ +#define bcopy_hw(src, dst, len) memcpy((dst), (src), (len)) +#define bcopy_hw_async(src, dst, len) memcpy((dst), (src), (len)) +#define bcopy_hw_poll_for_completion() #define bcopy(src, dst, len) memcpy((dst), (src), (len)) #define bcmp(b1, b2, len) memcmp((b1), (b2), (len)) #define bzero(b, len) memset((b), '\0', (len)) /* register access macros */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && \ - defined(CONFIG_X86) +#ifdef CONFIG_64BIT +/* readq is defined only for 64 bit platform */ #define R_REG(osh, r) (\ SELECT_BUS_READ(osh, \ ({ \ - __typeof(*(r)) __osl_v; \ + __typeof(*(r)) __osl_v = 0; \ + BCM_REFERENCE(osh); \ switch (sizeof(*(r))) { \ case sizeof(uint8): __osl_v = \ readb((volatile uint8*)(r)); break; \ @@ -315,17 +369,17 @@ case sizeof(uint32): __osl_v = \ readl((volatile uint32*)(r)); break; \ case sizeof(uint64): __osl_v = \ - readq((volatile uint64*)(r)); break; \ + readq((volatile uint64*)(r)); break; \ } \ __osl_v; \ }), \ OSL_READ_REG(osh, r)) \ ) -#else +#else /* !CONFIG_64BIT */ #define R_REG(osh, r) (\ SELECT_BUS_READ(osh, \ ({ \ - __typeof(*(r)) __osl_v; \ + __typeof(*(r)) __osl_v = 0; \ switch (sizeof(*(r))) { \ case sizeof(uint8): __osl_v = \ readb((volatile uint8*)(r)); break; \ @@ -338,9 +392,10 @@ }), \ OSL_READ_REG(osh, r)) \ ) -#endif /* KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && defined(CONFIG_X86) */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && \ - defined(CONFIG_X86) +#endif /* CONFIG_64BIT */ + +#ifdef CONFIG_64BIT +/* writeq is defined only for 64 bit platform */ #define W_REG(osh, r, v) do { \ SELECT_BUS_WRITE(osh, \ switch (sizeof(*(r))) { \ @@ -351,7 +406,8 @@ }, \ (OSL_WRITE_REG(osh, r, v))); \ } while (0) -#else + +#else /* !CONFIG_64BIT */ #define W_REG(osh, r, v) do { \ SELECT_BUS_WRITE(osh, \ switch (sizeof(*(r))) { \ @@ -361,7 +417,7 @@ }, \ (OSL_WRITE_REG(osh, r, v))); \ } while (0) -#endif /* KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && defined(CONFIG_X86) */ +#endif /* CONFIG_64BIT */ #define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v)) #define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v)) @@ -383,14 +439,18 @@ #define OSL_GETCYCLES(x) rdtscl((x)) #else #define OSL_GETCYCLES(x) ((x) = 0) -#endif +#endif // endif /* dereference an address that may cause a bus exception */ #define BUSPROBE(val, addr) ({ (val) = R_REG(NULL, (addr)); 0; }) /* map/unmap physical to virtual I/O */ #if !defined(CONFIG_MMC_MSM7X00A) -#define REG_MAP(pa, size) ioremap((unsigned long)(pa), (unsigned long)(size)) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)) +#define REG_MAP(pa, size) ioremap_nocache((unsigned long)(pa), (unsigned long)(size)) +#else +#define REG_MAP(pa, size) ioremap((unsigned long)(pa), (unsigned long)(size)) +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0) */ #else #define REG_MAP(pa, size) (void *)(0) #endif /* !defined(CONFIG_MMC_MSM7X00A */ @@ -406,629 +466,17 @@ */ #include <linuxver.h> /* use current 2.4.x calling conventions */ -/* packet primitives */ -#ifdef BCMDBG_CTRACE -#define PKTGET(osh, len, send) osl_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) osl_pktget((osh), (len), __LINE__, __FUNCTION__) -#define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FUNCTION__) -#else -#define PKTGET(osh, len, send) osl_pktget((osh), (len)) -#define PKTDUP(osh, skb) osl_pktdup((osh), (skb)) -#endif /* BCM_OBJECT_TRACE */ -#endif /* BCMDBG_CTRACE */ -#define PKTLIST_DUMP(osh, buf) BCM_REFERENCE(osh) -#define PKTDBG_TRACE(osh, pkt, bit) BCM_REFERENCE(osh) -#if defined(BCM_OBJECT_TRACE) -#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send), __LINE__, __FUNCTION__) -#else -#define PKTFREE(osh, skb, send) osl_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 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 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 BCMDBG_CTRACE -#define DEL_CTRACE(zosh, zskb) { \ - unsigned long zflags; \ - spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \ - list_del(&(zskb)->ctrace_list); \ - (zosh)->ctrace_num--; \ - (zskb)->ctrace_start = 0; \ - (zskb)->ctrace_count = 0; \ - spin_unlock_irqrestore(&(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; \ - spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \ - list_add(&(zskb)->ctrace_list, &(zosh)->ctrace_list); \ - (zosh)->ctrace_num++; \ - UPDATE_CTRACE(zskb, zfile, zline); \ - spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \ -} - -#define PKTCALLER(zskb) UPDATE_CTRACE((struct sk_buff *)zskb, (char *)__FUNCTION__, __LINE__) -#endif /* BCMDBG_CTRACE */ - -#ifdef CTFPOOL -#define CTFPOOL_REFILL_THRESH 3 -typedef struct ctfpool { - void *head; - spinlock_t lock; - osl_t *osh; - uint max_obj; - uint curr_obj; - uint obj_size; - uint refills; - uint fast_allocs; - uint fast_frees; - uint slow_allocs; -} ctfpool_t; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) -#define FASTBUF (1 << 0) -#define PKTSETFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->pktc_flags) |= FASTBUF); \ - }) -#define PKTCLRFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->pktc_flags) &= (~FASTBUF)); \ - }) -#define PKTISFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->pktc_flags) & FASTBUF); \ - }) -#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->pktc_flags) -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) -#define FASTBUF (1 << 16) -#define PKTSETFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->mac_len) |= FASTBUF); \ - }) -#define PKTCLRFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->mac_len) &= (~FASTBUF)); \ - }) -#define PKTISFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->mac_len) & FASTBUF); \ - }) -#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->mac_len) -#else -#define FASTBUF (1 << 0) -#define PKTSETFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->__unused) |= FASTBUF); \ - }) -#define PKTCLRFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->__unused) &= (~FASTBUF)); \ - }) -#define PKTISFAST(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - ((((struct sk_buff*)(skb))->__unused) & FASTBUF); \ - }) -#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->__unused) -#endif /* 2.6.22 */ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) -#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->ctfpool) -#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->ctfpool)->head) -#else -#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->sk) -#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->sk)->head) -#endif - -extern void *osl_ctfpool_add(osl_t *osh); -extern void osl_ctfpool_replenish(osl_t *osh, uint thresh); -extern int32 osl_ctfpool_init(osl_t *osh, uint numobj, uint size); -extern void osl_ctfpool_cleanup(osl_t *osh); -extern void osl_ctfpool_stats(osl_t *osh, void *b); -#else /* CTFPOOL */ -#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;}) -#endif /* CTFPOOL */ - -#define PKTSETCTF(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) -#define PKTCLRCTF(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) -#define PKTISCTF(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) - -#ifdef HNDCTF - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) -#define SKIPCT (1 << 2) -#define CHAINED (1 << 3) -#define PKTSETSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags |= SKIPCT); \ - }) -#define PKTCLRSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags &= (~SKIPCT)); \ - }) -#define PKTSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags & SKIPCT); \ - }) -#define PKTSETCHAINED(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags |= CHAINED); \ - }) -#define PKTCLRCHAINED(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags &= (~CHAINED)); \ - }) -#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->pktc_flags & CHAINED) -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) -#define SKIPCT (1 << 18) -#define CHAINED (1 << 19) -#define PKTSETSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len |= SKIPCT); \ - }) -#define PKTCLRSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len &= (~SKIPCT)); \ - }) -#define PKTSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len & SKIPCT); \ - }) -#define PKTSETCHAINED(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len |= CHAINED); \ - }) -#define PKTCLRCHAINED(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len &= (~CHAINED)); \ - }) -#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->mac_len & CHAINED) -#else /* 2.6.22 */ -#define SKIPCT (1 << 2) -#define CHAINED (1 << 3) -#define PKTSETSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused |= SKIPCT); \ - }) -#define PKTCLRSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused &= (~SKIPCT)); \ - }) -#define PKTSKIPCT(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused & SKIPCT); \ - }) -#define PKTSETCHAINED(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused |= CHAINED); \ - }) -#define PKTCLRCHAINED(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused &= (~CHAINED)); \ - }) -#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->__unused & CHAINED) -#endif /* 2.6.22 */ -typedef struct ctf_mark { - uint32 value; -} ctf_mark_t; -#define CTF_MARK(m) (m.value) -#else /* HNDCTF */ -#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 CTF_MARK(m) ({BCM_REFERENCE(m); 0;}) -#endif /* HNDCTF */ - -#if defined(BCM_GMAC3) - -/** pktalloced accounting in devices using GMAC Bulk Forwarding to DHD */ - -/* Account for packets delivered to downstream forwarder by GMAC interface. */ -extern void osl_pkt_tofwder(osl_t *osh, void *skbs, int skb_cnt); -#define PKTTOFWDER(osh, skbs, skb_cnt) \ - osl_pkt_tofwder(((osl_t *)osh), (void *)(skbs), (skb_cnt)) - -/* Account for packets received from downstream forwarder. */ -#if defined(BCMDBG_CTRACE) /* pkt logging */ -extern void osl_pkt_frmfwder(osl_t *osh, void *skbs, int skb_cnt, - int line, char *file); -#define PKTFRMFWDER(osh, skbs, skb_cnt) \ - osl_pkt_frmfwder(((osl_t *)osh), (void *)(skbs), (skb_cnt), \ - __LINE__, __FILE__) -#else /* ! (BCMDBG_PKT || BCMDBG_CTRACE) */ -extern void osl_pkt_frmfwder(osl_t *osh, void *skbs, int skb_cnt); -#define PKTFRMFWDER(osh, skbs, skb_cnt) \ - osl_pkt_frmfwder(((osl_t *)osh), (void *)(skbs), (skb_cnt)) -#endif - - -/** GMAC Forwarded packet tagging for reduced cache flush/invalidate. - * In FWDERBUF tagged packet, only FWDER_PKTMAPSZ amount of data would have - * been accessed in the GMAC forwarder. This may be used to limit the number of - * cachelines that need to be flushed or invalidated. - * Packets sent to the DHD from a GMAC forwarder will be tagged w/ FWDERBUF. - * DHD may clear the FWDERBUF tag, if more than FWDER_PKTMAPSZ was accessed. - * Likewise, a debug print of a packet payload in say the ethernet driver needs - * to be accompanied with a clear of the FWDERBUF tag. - */ - -/** Forwarded packets, have a GMAC_FWDER_HWRXOFF sized rx header (etc.h) */ -#define FWDER_HWRXOFF (18) - -/** Maximum amount of a pkt data that a downstream forwarder (GMAC) may have - * read into the L1 cache (not dirty). This may be used in reduced cache ops. - * - * Max 56: ET HWRXOFF[30] + BRCMHdr[4] + EtherHdr[14] + VlanHdr[4] + IP[4] - * Min 32: GMAC_FWDER_HWRXOFF[18] + EtherHdr[14] - */ -#define FWDER_MINMAPSZ (FWDER_HWRXOFF + 14) -#define FWDER_MAXMAPSZ (FWDER_HWRXOFF + 4 + 14 + 4 + 4) -#define FWDER_PKTMAPSZ (FWDER_MINMAPSZ) - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) - -#define FWDERBUF (1 << 4) -#define PKTSETFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags |= FWDERBUF); \ - }) -#define PKTCLRFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags &= (~FWDERBUF)); \ - }) -#define PKTISFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags & FWDERBUF); \ - }) - -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) - -#define FWDERBUF (1 << 20) -#define PKTSETFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len |= FWDERBUF); \ - }) -#define PKTCLRFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len &= (~FWDERBUF)); \ - }) -#define PKTISFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->mac_len & FWDERBUF); \ - }) - -#else /* 2.6.22 */ - -#define FWDERBUF (1 << 4) -#define PKTSETFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused |= FWDERBUF); \ - }) -#define PKTCLRFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused &= (~FWDERBUF)); \ - }) -#define PKTISFWDERBUF(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->__unused & FWDERBUF); \ - }) - -#endif /* 2.6.22 */ - -#else /* ! BCM_GMAC3 */ - -#define PKTSETFWDERBUF(osh, skb) ({ BCM_REFERENCE(osh); BCM_REFERENCE(skb); }) -#define PKTCLRFWDERBUF(osh, skb) ({ BCM_REFERENCE(osh); BCM_REFERENCE(skb); }) -#define PKTISFWDERBUF(osh, skb) ({ BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) - -#endif /* ! BCM_GMAC3 */ - - -#ifdef HNDCTF -/* For broadstream iqos */ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) -#define TOBR (1 << 5) -#define PKTSETTOBR(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags |= TOBR); \ - }) -#define PKTCLRTOBR(osh, skb) \ - ({ \ - BCM_REFERENCE(osh); \ - (((struct sk_buff*)(skb))->pktc_flags &= (~TOBR)); \ - }) -#define PKTISTOBR(skb) (((struct sk_buff*)(skb))->pktc_flags & TOBR) -#define PKTSETCTFIPCTXIF(skb, ifp) (((struct sk_buff*)(skb))->ctf_ipc_txif = ifp) -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) -#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;}) -#define PKTSETCTFIPCTXIF(skb, ifp) ({BCM_REFERENCE(skb); BCM_REFERENCE(ifp);}) -#else /* 2.6.22 */ -#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;}) -#define PKTSETCTFIPCTXIF(skb, ifp) ({BCM_REFERENCE(skb); BCM_REFERENCE(ifp);}) -#endif /* 2.6.22 */ -#else /* HNDCTF */ -#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;}) -#endif /* HNDCTF */ - - -#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 osl_pktfree(osl_t *osh, void *skb, bool send, int line, const char *caller); -#else -extern void osl_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_CTRACE -#define PKT_CTRACE_DUMP(osh, b) osl_ctrace_dump((osh), (b)) -extern void *osl_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 *osl_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 *osl_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 */ -extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *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 */ -#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 */ - -#define PKTALLOCED(osh) osl_pktalloced(osh) -extern uint osl_pktalloced(osl_t *osh); - #define OSL_RAND() osl_rand() extern uint32 osl_rand(void); +#define DMA_FLUSH(osh, va, size, direction, p, dmah) \ + osl_dma_flush((osh), (va), (size), (direction), (p), (dmah)) #if !defined(BCM_SECURE_DMA) #define DMA_MAP(osh, va, size, direction, p, dmah) \ osl_dma_map((osh), (va), (size), (direction), (p), (dmah)) #endif /* !(defined(BCM_SECURE_DMA)) */ -#ifdef PKTC -/* Use 8 bytes of skb tstamp field to store below info */ -struct chain_node { - struct sk_buff *link; - unsigned int flags:3, pkts:9, bytes:20; -}; - -#define CHAIN_NODE(skb) ((struct chain_node*)(((struct sk_buff*)skb)->pktc_cb)) - -#define PKTCSETATTR(s, f, p, b) ({CHAIN_NODE(s)->flags = (f); CHAIN_NODE(s)->pkts = (p); \ - CHAIN_NODE(s)->bytes = (b);}) -#define PKTCCLRATTR(s) ({CHAIN_NODE(s)->flags = CHAIN_NODE(s)->pkts = \ - CHAIN_NODE(s)->bytes = 0;}) -#define PKTCGETATTR(s) (CHAIN_NODE(s)->flags << 29 | CHAIN_NODE(s)->pkts << 20 | \ - CHAIN_NODE(s)->bytes) -#define PKTCCNT(skb) (CHAIN_NODE(skb)->pkts) -#define PKTCLEN(skb) (CHAIN_NODE(skb)->bytes) -#define PKTCGETFLAGS(skb) (CHAIN_NODE(skb)->flags) -#define PKTCSETFLAGS(skb, f) (CHAIN_NODE(skb)->flags = (f)) -#define PKTCCLRFLAGS(skb) (CHAIN_NODE(skb)->flags = 0) -#define PKTCFLAGS(skb) (CHAIN_NODE(skb)->flags) -#define PKTCSETCNT(skb, c) (CHAIN_NODE(skb)->pkts = (c)) -#define PKTCINCRCNT(skb) (CHAIN_NODE(skb)->pkts++) -#define PKTCADDCNT(skb, c) (CHAIN_NODE(skb)->pkts += (c)) -#define PKTCSETLEN(skb, l) (CHAIN_NODE(skb)->bytes = (l)) -#define PKTCADDLEN(skb, l) (CHAIN_NODE(skb)->bytes += (l)) -#define PKTCSETFLAG(skb, fb) (CHAIN_NODE(skb)->flags |= (fb)) -#define PKTCCLRFLAG(skb, fb) (CHAIN_NODE(skb)->flags &= ~(fb)) -#define PKTCLINK(skb) (CHAIN_NODE(skb)->link) -#define PKTSETCLINK(skb, x) (CHAIN_NODE(skb)->link = (struct sk_buff*)(x)) -#define FOREACH_CHAINED_PKT(skb, nskb) \ - for (; (skb) != NULL; (skb) = (nskb)) \ - if ((nskb) = (PKTISCHAINED(skb) ? PKTCLINK(skb) : NULL), \ - PKTSETCLINK((skb), NULL), 1) -#define PKTCFREE(osh, skb, send) \ -do { \ - void *nskb; \ - ASSERT((skb) != NULL); \ - FOREACH_CHAINED_PKT((skb), nskb) { \ - PKTCLRCHAINED((osh), (skb)); \ - PKTCCLRFLAGS((skb)); \ - PKTFREE((osh), (skb), (send)); \ - } \ -} while (0) -#define PKTCENQTAIL(h, t, p) \ -do { \ - if ((t) == NULL) { \ - (h) = (t) = (p); \ - } else { \ - PKTSETCLINK((t), (p)); \ - (t) = (p); \ - } \ -} while (0) -#endif /* PKTC */ - #else /* ! BCMDRIVER */ - /* ASSERT */ #define ASSERT(exp) do {} while (0) @@ -1050,20 +498,10 @@ extern void bzero(void *b, size_t len); #endif /* ! BCMDRIVER */ - /* Current STB 7445D1 doesn't use ACP and it is non-coherrent. * Adding these dummy values for build apss only * When we revisit need to change these. */ -#if defined(STBLINUX) - -#if defined(__ARM_ARCH_7A__) -#define ACP_WAR_ENAB() 0 -#define ACP_WIN_LIMIT 1 -#define arch_is_coherent() 0 -#endif /* __ARM_ARCH_7A__ */ - -#endif /* STBLINUX */ #ifdef BCM_SECURE_DMA @@ -1096,6 +534,9 @@ #define CMA_DMA_DESC_MEMBLOCK (SEC_CMA_COHERENT_BLK * SEC_CMA_COHERENT_MAX) #define CMA_DMA_DATA_MEMBLOCK (CMA_BUFSIZE_4K*CMA_BUFNUM) #define CMA_MEMBLOCK (CMA_DMA_DESC_MEMBLOCK + CMA_DMA_DATA_MEMBLOCK) +#define CONT_REGION 0x02 /* Region CMA */ +#else +#define CONT_REGION 0x00 /* To access the MIPs mem, Not yet... */ #endif /* !defined __ARM_ARCH_7A__ */ #define SEC_DMA_ALIGN (1<<16) @@ -1129,4 +570,54 @@ #define PKTLIST_UNLINK(x, y) skb_unlink((struct sk_buff *)(y), (struct sk_buff_head *)(x)) #define PKTLIST_FINI(x) skb_queue_purge((struct sk_buff_head *)(x)) +#ifndef _linuxver_h_ +typedef struct timer_list_compat timer_list_compat_t; +#endif /* _linuxver_h_ */ +typedef struct osl_timer { + timer_list_compat_t *timer; + bool set; +} osl_timer_t; + +typedef void (*linux_timer_fn)(ulong arg); + +extern osl_timer_t * osl_timer_init(osl_t *osh, const char *name, void (*fn)(void *arg), void *arg); +extern void osl_timer_add(osl_t *osh, osl_timer_t *t, uint32 ms, bool periodic); +extern void osl_timer_update(osl_t *osh, osl_timer_t *t, uint32 ms, bool periodic); +extern bool osl_timer_del(osl_t *osh, osl_timer_t *t); + +typedef atomic_t osl_atomic_t; +#define OSL_ATOMIC_SET(osh, v, x) atomic_set(v, x) +#define OSL_ATOMIC_INIT(osh, v) atomic_set(v, 0) +#define OSL_ATOMIC_INC(osh, v) atomic_inc(v) +#define OSL_ATOMIC_INC_RETURN(osh, v) atomic_inc_return(v) +#define OSL_ATOMIC_DEC(osh, v) atomic_dec(v) +#define OSL_ATOMIC_DEC_RETURN(osh, v) atomic_dec_return(v) +#define OSL_ATOMIC_READ(osh, v) atomic_read(v) +#define OSL_ATOMIC_ADD(osh, v, x) atomic_add(v, x) + +#ifndef atomic_set_mask +#define OSL_ATOMIC_OR(osh, v, x) atomic_or(x, v) +#define OSL_ATOMIC_AND(osh, v, x) atomic_and(x, v) +#else +#define OSL_ATOMIC_OR(osh, v, x) atomic_set_mask(x, v) +#define OSL_ATOMIC_AND(osh, v, x) atomic_clear_mask(~x, v) +#endif // endif + +#include <linux/rbtree.h> + +typedef struct rb_node osl_rb_node_t; +typedef struct rb_root osl_rb_root_t; + +#define OSL_RB_ENTRY(ptr, type, member) rb_entry(ptr, type, member) +#define OSL_RB_INSERT_COLOR(root, node) rb_insert_color(root, node) +#define OSL_RB_ERASE(node, root) rb_erase(node, root) +#define OSL_RB_FIRST(root) rb_first(root) +#define OSL_RB_LAST(root) rb_last(root) +#define OSL_RB_LINK_NODE(node, parent, rb_link) \ + rb_link_node(node, parent, rb_link) + +extern void *osl_spin_lock_init(osl_t *osh); +extern void osl_spin_lock_deinit(osl_t *osh, void *lock); +extern unsigned long osl_spin_lock(void *lock); +extern void osl_spin_unlock(void *lock, unsigned long flags); #endif /* _linux_osl_h_ */ -- Gitblit v1.6.2