2007-11-21 01:57:54

by Luis R. Rodriguez

[permalink] [raw]
Subject: Re: [ath5k-devel] ath5k: more consistent debug, info and error logging

On Nov 20, 2007 4:17 AM, bruno randolf <[email protected]> wrote:
> sorry for the empty subject :(
> i still have to get used to the workflow with git.
>
> bruno
>
> On Tuesday 20 November 2007 18:09:27 Bruno Randolf wrote:
> > ath5k: more consistent debug, info and error logging

Hey Bruno,

thanks for this work BTW. CC'ing other maintainers, you probably just
forgot. I know this is a pain but this is a pretty big patch, can you
split it into a few for better review? I also know this is just debug
stuff but it would help. One for each main task you mention below
might do it, or something like that.

> > * added 4 new macros AR5K_INFO, AR5K_WARN, AR5K_ERR and AR5K_DBG, and
> > changed all printk, most dev_info and most AR5K_PRINTF lines to use these
> > macros instead. they get a reference to sc, so we can automatically add
> > additional information: right now they prepend "ath5k phyX:" to all
> > strings, but it would be possible to switch to dev_info/warn/... instead
> > too. i think using "phyX" makes the output more readable and easier to
> > match with the output from mac80211. in cases where we don't have sc
> > available we still use AR5K_PRINTF. this is mostly cosmetics, but it's
> > important for distinguishing log messages between different cards in setups
> > with more than one atheros card.
> >
> > * deleted AR5K_PRINT because it's easy to use AR5K_PRINTF instead.
> >
> > * moved all debugging related stuff to debug.h and debug.c
> >
> > * added debugfs entry (ath5k/phyX/debug) to control the debug level for
> > each device
> >
> > * consistent use of AR5K_DBG instead of DPRINTF and others. AR5K_DBG
> > honors the debugging flags set on module load or by debugfs. moved all
> > instances where the debugging output was controlled by additional defines
> > (like ATH_DUMP_SKB) to use these debugging flags too.
> >
> > * better skb dumping, allowing control wether we want to see RX or TX
> > frames.
> >
> > for base.c
> > Changes-licensed-under: 3-clause-BSD
> >
> > for all others...
> > Changes-licensed-under: ISC
> >
> > Signed-off-by: Bruno Randolf <[email protected]>
> > diff --git a/drivers/net/wireless/ath5k/Makefile
> > b/drivers/net/wireless/ath5k/Makefile index f27560b..321641f 100644
> > --- a/drivers/net/wireless/ath5k/Makefile
> > +++ b/drivers/net/wireless/ath5k/Makefile
> > @@ -1,2 +1,2 @@
> > -ath5k-objs = base.o hw.o regdom.o initvals.o phy.o
> > +ath5k-objs = base.o hw.o regdom.o initvals.o phy.o debug.o
> > obj-$(CONFIG_ATH5K) += ath5k.o
> > diff --git a/drivers/net/wireless/ath5k/ath5k.h
> > b/drivers/net/wireless/ath5k/ath5k.h index c5e37d2..27593d6 100644
> > --- a/drivers/net/wireless/ath5k/ath5k.h
> > +++ b/drivers/net/wireless/ath5k/ath5k.h
> > @@ -25,8 +25,8 @@
> > * you've been warned. */
> > #define CHAN_DEBUG 0
> >
> > -/* Uncomment this for debuging (warning that it results in TOO much
> > output) */ -/* #define AR5K_DEBUG 1 */
> > +/* set this to 1 for debugging output */
> > +#define AR5K_DEBUG 0
> >
> > #include <linux/io.h>
> > #include <linux/types.h>
> > @@ -70,12 +70,25 @@
> > \****************************/
> >
> > #define AR5K_PRINTF(fmt, ...) printk("%s: " fmt, __func__,
> > ##__VA_ARGS__) -#define AR5K_PRINT(fmt) printk("%s: " fmt,
> > __func__)
> > -#ifdef AR5K_DEBUG
> > -#define AR5K_TRACE printk(KERN_DEBUG "%s:%d\n", __func__,
> > __LINE__) -#else
> > -#define AR5K_TRACE
> > -#endif
> > +
> > +#define AR5K_PRINTK(_sc, _level, _fmt, ...) \
> > + printk(_level "ath5k %s: " _fmt, \
> > + ((_sc) && (_sc)->hw) ? wiphy_name((_sc)->hw->wiphy) : "", \
> > + ##__VA_ARGS__)
> > +
> > +#define AR5K_PRINTK_LIMIT(_sc, _level, _fmt, ...) do { \
> > + if (net_ratelimit()) \
> > + AR5K_PRINTK(_sc, _level, _fmt, ##__VA_ARGS__); \
> > + } while (0)
> > +
> > +#define AR5K_INFO(_sc, _fmt, ...) \
> > + AR5K_PRINTK(_sc, KERN_INFO, _fmt, ##__VA_ARGS__)
> > +
> > +#define AR5K_WARN(_sc, _fmt, ...) \
> > + AR5K_PRINTK_LIMIT(_sc, KERN_WARNING, _fmt, ##__VA_ARGS__)
> > +
> > +#define AR5K_ERR(_sc, _fmt, ...) \
> > + AR5K_PRINTK_LIMIT(_sc, KERN_ERR, _fmt, ##__VA_ARGS__)

I was kind of hoping we could stick to dev_[info|warn|err] for these.
IIRC you had mentioned you can't get the device name printed? Is that
right? To not use dev_dbg seems to make sense as we can have more
granular control over debug messages specific to ath5k.

> > /*
> > * Some tuneable values (these should be changeable by the user)
> > @@ -1095,7 +1108,6 @@ extern void ath5k_hw_set_gpio_intr(struct ath5k_hw
> > *ah, unsigned int gpio, u32 i /* Regulatory Domain/Channels Setup */
> > extern u16 ath5k_get_regdomain(struct ath5k_hw *ah);
> > /* Misc functions */
> > -extern void ath5k_hw_dump_state(struct ath5k_hw *ah);
> > extern int ath5k_hw_get_capability(struct ath5k_hw *ah, enum
> > ath5k_capability_type cap_type, u32 capability, u32 *result);
> >
> >
> > diff --git a/drivers/net/wireless/ath5k/base.c
> > b/drivers/net/wireless/ath5k/base.c index 77e3855..6ca7ebf 100644
> > --- a/drivers/net/wireless/ath5k/base.c
> > +++ b/drivers/net/wireless/ath5k/base.c

Notice the license on base.[ch]. It's a "Dual GPL/BSD" license.
Although all of our recent changes have been licensed the 3-clause-BSD
for these files we did not verify the same for previous changes on
MadWifi's files (stuff in base.[ch]) so its best to just keep the Dual
license there for that code in case previous authors did intend on
licesning their changes under the GPL (hence the problem with using
vague "alternatively" language for Dual licensing). This presents a
problem in trying to shift code on base.[ch] onto what you would think
is an OK ISC-only licensed code. This is also the problem we knew we'd
face down the road with trying to help OpenBSD -- in the end we may
want to just shuffle around GPL code into ISC licensed code and well,
then it becomes a pretty heavy nightmware for us to keep track of
which part of the code is licensed under what for them.

As we have it right now base.[ch] contains code which *may* have been
patched in for GPL-only intentions (prior to kernel inclusion). In
your patch series I'd like to see careful use of this shifting. If you
are just deleting code, great, but if you are reusing code please
either go through the git-log to see what license the changes were
made (haha, good one huh!) or well lets just GPL those new files you
are creating. The debug print stuff is pretty useless to other kernels
too as its very specific to Linux.

> > @@ -56,40 +56,12 @@
> >
> > #include "base.h"
> > #include "reg.h"
> > -
> > -#define ATH_DEBUG_MODES 0 /* Show found modes in the log? */
> > -#define ATH_DUMP_SKB 0 /* show skb contents */
> > -#define AR_DEBUG 1
> > +#include "debug.h"
> >
> > /* unaligned little endian access */
> > #define LE_READ_2(_p) (le16_to_cpu(get_unaligned((__le16 *)(_p))))
> > #define LE_READ_4(_p) (le32_to_cpu(get_unaligned((__le32 *)(_p))))
> >
> > -#if AR_DEBUG
> > -#define DPRINTF(sc, _m, _fmt...) do { \
> > - if (unlikely(((sc)->debug & (_m)) && net_ratelimit())) \
> > - printk(KERN_DEBUG _fmt); \
> > -} while (0)
> > -#else
> > -static inline int __attribute__ ((format (printf, 3, 4)))
> > -DPRINTF(struct ath5k_softc *sc, unsigned int m, const char *fmt, ...)
> > -{
> > - return 0;
> > -}
> > -#endif
> > -enum {
> > - ATH_DEBUG_XMIT = 0x00000001, /* basic xmit operation */
> > - ATH_DEBUG_RESET = 0x00000020, /* reset processing */
> > - ATH_DEBUG_MODE = 0x00000040, /* mode init/setup */
> > - ATH_DEBUG_BEACON = 0x00000080, /* beacon handling */
> > - ATH_DEBUG_INTR = 0x00001000, /* ISR */
> > - ATH_DEBUG_BEACON_PROC = 0x00008000, /* beacon ISR proc */
> > - ATH_DEBUG_CALIBRATE = 0x00010000, /* periodic calibration */
> > - ATH_DEBUG_LED = 0x00100000, /* led management */
> > - ATH_DEBUG_FATAL = 0x80000000, /* fatal errors */
> > - ATH_DEBUG_ANY = 0xffffffff
> > -};
> > -
> > enum {
> > ATH_LED_TX,
> > ATH_LED_RX,
> > @@ -97,73 +69,6 @@ enum {
> >
> > static int ath5k_calinterval = 10; /* Calibrate PHY every 10 secs (TODO:
> > Fixme) */
> >
> > -#if AR_DEBUG
> > -static unsigned int ath5k_debug;
> > -module_param_named(debug, ath5k_debug, uint, 0);
> > -#endif
> > -
> > -#if AR_DEBUG
> > -static void ath5k_printrxbuf(struct ath5k_buf *bf, int done)
> > -{
> > - struct ath5k_desc *ds = bf->desc;
> > -
> > - printk(KERN_DEBUG "R (%p %llx) %08x %08x %08x %08x %08x %08x %c\n",
> > - ds, (unsigned long long)bf->daddr,
> > - ds->ds_link, ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > - ds->ds_hw[0], ds->ds_hw[1],
> > - !done ? ' ' : (ds->ds_rxstat.rs_status == 0) ? '*' : '!');
> > -}
> > -
> > -static void ath5k_printtxbuf(struct ath5k_buf *bf, int done)
> > -{
> > - struct ath5k_desc *ds = bf->desc;
> > -
> > - printk(KERN_DEBUG "T (%p %llx) %08x %08x %08x %08x %08x %08x %08x "
> > - "%08x %c\n", ds, (unsigned long long)bf->daddr, ds->ds_link,
> > - ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > - ds->ds_hw[0], ds->ds_hw[1], ds->ds_hw[2], ds->ds_hw[3],
> > - !done ? ' ' : (ds->ds_txstat.ts_status == 0) ? '*' : '!');
> > -}
> > -#endif
> > -
> > -#if ATH_DUMP_SKB
> > -static inline void ath5k_dump_skb(struct sk_buff *skb, const char *prefix)
> > -{
> > - print_hex_dump_bytes(prefix, DUMP_PREFIX_NONE, skb->data,
> > - min(200U, skb->len));
> > -}
> > -#else
> > -static inline void ath5k_dump_skb(struct sk_buff *skb, const char *prefix)
> > {} -#endif
> > -
> > -#if ATH_DEBUG_MODES
> > -static void ath5k_dump_modes(struct ieee80211_hw_mode *modes)
> > -{
> > - unsigned int m, i;
> > -
> > - for (m = 0; m < NUM_DRIVER_MODES; m++) {
> > - printk(KERN_DEBUG "Mode %u: channels %d, rates %d\n", m,
> > - modes[m].num_channels, modes[m].num_rates);
> > - printk(KERN_DEBUG " channels:\n");
> > - for (i = 0; i < modes[m].num_channels; i++)
> > - printk(KERN_DEBUG " %3d %d %.4x %.4x\n",
> > - modes[m].channels[i].chan,
> > - modes[m].channels[i].freq,
> > - modes[m].channels[i].val,
> > - modes[m].channels[i].flag);
> > - printk(KERN_DEBUG " rates:\n");
> > - for (i = 0; i < modes[m].num_rates; i++)
> > - printk(KERN_DEBUG " %4d %.4x %.4x %.4x\n",
> > - modes[m].rates[i].rate,
> > - modes[m].rates[i].val,
> > - modes[m].rates[i].flags,
> > - modes[m].rates[i].val2);
> > - }
> > -}
> > -#else
> > -static inline void ath5k_dump_modes(struct ieee80211_hw_mode *modes) {}
> > -#endif
> > -
> >
> > /******************\
> > * Internal defines *
> > @@ -399,6 +304,8 @@ init_ath5k_pci(void)
> > {
> > int ret;
> >
> > + ath5k_debug_init();
> > +
> > ret = pci_register_driver(&ath5k_pci_drv_id);
> > if (ret) {
> > printk(KERN_ERR "ath5k_pci: can't register pci driver\n");
> > @@ -412,6 +319,8 @@ static void __exit
> > exit_ath5k_pci(void)
> > {
> > pci_unregister_driver(&ath5k_pci_drv_id);
> > +
> > + ath5k_debug_finish();
> > }
> >
> > module_init(init_ath5k_pci);
> > @@ -519,6 +428,8 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > goto err_map;
> > }
> >
> > + dev_info(&pdev->dev, "registered as '%s'\n", wiphy_name(hw->wiphy));
> > +
> > /* Initialize driver private data */
> > SET_IEEE80211_DEV(hw, &pdev->dev);
> > hw->flags = IEEE80211_HW_RX_INCLUDES_FCS;
> > @@ -529,13 +440,12 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > sc->hw = hw;
> > sc->pdev = pdev;
> >
> > + ath5k_debug_init_device(sc);
> > +
> > /*
> > * Mark the device as detached to avoid processing
> > * interrupts until setup is complete.
> > */
> > -#if AR_DEBUG
> > - sc->debug = ath5k_debug;
> > -#endif
> > __set_bit(ATH_STAT_INVALID, sc->status);
> >
> > sc->iobase = mem; /* So we can unmap it on detach */
> > @@ -554,7 +464,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > /* Setup interrupt handler */
> > ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
> > if (ret) {
> > - dev_err(&pdev->dev, "request_irq failed\n");
> > + AR5K_ERR(sc, "request_irq failed\n");
> > goto err_free;
> > }
> >
> > @@ -570,7 +480,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > if (ret)
> > goto err_ah;
> >
> > - dev_info(&pdev->dev, "Atheros AR%s chip found (MAC: 0x%x, PHY: 0x%x)\n",
> > + AR5K_INFO(sc, "Atheros AR%s chip found (MAC: 0x%x, PHY: 0x%x)\n",
> > ath5k_chip_name(AR5K_VERSION_VER,sc->ah->ah_mac_srev),
> > sc->ah->ah_mac_srev,
> > sc->ah->ah_phy_revision);
> > @@ -580,27 +490,28 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > if(sc->ah->ah_radio_5ghz_revision && !sc->ah->ah_radio_2ghz_revision) {
> > /* No 5GHz support -> report 2GHz radio */
> > if(!test_bit(MODE_IEEE80211A, sc->ah->ah_capabilities.cap_mode)){
> > - dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n",
> > + AR5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
> > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > sc->ah->ah_radio_5ghz_revision);
> > /* No 2GHz support (5110 and some 5Ghz only cards) -> report 5Ghz radio
> > */ } else if(!test_bit(MODE_IEEE80211B, sc->ah->ah_capabilities.cap_mode)){
> > - dev_info(&pdev->dev, "RF%s 5GHz radio found (0x%x)\n",
> > + AR5K_INFO(sc, "RF%s 5GHz radio found (0x%x)\n",

See for example, here I wouldn't mind leaving dev_info, etc, with our
own macros.

> > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > sc->ah->ah_radio_5ghz_revision);
> > /* Multiband radio */
> > } else {
> > - dev_info(&pdev->dev, "RF%s multiband radio found (0x%x)\n",
> > + AR5K_INFO(sc, "RF%s multiband radio found"
> > + " (0x%x)\n",
> > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > sc->ah->ah_radio_5ghz_revision);
> > }
> > }
> > /* Multi chip radio (RF5111 - RF2111) -> report both 2GHz/5GHz radios */
> > else if(sc->ah->ah_radio_5ghz_revision &&
> > sc->ah->ah_radio_2ghz_revision){ - dev_info(&pdev->dev, "RF%s 5GHz radio
> > found (0x%x)\n",
> > + AR5K_INFO(sc, "RF%s 5GHz radio found (0x%x)\n",
> > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > sc->ah->ah_radio_5ghz_revision);
> > - dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n",
> > + AR5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
> > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_2ghz_revision),
> > sc->ah->ah_radio_2ghz_revision);
> > }
> > @@ -634,6 +545,7 @@ ath5k_pci_remove(struct pci_dev *pdev)
> > struct ieee80211_hw *hw = pci_get_drvdata(pdev);
> > struct ath5k_softc *sc = hw->priv;
> >
> > + ath5k_debug_finish_device(sc);
> > ath5k_detach(pdev, hw);
> > ath5k_hw_detach(sc->ah);
> > free_irq(pdev->irq, sc);
> > @@ -710,7 +622,7 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw
> > *hw) unsigned int i;
> > int ret;
> >
> > - DPRINTF(sc, ATH_DEBUG_ANY, "%s: devid 0x%x\n", __func__, pdev->device);
> > + AR5K_DBG(sc, ATH_DEBUG_ANY, "devid 0x%x\n", pdev->device);
> >
> > /*
> > * Check if the MAC has multi-rate retry support.
> > @@ -737,7 +649,7 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw
> > *hw) */
> > ret = ath5k_getchannels(hw);
> > if (ret) {
> > - dev_err(&pdev->dev, "can't get channels\n");
> > + AR5K_ERR(sc, "can't get channels\n");
> > goto err;
> > }
> >
> > @@ -752,7 +664,7 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw
> > *hw) */
> > ret = ath5k_desc_alloc(sc, pdev);
> > if (ret) {
> > - dev_err(&pdev->dev, "can't allocate descriptors\n");
> > + AR5K_ERR(sc, "can't allocate descriptors\n");
> > goto err;
> > }
> >
> > @@ -764,14 +676,14 @@ ath5k_attach(struct pci_dev *pdev, struct
> > ieee80211_hw *hw) */
> > ret = ath5k_beaconq_setup(ah);
> > if (ret < 0) {
> > - dev_err(&pdev->dev, "can't setup a beacon xmit queue\n");
> > + AR5K_ERR(sc, "can't setup a beacon xmit queue\n");
> > goto err_desc;
> > }
> > sc->bhalq = ret;
> >
> > sc->txq = ath5k_txq_setup(sc, AR5K_TX_QUEUE_DATA, AR5K_WME_AC_BK);
> > if (IS_ERR(sc->txq)) {
> > - dev_err(&pdev->dev, "can't setup xmit queue\n");
> > + AR5K_ERR(sc, "can't setup xmit queue\n");
> > ret = PTR_ERR(sc->txq);
> > goto err_bhal;
> > }
> > @@ -810,7 +722,7 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw
> > *hw)
> >
> > ret = ieee80211_register_hw(hw);
> > if (ret) {
> > - dev_err(&pdev->dev, "can't register ieee80211 hw\n");
> > + AR5K_ERR(sc, "can't register ieee80211 hw\n");
> > goto err_queues;
> > }
> >
> > @@ -944,7 +856,7 @@ ath5k_copy_channels(struct ath5k_hw *ah,
> > chfreq = CHANNEL_2GHZ;
> > break;
> > default:
> > - printk(KERN_WARNING "bad mode, not copying channels\n");
> > + AR5K_WARN(ah->ah_sc, "bad mode, not copying channels\n");
> > return 0;
> > }
> >
> > @@ -998,7 +910,7 @@ ath5k_register_mode(struct ieee80211_hw *hw, u8 m)
> > continue;
> > ret = ieee80211_register_hwmode(hw, &modes[i]);
> > if (ret) {
> > - printk(KERN_ERR "can't register hwmode %u\n", m);
> > + AR5K_ERR(sc, "can't register hwmode %u\n", m);
> > return ret;
> > }
> > return 0;
> > @@ -1061,7 +973,7 @@ ath5k_getchannels(struct ieee80211_hw *hw)
> > REGISTER_MODE(MODE_IEEE80211B);
> > REGISTER_MODE(MODE_IEEE80211A);
> >
> > - ath5k_dump_modes(modes);
> > + ath5k_debug_dump_modes(sc, modes);
> >
> > return ret;
> > }
> > @@ -1078,8 +990,8 @@ ath5k_chan_set(struct ath5k_softc *sc, struct
> > ieee80211_channel *chan) struct ath5k_hw *ah = sc->ah;
> > int ret;
> >
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: %u (%u MHz) -> %u (%u MHz)\n",
> > - __func__, sc->curchan->chan, sc->curchan->freq,
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "%u (%u MHz) -> %u (%u MHz)\n",
> > + sc->curchan->chan, sc->curchan->freq,
> > chan->chan, chan->freq);
> >
> > if (chan->freq != sc->curchan->freq || chan->val != sc->curchan->val) {
> > @@ -1094,7 +1006,7 @@ ath5k_chan_set(struct ath5k_softc *sc, struct
> > ieee80211_channel *chan) ath5k_rx_stop(sc); /* turn off frame recv */
> > ret = ath5k_hw_reset(ah, sc->opmode, chan, true);
> > if (ret) {
> > - printk(KERN_ERR "%s: unable to reset channel %u "
> > + AR5K_ERR(sc, "%s: unable to reset channel %u "
> > "(%u Mhz)\n", __func__, chan->chan, chan->freq);
> > return ret;
> > }
> > @@ -1106,7 +1018,7 @@ ath5k_chan_set(struct ath5k_softc *sc, struct
> > ieee80211_channel *chan) */
> > ret = ath5k_rx_start(sc);
> > if (ret) {
> > - printk(KERN_ERR "%s: unable to restart recv logic\n",
> > + AR5K_ERR(sc, "%s: unable to restart recv logic\n",
> > __func__);
> > return ret;
> > }
> > @@ -1208,7 +1120,7 @@ ath5k_mode_setup(struct ath5k_softc *sc)
> > ath5k_hw_set_opmode(ah);
> >
> > ath5k_hw_set_mcast_filter(ah, 0, 0);
> > - DPRINTF(sc, ATH_DEBUG_MODE, "%s: RX filter 0x%x\n", __func__, rfilt);
> > + AR5K_DBG(sc, ATH_DEBUG_MODE, "RX filter 0x%x\n", rfilt);
> > }
> >
> >
> > @@ -1232,19 +1144,19 @@ ath5k_desc_alloc(struct ath5k_softc *sc, struct
> > pci_dev *pdev) (ATH_TXBUF + ATH_RXBUF + ATH_BCBUF + 1);
> > sc->desc = pci_alloc_consistent(pdev, sc->desc_len, &sc->desc_daddr);
> > if (sc->desc == NULL) {
> > - dev_err(&pdev->dev, "can't allocate descriptors\n");
> > + AR5K_ERR(sc, "can't allocate descriptors\n");
> > ret = -ENOMEM;
> > goto err;
> > }
> > ds = sc->desc;
> > da = sc->desc_daddr;
> > - DPRINTF(sc, ATH_DEBUG_ANY, "%s: DMA map: %p (%zu) -> %llx\n",
> > - __func__, ds, sc->desc_len, (unsigned long long)sc->desc_daddr);
> > + AR5K_DBG(sc, ATH_DEBUG_ANY, "DMA map: %p (%zu) -> %llx\n",
> > + ds, sc->desc_len, (unsigned long long)sc->desc_daddr);
> >
> > bf = kcalloc(1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF,
> > sizeof(struct ath5k_buf), GFP_KERNEL);
> > if (bf == NULL) {
> > - dev_err(&pdev->dev, "can't allocate bufptr\n");
> > + AR5K_ERR(sc, "can't allocate bufptr\n");
> > ret = -ENOMEM;
> > goto err_free;
> > }
> > @@ -1320,7 +1232,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct
> > ath5k_buf *bf) */
> > skb = dev_alloc_skb(sc->rxbufsize + sc->cachelsz - 1);
> > if (unlikely(skb == NULL)) {
> > - printk(KERN_ERR "ath: can't alloc skbuff of size %u\n",
> > + AR5K_ERR(sc, "can't alloc skbuff of size %u\n",
> > sc->rxbufsize + sc->cachelsz - 1);
> > return -ENOMEM;
> > }
> > @@ -1337,7 +1249,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct
> > ath5k_buf *bf) bf->skbaddr = pci_map_single(sc->pdev,
> > skb->data, sc->rxbufsize, PCI_DMA_FROMDEVICE);
> > if (unlikely(pci_dma_mapping_error(bf->skbaddr))) {
> > - printk(KERN_ERR "%s: DMA mapping failed\n", __func__);
> > + AR5K_ERR(sc, "%s: DMA mapping failed\n", __func__);
> > dev_kfree_skb(skb);
> > bf->skb = NULL;
> > return -ENOMEM;
> > @@ -1482,7 +1394,7 @@ ath5k_txq_setup(struct ath5k_softc *sc,
> > return ERR_PTR(qnum);
> > }
> > if (qnum >= ARRAY_SIZE(sc->txqs)) {
> > - printk(KERN_ERR "hw qnum %u out of range, max %tu!\n",
> > + AR5K_ERR(sc, "hw qnum %u out of range, max %tu!\n",
> > qnum, ARRAY_SIZE(sc->txqs));
> > ath5k_hw_release_tx_queue(ah, qnum);
> > return ERR_PTR(-EINVAL);
> > @@ -1535,7 +1447,7 @@ ath5k_beaconq_config(struct ath5k_softc *sc)
> >
> > ret = ath5k_hw_setup_tx_queueprops(ah, sc->bhalq, &qi);
> > if (ret) {
> > - printk(KERN_ERR "%s: unable to update parameters for beacon "
> > + AR5K_ERR(sc, "%s: unable to update parameters for beacon "
> > "hardware queue!\n", __func__);
> > return ret;
> > }
> > @@ -1554,11 +1466,9 @@ ath5k_txq_drainq(struct ath5k_softc *sc, struct
> > ath5k_txq *txq) */
> > spin_lock_bh(&txq->lock);
> > list_for_each_entry_safe(bf, bf0, &txq->q, list) {
> > -#if AR_DEBUG
> > - if (sc->debug & ATH_DEBUG_RESET)
> > - ath5k_printtxbuf(bf, !sc->ah->ah_proc_tx_desc(sc->ah,
> > - bf->desc));
> > -#endif
> > + ath5k_debug_printtxbuf(sc, bf, !sc->ah->ah_proc_tx_desc(sc->ah,
> > + bf->desc));
> > +
> > ath5k_txbuf_free(sc, bf);
> >
> > spin_lock_bh(&sc->txbuflock);
> > @@ -1584,13 +1494,13 @@ ath5k_txq_cleanup(struct ath5k_softc *sc)
> > if (likely(!test_bit(ATH_STAT_INVALID, sc->status))) {
> > /* don't touch the hardware if marked invalid */
> > (void)ath5k_hw_stop_tx_dma(ah, sc->bhalq);
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: beacon queue %x\n", __func__,
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "beacon queue %x\n",
> > ath5k_hw_get_tx_buf(ah, sc->bhalq));
> > for (i = 0; i < ARRAY_SIZE(sc->txqs); i++)
> > if (sc->txqs[i].setup) {
> > ath5k_hw_stop_tx_dma(ah, sc->txqs[i].qnum);
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: txq [%u] %x, "
> > - "link %p\n", __func__,
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "txq [%u] %x, "
> > + "link %p\n",
> > sc->txqs[i].qnum,
> > ath5k_hw_get_tx_buf(ah,
> > sc->txqs[i].qnum),
> > @@ -1636,8 +1546,8 @@ ath5k_rx_start(struct ath5k_softc *sc)
> >
> > sc->rxbufsize = roundup(IEEE80211_MAX_LEN, sc->cachelsz);
> >
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: cachelsz %u rxbufsize %u\n",
> > - __func__, sc->cachelsz, sc->rxbufsize);
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "cachelsz %u rxbufsize %u\n",
> > + sc->cachelsz, sc->rxbufsize);
> >
> > sc->rxlink = NULL;
> >
> > @@ -1674,25 +1584,9 @@ ath5k_rx_stop(struct ath5k_softc *sc)
> > ath5k_hw_set_rx_filter(ah, 0); /* clear recv filter */
> > ath5k_hw_stop_rx_dma(ah); /* disable DMA engine */
> > mdelay(3); /* 3ms is long enough for 1 frame */
> > -#if AR_DEBUG
> > - if (unlikely(sc->debug & (ATH_DEBUG_RESET | ATH_DEBUG_FATAL))) {
> > - struct ath5k_desc *ds;
> > - struct ath5k_buf *bf;
> > - int status;
> > -
> > - printk(KERN_DEBUG "%s: rx queue %x, link %p\n", __func__,
> > - ath5k_hw_get_rx_buf(ah), sc->rxlink);
> > -
> > - spin_lock_bh(&sc->rxbuflock);
> > - list_for_each_entry(bf, &sc->rxbuf, list) {
> > - ds = bf->desc;
> > - status = ah->ah_proc_rx_desc(ah, ds);
> > - if (!status || (sc->debug & ATH_DEBUG_FATAL))
> > - ath5k_printrxbuf(bf, status == 0);
> > - }
> > - spin_unlock_bh(&sc->rxbuflock);
> > - }
> > -#endif
> > +
> > + ath5k_debug_printrxbuffs(sc, ah);
> > +
> > sc->rxlink = NULL; /* just in case */
> > }
> >
> > @@ -1739,8 +1633,7 @@ ath5k_tasklet_rx(unsigned long data)
> > spin_lock(&sc->rxbuflock);
> > do {
> > if (unlikely(list_empty(&sc->rxbuf))) {
> > - if (net_ratelimit())
> > - printk(KERN_WARNING "ath: empty rx buf pool\n");
> > + AR5K_WARN(sc, "empty rx buf pool\n");
> > break;
> > }
> > bf = list_first_entry(&sc->rxbuf, struct ath5k_buf, list);
> > @@ -1759,15 +1652,12 @@ ath5k_tasklet_rx(unsigned long data)
> > if (unlikely(ret == -EINPROGRESS))
> > break;
> > else if (unlikely(ret)) {
> > - if (net_ratelimit())
> > - printk(KERN_ERR "ath: error in processing rx "
> > - "descriptor\n");
> > + AR5K_ERR(sc, "error in processing rx descriptor\n");
> > return;
> > }
> >
> > if (unlikely(ds->ds_rxstat.rs_more)) {
> > - if (net_ratelimit())
> > - printk(KERN_INFO "ath: unsupported jumbo\n");
> > + AR5K_WARN(sc, "unsupported jumbo\n");
> > goto next;
> > }
> >
> > @@ -1836,7 +1726,7 @@ accept:
> > rxs.rate = ds->ds_rxstat.rs_rate;
> > rxs.flag |= ath5k_rx_decrypted(sc, ds, skb);
> >
> > - ath5k_dump_skb(skb, "RX ");
> > + ath5k_debug_dump_skb(sc, skb, "RX ", 0);
> >
> > __ieee80211_rx(sc->hw, skb, &rxs);
> > sc->led_rxrate = ds->ds_rxstat.rs_rate;
> > @@ -1874,8 +1764,8 @@ ath5k_tx_processq(struct ath5k_softc *sc, struct
> > ath5k_txq *txq) if (unlikely(ret == -EINPROGRESS))
> > break;
> > else if (unlikely(ret)) {
> > - printk(KERN_ERR "ath: error %d while processing "
> > - "queue %u\n", ret, txq->qnum);
> > + AR5K_ERR(sc, "error %d while processing queue %u\n",
> > + ret, txq->qnum);
> > break;
> > }
> >
> > @@ -1946,11 +1836,11 @@ ath5k_beacon_setup(struct ath5k_softc *sc, struct
> > ath5k_buf *bf,
> >
> > bf->skbaddr = pci_map_single(sc->pdev, skb->data, skb->len,
> > PCI_DMA_TODEVICE);
> > - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: skb %p [data %p len %u] "
> > - "skbaddr %llx\n", __func__, skb, skb->data, skb->len,
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON, "skb %p [data %p len %u] "
> > + "skbaddr %llx\n", skb, skb->data, skb->len,
> > (unsigned long long)bf->skbaddr);
> > if (pci_dma_mapping_error(bf->skbaddr)) {
> > - printk(KERN_ERR "ath: beacon DMA mapping failed\n");
> > + AR5K_ERR(sc, "beacon DMA mapping failed\n");
> > return -EIO;
> > }
> >
> > @@ -2002,12 +1892,11 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > struct ath5k_buf *bf = sc->bbuf;
> > struct ath5k_hw *ah = sc->ah;
> >
> > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s\n", __func__);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC, "in beacon_send\n");
> >
> > if (unlikely(bf->skb == NULL || sc->opmode == IEEE80211_IF_TYPE_STA ||
> > sc->opmode == IEEE80211_IF_TYPE_MNTR)) {
> > - printk(KERN_WARNING "ath: bf=%p bf_skb=%p\n", bf,
> > - bf ? bf->skb : NULL);
> > + AR5K_WARN(sc, "bf=%p bf_skb=%p\n", bf, bf ? bf->skb : NULL);
> > return;
> > }
> > /*
> > @@ -2019,21 +1908,20 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > */
> > if (unlikely(ath5k_hw_num_tx_pending(ah, sc->bhalq) != 0)) {
> > sc->bmisscount++;
> > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC,
> > - "%s: missed %u consecutive beacons\n",
> > - __func__, sc->bmisscount);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC,
> > + "missed %u consecutive beacons\n", sc->bmisscount);
> > if (sc->bmisscount > 3) { /* NB: 3 is a guess */
> > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC,
> > - "%s: stuck beacon time (%u missed)\n",
> > - __func__, sc->bmisscount);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC,
> > + "stuck beacon time (%u missed)\n",
> > + sc->bmisscount);
> > tasklet_schedule(&sc->restq);
> > }
> > return;
> > }
> > if (unlikely(sc->bmisscount != 0)) {
> > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC,
> > - "%s: resume beacon xmit after %u misses\n",
> > - __func__, sc->bmisscount);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC,
> > + "resume beacon xmit after %u misses\n",
> > + sc->bmisscount);
> > sc->bmisscount = 0;
> > }
> >
> > @@ -2043,8 +1931,7 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > * are still pending on the queue.
> > */
> > if (unlikely(ath5k_hw_stop_tx_dma(ah, sc->bhalq))) {
> > - printk(KERN_WARNING "ath: beacon queue %u didn't stop?\n",
> > - sc->bhalq);
> > + AR5K_WARN(sc, "beacon queue %u didn't stop?\n", sc->bhalq);
> > /* NB: hw still stops DMA, so proceed */
> > }
> > pci_dma_sync_single_for_cpu(sc->pdev, bf->skbaddr, bf->skb->len,
> > @@ -2052,8 +1939,8 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> >
> > ath5k_hw_put_tx_buf(ah, sc->bhalq, bf->daddr);
> > ath5k_hw_tx_start(ah, sc->bhalq);
> > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: TXDP[%u] = %llx (%p)\n",
> > - __func__, sc->bhalq, (unsigned long long)bf->daddr, bf->desc);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC, "TXDP[%u] = %llx (%p)\n",
> > + sc->bhalq, (unsigned long long)bf->daddr, bf->desc);
> >
> > sc->bsent++;
> > }
> > @@ -2089,8 +1976,8 @@ ath5k_beacon_config(struct ath5k_softc *sc)
> > tsf = ath5k_hw_get_tsf64(ah);
> > tsftu = TSF_TO_TU((u32)(tsf >> 32), (u32)tsf);
> >
> > - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: intval %u hw tsftu %u\n", __func__,
> > - intval, tsftu);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON, "intval %u hw tsftu %u\n",
> > + intval, tsftu);
> >
> > if (sc->opmode == IEEE80211_IF_TYPE_STA ||
> > (sc->opmode == IEEE80211_IF_TYPE_IBSS &&
> > @@ -2109,8 +1996,8 @@ ath5k_beacon_config(struct ath5k_softc *sc)
> > */
> > nexttbtt = tsftu + 2 * intval;
> >
> > - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u "
> > - "intval %u\n", __func__, nexttbtt, intval);
> > + AR5K_DBG(sc, ATH_DEBUG_BEACON, "nexttbtt %u "
> > + "intval %u\n", nexttbtt, intval);
> >
> > /*
> > * In IBSS mode enable the beacon timers but only
> > @@ -2166,7 +2053,7 @@ ath5k_init(struct ath5k_softc *sc)
> >
> > mutex_lock(&sc->lock);
> >
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: mode %d\n", __func__, sc->opmode);
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "mode %d\n", sc->opmode);
> >
> > /*
> > * Stop anything previously setup. This is safe
> > @@ -2184,7 +2071,7 @@ ath5k_init(struct ath5k_softc *sc)
> > sc->curchan = sc->hw->conf.chan;
> > ret = ath5k_hw_reset(sc->ah, sc->opmode, sc->curchan, false);
> > if (ret) {
> > - printk(KERN_ERR "unable to reset hardware: %d\n", ret);
> > + AR5K_ERR(sc, "unable to reset hardware: %d\n", ret);
> > goto done;
> > }
> > /*
> > @@ -2228,7 +2115,7 @@ ath5k_stop_locked(struct ath5k_softc *sc)
> > {
> > struct ath5k_hw *ah = sc->ah;
> >
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: invalid %u\n", __func__,
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "invalid %u\n",
> > test_bit(ATH_STAT_INVALID, sc->status));
> >
> > /*
> > @@ -2295,11 +2182,11 @@ ath5k_stop_hw(struct ath5k_softc *sc)
> > * don't put newer MAC revisions > 7.8 to sleep because
> > * of the above mentioned problems
> > */
> > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: mac version > 7.8, "
> > - "not putting device to sleep\n", __func__);
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "mac version > 7.8, "
> > + "not putting device to sleep\n");
> > } else {
> > - DPRINTF(sc, ATH_DEBUG_RESET,
> > - "%s: putting device to full sleep\n", __func__);
> > + AR5K_DBG(sc, ATH_DEBUG_RESET,
> > + "putting device to full sleep\n");
> > ath5k_hw_set_power(sc->ah, AR5K_PM_FULL_SLEEP, true, 0);
> > }
> > }
> > @@ -2331,7 +2218,7 @@ ath5k_intr(int irq, void *dev_id)
> > * value to insure we only process bits we requested.
> > */
> > ath5k_hw_get_isr(ah, &status); /* NB: clears IRQ too */
> > - DPRINTF(sc, ATH_DEBUG_INTR, "%s: status 0x%x/0x%x\n", __func__,
> > + AR5K_DBG(sc, ATH_DEBUG_INTR, "status 0x%x/0x%x\n",
> > status, sc->imask);
> > status &= sc->imask; /* discard unasked for bits */
> > if (unlikely(status & AR5K_INT_FATAL)) {
> > @@ -2376,9 +2263,8 @@ ath5k_intr(int irq, void *dev_id)
> > }
> > } while (ath5k_hw_is_intr_pending(ah) && counter-- > 0);
> >
> > - if (unlikely(!counter && net_ratelimit()))
> > - printk(KERN_WARNING "ath: too many interrupts, giving up for "
> > - "now\n");
> > + if (unlikely(!counter))
> > + AR5K_WARN(sc, "too many interrupts, giving up for now\n");
> >
> > return IRQ_HANDLED;
> > }
> > @@ -2407,7 +2293,7 @@ ath5k_calibrate(unsigned long data)
> > struct ath5k_softc *sc = (void *)data;
> > struct ath5k_hw *ah = sc->ah;
> >
> > - DPRINTF(sc, ATH_DEBUG_CALIBRATE, "ath: channel %u/%x\n",
> > + AR5K_DBG(sc, ATH_DEBUG_CALIBRATE, "channel %u/%x\n",
> > sc->curchan->chan, sc->curchan->val);
> >
> > if (ath5k_hw_get_rf_gain(ah) == AR5K_RFGAIN_NEED_CHANGE) {
> > @@ -2415,11 +2301,11 @@ ath5k_calibrate(unsigned long data)
> > * Rfgain is out of bounds, reset the chip
> > * to load new gain values.
> > */
> > - DPRINTF(sc, ATH_DEBUG_RESET, "calibration, resetting\n");
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "calibration, resetting\n");
> > ath5k_reset(sc->hw);
> > }
> > if (ath5k_hw_phy_calibrate(ah, sc->curchan))
> > - printk(KERN_ERR "ath: calibration of channel %u failed\n",
> > + AR5K_ERR(sc, "calibration of channel %u failed\n",
> > sc->curchan->chan);
> >
> > mod_timer(&sc->calib_tim, round_jiffies(jiffies +
> > @@ -2453,7 +2339,7 @@ static void
> > ath5k_led_blink(struct ath5k_softc *sc, unsigned int on,
> > unsigned int off)
> > {
> > - DPRINTF(sc, ATH_DEBUG_LED, "%s: on %u off %u\n", __func__, on, off);
> > + AR5K_DBG(sc, ATH_DEBUG_LED, "on %u off %u\n", on, off);
> > ath5k_hw_set_gpio(sc->ah, sc->led_pin, sc->led_on);
> > __set_bit(ATH_STAT_LEDBLINKING, sc->status);
> > __clear_bit(ATH_STAT_LEDENDBLINK, sc->status);
> > @@ -2497,10 +2383,10 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff
> > *skb, int hdrlen;
> > int pad;
> >
> > - ath5k_dump_skb(skb, "TX ");
> > + ath5k_debug_dump_skb(sc, skb, "TX ", 1);
> >
> > if (sc->opmode == IEEE80211_IF_TYPE_MNTR)
> > - DPRINTF(sc, ATH_DEBUG_XMIT, "tx in monitor (scan?)\n");
> > + AR5K_DBG(sc, ATH_DEBUG_XMIT, "tx in monitor (scan?)\n");
> >
> > /*
> > * the hardware expects the header padded to 4 byte boundaries
> > @@ -2510,10 +2396,9 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff
> > *skb, if (hdrlen & 3) {
> > pad = hdrlen % 4;
> > if (skb_headroom(skb) < pad) {
> > - if (net_ratelimit())
> > - printk(KERN_ERR "ath: tx hdrlen not %%4: %d "
> > - "not enough headroom to pad %d\n",
> > - hdrlen, pad);
> > + AR5K_ERR(sc, "tx hdrlen not %%4: %d "
> > + "not enough headroom to pad %d\n",
> > + hdrlen, pad);
> > return -1;
> > }
> > skb_push(skb, pad);
> > @@ -2524,9 +2409,8 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff
> > *skb,
> >
> > spin_lock_irqsave(&sc->txbuflock, flags);
> > if (list_empty(&sc->txbuf)) {
> > - if (net_ratelimit())
> > - printk(KERN_ERR "ath: no further txbuf available, "
> > - "dropping packet\n");
> > + AR5K_ERR(sc, "no further txbuf available, "
> > + "dropping packet\n");
> > spin_unlock_irqrestore(&sc->txbuflock, flags);
> > ieee80211_stop_queue(hw, ctl->queue);
> > return -1;
> > @@ -2560,7 +2444,7 @@ ath5k_reset(struct ieee80211_hw *hw)
> > struct ath5k_hw *ah = sc->ah;
> > int ret;
> >
> > - DPRINTF(sc, ATH_DEBUG_RESET, "resetting\n");
> > + AR5K_DBG(sc, ATH_DEBUG_RESET, "resetting\n");
> > /*
> > * Convert to a hw channel description with the flags
> > * constrained to reflect the current operating mode.
> > @@ -2573,14 +2457,14 @@ ath5k_reset(struct ieee80211_hw *hw)
> >
> > ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true);
> > if (unlikely(ret)) {
> > - printk(KERN_ERR "ath: can't reset hardware (%d)\n", ret);
> > + AR5K_ERR(sc, "can't reset hardware (%d)\n", ret);
> > goto err;
> > }
> > ath5k_update_txpow(sc);
> >
> > ret = ath5k_rx_start(sc);
> > if (unlikely(ret)) {
> > - printk(KERN_ERR "ath: can't start recv logic\n");
> > + AR5K_ERR(sc, "can't start recv logic\n");
> > goto err;
> > }
> > /*
> > @@ -2845,7 +2729,7 @@ ath5k_set_key(struct ieee80211_hw *hw, enum
> > set_key_cmd cmd, case SET_KEY:
> > ret = ath5k_hw_set_key(sc->ah, key->keyidx, key, addr);
> > if (ret) {
> > - printk(KERN_ERR "ath: can't set the key\n");
> > + AR5K_ERR(sc, "can't set the key\n");
> > goto unlock;
> > }
> > __set_bit(key->keyidx, sc->keymap);
> > @@ -2910,7 +2794,7 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct
> > sk_buff *skb, struct ath5k_softc *sc = hw->priv;
> > int ret;
> >
> > - ath5k_dump_skb(skb, "BC ");
> > + ath5k_debug_dump_skb(sc, skb, "BC ", 1);
> >
> > mutex_lock(&sc->lock);
> >
> > diff --git a/drivers/net/wireless/ath5k/base.h
> > b/drivers/net/wireless/ath5k/base.h index c13e54b..94e71ca 100644
> > --- a/drivers/net/wireless/ath5k/base.h
> > +++ b/drivers/net/wireless/ath5k/base.h
> > @@ -100,7 +100,9 @@ struct ath5k_softc {
> > enum ieee80211_if_types opmode;
> > struct ath5k_hw *ah; /* Atheros HW */
> >
> > - int debug;
> > + unsigned int debug;
> > + struct dentry *debugfs_phydir;
> > + struct dentry *debugfs_debug;
> >
> > struct ath5k_buf *bufptr; /* allocated buffer ptr */
> > struct ath5k_desc *desc; /* TX/RX descriptors */
> > diff --git a/drivers/net/wireless/ath5k/debug.c
> > b/drivers/net/wireless/ath5k/debug.c new file mode 100644
> > index 0000000..ee9ec69
> > --- /dev/null
> > +++ b/drivers/net/wireless/ath5k/debug.c
> > @@ -0,0 +1,256 @@
> > +/*
> > + * Copyright (c) 2004-2007 Reyk Floeter <[email protected]>
> > + * Copyright (c) 2006-2007 Nick Kossifidis <[email protected]>

You're adding unique code (debugfs stuff), you should add your
Copyright entry here. But note that this will look very different if
this is GPL'd. Please refer to SFLC's guidelines if you are to GPL
these files (probably going to be needed).

> > + *
> > + * Permission to use, copy, modify, and distribute this software for any
> > + * purpose with or without fee is hereby granted, provided that the above
> > + * copyright notice and this permission notice appear in all copies.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
> > WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
> > WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
> > BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
> > OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
> > WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
> > ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
> > SOFTWARE. + */
> > +
> > +#include "debug.h"
> > +
> > +#if AR5K_DEBUG
> > +
> > +#include "reg.h"
> > +
> > +static unsigned int ath5k_debug;
> > +
> > +module_param_named(debug, ath5k_debug, uint, 0);
> > +
> > +static struct dentry *ath5k_global_debugfs;
> > +
> > +void
> > +ath5k_debug_init(void)
> > +{
> > + ath5k_global_debugfs = debugfs_create_dir("ath5k", NULL);
> > +}
> > +
> > +void
> > +ath5k_debug_init_device(struct ath5k_softc *sc)
> > +{
> > + sc->debug = ath5k_debug;
> > + sc->debugfs_phydir = debugfs_create_dir(wiphy_name(sc->hw->wiphy),
> > + ath5k_global_debugfs);
> > + sc->debugfs_debug = debugfs_create_u32("debug",
> > + 0666, sc->debugfs_phydir, &sc->debug);
> > +}

Very nice!

> > +void
> > +ath5k_debug_finish(void)
> > +{
> > + debugfs_remove(ath5k_global_debugfs);
> > +}
> > +
> > +void
> > +ath5k_debug_finish_device(struct ath5k_softc *sc)
> > +{
> > + debugfs_remove(sc->debugfs_debug);
> > + debugfs_remove(sc->debugfs_phydir);
> > +}
> > +
> > +void
> > +ath5k_debug_dump_modes(struct ath5k_softc *sc, struct ieee80211_hw_mode
> > *modes) +{
> > + unsigned int m, i;
> > +
> > + if (likely(!(sc->debug & ATH_DEBUG_DUMPMODES)))
> > + return;
> > +
> > + for (m = 0; m < NUM_DRIVER_MODES; m++) {
> > + printk(KERN_DEBUG "Mode %u: channels %d, rates %d\n", m,
> > + modes[m].num_channels, modes[m].num_rates);
> > + printk(KERN_DEBUG " channels:\n");

How about dev_dbg instead?

> > + for (i = 0; i < modes[m].num_channels; i++)
> > + printk(KERN_DEBUG " %3d %d %.4x %.4x\n",
> > + modes[m].channels[i].chan,
> > + modes[m].channels[i].freq,
> > + modes[m].channels[i].val,
> > + modes[m].channels[i].flag);
> > + printk(KERN_DEBUG " rates:\n");
> > + for (i = 0; i < modes[m].num_rates; i++)
> > + printk(KERN_DEBUG " %4d %.4x %.4x %.4x\n",
> > + modes[m].rates[i].rate,
> > + modes[m].rates[i].val,
> > + modes[m].rates[i].flags,
> > + modes[m].rates[i].val2);
> > + }
> > +}
> > +
> > +void
> > +ath5k_debug_dump_hwstate(struct ath5k_hw *ah)
> > +{
> > + if (!(ah->ah_sc->debug & ATH_DEBUG_DUMPSTATE))
> > + return;
> > +
> > +#define AR5K_PRINT_REGISTER(_x) \
> > + AR5K_PRINTF("(%s: %08x)\n", #_x, ath5k_hw_reg_read(ah, AR5K_##_x));
> > +
> > + AR5K_PRINTF("MAC registers:\n");
> > + AR5K_PRINT_REGISTER(CR);
> > + AR5K_PRINT_REGISTER(CFG);
> > + AR5K_PRINT_REGISTER(IER);
> > + AR5K_PRINT_REGISTER(TXCFG);
> > + AR5K_PRINT_REGISTER(RXCFG);
> > + AR5K_PRINT_REGISTER(MIBC);
> > + AR5K_PRINT_REGISTER(TOPS);
> > + AR5K_PRINT_REGISTER(RXNOFRM);
> > + AR5K_PRINT_REGISTER(RPGTO);
> > + AR5K_PRINT_REGISTER(RFCNT);
> > + AR5K_PRINT_REGISTER(MISC);
> > + AR5K_PRINT_REGISTER(PISR);
> > + AR5K_PRINT_REGISTER(SISR0);
> > + AR5K_PRINT_REGISTER(SISR1);
> > + AR5K_PRINT_REGISTER(SISR3);
> > + AR5K_PRINT_REGISTER(SISR4);
> > + AR5K_PRINT_REGISTER(DCM_ADDR);
> > + AR5K_PRINT_REGISTER(DCM_DATA);
> > + AR5K_PRINT_REGISTER(DCCFG);
> > + AR5K_PRINT_REGISTER(CCFG);
> > + AR5K_PRINT_REGISTER(CCFG_CUP);
> > + AR5K_PRINT_REGISTER(CPC0);
> > + AR5K_PRINT_REGISTER(CPC1);
> > + AR5K_PRINT_REGISTER(CPC2);
> > + AR5K_PRINT_REGISTER(CPCORN);
> > + AR5K_PRINT_REGISTER(QCU_TXE);
> > + AR5K_PRINT_REGISTER(QCU_TXD);
> > + AR5K_PRINT_REGISTER(DCU_GBL_IFS_SIFS);
> > + AR5K_PRINT_REGISTER(DCU_GBL_IFS_SLOT);
> > + AR5K_PRINT_REGISTER(DCU_FP);
> > + AR5K_PRINT_REGISTER(DCU_TXP);
> > + AR5K_PRINT_REGISTER(DCU_TX_FILTER);
> > + AR5K_PRINT_REGISTER(INTPEND);
> > + AR5K_PRINT_REGISTER(PCICFG);
> > + AR5K_PRINT_REGISTER(GPIOCR);
> > + AR5K_PRINT_REGISTER(GPIODO);
> > + AR5K_PRINT_REGISTER(SREV);
> > + AR5K_PRINT_REGISTER(EEPROM_BASE);
> > + AR5K_PRINT_REGISTER(EEPROM_DATA);
> > + AR5K_PRINT_REGISTER(EEPROM_CMD);
> > + AR5K_PRINT_REGISTER(EEPROM_CFG);
> > + AR5K_PRINT_REGISTER(PCU_MIN);
> > + AR5K_PRINT_REGISTER(STA_ID0);
> > + AR5K_PRINT_REGISTER(STA_ID1);
> > + AR5K_PRINT_REGISTER(BSS_ID0);
> > + AR5K_PRINT_REGISTER(SLOT_TIME);
> > + AR5K_PRINT_REGISTER(TIME_OUT);
> > + AR5K_PRINT_REGISTER(RSSI_THR);
> > + AR5K_PRINT_REGISTER(BEACON);
> > + AR5K_PRINT_REGISTER(CFP_PERIOD);
> > + AR5K_PRINT_REGISTER(TIMER0);
> > + AR5K_PRINT_REGISTER(TIMER2);
> > + AR5K_PRINT_REGISTER(TIMER3);
> > + AR5K_PRINT_REGISTER(CFP_DUR);
> > + AR5K_PRINT_REGISTER(MCAST_FILTER0);
> > + AR5K_PRINT_REGISTER(MCAST_FILTER1);
> > + AR5K_PRINT_REGISTER(DIAG_SW);
> > + AR5K_PRINT_REGISTER(TSF_U32);
> > + AR5K_PRINT_REGISTER(ADDAC_TEST);
> > + AR5K_PRINT_REGISTER(DEFAULT_ANTENNA);
> > + AR5K_PRINT_REGISTER(LAST_TSTP);
> > + AR5K_PRINT_REGISTER(NAV);
> > + AR5K_PRINT_REGISTER(RTS_OK);
> > + AR5K_PRINT_REGISTER(ACK_FAIL);
> > + AR5K_PRINT_REGISTER(FCS_FAIL);
> > + AR5K_PRINT_REGISTER(BEACON_CNT);
> > + AR5K_PRINT_REGISTER(TSF_PARM);
> > + AR5K_PRINTF("\n");
> > +
> > + AR5K_PRINTF("PHY registers:\n");
> > + AR5K_PRINT_REGISTER(PHY_TURBO);
> > + AR5K_PRINT_REGISTER(PHY_AGC);
> > + AR5K_PRINT_REGISTER(PHY_TIMING_3);
> > + AR5K_PRINT_REGISTER(PHY_CHIP_ID);
> > + AR5K_PRINT_REGISTER(PHY_AGCCTL);
> > + AR5K_PRINT_REGISTER(PHY_NF);
> > + AR5K_PRINT_REGISTER(PHY_SCR);
> > + AR5K_PRINT_REGISTER(PHY_SLMT);
> > + AR5K_PRINT_REGISTER(PHY_SCAL);
> > + AR5K_PRINT_REGISTER(PHY_RX_DELAY);
> > + AR5K_PRINT_REGISTER(PHY_IQ);
> > + AR5K_PRINT_REGISTER(PHY_PAPD_PROBE);
> > + AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE1);
> > + AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE2);
> > + AR5K_PRINT_REGISTER(PHY_RADAR);
> > + AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_0);
> > + AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_1);
> > + AR5K_PRINTF("\n");
> > +}
> > +
> > +static inline void
> > +ath5k_debug_printrxbuf(struct ath5k_buf *bf, int done)
> > +{
> > + struct ath5k_desc *ds = bf->desc;
> > +
> > + printk(KERN_DEBUG "R (%p %llx) %08x %08x %08x %08x %08x %08x %c\n",
> > + ds, (unsigned long long)bf->daddr,
> > + ds->ds_link, ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > + ds->ds_hw[0], ds->ds_hw[1],
> > + !done ? ' ' : (ds->ds_rxstat.rs_status == 0) ? '*' : '!');
> > +}
> > +
> > +void
> > +ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah)
> > +{
> > + struct ath5k_desc *ds;
> > + struct ath5k_buf *bf;
> > + int status;
> > +
> > + if (likely(!(sc->debug & (ATH_DEBUG_RESET | ATH_DEBUG_FATAL))))
> > + return;
> > +
> > + printk(KERN_DEBUG "rx queue %x, link %p\n",
> > + ath5k_hw_get_rx_buf(ah), sc->rxlink);
> > +
> > + spin_lock_bh(&sc->rxbuflock);
> > + list_for_each_entry(bf, &sc->rxbuf, list) {
> > + ds = bf->desc;
> > + status = ah->ah_proc_rx_desc(ah, ds);
> > + if (!status || (sc->debug & ATH_DEBUG_FATAL))
> > + ath5k_debug_printrxbuf(bf, status == 0);
> > + }
> > + spin_unlock_bh(&sc->rxbuflock);
> > +}
> > +
> > +void
> > +ath5k_debug_dump_skb(struct ath5k_softc *sc,
> > + struct sk_buff *skb, const char *prefix, int tx)
> > +{
> > + char buf[16];
> > +
> > + if (likely(!((tx && (sc->debug & ATH_DEBUG_DUMP_TX)) ||
> > + (!tx && (sc->debug & ATH_DEBUG_DUMP_RX)))))
> > + return;
> > +
> > + snprintf(buf, sizeof(buf), "%s %s", wiphy_name(sc->hw->wiphy), prefix);
> > +
> > + print_hex_dump_bytes(buf, DUMP_PREFIX_NONE, skb->data,
> > + min(200U, skb->len));
> > +
> > + printk(KERN_DEBUG "\n");
> > +}
> > +
> > +void
> > +ath5k_debug_printtxbuf(struct ath5k_softc *sc,
> > + struct ath5k_buf *bf, int done)
> > +{
> > + struct ath5k_desc *ds = bf->desc;
> > +
> > + if (likely(!(sc->debug & ATH_DEBUG_RESET)))
> > + return;
> > +
> > + printk(KERN_DEBUG "T (%p %llx) %08x %08x %08x %08x %08x %08x %08x "
> > + "%08x %c\n", ds, (unsigned long long)bf->daddr, ds->ds_link,
> > + ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > + ds->ds_hw[0], ds->ds_hw[1], ds->ds_hw[2], ds->ds_hw[3],
> > + !done ? ' ' : (ds->ds_txstat.ts_status == 0) ? '*' : '!');
> > +}
> > +
> > +#endif /* if AR5K_DEBUG */
> > diff --git a/drivers/net/wireless/ath5k/debug.h
> > b/drivers/net/wireless/ath5k/debug.h new file mode 100644
> > index 0000000..d166395
> > --- /dev/null
> > +++ b/drivers/net/wireless/ath5k/debug.h
> > @@ -0,0 +1,123 @@
> > +/*
> > + * Copyright (c) 2004-2007 Reyk Floeter <[email protected]>
> > + * Copyright (c) 2006-2007 Nick Kossifidis <[email protected]>
> > + *
> > + * Permission to use, copy, modify, and distribute this software for any
> > + * purpose with or without fee is hereby granted, provided that the above
> > + * copyright notice and this permission notice appear in all copies.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
> > WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
> > WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
> > BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
> > OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
> > WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
> > ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
> > SOFTWARE. + */
> > +
> > +#ifndef _ATH5K_DEBUG_H
> > +#define _ATH5K_DEBUG_H
> > +
> > +#include "base.h"
> > +
> > +#if AR5K_DEBUG
> > +
> > +enum {
> > + ATH_DEBUG_RESET = 0x00000001, /* reset processing */
> > + ATH_DEBUG_INTR = 0x00000002, /* ISR */
> > + ATH_DEBUG_MODE = 0x00000004, /* mode init/setup */
> > + ATH_DEBUG_XMIT = 0x00000008, /* basic xmit operation */
> > + ATH_DEBUG_BEACON = 0x00000010, /* beacon handling */
> > + ATH_DEBUG_BEACON_PROC = 0x00000020, /* beacon ISR proc */
> > + ATH_DEBUG_CALIBRATE = 0x00000100, /* periodic calibration */
> > + ATH_DEBUG_TXPOWER = 0x00000200, /* transmit power */
> > + ATH_DEBUG_LED = 0x00000400, /* led management */
> > + ATH_DEBUG_DUMP_RX = 0x00001000, /* print received skb content */
> > + ATH_DEBUG_DUMP_TX = 0x00002000, /* print transmit skb content */
> > + ATH_DEBUG_DUMPSTATE = 0x00004000, /* dump register state */
> > + ATH_DEBUG_DUMPMODES = 0x00008000, /* dump modes */
> > + ATH_DEBUG_TRACE = 0x00010000, /* trace function calls */
> > + ATH_DEBUG_FATAL = 0x80000000, /* fatal errors */
> > + ATH_DEBUG_ANY = 0xffffffff
> > +};

