17eeb0e54SZhanjun Dong /* SPDX-License-Identifier: MIT */ 27eeb0e54SZhanjun Dong /* 37eeb0e54SZhanjun Dong * Copyright © 2025 Intel Corporation 47eeb0e54SZhanjun Dong */ 57eeb0e54SZhanjun Dong 67eeb0e54SZhanjun Dong #ifndef _ABI_GUC_LFD_ABI_H_ 77eeb0e54SZhanjun Dong #define _ABI_GUC_LFD_ABI_H_ 87eeb0e54SZhanjun Dong 97eeb0e54SZhanjun Dong #include <linux/types.h> 107eeb0e54SZhanjun Dong 117eeb0e54SZhanjun Dong #include "guc_lic_abi.h" 127eeb0e54SZhanjun Dong 137eeb0e54SZhanjun Dong /* The current major version of GuC-Log-File format. */ 147eeb0e54SZhanjun Dong #define GUC_LFD_FORMAT_VERSION_MAJOR 0x0001 157eeb0e54SZhanjun Dong /* The current minor version of GuC-Log-File format. */ 167eeb0e54SZhanjun Dong #define GUC_LFD_FORMAT_VERSION_MINOR 0x0000 177eeb0e54SZhanjun Dong 187eeb0e54SZhanjun Dong /** enum guc_lfd_type - Log format descriptor type */ 197eeb0e54SZhanjun Dong enum guc_lfd_type { 207eeb0e54SZhanjun Dong /** 217eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_FW_REQUIRED_RANGE_START: Start of range for 227eeb0e54SZhanjun Dong * required LFDs from GuC 237eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_FW_VERSION: GuC Firmware Version structure. 247eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_GUC_DEVICE_ID: GuC microcontroller device ID. 257eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_TSC_FREQUENCY: Frequency of GuC timestamps. 267eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_GMD_ID: HW GMD ID. 277eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_BUILD_PLATFORM_ID: GuC build platform ID. 287eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_FW_REQUIRED_RANGE_END: End of range for 297eeb0e54SZhanjun Dong * required LFDs from GuC 307eeb0e54SZhanjun Dong */ 317eeb0e54SZhanjun Dong GUC_LFD_TYPE_FW_REQUIRED_RANGE_START = 0x1, 327eeb0e54SZhanjun Dong GUC_LFD_TYPE_FW_VERSION = 0x1, 337eeb0e54SZhanjun Dong GUC_LFD_TYPE_GUC_DEVICE_ID = 0x2, 347eeb0e54SZhanjun Dong GUC_LFD_TYPE_TSC_FREQUENCY = 0x3, 357eeb0e54SZhanjun Dong GUC_LFD_TYPE_GMD_ID = 0x4, 367eeb0e54SZhanjun Dong GUC_LFD_TYPE_BUILD_PLATFORM_ID = 0x5, 377eeb0e54SZhanjun Dong GUC_LFD_TYPE_FW_REQUIRED_RANGE_END = 0x1FFF, 387eeb0e54SZhanjun Dong 397eeb0e54SZhanjun Dong /** 407eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_FW_OPTIONAL_RANGE_START: Start of range for 417eeb0e54SZhanjun Dong * optional LFDs from GuC 427eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_LOG_EVENTS_BUFFER: Log-event-entries buffer. 437eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_FW_CRASH_DUMP: GuC generated crash-dump blob. 447eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_FW_OPTIONAL_RANGE_END: End of range for 457eeb0e54SZhanjun Dong * optional LFDs from GuC 467eeb0e54SZhanjun Dong */ 477eeb0e54SZhanjun Dong GUC_LFD_TYPE_FW_OPTIONAL_RANGE_START = 0x2000, 487eeb0e54SZhanjun Dong GUC_LFD_TYPE_LOG_EVENTS_BUFFER = 0x2000, 497eeb0e54SZhanjun Dong GUC_LFD_TYPE_FW_CRASH_DUMP = 0x2001, 507eeb0e54SZhanjun Dong GUC_LFD_TYPE_FW_OPTIONAL_RANGE_END = 0x3FFF, 517eeb0e54SZhanjun Dong 527eeb0e54SZhanjun Dong /** 537eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_KMD_REQUIRED_RANGE_START: Start of range for 547eeb0e54SZhanjun Dong * required KMD LFDs 557eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_OS_ID: An identifier for the OS. 567eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_KMD_REQUIRED_RANGE_END: End of this range for 577eeb0e54SZhanjun Dong * required KMD LFDs 587eeb0e54SZhanjun Dong */ 597eeb0e54SZhanjun Dong GUC_LFD_TYPE_KMD_REQUIRED_RANGE_START = 0x4000, 607eeb0e54SZhanjun Dong GUC_LFD_TYPE_OS_ID = 0x4000, 617eeb0e54SZhanjun Dong GUC_LFD_TYPE_KMD_REQUIRED_RANGE_END = 0x5FFF, 627eeb0e54SZhanjun Dong 637eeb0e54SZhanjun Dong /** 647eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_START: Start of range for 657eeb0e54SZhanjun Dong * optional KMD LFDs 667eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_BINARY_SCHEMA_FORMAT: Binary representation of 677eeb0e54SZhanjun Dong * GuC log-events schema. 687eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_HOST_COMMENT: ASCII string containing comments 697eeb0e54SZhanjun Dong * from the host/KMD. 707eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_TIMESTAMP_ANCHOR: A timestamp anchor, to convert 717eeb0e54SZhanjun Dong * between host and GuC timestamp. 727eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_TIMESTAMP_ANCHOR_CONFIG: Timestamp anchor 737eeb0e54SZhanjun Dong * configuration, definition of timestamp frequency and bit width. 747eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_END: End of this range for 757eeb0e54SZhanjun Dong * optional KMD LFDs 767eeb0e54SZhanjun Dong */ 777eeb0e54SZhanjun Dong GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_START = 0x6000, 787eeb0e54SZhanjun Dong GUC_LFD_TYPE_BINARY_SCHEMA_FORMAT = 0x6000, 797eeb0e54SZhanjun Dong GUC_LFD_TYPE_HOST_COMMENT = 0x6001, 807eeb0e54SZhanjun Dong GUC_LFD_TYPE_TIMESTAMP_ANCHOR = 0x6002, 817eeb0e54SZhanjun Dong GUC_LFD_TYPE_TIMESTAMP_ANCHOR_CONFIG = 0x6003, 827eeb0e54SZhanjun Dong GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_END = 0x7FFF, 837eeb0e54SZhanjun Dong 847eeb0e54SZhanjun Dong /* 857eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_RESERVED_RANGE_START: Start of reserved range 867eeb0e54SZhanjun Dong * @GUC_LFD_TYPE_RESERVED_RANGE_END: End of reserved range 877eeb0e54SZhanjun Dong */ 887eeb0e54SZhanjun Dong GUC_LFD_TYPE_RESERVED_RANGE_START = 0x8000, 897eeb0e54SZhanjun Dong GUC_LFD_TYPE_RESERVED_RANGE_END = 0xFFFF, 907eeb0e54SZhanjun Dong }; 917eeb0e54SZhanjun Dong 927eeb0e54SZhanjun Dong /** enum guc_lfd_os_type - OS Type LFD-ID */ 937eeb0e54SZhanjun Dong enum guc_lfd_os_type { 947eeb0e54SZhanjun Dong /** @GUC_LFD_OS_TYPE_OSID_WIN: Windows OS */ 957eeb0e54SZhanjun Dong GUC_LFD_OS_TYPE_OSID_WIN = 0x1, 967eeb0e54SZhanjun Dong /** @GUC_LFD_OS_TYPE_OSID_LIN: Linux OS */ 977eeb0e54SZhanjun Dong GUC_LFD_OS_TYPE_OSID_LIN = 0x2, 987eeb0e54SZhanjun Dong /** @GUC_LFD_OS_TYPE_OSID_VMW: VMWare OS */ 997eeb0e54SZhanjun Dong GUC_LFD_OS_TYPE_OSID_VMW = 0x3, 1007eeb0e54SZhanjun Dong /** @GUC_LFD_OS_TYPE_OSID_OTHER: Other */ 1017eeb0e54SZhanjun Dong GUC_LFD_OS_TYPE_OSID_OTHER = 0x4, 1027eeb0e54SZhanjun Dong }; 1037eeb0e54SZhanjun Dong 1047eeb0e54SZhanjun Dong /** struct guc_lfd_data - A generic header structure for all LFD blocks */ 1057eeb0e54SZhanjun Dong struct guc_lfd_data { 1067eeb0e54SZhanjun Dong /** @header: A 32 bits dword, contains multiple bit fields */ 1077eeb0e54SZhanjun Dong u32 header; 1087eeb0e54SZhanjun Dong /* LFD type. See guc_lfd_type */ 1097eeb0e54SZhanjun Dong #define GUC_LFD_DATA_HEADER_MASK_TYPE GENMASK(31, 16) 1107eeb0e54SZhanjun Dong #define GUC_LFD_DATA_HEADER_MASK_MAGIC GENMASK(15, 0) 1117eeb0e54SZhanjun Dong 1127eeb0e54SZhanjun Dong /** @data_count: Number of dwords the `data` field contains. */ 1137eeb0e54SZhanjun Dong u32 data_count; 1147eeb0e54SZhanjun Dong /** @data: Data defined by GUC_LFD_DATA_HEADER_MASK_TYPE */ 1157eeb0e54SZhanjun Dong u32 data[] __counted_by(data_count); 1167eeb0e54SZhanjun Dong } __packed; 1177eeb0e54SZhanjun Dong 1187eeb0e54SZhanjun Dong /** 1197eeb0e54SZhanjun Dong * struct guc_lfd_data_log_events_buf - GuC Log Events Buffer. 1207eeb0e54SZhanjun Dong * This is optional fw LFD data 1217eeb0e54SZhanjun Dong */ 1227eeb0e54SZhanjun Dong struct guc_lfd_data_log_events_buf { 1237eeb0e54SZhanjun Dong /** 1247eeb0e54SZhanjun Dong * @log_events_format_version: version of GuC log format of buffer 1257eeb0e54SZhanjun Dong */ 1267eeb0e54SZhanjun Dong u32 log_events_format_version; 1277eeb0e54SZhanjun Dong /** 1287eeb0e54SZhanjun Dong * @log_event: The log event data. 1297eeb0e54SZhanjun Dong * Size in dwords is LFD block size - 1. 1307eeb0e54SZhanjun Dong */ 1317eeb0e54SZhanjun Dong u32 log_event[]; 1327eeb0e54SZhanjun Dong } __packed; 1337eeb0e54SZhanjun Dong 1347eeb0e54SZhanjun Dong /** struct guc_lfd_data_os_info - OS Version Information. */ 1357eeb0e54SZhanjun Dong struct guc_lfd_data_os_info { 1367eeb0e54SZhanjun Dong /** 1377eeb0e54SZhanjun Dong * @os_id: enum values to identify the OS brand. 1387eeb0e54SZhanjun Dong * See guc_lfd_os_type for the range of types 1397eeb0e54SZhanjun Dong */ 1407eeb0e54SZhanjun Dong u32 os_id; 1417eeb0e54SZhanjun Dong /** 1427eeb0e54SZhanjun Dong * @build_version: ASCII string containing OS build version 1437eeb0e54SZhanjun Dong * information based on os_id. String is padded with null 1447eeb0e54SZhanjun Dong * characters to ensure its DWORD aligned. 1457eeb0e54SZhanjun Dong * Size in dwords is LFD block size - 1. 1467eeb0e54SZhanjun Dong */ 1477eeb0e54SZhanjun Dong char build_version[]; 1487eeb0e54SZhanjun Dong } __packed; 1497eeb0e54SZhanjun Dong 1507eeb0e54SZhanjun Dong /** 151*4cdcfa64SJani Nikula * struct guc_lfd_file_header - Header of GuC Log Streaming-LFD-File Format. 1527eeb0e54SZhanjun Dong * This structure encapsulates the layout of the guc-log-file format 1537eeb0e54SZhanjun Dong */ 1547eeb0e54SZhanjun Dong struct guc_lfd_file_header { 1557eeb0e54SZhanjun Dong /** 1567eeb0e54SZhanjun Dong * @magic: A magic number set by producer of a GuC log file to 1577eeb0e54SZhanjun Dong * identify that file is a valid guc-log-file containing a stream 1587eeb0e54SZhanjun Dong * of LFDs. 1597eeb0e54SZhanjun Dong */ 1607eeb0e54SZhanjun Dong u64 magic; 1617eeb0e54SZhanjun Dong /** @version: Version of this file format layout */ 1627eeb0e54SZhanjun Dong u32 version; 1637eeb0e54SZhanjun Dong #define GUC_LFD_FILE_HEADER_VERSION_MASK_MAJOR GENMASK(31, 16) 1647eeb0e54SZhanjun Dong #define GUC_LFD_FILE_HEADER_VERSION_MASK_MINOR GENMASK(15, 0) 1657eeb0e54SZhanjun Dong 166*4cdcfa64SJani Nikula /** @stream: A stream of one or more guc_lfd_data LFD blocks */ 1677eeb0e54SZhanjun Dong u32 stream[]; 1687eeb0e54SZhanjun Dong } __packed; 1697eeb0e54SZhanjun Dong 1707eeb0e54SZhanjun Dong #endif 171