| /* |
| * OS Abstraction Layer |
| * |
| * Copyright (C) 2024, Broadcom. |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * |
| * <<Broadcom-WL-IPTag/Dual:>> |
| */ |
| |
| #ifndef _osl_h_ |
| #define _osl_h_ |
| |
| #include <osl_decl.h> |
| |
| enum { |
| TAIL_BYTES_TYPE_FCS = 1, |
| TAIL_BYTES_TYPE_ICV = 2, |
| TAIL_BYTES_TYPE_MIC = 3 |
| }; |
| |
| #ifdef DHD_EFI |
| #define OSL_PKTTAG_SZ 40 /* Size of PktTag */ |
| #elif defined(MACOSX) |
| #define OSL_PKTTAG_SZ 56 |
| #elif defined(__linux__) |
| #define OSL_PKTTAG_SZ 48 /* standard linux pkttag size is 48 bytes */ |
| #else |
| #ifndef OSL_PKTTAG_SZ |
| #define OSL_PKTTAG_SZ 32 /* Size of PktTag */ |
| #endif /* !OSL_PKTTAG_SZ */ |
| #endif /* DHD_EFI */ |
| |
| /* Drivers use PKTFREESETCB to register a callback function when a packet is freed by OSL */ |
| typedef void (*pktfree_cb_fn_t)(void *ctx, void *pkt, unsigned int status); |
| |
| /* Drivers use REGOPSSET() to register register read/write funcitons */ |
| typedef unsigned int (*osl_rreg_fn_t)(void *ctx, volatile void *reg, unsigned int size); |
| typedef void (*osl_wreg_fn_t)(void *ctx, volatile void *reg, unsigned int val, unsigned int size); |
| |
| #if defined(EFI) |
| #include <efi_osl.h> |
| #elif defined(WL_UNITTEST) |
| #include <utest_osl.h> |
| #elif defined(__linux__) |
| #include <linux_osl.h> |
| #include <linux_pkt.h> |
| #elif defined(NDIS) |
| #include <ndis_osl.h> |
| #elif defined(_RTE_) |
| #include <rte_osl.h> |
| #include <hnd_pkt.h> |
| #elif defined(COEX_OSL) |
| #include <coex_osl.h> |
| #elif defined(MACOSX) |
| #include <macosx_osl.h> |
| #else |
| #error "Unsupported OSL requested" |
| #endif /* defined(DOS) */ |
| |
| #ifndef PKTDBG_TRACE |
| #define PKTDBG_TRACE(osh, pkt, bit) BCM_REFERENCE(osh) |
| #endif |
| |
| #ifndef BCM_UPTIME_PROFILE |
| #define OSL_GETCYCLES_PROF(x) |
| #endif |
| |
| /* -------------------------------------------------------------------------- |
| ** Register manipulation macros. |
| */ |
| |
| #define SET_REG(osh, r, mask, val) W_REG((osh), (r), ((R_REG((osh), r) & ~(mask)) | (val))) |
| |
| #ifndef AND_REG |
| #define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v)) |
| #endif /* !AND_REG */ |
| |
| #ifndef OR_REG |
| #define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v)) |
| #endif /* !OR_REG */ |
| |
| /** |
| * @brief API to either read or read, modify, write, read a 32bit register. |
| * Modify the value in a register. If the mask or val are not zero, this will bitwise-or val into |
| * the register at the address after masking the value read from the register with the provided |
| * mask. This process is sometimes referred to as Read-Modify-Write (RMW). This replaces the |
| * functionality provided by si_corereg for the dongle. When mask and val are zero, this macro |
| * behaves the same as R_REG. |
| * @param addr Backplane address to perform an operation on as a uint32. |
| * @param mask Bitmask for the value that will be written. |
| * @param val Value to and into the register at the address. |
| * @return The value in the register at the provided address after the optional write. |
| */ |
| #define RMWR_REG(addr, mask, val) ({ \ |
| if ((mask != 0) || (val != 0)) { \ |
| SET_REG(NULL, (uint32 *)(uintptr)(addr), (mask), (val)); \ |
| } \ |
| R_REG(NULL, (uint32 *)(uintptr)(addr)); \ |
| }) |
| |
| #if !defined(OSL_SYSUPTIME) |
| #define OSL_SYSUPTIME() (0) |
| #define OSL_SYSUPTIME_NOT_DEFINED 1 |
| #endif /* !defined(OSL_SYSUPTIME) */ |
| |
| #if !defined(OSL_SYSUPTIME_US) |
| #define OSL_SYSUPTIME_US() (0) |
| #define OSL_SYSUPTIME_US_NOT_DEFINED 1 |
| #endif /* !defined(OSL_SYSUPTIME) */ |
| |
| #if defined(OSL_SYSUPTIME_NOT_DEFINED) && defined(OSL_SYSUPTIME_US_NOT_DEFINED) |
| #define OSL_SYSUPTIME_SUPPORT FALSE |
| #else |
| #define OSL_SYSUPTIME_SUPPORT TRUE |
| #endif /* OSL_SYSUPTIME */ |
| |
| #ifndef OSL_GET_LOCALTIME |
| #define OSL_GET_LOCALTIME(sec, usec) \ |
| do { \ |
| BCM_REFERENCE(sec); \ |
| BCM_REFERENCE(usec); \ |
| } while (0) |
| #endif /* OSL_GET_LOCALTIME */ |
| |
| #ifndef OSL_LOCALTIME_NS |
| #define OSL_LOCALTIME_NS() (OSL_SYSUPTIME_US() * NSEC_PER_USEC) |
| #endif /* OSL_LOCALTIME_NS */ |
| |
| #ifndef OSL_SYSTZTIME_US |
| #define OSL_SYSTZTIME_US() OSL_SYSUPTIME_US() |
| #endif /* OSL_GET_SYSTZTIME */ |
| |
| #if !defined(OSL_CPU_COUNTS_PER_US) |
| #define OSL_CPU_COUNTS_PER_US() (0) |
| #define OSL_CPU_COUNTS_PER_US_NOT_DEFINED 1 |
| #endif /* !defined(OSL_CPU_COUNTS_PER_US) */ |
| |
| #if !defined(OSL_GET_PMU_ACCU_TICK_US) |
| #define OSL_GET_PMU_ACCU_TICK_US(val) (0) |
| #endif /* !OSL_GET_PMU_ACCU_TICK_US */ |
| |
| #if !defined(OSL_GET_PMU_ACCU_TICK64_US) |
| #define OSL_GET_PMU_ACCU_TICK64_US(val) (0) |
| #endif /* !OSL_GET_PMU_ACCU_TICK64_US */ |
| |
| #ifndef OSL_SYS_HALT |
| #ifdef __COVERITY__ |
| /* |
| * For Coverity builds, provide a definition that allows Coverity |
| * to model the lack of return. This avoids Coverity False Positive |
| * defects associated with data inconsistency being detected after |
| * we otherwise would have halted. |
| */ |
| #define OSL_SYS_HALT() __coverity_panic__() |
| #else /* __COVERITY__ */ |
| #define OSL_SYS_HALT() do {} while (0) |
| #endif /* __COVERITY__ */ |
| #endif /* OSL_SYS_HALT */ |
| |
| #ifndef DMB |
| #define DMB() do {} while (0) |
| #endif /* DMB */ |
| |
| #ifndef OSL_MEM_AVAIL |
| #define OSL_MEM_AVAIL() (0xffffffff) |
| #endif |
| |
| #ifndef OSL_OBFUSCATE_BUF |
| #define OSL_OBFUSCATE_BUF(x) (x) |
| #endif /* OSL_OBFUSCATE_BUF */ |
| |
| #if !defined(PKTC_DONGLE) |
| #define PKTCGETATTR(skb) (0) |
| #define PKTCSETATTR(skb, f, p, b) BCM_REFERENCE(skb) |
| #define PKTCCLRATTR(skb) BCM_REFERENCE(skb) |
| #define PKTCCNT(skb) (1) |
| #define PKTCLEN(skb) PKTLEN(NULL, skb) |
| #define PKTCGETFLAGS(skb) (0) |
| #define PKTCSETFLAGS(skb, f) BCM_REFERENCE(skb) |
| #define PKTCCLRFLAGS(skb) BCM_REFERENCE(skb) |
| #define PKTCFLAGS(skb) (0) |
| #define PKTCSETCNT(skb, c) BCM_REFERENCE(skb) |
| #define PKTCINCRCNT(skb) BCM_REFERENCE(skb) |
| #define PKTCADDCNT(skb, c) BCM_REFERENCE(skb) |
| #define PKTCSETLEN(skb, l) BCM_REFERENCE(skb) |
| #define PKTCADDLEN(skb, l) BCM_REFERENCE(skb) |
| #define PKTCSETFLAG(skb, fb) BCM_REFERENCE(skb) |
| #define PKTCCLRFLAG(skb, fb) BCM_REFERENCE(skb) |
| #define PKTCLINK(skb) NULL |
| #define PKTSETCLINK(skb, x) BCM_REFERENCE(skb) |
| #define FOREACH_CHAINED_PKT(skb, nskb) \ |
| for ((nskb) = NULL; (skb) != NULL; (skb) = (nskb)) |
| #define PKTCFREE PKTFREE |
| #define PKTCENQTAIL(h, t, p) \ |
| do { \ |
| if ((t) == NULL) { \ |
| (h) = (t) = (p); \ |
| } \ |
| } while (0) |
| #endif /* !PKTC_DONGLE */ |
| |
| #ifndef PKTSETCHAINED |
| #define PKTSETCHAINED(osh, skb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTCLRCHAINED |
| #define PKTCLRCHAINED(osh, skb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTISCHAINED |
| #define PKTISCHAINED(skb) FALSE |
| #endif |
| |
| #ifndef PKTGETPROFILEIDX |
| #define PKTGETPROFILEIDX(p) (-1) |
| #endif |
| |
| #ifndef PKTCLRPROFILEIDX |
| #define PKTCLRPROFILEIDX(p) |
| #endif |
| |
| #ifndef PKTSETPROFILEIDX |
| #define PKTSETPROFILEIDX(p, idx) BCM_REFERENCE(idx) |
| #endif |
| |
| /* Lbuf with fraglist */ |
| #ifndef PKTFRAGPKTID |
| #define PKTFRAGPKTID(osh, lb) (0) |
| #endif |
| #ifndef PKTSETFRAGPKTID |
| #define PKTSETFRAGPKTID(osh, lb, id) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTFRAGTOTNUM |
| #define PKTFRAGTOTNUM(osh, lb) (0) |
| #endif |
| #ifndef PKTSETFRAGTOTNUM |
| #define PKTSETFRAGTOTNUM(osh, lb, tot) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTFRAGTOTLEN |
| #define PKTFRAGTOTLEN(osh, lb) (0) |
| #endif |
| #ifndef PKTSETFRAGTOTLEN |
| #define PKTSETFRAGTOTLEN(osh, lb, len) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTIFINDEX |
| #define PKTIFINDEX(osh, lb) (0) |
| #endif |
| #ifndef PKTSETIFINDEX |
| #define PKTSETIFINDEX(osh, lb, idx) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTGETLF |
| #define PKTGETLF(osh, len, send, lbuf_type) (0) |
| #endif |
| |
| /* in rx path, reuse totlen as used len */ |
| #ifndef PKTFRAGUSEDLEN |
| #define PKTFRAGUSEDLEN(osh, lb) (0) |
| #endif |
| #ifndef PKTSETFRAGUSEDLEN |
| #define PKTSETFRAGUSEDLEN(osh, lb, len) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTFRAGLEN |
| #define PKTFRAGLEN(osh, lb, ix) (0) |
| #endif |
| #ifndef PKTSETFRAGLEN |
| #define PKTSETFRAGLEN(osh, lb, ix, len) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTFRAGDATA_LO |
| #define PKTFRAGDATA_LO(osh, lb, ix) (0) |
| #endif |
| #ifndef PKTSETFRAGDATA_LO |
| #define PKTSETFRAGDATA_LO(osh, lb, ix, addr) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTFRAGDATA_HI |
| #define PKTFRAGDATA_HI(osh, lb, ix) (0) |
| #endif |
| #ifndef PKTSETFRAGDATA_HI |
| #define PKTSETFRAGDATA_HI(osh, lb, ix, addr) BCM_REFERENCE(osh) |
| #endif |
| |
| #ifndef PKTFRAGMOVE |
| #define PKTFRAGMOVE(osh, dst, src) (BCM_REFERENCE(osh), BCM_REFERENCE(dst), BCM_REFERENCE(src)) |
| #endif |
| |
| /* RX FRAG */ |
| #ifndef PKTISRXFRAG |
| #define PKTISRXFRAG(osh, lb) (0) |
| #endif |
| #ifndef PKTSETRXFRAG |
| #define PKTSETRXFRAG(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTRESETRXFRAG |
| #define PKTRESETRXFRAG(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| /* TX FRAG */ |
| #ifndef PKTISTXFRAG |
| #define PKTISTXFRAG(osh, lb) (0) |
| #endif |
| #ifndef PKTSETTXFRAG |
| #define PKTSETTXFRAG(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| /* TX ALFRAG */ |
| #ifndef PKTISTXALFRAG |
| #define PKTISTXALFRAG(osh, lb) (0) |
| #endif |
| #ifndef PKTSETTXALFRAG |
| #define PKTSETTXALFRAG(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTRESETTXALFRAG |
| #define PKTRESETTXALFRAG(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| #ifndef PKTNUMMPDUS |
| #define PKTNUMMPDUS(osh, lb) (1) |
| #endif |
| #ifndef PKTNUMPKTS |
| #define PKTNUMPKTS(osh, lb) (1) |
| #endif |
| |
| #ifndef PKTISHWCSO |
| #define PKTISHWCSO(osh, lb) (FALSE) |
| #endif |
| |
| #ifndef PKTISSUBMSDUTOEHDR |
| #define PKTISSUBMSDUTOEHDR(osh, lb) (FALSE) |
| #endif |
| |
| #ifndef PKT_IS_HOST_SFHLLC |
| #define PKT_IS_HOST_SFHLLC(osh, lb) (FALSE) |
| #endif |
| |
| #ifndef PKT_SET_HOST_SFHLLC |
| #define PKT_SET_HOST_SFHLLC(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| #ifndef PKT_IS_HOST_SFHLLC_DONE |
| #define PKT_IS_HOST_SFHLLC_DONE(osh, lb) (FALSE) |
| #endif |
| |
| #ifndef PKT_SET_HOST_SFHLLC_DONE |
| #define PKT_SET_HOST_SFHLLC_DONE(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| /* Need Rx completion used for AMPDU reordering */ |
| #ifndef PKTNEEDRXCPL |
| #define PKTNEEDRXCPL(osh, lb) (TRUE) |
| #endif |
| #ifndef PKTSETNORXCPL |
| #define PKTSETNORXCPL(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTRESETNORXCPL |
| #define PKTRESETNORXCPL(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTISFRAG |
| #define PKTISFRAG(osh, lb) (0) |
| #endif |
| #ifndef PKTFRAGISCHAINED |
| #define PKTFRAGISCHAINED(osh, i) (0) |
| #endif |
| #ifndef PKTISHDRCONVTD |
| #define PKTISHDRCONVTD(osh, lb) (0) |
| #endif |
| |
| /* Forwarded pkt indication */ |
| #ifndef PKTISFRWDPKT |
| #define PKTISFRWDPKT(osh, lb) 0 |
| #endif |
| #ifndef PKTSETFRWDPKT |
| #define PKTSETFRWDPKT(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTRESETFRWDPKT |
| #define PKTRESETFRWDPKT(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| /* PKT consumed for totlen calculation */ |
| #ifndef PKTISUSEDTOTLEN |
| #define PKTISUSEDTOTLEN(osh, lb) 0 |
| #endif |
| #ifndef PKTSETUSEDTOTLEN |
| #define PKTSETUSEDTOTLEN(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| #ifndef PKTRESETUSEDTOTLEN |
| #define PKTRESETUSEDTOTLEN(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| /* UDR Packet Indication */ |
| #ifndef PKTISUDR |
| #define PKTISUDR(osh, lb) 0 |
| #endif |
| |
| #ifndef PKTSETUDR |
| #define PKTSETUDR(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| #ifndef PKTSETUDR |
| #define PKTRESETUDR(osh, lb) BCM_REFERENCE(osh) |
| #endif |
| |
| #if !defined(__linux__) |
| #define PKTLIST_INIT(x) BCM_REFERENCE(x) |
| #define PKTLIST_ENQ(x, y) BCM_REFERENCE(x) |
| #define PKTLIST_DEQ(x) BCM_REFERENCE(x) |
| #define PKTLIST_UNLINK(x, y) BCM_REFERENCE(x) |
| #define PKTLIST_FINI(x) BCM_REFERENCE(x) |
| #endif |
| |
| #ifndef ROMMABLE_ASSERT |
| #define ROMMABLE_ASSERT(exp) ASSERT(exp) |
| #endif /* ROMMABLE_ASSERT */ |
| |
| #ifndef MALLOC_NOPERSIST |
| #define MALLOC_NOPERSIST MALLOC |
| #endif /* !MALLOC_NOPERSIST */ |
| |
| #ifndef MALLOC_PERSIST |
| #define MALLOC_PERSIST MALLOC |
| #endif /* !MALLOC_PERSIST */ |
| |
| #ifndef MALLOC_RA |
| #define MALLOC_RA(osh, size, callsite) MALLOCZ(osh, size) |
| #endif /* !MALLOC_RA */ |
| |
| #ifndef MALLOCZ_NOPERSIST |
| #define MALLOCZ_NOPERSIST MALLOCZ |
| #endif /* !MALLOCZ_NOPERSIST */ |
| |
| #ifndef MALLOCZ_PERSIST |
| #define MALLOCZ_PERSIST MALLOCZ |
| #endif /* !MALLOCZ_PERSIST */ |
| |
| #ifndef MFREE_PERSIST |
| #define MFREE_PERSIST MFREE |
| #endif /* !MFREE_PERSIST */ |
| |
| #ifndef MALLOC_SET_NOPERSIST |
| #define MALLOC_SET_NOPERSIST(osh) {BCM_REFERENCE(osh);do { } while (0);} |
| #endif /* !MALLOC_SET_NOPERSIST */ |
| |
| #ifndef MALLOC_CLEAR_NOPERSIST |
| #define MALLOC_CLEAR_NOPERSIST(osh) {BCM_REFERENCE(osh);do { } while (0);} |
| #endif /* !MALLOC_CLEAR_NOPERSIST */ |
| |
| #if defined(OSL_MEMCHECK) |
| #define MEMCHECK(f, l) osl_memcheck(f, l) |
| #else |
| #define MEMCHECK(f, l) |
| #endif /* OSL_MEMCHECK */ |
| |
| #ifndef BCMDBGPERF |
| #define PERF_TRACE_START(id) do {} while (0) |
| #define PERF_TRACE_END(id) do {} while (0) |
| #define PERF_TRACE_END2(id, mycounters) do {} while (0) |
| #define PERF_TRACE_END3(id, mycounters, coreunit) do {} while (0) |
| #define UPDATE_PERF_TRACE_COUNTER(counter, val) do {} while (0) |
| #define ADD_PERF_TRACE_COUNTER(counter, val) do {} while (0) |
| #endif /* OSL_MEMCHECK */ |
| |
| /* Virtual/physical address translation. */ |
| #if !defined(OSL_VIRT_TO_PHYS_ADDR) |
| #define OSL_VIRT_TO_PHYS_ADDR(va) ((void*)(uintptr)(va)) |
| #endif |
| |
| #if !defined(OSL_PHYS_TO_VIRT_ADDR) |
| #define OSL_PHYS_TO_VIRT_ADDR(pa) ((void*)(uintptr)(pa)) |
| #endif |
| |
| #ifndef DBG_PKTLEAK |
| #define PKTSETQCALLER(lb, queue, caller_addr) |
| #define PKTSETQCALLER_LIST(head, npkts, queue, caller_addr) |
| #endif /* DBG_PKTLEAK */ |
| |
| /* Memory breakup capturing macros */ |
| #ifdef BCMDBG_MEM_BREAKUP |
| #define MB_START(var) \ |
| uint mb_memuse_before_##var = MALLOCED(NULL) |
| |
| #define MB_END(var, fmt, ...) \ |
| do { \ |
| uint mb_memuse_##var = MALLOCED(NULL) - mb_memuse_before_##var; \ |
| if (mb_memuse_##var) { \ |
| printf("[MB] " fmt, ##__VA_ARGS__); \ |
| printf(" %d\n", mb_memuse_##var); \ |
| } \ |
| } while (0) |
| #else |
| #define MB_START(var) |
| #define MB_END(var, fmt, ...) |
| #endif /* BCMDBG_MEM_BREAKUP */ |
| |
| /* ASSERT NULL check should not be enabled for ROM build */ |
| #if defined(BCMROMBUILD) && defined(ENABLE_ASSERT_NULL) |
| #error "Do not enable ENABLE_ASSERT_NULL for ROM builds..." |
| #endif |
| |
| #ifdef ENABLE_ASSERT_NULL |
| #define ASSERT_NULL(expr) ASSERT(expr) |
| #else |
| #define ASSERT_NULL(expr) // do nothing |
| #endif /* ENABLE_ASSERT_NULL */ |
| |
| #if defined(DONGLEBUILD) && !defined(BCM_MEM_PERSIST_ENABLE) |
| #ifdef MALLOC_PERSIST |
| #undef MALLOC_PERSIST |
| #endif /* MALLOC_PERSIST */ |
| #define MALLOC_PERSIST MALLOC |
| |
| #ifdef MALLOCZ_PERSIST |
| #undef MALLOCZ_PERSIST |
| #endif /* MALLOCZ_PERSIST */ |
| #define MALLOCZ_PERSIST MALLOCZ |
| |
| #ifdef MFREE_PERSIST |
| #undef MFREE_PERSIST |
| #endif /* MFREE_PERSIST */ |
| #define MFREE_PERSIST MFREE |
| #endif /* DONGLEBUILD && !BCM_MEM_PERSIST_ENABLE */ |
| |
| #define OSL_ALLOC_FATAL_LOGBUF(osh) \ |
| (osl_alloc_fatal_logbuf(osh)) |
| #define OSL_DEALLOC_FATAL_LOGBUF(osh) \ |
| (osl_dealloc_fatal_logbuf(osh)) |
| #define OSL_GET_FATAL_LOGBUF_SIZE(osh) \ |
| (osl_get_fatal_logbuf_size(osh)) |
| #define OSL_GET_FATAL_LOGBUF_ADDR(osh) \ |
| (osl_get_fatal_logbuf_addr(osh)) |
| #define OSL_GET_FATAL_LOGBUF(osh, size, alloced) \ |
| (osl_get_fatal_logbuf((osh), (size), (alloced))) |
| #define OSL_GET_FATAL_LOGBUF_END(osh, size, alloced) \ |
| (osl_get_fatal_logbuf_end(osh, size, alloced)) |
| |
| #define OSL_TIMER_CREATE(osh, name, fn, arg) \ |
| (osl_timer_create(osh, name, fn, arg)) |
| #define OSL_TIMER_INIT(osh, name, fn, arg) \ |
| (osl_timer_init(osh, name, fn, arg)) |
| #define OSL_TIMER_ADD(osh, t, ms, periodic) \ |
| (osl_timer_add(osh, t, ms, periodic)) |
| #define OSL_TIMER_DEL(osh, t) \ |
| (osl_timer_del(osh, t)) |
| #define OSL_TIMER_FREE(osh, t) \ |
| (osl_timer_free(osh, t)) |
| #endif /* _osl_h_ */ |