Debugging updates:

*  Updated register dump based on ath5k database (refresh the list)
*  Added a generic debug iwpriv delegation method to if_ath
*  Added some functions to help diagnose lost ath_buf pointers
	[resultant fixes will be checked in subsequent commits]



git-svn-id: http://madwifi-project.org/svn/madwifi/trunk@3497 0192ed92-7a03-0410-a25b-9323aeb14dbd
This commit is contained in:
mtaylor 2008-04-09 22:25:51 +00:00
parent eaa447863a
commit 43de3ce1a0
7 changed files with 425 additions and 635 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1529,6 +1529,7 @@ static inline void ath_hal_dump_map(struct ath_hal *ah)
} }
#include "if_ath_hal_wrappers.h" #include "if_ath_hal_wrappers.h"
#include "if_ath_hal_extensions.h"
#endif /* #ifndef _IF_ATH_HAL_H_ */ #endif /* #ifndef _IF_ATH_HAL_H_ */
/* *** THIS IS A GENERATED FILE -- DO NOT EDIT *** */ /* *** THIS IS A GENERATED FILE -- DO NOT EDIT *** */

View File

@ -452,6 +452,8 @@ struct ath_buf {
u_int32_t bf_queueage; /* "age" of txq when this buffer placed on stageq */ u_int32_t bf_queueage; /* "age" of txq when this buffer placed on stageq */
dma_addr_t bf_skbaddrff[ATH_TXDESC - 1]; /* extra addrs for FF */ dma_addr_t bf_skbaddrff[ATH_TXDESC - 1]; /* extra addrs for FF */
#endif #endif
int bf_taken_at_line; /* XXX: Want full alloc backtrace */
const char* bf_taken_at_func;
}; };
/* /*
@ -477,6 +479,8 @@ struct ath_descdma {
struct ath_desc *dd_desc; /* descriptors */ struct ath_desc *dd_desc; /* descriptors */
dma_addr_t dd_desc_paddr; /* physical addr of dd_desc */ dma_addr_t dd_desc_paddr; /* physical addr of dd_desc */
size_t dd_desc_len; /* size of dd_desc */ size_t dd_desc_len; /* size of dd_desc */
unsigned int dd_ndesc;
unsigned int dd_nbuf;
struct ath_buf *dd_bufptr; /* associated buffers */ struct ath_buf *dd_bufptr; /* associated buffers */
}; };
@ -718,7 +722,7 @@ struct ath_softc {
u_int sc_ledpin; /* GPIO pin for driving LED */ u_int sc_ledpin; /* GPIO pin for driving LED */
u_int sc_ledon; /* pin setting for LED on */ u_int sc_ledon; /* pin setting for LED on */
u_int sc_ledidle; /* idle polling interval */ u_int sc_ledidle; /* idle polling interval */
int sc_ledevent; /* time of last LED event */ long unsigned int sc_ledevent; /* time of last LED event */
u_int8_t sc_rxrate; /* current rx rate for LED */ u_int8_t sc_rxrate; /* current rx rate for LED */
u_int8_t sc_txrate; /* current tx rate for LED */ u_int8_t sc_txrate; /* current tx rate for LED */
u_int16_t sc_ledoff; /* off time for current blink */ u_int16_t sc_ledoff; /* off time for current blink */
@ -751,6 +755,7 @@ struct ath_softc {
u_int8_t sc_grppoll_str[GRPPOLL_RATE_STR_LEN]; u_int8_t sc_grppoll_str[GRPPOLL_RATE_STR_LEN];
struct ath_descdma sc_bdma; /* beacon descriptors */ struct ath_descdma sc_bdma; /* beacon descriptors */
ath_bufhead sc_bbuf; /* beacon buffers */ ath_bufhead sc_bbuf; /* beacon buffers */
spinlock_t sc_bbuflock; /* beacon buffers lock */
u_int sc_bhalq; /* HAL q for outgoing beacons */ u_int sc_bhalq; /* HAL q for outgoing beacons */
u_int sc_bmisscount; /* missed beacon transmits */ u_int sc_bmisscount; /* missed beacon transmits */
u_int32_t sc_ant_tx[8]; /* recent tx frames/antenna */ u_int32_t sc_ant_tx[8]; /* recent tx frames/antenna */
@ -759,6 +764,7 @@ struct ath_softc {
struct ath_txq *sc_xrtxq; /* tx q for XR data */ struct ath_txq *sc_xrtxq; /* tx q for XR data */
struct ath_descdma sc_grppolldma; /* TX descriptors for grppoll */ struct ath_descdma sc_grppolldma; /* TX descriptors for grppoll */
ath_bufhead sc_grppollbuf; /* transmit buffers for grouppoll */ ath_bufhead sc_grppollbuf; /* transmit buffers for grouppoll */
spinlock_t sc_grppollbuflock; /* grouppoll lock */
u_int16_t sc_xrpollint; /* xr poll interval */ u_int16_t sc_xrpollint; /* xr poll interval */
u_int16_t sc_xrpollcount; /* xr poll count */ u_int16_t sc_xrpollcount; /* xr poll count */
struct ath_txq *sc_uapsdq; /* tx q for uapsd */ struct ath_txq *sc_uapsdq; /* tx q for uapsd */

View File

@ -642,6 +642,13 @@ enum {
IEEE80211_PARAM_BEACON_MISS_THRESH = 73, /* Beacon miss threshold (in beacons) */ IEEE80211_PARAM_BEACON_MISS_THRESH = 73, /* Beacon miss threshold (in beacons) */
IEEE80211_PARAM_BEACON_MISS_THRESH_MS = 74, /* Beacon miss threshold (in ms) */ IEEE80211_PARAM_BEACON_MISS_THRESH_MS = 74, /* Beacon miss threshold (in ms) */
IEEE80211_PARAM_RSSI_EWMA = 75, IEEE80211_PARAM_RSSI_EWMA = 75,
IEEE80211_PARAM_DRAINTXQ = 76, /* Drain transmit queues */
IEEE80211_PARAM_STOP_QUEUE = 77, /* Stop the device queue (for testing) */
IEEE80211_PARAM_TXTIMEOUT = 78, /* Simulate Transmit timeout */
IEEE80211_PARAM_ATHRESET = 79, /* Force device reset */
IEEE80211_PARAM_RESETTXBUFS = 80, /* Reset transmit DMA */
IEEE80211_PARAM_SCANBUFS = 81, /* Heap analysis for TX DMA */
IEEE80211_PARAM_LEAKTXBUFS = 82, /* Leak tx buffers */
}; };
#define SIOCG80211STATS (SIOCDEVPRIVATE+2) #define SIOCG80211STATS (SIOCDEVPRIVATE+2)

View File

@ -55,6 +55,7 @@ extern const char *ieee80211_ctl_subtype_name[];
extern const char *ieee80211_state_name[IEEE80211_S_MAX]; extern const char *ieee80211_state_name[IEEE80211_S_MAX];
extern const char *ieee80211_wme_acnames[]; extern const char *ieee80211_wme_acnames[];
extern const char *ieee80211_phymode_name[]; extern const char *ieee80211_phymode_name[];
extern const char *ieee80211_opmode_name[];
void ieee80211_proto_attach(struct ieee80211com *); void ieee80211_proto_attach(struct ieee80211com *);
void ieee80211_proto_detach(struct ieee80211com *); void ieee80211_proto_detach(struct ieee80211com *);

View File

@ -518,6 +518,7 @@ struct ieee80211com {
unsigned int (*ic_write_register)(struct ieee80211com *, unsigned int, unsigned int); unsigned int (*ic_write_register)(struct ieee80211com *, unsigned int, unsigned int);
unsigned int (*ic_read_register)(struct ieee80211com *, unsigned int, unsigned int*); unsigned int (*ic_read_register)(struct ieee80211com *, unsigned int, unsigned int*);
#endif /* #ifdef ATH_REVERSE_ENGINEERING */ #endif /* #ifdef ATH_REVERSE_ENGINEERING */
int (*ic_debug_ath_iwpriv)(struct ieee80211com *, unsigned int param, unsigned int value);
}; };
#define MAX_PROC_IEEE80211_SIZE 16383 #define MAX_PROC_IEEE80211_SIZE 16383

View File

@ -372,6 +372,9 @@ ieee80211_ioctl_siwrate(struct net_device *dev, struct iw_request_info *info,
retv = ifmedia_ioctl(vap->iv_dev, &ifr, &vap->iv_media, SIOCSIFMEDIA); retv = ifmedia_ioctl(vap->iv_dev, &ifr, &vap->iv_media, SIOCSIFMEDIA);
if (retv == -ENETRESET) if (retv == -ENETRESET)
retv = IS_UP_AUTO(vap) ? ieee80211_open(vap->iv_dev) : 0; retv = IS_UP_AUTO(vap) ? ieee80211_open(vap->iv_dev) : 0;
if (retv)
IEEE80211_DPRINTF(vap, IEEE80211_MSG_DEBUG, "%s returns %d\n",
__func__, retv);
return retv; return retv;
} }
@ -767,7 +770,8 @@ ieee80211_ioctl_siwfreq(struct net_device *dev, struct iw_request_info *info,
* effect when we are transitioned to RUN state later. */ * effect when we are transitioned to RUN state later. */
if (IS_UP(vap->iv_dev) && if (IS_UP(vap->iv_dev) &&
(0 == (vap->iv_des_chan->ic_flags & CHANNEL_DFS))) { (0 == (vap->iv_des_chan->ic_flags & CHANNEL_DFS))) {
pre_announced_chanswitch(dev, ieee80211_chan2ieee(ic, vap->iv_des_chan), pre_announced_chanswitch(dev,
ieee80211_chan2ieee(ic, vap->iv_des_chan),
IEEE80211_DEFAULT_CHANCHANGE_TBTT_COUNT); IEEE80211_DEFAULT_CHANCHANGE_TBTT_COUNT);
} }
else if (vap->iv_state == IEEE80211_S_RUN) { else if (vap->iv_state == IEEE80211_S_RUN) {
@ -2575,6 +2579,16 @@ ieee80211_ioctl_setparam(struct net_device *dev, struct iw_request_info *info,
} else } else
retv = EINVAL; retv = EINVAL;
break; break;
case IEEE80211_PARAM_DRAINTXQ: /* fallthrough */
case IEEE80211_PARAM_STOP_QUEUE: /* fallthrough */
case IEEE80211_PARAM_ATHRESET: /* fallthrough */
case IEEE80211_PARAM_TXTIMEOUT: /* fallthrough */
case IEEE80211_PARAM_RESETTXBUFS: /* fallthrough */
case IEEE80211_PARAM_SCANBUFS: /* fallthrough */
case IEEE80211_PARAM_LEAKTXBUFS: /* fallthrough */
retv = ic->ic_debug_ath_iwpriv(ic, param, value);
break;
case IEEE80211_PARAM_BEACON_MISS_THRESH_MS: case IEEE80211_PARAM_BEACON_MISS_THRESH_MS:
if ((vap->iv_opmode != IEEE80211_M_IBSS) && if ((vap->iv_opmode != IEEE80211_M_IBSS) &&
(vap->iv_opmode != IEEE80211_M_STA)) (vap->iv_opmode != IEEE80211_M_STA))
@ -5582,12 +5596,25 @@ static const struct iw_priv_args ieee80211_priv_args[] = {
0, IW_PRIV_TYPE_APPIEBUF, "getiebuf" }, 0, IW_PRIV_TYPE_APPIEBUF, "getiebuf" },
{ IEEE80211_IOCTL_FILTERFRAME, { IEEE80211_IOCTL_FILTERFRAME,
IW_PRIV_TYPE_FILTER , 0, "setfilter" }, IW_PRIV_TYPE_FILTER , 0, "setfilter" },
{ IEEE80211_PARAM_RSSI_EWMA, { IEEE80211_PARAM_RSSI_EWMA,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rssi_ewma" }, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rssi_ewma" },
{ IEEE80211_PARAM_RSSI_EWMA, { IEEE80211_PARAM_RSSI_EWMA,
0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rssi_ewma" }, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_rssi_ewma" },
{ IEEE80211_PARAM_DRAINTXQ,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_draintxq" },
{ IEEE80211_PARAM_STOP_QUEUE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_stopq" },
{ IEEE80211_PARAM_TXTIMEOUT,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_txtimeout" },
{ IEEE80211_PARAM_ATHRESET,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_athreset" },
{ IEEE80211_PARAM_RESETTXBUFS,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_newtxbufs" },
{ IEEE80211_PARAM_SCANBUFS,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_scanbufs" },
{ IEEE80211_PARAM_LEAKTXBUFS,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "debug_leaktxbufs" },
#ifdef ATH_REVERSE_ENGINEERING #ifdef ATH_REVERSE_ENGINEERING
/* /*
Diagnostic dump of device registers Diagnostic dump of device registers