aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/wimax/debug.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/wimax/debug.h')
-rw-r--r--include/linux/wimax/debug.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/include/linux/wimax/debug.h b/include/linux/wimax/debug.h
index c703e0340423..57031b4d12f2 100644
--- a/include/linux/wimax/debug.h
+++ b/include/linux/wimax/debug.h
@@ -155,6 +155,7 @@
155 155
156#include <linux/types.h> 156#include <linux/types.h>
157#include <linux/device.h> 157#include <linux/device.h>
158#include <linux/slab.h>
158 159
159 160
160/* Backend stuff */ 161/* Backend stuff */
@@ -450,4 +451,76 @@ do { \
450}) 451})
451 452
452 453
454static inline
455void d_submodule_set(struct d_level *d_level, size_t d_level_size,
456 const char *submodule, u8 level, const char *tag)
457{
458 struct d_level *itr, *top;
459 int index = -1;
460
461 for (itr = d_level, top = itr + d_level_size; itr < top; itr++) {
462 index++;
463 if (itr->name == NULL) {
464 printk(KERN_ERR "%s: itr->name NULL?? (%p, #%d)\n",
465 tag, itr, index);
466 continue;
467 }
468 if (!strcmp(itr->name, submodule)) {
469 itr->level = level;
470 return;
471 }
472 }
473 printk(KERN_ERR "%s: unknown submodule %s\n", tag, submodule);
474}
475
476
477/**
478 * d_parse_params - Parse a string with debug parameters from the
479 * command line
480 *
481 * @d_level: level structure (D_LEVEL)
482 * @d_level_size: number of items in the level structure
483 * (D_LEVEL_SIZE).
484 * @_params: string with the parameters; this is a space (not tab!)
485 * separated list of NAME:VALUE, where value is the debug level
486 * and NAME is the name of the submodule.
487 * @tag: string for error messages (example: MODULE.ARGNAME).
488 */
489static inline
490void d_parse_params(struct d_level *d_level, size_t d_level_size,
491 const char *_params, const char *tag)
492{
493 char submodule[130], *params, *params_orig, *token, *colon;
494 unsigned level, tokens;
495
496 if (_params == NULL)
497 return;
498 params_orig = kstrdup(_params, GFP_KERNEL);
499 params = params_orig;
500 while (1) {
501 token = strsep(&params, " ");
502 if (token == NULL)
503 break;
504 if (*token == '\0') /* eat joint spaces */
505 continue;
506 /* kernel's sscanf %s eats until whitespace, so we
507 * replace : by \n so it doesn't get eaten later by
508 * strsep */
509 colon = strchr(token, ':');
510 if (colon != NULL)
511 *colon = '\n';
512 tokens = sscanf(token, "%s\n%u", submodule, &level);
513 if (colon != NULL)
514 *colon = ':'; /* set back, for error messages */
515 if (tokens == 2)
516 d_submodule_set(d_level, d_level_size,
517 submodule, level, tag);
518 else
519 printk(KERN_ERR "%s: can't parse '%s' as a "
520 "SUBMODULE:LEVEL (%d tokens)\n",
521 tag, token, tokens);
522 }
523 kfree(params_orig);
524}
525
453#endif /* #ifndef __debug__h__ */ 526#endif /* #ifndef __debug__h__ */