[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:
parent
f09fc44d8c
commit
01d478338f
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
= ¬if->u.auth;
|
= ¬if->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++)
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue