Commit 3d387d92 authored by Daniel Vetter's avatar Daniel Vetter

drm/printer: add debug printer

Useful for dumping lots of data into dmesg, e.g. drm_mm.

v2: Fixup export_symbol line, I misplaced a hunk (Chris).

Cc: Rob Clark <robdclark@gmail.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1482943330-11592-1-git-send-email-daniel.vetter@ffwll.ch
parent ae774e2c
...@@ -40,6 +40,12 @@ void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf) ...@@ -40,6 +40,12 @@ void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf)
} }
EXPORT_SYMBOL(__drm_printfn_info); EXPORT_SYMBOL(__drm_printfn_info);
void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf)
{
pr_debug("%s %pV", p->prefix, vaf);
}
EXPORT_SYMBOL(__drm_printfn_debug);
/** /**
* drm_printf - print to a &drm_printer stream * drm_printf - print to a &drm_printer stream
* @p: the &drm_printer * @p: the &drm_printer
......
...@@ -60,19 +60,20 @@ ...@@ -60,19 +60,20 @@
/** /**
* struct drm_printer - drm output "stream" * struct drm_printer - drm output "stream"
* @printfn: actual output fxn
* @arg: output fxn specific data
* *
* Do not use struct members directly. Use drm_printer_seq_file(), * Do not use struct members directly. Use drm_printer_seq_file(),
* drm_printer_info(), etc to initialize. And drm_printf() for output. * drm_printer_info(), etc to initialize. And drm_printf() for output.
*/ */
struct drm_printer { struct drm_printer {
/* private: */
void (*printfn)(struct drm_printer *p, struct va_format *vaf); void (*printfn)(struct drm_printer *p, struct va_format *vaf);
void *arg; void *arg;
const char *prefix;
}; };
void __drm_printfn_seq_file(struct drm_printer *p, struct va_format *vaf); void __drm_printfn_seq_file(struct drm_printer *p, struct va_format *vaf);
void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf); void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf);
void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf);
void drm_printf(struct drm_printer *p, const char *f, ...); void drm_printf(struct drm_printer *p, const char *f, ...);
...@@ -109,4 +110,19 @@ static inline struct drm_printer drm_info_printer(struct device *dev) ...@@ -109,4 +110,19 @@ static inline struct drm_printer drm_info_printer(struct device *dev)
return p; return p;
} }
/**
* drm_debug_printer - construct a &drm_printer that outputs to pr_debug()
* @prefix: debug output prefix
*
* RETURNS:
* The &drm_printer object
*/
static inline struct drm_printer drm_debug_printer(const char *prefix)
{
struct drm_printer p = {
.printfn = __drm_printfn_debug,
.prefix = prefix
};
return p;
}
#endif /* DRM_PRINT_H_ */ #endif /* DRM_PRINT_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment