| .. | .. |
|---|
| 1 | | -/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 2 | 1 | /* |
|---|
| 3 | 2 | * Linux OS Independent Layer |
|---|
| 4 | 3 | * |
|---|
| 5 | | - * Copyright (C) 1999-2019, Broadcom Corporation |
|---|
| 6 | | - * |
|---|
| 4 | + * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation |
|---|
| 5 | + * |
|---|
| 6 | + * Copyright (C) 1999-2017, Broadcom Corporation |
|---|
| 7 | + * |
|---|
| 7 | 8 | * Unless you and Broadcom execute a separate written software license |
|---|
| 8 | 9 | * agreement governing use of this software, this software is licensed to you |
|---|
| 9 | 10 | * under the terms of the GNU General Public License version 2 (the "GPL"), |
|---|
| 10 | 11 | * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
|---|
| 11 | 12 | * following added to such license: |
|---|
| 12 | | - * |
|---|
| 13 | + * |
|---|
| 13 | 14 | * As a special exception, the copyright holders of this software give you |
|---|
| 14 | 15 | * permission to link this software with independent modules, and to copy and |
|---|
| 15 | 16 | * distribute the resulting executable under terms of your choice, provided that |
|---|
| .. | .. |
|---|
| 17 | 18 | * the license of that module. An independent module is a module which is not |
|---|
| 18 | 19 | * derived from this software. The special exception does not apply to any |
|---|
| 19 | 20 | * modifications of the software. |
|---|
| 20 | | - * |
|---|
| 21 | + * |
|---|
| 21 | 22 | * Notwithstanding the above, under no circumstances may you combine this |
|---|
| 22 | 23 | * software in any way with any other Broadcom software provided under a license |
|---|
| 23 | 24 | * other than the GPL, without Broadcom's express prior written consent. |
|---|
| .. | .. |
|---|
| 25 | 26 | * |
|---|
| 26 | 27 | * <<Broadcom-WL-IPTag/Open:>> |
|---|
| 27 | 28 | * |
|---|
| 28 | | - * $Id: linux_osl.h 606142 2015-12-14 14:34:29Z $ |
|---|
| 29 | + * $Id: linux_osl.h 692391 2017-03-28 00:29:04Z $ |
|---|
| 29 | 30 | */ |
|---|
| 30 | 31 | |
|---|
| 31 | 32 | #ifndef _linux_osl_h_ |
|---|
| .. | .. |
|---|
| 33 | 34 | |
|---|
| 34 | 35 | #include <typedefs.h> |
|---|
| 35 | 36 | #define DECLSPEC_ALIGN(x) __attribute__ ((aligned(x))) |
|---|
| 36 | | - |
|---|
| 37 | 37 | /* Linux Kernel: File Operations: start */ |
|---|
| 38 | 38 | extern void * osl_os_open_image(char * filename); |
|---|
| 39 | 39 | extern int osl_os_get_image_block(char * buf, int len, void * image); |
|---|
| .. | .. |
|---|
| 44 | 44 | #ifdef BCMDRIVER |
|---|
| 45 | 45 | |
|---|
| 46 | 46 | /* OSL initialization */ |
|---|
| 47 | | -#ifdef SHARED_OSL_CMN |
|---|
| 48 | | -extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag, void **osh_cmn); |
|---|
| 49 | | -#else |
|---|
| 50 | 47 | extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag); |
|---|
| 51 | | -#endif /* SHARED_OSL_CMN */ |
|---|
| 52 | 48 | |
|---|
| 53 | 49 | extern void osl_detach(osl_t *osh); |
|---|
| 54 | 50 | extern int osl_static_mem_init(osl_t *osh, void *adapter); |
|---|
| 55 | 51 | extern int osl_static_mem_deinit(osl_t *osh, void *adapter); |
|---|
| 56 | 52 | extern void osl_set_bus_handle(osl_t *osh, void *bus_handle); |
|---|
| 57 | 53 | extern void* osl_get_bus_handle(osl_t *osh); |
|---|
| 54 | +#ifdef DHD_MAP_LOGGING |
|---|
| 55 | +extern void osl_dma_map_dump(osl_t *osh); |
|---|
| 56 | +#define OSL_DMA_MAP_DUMP(osh) osl_dma_map_dump(osh) |
|---|
| 57 | +#else |
|---|
| 58 | +#define OSL_DMA_MAP_DUMP(osh) do {} while (0) |
|---|
| 59 | +#endif /* DHD_MAP_LOGGING */ |
|---|
| 58 | 60 | |
|---|
| 59 | 61 | /* Global ASSERT type */ |
|---|
| 60 | 62 | extern uint32 g_assert_type; |
|---|
| .. | .. |
|---|
| 71 | 73 | #define PRI_FMT_d "d" |
|---|
| 72 | 74 | #endif /* CONFIG_PHYS_ADDR_T_64BIT */ |
|---|
| 73 | 75 | /* ASSERT */ |
|---|
| 76 | +#ifndef ASSERT |
|---|
| 74 | 77 | #if defined(BCMASSERT_LOG) |
|---|
| 75 | 78 | #define ASSERT(exp) \ |
|---|
| 76 | 79 | do { if (!(exp)) osl_assert(#exp, __FILE__, __LINE__); } while (0) |
|---|
| .. | .. |
|---|
| 86 | 89 | #define ASSERT(exp) |
|---|
| 87 | 90 | #endif /* GCC_VERSION > 30100 */ |
|---|
| 88 | 91 | #endif /* __GNUC__ */ |
|---|
| 89 | | -#endif |
|---|
| 92 | +#endif // endif |
|---|
| 93 | +#endif /* ASSERT */ |
|---|
| 90 | 94 | |
|---|
| 91 | 95 | /* bcm_prefetch_32B */ |
|---|
| 92 | 96 | static inline void bcm_prefetch_32B(const uint8 *addr, const int cachelines_32B) |
|---|
| .. | .. |
|---|
| 98 | 102 | case 2: __asm__ __volatile__("pld\t%a0" :: "p"(addr + 32) : "cc"); |
|---|
| 99 | 103 | case 1: __asm__ __volatile__("pld\t%a0" :: "p"(addr + 0) : "cc"); |
|---|
| 100 | 104 | } |
|---|
| 101 | | -#endif |
|---|
| 105 | +#endif // endif |
|---|
| 102 | 106 | } |
|---|
| 103 | 107 | |
|---|
| 104 | 108 | /* microsecond delay */ |
|---|
| .. | .. |
|---|
| 144 | 148 | pktfree_cb_fn_t tx_fn; /**< Callback function for PKTFREE */ |
|---|
| 145 | 149 | void *tx_ctx; /**< Context to the callback function */ |
|---|
| 146 | 150 | void *unused[3]; |
|---|
| 151 | + void (*rx_fn)(void *rx_ctx, void *p); |
|---|
| 152 | + void *rx_ctx; |
|---|
| 147 | 153 | } osl_pubinfo_t; |
|---|
| 148 | 154 | |
|---|
| 149 | 155 | extern void osl_flag_set(osl_t *osh, uint32 mask); |
|---|
| .. | .. |
|---|
| 156 | 162 | ((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \ |
|---|
| 157 | 163 | } while (0) |
|---|
| 158 | 164 | |
|---|
| 165 | +#define PKTFREESETRXCB(osh, _rx_fn, _rx_ctx) \ |
|---|
| 166 | + do { \ |
|---|
| 167 | + ((osl_pubinfo_t*)osh)->rx_fn = _rx_fn; \ |
|---|
| 168 | + ((osl_pubinfo_t*)osh)->rx_ctx = _rx_ctx; \ |
|---|
| 169 | + } while (0) |
|---|
| 159 | 170 | |
|---|
| 160 | 171 | /* host/bus architecture-specific byte swap */ |
|---|
| 161 | 172 | #define BUS_SWAP32(v) (v) |
|---|
| 162 | 173 | #define MALLOC(osh, size) osl_malloc((osh), (size)) |
|---|
| 163 | 174 | #define MALLOCZ(osh, size) osl_mallocz((osh), (size)) |
|---|
| 164 | 175 | #define MFREE(osh, addr, size) osl_mfree((osh), (addr), (size)) |
|---|
| 176 | + #define VMALLOC(osh, size) osl_vmalloc((osh), (size)) |
|---|
| 177 | + #define VMALLOCZ(osh, size) osl_vmallocz((osh), (size)) |
|---|
| 178 | + #define VMFREE(osh, addr, size) osl_vmfree((osh), (addr), (size)) |
|---|
| 165 | 179 | #define MALLOCED(osh) osl_malloced((osh)) |
|---|
| 166 | 180 | #define MEMORY_LEFTOVER(osh) osl_check_memleak(osh) |
|---|
| 167 | 181 | extern void *osl_malloc(osl_t *osh, uint size); |
|---|
| 168 | 182 | extern void *osl_mallocz(osl_t *osh, uint size); |
|---|
| 169 | 183 | extern void osl_mfree(osl_t *osh, void *addr, uint size); |
|---|
| 184 | + extern void *osl_vmalloc(osl_t *osh, uint size); |
|---|
| 185 | + extern void *osl_vmallocz(osl_t *osh, uint size); |
|---|
| 186 | + extern void osl_vmfree(osl_t *osh, void *addr, uint size); |
|---|
| 170 | 187 | extern uint osl_malloced(osl_t *osh); |
|---|
| 171 | 188 | extern uint osl_check_memleak(osl_t *osh); |
|---|
| 172 | | - |
|---|
| 173 | 189 | |
|---|
| 174 | 190 | #define MALLOC_FAILED(osh) osl_malloc_failed((osh)) |
|---|
| 175 | 191 | extern uint osl_malloc_failed(osl_t *osh); |
|---|
| .. | .. |
|---|
| 199 | 215 | /* map/unmap shared (dma-able) memory */ |
|---|
| 200 | 216 | #define DMA_UNMAP(osh, pa, size, direction, p, dmah) \ |
|---|
| 201 | 217 | osl_dma_unmap((osh), (pa), (size), (direction)) |
|---|
| 218 | +extern void osl_dma_flush(osl_t *osh, void *va, uint size, int direction, void *p, |
|---|
| 219 | + hnddma_seg_map_t *txp_dmah); |
|---|
| 202 | 220 | extern dmaaddr_t osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p, |
|---|
| 203 | 221 | hnddma_seg_map_t *txp_dmah); |
|---|
| 204 | | -extern void osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction); |
|---|
| 222 | +extern void osl_dma_unmap(osl_t *osh, dmaaddr_t pa, uint size, int direction); |
|---|
| 223 | + |
|---|
| 224 | +#ifndef PHYS_TO_VIRT |
|---|
| 225 | +#define PHYS_TO_VIRT(pa) osl_phys_to_virt(pa) |
|---|
| 226 | +#endif // endif |
|---|
| 227 | +#ifndef VIRT_TO_PHYS |
|---|
| 228 | +#define VIRT_TO_PHYS(va) osl_virt_to_phys(va) |
|---|
| 229 | +#endif // endif |
|---|
| 230 | +extern void * osl_phys_to_virt(void * pa); |
|---|
| 231 | +extern void * osl_virt_to_phys(void * va); |
|---|
| 205 | 232 | |
|---|
| 206 | 233 | /* API for DMA addressing capability */ |
|---|
| 207 | 234 | #define OSL_DMADDRWIDTH(osh, addrwidth) ({BCM_REFERENCE(osh); BCM_REFERENCE(addrwidth);}) |
|---|
| .. | .. |
|---|
| 212 | 239 | extern void osl_cpu_relax(void); |
|---|
| 213 | 240 | #define OSL_CPU_RELAX() osl_cpu_relax() |
|---|
| 214 | 241 | |
|---|
| 242 | +extern void osl_preempt_disable(osl_t *osh); |
|---|
| 243 | +extern void osl_preempt_enable(osl_t *osh); |
|---|
| 244 | +#define OSL_DISABLE_PREEMPTION(osh) osl_preempt_disable(osh) |
|---|
| 245 | +#define OSL_ENABLE_PREEMPTION(osh) osl_preempt_enable(osh) |
|---|
| 246 | + |
|---|
| 215 | 247 | #if (!defined(DHD_USE_COHERENT_MEM_FOR_RING) && defined(__ARM_ARCH_7A__)) || \ |
|---|
| 216 | | - (defined(STBLINUX) && defined(__ARM_ARCH_7A__)) |
|---|
| 248 | + defined(STB_SOC_WIFI) |
|---|
| 217 | 249 | extern void osl_cache_flush(void *va, uint size); |
|---|
| 218 | 250 | extern void osl_cache_inv(void *va, uint size); |
|---|
| 219 | 251 | extern void osl_prefetch(const void *ptr); |
|---|
| 220 | 252 | #define OSL_CACHE_FLUSH(va, len) osl_cache_flush((void *)(va), len) |
|---|
| 221 | 253 | #define OSL_CACHE_INV(va, len) osl_cache_inv((void *)(va), len) |
|---|
| 222 | 254 | #define OSL_PREFETCH(ptr) osl_prefetch(ptr) |
|---|
| 223 | | -#if defined(__ARM_ARCH_7A__) |
|---|
| 255 | +#if defined(__ARM_ARCH_7A__) || defined(STB_SOC_WIFI) |
|---|
| 224 | 256 | extern int osl_arch_is_coherent(void); |
|---|
| 225 | 257 | #define OSL_ARCH_IS_COHERENT() osl_arch_is_coherent() |
|---|
| 226 | 258 | extern int osl_acp_war_enab(void); |
|---|
| .. | .. |
|---|
| 236 | 268 | |
|---|
| 237 | 269 | #define OSL_ARCH_IS_COHERENT() NULL |
|---|
| 238 | 270 | #define OSL_ACP_WAR_ENAB() NULL |
|---|
| 239 | | -#endif |
|---|
| 271 | +#endif // endif |
|---|
| 272 | + |
|---|
| 273 | +#ifdef BCM_BACKPLANE_TIMEOUT |
|---|
| 274 | +extern void osl_set_bpt_cb(osl_t *osh, void *bpt_cb, void *bpt_ctx); |
|---|
| 275 | +extern void osl_bpt_rreg(osl_t *osh, ulong addr, volatile void *v, uint size); |
|---|
| 276 | +#endif /* BCM_BACKPLANE_TIMEOUT */ |
|---|
| 277 | + |
|---|
| 278 | +#if (defined(STB) && defined(__arm__)) |
|---|
| 279 | +extern void osl_pcie_rreg(osl_t *osh, ulong addr, volatile void *v, uint size); |
|---|
| 280 | +#endif // endif |
|---|
| 240 | 281 | |
|---|
| 241 | 282 | /* register access macros */ |
|---|
| 242 | 283 | #if defined(BCMSDIO) |
|---|
| .. | .. |
|---|
| 245 | 286 | (uintptr)(r), sizeof(*(r)), (v))) |
|---|
| 246 | 287 | #define OSL_READ_REG(osh, r) (bcmsdh_reg_read(osl_get_bus_handle(osh), \ |
|---|
| 247 | 288 | (uintptr)(r), sizeof(*(r)))) |
|---|
| 248 | | -#elif (defined(STB) && defined(__arm__)) |
|---|
| 249 | | -extern void osl_pcie_rreg(osl_t *osh, ulong addr, void *v, uint size); |
|---|
| 250 | | - |
|---|
| 289 | +#elif defined(BCM_BACKPLANE_TIMEOUT) |
|---|
| 251 | 290 | #define OSL_READ_REG(osh, r) \ |
|---|
| 252 | 291 | ({\ |
|---|
| 253 | 292 | __typeof(*(r)) __osl_v; \ |
|---|
| 254 | | - osl_pcie_rreg(osh, (uintptr)(r), (void *)&__osl_v, sizeof(*(r))); \ |
|---|
| 293 | + osl_bpt_rreg(osh, (uintptr)(r), &__osl_v, sizeof(*(r))); \ |
|---|
| 255 | 294 | __osl_v; \ |
|---|
| 256 | 295 | }) |
|---|
| 257 | | -#endif |
|---|
| 296 | +#elif (defined(STB) && defined(__arm__)) |
|---|
| 297 | +#define OSL_READ_REG(osh, r) \ |
|---|
| 298 | + ({\ |
|---|
| 299 | + __typeof(*(r)) __osl_v; \ |
|---|
| 300 | + osl_pcie_rreg(osh, (uintptr)(r), &__osl_v, sizeof(*(r))); \ |
|---|
| 301 | + __osl_v; \ |
|---|
| 302 | + }) |
|---|
| 303 | +#endif // endif |
|---|
| 258 | 304 | |
|---|
| 259 | | -#if (defined(STB) && defined(__arm__)) |
|---|
| 305 | +#if defined(BCM_BACKPLANE_TIMEOUT) || (defined(STB) && defined(__arm__)) |
|---|
| 260 | 306 | #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;}) |
|---|
| 261 | 307 | #define SELECT_BUS_READ(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); bus_op;}) |
|---|
| 262 | | -#else /* !BCM47XX_CA9 */ |
|---|
| 308 | +#else /* !BCM47XX_CA9 && !BCM_BACKPLANE_TIMEOUT && !(STB && __arm__) */ |
|---|
| 263 | 309 | #if defined(BCMSDIO) |
|---|
| 264 | 310 | #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \ |
|---|
| 265 | 311 | mmap_op else bus_op |
|---|
| .. | .. |
|---|
| 268 | 314 | #else |
|---|
| 269 | 315 | #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;}) |
|---|
| 270 | 316 | #define SELECT_BUS_READ(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;}) |
|---|
| 271 | | -#endif |
|---|
| 272 | | -#endif |
|---|
| 317 | +#endif // endif |
|---|
| 318 | +#endif // endif |
|---|
| 273 | 319 | |
|---|
| 274 | 320 | #define OSL_ERROR(bcmerror) osl_error(bcmerror) |
|---|
| 275 | 321 | extern int osl_error(int bcmerror); |
|---|
| .. | .. |
|---|
| 286 | 332 | #include <linuxver.h> /* use current 2.4.x calling conventions */ |
|---|
| 287 | 333 | #include <linux/kernel.h> /* for vsn/printf's */ |
|---|
| 288 | 334 | #include <linux/string.h> /* for mem*, str* */ |
|---|
| 289 | | -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 29) |
|---|
| 335 | +extern uint64 osl_sysuptime_us(void); |
|---|
| 290 | 336 | #define OSL_SYSUPTIME() ((uint32)jiffies_to_msecs(jiffies)) |
|---|
| 291 | | -#else |
|---|
| 292 | | -#define OSL_SYSUPTIME() ((uint32)jiffies * (1000 / HZ)) |
|---|
| 293 | | -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 29) */ |
|---|
| 337 | +#define OSL_SYSUPTIME_US() osl_sysuptime_us() |
|---|
| 338 | +extern uint64 osl_localtime_ns(void); |
|---|
| 339 | +extern void osl_get_localtime(uint64 *sec, uint64 *usec); |
|---|
| 340 | +extern uint64 osl_systztime_us(void); |
|---|
| 341 | +#define OSL_LOCALTIME_NS() osl_localtime_ns() |
|---|
| 342 | +#define OSL_GET_LOCALTIME(sec, usec) osl_get_localtime((sec), (usec)) |
|---|
| 343 | +#define OSL_SYSTZTIME_US() osl_systztime_us() |
|---|
| 294 | 344 | #define printf(fmt, args...) printk(fmt , ## args) |
|---|
| 295 | 345 | #include <linux/kernel.h> /* for vsn/printf's */ |
|---|
| 296 | 346 | #include <linux/string.h> /* for mem*, str* */ |
|---|
| 297 | 347 | /* bcopy's: Linux kernel doesn't provide these (anymore) */ |
|---|
| 348 | +#define bcopy_hw(src, dst, len) memcpy((dst), (src), (len)) |
|---|
| 349 | +#define bcopy_hw_async(src, dst, len) memcpy((dst), (src), (len)) |
|---|
| 350 | +#define bcopy_hw_poll_for_completion() |
|---|
| 298 | 351 | #define bcopy(src, dst, len) memcpy((dst), (src), (len)) |
|---|
| 299 | 352 | #define bcmp(b1, b2, len) memcmp((b1), (b2), (len)) |
|---|
| 300 | 353 | #define bzero(b, len) memset((b), '\0', (len)) |
|---|
| 301 | 354 | |
|---|
| 302 | 355 | /* register access macros */ |
|---|
| 303 | 356 | |
|---|
| 304 | | -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && \ |
|---|
| 305 | | - defined(CONFIG_X86) |
|---|
| 357 | +#ifdef CONFIG_64BIT |
|---|
| 358 | +/* readq is defined only for 64 bit platform */ |
|---|
| 306 | 359 | #define R_REG(osh, r) (\ |
|---|
| 307 | 360 | SELECT_BUS_READ(osh, \ |
|---|
| 308 | 361 | ({ \ |
|---|
| 309 | | - __typeof(*(r)) __osl_v; \ |
|---|
| 362 | + __typeof(*(r)) __osl_v = 0; \ |
|---|
| 363 | + BCM_REFERENCE(osh); \ |
|---|
| 310 | 364 | switch (sizeof(*(r))) { \ |
|---|
| 311 | 365 | case sizeof(uint8): __osl_v = \ |
|---|
| 312 | 366 | readb((volatile uint8*)(r)); break; \ |
|---|
| .. | .. |
|---|
| 315 | 369 | case sizeof(uint32): __osl_v = \ |
|---|
| 316 | 370 | readl((volatile uint32*)(r)); break; \ |
|---|
| 317 | 371 | case sizeof(uint64): __osl_v = \ |
|---|
| 318 | | - readq((volatile uint64*)(r)); break; \ |
|---|
| 372 | + readq((volatile uint64*)(r)); break; \ |
|---|
| 319 | 373 | } \ |
|---|
| 320 | 374 | __osl_v; \ |
|---|
| 321 | 375 | }), \ |
|---|
| 322 | 376 | OSL_READ_REG(osh, r)) \ |
|---|
| 323 | 377 | ) |
|---|
| 324 | | -#else |
|---|
| 378 | +#else /* !CONFIG_64BIT */ |
|---|
| 325 | 379 | #define R_REG(osh, r) (\ |
|---|
| 326 | 380 | SELECT_BUS_READ(osh, \ |
|---|
| 327 | 381 | ({ \ |
|---|
| 328 | | - __typeof(*(r)) __osl_v; \ |
|---|
| 382 | + __typeof(*(r)) __osl_v = 0; \ |
|---|
| 329 | 383 | switch (sizeof(*(r))) { \ |
|---|
| 330 | 384 | case sizeof(uint8): __osl_v = \ |
|---|
| 331 | 385 | readb((volatile uint8*)(r)); break; \ |
|---|
| .. | .. |
|---|
| 338 | 392 | }), \ |
|---|
| 339 | 393 | OSL_READ_REG(osh, r)) \ |
|---|
| 340 | 394 | ) |
|---|
| 341 | | -#endif /* KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && defined(CONFIG_X86) */ |
|---|
| 342 | | -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && \ |
|---|
| 343 | | - defined(CONFIG_X86) |
|---|
| 395 | +#endif /* CONFIG_64BIT */ |
|---|
| 396 | + |
|---|
| 397 | +#ifdef CONFIG_64BIT |
|---|
| 398 | +/* writeq is defined only for 64 bit platform */ |
|---|
| 344 | 399 | #define W_REG(osh, r, v) do { \ |
|---|
| 345 | 400 | SELECT_BUS_WRITE(osh, \ |
|---|
| 346 | 401 | switch (sizeof(*(r))) { \ |
|---|
| .. | .. |
|---|
| 351 | 406 | }, \ |
|---|
| 352 | 407 | (OSL_WRITE_REG(osh, r, v))); \ |
|---|
| 353 | 408 | } while (0) |
|---|
| 354 | | -#else |
|---|
| 409 | + |
|---|
| 410 | +#else /* !CONFIG_64BIT */ |
|---|
| 355 | 411 | #define W_REG(osh, r, v) do { \ |
|---|
| 356 | 412 | SELECT_BUS_WRITE(osh, \ |
|---|
| 357 | 413 | switch (sizeof(*(r))) { \ |
|---|
| .. | .. |
|---|
| 361 | 417 | }, \ |
|---|
| 362 | 418 | (OSL_WRITE_REG(osh, r, v))); \ |
|---|
| 363 | 419 | } while (0) |
|---|
| 364 | | -#endif /* KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && defined(CONFIG_X86) */ |
|---|
| 420 | +#endif /* CONFIG_64BIT */ |
|---|
| 365 | 421 | |
|---|
| 366 | 422 | #define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v)) |
|---|
| 367 | 423 | #define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v)) |
|---|
| .. | .. |
|---|
| 383 | 439 | #define OSL_GETCYCLES(x) rdtscl((x)) |
|---|
| 384 | 440 | #else |
|---|
| 385 | 441 | #define OSL_GETCYCLES(x) ((x) = 0) |
|---|
| 386 | | -#endif |
|---|
| 442 | +#endif // endif |
|---|
| 387 | 443 | |
|---|
| 388 | 444 | /* dereference an address that may cause a bus exception */ |
|---|
| 389 | 445 | #define BUSPROBE(val, addr) ({ (val) = R_REG(NULL, (addr)); 0; }) |
|---|
| 390 | 446 | |
|---|
| 391 | 447 | /* map/unmap physical to virtual I/O */ |
|---|
| 392 | 448 | #if !defined(CONFIG_MMC_MSM7X00A) |
|---|
| 393 | | -#define REG_MAP(pa, size) ioremap((unsigned long)(pa), (unsigned long)(size)) |
|---|
| 449 | +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)) |
|---|
| 450 | +#define REG_MAP(pa, size) ioremap_nocache((unsigned long)(pa), (unsigned long)(size)) |
|---|
| 451 | +#else |
|---|
| 452 | +#define REG_MAP(pa, size) ioremap((unsigned long)(pa), (unsigned long)(size)) |
|---|
| 453 | +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0) */ |
|---|
| 394 | 454 | #else |
|---|
| 395 | 455 | #define REG_MAP(pa, size) (void *)(0) |
|---|
| 396 | 456 | #endif /* !defined(CONFIG_MMC_MSM7X00A */ |
|---|
| .. | .. |
|---|
| 406 | 466 | */ |
|---|
| 407 | 467 | #include <linuxver.h> /* use current 2.4.x calling conventions */ |
|---|
| 408 | 468 | |
|---|
| 409 | | -/* packet primitives */ |
|---|
| 410 | | -#ifdef BCMDBG_CTRACE |
|---|
| 411 | | -#define PKTGET(osh, len, send) osl_pktget((osh), (len), __LINE__, __FILE__) |
|---|
| 412 | | -#define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__) |
|---|
| 413 | | -#else |
|---|
| 414 | | -#ifdef BCM_OBJECT_TRACE |
|---|
| 415 | | -#define PKTGET(osh, len, send) osl_pktget((osh), (len), __LINE__, __FUNCTION__) |
|---|
| 416 | | -#define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FUNCTION__) |
|---|
| 417 | | -#else |
|---|
| 418 | | -#define PKTGET(osh, len, send) osl_pktget((osh), (len)) |
|---|
| 419 | | -#define PKTDUP(osh, skb) osl_pktdup((osh), (skb)) |
|---|
| 420 | | -#endif /* BCM_OBJECT_TRACE */ |
|---|
| 421 | | -#endif /* BCMDBG_CTRACE */ |
|---|
| 422 | | -#define PKTLIST_DUMP(osh, buf) BCM_REFERENCE(osh) |
|---|
| 423 | | -#define PKTDBG_TRACE(osh, pkt, bit) BCM_REFERENCE(osh) |
|---|
| 424 | | -#if defined(BCM_OBJECT_TRACE) |
|---|
| 425 | | -#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send), __LINE__, __FUNCTION__) |
|---|
| 426 | | -#else |
|---|
| 427 | | -#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send)) |
|---|
| 428 | | -#endif /* BCM_OBJECT_TRACE */ |
|---|
| 429 | | -#ifdef CONFIG_DHD_USE_STATIC_BUF |
|---|
| 430 | | -#define PKTGET_STATIC(osh, len, send) osl_pktget_static((osh), (len)) |
|---|
| 431 | | -#define PKTFREE_STATIC(osh, skb, send) osl_pktfree_static((osh), (skb), (send)) |
|---|
| 432 | | -#else |
|---|
| 433 | | -#define PKTGET_STATIC PKTGET |
|---|
| 434 | | -#define PKTFREE_STATIC PKTFREE |
|---|
| 435 | | -#endif /* CONFIG_DHD_USE_STATIC_BUF */ |
|---|
| 436 | | -#define PKTDATA(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->data);}) |
|---|
| 437 | | -#define PKTLEN(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->len);}) |
|---|
| 438 | | -#define PKTHEADROOM(osh, skb) (PKTDATA(osh, skb)-(((struct sk_buff*)(skb))->head)) |
|---|
| 439 | | -#define PKTEXPHEADROOM(osh, skb, b) \ |
|---|
| 440 | | - ({ \ |
|---|
| 441 | | - BCM_REFERENCE(osh); \ |
|---|
| 442 | | - skb_realloc_headroom((struct sk_buff*)(skb), (b)); \ |
|---|
| 443 | | - }) |
|---|
| 444 | | -#define PKTTAILROOM(osh, skb) \ |
|---|
| 445 | | - ({ \ |
|---|
| 446 | | - BCM_REFERENCE(osh); \ |
|---|
| 447 | | - skb_tailroom((struct sk_buff*)(skb)); \ |
|---|
| 448 | | - }) |
|---|
| 449 | | -#define PKTPADTAILROOM(osh, skb, padlen) \ |
|---|
| 450 | | - ({ \ |
|---|
| 451 | | - BCM_REFERENCE(osh); \ |
|---|
| 452 | | - skb_pad((struct sk_buff*)(skb), (padlen)); \ |
|---|
| 453 | | - }) |
|---|
| 454 | | -#define PKTNEXT(osh, skb) ({BCM_REFERENCE(osh); (((struct sk_buff*)(skb))->next);}) |
|---|
| 455 | | -#define PKTSETNEXT(osh, skb, x) \ |
|---|
| 456 | | - ({ \ |
|---|
| 457 | | - BCM_REFERENCE(osh); \ |
|---|
| 458 | | - (((struct sk_buff*)(skb))->next = (struct sk_buff*)(x)); \ |
|---|
| 459 | | - }) |
|---|
| 460 | | -#define PKTSETLEN(osh, skb, len) \ |
|---|
| 461 | | - ({ \ |
|---|
| 462 | | - BCM_REFERENCE(osh); \ |
|---|
| 463 | | - __skb_trim((struct sk_buff*)(skb), (len)); \ |
|---|
| 464 | | - }) |
|---|
| 465 | | -#define PKTPUSH(osh, skb, bytes) \ |
|---|
| 466 | | - ({ \ |
|---|
| 467 | | - BCM_REFERENCE(osh); \ |
|---|
| 468 | | - skb_push((struct sk_buff*)(skb), (bytes)); \ |
|---|
| 469 | | - }) |
|---|
| 470 | | -#define PKTPULL(osh, skb, bytes) \ |
|---|
| 471 | | - ({ \ |
|---|
| 472 | | - BCM_REFERENCE(osh); \ |
|---|
| 473 | | - skb_pull((struct sk_buff*)(skb), (bytes)); \ |
|---|
| 474 | | - }) |
|---|
| 475 | | -#define PKTTAG(skb) ((void*)(((struct sk_buff*)(skb))->cb)) |
|---|
| 476 | | -#define PKTSETPOOL(osh, skb, x, y) BCM_REFERENCE(osh) |
|---|
| 477 | | -#define PKTPOOL(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
|---|
| 478 | | -#define PKTFREELIST(skb) PKTLINK(skb) |
|---|
| 479 | | -#define PKTSETFREELIST(skb, x) PKTSETLINK((skb), (x)) |
|---|
| 480 | | -#define PKTPTR(skb) (skb) |
|---|
| 481 | | -#define PKTID(skb) ({BCM_REFERENCE(skb); 0;}) |
|---|
| 482 | | -#define PKTSETID(skb, id) ({BCM_REFERENCE(skb); BCM_REFERENCE(id);}) |
|---|
| 483 | | -#define PKTSHRINK(osh, m) ({BCM_REFERENCE(osh); m;}) |
|---|
| 484 | | -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) && defined(TSQ_MULTIPLIER) |
|---|
| 485 | | -#define PKTORPHAN(skb) osl_pkt_orphan_partial(skb) |
|---|
| 486 | | -extern void osl_pkt_orphan_partial(struct sk_buff *skb); |
|---|
| 487 | | -#else |
|---|
| 488 | | -#define PKTORPHAN(skb) ({BCM_REFERENCE(skb); 0;}) |
|---|
| 489 | | -#endif /* LINUX VERSION >= 3.6 */ |
|---|
| 490 | | - |
|---|
| 491 | | - |
|---|
| 492 | | -#ifdef BCMDBG_CTRACE |
|---|
| 493 | | -#define DEL_CTRACE(zosh, zskb) { \ |
|---|
| 494 | | - unsigned long zflags; \ |
|---|
| 495 | | - spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \ |
|---|
| 496 | | - list_del(&(zskb)->ctrace_list); \ |
|---|
| 497 | | - (zosh)->ctrace_num--; \ |
|---|
| 498 | | - (zskb)->ctrace_start = 0; \ |
|---|
| 499 | | - (zskb)->ctrace_count = 0; \ |
|---|
| 500 | | - spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \ |
|---|
| 501 | | -} |
|---|
| 502 | | - |
|---|
| 503 | | -#define UPDATE_CTRACE(zskb, zfile, zline) { \ |
|---|
| 504 | | - struct sk_buff *_zskb = (struct sk_buff *)(zskb); \ |
|---|
| 505 | | - if (_zskb->ctrace_count < CTRACE_NUM) { \ |
|---|
| 506 | | - _zskb->func[_zskb->ctrace_count] = zfile; \ |
|---|
| 507 | | - _zskb->line[_zskb->ctrace_count] = zline; \ |
|---|
| 508 | | - _zskb->ctrace_count++; \ |
|---|
| 509 | | - } \ |
|---|
| 510 | | - else { \ |
|---|
| 511 | | - _zskb->func[_zskb->ctrace_start] = zfile; \ |
|---|
| 512 | | - _zskb->line[_zskb->ctrace_start] = zline; \ |
|---|
| 513 | | - _zskb->ctrace_start++; \ |
|---|
| 514 | | - if (_zskb->ctrace_start >= CTRACE_NUM) \ |
|---|
| 515 | | - _zskb->ctrace_start = 0; \ |
|---|
| 516 | | - } \ |
|---|
| 517 | | -} |
|---|
| 518 | | - |
|---|
| 519 | | -#define ADD_CTRACE(zosh, zskb, zfile, zline) { \ |
|---|
| 520 | | - unsigned long zflags; \ |
|---|
| 521 | | - spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \ |
|---|
| 522 | | - list_add(&(zskb)->ctrace_list, &(zosh)->ctrace_list); \ |
|---|
| 523 | | - (zosh)->ctrace_num++; \ |
|---|
| 524 | | - UPDATE_CTRACE(zskb, zfile, zline); \ |
|---|
| 525 | | - spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \ |
|---|
| 526 | | -} |
|---|
| 527 | | - |
|---|
| 528 | | -#define PKTCALLER(zskb) UPDATE_CTRACE((struct sk_buff *)zskb, (char *)__FUNCTION__, __LINE__) |
|---|
| 529 | | -#endif /* BCMDBG_CTRACE */ |
|---|
| 530 | | - |
|---|
| 531 | | -#ifdef CTFPOOL |
|---|
| 532 | | -#define CTFPOOL_REFILL_THRESH 3 |
|---|
| 533 | | -typedef struct ctfpool { |
|---|
| 534 | | - void *head; |
|---|
| 535 | | - spinlock_t lock; |
|---|
| 536 | | - osl_t *osh; |
|---|
| 537 | | - uint max_obj; |
|---|
| 538 | | - uint curr_obj; |
|---|
| 539 | | - uint obj_size; |
|---|
| 540 | | - uint refills; |
|---|
| 541 | | - uint fast_allocs; |
|---|
| 542 | | - uint fast_frees; |
|---|
| 543 | | - uint slow_allocs; |
|---|
| 544 | | -} ctfpool_t; |
|---|
| 545 | | - |
|---|
| 546 | | -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) |
|---|
| 547 | | -#define FASTBUF (1 << 0) |
|---|
| 548 | | -#define PKTSETFAST(osh, skb) \ |
|---|
| 549 | | - ({ \ |
|---|
| 550 | | - BCM_REFERENCE(osh); \ |
|---|
| 551 | | - ((((struct sk_buff*)(skb))->pktc_flags) |= FASTBUF); \ |
|---|
| 552 | | - }) |
|---|
| 553 | | -#define PKTCLRFAST(osh, skb) \ |
|---|
| 554 | | - ({ \ |
|---|
| 555 | | - BCM_REFERENCE(osh); \ |
|---|
| 556 | | - ((((struct sk_buff*)(skb))->pktc_flags) &= (~FASTBUF)); \ |
|---|
| 557 | | - }) |
|---|
| 558 | | -#define PKTISFAST(osh, skb) \ |
|---|
| 559 | | - ({ \ |
|---|
| 560 | | - BCM_REFERENCE(osh); \ |
|---|
| 561 | | - ((((struct sk_buff*)(skb))->pktc_flags) & FASTBUF); \ |
|---|
| 562 | | - }) |
|---|
| 563 | | -#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->pktc_flags) |
|---|
| 564 | | -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) |
|---|
| 565 | | -#define FASTBUF (1 << 16) |
|---|
| 566 | | -#define PKTSETFAST(osh, skb) \ |
|---|
| 567 | | - ({ \ |
|---|
| 568 | | - BCM_REFERENCE(osh); \ |
|---|
| 569 | | - ((((struct sk_buff*)(skb))->mac_len) |= FASTBUF); \ |
|---|
| 570 | | - }) |
|---|
| 571 | | -#define PKTCLRFAST(osh, skb) \ |
|---|
| 572 | | - ({ \ |
|---|
| 573 | | - BCM_REFERENCE(osh); \ |
|---|
| 574 | | - ((((struct sk_buff*)(skb))->mac_len) &= (~FASTBUF)); \ |
|---|
| 575 | | - }) |
|---|
| 576 | | -#define PKTISFAST(osh, skb) \ |
|---|
| 577 | | - ({ \ |
|---|
| 578 | | - BCM_REFERENCE(osh); \ |
|---|
| 579 | | - ((((struct sk_buff*)(skb))->mac_len) & FASTBUF); \ |
|---|
| 580 | | - }) |
|---|
| 581 | | -#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->mac_len) |
|---|
| 582 | | -#else |
|---|
| 583 | | -#define FASTBUF (1 << 0) |
|---|
| 584 | | -#define PKTSETFAST(osh, skb) \ |
|---|
| 585 | | - ({ \ |
|---|
| 586 | | - BCM_REFERENCE(osh); \ |
|---|
| 587 | | - ((((struct sk_buff*)(skb))->__unused) |= FASTBUF); \ |
|---|
| 588 | | - }) |
|---|
| 589 | | -#define PKTCLRFAST(osh, skb) \ |
|---|
| 590 | | - ({ \ |
|---|
| 591 | | - BCM_REFERENCE(osh); \ |
|---|
| 592 | | - ((((struct sk_buff*)(skb))->__unused) &= (~FASTBUF)); \ |
|---|
| 593 | | - }) |
|---|
| 594 | | -#define PKTISFAST(osh, skb) \ |
|---|
| 595 | | - ({ \ |
|---|
| 596 | | - BCM_REFERENCE(osh); \ |
|---|
| 597 | | - ((((struct sk_buff*)(skb))->__unused) & FASTBUF); \ |
|---|
| 598 | | - }) |
|---|
| 599 | | -#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->__unused) |
|---|
| 600 | | -#endif /* 2.6.22 */ |
|---|
| 601 | | - |
|---|
| 602 | | -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) |
|---|
| 603 | | -#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->ctfpool) |
|---|
| 604 | | -#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->ctfpool)->head) |
|---|
| 605 | | -#else |
|---|
| 606 | | -#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->sk) |
|---|
| 607 | | -#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->sk)->head) |
|---|
| 608 | | -#endif |
|---|
| 609 | | - |
|---|
| 610 | | -extern void *osl_ctfpool_add(osl_t *osh); |
|---|
| 611 | | -extern void osl_ctfpool_replenish(osl_t *osh, uint thresh); |
|---|
| 612 | | -extern int32 osl_ctfpool_init(osl_t *osh, uint numobj, uint size); |
|---|
| 613 | | -extern void osl_ctfpool_cleanup(osl_t *osh); |
|---|
| 614 | | -extern void osl_ctfpool_stats(osl_t *osh, void *b); |
|---|
| 615 | | -#else /* CTFPOOL */ |
|---|
| 616 | | -#define PKTSETFAST(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 617 | | -#define PKTCLRFAST(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 618 | | -#define PKTISFAST(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
|---|
| 619 | | -#endif /* CTFPOOL */ |
|---|
| 620 | | - |
|---|
| 621 | | -#define PKTSETCTF(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 622 | | -#define PKTCLRCTF(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 623 | | -#define PKTISCTF(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
|---|
| 624 | | - |
|---|
| 625 | | -#ifdef HNDCTF |
|---|
| 626 | | - |
|---|
| 627 | | -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) |
|---|
| 628 | | -#define SKIPCT (1 << 2) |
|---|
| 629 | | -#define CHAINED (1 << 3) |
|---|
| 630 | | -#define PKTSETSKIPCT(osh, skb) \ |
|---|
| 631 | | - ({ \ |
|---|
| 632 | | - BCM_REFERENCE(osh); \ |
|---|
| 633 | | - (((struct sk_buff*)(skb))->pktc_flags |= SKIPCT); \ |
|---|
| 634 | | - }) |
|---|
| 635 | | -#define PKTCLRSKIPCT(osh, skb) \ |
|---|
| 636 | | - ({ \ |
|---|
| 637 | | - BCM_REFERENCE(osh); \ |
|---|
| 638 | | - (((struct sk_buff*)(skb))->pktc_flags &= (~SKIPCT)); \ |
|---|
| 639 | | - }) |
|---|
| 640 | | -#define PKTSKIPCT(osh, skb) \ |
|---|
| 641 | | - ({ \ |
|---|
| 642 | | - BCM_REFERENCE(osh); \ |
|---|
| 643 | | - (((struct sk_buff*)(skb))->pktc_flags & SKIPCT); \ |
|---|
| 644 | | - }) |
|---|
| 645 | | -#define PKTSETCHAINED(osh, skb) \ |
|---|
| 646 | | - ({ \ |
|---|
| 647 | | - BCM_REFERENCE(osh); \ |
|---|
| 648 | | - (((struct sk_buff*)(skb))->pktc_flags |= CHAINED); \ |
|---|
| 649 | | - }) |
|---|
| 650 | | -#define PKTCLRCHAINED(osh, skb) \ |
|---|
| 651 | | - ({ \ |
|---|
| 652 | | - BCM_REFERENCE(osh); \ |
|---|
| 653 | | - (((struct sk_buff*)(skb))->pktc_flags &= (~CHAINED)); \ |
|---|
| 654 | | - }) |
|---|
| 655 | | -#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->pktc_flags & CHAINED) |
|---|
| 656 | | -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) |
|---|
| 657 | | -#define SKIPCT (1 << 18) |
|---|
| 658 | | -#define CHAINED (1 << 19) |
|---|
| 659 | | -#define PKTSETSKIPCT(osh, skb) \ |
|---|
| 660 | | - ({ \ |
|---|
| 661 | | - BCM_REFERENCE(osh); \ |
|---|
| 662 | | - (((struct sk_buff*)(skb))->mac_len |= SKIPCT); \ |
|---|
| 663 | | - }) |
|---|
| 664 | | -#define PKTCLRSKIPCT(osh, skb) \ |
|---|
| 665 | | - ({ \ |
|---|
| 666 | | - BCM_REFERENCE(osh); \ |
|---|
| 667 | | - (((struct sk_buff*)(skb))->mac_len &= (~SKIPCT)); \ |
|---|
| 668 | | - }) |
|---|
| 669 | | -#define PKTSKIPCT(osh, skb) \ |
|---|
| 670 | | - ({ \ |
|---|
| 671 | | - BCM_REFERENCE(osh); \ |
|---|
| 672 | | - (((struct sk_buff*)(skb))->mac_len & SKIPCT); \ |
|---|
| 673 | | - }) |
|---|
| 674 | | -#define PKTSETCHAINED(osh, skb) \ |
|---|
| 675 | | - ({ \ |
|---|
| 676 | | - BCM_REFERENCE(osh); \ |
|---|
| 677 | | - (((struct sk_buff*)(skb))->mac_len |= CHAINED); \ |
|---|
| 678 | | - }) |
|---|
| 679 | | -#define PKTCLRCHAINED(osh, skb) \ |
|---|
| 680 | | - ({ \ |
|---|
| 681 | | - BCM_REFERENCE(osh); \ |
|---|
| 682 | | - (((struct sk_buff*)(skb))->mac_len &= (~CHAINED)); \ |
|---|
| 683 | | - }) |
|---|
| 684 | | -#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->mac_len & CHAINED) |
|---|
| 685 | | -#else /* 2.6.22 */ |
|---|
| 686 | | -#define SKIPCT (1 << 2) |
|---|
| 687 | | -#define CHAINED (1 << 3) |
|---|
| 688 | | -#define PKTSETSKIPCT(osh, skb) \ |
|---|
| 689 | | - ({ \ |
|---|
| 690 | | - BCM_REFERENCE(osh); \ |
|---|
| 691 | | - (((struct sk_buff*)(skb))->__unused |= SKIPCT); \ |
|---|
| 692 | | - }) |
|---|
| 693 | | -#define PKTCLRSKIPCT(osh, skb) \ |
|---|
| 694 | | - ({ \ |
|---|
| 695 | | - BCM_REFERENCE(osh); \ |
|---|
| 696 | | - (((struct sk_buff*)(skb))->__unused &= (~SKIPCT)); \ |
|---|
| 697 | | - }) |
|---|
| 698 | | -#define PKTSKIPCT(osh, skb) \ |
|---|
| 699 | | - ({ \ |
|---|
| 700 | | - BCM_REFERENCE(osh); \ |
|---|
| 701 | | - (((struct sk_buff*)(skb))->__unused & SKIPCT); \ |
|---|
| 702 | | - }) |
|---|
| 703 | | -#define PKTSETCHAINED(osh, skb) \ |
|---|
| 704 | | - ({ \ |
|---|
| 705 | | - BCM_REFERENCE(osh); \ |
|---|
| 706 | | - (((struct sk_buff*)(skb))->__unused |= CHAINED); \ |
|---|
| 707 | | - }) |
|---|
| 708 | | -#define PKTCLRCHAINED(osh, skb) \ |
|---|
| 709 | | - ({ \ |
|---|
| 710 | | - BCM_REFERENCE(osh); \ |
|---|
| 711 | | - (((struct sk_buff*)(skb))->__unused &= (~CHAINED)); \ |
|---|
| 712 | | - }) |
|---|
| 713 | | -#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->__unused & CHAINED) |
|---|
| 714 | | -#endif /* 2.6.22 */ |
|---|
| 715 | | -typedef struct ctf_mark { |
|---|
| 716 | | - uint32 value; |
|---|
| 717 | | -} ctf_mark_t; |
|---|
| 718 | | -#define CTF_MARK(m) (m.value) |
|---|
| 719 | | -#else /* HNDCTF */ |
|---|
| 720 | | -#define PKTSETSKIPCT(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 721 | | -#define PKTCLRSKIPCT(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 722 | | -#define PKTSKIPCT(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 723 | | -#define CTF_MARK(m) ({BCM_REFERENCE(m); 0;}) |
|---|
| 724 | | -#endif /* HNDCTF */ |
|---|
| 725 | | - |
|---|
| 726 | | -#if defined(BCM_GMAC3) |
|---|
| 727 | | - |
|---|
| 728 | | -/** pktalloced accounting in devices using GMAC Bulk Forwarding to DHD */ |
|---|
| 729 | | - |
|---|
| 730 | | -/* Account for packets delivered to downstream forwarder by GMAC interface. */ |
|---|
| 731 | | -extern void osl_pkt_tofwder(osl_t *osh, void *skbs, int skb_cnt); |
|---|
| 732 | | -#define PKTTOFWDER(osh, skbs, skb_cnt) \ |
|---|
| 733 | | - osl_pkt_tofwder(((osl_t *)osh), (void *)(skbs), (skb_cnt)) |
|---|
| 734 | | - |
|---|
| 735 | | -/* Account for packets received from downstream forwarder. */ |
|---|
| 736 | | -#if defined(BCMDBG_CTRACE) /* pkt logging */ |
|---|
| 737 | | -extern void osl_pkt_frmfwder(osl_t *osh, void *skbs, int skb_cnt, |
|---|
| 738 | | - int line, char *file); |
|---|
| 739 | | -#define PKTFRMFWDER(osh, skbs, skb_cnt) \ |
|---|
| 740 | | - osl_pkt_frmfwder(((osl_t *)osh), (void *)(skbs), (skb_cnt), \ |
|---|
| 741 | | - __LINE__, __FILE__) |
|---|
| 742 | | -#else /* ! (BCMDBG_PKT || BCMDBG_CTRACE) */ |
|---|
| 743 | | -extern void osl_pkt_frmfwder(osl_t *osh, void *skbs, int skb_cnt); |
|---|
| 744 | | -#define PKTFRMFWDER(osh, skbs, skb_cnt) \ |
|---|
| 745 | | - osl_pkt_frmfwder(((osl_t *)osh), (void *)(skbs), (skb_cnt)) |
|---|
| 746 | | -#endif |
|---|
| 747 | | - |
|---|
| 748 | | - |
|---|
| 749 | | -/** GMAC Forwarded packet tagging for reduced cache flush/invalidate. |
|---|
| 750 | | - * In FWDERBUF tagged packet, only FWDER_PKTMAPSZ amount of data would have |
|---|
| 751 | | - * been accessed in the GMAC forwarder. This may be used to limit the number of |
|---|
| 752 | | - * cachelines that need to be flushed or invalidated. |
|---|
| 753 | | - * Packets sent to the DHD from a GMAC forwarder will be tagged w/ FWDERBUF. |
|---|
| 754 | | - * DHD may clear the FWDERBUF tag, if more than FWDER_PKTMAPSZ was accessed. |
|---|
| 755 | | - * Likewise, a debug print of a packet payload in say the ethernet driver needs |
|---|
| 756 | | - * to be accompanied with a clear of the FWDERBUF tag. |
|---|
| 757 | | - */ |
|---|
| 758 | | - |
|---|
| 759 | | -/** Forwarded packets, have a GMAC_FWDER_HWRXOFF sized rx header (etc.h) */ |
|---|
| 760 | | -#define FWDER_HWRXOFF (18) |
|---|
| 761 | | - |
|---|
| 762 | | -/** Maximum amount of a pkt data that a downstream forwarder (GMAC) may have |
|---|
| 763 | | - * read into the L1 cache (not dirty). This may be used in reduced cache ops. |
|---|
| 764 | | - * |
|---|
| 765 | | - * Max 56: ET HWRXOFF[30] + BRCMHdr[4] + EtherHdr[14] + VlanHdr[4] + IP[4] |
|---|
| 766 | | - * Min 32: GMAC_FWDER_HWRXOFF[18] + EtherHdr[14] |
|---|
| 767 | | - */ |
|---|
| 768 | | -#define FWDER_MINMAPSZ (FWDER_HWRXOFF + 14) |
|---|
| 769 | | -#define FWDER_MAXMAPSZ (FWDER_HWRXOFF + 4 + 14 + 4 + 4) |
|---|
| 770 | | -#define FWDER_PKTMAPSZ (FWDER_MINMAPSZ) |
|---|
| 771 | | - |
|---|
| 772 | | -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) |
|---|
| 773 | | - |
|---|
| 774 | | -#define FWDERBUF (1 << 4) |
|---|
| 775 | | -#define PKTSETFWDERBUF(osh, skb) \ |
|---|
| 776 | | - ({ \ |
|---|
| 777 | | - BCM_REFERENCE(osh); \ |
|---|
| 778 | | - (((struct sk_buff*)(skb))->pktc_flags |= FWDERBUF); \ |
|---|
| 779 | | - }) |
|---|
| 780 | | -#define PKTCLRFWDERBUF(osh, skb) \ |
|---|
| 781 | | - ({ \ |
|---|
| 782 | | - BCM_REFERENCE(osh); \ |
|---|
| 783 | | - (((struct sk_buff*)(skb))->pktc_flags &= (~FWDERBUF)); \ |
|---|
| 784 | | - }) |
|---|
| 785 | | -#define PKTISFWDERBUF(osh, skb) \ |
|---|
| 786 | | - ({ \ |
|---|
| 787 | | - BCM_REFERENCE(osh); \ |
|---|
| 788 | | - (((struct sk_buff*)(skb))->pktc_flags & FWDERBUF); \ |
|---|
| 789 | | - }) |
|---|
| 790 | | - |
|---|
| 791 | | -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) |
|---|
| 792 | | - |
|---|
| 793 | | -#define FWDERBUF (1 << 20) |
|---|
| 794 | | -#define PKTSETFWDERBUF(osh, skb) \ |
|---|
| 795 | | - ({ \ |
|---|
| 796 | | - BCM_REFERENCE(osh); \ |
|---|
| 797 | | - (((struct sk_buff*)(skb))->mac_len |= FWDERBUF); \ |
|---|
| 798 | | - }) |
|---|
| 799 | | -#define PKTCLRFWDERBUF(osh, skb) \ |
|---|
| 800 | | - ({ \ |
|---|
| 801 | | - BCM_REFERENCE(osh); \ |
|---|
| 802 | | - (((struct sk_buff*)(skb))->mac_len &= (~FWDERBUF)); \ |
|---|
| 803 | | - }) |
|---|
| 804 | | -#define PKTISFWDERBUF(osh, skb) \ |
|---|
| 805 | | - ({ \ |
|---|
| 806 | | - BCM_REFERENCE(osh); \ |
|---|
| 807 | | - (((struct sk_buff*)(skb))->mac_len & FWDERBUF); \ |
|---|
| 808 | | - }) |
|---|
| 809 | | - |
|---|
| 810 | | -#else /* 2.6.22 */ |
|---|
| 811 | | - |
|---|
| 812 | | -#define FWDERBUF (1 << 4) |
|---|
| 813 | | -#define PKTSETFWDERBUF(osh, skb) \ |
|---|
| 814 | | - ({ \ |
|---|
| 815 | | - BCM_REFERENCE(osh); \ |
|---|
| 816 | | - (((struct sk_buff*)(skb))->__unused |= FWDERBUF); \ |
|---|
| 817 | | - }) |
|---|
| 818 | | -#define PKTCLRFWDERBUF(osh, skb) \ |
|---|
| 819 | | - ({ \ |
|---|
| 820 | | - BCM_REFERENCE(osh); \ |
|---|
| 821 | | - (((struct sk_buff*)(skb))->__unused &= (~FWDERBUF)); \ |
|---|
| 822 | | - }) |
|---|
| 823 | | -#define PKTISFWDERBUF(osh, skb) \ |
|---|
| 824 | | - ({ \ |
|---|
| 825 | | - BCM_REFERENCE(osh); \ |
|---|
| 826 | | - (((struct sk_buff*)(skb))->__unused & FWDERBUF); \ |
|---|
| 827 | | - }) |
|---|
| 828 | | - |
|---|
| 829 | | -#endif /* 2.6.22 */ |
|---|
| 830 | | - |
|---|
| 831 | | -#else /* ! BCM_GMAC3 */ |
|---|
| 832 | | - |
|---|
| 833 | | -#define PKTSETFWDERBUF(osh, skb) ({ BCM_REFERENCE(osh); BCM_REFERENCE(skb); }) |
|---|
| 834 | | -#define PKTCLRFWDERBUF(osh, skb) ({ BCM_REFERENCE(osh); BCM_REFERENCE(skb); }) |
|---|
| 835 | | -#define PKTISFWDERBUF(osh, skb) ({ BCM_REFERENCE(osh); BCM_REFERENCE(skb); FALSE;}) |
|---|
| 836 | | - |
|---|
| 837 | | -#endif /* ! BCM_GMAC3 */ |
|---|
| 838 | | - |
|---|
| 839 | | - |
|---|
| 840 | | -#ifdef HNDCTF |
|---|
| 841 | | -/* For broadstream iqos */ |
|---|
| 842 | | - |
|---|
| 843 | | -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) |
|---|
| 844 | | -#define TOBR (1 << 5) |
|---|
| 845 | | -#define PKTSETTOBR(osh, skb) \ |
|---|
| 846 | | - ({ \ |
|---|
| 847 | | - BCM_REFERENCE(osh); \ |
|---|
| 848 | | - (((struct sk_buff*)(skb))->pktc_flags |= TOBR); \ |
|---|
| 849 | | - }) |
|---|
| 850 | | -#define PKTCLRTOBR(osh, skb) \ |
|---|
| 851 | | - ({ \ |
|---|
| 852 | | - BCM_REFERENCE(osh); \ |
|---|
| 853 | | - (((struct sk_buff*)(skb))->pktc_flags &= (~TOBR)); \ |
|---|
| 854 | | - }) |
|---|
| 855 | | -#define PKTISTOBR(skb) (((struct sk_buff*)(skb))->pktc_flags & TOBR) |
|---|
| 856 | | -#define PKTSETCTFIPCTXIF(skb, ifp) (((struct sk_buff*)(skb))->ctf_ipc_txif = ifp) |
|---|
| 857 | | -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) |
|---|
| 858 | | -#define PKTSETTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 859 | | -#define PKTCLRTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 860 | | -#define PKTISTOBR(skb) ({BCM_REFERENCE(skb); FALSE;}) |
|---|
| 861 | | -#define PKTSETCTFIPCTXIF(skb, ifp) ({BCM_REFERENCE(skb); BCM_REFERENCE(ifp);}) |
|---|
| 862 | | -#else /* 2.6.22 */ |
|---|
| 863 | | -#define PKTSETTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 864 | | -#define PKTCLRTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 865 | | -#define PKTISTOBR(skb) ({BCM_REFERENCE(skb); FALSE;}) |
|---|
| 866 | | -#define PKTSETCTFIPCTXIF(skb, ifp) ({BCM_REFERENCE(skb); BCM_REFERENCE(ifp);}) |
|---|
| 867 | | -#endif /* 2.6.22 */ |
|---|
| 868 | | -#else /* HNDCTF */ |
|---|
| 869 | | -#define PKTSETTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 870 | | -#define PKTCLRTOBR(osh, skb) ({BCM_REFERENCE(osh); BCM_REFERENCE(skb);}) |
|---|
| 871 | | -#define PKTISTOBR(skb) ({BCM_REFERENCE(skb); FALSE;}) |
|---|
| 872 | | -#endif /* HNDCTF */ |
|---|
| 873 | | - |
|---|
| 874 | | - |
|---|
| 875 | | -#ifdef BCMFA |
|---|
| 876 | | -#ifdef BCMFA_HW_HASH |
|---|
| 877 | | -#define PKTSETFAHIDX(skb, idx) (((struct sk_buff*)(skb))->napt_idx = idx) |
|---|
| 878 | | -#else |
|---|
| 879 | | -#define PKTSETFAHIDX(skb, idx) ({BCM_REFERENCE(skb); BCM_REFERENCE(idx);}) |
|---|
| 880 | | -#endif /* BCMFA_SW_HASH */ |
|---|
| 881 | | -#define PKTGETFAHIDX(skb) (((struct sk_buff*)(skb))->napt_idx) |
|---|
| 882 | | -#define PKTSETFADEV(skb, imp) (((struct sk_buff*)(skb))->dev = imp) |
|---|
| 883 | | -#define PKTSETRXDEV(skb) (((struct sk_buff*)(skb))->rxdev = ((struct sk_buff*)(skb))->dev) |
|---|
| 884 | | - |
|---|
| 885 | | -#define AUX_TCP_FIN_RST (1 << 0) |
|---|
| 886 | | -#define AUX_FREED (1 << 1) |
|---|
| 887 | | -#define PKTSETFAAUX(skb) (((struct sk_buff*)(skb))->napt_flags |= AUX_TCP_FIN_RST) |
|---|
| 888 | | -#define PKTCLRFAAUX(skb) (((struct sk_buff*)(skb))->napt_flags &= (~AUX_TCP_FIN_RST)) |
|---|
| 889 | | -#define PKTISFAAUX(skb) (((struct sk_buff*)(skb))->napt_flags & AUX_TCP_FIN_RST) |
|---|
| 890 | | -#define PKTSETFAFREED(skb) (((struct sk_buff*)(skb))->napt_flags |= AUX_FREED) |
|---|
| 891 | | -#define PKTCLRFAFREED(skb) (((struct sk_buff*)(skb))->napt_flags &= (~AUX_FREED)) |
|---|
| 892 | | -#define PKTISFAFREED(skb) (((struct sk_buff*)(skb))->napt_flags & AUX_FREED) |
|---|
| 893 | | -#define PKTISFABRIDGED(skb) PKTISFAAUX(skb) |
|---|
| 894 | | -#else |
|---|
| 895 | | -#define PKTISFAAUX(skb) ({BCM_REFERENCE(skb); FALSE;}) |
|---|
| 896 | | -#define PKTISFABRIDGED(skb) ({BCM_REFERENCE(skb); FALSE;}) |
|---|
| 897 | | -#define PKTISFAFREED(skb) ({BCM_REFERENCE(skb); FALSE;}) |
|---|
| 898 | | - |
|---|
| 899 | | -#define PKTCLRFAAUX(skb) BCM_REFERENCE(skb) |
|---|
| 900 | | -#define PKTSETFAFREED(skb) BCM_REFERENCE(skb) |
|---|
| 901 | | -#define PKTCLRFAFREED(skb) BCM_REFERENCE(skb) |
|---|
| 902 | | -#endif /* BCMFA */ |
|---|
| 903 | | - |
|---|
| 904 | | -#if defined(BCM_OBJECT_TRACE) |
|---|
| 905 | | -extern void osl_pktfree(osl_t *osh, void *skb, bool send, int line, const char *caller); |
|---|
| 906 | | -#else |
|---|
| 907 | | -extern void osl_pktfree(osl_t *osh, void *skb, bool send); |
|---|
| 908 | | -#endif /* BCM_OBJECT_TRACE */ |
|---|
| 909 | | -extern void *osl_pktget_static(osl_t *osh, uint len); |
|---|
| 910 | | -extern void osl_pktfree_static(osl_t *osh, void *skb, bool send); |
|---|
| 911 | | -extern void osl_pktclone(osl_t *osh, void **pkt); |
|---|
| 912 | | - |
|---|
| 913 | | -#ifdef BCMDBG_CTRACE |
|---|
| 914 | | -#define PKT_CTRACE_DUMP(osh, b) osl_ctrace_dump((osh), (b)) |
|---|
| 915 | | -extern void *osl_pktget(osl_t *osh, uint len, int line, char *file); |
|---|
| 916 | | -extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file); |
|---|
| 917 | | -extern int osl_pkt_is_frmnative(osl_t *osh, struct sk_buff *pkt); |
|---|
| 918 | | -extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file); |
|---|
| 919 | | -struct bcmstrbuf; |
|---|
| 920 | | -extern void osl_ctrace_dump(osl_t *osh, struct bcmstrbuf *b); |
|---|
| 921 | | -#else |
|---|
| 922 | | -#ifdef BCM_OBJECT_TRACE |
|---|
| 923 | | -extern void *osl_pktget(osl_t *osh, uint len, int line, const char *caller); |
|---|
| 924 | | -extern void *osl_pktdup(osl_t *osh, void *skb, int line, const char *caller); |
|---|
| 925 | | -#else |
|---|
| 926 | | -extern void *osl_pktget(osl_t *osh, uint len); |
|---|
| 927 | | -extern void *osl_pktdup(osl_t *osh, void *skb); |
|---|
| 928 | | -#endif /* BCM_OBJECT_TRACE */ |
|---|
| 929 | | -extern void *osl_pkt_frmnative(osl_t *osh, void *skb); |
|---|
| 930 | | -#endif /* BCMDBG_CTRACE */ |
|---|
| 931 | | -extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt); |
|---|
| 932 | | -#ifdef BCMDBG_CTRACE |
|---|
| 933 | | -#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), \ |
|---|
| 934 | | - (struct sk_buff*)(skb), __LINE__, __FILE__) |
|---|
| 935 | | -#define PKTISFRMNATIVE(osh, skb) osl_pkt_is_frmnative((osl_t *)(osh), (struct sk_buff *)(skb)) |
|---|
| 936 | | -#else |
|---|
| 937 | | -#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), (struct sk_buff*)(skb)) |
|---|
| 938 | | -#endif /* BCMDBG_CTRACE */ |
|---|
| 939 | | -#define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osl_t *)(osh), (pkt)) |
|---|
| 940 | | - |
|---|
| 941 | | -#define PKTLINK(skb) (((struct sk_buff*)(skb))->prev) |
|---|
| 942 | | -#define PKTSETLINK(skb, x) (((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x)) |
|---|
| 943 | | -#define PKTPRIO(skb) (((struct sk_buff*)(skb))->priority) |
|---|
| 944 | | -#define PKTSETPRIO(skb, x) (((struct sk_buff*)(skb))->priority = (x)) |
|---|
| 945 | | -#define PKTSUMNEEDED(skb) (((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW) |
|---|
| 946 | | -#define PKTSETSUMGOOD(skb, x) (((struct sk_buff*)(skb))->ip_summed = \ |
|---|
| 947 | | - ((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE)) |
|---|
| 948 | | -/* PKTSETSUMNEEDED and PKTSUMGOOD are not possible because skb->ip_summed is overloaded */ |
|---|
| 949 | | -#define PKTSHARED(skb) (((struct sk_buff*)(skb))->cloned) |
|---|
| 950 | | - |
|---|
| 951 | | -#ifdef CONFIG_NF_CONNTRACK_MARK |
|---|
| 952 | | -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)) |
|---|
| 953 | | -#define PKTMARK(p) (((struct sk_buff *)(p))->mark) |
|---|
| 954 | | -#define PKTSETMARK(p, m) ((struct sk_buff *)(p))->mark = (m) |
|---|
| 955 | | -#else /* !2.6.0 */ |
|---|
| 956 | | -#define PKTMARK(p) (((struct sk_buff *)(p))->nfmark) |
|---|
| 957 | | -#define PKTSETMARK(p, m) ((struct sk_buff *)(p))->nfmark = (m) |
|---|
| 958 | | -#endif /* 2.6.0 */ |
|---|
| 959 | | -#else /* CONFIG_NF_CONNTRACK_MARK */ |
|---|
| 960 | | -#define PKTMARK(p) 0 |
|---|
| 961 | | -#define PKTSETMARK(p, m) |
|---|
| 962 | | -#endif /* CONFIG_NF_CONNTRACK_MARK */ |
|---|
| 963 | | - |
|---|
| 964 | | -#define PKTALLOCED(osh) osl_pktalloced(osh) |
|---|
| 965 | | -extern uint osl_pktalloced(osl_t *osh); |
|---|
| 966 | | - |
|---|
| 967 | 469 | #define OSL_RAND() osl_rand() |
|---|
| 968 | 470 | extern uint32 osl_rand(void); |
|---|
| 969 | 471 | |
|---|
| 472 | +#define DMA_FLUSH(osh, va, size, direction, p, dmah) \ |
|---|
| 473 | + osl_dma_flush((osh), (va), (size), (direction), (p), (dmah)) |
|---|
| 970 | 474 | #if !defined(BCM_SECURE_DMA) |
|---|
| 971 | 475 | #define DMA_MAP(osh, va, size, direction, p, dmah) \ |
|---|
| 972 | 476 | osl_dma_map((osh), (va), (size), (direction), (p), (dmah)) |
|---|
| 973 | 477 | #endif /* !(defined(BCM_SECURE_DMA)) */ |
|---|
| 974 | 478 | |
|---|
| 975 | | -#ifdef PKTC |
|---|
| 976 | | -/* Use 8 bytes of skb tstamp field to store below info */ |
|---|
| 977 | | -struct chain_node { |
|---|
| 978 | | - struct sk_buff *link; |
|---|
| 979 | | - unsigned int flags:3, pkts:9, bytes:20; |
|---|
| 980 | | -}; |
|---|
| 981 | | - |
|---|
| 982 | | -#define CHAIN_NODE(skb) ((struct chain_node*)(((struct sk_buff*)skb)->pktc_cb)) |
|---|
| 983 | | - |
|---|
| 984 | | -#define PKTCSETATTR(s, f, p, b) ({CHAIN_NODE(s)->flags = (f); CHAIN_NODE(s)->pkts = (p); \ |
|---|
| 985 | | - CHAIN_NODE(s)->bytes = (b);}) |
|---|
| 986 | | -#define PKTCCLRATTR(s) ({CHAIN_NODE(s)->flags = CHAIN_NODE(s)->pkts = \ |
|---|
| 987 | | - CHAIN_NODE(s)->bytes = 0;}) |
|---|
| 988 | | -#define PKTCGETATTR(s) (CHAIN_NODE(s)->flags << 29 | CHAIN_NODE(s)->pkts << 20 | \ |
|---|
| 989 | | - CHAIN_NODE(s)->bytes) |
|---|
| 990 | | -#define PKTCCNT(skb) (CHAIN_NODE(skb)->pkts) |
|---|
| 991 | | -#define PKTCLEN(skb) (CHAIN_NODE(skb)->bytes) |
|---|
| 992 | | -#define PKTCGETFLAGS(skb) (CHAIN_NODE(skb)->flags) |
|---|
| 993 | | -#define PKTCSETFLAGS(skb, f) (CHAIN_NODE(skb)->flags = (f)) |
|---|
| 994 | | -#define PKTCCLRFLAGS(skb) (CHAIN_NODE(skb)->flags = 0) |
|---|
| 995 | | -#define PKTCFLAGS(skb) (CHAIN_NODE(skb)->flags) |
|---|
| 996 | | -#define PKTCSETCNT(skb, c) (CHAIN_NODE(skb)->pkts = (c)) |
|---|
| 997 | | -#define PKTCINCRCNT(skb) (CHAIN_NODE(skb)->pkts++) |
|---|
| 998 | | -#define PKTCADDCNT(skb, c) (CHAIN_NODE(skb)->pkts += (c)) |
|---|
| 999 | | -#define PKTCSETLEN(skb, l) (CHAIN_NODE(skb)->bytes = (l)) |
|---|
| 1000 | | -#define PKTCADDLEN(skb, l) (CHAIN_NODE(skb)->bytes += (l)) |
|---|
| 1001 | | -#define PKTCSETFLAG(skb, fb) (CHAIN_NODE(skb)->flags |= (fb)) |
|---|
| 1002 | | -#define PKTCCLRFLAG(skb, fb) (CHAIN_NODE(skb)->flags &= ~(fb)) |
|---|
| 1003 | | -#define PKTCLINK(skb) (CHAIN_NODE(skb)->link) |
|---|
| 1004 | | -#define PKTSETCLINK(skb, x) (CHAIN_NODE(skb)->link = (struct sk_buff*)(x)) |
|---|
| 1005 | | -#define FOREACH_CHAINED_PKT(skb, nskb) \ |
|---|
| 1006 | | - for (; (skb) != NULL; (skb) = (nskb)) \ |
|---|
| 1007 | | - if ((nskb) = (PKTISCHAINED(skb) ? PKTCLINK(skb) : NULL), \ |
|---|
| 1008 | | - PKTSETCLINK((skb), NULL), 1) |
|---|
| 1009 | | -#define PKTCFREE(osh, skb, send) \ |
|---|
| 1010 | | -do { \ |
|---|
| 1011 | | - void *nskb; \ |
|---|
| 1012 | | - ASSERT((skb) != NULL); \ |
|---|
| 1013 | | - FOREACH_CHAINED_PKT((skb), nskb) { \ |
|---|
| 1014 | | - PKTCLRCHAINED((osh), (skb)); \ |
|---|
| 1015 | | - PKTCCLRFLAGS((skb)); \ |
|---|
| 1016 | | - PKTFREE((osh), (skb), (send)); \ |
|---|
| 1017 | | - } \ |
|---|
| 1018 | | -} while (0) |
|---|
| 1019 | | -#define PKTCENQTAIL(h, t, p) \ |
|---|
| 1020 | | -do { \ |
|---|
| 1021 | | - if ((t) == NULL) { \ |
|---|
| 1022 | | - (h) = (t) = (p); \ |
|---|
| 1023 | | - } else { \ |
|---|
| 1024 | | - PKTSETCLINK((t), (p)); \ |
|---|
| 1025 | | - (t) = (p); \ |
|---|
| 1026 | | - } \ |
|---|
| 1027 | | -} while (0) |
|---|
| 1028 | | -#endif /* PKTC */ |
|---|
| 1029 | | - |
|---|
| 1030 | 479 | #else /* ! BCMDRIVER */ |
|---|
| 1031 | | - |
|---|
| 1032 | 480 | |
|---|
| 1033 | 481 | /* ASSERT */ |
|---|
| 1034 | 482 | #define ASSERT(exp) do {} while (0) |
|---|
| .. | .. |
|---|
| 1050 | 498 | extern void bzero(void *b, size_t len); |
|---|
| 1051 | 499 | #endif /* ! BCMDRIVER */ |
|---|
| 1052 | 500 | |
|---|
| 1053 | | - |
|---|
| 1054 | 501 | /* Current STB 7445D1 doesn't use ACP and it is non-coherrent. |
|---|
| 1055 | 502 | * Adding these dummy values for build apss only |
|---|
| 1056 | 503 | * When we revisit need to change these. |
|---|
| 1057 | 504 | */ |
|---|
| 1058 | | -#if defined(STBLINUX) |
|---|
| 1059 | | - |
|---|
| 1060 | | -#if defined(__ARM_ARCH_7A__) |
|---|
| 1061 | | -#define ACP_WAR_ENAB() 0 |
|---|
| 1062 | | -#define ACP_WIN_LIMIT 1 |
|---|
| 1063 | | -#define arch_is_coherent() 0 |
|---|
| 1064 | | -#endif /* __ARM_ARCH_7A__ */ |
|---|
| 1065 | | - |
|---|
| 1066 | | -#endif /* STBLINUX */ |
|---|
| 1067 | 505 | |
|---|
| 1068 | 506 | #ifdef BCM_SECURE_DMA |
|---|
| 1069 | 507 | |
|---|
| .. | .. |
|---|
| 1096 | 534 | #define CMA_DMA_DESC_MEMBLOCK (SEC_CMA_COHERENT_BLK * SEC_CMA_COHERENT_MAX) |
|---|
| 1097 | 535 | #define CMA_DMA_DATA_MEMBLOCK (CMA_BUFSIZE_4K*CMA_BUFNUM) |
|---|
| 1098 | 536 | #define CMA_MEMBLOCK (CMA_DMA_DESC_MEMBLOCK + CMA_DMA_DATA_MEMBLOCK) |
|---|
| 537 | +#define CONT_REGION 0x02 /* Region CMA */ |
|---|
| 538 | +#else |
|---|
| 539 | +#define CONT_REGION 0x00 /* To access the MIPs mem, Not yet... */ |
|---|
| 1099 | 540 | #endif /* !defined __ARM_ARCH_7A__ */ |
|---|
| 1100 | 541 | |
|---|
| 1101 | 542 | #define SEC_DMA_ALIGN (1<<16) |
|---|
| .. | .. |
|---|
| 1129 | 570 | #define PKTLIST_UNLINK(x, y) skb_unlink((struct sk_buff *)(y), (struct sk_buff_head *)(x)) |
|---|
| 1130 | 571 | #define PKTLIST_FINI(x) skb_queue_purge((struct sk_buff_head *)(x)) |
|---|
| 1131 | 572 | |
|---|
| 573 | +#ifndef _linuxver_h_ |
|---|
| 574 | +typedef struct timer_list_compat timer_list_compat_t; |
|---|
| 575 | +#endif /* _linuxver_h_ */ |
|---|
| 576 | +typedef struct osl_timer { |
|---|
| 577 | + timer_list_compat_t *timer; |
|---|
| 578 | + bool set; |
|---|
| 579 | +} osl_timer_t; |
|---|
| 580 | + |
|---|
| 581 | +typedef void (*linux_timer_fn)(ulong arg); |
|---|
| 582 | + |
|---|
| 583 | +extern osl_timer_t * osl_timer_init(osl_t *osh, const char *name, void (*fn)(void *arg), void *arg); |
|---|
| 584 | +extern void osl_timer_add(osl_t *osh, osl_timer_t *t, uint32 ms, bool periodic); |
|---|
| 585 | +extern void osl_timer_update(osl_t *osh, osl_timer_t *t, uint32 ms, bool periodic); |
|---|
| 586 | +extern bool osl_timer_del(osl_t *osh, osl_timer_t *t); |
|---|
| 587 | + |
|---|
| 588 | +typedef atomic_t osl_atomic_t; |
|---|
| 589 | +#define OSL_ATOMIC_SET(osh, v, x) atomic_set(v, x) |
|---|
| 590 | +#define OSL_ATOMIC_INIT(osh, v) atomic_set(v, 0) |
|---|
| 591 | +#define OSL_ATOMIC_INC(osh, v) atomic_inc(v) |
|---|
| 592 | +#define OSL_ATOMIC_INC_RETURN(osh, v) atomic_inc_return(v) |
|---|
| 593 | +#define OSL_ATOMIC_DEC(osh, v) atomic_dec(v) |
|---|
| 594 | +#define OSL_ATOMIC_DEC_RETURN(osh, v) atomic_dec_return(v) |
|---|
| 595 | +#define OSL_ATOMIC_READ(osh, v) atomic_read(v) |
|---|
| 596 | +#define OSL_ATOMIC_ADD(osh, v, x) atomic_add(v, x) |
|---|
| 597 | + |
|---|
| 598 | +#ifndef atomic_set_mask |
|---|
| 599 | +#define OSL_ATOMIC_OR(osh, v, x) atomic_or(x, v) |
|---|
| 600 | +#define OSL_ATOMIC_AND(osh, v, x) atomic_and(x, v) |
|---|
| 601 | +#else |
|---|
| 602 | +#define OSL_ATOMIC_OR(osh, v, x) atomic_set_mask(x, v) |
|---|
| 603 | +#define OSL_ATOMIC_AND(osh, v, x) atomic_clear_mask(~x, v) |
|---|
| 604 | +#endif // endif |
|---|
| 605 | + |
|---|
| 606 | +#include <linux/rbtree.h> |
|---|
| 607 | + |
|---|
| 608 | +typedef struct rb_node osl_rb_node_t; |
|---|
| 609 | +typedef struct rb_root osl_rb_root_t; |
|---|
| 610 | + |
|---|
| 611 | +#define OSL_RB_ENTRY(ptr, type, member) rb_entry(ptr, type, member) |
|---|
| 612 | +#define OSL_RB_INSERT_COLOR(root, node) rb_insert_color(root, node) |
|---|
| 613 | +#define OSL_RB_ERASE(node, root) rb_erase(node, root) |
|---|
| 614 | +#define OSL_RB_FIRST(root) rb_first(root) |
|---|
| 615 | +#define OSL_RB_LAST(root) rb_last(root) |
|---|
| 616 | +#define OSL_RB_LINK_NODE(node, parent, rb_link) \ |
|---|
| 617 | + rb_link_node(node, parent, rb_link) |
|---|
| 618 | + |
|---|
| 619 | +extern void *osl_spin_lock_init(osl_t *osh); |
|---|
| 620 | +extern void osl_spin_lock_deinit(osl_t *osh, void *lock); |
|---|
| 621 | +extern unsigned long osl_spin_lock(void *lock); |
|---|
| 622 | +extern void osl_spin_unlock(void *lock, unsigned long flags); |
|---|
| 1132 | 623 | #endif /* _linux_osl_h_ */ |
|---|