/* SPDX-License-Identifier: MIT */ /* * Copyright © 2025 Intel Corporation */ #ifndef _ABI_GUC_LFD_ABI_H_ #define _ABI_GUC_LFD_ABI_H_ #include <linux/types.h> #include "guc_lic_abi.h" /* The current major version of GuC-Log-File format. */ #define GUC_LFD_FORMAT_VERSION_MAJOR 0x0001 /* The current minor version of GuC-Log-File format. */ #define GUC_LFD_FORMAT_VERSION_MINOR 0x0000 /** enum guc_lfd_type - Log format descriptor type */ enum guc_lfd_type { /** * @GUC_LFD_TYPE_FW_REQUIRED_RANGE_START: Start of range for * required LFDs from GuC * @GUC_LFD_TYPE_FW_VERSION: GuC Firmware Version structure. * @GUC_LFD_TYPE_GUC_DEVICE_ID: GuC microcontroller device ID. * @GUC_LFD_TYPE_TSC_FREQUENCY: Frequency of GuC timestamps. * @GUC_LFD_TYPE_GMD_ID: HW GMD ID. * @GUC_LFD_TYPE_BUILD_PLATFORM_ID: GuC build platform ID. * @GUC_LFD_TYPE_FW_REQUIRED_RANGE_END: End of range for * required LFDs from GuC */ GUC_LFD_TYPE_FW_REQUIRED_RANGE_START = 0x1, GUC_LFD_TYPE_FW_VERSION = 0x1, GUC_LFD_TYPE_GUC_DEVICE_ID = 0x2, GUC_LFD_TYPE_TSC_FREQUENCY = 0x3, GUC_LFD_TYPE_GMD_ID = 0x4, GUC_LFD_TYPE_BUILD_PLATFORM_ID = 0x5, GUC_LFD_TYPE_FW_REQUIRED_RANGE_END = 0x1FFF, /** * @GUC_LFD_TYPE_FW_OPTIONAL_RANGE_START: Start of range for * optional LFDs from GuC * @GUC_LFD_TYPE_LOG_EVENTS_BUFFER: Log-event-entries buffer. * @GUC_LFD_TYPE_FW_CRASH_DUMP: GuC generated crash-dump blob. * @GUC_LFD_TYPE_FW_OPTIONAL_RANGE_END: End of range for * optional LFDs from GuC */ GUC_LFD_TYPE_FW_OPTIONAL_RANGE_START = 0x2000, GUC_LFD_TYPE_LOG_EVENTS_BUFFER = 0x2000, GUC_LFD_TYPE_FW_CRASH_DUMP = 0x2001, GUC_LFD_TYPE_FW_OPTIONAL_RANGE_END = 0x3FFF, /** * @GUC_LFD_TYPE_KMD_REQUIRED_RANGE_START: Start of range for * required KMD LFDs * @GUC_LFD_TYPE_OS_ID: An identifier for the OS. * @GUC_LFD_TYPE_KMD_REQUIRED_RANGE_END: End of this range for * required KMD LFDs */ GUC_LFD_TYPE_KMD_REQUIRED_RANGE_START = 0x4000, GUC_LFD_TYPE_OS_ID = 0x4000, GUC_LFD_TYPE_KMD_REQUIRED_RANGE_END = 0x5FFF, /** * @GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_START: Start of range for * optional KMD LFDs * @GUC_LFD_TYPE_BINARY_SCHEMA_FORMAT: Binary representation of * GuC log-events schema. * @GUC_LFD_TYPE_HOST_COMMENT: ASCII string containing comments * from the host/KMD. * @GUC_LFD_TYPE_TIMESTAMP_ANCHOR: A timestamp anchor, to convert * between host and GuC timestamp. * @GUC_LFD_TYPE_TIMESTAMP_ANCHOR_CONFIG: Timestamp anchor * configuration, definition of timestamp frequency and bit width. * @GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_END: End of this range for * optional KMD LFDs */ GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_START = 0x6000, GUC_LFD_TYPE_BINARY_SCHEMA_FORMAT = 0x6000, GUC_LFD_TYPE_HOST_COMMENT = 0x6001, GUC_LFD_TYPE_TIMESTAMP_ANCHOR = 0x6002, GUC_LFD_TYPE_TIMESTAMP_ANCHOR_CONFIG = 0x6003, GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_END = 0x7FFF, /* * @GUC_LFD_TYPE_RESERVED_RANGE_START: Start of reserved range * @GUC_LFD_TYPE_RESERVED_RANGE_END: End of reserved range */ GUC_LFD_TYPE_RESERVED_RANGE_START = 0x8000, GUC_LFD_TYPE_RESERVED_RANGE_END = 0xFFFF, }; /** enum guc_lfd_os_type - OS Type LFD-ID */ enum guc_lfd_os_type { /** @GUC_LFD_OS_TYPE_OSID_WIN: Windows OS */ GUC_LFD_OS_TYPE_OSID_WIN = 0x1, /** @GUC_LFD_OS_TYPE_OSID_LIN: Linux OS */ GUC_LFD_OS_TYPE_OSID_LIN = 0x2, /** @GUC_LFD_OS_TYPE_OSID_VMW: VMWare OS */ GUC_LFD_OS_TYPE_OSID_VMW = 0x3, /** @GUC_LFD_OS_TYPE_OSID_OTHER: Other */ GUC_LFD_OS_TYPE_OSID_OTHER = 0x4, }; /** struct guc_lfd_data - A generic header structure for all LFD blocks */ struct guc_lfd_data { /** @header: A 32 bits dword, contains multiple bit fields */ u32 header; /* LFD type. See guc_lfd_type */ #define GUC_LFD_DATA_HEADER_MASK_TYPE GENMASK(31, 16) #define GUC_LFD_DATA_HEADER_MASK_MAGIC GENMASK(15, 0) /** @data_count: Number of dwords the `data` field contains. */ u32 data_count; /** @data: Data defined by GUC_LFD_DATA_HEADER_MASK_TYPE */ u32 data[] __counted_by(data_count); } __packed; /** * struct guc_lfd_data_log_events_buf - GuC Log Events Buffer. * This is optional fw LFD data */ struct guc_lfd_data_log_events_buf { /** * @log_events_format_version: version of GuC log format of buffer */ u32 log_events_format_version; /** * @log_event: The log event data. * Size in dwords is LFD block size - 1. */ u32 log_event[]; } __packed; /** struct guc_lfd_data_os_info - OS Version Information. */ struct guc_lfd_data_os_info { /** * @os_id: enum values to identify the OS brand. * See guc_lfd_os_type for the range of types */ u32 os_id; /** * @build_version: ASCII string containing OS build version * information based on os_id. String is padded with null * characters to ensure its DWORD aligned. * Size in dwords is LFD block size - 1. */ char build_version[]; } __packed; /** * struct guc_lfd_file_header - Header of GuC Log Streaming-LFD-File Format. * This structure encapsulates the layout of the guc-log-file format */ struct guc_lfd_file_header { /** * @magic: A magic number set by producer of a GuC log file to * identify that file is a valid guc-log-file containing a stream * of LFDs. */ u64 magic; /** @version: Version of this file format layout */ u32 version; #define GUC_LFD_FILE_HEADER_VERSION_MASK_MAJOR GENMASK(31, 16) #define GUC_LFD_FILE_HEADER_VERSION_MASK_MINOR GENMASK(15, 0) /** @stream: A stream of one or more guc_lfd_data LFD blocks */ u32 stream[]; } __packed; #endif