1*5ffb0503Snonaka /* $NetBSD: ath_netbsd.h,v 1.16 2017/02/02 10:05:35 nonaka Exp $ */ 2fd8cfc5eSxtraeme 390634029Sdyoung /*- 490634029Sdyoung * Copyright (c) 2003, 2004 David Young 590634029Sdyoung * All rights reserved. 690634029Sdyoung * 790634029Sdyoung * Redistribution and use in source and binary forms, with or without 890634029Sdyoung * modification, are permitted provided that the following conditions 990634029Sdyoung * are met: 1090634029Sdyoung * 1. Redistributions of source code must retain the above copyright 1190634029Sdyoung * notice, this list of conditions and the following disclaimer. 1290634029Sdyoung * 2. Redistributions in binary form must reproduce the above copyright 1390634029Sdyoung * notice, this list of conditions and the following disclaimer in the 1490634029Sdyoung * documentation and/or other materials provided with the distribution. 1590634029Sdyoung * 1690634029Sdyoung * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1790634029Sdyoung * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1890634029Sdyoung * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1990634029Sdyoung * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2090634029Sdyoung * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2190634029Sdyoung * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2290634029Sdyoung * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2390634029Sdyoung * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2490634029Sdyoung * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2590634029Sdyoung * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2690634029Sdyoung */ 2790634029Sdyoung #ifndef _ATH_NETBSD_H 2890634029Sdyoung #define _ATH_NETBSD_H 2990634029Sdyoung 301d4183c1Sdyoung #include <sys/sysctl.h> 31*5ffb0503Snonaka #include <sys/intr.h> 321d4183c1Sdyoung 3390634029Sdyoung typedef struct ath_task { 34*5ffb0503Snonaka void *t_soft_ih; 3590634029Sdyoung } ath_task_t; 3690634029Sdyoung 3788ab7da9Sad #define ATH_CALLOUT_INIT(__ch, __mpsafe) callout_init((__ch), 0) 3890634029Sdyoung 3990634029Sdyoung #define TASK_INIT(__task, __zero, __func, __context) \ 4090634029Sdyoung do { \ 41*5ffb0503Snonaka (__task)->t_soft_ih = \ 42*5ffb0503Snonaka softint_establish(SOFTINT_NET, \ 43*5ffb0503Snonaka __CONCAT(__func, _si), \ 44*5ffb0503Snonaka (__context)); \ 45*5ffb0503Snonaka KASSERT((__task)->t_soft_ih); \ 4690634029Sdyoung } while (0) 4790634029Sdyoung 4890634029Sdyoung #define TASK_RUN_OR_ENQUEUE(__task) \ 49*5ffb0503Snonaka softint_schedule((__task)->t_soft_ih); 5090634029Sdyoung 519d36091cSdyoung typedef kmutex_t ath_txq_lock_t; 529d36091cSdyoung #define ATH_TXQ_LOCK_INIT(_sc, _tq) mutex_init(&(_tq)->axq_lock, MUTEX_DEFAULT, IPL_NET) 539d36091cSdyoung #define ATH_TXQ_LOCK_DESTROY(_tq) mutex_destroy(&(_tq)->axq_lock) 549d36091cSdyoung #define ATH_TXQ_LOCK(_tq) mutex_enter(&(_tq)->axq_lock) 559d36091cSdyoung #define ATH_TXQ_UNLOCK(_tq) mutex_exit(&(_tq)->axq_lock) 56216b022dSdyoung #define ATH_TXQ_LOCK_ASSERT(_tq) do { KASSERTMSG(mutex_owned(&(_tq)->axq_lock), "txq lock unheld"); } while (/*CONSTCOND*/true) 5790634029Sdyoung 589d36091cSdyoung typedef kmutex_t ath_txbuf_lock_t; 599d36091cSdyoung #define ATH_TXBUF_LOCK_INIT(_sc) mutex_init(&(_sc)->sc_txbuflock, MUTEX_DEFAULT, IPL_NET) 609d36091cSdyoung #define ATH_TXBUF_LOCK_DESTROY(_sc) mutex_destroy(&(_sc)->sc_txbuflock) 619d36091cSdyoung #define ATH_TXBUF_LOCK(_sc) mutex_enter(&(_sc)->sc_txbuflock) 629d36091cSdyoung #define ATH_TXBUF_UNLOCK(_sc) mutex_exit(&(_sc)->sc_txbuflock) 63216b022dSdyoung #define ATH_TXBUF_LOCK_ASSERT(_sc) do { KASSERTMSG(mutex_owned(&(_sc)->sc_txbuflock), "txbuf lock unheld"); } while (/*CONSTCOND*/true) 6490634029Sdyoung 65*5ffb0503Snonaka #define NET_LOCK_GIANT_FUNC_INIT() int s 66*5ffb0503Snonaka #define NET_LOCK_GIANT() s = splnet() 67*5ffb0503Snonaka #define NET_UNLOCK_GIANT() splx(s) 6890634029Sdyoung 6990634029Sdyoung #define SYSCTL_INT_SUBR(__rw, __name, __descr) \ 7090634029Sdyoung sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_PERMANENT|(__rw), \ 7190634029Sdyoung CTLTYPE_INT, #__name, SYSCTL_DESCR(__descr), ath_sysctl_##__name,\ 72e21a34c2Sdsl 0, (void *)sc, 0, CTL_CREATE, CTL_EOL) 7390634029Sdyoung 7489c0a98cSdyoung #define __PFX(__pfx, __name) __pfx##__name 7589c0a98cSdyoung 7689c0a98cSdyoung #define SYSCTL_PFX_INT(__pfx, __rw, __name, __descr) \ 7790634029Sdyoung sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_PERMANENT|(__rw),\ 7890634029Sdyoung CTLTYPE_INT, #__name, SYSCTL_DESCR(__descr), NULL, 0, \ 7989c0a98cSdyoung __PFX(&__pfx, __name), 0, CTL_CREATE, CTL_EOL) 8089c0a98cSdyoung 8189c0a98cSdyoung #define SYSCTL_INT(__rw, __name, __descr) \ 8289c0a98cSdyoung SYSCTL_PFX_INT(sc->sc_, __rw, __name, __descr) 8390634029Sdyoung 8490634029Sdyoung #define SYSCTL_GLOBAL_INT(__rw, __name, __descr, __var) \ 8590634029Sdyoung sysctl_createv(clog, 0, &rnode, &cnode, \ 8690634029Sdyoung CTLFLAG_PERMANENT|(__rw), CTLTYPE_INT, __name, \ 8790634029Sdyoung SYSCTL_DESCR(__descr), NULL, 0, &ath_##__var, 0, CTL_CREATE,\ 8890634029Sdyoung CTL_EOL) 8990634029Sdyoung 9090634029Sdyoung const struct sysctlnode *ath_sysctl_treetop(struct sysctllog **); 9189c0a98cSdyoung const struct sysctlnode *ath_sysctl_instance(const char *, struct sysctllog **); 9290634029Sdyoung 9390634029Sdyoung #endif /* _ATH_NETBSD_H */ 94