While you're at it can you move these to use kernel-doc? You'll have
to name the enum, perhaps ath5k_debug ?

> > +#define AR5K_TRACE(_sc) do { \
> > + if (unlikely((_sc)->debug & ATH_DEBUG_TRACE)) \
> > + printk(KERN_DEBUG "ath5k trace %s:%d\n", __func__, __LINE__); \
> > + } while (0)
> > +
> > +#define AR5K_DBG(_sc, _m, _fmt, ...) do { \
> > + if (unlikely((_sc)->debug & (_m) && net_ratelimit())) \
> > + AR5K_PRINTK(_sc, KERN_DEBUG, "(%s:%d): " _fmt, \
> > + __func__, __LINE__, ##__VA_ARGS__); \
> > + } while (0)

Very nice :)

> > +void
> > +ath5k_debug_init(void);
> > +
> > +void
> > +ath5k_debug_init_device(struct ath5k_softc *sc);
> > +
> > +void
> > +ath5k_debug_finish(void);
> > +
> > +void
> > +ath5k_debug_finish_device(struct ath5k_softc *sc);
> > +
> > +void
> > +ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah);
> > +
> > +void
> > +ath5k_debug_dump_modes(struct ath5k_softc *sc,
> > + struct ieee80211_hw_mode *modes);
> > +
> > +void
> > +ath5k_debug_dump_hwstate(struct ath5k_hw *ah);
> > +
> > +void
> > +ath5k_debug_dump_skb(struct ath5k_softc *sc,
> > + struct sk_buff *skb, const char *prefix, int tx);
> > +
> > +void
> > +ath5k_debug_printtxbuf(struct ath5k_softc *sc,
> > + struct ath5k_buf *bf, int done);

Do we really need a debug.h?

> > +#else /* no debugging */
> > +
> > +#define AR5K_TRACE(_sc)
> > +
> > +#define AR5K_DBG(...) do { } while (0)
> > +
> > +static inline void
> > +ath5k_debug_init(void) {}
> > +
> > +static inline void
> > +ath5k_debug_init_device(struct ath5k_softc *sc) {}
> > +
> > +static inline void
> > +ath5k_debug_finish(void) {}
> > +
> > +static inline void
> > +ath5k_debug_finish_device(struct ath5k_softc *sc) {}
> > +
> > +static inline void
> > +ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah) {}
> > +
> > +static inline void
> > +ath5k_debug_dump_modes(struct ath5k_softc *sc,
> > + struct ieee80211_hw_mode *modes) {}
> > +
> > +static inline void
> > +ath5k_debug_dump_hwstate(struct ath5k_hw *ah) {}
> > +
> > +static inline void
> > +ath5k_debug_dump_skb(struct ath5k_softc *sc,
> > + struct sk_buff *skb, const char *prefix, int tx) {}
> > +
> > +static inline void
> > +ath5k_debug_printtxbuf(struct ath5k_softc *sc,
> > + struct ath5k_buf *bf, int done) {}
> > +
> > +#endif

Oh I guess so, nevermind. Nice.

