hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linux_osl.h
....@@ -1,15 +1,16 @@
1
-/* SPDX-License-Identifier: GPL-2.0 */
21 /*
32 * Linux OS Independent Layer
43 *
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
+ *
78 * Unless you and Broadcom execute a separate written software license
89 * agreement governing use of this software, this software is licensed to you
910 * under the terms of the GNU General Public License version 2 (the "GPL"),
1011 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
1112 * following added to such license:
12
- *
13
+ *
1314 * As a special exception, the copyright holders of this software give you
1415 * permission to link this software with independent modules, and to copy and
1516 * distribute the resulting executable under terms of your choice, provided that
....@@ -17,7 +18,7 @@
1718 * the license of that module. An independent module is a module which is not
1819 * derived from this software. The special exception does not apply to any
1920 * modifications of the software.
20
- *
21
+ *
2122 * Notwithstanding the above, under no circumstances may you combine this
2223 * software in any way with any other Broadcom software provided under a license
2324 * other than the GPL, without Broadcom's express prior written consent.
....@@ -25,7 +26,7 @@
2526 *
2627 * <<Broadcom-WL-IPTag/Open:>>
2728 *
28
- * $Id: linux_osl.h 606142 2015-12-14 14:34:29Z $
29
+ * $Id: linux_osl.h 692391 2017-03-28 00:29:04Z $
2930 */
3031
3132 #ifndef _linux_osl_h_
....@@ -33,7 +34,6 @@
3334
3435 #include <typedefs.h>
3536 #define DECLSPEC_ALIGN(x) __attribute__ ((aligned(x)))
36
-
3737 /* Linux Kernel: File Operations: start */
3838 extern void * osl_os_open_image(char * filename);
3939 extern int osl_os_get_image_block(char * buf, int len, void * image);
....@@ -44,17 +44,19 @@
4444 #ifdef BCMDRIVER
4545
4646 /* OSL initialization */
47
-#ifdef SHARED_OSL_CMN
48
-extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag, void **osh_cmn);
49
-#else
5047 extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag);
51
-#endif /* SHARED_OSL_CMN */
5248
5349 extern void osl_detach(osl_t *osh);
5450 extern int osl_static_mem_init(osl_t *osh, void *adapter);
5551 extern int osl_static_mem_deinit(osl_t *osh, void *adapter);
5652 extern void osl_set_bus_handle(osl_t *osh, void *bus_handle);
5753 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 */
5860
5961 /* Global ASSERT type */
6062 extern uint32 g_assert_type;
....@@ -71,6 +73,7 @@
7173 #define PRI_FMT_d "d"
7274 #endif /* CONFIG_PHYS_ADDR_T_64BIT */
7375 /* ASSERT */
76
+#ifndef ASSERT
7477 #if defined(BCMASSERT_LOG)
7578 #define ASSERT(exp) \
7679 do { if (!(exp)) osl_assert(#exp, __FILE__, __LINE__); } while (0)
....@@ -86,7 +89,8 @@
8689 #define ASSERT(exp)
8790 #endif /* GCC_VERSION > 30100 */
8891 #endif /* __GNUC__ */
89
-#endif
92
+#endif // endif
93
+#endif /* ASSERT */
9094
9195 /* bcm_prefetch_32B */
9296 static inline void bcm_prefetch_32B(const uint8 *addr, const int cachelines_32B)
....@@ -98,7 +102,7 @@
98102 case 2: __asm__ __volatile__("pld\t%a0" :: "p"(addr + 32) : "cc");
99103 case 1: __asm__ __volatile__("pld\t%a0" :: "p"(addr + 0) : "cc");
100104 }
101
-#endif
105
+#endif // endif
102106 }
103107
104108 /* microsecond delay */
....@@ -144,6 +148,8 @@
144148 pktfree_cb_fn_t tx_fn; /**< Callback function for PKTFREE */
145149 void *tx_ctx; /**< Context to the callback function */
146150 void *unused[3];
151
+ void (*rx_fn)(void *rx_ctx, void *p);
152
+ void *rx_ctx;
147153 } osl_pubinfo_t;
148154
149155 extern void osl_flag_set(osl_t *osh, uint32 mask);
....@@ -156,20 +162,30 @@
156162 ((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \
157163 } while (0)
158164
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)
159170
160171 /* host/bus architecture-specific byte swap */
161172 #define BUS_SWAP32(v) (v)
162173 #define MALLOC(osh, size) osl_malloc((osh), (size))
163174 #define MALLOCZ(osh, size) osl_mallocz((osh), (size))
164175 #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))
165179 #define MALLOCED(osh) osl_malloced((osh))
166180 #define MEMORY_LEFTOVER(osh) osl_check_memleak(osh)
167181 extern void *osl_malloc(osl_t *osh, uint size);
168182 extern void *osl_mallocz(osl_t *osh, uint size);
169183 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);
170187 extern uint osl_malloced(osl_t *osh);
171188 extern uint osl_check_memleak(osl_t *osh);
172
-
173189
174190 #define MALLOC_FAILED(osh) osl_malloc_failed((osh))
175191 extern uint osl_malloc_failed(osl_t *osh);
....@@ -199,9 +215,20 @@
199215 /* map/unmap shared (dma-able) memory */
200216 #define DMA_UNMAP(osh, pa, size, direction, p, dmah) \
201217 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);
202220 extern dmaaddr_t osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p,
203221 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);
205232
206233 /* API for DMA addressing capability */
207234 #define OSL_DMADDRWIDTH(osh, addrwidth) ({BCM_REFERENCE(osh); BCM_REFERENCE(addrwidth);})
....@@ -212,15 +239,20 @@
212239 extern void osl_cpu_relax(void);
213240 #define OSL_CPU_RELAX() osl_cpu_relax()
214241
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
+
215247 #if (!defined(DHD_USE_COHERENT_MEM_FOR_RING) && defined(__ARM_ARCH_7A__)) || \
216
- (defined(STBLINUX) && defined(__ARM_ARCH_7A__))
248
+ defined(STB_SOC_WIFI)
217249 extern void osl_cache_flush(void *va, uint size);
218250 extern void osl_cache_inv(void *va, uint size);
219251 extern void osl_prefetch(const void *ptr);
220252 #define OSL_CACHE_FLUSH(va, len) osl_cache_flush((void *)(va), len)
221253 #define OSL_CACHE_INV(va, len) osl_cache_inv((void *)(va), len)
222254 #define OSL_PREFETCH(ptr) osl_prefetch(ptr)
223
-#if defined(__ARM_ARCH_7A__)
255
+#if defined(__ARM_ARCH_7A__) || defined(STB_SOC_WIFI)
224256 extern int osl_arch_is_coherent(void);
225257 #define OSL_ARCH_IS_COHERENT() osl_arch_is_coherent()
226258 extern int osl_acp_war_enab(void);
....@@ -236,7 +268,16 @@
236268
237269 #define OSL_ARCH_IS_COHERENT() NULL
238270 #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
240281
241282 /* register access macros */
242283 #if defined(BCMSDIO)
....@@ -245,21 +286,26 @@
245286 (uintptr)(r), sizeof(*(r)), (v)))
246287 #define OSL_READ_REG(osh, r) (bcmsdh_reg_read(osl_get_bus_handle(osh), \
247288 (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)
251290 #define OSL_READ_REG(osh, r) \
252291 ({\
253292 __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))); \
255294 __osl_v; \
256295 })
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
258304
259
-#if (defined(STB) && defined(__arm__))
305
+#if defined(BCM_BACKPLANE_TIMEOUT) || (defined(STB) && defined(__arm__))
260306 #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;})
261307 #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__) */
263309 #if defined(BCMSDIO)
264310 #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \
265311 mmap_op else bus_op
....@@ -268,8 +314,8 @@
268314 #else
269315 #define SELECT_BUS_WRITE(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;})
270316 #define SELECT_BUS_READ(osh, mmap_op, bus_op) ({BCM_REFERENCE(osh); mmap_op;})
271
-#endif
272
-#endif
317
+#endif // endif
318
+#endif // endif
273319
274320 #define OSL_ERROR(bcmerror) osl_error(bcmerror)
275321 extern int osl_error(int bcmerror);
....@@ -286,27 +332,35 @@
286332 #include <linuxver.h> /* use current 2.4.x calling conventions */
287333 #include <linux/kernel.h> /* for vsn/printf's */
288334 #include <linux/string.h> /* for mem*, str* */
289
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 29)
335
+extern uint64 osl_sysuptime_us(void);
290336 #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()
294344 #define printf(fmt, args...) printk(fmt , ## args)
295345 #include <linux/kernel.h> /* for vsn/printf's */
296346 #include <linux/string.h> /* for mem*, str* */
297347 /* 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()
298351 #define bcopy(src, dst, len) memcpy((dst), (src), (len))
299352 #define bcmp(b1, b2, len) memcmp((b1), (b2), (len))
300353 #define bzero(b, len) memset((b), '\0', (len))
301354
302355 /* register access macros */
303356
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 */
306359 #define R_REG(osh, r) (\
307360 SELECT_BUS_READ(osh, \
308361 ({ \
309
- __typeof(*(r)) __osl_v; \
362
+ __typeof(*(r)) __osl_v = 0; \
363
+ BCM_REFERENCE(osh); \
310364 switch (sizeof(*(r))) { \
311365 case sizeof(uint8): __osl_v = \
312366 readb((volatile uint8*)(r)); break; \
....@@ -315,17 +369,17 @@
315369 case sizeof(uint32): __osl_v = \
316370 readl((volatile uint32*)(r)); break; \
317371 case sizeof(uint64): __osl_v = \
318
- readq((volatile uint64*)(r)); break; \
372
+ readq((volatile uint64*)(r)); break; \
319373 } \
320374 __osl_v; \
321375 }), \
322376 OSL_READ_REG(osh, r)) \
323377 )
324
-#else
378
+#else /* !CONFIG_64BIT */
325379 #define R_REG(osh, r) (\
326380 SELECT_BUS_READ(osh, \
327381 ({ \
328
- __typeof(*(r)) __osl_v; \
382
+ __typeof(*(r)) __osl_v = 0; \
329383 switch (sizeof(*(r))) { \
330384 case sizeof(uint8): __osl_v = \
331385 readb((volatile uint8*)(r)); break; \
....@@ -338,9 +392,10 @@
338392 }), \
339393 OSL_READ_REG(osh, r)) \
340394 )
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 */
344399 #define W_REG(osh, r, v) do { \
345400 SELECT_BUS_WRITE(osh, \
346401 switch (sizeof(*(r))) { \
....@@ -351,7 +406,8 @@
351406 }, \
352407 (OSL_WRITE_REG(osh, r, v))); \
353408 } while (0)
354
-#else
409
+
410
+#else /* !CONFIG_64BIT */
355411 #define W_REG(osh, r, v) do { \
356412 SELECT_BUS_WRITE(osh, \
357413 switch (sizeof(*(r))) { \
....@@ -361,7 +417,7 @@
361417 }, \
362418 (OSL_WRITE_REG(osh, r, v))); \
363419 } while (0)
364
-#endif /* KERNEL_VERSION(3, 11, 1)) && defined(CONFIG_64BIT) && defined(CONFIG_X86) */
420
+#endif /* CONFIG_64BIT */
365421
366422 #define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v))
367423 #define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v))
....@@ -383,14 +439,18 @@
383439 #define OSL_GETCYCLES(x) rdtscl((x))
384440 #else
385441 #define OSL_GETCYCLES(x) ((x) = 0)
386
-#endif
442
+#endif // endif
387443
388444 /* dereference an address that may cause a bus exception */
389445 #define BUSPROBE(val, addr) ({ (val) = R_REG(NULL, (addr)); 0; })
390446
391447 /* map/unmap physical to virtual I/O */
392448 #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) */
394454 #else
395455 #define REG_MAP(pa, size) (void *)(0)
396456 #endif /* !defined(CONFIG_MMC_MSM7X00A */
....@@ -406,629 +466,17 @@
406466 */
407467 #include <linuxver.h> /* use current 2.4.x calling conventions */
408468
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
-
967469 #define OSL_RAND() osl_rand()
968470 extern uint32 osl_rand(void);
969471
472
+#define DMA_FLUSH(osh, va, size, direction, p, dmah) \
473
+ osl_dma_flush((osh), (va), (size), (direction), (p), (dmah))
970474 #if !defined(BCM_SECURE_DMA)
971475 #define DMA_MAP(osh, va, size, direction, p, dmah) \
972476 osl_dma_map((osh), (va), (size), (direction), (p), (dmah))
973477 #endif /* !(defined(BCM_SECURE_DMA)) */
974478
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
-
1030479 #else /* ! BCMDRIVER */
1031
-
1032480
1033481 /* ASSERT */
1034482 #define ASSERT(exp) do {} while (0)
....@@ -1050,20 +498,10 @@
1050498 extern void bzero(void *b, size_t len);
1051499 #endif /* ! BCMDRIVER */
1052500
1053
-
1054501 /* Current STB 7445D1 doesn't use ACP and it is non-coherrent.
1055502 * Adding these dummy values for build apss only
1056503 * When we revisit need to change these.
1057504 */
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 */
1067505
1068506 #ifdef BCM_SECURE_DMA
1069507
....@@ -1096,6 +534,9 @@
1096534 #define CMA_DMA_DESC_MEMBLOCK (SEC_CMA_COHERENT_BLK * SEC_CMA_COHERENT_MAX)
1097535 #define CMA_DMA_DATA_MEMBLOCK (CMA_BUFSIZE_4K*CMA_BUFNUM)
1098536 #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... */
1099540 #endif /* !defined __ARM_ARCH_7A__ */
1100541
1101542 #define SEC_DMA_ALIGN (1<<16)
....@@ -1129,4 +570,54 @@
1129570 #define PKTLIST_UNLINK(x, y) skb_unlink((struct sk_buff *)(y), (struct sk_buff_head *)(x))
1130571 #define PKTLIST_FINI(x) skb_queue_purge((struct sk_buff_head *)(x))
1131572
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);
1132623 #endif /* _linux_osl_h_ */