10a8e247dSMichal Wajdeczko /* SPDX-License-Identifier: MIT */ 20a8e247dSMichal Wajdeczko /* 30a8e247dSMichal Wajdeczko * Copyright © 2014-2021 Intel Corporation 40a8e247dSMichal Wajdeczko */ 50a8e247dSMichal Wajdeczko 60a8e247dSMichal Wajdeczko #ifndef _ABI_GUC_MESSAGES_ABI_H 70a8e247dSMichal Wajdeczko #define _ABI_GUC_MESSAGES_ABI_H 80a8e247dSMichal Wajdeczko 9088b4d4aSMichal Wajdeczko /** 10088b4d4aSMichal Wajdeczko * DOC: HXG Message 11088b4d4aSMichal Wajdeczko * 12088b4d4aSMichal Wajdeczko * All messages exchanged with GuC are defined using 32 bit dwords. 13088b4d4aSMichal Wajdeczko * First dword is treated as a message header. Remaining dwords are optional. 14088b4d4aSMichal Wajdeczko * 15088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 16088b4d4aSMichal Wajdeczko * | | Bits | Description | 17088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 18088b4d4aSMichal Wajdeczko * | | | | 19088b4d4aSMichal Wajdeczko * | 0 | 31 | **ORIGIN** - originator of the message | 20088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_ORIGIN_HOST` = 0 | 21088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_ORIGIN_GUC` = 1 | 22088b4d4aSMichal Wajdeczko * | | | | 23088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 24088b4d4aSMichal Wajdeczko * | | 30:28 | **TYPE** - message type | 25088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_REQUEST` = 0 | 26088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_EVENT` = 1 | 27*edfd93e6SMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_FAST_REQUEST` = 2 | 28088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_NO_RESPONSE_BUSY` = 3 | 29088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_NO_RESPONSE_RETRY` = 5 | 30088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_RESPONSE_FAILURE` = 6 | 31088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_TYPE_RESPONSE_SUCCESS` = 7 | 32088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 33088b4d4aSMichal Wajdeczko * | | 27:0 | **AUX** - auxiliary data (depends on TYPE) | 34088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 35088b4d4aSMichal Wajdeczko * | 1 | 31:0 | | 36088b4d4aSMichal Wajdeczko * +---+-------+ | 37088b4d4aSMichal Wajdeczko * |...| | **PAYLOAD** - optional payload (depends on TYPE) | 38088b4d4aSMichal Wajdeczko * +---+-------+ | 39088b4d4aSMichal Wajdeczko * | n | 31:0 | | 40088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 41088b4d4aSMichal Wajdeczko */ 42088b4d4aSMichal Wajdeczko 43088b4d4aSMichal Wajdeczko #define GUC_HXG_MSG_MIN_LEN 1u 44962bd34bSBorislav Petkov #define GUC_HXG_MSG_0_ORIGIN (0x1U << 31) 45088b4d4aSMichal Wajdeczko #define GUC_HXG_ORIGIN_HOST 0u 46088b4d4aSMichal Wajdeczko #define GUC_HXG_ORIGIN_GUC 1u 47088b4d4aSMichal Wajdeczko #define GUC_HXG_MSG_0_TYPE (0x7 << 28) 48088b4d4aSMichal Wajdeczko #define GUC_HXG_TYPE_REQUEST 0u 49088b4d4aSMichal Wajdeczko #define GUC_HXG_TYPE_EVENT 1u 50*edfd93e6SMichal Wajdeczko #define GUC_HXG_TYPE_FAST_REQUEST 2u 51088b4d4aSMichal Wajdeczko #define GUC_HXG_TYPE_NO_RESPONSE_BUSY 3u 52088b4d4aSMichal Wajdeczko #define GUC_HXG_TYPE_NO_RESPONSE_RETRY 5u 53088b4d4aSMichal Wajdeczko #define GUC_HXG_TYPE_RESPONSE_FAILURE 6u 54088b4d4aSMichal Wajdeczko #define GUC_HXG_TYPE_RESPONSE_SUCCESS 7u 55088b4d4aSMichal Wajdeczko #define GUC_HXG_MSG_0_AUX (0xfffffff << 0) 56088b4d4aSMichal Wajdeczko #define GUC_HXG_MSG_n_PAYLOAD (0xffffffff << 0) 57088b4d4aSMichal Wajdeczko 58088b4d4aSMichal Wajdeczko /** 59088b4d4aSMichal Wajdeczko * DOC: HXG Request 60088b4d4aSMichal Wajdeczko * 61088b4d4aSMichal Wajdeczko * The `HXG Request`_ message should be used to initiate synchronous activity 62088b4d4aSMichal Wajdeczko * for which confirmation or return data is expected. 63088b4d4aSMichal Wajdeczko * 64088b4d4aSMichal Wajdeczko * The recipient of this message shall use `HXG Response`_, `HXG Failure`_ 65088b4d4aSMichal Wajdeczko * or `HXG Retry`_ message as a definite reply, and may use `HXG Busy`_ 66088b4d4aSMichal Wajdeczko * message as a intermediate reply. 67088b4d4aSMichal Wajdeczko * 68088b4d4aSMichal Wajdeczko * Format of @DATA0 and all @DATAn fields depends on the @ACTION code. 69088b4d4aSMichal Wajdeczko * 70088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 71088b4d4aSMichal Wajdeczko * | | Bits | Description | 72088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 73088b4d4aSMichal Wajdeczko * | 0 | 31 | ORIGIN | 74088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 75088b4d4aSMichal Wajdeczko * | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ | 76088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 77088b4d4aSMichal Wajdeczko * | | 27:16 | **DATA0** - request data (depends on ACTION) | 78088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 79088b4d4aSMichal Wajdeczko * | | 15:0 | **ACTION** - requested action code | 80088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 81088b4d4aSMichal Wajdeczko * | 1 | 31:0 | | 82088b4d4aSMichal Wajdeczko * +---+-------+ | 83088b4d4aSMichal Wajdeczko * |...| | **DATAn** - optional data (depends on ACTION) | 84088b4d4aSMichal Wajdeczko * +---+-------+ | 85088b4d4aSMichal Wajdeczko * | n | 31:0 | | 86088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 87088b4d4aSMichal Wajdeczko */ 88088b4d4aSMichal Wajdeczko 89088b4d4aSMichal Wajdeczko #define GUC_HXG_REQUEST_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN 90088b4d4aSMichal Wajdeczko #define GUC_HXG_REQUEST_MSG_0_DATA0 (0xfff << 16) 91088b4d4aSMichal Wajdeczko #define GUC_HXG_REQUEST_MSG_0_ACTION (0xffff << 0) 92088b4d4aSMichal Wajdeczko #define GUC_HXG_REQUEST_MSG_n_DATAn GUC_HXG_MSG_n_PAYLOAD 93088b4d4aSMichal Wajdeczko 94088b4d4aSMichal Wajdeczko /** 95*edfd93e6SMichal Wajdeczko * DOC: HXG Fast Request 96*edfd93e6SMichal Wajdeczko * 97*edfd93e6SMichal Wajdeczko * The `HXG Request`_ message should be used to initiate asynchronous activity 98*edfd93e6SMichal Wajdeczko * for which confirmation or return data is not expected. 99*edfd93e6SMichal Wajdeczko * 100*edfd93e6SMichal Wajdeczko * If confirmation is required then `HXG Request`_ shall be used instead. 101*edfd93e6SMichal Wajdeczko * 102*edfd93e6SMichal Wajdeczko * The recipient of this message may only use `HXG Failure`_ message if it was 103*edfd93e6SMichal Wajdeczko * unable to accept this request (like invalid data). 104*edfd93e6SMichal Wajdeczko * 105*edfd93e6SMichal Wajdeczko * Format of `HXG Fast Request`_ message is same as `HXG Request`_ except @TYPE. 106*edfd93e6SMichal Wajdeczko * 107*edfd93e6SMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 108*edfd93e6SMichal Wajdeczko * | | Bits | Description | 109*edfd93e6SMichal Wajdeczko * +===+=======+==============================================================+ 110*edfd93e6SMichal Wajdeczko * | 0 | 31 | ORIGIN - see `HXG Message`_ | 111*edfd93e6SMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 112*edfd93e6SMichal Wajdeczko * | | 30:28 | TYPE = `GUC_HXG_TYPE_FAST_REQUEST`_ | 113*edfd93e6SMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 114*edfd93e6SMichal Wajdeczko * | | 27:16 | DATA0 - see `HXG Request`_ | 115*edfd93e6SMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 116*edfd93e6SMichal Wajdeczko * | | 15:0 | ACTION - see `HXG Request`_ | 117*edfd93e6SMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 118*edfd93e6SMichal Wajdeczko * |...| | DATAn - see `HXG Request`_ | 119*edfd93e6SMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 120*edfd93e6SMichal Wajdeczko */ 121*edfd93e6SMichal Wajdeczko 122*edfd93e6SMichal Wajdeczko /** 123088b4d4aSMichal Wajdeczko * DOC: HXG Event 124088b4d4aSMichal Wajdeczko * 125088b4d4aSMichal Wajdeczko * The `HXG Event`_ message should be used to initiate asynchronous activity 126088b4d4aSMichal Wajdeczko * that does not involves immediate confirmation nor data. 127088b4d4aSMichal Wajdeczko * 128088b4d4aSMichal Wajdeczko * Format of @DATA0 and all @DATAn fields depends on the @ACTION code. 129088b4d4aSMichal Wajdeczko * 130088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 131088b4d4aSMichal Wajdeczko * | | Bits | Description | 132088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 133088b4d4aSMichal Wajdeczko * | 0 | 31 | ORIGIN | 134088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 135088b4d4aSMichal Wajdeczko * | | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_ | 136088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 137088b4d4aSMichal Wajdeczko * | | 27:16 | **DATA0** - event data (depends on ACTION) | 138088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 139088b4d4aSMichal Wajdeczko * | | 15:0 | **ACTION** - event action code | 140088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 141088b4d4aSMichal Wajdeczko * | 1 | 31:0 | | 142088b4d4aSMichal Wajdeczko * +---+-------+ | 143088b4d4aSMichal Wajdeczko * |...| | **DATAn** - optional event data (depends on ACTION) | 144088b4d4aSMichal Wajdeczko * +---+-------+ | 145088b4d4aSMichal Wajdeczko * | n | 31:0 | | 146088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 147088b4d4aSMichal Wajdeczko */ 148088b4d4aSMichal Wajdeczko 149088b4d4aSMichal Wajdeczko #define GUC_HXG_EVENT_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN 150088b4d4aSMichal Wajdeczko #define GUC_HXG_EVENT_MSG_0_DATA0 (0xfff << 16) 151088b4d4aSMichal Wajdeczko #define GUC_HXG_EVENT_MSG_0_ACTION (0xffff << 0) 152088b4d4aSMichal Wajdeczko #define GUC_HXG_EVENT_MSG_n_DATAn GUC_HXG_MSG_n_PAYLOAD 153088b4d4aSMichal Wajdeczko 154088b4d4aSMichal Wajdeczko /** 155088b4d4aSMichal Wajdeczko * DOC: HXG Busy 156088b4d4aSMichal Wajdeczko * 157088b4d4aSMichal Wajdeczko * The `HXG Busy`_ message may be used to acknowledge reception of the `HXG Request`_ 158088b4d4aSMichal Wajdeczko * message if the recipient expects that it processing will be longer than default 159088b4d4aSMichal Wajdeczko * timeout. 160088b4d4aSMichal Wajdeczko * 161088b4d4aSMichal Wajdeczko * The @COUNTER field may be used as a progress indicator. 162088b4d4aSMichal Wajdeczko * 163088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 164088b4d4aSMichal Wajdeczko * | | Bits | Description | 165088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 166088b4d4aSMichal Wajdeczko * | 0 | 31 | ORIGIN | 167088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 168088b4d4aSMichal Wajdeczko * | | 30:28 | TYPE = GUC_HXG_TYPE_NO_RESPONSE_BUSY_ | 169088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 170088b4d4aSMichal Wajdeczko * | | 27:0 | **COUNTER** - progress indicator | 171088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 172088b4d4aSMichal Wajdeczko */ 173088b4d4aSMichal Wajdeczko 174088b4d4aSMichal Wajdeczko #define GUC_HXG_BUSY_MSG_LEN GUC_HXG_MSG_MIN_LEN 175088b4d4aSMichal Wajdeczko #define GUC_HXG_BUSY_MSG_0_COUNTER GUC_HXG_MSG_0_AUX 176088b4d4aSMichal Wajdeczko 177088b4d4aSMichal Wajdeczko /** 178088b4d4aSMichal Wajdeczko * DOC: HXG Retry 179088b4d4aSMichal Wajdeczko * 180088b4d4aSMichal Wajdeczko * The `HXG Retry`_ message should be used by recipient to indicate that the 181088b4d4aSMichal Wajdeczko * `HXG Request`_ message was dropped and it should be resent again. 182088b4d4aSMichal Wajdeczko * 183088b4d4aSMichal Wajdeczko * The @REASON field may be used to provide additional information. 184088b4d4aSMichal Wajdeczko * 185088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 186088b4d4aSMichal Wajdeczko * | | Bits | Description | 187088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 188088b4d4aSMichal Wajdeczko * | 0 | 31 | ORIGIN | 189088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 190088b4d4aSMichal Wajdeczko * | | 30:28 | TYPE = GUC_HXG_TYPE_NO_RESPONSE_RETRY_ | 191088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 192088b4d4aSMichal Wajdeczko * | | 27:0 | **REASON** - reason for retry | 193088b4d4aSMichal Wajdeczko * | | | - _`GUC_HXG_RETRY_REASON_UNSPECIFIED` = 0 | 194088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 195088b4d4aSMichal Wajdeczko */ 196088b4d4aSMichal Wajdeczko 197088b4d4aSMichal Wajdeczko #define GUC_HXG_RETRY_MSG_LEN GUC_HXG_MSG_MIN_LEN 198088b4d4aSMichal Wajdeczko #define GUC_HXG_RETRY_MSG_0_REASON GUC_HXG_MSG_0_AUX 199088b4d4aSMichal Wajdeczko #define GUC_HXG_RETRY_REASON_UNSPECIFIED 0u 200088b4d4aSMichal Wajdeczko 201088b4d4aSMichal Wajdeczko /** 202088b4d4aSMichal Wajdeczko * DOC: HXG Failure 203088b4d4aSMichal Wajdeczko * 204088b4d4aSMichal Wajdeczko * The `HXG Failure`_ message shall be used as a reply to the `HXG Request`_ 205088b4d4aSMichal Wajdeczko * message that could not be processed due to an error. 206088b4d4aSMichal Wajdeczko * 207088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 208088b4d4aSMichal Wajdeczko * | | Bits | Description | 209088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 210088b4d4aSMichal Wajdeczko * | 0 | 31 | ORIGIN | 211088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 212088b4d4aSMichal Wajdeczko * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_FAILURE_ | 213088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 214088b4d4aSMichal Wajdeczko * | | 27:16 | **HINT** - additional error hint | 215088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 216088b4d4aSMichal Wajdeczko * | | 15:0 | **ERROR** - error/result code | 217088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 218088b4d4aSMichal Wajdeczko */ 219088b4d4aSMichal Wajdeczko 220088b4d4aSMichal Wajdeczko #define GUC_HXG_FAILURE_MSG_LEN GUC_HXG_MSG_MIN_LEN 221088b4d4aSMichal Wajdeczko #define GUC_HXG_FAILURE_MSG_0_HINT (0xfff << 16) 222088b4d4aSMichal Wajdeczko #define GUC_HXG_FAILURE_MSG_0_ERROR (0xffff << 0) 223088b4d4aSMichal Wajdeczko 224088b4d4aSMichal Wajdeczko /** 225088b4d4aSMichal Wajdeczko * DOC: HXG Response 226088b4d4aSMichal Wajdeczko * 227088b4d4aSMichal Wajdeczko * The `HXG Response`_ message shall be used as a reply to the `HXG Request`_ 228088b4d4aSMichal Wajdeczko * message that was successfully processed without an error. 229088b4d4aSMichal Wajdeczko * 230088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 231088b4d4aSMichal Wajdeczko * | | Bits | Description | 232088b4d4aSMichal Wajdeczko * +===+=======+==============================================================+ 233088b4d4aSMichal Wajdeczko * | 0 | 31 | ORIGIN | 234088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 235088b4d4aSMichal Wajdeczko * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ | 236088b4d4aSMichal Wajdeczko * | +-------+--------------------------------------------------------------+ 237088b4d4aSMichal Wajdeczko * | | 27:0 | **DATA0** - data (depends on ACTION from `HXG Request`_) | 238088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 239088b4d4aSMichal Wajdeczko * | 1 | 31:0 | | 240088b4d4aSMichal Wajdeczko * +---+-------+ | 241088b4d4aSMichal Wajdeczko * |...| | **DATAn** - data (depends on ACTION from `HXG Request`_) | 242088b4d4aSMichal Wajdeczko * +---+-------+ | 243088b4d4aSMichal Wajdeczko * | n | 31:0 | | 244088b4d4aSMichal Wajdeczko * +---+-------+--------------------------------------------------------------+ 245088b4d4aSMichal Wajdeczko */ 246088b4d4aSMichal Wajdeczko 247088b4d4aSMichal Wajdeczko #define GUC_HXG_RESPONSE_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN 248088b4d4aSMichal Wajdeczko #define GUC_HXG_RESPONSE_MSG_0_DATA0 GUC_HXG_MSG_0_AUX 249088b4d4aSMichal Wajdeczko #define GUC_HXG_RESPONSE_MSG_n_DATAn GUC_HXG_MSG_n_PAYLOAD 250088b4d4aSMichal Wajdeczko 251088b4d4aSMichal Wajdeczko /* deprecated */ 2520a8e247dSMichal Wajdeczko #define INTEL_GUC_MSG_TYPE_SHIFT 28 2530a8e247dSMichal Wajdeczko #define INTEL_GUC_MSG_TYPE_MASK (0xF << INTEL_GUC_MSG_TYPE_SHIFT) 2540a8e247dSMichal Wajdeczko #define INTEL_GUC_MSG_DATA_SHIFT 16 2550a8e247dSMichal Wajdeczko #define INTEL_GUC_MSG_DATA_MASK (0xFFF << INTEL_GUC_MSG_DATA_SHIFT) 2560a8e247dSMichal Wajdeczko #define INTEL_GUC_MSG_CODE_SHIFT 0 2570a8e247dSMichal Wajdeczko #define INTEL_GUC_MSG_CODE_MASK (0xFFFF << INTEL_GUC_MSG_CODE_SHIFT) 2580a8e247dSMichal Wajdeczko 2590a8e247dSMichal Wajdeczko enum intel_guc_msg_type { 2600a8e247dSMichal Wajdeczko INTEL_GUC_MSG_TYPE_REQUEST = 0x0, 2610a8e247dSMichal Wajdeczko INTEL_GUC_MSG_TYPE_RESPONSE = 0xF, 2620a8e247dSMichal Wajdeczko }; 2630a8e247dSMichal Wajdeczko 2640a8e247dSMichal Wajdeczko #endif /* _ABI_GUC_MESSAGES_ABI_H */ 265