/* SPDX-License-Identifier: MIT */ /* * Copyright © 2023 Intel Corporation */ #ifndef _INTEL_GSC_UC_HECI_CMD_SUBMIT_H_ #define _INTEL_GSC_UC_HECI_CMD_SUBMIT_H_ #include struct i915_vma; struct intel_context; struct intel_gsc_uc; #define GSC_HECI_REPLY_LATENCY_MS 500 /* * Max FW response time is 500ms, but this should be counted from the time the * command has hit the GSC-CS hardware, not the preceding handoff to GuC CTB. */ struct intel_gsc_mtl_header { u32 validity_marker; #define GSC_HECI_VALIDITY_MARKER 0xA578875A u8 heci_client_id; #define HECI_MEADDRESS_MKHI 7 #define HECI_MEADDRESS_PROXY 10 #define HECI_MEADDRESS_PXP 17 #define HECI_MEADDRESS_HDCP 18 u8 reserved1; u16 header_version; #define MTL_GSC_HEADER_VERSION 1 /* * FW allows host to decide host_session handle * as it sees fit. * For intertracebility reserving select bits(60-63) * to differentiate caller-target subsystem * 0000 - HDCP * 0001 - PXP Single Session */ u64 host_session_handle; #define HOST_SESSION_MASK REG_GENMASK64(63, 60) #define HOST_SESSION_PXP_SINGLE BIT_ULL(60) u64 gsc_message_handle; u32 message_size; /* lower 20 bits only, upper 12 are reserved */ /* * Flags mask: * Bit 0: Pending * Bit 1: Session Cleanup; * Bits 2-15: Flags * Bits 16-31: Extension Size * According to internal spec flags are either input or output * we distinguish the flags using OUTFLAG or INFLAG */ u32 flags; #define GSC_OUTFLAG_MSG_PENDING BIT(0) #define GSC_INFLAG_MSG_CLEANUP BIT(1) u32 status; } __packed; int intel_gsc_uc_heci_cmd_submit_packet(struct intel_gsc_uc *gsc, u64 addr_in, u32 size_in, u64 addr_out, u32 size_out); void intel_gsc_uc_heci_cmd_emit_mtl_header(struct intel_gsc_mtl_header *header, u8 heci_client_id, u32 message_size, u64 host_session_id); struct intel_gsc_heci_non_priv_pkt { u64 addr_in; u32 size_in; u64 addr_out; u32 size_out; struct i915_vma *heci_pkt_vma; struct i915_vma *bb_vma; }; void intel_gsc_uc_heci_cmd_emit_mtl_header(struct intel_gsc_mtl_header *header, u8 heci_client_id, u32 msg_size, u64 host_session_id); int intel_gsc_uc_heci_cmd_submit_nonpriv(struct intel_gsc_uc *gsc, struct intel_context *ce, struct intel_gsc_heci_non_priv_pkt *pkt, u32 *cs, int timeout_ms); #endif