brintos

brintos / linux-shallow public Read only

0
0
Text · 42.8 KiB · 33f462b Raw
1308 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright (c) 2020-2024, Intel Corporation.4 */5 6/**7 * @file8 * @brief JSM shared definitions9 *10 * @ingroup Jsm11 * @brief JSM shared definitions12 * @{13 */14#ifndef VPU_JSM_API_H15#define VPU_JSM_API_H16 17/*18 * Major version changes that break backward compatibility19 */20#define VPU_JSM_API_VER_MAJOR 321 22/*23 * Minor version changes when API backward compatibility is preserved.24 */25#define VPU_JSM_API_VER_MINOR 1626 27/*28 * API header changed (field names, documentation, formatting) but API itself has not been changed29 */30#define VPU_JSM_API_VER_PATCH 031 32/*33 * Index in the API version table34 */35#define VPU_JSM_API_VER_INDEX 436 37/*38 * Number of Priority Bands for Hardware Scheduling39 * Bands: RealTime, Focus, Normal, Idle40 */41#define VPU_HWS_NUM_PRIORITY_BANDS 442 43/* Max number of impacted contexts that can be dealt with the engine reset command */44#define VPU_MAX_ENGINE_RESET_IMPACTED_CONTEXTS 345 46/*47 * Pack the API structures to enforce binary compatibility48 * Align to 8 bytes for optimal performance49 */50#pragma pack(push, 8)51 52/*53 * Engine indexes.54 */55#define VPU_ENGINE_COMPUTE 056#define VPU_ENGINE_COPY	   157#define VPU_ENGINE_NB	   258 59/*60 * VPU status values.61 */62#define VPU_JSM_STATUS_SUCCESS				 0x0U63#define VPU_JSM_STATUS_PARSING_ERR			 0x1U64#define VPU_JSM_STATUS_PROCESSING_ERR			 0x2U65#define VPU_JSM_STATUS_PREEMPTED			 0x3U66#define VPU_JSM_STATUS_ABORTED				 0x4U67#define VPU_JSM_STATUS_USER_CTX_VIOL_ERR		 0x5U68#define VPU_JSM_STATUS_GLOBAL_CTX_VIOL_ERR		 0x6U69#define VPU_JSM_STATUS_MVNCI_WRONG_INPUT_FORMAT		 0x7U70#define VPU_JSM_STATUS_MVNCI_UNSUPPORTED_NETWORK_ELEMENT 0x8U71#define VPU_JSM_STATUS_MVNCI_INVALID_HANDLE		 0x9U72#define VPU_JSM_STATUS_MVNCI_OUT_OF_RESOURCES		 0xAU73#define VPU_JSM_STATUS_MVNCI_NOT_IMPLEMENTED		 0xBU74#define VPU_JSM_STATUS_MVNCI_INTERNAL_ERROR		 0xCU75/* Job status returned when the job was preempted mid-inference */76#define VPU_JSM_STATUS_PREEMPTED_MID_INFERENCE		 0xDU77 78/*79 * Host <-> VPU IPC channels.80 * ASYNC commands use a high priority channel, other messages use low-priority ones.81 */82#define VPU_IPC_CHAN_ASYNC_CMD 083#define VPU_IPC_CHAN_GEN_CMD   1084#define VPU_IPC_CHAN_JOB_RET   1185 86/*87 * Job flags bit masks.88 */89#define VPU_JOB_FLAGS_NULL_SUBMISSION_MASK 0x0000000190#define VPU_JOB_FLAGS_PRIVATE_DATA_MASK	   0xFF00000091 92/*93 * Sizes of the reserved areas in jobs, in bytes.94 */95#define VPU_JOB_RESERVED_BYTES 896 97/*98 * Sizes of the reserved areas in job queues, in bytes.99 */100#define VPU_JOB_QUEUE_RESERVED_BYTES 52101 102/*103 * Max length (including trailing NULL char) of trace entity name (e.g., the104 * name of a logging destination or a loggable HW component).105 */106#define VPU_TRACE_ENTITY_NAME_MAX_LEN 32107 108/*109 * Max length (including trailing NULL char) of a dyndbg command.110 *111 * NOTE: 96 is used so that the size of 'struct vpu_ipc_msg' in the JSM API is112 * 128 bytes (multiple of 64 bytes, the cache line size).113 */114#define VPU_DYNDBG_CMD_MAX_LEN 96115 116/*117 * For HWS command queue scheduling, we can prioritise command queues inside the118 * same process with a relative in-process priority. Valid values for relative119 * priority are given below - max and min.120 */121#define VPU_HWS_COMMAND_QUEUE_MAX_IN_PROCESS_PRIORITY 7122#define VPU_HWS_COMMAND_QUEUE_MIN_IN_PROCESS_PRIORITY -7123 124/*125 * For HWS priority scheduling, we can have multiple realtime priority bands.126 * They are numbered 0 to a MAX.127 */128#define VPU_HWS_MAX_REALTIME_PRIORITY_LEVEL 31U129 130/*131 * vpu_jsm_engine_reset_context flag definitions132 */133#define VPU_ENGINE_RESET_CONTEXT_FLAG_COLLATERAL_DAMAGE_MASK BIT(0)134#define VPU_ENGINE_RESET_CONTEXT_HANG_PRIMARY_CAUSE	     0135#define VPU_ENGINE_RESET_CONTEXT_COLLATERAL_DAMAGE	     1136 137/*138 * Invalid command queue handle identifier. Applies to cmdq_id and cmdq_group139 * in this API.140 */141#define VPU_HWS_INVALID_CMDQ_HANDLE 0ULL142 143/*144 * Job format.145 */146struct vpu_job_queue_entry {147	u64 batch_buf_addr; /**< Address of VPU commands batch buffer */148	u32 job_id;	  /**< Job ID */149	u32 flags; /**< Flags bit field, see VPU_JOB_FLAGS_* above */150	u64 root_page_table_addr; /**< Address of root page table to use for this job */151	u64 root_page_table_update_counter; /**< Page tables update events counter */152	u64 primary_preempt_buf_addr;153	/**< Address of the primary preemption buffer to use for this job */154	u32 primary_preempt_buf_size;155	/**< Size of the primary preemption buffer to use for this job */156	u32 secondary_preempt_buf_size;157	/**< Size of secondary preemption buffer to use for this job */158	u64 secondary_preempt_buf_addr;159	/**< Address of secondary preemption buffer to use for this job */160	u8 reserved_0[VPU_JOB_RESERVED_BYTES];161};162 163/*164 * Job queue control registers.165 */166struct vpu_job_queue_header {167	u32 engine_idx;168	u32 head;169	u32 tail;170	u8 reserved_0[VPU_JOB_QUEUE_RESERVED_BYTES];171};172 173/*174 * Job queue format.175 */176struct vpu_job_queue {177	struct vpu_job_queue_header header;178	struct vpu_job_queue_entry job[];179};180 181/**182 * Logging entity types.183 *184 * This enum defines the different types of entities involved in logging.185 */186enum vpu_trace_entity_type {187	/** Logging destination (entity where logs can be stored / printed). */188	VPU_TRACE_ENTITY_TYPE_DESTINATION = 1,189	/** Loggable HW component (HW entity that can be logged). */190	VPU_TRACE_ENTITY_TYPE_HW_COMPONENT = 2,191};192 193/*194 * HWS specific log buffer header details.195 * Total size is 32 bytes.196 */197struct vpu_hws_log_buffer_header {198	/* Written by VPU after adding a log entry. Initialised by host to 0. */199	u32 first_free_entry_index;200	/* Incremented by VPU every time the VPU overwrites the 0th entry;201	 * initialised by host to 0.202	 */203	u32 wraparound_count;204	/*205	 * This is the number of buffers that can be stored in the log buffer provided by the host.206	 * It is written by host before passing buffer to VPU. VPU should consider it read-only.207	 */208	u64 num_of_entries;209	u64 reserved[2];210};211 212/*213 * HWS specific log buffer entry details.214 * Total size is 32 bytes.215 */216struct vpu_hws_log_buffer_entry {217	/* VPU timestamp must be an invariant timer tick (not impacted by DVFS) */218	u64 vpu_timestamp;219	/*220	 * Operation type:221	 *     0 - context state change222	 *     1 - queue new work223	 *     2 - queue unwait sync object224	 *     3 - queue no more work225	 *     4 - queue wait sync object226	 */227	u32 operation_type;228	u32 reserved;229	/* Operation data depends on operation type */230	u64 operation_data[2];231};232 233/*234 * Host <-> VPU IPC messages types.235 */236enum vpu_ipc_msg_type {237	VPU_JSM_MSG_UNKNOWN = 0xFFFFFFFF,238	/* IPC Host -> Device, Async commands */239	VPU_JSM_MSG_ASYNC_CMD = 0x1100,240	VPU_JSM_MSG_ENGINE_RESET = VPU_JSM_MSG_ASYNC_CMD,241	VPU_JSM_MSG_ENGINE_PREEMPT = 0x1101,242	VPU_JSM_MSG_REGISTER_DB = 0x1102,243	VPU_JSM_MSG_UNREGISTER_DB = 0x1103,244	VPU_JSM_MSG_QUERY_ENGINE_HB = 0x1104,245	VPU_JSM_MSG_GET_POWER_LEVEL_COUNT = 0x1105,246	VPU_JSM_MSG_GET_POWER_LEVEL = 0x1106,247	VPU_JSM_MSG_SET_POWER_LEVEL = 0x1107,248	/* @deprecated */249	VPU_JSM_MSG_METRIC_STREAMER_OPEN = 0x1108,250	/* @deprecated */251	VPU_JSM_MSG_METRIC_STREAMER_CLOSE = 0x1109,252	/** Configure logging (used to modify configuration passed in boot params). */253	VPU_JSM_MSG_TRACE_SET_CONFIG = 0x110a,254	/** Return current logging configuration. */255	VPU_JSM_MSG_TRACE_GET_CONFIG = 0x110b,256	/**257	 * Get masks of destinations and HW components supported by the firmware258	 * (may vary between HW generations and FW compile259	 * time configurations)260	 */261	VPU_JSM_MSG_TRACE_GET_CAPABILITY = 0x110c,262	/** Get the name of a destination or HW component. */263	VPU_JSM_MSG_TRACE_GET_NAME = 0x110d,264	/**265	 * Release resource associated with host ssid . All jobs that belong to the host_ssid266	 * aborted and removed from internal scheduling queues. All doorbells assigned267	 * to the host_ssid are unregistered and any internal FW resources belonging to268	 * the host_ssid are released.269	 */270	VPU_JSM_MSG_SSID_RELEASE = 0x110e,271	/**272	 * Start collecting metric data.273	 * @see vpu_jsm_metric_streamer_start274	 */275	VPU_JSM_MSG_METRIC_STREAMER_START = 0x110f,276	/**277	 * Stop collecting metric data. This command will return success if it is called278	 * for a metric stream that has already been stopped or was never started.279	 * @see vpu_jsm_metric_streamer_stop280	 */281	VPU_JSM_MSG_METRIC_STREAMER_STOP = 0x1110,282	/**283	 * Update current and next buffer for metric data collection. This command can284	 * also be used to request information about the number of collected samples285	 * and the amount of data written to the buffer.286	 * @see vpu_jsm_metric_streamer_update287	 */288	VPU_JSM_MSG_METRIC_STREAMER_UPDATE = 0x1111,289	/**290	 * Request description of selected metric groups and metric counters within291	 * each group. The VPU will write the description of groups and counters to292	 * the buffer specified in the command structure.293	 * @see vpu_jsm_metric_streamer_start294	 */295	VPU_JSM_MSG_METRIC_STREAMER_INFO = 0x1112,296	/** Control command: Priority band setup */297	VPU_JSM_MSG_SET_PRIORITY_BAND_SETUP = 0x1113,298	/** Control command: Create command queue */299	VPU_JSM_MSG_CREATE_CMD_QUEUE = 0x1114,300	/** Control command: Destroy command queue */301	VPU_JSM_MSG_DESTROY_CMD_QUEUE = 0x1115,302	/** Control command: Set context scheduling properties */303	VPU_JSM_MSG_SET_CONTEXT_SCHED_PROPERTIES = 0x1116,304	/*305	 * Register a doorbell to notify VPU of new work. The doorbell may later be306	 * deallocated or reassigned to another context.307	 */308	VPU_JSM_MSG_HWS_REGISTER_DB = 0x1117,309	/** Control command: Log buffer setting */310	VPU_JSM_MSG_HWS_SET_SCHEDULING_LOG = 0x1118,311	/* Control command: Suspend command queue. */312	VPU_JSM_MSG_HWS_SUSPEND_CMDQ = 0x1119,313	/* Control command: Resume command queue */314	VPU_JSM_MSG_HWS_RESUME_CMDQ = 0x111a,315	/* Control command: Resume engine after reset */316	VPU_JSM_MSG_HWS_ENGINE_RESUME = 0x111b,317	/* Control command: Enable survivability/DCT mode */318	VPU_JSM_MSG_DCT_ENABLE = 0x111c,319	/* Control command: Disable survivability/DCT mode */320	VPU_JSM_MSG_DCT_DISABLE = 0x111d,321	/**322	 * Dump VPU state. To be used for debug purposes only.323	 * NOTE: Please introduce new ASYNC commands before this one. *324	 */325	VPU_JSM_MSG_STATE_DUMP = 0x11FF,326	/* IPC Host -> Device, General commands */327	VPU_JSM_MSG_GENERAL_CMD = 0x1200,328	VPU_JSM_MSG_BLOB_DEINIT = VPU_JSM_MSG_GENERAL_CMD,329	/**330	 * Control dyndbg behavior by executing a dyndbg command; equivalent to331	 * Linux command: `echo '<dyndbg_cmd>' > <debugfs>/dynamic_debug/control`.332	 */333	VPU_JSM_MSG_DYNDBG_CONTROL = 0x1201,334	/**335	 * Perform the save procedure for the D0i3 entry336	 */337	VPU_JSM_MSG_PWR_D0I3_ENTER = 0x1202,338	/* IPC Device -> Host, Job completion */339	VPU_JSM_MSG_JOB_DONE = 0x2100,340	/* IPC Device -> Host, Async command completion */341	VPU_JSM_MSG_ASYNC_CMD_DONE = 0x2200,342	VPU_JSM_MSG_ENGINE_RESET_DONE = VPU_JSM_MSG_ASYNC_CMD_DONE,343	VPU_JSM_MSG_ENGINE_PREEMPT_DONE = 0x2201,344	VPU_JSM_MSG_REGISTER_DB_DONE = 0x2202,345	VPU_JSM_MSG_UNREGISTER_DB_DONE = 0x2203,346	VPU_JSM_MSG_QUERY_ENGINE_HB_DONE = 0x2204,347	VPU_JSM_MSG_GET_POWER_LEVEL_COUNT_DONE = 0x2205,348	VPU_JSM_MSG_GET_POWER_LEVEL_DONE = 0x2206,349	VPU_JSM_MSG_SET_POWER_LEVEL_DONE = 0x2207,350	/* @deprecated */351	VPU_JSM_MSG_METRIC_STREAMER_OPEN_DONE = 0x2208,352	/* @deprecated */353	VPU_JSM_MSG_METRIC_STREAMER_CLOSE_DONE = 0x2209,354	/** Response to VPU_JSM_MSG_TRACE_SET_CONFIG. */355	VPU_JSM_MSG_TRACE_SET_CONFIG_RSP = 0x220a,356	/** Response to VPU_JSM_MSG_TRACE_GET_CONFIG. */357	VPU_JSM_MSG_TRACE_GET_CONFIG_RSP = 0x220b,358	/** Response to VPU_JSM_MSG_TRACE_GET_CAPABILITY. */359	VPU_JSM_MSG_TRACE_GET_CAPABILITY_RSP = 0x220c,360	/** Response to VPU_JSM_MSG_TRACE_GET_NAME. */361	VPU_JSM_MSG_TRACE_GET_NAME_RSP = 0x220d,362	/** Response to VPU_JSM_MSG_SSID_RELEASE. */363	VPU_JSM_MSG_SSID_RELEASE_DONE = 0x220e,364	/**365	 * Response to VPU_JSM_MSG_METRIC_STREAMER_START.366	 * VPU will return an error result if metric collection cannot be started,367	 * e.g. when the specified metric mask is invalid.368	 * @see vpu_jsm_metric_streamer_done369	 */370	VPU_JSM_MSG_METRIC_STREAMER_START_DONE = 0x220f,371	/**372	 * Response to VPU_JSM_MSG_METRIC_STREAMER_STOP.373	 * Returns information about collected metric data.374	 * @see vpu_jsm_metric_streamer_done375	 */376	VPU_JSM_MSG_METRIC_STREAMER_STOP_DONE = 0x2210,377	/**378	 * Response to VPU_JSM_MSG_METRIC_STREAMER_UPDATE.379	 * Returns information about collected metric data.380	 * @see vpu_jsm_metric_streamer_done381	 */382	VPU_JSM_MSG_METRIC_STREAMER_UPDATE_DONE = 0x2211,383	/**384	 * Response to VPU_JSM_MSG_METRIC_STREAMER_INFO.385	 * Returns a description of the metric groups and metric counters.386	 * @see vpu_jsm_metric_streamer_done387	 */388	VPU_JSM_MSG_METRIC_STREAMER_INFO_DONE = 0x2212,389	/**390	 * Asynchronous event sent from the VPU to the host either when the current391	 * metric buffer is full or when the VPU has collected a multiple of392	 * @notify_sample_count samples as indicated through the start command393	 * (VPU_JSM_MSG_METRIC_STREAMER_START). Returns information about collected394	 * metric data.395	 * @see vpu_jsm_metric_streamer_done396	 */397	VPU_JSM_MSG_METRIC_STREAMER_NOTIFICATION = 0x2213,398	/** Response to control command: Priority band setup */399	VPU_JSM_MSG_SET_PRIORITY_BAND_SETUP_RSP = 0x2214,400	/** Response to control command: Create command queue */401	VPU_JSM_MSG_CREATE_CMD_QUEUE_RSP = 0x2215,402	/** Response to control command: Destroy command queue */403	VPU_JSM_MSG_DESTROY_CMD_QUEUE_RSP = 0x2216,404	/** Response to control command: Set context scheduling properties */405	VPU_JSM_MSG_SET_CONTEXT_SCHED_PROPERTIES_RSP = 0x2217,406	/** Response to control command: Log buffer setting */407	VPU_JSM_MSG_HWS_SET_SCHEDULING_LOG_RSP = 0x2218,408	/* IPC Device -> Host, HWS notify index entry of log buffer written */409	VPU_JSM_MSG_HWS_SCHEDULING_LOG_NOTIFICATION = 0x2219,410	/* IPC Device -> Host, HWS completion of a context suspend request */411	VPU_JSM_MSG_HWS_SUSPEND_CMDQ_DONE = 0x221a,412	/* Response to control command: Resume command queue */413	VPU_JSM_MSG_HWS_RESUME_CMDQ_RSP = 0x221b,414	/* Response to control command: Resume engine command response */415	VPU_JSM_MSG_HWS_RESUME_ENGINE_DONE = 0x221c,416	/* Response to control command: Enable survivability/DCT mode */417	VPU_JSM_MSG_DCT_ENABLE_DONE = 0x221d,418	/* Response to control command: Disable survivability/DCT mode */419	VPU_JSM_MSG_DCT_DISABLE_DONE = 0x221e,420	/**421	 * Response to state dump control command.422	 * NOTE: Please introduce new ASYNC responses before this one. *423	 */424	VPU_JSM_MSG_STATE_DUMP_RSP = 0x22FF,425	/* IPC Device -> Host, General command completion */426	VPU_JSM_MSG_GENERAL_CMD_DONE = 0x2300,427	VPU_JSM_MSG_BLOB_DEINIT_DONE = VPU_JSM_MSG_GENERAL_CMD_DONE,428	/** Response to VPU_JSM_MSG_DYNDBG_CONTROL. */429	VPU_JSM_MSG_DYNDBG_CONTROL_RSP = 0x2301,430	/**431	 * Acknowledgment of completion of the save procedure initiated by432	 * VPU_JSM_MSG_PWR_D0I3_ENTER433	 */434	VPU_JSM_MSG_PWR_D0I3_ENTER_DONE = 0x2302,435};436 437enum vpu_ipc_msg_status { VPU_JSM_MSG_FREE, VPU_JSM_MSG_ALLOCATED };438 439/*440 * Host <-> LRT IPC message payload definitions441 */442struct vpu_ipc_msg_payload_engine_reset {443	/* Engine to be reset. */444	u32 engine_idx;445	/* Reserved */446	u32 reserved_0;447};448 449struct vpu_ipc_msg_payload_engine_preempt {450	/* Engine to be preempted. */451	u32 engine_idx;452	/* ID of the preemption request. */453	u32 preempt_id;454};455 456/*457 * @brief Register doorbell command structure.458 * This structure supports doorbell registration for only OS scheduling.459 * @see VPU_JSM_MSG_REGISTER_DB460 */461struct vpu_ipc_msg_payload_register_db {462	/* Index of the doorbell to register. */463	u32 db_idx;464	/* Reserved */465	u32 reserved_0;466	/* Virtual address in Global GTT pointing to the start of job queue. */467	u64 jobq_base;468	/* Size of the job queue in bytes. */469	u32 jobq_size;470	/* Host sub-stream ID for the context assigned to the doorbell. */471	u32 host_ssid;472};473 474/**475 * @brief Unregister doorbell command structure.476 * Request structure to unregister a doorbell for both HW and OS scheduling.477 * @see VPU_JSM_MSG_UNREGISTER_DB478 */479struct vpu_ipc_msg_payload_unregister_db {480	/* Index of the doorbell to unregister. */481	u32 db_idx;482	/* Reserved */483	u32 reserved_0;484};485 486struct vpu_ipc_msg_payload_query_engine_hb {487	/* Engine to return heartbeat value. */488	u32 engine_idx;489	/* Reserved */490	u32 reserved_0;491};492 493struct vpu_ipc_msg_payload_power_level {494	/**495	 * Requested power level. The power level value is in the496	 * range [0, power_level_count-1] where power_level_count497	 * is the number of available power levels as returned by498	 * the get power level count command. A power level of 0499	 * corresponds to the maximum possible power level, while500	 * power_level_count-1 corresponds to the minimum possible501	 * power level. Values outside of this range are not502	 * considered to be valid.503	 */504	u32 power_level;505	/* Reserved */506	u32 reserved_0;507};508 509struct vpu_ipc_msg_payload_ssid_release {510	/* Host sub-stream ID for the context to be released. */511	u32 host_ssid;512	/* Reserved */513	u32 reserved_0;514};515 516/**517 * @brief Metric streamer start command structure.518 * This structure is also used with VPU_JSM_MSG_METRIC_STREAMER_INFO to request metric519 * groups and metric counters description from the firmware.520 * @see VPU_JSM_MSG_METRIC_STREAMER_START521 * @see VPU_JSM_MSG_METRIC_STREAMER_INFO522 */523struct vpu_jsm_metric_streamer_start {524	/**525	 * Bitmask to select the desired metric groups.526	 * A metric group can belong only to one metric streamer instance at a time.527	 * Since each metric streamer instance has a unique set of metric groups, it528	 * can also identify a metric streamer instance if more than one instance was529	 * started. If the VPU device does not support multiple metric streamer instances,530	 * then VPU_JSM_MSG_METRIC_STREAMER_START will return an error even if the second531	 * instance has different groups to the first.532	 */533	u64 metric_group_mask;534	/** Sampling rate in nanoseconds. */535	u64 sampling_rate;536	/**537	 * If > 0 the VPU will send a VPU_JSM_MSG_METRIC_STREAMER_NOTIFICATION message538	 * after every @notify_sample_count samples is collected or dropped by the VPU.539	 * If set to UINT_MAX the VPU will only generate a notification when the metric540	 * buffer is full. If set to 0 the VPU will never generate a notification.541	 */542	u32 notify_sample_count;543	u32 reserved_0;544	/**545	 * Address and size of the buffer where the VPU will write metric data. The546	 * VPU writes all counters from enabled metric groups one after another. If547	 * there is no space left to write data at the next sample period the VPU548	 * will switch to the next buffer (@see next_buffer_addr) and will optionally549	 * send a notification to the host driver if @notify_sample_count is non-zero.550	 * If @next_buffer_addr is NULL the VPU will stop collecting metric data.551	 */552	u64 buffer_addr;553	u64 buffer_size;554	/**555	 * Address and size of the next buffer to write metric data to after the initial556	 * buffer is full. If the address is NULL the VPU will stop collecting metric557	 * data.558	 */559	u64 next_buffer_addr;560	u64 next_buffer_size;561};562 563/**564 * @brief Metric streamer stop command structure.565 * @see VPU_JSM_MSG_METRIC_STREAMER_STOP566 */567struct vpu_jsm_metric_streamer_stop {568	/** Bitmask to select the desired metric groups. */569	u64 metric_group_mask;570};571 572/**573 * Provide VPU FW with buffers to write metric data.574 * @see VPU_JSM_MSG_METRIC_STREAMER_UPDATE575 */576struct vpu_jsm_metric_streamer_update {577	/** Metric group mask that identifies metric streamer instance. */578	u64 metric_group_mask;579	/**580	 * Address and size of the buffer where the VPU will write metric data. If581	 * the buffer address is 0 or same as the currently used buffer the VPU will582	 * continue writing metric data to the current buffer. In this case the583	 * buffer size is ignored and the size of the current buffer is unchanged.584	 * If the address is non-zero and differs from the current buffer address the585	 * VPU will immediately switch data collection to the new buffer.586	 */587	u64 buffer_addr;588	u64 buffer_size;589	/**590	 * Address and size of the next buffer to write metric data after the initial591	 * buffer is full. If the address is NULL the VPU will stop collecting metric592	 * data but will continue to record dropped samples.593	 *594	 * Note that there is a hazard possible if both buffer_addr and the next_buffer_addr595	 * are non-zero in same update request. It is the host's responsibility to ensure596	 * that both addresses make sense even if the VPU just switched to writing samples597	 * from the current to the next buffer.598	 */599	u64 next_buffer_addr;600	u64 next_buffer_size;601};602 603struct vpu_ipc_msg_payload_blob_deinit {604	/* 64-bit unique ID for the blob to be de-initialized. */605	u64 blob_id;606};607 608struct vpu_ipc_msg_payload_job_done {609	/* Engine to which the job was submitted. */610	u32 engine_idx;611	/* Index of the doorbell to which the job was submitted */612	u32 db_idx;613	/* ID of the completed job */614	u32 job_id;615	/* Status of the completed job */616	u32 job_status;617	/* Host SSID */618	u32 host_ssid;619	/* Zero Padding */620	u32 reserved_0;621	/* Command queue id */622	u64 cmdq_id;623};624 625struct vpu_jsm_engine_reset_context {626	/* Host SSID */627	u32 host_ssid;628	/* Zero Padding */629	u32 reserved_0;630	/* Command queue id */631	u64 cmdq_id;632	/* See VPU_ENGINE_RESET_CONTEXT_* defines */633	u64 flags;634};635 636struct vpu_ipc_msg_payload_engine_reset_done {637	/* Engine ordinal */638	u32 engine_idx;639	/* Number of impacted contexts */640	u32 num_impacted_contexts;641	/* Array of impacted command queue ids and their flags */642	struct vpu_jsm_engine_reset_context643		impacted_contexts[VPU_MAX_ENGINE_RESET_IMPACTED_CONTEXTS];644};645 646struct vpu_ipc_msg_payload_engine_preempt_done {647	/* Engine preempted. */648	u32 engine_idx;649	/* ID of the preemption request. */650	u32 preempt_id;651};652 653/**654 * Response structure for register doorbell command for both OS655 * and HW scheduling.656 * @see VPU_JSM_MSG_REGISTER_DB657 * @see VPU_JSM_MSG_HWS_REGISTER_DB658 */659struct vpu_ipc_msg_payload_register_db_done {660	/* Index of the registered doorbell. */661	u32 db_idx;662	/* Reserved */663	u32 reserved_0;664};665 666/**667 * Response structure for unregister doorbell command for both OS668 * and HW scheduling.669 * @see VPU_JSM_MSG_UNREGISTER_DB670 */671struct vpu_ipc_msg_payload_unregister_db_done {672	/* Index of the unregistered doorbell. */673	u32 db_idx;674	/* Reserved */675	u32 reserved_0;676};677 678struct vpu_ipc_msg_payload_query_engine_hb_done {679	/* Engine returning heartbeat value. */680	u32 engine_idx;681	/* Reserved */682	u32 reserved_0;683	/* Heartbeat value. */684	u64 heartbeat;685};686 687struct vpu_ipc_msg_payload_get_power_level_count_done {688	/**689	 * Number of supported power levels. The maximum possible690	 * value of power_level_count is 16 but this may vary across691	 * implementations.692	 */693	u32 power_level_count;694	/* Reserved */695	u32 reserved_0;696	/**697	 * Power consumption limit for each supported power level in698	 * [0-100%] range relative to power level 0.699	 */700	u8 power_limit[16];701};702 703struct vpu_ipc_msg_payload_blob_deinit_done {704	/* 64-bit unique ID for the blob de-initialized. */705	u64 blob_id;706};707 708/* HWS priority band setup request / response */709struct vpu_ipc_msg_payload_hws_priority_band_setup {710	/*711	 * Grace period in 100ns units when preempting another priority band for712	 * this priority band713	 */714	u32 grace_period[VPU_HWS_NUM_PRIORITY_BANDS];715	/*716	 * Default quantum in 100ns units for scheduling across processes717	 * within a priority band718	 */719	u32 process_quantum[VPU_HWS_NUM_PRIORITY_BANDS];720	/*721	 * Default grace period in 100ns units for processes that preempt each722	 * other within a priority band723	 */724	u32 process_grace_period[VPU_HWS_NUM_PRIORITY_BANDS];725	/*726	 * For normal priority band, specifies the target VPU percentage727	 * in situations when it's starved by the focus band.728	 */729	u32 normal_band_percentage;730	/* Reserved */731	u32 reserved_0;732};733 734/*735 * @brief HWS create command queue request.736 * Host will create a command queue via this command.737 * Note: Cmdq group is a handle of an object which738 * may contain one or more command queues.739 * @see VPU_JSM_MSG_CREATE_CMD_QUEUE740 * @see VPU_JSM_MSG_CREATE_CMD_QUEUE_RSP741 */742struct vpu_ipc_msg_payload_hws_create_cmdq {743	/* Process id */744	u64 process_id;745	/* Host SSID */746	u32 host_ssid;747	/* Engine for which queue is being created */748	u32 engine_idx;749	/* Cmdq group: only used for HWS logging of state changes */750	u64 cmdq_group;751	/* Command queue id */752	u64 cmdq_id;753	/* Command queue base */754	u64 cmdq_base;755	/* Command queue size */756	u32 cmdq_size;757	/* Zero padding */758	u32 reserved_0;759};760 761/*762 * @brief HWS create command queue response.763 * @see VPU_JSM_MSG_CREATE_CMD_QUEUE764 * @see VPU_JSM_MSG_CREATE_CMD_QUEUE_RSP765 */766struct vpu_ipc_msg_payload_hws_create_cmdq_rsp {767	/* Process id */768	u64 process_id;769	/* Host SSID */770	u32 host_ssid;771	/* Engine for which queue is being created */772	u32 engine_idx;773	/* Command queue group */774	u64 cmdq_group;775	/* Command queue id */776	u64 cmdq_id;777};778 779/* HWS destroy command queue request / response */780struct vpu_ipc_msg_payload_hws_destroy_cmdq {781	/* Host SSID */782	u32 host_ssid;783	/* Zero Padding */784	u32 reserved;785	/* Command queue id */786	u64 cmdq_id;787};788 789/* HWS set context scheduling properties request / response */790struct vpu_ipc_msg_payload_hws_set_context_sched_properties {791	/* Host SSID */792	u32 host_ssid;793	/* Zero Padding */794	u32 reserved_0;795	/* Command queue id */796	u64 cmdq_id;797	/* Priority band to assign to work of this context */798	u32 priority_band;799	/* Inside realtime band assigns a further priority */800	u32 realtime_priority_level;801	/* Priority relative to other contexts in the same process */802	s32 in_process_priority;803	/* Zero padding / Reserved */804	u32 reserved_1;805	/* Context quantum relative to other contexts of same priority in the same process */806	u64 context_quantum;807	/* Grace period when preempting context of the same priority within the same process */808	u64 grace_period_same_priority;809	/* Grace period when preempting context of a lower priority within the same process */810	u64 grace_period_lower_priority;811};812 813/*814 * @brief Register doorbell command structure.815 * This structure supports doorbell registration for both HW and OS scheduling.816 * Note: Queue base and size are added here so that the same structure can be used for817 * OS scheduling and HW scheduling. For OS scheduling, cmdq_id will be ignored818 * and cmdq_base and cmdq_size will be used. For HW scheduling, cmdq_base and cmdq_size will be819 * ignored and cmdq_id is used.820 * @see VPU_JSM_MSG_HWS_REGISTER_DB821 */822struct vpu_jsm_hws_register_db {823	/* Index of the doorbell to register. */824	u32 db_id;825	/* Host sub-stream ID for the context assigned to the doorbell. */826	u32 host_ssid;827	/* ID of the command queue associated with the doorbell. */828	u64 cmdq_id;829	/* Virtual address pointing to the start of command queue. */830	u64 cmdq_base;831	/* Size of the command queue in bytes. */832	u64 cmdq_size;833};834 835/*836 * @brief Structure to set another buffer to be used for scheduling-related logging.837 * The size of the logging buffer and the number of entries is defined as part of the838 * buffer itself as described next.839 * The log buffer received from the host is made up of;840 *   - header:     32 bytes in size, as shown in 'struct vpu_hws_log_buffer_header'.841 *                 The header contains the number of log entries in the buffer.842 *   - log entry:  0 to n-1, each log entry is 32 bytes in size, as shown in843 *                 'struct vpu_hws_log_buffer_entry'.844 *                 The entry contains the VPU timestamp, operation type and data.845 * The host should provide the notify index value of log buffer to VPU. This is a846 * value defined within the log buffer and when written to will generate the847 * scheduling log notification.848 * The host should set engine_idx and vpu_log_buffer_va to 0 to disable logging849 * for a particular engine.850 * VPU will handle one log buffer for each of supported engines.851 * VPU should allow the logging to consume one host_ssid.852 * @see VPU_JSM_MSG_HWS_SET_SCHEDULING_LOG853 * @see VPU_JSM_MSG_HWS_SET_SCHEDULING_LOG_RSP854 * @see VPU_JSM_MSG_HWS_SCHEDULING_LOG_NOTIFICATION855 */856struct vpu_ipc_msg_payload_hws_set_scheduling_log {857	/* Engine ordinal */858	u32 engine_idx;859	/* Host SSID */860	u32 host_ssid;861	/*862	 * VPU log buffer virtual address.863	 * Set to 0 to disable logging for this engine.864	 */865	u64 vpu_log_buffer_va;866	/*867	 * Notify index of log buffer. VPU_JSM_MSG_HWS_SCHEDULING_LOG_NOTIFICATION868	 * is generated when an event log is written to this index.869	 */870	u64 notify_index;871	/*872	 * Enable extra events to be output to log for debug of scheduling algorithm.873	 * Interpreted by VPU as a boolean to enable or disable, expected values are874	 * 0 and 1.875	 */876	u32 enable_extra_events;877	/* Zero Padding */878	u32 reserved_0;879};880 881/*882 * @brief The scheduling log notification is generated by VPU when it writes883 * an event into the log buffer at the notify_index. VPU notifies host with884 * VPU_JSM_MSG_HWS_SCHEDULING_LOG_NOTIFICATION. This is an asynchronous885 * message from VPU to host.886 * @see VPU_JSM_MSG_HWS_SCHEDULING_LOG_NOTIFICATION887 * @see VPU_JSM_MSG_HWS_SET_SCHEDULING_LOG888 */889struct vpu_ipc_msg_payload_hws_scheduling_log_notification {890	/* Engine ordinal */891	u32 engine_idx;892	/* Zero Padding */893	u32 reserved_0;894};895 896/*897 * @brief HWS suspend command queue request and done structure.898 * Host will request the suspend of contexts and VPU will;899 *   - Suspend all work on this context900 *   - Preempt any running work901 *   - Asynchronously perform the above and return success immediately once902 *     all items above are started successfully903 *   - Notify the host of completion of these operations via904 *     VPU_JSM_MSG_HWS_SUSPEND_CMDQ_DONE905 *   - Reject any other context operations on a context with an in-flight906 *     suspend request running907 * Same structure used when VPU notifies host of completion of a context suspend908 * request. The ids and suspend fence value reported in this command will match909 * the one in the request from the host to suspend the context. Once suspend is910 * complete, VPU will not access any data relating to this command queue until911 * it is resumed.912 * @see VPU_JSM_MSG_HWS_SUSPEND_CMDQ913 * @see VPU_JSM_MSG_HWS_SUSPEND_CMDQ_DONE914 */915struct vpu_ipc_msg_payload_hws_suspend_cmdq {916	/* Host SSID */917	u32 host_ssid;918	/* Zero Padding */919	u32 reserved_0;920	/* Command queue id */921	u64 cmdq_id;922	/*923	 * Suspend fence value - reported by the VPU suspend context924	 * completed once suspend is complete.925	 */926	u64 suspend_fence_value;927};928 929/*930 * @brief HWS Resume command queue request / response structure.931 * Host will request the resume of a context;932 *  - VPU will resume all work on this context933 *  - Scheduler will allow this context to be scheduled934 * @see VPU_JSM_MSG_HWS_RESUME_CMDQ935 * @see VPU_JSM_MSG_HWS_RESUME_CMDQ_RSP936 */937struct vpu_ipc_msg_payload_hws_resume_cmdq {938	/* Host SSID */939	u32 host_ssid;940	/* Zero Padding */941	u32 reserved_0;942	/* Command queue id */943	u64 cmdq_id;944};945 946/*947 * @brief HWS Resume engine request / response structure.948 * After a HWS engine reset, all scheduling is stopped on VPU until a engine resume.949 * Host shall send this command to resume scheduling of any valid queue.950 * @see VPU_JSM_MSG_HWS_RESUME_ENGINE951 * @see VPU_JSM_MSG_HWS_RESUME_ENGINE_DONE952 */953struct vpu_ipc_msg_payload_hws_resume_engine {954	/* Engine to be resumed */955	u32 engine_idx;956	/* Reserved */957	u32 reserved_0;958};959 960/**961 * Payload for VPU_JSM_MSG_TRACE_SET_CONFIG[_RSP] and962 * VPU_JSM_MSG_TRACE_GET_CONFIG_RSP messages.963 *964 * The payload is interpreted differently depending on the type of message:965 *966 * - For VPU_JSM_MSG_TRACE_SET_CONFIG, the payload specifies the desired967 *   logging configuration to be set.968 *969 * - For VPU_JSM_MSG_TRACE_SET_CONFIG_RSP, the payload reports the logging970 *   configuration that was set after a VPU_JSM_MSG_TRACE_SET_CONFIG request.971 *   The host can compare this payload with the one it sent in the972 *   VPU_JSM_MSG_TRACE_SET_CONFIG request to check whether or not the973 *   configuration was set as desired.974 *975 * - VPU_JSM_MSG_TRACE_GET_CONFIG_RSP, the payload reports the current logging976 *   configuration.977 */978struct vpu_ipc_msg_payload_trace_config {979	/**980	 * Logging level (currently set or to be set); see 'mvLog_t' enum for981	 * acceptable values. The specified logging level applies to all982	 * destinations and HW components983	 */984	u32 trace_level;985	/**986	 * Bitmask of logging destinations (currently enabled or to be enabled);987	 * bitwise OR of values defined in logging_destination enum.988	 */989	u32 trace_destination_mask;990	/**991	 * Bitmask of loggable HW components (currently enabled or to be enabled);992	 * bitwise OR of values defined in loggable_hw_component enum.993	 */994	u64 trace_hw_component_mask;995	u64 reserved_0; /**< Reserved for future extensions. */996};997 998/**999 * Payload for VPU_JSM_MSG_TRACE_GET_CAPABILITY_RSP messages.1000 */1001struct vpu_ipc_msg_payload_trace_capability_rsp {1002	u32 trace_destination_mask; /**< Bitmask of supported logging destinations. */1003	u32 reserved_0;1004	u64 trace_hw_component_mask; /**< Bitmask of supported loggable HW components. */1005	u64 reserved_1; /**< Reserved for future extensions. */1006};1007 1008/**1009 * Payload for VPU_JSM_MSG_TRACE_GET_NAME requests.1010 */1011struct vpu_ipc_msg_payload_trace_get_name {1012	/**1013	 * The type of the entity to query name for; see logging_entity_type for1014	 * possible values.1015	 */1016	u32 entity_type;1017	u32 reserved_0;1018	/**1019	 * The ID of the entity to query name for; possible values depends on the1020	 * entity type.1021	 */1022	u64 entity_id;1023};1024 1025/**1026 * Payload for VPU_JSM_MSG_TRACE_GET_NAME_RSP responses.1027 */1028struct vpu_ipc_msg_payload_trace_get_name_rsp {1029	/**1030	 * The type of the entity whose name was queried; see logging_entity_type1031	 * for possible values.1032	 */1033	u32 entity_type;1034	u32 reserved_0;1035	/**1036	 * The ID of the entity whose name was queried; possible values depends on1037	 * the entity type.1038	 */1039	u64 entity_id;1040	/** Reserved for future extensions. */1041	u64 reserved_1;1042	/** The name of the entity. */1043	char entity_name[VPU_TRACE_ENTITY_NAME_MAX_LEN];1044};1045 1046/**1047 * Data sent from the VPU to the host in all metric streamer response messages1048 * and in asynchronous notification.1049 * @see VPU_JSM_MSG_METRIC_STREAMER_START_DONE1050 * @see VPU_JSM_MSG_METRIC_STREAMER_STOP_DONE1051 * @see VPU_JSM_MSG_METRIC_STREAMER_UPDATE_DONE1052 * @see VPU_JSM_MSG_METRIC_STREAMER_INFO_DONE1053 * @see VPU_JSM_MSG_METRIC_STREAMER_NOTIFICATION1054 */1055struct vpu_jsm_metric_streamer_done {1056	/** Metric group mask that identifies metric streamer instance. */1057	u64 metric_group_mask;1058	/**1059	 * Size in bytes of single sample - total size of all enabled counters.1060	 * Some VPU implementations may align sample_size to more than 8 bytes.1061	 */1062	u32 sample_size;1063	u32 reserved_0;1064	/**1065	 * Number of samples collected since the metric streamer was started.1066	 * This will be 0 if the metric streamer was not started.1067	 */1068	u32 samples_collected;1069	/**1070	 * Number of samples dropped since the metric streamer was started. This1071	 * is incremented every time the metric streamer is not able to write1072	 * collected samples because the current buffer is full and there is no1073	 * next buffer to switch to.1074	 */1075	u32 samples_dropped;1076	/** Address of the buffer that contains the latest metric data. */1077	u64 buffer_addr;1078	/**1079	 * Number of bytes written into the metric data buffer. In response to the1080	 * VPU_JSM_MSG_METRIC_STREAMER_INFO request this field contains the size of1081	 * all group and counter descriptors. The size is updated even if the buffer1082	 * in the request was NULL or too small to hold descriptors of all counters1083	 */1084	u64 bytes_written;1085};1086 1087/**1088 * Metric group description placed in the metric buffer after successful completion1089 * of the VPU_JSM_MSG_METRIC_STREAMER_INFO command. This is followed by one or more1090 * @vpu_jsm_metric_counter_descriptor records.1091 * @see VPU_JSM_MSG_METRIC_STREAMER_INFO1092 */1093struct vpu_jsm_metric_group_descriptor {1094	/**1095	 * Offset to the next metric group (8-byte aligned). If this offset is 0 this1096	 * is the last descriptor. The value of metric_info_size must be greater than1097	 * or equal to sizeof(struct vpu_jsm_metric_group_descriptor) + name_string_size1098	 * + description_string_size and must be 8-byte aligned.1099	 */1100	u32 next_metric_group_info_offset;1101	/**1102	 * Offset to the first metric counter description record (8-byte aligned).1103	 * @see vpu_jsm_metric_counter_descriptor1104	 */1105	u32 next_metric_counter_info_offset;1106	/** Index of the group. This corresponds to bit index in metric_group_mask. */1107	u32 group_id;1108	/** Number of counters in the metric group. */1109	u32 num_counters;1110	/** Data size for all counters, must be a multiple of 8 bytes.*/1111	u32 metric_group_data_size;1112	/**1113	 * Metric group domain number. Cannot use multiple, simultaneous metric groups1114	 * from the same domain.1115	 */1116	u32 domain;1117	/**1118	 * Counter name string size. The string must include a null termination character.1119	 * The FW may use a fixed size name or send a different name for each counter.1120	 * If the VPU uses fixed size strings, all characters from the end of the name1121	 * to the of the fixed size character array must be zeroed.1122	 */1123	u32 name_string_size;1124	/** Counter description string size, @see name_string_size */1125	u32 description_string_size;1126	u64 reserved_0;1127	/**1128	 * Right after this structure, the VPU writes name and description of1129	 * the metric group.1130	 */1131};1132 1133/**1134 * Metric counter description, placed in the buffer after vpu_jsm_metric_group_descriptor.1135 * @see VPU_JSM_MSG_METRIC_STREAMER_INFO1136 */1137struct vpu_jsm_metric_counter_descriptor {1138	/**1139	 * Offset to the next counter in a group (8-byte aligned). If this offset is1140	 * 0 this is the last counter in the group.1141	 */1142	u32 next_metric_counter_info_offset;1143	/**1144	 * Offset to the counter data from the start of samples in this metric group.1145	 * Note that metric_data_offset % metric_data_size must be 0.1146	 */1147	u32 metric_data_offset;1148	/** Size of the metric counter data in bytes. */1149	u32 metric_data_size;1150	/** Metric type, see Level Zero API for definitions. */1151	u32 tier;1152	/** Metric type, see set_metric_type_t for definitions. */1153	u32 metric_type;1154	/** Metric type, see set_value_type_t for definitions. */1155	u32 metric_value_type;1156	/**1157	 * Counter name string size. The string must include a null termination character.1158	 * The FW may use a fixed size name or send a different name for each counter.1159	 * If the VPU uses fixed size strings, all characters from the end of the name1160	 * to the of the fixed size character array must be zeroed.1161	 */1162	u32 name_string_size;1163	/** Counter description string size, @see name_string_size */1164	u32 description_string_size;1165	/** Counter component name string size, @see name_string_size */1166	u32 component_string_size;1167	/** Counter string size, @see name_string_size */1168	u32 units_string_size;1169	u64 reserved_0;1170	/**1171	 * Right after this structure, the VPU writes name, description1172	 * component and unit strings.1173	 */1174};1175 1176/**1177 * Payload for VPU_JSM_MSG_DYNDBG_CONTROL requests.1178 *1179 * VPU_JSM_MSG_DYNDBG_CONTROL are used to control the VPU FW Dynamic Debug1180 * feature, which allows developers to selectively enable / disable MVLOG_DEBUG1181 * messages. This is equivalent to the Dynamic Debug functionality provided by1182 * Linux1183 * (https://www.kernel.org/doc/html/latest/admin-guide/dynamic-debug-howto.html)1184 * The host can control Dynamic Debug behavior by sending dyndbg commands, which1185 * have the same syntax as Linux1186 * dyndbg commands.1187 *1188 * NOTE: in order for MVLOG_DEBUG messages to be actually printed, the host1189 * still has to set the logging level to MVLOG_DEBUG, using the1190 * VPU_JSM_MSG_TRACE_SET_CONFIG command.1191 *1192 * The host can see the current dynamic debug configuration by executing a1193 * special 'show' command. The dyndbg configuration will be printed to the1194 * configured logging destination using MVLOG_INFO logging level.1195 */1196struct vpu_ipc_msg_payload_dyndbg_control {1197	/**1198	 * Dyndbg command (same format as Linux dyndbg); must be a NULL-terminated1199	 * string.1200	 */1201	char dyndbg_cmd[VPU_DYNDBG_CMD_MAX_LEN];1202};1203 1204/**1205 * Payload for VPU_JSM_MSG_PWR_D0I3_ENTER1206 *1207 * This is a bi-directional payload.1208 */1209struct vpu_ipc_msg_payload_pwr_d0i3_enter {1210	/**1211	 * 0: VPU_JSM_MSG_PWR_D0I3_ENTER_DONE is not sent to the host driver1212	 *    The driver will poll for D0i2 Idle state transitions.1213	 * 1: VPU_JSM_MSG_PWR_D0I3_ENTER_DONE is sent after VPU state save is complete1214	 */1215	u32 send_response;1216	u32 reserved_0;1217};1218 1219/**1220 * Payload for VPU_JSM_MSG_DCT_ENABLE message.1221 *1222 * Default values for DCT active/inactive times are 5.3ms and 30ms respectively,1223 * corresponding to a 85% duty cycle. This payload allows the host to tune these1224 * values according to application requirements.1225 */1226struct vpu_ipc_msg_payload_pwr_dct_control {1227	/** Duty cycle active time in microseconds */1228	u32 dct_active_us;1229	/** Duty cycle inactive time in microseconds */1230	u32 dct_inactive_us;1231};1232 1233/*1234 * Payloads union, used to define complete message format.1235 */1236union vpu_ipc_msg_payload {1237	struct vpu_ipc_msg_payload_engine_reset engine_reset;1238	struct vpu_ipc_msg_payload_engine_preempt engine_preempt;1239	struct vpu_ipc_msg_payload_register_db register_db;1240	struct vpu_ipc_msg_payload_unregister_db unregister_db;1241	struct vpu_ipc_msg_payload_query_engine_hb query_engine_hb;1242	struct vpu_ipc_msg_payload_power_level power_level;1243	struct vpu_jsm_metric_streamer_start metric_streamer_start;1244	struct vpu_jsm_metric_streamer_stop metric_streamer_stop;1245	struct vpu_jsm_metric_streamer_update metric_streamer_update;1246	struct vpu_ipc_msg_payload_blob_deinit blob_deinit;1247	struct vpu_ipc_msg_payload_ssid_release ssid_release;1248	struct vpu_jsm_hws_register_db hws_register_db;1249	struct vpu_ipc_msg_payload_job_done job_done;1250	struct vpu_ipc_msg_payload_engine_reset_done engine_reset_done;1251	struct vpu_ipc_msg_payload_engine_preempt_done engine_preempt_done;1252	struct vpu_ipc_msg_payload_register_db_done register_db_done;1253	struct vpu_ipc_msg_payload_unregister_db_done unregister_db_done;1254	struct vpu_ipc_msg_payload_query_engine_hb_done query_engine_hb_done;1255	struct vpu_ipc_msg_payload_get_power_level_count_done get_power_level_count_done;1256	struct vpu_jsm_metric_streamer_done metric_streamer_done;1257	struct vpu_ipc_msg_payload_blob_deinit_done blob_deinit_done;1258	struct vpu_ipc_msg_payload_trace_config trace_config;1259	struct vpu_ipc_msg_payload_trace_capability_rsp trace_capability;1260	struct vpu_ipc_msg_payload_trace_get_name trace_get_name;1261	struct vpu_ipc_msg_payload_trace_get_name_rsp trace_get_name_rsp;1262	struct vpu_ipc_msg_payload_dyndbg_control dyndbg_control;1263	struct vpu_ipc_msg_payload_hws_priority_band_setup hws_priority_band_setup;1264	struct vpu_ipc_msg_payload_hws_create_cmdq hws_create_cmdq;1265	struct vpu_ipc_msg_payload_hws_create_cmdq_rsp hws_create_cmdq_rsp;1266	struct vpu_ipc_msg_payload_hws_destroy_cmdq hws_destroy_cmdq;1267	struct vpu_ipc_msg_payload_hws_set_context_sched_properties1268		hws_set_context_sched_properties;1269	struct vpu_ipc_msg_payload_hws_set_scheduling_log hws_set_scheduling_log;1270	struct vpu_ipc_msg_payload_hws_scheduling_log_notification hws_scheduling_log_notification;1271	struct vpu_ipc_msg_payload_hws_suspend_cmdq hws_suspend_cmdq;1272	struct vpu_ipc_msg_payload_hws_resume_cmdq hws_resume_cmdq;1273	struct vpu_ipc_msg_payload_hws_resume_engine hws_resume_engine;1274	struct vpu_ipc_msg_payload_pwr_d0i3_enter pwr_d0i3_enter;1275	struct vpu_ipc_msg_payload_pwr_dct_control pwr_dct_control;1276};1277 1278/*1279 * Host <-> LRT IPC message base structure.1280 *1281 * NOTE: All instances of this object must be aligned on a 64B boundary1282 * to allow proper handling of VPU cache operations.1283 */1284struct vpu_jsm_msg {1285	/* Reserved */1286	u64 reserved_0;1287	/* Message type, see vpu_ipc_msg_type enum. */1288	u32 type;1289	/* Buffer status, see vpu_ipc_msg_status enum. */1290	u32 status;1291	/*1292	 * Request ID, provided by the host in a request message and passed1293	 * back by VPU in the response message.1294	 */1295	u32 request_id;1296	/* Request return code set by the VPU, see VPU_JSM_STATUS_* defines. */1297	u32 result;1298	u64 reserved_1;1299	/* Message payload depending on message type, see vpu_ipc_msg_payload union. */1300	union vpu_ipc_msg_payload payload;1301};1302 1303#pragma pack(pop)1304 1305#endif1306 1307///@}1308