> > +
> > +#endif
> > diff --git a/drivers/net/wireless/ath5k/hw.c
> > b/drivers/net/wireless/ath5k/hw.c index 4aca069..484d702 100644
> > --- a/drivers/net/wireless/ath5k/hw.c
> > +++ b/drivers/net/wireless/ath5k/hw.c
> > @@ -29,6 +29,7 @@
> >
> > #include "reg.h"
> > #include "base.h"
> > +#include "debug.h"
> >
> > /*Rate tables*/
> > static const struct ath5k_rate_table ath5k_rt_11a = AR5K_RATES_11A;
> > @@ -128,7 +129,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > *sc, u8 mac_version) ah = kzalloc(sizeof(struct ath5k_hw), GFP_KERNEL);
> > if (ah == NULL) {
> > ret = -ENOMEM;
> > - AR5K_PRINT("out of memory\n");
> > + AR5K_ERR(sc, "out of memory\n");
> > goto err;
> > }
> >
> > @@ -203,14 +204,14 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > *sc, u8 mac_version)
> >
> > /* Return on unsuported chips (unsupported eeprom etc) */
> > if(srev >= AR5K_SREV_VER_AR5416){
> > - printk(KERN_ERR "ath5k: Device not yet supported.\n");
> > + AR5K_ERR(sc, "Device not yet supported.\n");
> > ret = -ENODEV;
> > goto err_free;
> > }
> >
> > /* Warn for partially supported chips (unsupported phy etc) */
> > if(srev >= AR5K_SREV_VER_AR2424){
> > - printk(KERN_DEBUG "ath5k: Device partially supported.\n");
> > + AR5K_WARN(sc, "Device only partially supported.\n");
> > }
> >
> > /* Identify single chip solutions */
> > @@ -238,9 +239,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > *sc, u8 mac_version)
> >
> > ah->ah_phy = AR5K_PHY(0);
> >
> > -#ifdef AR5K_DEBUG
> > - ath5k_hw_dump_state(ah);
> > -#endif
> > + ath5k_debug_dump_hwstate(ah);
> >
> > /*
> > * Get card capabilities, values, ...
> > @@ -248,14 +247,14 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > *sc, u8 mac_version)
> >
> > ret = ath5k_eeprom_init(ah);
> > if (ret) {
> > - AR5K_PRINT("unable to init EEPROM\n");
> > + AR5K_ERR(sc, "unable to init EEPROM\n");
> > goto err_free;
> > }
> >
> > /* Get misc capabilities */
> > ret = ath5k_hw_get_capabilities(ah);
> > if (ret) {
> > - AR5K_PRINTF("unable to get device capabilities: 0x%04x\n",
> > + AR5K_ERR(sc, "unable to get device capabilities: 0x%04x\n",
> > sc->pdev->device);
> > goto err_free;
> > }
> > @@ -263,7 +262,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > *sc, u8 mac_version) /* Get MAC address */
> > ret = ath5k_eeprom_read_mac(ah, mac);
> > if (ret) {
> > - AR5K_PRINTF("unable to read address from EEPROM: 0x%04x\n",
> > + AR5K_ERR(sc, "unable to read address from EEPROM: 0x%04x\n",
> > sc->pdev->device);
> > goto err_free;
> > }
> > @@ -295,7 +294,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial) mode = 0;
> > clock = 0;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_version != AR5K_AR5210) {
> > /*
> > @@ -328,7 +327,8 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial) else
> > mode |= AR5K_PHY_MODE_MOD_DYN;
> > } else {
> > - AR5K_PRINT("invalid radio modulation mode\n");
> > + AR5K_ERR(ah->ah_sc,
> > + "invalid radio modulation mode\n");
> > return -EINVAL;
> > }
> > } else if (flags & CHANNEL_5GHZ) {
> > @@ -338,11 +338,12 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > int flags, bool initial) if (flags & CHANNEL_OFDM)
> > mode |= AR5K_PHY_MODE_MOD_OFDM;
> > else {
> > - AR5K_PRINT("invalid radio modulation mode\n");
> > + AR5K_ERR(ah->ah_sc,
> > + "invalid radio modulation mode\n");
> > return -EINVAL;
> > }
> > } else {
> > - AR5K_PRINT("invalid radio frequency mode\n");
> > + AR5K_ERR(ah->ah_sc, "invalid radio frequency mode\n");
> > return -EINVAL;
> > }
> >
> > @@ -352,7 +353,8 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial) if (initial == true) {
> > /* ...reset hardware */
> > if (ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCI)) {
> > - AR5K_PRINT("failed to reset the PCI chipset\n");
> > + AR5K_ERR(ah->ah_sc,
> > + "failed to reset the PCI chipset\n");
> > return -EIO;
> > }
> >
> > @@ -362,7 +364,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial) /* ...wakeup */
> > ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
> > if (ret) {
> > - AR5K_PRINT("failed to resume the MAC Chip\n");
> > + AR5K_ERR(ah->ah_sc, "failed to resume the MAC Chip\n");
> > return ret;
> > }
> >
> > @@ -373,7 +375,8 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial)
> >
> > /* ...reset chipset */
> > if (ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_CHIP)) {
> > - AR5K_PRINT("failed to reset the AR5210 chipset\n");
> > + AR5K_ERR(ah->ah_sc,
> > + "failed to reset the AR5210 chipset\n");
> > return -EIO;
> > }
> >
> > @@ -383,7 +386,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial) /* ...reset chipset and PCI device */
> > if (ah->ah_single_chip == false && ath5k_hw_nic_reset(ah,
> > AR5K_RESET_CTL_CHIP | AR5K_RESET_CTL_PCI)) {
> > - AR5K_PRINT("failed to reset the MAC Chip + PCI\n");
> > + AR5K_ERR(ah->ah_sc, "failed to reset the MAC Chip + PCI\n");
> > return -EIO;
> > }
> >
> > @@ -393,13 +396,13 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > int flags, bool initial) /* ...wakeup */
> > ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
> > if (ret) {
> > - AR5K_PRINT("failed to resume the MAC Chip\n");
> > + AR5K_ERR(ah->ah_sc, "failed to resume the MAC Chip\n");
> > return ret;
> > }
> >
> > /* ...final warm reset */
> > if (ath5k_hw_nic_reset(ah, 0)) {
> > - AR5K_PRINT("failed to warm reset the MAC Chip\n");
> > + AR5K_ERR(ah->ah_sc, "failed to warm reset the MAC Chip\n");
> > return -EIO;
> > }
> >
> > @@ -421,7 +424,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int
> > flags, bool initial) const struct ath5k_rate_table
> > *ath5k_hw_get_rate_table(struct ath5k_hw *ah, unsigned int mode)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (!test_bit(mode, ah->ah_capabilities.cap_mode))
> > return NULL;
> > @@ -448,7 +451,7 @@ const struct ath5k_rate_table
> > *ath5k_hw_get_rate_table(struct ath5k_hw *ah, */
> > void ath5k_hw_detach(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_rf_banks != NULL)
> > kfree(ah->ah_rf_banks);
> > @@ -594,7 +597,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode, unsigned int i, mode, freq, ee_mode, ant[2],
> > driver_mode = -1;
> > int ret;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > s_seq = 0;
> > s_ant = 1;
> > @@ -643,7 +646,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode, if (ah->ah_radio != AR5K_RF5111 &&
> > ah->ah_radio != AR5K_RF5112 &&
> > ah->ah_radio != AR5K_RF5413) {
> > - AR5K_PRINTF("invalid phy radio: %u\n", ah->ah_radio);
> > + AR5K_ERR(ah->ah_sc,
> > + "invalid phy radio: %u\n", ah->ah_radio);
> > return -EINVAL;
> > }
> >
> > @@ -681,7 +685,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode, break;
> > case CHANNEL_XR:
> > if (ah->ah_version == AR5K_AR5211) {
> > - AR5K_PRINTF("XR mode not available on 5211");
> > + AR5K_ERR(ah->ah_sc,
> > + "XR mode not available on 5211");
> > return -EINVAL;
> > }
> > mode = AR5K_INI_VAL_XR;
> > @@ -690,7 +695,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode, driver_mode = MODE_IEEE80211A;
> > break;
> > default:
> > - AR5K_PRINTF("invalid channel: %d\n", channel->freq);
> > + AR5K_ERR(ah->ah_sc, "invalid channel: %d\n",
> > + channel->freq);
> > return -EINVAL;
> > }
> >
> > @@ -905,7 +911,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode,
> >
> > if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
> > AR5K_PHY_AGCCTL_CAL, 0, false)) {
> > - AR5K_PRINTF("calibration timeout (%uMHz)\n", channel->freq);
> > + AR5K_ERR(ah->ah_sc, "calibration timeout (%uMHz)\n",
> > + channel->freq);
> > return -EAGAIN;
> > }
> >
> > @@ -917,7 +924,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode,
> >
> > if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
> > AR5K_PHY_AGCCTL_NF, 0, false)) {
> > - AR5K_PRINTF("noise floor calibration timeout (%uMHz)\n",
> > + AR5K_ERR(ah->ah_sc,
> > + "noise floor calibration timeout (%uMHz)\n",
> > channel->freq);
> > return -EAGAIN;
> > }
> > @@ -935,7 +943,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode, }
> >
> > if (noise_floor > AR5K_TUNE_NOISE_FLOOR) {
> > - AR5K_PRINTF("noise floor calibration failed (%uMHz)\n",
> > + AR5K_ERR(ah->ah_sc, "noise floor calibration failed (%uMHz)\n",
> > channel->freq);
> > return -EIO;
> > }
> > @@ -962,7 +970,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > ieee80211_if_types op_mode,
> >
> > ret = ath5k_hw_reset_tx_queue(ah, i);
> > if (ret) {
> > - AR5K_PRINTF("failed to reset TX queue #%d\n", i);
> > + AR5K_ERR(ah->ah_sc,
> > + "failed to reset TX queue #%d\n", i);
> > return ret;
> > }
> > }
> > @@ -1019,7 +1028,7 @@ static int ath5k_hw_nic_reset(struct ath5k_hw *ah,
> > u32 val) int ret;
> > u32 mask = val ? val : ~0U;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /* Read-and-clear RX Descriptor Pointer*/
> > ath5k_hw_reg_read(ah, AR5K_RXDP);
> > @@ -1066,7 +1075,7 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum
> > ath5k_power_mode mode, unsigned int i;
> > u32 staid;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > staid = ath5k_hw_reg_read(ah, AR5K_STA_ID1);
> >
> > switch (mode) {
> > @@ -1140,7 +1149,7 @@ commit:
> > */
> > void ath5k_hw_start_rx(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > ath5k_hw_reg_write(ah, AR5K_CR_RXE, AR5K_CR);
> > }
> >
> > @@ -1151,7 +1160,7 @@ int ath5k_hw_stop_rx_dma(struct ath5k_hw *ah)
> > {
> > unsigned int i;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > ath5k_hw_reg_write(ah, AR5K_CR_RXD, AR5K_CR);
> >
> > /*
> > @@ -1178,7 +1187,7 @@ u32 ath5k_hw_get_rx_buf(struct ath5k_hw *ah)
> > */
> > void ath5k_hw_put_rx_buf(struct ath5k_hw *ah, u32 phys_addr)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*TODO:Shouldn't we check if RX is enabled first ?*/
> > ath5k_hw_reg_write(ah, phys_addr, AR5K_RXDP);
> > @@ -1196,7 +1205,7 @@ int ath5k_hw_tx_start(struct ath5k_hw *ah, unsigned
> > int queue) {
> > u32 tx_queue;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > /* Return if queue is declared inactive */
> > @@ -1249,7 +1258,7 @@ int ath5k_hw_stop_tx_dma(struct ath5k_hw *ah,
> > unsigned int queue) unsigned int i = 100;
> > u32 tx_queue, pending;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > /* Return if queue is declared inactive */
> > @@ -1308,7 +1317,7 @@ u32 ath5k_hw_get_tx_buf(struct ath5k_hw *ah, unsigned
> > int queue) {
> > u16 tx_reg;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > /*
> > @@ -1342,7 +1351,7 @@ int ath5k_hw_put_tx_buf(struct ath5k_hw *ah, unsigned
> > int queue, u32 phys_addr) {
> > u16 tx_reg;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > /*
> > @@ -1387,7 +1396,7 @@ int ath5k_hw_update_tx_triglevel(struct ath5k_hw *ah,
> > bool increase) u32 trigger_level, imr;
> > int ret = -EIO;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*
> > * Disable interrupts by setting the mask
> > @@ -1434,7 +1443,7 @@ done:
> > */
> > bool ath5k_hw_is_intr_pending(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > return ath5k_hw_reg_read(ah, AR5K_INTPEND);
> > }
> >
> > @@ -1445,7 +1454,7 @@ int ath5k_hw_get_isr(struct ath5k_hw *ah, enum
> > ath5k_int *interrupt_mask) {
> > u32 data;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*
> > * Read interrupt status from the Interrupt Status register
> > @@ -1569,7 +1578,7 @@ static int ath5k_hw_eeprom_read(struct ath5k_hw *ah,
> > u32 offset, u16 *data) {
> > u32 status, timeout;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /*
> > * Initialize EEPROM access
> > */
> > @@ -1605,7 +1614,7 @@ static int ath5k_hw_eeprom_write(struct ath5k_hw *ah,
> > u32 offset, u16 data) #if 0
> > u32 status, timeout;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*
> > * Initialize eeprom access
> > @@ -1856,7 +1865,7 @@ static int ath5k_eeprom_init(struct ath5k_hw *ah)
> > cksum ^= val;
> > }
> > if (cksum != AR5K_EEPROM_INFO_CKSUM) {
> > - AR5K_PRINTF("Invalid EEPROM checksum 0x%04x\n", cksum);
> > + AR5K_ERR(ah->ah_sc, "Invalid EEPROM checksum 0x%04x\n", cksum);
> > return -EIO;
> > }
> > #endif
> > @@ -2103,7 +2112,7 @@ static int ath5k_hw_get_capabilities(struct ath5k_hw
> > *ah) {
> > u16 ee_header;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /* Capabilities stored in the EEPROM */
> > ee_header = ah->ah_capabilities.cap_eeprom.ee_header;
> >
> > @@ -2194,7 +2203,7 @@ int ath5k_hw_set_opmode(struct ath5k_hw *ah)
> > pcu_reg = 0;
> > beacon_reg = 0;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > switch (ah->ah_op_mode) {
> > case IEEE80211_IF_TYPE_IBSS:
> > @@ -2251,7 +2260,7 @@ int ath5k_hw_set_opmode(struct ath5k_hw *ah)
> > */
> > void ath5k_hw_get_lladdr(struct ath5k_hw *ah, u8 *mac)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > memcpy(mac, ah->ah_sta_id, ETH_ALEN);
> > }
> >
> > @@ -2262,7 +2271,7 @@ int ath5k_hw_set_lladdr(struct ath5k_hw *ah, const u8
> > *mac) {
> > u32 low_id, high_id;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /* Set new station ID */
> > memcpy(ah->ah_sta_id, mac, ETH_ALEN);
> >
> > @@ -2408,7 +2417,7 @@ void ath5k_hw_set_associd(struct ath5k_hw *ah, const
> > u8 *bssid, u16 assoc_id) int ath5k_hw_set_bssid_mask(struct ath5k_hw *ah,
> > const u8 *mask)
> > {
> > u32 low_id, high_id;
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_version == AR5K_AR5212) {
> > low_id = AR5K_LOW_ID(mask);
> > @@ -2432,7 +2441,7 @@ int ath5k_hw_set_bssid_mask(struct ath5k_hw *ah,
> > const u8 *mask) */
> > void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_REG_DISABLE_BITS(ah, AR5K_DIAG_SW, AR5K_DIAG_SW_DIS_RX);
> > }
> >
> > @@ -2441,7 +2450,7 @@ void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah)
> > */
> > void ath5k_hw_stop_pcu_recv(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_REG_ENABLE_BITS(ah, AR5K_DIAG_SW, AR5K_DIAG_SW_DIS_RX);
> > }
> >
> > @@ -2454,7 +2463,7 @@ void ath5k_hw_stop_pcu_recv(struct ath5k_hw *ah)
> > */
> > void ath5k_hw_set_mcast_filter(struct ath5k_hw *ah, u32 filter0, u32
> > filter1) {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /* Set the multicat filter */
> > ath5k_hw_reg_write(ah, filter0, AR5K_MCAST_FILTER0);
> > ath5k_hw_reg_write(ah, filter1, AR5K_MCAST_FILTER1);
> > @@ -2466,7 +2475,7 @@ void ath5k_hw_set_mcast_filter(struct ath5k_hw *ah,
> > u32 filter0, u32 filter1) int ath5k_hw_set_mcast_filterindex(struct
> > ath5k_hw *ah, u32 index) {
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (index >= 64)
> > return -EINVAL;
> > else if (index >= 32)
> > @@ -2484,7 +2493,7 @@ int ath5k_hw_set_mcast_filterindex(struct ath5k_hw
> > *ah, u32 index) int ath5k_hw_clear_mcast_filter_idx(struct ath5k_hw *ah,
> > u32 index) {
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (index >= 64)
> > return -EINVAL;
> > else if (index >= 32)
> > @@ -2503,7 +2512,7 @@ u32 ath5k_hw_get_rx_filter(struct ath5k_hw *ah)
> > {
> > u32 data, filter = 0;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > filter = ath5k_hw_reg_read(ah, AR5K_RX_FILTER);
> >
> > /*Radar detection for 5212*/
> > @@ -2526,7 +2535,7 @@ void ath5k_hw_set_rx_filter(struct ath5k_hw *ah, u32
> > filter) {
> > u32 data = 0;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /* Set PHY error filter register on 5212*/
> > if (ah->ah_version == AR5K_AR5212) {
> > @@ -2569,7 +2578,7 @@ void ath5k_hw_set_rx_filter(struct ath5k_hw *ah, u32
> > filter) */
> > u32 ath5k_hw_get_tsf32(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > return ath5k_hw_reg_read(ah, AR5K_TSF_L32);
> > }
> >
> > @@ -2579,7 +2588,7 @@ u32 ath5k_hw_get_tsf32(struct ath5k_hw *ah)
> > u64 ath5k_hw_get_tsf64(struct ath5k_hw *ah)
> > {
> > u64 tsf = ath5k_hw_reg_read(ah, AR5K_TSF_U32);
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > return ath5k_hw_reg_read(ah, AR5K_TSF_L32) | (tsf << 32);
> > }
> > @@ -2589,7 +2598,7 @@ u64 ath5k_hw_get_tsf64(struct ath5k_hw *ah)
> > */
> > void ath5k_hw_reset_tsf(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_REG_ENABLE_BITS(ah, AR5K_BEACON, AR5K_BEACON_RESET_TSF);
> > }
> >
> > @@ -2600,7 +2609,7 @@ void ath5k_hw_init_beacon(struct ath5k_hw *ah, u32
> > next_beacon, u32 interval) {
> > u32 timer1, timer2, timer3;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /*
> > * Set the additional timers by mode
> > */
> > @@ -2658,7 +2667,7 @@ int ath5k_hw_set_beacon_timers(struct ath5k_hw *ah,
> > u32 cfp_count = 0; /* XXX */
> > u32 tsf = 0; /* XXX */
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /* Return on an invalid beacon state */
> > if (state->bs_interval < 1)
> > return -EINVAL;
> > @@ -2770,7 +2779,7 @@ int ath5k_hw_set_beacon_timers(struct ath5k_hw *ah,
> > */
> > void ath5k_hw_reset_beacon(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /*
> > * Disable beacon timer
> > */
> > @@ -2793,7 +2802,7 @@ int ath5k_hw_wait_for_beacon(struct ath5k_hw *ah,
> > unsigned long phys_addr) unsigned int i;
> > int ret;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /* 5210 doesn't have QCU*/
> > if (ah->ah_version == AR5K_AR5210) {
> > @@ -2840,7 +2849,7 @@ int ath5k_hw_wait_for_beacon(struct ath5k_hw *ah,
> > unsigned long phys_addr) void ath5k_hw_update_mib_counters(struct ath5k_hw
> > *ah,
> > struct ath5k_mib_stats *statistics)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /* Read-And-Clear */
> > statistics->ackrcv_bad += ath5k_hw_reg_read(ah, AR5K_ACK_FAIL);
> > statistics->rts_bad += ath5k_hw_reg_read(ah, AR5K_RTS_FAIL);
> > @@ -2885,7 +2894,7 @@ void ath5k_hw_set_ack_bitrate_high(struct ath5k_hw
> > *ah, bool high) */
> > int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah, unsigned int timeout)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (ath5k_hw_clocktoh(AR5K_REG_MS(0xffffffff, AR5K_TIME_OUT_ACK),
> > ah->ah_turbo) <= timeout)
> > return -EINVAL;
> > @@ -2901,7 +2910,7 @@ int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah,
> > unsigned int timeout) */
> > unsigned int ath5k_hw_get_ack_timeout(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > return ath5k_hw_clocktoh(AR5K_REG_MS(ath5k_hw_reg_read(ah,
> > AR5K_TIME_OUT), AR5K_TIME_OUT_ACK), ah->ah_turbo);
> > @@ -2912,7 +2921,7 @@ unsigned int ath5k_hw_get_ack_timeout(struct ath5k_hw
> > *ah) */
> > int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int timeout)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (ath5k_hw_clocktoh(AR5K_REG_MS(0xffffffff, AR5K_TIME_OUT_CTS),
> > ah->ah_turbo) <= timeout)
> > return -EINVAL;
> > @@ -2928,7 +2937,7 @@ int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah,
> > unsigned int timeout) */
> > unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > return ath5k_hw_clocktoh(AR5K_REG_MS(ath5k_hw_reg_read(ah,
> > AR5K_TIME_OUT), AR5K_TIME_OUT_CTS), ah->ah_turbo);
> > }
> > @@ -2941,7 +2950,7 @@ int ath5k_hw_reset_key(struct ath5k_hw *ah, u16
> > entry) {
> > unsigned int i;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(entry, AR5K_KEYTABLE_SIZE);
> >
> > for (i = 0; i < AR5K_KEYCACHE_SIZE; i++)
> > @@ -2957,7 +2966,7 @@ int ath5k_hw_reset_key(struct ath5k_hw *ah, u16
> > entry)
> >
> > int ath5k_hw_is_key_valid(struct ath5k_hw *ah, u16 entry)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(entry, AR5K_KEYTABLE_SIZE);
> >
> > /* Check the validation flag at the end of the entry */
> > @@ -2972,7 +2981,7 @@ int ath5k_hw_set_key(struct ath5k_hw *ah, u16 entry,
> > __le32 key_v[5] = {};
> > u32 keytype;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /* key->keylen comes in from mac80211 in bytes */
> >
> > @@ -3018,7 +3027,7 @@ int ath5k_hw_set_key_lladdr(struct ath5k_hw *ah, u16
> > entry, const u8 *mac) {
> > u32 low_id, high_id;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /* Invalid entry (key table overflow) */
> > AR5K_ASSERT_ENTRY(entry, AR5K_KEYTABLE_SIZE);
> >
> > @@ -3052,7 +3061,7 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum
> > ath5k_tx_queue queue_type, unsigned int queue;
> > int ret;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*
> > * Get queue by type
> > @@ -3092,8 +3101,9 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum
> > ath5k_tx_queue queue_type, break;
> > case AR5K_TX_QUEUE_XR_DATA:
> > if (ah->ah_version != AR5K_AR5212)
> > - AR5K_PRINTF("XR data queues only supported in "
> > - "5212!\n");
> > + AR5K_ERR(ah->ah_sc,
> > + "XR data queues only supported"
> > + " in 5212!\n");
> > queue = AR5K_TX_QUEUE_ID_XR_DATA;
> > break;
> > default:
> > @@ -3129,7 +3139,7 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum
> > ath5k_tx_queue queue_type, int ath5k_hw_setup_tx_queueprops(struct ath5k_hw
> > *ah, int queue,
> > const struct ath5k_txq_info *queue_info)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > if (ah->ah_txq[queue].tqi_type == AR5K_TX_QUEUE_INACTIVE)
> > @@ -3153,7 +3163,7 @@ int ath5k_hw_setup_tx_queueprops(struct ath5k_hw *ah,
> > int queue, int ath5k_hw_get_tx_queueprops(struct ath5k_hw *ah, int queue,
> > struct ath5k_txq_info *queue_info)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > memcpy(queue_info, &ah->ah_txq[queue], sizeof(struct ath5k_txq_info));
> > return 0;
> > }
> > @@ -3163,7 +3173,7 @@ int ath5k_hw_get_tx_queueprops(struct ath5k_hw *ah,
> > int queue, */
> > void ath5k_hw_release_tx_queue(struct ath5k_hw *ah, unsigned int queue)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (WARN_ON(queue >= ah->ah_capabilities.cap_queues.q_tx_num))
> > return;
> >
> > @@ -3181,7 +3191,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah,
> > unsigned int queue) u32 cw_min, cw_max, retry_lg, retry_sh;
> > struct ath5k_txq_info *tq = &ah->ah_txq[queue];
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > tq = &ah->ah_txq[queue];
> > @@ -3425,7 +3435,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah,
> > unsigned int queue) * for a specific queue [5211+]
> > */
> > u32 ath5k_hw_num_tx_pending(struct ath5k_hw *ah, unsigned int queue) {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
> >
> > /* Return if queue is declared inactive */
> > @@ -3444,7 +3454,7 @@ u32 ath5k_hw_num_tx_pending(struct ath5k_hw *ah,
> > unsigned int queue) { */
> > int ath5k_hw_set_slot_time(struct ath5k_hw *ah, unsigned int slot_time)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (slot_time < AR5K_SLOT_TIME_9 || slot_time > AR5K_SLOT_TIME_MAX)
> > return -EINVAL;
> >
> > @@ -3462,7 +3472,7 @@ int ath5k_hw_set_slot_time(struct ath5k_hw *ah,
> > unsigned int slot_time) */
> > unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (ah->ah_version == AR5K_AR5210)
> > return ath5k_hw_clocktoh(ath5k_hw_reg_read(ah,
> > AR5K_SLOT_TIME) & 0xffff, ah->ah_turbo);
> > @@ -3610,7 +3620,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct
> > ath5k_hw *ah, struct ath5k_hw_tx_status *tx_status;
> > unsigned int buff_len;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > tx_desc = (struct ath5k_hw_4w_tx_desc *)&desc->ds_ctl0;
> > tx_status = (struct ath5k_hw_tx_status *)&desc->ds_hw[2];
> >
> > @@ -3791,7 +3801,7 @@ static int ath5k_hw_proc_4word_tx_status(struct
> > ath5k_hw *ah, struct ath5k_hw_tx_status *tx_status;
> > struct ath5k_hw_4w_tx_desc *tx_desc;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > tx_desc = (struct ath5k_hw_4w_tx_desc *)&desc->ds_ctl0;
> > tx_status = (struct ath5k_hw_tx_status *)&desc->ds_hw[2];
> >
> > @@ -3869,7 +3879,7 @@ int ath5k_hw_setup_rx_desc(struct ath5k_hw *ah,
> > struct ath5k_desc *desc, {
> > struct ath5k_rx_desc *rx_desc;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > rx_desc = (struct ath5k_rx_desc *)&desc->ds_ctl0;
> >
> > /*
> > @@ -3974,7 +3984,7 @@ static int ath5k_hw_proc_new_rx_status(struct
> > ath5k_hw *ah, struct ath5k_hw_new_rx_status *rx_status;
> > struct ath5k_hw_rx_error *rx_err;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > rx_status = (struct ath5k_hw_new_rx_status *)&desc->ds_hw[0];
> >
> > /* Overlay on error */
> > @@ -4052,7 +4062,7 @@ void ath5k_hw_set_ledstate(struct ath5k_hw *ah,
> > unsigned int state) /*5210 has different led mode handling*/
> > u32 led_5210;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*Reset led status*/
> > if (ah->ah_version != AR5K_AR5210)
> > @@ -4100,7 +4110,7 @@ void ath5k_hw_set_ledstate(struct ath5k_hw *ah,
> > unsigned int state) */
> > int ath5k_hw_set_gpio_output(struct ath5k_hw *ah, u32 gpio)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (gpio > AR5K_NUM_GPIO)
> > return -EINVAL;
> >
> > @@ -4115,7 +4125,7 @@ int ath5k_hw_set_gpio_output(struct ath5k_hw *ah, u32
> > gpio) */
> > int ath5k_hw_set_gpio_input(struct ath5k_hw *ah, u32 gpio)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (gpio > AR5K_NUM_GPIO)
> > return -EINVAL;
> >
> > @@ -4130,7 +4140,7 @@ int ath5k_hw_set_gpio_input(struct ath5k_hw *ah, u32
> > gpio) */
> > u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32 gpio)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (gpio > AR5K_NUM_GPIO)
> > return 0xffffffff;
> >
> > @@ -4145,7 +4155,7 @@ u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32 gpio)
> > int ath5k_hw_set_gpio(struct ath5k_hw *ah, u32 gpio, u32 val)
> > {
> > u32 data;
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (gpio > AR5K_NUM_GPIO)
> > return -EINVAL;
> > @@ -4169,7 +4179,7 @@ void ath5k_hw_set_gpio_intr(struct ath5k_hw *ah,
> > unsigned int gpio, {
> > u32 data;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (gpio > AR5K_NUM_GPIO)
> > return;
> >
> > @@ -4222,115 +4232,15 @@ u16 ath5k_get_regdomain(struct ath5k_hw *ah)
> > }
> >
> >
> > -
> > /****************\
> > Misc functions
> > \****************/
> >
> > -void /*O.K.*/
> > -ath5k_hw_dump_state(struct ath5k_hw *ah)
> > -{
> > -#ifdef AR5K_DEBUG
> > -#define AR5K_PRINT_REGISTER(_x) \
> > - AR5K_PRINTF("(%s: %08x) ", #_x, ath5k_hw_reg_read(ah, AR5K_##_x));
> > -
> > - AR5K_PRINT("MAC registers:\n");
> > - AR5K_PRINT_REGISTER(CR);
> > - AR5K_PRINT_REGISTER(CFG);
> > - AR5K_PRINT_REGISTER(IER);
> > - AR5K_PRINT_REGISTER(TXCFG);
> > - AR5K_PRINT_REGISTER(RXCFG);
> > - AR5K_PRINT_REGISTER(MIBC);
> > - AR5K_PRINT_REGISTER(TOPS);
> > - AR5K_PRINT_REGISTER(RXNOFRM);
> > - AR5K_PRINT_REGISTER(RPGTO);
> > - AR5K_PRINT_REGISTER(RFCNT);
> > - AR5K_PRINT_REGISTER(MISC);
> > - AR5K_PRINT_REGISTER(PISR);
> > - AR5K_PRINT_REGISTER(SISR0);
> > - AR5K_PRINT_REGISTER(SISR1);
> > - AR5K_PRINT_REGISTER(SISR3);
> > - AR5K_PRINT_REGISTER(SISR4);
> > - AR5K_PRINT_REGISTER(DCM_ADDR);
> > - AR5K_PRINT_REGISTER(DCM_DATA);
> > - AR5K_PRINT_REGISTER(DCCFG);
> > - AR5K_PRINT_REGISTER(CCFG);
> > - AR5K_PRINT_REGISTER(CCFG_CUP);
> > - AR5K_PRINT_REGISTER(CPC0);
> > - AR5K_PRINT_REGISTER(CPC1);
> > - AR5K_PRINT_REGISTER(CPC2);
> > - AR5K_PRINT_REGISTER(CPCORN);
> > - AR5K_PRINT_REGISTER(QCU_TXE);
> > - AR5K_PRINT_REGISTER(QCU_TXD);
> > - AR5K_PRINT_REGISTER(DCU_GBL_IFS_SIFS);
> > - AR5K_PRINT_REGISTER(DCU_GBL_IFS_SLOT);
> > - AR5K_PRINT_REGISTER(DCU_FP);
> > - AR5K_PRINT_REGISTER(DCU_TXP);
> > - AR5K_PRINT_REGISTER(DCU_TX_FILTER);
> > - AR5K_PRINT_REGISTER(INTPEND);
> > - AR5K_PRINT_REGISTER(PCICFG);
> > - AR5K_PRINT_REGISTER(GPIOCR);
> > - AR5K_PRINT_REGISTER(GPIODO);
> > - AR5K_PRINT_REGISTER(SREV);
> > - AR5K_PRINT_REGISTER(EEPROM_BASE);
> > - AR5K_PRINT_REGISTER(EEPROM_DATA);
> > - AR5K_PRINT_REGISTER(EEPROM_CMD);
> > - AR5K_PRINT_REGISTER(EEPROM_CFG);
> > - AR5K_PRINT_REGISTER(PCU_MIN);
> > - AR5K_PRINT_REGISTER(STA_ID0);
> > - AR5K_PRINT_REGISTER(STA_ID1);
> > - AR5K_PRINT_REGISTER(BSS_ID0);
> > - AR5K_PRINT_REGISTER(SLOT_TIME);
> > - AR5K_PRINT_REGISTER(TIME_OUT);
> > - AR5K_PRINT_REGISTER(RSSI_THR);
> > - AR5K_PRINT_REGISTER(BEACON);
> > - AR5K_PRINT_REGISTER(CFP_PERIOD);
> > - AR5K_PRINT_REGISTER(TIMER0);
> > - AR5K_PRINT_REGISTER(TIMER2);
> > - AR5K_PRINT_REGISTER(TIMER3);
> > - AR5K_PRINT_REGISTER(CFP_DUR);
> > - AR5K_PRINT_REGISTER(MCAST_FILTER0);
> > - AR5K_PRINT_REGISTER(MCAST_FILTER1);
> > - AR5K_PRINT_REGISTER(DIAG_SW);
> > - AR5K_PRINT_REGISTER(TSF_U32);
> > - AR5K_PRINT_REGISTER(ADDAC_TEST);
> > - AR5K_PRINT_REGISTER(DEFAULT_ANTENNA);
> > - AR5K_PRINT_REGISTER(LAST_TSTP);
> > - AR5K_PRINT_REGISTER(NAV);
> > - AR5K_PRINT_REGISTER(RTS_OK);
> > - AR5K_PRINT_REGISTER(ACK_FAIL);
> > - AR5K_PRINT_REGISTER(FCS_FAIL);
> > - AR5K_PRINT_REGISTER(BEACON_CNT);
> > - AR5K_PRINT_REGISTER(TSF_PARM);
> > - AR5K_PRINT("\n");
> > -
> > - AR5K_PRINT("PHY registers:\n");
> > - AR5K_PRINT_REGISTER(PHY_TURBO);
> > - AR5K_PRINT_REGISTER(PHY_AGC);
> > - AR5K_PRINT_REGISTER(PHY_TIMING_3);
> > - AR5K_PRINT_REGISTER(PHY_CHIP_ID);
> > - AR5K_PRINT_REGISTER(PHY_AGCCTL);
> > - AR5K_PRINT_REGISTER(PHY_NF);
> > - AR5K_PRINT_REGISTER(PHY_SCR);
> > - AR5K_PRINT_REGISTER(PHY_SLMT);
> > - AR5K_PRINT_REGISTER(PHY_SCAL);
> > - AR5K_PRINT_REGISTER(PHY_RX_DELAY);
> > - AR5K_PRINT_REGISTER(PHY_IQ);
> > - AR5K_PRINT_REGISTER(PHY_PAPD_PROBE);
> > - AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE1);
> > - AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE2);
> > - AR5K_PRINT_REGISTER(PHY_RADAR);
> > - AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_0);
> > - AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_1);
> > - AR5K_PRINT("\n");
> > -#endif
> > -}
> > -
> > int ath5k_hw_get_capability(struct ath5k_hw *ah,
> > enum ath5k_capability_type cap_type,
> > u32 capability, u32 *result)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > switch (cap_type) {
> > case AR5K_CAP_NUM_TXQUEUES:
> > @@ -4375,7 +4285,7 @@ yes:
> > static int ath5k_hw_enable_pspoll(struct ath5k_hw *ah, u8 *bssid,
> > u16 assoc_id)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_version == AR5K_AR5210) {
> > AR5K_REG_DISABLE_BITS(ah, AR5K_STA_ID1,
> > @@ -4388,7 +4298,7 @@ static int ath5k_hw_enable_pspoll(struct ath5k_hw
> > *ah, u8 *bssid,
> >
> > static int ath5k_hw_disable_pspoll(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_version == AR5K_AR5210) {
> > AR5K_REG_ENABLE_BITS(ah, AR5K_STA_ID1,
> > diff --git a/drivers/net/wireless/ath5k/phy.c
> > b/drivers/net/wireless/ath5k/phy.c index d5aec18..5319bf0 100644
> > --- a/drivers/net/wireless/ath5k/phy.c
> > +++ b/drivers/net/wireless/ath5k/phy.c
> > @@ -23,6 +23,8 @@
> >
> > #include "ath5k.h"
> > #include "reg.h"
> > +#include "base.h"
> > +#include "debug.h"
> >
> > /* Struct to hold initial RF register values (RF Banks) */
> > struct ath5k_ini_rf {
> > @@ -879,11 +881,10 @@ static s32 ath5k_hw_rfregs_gain_adjust(struct
> > ath5k_hw *ah) }
> >
> > done:
> > -#ifdef AR5K_DEBUG
> > - AR5K_PRINTF("ret %d, gain step %u, current gain %u, target gain %u\n",
> > + AR5K_DBG(ah->ah_sc, ATH_DEBUG_CALIBRATE,
> > + "ret %d, gain step %u, current gain %u, target gain %u\n",
> > ret, ah->ah_gain.g_step_idx, ah->ah_gain.g_current,
> > ah->ah_gain.g_target);
> > -#endif
> >
> > return ret;
> > }
> > @@ -908,7 +909,7 @@ static int ath5k_hw_rf5111_rfregs(struct ath5k_hw *ah,
> > /* Copy values to modify them */
> > for (i = 0; i < rf_size; i++) {
> > if (rfregs_5111[i].rf_bank >= AR5K_RF5111_INI_RF_MAX_BANKS) {
> > - AR5K_PRINT("invalid bank\n");
> > + AR5K_ERR(ah->ah_sc, "invalid bank\n");
> > return -EINVAL;
> > }
> >
> > @@ -1017,7 +1018,7 @@ static int ath5k_hw_rf5112_rfregs(struct ath5k_hw
> > *ah, /* Copy values to modify them */
> > for (i = 0; i < rf_size; i++) {
> > if (rf_ini[i].rf_bank >= AR5K_RF5112_INI_RF_MAX_BANKS) {
> > - AR5K_PRINT("invalid bank\n");
> > + AR5K_ERR(ah->ah_sc, "invalid bank\n");
> > return -EINVAL;
> > }
> >
> > @@ -1105,7 +1106,7 @@ static int ath5k_hw_rf5413_rfregs(struct ath5k_hw
> > *ah, /* Copy values to modify them */
> > for (i = 0; i < rf_size; i++) {
> > if (rf_ini[i].rf_bank >= AR5K_RF5112_INI_RF_MAX_BANKS) {
> > - AR5K_PRINT("invalid bank\n");
> > + AR5K_ERR(ah->ah_sc, "invalid bank\n");
> > return -EINVAL;
> > }
> >
> > @@ -1167,7 +1168,7 @@ int ath5k_hw_rfregs(struct ath5k_hw *ah, struct
> > ieee80211_channel *channel, /* XXX do extra checks? */
> > ah->ah_rf_banks = kmalloc(ah->ah_rf_banks_size, GFP_KERNEL);
> > if (ah->ah_rf_banks == NULL) {
> > - AR5K_PRINT("out of memory\n");
> > + AR5K_ERR(ah->ah_sc, "out of memory\n");
> > return -ENOMEM;
> > }
> > }
> > @@ -1222,7 +1223,7 @@ enum ath5k_rfgain ath5k_hw_get_rf_gain(struct
> > ath5k_hw *ah) {
> > u32 data, type;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_rf_banks == NULL || !ah->ah_gain.g_active ||
> > ah->ah_version <= AR5K_AR5211)
> > @@ -1484,7 +1485,7 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct
> > ieee80211_channel *channel) channel->freq >
> > ah->ah_capabilities.cap_range.range_2ghz_max) && (channel->freq <
> > ah->ah_capabilities.cap_range.range_5ghz_min || channel->freq >
> > ah->ah_capabilities.cap_range.range_5ghz_max)) { - AR5K_PRINTF("channel
> > out of supported range (%u MHz)\n",
> > + AR5K_ERR(ah->ah_sc, "channel out of supported range (%u MHz)\n",
> > channel->freq);
> > return -EINVAL;
> > }
> > @@ -1605,7 +1606,8 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw
> > *ah, ath5k_hw_reg_write(ah, phy_sat, AR5K_PHY_ADCSAT);
> >
> > if (ret) {
> > - AR5K_PRINTF("calibration timeout (%uMHz)\n", channel->freq);
> > + AR5K_ERR(ah->ah_sc, "calibration timeout (%uMHz)\n",
> > + channel->freq);
> > return ret;
> > }
> >
> > @@ -1617,7 +1619,7 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw
> > *ah, ret = ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
> > AR5K_PHY_AGCCTL_NF, 0, false);
> > if (ret) {
> > - AR5K_PRINTF("noise floor calibration timeout (%uMHz)\n",
> > + AR5K_ERR(ah->ah_sc, "noise floor calibration timeout (%uMHz)\n",
> > channel->freq);
> > return ret;
> > }
> > @@ -1635,7 +1637,7 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw
> > *ah, }
> >
> > if (noise_floor > AR5K_TUNE_NOISE_FLOOR) {
> > - AR5K_PRINTF("noise floor calibration failed (%uMHz)\n",
> > + AR5K_ERR(ah->ah_sc, "noise floor calibration failed (%uMHz)\n",
> > channel->freq);
> > return -EIO;
> > }
> > @@ -1658,7 +1660,7 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw
> > *ah, {
> > u32 i_pwr, q_pwr;
> > s32 iq_corr, i_coff, i_coffd, q_coff, q_coffd;
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > if (ah->ah_calibration == false ||
> > ath5k_hw_reg_read(ah, AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN)
> > @@ -1715,7 +1717,7 @@ int ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
> >
> > int ath5k_hw_phy_disable(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /*Just a try M.F.*/
> > ath5k_hw_reg_write(ah, AR5K_PHY_ACT_DISABLE, AR5K_PHY_ACT);
> >
> > @@ -1735,7 +1737,7 @@ u16 ath5k_hw_radio_revision(struct ath5k_hw *ah,
> > unsigned int chan) u32 srev;
> > u16 ret;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> >
> > /*
> > * Set the radio chip access register
> > @@ -1777,7 +1779,7 @@ u16 ath5k_hw_radio_revision(struct ath5k_hw *ah,
> > unsigned int chan) void /*TODO:Boundary check*/
> > ath5k_hw_set_def_antenna(struct ath5k_hw *ah, unsigned int ant)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /*Just a try M.F.*/
> > if (ah->ah_version != AR5K_AR5210)
> > ath5k_hw_reg_write(ah, ant, AR5K_DEFAULT_ANTENNA);
> > @@ -1785,7 +1787,7 @@ ath5k_hw_set_def_antenna(struct ath5k_hw *ah,
> > unsigned int ant)
> >
> > unsigned int ath5k_hw_get_def_antenna(struct ath5k_hw *ah)
> > {
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > /*Just a try M.F.*/
> > if (ah->ah_version != AR5K_AR5210)
> > return ath5k_hw_reg_read(ah, AR5K_DEFAULT_ANTENNA);
> > @@ -1845,9 +1847,9 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct
> > ieee80211_channel *channel, bool tpc = ah->ah_txpower.txp_tpc;
> > unsigned int i;
> >
> > - AR5K_TRACE;
> > + AR5K_TRACE(ah->ah_sc);
> > if (txpower > AR5K_TUNE_MAX_TXPOWER) {
> > - AR5K_PRINTF("invalid tx power: %u\n", txpower);
> > + AR5K_ERR(ah->ah_sc, "invalid tx power: %u\n", txpower);
> > return -EINVAL;
> > }
> >
> > @@ -1899,9 +1901,9 @@ int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah,
> > unsigned int power) /*Just a try M.F.*/
> > struct ieee80211_channel *channel = &ah->ah_current_channel;
> >
> > - AR5K_TRACE;
> > -#ifdef AR5K_DEBUG
> > - AR5K_PRINTF("changing txpower to %d\n", power);
> > -#endif
> > + AR5K_TRACE(ah->ah_sc);
> > + AR5K_DBG(ah->ah_sc, ATH_DEBUG_TXPOWER,
> > + "changing txpower to %d\n", power);
> > +
> > return ath5k_hw_txpower(ah, channel, power);
> > }
> > diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c
> > index 015b3f8..16afd24 100644
> > --- a/net/mac80211/ieee80211_sta.c
> > +++ b/net/mac80211/ieee80211_sta.c
> > @@ -2647,7 +2647,7 @@ void ieee80211_scan_completed(struct ieee80211_hw
> > *hw) local->sta_scanning = 0;
> >
> > if (ieee80211_hw_config(local))
> > - printk(KERN_DEBUG "%s: failed to restore operational"
> > + printk(KERN_DEBUG "%s: failed to restore operational "
> > "channel after scan\n", dev->name);
> >
> >
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-wireless"
> > in the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
> _______________________________________________
> ath5k-devel mailing list
> [email protected]
> https://lists.ath5k.org/mailman/listinfo/ath5k-devel
>


2007-11-21 08:56:33

by Bruno Randolf

[permalink] [raw]
Subject: Re: [ath5k-devel] ath5k: more consistent debug, info and error logging

On Wednesday 21 November 2007 10:57:51 Luis R. Rodriguez wrote:
> thanks for this work BTW. CC'ing other maintainers, you probably just
> forgot.

ah, sorry. i thought you guys monitor the mailinglists anyways. i'm still not
too sure about the kernel-dev etiquette...

> I know this is a pain but this is a pretty big patch, can you
> split it into a few for better review? I also know this is just debug
> stuff but it would help. One for each main task you mention below
> might do it, or something like that.

i will send it split up in 2 parts, the info/err logging one and the debugging
changes, i hope that will suffice. it's pretty hard to split the debugging
changes into smaller pieces because most of the macros move into debug.h.

bruno

> > > * added 4 new macros AR5K_INFO, AR5K_WARN, AR5K_ERR and AR5K_DBG,
> > > and changed all printk, most dev_info and most AR5K_PRINTF lines to use
> > > these macros instead. they get a reference to sc, so we can
> > > automatically add additional information: right now they prepend "ath5k
> > > phyX:" to all strings, but it would be possible to switch to
> > > dev_info/warn/... instead too. i think using "phyX" makes the output
> > > more readable and easier to match with the output from mac80211. in
> > > cases where we don't have sc available we still use AR5K_PRINTF. this
> > > is mostly cosmetics, but it's important for distinguishing log messages
> > > between different cards in setups with more than one atheros card.
> > >
> > > * deleted AR5K_PRINT because it's easy to use AR5K_PRINTF instead.
> > >
> > > * moved all debugging related stuff to debug.h and debug.c
> > >
> > > * added debugfs entry (ath5k/phyX/debug) to control the debug level
> > > for each device
> > >
> > > * consistent use of AR5K_DBG instead of DPRINTF and others.
> > > AR5K_DBG honors the debugging flags set on module load or by debugfs.
> > > moved all instances where the debugging output was controlled by
> > > additional defines (like ATH_DUMP_SKB) to use these debugging flags
> > > too.
> > >
> > > * better skb dumping, allowing control wether we want to see RX or
> > > TX frames.
> > >
> > > for base.c
> > > Changes-licensed-under: 3-clause-BSD
> > >
> > > for all others...
> > > Changes-licensed-under: ISC
> > >
> > > Signed-off-by: Bruno Randolf <[email protected]>
> > > diff --git a/drivers/net/wireless/ath5k/Makefile
> > > b/drivers/net/wireless/ath5k/Makefile index f27560b..321641f 100644
> > > --- a/drivers/net/wireless/ath5k/Makefile
> > > +++ b/drivers/net/wireless/ath5k/Makefile
> > > @@ -1,2 +1,2 @@
> > > -ath5k-objs = base.o hw.o regdom.o initvals.o phy.o
> > > +ath5k-objs = base.o hw.o regdom.o initvals.o phy.o debug.o
> > > obj-$(CONFIG_ATH5K) += ath5k.o
> > > diff --git a/drivers/net/wireless/ath5k/ath5k.h
> > > b/drivers/net/wireless/ath5k/ath5k.h index c5e37d2..27593d6 100644
> > > --- a/drivers/net/wireless/ath5k/ath5k.h
> > > +++ b/drivers/net/wireless/ath5k/ath5k.h
> > > @@ -25,8 +25,8 @@
> > > * you've been warned. */
> > > #define CHAN_DEBUG 0
> > >
> > > -/* Uncomment this for debuging (warning that it results in TOO much
> > > output) */ -/* #define AR5K_DEBUG 1 */
> > > +/* set this to 1 for debugging output */
> > > +#define AR5K_DEBUG 0
> > >
> > > #include <linux/io.h>
> > > #include <linux/types.h>
> > > @@ -70,12 +70,25 @@
> > > \****************************/
> > >
> > > #define AR5K_PRINTF(fmt, ...) printk("%s: " fmt, __func__,
> > > ##__VA_ARGS__) -#define AR5K_PRINT(fmt) printk("%s: " fmt,
> > > __func__)
> > > -#ifdef AR5K_DEBUG
> > > -#define AR5K_TRACE printk(KERN_DEBUG "%s:%d\n", __func__,
> > > __LINE__) -#else
> > > -#define AR5K_TRACE
> > > -#endif
> > > +
> > > +#define AR5K_PRINTK(_sc, _level, _fmt, ...) \
> > > + printk(_level "ath5k %s: " _fmt, \
> > > + ((_sc) && (_sc)->hw) ? wiphy_name((_sc)->hw->wiphy) : "",
> > > \ + ##__VA_ARGS__)
> > > +
> > > +#define AR5K_PRINTK_LIMIT(_sc, _level, _fmt, ...) do { \
> > > + if (net_ratelimit()) \
> > > + AR5K_PRINTK(_sc, _level, _fmt, ##__VA_ARGS__); \
> > > + } while (0)
> > > +
> > > +#define AR5K_INFO(_sc, _fmt, ...) \
> > > + AR5K_PRINTK(_sc, KERN_INFO, _fmt, ##__VA_ARGS__)
> > > +
> > > +#define AR5K_WARN(_sc, _fmt, ...) \
> > > + AR5K_PRINTK_LIMIT(_sc, KERN_WARNING, _fmt, ##__VA_ARGS__)
> > > +
> > > +#define AR5K_ERR(_sc, _fmt, ...) \
> > > + AR5K_PRINTK_LIMIT(_sc, KERN_ERR, _fmt, ##__VA_ARGS__)
>
> I was kind of hoping we could stick to dev_[info|warn|err] for these.
> IIRC you had mentioned you can't get the device name printed? Is that
> right? To not use dev_dbg seems to make sense as we can have more
> granular control over debug messages specific to ath5k.
>
> > > /*
> > > * Some tuneable values (these should be changeable by the user)
> > > @@ -1095,7 +1108,6 @@ extern void ath5k_hw_set_gpio_intr(struct
> > > ath5k_hw *ah, unsigned int gpio, u32 i /* Regulatory Domain/Channels
> > > Setup */ extern u16 ath5k_get_regdomain(struct ath5k_hw *ah);
> > > /* Misc functions */
> > > -extern void ath5k_hw_dump_state(struct ath5k_hw *ah);
> > > extern int ath5k_hw_get_capability(struct ath5k_hw *ah, enum
> > > ath5k_capability_type cap_type, u32 capability, u32 *result);
> > >
> > >
> > > diff --git a/drivers/net/wireless/ath5k/base.c
> > > b/drivers/net/wireless/ath5k/base.c index 77e3855..6ca7ebf 100644
> > > --- a/drivers/net/wireless/ath5k/base.c
> > > +++ b/drivers/net/wireless/ath5k/base.c
>
> Notice the license on base.[ch]. It's a "Dual GPL/BSD" license.
> Although all of our recent changes have been licensed the 3-clause-BSD
> for these files we did not verify the same for previous changes on
> MadWifi's files (stuff in base.[ch]) so its best to just keep the Dual
> license there for that code in case previous authors did intend on
> licesning their changes under the GPL (hence the problem with using
> vague "alternatively" language for Dual licensing). This presents a
> problem in trying to shift code on base.[ch] onto what you would think
> is an OK ISC-only licensed code. This is also the problem we knew we'd
> face down the road with trying to help OpenBSD -- in the end we may
> want to just shuffle around GPL code into ISC licensed code and well,
> then it becomes a pretty heavy nightmware for us to keep track of
> which part of the code is licensed under what for them.
>
> As we have it right now base.[ch] contains code which *may* have been
> patched in for GPL-only intentions (prior to kernel inclusion). In
> your patch series I'd like to see careful use of this shifting. If you
> are just deleting code, great, but if you are reusing code please
> either go through the git-log to see what license the changes were
> made (haha, good one huh!) or well lets just GPL those new files you
> are creating. The debug print stuff is pretty useless to other kernels
> too as its very specific to Linux.
>
> > > @@ -56,40 +56,12 @@
> > >
> > > #include "base.h"
> > > #include "reg.h"
> > > -
> > > -#define ATH_DEBUG_MODES 0 /* Show found modes in the log?
> > > */ -#define ATH_DUMP_SKB 0 /* show skb contents */
> > > -#define AR_DEBUG 1
> > > +#include "debug.h"
> > >
> > > /* unaligned little endian access */
> > > #define LE_READ_2(_p) (le16_to_cpu(get_unaligned((__le16 *)(_p))))
> > > #define LE_READ_4(_p) (le32_to_cpu(get_unaligned((__le32 *)(_p))))
> > >
> > > -#if AR_DEBUG
> > > -#define DPRINTF(sc, _m, _fmt...) do { \
> > > - if (unlikely(((sc)->debug & (_m)) && net_ratelimit())) \
> > > - printk(KERN_DEBUG _fmt); \
> > > -} while (0)
> > > -#else
> > > -static inline int __attribute__ ((format (printf, 3, 4)))
> > > -DPRINTF(struct ath5k_softc *sc, unsigned int m, const char *fmt, ...)
> > > -{
> > > - return 0;
> > > -}
> > > -#endif
> > > -enum {
> > > - ATH_DEBUG_XMIT = 0x00000001, /* basic xmit operation
> > > */ - ATH_DEBUG_RESET = 0x00000020, /* reset processing */
> > > - ATH_DEBUG_MODE = 0x00000040, /* mode init/setup */ -
> > > ATH_DEBUG_BEACON = 0x00000080, /* beacon handling */ -
> > > ATH_DEBUG_INTR = 0x00001000, /* ISR */
> > > - ATH_DEBUG_BEACON_PROC = 0x00008000, /* beacon ISR proc */
> > > - ATH_DEBUG_CALIBRATE = 0x00010000, /* periodic calibration
> > > */ - ATH_DEBUG_LED = 0x00100000, /* led management */ -
> > > ATH_DEBUG_FATAL = 0x80000000, /* fatal errors */ -
> > > ATH_DEBUG_ANY = 0xffffffff
> > > -};
> > > -
> > > enum {
> > > ATH_LED_TX,
> > > ATH_LED_RX,
> > > @@ -97,73 +69,6 @@ enum {
> > >
> > > static int ath5k_calinterval = 10; /* Calibrate PHY every 10 secs
> > > (TODO: Fixme) */
> > >
> > > -#if AR_DEBUG
> > > -static unsigned int ath5k_debug;
> > > -module_param_named(debug, ath5k_debug, uint, 0);
> > > -#endif
> > > -
> > > -#if AR_DEBUG
> > > -static void ath5k_printrxbuf(struct ath5k_buf *bf, int done)
> > > -{
> > > - struct ath5k_desc *ds = bf->desc;
> > > -
> > > - printk(KERN_DEBUG "R (%p %llx) %08x %08x %08x %08x %08x %08x
> > > %c\n", - ds, (unsigned long long)bf->daddr,
> > > - ds->ds_link, ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > > - ds->ds_hw[0], ds->ds_hw[1],
> > > - !done ? ' ' : (ds->ds_rxstat.rs_status == 0) ? '*' :
> > > '!'); -}
> > > -
> > > -static void ath5k_printtxbuf(struct ath5k_buf *bf, int done)
> > > -{
> > > - struct ath5k_desc *ds = bf->desc;
> > > -
> > > - printk(KERN_DEBUG "T (%p %llx) %08x %08x %08x %08x %08x %08x %08x
> > > " - "%08x %c\n", ds, (unsigned long long)bf->daddr,
> > > ds->ds_link, - ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > > - ds->ds_hw[0], ds->ds_hw[1], ds->ds_hw[2], ds->ds_hw[3],
> > > - !done ? ' ' : (ds->ds_txstat.ts_status == 0) ? '*' :
> > > '!'); -}
> > > -#endif
> > > -
> > > -#if ATH_DUMP_SKB
> > > -static inline void ath5k_dump_skb(struct sk_buff *skb, const char
> > > *prefix) -{
> > > - print_hex_dump_bytes(prefix, DUMP_PREFIX_NONE, skb->data,
> > > - min(200U, skb->len));
> > > -}
> > > -#else
> > > -static inline void ath5k_dump_skb(struct sk_buff *skb, const char
> > > *prefix) {} -#endif
> > > -
> > > -#if ATH_DEBUG_MODES
> > > -static void ath5k_dump_modes(struct ieee80211_hw_mode *modes)
> > > -{
> > > - unsigned int m, i;
> > > -
> > > - for (m = 0; m < NUM_DRIVER_MODES; m++) {
> > > - printk(KERN_DEBUG "Mode %u: channels %d, rates %d\n", m,
> > > - modes[m].num_channels,
> > > modes[m].num_rates); - printk(KERN_DEBUG " channels:\n");
> > > - for (i = 0; i < modes[m].num_channels; i++)
> > > - printk(KERN_DEBUG " %3d %d %.4x %.4x\n",
> > > - modes[m].channels[i].chan,
> > > - modes[m].channels[i].freq,
> > > - modes[m].channels[i].val,
> > > - modes[m].channels[i].flag);
> > > - printk(KERN_DEBUG " rates:\n");
> > > - for (i = 0; i < modes[m].num_rates; i++)
> > > - printk(KERN_DEBUG " %4d %.4x %.4x %.4x\n",
> > > - modes[m].rates[i].rate,
> > > - modes[m].rates[i].val,
> > > - modes[m].rates[i].flags,
> > > - modes[m].rates[i].val2);
> > > - }
> > > -}
> > > -#else
> > > -static inline void ath5k_dump_modes(struct ieee80211_hw_mode *modes)
> > > {} -#endif
> > > -
> > >
> > > /******************\
> > > * Internal defines *
> > > @@ -399,6 +304,8 @@ init_ath5k_pci(void)
> > > {
> > > int ret;
> > >
> > > + ath5k_debug_init();
> > > +
> > > ret = pci_register_driver(&ath5k_pci_drv_id);
> > > if (ret) {
> > > printk(KERN_ERR "ath5k_pci: can't register pci
> > > driver\n"); @@ -412,6 +319,8 @@ static void __exit
> > > exit_ath5k_pci(void)
> > > {
> > > pci_unregister_driver(&ath5k_pci_drv_id);
> > > +
> > > + ath5k_debug_finish();
> > > }
> > >
> > > module_init(init_ath5k_pci);
> > > @@ -519,6 +428,8 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > > goto err_map;
> > > }
> > >
> > > + dev_info(&pdev->dev, "registered as '%s'\n",
> > > wiphy_name(hw->wiphy)); +
> > > /* Initialize driver private data */
> > > SET_IEEE80211_DEV(hw, &pdev->dev);
> > > hw->flags = IEEE80211_HW_RX_INCLUDES_FCS;
> > > @@ -529,13 +440,12 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > > sc->hw = hw;
> > > sc->pdev = pdev;
> > >
> > > + ath5k_debug_init_device(sc);
> > > +
> > > /*
> > > * Mark the device as detached to avoid processing
> > > * interrupts until setup is complete.
> > > */
> > > -#if AR_DEBUG
> > > - sc->debug = ath5k_debug;
> > > -#endif
> > > __set_bit(ATH_STAT_INVALID, sc->status);
> > >
> > > sc->iobase = mem; /* So we can unmap it on detach */
> > > @@ -554,7 +464,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > > /* Setup interrupt handler */
> > > ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
> > > if (ret) {
> > > - dev_err(&pdev->dev, "request_irq failed\n");
> > > + AR5K_ERR(sc, "request_irq failed\n");
> > > goto err_free;
> > > }
> > >
> > > @@ -570,7 +480,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > > if (ret)
> > > goto err_ah;
> > >
> > > - dev_info(&pdev->dev, "Atheros AR%s chip found (MAC: 0x%x, PHY:
> > > 0x%x)\n", + AR5K_INFO(sc, "Atheros AR%s chip found (MAC: 0x%x, PHY:
> > > 0x%x)\n", ath5k_chip_name(AR5K_VERSION_VER,sc->ah->ah_mac_srev),
> > > sc->ah->ah_mac_srev,
> > > sc->ah->ah_phy_revision);
> > > @@ -580,27 +490,28 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > > if(sc->ah->ah_radio_5ghz_revision &&
> > > !sc->ah->ah_radio_2ghz_revision) { /* No 5GHz support -> report 2GHz
> > > radio */ if(!test_bit(MODE_IEEE80211A,
> > > sc->ah->ah_capabilities.cap_mode)){ -
> > > dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n", +
> > > AR5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
> > > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > > sc->ah->ah_radio_5ghz_revision); /* No 2GHz support (5110 and some 5Ghz
> > > only cards) -> report 5Ghz radio */ } else
> > > if(!test_bit(MODE_IEEE80211B, sc->ah->ah_capabilities.cap_mode)){ -
> > > dev_info(&pdev->dev, "RF%s 5GHz radio found
> > > (0x%x)\n", + AR5K_INFO(sc, "RF%s 5GHz radio
> > > found (0x%x)\n",
>
> See for example, here I wouldn't mind leaving dev_info, etc, with our
> own macros.
>
> > >
> > > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > > sc->ah->ah_radio_5ghz_revision); /* Multiband radio */
> > > } else {
> > > - dev_info(&pdev->dev, "RF%s multiband
> > > radio found (0x%x)\n", + AR5K_INFO(sc,
> > > "RF%s multiband radio found" + "
> > > (0x%x)\n",
> > >
> > > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > > sc->ah->ah_radio_5ghz_revision); }
> > > }
> > > /* Multi chip radio (RF5111 - RF2111) -> report both
> > > 2GHz/5GHz radios */ else if(sc->ah->ah_radio_5ghz_revision &&
> > > sc->ah->ah_radio_2ghz_revision){ -
> > > dev_info(&pdev->dev, "RF%s 5GHz radio found (0x%x)\n",
> > > + AR5K_INFO(sc, "RF%s 5GHz radio found (0x%x)\n",
> > >
> > > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > > sc->ah->ah_radio_5ghz_revision); -
> > > dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n", +
> > > AR5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
> > > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_2ghz_revision),
> > > sc->ah->ah_radio_2ghz_revision); }
> > > @@ -634,6 +545,7 @@ ath5k_pci_remove(struct pci_dev *pdev)
> > > struct ieee80211_hw *hw = pci_get_drvdata(pdev);
> > > struct ath5k_softc *sc = hw->priv;
> > >
> > > + ath5k_debug_finish_device(sc);
> > > ath5k_detach(pdev, hw);
> > > ath5k_hw_detach(sc->ah);
> > > free_irq(pdev->irq, sc);
> > > @@ -710,7 +622,7 @@ ath5k_attach(struct pci_dev *pdev, struct
> > > ieee80211_hw *hw) unsigned int i;
> > > int ret;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_ANY, "%s: devid 0x%x\n", __func__,
> > > pdev->device); + AR5K_DBG(sc, ATH_DEBUG_ANY, "devid 0x%x\n",
> > > pdev->device);
> > >
> > > /*
> > > * Check if the MAC has multi-rate retry support.
> > > @@ -737,7 +649,7 @@ ath5k_attach(struct pci_dev *pdev, struct
> > > ieee80211_hw *hw) */
> > > ret = ath5k_getchannels(hw);
> > > if (ret) {
> > > - dev_err(&pdev->dev, "can't get channels\n");
> > > + AR5K_ERR(sc, "can't get channels\n");
> > > goto err;
> > > }
> > >
> > > @@ -752,7 +664,7 @@ ath5k_attach(struct pci_dev *pdev, struct
> > > ieee80211_hw *hw) */
> > > ret = ath5k_desc_alloc(sc, pdev);
> > > if (ret) {
> > > - dev_err(&pdev->dev, "can't allocate descriptors\n");
> > > + AR5K_ERR(sc, "can't allocate descriptors\n");
> > > goto err;
> > > }
> > >
> > > @@ -764,14 +676,14 @@ ath5k_attach(struct pci_dev *pdev, struct
> > > ieee80211_hw *hw) */
> > > ret = ath5k_beaconq_setup(ah);
> > > if (ret < 0) {
> > > - dev_err(&pdev->dev, "can't setup a beacon xmit queue\n");
> > > + AR5K_ERR(sc, "can't setup a beacon xmit queue\n");
> > > goto err_desc;
> > > }
> > > sc->bhalq = ret;
> > >
> > > sc->txq = ath5k_txq_setup(sc, AR5K_TX_QUEUE_DATA,
> > > AR5K_WME_AC_BK); if (IS_ERR(sc->txq)) {
> > > - dev_err(&pdev->dev, "can't setup xmit queue\n");
> > > + AR5K_ERR(sc, "can't setup xmit queue\n");
> > > ret = PTR_ERR(sc->txq);
> > > goto err_bhal;
> > > }
> > > @@ -810,7 +722,7 @@ ath5k_attach(struct pci_dev *pdev, struct
> > > ieee80211_hw *hw)
> > >
> > > ret = ieee80211_register_hw(hw);
> > > if (ret) {
> > > - dev_err(&pdev->dev, "can't register ieee80211 hw\n");
> > > + AR5K_ERR(sc, "can't register ieee80211 hw\n");
> > > goto err_queues;
> > > }
> > >
> > > @@ -944,7 +856,7 @@ ath5k_copy_channels(struct ath5k_hw *ah,
> > > chfreq = CHANNEL_2GHZ;
> > > break;
> > > default:
> > > - printk(KERN_WARNING "bad mode, not copying channels\n");
> > > + AR5K_WARN(ah->ah_sc, "bad mode, not copying channels\n");
> > > return 0;
> > > }
> > >
> > > @@ -998,7 +910,7 @@ ath5k_register_mode(struct ieee80211_hw *hw, u8 m)
> > > continue;
> > > ret = ieee80211_register_hwmode(hw, &modes[i]);
> > > if (ret) {
> > > - printk(KERN_ERR "can't register hwmode %u\n", m);
> > > + AR5K_ERR(sc, "can't register hwmode %u\n", m);
> > > return ret;
> > > }
> > > return 0;
> > > @@ -1061,7 +973,7 @@ ath5k_getchannels(struct ieee80211_hw *hw)
> > > REGISTER_MODE(MODE_IEEE80211B);
> > > REGISTER_MODE(MODE_IEEE80211A);
> > >
> > > - ath5k_dump_modes(modes);
> > > + ath5k_debug_dump_modes(sc, modes);
> > >
> > > return ret;
> > > }
> > > @@ -1078,8 +990,8 @@ ath5k_chan_set(struct ath5k_softc *sc, struct
> > > ieee80211_channel *chan) struct ath5k_hw *ah = sc->ah;
> > > int ret;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: %u (%u MHz) -> %u (%u MHz)\n",
> > > - __func__, sc->curchan->chan, sc->curchan->freq,
> > > + AR5K_DBG(sc, ATH_DEBUG_RESET, "%u (%u MHz) -> %u (%u MHz)\n",
> > > + sc->curchan->chan, sc->curchan->freq,
> > > chan->chan, chan->freq);
> > >
> > > if (chan->freq != sc->curchan->freq || chan->val !=
> > > sc->curchan->val) { @@ -1094,7 +1006,7 @@ ath5k_chan_set(struct
> > > ath5k_softc *sc, struct ieee80211_channel *chan) ath5k_rx_stop(sc);
> > > /* turn off frame recv */ ret = ath5k_hw_reset(ah, sc->opmode,
> > > chan, true); if (ret) {
> > > - printk(KERN_ERR "%s: unable to reset channel %u "
> > > + AR5K_ERR(sc, "%s: unable to reset channel %u "
> > > "(%u Mhz)\n", __func__, chan->chan,
> > > chan->freq); return ret;
> > > }
> > > @@ -1106,7 +1018,7 @@ ath5k_chan_set(struct ath5k_softc *sc, struct
> > > ieee80211_channel *chan) */
> > > ret = ath5k_rx_start(sc);
> > > if (ret) {
> > > - printk(KERN_ERR "%s: unable to restart recv
> > > logic\n", + AR5K_ERR(sc, "%s: unable to restart
> > > recv logic\n", __func__);
> > > return ret;
> > > }
> > > @@ -1208,7 +1120,7 @@ ath5k_mode_setup(struct ath5k_softc *sc)
> > > ath5k_hw_set_opmode(ah);
> > >
> > > ath5k_hw_set_mcast_filter(ah, 0, 0);
> > > - DPRINTF(sc, ATH_DEBUG_MODE, "%s: RX filter 0x%x\n", __func__,
> > > rfilt); + AR5K_DBG(sc, ATH_DEBUG_MODE, "RX filter 0x%x\n", rfilt);
> > > }
> > >
> > >
> > > @@ -1232,19 +1144,19 @@ ath5k_desc_alloc(struct ath5k_softc *sc, struct
> > > pci_dev *pdev) (ATH_TXBUF + ATH_RXBUF + ATH_BCBUF + 1);
> > > sc->desc = pci_alloc_consistent(pdev, sc->desc_len,
> > > &sc->desc_daddr); if (sc->desc == NULL) {
> > > - dev_err(&pdev->dev, "can't allocate descriptors\n");
> > > + AR5K_ERR(sc, "can't allocate descriptors\n");
> > > ret = -ENOMEM;
> > > goto err;
> > > }
> > > ds = sc->desc;
> > > da = sc->desc_daddr;
> > > - DPRINTF(sc, ATH_DEBUG_ANY, "%s: DMA map: %p (%zu) -> %llx\n",
> > > - __func__, ds, sc->desc_len, (unsigned long
> > > long)sc->desc_daddr); + AR5K_DBG(sc, ATH_DEBUG_ANY, "DMA map: %p
> > > (%zu) -> %llx\n", + ds, sc->desc_len, (unsigned long
> > > long)sc->desc_daddr);
> > >
> > > bf = kcalloc(1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF,
> > > sizeof(struct ath5k_buf), GFP_KERNEL);
> > > if (bf == NULL) {
> > > - dev_err(&pdev->dev, "can't allocate bufptr\n");
> > > + AR5K_ERR(sc, "can't allocate bufptr\n");
> > > ret = -ENOMEM;
> > > goto err_free;
> > > }
> > > @@ -1320,7 +1232,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct
> > > ath5k_buf *bf) */
> > > skb = dev_alloc_skb(sc->rxbufsize + sc->cachelsz - 1);
> > > if (unlikely(skb == NULL)) {
> > > - printk(KERN_ERR "ath: can't alloc skbuff of size
> > > %u\n", + AR5K_ERR(sc, "can't alloc skbuff of size
> > > %u\n", sc->rxbufsize + sc->cachelsz - 1); return -ENOMEM;
> > > }
> > > @@ -1337,7 +1249,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct
> > > ath5k_buf *bf) bf->skbaddr = pci_map_single(sc->pdev,
> > > skb->data, sc->rxbufsize, PCI_DMA_FROMDEVICE);
> > > if (unlikely(pci_dma_mapping_error(bf->skbaddr))) {
> > > - printk(KERN_ERR "%s: DMA mapping failed\n",
> > > __func__); + AR5K_ERR(sc, "%s: DMA mapping
> > > failed\n", __func__); dev_kfree_skb(skb);
> > > bf->skb = NULL;
> > > return -ENOMEM;
> > > @@ -1482,7 +1394,7 @@ ath5k_txq_setup(struct ath5k_softc *sc,
> > > return ERR_PTR(qnum);
> > > }
> > > if (qnum >= ARRAY_SIZE(sc->txqs)) {
> > > - printk(KERN_ERR "hw qnum %u out of range, max %tu!\n",
> > > + AR5K_ERR(sc, "hw qnum %u out of range, max %tu!\n",
> > > qnum, ARRAY_SIZE(sc->txqs));
> > > ath5k_hw_release_tx_queue(ah, qnum);
> > > return ERR_PTR(-EINVAL);
> > > @@ -1535,7 +1447,7 @@ ath5k_beaconq_config(struct ath5k_softc *sc)
> > >
> > > ret = ath5k_hw_setup_tx_queueprops(ah, sc->bhalq, &qi);
> > > if (ret) {
> > > - printk(KERN_ERR "%s: unable to update parameters for
> > > beacon " + AR5K_ERR(sc, "%s: unable to update parameters
> > > for beacon " "hardware queue!\n", __func__);
> > > return ret;
> > > }
> > > @@ -1554,11 +1466,9 @@ ath5k_txq_drainq(struct ath5k_softc *sc, struct
> > > ath5k_txq *txq) */
> > > spin_lock_bh(&txq->lock);
> > > list_for_each_entry_safe(bf, bf0, &txq->q, list) {
> > > -#if AR_DEBUG
> > > - if (sc->debug & ATH_DEBUG_RESET)
> > > - ath5k_printtxbuf(bf,
> > > !sc->ah->ah_proc_tx_desc(sc->ah, -
> > > bf->desc));
> > > -#endif
> > > + ath5k_debug_printtxbuf(sc, bf,
> > > !sc->ah->ah_proc_tx_desc(sc->ah, +
> > > bf->desc));
> > > +
> > > ath5k_txbuf_free(sc, bf);
> > >
> > > spin_lock_bh(&sc->txbuflock);
> > > @@ -1584,13 +1494,13 @@ ath5k_txq_cleanup(struct ath5k_softc *sc)
> > > if (likely(!test_bit(ATH_STAT_INVALID, sc->status))) {
> > > /* don't touch the hardware if marked invalid */
> > > (void)ath5k_hw_stop_tx_dma(ah, sc->bhalq);
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: beacon queue %x\n",
> > > __func__, + AR5K_DBG(sc, ATH_DEBUG_RESET, "beacon queue
> > > %x\n", ath5k_hw_get_tx_buf(ah, sc->bhalq));
> > > for (i = 0; i < ARRAY_SIZE(sc->txqs); i++)
> > > if (sc->txqs[i].setup) {
> > > ath5k_hw_stop_tx_dma(ah,
> > > sc->txqs[i].qnum); - DPRINTF(sc,
> > > ATH_DEBUG_RESET, "%s: txq [%u] %x, " -
> > > "link %p\n", __func__,
> > > + AR5K_DBG(sc, ATH_DEBUG_RESET, "txq [%u]
> > > %x, " + "link %p\n",
> > > sc->txqs[i].qnum,
> > > ath5k_hw_get_tx_buf(ah,
> > >
> > > sc->txqs[i].qnum), @@ -1636,8 +1546,8 @@ ath5k_rx_start(struct
> > > ath5k_softc *sc)
> > >
> > > sc->rxbufsize = roundup(IEEE80211_MAX_LEN, sc->cachelsz);
> > >
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: cachelsz %u rxbufsize %u\n",
> > > - __func__, sc->cachelsz, sc->rxbufsize);
> > > + AR5K_DBG(sc, ATH_DEBUG_RESET, "cachelsz %u rxbufsize %u\n",
> > > + sc->cachelsz, sc->rxbufsize);
> > >
> > > sc->rxlink = NULL;
> > >
> > > @@ -1674,25 +1584,9 @@ ath5k_rx_stop(struct ath5k_softc *sc)
> > > ath5k_hw_set_rx_filter(ah, 0); /* clear recv filter */
> > > ath5k_hw_stop_rx_dma(ah); /* disable DMA engine */
> > > mdelay(3); /* 3ms is long enough for 1 frame
> > > */ -#if AR_DEBUG
> > > - if (unlikely(sc->debug & (ATH_DEBUG_RESET | ATH_DEBUG_FATAL))) {
> > > - struct ath5k_desc *ds;
> > > - struct ath5k_buf *bf;
> > > - int status;
> > > -
> > > - printk(KERN_DEBUG "%s: rx queue %x, link %p\n", __func__,
> > > - ath5k_hw_get_rx_buf(ah), sc->rxlink);
> > > -
> > > - spin_lock_bh(&sc->rxbuflock);
> > > - list_for_each_entry(bf, &sc->rxbuf, list) {
> > > - ds = bf->desc;
> > > - status = ah->ah_proc_rx_desc(ah, ds);
> > > - if (!status || (sc->debug & ATH_DEBUG_FATAL))
> > > - ath5k_printrxbuf(bf, status == 0);
> > > - }
> > > - spin_unlock_bh(&sc->rxbuflock);
> > > - }
> > > -#endif
> > > +
> > > + ath5k_debug_printrxbuffs(sc, ah);
> > > +
> > > sc->rxlink = NULL; /* just in case */
> > > }
> > >
> > > @@ -1739,8 +1633,7 @@ ath5k_tasklet_rx(unsigned long data)
> > > spin_lock(&sc->rxbuflock);
> > > do {
> > > if (unlikely(list_empty(&sc->rxbuf))) {
> > > - if (net_ratelimit())
> > > - printk(KERN_WARNING "ath: empty rx buf
> > > pool\n"); + AR5K_WARN(sc, "empty rx buf pool\n");
> > > break;
> > > }
> > > bf = list_first_entry(&sc->rxbuf, struct ath5k_buf,
> > > list); @@ -1759,15 +1652,12 @@ ath5k_tasklet_rx(unsigned long data)
> > > if (unlikely(ret == -EINPROGRESS))
> > > break;
> > > else if (unlikely(ret)) {
> > > - if (net_ratelimit())
> > > - printk(KERN_ERR "ath: error in processing
> > > rx " - "descriptor\n");
> > > + AR5K_ERR(sc, "error in processing rx
> > > descriptor\n"); return;
> > > }
> > >
> > > if (unlikely(ds->ds_rxstat.rs_more)) {
> > > - if (net_ratelimit())
> > > - printk(KERN_INFO "ath: unsupported
> > > jumbo\n"); + AR5K_WARN(sc, "unsupported jumbo\n");
> > > goto next;
> > > }
> > >
> > > @@ -1836,7 +1726,7 @@ accept:
> > > rxs.rate = ds->ds_rxstat.rs_rate;
> > > rxs.flag |= ath5k_rx_decrypted(sc, ds, skb);
> > >
> > > - ath5k_dump_skb(skb, "RX ");
> > > + ath5k_debug_dump_skb(sc, skb, "RX ", 0);
> > >
> > > __ieee80211_rx(sc->hw, skb, &rxs);
> > > sc->led_rxrate = ds->ds_rxstat.rs_rate;
> > > @@ -1874,8 +1764,8 @@ ath5k_tx_processq(struct ath5k_softc *sc, struct
> > > ath5k_txq *txq) if (unlikely(ret == -EINPROGRESS))
> > > break;
> > > else if (unlikely(ret)) {
> > > - printk(KERN_ERR "ath: error %d while processing "
> > > - "queue %u\n", ret, txq->qnum);
> > > + AR5K_ERR(sc, "error %d while processing queue
> > > %u\n", + ret, txq->qnum);
> > > break;
> > > }
> > >
> > > @@ -1946,11 +1836,11 @@ ath5k_beacon_setup(struct ath5k_softc *sc,
> > > struct ath5k_buf *bf,
> > >
> > > bf->skbaddr = pci_map_single(sc->pdev, skb->data, skb->len,
> > > PCI_DMA_TODEVICE);
> > > - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: skb %p [data %p len %u] "
> > > - "skbaddr %llx\n", __func__, skb, skb->data,
> > > skb->len, + AR5K_DBG(sc, ATH_DEBUG_BEACON, "skb %p [data %p len %u]
> > > " + "skbaddr %llx\n", skb, skb->data, skb->len,
> > > (unsigned long long)bf->skbaddr);
> > > if (pci_dma_mapping_error(bf->skbaddr)) {
> > > - printk(KERN_ERR "ath: beacon DMA mapping failed\n");
> > > + AR5K_ERR(sc, "beacon DMA mapping failed\n");
> > > return -EIO;
> > > }
> > >
> > > @@ -2002,12 +1892,11 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > > struct ath5k_buf *bf = sc->bbuf;
> > > struct ath5k_hw *ah = sc->ah;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s\n", __func__);
> > > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC, "in beacon_send\n");
> > >
> > > if (unlikely(bf->skb == NULL || sc->opmode ==
> > > IEEE80211_IF_TYPE_STA || sc->opmode == IEEE80211_IF_TYPE_MNTR)) { -
> > > printk(KERN_WARNING "ath: bf=%p bf_skb=%p\n", bf, -
> > > bf ? bf->skb : NULL);
> > > + AR5K_WARN(sc, "bf=%p bf_skb=%p\n", bf, bf ? bf->skb :
> > > NULL); return;
> > > }
> > > /*
> > > @@ -2019,21 +1908,20 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > > */
> > > if (unlikely(ath5k_hw_num_tx_pending(ah, sc->bhalq) != 0)) {
> > > sc->bmisscount++;
> > > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC,
> > > - "%s: missed %u consecutive beacons\n",
> > > - __func__, sc->bmisscount);
> > > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC,
> > > + "missed %u consecutive beacons\n",
> > > sc->bmisscount); if (sc->bmisscount > 3) { /* NB: 3 is a
> > > guess */ - DPRINTF(sc, ATH_DEBUG_BEACON_PROC,
> > > - "%s: stuck beacon time (%u missed)\n",
> > > - __func__, sc->bmisscount);
> > > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC,
> > > + "stuck beacon time (%u missed)\n",
> > > + sc->bmisscount);
> > > tasklet_schedule(&sc->restq);
> > > }
> > > return;
> > > }
> > > if (unlikely(sc->bmisscount != 0)) {
> > > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC,
> > > - "%s: resume beacon xmit after %u misses\n",
> > > - __func__, sc->bmisscount);
> > > + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC,
> > > + "resume beacon xmit after %u misses\n",
> > > + sc->bmisscount);
> > > sc->bmisscount = 0;
> > > }
> > >
> > > @@ -2043,8 +1931,7 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > > * are still pending on the queue.
> > > */
> > > if (unlikely(ath5k_hw_stop_tx_dma(ah, sc->bhalq))) {
> > > - printk(KERN_WARNING "ath: beacon queue %u didn't
> > > stop?\n", - sc->bhalq);
> > > + AR5K_WARN(sc, "beacon queue %u didn't stop?\n",
> > > sc->bhalq); /* NB: hw still stops DMA, so proceed */
> > > }
> > > pci_dma_sync_single_for_cpu(sc->pdev, bf->skbaddr, bf->skb->len,
> > > @@ -2052,8 +1939,8 @@ ath5k_beacon_send(struct ath5k_softc *sc)
> > >
> > > ath5k_hw_put_tx_buf(ah, sc->bhalq, bf->daddr);
> > > ath5k_hw_tx_start(ah, sc->bhalq);
> > > - DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: TXDP[%u] = %llx (%p)\n",
> > > - __func__, sc->bhalq, (unsigned long long)bf->daddr,
> > > bf->desc); + AR5K_DBG(sc, ATH_DEBUG_BEACON_PROC, "TXDP[%u] = %llx
> > > (%p)\n", + sc->bhalq, (unsigned long long)bf->daddr,
> > > bf->desc);
> > >
> > > sc->bsent++;
> > > }
> > > @@ -2089,8 +1976,8 @@ ath5k_beacon_config(struct ath5k_softc *sc)
> > > tsf = ath5k_hw_get_tsf64(ah);
> > > tsftu = TSF_TO_TU((u32)(tsf >> 32), (u32)tsf);
> > >
> > > - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: intval %u hw tsftu %u\n",
> > > __func__, - intval, tsftu);
> > > + AR5K_DBG(sc, ATH_DEBUG_BEACON, "intval %u hw tsftu %u\n",
> > > + intval, tsftu);
> > >
> > > if (sc->opmode == IEEE80211_IF_TYPE_STA ||
> > > (sc->opmode == IEEE80211_IF_TYPE_IBSS &&
> > > @@ -2109,8 +1996,8 @@ ath5k_beacon_config(struct ath5k_softc *sc)
> > > */
> > > nexttbtt = tsftu + 2 * intval;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u "
> > > - "intval %u\n", __func__, nexttbtt,
> > > intval); + AR5K_DBG(sc, ATH_DEBUG_BEACON, "nexttbtt
> > > %u " + "intval %u\n", nexttbtt, intval);
> > >
> > > /*
> > > * In IBSS mode enable the beacon timers but only
> > > @@ -2166,7 +2053,7 @@ ath5k_init(struct ath5k_softc *sc)
> > >
> > > mutex_lock(&sc->lock);
> > >
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: mode %d\n", __func__,
> > > sc->opmode); + AR5K_DBG(sc, ATH_DEBUG_RESET, "mode %d\n",
> > > sc->opmode);
> > >
> > > /*
> > > * Stop anything previously setup. This is safe
> > > @@ -2184,7 +2071,7 @@ ath5k_init(struct ath5k_softc *sc)
> > > sc->curchan = sc->hw->conf.chan;
> > > ret = ath5k_hw_reset(sc->ah, sc->opmode, sc->curchan, false);
> > > if (ret) {
> > > - printk(KERN_ERR "unable to reset hardware: %d\n", ret);
> > > + AR5K_ERR(sc, "unable to reset hardware: %d\n", ret);
> > > goto done;
> > > }
> > > /*
> > > @@ -2228,7 +2115,7 @@ ath5k_stop_locked(struct ath5k_softc *sc)
> > > {
> > > struct ath5k_hw *ah = sc->ah;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: invalid %u\n", __func__,
> > > + AR5K_DBG(sc, ATH_DEBUG_RESET, "invalid %u\n",
> > > test_bit(ATH_STAT_INVALID, sc->status));
> > >
> > > /*
> > > @@ -2295,11 +2182,11 @@ ath5k_stop_hw(struct ath5k_softc *sc)
> > > * don't put newer MAC revisions > 7.8 to sleep
> > > because * of the above mentioned problems
> > > */
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "%s: mac version >
> > > 7.8, " - "not putting device to sleep\n",
> > > __func__); + AR5K_DBG(sc, ATH_DEBUG_RESET, "mac
> > > version > 7.8, " + "not putting device to
> > > sleep\n"); } else {
> > > - DPRINTF(sc, ATH_DEBUG_RESET,
> > > - "%s: putting device to full sleep\n",
> > > __func__); + AR5K_DBG(sc, ATH_DEBUG_RESET,
> > > + "putting device to full sleep\n");
> > > ath5k_hw_set_power(sc->ah, AR5K_PM_FULL_SLEEP,
> > > true, 0); }
> > > }
> > > @@ -2331,7 +2218,7 @@ ath5k_intr(int irq, void *dev_id)
> > > * value to insure we only process bits we requested.
> > > */
> > > ath5k_hw_get_isr(ah, &status); /* NB: clears IRQ
> > > too */ - DPRINTF(sc, ATH_DEBUG_INTR, "%s: status
> > > 0x%x/0x%x\n", __func__, + AR5K_DBG(sc, ATH_DEBUG_INTR,
> > > "status 0x%x/0x%x\n", status, sc->imask);
> > > status &= sc->imask; /* discard unasked for bits */
> > > if (unlikely(status & AR5K_INT_FATAL)) {
> > > @@ -2376,9 +2263,8 @@ ath5k_intr(int irq, void *dev_id)
> > > }
> > > } while (ath5k_hw_is_intr_pending(ah) && counter-- > 0);
> > >
> > > - if (unlikely(!counter && net_ratelimit()))
> > > - printk(KERN_WARNING "ath: too many interrupts, giving up
> > > for " - "now\n");
> > > + if (unlikely(!counter))
> > > + AR5K_WARN(sc, "too many interrupts, giving up for
> > > now\n");
> > >
> > > return IRQ_HANDLED;
> > > }
> > > @@ -2407,7 +2293,7 @@ ath5k_calibrate(unsigned long data)
> > > struct ath5k_softc *sc = (void *)data;
> > > struct ath5k_hw *ah = sc->ah;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_CALIBRATE, "ath: channel %u/%x\n",
> > > + AR5K_DBG(sc, ATH_DEBUG_CALIBRATE, "channel %u/%x\n",
> > > sc->curchan->chan, sc->curchan->val);
> > >
> > > if (ath5k_hw_get_rf_gain(ah) == AR5K_RFGAIN_NEED_CHANGE) {
> > > @@ -2415,11 +2301,11 @@ ath5k_calibrate(unsigned long data)
> > > * Rfgain is out of bounds, reset the chip
> > > * to load new gain values.
> > > */
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "calibration, resetting\n");
> > > + AR5K_DBG(sc, ATH_DEBUG_RESET, "calibration,
> > > resetting\n"); ath5k_reset(sc->hw);
> > > }
> > > if (ath5k_hw_phy_calibrate(ah, sc->curchan))
> > > - printk(KERN_ERR "ath: calibration of channel %u
> > > failed\n", + AR5K_ERR(sc, "calibration of channel %u
> > > failed\n", sc->curchan->chan);
> > >
> > > mod_timer(&sc->calib_tim, round_jiffies(jiffies +
> > > @@ -2453,7 +2339,7 @@ static void
> > > ath5k_led_blink(struct ath5k_softc *sc, unsigned int on,
> > > unsigned int off)
> > > {
> > > - DPRINTF(sc, ATH_DEBUG_LED, "%s: on %u off %u\n", __func__, on,
> > > off); + AR5K_DBG(sc, ATH_DEBUG_LED, "on %u off %u\n", on, off);
> > > ath5k_hw_set_gpio(sc->ah, sc->led_pin, sc->led_on);
> > > __set_bit(ATH_STAT_LEDBLINKING, sc->status);
> > > __clear_bit(ATH_STAT_LEDENDBLINK, sc->status);
> > > @@ -2497,10 +2383,10 @@ ath5k_tx(struct ieee80211_hw *hw, struct
> > > sk_buff *skb, int hdrlen;
> > > int pad;
> > >
> > > - ath5k_dump_skb(skb, "TX ");
> > > + ath5k_debug_dump_skb(sc, skb, "TX ", 1);
> > >
> > > if (sc->opmode == IEEE80211_IF_TYPE_MNTR)
> > > - DPRINTF(sc, ATH_DEBUG_XMIT, "tx in monitor (scan?)\n");
> > > + AR5K_DBG(sc, ATH_DEBUG_XMIT, "tx in monitor (scan?)\n");
> > >
> > > /*
> > > * the hardware expects the header padded to 4 byte boundaries
> > > @@ -2510,10 +2396,9 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff
> > > *skb, if (hdrlen & 3) {
> > > pad = hdrlen % 4;
> > > if (skb_headroom(skb) < pad) {
> > > - if (net_ratelimit())
> > > - printk(KERN_ERR "ath: tx hdrlen not %%4:
> > > %d " - "not enough headroom to pad
> > > %d\n", - hdrlen, pad);
> > > + AR5K_ERR(sc, "tx hdrlen not %%4: %d "
> > > + "not enough headroom to pad %d\n",
> > > + hdrlen, pad);
> > > return -1;
> > > }
> > > skb_push(skb, pad);
> > > @@ -2524,9 +2409,8 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff
> > > *skb,
> > >
> > > spin_lock_irqsave(&sc->txbuflock, flags);
> > > if (list_empty(&sc->txbuf)) {
> > > - if (net_ratelimit())
> > > - printk(KERN_ERR "ath: no further txbuf available,
> > > " - "dropping packet\n");
> > > + AR5K_ERR(sc, "no further txbuf available, "
> > > + "dropping packet\n");
> > > spin_unlock_irqrestore(&sc->txbuflock, flags);
> > > ieee80211_stop_queue(hw, ctl->queue);
> > > return -1;
> > > @@ -2560,7 +2444,7 @@ ath5k_reset(struct ieee80211_hw *hw)
> > > struct ath5k_hw *ah = sc->ah;
> > > int ret;
> > >
> > > - DPRINTF(sc, ATH_DEBUG_RESET, "resetting\n");
> > > + AR5K_DBG(sc, ATH_DEBUG_RESET, "resetting\n");
> > > /*
> > > * Convert to a hw channel description with the flags
> > > * constrained to reflect the current operating mode.
> > > @@ -2573,14 +2457,14 @@ ath5k_reset(struct ieee80211_hw *hw)
> > >
> > > ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true);
> > > if (unlikely(ret)) {
> > > - printk(KERN_ERR "ath: can't reset hardware (%d)\n", ret);
> > > + AR5K_ERR(sc, "can't reset hardware (%d)\n", ret);
> > > goto err;
> > > }
> > > ath5k_update_txpow(sc);
> > >
> > > ret = ath5k_rx_start(sc);
> > > if (unlikely(ret)) {
> > > - printk(KERN_ERR "ath: can't start recv logic\n");
> > > + AR5K_ERR(sc, "can't start recv logic\n");
> > > goto err;
> > > }
> > > /*
> > > @@ -2845,7 +2729,7 @@ ath5k_set_key(struct ieee80211_hw *hw, enum
> > > set_key_cmd cmd, case SET_KEY:
> > > ret = ath5k_hw_set_key(sc->ah, key->keyidx, key, addr);
> > > if (ret) {
> > > - printk(KERN_ERR "ath: can't set the key\n");
> > > + AR5K_ERR(sc, "can't set the key\n");
> > > goto unlock;
> > > }
> > > __set_bit(key->keyidx, sc->keymap);
> > > @@ -2910,7 +2794,7 @@ ath5k_beacon_update(struct ieee80211_hw *hw,
> > > struct sk_buff *skb, struct ath5k_softc *sc = hw->priv;
> > > int ret;
> > >
> > > - ath5k_dump_skb(skb, "BC ");
> > > + ath5k_debug_dump_skb(sc, skb, "BC ", 1);
> > >
> > > mutex_lock(&sc->lock);
> > >
> > > diff --git a/drivers/net/wireless/ath5k/base.h
> > > b/drivers/net/wireless/ath5k/base.h index c13e54b..94e71ca 100644
> > > --- a/drivers/net/wireless/ath5k/base.h
> > > +++ b/drivers/net/wireless/ath5k/base.h
> > > @@ -100,7 +100,9 @@ struct ath5k_softc {
> > > enum ieee80211_if_types opmode;
> > > struct ath5k_hw *ah; /* Atheros HW */
> > >
> > > - int debug;
> > > + unsigned int debug;
> > > + struct dentry *debugfs_phydir;
> > > + struct dentry *debugfs_debug;
> > >
> > > struct ath5k_buf *bufptr; /* allocated buffer ptr
> > > */ struct ath5k_desc *desc; /* TX/RX descriptors */ diff
> > > --git a/drivers/net/wireless/ath5k/debug.c
> > > b/drivers/net/wireless/ath5k/debug.c new file mode 100644
> > > index 0000000..ee9ec69
> > > --- /dev/null
> > > +++ b/drivers/net/wireless/ath5k/debug.c
> > > @@ -0,0 +1,256 @@
> > > +/*
> > > + * Copyright (c) 2004-2007 Reyk Floeter <[email protected]>
> > > + * Copyright (c) 2006-2007 Nick Kossifidis <[email protected]>
>
> You're adding unique code (debugfs stuff), you should add your
> Copyright entry here. But note that this will look very different if
> this is GPL'd. Please refer to SFLC's guidelines if you are to GPL
> these files (probably going to be needed).
>
> > > + *
> > > + * Permission to use, copy, modify, and distribute this software for
> > > any + * purpose with or without fee is hereby granted, provided that
> > > the above + * copyright notice and this permission notice appear in all
> > > copies. + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
> > > WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
> > > WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
> > > AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR
> > > CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS
> > > OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT,
> > > NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN
> > > CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */
> > > +
> > > +#include "debug.h"
> > > +
> > > +#if AR5K_DEBUG
> > > +
> > > +#include "reg.h"
> > > +
> > > +static unsigned int ath5k_debug;
> > > +
> > > +module_param_named(debug, ath5k_debug, uint, 0);
> > > +
> > > +static struct dentry *ath5k_global_debugfs;
> > > +
> > > +void
> > > +ath5k_debug_init(void)
> > > +{
> > > + ath5k_global_debugfs = debugfs_create_dir("ath5k", NULL);
> > > +}
> > > +
> > > +void
> > > +ath5k_debug_init_device(struct ath5k_softc *sc)
> > > +{
> > > + sc->debug = ath5k_debug;
> > > + sc->debugfs_phydir =
> > > debugfs_create_dir(wiphy_name(sc->hw->wiphy), +
> > > ath5k_global_debugfs);
> > > + sc->debugfs_debug = debugfs_create_u32("debug",
> > > + 0666, sc->debugfs_phydir, &sc->debug);
> > > +}
>
> Very nice!
>
> > > +void
> > > +ath5k_debug_finish(void)
> > > +{
> > > + debugfs_remove(ath5k_global_debugfs);
> > > +}
> > > +
> > > +void
> > > +ath5k_debug_finish_device(struct ath5k_softc *sc)
> > > +{
> > > + debugfs_remove(sc->debugfs_debug);
> > > + debugfs_remove(sc->debugfs_phydir);
> > > +}
> > > +
> > > +void
> > > +ath5k_debug_dump_modes(struct ath5k_softc *sc, struct
> > > ieee80211_hw_mode *modes) +{
> > > + unsigned int m, i;
> > > +
> > > + if (likely(!(sc->debug & ATH_DEBUG_DUMPMODES)))
> > > + return;
> > > +
> > > + for (m = 0; m < NUM_DRIVER_MODES; m++) {
> > > + printk(KERN_DEBUG "Mode %u: channels %d, rates %d\n", m,
> > > + modes[m].num_channels,
> > > modes[m].num_rates); + printk(KERN_DEBUG " channels:\n");
>
> How about dev_dbg instead?
>
> > > + for (i = 0; i < modes[m].num_channels; i++)
> > > + printk(KERN_DEBUG " %3d %d %.4x %.4x\n",
> > > + modes[m].channels[i].chan,
> > > + modes[m].channels[i].freq,
> > > + modes[m].channels[i].val,
> > > + modes[m].channels[i].flag);
> > > + printk(KERN_DEBUG " rates:\n");
> > > + for (i = 0; i < modes[m].num_rates; i++)
> > > + printk(KERN_DEBUG " %4d %.4x %.4x %.4x\n",
> > > + modes[m].rates[i].rate,
> > > + modes[m].rates[i].val,
> > > + modes[m].rates[i].flags,
> > > + modes[m].rates[i].val2);
> > > + }
> > > +}
> > > +
> > > +void
> > > +ath5k_debug_dump_hwstate(struct ath5k_hw *ah)
> > > +{
> > > + if (!(ah->ah_sc->debug & ATH_DEBUG_DUMPSTATE))
> > > + return;
> > > +
> > > +#define AR5K_PRINT_REGISTER(_x)
> > > \ + AR5K_PRINTF("(%s: %08x)\n", #_x, ath5k_hw_reg_read(ah,
> > > AR5K_##_x)); +
> > > + AR5K_PRINTF("MAC registers:\n");
> > > + AR5K_PRINT_REGISTER(CR);
> > > + AR5K_PRINT_REGISTER(CFG);
> > > + AR5K_PRINT_REGISTER(IER);
> > > + AR5K_PRINT_REGISTER(TXCFG);
> > > + AR5K_PRINT_REGISTER(RXCFG);
> > > + AR5K_PRINT_REGISTER(MIBC);
> > > + AR5K_PRINT_REGISTER(TOPS);
> > > + AR5K_PRINT_REGISTER(RXNOFRM);
> > > + AR5K_PRINT_REGISTER(RPGTO);
> > > + AR5K_PRINT_REGISTER(RFCNT);
> > > + AR5K_PRINT_REGISTER(MISC);
> > > + AR5K_PRINT_REGISTER(PISR);
> > > + AR5K_PRINT_REGISTER(SISR0);
> > > + AR5K_PRINT_REGISTER(SISR1);
> > > + AR5K_PRINT_REGISTER(SISR3);
> > > + AR5K_PRINT_REGISTER(SISR4);
> > > + AR5K_PRINT_REGISTER(DCM_ADDR);
> > > + AR5K_PRINT_REGISTER(DCM_DATA);
> > > + AR5K_PRINT_REGISTER(DCCFG);
> > > + AR5K_PRINT_REGISTER(CCFG);
> > > + AR5K_PRINT_REGISTER(CCFG_CUP);
> > > + AR5K_PRINT_REGISTER(CPC0);
> > > + AR5K_PRINT_REGISTER(CPC1);
> > > + AR5K_PRINT_REGISTER(CPC2);
> > > + AR5K_PRINT_REGISTER(CPCORN);
> > > + AR5K_PRINT_REGISTER(QCU_TXE);
> > > + AR5K_PRINT_REGISTER(QCU_TXD);
> > > + AR5K_PRINT_REGISTER(DCU_GBL_IFS_SIFS);
> > > + AR5K_PRINT_REGISTER(DCU_GBL_IFS_SLOT);
> > > + AR5K_PRINT_REGISTER(DCU_FP);
> > > + AR5K_PRINT_REGISTER(DCU_TXP);
> > > + AR5K_PRINT_REGISTER(DCU_TX_FILTER);
> > > + AR5K_PRINT_REGISTER(INTPEND);
> > > + AR5K_PRINT_REGISTER(PCICFG);
> > > + AR5K_PRINT_REGISTER(GPIOCR);
> > > + AR5K_PRINT_REGISTER(GPIODO);
> > > + AR5K_PRINT_REGISTER(SREV);
> > > + AR5K_PRINT_REGISTER(EEPROM_BASE);
> > > + AR5K_PRINT_REGISTER(EEPROM_DATA);
> > > + AR5K_PRINT_REGISTER(EEPROM_CMD);
> > > + AR5K_PRINT_REGISTER(EEPROM_CFG);
> > > + AR5K_PRINT_REGISTER(PCU_MIN);
> > > + AR5K_PRINT_REGISTER(STA_ID0);
> > > + AR5K_PRINT_REGISTER(STA_ID1);
> > > + AR5K_PRINT_REGISTER(BSS_ID0);
> > > + AR5K_PRINT_REGISTER(SLOT_TIME);
> > > + AR5K_PRINT_REGISTER(TIME_OUT);
> > > + AR5K_PRINT_REGISTER(RSSI_THR);
> > > + AR5K_PRINT_REGISTER(BEACON);
> > > + AR5K_PRINT_REGISTER(CFP_PERIOD);
> > > + AR5K_PRINT_REGISTER(TIMER0);
> > > + AR5K_PRINT_REGISTER(TIMER2);
> > > + AR5K_PRINT_REGISTER(TIMER3);
> > > + AR5K_PRINT_REGISTER(CFP_DUR);
> > > + AR5K_PRINT_REGISTER(MCAST_FILTER0);
> > > + AR5K_PRINT_REGISTER(MCAST_FILTER1);
> > > + AR5K_PRINT_REGISTER(DIAG_SW);
> > > + AR5K_PRINT_REGISTER(TSF_U32);
> > > + AR5K_PRINT_REGISTER(ADDAC_TEST);
> > > + AR5K_PRINT_REGISTER(DEFAULT_ANTENNA);
> > > + AR5K_PRINT_REGISTER(LAST_TSTP);
> > > + AR5K_PRINT_REGISTER(NAV);
> > > + AR5K_PRINT_REGISTER(RTS_OK);
> > > + AR5K_PRINT_REGISTER(ACK_FAIL);
> > > + AR5K_PRINT_REGISTER(FCS_FAIL);
> > > + AR5K_PRINT_REGISTER(BEACON_CNT);
> > > + AR5K_PRINT_REGISTER(TSF_PARM);
> > > + AR5K_PRINTF("\n");
> > > +
> > > + AR5K_PRINTF("PHY registers:\n");
> > > + AR5K_PRINT_REGISTER(PHY_TURBO);
> > > + AR5K_PRINT_REGISTER(PHY_AGC);
> > > + AR5K_PRINT_REGISTER(PHY_TIMING_3);
> > > + AR5K_PRINT_REGISTER(PHY_CHIP_ID);
> > > + AR5K_PRINT_REGISTER(PHY_AGCCTL);
> > > + AR5K_PRINT_REGISTER(PHY_NF);
> > > + AR5K_PRINT_REGISTER(PHY_SCR);
> > > + AR5K_PRINT_REGISTER(PHY_SLMT);
> > > + AR5K_PRINT_REGISTER(PHY_SCAL);
> > > + AR5K_PRINT_REGISTER(PHY_RX_DELAY);
> > > + AR5K_PRINT_REGISTER(PHY_IQ);
> > > + AR5K_PRINT_REGISTER(PHY_PAPD_PROBE);
> > > + AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE1);
> > > + AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE2);
> > > + AR5K_PRINT_REGISTER(PHY_RADAR);
> > > + AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_0);
> > > + AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_1);
> > > + AR5K_PRINTF("\n");
> > > +}
> > > +
> > > +static inline void
> > > +ath5k_debug_printrxbuf(struct ath5k_buf *bf, int done)
> > > +{
> > > + struct ath5k_desc *ds = bf->desc;
> > > +
> > > + printk(KERN_DEBUG "R (%p %llx) %08x %08x %08x %08x %08x %08x
> > > %c\n", + ds, (unsigned long long)bf->daddr,
> > > + ds->ds_link, ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > > + ds->ds_hw[0], ds->ds_hw[1],
> > > + !done ? ' ' : (ds->ds_rxstat.rs_status == 0) ? '*' :
> > > '!'); +}
> > > +
> > > +void
> > > +ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah)
> > > +{
> > > + struct ath5k_desc *ds;
> > > + struct ath5k_buf *bf;
> > > + int status;
> > > +
> > > + if (likely(!(sc->debug & (ATH_DEBUG_RESET | ATH_DEBUG_FATAL))))
> > > + return;
> > > +
> > > + printk(KERN_DEBUG "rx queue %x, link %p\n",
> > > + ath5k_hw_get_rx_buf(ah), sc->rxlink);
> > > +
> > > + spin_lock_bh(&sc->rxbuflock);
> > > + list_for_each_entry(bf, &sc->rxbuf, list) {
> > > + ds = bf->desc;
> > > + status = ah->ah_proc_rx_desc(ah, ds);
> > > + if (!status || (sc->debug & ATH_DEBUG_FATAL))
> > > + ath5k_debug_printrxbuf(bf, status == 0);
> > > + }
> > > + spin_unlock_bh(&sc->rxbuflock);
> > > +}
> > > +
> > > +void
> > > +ath5k_debug_dump_skb(struct ath5k_softc *sc,
> > > + struct sk_buff *skb, const char *prefix, int tx)
> > > +{
> > > + char buf[16];
> > > +
> > > + if (likely(!((tx && (sc->debug & ATH_DEBUG_DUMP_TX)) ||
> > > + (!tx && (sc->debug & ATH_DEBUG_DUMP_RX)))))
> > > + return;
> > > +
> > > + snprintf(buf, sizeof(buf), "%s %s", wiphy_name(sc->hw->wiphy),
> > > prefix); +
> > > + print_hex_dump_bytes(buf, DUMP_PREFIX_NONE, skb->data,
> > > + min(200U, skb->len));
> > > +
> > > + printk(KERN_DEBUG "\n");
> > > +}
> > > +
> > > +void
> > > +ath5k_debug_printtxbuf(struct ath5k_softc *sc,
> > > + struct ath5k_buf *bf, int done)
> > > +{
> > > + struct ath5k_desc *ds = bf->desc;
> > > +
> > > + if (likely(!(sc->debug & ATH_DEBUG_RESET)))
> > > + return;
> > > +
> > > + printk(KERN_DEBUG "T (%p %llx) %08x %08x %08x %08x %08x %08x %08x
> > > " + "%08x %c\n", ds, (unsigned long long)bf->daddr,
> > > ds->ds_link, + ds->ds_data, ds->ds_ctl0, ds->ds_ctl1,
> > > + ds->ds_hw[0], ds->ds_hw[1], ds->ds_hw[2], ds->ds_hw[3],
> > > + !done ? ' ' : (ds->ds_txstat.ts_status == 0) ? '*' :
> > > '!'); +}
> > > +
> > > +#endif /* if AR5K_DEBUG */
> > > diff --git a/drivers/net/wireless/ath5k/debug.h
> > > b/drivers/net/wireless/ath5k/debug.h new file mode 100644
> > > index 0000000..d166395
> > > --- /dev/null
> > > +++ b/drivers/net/wireless/ath5k/debug.h
> > > @@ -0,0 +1,123 @@
> > > +/*
> > > + * Copyright (c) 2004-2007 Reyk Floeter <[email protected]>
> > > + * Copyright (c) 2006-2007 Nick Kossifidis <[email protected]>
> > > + *
> > > + * Permission to use, copy, modify, and distribute this software for
> > > any + * purpose with or without fee is hereby granted, provided that
> > > the above + * copyright notice and this permission notice appear in all
> > > copies. + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
> > > WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
> > > WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
> > > AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR
> > > CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS
> > > OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT,
> > > NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN
> > > CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */
> > > +
> > > +#ifndef _ATH5K_DEBUG_H
> > > +#define _ATH5K_DEBUG_H
> > > +
> > > +#include "base.h"
> > > +
> > > +#if AR5K_DEBUG
> > > +
> > > +enum {
> > > + ATH_DEBUG_RESET = 0x00000001, /* reset processing */
> > > + ATH_DEBUG_INTR = 0x00000002, /* ISR */
> > > + ATH_DEBUG_MODE = 0x00000004, /* mode init/setup */
> > > + ATH_DEBUG_XMIT = 0x00000008, /* basic xmit operation
> > > */ + ATH_DEBUG_BEACON = 0x00000010, /* beacon handling */
> > > + ATH_DEBUG_BEACON_PROC = 0x00000020, /* beacon ISR proc */ +
> > > ATH_DEBUG_CALIBRATE = 0x00000100, /* periodic calibration */ +
> > > ATH_DEBUG_TXPOWER = 0x00000200, /* transmit power */ +
> > > ATH_DEBUG_LED = 0x00000400, /* led management */ +
> > > ATH_DEBUG_DUMP_RX = 0x00001000, /* print received skb content
> > > */ + ATH_DEBUG_DUMP_TX = 0x00002000, /* print transmit skb
> > > content */ + ATH_DEBUG_DUMPSTATE = 0x00004000, /* dump
> > > register state */ + ATH_DEBUG_DUMPMODES = 0x00008000, /* dump
> > > modes */ + ATH_DEBUG_TRACE = 0x00010000, /* trace
> > > function calls */ + ATH_DEBUG_FATAL = 0x80000000, /*
> > > fatal errors */ + ATH_DEBUG_ANY = 0xffffffff
> > > +};
>
> While you're at it can you move these to use kernel-doc? You'll have
> to name the enum, perhaps ath5k_debug ?
>
> > > +#define AR5K_TRACE(_sc) do { \
> > > + if (unlikely((_sc)->debug & ATH_DEBUG_TRACE)) \
> > > + printk(KERN_DEBUG "ath5k trace %s:%d\n", __func__,
> > > __LINE__); \ + } while (0)
> > > +
> > > +#define AR5K_DBG(_sc, _m, _fmt, ...) do { \
> > > + if (unlikely((_sc)->debug & (_m) && net_ratelimit())) \
> > > + AR5K_PRINTK(_sc, KERN_DEBUG, "(%s:%d): " _fmt, \
> > > + __func__, __LINE__, ##__VA_ARGS__); \
> > > + } while (0)
>
> Very nice :)
>
> > > +void
> > > +ath5k_debug_init(void);
> > > +
> > > +void
> > > +ath5k_debug_init_device(struct ath5k_softc *sc);
> > > +
> > > +void
> > > +ath5k_debug_finish(void);
> > > +
> > > +void
> > > +ath5k_debug_finish_device(struct ath5k_softc *sc);
> > > +
> > > +void
> > > +ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah);
> > > +
> > > +void
> > > +ath5k_debug_dump_modes(struct ath5k_softc *sc,
> > > + struct ieee80211_hw_mode *modes);
> > > +
> > > +void
> > > +ath5k_debug_dump_hwstate(struct ath5k_hw *ah);
> > > +
> > > +void
> > > +ath5k_debug_dump_skb(struct ath5k_softc *sc,
> > > + struct sk_buff *skb, const char *prefix, int tx);
> > > +
> > > +void
> > > +ath5k_debug_printtxbuf(struct ath5k_softc *sc,
> > > + struct ath5k_buf *bf, int done);
>
> Do we really need a debug.h?
>
> > > +#else /* no debugging */
> > > +
> > > +#define AR5K_TRACE(_sc)
> > > +
> > > +#define AR5K_DBG(...) do { } while (0)
> > > +
> > > +static inline void
> > > +ath5k_debug_init(void) {}
> > > +
> > > +static inline void
> > > +ath5k_debug_init_device(struct ath5k_softc *sc) {}
> > > +
> > > +static inline void
> > > +ath5k_debug_finish(void) {}
> > > +
> > > +static inline void
> > > +ath5k_debug_finish_device(struct ath5k_softc *sc) {}
> > > +
> > > +static inline void
> > > +ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah)
> > > {} +
> > > +static inline void
> > > +ath5k_debug_dump_modes(struct ath5k_softc *sc,
> > > + struct ieee80211_hw_mode *modes) {}
> > > +
> > > +static inline void
> > > +ath5k_debug_dump_hwstate(struct ath5k_hw *ah) {}
> > > +
> > > +static inline void
> > > +ath5k_debug_dump_skb(struct ath5k_softc *sc,
> > > + struct sk_buff *skb, const char *prefix, int tx)
> > > {} +
> > > +static inline void
> > > +ath5k_debug_printtxbuf(struct ath5k_softc *sc,
> > > + struct ath5k_buf *bf, int done) {}
> > > +
> > > +#endif
>
> Oh I guess so, nevermind. Nice.
>
> > > +
> > > +#endif
> > > diff --git a/drivers/net/wireless/ath5k/hw.c
> > > b/drivers/net/wireless/ath5k/hw.c index 4aca069..484d702 100644
> > > --- a/drivers/net/wireless/ath5k/hw.c
> > > +++ b/drivers/net/wireless/ath5k/hw.c
> > > @@ -29,6 +29,7 @@
> > >
> > > #include "reg.h"
> > > #include "base.h"
> > > +#include "debug.h"
> > >
> > > /*Rate tables*/
> > > static const struct ath5k_rate_table ath5k_rt_11a = AR5K_RATES_11A;
> > > @@ -128,7 +129,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > > *sc, u8 mac_version) ah = kzalloc(sizeof(struct ath5k_hw), GFP_KERNEL);
> > > if (ah == NULL) {
> > > ret = -ENOMEM;
> > > - AR5K_PRINT("out of memory\n");
> > > + AR5K_ERR(sc, "out of memory\n");
> > > goto err;
> > > }
> > >
> > > @@ -203,14 +204,14 @@ struct ath5k_hw *ath5k_hw_attach(struct
> > > ath5k_softc *sc, u8 mac_version)
> > >
> > > /* Return on unsuported chips (unsupported eeprom etc) */
> > > if(srev >= AR5K_SREV_VER_AR5416){
> > > - printk(KERN_ERR "ath5k: Device not yet supported.\n");
> > > + AR5K_ERR(sc, "Device not yet supported.\n");
> > > ret = -ENODEV;
> > > goto err_free;
> > > }
> > >
> > > /* Warn for partially supported chips (unsupported phy etc) */
> > > if(srev >= AR5K_SREV_VER_AR2424){
> > > - printk(KERN_DEBUG "ath5k: Device partially
> > > supported.\n"); + AR5K_WARN(sc, "Device only partially
> > > supported.\n"); }
> > >
> > > /* Identify single chip solutions */
> > > @@ -238,9 +239,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > > *sc, u8 mac_version)
> > >
> > > ah->ah_phy = AR5K_PHY(0);
> > >
> > > -#ifdef AR5K_DEBUG
> > > - ath5k_hw_dump_state(ah);
> > > -#endif
> > > + ath5k_debug_dump_hwstate(ah);
> > >
> > > /*
> > > * Get card capabilities, values, ...
> > > @@ -248,14 +247,14 @@ struct ath5k_hw *ath5k_hw_attach(struct
> > > ath5k_softc *sc, u8 mac_version)
> > >
> > > ret = ath5k_eeprom_init(ah);
> > > if (ret) {
> > > - AR5K_PRINT("unable to init EEPROM\n");
> > > + AR5K_ERR(sc, "unable to init EEPROM\n");
> > > goto err_free;
> > > }
> > >
> > > /* Get misc capabilities */
> > > ret = ath5k_hw_get_capabilities(ah);
> > > if (ret) {
> > > - AR5K_PRINTF("unable to get device capabilities:
> > > 0x%04x\n", + AR5K_ERR(sc, "unable to get device
> > > capabilities: 0x%04x\n", sc->pdev->device);
> > > goto err_free;
> > > }
> > > @@ -263,7 +262,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc
> > > *sc, u8 mac_version) /* Get MAC address */
> > > ret = ath5k_eeprom_read_mac(ah, mac);
> > > if (ret) {
> > > - AR5K_PRINTF("unable to read address from EEPROM:
> > > 0x%04x\n", + AR5K_ERR(sc, "unable to read address from
> > > EEPROM: 0x%04x\n", sc->pdev->device);
> > > goto err_free;
> > > }
> > > @@ -295,7 +294,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial) mode = 0;
> > > clock = 0;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_version != AR5K_AR5210) {
> > > /*
> > > @@ -328,7 +327,8 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial) else
> > > mode |= AR5K_PHY_MODE_MOD_DYN;
> > > } else {
> > > - AR5K_PRINT("invalid radio modulation
> > > mode\n"); + AR5K_ERR(ah->ah_sc,
> > > + "invalid radio modulation
> > > mode\n"); return -EINVAL;
> > > }
> > > } else if (flags & CHANNEL_5GHZ) {
> > > @@ -338,11 +338,12 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw
> > > *ah, int flags, bool initial) if (flags & CHANNEL_OFDM)
> > > mode |= AR5K_PHY_MODE_MOD_OFDM;
> > > else {
> > > - AR5K_PRINT("invalid radio modulation
> > > mode\n"); + AR5K_ERR(ah->ah_sc,
> > > + "invalid radio modulation
> > > mode\n"); return -EINVAL;
> > > }
> > > } else {
> > > - AR5K_PRINT("invalid radio frequency mode\n");
> > > + AR5K_ERR(ah->ah_sc, "invalid radio frequency
> > > mode\n"); return -EINVAL;
> > > }
> > >
> > > @@ -352,7 +353,8 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial) if (initial == true) {
> > > /* ...reset hardware */
> > > if (ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCI)) {
> > > - AR5K_PRINT("failed to reset the PCI
> > > chipset\n"); + AR5K_ERR(ah->ah_sc,
> > > + "failed to reset the PCI
> > > chipset\n"); return -EIO;
> > > }
> > >
> > > @@ -362,7 +364,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial) /* ...wakeup */
> > > ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
> > > if (ret) {
> > > - AR5K_PRINT("failed to resume the MAC Chip\n");
> > > + AR5K_ERR(ah->ah_sc, "failed to resume the MAC
> > > Chip\n"); return ret;
> > > }
> > >
> > > @@ -373,7 +375,8 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial)
> > >
> > > /* ...reset chipset */
> > > if (ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_CHIP)) {
> > > - AR5K_PRINT("failed to reset the AR5210
> > > chipset\n"); + AR5K_ERR(ah->ah_sc,
> > > + "failed to reset the AR5210 chipset\n");
> > > return -EIO;
> > > }
> > >
> > > @@ -383,7 +386,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial) /* ...reset chipset and PCI device */
> > > if (ah->ah_single_chip == false && ath5k_hw_nic_reset(ah,
> > > AR5K_RESET_CTL_CHIP |
> > > AR5K_RESET_CTL_PCI)) { - AR5K_PRINT("failed to reset the
> > > MAC Chip + PCI\n"); + AR5K_ERR(ah->ah_sc, "failed to reset
> > > the MAC Chip + PCI\n"); return -EIO;
> > > }
> > >
> > > @@ -393,13 +396,13 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw
> > > *ah, int flags, bool initial) /* ...wakeup */
> > > ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
> > > if (ret) {
> > > - AR5K_PRINT("failed to resume the MAC Chip\n");
> > > + AR5K_ERR(ah->ah_sc, "failed to resume the MAC Chip\n");
> > > return ret;
> > > }
> > >
> > > /* ...final warm reset */
> > > if (ath5k_hw_nic_reset(ah, 0)) {
> > > - AR5K_PRINT("failed to warm reset the MAC Chip\n");
> > > + AR5K_ERR(ah->ah_sc, "failed to warm reset the MAC
> > > Chip\n"); return -EIO;
> > > }
> > >
> > > @@ -421,7 +424,7 @@ static int ath5k_hw_nic_wakeup(struct ath5k_hw *ah,
> > > int flags, bool initial) const struct ath5k_rate_table
> > > *ath5k_hw_get_rate_table(struct ath5k_hw *ah, unsigned int mode)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (!test_bit(mode, ah->ah_capabilities.cap_mode))
> > > return NULL;
> > > @@ -448,7 +451,7 @@ const struct ath5k_rate_table
> > > *ath5k_hw_get_rate_table(struct ath5k_hw *ah, */
> > > void ath5k_hw_detach(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_rf_banks != NULL)
> > > kfree(ah->ah_rf_banks);
> > > @@ -594,7 +597,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode, unsigned int i, mode, freq, ee_mode,
> > > ant[2], driver_mode = -1;
> > > int ret;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > s_seq = 0;
> > > s_ant = 1;
> > > @@ -643,7 +646,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode, if (ah->ah_radio != AR5K_RF5111 &&
> > > ah->ah_radio != AR5K_RF5112 &&
> > > ah->ah_radio != AR5K_RF5413) {
> > > - AR5K_PRINTF("invalid phy radio: %u\n",
> > > ah->ah_radio); + AR5K_ERR(ah->ah_sc,
> > > + "invalid phy radio: %u\n", ah->ah_radio);
> > > return -EINVAL;
> > > }
> > >
> > > @@ -681,7 +685,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode, break;
> > > case CHANNEL_XR:
> > > if (ah->ah_version == AR5K_AR5211) {
> > > - AR5K_PRINTF("XR mode not available on
> > > 5211"); + AR5K_ERR(ah->ah_sc,
> > > + "XR mode not available on 5211");
> > > return -EINVAL;
> > > }
> > > mode = AR5K_INI_VAL_XR;
> > > @@ -690,7 +695,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode, driver_mode = MODE_IEEE80211A;
> > > break;
> > > default:
> > > - AR5K_PRINTF("invalid channel: %d\n",
> > > channel->freq); + AR5K_ERR(ah->ah_sc, "invalid
> > > channel: %d\n", + channel->freq);
> > > return -EINVAL;
> > > }
> > >
> > > @@ -905,7 +911,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode,
> > >
> > > if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
> > > AR5K_PHY_AGCCTL_CAL, 0, false)) {
> > > - AR5K_PRINTF("calibration timeout (%uMHz)\n",
> > > channel->freq); + AR5K_ERR(ah->ah_sc, "calibration timeout
> > > (%uMHz)\n", + channel->freq);
> > > return -EAGAIN;
> > > }
> > >
> > > @@ -917,7 +924,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode,
> > >
> > > if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
> > > AR5K_PHY_AGCCTL_NF, 0, false)) {
> > > - AR5K_PRINTF("noise floor calibration timeout (%uMHz)\n",
> > > + AR5K_ERR(ah->ah_sc,
> > > + "noise floor calibration timeout
> > > (%uMHz)\n", channel->freq);
> > > return -EAGAIN;
> > > }
> > > @@ -935,7 +943,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode, }
> > >
> > > if (noise_floor > AR5K_TUNE_NOISE_FLOOR) {
> > > - AR5K_PRINTF("noise floor calibration failed (%uMHz)\n",
> > > + AR5K_ERR(ah->ah_sc, "noise floor calibration failed
> > > (%uMHz)\n", channel->freq);
> > > return -EIO;
> > > }
> > > @@ -962,7 +970,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum
> > > ieee80211_if_types op_mode,
> > >
> > > ret = ath5k_hw_reset_tx_queue(ah, i);
> > > if (ret) {
> > > - AR5K_PRINTF("failed to reset TX queue #%d\n", i);
> > > + AR5K_ERR(ah->ah_sc,
> > > + "failed to reset TX queue #%d\n", i);
> > > return ret;
> > > }
> > > }
> > > @@ -1019,7 +1028,7 @@ static int ath5k_hw_nic_reset(struct ath5k_hw
> > > *ah, u32 val) int ret;
> > > u32 mask = val ? val : ~0U;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /* Read-and-clear RX Descriptor Pointer*/
> > > ath5k_hw_reg_read(ah, AR5K_RXDP);
> > > @@ -1066,7 +1075,7 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum
> > > ath5k_power_mode mode, unsigned int i;
> > > u32 staid;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > staid = ath5k_hw_reg_read(ah, AR5K_STA_ID1);
> > >
> > > switch (mode) {
> > > @@ -1140,7 +1149,7 @@ commit:
> > > */
> > > void ath5k_hw_start_rx(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > ath5k_hw_reg_write(ah, AR5K_CR_RXE, AR5K_CR);
> > > }
> > >
> > > @@ -1151,7 +1160,7 @@ int ath5k_hw_stop_rx_dma(struct ath5k_hw *ah)
> > > {
> > > unsigned int i;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > ath5k_hw_reg_write(ah, AR5K_CR_RXD, AR5K_CR);
> > >
> > > /*
> > > @@ -1178,7 +1187,7 @@ u32 ath5k_hw_get_rx_buf(struct ath5k_hw *ah)
> > > */
> > > void ath5k_hw_put_rx_buf(struct ath5k_hw *ah, u32 phys_addr)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*TODO:Shouldn't we check if RX is enabled first ?*/
> > > ath5k_hw_reg_write(ah, phys_addr, AR5K_RXDP);
> > > @@ -1196,7 +1205,7 @@ int ath5k_hw_tx_start(struct ath5k_hw *ah,
> > > unsigned int queue) {
> > > u32 tx_queue;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > /* Return if queue is declared inactive */
> > > @@ -1249,7 +1258,7 @@ int ath5k_hw_stop_tx_dma(struct ath5k_hw *ah,
> > > unsigned int queue) unsigned int i = 100;
> > > u32 tx_queue, pending;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > /* Return if queue is declared inactive */
> > > @@ -1308,7 +1317,7 @@ u32 ath5k_hw_get_tx_buf(struct ath5k_hw *ah,
> > > unsigned int queue) {
> > > u16 tx_reg;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > /*
> > > @@ -1342,7 +1351,7 @@ int ath5k_hw_put_tx_buf(struct ath5k_hw *ah,
> > > unsigned int queue, u32 phys_addr) {
> > > u16 tx_reg;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > /*
> > > @@ -1387,7 +1396,7 @@ int ath5k_hw_update_tx_triglevel(struct ath5k_hw
> > > *ah, bool increase) u32 trigger_level, imr;
> > > int ret = -EIO;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*
> > > * Disable interrupts by setting the mask
> > > @@ -1434,7 +1443,7 @@ done:
> > > */
> > > bool ath5k_hw_is_intr_pending(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > return ath5k_hw_reg_read(ah, AR5K_INTPEND);
> > > }
> > >
> > > @@ -1445,7 +1454,7 @@ int ath5k_hw_get_isr(struct ath5k_hw *ah, enum
> > > ath5k_int *interrupt_mask) {
> > > u32 data;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*
> > > * Read interrupt status from the Interrupt Status register
> > > @@ -1569,7 +1578,7 @@ static int ath5k_hw_eeprom_read(struct ath5k_hw
> > > *ah, u32 offset, u16 *data) {
> > > u32 status, timeout;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /*
> > > * Initialize EEPROM access
> > > */
> > > @@ -1605,7 +1614,7 @@ static int ath5k_hw_eeprom_write(struct ath5k_hw
> > > *ah, u32 offset, u16 data) #if 0
> > > u32 status, timeout;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*
> > > * Initialize eeprom access
> > > @@ -1856,7 +1865,7 @@ static int ath5k_eeprom_init(struct ath5k_hw *ah)
> > > cksum ^= val;
> > > }
> > > if (cksum != AR5K_EEPROM_INFO_CKSUM) {
> > > - AR5K_PRINTF("Invalid EEPROM checksum 0x%04x\n", cksum);
> > > + AR5K_ERR(ah->ah_sc, "Invalid EEPROM checksum 0x%04x\n",
> > > cksum); return -EIO;
> > > }
> > > #endif
> > > @@ -2103,7 +2112,7 @@ static int ath5k_hw_get_capabilities(struct
> > > ath5k_hw *ah) {
> > > u16 ee_header;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /* Capabilities stored in the EEPROM */
> > > ee_header = ah->ah_capabilities.cap_eeprom.ee_header;
> > >
> > > @@ -2194,7 +2203,7 @@ int ath5k_hw_set_opmode(struct ath5k_hw *ah)
> > > pcu_reg = 0;
> > > beacon_reg = 0;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > switch (ah->ah_op_mode) {
> > > case IEEE80211_IF_TYPE_IBSS:
> > > @@ -2251,7 +2260,7 @@ int ath5k_hw_set_opmode(struct ath5k_hw *ah)
> > > */
> > > void ath5k_hw_get_lladdr(struct ath5k_hw *ah, u8 *mac)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > memcpy(mac, ah->ah_sta_id, ETH_ALEN);
> > > }
> > >
> > > @@ -2262,7 +2271,7 @@ int ath5k_hw_set_lladdr(struct ath5k_hw *ah,
> > > const u8 *mac) {
> > > u32 low_id, high_id;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /* Set new station ID */
> > > memcpy(ah->ah_sta_id, mac, ETH_ALEN);
> > >
> > > @@ -2408,7 +2417,7 @@ void ath5k_hw_set_associd(struct ath5k_hw *ah,
> > > const u8 *bssid, u16 assoc_id) int ath5k_hw_set_bssid_mask(struct
> > > ath5k_hw *ah, const u8 *mask)
> > > {
> > > u32 low_id, high_id;
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_version == AR5K_AR5212) {
> > > low_id = AR5K_LOW_ID(mask);
> > > @@ -2432,7 +2441,7 @@ int ath5k_hw_set_bssid_mask(struct ath5k_hw *ah,
> > > const u8 *mask) */
> > > void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_REG_DISABLE_BITS(ah, AR5K_DIAG_SW, AR5K_DIAG_SW_DIS_RX);
> > > }
> > >
> > > @@ -2441,7 +2450,7 @@ void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah)
> > > */
> > > void ath5k_hw_stop_pcu_recv(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_REG_ENABLE_BITS(ah, AR5K_DIAG_SW, AR5K_DIAG_SW_DIS_RX);
> > > }
> > >
> > > @@ -2454,7 +2463,7 @@ void ath5k_hw_stop_pcu_recv(struct ath5k_hw *ah)
> > > */
> > > void ath5k_hw_set_mcast_filter(struct ath5k_hw *ah, u32 filter0, u32
> > > filter1) {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /* Set the multicat filter */
> > > ath5k_hw_reg_write(ah, filter0, AR5K_MCAST_FILTER0);
> > > ath5k_hw_reg_write(ah, filter1, AR5K_MCAST_FILTER1);
> > > @@ -2466,7 +2475,7 @@ void ath5k_hw_set_mcast_filter(struct ath5k_hw
> > > *ah, u32 filter0, u32 filter1) int
> > > ath5k_hw_set_mcast_filterindex(struct ath5k_hw *ah, u32 index) {
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (index >= 64)
> > > return -EINVAL;
> > > else if (index >= 32)
> > > @@ -2484,7 +2493,7 @@ int ath5k_hw_set_mcast_filterindex(struct
> > > ath5k_hw *ah, u32 index) int ath5k_hw_clear_mcast_filter_idx(struct
> > > ath5k_hw *ah, u32 index) {
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (index >= 64)
> > > return -EINVAL;
> > > else if (index >= 32)
> > > @@ -2503,7 +2512,7 @@ u32 ath5k_hw_get_rx_filter(struct ath5k_hw *ah)
> > > {
> > > u32 data, filter = 0;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > filter = ath5k_hw_reg_read(ah, AR5K_RX_FILTER);
> > >
> > > /*Radar detection for 5212*/
> > > @@ -2526,7 +2535,7 @@ void ath5k_hw_set_rx_filter(struct ath5k_hw *ah,
> > > u32 filter) {
> > > u32 data = 0;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /* Set PHY error filter register on 5212*/
> > > if (ah->ah_version == AR5K_AR5212) {
> > > @@ -2569,7 +2578,7 @@ void ath5k_hw_set_rx_filter(struct ath5k_hw *ah,
> > > u32 filter) */
> > > u32 ath5k_hw_get_tsf32(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > return ath5k_hw_reg_read(ah, AR5K_TSF_L32);
> > > }
> > >
> > > @@ -2579,7 +2588,7 @@ u32 ath5k_hw_get_tsf32(struct ath5k_hw *ah)
> > > u64 ath5k_hw_get_tsf64(struct ath5k_hw *ah)
> > > {
> > > u64 tsf = ath5k_hw_reg_read(ah, AR5K_TSF_U32);
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > return ath5k_hw_reg_read(ah, AR5K_TSF_L32) | (tsf << 32);
> > > }
> > > @@ -2589,7 +2598,7 @@ u64 ath5k_hw_get_tsf64(struct ath5k_hw *ah)
> > > */
> > > void ath5k_hw_reset_tsf(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_REG_ENABLE_BITS(ah, AR5K_BEACON, AR5K_BEACON_RESET_TSF);
> > > }
> > >
> > > @@ -2600,7 +2609,7 @@ void ath5k_hw_init_beacon(struct ath5k_hw *ah,
> > > u32 next_beacon, u32 interval) {
> > > u32 timer1, timer2, timer3;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /*
> > > * Set the additional timers by mode
> > > */
> > > @@ -2658,7 +2667,7 @@ int ath5k_hw_set_beacon_timers(struct ath5k_hw
> > > *ah, u32 cfp_count = 0; /* XXX */
> > > u32 tsf = 0; /* XXX */
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /* Return on an invalid beacon state */
> > > if (state->bs_interval < 1)
> > > return -EINVAL;
> > > @@ -2770,7 +2779,7 @@ int ath5k_hw_set_beacon_timers(struct ath5k_hw
> > > *ah, */
> > > void ath5k_hw_reset_beacon(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /*
> > > * Disable beacon timer
> > > */
> > > @@ -2793,7 +2802,7 @@ int ath5k_hw_wait_for_beacon(struct ath5k_hw *ah,
> > > unsigned long phys_addr) unsigned int i;
> > > int ret;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /* 5210 doesn't have QCU*/
> > > if (ah->ah_version == AR5K_AR5210) {
> > > @@ -2840,7 +2849,7 @@ int ath5k_hw_wait_for_beacon(struct ath5k_hw *ah,
> > > unsigned long phys_addr) void ath5k_hw_update_mib_counters(struct
> > > ath5k_hw *ah,
> > > struct ath5k_mib_stats *statistics)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /* Read-And-Clear */
> > > statistics->ackrcv_bad += ath5k_hw_reg_read(ah, AR5K_ACK_FAIL);
> > > statistics->rts_bad += ath5k_hw_reg_read(ah, AR5K_RTS_FAIL);
> > > @@ -2885,7 +2894,7 @@ void ath5k_hw_set_ack_bitrate_high(struct
> > > ath5k_hw *ah, bool high) */
> > > int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah, unsigned int
> > > timeout) {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (ath5k_hw_clocktoh(AR5K_REG_MS(0xffffffff, AR5K_TIME_OUT_ACK),
> > > ah->ah_turbo) <= timeout)
> > > return -EINVAL;
> > > @@ -2901,7 +2910,7 @@ int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah,
> > > unsigned int timeout) */
> > > unsigned int ath5k_hw_get_ack_timeout(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > return ath5k_hw_clocktoh(AR5K_REG_MS(ath5k_hw_reg_read(ah,
> > > AR5K_TIME_OUT), AR5K_TIME_OUT_ACK),
> > > ah->ah_turbo); @@ -2912,7 +2921,7 @@ unsigned int
> > > ath5k_hw_get_ack_timeout(struct ath5k_hw *ah) */
> > > int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int
> > > timeout) {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (ath5k_hw_clocktoh(AR5K_REG_MS(0xffffffff, AR5K_TIME_OUT_CTS),
> > > ah->ah_turbo) <= timeout)
> > > return -EINVAL;
> > > @@ -2928,7 +2937,7 @@ int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah,
> > > unsigned int timeout) */
> > > unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > return ath5k_hw_clocktoh(AR5K_REG_MS(ath5k_hw_reg_read(ah,
> > > AR5K_TIME_OUT), AR5K_TIME_OUT_CTS),
> > > ah->ah_turbo); }
> > > @@ -2941,7 +2950,7 @@ int ath5k_hw_reset_key(struct ath5k_hw *ah, u16
> > > entry) {
> > > unsigned int i;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(entry, AR5K_KEYTABLE_SIZE);
> > >
> > > for (i = 0; i < AR5K_KEYCACHE_SIZE; i++)
> > > @@ -2957,7 +2966,7 @@ int ath5k_hw_reset_key(struct ath5k_hw *ah, u16
> > > entry)
> > >
> > > int ath5k_hw_is_key_valid(struct ath5k_hw *ah, u16 entry)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(entry, AR5K_KEYTABLE_SIZE);
> > >
> > > /* Check the validation flag at the end of the entry */
> > > @@ -2972,7 +2981,7 @@ int ath5k_hw_set_key(struct ath5k_hw *ah, u16
> > > entry, __le32 key_v[5] = {};
> > > u32 keytype;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /* key->keylen comes in from mac80211 in bytes */
> > >
> > > @@ -3018,7 +3027,7 @@ int ath5k_hw_set_key_lladdr(struct ath5k_hw *ah,
> > > u16 entry, const u8 *mac) {
> > > u32 low_id, high_id;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /* Invalid entry (key table overflow) */
> > > AR5K_ASSERT_ENTRY(entry, AR5K_KEYTABLE_SIZE);
> > >
> > > @@ -3052,7 +3061,7 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah,
> > > enum ath5k_tx_queue queue_type, unsigned int queue;
> > > int ret;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*
> > > * Get queue by type
> > > @@ -3092,8 +3101,9 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah,
> > > enum ath5k_tx_queue queue_type, break;
> > > case AR5K_TX_QUEUE_XR_DATA:
> > > if (ah->ah_version != AR5K_AR5212)
> > > - AR5K_PRINTF("XR data queues only
> > > supported in " -
> > > "5212!\n");
> > > + AR5K_ERR(ah->ah_sc,
> > > + "XR data queues only supported"
> > > + " in 5212!\n");
> > > queue = AR5K_TX_QUEUE_ID_XR_DATA;
> > > break;
> > > default:
> > > @@ -3129,7 +3139,7 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah,
> > > enum ath5k_tx_queue queue_type, int ath5k_hw_setup_tx_queueprops(struct
> > > ath5k_hw *ah, int queue,
> > > const struct ath5k_txq_info *queue_info)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > if (ah->ah_txq[queue].tqi_type == AR5K_TX_QUEUE_INACTIVE)
> > > @@ -3153,7 +3163,7 @@ int ath5k_hw_setup_tx_queueprops(struct ath5k_hw
> > > *ah, int queue, int ath5k_hw_get_tx_queueprops(struct ath5k_hw *ah, int
> > > queue, struct ath5k_txq_info *queue_info)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > memcpy(queue_info, &ah->ah_txq[queue], sizeof(struct
> > > ath5k_txq_info)); return 0;
> > > }
> > > @@ -3163,7 +3173,7 @@ int ath5k_hw_get_tx_queueprops(struct ath5k_hw
> > > *ah, int queue, */
> > > void ath5k_hw_release_tx_queue(struct ath5k_hw *ah, unsigned int
> > > queue) {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (WARN_ON(queue >= ah->ah_capabilities.cap_queues.q_tx_num))
> > > return;
> > >
> > > @@ -3181,7 +3191,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah,
> > > unsigned int queue) u32 cw_min, cw_max, retry_lg, retry_sh;
> > > struct ath5k_txq_info *tq = &ah->ah_txq[queue];
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > tq = &ah->ah_txq[queue];
> > > @@ -3425,7 +3435,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah,
> > > unsigned int queue) * for a specific queue [5211+]
> > > */
> > > u32 ath5k_hw_num_tx_pending(struct ath5k_hw *ah, unsigned int queue) {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > AR5K_ASSERT_ENTRY(queue,
> > > ah->ah_capabilities.cap_queues.q_tx_num);
> > >
> > > /* Return if queue is declared inactive */
> > > @@ -3444,7 +3454,7 @@ u32 ath5k_hw_num_tx_pending(struct ath5k_hw *ah,
> > > unsigned int queue) { */
> > > int ath5k_hw_set_slot_time(struct ath5k_hw *ah, unsigned int
> > > slot_time) {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (slot_time < AR5K_SLOT_TIME_9 || slot_time >
> > > AR5K_SLOT_TIME_MAX) return -EINVAL;
> > >
> > > @@ -3462,7 +3472,7 @@ int ath5k_hw_set_slot_time(struct ath5k_hw *ah,
> > > unsigned int slot_time) */
> > > unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (ah->ah_version == AR5K_AR5210)
> > > return ath5k_hw_clocktoh(ath5k_hw_reg_read(ah,
> > > AR5K_SLOT_TIME) & 0xffff, ah->ah_turbo);
> > > @@ -3610,7 +3620,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct
> > > ath5k_hw *ah, struct ath5k_hw_tx_status *tx_status;
> > > unsigned int buff_len;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > tx_desc = (struct ath5k_hw_4w_tx_desc *)&desc->ds_ctl0;
> > > tx_status = (struct ath5k_hw_tx_status *)&desc->ds_hw[2];
> > >
> > > @@ -3791,7 +3801,7 @@ static int ath5k_hw_proc_4word_tx_status(struct
> > > ath5k_hw *ah, struct ath5k_hw_tx_status *tx_status;
> > > struct ath5k_hw_4w_tx_desc *tx_desc;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > tx_desc = (struct ath5k_hw_4w_tx_desc *)&desc->ds_ctl0;
> > > tx_status = (struct ath5k_hw_tx_status *)&desc->ds_hw[2];
> > >
> > > @@ -3869,7 +3879,7 @@ int ath5k_hw_setup_rx_desc(struct ath5k_hw *ah,
> > > struct ath5k_desc *desc, {
> > > struct ath5k_rx_desc *rx_desc;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > rx_desc = (struct ath5k_rx_desc *)&desc->ds_ctl0;
> > >
> > > /*
> > > @@ -3974,7 +3984,7 @@ static int ath5k_hw_proc_new_rx_status(struct
> > > ath5k_hw *ah, struct ath5k_hw_new_rx_status *rx_status;
> > > struct ath5k_hw_rx_error *rx_err;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > rx_status = (struct ath5k_hw_new_rx_status *)&desc->ds_hw[0];
> > >
> > > /* Overlay on error */
> > > @@ -4052,7 +4062,7 @@ void ath5k_hw_set_ledstate(struct ath5k_hw *ah,
> > > unsigned int state) /*5210 has different led mode handling*/
> > > u32 led_5210;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*Reset led status*/
> > > if (ah->ah_version != AR5K_AR5210)
> > > @@ -4100,7 +4110,7 @@ void ath5k_hw_set_ledstate(struct ath5k_hw *ah,
> > > unsigned int state) */
> > > int ath5k_hw_set_gpio_output(struct ath5k_hw *ah, u32 gpio)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (gpio > AR5K_NUM_GPIO)
> > > return -EINVAL;
> > >
> > > @@ -4115,7 +4125,7 @@ int ath5k_hw_set_gpio_output(struct ath5k_hw *ah,
> > > u32 gpio) */
> > > int ath5k_hw_set_gpio_input(struct ath5k_hw *ah, u32 gpio)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (gpio > AR5K_NUM_GPIO)
> > > return -EINVAL;
> > >
> > > @@ -4130,7 +4140,7 @@ int ath5k_hw_set_gpio_input(struct ath5k_hw *ah,
> > > u32 gpio) */
> > > u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32 gpio)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (gpio > AR5K_NUM_GPIO)
> > > return 0xffffffff;
> > >
> > > @@ -4145,7 +4155,7 @@ u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32
> > > gpio) int ath5k_hw_set_gpio(struct ath5k_hw *ah, u32 gpio, u32 val) {
> > > u32 data;
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (gpio > AR5K_NUM_GPIO)
> > > return -EINVAL;
> > > @@ -4169,7 +4179,7 @@ void ath5k_hw_set_gpio_intr(struct ath5k_hw *ah,
> > > unsigned int gpio, {
> > > u32 data;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (gpio > AR5K_NUM_GPIO)
> > > return;
> > >
> > > @@ -4222,115 +4232,15 @@ u16 ath5k_get_regdomain(struct ath5k_hw *ah)
> > > }
> > >
> > >
> > > -
> > > /****************\
> > > Misc functions
> > > \****************/
> > >
> > > -void /*O.K.*/
> > > -ath5k_hw_dump_state(struct ath5k_hw *ah)
> > > -{
> > > -#ifdef AR5K_DEBUG
> > > -#define AR5K_PRINT_REGISTER(_x)
> > > \ - AR5K_PRINTF("(%s: %08x) ", #_x, ath5k_hw_reg_read(ah,
> > > AR5K_##_x)); -
> > > - AR5K_PRINT("MAC registers:\n");
> > > - AR5K_PRINT_REGISTER(CR);
> > > - AR5K_PRINT_REGISTER(CFG);
> > > - AR5K_PRINT_REGISTER(IER);
> > > - AR5K_PRINT_REGISTER(TXCFG);
> > > - AR5K_PRINT_REGISTER(RXCFG);
> > > - AR5K_PRINT_REGISTER(MIBC);
> > > - AR5K_PRINT_REGISTER(TOPS);
> > > - AR5K_PRINT_REGISTER(RXNOFRM);
> > > - AR5K_PRINT_REGISTER(RPGTO);
> > > - AR5K_PRINT_REGISTER(RFCNT);
> > > - AR5K_PRINT_REGISTER(MISC);
> > > - AR5K_PRINT_REGISTER(PISR);
> > > - AR5K_PRINT_REGISTER(SISR0);
> > > - AR5K_PRINT_REGISTER(SISR1);
> > > - AR5K_PRINT_REGISTER(SISR3);
> > > - AR5K_PRINT_REGISTER(SISR4);
> > > - AR5K_PRINT_REGISTER(DCM_ADDR);
> > > - AR5K_PRINT_REGISTER(DCM_DATA);
> > > - AR5K_PRINT_REGISTER(DCCFG);
> > > - AR5K_PRINT_REGISTER(CCFG);
> > > - AR5K_PRINT_REGISTER(CCFG_CUP);
> > > - AR5K_PRINT_REGISTER(CPC0);
> > > - AR5K_PRINT_REGISTER(CPC1);
> > > - AR5K_PRINT_REGISTER(CPC2);
> > > - AR5K_PRINT_REGISTER(CPCORN);
> > > - AR5K_PRINT_REGISTER(QCU_TXE);
> > > - AR5K_PRINT_REGISTER(QCU_TXD);
> > > - AR5K_PRINT_REGISTER(DCU_GBL_IFS_SIFS);
> > > - AR5K_PRINT_REGISTER(DCU_GBL_IFS_SLOT);
> > > - AR5K_PRINT_REGISTER(DCU_FP);
> > > - AR5K_PRINT_REGISTER(DCU_TXP);
> > > - AR5K_PRINT_REGISTER(DCU_TX_FILTER);
> > > - AR5K_PRINT_REGISTER(INTPEND);
> > > - AR5K_PRINT_REGISTER(PCICFG);
> > > - AR5K_PRINT_REGISTER(GPIOCR);
> > > - AR5K_PRINT_REGISTER(GPIODO);
> > > - AR5K_PRINT_REGISTER(SREV);
> > > - AR5K_PRINT_REGISTER(EEPROM_BASE);
> > > - AR5K_PRINT_REGISTER(EEPROM_DATA);
> > > - AR5K_PRINT_REGISTER(EEPROM_CMD);
> > > - AR5K_PRINT_REGISTER(EEPROM_CFG);
> > > - AR5K_PRINT_REGISTER(PCU_MIN);
> > > - AR5K_PRINT_REGISTER(STA_ID0);
> > > - AR5K_PRINT_REGISTER(STA_ID1);
> > > - AR5K_PRINT_REGISTER(BSS_ID0);
> > > - AR5K_PRINT_REGISTER(SLOT_TIME);
> > > - AR5K_PRINT_REGISTER(TIME_OUT);
> > > - AR5K_PRINT_REGISTER(RSSI_THR);
> > > - AR5K_PRINT_REGISTER(BEACON);
> > > - AR5K_PRINT_REGISTER(CFP_PERIOD);
> > > - AR5K_PRINT_REGISTER(TIMER0);
> > > - AR5K_PRINT_REGISTER(TIMER2);
> > > - AR5K_PRINT_REGISTER(TIMER3);
> > > - AR5K_PRINT_REGISTER(CFP_DUR);
> > > - AR5K_PRINT_REGISTER(MCAST_FILTER0);
> > > - AR5K_PRINT_REGISTER(MCAST_FILTER1);
> > > - AR5K_PRINT_REGISTER(DIAG_SW);
> > > - AR5K_PRINT_REGISTER(TSF_U32);
> > > - AR5K_PRINT_REGISTER(ADDAC_TEST);
> > > - AR5K_PRINT_REGISTER(DEFAULT_ANTENNA);
> > > - AR5K_PRINT_REGISTER(LAST_TSTP);
> > > - AR5K_PRINT_REGISTER(NAV);
> > > - AR5K_PRINT_REGISTER(RTS_OK);
> > > - AR5K_PRINT_REGISTER(ACK_FAIL);
> > > - AR5K_PRINT_REGISTER(FCS_FAIL);
> > > - AR5K_PRINT_REGISTER(BEACON_CNT);
> > > - AR5K_PRINT_REGISTER(TSF_PARM);
> > > - AR5K_PRINT("\n");
> > > -
> > > - AR5K_PRINT("PHY registers:\n");
> > > - AR5K_PRINT_REGISTER(PHY_TURBO);
> > > - AR5K_PRINT_REGISTER(PHY_AGC);
> > > - AR5K_PRINT_REGISTER(PHY_TIMING_3);
> > > - AR5K_PRINT_REGISTER(PHY_CHIP_ID);
> > > - AR5K_PRINT_REGISTER(PHY_AGCCTL);
> > > - AR5K_PRINT_REGISTER(PHY_NF);
> > > - AR5K_PRINT_REGISTER(PHY_SCR);
> > > - AR5K_PRINT_REGISTER(PHY_SLMT);
> > > - AR5K_PRINT_REGISTER(PHY_SCAL);
> > > - AR5K_PRINT_REGISTER(PHY_RX_DELAY);
> > > - AR5K_PRINT_REGISTER(PHY_IQ);
> > > - AR5K_PRINT_REGISTER(PHY_PAPD_PROBE);
> > > - AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE1);
> > > - AR5K_PRINT_REGISTER(PHY_TXPOWER_RATE2);
> > > - AR5K_PRINT_REGISTER(PHY_RADAR);
> > > - AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_0);
> > > - AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_1);
> > > - AR5K_PRINT("\n");
> > > -#endif
> > > -}
> > > -
> > > int ath5k_hw_get_capability(struct ath5k_hw *ah,
> > > enum ath5k_capability_type cap_type,
> > > u32 capability, u32 *result)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > switch (cap_type) {
> > > case AR5K_CAP_NUM_TXQUEUES:
> > > @@ -4375,7 +4285,7 @@ yes:
> > > static int ath5k_hw_enable_pspoll(struct ath5k_hw *ah, u8 *bssid,
> > > u16 assoc_id)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_version == AR5K_AR5210) {
> > > AR5K_REG_DISABLE_BITS(ah, AR5K_STA_ID1,
> > > @@ -4388,7 +4298,7 @@ static int ath5k_hw_enable_pspoll(struct ath5k_hw
> > > *ah, u8 *bssid,
> > >
> > > static int ath5k_hw_disable_pspoll(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_version == AR5K_AR5210) {
> > > AR5K_REG_ENABLE_BITS(ah, AR5K_STA_ID1,
> > > diff --git a/drivers/net/wireless/ath5k/phy.c
> > > b/drivers/net/wireless/ath5k/phy.c index d5aec18..5319bf0 100644
> > > --- a/drivers/net/wireless/ath5k/phy.c
> > > +++ b/drivers/net/wireless/ath5k/phy.c
> > > @@ -23,6 +23,8 @@
> > >
> > > #include "ath5k.h"
> > > #include "reg.h"
> > > +#include "base.h"
> > > +#include "debug.h"
> > >
> > > /* Struct to hold initial RF register values (RF Banks) */
> > > struct ath5k_ini_rf {
> > > @@ -879,11 +881,10 @@ static s32 ath5k_hw_rfregs_gain_adjust(struct
> > > ath5k_hw *ah) }
> > >
> > > done:
> > > -#ifdef AR5K_DEBUG
> > > - AR5K_PRINTF("ret %d, gain step %u, current gain %u, target gain
> > > %u\n", + AR5K_DBG(ah->ah_sc, ATH_DEBUG_CALIBRATE,
> > > + "ret %d, gain step %u, current gain %u, target gain
> > > %u\n", ret, ah->ah_gain.g_step_idx, ah->ah_gain.g_current,
> > > ah->ah_gain.g_target);
> > > -#endif
> > >
> > > return ret;
> > > }
> > > @@ -908,7 +909,7 @@ static int ath5k_hw_rf5111_rfregs(struct ath5k_hw
> > > *ah, /* Copy values to modify them */
> > > for (i = 0; i < rf_size; i++) {
> > > if (rfregs_5111[i].rf_bank >=
> > > AR5K_RF5111_INI_RF_MAX_BANKS) { -
> > > AR5K_PRINT("invalid bank\n");
> > > + AR5K_ERR(ah->ah_sc, "invalid bank\n");
> > > return -EINVAL;
> > > }
> > >
> > > @@ -1017,7 +1018,7 @@ static int ath5k_hw_rf5112_rfregs(struct ath5k_hw
> > > *ah, /* Copy values to modify them */
> > > for (i = 0; i < rf_size; i++) {
> > > if (rf_ini[i].rf_bank >= AR5K_RF5112_INI_RF_MAX_BANKS) {
> > > - AR5K_PRINT("invalid bank\n");
> > > + AR5K_ERR(ah->ah_sc, "invalid bank\n");
> > > return -EINVAL;
> > > }
> > >
> > > @@ -1105,7 +1106,7 @@ static int ath5k_hw_rf5413_rfregs(struct ath5k_hw
> > > *ah, /* Copy values to modify them */
> > > for (i = 0; i < rf_size; i++) {
> > > if (rf_ini[i].rf_bank >= AR5K_RF5112_INI_RF_MAX_BANKS) {
> > > - AR5K_PRINT("invalid bank\n");
> > > + AR5K_ERR(ah->ah_sc, "invalid bank\n");
> > > return -EINVAL;
> > > }
> > >
> > > @@ -1167,7 +1168,7 @@ int ath5k_hw_rfregs(struct ath5k_hw *ah, struct
> > > ieee80211_channel *channel, /* XXX do extra checks? */
> > > ah->ah_rf_banks = kmalloc(ah->ah_rf_banks_size,
> > > GFP_KERNEL); if (ah->ah_rf_banks == NULL) {
> > > - AR5K_PRINT("out of memory\n");
> > > + AR5K_ERR(ah->ah_sc, "out of memory\n");
> > > return -ENOMEM;
> > > }
> > > }
> > > @@ -1222,7 +1223,7 @@ enum ath5k_rfgain ath5k_hw_get_rf_gain(struct
> > > ath5k_hw *ah) {
> > > u32 data, type;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_rf_banks == NULL || !ah->ah_gain.g_active ||
> > > ah->ah_version <= AR5K_AR5211)
> > > @@ -1484,7 +1485,7 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct
> > > ieee80211_channel *channel) channel->freq >
> > > ah->ah_capabilities.cap_range.range_2ghz_max) && (channel->freq <
> > > ah->ah_capabilities.cap_range.range_5ghz_min || channel->freq >
> > > ah->ah_capabilities.cap_range.range_5ghz_max)) { -
> > > AR5K_PRINTF("channel out of supported range (%u MHz)\n",
> > > + AR5K_ERR(ah->ah_sc, "channel out of supported range (%u
> > > MHz)\n", channel->freq);
> > > return -EINVAL;
> > > }
> > > @@ -1605,7 +1606,8 @@ static int ath5k_hw_rf5110_calibrate(struct
> > > ath5k_hw *ah, ath5k_hw_reg_write(ah, phy_sat, AR5K_PHY_ADCSAT);
> > >
> > > if (ret) {
> > > - AR5K_PRINTF("calibration timeout (%uMHz)\n",
> > > channel->freq); + AR5K_ERR(ah->ah_sc, "calibration timeout
> > > (%uMHz)\n", + channel->freq);
> > > return ret;
> > > }
> > >
> > > @@ -1617,7 +1619,7 @@ static int ath5k_hw_rf5110_calibrate(struct
> > > ath5k_hw *ah, ret = ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
> > > AR5K_PHY_AGCCTL_NF, 0, false);
> > > if (ret) {
> > > - AR5K_PRINTF("noise floor calibration timeout (%uMHz)\n",
> > > + AR5K_ERR(ah->ah_sc, "noise floor calibration timeout
> > > (%uMHz)\n", channel->freq);
> > > return ret;
> > > }
> > > @@ -1635,7 +1637,7 @@ static int ath5k_hw_rf5110_calibrate(struct
> > > ath5k_hw *ah, }
> > >
> > > if (noise_floor > AR5K_TUNE_NOISE_FLOOR) {
> > > - AR5K_PRINTF("noise floor calibration failed (%uMHz)\n",
> > > + AR5K_ERR(ah->ah_sc, "noise floor calibration failed
> > > (%uMHz)\n", channel->freq);
> > > return -EIO;
> > > }
> > > @@ -1658,7 +1660,7 @@ static int ath5k_hw_rf511x_calibrate(struct
> > > ath5k_hw *ah, {
> > > u32 i_pwr, q_pwr;
> > > s32 iq_corr, i_coff, i_coffd, q_coff, q_coffd;
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > if (ah->ah_calibration == false ||
> > > ath5k_hw_reg_read(ah, AR5K_PHY_IQ) &
> > > AR5K_PHY_IQ_RUN) @@ -1715,7 +1717,7 @@ int
> > > ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
> > >
> > > int ath5k_hw_phy_disable(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /*Just a try M.F.*/
> > > ath5k_hw_reg_write(ah, AR5K_PHY_ACT_DISABLE, AR5K_PHY_ACT);
> > >
> > > @@ -1735,7 +1737,7 @@ u16 ath5k_hw_radio_revision(struct ath5k_hw *ah,
> > > unsigned int chan) u32 srev;
> > > u16 ret;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > >
> > > /*
> > > * Set the radio chip access register
> > > @@ -1777,7 +1779,7 @@ u16 ath5k_hw_radio_revision(struct ath5k_hw *ah,
> > > unsigned int chan) void /*TODO:Boundary check*/
> > > ath5k_hw_set_def_antenna(struct ath5k_hw *ah, unsigned int ant)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /*Just a try M.F.*/
> > > if (ah->ah_version != AR5K_AR5210)
> > > ath5k_hw_reg_write(ah, ant, AR5K_DEFAULT_ANTENNA);
> > > @@ -1785,7 +1787,7 @@ ath5k_hw_set_def_antenna(struct ath5k_hw *ah,
> > > unsigned int ant)
> > >
> > > unsigned int ath5k_hw_get_def_antenna(struct ath5k_hw *ah)
> > > {
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > /*Just a try M.F.*/
> > > if (ah->ah_version != AR5K_AR5210)
> > > return ath5k_hw_reg_read(ah, AR5K_DEFAULT_ANTENNA);
> > > @@ -1845,9 +1847,9 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct
> > > ieee80211_channel *channel, bool tpc = ah->ah_txpower.txp_tpc;
> > > unsigned int i;
> > >
> > > - AR5K_TRACE;
> > > + AR5K_TRACE(ah->ah_sc);
> > > if (txpower > AR5K_TUNE_MAX_TXPOWER) {
> > > - AR5K_PRINTF("invalid tx power: %u\n", txpower);
> > > + AR5K_ERR(ah->ah_sc, "invalid tx power: %u\n", txpower);
> > > return -EINVAL;
> > > }
> > >
> > > @@ -1899,9 +1901,9 @@ int ath5k_hw_set_txpower_limit(struct ath5k_hw
> > > *ah, unsigned int power) /*Just a try M.F.*/
> > > struct ieee80211_channel *channel = &ah->ah_current_channel;
> > >
> > > - AR5K_TRACE;
> > > -#ifdef AR5K_DEBUG
> > > - AR5K_PRINTF("changing txpower to %d\n", power);
> > > -#endif
> > > + AR5K_TRACE(ah->ah_sc);
> > > + AR5K_DBG(ah->ah_sc, ATH_DEBUG_TXPOWER,
> > > + "changing txpower to %d\n", power);
> > > +
> > > return ath5k_hw_txpower(ah, channel, power);
> > > }
> > > diff --git a/net/mac80211/ieee80211_sta.c
> > > b/net/mac80211/ieee80211_sta.c index 015b3f8..16afd24 100644
> > > --- a/net/mac80211/ieee80211_sta.c
> > > +++ b/net/mac80211/ieee80211_sta.c
> > > @@ -2647,7 +2647,7 @@ void ieee80211_scan_completed(struct ieee80211_hw
> > > *hw) local->sta_scanning = 0;
> > >
> > > if (ieee80211_hw_config(local))
> > > - printk(KERN_DEBUG "%s: failed to restore operational"
> > > + printk(KERN_DEBUG "%s: failed to restore operational "
> > > "channel after scan\n", dev->name);
> > >
> > >
> > > -
> > > To unsubscribe from this list: send the line "unsubscribe
> > > linux-wireless" in the body of a message to [email protected]
> > > More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
> > _______________________________________________
> > ath5k-devel mailing list
> > [email protected]
> > https://lists.ath5k.org/mailman/listinfo/ath5k-devel



2007-11-22 04:45:32

by Bruno Randolf

[permalink] [raw]
Subject: Re: [ath5k-devel] ath5k: more consistent debug, info and error logging

> > > > + ATH_DEBUG_RESET = 0x00000001, /* reset processing */
> > > > + ATH_DEBUG_INTR = 0x00000002, /* ISR */
> > > > + ATH_DEBUG_MODE = 0x00000004, /* mode init/setup */
> > > > + ATH_DEBUG_XMIT = 0x00000008, /* basic xmit operation
> > > > */ + ATH_DEBUG_BEACON = 0x00000010, /* beacon handling
> > > > */ + ATH_DEBUG_BEACON_PROC = 0x00000020, /* beacon ISR proc
> > > > */ + ATH_DEBUG_CALIBRATE = 0x00000100, /* periodic calibration
> > > > */ + ATH_DEBUG_TXPOWER = 0x00000200, /* transmit power */ +
> > > > ATH_DEBUG_LED = 0x00000400, /* led management */ +
> > > > ATH_DEBUG_DUMP_RX = 0x00001000, /* print received skb content
> > > > */ + ATH_DEBUG_DUMP_TX = 0x00002000, /* print transmit
> > > > skb content */ + ATH_DEBUG_DUMPSTATE = 0x00004000, /* dump
> > > > register state */ + ATH_DEBUG_DUMPMODES = 0x00008000, /*
> > > > dump modes */ + ATH_DEBUG_TRACE = 0x00010000, /* trace
> > > > function calls */ + ATH_DEBUG_FATAL = 0x80000000, /*
> > > > fatal errors */ + ATH_DEBUG_ANY = 0xffffffff
> > > > +};
> >
> > While you're at it can you move these to use kernel-doc? You'll have
> > to name the enum, perhaps ath5k_debug ?
>
> o.k.

while doing that i question myself, what is ATH5K_DEBUG_FATAL /* fatal errors
*/ supposed to mean? shouldn't fatal errors be reported as errors, and not
only in debugging mode?

the only place where ATH5K_DEBUG_FATAL is used is in the code i moved from
ath5k_rx_stop() to:

void
ath5k_debug_printrxbuffs(struct ath5k_softc *sc, struct ath5k_hw *ah)
{
struct ath5k_desc *ds;
struct ath5k_buf *bf;
int status;

if (likely(!(sc->debug.level &
(ATH5K_DEBUG_RESET | ATH5K_DEBUG_FATAL))))
return;

printk(KERN_DEBUG "rx queue %x, link %p\n",
ath5k_hw_get_rx_buf(ah), sc->rxlink);

spin_lock_bh(&sc->rxbuflock);
list_for_each_entry(bf, &sc->rxbuf, list) {
ds = bf->desc;
status = ah->ah_proc_rx_desc(ah, ds);
if (!status || (sc->debug.level & ATH5K_DEBUG_FATAL))
ath5k_debug_printrxbuf(bf, status == 0);
}
spin_unlock_bh(&sc->rxbuflock);
}

so would it be ok to remove ATH5K_DEBUG_FATAL alltogether?
i might make that as a seperate patch once the first two are thru.

bruno

2007-11-22 04:11:42

by Bruno Randolf

[permalink] [raw]
Subject: Re: [ath5k-devel] ath5k: more consistent debug, info and error logging

On Wednesday 21 November 2007 10:57:51 Luis R. Rodriguez wrote:
> thanks for this work BTW. CC'ing other maintainers, you probably just
> forgot. I know this is a pain but this is a pretty big patch, can you
> split it into a few for better review? I also know this is just debug
> stuff but it would help. One for each main task you mention below
> might do it, or something like that.

ok. i did that in my last 2 posts, but you are right - i missed your comments
here. i will address them now, but please be aware, that the last 2 patches
are slightly different, i.e. i renamed AR5K_... to ATH5K_... and a few
smaller things to keep scripts/checkpatch.pl happy.

> > > +#define AR5K_PRINTK(_sc, _level, _fmt, ...) \
> > > + printk(_level "ath5k %s: " _fmt, \
> > > + ((_sc) && (_sc)->hw) ? wiphy_name((_sc)->hw->wiphy) : "",
> > > \ + ##__VA_ARGS__)
> > > +
> > > +#define AR5K_PRINTK_LIMIT(_sc, _level, _fmt, ...) do { \
> > > + if (net_ratelimit()) \
> > > + AR5K_PRINTK(_sc, _level, _fmt, ##__VA_ARGS__); \
> > > + } while (0)
> > > +
> > > +#define AR5K_INFO(_sc, _fmt, ...) \
> > > + AR5K_PRINTK(_sc, KERN_INFO, _fmt, ##__VA_ARGS__)
> > > +
> > > +#define AR5K_WARN(_sc, _fmt, ...) \
> > > + AR5K_PRINTK_LIMIT(_sc, KERN_WARNING, _fmt, ##__VA_ARGS__)
> > > +
> > > +#define AR5K_ERR(_sc, _fmt, ...) \
> > > + AR5K_PRINTK_LIMIT(_sc, KERN_ERR, _fmt, ##__VA_ARGS__)
>
> I was kind of hoping we could stick to dev_[info|warn|err] for these.
> IIRC you had mentioned you can't get the device name printed? Is that
> right?

no. i print the name of the phyX device which i get with "wiphy_name()". i
think this is more descriptive than the PCI bus id, especially if you want to
match output from mac80211 to messages within ath5k. i do print a message
like "ath5k_pci 0000:00:0e.0: registered as 'phy0'" via dev_info and from
that point on the phyX device name is used.

anyways using these defines, and giving them sc gives us the possibility to
switch them to use dev_info as well, we'd just have to change

#define ATH5K_PRINTK(_sc, _level, _fmt, ...) \
dev_info(&(_sc)->pdev->dev, _fmt, ##__VA_ARGS__)

but i think, as i said above, using the phy name makes things clearer. also
note that this is more or less the same as used in other mac80211 based
drivers.

> > > diff --git a/drivers/net/wireless/ath5k/base.c
> > > b/drivers/net/wireless/ath5k/base.c index 77e3855..6ca7ebf 100644
> > > --- a/drivers/net/wireless/ath5k/base.c
> > > +++ b/drivers/net/wireless/ath5k/base.c
>
> Notice the license on base.[ch]. It's a "Dual GPL/BSD" license.
> Although all of our recent changes have been licensed the 3-clause-BSD
> for these files we did not verify the same for previous changes on
> MadWifi's files (stuff in base.[ch]) so its best to just keep the Dual
> license there for that code in case previous authors did intend on
> licesning their changes under the GPL (hence the problem with using
> vague "alternatively" language for Dual licensing). This presents a
> problem in trying to shift code on base.[ch] onto what you would think
> is an OK ISC-only licensed code. This is also the problem we knew we'd
> face down the road with trying to help OpenBSD -- in the end we may
> want to just shuffle around GPL code into ISC licensed code and well,
> then it becomes a pretty heavy nightmware for us to keep track of
> which part of the code is licensed under what for them.
>
> As we have it right now base.[ch] contains code which *may* have been
> patched in for GPL-only intentions (prior to kernel inclusion). In
> your patch series I'd like to see careful use of this shifting. If you
> are just deleting code, great, but if you are reusing code please
> either go through the git-log to see what license the changes were
> made (haha, good one huh!) or well lets just GPL those new files you
> are creating. The debug print stuff is pretty useless to other kernels
> too as its very specific to Linux.

ugh, that's getting complicated...

ok then. let's split it up into the 2 patches i've sent. i think the first one
is pretty clear, as it just renames stuff, especially in base.c (i doubt that
it's even worth a copyright claim). so would that be fine with a BSD license?

next: patch 2, debugging, is the complicated one, because i move stuff from
base.c and hc.c to a different file, debugging.c (ath_printrxbuf(),
ath_printtxbuf(), ath_dump_skb() and various other debugging parts). most of
this code comes into git from Jiri Slaby's initial commit 88c37f32... "Net:
add ath5k wireless driver" (git blame and git-gui is great!)

tracking things further than that is difficult but i found:

ath5k_printrxbuf() and ath5k_printtxbuf() also exist in a very similar way in
madwifi, and it's pretty obvious they come from there, hence they are dual
GPL/BSD licensed, right?

the debugging code i took out of ath_stoprecv() into a new function
ath5k_debug_printrxbuffs() also seems to have it's origin in madwifi too,
although modified for different list handling. so probably dual BSD/GPL too.

as far as i can tell ath_dump_skb and ath_dump_modes first appeared in Jiri
Slaby's initial commit 88c37f32 so i'm not sure about their license. i found
some messages which indicate that he intended GPL, but that did not hold or
something?

ath5k_debug_dump_hwstate() clearly comes from openbsd
ar5k_ar5212/11_dump_state, so it's ISC license (afaik, or BSD???).

so as a summary these are the functions i moved into debug.c:
function source license
-----------------------------------------------
ath5k_debug_printrxbuf() madwifi BSD/GPL
ath5k_debug_printrxbuffs() madwifi BSD/GPL
ath5k_debug_printtxbuf() madwifi BSD/GPL
ath5k_debug_dump_hwstate() openbsd ISC
ath5k_debug_dump_modes() jiri ???
ath5k_debug_dump_skb() jiri ???

+ it contains additional stuff (debugfs) which i made, therefore can license
however i like.

which makes it license-able under what? i personally don't really care, and as
you said it's only debugging stuff, so probably it won't go back into BSD
systems anyways. at the same time as far as i understand we can take BSD
stuff and re-license it under GPL, right, it's just not considered to be a
nice thing to do. so would it be o.k. in this case to make debug.c licensed
as GPL only?

anyhow i don't care about which license, and i don't want to get into license
politics, but it is a real pain if we have to spend the same amount of time
doing that kind of history searching as we spend coding - for every change we
make. especially since most of this is probably irrelevant as nobody is going
to port it back to BSD or it came from the ultra-permissive dual BSD/GPL
anyways.

so please advise me which license is the most practical to use.

> > > 0x%x)\n", + AR5K_INFO(sc, "Atheros AR%s chip found (MAC: 0x%x, PHY:
> > > 0x%x)\n", ath5k_chip_name(AR5K_VERSION_VER,sc->ah->ah_mac_srev),
> > > sc->ah->ah_mac_srev,
> > > sc->ah->ah_phy_revision);
> > > @@ -580,27 +490,28 @@ ath5k_pci_probe(struct pci_dev *pdev,
> > > if(sc->ah->ah_radio_5ghz_revision &&
> > > !sc->ah->ah_radio_2ghz_revision) { /* No 5GHz support -> report 2GHz
> > > radio */ if(!test_bit(MODE_IEEE80211A,
> > > sc->ah->ah_capabilities.cap_mode)){ -
> > > dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n", +
> > > AR5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
> > > ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
> > > sc->ah->ah_radio_5ghz_revision); /* No 2GHz support (5110 and some 5Ghz
> > > only cards) -> report 5Ghz radio */ } else
> > > if(!test_bit(MODE_IEEE80211B, sc->ah->ah_capabilities.cap_mode)){ -
> > > dev_info(&pdev->dev, "RF%s 5GHz radio found
> > > (0x%x)\n", + AR5K_INFO(sc, "RF%s 5GHz radio
> > > found (0x%x)\n",
>
> See for example, here I wouldn't mind leaving dev_info, etc, with our
> own macros.

well i can change these lines back to use dev_info, but don't you think this
output is o.k. too? an example:

ath5k_pci 0000:00:0e.0: registered as 'phy4'
ath5k phy4: Device only partially supported.
ath5k phy4: Atheros AR5414 chip found (MAC: 0xa5, PHY: 0x61)
ath5k_pci 0000:00:0f.0: registered as 'phy5'
ath5k phy5: Atheros AR5213 chip found (MAC: 0x56, PHY: 0x41)
ath5k phy5: RF5111 5GHz radio found (0x17)
ath5k phy5: RF2111 2GHz radio found (0x23)

> > > +++ b/drivers/net/wireless/ath5k/debug.c
> > > @@ -0,0 +1,256 @@
> > > +/*
> > > + * Copyright (c) 2004-2007 Reyk Floeter <[email protected]>
> > > + * Copyright (c) 2006-2007 Nick Kossifidis <[email protected]>
>
> You're adding unique code (debugfs stuff), you should add your
> Copyright entry here.

o.k.

> But note that this will look very different if
> this is GPL'd. Please refer to SFLC's guidelines if you are to GPL
> these files (probably going to be needed).

> > > + for (m = 0; m < NUM_DRIVER_MODES; m++) {
> > > + printk(KERN_DEBUG "Mode %u: channels %d, rates %d\n", m,
> > > + modes[m].num_channels,
> > > modes[m].num_rates); + printk(KERN_DEBUG " channels:\n");
>
> How about dev_dbg instead?

i think in general we should stick with one method, so that would be
ATH5K_DBG. which in turn can be made to use dev_dbg if we choose to. but i
made ATH5K_DBG rate limited (net_ratelimit()) so we can't use it to print
several lines like this. i think it's ok, now, as all printk(KERN_DEBUG,...
are within debug.[ch], and we can change it easily to have the same output
like ATH5K_DGB. or we add another ATH5k_DBG_NONLIMITED or something?

> > > + ATH_DEBUG_RESET = 0x00000001, /* reset processing */
> > > + ATH_DEBUG_INTR = 0x00000002, /* ISR */
> > > + ATH_DEBUG_MODE = 0x00000004, /* mode init/setup */
> > > + ATH_DEBUG_XMIT = 0x00000008, /* basic xmit operation
> > > */ + ATH_DEBUG_BEACON = 0x00000010, /* beacon handling */
> > > + ATH_DEBUG_BEACON_PROC = 0x00000020, /* beacon ISR proc */ +
> > > ATH_DEBUG_CALIBRATE = 0x00000100, /* periodic calibration */ +
> > > ATH_DEBUG_TXPOWER = 0x00000200, /* transmit power */ +
> > > ATH_DEBUG_LED = 0x00000400, /* led management */ +
> > > ATH_DEBUG_DUMP_RX = 0x00001000, /* print received skb content
> > > */ + ATH_DEBUG_DUMP_TX = 0x00002000, /* print transmit skb
> > > content */ + ATH_DEBUG_DUMPSTATE = 0x00004000, /* dump
> > > register state */ + ATH_DEBUG_DUMPMODES = 0x00008000, /* dump
> > > modes */ + ATH_DEBUG_TRACE = 0x00010000, /* trace
> > > function calls */ + ATH_DEBUG_FATAL = 0x80000000, /*
> > > fatal errors */ + ATH_DEBUG_ANY = 0xffffffff
> > > +};
>
> While you're at it can you move these to use kernel-doc? You'll have
> to name the enum, perhaps ath5k_debug ?

o.k.

thank you for your comments, luis!

i would appreciate it if you could give me more advice concerning the
licensing issues as discussed above, so i can send in a correctly licensed
patch.

bruno