[PATCH] ipw2200: always enable frequently used debugging code

Moving part of the debugging code from IPW_DEBUG to IPW_LL_DEBUG (low level
debugging) and make IPW_DEBUG be always enabled. IPW_LL_DEBUG still needs
to be enabled by selecting CONFIG_IPW2200_DEBUG. But it is highly
deprecated for normal users since it adds higher debug verbosity in driver
hot paths.

Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Zhu Yi 2006-08-21 11:36:53 +08:00 committed by John W. Linville
parent f09fc44d8c
commit 01d478338f
3 changed files with 28 additions and 53 deletions

View File

@ -271,25 +271,14 @@ config IPW2200_DEBUG
bool "Enable full debugging output in IPW2200 module." bool "Enable full debugging output in IPW2200 module."
depends on IPW2200 depends on IPW2200
---help--- ---help---
This option will enable debug tracing output for the IPW2200. This option will enable low level debug tracing output for IPW2200.
This will result in the kernel module being ~100k larger. You can Note, normal debug code is already compiled in. This low level
control which debug output is sent to the kernel log by setting the debug option enables debug on hot paths (e.g Tx, Rx, ISR) and
value in will result in the kernel module being ~70 larger. Most users
will typically not need this high verbosity debug information.
/sys/bus/pci/drivers/ipw2200/debug_level If you are not sure, say N here.
This entry will only exist if this option is enabled.
To set a value, simply echo an 8-byte hex value to the same file:
% echo 0x00000FFO > /sys/bus/pci/drivers/ipw2200/debug_level
You can find the list of debug mask values in
drivers/net/wireless/ipw2200.h
If you are not trying to debug or develop the IPW2200 driver, you
most likely want to say N here.
config AIRO config AIRO
tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"

View File

