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_tile_printk_H_ 7*48a8659cSMichal Wajdeczko #define _xe_tile_printk_H_ 8*48a8659cSMichal Wajdeczko 9*48a8659cSMichal Wajdeczko #include "xe_printk.h" 10*48a8659cSMichal Wajdeczko 11*48a8659cSMichal Wajdeczko #define __XE_TILE_PRINTK_FMT(_tile, _fmt, _args...) "Tile%u: " _fmt, (_tile)->id, ##_args 12*48a8659cSMichal Wajdeczko 13*48a8659cSMichal Wajdeczko #define xe_tile_printk(_tile, _level, _fmt, ...) \ 14*48a8659cSMichal Wajdeczko xe_printk((_tile)->xe, _level, __XE_TILE_PRINTK_FMT((_tile), _fmt, ##__VA_ARGS__)) 15*48a8659cSMichal Wajdeczko 16*48a8659cSMichal Wajdeczko #define xe_tile_err(_tile, _fmt, ...) \ 17*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), err, _fmt, ##__VA_ARGS__) 18*48a8659cSMichal Wajdeczko 19*48a8659cSMichal Wajdeczko #define xe_tile_err_once(_tile, _fmt, ...) \ 20*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), err_once, _fmt, ##__VA_ARGS__) 21*48a8659cSMichal Wajdeczko 22*48a8659cSMichal Wajdeczko #define xe_tile_err_ratelimited(_tile, _fmt, ...) \ 23*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), err_ratelimited, _fmt, ##__VA_ARGS__) 24*48a8659cSMichal Wajdeczko 25*48a8659cSMichal Wajdeczko #define xe_tile_warn(_tile, _fmt, ...) \ 26*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), warn, _fmt, ##__VA_ARGS__) 27*48a8659cSMichal Wajdeczko 28*48a8659cSMichal Wajdeczko #define xe_tile_notice(_tile, _fmt, ...) \ 29*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), notice, _fmt, ##__VA_ARGS__) 30*48a8659cSMichal Wajdeczko 31*48a8659cSMichal Wajdeczko #define xe_tile_info(_tile, _fmt, ...) \ 32*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), info, _fmt, ##__VA_ARGS__) 33*48a8659cSMichal Wajdeczko 34*48a8659cSMichal Wajdeczko #define xe_tile_dbg(_tile, _fmt, ...) \ 35*48a8659cSMichal Wajdeczko xe_tile_printk((_tile), dbg, _fmt, ##__VA_ARGS__) 36*48a8659cSMichal Wajdeczko 37*48a8659cSMichal Wajdeczko #define xe_tile_WARN_type(_tile, _type, _condition, _fmt, ...) \ 38*48a8659cSMichal Wajdeczko xe_WARN##_type((_tile)->xe, _condition, _fmt, ## __VA_ARGS__) 39*48a8659cSMichal Wajdeczko 40*48a8659cSMichal Wajdeczko #define xe_tile_WARN(_tile, _condition, _fmt, ...) \ 41*48a8659cSMichal Wajdeczko xe_tile_WARN_type((_tile),, _condition, __XE_TILE_PRINTK_FMT((_tile), _fmt, ##__VA_ARGS__)) 42*48a8659cSMichal Wajdeczko 43*48a8659cSMichal Wajdeczko #define xe_tile_WARN_ONCE(_tile, _condition, _fmt, ...) \ 44*48a8659cSMichal Wajdeczko xe_tile_WARN_type((_tile), _ONCE, _condition, __XE_TILE_PRINTK_FMT((_tile), _fmt, ##__VA_ARGS__)) 45*48a8659cSMichal Wajdeczko 46*48a8659cSMichal Wajdeczko #define xe_tile_WARN_ON(_tile, _condition) \ 47*48a8659cSMichal Wajdeczko xe_tile_WARN((_tile), _condition, "%s(%s)", "WARN_ON", __stringify(_condition)) 48*48a8659cSMichal Wajdeczko 49*48a8659cSMichal Wajdeczko #define xe_tile_WARN_ON_ONCE(_tile, _condition) \ 50*48a8659cSMichal Wajdeczko xe_tile_WARN_ONCE((_tile), _condition, "%s(%s)", "WARN_ON_ONCE", __stringify(_condition)) 51*48a8659cSMichal Wajdeczko 52*48a8659cSMichal Wajdeczko static inline void __xe_tile_printfn_err(struct drm_printer *p, struct va_format *vaf) 53*48a8659cSMichal Wajdeczko { 54*48a8659cSMichal Wajdeczko struct xe_tile *tile = p->arg; 55*48a8659cSMichal Wajdeczko 56*48a8659cSMichal Wajdeczko xe_tile_err(tile, "%pV", vaf); 57*48a8659cSMichal Wajdeczko } 58*48a8659cSMichal Wajdeczko 59*48a8659cSMichal Wajdeczko static inline void __xe_tile_printfn_info(struct drm_printer *p, struct va_format *vaf) 60*48a8659cSMichal Wajdeczko { 61*48a8659cSMichal Wajdeczko struct xe_tile *tile = p->arg; 62*48a8659cSMichal Wajdeczko 63*48a8659cSMichal Wajdeczko xe_tile_info(tile, "%pV", vaf); 64*48a8659cSMichal Wajdeczko } 65*48a8659cSMichal Wajdeczko 66*48a8659cSMichal Wajdeczko static inline void __xe_tile_printfn_dbg(struct drm_printer *p, struct va_format *vaf) 67*48a8659cSMichal Wajdeczko { 68*48a8659cSMichal Wajdeczko struct xe_tile *tile = p->arg; 69*48a8659cSMichal Wajdeczko struct drm_printer dbg; 70*48a8659cSMichal Wajdeczko 71*48a8659cSMichal Wajdeczko /* 72*48a8659cSMichal Wajdeczko * The original xe_tile_dbg() callsite annotations are useless here, 73*48a8659cSMichal Wajdeczko * redirect to the tweaked xe_dbg_printer() instead. 74*48a8659cSMichal Wajdeczko */ 75*48a8659cSMichal Wajdeczko dbg = xe_dbg_printer(tile->xe); 76*48a8659cSMichal Wajdeczko dbg.origin = p->origin; 77*48a8659cSMichal Wajdeczko 78*48a8659cSMichal Wajdeczko drm_printf(&dbg, __XE_TILE_PRINTK_FMT(tile, "%pV", vaf)); 79*48a8659cSMichal Wajdeczko } 80*48a8659cSMichal Wajdeczko 81*48a8659cSMichal Wajdeczko /** 82*48a8659cSMichal Wajdeczko * xe_tile_err_printer - Construct a &drm_printer that outputs to xe_tile_err() 83*48a8659cSMichal Wajdeczko * @tile: the &xe_tile pointer to use in xe_tile_err() 84*48a8659cSMichal Wajdeczko * 85*48a8659cSMichal Wajdeczko * Return: The &drm_printer object. 86*48a8659cSMichal Wajdeczko */ 87*48a8659cSMichal Wajdeczko static inline struct drm_printer xe_tile_err_printer(struct xe_tile *tile) 88*48a8659cSMichal Wajdeczko { 89*48a8659cSMichal Wajdeczko struct drm_printer p = { 90*48a8659cSMichal Wajdeczko .printfn = __xe_tile_printfn_err, 91*48a8659cSMichal Wajdeczko .arg = tile, 92*48a8659cSMichal Wajdeczko }; 93*48a8659cSMichal Wajdeczko return p; 94*48a8659cSMichal Wajdeczko } 95*48a8659cSMichal Wajdeczko 96*48a8659cSMichal Wajdeczko /** 97*48a8659cSMichal Wajdeczko * xe_tile_info_printer - Construct a &drm_printer that outputs to xe_tile_info() 98*48a8659cSMichal Wajdeczko * @tile: the &xe_tile pointer to use in xe_tile_info() 99*48a8659cSMichal Wajdeczko * 100*48a8659cSMichal Wajdeczko * Return: The &drm_printer object. 101*48a8659cSMichal Wajdeczko */ 102*48a8659cSMichal Wajdeczko static inline struct drm_printer xe_tile_info_printer(struct xe_tile *tile) 103*48a8659cSMichal Wajdeczko { 104*48a8659cSMichal Wajdeczko struct drm_printer p = { 105*48a8659cSMichal Wajdeczko .printfn = __xe_tile_printfn_info, 106*48a8659cSMichal Wajdeczko .arg = tile, 107*48a8659cSMichal Wajdeczko }; 108*48a8659cSMichal Wajdeczko return p; 109*48a8659cSMichal Wajdeczko } 110*48a8659cSMichal Wajdeczko 111*48a8659cSMichal Wajdeczko /** 112*48a8659cSMichal Wajdeczko * xe_tile_dbg_printer - Construct a &drm_printer that outputs like xe_tile_dbg() 113*48a8659cSMichal Wajdeczko * @tile: the &xe_tile pointer to use in xe_tile_dbg() 114*48a8659cSMichal Wajdeczko * 115*48a8659cSMichal Wajdeczko * Return: The &drm_printer object. 116*48a8659cSMichal Wajdeczko */ 117*48a8659cSMichal Wajdeczko static inline struct drm_printer xe_tile_dbg_printer(struct xe_tile *tile) 118*48a8659cSMichal Wajdeczko { 119*48a8659cSMichal Wajdeczko struct drm_printer p = { 120*48a8659cSMichal Wajdeczko .printfn = __xe_tile_printfn_dbg, 121*48a8659cSMichal Wajdeczko .arg = tile, 122*48a8659cSMichal Wajdeczko .origin = (const void *)_THIS_IP_, 123*48a8659cSMichal Wajdeczko }; 124*48a8659cSMichal Wajdeczko return p; 125*48a8659cSMichal Wajdeczko } 126*48a8659cSMichal Wajdeczko 127*48a8659cSMichal Wajdeczko #endif 128