From owner-p4-projects@FreeBSD.ORG Sun Feb 25 00:31:14 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7312516A403; Sun, 25 Feb 2007 00:31:14 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 357D116A401 for ; Sun, 25 Feb 2007 00:31:14 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 26FF313C478 for ; Sun, 25 Feb 2007 00:31:14 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l1P0VE57072926 for ; Sun, 25 Feb 2007 00:31:14 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l1P0VDjs072917 for perforce@freebsd.org; Sun, 25 Feb 2007 00:31:13 GMT (envelope-from sam@freebsd.org) Date: Sun, 25 Feb 2007 00:31:13 GMT Message-Id: <200702250031.l1P0VDjs072917@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Cc: Subject: PERFORCE change 115002 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Feb 2007 00:31:14 -0000 http://perforce.freebsd.org/chv.cgi?CH=115002 Change 115002 by sam@sam_ebb on 2007/02/25 00:30:36 IFC sysctl fixes Affected files ... .. //depot/projects/wifi/sys/dev/ath/if_ath.c#135 integrate .. //depot/projects/wifi/sys/dev/ath/if_athvar.h#54 integrate Differences ... ==== //depot/projects/wifi/sys/dev/ath/if_ath.c#135 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.160 2007/01/21 19:32:50 marius Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.162 2007/02/24 23:23:29 sam Exp $"); /* * Driver for the Atheros Wireless LAN controller. @@ -6001,6 +6001,29 @@ } static int +ath_sysctl_txantenna(SYSCTL_HANDLER_ARGS) +{ + struct ath_softc *sc = arg1; + u_int txantenna = ath_hal_getantennaswitch(sc->sc_ah); + int error; + + error = sysctl_handle_int(oidp, &txantenna, 0, req); + if (!error && req->newptr) { + /* XXX assumes 2 antenna ports */ + if (txantenna < HAL_ANT_VARIABLE || txantenna > HAL_ANT_FIXED_B) + return EINVAL; + ath_hal_setantennaswitch(sc->sc_ah, txantenna); + /* + * NB: with the switch locked this isn't meaningful, + * but set it anyway so things like radiotap get + * consistent info in their data. + */ + sc->sc_txantenna = txantenna; + } + return error; +} + +static int ath_sysctl_rxantenna(SYSCTL_HANDLER_ARGS) { struct ath_softc *sc = arg1; @@ -6056,7 +6079,8 @@ error = sysctl_handle_int(oidp, &scale, 0, req); if (error || !req->newptr) return error; - return !ath_hal_settpscale(sc->sc_ah, scale) ? EINVAL : ath_reset(ifp); + return !ath_hal_settpscale(sc->sc_ah, scale) ? EINVAL : + (ifp->if_drv_flags & IFF_DRV_RUNNING) ? ath_reset(ifp) : 0; } static int @@ -6076,13 +6100,15 @@ ath_sysctl_rfkill(SYSCTL_HANDLER_ARGS) { struct ath_softc *sc = arg1; + struct ifnet *ifp = sc->sc_ifp; u_int rfkill = ath_hal_getrfkill(sc->sc_ah); int error; error = sysctl_handle_int(oidp, &rfkill, 0, req); if (error || !req->newptr) return error; - return !ath_hal_setrfkill(sc->sc_ah, rfkill) ? EINVAL : 0; + return !ath_hal_setrfkill(sc->sc_ah, rfkill) ? EINVAL : + (ifp->if_drv_flags & IFF_DRV_RUNNING) ? ath_reset(ifp) : 0; } static int @@ -6209,9 +6235,9 @@ SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "ledidle", CTLFLAG_RW, &sc->sc_ledidle, 0, "idle time for inactivity LED (ticks)"); - SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, - "txantenna", CTLFLAG_RW, &sc->sc_txantenna, 0, - "tx antenna (0=auto)"); + SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, + "txantenna", CTLTYPE_INT | CTLFLAG_RW, sc, 0, + ath_sysctl_txantenna, "I", "antenna switch"); SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "rxantenna", CTLTYPE_INT | CTLFLAG_RW, sc, 0, ath_sysctl_rxantenna, "I", "default/rx antenna"); ==== //depot/projects/wifi/sys/dev/ath/if_athvar.h#54 (text+ko) ==== @@ -33,7 +33,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.58 2007/01/15 04:26:19 sam Exp $ + * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.59 2007/02/24 23:12:58 sam Exp $ */ /* @@ -507,6 +507,10 @@ (ath_hal_getcapability(_ah, HAL_CAP_DIVERSITY, 1, NULL) == HAL_OK) #define ath_hal_setdiversity(_ah, _v) \ ath_hal_setcapability(_ah, HAL_CAP_DIVERSITY, 1, _v, NULL) +#define ath_hal_getantennaswitch(_ah) \ + ((*(_ah)->ah_getAntennaSwitch)((_ah))) +#define ath_hal_setantennaswitch(_ah, _v) \ + ((*(_ah)->ah_setAntennaSwitch)((_ah), (_v))) #define ath_hal_getdiag(_ah, _pv) \ (ath_hal_getcapability(_ah, HAL_CAP_DIAG, 0, _pv) == HAL_OK) #define ath_hal_setdiag(_ah, _v) \