248 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2023-2024 Intel Corporation4 */5 6#ifndef _ABI_GUC_RELAY_ACTIONS_ABI_H_7#define _ABI_GUC_RELAY_ACTIONS_ABI_H_8 9#include "abi/guc_relay_communication_abi.h"10 11/**12 * DOC: GuC Relay VF/PF ABI Version13 *14 * The _`GUC_RELAY_VERSION_BASE` defines minimum VF/PF ABI version that15 * drivers must support. Currently this is version 1.0.16 *17 * The _`GUC_RELAY_VERSION_LATEST` defines latest VF/PF ABI version that18 * drivers may use. Currently this is version 1.0.19 *20 * Some platforms may require different base VF/PF ABI version.21 * No supported VF/PF ABI version can be 0.0.22 */23 24#define GUC_RELAY_VERSION_BASE_MAJOR 125#define GUC_RELAY_VERSION_BASE_MINOR 026 27#define GUC_RELAY_VERSION_LATEST_MAJOR 128#define GUC_RELAY_VERSION_LATEST_MINOR 029 30/**31 * DOC: GuC Relay Actions32 *33 * The following actions are supported from VF/PF ABI version 1.0:34 *35 * * `VF2PF_HANDSHAKE`_36 * * `VF2PF_QUERY_RUNTIME`_37 */38 39/**40 * DOC: VF2PF_HANDSHAKE41 *42 * This `Relay Message`_ is used by the VF to establish ABI version with the PF.43 *44 * Prior to exchanging any other messages, both VF driver and PF driver must45 * negotiate the VF/PF ABI version that will be used in their communication.46 *47 * The VF driver shall use @MAJOR and @MINOR fields to pass requested ABI version.48 * The VF driver may use special version 0.0 (both @MAJOR and @MINOR set to 0)49 * to request latest (or any) ABI version that is supported by the PF driver.50 *51 * This message definition shall be supported by all future ABI versions.52 * This message definition shall not be changed by future ABI versions.53 *54 * +---+-------+--------------------------------------------------------------+55 * | | Bits | Description |56 * +===+=======+==============================================================+57 * | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ |58 * | +-------+--------------------------------------------------------------+59 * | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ |60 * | +-------+--------------------------------------------------------------+61 * | | 27:16 | DATA0 = MBZ |62 * | +-------+--------------------------------------------------------------+63 * | | 15:0 | ACTION = _`GUC_RELAY_ACTION_VF2PF_HANDSHAKE` = 0x0001 |64 * +---+-------+--------------------------------------------------------------+65 * | 1 | 31:16 | **MAJOR** - requested major version of the VFPF interface |66 * | | | (use MAJOR_ANY to request latest version supported by PF) |67 * | +-------+--------------------------------------------------------------+68 * | | 15:0 | **MINOR** - requested minor version of the VFPF interface |69 * | | | (use MINOR_ANY to request latest version supported by PF) |70 * +---+-------+--------------------------------------------------------------+71 *72 * +---+-------+--------------------------------------------------------------+73 * | | Bits | Description |74 * +===+=======+==============================================================+75 * | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ |76 * | +-------+--------------------------------------------------------------+77 * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ |78 * | +-------+--------------------------------------------------------------+79 * | | 27:0 | DATA0 = MBZ |80 * +---+-------+--------------------------------------------------------------+81 * | 1 | 31:16 | **MAJOR** - agreed major version of the VFPF interface |82 * | +-------+--------------------------------------------------------------+83 * | | 15:0 | **MINOR** - agreed minor version of the VFPF interface |84 * +---+-------+--------------------------------------------------------------+85 */86#define GUC_RELAY_ACTION_VF2PF_HANDSHAKE 0x0001u87 88#define VF2PF_HANDSHAKE_REQUEST_MSG_LEN 2u89#define VF2PF_HANDSHAKE_REQUEST_MSG_0_MBZ GUC_HXG_REQUEST_MSG_0_DATA090#define VF2PF_HANDSHAKE_REQUEST_MSG_1_MAJOR (0xffffu << 16)91#define VF2PF_HANDSHAKE_MAJOR_ANY 092#define VF2PF_HANDSHAKE_REQUEST_MSG_1_MINOR (0xffffu << 0)93#define VF2PF_HANDSHAKE_MINOR_ANY 094 95#define VF2PF_HANDSHAKE_RESPONSE_MSG_LEN 2u96#define VF2PF_HANDSHAKE_RESPONSE_MSG_0_MBZ GUC_HXG_RESPONSE_MSG_0_DATA097#define VF2PF_HANDSHAKE_RESPONSE_MSG_1_MAJOR (0xffffu << 16)98#define VF2PF_HANDSHAKE_RESPONSE_MSG_1_MINOR (0xffffu << 0)99 100/**101 * DOC: VF2PF_QUERY_RUNTIME102 *103 * This `Relay Message`_ is used by the VF to query values of runtime registers.104 *105 * On some platforms, VF drivers may not have access to the some fuse registers106 * (referred here as 'runtime registers') and therefore VF drivers need to ask107 * the PF driver to obtain their values.108 *109 * However, the list of such registers, and their values, is fully owned and110 * maintained by the PF driver and the VF driver may only initiate the query111 * sequence and indicate in the @START field the starting index of the next112 * requested register from this predefined list.113 *114 * In the response, the PF driver will return tuple of 32-bit register offset and115 * the 32-bit value of that register (respectively @REG_OFFSET and @REG_VALUE).116 *117 * The VF driver can use @LIMIT field to limit number of returned register tuples.118 * If @LIMIT is unset then PF decides about number of returned register tuples.119 *120 * This message definition is supported from ABI version 1.0.121 *122 * +---+-------+--------------------------------------------------------------+123 * | | Bits | Description |124 * +===+=======+==============================================================+125 * | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ |126 * | +-------+--------------------------------------------------------------+127 * | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ |128 * | +-------+--------------------------------------------------------------+129 * | | 27:16 | DATA0 = **LIMIT** - limit number of returned entries |130 * | | | (use zero to not enforce any limits on the response) |131 * | +-------+--------------------------------------------------------------+132 * | | 15:0 | ACTION = _`GUC_RELAY_ACTION_VF2PF_QUERY_RUNTIME` = 0x0101 |133 * +---+-------+--------------------------------------------------------------+134 * | 1 | 31:0 | DATA1 = **START** - index of the first requested entry |135 * +---+-------+--------------------------------------------------------------+136 *137 * +---+-------+--------------------------------------------------------------+138 * | | Bits | Description |139 * +===+=======+==============================================================+140 * | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ |141 * | +-------+--------------------------------------------------------------+142 * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ |143 * | +-------+--------------------------------------------------------------+144 * | | 27:0 | DATA0 = **COUNT** - number of entries included in response |145 * +---+-------+--------------------------------------------------------------+146 * | 1 | 31:0 | DATA1 = **REMAINING** - number of remaining entries |147 * +---+-------+--------------------------------------------------------------+148 * | 2 | 31:0 | DATA2 = **REG_OFFSET** - offset of register[START] |149 * +---+-------+--------------------------------------------------------------+150 * | 3 | 31:0 | DATA3 = **REG_VALUE** - value of register[START] |151 * +---+-------+--------------------------------------------------------------+152 * | | | |153 * +---+-------+--------------------------------------------------------------+154 * |n-1| 31:0 | REG_OFFSET - offset of register[START + x] |155 * +---+-------+--------------------------------------------------------------+156 * | n | 31:0 | REG_VALUE - value of register[START + x] |157 * +---+-------+--------------------------------------------------------------+158 */159#define GUC_RELAY_ACTION_VF2PF_QUERY_RUNTIME 0x0101u160 161#define VF2PF_QUERY_RUNTIME_REQUEST_MSG_LEN 2u162#define VF2PF_QUERY_RUNTIME_REQUEST_MSG_0_LIMIT GUC_HXG_REQUEST_MSG_0_DATA0163#define VF2PF_QUERY_RUNTIME_NO_LIMIT 0u164#define VF2PF_QUERY_RUNTIME_REQUEST_MSG_1_START GUC_HXG_REQUEST_MSG_n_DATAn165 166#define VF2PF_QUERY_RUNTIME_RESPONSE_MSG_MIN_LEN (GUC_HXG_MSG_MIN_LEN + 1u)167#define VF2PF_QUERY_RUNTIME_RESPONSE_MSG_MAX_LEN \168 (VF2PF_QUERY_RUNTIME_RESPONSE_MSG_MIN_LEN + VF2PF_QUERY_RUNTIME_MAX_COUNT * 2)169#define VF2PF_QUERY_RUNTIME_RESPONSE_MSG_0_COUNT GUC_HXG_RESPONSE_MSG_0_DATA0170#define VF2PF_QUERY_RUNTIME_MIN_COUNT 0171#define VF2PF_QUERY_RUNTIME_MAX_COUNT \172 ((GUC_RELAY_MSG_MAX_LEN - VF2PF_QUERY_RUNTIME_RESPONSE_MSG_MIN_LEN) / 2)173#define VF2PF_QUERY_RUNTIME_RESPONSE_MSG_1_REMAINING GUC_HXG_RESPONSE_MSG_n_DATAn174#define VF2PF_QUERY_RUNTIME_RESPONSE_DATAn_REG_OFFSETx GUC_HXG_RESPONSE_MSG_n_DATAn175#define VF2PF_QUERY_RUNTIME_RESPONSE_DATAn_REG_VALUEx GUC_HXG_RESPONSE_MSG_n_DATAn176 177/**178 * DOC: GuC Relay Debug Actions179 *180 * This range of action codes is reserved for debugging purposes only and should181 * be used only on debug builds. These actions may not be supported by the182 * production drivers. Their definitions could be changed in the future.183 *184 * _`GUC_RELAY_ACTION_DEBUG_ONLY_START` = 0xDEB0185 * _`GUC_RELAY_ACTION_DEBUG_ONLY_END` = 0xDEFF186 */187 188#define GUC_RELAY_ACTION_DEBUG_ONLY_START 0xDEB0189#define GUC_RELAY_ACTION_DEBUG_ONLY_END 0xDEFF190 191/**192 * DOC: VFXPF_TESTLOOP193 *194 * This `Relay Message`_ is used to selftest the `GuC Relay Communication`_.195 *196 * The following opcodes are defined:197 * VFXPF_TESTLOOP_OPCODE_NOP_ will return no data.198 * VFXPF_TESTLOOP_OPCODE_BUSY_ will reply with BUSY response first.199 * VFXPF_TESTLOOP_OPCODE_RETRY_ will reply with RETRY response instead.200 * VFXPF_TESTLOOP_OPCODE_ECHO_ will return same data as received.201 * VFXPF_TESTLOOP_OPCODE_FAIL_ will always fail with error.202 *203 * +---+-------+--------------------------------------------------------------+204 * | | Bits | Description |205 * +===+=======+==============================================================+206 * | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ |207 * | +-------+--------------------------------------------------------------+208 * | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ or GUC_HXG_TYPE_FAST_REQUEST_ |209 * | | | or GUC_HXG_TYPE_EVENT_ |210 * | +-------+--------------------------------------------------------------+211 * | | 27:16 | **OPCODE** |212 * | | | - _`VFXPF_TESTLOOP_OPCODE_NOP` = 0x0 |213 * | | | - _`VFXPF_TESTLOOP_OPCODE_BUSY` = 0xB |214 * | | | - _`VFXPF_TESTLOOP_OPCODE_RETRY` = 0xD |215 * | | | - _`VFXPF_TESTLOOP_OPCODE_ECHO` = 0xE |216 * | | | - _`VFXPF_TESTLOOP_OPCODE_FAIL` = 0xF |217 * | +-------+--------------------------------------------------------------+218 * | | 15:0 | ACTION = _`IOV_ACTION_SELFTEST_RELAY` |219 * +---+-------+--------------------------------------------------------------+220 * | 1 | 31:0 | **DATA1** = optional, depends on **OPCODE**: |221 * | | | for VFXPF_TESTLOOP_OPCODE_BUSY_: time in ms for reply |222 * | | | for VFXPF_TESTLOOP_OPCODE_FAIL_: expected error |223 * | | | for VFXPF_TESTLOOP_OPCODE_ECHO_: payload |224 * +---+-------+--------------------------------------------------------------+225 * |...| 31:0 | **DATAn** = only for **OPCODE** VFXPF_TESTLOOP_OPCODE_ECHO_ |226 * +---+-------+--------------------------------------------------------------+227 *228 * +---+-------+--------------------------------------------------------------+229 * | | Bits | Description |230 * +===+=======+==============================================================+231 * | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ |232 * | +-------+--------------------------------------------------------------+233 * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ |234 * | +-------+--------------------------------------------------------------+235 * | | 27:0 | DATA0 = MBZ |236 * +---+-------+--------------------------------------------------------------+237 * |...| 31:0 | DATAn = only for **OPCODE** VFXPF_TESTLOOP_OPCODE_ECHO_ |238 * +---+-------+--------------------------------------------------------------+239 */240#define GUC_RELAY_ACTION_VFXPF_TESTLOOP (GUC_RELAY_ACTION_DEBUG_ONLY_START + 1)241#define VFXPF_TESTLOOP_OPCODE_NOP 0x0242#define VFXPF_TESTLOOP_OPCODE_BUSY 0xB243#define VFXPF_TESTLOOP_OPCODE_RETRY 0xD244#define VFXPF_TESTLOOP_OPCODE_ECHO 0xE245#define VFXPF_TESTLOOP_OPCODE_FAIL 0xF246 247#endif248