1*48a8659cSMichal Wajdeczko /* SPDX-License-Identifier: MIT */ 2*48a8659cSMichal Wajdeczko /* 3*48a8659cSMichal Wajdeczko * Copyright © 2025 Intel Corporation 4*48a8659cSMichal Wajdeczko */ 5*48a8659cSMichal Wajdeczko 6*48a8659cSMichal Wajdeczko #ifndef _XE_PRINTK_H_ 7*48a8659cSMichal Wajdeczko #define _XE_PRINTK_H_ 8*48a8659cSMichal Wajdeczko 9*48a8659cSMichal Wajdeczko #include <drm/drm_print.h> 10*48a8659cSMichal Wajdeczko 11*48a8659cSMichal Wajdeczko #include "xe_device_types.h" 12*48a8659cSMichal Wajdeczko 13*48a8659cSMichal Wajdeczko #define __XE_PRINTK_FMT(_xe, _fmt, _args...) _fmt, ##_args 14*48a8659cSMichal Wajdeczko 15*48a8659cSMichal Wajdeczko #define xe_printk(_xe, _level, _fmt, ...) \ 16*48a8659cSMichal Wajdeczko drm_##_level(&(_xe)->drm, __XE_PRINTK_FMT((_xe), _fmt, ## __VA_ARGS__)) 17*48a8659cSMichal Wajdeczko 18*48a8659cSMichal Wajdeczko #define xe_err(_xe, _fmt, ...) \ 19*48a8659cSMichal Wajdeczko xe_printk((_xe), err, _fmt, ##__VA_ARGS__) 20*48a8659cSMichal Wajdeczko 21*48a8659cSMichal Wajdeczko #define xe_err_once(_xe, _fmt, ...) \ 22*48a8659cSMichal Wajdeczko xe_printk((_xe), err_once, _fmt, ##__VA_ARGS__) 23*48a8659cSMichal Wajdeczko 24*48a8659cSMichal Wajdeczko #define xe_err_ratelimited(_xe, _fmt, ...) \ 25*48a8659cSMichal Wajdeczko xe_printk((_xe), err_ratelimited, _fmt, ##__VA_ARGS__) 26*48a8659cSMichal Wajdeczko 27*48a8659cSMichal Wajdeczko #define xe_warn(_xe, _fmt, ...) \ 28*48a8659cSMichal Wajdeczko xe_printk((_xe), warn, _fmt, ##__VA_ARGS__) 29*48a8659cSMichal Wajdeczko 30*48a8659cSMichal Wajdeczko #define xe_notice(_xe, _fmt, ...) \ 31*48a8659cSMichal Wajdeczko xe_printk((_xe), notice, _fmt, ##__VA_ARGS__) 32*48a8659cSMichal Wajdeczko 33*48a8659cSMichal Wajdeczko #define xe_info(_xe, _fmt, ...) \ 34*48a8659cSMichal Wajdeczko xe_printk((_xe), info, _fmt, ##__VA_ARGS__) 35*48a8659cSMichal Wajdeczko 36*48a8659cSMichal Wajdeczko #define xe_dbg(_xe, _fmt, ...) \ 37*48a8659cSMichal Wajdeczko xe_printk((_xe), dbg, _fmt, ##__VA_ARGS__) 38*48a8659cSMichal Wajdeczko 39*48a8659cSMichal Wajdeczko #define xe_WARN_type(_xe, _type, _condition, _fmt, ...) \ 40*48a8659cSMichal Wajdeczko drm_WARN##_type(&(_xe)->drm, _condition, _fmt, ## __VA_ARGS__) 41*48a8659cSMichal Wajdeczko 42*48a8659cSMichal Wajdeczko #define xe_WARN(_xe, _condition, _fmt, ...) \ 43*48a8659cSMichal Wajdeczko xe_WARN_type((_xe),, _condition, __XE_PRINTK_FMT((_xe), _fmt, ## __VA_ARGS__)) 44*48a8659cSMichal Wajdeczko 45*48a8659cSMichal Wajdeczko #define xe_WARN_ONCE(_xe, _condition, _fmt, ...) \ 46*48a8659cSMichal Wajdeczko xe_WARN_type((_xe), _ONCE, _condition, __XE_PRINTK_FMT((_xe), _fmt, ## __VA_ARGS__)) 47*48a8659cSMichal Wajdeczko 48*48a8659cSMichal Wajdeczko #define xe_WARN_ON(_xe, _condition) \ 49*48a8659cSMichal Wajdeczko xe_WARN((_xe), _condition, "%s(%s)", "WARN_ON", __stringify(_condition)) 50*48a8659cSMichal Wajdeczko 51*48a8659cSMichal Wajdeczko #define xe_WARN_ON_ONCE(_xe, _condition) \ 52*48a8659cSMichal Wajdeczko xe_WARN_ONCE((_xe), _condition, "%s(%s)", "WARN_ON_ONCE", __stringify(_condition)) 53*48a8659cSMichal Wajdeczko 54*48a8659cSMichal Wajdeczko static inline void __xe_printfn_err(struct drm_printer *p, struct va_format *vaf) 55*48a8659cSMichal Wajdeczko { 56*48a8659cSMichal Wajdeczko struct xe_device *xe = p->arg; 57*48a8659cSMichal Wajdeczko 58*48a8659cSMichal Wajdeczko xe_err(xe, "%pV", vaf); 59*48a8659cSMichal Wajdeczko } 60*48a8659cSMichal Wajdeczko 61*48a8659cSMichal Wajdeczko static inline void __xe_printfn_info(struct drm_printer *p, struct va_format *vaf) 62*48a8659cSMichal Wajdeczko { 63*48a8659cSMichal Wajdeczko struct xe_device *xe = p->arg; 64*48a8659cSMichal Wajdeczko 65*48a8659cSMichal Wajdeczko xe_info(xe, "%pV", vaf); 66*48a8659cSMichal Wajdeczko } 67*48a8659cSMichal Wajdeczko 68*48a8659cSMichal Wajdeczko static inline void __xe_printfn_dbg(struct drm_printer *p, struct va_format *vaf) 69*48a8659cSMichal Wajdeczko { 70*48a8659cSMichal Wajdeczko struct xe_device *xe = p->arg; 71*48a8659cSMichal Wajdeczko struct drm_printer ddp; 72*48a8659cSMichal Wajdeczko 73*48a8659cSMichal Wajdeczko /* 74*48a8659cSMichal Wajdeczko * The original xe_dbg() callsite annotations are useless here, 75*48a8659cSMichal Wajdeczko * redirect to the tweaked drm_dbg_printer() instead. 76*48a8659cSMichal Wajdeczko */ 77*48a8659cSMichal Wajdeczko ddp = drm_dbg_printer(&xe->drm, DRM_UT_DRIVER, NULL); 78*48a8659cSMichal Wajdeczko ddp.origin = p->origin; 79*48a8659cSMichal Wajdeczko 80*48a8659cSMichal Wajdeczko drm_printf(&ddp, __XE_PRINTK_FMT(xe, "%pV", vaf)); 81*48a8659cSMichal Wajdeczko } 82*48a8659cSMichal Wajdeczko 83*48a8659cSMichal Wajdeczko /** 84*48a8659cSMichal Wajdeczko * xe_err_printer - Construct a &drm_printer that outputs to xe_err() 85*48a8659cSMichal Wajdeczko * @xe: the &xe_device pointer to use in xe_err() 86*48a8659cSMichal Wajdeczko * 87*48a8659cSMichal Wajdeczko * Return: The &drm_printer object. 88*48a8659cSMichal Wajdeczko */ 89*48a8659cSMichal Wajdeczko static inline struct drm_printer xe_err_printer(struct xe_device *xe) 90*48a8659cSMichal Wajdeczko { 91*48a8659cSMichal Wajdeczko struct drm_printer p = { 92*48a8659cSMichal Wajdeczko .printfn = __xe_printfn_err, 93*48a8659cSMichal Wajdeczko .arg = xe, 94*48a8659cSMichal Wajdeczko }; 95*48a8659cSMichal Wajdeczko return p; 96*48a8659cSMichal Wajdeczko } 97*48a8659cSMichal Wajdeczko 98*48a8659cSMichal Wajdeczko /** 99*48a8659cSMichal Wajdeczko * xe_info_printer - Construct a &drm_printer that outputs to xe_info() 100*48a8659cSMichal Wajdeczko * @xe: the &xe_device pointer to use in xe_info() 101*48a8659cSMichal Wajdeczko * 102*48a8659cSMichal Wajdeczko * Return: The &drm_printer object. 103*48a8659cSMichal Wajdeczko */ 104*48a8659cSMichal Wajdeczko static inline struct drm_printer xe_info_printer(struct xe_device *xe) 105*48a8659cSMichal Wajdeczko { 106*48a8659cSMichal Wajdeczko struct drm_printer p = { 107*48a8659cSMichal Wajdeczko .printfn = __xe_printfn_info, 108*48a8659cSMichal Wajdeczko .arg = xe, 109*48a8659cSMichal Wajdeczko }; 110*48a8659cSMichal Wajdeczko return p; 111*48a8659cSMichal Wajdeczko } 112*48a8659cSMichal Wajdeczko 113*48a8659cSMichal Wajdeczko /** 114*48a8659cSMichal Wajdeczko * xe_dbg_printer - Construct a &drm_printer that outputs like xe_dbg() 115*48a8659cSMichal Wajdeczko * @xe: the &xe_device pointer to use in xe_dbg() 116*48a8659cSMichal Wajdeczko * 117*48a8659cSMichal Wajdeczko * Return: The &drm_printer object. 118*48a8659cSMichal Wajdeczko */ 119*48a8659cSMichal Wajdeczko static inline struct drm_printer xe_dbg_printer(struct xe_device *xe) 120*48a8659cSMichal Wajdeczko { 121*48a8659cSMichal Wajdeczko struct drm_printer p = { 122*48a8659cSMichal Wajdeczko .printfn = __xe_printfn_dbg, 123*48a8659cSMichal Wajdeczko .arg = xe, 124*48a8659cSMichal Wajdeczko .origin = (const void *)_THIS_IP_, 125*48a8659cSMichal Wajdeczko }; 126*48a8659cSMichal Wajdeczko return p; 127*48a8659cSMichal Wajdeczko } 128*48a8659cSMichal Wajdeczko 129*48a8659cSMichal Wajdeczko #endif 130