48#include <sys/sysctl.h>
50#include <sys/malloc.h>
53#include <sys/kernel.h>
54#include <sys/socket.h>
55#include <sys/sockio.h>
57#include <sys/callout.h>
59#include <sys/endian.h>
60#include <sys/kthread.h>
61#include <sys/taskqueue.h>
64#include <machine/bus.h>
67#include <net/if_var.h>
69#include <net/if_media.h>
70#include <net/if_types.h>
71#include <net/if_arp.h>
72#include <net/ethernet.h>
73#include <net/if_llc.h>
75#include <net80211/ieee80211_var.h>
76#include <net80211/ieee80211_regdomain.h>
77#ifdef IEEE80211_SUPPORT_SUPERG
78#include <net80211/ieee80211_superg.h>
80#ifdef IEEE80211_SUPPORT_TDMA
81#include <net80211/ieee80211_tdma.h>
87#include <netinet/in.h>
88#include <netinet/if_ether.h>
102#include <dev/ath/ath_tx99/ath_tx99.h>
121 error = sysctl_handle_int(oidp, &slottime, 0, req);
122 if (error || !req->newptr)
147 error = sysctl_handle_int(oidp, &acktimeout, 0, req);
148 if (error || !req->newptr)
173 error = sysctl_handle_int(oidp, &ctstimeout, 0, req);
174 if (error || !req->newptr)
194 error = sysctl_handle_int(oidp, &softled, 0, req);
195 if (error || !req->newptr)
197 softled = (softled != 0);
215 error = sysctl_handle_int(oidp, &ledpin, 0, req);
216 if (error || !req->newptr)
234 error = sysctl_handle_int(oidp, &hardled, 0, req);
235 if (error || !req->newptr)
237 hardled = (hardled != 0);
261 error = sysctl_handle_int(oidp, &txantenna, 0, req);
262 if (!error && req->newptr) {
297 error = sysctl_handle_int(oidp, &defantenna, 0, req);
298 if (!error && req->newptr)
321 error = sysctl_handle_int(oidp, &diversity, 0, req);
322 if (error || !req->newptr)
355 error = sysctl_handle_int(oidp, &diag, 0, req);
356 if (error || !req->newptr)
380 error = sysctl_handle_int(oidp, &scale, 0, req);
381 if (error || !req->newptr)
409 error = sysctl_handle_int(oidp, &tpc, 0, req);
410 if (error || !req->newptr)
436 error = sysctl_handle_int(oidp, &rfkill, 0, req);
437 if (error || !req->newptr)
466 error = sysctl_handle_int(oidp, ¶m, 0, req);
467 if (error || !req->newptr)
476 printf(
"aggr single packet: %d\n",
478 printf(
"aggr single packet w/ BAW closed: %d\n",
480 printf(
"aggr non-baw packet: %d\n",
482 printf(
"aggr aggregate packet: %d\n",
484 printf(
"aggr single packet low hwq: %d\n",
486 printf(
"aggr single packet RTS aggr limited: %d\n",
488 printf(
"aggr sched, no work: %d\n",
490 for (i = 0; i < 64; i++) {
499 printf(
"HW TXQ %d: axq_depth=%d, axq_aggr_depth=%d, "
500 "axq_fifo_depth=%d, holdingbf=%p\n",
511 TAILQ_FOREACH(bf, &sc->
sc_txbuf, bf_list) {
513 printf(
"Busy: %d\n", t);
519 printf(
"Total TX buffers: %d; Total TX buffers busy: %d (%d)\n",
526 printf(
"Busy: %d\n", t);
532 printf(
"Total mgmt TX buffers: %d; Total mgmt TX buffers busy: %d\n",
536 for (i = 0; i < 2; i++) {
537 printf(
"%d: fifolen: %d/%d; head=%d; tail=%d; m_pending=%p, m_holdbf=%p\n",
547 TAILQ_FOREACH(bf, &sc->
sc_rxbuf, bf_list) {
550 printf(
"Total RX buffers in free list: %d buffers\n",
569 error = sysctl_handle_int(oidp, &rfsilent, 0, req);
570 if (error || !req->newptr)
608 error = sysctl_handle_int(oidp, &tpack, 0, req);
609 if (error || !req->newptr)
633 error = sysctl_handle_int(oidp, &tpcts, 0, req);
634 if (error || !req->newptr)
658 error = sysctl_handle_int(oidp, &intmit, 0, req);
659 if (error || !req->newptr)
687#ifdef IEEE80211_SUPPORT_TDMA
689ath_sysctl_setcca(SYSCTL_HANDLER_ARGS)
695 error = sysctl_handle_int(oidp, &setcca, 0, req);
696 if (error || !req->newptr)
710 error = sysctl_handle_int(oidp, &val, 0, req);
711 if (error || !req->newptr)
727 uint32_t mask = 0xffffffff;
732 error = sysctl_handle_int(oidp, &val, 0, req);
733 if (error || !req->newptr)
745 (
void *) &sp, &rsize)) {
750 device_printf(sc->
sc_dev,
"%s: sp=0x%08x\n", __func__, *sp);
764ath_sysctl_alq_log(SYSCTL_HANDLER_ARGS)
769 enable = (sc->sc_alq.sc_alq_isactive);
771 error = sysctl_handle_int(oidp, &enable, 0, req);
772 if (error || !req->newptr)
785ath_sysctl_alq_attach(
struct ath_softc *sc)
787 struct sysctl_oid *tree = device_get_sysctl_tree(sc->
sc_dev);
788 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->
sc_dev);
789 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
791 tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO,
"alq",
792 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
793 "Atheros ALQ logging parameters");
794 child = SYSCTL_CHILDREN(tree);
796 SYSCTL_ADD_STRING(ctx, child, OID_AUTO,
"filename",
797 CTLFLAG_RW, sc->sc_alq.sc_alq_filename, 0,
"ALQ filename");
799 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
800 "enable", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
801 ath_sysctl_alq_log,
"I",
"");
803 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
804 "debugmask", CTLFLAG_RW, &sc->sc_alq.sc_alq_debug, 0,
807 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
808 "numlost", CTLFLAG_RW, &sc->sc_alq.sc_alq_numlost, 0,
816 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->
sc_dev);
817 struct sysctl_oid *tree = device_get_sysctl_tree(sc->
sc_dev);
820 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
821 "countrycode", CTLFLAG_RD, &sc->
sc_eecc, 0,
822 "EEPROM country code");
823 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
824 "regdomain", CTLFLAG_RD, &sc->
sc_eerd, 0,
825 "EEPROM regdomain code");
827 SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
829 "control debugging printfs");
832 SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
834 "control debugging KTR");
836 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
837 "slottime", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
839 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
840 "acktimeout", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
842 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
843 "ctstimeout", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
846 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
847 "softled", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
849 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
850 "ledpin", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
852 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
853 "ledon", CTLFLAG_RW, &sc->
sc_ledon, 0,
854 "setting to turn LED on");
855 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
857 "idle time for inactivity LED (ticks)");
859 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
860 "hardled", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
863 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
865 "MAC Network LED pin, or -1 to disable");
866 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
868 "MAC Power LED pin, or -1 to disable");
870 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
871 "txantenna", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
873 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
874 "rxantenna", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
877 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
878 "diversity", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
881 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
883 "tx descriptor batching");
884 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
885 "diag", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
887 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
888 "tpscale", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
891 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
892 "tpc", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
894 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
895 "tpack", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc,
897 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
898 "tpcts", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc,
902 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
903 "rfsilent", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
905 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
906 "rfkill", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc,
910 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
911 "txagg", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
914 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
915 "forcebstuck", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc,
918 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
919 "hangcheck", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0,
923 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
924 "intmit", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc,
928 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
930 "mask of error frames to pass when monitoring");
932 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
934 "Hardware non-AMPDU queue depth before software-queuing TX frames");
935 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
937 "Hardware AMPDU queue depth before software-queuing TX frames");
938 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
941 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
946 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
948 "Maximum A-MPDU size, or 0 for 'default'");
949 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
951 "Maximum A-MPDU size for RTS-protected frames, or '0' "
953 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
955 "Enforce a minimum number of delimiters per A-MPDU "
958 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
960 0,
"Minimum free buffers before adding a data frame"
962 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
963 "txq_mcastq_maxdepth", CTLFLAG_RW,
965 "Maximum buffer depth for multicast/broadcast frames");
966 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
967 "txq_node_maxdepth", CTLFLAG_RW,
969 "Maximum buffer depth for a single node");
972 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
973 "cabq_enable", CTLFLAG_RW,
975 "Whether to transmit on the CABQ or not");
978#ifdef IEEE80211_SUPPORT_TDMA
981 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
983 "TDMA DBA preparation time");
985 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
987 "TDMA SWBA preparation time");
988 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
990 "TDMA slot guard time");
991 SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
993 "TDMA calculated super frame");
994 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
995 "setcca", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
996 sc, 0, ath_sysctl_setcca,
"I",
"enable CCA control");
1001 ath_sysctl_alq_attach(sc);
1012 error = sysctl_handle_int(oidp, &val, 0, req);
1013 if (error || !req->newptr)
1028 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->
sc_dev);
1029 struct sysctl_oid *tree = device_get_sysctl_tree(sc->
sc_dev);
1030 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
1034 tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO,
"rx_phy_err",
1035 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Per-code RX PHY Errors");
1036 child = SYSCTL_CHILDREN(tree);
1037 for (i = 0; i < 64; i++) {
1038 snprintf(sn,
sizeof(sn),
"%d", i);
1039 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, sn, CTLFLAG_RD, &sc->
sc_stats.
ast_rx_phy[i], 0,
"");
1045 struct sysctl_oid_list *parent)
1047 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->
sc_dev);
1048 struct sysctl_oid *tree = device_get_sysctl_tree(sc->
sc_dev);
1049 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
1053 tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO,
"sync_intr",
1054 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Sync interrupt statistics");
1055 child = SYSCTL_CHILDREN(tree);
1056 for (i = 0; i < 32; i++) {
1057 snprintf(sn,
sizeof(sn),
"%d", i);
1058 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, sn, CTLFLAG_RD,
1066 struct sysctl_oid *tree = device_get_sysctl_tree(sc->
sc_dev);
1067 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->
sc_dev);
1068 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
1071 SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
1072 "clear_stats", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc,
1076 tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO,
"stats",
1077 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Statistics");
1078 child = SYSCTL_CHILDREN(tree);
1082 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_watchdog", CTLFLAG_RD,
1084 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_hardware", CTLFLAG_RD,
1086 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_bmiss", CTLFLAG_RD,
1088 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_bmiss_phantom", CTLFLAG_RD,
1090 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_bstuck", CTLFLAG_RD,
1092 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rxorn", CTLFLAG_RD,
1094 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rxeol", CTLFLAG_RD,
1096 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_txurn", CTLFLAG_RD,
1098 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_mib", CTLFLAG_RD,
1100 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_intrcoal", CTLFLAG_RD,
1102 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_packets", CTLFLAG_RD,
1104 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_mgmt", CTLFLAG_RD,
1106 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_discard", CTLFLAG_RD,
1108 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_qstop", CTLFLAG_RD,
1110 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_encap", CTLFLAG_RD,
1112 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nonode", CTLFLAG_RD,
1114 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nombuf", CTLFLAG_RD,
1116 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nomcl", CTLFLAG_RD,
1118 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_linear", CTLFLAG_RD,
1120 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nodata", CTLFLAG_RD,
1122 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_busdma", CTLFLAG_RD,
1124 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_xretries", CTLFLAG_RD,
1126 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_fifoerr", CTLFLAG_RD,
1128 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_filtered", CTLFLAG_RD,
1130 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_shortretry", CTLFLAG_RD,
1132 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_longretry", CTLFLAG_RD,
1134 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_badrate", CTLFLAG_RD,
1136 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_noack", CTLFLAG_RD,
1138 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_rts", CTLFLAG_RD,
1140 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_cts", CTLFLAG_RD,
1142 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_shortpre", CTLFLAG_RD,
1144 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_altrate", CTLFLAG_RD,
1146 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_protect", CTLFLAG_RD,
1148 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_ctsburst", CTLFLAG_RD,
1150 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_ctsext", CTLFLAG_RD,
1152 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_nombuf", CTLFLAG_RD,
1154 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_busdma", CTLFLAG_RD,
1156 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_orn", CTLFLAG_RD,
1158 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_crcerr", CTLFLAG_RD,
1160 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_fifoerr", CTLFLAG_RD,
1162 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_badcrypt", CTLFLAG_RD,
1164 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_badmic", CTLFLAG_RD,
1166 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_phyerr", CTLFLAG_RD,
1168 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_tooshort", CTLFLAG_RD,
1170 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_toobig", CTLFLAG_RD,
1172 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_packets", CTLFLAG_RD,
1174 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_mgt", CTLFLAG_RD,
1176 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_ctl", CTLFLAG_RD,
1178 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_be_xmit", CTLFLAG_RD,
1180 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_be_nombuf", CTLFLAG_RD,
1182 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_per_cal", CTLFLAG_RD,
1184 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_per_calfail", CTLFLAG_RD,
1186 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_per_rfgain", CTLFLAG_RD,
1188 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rate_calls", CTLFLAG_RD,
1190 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rate_raise", CTLFLAG_RD,
1192 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rate_drop", CTLFLAG_RD,
1194 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ant_defswitch", CTLFLAG_RD,
1196 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ant_txswitch", CTLFLAG_RD,
1198 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_cabq_xmit", CTLFLAG_RD,
1200 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_cabq_busy", CTLFLAG_RD,
1202 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_raw", CTLFLAG_RD,
1204 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ff_txok", CTLFLAG_RD,
1206 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ff_txerr", CTLFLAG_RD,
1208 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ff_rx", CTLFLAG_RD,
1210 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ff_flush", CTLFLAG_RD,
1212 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_qfull", CTLFLAG_RD,
1214 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nobuf", CTLFLAG_RD,
1216 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tdma_update", CTLFLAG_RD,
1218 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tdma_timers", CTLFLAG_RD,
1220 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tdma_tsf", CTLFLAG_RD,
1222 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tdma_ack", CTLFLAG_RD,
1224 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_raw_fail", CTLFLAG_RD,
1226 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nofrag", CTLFLAG_RD,
1228 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_be_missed", CTLFLAG_RD,
1230 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_ani_cal", CTLFLAG_RD,
1232 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_agg", CTLFLAG_RD,
1235 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_halfgi", CTLFLAG_RD,
1237 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_2040", CTLFLAG_RD,
1239 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_pre_crc_err", CTLFLAG_RD,
1241 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_post_crc_err", CTLFLAG_RD,
1243 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_decrypt_busy_err", CTLFLAG_RD,
1245 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_hi_rx_chain", CTLFLAG_RD,
1247 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_htprotect", CTLFLAG_RD,
1249 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_hitqueueend", CTLFLAG_RD,
1251 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_timeout", CTLFLAG_RD,
1253 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_cst", CTLFLAG_RD,
1255 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_xtxop", CTLFLAG_RD,
1257 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_timerexpired", CTLFLAG_RD,
1259 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_desccfgerr", CTLFLAG_RD,
1261 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_swretries", CTLFLAG_RD,
1263 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_swretrymax", CTLFLAG_RD,
1266 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_data_underrun", CTLFLAG_RD,
1268 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_delim_underrun", CTLFLAG_RD,
1270 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_aggr_failall", CTLFLAG_RD,
1272 "Number of aggregate TX failures (whole frame)");
1273 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_aggr_ok", CTLFLAG_RD,
1275 "Number of aggregate TX OK completions (subframe)");
1276 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_aggr_fail", CTLFLAG_RD,
1278 "Number of aggregate TX failures (subframe)");
1280 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_intr", CTLFLAG_RD,
1282 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_intr", CTLFLAG_RD,
1284 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_mcastq_overflow",
1286 "Number of multicast frames exceeding maximum mcast queue depth");
1287 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_keymiss", CTLFLAG_RD,
1289 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_swfiltered", CTLFLAG_RD,
1291 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_nodeq_overflow",
1293 "tx dropped 'cuz nodeq overflow");
1294 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_rx_stbc",
1296 "Number of STBC frames received");
1297 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_stbc",
1299 "Number of STBC frames transmitted");
1300 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tx_ldpc",
1302 "Number of LDPC frames transmitted");
1304 SYSCTL_ADD_UINT(ctx, child, OID_AUTO,
"ast_tsfoor",
1306 "Number of TSF out of range interrupts/resets");
1322 struct sysctl_oid *tree = device_get_sysctl_tree(sc->
sc_dev);
1323 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->
sc_dev);
1324 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
1326 tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO,
"hal",
1327 CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Atheros HAL parameters");
1328 child = SYSCTL_CHILDREN(tree);
1331 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"debug", CTLFLAG_RW,
1335 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"ar5416_biasadj", CTLFLAG_RW,
1337 "Enable 2GHz AR5416 direction sensitivity bias adjust");
1340 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"dma_brt", CTLFLAG_RW,
1342 "Atheros HAL DMA beacon response time");
1345 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"sw_brt", CTLFLAG_RW,
1347 "Atheros HAL software beacon response time");
1350 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"swba_backoff", CTLFLAG_RW,
1352 "Atheros HAL additional SWBA backoff time");
1355 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"force_full_reset", CTLFLAG_RW,
1357 "Force full chip reset rather than a warm reset");
1362 SYSCTL_ADD_INT(ctx, child, OID_AUTO,
"serialise_reg_war", CTLFLAG_RW,
1364 "Force register access serialisation");
#define HAL_NUM_TX_QUEUES
#define HAL_RXERR_DECRYPT
int ath_reset(struct ath_softc *sc, ATH_RESET_TYPE reset_type, HAL_RESET_TYPE ah_reset_type)
int if_ath_alq_stop(struct if_ath_alq *alq)
int if_ath_alq_start(struct if_ath_alq *alq)
void ath_led_config(struct ath_softc *sc)
#define ath_power_restore_power_state(sc)
#define ath_power_set_power_state(sc, ps)
static int ath_sysctl_softled(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_txagg(SYSCTL_HANDLER_ARGS)
void ath_sysctl_hal_attach(struct ath_softc *sc)
static int ath_sysctl_ctstimeout(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_rxantenna(SYSCTL_HANDLER_ARGS)
void ath_sysctl_stats_attach(struct ath_softc *sc)
static int ath_sysctl_intmit(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_rfsilent(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_rfkill(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_acktimeout(SYSCTL_HANDLER_ARGS)
void ath_sysctlattach(struct ath_softc *sc)
static int ath_sysctl_ledpin(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_forcebstuck(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_slottime(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_tpc(SYSCTL_HANDLER_ARGS)
static void ath_sysctl_stats_attach_intr(struct ath_softc *sc, struct sysctl_oid_list *parent)
static int ath_sysctl_tpscale(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_hardled(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_tpcts(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_diag(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_clearstats(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_tpack(SYSCTL_HANDLER_ARGS)
static void ath_sysctl_stats_attach_rxphyerr(struct ath_softc *sc, struct sysctl_oid_list *parent)
static int ath_sysctl_hangcheck(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_txantenna(SYSCTL_HANDLER_ARGS)
static int ath_sysctl_diversity(SYSCTL_HANDLER_ARGS)
#define ath_hal_settpack(_ah, _tpack)
#define ATH_TXINTR_PERIOD
#define ath_hal_gettpc(_ah)
#define ath_hal_getdiag(_ah, _pv)
#define ath_hal_gettpack(_ah, _ptpack)
#define ath_hal_setantennaswitch(_ah, _v)
#define ath_hal_hasrfsilent(_ah)
#define ath_hal_settpscale(_ah, _v)
#define ath_hal_hasintmit(_ah)
#define ath_hal_setdiag(_ah, _v)
#define ATH_TXBUF_LOCK(_sc)
#define ath_hal_hasdiversity(_ah)
#define ath_hal_setdiversity(_ah, _v)
#define ath_hal_setrfkill(_ah, _onoff)
#define ath_hal_settpcts(_ah, _tpcts)
#define ath_hal_getdiversity(_ah)
#define ATH_TXQ_SETUP(sc, i)
#define ath_hal_getctstimeout(_ah)
#define ath_hal_settpc(_ah, _v)
#define ath_hal_hastpc(_ah)
#define ath_hal_gettpscale(_ah, _scale)
#define ath_hal_setslottime(_ah, _us)
#define ath_hal_setctstimeout(_ah, _us)
#define ath_hal_setrfsilent(_ah, _rfsilent)
#define ath_hal_getslottime(_ah)
#define ath_hal_gettpcts(_ah, _ptpcts)
#define ath_hal_setacktimeout(_ah, _us)
#define ath_hal_getintmit(_ah)
#define ath_hal_getdefantenna(_ah)
#define ath_hal_getdiagstate(_ah, _id, _indata, _insize, _outdata, _outsize)
#define ath_hal_macversion(_ah)
#define ath_hal_getrfsilent(_ah, _prfsilent)
#define ath_hal_setintmit(_ah, _v)
#define ath_hal_getacktimeout(_ah)
#define ath_hal_getantennaswitch(_ah)
#define ATH_TXBUF_UNLOCK(_sc)
#define ath_hal_getrfkill(_ah)
#define ATH_RX_UNLOCK(_sc)
#define ath_hal_setdefantenna(_ah, _ant)
int ah_additional_swba_backoff
int ah_dma_beacon_response_time
int ah_sw_beacon_response_time
u_int32_t sync_intr[ATH_IOCTL_INTR_NUM_SYNC_INTR]
struct ath_buf * m_holdbf
struct mbuf * m_rxpending
struct ath_intr_stats sc_intr_stats
ath_bufhead sc_txbuf_mgmt
int sc_txq_mcastq_maxdepth
struct ath_stats sc_stats
uint32_t sc_rts_aggr_limit
struct ath_rx_edma sc_rxedma[HAL_NUM_RX_QUEUES]
struct ath_tx_aggr_stats sc_aggr_stats
struct task sc_bstucktask
struct ath_txq sc_txq[HAL_NUM_TX_QUEUES]
u_int32_t ast_ant_txswitch
u_int32_t ast_tx_ctsburst
u_int32_t ast_per_calfail
u_int32_t ast_tx_desccfgerr
u_int32_t ast_tx_swretries
u_int32_t ast_tx_data_underrun
u_int32_t ast_bmiss_phantom
u_int32_t ast_tx_filtered
u_int32_t ast_tx_xretries
u_int32_t ast_tx_getnobuf
u_int32_t ast_tx_swfiltered
u_int32_t ast_tx_longretry
u_int32_t ast_rx_tooshort
u_int32_t ast_tx_nodeq_overflow
u_int32_t ast_rx_hi_rx_chain
u_int32_t ast_rx_decrypt_busy_err
u_int32_t ast_ant_defswitch
u_int32_t ast_tx_shortpre
u_int32_t ast_tx_mcastq_overflow
u_int32_t ast_rx_hitqueueend
u_int32_t ast_tx_aggr_failall
u_int32_t ast_tx_aggr_fail
u_int32_t ast_tdma_timers
u_int32_t ast_rx_badcrypt
u_int32_t ast_tx_swretrymax
u_int32_t ast_rx_pre_crc_err
u_int32_t ast_rx_phy[ATH_IOCTL_STATS_NUM_RX_PHYERR]
u_int32_t ast_tx_delim_underrun
u_int32_t ast_tx_raw_fail
u_int32_t ast_rx_post_crc_err
u_int32_t ast_tx_timerexpired
u_int32_t ast_tx_htprotect
u_int32_t ast_tdma_update
u_int32_t ast_tx_shortretry
u_int32_t ast_tx_getbusybuf
u_int32_t aggr_baw_closed_single_pkt
u_int32_t aggr_single_pkt
u_int32_t aggr_sched_nopkt
u_int32_t aggr_rts_aggr_limited
u_int32_t aggr_nonbaw_pkt
u_int32_t aggr_low_hwq_single_pkt
struct ath_buf * axq_holdingbf