if_ath.c (218925) | if_ath.c (219180) |
---|---|
1/*- 2 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27 * THE POSSIBILITY OF SUCH DAMAGES. 28 */ 29 30#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27 * THE POSSIBILITY OF SUCH DAMAGES. 28 */ 29 30#include <sys/cdefs.h> |
31__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath.c 218925 2011-02-21 19:22:45Z adrian $"); | 31__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath.c 219180 2011-03-02 16:03:19Z adrian $"); |
32 33/* 34 * Driver for the Atheros Wireless LAN controller. 35 * 36 * This software is derived from work of Atsushi Onoe; his contribution 37 * is greatly appreciated. 38 */ 39 --- 47 unchanged lines hidden (view full) --- 87 88#include <dev/ath/if_athvar.h> 89#include <dev/ath/ath_hal/ah_devid.h> /* XXX for softled */ 90#include <dev/ath/ath_hal/ah_diagcodes.h> 91 92#include <dev/ath/if_ath_debug.h> 93#include <dev/ath/if_ath_misc.h> 94#include <dev/ath/if_ath_tx.h> | 32 33/* 34 * Driver for the Atheros Wireless LAN controller. 35 * 36 * This software is derived from work of Atsushi Onoe; his contribution 37 * is greatly appreciated. 38 */ 39 --- 47 unchanged lines hidden (view full) --- 87 88#include <dev/ath/if_athvar.h> 89#include <dev/ath/ath_hal/ah_devid.h> /* XXX for softled */ 90#include <dev/ath/ath_hal/ah_diagcodes.h> 91 92#include <dev/ath/if_ath_debug.h> 93#include <dev/ath/if_ath_misc.h> 94#include <dev/ath/if_ath_tx.h> |
95#include <dev/ath/if_ath_sysctl.h> |
|
95 96#ifdef ATH_TX99_DIAG 97#include <dev/ath/ath_tx99/ath_tx99.h> 98#endif 99 100/* 101 * ATH_BCBUF determines the number of vap's that can transmit 102 * beacons and also (currently) the number of vap's that can --- 14 unchanged lines hidden (view full) --- 117 const char name[IFNAMSIZ], int unit, int opmode, 118 int flags, const uint8_t bssid[IEEE80211_ADDR_LEN], 119 const uint8_t mac[IEEE80211_ADDR_LEN]); 120static void ath_vap_delete(struct ieee80211vap *); 121static void ath_init(void *); 122static void ath_stop_locked(struct ifnet *); 123static void ath_stop(struct ifnet *); 124static void ath_start(struct ifnet *); | 96 97#ifdef ATH_TX99_DIAG 98#include <dev/ath/ath_tx99/ath_tx99.h> 99#endif 100 101/* 102 * ATH_BCBUF determines the number of vap's that can transmit 103 * beacons and also (currently) the number of vap's that can --- 14 unchanged lines hidden (view full) --- 118 const char name[IFNAMSIZ], int unit, int opmode, 119 int flags, const uint8_t bssid[IEEE80211_ADDR_LEN], 120 const uint8_t mac[IEEE80211_ADDR_LEN]); 121static void ath_vap_delete(struct ieee80211vap *); 122static void ath_init(void *); 123static void ath_stop_locked(struct ifnet *); 124static void ath_stop(struct ifnet *); 125static void ath_start(struct ifnet *); |
125static int ath_reset(struct ifnet *); | |
126static int ath_reset_vap(struct ieee80211vap *, u_long); 127static int ath_media_change(struct ifnet *); 128static void ath_watchdog(void *); 129static int ath_ioctl(struct ifnet *, u_long, caddr_t); 130static void ath_fatal_proc(void *, int); 131static void ath_bmiss_vap(struct ieee80211vap *); 132static void ath_bmiss_proc(void *, int); 133static int ath_keyset(struct ath_softc *, const struct ieee80211_key *, --- 65 unchanged lines hidden (view full) --- 199static void ath_getradiocaps(struct ieee80211com *, int, int *, 200 struct ieee80211_channel []); 201static int ath_getchannels(struct ath_softc *); 202static void ath_led_event(struct ath_softc *, int); 203 204static int ath_rate_setup(struct ath_softc *, u_int mode); 205static void ath_setcurmode(struct ath_softc *, enum ieee80211_phymode); 206 | 126static int ath_reset_vap(struct ieee80211vap *, u_long); 127static int ath_media_change(struct ifnet *); 128static void ath_watchdog(void *); 129static int ath_ioctl(struct ifnet *, u_long, caddr_t); 130static void ath_fatal_proc(void *, int); 131static void ath_bmiss_vap(struct ieee80211vap *); 132static void ath_bmiss_proc(void *, int); 133static int ath_keyset(struct ath_softc *, const struct ieee80211_key *, --- 65 unchanged lines hidden (view full) --- 199static void ath_getradiocaps(struct ieee80211com *, int, int *, 200 struct ieee80211_channel []); 201static int ath_getchannels(struct ath_softc *); 202static void ath_led_event(struct ath_softc *, int); 203 204static int ath_rate_setup(struct ath_softc *, u_int mode); 205static void ath_setcurmode(struct ath_softc *, enum ieee80211_phymode); 206 |
207static void ath_sysctlattach(struct ath_softc *); | |
208static void ath_announce(struct ath_softc *); | 207static void ath_announce(struct ath_softc *); |
209static void ath_sysctl_stats_attach(struct ath_softc *sc); | |
210 211#ifdef IEEE80211_SUPPORT_TDMA 212static void ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt, 213 u_int32_t bintval); 214static void ath_tdma_bintvalsetup(struct ath_softc *sc, 215 const struct ieee80211_tdma_state *tdma); 216static void ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap); 217static void ath_tdma_update(struct ieee80211_node *ni, --- 1427 unchanged lines hidden (view full) --- 1645 1646/* 1647 * Reset the hardware w/o losing operational state. This is 1648 * basically a more efficient way of doing ath_stop, ath_init, 1649 * followed by state transitions to the current 802.11 1650 * operational state. Used to recover from various errors and 1651 * to reset or reload hardware state. 1652 */ | 208 209#ifdef IEEE80211_SUPPORT_TDMA 210static void ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt, 211 u_int32_t bintval); 212static void ath_tdma_bintvalsetup(struct ath_softc *sc, 213 const struct ieee80211_tdma_state *tdma); 214static void ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap); 215static void ath_tdma_update(struct ieee80211_node *ni, --- 1427 unchanged lines hidden (view full) --- 1643 1644/* 1645 * Reset the hardware w/o losing operational state. This is 1646 * basically a more efficient way of doing ath_stop, ath_init, 1647 * followed by state transitions to the current 802.11 1648 * operational state. Used to recover from various errors and 1649 * to reset or reload hardware state. 1650 */ |
1653static int | 1651int |
1654ath_reset(struct ifnet *ifp) 1655{ 1656 struct ath_softc *sc = ifp->if_softc; 1657 struct ieee80211com *ic = ifp->if_l2com; 1658 struct ath_hal *ah = sc->sc_ah; 1659 HAL_STATUS status; 1660 1661 ath_hal_intrset(ah, 0); /* disable interrupts */ --- 3947 unchanged lines hidden (view full) --- 5609 default: 5610 error = EINVAL; 5611 break; 5612 } 5613 return error; 5614#undef IS_RUNNING 5615} 5616 | 1652ath_reset(struct ifnet *ifp) 1653{ 1654 struct ath_softc *sc = ifp->if_softc; 1655 struct ieee80211com *ic = ifp->if_l2com; 1656 struct ath_hal *ah = sc->sc_ah; 1657 HAL_STATUS status; 1658 1659 ath_hal_intrset(ah, 0); /* disable interrupts */ --- 3947 unchanged lines hidden (view full) --- 5607 default: 5608 error = EINVAL; 5609 break; 5610 } 5611 return error; 5612#undef IS_RUNNING 5613} 5614 |
5617static int 5618ath_sysctl_slottime(SYSCTL_HANDLER_ARGS) 5619{ 5620 struct ath_softc *sc = arg1; 5621 u_int slottime = ath_hal_getslottime(sc->sc_ah); 5622 int error; 5623 5624 error = sysctl_handle_int(oidp, &slottime, 0, req); 5625 if (error || !req->newptr) 5626 return error; 5627 return !ath_hal_setslottime(sc->sc_ah, slottime) ? EINVAL : 0; 5628} 5629 5630static int 5631ath_sysctl_acktimeout(SYSCTL_HANDLER_ARGS) 5632{ 5633 struct ath_softc *sc = arg1; 5634 u_int acktimeout = ath_hal_getacktimeout(sc->sc_ah); 5635 int error; 5636 5637 error = sysctl_handle_int(oidp, &acktimeout, 0, req); 5638 if (error || !req->newptr) 5639 return error; 5640 return !ath_hal_setacktimeout(sc->sc_ah, acktimeout) ? EINVAL : 0; 5641} 5642 5643static int 5644ath_sysctl_ctstimeout(SYSCTL_HANDLER_ARGS) 5645{ 5646 struct ath_softc *sc = arg1; 5647 u_int ctstimeout = ath_hal_getctstimeout(sc->sc_ah); 5648 int error; 5649 5650 error = sysctl_handle_int(oidp, &ctstimeout, 0, req); 5651 if (error || !req->newptr) 5652 return error; 5653 return !ath_hal_setctstimeout(sc->sc_ah, ctstimeout) ? EINVAL : 0; 5654} 5655 5656static int 5657ath_sysctl_softled(SYSCTL_HANDLER_ARGS) 5658{ 5659 struct ath_softc *sc = arg1; 5660 int softled = sc->sc_softled; 5661 int error; 5662 5663 error = sysctl_handle_int(oidp, &softled, 0, req); 5664 if (error || !req->newptr) 5665 return error; 5666 softled = (softled != 0); 5667 if (softled != sc->sc_softled) { 5668 if (softled) { 5669 /* NB: handle any sc_ledpin change */ 5670 ath_hal_gpioCfgOutput(sc->sc_ah, sc->sc_ledpin, 5671 HAL_GPIO_MUX_MAC_NETWORK_LED); 5672 ath_hal_gpioset(sc->sc_ah, sc->sc_ledpin, 5673 !sc->sc_ledon); 5674 } 5675 sc->sc_softled = softled; 5676 } 5677 return 0; 5678} 5679 5680static int 5681ath_sysctl_ledpin(SYSCTL_HANDLER_ARGS) 5682{ 5683 struct ath_softc *sc = arg1; 5684 int ledpin = sc->sc_ledpin; 5685 int error; 5686 5687 error = sysctl_handle_int(oidp, &ledpin, 0, req); 5688 if (error || !req->newptr) 5689 return error; 5690 if (ledpin != sc->sc_ledpin) { 5691 sc->sc_ledpin = ledpin; 5692 if (sc->sc_softled) { 5693 ath_hal_gpioCfgOutput(sc->sc_ah, sc->sc_ledpin, 5694 HAL_GPIO_MUX_MAC_NETWORK_LED); 5695 ath_hal_gpioset(sc->sc_ah, sc->sc_ledpin, 5696 !sc->sc_ledon); 5697 } 5698 } 5699 return 0; 5700} 5701 5702static int 5703ath_sysctl_txantenna(SYSCTL_HANDLER_ARGS) 5704{ 5705 struct ath_softc *sc = arg1; 5706 u_int txantenna = ath_hal_getantennaswitch(sc->sc_ah); 5707 int error; 5708 5709 error = sysctl_handle_int(oidp, &txantenna, 0, req); 5710 if (!error && req->newptr) { 5711 /* XXX assumes 2 antenna ports */ 5712 if (txantenna < HAL_ANT_VARIABLE || txantenna > HAL_ANT_FIXED_B) 5713 return EINVAL; 5714 ath_hal_setantennaswitch(sc->sc_ah, txantenna); 5715 /* 5716 * NB: with the switch locked this isn't meaningful, 5717 * but set it anyway so things like radiotap get 5718 * consistent info in their data. 5719 */ 5720 sc->sc_txantenna = txantenna; 5721 } 5722 return error; 5723} 5724 5725static int 5726ath_sysctl_rxantenna(SYSCTL_HANDLER_ARGS) 5727{ 5728 struct ath_softc *sc = arg1; 5729 u_int defantenna = ath_hal_getdefantenna(sc->sc_ah); 5730 int error; 5731 5732 error = sysctl_handle_int(oidp, &defantenna, 0, req); 5733 if (!error && req->newptr) 5734 ath_hal_setdefantenna(sc->sc_ah, defantenna); 5735 return error; 5736} 5737 5738static int 5739ath_sysctl_diversity(SYSCTL_HANDLER_ARGS) 5740{ 5741 struct ath_softc *sc = arg1; 5742 u_int diversity = ath_hal_getdiversity(sc->sc_ah); 5743 int error; 5744 5745 error = sysctl_handle_int(oidp, &diversity, 0, req); 5746 if (error || !req->newptr) 5747 return error; 5748 if (!ath_hal_setdiversity(sc->sc_ah, diversity)) 5749 return EINVAL; 5750 sc->sc_diversity = diversity; 5751 return 0; 5752} 5753 5754static int 5755ath_sysctl_diag(SYSCTL_HANDLER_ARGS) 5756{ 5757 struct ath_softc *sc = arg1; 5758 u_int32_t diag; 5759 int error; 5760 5761 if (!ath_hal_getdiag(sc->sc_ah, &diag)) 5762 return EINVAL; 5763 error = sysctl_handle_int(oidp, &diag, 0, req); 5764 if (error || !req->newptr) 5765 return error; 5766 return !ath_hal_setdiag(sc->sc_ah, diag) ? EINVAL : 0; 5767} 5768 5769static int 5770ath_sysctl_tpscale(SYSCTL_HANDLER_ARGS) 5771{ 5772 struct ath_softc *sc = arg1; 5773 struct ifnet *ifp = sc->sc_ifp; 5774 u_int32_t scale; 5775 int error; 5776 5777 (void) ath_hal_gettpscale(sc->sc_ah, &scale); 5778 error = sysctl_handle_int(oidp, &scale, 0, req); 5779 if (error || !req->newptr) 5780 return error; 5781 return !ath_hal_settpscale(sc->sc_ah, scale) ? EINVAL : 5782 (ifp->if_drv_flags & IFF_DRV_RUNNING) ? ath_reset(ifp) : 0; 5783} 5784 5785static int 5786ath_sysctl_tpc(SYSCTL_HANDLER_ARGS) 5787{ 5788 struct ath_softc *sc = arg1; 5789 u_int tpc = ath_hal_gettpc(sc->sc_ah); 5790 int error; 5791 5792 error = sysctl_handle_int(oidp, &tpc, 0, req); 5793 if (error || !req->newptr) 5794 return error; 5795 return !ath_hal_settpc(sc->sc_ah, tpc) ? EINVAL : 0; 5796} 5797 5798static int 5799ath_sysctl_rfkill(SYSCTL_HANDLER_ARGS) 5800{ 5801 struct ath_softc *sc = arg1; 5802 struct ifnet *ifp = sc->sc_ifp; 5803 struct ath_hal *ah = sc->sc_ah; 5804 u_int rfkill = ath_hal_getrfkill(ah); 5805 int error; 5806 5807 error = sysctl_handle_int(oidp, &rfkill, 0, req); 5808 if (error || !req->newptr) 5809 return error; 5810 if (rfkill == ath_hal_getrfkill(ah)) /* unchanged */ 5811 return 0; 5812 if (!ath_hal_setrfkill(ah, rfkill)) 5813 return EINVAL; 5814 return (ifp->if_drv_flags & IFF_DRV_RUNNING) ? ath_reset(ifp) : 0; 5815} 5816 5817static int 5818ath_sysctl_rfsilent(SYSCTL_HANDLER_ARGS) 5819{ 5820 struct ath_softc *sc = arg1; 5821 u_int rfsilent; 5822 int error; 5823 5824 (void) ath_hal_getrfsilent(sc->sc_ah, &rfsilent); 5825 error = sysctl_handle_int(oidp, &rfsilent, 0, req); 5826 if (error || !req->newptr) 5827 return error; 5828 if (!ath_hal_setrfsilent(sc->sc_ah, rfsilent)) 5829 return EINVAL; 5830 sc->sc_rfsilentpin = rfsilent & 0x1c; 5831 sc->sc_rfsilentpol = (rfsilent & 0x2) != 0; 5832 return 0; 5833} 5834 5835static int 5836ath_sysctl_tpack(SYSCTL_HANDLER_ARGS) 5837{ 5838 struct ath_softc *sc = arg1; 5839 u_int32_t tpack; 5840 int error; 5841 5842 (void) ath_hal_gettpack(sc->sc_ah, &tpack); 5843 error = sysctl_handle_int(oidp, &tpack, 0, req); 5844 if (error || !req->newptr) 5845 return error; 5846 return !ath_hal_settpack(sc->sc_ah, tpack) ? EINVAL : 0; 5847} 5848 5849static int 5850ath_sysctl_tpcts(SYSCTL_HANDLER_ARGS) 5851{ 5852 struct ath_softc *sc = arg1; 5853 u_int32_t tpcts; 5854 int error; 5855 5856 (void) ath_hal_gettpcts(sc->sc_ah, &tpcts); 5857 error = sysctl_handle_int(oidp, &tpcts, 0, req); 5858 if (error || !req->newptr) 5859 return error; 5860 return !ath_hal_settpcts(sc->sc_ah, tpcts) ? EINVAL : 0; 5861} 5862 5863static int 5864ath_sysctl_intmit(SYSCTL_HANDLER_ARGS) 5865{ 5866 struct ath_softc *sc = arg1; 5867 int intmit, error; 5868 5869 intmit = ath_hal_getintmit(sc->sc_ah); 5870 error = sysctl_handle_int(oidp, &intmit, 0, req); 5871 if (error || !req->newptr) 5872 return error; 5873 return !ath_hal_setintmit(sc->sc_ah, intmit) ? EINVAL : 0; 5874} 5875 5876#ifdef IEEE80211_SUPPORT_TDMA 5877static int 5878ath_sysctl_setcca(SYSCTL_HANDLER_ARGS) 5879{ 5880 struct ath_softc *sc = arg1; 5881 int setcca, error; 5882 5883 setcca = sc->sc_setcca; 5884 error = sysctl_handle_int(oidp, &setcca, 0, req); 5885 if (error || !req->newptr) 5886 return error; 5887 sc->sc_setcca = (setcca != 0); 5888 return 0; 5889} 5890#endif /* IEEE80211_SUPPORT_TDMA */ 5891 5892static void 5893ath_sysctlattach(struct ath_softc *sc) 5894{ 5895 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev); 5896 struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev); 5897 struct ath_hal *ah = sc->sc_ah; 5898 5899 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5900 "countrycode", CTLFLAG_RD, &sc->sc_eecc, 0, 5901 "EEPROM country code"); 5902 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5903 "regdomain", CTLFLAG_RD, &sc->sc_eerd, 0, 5904 "EEPROM regdomain code"); 5905#ifdef ATH_DEBUG 5906 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5907 "debug", CTLFLAG_RW, &sc->sc_debug, 0, 5908 "control debugging printfs"); 5909#endif 5910 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5911 "slottime", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5912 ath_sysctl_slottime, "I", "802.11 slot time (us)"); 5913 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5914 "acktimeout", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5915 ath_sysctl_acktimeout, "I", "802.11 ACK timeout (us)"); 5916 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5917 "ctstimeout", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5918 ath_sysctl_ctstimeout, "I", "802.11 CTS timeout (us)"); 5919 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5920 "softled", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5921 ath_sysctl_softled, "I", "enable/disable software LED support"); 5922 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5923 "ledpin", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5924 ath_sysctl_ledpin, "I", "GPIO pin connected to LED"); 5925 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5926 "ledon", CTLFLAG_RW, &sc->sc_ledon, 0, 5927 "setting to turn LED on"); 5928 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5929 "ledidle", CTLFLAG_RW, &sc->sc_ledidle, 0, 5930 "idle time for inactivity LED (ticks)"); 5931 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5932 "txantenna", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5933 ath_sysctl_txantenna, "I", "antenna switch"); 5934 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5935 "rxantenna", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5936 ath_sysctl_rxantenna, "I", "default/rx antenna"); 5937 if (ath_hal_hasdiversity(ah)) 5938 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5939 "diversity", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5940 ath_sysctl_diversity, "I", "antenna diversity"); 5941 sc->sc_txintrperiod = ATH_TXINTR_PERIOD; 5942 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5943 "txintrperiod", CTLFLAG_RW, &sc->sc_txintrperiod, 0, 5944 "tx descriptor batching"); 5945 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5946 "diag", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5947 ath_sysctl_diag, "I", "h/w diagnostic control"); 5948 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5949 "tpscale", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5950 ath_sysctl_tpscale, "I", "tx power scaling"); 5951 if (ath_hal_hastpc(ah)) { 5952 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5953 "tpc", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5954 ath_sysctl_tpc, "I", "enable/disable per-packet TPC"); 5955 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5956 "tpack", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5957 ath_sysctl_tpack, "I", "tx power for ack frames"); 5958 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5959 "tpcts", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5960 ath_sysctl_tpcts, "I", "tx power for cts frames"); 5961 } 5962 if (ath_hal_hasrfsilent(ah)) { 5963 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5964 "rfsilent", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5965 ath_sysctl_rfsilent, "I", "h/w RF silent config"); 5966 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5967 "rfkill", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5968 ath_sysctl_rfkill, "I", "enable/disable RF kill switch"); 5969 } 5970 if (ath_hal_hasintmit(ah)) { 5971 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5972 "intmit", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5973 ath_sysctl_intmit, "I", "interference mitigation"); 5974 } 5975 sc->sc_monpass = HAL_RXERR_DECRYPT | HAL_RXERR_MIC; 5976 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5977 "monpass", CTLFLAG_RW, &sc->sc_monpass, 0, 5978 "mask of error frames to pass when monitoring"); 5979#ifdef IEEE80211_SUPPORT_TDMA 5980 if (ath_hal_macversion(ah) > 0x78) { 5981 sc->sc_tdmadbaprep = 2; 5982 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5983 "dbaprep", CTLFLAG_RW, &sc->sc_tdmadbaprep, 0, 5984 "TDMA DBA preparation time"); 5985 sc->sc_tdmaswbaprep = 10; 5986 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5987 "swbaprep", CTLFLAG_RW, &sc->sc_tdmaswbaprep, 0, 5988 "TDMA SWBA preparation time"); 5989 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5990 "guardtime", CTLFLAG_RW, &sc->sc_tdmaguard, 0, 5991 "TDMA slot guard time"); 5992 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5993 "superframe", CTLFLAG_RD, &sc->sc_tdmabintval, 0, 5994 "TDMA calculated super frame"); 5995 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 5996 "setcca", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 5997 ath_sysctl_setcca, "I", "enable CCA control"); 5998 } 5999#endif 6000} 6001 | |
6002/* 6003 * Announce various information on device/driver attach. 6004 */ 6005static void 6006ath_announce(struct ath_softc *sc) 6007{ 6008 struct ifnet *ifp = sc->sc_ifp; 6009 struct ath_hal *ah = sc->sc_ah; --- 377 unchanged lines hidden (view full) --- 6387 * Record local TSF for our last send for use 6388 * in arbitrating slot collisions. 6389 */ 6390 vap->iv_bss->ni_tstamp.tsf = ath_hal_gettsf64(ah); 6391 } 6392} 6393#endif /* IEEE80211_SUPPORT_TDMA */ 6394 | 5615/* 5616 * Announce various information on device/driver attach. 5617 */ 5618static void 5619ath_announce(struct ath_softc *sc) 5620{ 5621 struct ifnet *ifp = sc->sc_ifp; 5622 struct ath_hal *ah = sc->sc_ah; --- 377 unchanged lines hidden (view full) --- 6000 * Record local TSF for our last send for use 6001 * in arbitrating slot collisions. 6002 */ 6003 vap->iv_bss->ni_tstamp.tsf = ath_hal_gettsf64(ah); 6004 } 6005} 6006#endif /* IEEE80211_SUPPORT_TDMA */ 6007 |
6395static int 6396ath_sysctl_clearstats(SYSCTL_HANDLER_ARGS) 6397{ 6398 struct ath_softc *sc = arg1; 6399 int val = 0; 6400 int error; 6401 6402 error = sysctl_handle_int(oidp, &val, 0, req); 6403 if (error || !req->newptr) 6404 return error; 6405 if (val == 0) 6406 return 0; /* Not clearing the stats is still valid */ 6407 memset(&sc->sc_stats, 0, sizeof(sc->sc_stats)); 6408 val = 0; 6409 return 0; 6410} 6411 6412static void 6413ath_sysctl_stats_attach_rxphyerr(struct ath_softc *sc, struct sysctl_oid_list *parent) 6414{ 6415 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev); 6416 struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev); 6417 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree); 6418 int i; 6419 char sn[8]; 6420 6421 tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx_phy_err", CTLFLAG_RD, NULL, "Per-code RX PHY Errors"); 6422 child = SYSCTL_CHILDREN(tree); 6423 for (i = 0; i < 64; i++) { 6424 snprintf(sn, sizeof(sn), "%d", i); 6425 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, sn, CTLFLAG_RD, &sc->sc_stats.ast_rx_phy[i], 0, ""); 6426 } 6427} 6428 6429static void 6430ath_sysctl_stats_attach(struct ath_softc *sc) 6431{ 6432 struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev); 6433 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev); 6434 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree); 6435 6436 /* Create "clear" node */ 6437 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, 6438 "clear_stats", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 6439 ath_sysctl_clearstats, "I", "clear stats"); 6440 6441 /* Create stats node */ 6442 tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, 6443 NULL, "Statistics"); 6444 child = SYSCTL_CHILDREN(tree); 6445 6446 /* This was generated from if_athioctl.h */ 6447 6448 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_watchdog", CTLFLAG_RD, 6449 &sc->sc_stats.ast_watchdog, 0, "device reset by watchdog"); 6450 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_hardware", CTLFLAG_RD, 6451 &sc->sc_stats.ast_hardware, 0, "fatal hardware error interrupts"); 6452 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_bmiss", CTLFLAG_RD, 6453 &sc->sc_stats.ast_bmiss, 0, "beacon miss interrupts"); 6454 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_bmiss_phantom", CTLFLAG_RD, 6455 &sc->sc_stats.ast_bmiss_phantom, 0, "beacon miss interrupts"); 6456 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_bstuck", CTLFLAG_RD, 6457 &sc->sc_stats.ast_bstuck, 0, "beacon stuck interrupts"); 6458 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rxorn", CTLFLAG_RD, 6459 &sc->sc_stats.ast_rxorn, 0, "rx overrun interrupts"); 6460 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rxeol", CTLFLAG_RD, 6461 &sc->sc_stats.ast_rxeol, 0, "rx eol interrupts"); 6462 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_txurn", CTLFLAG_RD, 6463 &sc->sc_stats.ast_txurn, 0, "tx underrun interrupts"); 6464 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_mib", CTLFLAG_RD, 6465 &sc->sc_stats.ast_mib, 0, "mib interrupts"); 6466 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_intrcoal", CTLFLAG_RD, 6467 &sc->sc_stats.ast_intrcoal, 0, "interrupts coalesced"); 6468 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_packets", CTLFLAG_RD, 6469 &sc->sc_stats.ast_tx_packets, 0, "packet sent on the interface"); 6470 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_mgmt", CTLFLAG_RD, 6471 &sc->sc_stats.ast_tx_mgmt, 0, "management frames transmitted"); 6472 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_discard", CTLFLAG_RD, 6473 &sc->sc_stats.ast_tx_discard, 0, "frames discarded prior to assoc"); 6474 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_qstop", CTLFLAG_RD, 6475 &sc->sc_stats.ast_tx_qstop, 0, "output stopped 'cuz no buffer"); 6476 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_encap", CTLFLAG_RD, 6477 &sc->sc_stats.ast_tx_encap, 0, "tx encapsulation failed"); 6478 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_nonode", CTLFLAG_RD, 6479 &sc->sc_stats.ast_tx_nonode, 0, "tx failed 'cuz no node"); 6480 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_nombuf", CTLFLAG_RD, 6481 &sc->sc_stats.ast_tx_nombuf, 0, "tx failed 'cuz no mbuf"); 6482 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_nomcl", CTLFLAG_RD, 6483 &sc->sc_stats.ast_tx_nomcl, 0, "tx failed 'cuz no cluster"); 6484 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_linear", CTLFLAG_RD, 6485 &sc->sc_stats.ast_tx_linear, 0, "tx linearized to cluster"); 6486 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_nodata", CTLFLAG_RD, 6487 &sc->sc_stats.ast_tx_nodata, 0, "tx discarded empty frame"); 6488 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_busdma", CTLFLAG_RD, 6489 &sc->sc_stats.ast_tx_busdma, 0, "tx failed for dma resrcs"); 6490 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_xretries", CTLFLAG_RD, 6491 &sc->sc_stats.ast_tx_xretries, 0, "tx failed 'cuz too many retries"); 6492 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_fifoerr", CTLFLAG_RD, 6493 &sc->sc_stats.ast_tx_fifoerr, 0, "tx failed 'cuz FIFO underrun"); 6494 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_filtered", CTLFLAG_RD, 6495 &sc->sc_stats.ast_tx_filtered, 0, "tx failed 'cuz xmit filtered"); 6496 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_shortretry", CTLFLAG_RD, 6497 &sc->sc_stats.ast_tx_shortretry, 0, "tx on-chip retries (short)"); 6498 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_longretry", CTLFLAG_RD, 6499 &sc->sc_stats.ast_tx_longretry, 0, "tx on-chip retries (long)"); 6500 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_badrate", CTLFLAG_RD, 6501 &sc->sc_stats.ast_tx_badrate, 0, "tx failed 'cuz bogus xmit rate"); 6502 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_noack", CTLFLAG_RD, 6503 &sc->sc_stats.ast_tx_noack, 0, "tx frames with no ack marked"); 6504 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_rts", CTLFLAG_RD, 6505 &sc->sc_stats.ast_tx_rts, 0, "tx frames with rts enabled"); 6506 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_cts", CTLFLAG_RD, 6507 &sc->sc_stats.ast_tx_cts, 0, "tx frames with cts enabled"); 6508 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_shortpre", CTLFLAG_RD, 6509 &sc->sc_stats.ast_tx_shortpre, 0, "tx frames with short preamble"); 6510 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_altrate", CTLFLAG_RD, 6511 &sc->sc_stats.ast_tx_altrate, 0, "tx frames with alternate rate"); 6512 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_protect", CTLFLAG_RD, 6513 &sc->sc_stats.ast_tx_protect, 0, "tx frames with protection"); 6514 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_ctsburst", CTLFLAG_RD, 6515 &sc->sc_stats.ast_tx_ctsburst, 0, "tx frames with cts and bursting"); 6516 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_ctsext", CTLFLAG_RD, 6517 &sc->sc_stats.ast_tx_ctsext, 0, "tx frames with cts extension"); 6518 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_nombuf", CTLFLAG_RD, 6519 &sc->sc_stats.ast_rx_nombuf, 0, "rx setup failed 'cuz no mbuf"); 6520 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_busdma", CTLFLAG_RD, 6521 &sc->sc_stats.ast_rx_busdma, 0, "rx setup failed for dma resrcs"); 6522 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_orn", CTLFLAG_RD, 6523 &sc->sc_stats.ast_rx_orn, 0, "rx failed 'cuz of desc overrun"); 6524 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_crcerr", CTLFLAG_RD, 6525 &sc->sc_stats.ast_rx_crcerr, 0, "rx failed 'cuz of bad CRC"); 6526 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_fifoerr", CTLFLAG_RD, 6527 &sc->sc_stats.ast_rx_fifoerr, 0, "rx failed 'cuz of FIFO overrun"); 6528 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_badcrypt", CTLFLAG_RD, 6529 &sc->sc_stats.ast_rx_badcrypt, 0, "rx failed 'cuz decryption"); 6530 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_badmic", CTLFLAG_RD, 6531 &sc->sc_stats.ast_rx_badmic, 0, "rx failed 'cuz MIC failure"); 6532 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_phyerr", CTLFLAG_RD, 6533 &sc->sc_stats.ast_rx_phyerr, 0, "rx failed 'cuz of PHY err"); 6534 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_tooshort", CTLFLAG_RD, 6535 &sc->sc_stats.ast_rx_tooshort, 0, "rx discarded 'cuz frame too short"); 6536 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_toobig", CTLFLAG_RD, 6537 &sc->sc_stats.ast_rx_toobig, 0, "rx discarded 'cuz frame too large"); 6538 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_packets", CTLFLAG_RD, 6539 &sc->sc_stats.ast_rx_packets, 0, "packet recv on the interface"); 6540 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_mgt", CTLFLAG_RD, 6541 &sc->sc_stats.ast_rx_mgt, 0, "management frames received"); 6542 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_ctl", CTLFLAG_RD, 6543 &sc->sc_stats.ast_rx_ctl, 0, "rx discarded 'cuz ctl frame"); 6544 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_be_xmit", CTLFLAG_RD, 6545 &sc->sc_stats.ast_be_xmit, 0, "beacons transmitted"); 6546 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_be_nombuf", CTLFLAG_RD, 6547 &sc->sc_stats.ast_be_nombuf, 0, "beacon setup failed 'cuz no mbuf"); 6548 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_per_cal", CTLFLAG_RD, 6549 &sc->sc_stats.ast_per_cal, 0, "periodic calibration calls"); 6550 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_per_calfail", CTLFLAG_RD, 6551 &sc->sc_stats.ast_per_calfail, 0, "periodic calibration failed"); 6552 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_per_rfgain", CTLFLAG_RD, 6553 &sc->sc_stats.ast_per_rfgain, 0, "periodic calibration rfgain reset"); 6554 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rate_calls", CTLFLAG_RD, 6555 &sc->sc_stats.ast_rate_calls, 0, "rate control checks"); 6556 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rate_raise", CTLFLAG_RD, 6557 &sc->sc_stats.ast_rate_raise, 0, "rate control raised xmit rate"); 6558 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rate_drop", CTLFLAG_RD, 6559 &sc->sc_stats.ast_rate_drop, 0, "rate control dropped xmit rate"); 6560 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ant_defswitch", CTLFLAG_RD, 6561 &sc->sc_stats.ast_ant_defswitch, 0, "rx/default antenna switches"); 6562 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ant_txswitch", CTLFLAG_RD, 6563 &sc->sc_stats.ast_ant_txswitch, 0, "tx antenna switches"); 6564 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_cabq_xmit", CTLFLAG_RD, 6565 &sc->sc_stats.ast_cabq_xmit, 0, "cabq frames transmitted"); 6566 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_cabq_busy", CTLFLAG_RD, 6567 &sc->sc_stats.ast_cabq_busy, 0, "cabq found busy"); 6568 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_raw", CTLFLAG_RD, 6569 &sc->sc_stats.ast_tx_raw, 0, "tx frames through raw api"); 6570 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ff_txok", CTLFLAG_RD, 6571 &sc->sc_stats.ast_ff_txok, 0, "fast frames tx'd successfully"); 6572 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ff_txerr", CTLFLAG_RD, 6573 &sc->sc_stats.ast_ff_txerr, 0, "fast frames tx'd w/ error"); 6574 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ff_rx", CTLFLAG_RD, 6575 &sc->sc_stats.ast_ff_rx, 0, "fast frames rx'd"); 6576 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ff_flush", CTLFLAG_RD, 6577 &sc->sc_stats.ast_ff_flush, 0, "fast frames flushed from staging q"); 6578 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_qfull", CTLFLAG_RD, 6579 &sc->sc_stats.ast_tx_qfull, 0, "tx dropped 'cuz of queue limit"); 6580 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_nobuf", CTLFLAG_RD, 6581 &sc->sc_stats.ast_tx_nobuf, 0, "tx dropped 'cuz no ath buffer"); 6582 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tdma_update", CTLFLAG_RD, 6583 &sc->sc_stats.ast_tdma_update, 0, "TDMA slot timing updates"); 6584 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tdma_timers", CTLFLAG_RD, 6585 &sc->sc_stats.ast_tdma_timers, 0, "TDMA slot update set beacon timers"); 6586 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tdma_tsf", CTLFLAG_RD, 6587 &sc->sc_stats.ast_tdma_tsf, 0, "TDMA slot update set TSF"); 6588 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tdma_ack", CTLFLAG_RD, 6589 &sc->sc_stats.ast_tdma_ack, 0, "TDMA tx failed 'cuz ACK required"); 6590 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_raw_fail", CTLFLAG_RD, 6591 &sc->sc_stats.ast_tx_raw_fail, 0, "raw tx failed 'cuz h/w down"); 6592 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_nofrag", CTLFLAG_RD, 6593 &sc->sc_stats.ast_tx_nofrag, 0, "tx dropped 'cuz no ath frag buffer"); 6594 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_be_missed", CTLFLAG_RD, 6595 &sc->sc_stats.ast_be_missed, 0, "number of -missed- beacons"); 6596 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_ani_cal", CTLFLAG_RD, 6597 &sc->sc_stats.ast_ani_cal, 0, "number of ANI polls"); 6598 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_agg", CTLFLAG_RD, 6599 &sc->sc_stats.ast_rx_agg, 0, "number of aggregate frames received"); 6600 6601 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_halfgi", CTLFLAG_RD, 6602 &sc->sc_stats.ast_rx_halfgi, 0, "number of frames received with half-GI"); 6603 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_2040", CTLFLAG_RD, 6604 &sc->sc_stats.ast_rx_2040, 0, "number of HT/40 frames received"); 6605 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_pre_crc_err", CTLFLAG_RD, 6606 &sc->sc_stats.ast_rx_pre_crc_err, 0, "number of delimeter-CRC errors detected"); 6607 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_post_crc_err", CTLFLAG_RD, 6608 &sc->sc_stats.ast_rx_post_crc_err, 0, "number of post-delimiter CRC errors detected"); 6609 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_decrypt_busy_err", CTLFLAG_RD, 6610 &sc->sc_stats.ast_rx_decrypt_busy_err, 0, "number of frames received w/ busy decrypt engine"); 6611 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_hi_rx_chain", CTLFLAG_RD, 6612 &sc->sc_stats.ast_rx_hi_rx_chain, 0, ""); 6613 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_htprotect", CTLFLAG_RD, 6614 &sc->sc_stats.ast_tx_htprotect, 0, "HT tx frames with protection"); 6615 6616 /* Attach the RX phy error array */ 6617 ath_sysctl_stats_attach_rxphyerr(sc, child); 6618} | |