[Madwifi-cvs] revision 3481 committed
Status: Beta
Brought to you by:
otaku
From: Michael T. <svn...@ma...> - 2008-04-09 19:56:35
|
Project : madwifi Revision : 3481 Author : mtaylor (Michael Taylor) Date : 2008-04-09 21:55:49 +0200 (Wed, 09 Apr 2008) Log Message : Debugging function cleanup: 1) Move all debug preprocessor flags out into make files 2) Add support for remaining preprocessor flags to be set by ENV variables 3) Add support for HAL tracing to include device name Affected Files: * madwifi/trunk/Makefile.inc updated * madwifi/trunk/ath/if_ath.c updated * madwifi/trunk/ath/if_ath_hal.h updated * madwifi/trunk/ath/if_ath_hal_macros.h updated * madwifi/trunk/ath/if_ath_radar.c updated * madwifi/trunk/ath_hal/Makefile updated * madwifi/trunk/ath_hal/ah_os.c updated * madwifi/trunk/ath_hal/ah_os.h updated * madwifi/trunk/net80211/ieee80211_linux.h updated * madwifi/trunk/scripts/if_ath_hal_generator.pl updated Modified: madwifi/trunk/Makefile.inc =================================================================== --- madwifi/trunk/Makefile.inc 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/Makefile.inc 2008-04-09 19:55:49 UTC (rev 3481) @@ -161,12 +161,49 @@ $(error TARGET $(TARGET) is invalid, valid targets are: $(TARGETS)) endif +ifndef ATH_DEBUG_SPINLOCKS +export ATH_DEBUG_SPINLOCKS=0 +endif + +ifndef IEEE80211_DEBUG_REFCNT +export IEEE80211_DEBUG_REFCNT=0 +endif + +ifndef HAL_DEBUG +export HAL_DEBUG=0 +endif + +ifndef ALQ +ALQ=0 +endif + +ifndef MMIOTRACE +MMIOTRACE=0 +endif + +ifneq ($(strip $(MMIOTRACE)),0) +EXTRA_CFLAGS += -DMMIOTRACE=1 +endif + +ifneq ($(strip $(ATH_DEBUG_SPINLOCKS)),0) +COPTS+= -DATH_DEBUG_SPINLOCKS=1 +endif + +ifneq ($(strip $(IEEE80211_DEBUG_REFCNT)),0) +COPTS+= -DIEEE80211_DEBUG_REFCNT=1 +endif + # HAL_DEBUG enables HAL debugging code # At the moment this consists of wrappers around HAL functions so that # stack traces are more decipherable. +ifneq ($(strip $(HAL_DEBUG)),0) +COPTS+= -fno-inline -DAH_DEBUG=1 +endif -ifdef HAL_DEBUG -COPTS+= -fno-inline +ifneq ($(strip $(ALQ)),0) +obj-m += alq.o +alq-objs := kern_alq.o +EXTRA_CFLAGS += -DAH_DEBUG_ALQ -DAH_DEBUG endif # Don't let HAL mess with the toolchain - save toolchain variables @@ -187,6 +224,23 @@ include $(TOP)/BuildCaps.inc +# At present, these are defined all over the sources but it will not build without it +ifndef ATH_DEBUG +export ATH_DEBUG=1 +endif + +ifneq ($(strip $(ATH_DEBUG)),0) +CFLAGS += -DAR_DEBUG -DIEEE80211_DEBUG -DIEEE80211_DEBUG +endif + +ifneq ($(strip $(ATH_DEBUG_SPINLOCKS)),0) +CFLAGS += -DATH_DEBUG_SPINLOCKS +endif + +ifneq ($(strip $(IEEE80211_DEBUG_REFCNT)),0) +CFLAGS += -DIEEE80211_DEBUG_REFCNT +endif + # Ensure correct endianess LDFLAGS += $(LDOPTS) Modified: madwifi/trunk/ath/if_ath.c =================================================================== --- madwifi/trunk/ath/if_ath.c 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/ath/if_ath.c 2008-04-09 19:55:49 UTC (rev 3481) @@ -42,7 +42,6 @@ * This software is derived from work of Atsushi Onoe; his contribution * is greatly appreciated. */ -#define AR_DEBUG #include "if_ath_debug.h" #include "opt_ah.h" Modified: madwifi/trunk/ath/if_ath_hal.h =================================================================== --- madwifi/trunk/ath/if_ath_hal.h 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/ath/if_ath_hal.h 2008-04-09 19:55:49 UTC (rev 3481) @@ -40,7 +40,7 @@ #include "if_ath_hal_macros.h" #ifdef CONFIG_KALLSYMS #include "linux/kallsyms.h" -#endif /* #ifdef CONFIG_KALLSYMS */ +#endif /* CONFIG_KALLSYMS */ #ifndef _IF_ATH_HAL_H_ #define _IF_ATH_HAL_H_ @@ -49,8 +49,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_getMacAddress(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -59,8 +61,10 @@ HAL_POWER_MODE ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getPowerMode(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -73,10 +77,12 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getDiagState(ah, request, args, argsize, *result, resultsize); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -85,8 +91,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_resetStationBeaconTimers(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -95,8 +103,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setCoverageClass(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -105,8 +115,10 @@ u_int64_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getTsf64(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -115,8 +127,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_enableReceive(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -125,8 +139,10 @@ HAL_ANT_SETTING ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getAntennaSwitch(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -137,8 +153,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_gpioSet(ah, gpio, val); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -148,8 +166,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_gpioCfgOutput(ah, gpio); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -160,8 +180,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_clrMulticastFilterIndex(ah, index); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -171,8 +193,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_reqTxIntrDesc(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -181,8 +205,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_rxMonitor(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -192,8 +218,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setTxDP(ah, a1, txdp); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -205,8 +233,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setKeyCacheEntry(ah, a1, a2, a3, a4); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -215,8 +245,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setPCUConfig(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -225,8 +257,10 @@ HAL_RFGAIN ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getRfGain(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -236,8 +270,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setMulticastFilter(ah, filter0, filter1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -246,8 +282,10 @@ u_int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getAckTimeout(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -257,8 +295,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setStationBeaconTimers(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -267,8 +307,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_detectCardPresent(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -278,8 +320,10 @@ u_int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getSlotTime(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -289,8 +333,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_beaconInit(ah, nexttbtt, intval); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -299,8 +345,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_gpioSetIntr(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -309,8 +357,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_releaseTxQueue(ah, q); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -321,8 +371,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setKeyCacheEntryMac(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -334,8 +386,10 @@ HAL_STATUS ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_procTxDesc(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -345,8 +399,10 @@ HAL_INT ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getInterrupts(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -356,8 +412,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setAckTimeout(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -368,8 +426,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setBssIdMask(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -379,8 +439,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setAckCTSRate(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -390,8 +452,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getRxFilter(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -402,8 +466,10 @@ int16_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getChanNoise(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -413,8 +479,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_resetKeyCacheEntry(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -425,8 +493,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setAntennaSwitch(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -437,8 +507,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setTxQueueProps(ah, q, qInfo); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -447,8 +519,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setRxDP(ah, rxdp); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -459,8 +533,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_reset(ah, a1, a2, bChannelChange, status); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -471,8 +547,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setDecompMask(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -483,8 +561,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getTxQueueProps(ah, q, qInfo); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -497,8 +577,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_fillTxDesc(ah, a1, segLen, firstSeg, lastSeg, a5); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -508,8 +590,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_numTxPending(ah, q); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -518,8 +602,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_startPcuReceive(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -527,8 +613,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setDefAntenna(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -538,8 +626,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setPowerMode(ah, mode, setChip); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -554,8 +644,10 @@ HAL_STATUS ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_procRxDesc(ah, a1, phyAddr, next, tsf, a5); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -565,8 +657,10 @@ u_int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getAckCTSRate(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -576,8 +670,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getKeyCacheSize(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -591,10 +687,12 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setupXTxDesc(ah, a1, txRate1, txTries1, txRate2, txTries2, txRate3, txTries3); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -604,8 +702,10 @@ HAL_INT ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setInterrupts(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -615,8 +715,10 @@ u_int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getCTSTimeout(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -626,8 +728,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_updateMibCounters(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -637,8 +741,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_perCalibration(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -648,8 +754,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getRxDP(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -659,8 +767,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setTxPowerLimit(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -670,8 +780,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getPendingInterrupts(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -682,8 +794,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_updateTxTrigLevel(ah, incTrigLevel); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -693,8 +807,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_resetTxQueue(ah, q); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -704,8 +820,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setMacAddress(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -715,8 +833,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setCTSTimeout(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -727,8 +847,10 @@ const HAL_RATE_TABLE *ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getRateTable(ah, mode); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -738,8 +860,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getTsf32(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -749,8 +873,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_procMibEvent(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -759,8 +885,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setBeaconTimers(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -772,8 +900,10 @@ HAL_STATUS ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getCapability(ah, a1, capability, result); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -783,8 +913,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_radarWait(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -795,8 +927,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setMulticastFilterIndex(ah, index); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -805,8 +939,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_getBssIdMask(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -815,8 +951,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_isInterruptPending(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -826,8 +964,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_startTxDma(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -836,8 +976,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_getTxIntrQueue(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -846,8 +988,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setSlotTime(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -856,8 +1000,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setLedState(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -866,8 +1012,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_writeAssocid(ah, bssid, assocId); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -875,8 +1023,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_resetTsf(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -887,8 +1037,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setupRxDesc(ah, a1, size, flags); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -897,8 +1049,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_setRxFilter(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -907,8 +1061,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_isKeyCacheEntryValid(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -917,8 +1073,10 @@ { ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ah->ah_stopPcuReceive(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); } @@ -927,8 +1085,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_stopTxDma(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -941,8 +1101,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setCapability(ah, a1, capability, setting, a4); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -952,8 +1114,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_stopDmaReceive(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -963,8 +1127,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getTxDP(ah, a1); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -975,8 +1141,10 @@ int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setupTxQueue(ah, a1, qInfo); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -986,8 +1154,10 @@ u_int ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_getDefAntenna(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -997,8 +1167,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_phyDisable(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -1009,8 +1181,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_setRegulatoryDomain(ah, a1, a2); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -1029,11 +1203,13 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); 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_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -1043,8 +1219,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_gpioCfgInput(ah, gpio); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -1054,8 +1232,10 @@ u_int32_t ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_gpioGet(ah, gpio); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -1065,8 +1245,10 @@ HAL_BOOL ret; ATH_HAL_LOCK_IRQ(ah->ah_sc); ath_hal_set_function(__func__); + ath_hal_set_device(SC_DEV_NAME(ah->ah_sc)); ret = ah->ah_disable(ah); ath_hal_set_function(NULL); + ath_hal_set_device(NULL); ATH_HAL_UNLOCK_IRQ(ah->ah_sc); return ret; } @@ -1340,7 +1522,7 @@ #else /* #ifdef CONFIG_KALLSYMS */ printk - (KERN_ERR "To use this feature you must enable CONFIG_KALLSYMS in your kernel."); + ("To use this feature you must enable CONFIG_KALLSYMS in your kernel."); #endif /* #ifndef CONFIG_KALLSYMS */ Modified: madwifi/trunk/ath/if_ath_hal_macros.h =================================================================== --- madwifi/trunk/ath/if_ath_hal_macros.h 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/ath/if_ath_hal_macros.h 2008-04-09 19:55:49 UTC (rev 3481) @@ -81,5 +81,4 @@ #define ATH_HAL_LOCK_CHECK(_sc) #endif - #endif /* #ifndef _IF_ATH_HAL_MACROS_H_ */ Modified: madwifi/trunk/ath/if_ath_radar.c =================================================================== --- madwifi/trunk/ath/if_ath_radar.c 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/ath/if_ath_radar.c 2008-04-09 19:55:49 UTC (rev 3481) @@ -20,7 +20,6 @@ */ #include "opt_ah.h" -#define AR_DEBUG #include "if_ath_debug.h" #ifndef AUTOCONF_INCLUDED @@ -56,8 +55,6 @@ #include <net80211/if_llc.h> #endif -#define AR_DEBUG - #include "net80211/if_athproto.h" #include "if_athvar.h" Modified: madwifi/trunk/ath_hal/Makefile =================================================================== --- madwifi/trunk/ath_hal/Makefile 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/ath_hal/Makefile 2008-04-09 19:55:49 UTC (rev 3481) @@ -87,10 +87,18 @@ else $(call if_changed,uudecode) endif + # Replace as many hashed names as possible with meaningful + # ones in the symbol table of the binary kernel module for HAL. + $(OBJCOPY) \ + `cat $(shell dirname $(obj))/scripts/hal_unmangle.objcopy` \ + $(obj)/$(TARGET).hal.o install: test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH) install -m 0644 ath_hal.$(KMODSUF) $(DESTDIR)/$(KMODPATH) +ifneq ($(strip $(ALQ)),0) + install -m 0644 alq.$(KMODSUF) $(DESTDIR)/$(KMODPATH) +endif clean: rm -f *~ *.o *.ko *.mod.c uudecode .*.cmd @@ -99,3 +107,4 @@ ath_hal.o: $(ath_hal-objs) $(LD) $(LDFLAGS) -o ath_hal.$(KMODSUF) -r $(ath_hal-objs) + Modified: madwifi/trunk/ath_hal/ah_os.c =================================================================== --- madwifi/trunk/ath_hal/ah_os.c 2008-04-09 04:11:35 UTC (rev 3480) +++ madwifi/trunk/ath_hal/ah_os.c 2008-04-09 19:55:49 UTC (rev 3481) @@ -39,14 +39,14 @@ #ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB -#endif +#endif /* EXPORT_SYMTAB */ /* Don't use virtualized timer in Linux 2.6.20+ */ #define USE_REAL_TIME_DELAY #ifndef AUTOCONF_INCLUDED #include <linux/config.h> -#endif +#endif /* AUTOCONF_INCLUDED */ #include <linux/version.h> #include <linux/module.h> #include <linux/init.h> @@ -65,9 +65,17 @@ #include <ah_os.h> #ifdef AH_DEBUG -static int ath_hal_debug = 0; -#endif +int ath_hal_debug = 0; +EXPORT_SYMBOL(ath_hal_debug); +#endif /* AH_DEBUG */ +#define MSG_MAXLEN 161 + +#define REGOP_NONE 0 +#define REGOP_READ 1 +#define REGOP_WRITE 2 + + int ath_hal_dma_beacon_response_time = 2; /* in TUs */ int ath_hal_sw_beacon_response_time = 10; /* in TUs */ int ath_hal_additional_swba_backoff = 0; /* in TUs */ @@ -86,9 +94,9 @@ _ath_hal_detach(ah); return NULL; } -#else +#else /* __MOD_INC_USE_COUNT */ MOD_INC_USE_COUNT; -#endif +#endif /* __MOD_INC_USE_COUNT */ return ah; } @@ -98,45 +106,15 @@ (*ah->ah_detach)(ah); #ifndef __MOD_INC_USE_COUNT module_put(THIS_MODULE); -#else +#else /* __MOD_INC_USE_COUNT */ MOD_DEC_USE_COUNT; -#endif +#endif /* __MOD_INC_USE_COUNT */ } /* * Print/log message support. */ -void __ahdecl -ath_hal_vprintf(struct ath_hal *ah, const char* fmt, va_list ap) -{ - char buf[1024]; /* XXX */ - vsnprintf(buf, sizeof(buf), fmt, ap); - printk("%s", buf); -} - -void __ahdecl -ath_hal_printf(struct ath_hal *ah, const char* fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - ath_hal_vprintf(ah, fmt, ap); - va_end(ap); -} -EXPORT_SYMBOL(ath_hal_printf); - -/* - * Format an Ethernet MAC for printing. - */ -const char* __ahdecl -ath_hal_ether_sprintf(const u_int8_t *mac) -{ - static char etherbuf[18]; - snprintf(etherbuf, sizeof(etherbuf), "%02x:%02x:%02x:%02x:%02x:%02x", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - return etherbuf; -} - #ifdef AH_ASSERT void __ahdecl ath_hal_assert_failed(const char* filename, int lineno, const char *msg) @@ -147,12 +125,20 @@ } #endif /* AH_ASSERT */ +/* Store the current function name (should be called by wrapper functions) + * useful for debugging and figuring out, which hal function sets which + * registers */ +const char *ath_hal_func = NULL; +const char *ath_hal_device = NULL; +EXPORT_SYMBOL(ath_hal_func); +EXPORT_SYMBOL(ath_hal_device); + #ifdef AH_DEBUG_ALQ /* * ALQ register tracing support. * * Setting hw.ath.hal.alq=1 enables tracing of all register reads and - * writes to the file /tmp/ath_hal.log. The file format is a simple + * writes to the file /var/log/ath_hal.log. The file format is a simple * fixed-size array of records. When done logging set hw.ath.hal.alq=0 * and then decode the file with the ardecode program (that is part of the * HAL). If you start+stop tracing the data will be appended to an @@ -161,15 +147,14 @@ * NB: doesn't handle multiple devices properly; only one DEVICE record * is emitted and the different devices are not identified. */ -#include "alq/alq.h" -#include "ah_decode.h" +#include "alq.h" -static struct alq *ath_hal_alq; -static int ath_hal_alq_emitdev; /* need to emit DEVICE record */ +static struct alq *ath_hal_alq = NULL; static u_int ath_hal_alq_lost; /* count of lost records */ -static const char *ath_hal_logfile = "/tmp/ath_hal.log"; +static const char *ath_hal_logfile = "/var/log/ath_hal.log"; static u_int ath_hal_alq_qsize = 8*1024; + static int ath_hal_setlogging(int enable) { @@ -179,16 +164,15 @@ if (!capable(CAP_NET_ADMIN)) return -EPERM; error = alq_open(&ath_hal_alq, ath_hal_logfile, - sizeof (struct athregrec), ath_hal_alq_qsize); + MSG_MAXLEN, ath_hal_alq_qsize, (enable == 1 ? 0x7fffffff : enable)); ath_hal_alq_lost = 0; - ath_hal_alq_emitdev = 1; - printk(KERN_INFO "ath_hal: logging to %s %s\n", ath_hal_logfile, + printk("ath_hal: logging to %s %s\n", ath_hal_logfile, error == 0 ? "enabled" : "could not be setup"); } else { if (ath_hal_alq) alq_close(ath_hal_alq); ath_hal_alq = NULL; - printk(KERN_INFO "ath_hal: logging disabled\n"); + printk("ath_hal: logging disabled\n"); error = 0; } return error; @@ -207,7 +191,7 @@ ctl_table *ctl, int write, struct file *filp, void *buffer,\ size_t *lenp, loff_t *ppos #define AH_SYSCTL_ARGS ctl, write, filp, buffer, lenp, ppos -#endif +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,8) */ static int sysctl_hw_ath_hal_log(AH_SYSCTL_ARGS_DECL) @@ -224,111 +208,704 @@ return ath_hal_setlogging(enable); } -/* -This should only be called while holding the lock, sc->sc_hal_lock. -*/ -static struct ale * -ath_hal_alq_get(struct ath_hal *ah) +static inline void +ath_hal_logvprintf(struct ath_hal *ah, const char* fmt, va_list ap) { struct ale *ale; - if (ath_hal_alq_emitdev) { - ale = alq_get(ath_hal_alq, ALQ_NOWAIT); - if (ale) { - struct athregrec *r = - (struct athregrec *) ale->ae_data; - r->op = OP_DEVICE; - r->reg = 0; - r->val = ah->ah_devid; - alq_post(ath_hal_alq, ale); - ath_hal_alq_emitdev = 0; - } else - ath_hal_alq_lost++; + if (!ath_hal_alq) { + ath_hal_alq_lost++; + return; } + ale = alq_get(ath_hal_alq, ALQ_NOWAIT); - if (!ale) + if (!ale) { ath_hal_alq_lost++; - return ale; + return; + } + + memset(ale->ae_data, 0, MSG_MAXLEN); + vsnprintf(ale->ae_data, MSG_MAXLEN, fmt, ap); + alq_post(ath_hal_alq, ale); } -/* -This should only be called while holding the lock, sc->sc_hal_lock. -*/ -void __ahdecl -ath_hal_reg_write(struct ath_hal *ah, u_int32_t reg, u_int32_t val) +void __ahdecl +ath_hal_logprintf(struct ath_hal *ah, const char *fmt, ...) { - if (ath_hal_alq) { - unsigned long flags; - struct ale *ale; + va_list ap; + va_start(ap, fmt); + ath_hal_logvprintf(ah, fmt, ap); + va_end(ap); +} +EXPORT_SYMBOL(ath_hal_logprintf); - local_irq_save(flags); - ale = ath_hal_alq_get(ah); - if (ale) { - struct athregrec *r = (struct athregrec *) ale->ae_data; - r->op = OP_WRITE; - r->reg = reg; - r->val = val; - alq_post(ath_hal_alq, ale); - } - local_irq_restore(flags); +#endif /* AH_DEBUG_ALQ */ + +static inline void +_hal_vprintf(struct ath_hal *ah, HAL_BOOL prefer_alq, const char* fmt, va_list ap) +{ + char buf[MSG_MAXLEN]; +#ifdef AH_DEBUG_ALQ + if (prefer_alq && ath_hal_alq) { + ath_hal_logvprintf(ah, fmt, ap); + return; } - _OS_REG_WRITE(ah, reg, val); +#endif /* AH_DEBUG_ALQ */ + vsnprintf(buf, sizeof(buf), fmt, ap); + printk("%s", buf); } -EXPORT_SYMBOL(ath_hal_reg_write); -/* -This should only be called while holding the lock, sc->sc_hal_lock. -*/ -u_int32_t __ahdecl -ath_hal_reg_read(struct ath_hal *ah, u_int32_t reg) +void __ahdecl +ath_hal_printf(struct ath_hal *ah, HAL_BOOL prefer_alq, const char* fmt, ...) { - u_int32_t val; - val = _OS_REG_READ(ah, reg); - if (ath_hal_alq) { - unsigned long flags; - struct ale *ale; + va_list ap; + va_start(ap, fmt); + _hal_vprintf(ah, prefer_alq, fmt, ap); + va_end(ap); +} +EXPORT_SYMBOL(ath_hal_printf); - ale = ath_hal_alq_get(ah); - if (ale) { - struct athregrec *r = (struct athregrec *) ale->ae_data; - r->op = OP_READ; - r->reg = reg; - r->val = val; - alq_post(ath_hal_alq, ale); +/* Lookup a friendly name for a register address (for any we have nicknames + * for). Names were taken from openhal ar5212regs.h. Return AH_TRUE if the + * name is a known ar5212 register, and AH_FALSE otherwise. */ +HAL_BOOL +ath_hal_lookup_register_name(struct ath_hal *ah, char* buf, int buflen, + u_int32_t address) { + const char* static_label = NULL; + memset(buf, 0, buflen); +#if 0 /* Enable once for each new board/magic type */ + printk("MAGIC: %x\n", ah->ah_magic); +#endif + if (ah->ah_magic == 0x19541014 /* AR5212 compatible HAL magic */ ) { + /* Handle Static Register Labels (unique stuff we know about) */ + switch (address) { + case 0x0008: static_label = "AR5K_CR"; break; + case 0x000c: static_label = "AR5K_RXDP"; break; + case 0x0014: static_label = "AR5K_CFG"; break; + case 0x0024: static_label = "AR5K_IER"; break; + case 0x0030: static_label = "AR5K_TXCFG"; break; + case 0x0034: static_label = "AR5K_RXCFG"; break; + case 0x0040: static_label = "AR5K_MIBC"; break; + case 0x0044: static_label = "AR5K_TOPS"; break; + case 0x0048: static_label = "AR5K_RXNOFRM"; break; + case 0x004c: static_label = "AR5K_TXNOFRM"; break; + case 0x0050: static_label = "AR5K_RPGTO"; break; + case 0x0054: static_label = "AR5K_RFCNT"; break; + case 0x0058: static_label = "AR5K_MISC"; break; + case 0x0080: static_label = "AR5K_PISR"; break; + case 0x0084: static_label = "AR5K_SISR0"; break; + case 0x0088: static_label = "AR5K_SISR1"; break; + case 0x008c: static_label = "AR5K_SISR2"; break; + case 0x0090: static_label = "AR5K_SISR3"; break; + case 0x0094: static_label = "AR5K_SISR4"; break; + case 0x00a0: static_label = "AR5K_PIMR"; break; + case 0x00a4: static_label = "AR5K_SIMR0"; break; + case 0x00a8: static_label = "AR5K_SIMR1"; break; + case 0x00ac: static_label = "AR5K_SIMR2"; break; + case 0x00b0: static_label = "AR5K_SIMR3"; break; + case 0x00b4: static_label = "AR5K_SIMR4"; break; + case 0x00c0: static_label = "AR5K_RAC_PISR"; break; + case 0x00c4: static_label = "AR5K_RAC_SISR0"; break; + case 0x00c8: static_label = "AR5K_RAC_SISR1"; break; + case 0x00cc: static_label = "AR5K_RAC_SISR2"; break; + case 0x00d0: static_label = "AR5K_RAC_SISR3"; break; + case 0x00d4: static_label = "AR5K_RAC_SISR4"; break; + case 0x0400: static_label = "AR5K_DCM_ADDR"; break; + case 0x0404: static_label = "AR5K_DCM_DATA"; break; + case 0x0420: static_label = "AR5K_DCCFG"; break; + case 0x0600: static_label = "AR5K_CCFG"; break; + case 0x0604: static_label = "AR5K_CCFG_CUP"; break; + case 0x0610: static_label = "AR5K_CPC0"; break; + case 0x0614: static_label = "AR5K_CPC1"; break; + case 0x0618: static_label = "AR5K_CPC2"; break; + case 0x061c: static_label = "AR5K_CPC3"; break; + case 0x0620: static_label = "AR5K_CPCORN"; break; + case 0x0840: static_label = "AR5K_QCU_TXE"; break; + case 0x0880: static_label = "AR5K_QCU_TXD"; break; + case 0x0940: static_label = "AR5K_QCU_ONESHOTARM_SET"; break; + case 0x0980: static_label = "AR5K_QCU_ONESHOTARM_CLEAR"; break; + case 0xa200: static_label = "AR5K_PHY_MODE"; break; + case 0x0a40: static_label = "AR5K_QCU_RDYTIMESHDN"; break; + case 0x0b00: static_label = "AR5K_QCU_CBB_SELECT"; break; + case 0x0b04: static_label = "AR5K_QCU_CBB_ADDR"; break; + case 0x0b08: static_label = "AR5K_QCU_CBCFG"; break; + case 0x1030: static_label = "AR5K_DCU_GBL_IFS_SIFS"; break; + case 0x1038: static_label = "AR5K_DCU_TX_FILTER"; break; + case 0x1070: static_label = "AR5K_DCU_GBL_IFS_SLOT"; break; + case 0x10b0: static_label = "AR5K_DCU_GBL_IFS_EIFS"; break; + case 0x10f0: static_label = "AR5K_DCU_GBL_IFS_MISC"; break; + case 0x1230: static_label = "AR5K_DCU_FP"; break; + case 0x1270: static_label = "AR5K_DCU_TXP"; break; + case 0x143c: static_label = "AR5K_DCU_TX_FILTER_CLR"; break; + case 0x147c: static_label = "AR5K_DCU_TX_FILTER_SET"; break; + case 0x4000: static_label = "AR5K_RESET_CTL"; break; + case 0x4004: static_label = "AR5K_SLEEP_CTL"; break; + case 0x4008: static_label = "AR5K_INTPEND"; break; + case 0x400c: static_label = "AR5K_SFR"; break; + case 0x4010: static_label = "AR5K_PCICFG"; break; + case 0x4014: static_label = "AR5K_GPIOCR"; break; + case 0x4018: static_label = "AR5K_GPIODO"; break; + case 0x401c: static_label = "AR5K_GPIODI"; break; + case 0x4020: static_label = "AR5K_SREV"; break; + case 0x6000: static_label = "AR5K_EEPROM_BASE"; break; + case 0x6004: static_label = "AR5K_EEPROM_DATA_5211"; break; + case 0x6008: static_label = "AR5K_EEPROM_CMD"; break; + case 0x600c: static_label = "AR5K_EEPROM_STAT_5211"; break; + case 0x6010: static_label = "AR5K_EEPROM_CFG"; break; + case 0x8000: static_label = "AR5K_STA_ID0"; break; + case 0x8004: static_label = "AR5K_STA_ID1"; break; + case 0x8008: static_label = "AR5K_BSS_ID0"; break; + case 0x800c: static_label = "AR5K_BSS_ID1"; break; + case 0x8010: static_label = "AR5K_SLOT_TIME"; break; + case 0x8014: static_label = "AR5K_TIME_OUT"; break; + case 0x8018: static_label = "AR5K_RSSI_THR"; break; + case 0x801c: static_label = "AR5K_USEC_5211"; break; + case 0x8020: static_label = "AR5K_BEACON_5211"; break; + case 0x8024: static_label = "AR5K_CFP_PERIOD_5211"; break; + case 0x8028: static_label = "AR5K_TIMER0_5211"; break; + case 0x802c: static_label = "AR5K_TIMER1_5211"; break; + case 0x8030: static_label = "AR5K_TIMER2_5211"; break; + case 0x8034: static_label = "AR5K_TIMER3_5211"; break; + case 0x8038: static_label = "AR5K_CFP_DUR_5211"; break; + case 0x803c: static_label = "AR5K_RX_FILTER_5211"; break; + case 0x8040: static_label = "AR5K_MCAST_FILTER0_5211"; break; + case 0x8044: static_label = "AR5K_MCAST_FILTER1_5211"; break; + case 0x8048: static_label = "AR5K_DIAG_SW_5211"; break; + case 0x804c: static_label = "AR5K_TSF_L32_5211"; break; + case 0x8050: static_label = "AR5K_TSF_U32_5211"; break; + case 0x8054: static_label = "AR5K_ADDAC_TEST"; break; + case 0x8058: static_label = "AR5K_DEFAULT_ANTENNA"; break; + case 0x8080: static_label = "AR5K_LAST_TSTP"; break; + case 0x8084: static_label = "AR5K_NAV_5211"; break; + case 0x8088: static_label = "AR5K_RTS_OK_5211"; break; + case 0x808c: static_label = "AR5K_RTS_FAIL_5211"; break; + case 0x8090: static_label = "AR5K_ACK_FAIL_5211"; break; + case 0x8094: static_label = "AR5K_FCS_FAIL_5211"; break; + case 0x8098: static_label = "AR5K_BEACON_CNT_5211"; break; + case 0x80c0: static_label = "AR5K_XRMODE"; break; + case 0x80c4: static_label = "AR5K_XRDELAY"; break; + case 0x80c8: static_label = "AR5K_XRTIMEOUT"; break; + case 0x80cc: static_label = "AR5K_XRCHIRP"; break; + case 0x80d0: static_label = "AR5K_XRSTOMP"; break; + case 0x80d4: static_label = "AR5K_SLEEP0"; break; + case 0x80d8: static_label = "AR5K_SLEEP1"; break; + case 0x80dc: static_label = "AR5K_SLEEP2"; break; + case 0x80e0: static_label = "AR5K_BSS_IDM0"; break; + case 0x80e4: static_label = "AR5K_BSS_IDM1"; break; + case 0x80e8: static_label = "AR5K_TXPC"; break; + case 0x80ec: static_label = "AR5K_PROFCNT_TX"; break; + case 0x80f0: static_label = "AR5K_PROFCNT_RX"; break; + case 0x80f4: static_label = "AR5K_PROFCNT_RXCLR"; break; + case 0x80f8: static_label = "AR5K_PROFCNT_CYCLE"; break; + case 0x8104: static_label = "AR5K_TSF_PARM"; break; + case 0x810c: static_label = "AR5K_PHY_ERR_FIL"; break; + case 0x9800: static_label = "AR5K_PHY"; break; + case 0x9804: static_label = "AR5K_PHY_TURBO"; break; + case 0x9808: static_label = "AR5K_PHY_AGC"; break; + case 0x9814: static_label = "AR5K_PHY_TIMING_3"; break; + case 0x9818: static_label = "AR5K_PHY_CHIP_ID"; break; + case 0x981c: static_label = "AR5K_PHY_ACT"; break; + case 0x9858: static_label = "AR5K_PHY_SIG"; break; + case 0x985c: static_label = "AR5K_PHY_AGCCOARSE"; break; + case 0x9860: static_label = "AR5K_PHY_AGCCTL"; break; + case 0x9864: static_label = "AR5K_PHY_NF"; break; + case 0x9870: static_label = "AR5K_PHY_SCR"; break; + case 0x9874: static_label = "AR5K_PHY_SLMT"; break; + case 0x9878: static_label = "AR5K_PHY_SCAL"; break; + case 0x987c: static_label = "AR5K_PHY_PLL"; break; + case 0x989c: static_label = "AR5K_RF_BUFFER"; break; + case 0x98c0: static_label = "AR5K_RF_BUFFER_CONTROL_0"; break; + case 0x98c4: static_label = "AR5K_RF_BUFFER_CONTROL_1"; break; + case 0x98cc: static_label = "AR5K_RF_BUFFER_CONTROL_2"; break; + case 0x98d0: static_label = "AR5K_RF_BUFFER_CONTROL_3"; break; + case 0x98d4: static_label = "AR5K_RF_BUFFER_CONTROL_4"; break; + case 0x98d8: static_label = "AR5K_RF_BUFFER_CONTROL_5"; break; + case 0x98dc: static_label = "AR5K_RF_BUFFER_CONTROL_6"; break; + case 0x9914: static_label = "AR5K_PHY_RX_DELAY"; break; + case 0x9920: static_label = "AR5K_PHY_IQ"; break; + case 0x9930: static_label = "AR5K_PHY_PAPD_PROBE"; break; + case 0x9934: static_label = "AR5K_PHY_TXPOWER_RATE1"; break; + case 0x9938: static_label = "AR5K_PHY_TXPOWER_RATE2"; break; + case 0x993c: static_label = "AR5K_PHY_TXPOWER_RATE_MAX"; break; + case 0x9944: static_label = "AR5K_PHY_FRAME_CTL_5211"; break; + case 0x9954: static_label = "AR5K_PHY_RADAR"; break; + case 0x99f0: static_label = "AR5K_PHY_SCLOCK"; break; + case 0x99f4: static_label = "AR5K_PHY_SDELAY"; break; + case 0x99f8: static_label = "AR5K_PHY_SPENDING"; break; + case 0x9c10: static_label = "AR5K_PHY_IQRES_CAL_PWR_I"; break; + case 0x9c14: static_label = "AR5K_PHY_IQRES_CAL_PWR_Q"; break; + case 0x9c18: static_label = "AR5K_PHY_IQRES_CAL_CORR"; break; + case 0x9c1c: static_label = "AR5K_PHY_CURRENT_RSSI"; break; + case 0xa204: static_label = "AR5K_PHY_CCKTXCTL"; break; + case 0xa20c: static_label = "AR5K_PHY_GAIN_2GHZ"; break; + case 0xa234: static_label = "AR5K_PHY_TXPOWER_RATE3"; break; + case 0xa238: static_label = "AR5K_PHY_TXPOWER_RATE4"; break; + case 0x9850: static_label = "AR5K_PHY_AGCSIZE"; break; + case 0x9924: static_label = "AR5K_PHY_SPUR"; break; + default: + break; } + + if (static_label) { + if (strncmp(static_label, "ATH5K_", 6) == 0) + static_label += 6; + snprintf(buf, buflen, static_label); + return AH_TRUE; + } + + /* Handle Key Table */ + if ((address >= 0x8800) && (address < 0x9800)) { +#define keytable_entry_reg_count (8) +#define keytable_entry_size (keytable_entry_reg_count * sizeof(u_int32_t)) + int key = ((address - 0x8800) / keytable_entry_size); + int reg = ((address - 0x8800) % keytable_entry_size) / + sizeof(u_int32_t); + char* format = NULL; + switch (reg) { + case 0: format = "KEY(%3d).KEYBITS[031:000]"; break; + case 1: format = "KEY(%3d).KEYBITS[047:032]"; break; + case 2: format = "KEY(%3d).KEYBITS[079:048]"; break; + case 3: format = "KEY(%3d).KEYBITS[095:080]"; break; + case 4: format = "KEY(%3d).KEYBITS[127:096]"; break; + case 5: format = "KEY(%3d).TYPE............"; break; + case 6: format = "KEY(%3d).MAC[32:01]......"; break; + case 7: format = "KEY(%3d).MAC[47:33]......"; break; + default: + BUG(); + } + snprintf(buf, buflen, format, key); +#undef keytable_entry_reg_count +#undef keytable_entry_size + return AH_TRUE; + } + + if (address >= 0x0800 && address <= 0x082c) { + snprintf(buf, buflen, "AR5K_QUEUE_TXDP_%d", + ((address - 0x0800) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x08c0 && address <= 0x08ec) { + snprintf(buf, buflen, "AR5K_QUEUE_CBRCFG_%d", + ((address - 0x08c0) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x0900 && address <= 0x092c) { + snprintf(buf, buflen, "AR5K_QUEUE_RDYTIMECFG_%d", + ((address - 0x0900) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x09c0 && address <= 0x09ec) { + snprintf(buf, buflen, "AR5K_QUEUE_MISC_%d", + ((address - 0x09c0) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x0a00 && address <= 0x0a2c) { + snprintf(buf, buflen, "AR5K_QUEUE_STATUS_%d", + ((address - 0x0a00) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x1000 && address <= 0x102c) { + snprintf(buf, buflen, "AR5K_QUEUE_QCUMASK_%d", + ((address - 0x1000) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x1040 && address <= 0x106c) { + snprintf(buf, buflen, "AR5K_QUEUE_DFS_LOCAL_IFS_%d", + ((address - 0x1040) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x1080 && address <= 0x10ac) { + snprintf(buf, buflen, "AR5K_QUEUE_DFS_RETRY_LIMIT_%d", + ((address - 0x1080) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x10c0 && address <= 0x10ec) { + snprintf(buf, buflen, "AR5K_QUEUE_DFS_CHANNEL_TIME_%d", + ((address - 0x10c0) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x1100 && address <= 0x112c) { + snprintf(buf, buflen, "AR5K_QUEUE_DFS_MISC_%d", + ((address - 0x1100) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x1140 && address <= 0x116c) { + snprintf(buf, buflen, "AR5K_QUEUE_DFS_SEQNUM_%d", + ((address - 0x1140) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x4000 && address <= 0x5000) { + snprintf(buf, buflen, "(PCI_TIMING)_%d", + ((address - 0x4000) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x8700 && address <= 0x877c) { + snprintf(buf, buflen, "AR5K_RATE_DUR_%d", + ((address - 0x8700) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x8800 && address <= 0x9800) { + snprintf(buf, buflen, "AR5K_KEYTABLE_0_5211_%d", + ((address - 0x8800) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x9a00 && address <= 0x9afc) { + snprintf(buf, buflen, "AR5K_RF_GAIN_%d", + ((address - 0x9a00) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0x9b00 && address <= 0x9bfc) { + snprintf(buf, buflen, "AR5K_BB_GAIN_%d", + ((address - 0x9b00) / sizeof(u_int32_t))); + return AH_TRUE; + } + if (address >= 0xa180 && address <= 0xa1fc) { + snprintf(buf, buflen, "AR5K_PHY_PCDAC_TXPOWER_%d", + ((address - 0xa180) / sizeof(u_int32_t))); + return AH_TRUE; + } + } - return val; + + /* Everything else... */ + snprintf(buf, buflen, "(unknown)"); + return AH_FALSE; } -EXPORT_SYMBOL(ath_hal_reg_read); +EXPORT_SYMBOL(ath_hal_lookup_register_name); -/* - * This should only be called while holding the lock, sc->sc_hal_lock. - */ -void __ahdecl -OS_MARK(struct ath_hal *ah, u_int id, u_int32_t v) +static void +_print_decoded_register_delta(struct ath_hal *ah, const char* device_name, + HAL_BOOL prefer_alq, int regop, + u_int32_t address, u_int32_t v_old, u_int32_t v_new, + HAL_BOOL verbose) { - if (ath_hal_alq) { - struct ale *ale; +#define BIT_UNCHANGED_ON "1" +#define BIT_UNCHANGED_OFF "." +#define BIT_CHANGED_ON "+" +#define BIT_CHANGED_OFF "-" +#define NYBBLE_SEPARATOR "" +#define BYTE_SEPARATOR " " +#define BIT_STATUS(_shift) \ + (((v_old & (1 << _shift)) == (v_new & (1 << _shift))) ? \ + (v_new & (1 << _shift) ? \ + BIT_UNCHANGED_ON : BIT_UNCHANGED_OFF) : \ + (v_new & (1 << _shift) ? \ + BIT_CHANGED_ON : BIT_CHANGED_OFF)) + char name[64] = ""; + ath_hal_lookup_register_name(ah, name, sizeof(name), address); + ath_hal_printf(ah, prefer_alq, + "%s%s%s%23s:0x%04x:0x%08x:%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" + "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s:%s\n", + device_name ? device_name : "", + device_name ? ":" : "", + (regop == REGOP_READ ? "R:" : + (regop == REGOP_WRITE ? "W:" : "")), + name ? name : "(unknown)", + address, + v_new, + BIT_STATUS(31), + BIT_STATUS(30), + BIT_STATUS(29), + BIT_STATUS(28), + NYBBLE_SEPARATOR, + BIT_STATUS(27), + BIT_STATUS(26), + BIT_STATUS(25), + BIT_STATUS(24), + BYTE_SEPARATOR, + BIT_STATUS(23), + BIT_STATUS(22), + BIT_STATUS(21), + BIT_STATUS(20), + NYBBLE_SEPARATOR, + BIT_STATUS(19), + BIT_STATUS(18), + BIT_STATUS(17), + BIT_STATUS(16), + BYTE_SEPARATOR, + BIT_STATUS(15), + BIT_STATUS(14), + BIT_STATUS(13), + BIT_STATUS(12), + NYBBLE_SEPARATOR, + BIT_STATUS(11), + BIT_STATUS(10), + BIT_STATUS( 9), + BIT_STATUS( 8), + BYTE_SEPARATOR, + BIT_STATUS( 7), + BIT_STATUS( 6), + BIT_STATUS( 5), + BIT_STATUS( 4), + NYBBLE_SEPARATOR, + BIT_STATUS( 3), + BIT_STATUS( 2), + BIT_STATUS( 1), + BIT_STATUS( 0), + (ath_hal_func ?: "unknown") + ); +#undef BIT_UNCHANGED_ON +#undef BIT_UNCHANGED_OFF +#undef BIT_CHANGED_ON +#undef BIT_CHANGED_OFF +#undef NYBBLE_SEPARATOR +#undef BYTE_SEPARATOR +#undef BIT_STATUS +} - ale = ath_hal_alq_get(ah); - if (ale) { - struct athregrec *r = (struct athregrec *) ale->ae_data; - r->op = OP_MARK; - r->reg = id; - r->val = v; - alq_post(ath_hal_alq, ale); - } +/* For any addresses we wish to get a symbolic representation of (i.e. flag + * names) we can add it to this helper function and a subsequent line is + * printed with the status in symbolic form. */ +static void +_print_decoded_register_bitfields(struct ath_hal *ah, const char* device_name, + HAL_BOOL prefer_alq, int regop, + u_int32_t address, u_int32_t old_v, + u_int32_t v, HAL_BOOL verbose) +{ +/* constants from openhal ar5212reg.h */ +#define AR5K_AR5212_PHY_ERR_FIL 0x810c +#define AR5K_AR5212_PHY_ERR_FIL_RADAR 0x00000020 +#define AR5K_AR5212_PHY_ERR_FIL_OFDM 0x00020000 +#define AR5K_AR5212_PHY_ERR_FIL_CCK 0x02000000 +#define AR5K_AR5212_PIMR 0x00a0 +#define AR5K_AR5212_PISR 0x0080 +#define AR5K_AR5212_PIMR_RXOK 0x00000001 +#define AR5K_AR5212_PIMR_RXDESC 0x00000002 +#define AR5K_AR5212_PIMR_RXERR 0x00000004 +#define AR5K_AR5212_PIMR_RXNOFRM 0x00000008 +#define AR5K_AR5212_PIMR_RXEOL 0x00000010 +#define AR5K_AR5212_PIMR_RXORN 0x00000020 +#define AR5K_AR5212_PIMR_TXOK 0x00000040 +#define AR5K_AR5212_PIMR_TXDESC 0x00000080 +#define AR5K_AR5212_PIMR_TXERR 0x00000100 +#define AR5K_AR5212_PIMR_TXNOFRM 0x00000200 +#define AR5K_AR5212_PIMR_TXEOL 0x00000400 +#define AR5K_AR5212_PIMR_TXURN 0x00000800 +#define AR5K_AR5212_PIMR_MIB 0x00001000 +#define AR5K_AR5212_PIMR_SWI 0x00002000 +#define AR5K_AR5212_PIMR_RXPHY 0x00004000 +#define AR5K_AR5212_PIMR_RXKCM 0x00008000 +#define AR5K_AR5212_PIMR_SWBA 0x00010000 +#define AR5K_AR5212_PIMR_BRSSI 0x00020000 +#define AR5K_AR5212_PIMR_BMISS 0x00040000 +#define AR5K_AR5212_PIMR_HIUERR 0x00080000 +#define AR5K_AR5212_PIMR_BNR 0x00100000 +#define AR5K_AR5212_PIMR_RXCHIRP 0x00200000 +#define AR5K_AR5212_PIMR_TIM 0x00800000 +#define AR5K_AR5212_PIMR_BCNMISC 0x00800000 +#define AR5K_AR5212_PIMR_GPIO 0x01000000 +#define AR5K_AR5212_PIMR_QCBRORN 0x02000000 +#define AR5K_AR5212_PIMR_QCBRURN 0x04000000 +#define AR5K_AR5212_PIMR_QTRIG 0x08000000 + char name[128]; + ath_hal_lookup_register_name(ah, name, sizeof(name), address); + + if (address == AR5K_AR5212_PHY_ERR_FIL) { + ath_hal_printf(ah, prefer_alq, + "%s%s%s%18s info:%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" + "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s:%s\n", + device_name ? device_name : "", + device_name ? ":" : "", + (regop == REGOP_READ ? "R:" : + (regop == REGOP_WRITE ? "W:" : "")), + name ? name : "(unknown)", + (v & (1 << 31) ? " (1 << 31)" : ""), + (v & (1 << 30) ? " (1 << 30)" : ""), + (v & (1 << 29) ? " (1 << 29)" : ""), + (v & (1 << 28) ? " (1 << 28)" : ""), + (v & (1 << 27) ? " (1 << 27)" : ""), + (v & (1 << 26) ? " (1 << 26)" : ""), + (v & AR5K_AR5212_PHY_ERR_FIL_CCK ? " CCK" : ""), + (v & (1 << 24) ? " (1 << 24)" : ""), + (v & (1 << 23) ? " (1 << 23)" : ""), + (v & (1 << 22) ? " (1 << 22)" : ""), + (v & (1 << 21) ? " (1 << 21)" : ""), + (v & (1 << 20) ? " (1 << 20)" : ""), + (v & (1 << 19) ? " (1 << 19)" : ""), + (v & (1 << 18) ? " (1 << 18)" : ""), + (v & AR5K_AR5212_PHY_ERR_FIL_OFDM ? " OFDM" : ""), + (v & (1 << 16) ? " (1 << 16)" : ""), + (v & (1 << 15) ? " (1 << 15)" : ""), + (v & (1 << 14) ? " (1 << 14)" : ""), + (v & (1 << 13) ? " (1 << 13)" : ""), + (v & (1 << 12) ? " (1 << 12)" : ""), + (v & (1 << 11) ? " (1 << 11)" : ""), + (v & (1 << 10) ? " (1 << 10)" : ""), + (v & (1 << 9) ? " (1 << 9)" : ""), + (v & (1 << 8) ? " (1 << 8)" : ""), + (v & (1 << 7) ? " (1 << 7)" : ""), + ... [truncated message content] |