@ -567,7 +567,6 @@ static inline void ipw_disable_interrupts(struct ipw_priv *priv)
spin_unlock_irqrestore(&priv->irq_lock, flags); spin_unlock_irqrestore(&priv->irq_lock, flags);
} }
#ifdef CONFIG_IPW2200_DEBUG
static char *ipw_error_desc(u32 val) static char *ipw_error_desc(u32 val)
{ {
switch (val) { switch (val) {
@ -634,7 +633,6 @@ static void ipw_dump_error_log(struct ipw_priv *priv,
error->log[i].time, error->log[i].time,
error->log[i].data, error->log[i].event); error->log[i].data, error->log[i].event);
} }
#endif
static inline int ipw_is_init(struct ipw_priv *priv) static inline int ipw_is_init(struct ipw_priv *priv)
{ {
@ -1435,9 +1433,7 @@ static ssize_t store_scan_age(struct device *d, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct ipw_priv *priv = dev_get_drvdata(d); struct ipw_priv *priv = dev_get_drvdata(d);
#ifdef CONFIG_IPW2200_DEBUG
struct net_device *dev = priv->net_dev; struct net_device *dev = priv->net_dev;
#endif
char buffer[] = "00000000"; char buffer[] = "00000000";
unsigned long len = unsigned long len =
(sizeof(buffer) - 1) > count ? count : sizeof(buffer) - 1; (sizeof(buffer) - 1) > count ? count : sizeof(buffer) - 1;
@ -1958,14 +1954,12 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
IPW_WARNING("Firmware error detected. Restarting.\n"); IPW_WARNING("Firmware error detected. Restarting.\n");
if (priv->error) { if (priv->error) {
IPW_DEBUG_FW("Sysfs 'error' log already exists.\n"); IPW_DEBUG_FW("Sysfs 'error' log already exists.\n");
#ifdef CONFIG_IPW2200_DEBUG
if (ipw_debug_level & IPW_DL_FW_ERRORS) { if (ipw_debug_level & IPW_DL_FW_ERRORS) {
struct ipw_fw_error *error = struct ipw_fw_error *error =
ipw_alloc_error_log(priv); ipw_alloc_error_log(priv);
ipw_dump_error_log(priv, error); ipw_dump_error_log(priv, error);
kfree(error); kfree(error);
} }
#endif
} else { } else {
priv->error = ipw_alloc_error_log(priv); priv->error = ipw_alloc_error_log(priv);
if (priv->error) if (priv->error)
@ -1973,10 +1967,8 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
else else
IPW_DEBUG_FW("Error allocating sysfs 'error' " IPW_DEBUG_FW("Error allocating sysfs 'error' "
"log.\n"); "log.\n");
#ifdef CONFIG_IPW2200_DEBUG
if (ipw_debug_level & IPW_DL_FW_ERRORS) if (ipw_debug_level & IPW_DL_FW_ERRORS)
ipw_dump_error_log(priv, priv->error); ipw_dump_error_log(priv, priv->error);
#endif
} }
/* XXX: If hardware encryption is for WPA/WPA2, /* XXX: If hardware encryption is for WPA/WPA2,
@ -3915,7 +3907,6 @@ static const struct ipw_status_code ipw_status_codes[] = {
{0x2E, "Cipher suite is rejected per security policy"}, {0x2E, "Cipher suite is rejected per security policy"},
}; };
#ifdef CONFIG_IPW2200_DEBUG
static const char *ipw_get_status_code(u16 status) static const char *ipw_get_status_code(u16 status)
{ {
int i; int i;
@ -3924,7 +3915,6 @@ static const char *ipw_get_status_code(u16 status)
return ipw_status_codes[i].reason; return ipw_status_codes[i].reason;
return "Unknown status value."; return "Unknown status value.";
} }
#endif
static void inline average_init(struct average *avg) static void inline average_init(struct average *avg)
{ {
@ -4394,7 +4384,6 @@ static void ipw_rx_notification(struct ipw_priv *priv,
if (priv-> if (priv->
status & (STATUS_ASSOCIATED | status & (STATUS_ASSOCIATED |
STATUS_AUTH)) { STATUS_AUTH)) {
#ifdef CONFIG_IPW2200_DEBUG
struct notif_authenticate *auth struct notif_authenticate *auth
= &notif->u.auth; = &notif->u.auth;
IPW_DEBUG(IPW_DL_NOTIF | IPW_DEBUG(IPW_DL_NOTIF |
@ -4412,7 +4401,6 @@ static void ipw_rx_notification(struct ipw_priv *priv,
ipw_get_status_code ipw_get_status_code
(ntohs (ntohs
(auth->status))); (auth->status)));
#endif
priv->status &= priv->status &=
~(STATUS_ASSOCIATING | ~(STATUS_ASSOCIATING |
@ -5969,7 +5957,6 @@ static void ipw_bg_adhoc_check(void *data)
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
} }
#ifdef CONFIG_IPW2200_DEBUG
static void ipw_debug_config(struct ipw_priv *priv) static void ipw_debug_config(struct ipw_priv *priv)
{ {
IPW_DEBUG_INFO("Scan completed, no valid APs matched " IPW_DEBUG_INFO("Scan completed, no valid APs matched "
@ -5994,9 +5981,6 @@ static void ipw_debug_config(struct ipw_priv *priv)
IPW_DEBUG_INFO("PRIVACY off\n"); IPW_DEBUG_INFO("PRIVACY off\n");
IPW_DEBUG_INFO("RATE MASK: 0x%08X\n", priv->rates_mask); IPW_DEBUG_INFO("RATE MASK: 0x%08X\n", priv->rates_mask);
} }
#else
#define ipw_debug_config(x) do {} while (0)
#endif
static void ipw_set_fixed_rate(struct ipw_priv *priv, int mode) static void ipw_set_fixed_rate(struct ipw_priv *priv, int mode)
{ {
@ -11467,9 +11451,7 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
priv->net_dev = net_dev; priv->net_dev = net_dev;
priv->pci_dev = pdev; priv->pci_dev = pdev;
#ifdef CONFIG_IPW2200_DEBUG
ipw_debug_level = debug; ipw_debug_level = debug;
#endif
spin_lock_init(&priv->irq_lock); spin_lock_init(&priv->irq_lock);
spin_lock_init(&priv->lock); spin_lock_init(&priv->lock);
for (i = 0; i < IPW_IBSS_MAC_HASH_SIZE; i++) for (i = 0; i < IPW_IBSS_MAC_HASH_SIZE; i++)

View File

@ -1381,13 +1381,18 @@ BITC(x,19),BITC(x,18),BITC(x,17),BITC(x,16),\
BIT_ARG16(x) BIT_ARG16(x)
#ifdef CONFIG_IPW2200_DEBUG
#define IPW_DEBUG(level, fmt, args...) \ #define IPW_DEBUG(level, fmt, args...) \
do { if (ipw_debug_level & (level)) \
printk(KERN_DEBUG DRV_NAME": %c %s " fmt, \
in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0)
#ifdef CONFIG_IPW2200_DEBUG
#define IPW_LL_DEBUG(level, fmt, args...) \
do { if (ipw_debug_level & (level)) \ do { if (ipw_debug_level & (level)) \
printk(KERN_DEBUG DRV_NAME": %c %s " fmt, \ printk(KERN_DEBUG DRV_NAME": %c %s " fmt, \
in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0) in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0)
#else #else
#define IPW_DEBUG(level, fmt, args...) do {} while (0) #define IPW_LL_DEBUG(level, fmt, args...) do {} while (0)
#endif /* CONFIG_IPW2200_DEBUG */ #endif /* CONFIG_IPW2200_DEBUG */
/* /*
@ -1457,28 +1462,27 @@ do { if (ipw_debug_level & (level)) \
#define IPW_DEBUG_WX(f, a...) IPW_DEBUG(IPW_DL_WX, f, ## a) #define IPW_DEBUG_WX(f, a...) IPW_DEBUG(IPW_DL_WX, f, ## a)
#define IPW_DEBUG_SCAN(f, a...) IPW_DEBUG(IPW_DL_SCAN, f, ## a) #define IPW_DEBUG_SCAN(f, a...) IPW_DEBUG(IPW_DL_SCAN, f, ## a)
#define IPW_DEBUG_STATUS(f, a...) IPW_DEBUG(IPW_DL_STATUS, f, ## a) #define IPW_DEBUG_TRACE(f, a...) IPW_LL_DEBUG(IPW_DL_TRACE, f, ## a)
#define IPW_DEBUG_TRACE(f, a...) IPW_DEBUG(IPW_DL_TRACE, f, ## a) #define IPW_DEBUG_RX(f, a...) IPW_LL_DEBUG(IPW_DL_RX, f, ## a)
#define IPW_DEBUG_RX(f, a...) IPW_DEBUG(IPW_DL_RX, f, ## a) #define IPW_DEBUG_TX(f, a...) IPW_LL_DEBUG(IPW_DL_TX, f, ## a)
#define IPW_DEBUG_TX(f, a...) IPW_DEBUG(IPW_DL_TX, f, ## a) #define IPW_DEBUG_ISR(f, a...) IPW_LL_DEBUG(IPW_DL_ISR, f, ## a)
#define IPW_DEBUG_ISR(f, a...) IPW_DEBUG(IPW_DL_ISR, f, ## a)
#define IPW_DEBUG_MANAGEMENT(f, a...) IPW_DEBUG(IPW_DL_MANAGE, f, ## a) #define IPW_DEBUG_MANAGEMENT(f, a...) IPW_DEBUG(IPW_DL_MANAGE, f, ## a)
#define IPW_DEBUG_LED(f, a...) IPW_DEBUG(IPW_DL_LED, f, ## a) #define IPW_DEBUG_LED(f, a...) IPW_LL_DEBUG(IPW_DL_LED, f, ## a)
#define IPW_DEBUG_WEP(f, a...) IPW_DEBUG(IPW_DL_WEP, f, ## a) #define IPW_DEBUG_WEP(f, a...) IPW_LL_DEBUG(IPW_DL_WEP, f, ## a)
#define IPW_DEBUG_HC(f, a...) IPW_DEBUG(IPW_DL_HOST_COMMAND, f, ## a) #define IPW_DEBUG_HC(f, a...) IPW_LL_DEBUG(IPW_DL_HOST_COMMAND, f, ## a)
#define IPW_DEBUG_FRAG(f, a...) IPW_DEBUG(IPW_DL_FRAG, f, ## a) #define IPW_DEBUG_FRAG(f, a...) IPW_LL_DEBUG(IPW_DL_FRAG, f, ## a)
#define IPW_DEBUG_FW(f, a...) IPW_DEBUG(IPW_DL_FW, f, ## a) #define IPW_DEBUG_FW(f, a...) IPW_LL_DEBUG(IPW_DL_FW, f, ## a)
#define IPW_DEBUG_RF_KILL(f, a...) IPW_DEBUG(IPW_DL_RF_KILL, f, ## a) #define IPW_DEBUG_RF_KILL(f, a...) IPW_DEBUG(IPW_DL_RF_KILL, f, ## a)
#define IPW_DEBUG_DROP(f, a...) IPW_DEBUG(IPW_DL_DROP, f, ## a) #define IPW_DEBUG_DROP(f, a...) IPW_DEBUG(IPW_DL_DROP, f, ## a)
#define IPW_DEBUG_IO(f, a...) IPW_DEBUG(IPW_DL_IO, f, ## a) #define IPW_DEBUG_IO(f, a...) IPW_LL_DEBUG(IPW_DL_IO, f, ## a)
#define IPW_DEBUG_ORD(f, a...) IPW_DEBUG(IPW_DL_ORD, f, ## a) #define IPW_DEBUG_ORD(f, a...) IPW_LL_DEBUG(IPW_DL_ORD, f, ## a)
#define IPW_DEBUG_FW_INFO(f, a...) IPW_DEBUG(IPW_DL_FW_INFO, f, ## a) #define IPW_DEBUG_FW_INFO(f, a...) IPW_LL_DEBUG(IPW_DL_FW_INFO, f, ## a)
#define IPW_DEBUG_NOTIF(f, a...) IPW_DEBUG(IPW_DL_NOTIF, f, ## a) #define IPW_DEBUG_NOTIF(f, a...) IPW_DEBUG(IPW_DL_NOTIF, f, ## a)
#define IPW_DEBUG_STATE(f, a...) IPW_DEBUG(IPW_DL_STATE | IPW_DL_ASSOC | IPW_DL_INFO, f, ## a) #define IPW_DEBUG_STATE(f, a...) IPW_DEBUG(IPW_DL_STATE | IPW_DL_ASSOC | IPW_DL_INFO, f, ## a)
#define IPW_DEBUG_ASSOC(f, a...) IPW_DEBUG(IPW_DL_ASSOC | IPW_DL_INFO, f, ## a) #define IPW_DEBUG_ASSOC(f, a...) IPW_DEBUG(IPW_DL_ASSOC | IPW_DL_INFO, f, ## a)
#define IPW_DEBUG_STATS(f, a...) IPW_DEBUG(IPW_DL_STATS, f, ## a) #define IPW_DEBUG_STATS(f, a...) IPW_LL_DEBUG(IPW_DL_STATS, f, ## a)
#define IPW_DEBUG_MERGE(f, a...) IPW_DEBUG(IPW_DL_MERGE, f, ## a) #define IPW_DEBUG_MERGE(f, a...) IPW_LL_DEBUG(IPW_DL_MERGE, f, ## a)
#define IPW_DEBUG_QOS(f, a...) IPW_DEBUG(IPW_DL_QOS, f, ## a) #define IPW_DEBUG_QOS(f, a...) IPW_LL_DEBUG(IPW_DL_QOS, f, ## a)
#include <linux/ctype.h> #include <linux/ctype.h>