.. | .. |
---|
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_ */ |
---|