aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/ath/ah_osdep.c31
-rw-r--r--sys/dev/ath/ath_hal/ah.h12
-rw-r--r--sys/dev/ath/ath_hal/ah_internal.h9
-rw-r--r--sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c5
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c6
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar2133.c2
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_misc.c2
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c6
-rw-r--r--sys/dev/ath/if_ath.c1
-rw-r--r--sys/dev/ath/if_ath_sysctl.c40
-rw-r--r--sys/dev/ath/if_ath_sysctl.h2
15 files changed, 77 insertions, 55 deletions
diff --git a/sys/dev/ath/ah_osdep.c b/sys/dev/ath/ah_osdep.c
index b14bba037e5b..c0f9b8c8e26f 100644
--- a/sys/dev/ath/ah_osdep.c
+++ b/sys/dev/ath/ah_osdep.c
@@ -76,33 +76,6 @@ extern void DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...);
/* NB: put this here instead of the driver to avoid circular references */
SYSCTL_NODE(_hw, OID_AUTO, ath, CTLFLAG_RD, 0, "Atheros driver parameters");
-SYSCTL_NODE(_hw_ath, OID_AUTO, hal, CTLFLAG_RD, 0, "Atheros HAL parameters");
-
-#ifdef AH_DEBUG
-int ath_hal_debug = 0;
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, debug, CTLFLAG_RW, &ath_hal_debug,
- 0, "Atheros HAL debugging printfs");
-TUNABLE_INT("hw.ath.hal.debug", &ath_hal_debug);
-#endif /* AH_DEBUG */
-
-int ath_hal_ar5416_biasadj = 0;
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, ar5416_biasadj, CTLFLAG_RW,
- &ath_hal_ar5416_biasadj, 0, "Enable 2ghz AR5416 direction sensitivity"
- " bias adjust");
-
-/* NB: these are deprecated; they exist for now for compatibility */
-int ath_hal_dma_beacon_response_time = 2; /* in TU's */
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, dma_brt, CTLFLAG_RW,
- &ath_hal_dma_beacon_response_time, 0,
- "Atheros HAL DMA beacon response time");
-int ath_hal_sw_beacon_response_time = 10; /* in TU's */
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, sw_brt, CTLFLAG_RW,
- &ath_hal_sw_beacon_response_time, 0,
- "Atheros HAL software beacon response time");
-int ath_hal_additional_swba_backoff = 0; /* in TU's */
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, swba_backoff, CTLFLAG_RW,
- &ath_hal_additional_swba_backoff, 0,
- "Atheros HAL additional SWBA backoff time");
MALLOC_DEFINE(M_ATH_HAL, "ath_hal", "ath hal data");
@@ -146,7 +119,7 @@ ath_hal_ether_sprintf(const u_int8_t *mac)
void
DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...)
{
- if ((mask == HAL_DEBUG_UNMASKABLE) || (ath_hal_debug & mask)) {
+ if ((mask == HAL_DEBUG_UNMASKABLE) || (ah->ah_config.ah_debug & mask)) {
__va_list ap;
va_start(ap, fmt);
ath_hal_vprintf(ah, fmt, ap);
@@ -174,6 +147,8 @@ DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...)
#include <sys/pcpu.h>
#include <dev/ath/ath_hal/ah_decode.h>
+SYSCTL_NODE(_hw_ath, OID_AUTO, hal, CTLFLAG_RD, 0, "Atheros HAL parameters");
+
static struct alq *ath_hal_alq;
static int ath_hal_alq_emitdev; /* need to emit DEVICE record */
static u_int ath_hal_alq_lost; /* count of lost records */
diff --git a/sys/dev/ath/ath_hal/ah.h b/sys/dev/ath/ath_hal/ah.h
index 7a01be354436..f81e6aab2736 100644
--- a/sys/dev/ath/ath_hal/ah.h
+++ b/sys/dev/ath/ath_hal/ah.h
@@ -756,6 +756,17 @@ struct dfs_event {
};
typedef struct dfs_event HAL_DFS_EVENT;
+typedef struct
+{
+ int ah_debug; /* only used if AH_DEBUG is defined */
+ int ah_ar5416_biasadj; /* enable AR2133 radio specific bias fiddling */
+
+ /* NB: these are deprecated; they exist for now for compatibility */
+ int ah_dma_beacon_response_time;/* in TU's */
+ int ah_sw_beacon_response_time; /* in TU's */
+ int ah_additional_swba_backoff; /* in TU's */
+}HAL_OPS_CONFIG;
+
/*
* Hardware Access Layer (HAL) API.
*
@@ -784,6 +795,7 @@ struct ath_hal {
uint16_t *ah_eepromdata; /* eeprom buffer, if needed */
+ HAL_OPS_CONFIG ah_config;
const HAL_RATE_TABLE *__ahdecl(*ah_getRateTable)(struct ath_hal *,
u_int mode);
void __ahdecl(*ah_detach)(struct ath_hal*);
diff --git a/sys/dev/ath/ath_hal/ah_internal.h b/sys/dev/ath/ath_hal/ah_internal.h
index d66c9d87144a..91edc34e2978 100644
--- a/sys/dev/ath/ath_hal/ah_internal.h
+++ b/sys/dev/ath/ath_hal/ah_internal.h
@@ -475,12 +475,6 @@ isBigEndian(void)
#define OS_A_REG_RMW_FIELD(_a, _r, _f, _v) \
do { OS_REG_WRITE(_a, _r, (OS_REG_READ(_a, _r) &~ (_f)) | (((_v) << _f##_S) & (_f))) ; OS_DELAY(100); } while (0)
-/* system-configurable parameters */
-extern int ath_hal_dma_beacon_response_time; /* in TU's */
-extern int ath_hal_sw_beacon_response_time; /* in TU's */
-extern int ath_hal_additional_swba_backoff; /* in TU's */
-extern int ath_hal_ar5416_biasadj; /* 1 or 0 */
-
/* wait for the register contents to have the specified value */
extern HAL_BOOL ath_hal_wait(struct ath_hal *, u_int reg,
uint32_t mask, uint32_t val);
@@ -504,11 +498,10 @@ extern void ath_hal_free(void *);
/* common debugging interfaces */
#ifdef AH_DEBUG
#include "ah_debug.h"
-extern int ath_hal_debug;
#define HALDEBUG(_ah, __m, ...) \
do { \
if ((__m) == HAL_DEBUG_UNMASKABLE || \
- (ath_hal_debug & (__m))) { \
+ ((_ah != AH_NULL) && (((struct ath_hal*)_ah)->ah_config.ah_debug & (__m)))) { \
DO_HALDEBUG((_ah), (__m), __VA_ARGS__); \
} \
} while(0);
diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c b/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c
index dbd059e0e8f3..a613c9ca7d16 100644
--- a/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c
+++ b/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c
@@ -56,9 +56,9 @@ ar5210BeaconInit(struct ath_hal *ah,
if (AH_PRIVATE(ah)->ah_opmode != HAL_M_STA) {
bt.bt_nextdba = (next_beacon -
- ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 TU */
bt.bt_nextswba = (next_beacon -
- ath_hal_sw_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_sw_beacon_response_time) << 3; /* 1/8 TU */
/*
* The SWBA interrupt is not used for beacons in ad hoc mode
* as we don't yet support ATIMs. So since the beacon never
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c b/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c
index 669b8f65ecb8..31e9c5df8a93 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c
@@ -71,9 +71,9 @@ ar5211BeaconInit(struct ath_hal *ah,
case HAL_M_IBSS:
case HAL_M_HOSTAP:
bt.bt_nextdba = (next_beacon -
- ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 TU */
bt.bt_nextswba = (next_beacon -
- ath_hal_sw_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_sw_beacon_response_time) << 3; /* 1/8 TU */
break;
}
/*
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c b/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
index 3af314f6ca59..e1e7f73bf26d 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
@@ -345,8 +345,9 @@ ar5211ResetTxQueue(struct ath_hal *ah, u_int q)
| AR_Q_MISC_CBR_INCR_DIS0 | AR_Q_MISC_RDYTIME_EXP_POLICY);
value = (ahp->ah_beaconInterval
- - (ath_hal_sw_beacon_response_time - ath_hal_dma_beacon_response_time)
- - ath_hal_additional_swba_backoff) * 1024;
+ - (ah->ah_config.ah_sw_beacon_response_time
+ - ah->ah_config.ah_dma_beacon_response_time)
+ - ah->ah_config.ah_additional_swba_backoff) * 1024;
OS_REG_WRITE(ah, AR_QRDYTIMECFG(q), value | AR_Q_RDYTIMECFG_EN);
/* Configure DCU for CAB */
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c b/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
index 538f8b8d610f..6c1937aff1cf 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
@@ -84,9 +84,9 @@ ar5212BeaconInit(struct ath_hal *ah,
case HAL_M_HOSTAP:
case HAL_M_IBSS:
bt.bt_nextdba = (next_beacon -
- ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 TU */
bt.bt_nextswba = (next_beacon -
- ath_hal_sw_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_sw_beacon_response_time) << 3; /* 1/8 TU */
break;
}
/*
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c b/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
index 4fbce31acade..3c6ddc0035fe 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
@@ -416,9 +416,9 @@ ar5212ResetTxQueue(struct ath_hal *ah, u_int q)
* here solely for backwards compatibility.
*/
value = (ahp->ah_beaconInterval
- - (ath_hal_sw_beacon_response_time -
- ath_hal_dma_beacon_response_time)
- - ath_hal_additional_swba_backoff) * 1024;
+ - (ah->ah_config.ah_sw_beacon_response_time -
+ ah->ah_config.ah_dma_beacon_response_time)
+ - ah->ah_config.ah_additional_swba_backoff) * 1024;
OS_REG_WRITE(ah, AR_QRDYTIMECFG(q), value | AR_Q_RDYTIMECFG_ENA);
}
dmisc |= SM(AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL,
diff --git a/sys/dev/ath/ath_hal/ar5416/ar2133.c b/sys/dev/ath/ath_hal/ar5416/ar2133.c
index f92ea00ac09b..f25c108267e2 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar2133.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar2133.c
@@ -185,7 +185,7 @@ ar2133SetChannel(struct ath_hal *ah, const struct ieee80211_channel *chan)
}
/* Workaround for hw bug - AR5416 specific */
- if (AR_SREV_OWL(ah) && ath_hal_ar5416_biasadj)
+ if (AR_SREV_OWL(ah) && ah->ah_config.ah_ar5416_biasadj)
ar2133ForceBias(ah, freq);
reg32 = (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c b/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c
index 358a0eed245d..ee6c1eb3645a 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c
@@ -93,9 +93,9 @@ ar5416BeaconInit(struct ath_hal *ah,
/* fall thru... */
case HAL_M_HOSTAP:
bt.bt_nextdba = (next_beacon -
- ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 TU */
bt.bt_nextswba = (next_beacon -
- ath_hal_sw_beacon_response_time) << 3; /* 1/8 TU */
+ ah->ah_config.ah_sw_beacon_response_time) << 3; /* 1/8 TU */
bt.bt_flags |= AR_TIMER_MODE_TBTT
| AR_TIMER_MODE_DBA
| AR_TIMER_MODE_SWBA;
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c b/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
index 2332656e8f54..6266b5813532 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
@@ -288,7 +288,7 @@ ar5416SetQuiet(struct ath_hal *ah, uint32_t period, uint32_t duration,
nextStart_us += OS_REG_READ(ah, AR_TSF_L32);
}
if (flag & HAL_QUIET_ADD_SWBA_RESP_TIME) {
- nextStart_us += ath_hal_sw_beacon_response_time;
+ nextStart_us += ah->ah_config.ah_sw_beacon_response_time;
}
OS_REG_RMW_FIELD(ah, AR_QUIET1, AR_QUIET1_QUIET_ACK_CTS_ENABLE, 1);
OS_REG_WRITE(ah, AR_QUIET2, SM(duration, AR_QUIET2_QUIET_DUR));
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
index 48956c51cb84..20791e8a5a50 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
@@ -1035,9 +1035,9 @@ ar5416ResetTxQueue(struct ath_hal *ah, u_int q)
* here solely for backwards compatibility.
*/
value = (ahp->ah_beaconInterval
- - (ath_hal_sw_beacon_response_time -
- ath_hal_dma_beacon_response_time)
- - ath_hal_additional_swba_backoff) * 1024;
+ - (ah->ah_config.ah_sw_beacon_response_time -
+ ah->ah_config.ah_dma_beacon_response_time)
+ - ah->ah_config.ah_additional_swba_backoff) * 1024;
OS_REG_WRITE(ah, AR_QRDYTIMECFG(q), value | AR_Q_RDYTIMECFG_ENA);
}
dmisc |= SM(AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL,
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index 6c7b0e7614b2..f3afc70b201e 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -738,6 +738,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
*/
ath_sysctlattach(sc);
ath_sysctl_stats_attach(sc);
+ ath_sysctl_hal_attach(sc);
if (bootverbose)
ieee80211_announce(ic);
diff --git a/sys/dev/ath/if_ath_sysctl.c b/sys/dev/ath/if_ath_sysctl.c
index 6c1a6b210425..e3c9966b8f55 100644
--- a/sys/dev/ath/if_ath_sysctl.c
+++ b/sys/dev/ath/if_ath_sysctl.c
@@ -719,3 +719,43 @@ ath_sysctl_stats_attach(struct ath_softc *sc)
/* Attach the RX phy error array */
ath_sysctl_stats_attach_rxphyerr(sc, child);
}
+
+/*
+ * This doesn't necessarily belong here (because it's HAL related, not
+ * driver related).
+ */
+void
+ath_sysctl_hal_attach(struct ath_softc *sc)
+{
+ struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev);
+ struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev);
+ struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
+
+ tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "hal", CTLFLAG_RD,
+ NULL, "Atheros HAL parameters");
+ child = SYSCTL_CHILDREN(tree);
+
+ sc->sc_ah->ah_config.ah_debug = 0;
+ SYSCTL_ADD_INT(ctx, child, OID_AUTO, "debug", CTLFLAG_RW,
+ &sc->sc_ah->ah_config.ah_debug, 0, "Atheros HAL debugging printfs");
+
+ sc->sc_ah->ah_config.ah_ar5416_biasadj = 0;
+ SYSCTL_ADD_INT(ctx, child, OID_AUTO, "ar5416_biasadj", CTLFLAG_RW,
+ &sc->sc_ah->ah_config.ah_ar5416_biasadj, 0,
+ "Enable 2ghz AR5416 direction sensitivity bias adjust");
+
+ sc->sc_ah->ah_config.ah_dma_beacon_response_time = 2;
+ SYSCTL_ADD_INT(ctx, child, OID_AUTO, "dma_brt", CTLFLAG_RW,
+ &sc->sc_ah->ah_config.ah_dma_beacon_response_time, 0,
+ "Atheros HAL DMA beacon response time");
+
+ sc->sc_ah->ah_config.ah_sw_beacon_response_time = 10;
+ SYSCTL_ADD_INT(ctx, child, OID_AUTO, "sw_brt", CTLFLAG_RW,
+ &sc->sc_ah->ah_config.ah_sw_beacon_response_time, 0,
+ "Atheros HAL software beacon response time");
+
+ sc->sc_ah->ah_config.ah_additional_swba_backoff = 0;
+ SYSCTL_ADD_INT(ctx, child, OID_AUTO, "swba_backoff", CTLFLAG_RW,
+ &sc->sc_ah->ah_config.ah_additional_swba_backoff, 0,
+ "Atheros HAL additional SWBA backoff time");
+}
diff --git a/sys/dev/ath/if_ath_sysctl.h b/sys/dev/ath/if_ath_sysctl.h
index f96a73e9aac5..1fef2be224a4 100644
--- a/sys/dev/ath/if_ath_sysctl.h
+++ b/sys/dev/ath/if_ath_sysctl.h
@@ -34,5 +34,5 @@
extern void ath_sysctlattach(struct ath_softc *);
extern void ath_sysctl_stats_attach(struct ath_softc *sc);
-
+extern void ath_sysctl_hal_attach(struct ath_softc *sc);
#endif