diff --git a/ath/if_ath.c b/ath/if_ath.c index 7a413af..9e0cfa5 100644 --- a/ath/if_ath.c +++ b/ath/if_ath.c @@ -342,6 +342,8 @@ static void ath_set_txcont_power(struct ieee80211com *, unsigned int); static unsigned int ath_get_txcont_rate(struct ieee80211com *); static void ath_set_txcont_rate(struct ieee80211com *ic, unsigned int new_rate); +static unsigned int ath_dump_hal_map(struct ieee80211com *ic); + static u_int32_t ath_get_clamped_maxtxpower(struct ath_softc *sc); static u_int32_t ath_set_clamped_maxtxpower(struct ath_softc *sc, u_int32_t new_clamped_maxtxpower); @@ -1049,6 +1051,7 @@ ath_attach(u_int16_t devid, struct net_device *dev, HAL_BUS_TAG tag) ic->ic_vap_create = ath_vap_create; ic->ic_vap_delete = ath_vap_delete; + ic->ic_dump_hal_map = ath_dump_hal_map; ic->ic_set_txcont = ath_set_txcont; ic->ic_get_txcont = ath_get_txcont; @@ -12068,6 +12071,16 @@ ath_registers_dump(struct ieee80211com *ic) } #endif /* #ifdef ATH_REVERSE_ENGINEERING */ +/* This is called by a private ioctl (iwpriv) to dump the HAL obfuscation table */ +static unsigned int +ath_dump_hal_map(struct ieee80211com *ic) +{ + struct net_device *dev = ic->ic_dev; + struct ath_softc *sc = dev->priv; + ath_hal_dump_map(sc->sc_ah); + return 0; +} + /* Make a copy of significant registers in the Atheros chip for later * comparison and dump with ath_registers_dump_delta */ #ifdef ATH_REVERSE_ENGINEERING diff --git a/ath/if_ath_hal.h b/ath/if_ath_hal.h index fd98596..45313f5 100644 --- a/ath/if_ath_hal.h +++ b/ath/if_ath_hal.h @@ -38,6 +38,9 @@ * ************************************************************** */ #include "if_ath_hal_macros.h" +#ifdef CONFIG_KALLSYMS +#include "linux/kallsyms.h" +#endif /* #ifdef CONFIG_KALLSYMS */ #ifndef _IF_ATH_HAL_H_ #define _IF_ATH_HAL_H_ @@ -62,14 +65,17 @@ static inline HAL_POWER_MODE ath_hal_getPowerMode(struct ath_hal *ah) return ret; } -static inline HAL_BOOL ath_hal_getdiagstate(struct ath_hal *ah, int request, - const void *args, u_int32_t argsize, void **result, - u_int32_t *resultsize) +static inline HAL_BOOL ath_hal_getdiagstate(struct ath_hal *ah, int request, + const void *args, u_int32_t argsize, + void **result, + u_int32_t *resultsize) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); - ret = ah->ah_getDiagState(ah, request, args, argsize, *result, resultsize); + ret = + ah->ah_getDiagState(ah, request, args, argsize, *result, + resultsize); ath_hal_set_function(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; @@ -84,8 +90,8 @@ static inline void ath_hal_beaconreset(struct ath_hal *ah) ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline void ath_hal_setcoverageclass(struct ath_hal *ah, u_int8_t a1, - int a2) +static inline void ath_hal_setcoverageclass(struct ath_hal *ah, u_int8_t a1, + int a2) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -125,8 +131,8 @@ static inline HAL_ANT_SETTING ath_hal_getantennaswitch(struct ath_hal *ah) return ret; } -static inline HAL_BOOL ath_hal_gpioset(struct ath_hal *ah, u_int32_t gpio, - u_int32_t val) +static inline HAL_BOOL ath_hal_gpioset(struct ath_hal *ah, u_int32_t gpio, + u_int32_t val) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -148,8 +154,8 @@ static inline HAL_BOOL ath_hal_gpioCfgOutput(struct ath_hal *ah, u_int32_t gpio) return ret; } -static inline HAL_BOOL ath_hal_clearmcastfilter(struct ath_hal *ah, - u_int32_t index) +static inline HAL_BOOL ath_hal_clearmcastfilter(struct ath_hal *ah, + u_int32_t index) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -160,8 +166,8 @@ static inline HAL_BOOL ath_hal_clearmcastfilter(struct ath_hal *ah, return ret; } -static inline void ath_hal_txreqintrdesc(struct ath_hal *ah, - struct ath_desc *a1) +static inline void ath_hal_txreqintrdesc(struct ath_hal *ah, + struct ath_desc *a1) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -170,8 +176,8 @@ static inline void ath_hal_txreqintrdesc(struct ath_hal *ah, ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline void ath_hal_rxmonitor(struct ath_hal *ah, - const HAL_NODE_STATS *a1, HAL_CHANNEL *a2) +static inline void ath_hal_rxmonitor(struct ath_hal *ah, + const HAL_NODE_STATS *a1, HAL_CHANNEL *a2) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -180,8 +186,8 @@ static inline void ath_hal_rxmonitor(struct ath_hal *ah, ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline HAL_BOOL ath_hal_puttxbuf(struct ath_hal *ah, u_int a1, - u_int32_t txdp) +static inline HAL_BOOL ath_hal_puttxbuf(struct ath_hal *ah, u_int a1, + u_int32_t txdp) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -192,8 +198,9 @@ static inline HAL_BOOL ath_hal_puttxbuf(struct ath_hal *ah, u_int a1, return ret; } -static inline HAL_BOOL ath_hal_keyset(struct ath_hal *ah, u_int16_t a1, - const HAL_KEYVAL *a2, const u_int8_t *a3, int a4) +static inline HAL_BOOL ath_hal_keyset(struct ath_hal *ah, u_int16_t a1, + const HAL_KEYVAL *a2, const u_int8_t *a3, + int a4) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -224,8 +231,8 @@ static inline HAL_RFGAIN ath_hal_getrfgain(struct ath_hal *ah) return ret; } -static inline void ath_hal_setmcastfilter(struct ath_hal *ah, - u_int32_t filter0, u_int32_t filter1) +static inline void ath_hal_setmcastfilter(struct ath_hal *ah, u_int32_t filter0, + u_int32_t filter1) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -245,8 +252,8 @@ static inline u_int ath_hal_getacktimeout(struct ath_hal *ah) return ret; } -static inline void ath_hal_beacontimers(struct ath_hal *ah, - const HAL_BEACON_STATE *a1) +static inline void ath_hal_beacontimers(struct ath_hal *ah, + const HAL_BEACON_STATE *a1) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -277,8 +284,8 @@ static inline u_int ath_hal_getslottime(struct ath_hal *ah) return ret; } -static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt, - u_int32_t intval) +static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt, + u_int32_t intval) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -287,8 +294,8 @@ static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt, ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline void ath_hal_gpiosetintr(struct ath_hal *ah, u_int a1, - u_int32_t a2) +static inline void ath_hal_gpiosetintr(struct ath_hal *ah, u_int a1, + u_int32_t a2) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -308,8 +315,8 @@ static inline HAL_BOOL ath_hal_releasetxqueue(struct ath_hal *ah, u_int q) return ret; } -static inline HAL_BOOL ath_hal_keysetmac(struct ath_hal *ah, u_int16_t a1, - const u_int8_t *a2) +static inline HAL_BOOL ath_hal_keysetmac(struct ath_hal *ah, u_int16_t a1, + const u_int8_t *a2) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -320,8 +327,9 @@ static inline HAL_BOOL ath_hal_keysetmac(struct ath_hal *ah, u_int16_t a1, return ret; } -static inline HAL_STATUS ath_hal_txprocdesc(struct ath_hal *ah, - struct ath_desc *a1, struct ath_tx_status *a2) +static inline HAL_STATUS ath_hal_txprocdesc(struct ath_hal *ah, + struct ath_desc *a1, + struct ath_tx_status *a2) { HAL_STATUS ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -354,8 +362,8 @@ static inline HAL_BOOL ath_hal_setacktimeout(struct ath_hal *ah, u_int a1) return ret; } -static inline HAL_BOOL ath_hal_setbssidmask(struct ath_hal *ah, - const u_int8_t *a1) +static inline HAL_BOOL ath_hal_setbssidmask(struct ath_hal *ah, + const u_int8_t *a1) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -388,8 +396,8 @@ static inline u_int32_t ath_hal_getrxfilter(struct ath_hal *ah) return ret; } -static inline int16_t ath_hal_get_channel_noise(struct ath_hal *ah, - HAL_CHANNEL *a1) +static inline int16_t ath_hal_get_channel_noise(struct ath_hal *ah, + HAL_CHANNEL *a1) { int16_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -411,8 +419,8 @@ static inline HAL_BOOL ath_hal_keyreset(struct ath_hal *ah, u_int16_t a1) return ret; } -static inline HAL_BOOL ath_hal_setantennaswitch(struct ath_hal *ah, - HAL_ANT_SETTING a1) +static inline HAL_BOOL ath_hal_setantennaswitch(struct ath_hal *ah, + HAL_ANT_SETTING a1) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -423,8 +431,8 @@ static inline HAL_BOOL ath_hal_setantennaswitch(struct ath_hal *ah, return ret; } -static inline HAL_BOOL ath_hal_settxqueueprops(struct ath_hal *ah, int q, - const HAL_TXQ_INFO *qInfo) +static inline HAL_BOOL ath_hal_settxqueueprops(struct ath_hal *ah, int q, + const HAL_TXQ_INFO *qInfo) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -444,8 +452,9 @@ static inline void ath_hal_putrxbuf(struct ath_hal *ah, u_int32_t rxdp) ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline HAL_BOOL ath_hal_reset(struct ath_hal *ah, HAL_OPMODE a1, - HAL_CHANNEL *a2, HAL_BOOL bChannelChange, HAL_STATUS *status) +static inline HAL_BOOL ath_hal_reset(struct ath_hal *ah, HAL_OPMODE a1, + HAL_CHANNEL *a2, HAL_BOOL bChannelChange, + HAL_STATUS *status) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -456,8 +465,8 @@ static inline HAL_BOOL ath_hal_reset(struct ath_hal *ah, HAL_OPMODE a1, return ret; } -static inline HAL_BOOL ath_hal_setdecompmask(struct ath_hal *ah, u_int16_t a1, - int a2) +static inline HAL_BOOL ath_hal_setdecompmask(struct ath_hal *ah, u_int16_t a1, + int a2) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -468,8 +477,8 @@ static inline HAL_BOOL ath_hal_setdecompmask(struct ath_hal *ah, u_int16_t a1, return ret; } -static inline HAL_BOOL ath_hal_gettxqueueprops(struct ath_hal *ah, int q, - HAL_TXQ_INFO *qInfo) +static inline HAL_BOOL ath_hal_gettxqueueprops(struct ath_hal *ah, int q, + HAL_TXQ_INFO *qInfo) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -480,9 +489,10 @@ static inline HAL_BOOL ath_hal_gettxqueueprops(struct ath_hal *ah, int q, return ret; } -static inline HAL_BOOL ath_hal_filltxdesc(struct ath_hal *ah, - struct ath_desc *a1, u_int segLen, HAL_BOOL firstSeg, - HAL_BOOL lastSeg, const struct ath_desc *a5) +static inline HAL_BOOL ath_hal_filltxdesc(struct ath_hal *ah, + struct ath_desc *a1, u_int segLen, + HAL_BOOL firstSeg, HAL_BOOL lastSeg, + const struct ath_desc *a5) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -522,8 +532,8 @@ static inline void ath_hal_setdefantenna(struct ath_hal *ah, u_int a1) ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline HAL_BOOL ath_hal_setpower(struct ath_hal *ah, - HAL_POWER_MODE mode, int setChip) +static inline HAL_BOOL ath_hal_setpower(struct ath_hal *ah, HAL_POWER_MODE mode, + int setChip) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -534,9 +544,12 @@ static inline HAL_BOOL ath_hal_setpower(struct ath_hal *ah, return ret; } -static inline HAL_STATUS ath_hal_rxprocdesc(struct ath_hal *ah, - struct ath_desc *a1, u_int32_t phyAddr, struct ath_desc *next, - u_int64_t tsf, struct ath_rx_status *a5) +static inline HAL_STATUS ath_hal_rxprocdesc(struct ath_hal *ah, + struct ath_desc *a1, + u_int32_t phyAddr, + struct ath_desc *next, + u_int64_t tsf, + struct ath_rx_status *a5) { HAL_STATUS ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -569,15 +582,18 @@ static inline u_int32_t ath_hal_keycachesize(struct ath_hal *ah) return ret; } -static inline HAL_BOOL ath_hal_setupxtxdesc(struct ath_hal *ah, - struct ath_desc *a1, u_int txRate1, u_int txTries1, - u_int txRate2, u_int txTries2, u_int txRate3, u_int txTries3) +static inline HAL_BOOL ath_hal_setupxtxdesc(struct ath_hal *ah, + struct ath_desc *a1, u_int txRate1, + u_int txTries1, u_int txRate2, + u_int txTries2, u_int txRate3, + u_int txTries3) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); - ret = ah->ah_setupXTxDesc(ah, a1, txRate1, txTries1, txRate2, txTries2, - txRate3, txTries3); + ret = + ah->ah_setupXTxDesc(ah, a1, txRate1, txTries1, txRate2, txTries2, + txRate3, txTries3); ath_hal_set_function(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; @@ -605,8 +621,8 @@ static inline u_int ath_hal_getctstimeout(struct ath_hal *ah) return ret; } -static inline void ath_hal_updatemibcounters(struct ath_hal *ah, - HAL_MIB_STATS *a1) +static inline void ath_hal_updatemibcounters(struct ath_hal *ah, + HAL_MIB_STATS *a1) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -615,8 +631,8 @@ static inline void ath_hal_updatemibcounters(struct ath_hal *ah, ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline HAL_BOOL ath_hal_calibrate(struct ath_hal *ah, HAL_CHANNEL *a1, - HAL_BOOL *a2) +static inline HAL_BOOL ath_hal_calibrate(struct ath_hal *ah, HAL_CHANNEL *a1, + HAL_BOOL *a2) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -660,8 +676,8 @@ static inline HAL_BOOL ath_hal_getisr(struct ath_hal *ah, HAL_INT *a1) return ret; } -static inline HAL_BOOL ath_hal_updatetxtriglevel(struct ath_hal *ah, - HAL_BOOL incTrigLevel) +static inline HAL_BOOL ath_hal_updatetxtriglevel(struct ath_hal *ah, + HAL_BOOL incTrigLevel) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -705,8 +721,8 @@ static inline HAL_BOOL ath_hal_setctstimeout(struct ath_hal *ah, u_int a1) return ret; } -static inline const HAL_RATE_TABLE *ath_hal_getratetable(struct ath_hal *ah, - u_int mode) +static inline const HAL_RATE_TABLE *ath_hal_getratetable(struct ath_hal *ah, + u_int mode) { const HAL_RATE_TABLE *ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -728,8 +744,8 @@ static inline u_int32_t ath_hal_gettsf32(struct ath_hal *ah) return ret; } -static inline void ath_hal_mibevent(struct ath_hal *ah, - const HAL_NODE_STATS *a1) +static inline void ath_hal_mibevent(struct ath_hal *ah, + const HAL_NODE_STATS *a1) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -738,8 +754,8 @@ static inline void ath_hal_mibevent(struct ath_hal *ah, ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline void ath_hal_setbeacontimers(struct ath_hal *ah, - const HAL_BEACON_TIMERS *a1) +static inline void ath_hal_setbeacontimers(struct ath_hal *ah, + const HAL_BEACON_TIMERS *a1) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -748,9 +764,10 @@ static inline void ath_hal_setbeacontimers(struct ath_hal *ah, ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline HAL_STATUS ath_hal_getcapability(struct ath_hal *ah, - HAL_CAPABILITY_TYPE a1, u_int32_t capability, - u_int32_t *result) +static inline HAL_STATUS ath_hal_getcapability(struct ath_hal *ah, + HAL_CAPABILITY_TYPE a1, + u_int32_t capability, + u_int32_t *result) { HAL_STATUS ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -772,8 +789,8 @@ static inline HAL_BOOL ath_hal_radar_wait(struct ath_hal *ah, HAL_CHANNEL *a1) return ret; } -static inline HAL_BOOL ath_hal_setmcastfilterindex(struct ath_hal *ah, - u_int32_t index) +static inline HAL_BOOL ath_hal_setmcastfilterindex(struct ath_hal *ah, + u_int32_t index) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -844,8 +861,8 @@ static inline void ath_hal_setledstate(struct ath_hal *ah, HAL_LED_STATE a1) ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline void ath_hal_setassocid(struct ath_hal *ah, - const u_int8_t *bssid, u_int16_t assocId) +static inline void ath_hal_setassocid(struct ath_hal *ah, const u_int8_t *bssid, + u_int16_t assocId) { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); @@ -863,8 +880,9 @@ static inline void ath_hal_resettsf(struct ath_hal *ah) ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } -static inline HAL_BOOL ath_hal_setuprxdesc(struct ath_hal *ah, - struct ath_desc *a1, u_int32_t size, u_int flags) +static inline HAL_BOOL ath_hal_setuprxdesc(struct ath_hal *ah, + struct ath_desc *a1, u_int32_t size, + u_int flags) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -915,9 +933,10 @@ static inline HAL_BOOL ath_hal_stoptxdma(struct ath_hal *ah, u_int a1) return ret; } -static inline HAL_BOOL ath_hal_setcapability(struct ath_hal *ah, - HAL_CAPABILITY_TYPE a1, u_int32_t capability, - u_int32_t setting, HAL_STATUS *a4) +static inline HAL_BOOL ath_hal_setcapability(struct ath_hal *ah, + HAL_CAPABILITY_TYPE a1, + u_int32_t capability, + u_int32_t setting, HAL_STATUS *a4) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -950,8 +969,8 @@ static inline u_int32_t ath_hal_gettxbuf(struct ath_hal *ah, u_int a1) return ret; } -static inline int ath_hal_setuptxqueue(struct ath_hal *ah, HAL_TX_QUEUE a1, - const HAL_TXQ_INFO *qInfo) +static inline int ath_hal_setuptxqueue(struct ath_hal *ah, HAL_TX_QUEUE a1, + const HAL_TXQ_INFO *qInfo) { int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -984,8 +1003,8 @@ static inline HAL_BOOL ath_hal_phydisable(struct ath_hal *ah) return ret; } -static inline HAL_BOOL ath_hal_setregulatorydomain(struct ath_hal *ah, - u_int16_t a1, HAL_STATUS *a2) +static inline HAL_BOOL ath_hal_setregulatorydomain(struct ath_hal *ah, + u_int16_t a1, HAL_STATUS *a2) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); @@ -996,19 +1015,24 @@ static inline HAL_BOOL ath_hal_setregulatorydomain(struct ath_hal *ah, return ret; } -static inline HAL_BOOL ath_hal_setuptxdesc(struct ath_hal *ah, - struct ath_desc *a1, u_int pktLen, u_int hdrLen, - HAL_PKT_TYPE type, u_int txPower, u_int txRate0, - u_int txTries0, u_int keyIx, u_int antMode, u_int flags, - u_int rtsctsRate, u_int rtsctsDuration, u_int compicvLen, - u_int compivLen, u_int comp) +static inline HAL_BOOL ath_hal_setuptxdesc(struct ath_hal *ah, + struct ath_desc *a1, u_int pktLen, + u_int hdrLen, HAL_PKT_TYPE type, + u_int txPower, u_int txRate0, + u_int txTries0, u_int keyIx, + u_int antMode, u_int flags, + u_int rtsctsRate, + u_int rtsctsDuration, + u_int compicvLen, u_int compivLen, + u_int comp) { HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); - ret = ah->ah_setupTxDesc(ah, a1, pktLen, hdrLen, type, txPower, - txRate0, txTries0, keyIx, antMode, flags, rtsctsRate, - rtsctsDuration, compicvLen, compivLen, comp); + ret = + ah->ah_setupTxDesc(ah, a1, pktLen, hdrLen, type, txPower, txRate0, + txTries0, keyIx, antMode, flags, rtsctsRate, + rtsctsDuration, compicvLen, compivLen, comp); ath_hal_set_function(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; @@ -1047,6 +1071,281 @@ static inline HAL_BOOL ath_hal_disable(struct ath_hal *ah) return ret; } +/* Example script to create a HAL function unmangling SED script: + + dmesg -c &>/dev/null && iwpriv ath0 dump_hal_map && dmesg | \ + sed -n -r -e "/zz[0-9a-f]{8}/ { s~^([^+]*)[^=]*=(.*)~s/\1\/\2 (\1)/g~; p; } " \ + >hal_unmangle.sed + + * Example usage: + + tail -f /var/log/messages | sed -f hal_unmangle.sed + */ +static inline void ath_hal_dump_map(struct ath_hal *ah) +{ +#ifdef CONFIG_KALLSYMS + + /* void ah_getMacAddress(struct ath_hal *ah, u_int8_t *a1) */ + __print_symbol("%s=ah_getMacAddress\n", + (unsigned long)ah->ah_getMacAddress); + /* HAL_POWER_MODE ah_getPowerMode(struct ath_hal *ah) */ + __print_symbol("%s=ah_getPowerMode\n", + (unsigned long)ah->ah_getPowerMode); + /* HAL_BOOL ah_getDiagState(struct ath_hal *ah, int request, const void *args, u_int32_t argsize, void **result, u_int32_t *resultsize) */ + __print_symbol("%s=ah_getDiagState\n", + (unsigned long)ah->ah_getDiagState); + /* void ah_resetStationBeaconTimers(struct ath_hal *ah) */ + __print_symbol("%s=ah_resetStationBeaconTimers\n", + (unsigned long)ah->ah_resetStationBeaconTimers); + /* void ah_setCoverageClass(struct ath_hal *ah, u_int8_t a1, int a2) */ + __print_symbol("%s=ah_setCoverageClass\n", + (unsigned long)ah->ah_setCoverageClass); + /* u_int64_t ah_getTsf64(struct ath_hal *ah) */ + __print_symbol("%s=ah_getTsf64\n", (unsigned long)ah->ah_getTsf64); + /* void ah_enableReceive(struct ath_hal *ah) */ + __print_symbol("%s=ah_enableReceive\n", + (unsigned long)ah->ah_enableReceive); + /* HAL_ANT_SETTING ah_getAntennaSwitch(struct ath_hal *ah) */ + __print_symbol("%s=ah_getAntennaSwitch\n", + (unsigned long)ah->ah_getAntennaSwitch); + /* HAL_BOOL ah_gpioSet(struct ath_hal *ah, u_int32_t gpio, u_int32_t val) */ + __print_symbol("%s=ah_gpioSet\n", (unsigned long)ah->ah_gpioSet); + /* HAL_BOOL ah_gpioCfgOutput(struct ath_hal *ah, u_int32_t gpio) */ + __print_symbol("%s=ah_gpioCfgOutput\n", + (unsigned long)ah->ah_gpioCfgOutput); + /* HAL_BOOL ah_clrMulticastFilterIndex(struct ath_hal *ah, u_int32_t index) */ + __print_symbol("%s=ah_clrMulticastFilterIndex\n", + (unsigned long)ah->ah_clrMulticastFilterIndex); + /* void ah_reqTxIntrDesc(struct ath_hal *ah, struct ath_desc *a1) */ + __print_symbol("%s=ah_reqTxIntrDesc\n", + (unsigned long)ah->ah_reqTxIntrDesc); + /* void ah_rxMonitor(struct ath_hal *ah, const HAL_NODE_STATS *a1, HAL_CHANNEL *a2) */ + __print_symbol("%s=ah_rxMonitor\n", (unsigned long)ah->ah_rxMonitor); + /* HAL_BOOL ah_setTxDP(struct ath_hal *ah, u_int a1, u_int32_t txdp) */ + __print_symbol("%s=ah_setTxDP\n", (unsigned long)ah->ah_setTxDP); + /* HAL_BOOL ah_setKeyCacheEntry(struct ath_hal *ah, u_int16_t a1, const HAL_KEYVAL *a2, const u_int8_t *a3, int a4) */ + __print_symbol("%s=ah_setKeyCacheEntry\n", + (unsigned long)ah->ah_setKeyCacheEntry); + /* void ah_setPCUConfig(struct ath_hal *ah) */ + __print_symbol("%s=ah_setPCUConfig\n", + (unsigned long)ah->ah_setPCUConfig); + /* HAL_RFGAIN ah_getRfGain(struct ath_hal *ah) */ + __print_symbol("%s=ah_getRfGain\n", (unsigned long)ah->ah_getRfGain); + /* void ah_setMulticastFilter(struct ath_hal *ah, u_int32_t filter0, u_int32_t filter1) */ + __print_symbol("%s=ah_setMulticastFilter\n", + (unsigned long)ah->ah_setMulticastFilter); + /* u_int ah_getAckTimeout(struct ath_hal *ah) */ + __print_symbol("%s=ah_getAckTimeout\n", + (unsigned long)ah->ah_getAckTimeout); + /* void ah_setStationBeaconTimers(struct ath_hal *ah, const HAL_BEACON_STATE *a1) */ + __print_symbol("%s=ah_setStationBeaconTimers\n", + (unsigned long)ah->ah_setStationBeaconTimers); + /* HAL_BOOL ah_detectCardPresent(struct ath_hal *ah) */ + __print_symbol("%s=ah_detectCardPresent\n", + (unsigned long)ah->ah_detectCardPresent); + /* u_int ah_getSlotTime(struct ath_hal *ah) */ + __print_symbol("%s=ah_getSlotTime\n", + (unsigned long)ah->ah_getSlotTime); + /* void ah_beaconInit(struct ath_hal *ah, u_int32_t nexttbtt, u_int32_t intval) */ + __print_symbol("%s=ah_beaconInit\n", (unsigned long)ah->ah_beaconInit); + /* void ah_gpioSetIntr(struct ath_hal *ah, u_int a1, u_int32_t a2) */ + __print_symbol("%s=ah_gpioSetIntr\n", + (unsigned long)ah->ah_gpioSetIntr); + /* HAL_BOOL ah_releaseTxQueue(struct ath_hal *ah, u_int q) */ + __print_symbol("%s=ah_releaseTxQueue\n", + (unsigned long)ah->ah_releaseTxQueue); + /* HAL_BOOL ah_setKeyCacheEntryMac(struct ath_hal *ah, u_int16_t a1, const u_int8_t *a2) */ + __print_symbol("%s=ah_setKeyCacheEntryMac\n", + (unsigned long)ah->ah_setKeyCacheEntryMac); + /* HAL_STATUS ah_procTxDesc(struct ath_hal *ah, struct ath_desc *a1, struct ath_tx_status *a2) */ + __print_symbol("%s=ah_procTxDesc\n", (unsigned long)ah->ah_procTxDesc); + /* HAL_INT ah_getInterrupts(struct ath_hal *ah) */ + __print_symbol("%s=ah_getInterrupts\n", + (unsigned long)ah->ah_getInterrupts); + /* HAL_BOOL ah_setAckTimeout(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_setAckTimeout\n", + (unsigned long)ah->ah_setAckTimeout); + /* HAL_BOOL ah_setBssIdMask(struct ath_hal *ah, const u_int8_t *a1) */ + __print_symbol("%s=ah_setBssIdMask\n", + (unsigned long)ah->ah_setBssIdMask); + /* HAL_BOOL ah_setAckCTSRate(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_setAckCTSRate\n", + (unsigned long)ah->ah_setAckCTSRate); + /* u_int32_t ah_getRxFilter(struct ath_hal *ah) */ + __print_symbol("%s=ah_getRxFilter\n", + (unsigned long)ah->ah_getRxFilter); + /* int16_t ah_getChanNoise(struct ath_hal *ah, HAL_CHANNEL *a1) */ + __print_symbol("%s=ah_getChanNoise\n", + (unsigned long)ah->ah_getChanNoise); + /* HAL_BOOL ah_resetKeyCacheEntry(struct ath_hal *ah, u_int16_t a1) */ + __print_symbol("%s=ah_resetKeyCacheEntry\n", + (unsigned long)ah->ah_resetKeyCacheEntry); + /* HAL_BOOL ah_setAntennaSwitch(struct ath_hal *ah, HAL_ANT_SETTING a1) */ + __print_symbol("%s=ah_setAntennaSwitch\n", + (unsigned long)ah->ah_setAntennaSwitch); + /* HAL_BOOL ah_setTxQueueProps(struct ath_hal *ah, int q, const HAL_TXQ_INFO *qInfo) */ + __print_symbol("%s=ah_setTxQueueProps\n", + (unsigned long)ah->ah_setTxQueueProps); + /* void ah_setRxDP(struct ath_hal *ah, u_int32_t rxdp) */ + __print_symbol("%s=ah_setRxDP\n", (unsigned long)ah->ah_setRxDP); + /* HAL_BOOL ah_reset(struct ath_hal *ah, HAL_OPMODE a1, HAL_CHANNEL *a2, HAL_BOOL bChannelChange, HAL_STATUS *status) */ + __print_symbol("%s=ah_reset\n", (unsigned long)ah->ah_reset); + /* HAL_BOOL ah_setDecompMask(struct ath_hal *ah, u_int16_t a1, int a2) */ + __print_symbol("%s=ah_setDecompMask\n", + (unsigned long)ah->ah_setDecompMask); + /* HAL_BOOL ah_getTxQueueProps(struct ath_hal *ah, int q, HAL_TXQ_INFO *qInfo) */ + __print_symbol("%s=ah_getTxQueueProps\n", + (unsigned long)ah->ah_getTxQueueProps); + /* HAL_BOOL ah_fillTxDesc(struct ath_hal *ah, struct ath_desc *a1, u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg, const struct ath_desc *a5) */ + __print_symbol("%s=ah_fillTxDesc\n", (unsigned long)ah->ah_fillTxDesc); + /* u_int32_t ah_numTxPending(struct ath_hal *ah, u_int q) */ + __print_symbol("%s=ah_numTxPending\n", + (unsigned long)ah->ah_numTxPending); + /* void ah_startPcuReceive(struct ath_hal *ah) */ + __print_symbol("%s=ah_startPcuReceive\n", + (unsigned long)ah->ah_startPcuReceive); + /* void ah_setDefAntenna(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_setDefAntenna\n", + (unsigned long)ah->ah_setDefAntenna); + /* HAL_BOOL ah_setPowerMode(struct ath_hal *ah, HAL_POWER_MODE mode, int setChip) */ + __print_symbol("%s=ah_setPowerMode\n", + (unsigned long)ah->ah_setPowerMode); + /* HAL_STATUS ah_procRxDesc(struct ath_hal *ah, struct ath_desc *a1, u_int32_t phyAddr, struct ath_desc *next, u_int64_t tsf, struct ath_rx_status *a5) */ + __print_symbol("%s=ah_procRxDesc\n", (unsigned long)ah->ah_procRxDesc); + /* u_int ah_getAckCTSRate(struct ath_hal *ah) */ + __print_symbol("%s=ah_getAckCTSRate\n", + (unsigned long)ah->ah_getAckCTSRate); + /* u_int32_t ah_getKeyCacheSize(struct ath_hal *ah) */ + __print_symbol("%s=ah_getKeyCacheSize\n", + (unsigned long)ah->ah_getKeyCacheSize); + /* HAL_BOOL ah_setupXTxDesc(struct ath_hal *ah, struct ath_desc *a1, u_int txRate1, u_int txTries1, u_int txRate2, u_int txTries2, u_int txRate3, u_int txTries3) */ + __print_symbol("%s=ah_setupXTxDesc\n", + (unsigned long)ah->ah_setupXTxDesc); + /* HAL_INT ah_setInterrupts(struct ath_hal *ah, HAL_INT a1) */ + __print_symbol("%s=ah_setInterrupts\n", + (unsigned long)ah->ah_setInterrupts); + /* u_int ah_getCTSTimeout(struct ath_hal *ah) */ + __print_symbol("%s=ah_getCTSTimeout\n", + (unsigned long)ah->ah_getCTSTimeout); + /* void ah_updateMibCounters(struct ath_hal *ah, HAL_MIB_STATS *a1) */ + __print_symbol("%s=ah_updateMibCounters\n", + (unsigned long)ah->ah_updateMibCounters); + /* HAL_BOOL ah_perCalibration(struct ath_hal *ah, HAL_CHANNEL *a1, HAL_BOOL *a2) */ + __print_symbol("%s=ah_perCalibration\n", + (unsigned long)ah->ah_perCalibration); + /* u_int32_t ah_getRxDP(struct ath_hal *ah) */ + __print_symbol("%s=ah_getRxDP\n", (unsigned long)ah->ah_getRxDP); + /* HAL_BOOL ah_setTxPowerLimit(struct ath_hal *ah, u_int32_t a1) */ + __print_symbol("%s=ah_setTxPowerLimit\n", + (unsigned long)ah->ah_setTxPowerLimit); + /* HAL_BOOL ah_getPendingInterrupts(struct ath_hal *ah, HAL_INT *a1) */ + __print_symbol("%s=ah_getPendingInterrupts\n", + (unsigned long)ah->ah_getPendingInterrupts); + /* HAL_BOOL ah_updateTxTrigLevel(struct ath_hal *ah, HAL_BOOL incTrigLevel) */ + __print_symbol("%s=ah_updateTxTrigLevel\n", + (unsigned long)ah->ah_updateTxTrigLevel); + /* HAL_BOOL ah_resetTxQueue(struct ath_hal *ah, u_int q) */ + __print_symbol("%s=ah_resetTxQueue\n", + (unsigned long)ah->ah_resetTxQueue); + /* HAL_BOOL ah_setMacAddress(struct ath_hal *ah, const u_int8_t *a1) */ + __print_symbol("%s=ah_setMacAddress\n", + (unsigned long)ah->ah_setMacAddress); + /* HAL_BOOL ah_setCTSTimeout(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_setCTSTimeout\n", + (unsigned long)ah->ah_setCTSTimeout); + /* const HAL_RATE_TABLE *ah_getRateTable(struct ath_hal *ah, u_int mode) */ + __print_symbol("%s=ah_getRateTable\n", + (unsigned long)ah->ah_getRateTable); + /* u_int32_t ah_getTsf32(struct ath_hal *ah) */ + __print_symbol("%s=ah_getTsf32\n", (unsigned long)ah->ah_getTsf32); + /* void ah_procMibEvent(struct ath_hal *ah, const HAL_NODE_STATS *a1) */ + __print_symbol("%s=ah_procMibEvent\n", + (unsigned long)ah->ah_procMibEvent); + /* void ah_setBeaconTimers(struct ath_hal *ah, const HAL_BEACON_TIMERS *a1) */ + __print_symbol("%s=ah_setBeaconTimers\n", + (unsigned long)ah->ah_setBeaconTimers); + /* HAL_STATUS ah_getCapability(struct ath_hal *ah, HAL_CAPABILITY_TYPE a1, u_int32_t capability, u_int32_t *result) */ + __print_symbol("%s=ah_getCapability\n", + (unsigned long)ah->ah_getCapability); + /* HAL_BOOL ah_radarWait(struct ath_hal *ah, HAL_CHANNEL *a1) */ + __print_symbol("%s=ah_radarWait\n", (unsigned long)ah->ah_radarWait); + /* HAL_BOOL ah_setMulticastFilterIndex(struct ath_hal *ah, u_int32_t index) */ + __print_symbol("%s=ah_setMulticastFilterIndex\n", + (unsigned long)ah->ah_setMulticastFilterIndex); + /* void ah_getBssIdMask(struct ath_hal *ah, u_int8_t *a1) */ + __print_symbol("%s=ah_getBssIdMask\n", + (unsigned long)ah->ah_getBssIdMask); + /* HAL_BOOL ah_isInterruptPending(struct ath_hal *ah) */ + __print_symbol("%s=ah_isInterruptPending\n", + (unsigned long)ah->ah_isInterruptPending); + /* HAL_BOOL ah_startTxDma(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_startTxDma\n", (unsigned long)ah->ah_startTxDma); + /* void ah_getTxIntrQueue(struct ath_hal *ah, u_int32_t *a1) */ + __print_symbol("%s=ah_getTxIntrQueue\n", + (unsigned long)ah->ah_getTxIntrQueue); + /* HAL_BOOL ah_setSlotTime(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_setSlotTime\n", + (unsigned long)ah->ah_setSlotTime); + /* void ah_setLedState(struct ath_hal *ah, HAL_LED_STATE a1) */ + __print_symbol("%s=ah_setLedState\n", + (unsigned long)ah->ah_setLedState); + /* void ah_writeAssocid(struct ath_hal *ah, const u_int8_t *bssid, u_int16_t assocId) */ + __print_symbol("%s=ah_writeAssocid\n", + (unsigned long)ah->ah_writeAssocid); + /* void ah_resetTsf(struct ath_hal *ah) */ + __print_symbol("%s=ah_resetTsf\n", (unsigned long)ah->ah_resetTsf); + /* HAL_BOOL ah_setupRxDesc(struct ath_hal *ah, struct ath_desc *a1, u_int32_t size, u_int flags) */ + __print_symbol("%s=ah_setupRxDesc\n", + (unsigned long)ah->ah_setupRxDesc); + /* void ah_setRxFilter(struct ath_hal *ah, u_int32_t a1) */ + __print_symbol("%s=ah_setRxFilter\n", + (unsigned long)ah->ah_setRxFilter); + /* HAL_BOOL ah_isKeyCacheEntryValid(struct ath_hal *ah, u_int16_t a1) */ + __print_symbol("%s=ah_isKeyCacheEntryValid\n", + (unsigned long)ah->ah_isKeyCacheEntryValid); + /* void ah_stopPcuReceive(struct ath_hal *ah) */ + __print_symbol("%s=ah_stopPcuReceive\n", + (unsigned long)ah->ah_stopPcuReceive); + /* HAL_BOOL ah_stopTxDma(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_stopTxDma\n", (unsigned long)ah->ah_stopTxDma); + /* HAL_BOOL ah_setCapability(struct ath_hal *ah, HAL_CAPABILITY_TYPE a1, u_int32_t capability, u_int32_t setting, HAL_STATUS *a4) */ + __print_symbol("%s=ah_setCapability\n", + (unsigned long)ah->ah_setCapability); + /* HAL_BOOL ah_stopDmaReceive(struct ath_hal *ah) */ + __print_symbol("%s=ah_stopDmaReceive\n", + (unsigned long)ah->ah_stopDmaReceive); + /* u_int32_t ah_getTxDP(struct ath_hal *ah, u_int a1) */ + __print_symbol("%s=ah_getTxDP\n", (unsigned long)ah->ah_getTxDP); + /* int ah_setupTxQueue(struct ath_hal *ah, HAL_TX_QUEUE a1, const HAL_TXQ_INFO *qInfo) */ + __print_symbol("%s=ah_setupTxQueue\n", + (unsigned long)ah->ah_setupTxQueue); + /* u_int ah_getDefAntenna(struct ath_hal *ah) */ + __print_symbol("%s=ah_getDefAntenna\n", + (unsigned long)ah->ah_getDefAntenna); + /* HAL_BOOL ah_phyDisable(struct ath_hal *ah) */ + __print_symbol("%s=ah_phyDisable\n", (unsigned long)ah->ah_phyDisable); + /* HAL_BOOL ah_setRegulatoryDomain(struct ath_hal *ah, u_int16_t a1, HAL_STATUS *a2) */ + __print_symbol("%s=ah_setRegulatoryDomain\n", + (unsigned long)ah->ah_setRegulatoryDomain); + /* HAL_BOOL ah_setupTxDesc(struct ath_hal *ah, struct ath_desc *a1, u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int txPower, u_int txRate0, u_int txTries0, u_int keyIx, u_int antMode, u_int flags, u_int rtsctsRate, u_int rtsctsDuration, u_int compicvLen, u_int compivLen, u_int comp) */ + __print_symbol("%s=ah_setupTxDesc\n", + (unsigned long)ah->ah_setupTxDesc); + /* HAL_BOOL ah_gpioCfgInput(struct ath_hal *ah, u_int32_t gpio) */ + __print_symbol("%s=ah_gpioCfgInput\n", + (unsigned long)ah->ah_gpioCfgInput); + /* u_int32_t ah_gpioGet(struct ath_hal *ah, u_int32_t gpio) */ + __print_symbol("%s=ah_gpioGet\n", (unsigned long)ah->ah_gpioGet); + /* HAL_BOOL ah_disable(struct ath_hal *ah) */ + __print_symbol("%s=ah_disable\n", (unsigned long)ah->ah_disable); +#else /* #ifdef CONFIG_KALLSYMS */ + + printk + ("To use this feature you must enable CONFIG_KALLSYMS in your kernel."); + +#endif /* #ifndef CONFIG_KALLSYMS */ + +} + #include "if_ath_hal_wrappers.h" #endif /* #ifndef _IF_ATH_HAL_H_ */ diff --git a/net80211/ieee80211_ioctl.h b/net80211/ieee80211_ioctl.h index b4f47f5..6bd62ee 100644 --- a/net80211/ieee80211_ioctl.h +++ b/net80211/ieee80211_ioctl.h @@ -548,6 +548,7 @@ struct ieee80211req_scan_result { #define IEEE80211_IOCTL_SETKEY (SIOCIWFIRSTPRIV+18) #define IEEE80211_IOCTL_WRITEREG (SIOCIWFIRSTPRIV+19) #define IEEE80211_IOCTL_DELKEY (SIOCIWFIRSTPRIV+20) +#define IEEE80211_IOCTL_HALMAP (SIOCIWFIRSTPRIV+21) #define IEEE80211_IOCTL_ADDMAC (SIOCIWFIRSTPRIV+22) #define IEEE80211_IOCTL_DELMAC (SIOCIWFIRSTPRIV+24) #define IEEE80211_IOCTL_WDSADDMAC (SIOCIWFIRSTPRIV+26) diff --git a/net80211/ieee80211_var.h b/net80211/ieee80211_var.h index 64e01ff..b5a3d21 100644 --- a/net80211/ieee80211_var.h +++ b/net80211/ieee80211_var.h @@ -441,6 +441,9 @@ struct ieee80211com { unsigned int (*ic_write_register)(struct ieee80211com *, unsigned int, unsigned int); unsigned int (*ic_read_register)(struct ieee80211com *, unsigned int, unsigned int*); #endif /* #ifdef ATH_REVERSE_ENGINEERING */ + + /* dump a lookup table for unobfuscating HAL function pointers */ + unsigned int (*ic_dump_hal_map)(struct ieee80211com *); }; #define MAX_PROC_IEEE80211_SIZE 16383 diff --git a/net80211/ieee80211_wireless.c b/net80211/ieee80211_wireless.c index b149414..dbe3ef1 100644 --- a/net80211/ieee80211_wireless.c +++ b/net80211/ieee80211_wireless.c @@ -1544,6 +1544,18 @@ struct waplistreq { /* XXX: not the right place for declaration? */ int i; }; +static int +ieee80211_ioctl_hal_map(struct net_device *dev, struct iw_request_info *info, + void *w, char *extra) +{ + int *params = (int*) extra; + struct ieee80211vap *vap = dev->priv; + struct ieee80211com *ic = vap->iv_ic; + params[0] = ic->ic_dump_hal_map(ic); + return 0; +} + + static int waplist_cb(void *arg, const struct ieee80211_scan_entry *se) { @@ -5388,6 +5400,8 @@ static const struct iw_priv_args ieee80211_priv_args[] = { 0, IW_PRIV_TYPE_APPIEBUF, "getiebuf" }, { IEEE80211_IOCTL_FILTERFRAME, IW_PRIV_TYPE_FILTER , 0, "setfilter" }, + { IEEE80211_IOCTL_HALMAP, + 0, 0, "dump_hal_map" }, #ifdef ATH_REVERSE_ENGINEERING /* @@ -5476,6 +5490,7 @@ static const iw_handler ieee80211_priv_handlers[] = { set_priv(IEEE80211_IOCTL_SETMLME, ieee80211_ioctl_setmlme), set_priv(IEEE80211_IOCTL_SETKEY, ieee80211_ioctl_setkey), set_priv(IEEE80211_IOCTL_DELKEY, ieee80211_ioctl_delkey), + set_priv(IEEE80211_IOCTL_HALMAP, ieee80211_ioctl_hal_map), set_priv(IEEE80211_IOCTL_ADDMAC, ieee80211_ioctl_addmac), set_priv(IEEE80211_IOCTL_DELMAC, ieee80211_ioctl_delmac), set_priv(IEEE80211_IOCTL_WDSADDMAC, ieee80211_ioctl_wdsmac), diff --git a/scripts/hal_unmangle.sed b/scripts/hal_unmangle.sed new file mode 100644 index 0000000..c7afe26 --- /dev/null +++ b/scripts/hal_unmangle.sed @@ -0,0 +1,91 @@ +s/zz02db3dfd/ah_getMacAddress (zz02db3dfd)/g +s/zz016db251/ah_getPowerMode (zz016db251)/g +s/zz016d9d41/ah_getDiagState (zz016d9d41)/g +s/zz0e107ca1/ah_resetStationBeaconTimers (zz0e107ca1)/g +s/zz06e00b8a/ah_setCoverageClass (zz06e00b8a)/g +s/zz0016da50/ah_getTsf64 (zz0016da50)/g +s/zz02db53ed/ah_enableReceive (zz02db53ed)/g +s/zz06d9dd93/ah_getAntennaSwitch (zz06d9dd93)/g +s/zz000b6e52/ah_gpioSet (zz000b6e52)/g +s/zz02db99ae/ah_gpioCfgOutput (zz02db99ae)/g +s/zz0d14d1b0/ah_clrMulticastFilterIndex (zz0d14d1b0)/g +s/zz02dbebbd/ah_reqTxIntrDesc (zz02dbebbd)/g +s/zz000b6c10/ah_rxMonitor (zz000b6c10)/g +s/zz000b6ff8/ah_setTxDP (zz000b6ff8)/g +s/zz06dff44a/ah_setKeyCacheEntry (zz06dff44a)/g +s/zz016df051/ah_setPCUConfig (zz016df051)/g +s/zz002db51c/ah_getRfGain (zz002db51c)/g +s/zz0b82de6d/ah_setMulticastFilter (zz0b82de6d)/g +s/zz02db31b2/ah_getAckTimeout (zz02db31b2)/g +s/zz0b81ea94/ah_setStationBeaconTimers (zz0b81ea94)/g +s/zz0db3ed86/ah_detectCardPresent (zz0db3ed86)/g +s/zz00b6d923/ah_getSlotTime (zz00b6d923)/g +s/zz005b5c46/ah_beaconInit (zz005b5c46)/g +s/zz00b6ea7a/ah_gpioSetIntr (zz00b6ea7a)/g +s/zz05b81b1b/ah_releaseTxQueue (zz05b81b1b)/g +s/zz06feaf60/ah_setKeyCacheEntryMac (zz06feaf60)/g +s/zz005b893d/ah_procTxDesc (zz005b893d)/g +s/zz02db5763/ah_getInterrupts (zz02db5763)/g +s/zz02dbf1b2/ah_setAckTimeout (zz02dbf1b2)/g +s/zz016e00dd/ah_setBssIdMask (zz016e00dd)/g +s/zz02dbe851/ah_setAckCTSRate (zz02dbe851)/g +s/zz00b6d6bc/ah_getRxFilter (zz00b6d6bc)/g +s/zz067d0c47/ah_getChanNoise (zz067d0c47)/g +s/zz0b83ad3e/ah_resetKeyCacheEntry (zz0b83ad3e)/g +s/zz06dfdd93/ah_setAntennaSwitch (zz06dfdd93)/g +s/zz0b709eff/ah_setTxQueueProps (zz0b709eff)/g +s/zz000b6fe8/ah_setRxDP (zz000b6fe8)/g +s/zz0002dbd2/ah_reset (zz0002dbd2)/g +s/zz02dbfc1d/ah_setDecompMask (zz02dbfc1d)/g +s/zz0b6d9eff/ah_getTxQueueProps (zz0b6d9eff)/g +s/zz005b6cfd/ah_fillTxDesc (zz005b6cfd)/g +s/zz016e1b87/ah_numTxPending (zz016e1b87)/g +s/zz0b721aed/ah_startPcuReceive (zz0b721aed)/g +s/zz02dbf35d/ah_setDefAntenna (zz02dbf35d)/g +s/zz016e1251/ah_setPowerMode (zz016e1251)/g +s/zz005b88fd/ah_procRxDesc (zz005b88fd)/g +s/zz02db2851/ah_getAckCTSRate (zz02db2851)/g +s/zz0b6d2325/ah_getKeyCacheSize (zz0b6d2325)/g +s/zz016e2dfd/ah_setupXTxDesc (zz016e2dfd)/g +s/zz02dc1763/ah_setInterrupts (zz02dc1763)/g +s/zz02db1ab2/ah_getCTSTimeout (zz02db1ab2)/g +s/zz0dc6a5c5/ah_updateMibCounters (zz0dc6a5c5)/g +s/zz05b781e0/ah_perCalibration (zz05b781e0)/g +s/zz000b6ce8/ah_getRxDP (zz000b6ce8)/g +s/zz0b709d02/ah_setTxPowerLimit (zz0b709d02)/g +s/zz0da484a1/ah_getPendingInterrupts (zz0da484a1)/g +s/zz0dc6e390/ah_updateTxTrigLevel (zz0dc6e390)/g +s/zz016e189b/ah_resetTxQueue (zz016e189b)/g +s/zz02dbfdfd/ah_setMacAddress (zz02dbfdfd)/g +s/zz02dbdab2/ah_setCTSTimeout (zz02dbdab2)/g +s/zz016dab2d/ah_getRateTable (zz016dab2d)/g +s/zz0016da48/ah_getTsf32 (zz0016da48)/g +s/zz05b8c65a/ah_procMibEvent (zz05b8c65a)/g +s/zz0b6fd363/ah_setBeaconTimers (zz0b6fd363)/g +s/zz02db3875/ah_getCapability (zz02db3875)/g +s/zz002dbc42/ah_radarWait (zz002dbc42)/g +s/zz00547fed/ah_setMulticastFilterIndex (zz00547fed)/g +s/zz016da0dd/ah_getBssIdMask (zz016da0dd)/g +s/zz0b6f50b8/ah_isInterruptPending (zz0b6f50b8)/g +s/zz005b90cb/ah_startTxDma (zz005b90cb)/g +s/zz05b6c6db/ah_getTxIntrQueue (zz05b6c6db)/g +s/zz00b70923/ah_setSlotTime (zz00b70923)/g +s/zz00b70161/ah_setLedState (zz00b70161)/g +s/zz016e648a/ah_writeAssocid (zz016e648a)/g +s/zz0016e12c/ah_resetTsf (zz0016e12c)/g +s/zz00b7173d/ah_setupRxDesc (zz00b7173d)/g +s/zz00b706bc/ah_setRxFilter (zz00b706bc)/g +s/zz0dadc62c/ah_isKeyCacheEntryValid (zz0dadc62c)/g +s/zz05b942ed/ah_stopPcuReceive (zz05b942ed)/g +s/zz002dca0b/ah_stopTxDma (zz002dca0b)/g +s/zz02dbf875/ah_setCapability (zz02dbf875)/g +s/zz05b92aed/ah_stopDmaReceive (zz05b92aed)/g +s/zz000b6cf8/ah_getTxDP (zz000b6cf8)/g +s/zz016e309b/ah_setupTxQueue (zz016e309b)/g +s/zz02db335d/ah_getDefAntenna (zz02db335d)/g +s/zz005b7f9d/ah_phyDisable (zz005b7f9d)/g +s/zz0703947b/ah_setRegulatoryDomain (zz0703947b)/g +s/zz00b7177d/ah_setupTxDesc (zz00b7177d)/g +s/zz016dcbfe/ah_gpioCfgInput (zz016dcbfe)/g +s/zz000b6e22/ah_gpioGet (zz000b6e22)/g +s/zz000b6d1d/ah_disable (zz000b6d1d)/g diff --git a/scripts/if_ath_hal_generator.pl b/scripts/if_ath_hal_generator.pl index ad41edb..e1d78da 100755 --- a/scripts/if_ath_hal_generator.pl +++ b/scripts/if_ath_hal_generator.pl @@ -192,6 +192,9 @@ my $header = </dev/null && iwpriv ath0 dump_hal_map && dmesg | \\"; + print OUTPUT "\n sed -n -r -e \"/zz[0-9a-f]{8}/ { s~^([^+]*)[^=]*=(.*)~s/\\1\\\/\\2 (\\1)/g~; p; } \" \\"; + print OUTPUT "\n >hal_unmangle.sed"; + print OUTPUT "\n"; + print OUTPUT "\n * Example usage:"; + print OUTPUT "\n"; + print OUTPUT "\n tail -f /var/log/messages | sed -f hal_unmangle.sed "; + print OUTPUT "\n */"; + print OUTPUT "\nstatic inline void ath_hal_dump_map(struct ath_hal* ah) {"; + print OUTPUT "\n#ifdef CONFIG_KALLSYMS\n"; + for my $member_name ( keys %return_types ) { + my $api_name = $member_name; + my $api_return_type = $return_types{$member_name}; + my $ret_void = ( $api_return_type =~ /void/ ); + print OUTPUT "\n\t/* " + . format_type($api_return_type) + . "$api_name("; + my @names = @{ $parameter_names{$member_name} }; + my @types = @{ $parameter_types{$member_name} }; + for my $i ( 0 .. $#names ) { + if ($i) { + print OUTPUT ", "; + } + print OUTPUT format_type( $types[$i] ) . $names[$i]; + } + print OUTPUT ") */"; + print OUTPUT "\n\t\t__print_symbol(\"%s=" . $member_name + . "\\n\", (unsigned long)ah->" + . $member_name . ");"; + } + print OUTPUT "\n#else /* #ifdef CONFIG_KALLSYMS */\n"; + print OUTPUT "\nprintk(\"To use this feature you must enable " + . "CONFIG_KALLSYMS in your kernel.\");\n"; + print OUTPUT "\n#endif /* #ifndef CONFIG_KALLSYMS */\n"; + print OUTPUT "\n}\n"; print OUTPUT $footer; } diff --git a/scripts/update_hal_unmangle b/scripts/update_hal_unmangle new file mode 100755 index 0000000..7341444 --- /dev/null +++ b/scripts/update_hal_unmangle @@ -0,0 +1,43 @@ +#!/usr/bin/perl +# +# Copyright (c) 2007 Michael Taylor +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer, +# without modification. +# 2. Redistributions in binary form must reproduce at minimum a disclaimer +# similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any +# redistribution must be conditioned upon including a substantially +# similar Disclaimer requirement for further binary redistribution. +# 3. Neither the names of the above-listed copyright holders nor the names +# of any contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# Alternatively, this software may be distributed under the terms of the +# GNU General Public License ("GPL") version 2 as published by the Free +# Software Foundation. +# +# NO WARRANTY +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, +# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGES. +# +# $Id: foo $ +# +#!/bin/bash +# This script assumes that ath0 exists, but that's it. +dmesg -c &>/dev/null && iwpriv ath0 dump_hal_map && dmesg | \ + sed -n -r -e "/zz[0-9a-f]{8}/ { s~^([^+]*)[^=]*=(.*)~s/\1\/\2 (\1)/g~; p; } " \ + >hal_unmangle.sed diff --git a/tools/athchans.c b/tools/athchans.c index 9ab7e99..9e25ef2 100644 --- a/tools/athchans.c +++ b/tools/athchans.c @@ -113,6 +113,7 @@ set80211priv(const char *dev, int op, void *data, int len, int show_err) IOCTL_ERR(IEEE80211_IOCTL_RADAR), IOCTL_ERR(IEEE80211_IOCTL_SETKEY), IOCTL_ERR(IEEE80211_IOCTL_DELKEY), + IOCTL_ERR(IEEE80211_IOCTL_HALMAP), IOCTL_ERR(IEEE80211_IOCTL_ADDMAC), IOCTL_ERR(IEEE80211_IOCTL_DELMAC), IOCTL_ERR(IEEE80211_IOCTL_WDSADDMAC), diff --git a/tools/athkey.c b/tools/athkey.c index 755b98f..5cdd0ce 100644 --- a/tools/athkey.c +++ b/tools/athkey.c @@ -113,6 +113,7 @@ set80211priv(const char *dev, int op, void *data, int len, int show_err) IOCTL_ERR(IEEE80211_IOCTL_RADAR), IOCTL_ERR(IEEE80211_IOCTL_SETKEY), IOCTL_ERR(IEEE80211_IOCTL_DELKEY), + IOCTL_ERR(IEEE80211_IOCTL_HALMAP), IOCTL_ERR(IEEE80211_IOCTL_ADDMAC), IOCTL_ERR(IEEE80211_IOCTL_DELMAC), IOCTL_ERR(IEEE80211_IOCTL_WDSADDMAC), diff --git a/tools/wlanconfig.c b/tools/wlanconfig.c index d6f1a38..cb6d6f1 100644 --- a/tools/wlanconfig.c +++ b/tools/wlanconfig.c @@ -963,6 +963,7 @@ do80211priv(struct iwreq *iwr, const char *ifname, int op, void *data, size_t le IOCTL_ERR(IEEE80211_IOCTL_RADAR), IOCTL_ERR(IEEE80211_IOCTL_SETKEY), IOCTL_ERR(IEEE80211_IOCTL_DELKEY), + IOCTL_ERR(IEEE80211_IOCTL_HALMAP), IOCTL_ERR(IEEE80211_IOCTL_ADDMAC), IOCTL_ERR(IEEE80211_IOCTL_DELMAC), IOCTL_ERR(IEEE80211_IOCTL_WDSADDMAC),