1 // SPDX-License-Identifier: GPL-2.0-only OR MIT 2 /* Copyright (C) The Asahi Linux Contributors */ 3 4 #undef TRACE_SYSTEM 5 #define TRACE_SYSTEM dcp 6 7 #if !defined(_TRACE_DCP_H) || defined(TRACE_HEADER_MULTI_READ) 8 #define _TRACE_DCP_H 9 10 #include "afk.h" 11 #include "dptxep.h" 12 #include "dcp-internal.h" 13 #include "parser.h" 14 15 #include <linux/stringify.h> 16 #include <linux/types.h> 17 #include <linux/tracepoint.h> 18 19 #define show_dcp_endpoint(ep) \ 20 __print_symbolic(ep, { SYSTEM_ENDPOINT, "system" }, \ 21 { TEST_ENDPOINT, "test" }, \ 22 { DCP_EXPERT_ENDPOINT, "dcpexpert" }, \ 23 { DISP0_ENDPOINT, "disp0" }, \ 24 { DPTX_ENDPOINT, "dptxport" }, \ 25 { HDCP_ENDPOINT, "hdcp" }, \ 26 { REMOTE_ALLOC_ENDPOINT, "remotealloc" }, \ 27 { IOMFB_ENDPOINT, "iomfb" }) 28 #define print_epic_type(etype) \ 29 __print_symbolic(etype, { EPIC_TYPE_NOTIFY, "notify" }, \ 30 { EPIC_TYPE_COMMAND, "command" }, \ 31 { EPIC_TYPE_REPLY, "reply" }, \ 32 { EPIC_TYPE_NOTIFY_ACK, "notify-ack" }) 33 34 #define print_epic_category(ecat) \ 35 __print_symbolic(ecat, { EPIC_CAT_REPORT, "report" }, \ 36 { EPIC_CAT_NOTIFY, "notify" }, \ 37 { EPIC_CAT_REPLY, "reply" }, \ 38 { EPIC_CAT_COMMAND, "command" }) 39 40 #define show_dptxport_apcall(idx) \ 41 __print_symbolic( \ 42 idx, { DPTX_APCALL_ACTIVATE, "activate" }, \ 43 { DPTX_APCALL_DEACTIVATE, "deactivate" }, \ 44 { DPTX_APCALL_GET_MAX_DRIVE_SETTINGS, \ 45 "get_max_drive_settings" }, \ 46 { DPTX_APCALL_SET_DRIVE_SETTINGS, "set_drive_settings" }, \ 47 { DPTX_APCALL_GET_DRIVE_SETTINGS, "get_drive_settings" }, \ 48 { DPTX_APCALL_WILL_CHANGE_LINKG_CONFIG, \ 49 "will_change_link_config" }, \ 50 { DPTX_APCALL_DID_CHANGE_LINK_CONFIG, \ 51 "did_change_link_config" }, \ 52 { DPTX_APCALL_GET_MAX_LINK_RATE, "get_max_link_rate" }, \ 53 { DPTX_APCALL_GET_LINK_RATE, "get_link_rate" }, \ 54 { DPTX_APCALL_SET_LINK_RATE, "set_link_rate" }, \ 55 { DPTX_APCALL_GET_MAX_LANE_COUNT, \ 56 "get_max_lane_count" }, \ 57 { DPTX_APCALL_GET_ACTIVE_LANE_COUNT, \ 58 "get_active_lane_count" }, \ 59 { DPTX_APCALL_SET_ACTIVE_LANE_COUNT, \ 60 "set_active_lane_count" }, \ 61 { DPTX_APCALL_GET_SUPPORTS_DOWN_SPREAD, \ 62 "get_supports_downspread" }, \ 63 { DPTX_APCALL_GET_DOWN_SPREAD, "get_downspread" }, \ 64 { DPTX_APCALL_SET_DOWN_SPREAD, "set_downspread" }, \ 65 { DPTX_APCALL_GET_SUPPORTS_LANE_MAPPING, \ 66 "get_supports_lane_mapping" }, \ 67 { DPTX_APCALL_SET_LANE_MAP, "set_lane_map" }, \ 68 { DPTX_APCALL_GET_SUPPORTS_HPD, "get_supports_hpd" }, \ 69 { DPTX_APCALL_FORCE_HOTPLUG_DETECT, "force_hotplug_detect" }, \ 70 { DPTX_APCALL_INACTIVE_SINK_DETECTED, \ 71 "inactive_sink_detected" }, \ 72 { DPTX_APCALL_SET_TILED_DISPLAY_HINTS, \ 73 "set_tiled_display_hints" }, \ 74 { DPTX_APCALL_DEVICE_NOT_RESPONDING, \ 75 "device_not_responding" }, \ 76 { DPTX_APCALL_DEVICE_BUSY_TIMEOUT, "device_busy_timeout" }, \ 77 { DPTX_APCALL_DEVICE_NOT_STARTED, "device_not_started" }) 78 79 TRACE_EVENT(dcp_recv_msg, 80 TP_PROTO(struct apple_dcp *dcp, u8 endpoint, u64 message), 81 TP_ARGS(dcp, endpoint, message), 82 83 TP_STRUCT__entry(__string(devname, dev_name(dcp->dev)) 84 __field(u8, endpoint) 85 __field(u64, message)), 86 87 TP_fast_assign(__assign_str(devname, dev_name(dcp->dev)); 88 __entry->endpoint = endpoint; 89 __entry->message = message;), 90 91 TP_printk("%s: endpoint 0x%x (%s): received message 0x%016llx", 92 __get_str(devname), __entry->endpoint, 93 show_dcp_endpoint(__entry->endpoint), __entry->message)); 94 95 TRACE_EVENT(dcp_send_msg, 96 TP_PROTO(struct apple_dcp *dcp, u8 endpoint, u64 message), 97 TP_ARGS(dcp, endpoint, message), 98 99 TP_STRUCT__entry(__string(devname, dev_name(dcp->dev)) 100 __field(u8, endpoint) 101 __field(u64, message)), 102 103 TP_fast_assign(__assign_str(devname, dev_name(dcp->dev)); 104 __entry->endpoint = endpoint; 105 __entry->message = message;), 106 107 TP_printk("%s: endpoint 0x%x (%s): will send message 0x%016llx", 108 __get_str(devname), __entry->endpoint, 109 show_dcp_endpoint(__entry->endpoint), __entry->message)); 110 111 TRACE_EVENT( 112 afk_getbuf, TP_PROTO(struct apple_dcp_afkep *ep, u16 size, u16 tag), 113 TP_ARGS(ep, size, tag), 114 115 TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev)) 116 __field(u8, endpoint) __field(u16, size) 117 __field(u16, tag)), 118 119 TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev)); 120 __entry->endpoint = ep->endpoint; __entry->size = size; 121 __entry->tag = tag;), 122 123 TP_printk( 124 "%s: endpoint 0x%x (%s): get buffer with size 0x%x and tag 0x%x", 125 __get_str(devname), __entry->endpoint, 126 show_dcp_endpoint(__entry->endpoint), __entry->size, 127 __entry->tag)); 128 129 DECLARE_EVENT_CLASS(afk_rwptr_template, 130 TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr), 131 TP_ARGS(ep, rptr, wptr), 132 133 TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev)) 134 __field(u8, endpoint) __field(u32, rptr) 135 __field(u32, wptr)), 136 137 TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev)); 138 __entry->endpoint = ep->endpoint; 139 __entry->rptr = rptr; __entry->wptr = wptr;), 140 141 TP_printk("%s: endpoint 0x%x (%s): rptr 0x%x, wptr 0x%x", 142 __get_str(devname), __entry->endpoint, 143 show_dcp_endpoint(__entry->endpoint), __entry->rptr, 144 __entry->wptr)); 145 146 DEFINE_EVENT(afk_rwptr_template, afk_recv_rwptr_pre, 147 TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr), 148 TP_ARGS(ep, rptr, wptr)); 149 DEFINE_EVENT(afk_rwptr_template, afk_recv_rwptr_post, 150 TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr), 151 TP_ARGS(ep, rptr, wptr)); 152 DEFINE_EVENT(afk_rwptr_template, afk_send_rwptr_pre, 153 TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr), 154 TP_ARGS(ep, rptr, wptr)); 155 DEFINE_EVENT(afk_rwptr_template, afk_send_rwptr_post, 156 TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr), 157 TP_ARGS(ep, rptr, wptr)); 158 159 TRACE_EVENT( 160 afk_recv_qe, 161 TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 magic, u32 size), 162 TP_ARGS(ep, rptr, magic, size), 163 164 TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev)) 165 __field(u8, endpoint) __field(u32, rptr) 166 __field(u32, magic) 167 __field(u32, size)), 168 169 TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev)); 170 __entry->endpoint = ep->endpoint; __entry->rptr = rptr; 171 __entry->magic = magic; __entry->size = size;), 172 173 TP_printk("%s: endpoint 0x%x (%s): QE rptr 0x%x, magic 0x%x, size 0x%x", 174 __get_str(devname), __entry->endpoint, 175 show_dcp_endpoint(__entry->endpoint), __entry->rptr, 176 __entry->magic, __entry->size)); 177 178 TRACE_EVENT( 179 afk_recv_handle, 180 TP_PROTO(struct apple_dcp_afkep *ep, u32 channel, u32 type, 181 u32 data_size, struct epic_hdr *ehdr, 182 struct epic_sub_hdr *eshdr), 183 TP_ARGS(ep, channel, type, data_size, ehdr, eshdr), 184 185 TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev)) __field( 186 u8, endpoint) __field(u32, channel) __field(u32, type) 187 __field(u32, data_size) __field(u8, category) 188 __field(u16, subtype) 189 __field(u16, tag)), 190 191 TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev)); 192 __entry->endpoint = ep->endpoint; 193 __entry->channel = channel; __entry->type = type; 194 __entry->data_size = data_size; 195 __entry->category = eshdr->category, 196 __entry->subtype = le16_to_cpu(eshdr->type), 197 __entry->tag = le16_to_cpu(eshdr->tag)), 198 199 TP_printk( 200 "%s: endpoint 0x%x (%s): channel 0x%x, type 0x%x (%s), data_size 0x%x, category: 0x%x (%s), subtype: 0x%x, seq: 0x%x", 201 __get_str(devname), __entry->endpoint, 202 show_dcp_endpoint(__entry->endpoint), __entry->channel, 203 __entry->type, print_epic_type(__entry->type), 204 __entry->data_size, __entry->category, 205 print_epic_category(__entry->category), __entry->subtype, 206 __entry->tag)); 207 208 TRACE_EVENT(iomfb_callback, 209 TP_PROTO(struct apple_dcp *dcp, int tag, const char *name), 210 TP_ARGS(dcp, tag, name), 211 212 TP_STRUCT__entry( 213 __string(devname, dev_name(dcp->dev)) 214 __field(int, tag) 215 __field(const char *, name) 216 ), 217 218 TP_fast_assign( 219 __assign_str(devname, dev_name(dcp->dev)); 220 __entry->tag = tag; __entry->name = name; 221 ), 222 223 TP_printk("%s: Callback D%03d %s", __get_str(devname), __entry->tag, 224 __entry->name)); 225 226 TRACE_EVENT(iomfb_push, 227 TP_PROTO(struct apple_dcp *dcp, 228 const struct dcp_method_entry *method, int context, 229 int offset, int depth), 230 TP_ARGS(dcp, method, context, offset, depth), 231 232 TP_STRUCT__entry( 233 __string(devname, dev_name(dcp->dev)) 234 __string(name, method->name) 235 __field(int, context) 236 __field(int, offset) 237 __field(int, depth)), 238 239 TP_fast_assign( 240 __assign_str(devname, dev_name(dcp->dev)); 241 __assign_str(name, method->name); 242 __entry->context = context; __entry->offset = offset; 243 __entry->depth = depth; 244 ), 245 246 TP_printk("%s: Method %s: context %u, offset %u, depth %u", 247 __get_str(devname), __get_str(name), __entry->context, 248 __entry->offset, __entry->depth)); 249 250 TRACE_EVENT(iomfb_swap_submit, 251 TP_PROTO(struct apple_dcp *dcp, u32 swap_id), 252 TP_ARGS(dcp, swap_id), 253 TP_STRUCT__entry( 254 __field(u64, dcp) 255 __field(u32, swap_id) 256 ), 257 TP_fast_assign( 258 __entry->dcp = (u64)dcp; 259 __entry->swap_id = swap_id; 260 ), 261 TP_printk("dcp=%llx, swap_id=%d", 262 __entry->dcp, 263 __entry->swap_id) 264 ); 265 266 TRACE_EVENT(iomfb_swap_complete, 267 TP_PROTO(struct apple_dcp *dcp, u32 swap_id), 268 TP_ARGS(dcp, swap_id), 269 TP_STRUCT__entry( 270 __field(u64, dcp) 271 __field(u32, swap_id) 272 ), 273 TP_fast_assign( 274 __entry->dcp = (u64)dcp; 275 __entry->swap_id = swap_id; 276 ), 277 TP_printk("dcp=%llx, swap_id=%d", 278 __entry->dcp, 279 __entry->swap_id 280 ) 281 ); 282 283 TRACE_EVENT(iomfb_swap_complete_intent_gated, 284 TP_PROTO(struct apple_dcp *dcp, u32 swap_id, u32 width, u32 height), 285 TP_ARGS(dcp, swap_id, width, height), 286 TP_STRUCT__entry( 287 __field(u64, dcp) 288 __field(u32, swap_id) 289 __field(u32, width) 290 __field(u32, height) 291 ), 292 TP_fast_assign( 293 __entry->dcp = (u64)dcp; 294 __entry->swap_id = swap_id; 295 __entry->height = height; 296 __entry->width = width; 297 ), 298 TP_printk("dcp=%llx, swap_id=%u %ux%u", 299 __entry->dcp, 300 __entry->swap_id, 301 __entry->width, 302 __entry->height 303 ) 304 ); 305 306 TRACE_EVENT(iomfb_abort_swap_ap_gated, 307 TP_PROTO(struct apple_dcp *dcp, u32 swap_id), 308 TP_ARGS(dcp, swap_id), 309 TP_STRUCT__entry( 310 __field(u64, dcp) 311 __field(u32, swap_id) 312 ), 313 TP_fast_assign( 314 __entry->dcp = (u64)dcp; 315 __entry->swap_id = swap_id; 316 ), 317 TP_printk("dcp=%llx, swap_id=%u", 318 __entry->dcp, 319 __entry->swap_id 320 ) 321 ); 322 323 DECLARE_EVENT_CLASS(iomfb_parse_mode_template, 324 TP_PROTO(s64 id, struct dimension *horiz, struct dimension *vert, s64 best_color_mode, bool is_virtual, s64 score), 325 TP_ARGS(id, horiz, vert, best_color_mode, is_virtual, score), 326 327 TP_STRUCT__entry(__field(s64, id) 328 __field_struct(struct dimension, horiz) 329 __field_struct(struct dimension, vert) 330 __field(s64, best_color_mode) 331 __field(bool, is_virtual) 332 __field(s64, score)), 333 334 TP_fast_assign(__entry->id = id; 335 __entry->horiz = *horiz; 336 __entry->vert = *vert; 337 __entry->best_color_mode = best_color_mode; 338 __entry->is_virtual = is_virtual; 339 __entry->score = score;), 340 341 TP_printk("id: %lld, best_color_mode: %lld, resolution:%lldx%lld virtual: %d, score: %lld", 342 __entry->id, __entry->best_color_mode, 343 __entry->horiz.active, __entry->vert.active, 344 __entry->is_virtual, __entry->score)); 345 346 DEFINE_EVENT(iomfb_parse_mode_template, iomfb_parse_mode_success, 347 TP_PROTO(s64 id, struct dimension *horiz, struct dimension *vert, s64 best_color_mode, bool is_virtual, s64 score), 348 TP_ARGS(id, horiz, vert, best_color_mode, is_virtual, score)); 349 350 DEFINE_EVENT(iomfb_parse_mode_template, iomfb_parse_mode_fail, 351 TP_PROTO(s64 id, struct dimension *horiz, struct dimension *vert, s64 best_color_mode, bool is_virtual, s64 score), 352 TP_ARGS(id, horiz, vert, best_color_mode, is_virtual, score)); 353 354 TRACE_EVENT(dptxport_init, TP_PROTO(struct apple_dcp *dcp, u64 unit), 355 TP_ARGS(dcp, unit), 356 357 TP_STRUCT__entry(__string(devname, dev_name(dcp->dev)) 358 __field(u64, unit)), 359 360 TP_fast_assign(__assign_str(devname, dev_name(dcp->dev)); 361 __entry->unit = unit;), 362 363 TP_printk("%s: dptxport unit %lld initialized", __get_str(devname), 364 __entry->unit)); 365 366 TRACE_EVENT( 367 dptxport_apcall, 368 TP_PROTO(struct dptx_port *dptx, int idx, size_t len), 369 TP_ARGS(dptx, idx, len), 370 371 TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev)) 372 __field(u32, unit) __field(int, idx) __field(size_t, len)), 373 374 TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev)); 375 __entry->unit = dptx->unit; __entry->idx = idx; __entry->len = len;), 376 377 TP_printk("%s: dptx%d: AP Call %d (%s) with len %lu", __get_str(devname), 378 __entry->unit, 379 __entry->idx, show_dptxport_apcall(__entry->idx), __entry->len)); 380 381 TRACE_EVENT( 382 dptxport_validate_connection, 383 TP_PROTO(struct dptx_port *dptx, u8 core, u8 atc, u8 die), 384 TP_ARGS(dptx, core, atc, die), 385 386 TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev)) 387 __field(u32, unit) __field(u8, core) __field(u8, atc) __field(u8, die)), 388 389 TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev)); 390 __entry->unit = dptx->unit; __entry->core = core; __entry->atc = atc; __entry->die = die;), 391 392 TP_printk("%s: dptx%d: core %d, atc %d, die %d", __get_str(devname), 393 __entry->unit, __entry->core, __entry->atc, __entry->die)); 394 395 TRACE_EVENT( 396 dptxport_connect, 397 TP_PROTO(struct dptx_port *dptx, u8 core, u8 atc, u8 die), 398 TP_ARGS(dptx, core, atc, die), 399 400 TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev)) 401 __field(u32, unit) __field(u8, core) __field(u8, atc) __field(u8, die)), 402 403 TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev)); 404 __entry->unit = dptx->unit; __entry->core = core; __entry->atc = atc; __entry->die = die;), 405 406 TP_printk("%s: dptx%d: core %d, atc %d, die %d", __get_str(devname), 407 __entry->unit, __entry->core, __entry->atc, __entry->die)); 408 409 TRACE_EVENT( 410 dptxport_call_set_link_rate, 411 TP_PROTO(struct dptx_port *dptx, u32 link_rate), 412 TP_ARGS(dptx, link_rate), 413 414 TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev)) 415 __field(u32, unit) 416 __field(u32, link_rate)), 417 418 TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev)); 419 __entry->unit = dptx->unit; 420 __entry->link_rate = link_rate;), 421 422 TP_printk("%s: dptx%d: link rate 0x%x", __get_str(devname), __entry->unit, 423 __entry->link_rate)); 424 425 TRACE_EVENT(iomfb_brightness, 426 TP_PROTO(struct apple_dcp *dcp, u32 nits), 427 TP_ARGS(dcp, nits), 428 TP_STRUCT__entry( 429 __field(u64, dcp) 430 __field(u32, nits) 431 ), 432 TP_fast_assign( 433 __entry->dcp = (u64)dcp; 434 __entry->nits = nits; 435 ), 436 TP_printk("dcp=%llx, nits=%u (raw=0x%05x)", 437 __entry->dcp, 438 __entry->nits >> 16, 439 __entry->nits 440 ) 441 ); 442 443 #define show_eotf(eotf) \ 444 __print_symbolic(eotf, { 0, "SDR gamma"}, \ 445 { 1, "HDR gamma"}, \ 446 { 2, "ST 2084 (PQ)"}, \ 447 { 3, "BT.2100 (HLG)"}, \ 448 { 4, "unexpected"}) 449 450 #define show_encoding(enc) \ 451 __print_symbolic(enc, { 0, "RGB"}, \ 452 { 1, "YUV 4:2:0"}, \ 453 { 3, "YUV 4:2:2"}, \ 454 { 2, "YUV 4:4:4"}, \ 455 { 4, "DolbyVision (native)"}, \ 456 { 5, "DolbyVision (HDMI)"}, \ 457 { 6, "YCbCr 4:2:2 (DP tunnel)"}, \ 458 { 7, "YCbCr 4:2:2 (HDMI tunnel)"}, \ 459 { 8, "DolbyVision LL YCbCr 4:2:2"}, \ 460 { 9, "DolbyVision LL YCbCr 4:2:2 (DP)"}, \ 461 {10, "DolbyVision LL YCbCr 4:2:2 (HDMI)"}, \ 462 {11, "DolbyVision LL YCbCr 4:4:4"}, \ 463 {12, "DolbyVision LL RGB 4:2:2"}, \ 464 {13, "GRGB as YCbCr422 (Even line blue)"}, \ 465 {14, "GRGB as YCbCr422 (Even line red)"}, \ 466 {15, "unexpected"}) 467 468 #define show_colorimetry(col) \ 469 __print_symbolic(col, { 0, "SMPTE 170M/BT.601"}, \ 470 { 1, "BT.701"}, \ 471 { 2, "xvYCC601"}, \ 472 { 3, "xvYCC709"}, \ 473 { 4, "sYCC601"}, \ 474 { 5, "AdobeYCC601"}, \ 475 { 6, "BT.2020 (c)"}, \ 476 { 7, "BT.2020 (nc)"}, \ 477 { 8, "DolbyVision VSVDB"}, \ 478 { 9, "BT.2020 (RGB)"}, \ 479 {10, "sRGB"}, \ 480 {11, "scRGB"}, \ 481 {12, "scRGBfixed"}, \ 482 {13, "AdobeRGB"}, \ 483 {14, "DCI-P3 (D65)"}, \ 484 {15, "DCI-P3 (Theater)"}, \ 485 {16, "Default RGB"}, \ 486 {17, "unexpected"}) 487 488 #define show_range(range) \ 489 __print_symbolic(range, { 0, "Full"}, \ 490 { 1, "Limited"}, \ 491 { 2, "unexpected"}) 492 493 TRACE_EVENT(iomfb_color_mode, 494 TP_PROTO(struct apple_dcp *dcp, u32 id, u32 score, u32 depth, 495 u32 colorimetry, u32 eotf, u32 range, u32 pixel_enc), 496 TP_ARGS(dcp, id, score, depth, colorimetry, eotf, range, pixel_enc), 497 TP_STRUCT__entry( 498 __field(u64, dcp) 499 __field(u32, id) 500 __field(u32, score) 501 __field(u32, depth) 502 __field(u32, colorimetry) 503 __field(u32, eotf) 504 __field(u32, range) 505 __field(u32, pixel_enc) 506 ), 507 TP_fast_assign( 508 __entry->dcp = (u64)dcp; 509 __entry->id = id; 510 __entry->score = score; 511 __entry->depth = depth; 512 __entry->colorimetry = min_t(u32, colorimetry, 17U); 513 __entry->eotf = min_t(u32, eotf, 4U); 514 __entry->range = min_t(u32, range, 2U); 515 __entry->pixel_enc = min_t(u32, pixel_enc, 15U); 516 ), 517 TP_printk("dcp=%llx, id=%u, score=%u, depth=%u, colorimetry=%s, eotf=%s, range=%s, pixel_enc=%s", 518 __entry->dcp, 519 __entry->id, 520 __entry->score, 521 __entry->depth, 522 show_colorimetry(__entry->colorimetry), 523 show_eotf(__entry->eotf), 524 show_range(__entry->range), 525 show_encoding(__entry->pixel_enc) 526 ) 527 ); 528 529 TRACE_EVENT(iomfb_timing_mode, 530 TP_PROTO(struct apple_dcp *dcp, u32 id, u32 score, u32 width, 531 u32 height, u32 clock, u32 color_mode), 532 TP_ARGS(dcp, id, score, width, height, clock, color_mode), 533 TP_STRUCT__entry( 534 __field(u64, dcp) 535 __field(u32, id) 536 __field(u32, score) 537 __field(u32, width) 538 __field(u32, height) 539 __field(u32, clock) 540 __field(u32, color_mode) 541 ), 542 TP_fast_assign( 543 __entry->dcp = (u64)dcp; 544 __entry->id = id; 545 __entry->score = score; 546 __entry->width = width; 547 __entry->height = height; 548 __entry->clock = clock; 549 __entry->color_mode = color_mode; 550 ), 551 TP_printk("dcp=%llx, id=%u, score=%u, %ux%u@%u.%u, color_mode=%u", 552 __entry->dcp, 553 __entry->id, 554 __entry->score, 555 __entry->width, 556 __entry->height, 557 __entry->clock >> 16, 558 ((__entry->clock & 0xffff) * 1000) >> 16, 559 __entry->color_mode 560 ) 561 ); 562 563 TRACE_EVENT(avep_sound_mode, 564 TP_PROTO(struct apple_dcp *dcp, u32 rates, u64 formats, unsigned int nchans), 565 TP_ARGS(dcp, rates, formats, nchans), 566 TP_STRUCT__entry( 567 __field(u64, dcp) 568 __field(u32, rates) 569 __field(u64, formats) 570 __field(unsigned int, nchans) 571 ), 572 TP_fast_assign( 573 __entry->dcp = (u64)dcp; 574 __entry->rates = rates; 575 __entry->formats = formats; 576 __entry->nchans = nchans; 577 ), 578 TP_printk("dcp=%llx, rates=%#x, formats=%#llx, nchans=%#x", 579 __entry->dcp, 580 __entry->rates, 581 __entry->formats, 582 __entry->nchans 583 ) 584 ); 585 586 #endif /* _TRACE_DCP_H */ 587 588 /* This part must be outside protection */ 589 590 #undef TRACE_INCLUDE_FILE 591 #define TRACE_INCLUDE_FILE trace 592 593 #undef TRACE_INCLUDE_PATH 594 #define TRACE_INCLUDE_PATH . 595 596 #include <trace/define_trace.h> 597