/* SPDX-License-Identifier: MIT */
/*
* Copyright © 2023 Intel Corporation
*/
#ifndef _ABI_GUC_RELAY_COMMUNICATION_ABI_H
#define _ABI_GUC_RELAY_COMMUNICATION_ABI_H
#include <linux/build_bug.h>
#include "guc_actions_sriov_abi.h"
#include "guc_communication_ctb_abi.h"
#include "guc_messages_abi.h"
/**
* DOC : GuC Relay Communication
*
* The communication between Virtual Function ( VF ) drivers and Physical Function
* ( PF ) drivers is based on the GuC firmware acting as a proxy ( relay ) agent .
*
* To communicate with the PF driver , VF ' s drivers use ` VF2GUC_RELAY_TO_PF ` _
* action that takes the ` Relay Message ` _ as opaque payload and requires the
* relay message identifier ( RID ) as additional parameter .
*
* This identifier is used by the drivers to match related messages .
*
* The GuC forwards this ` Relay Message ` _ and its identifier to the PF driver
* in ` GUC2PF_RELAY_FROM_VF ` _ action . This event message additionally contains
* the identifier of the origin VF ( VFID ) .
*
* Likewise , to communicate with the VF drivers , PF driver use
* ` VF2GUC_RELAY_TO_PF ` _ action that in addition to the ` Relay Message ` _
* and the relay message identifier ( RID ) also takes the target VF identifier .
*
* The GuC uses this target VFID from the message to select where to send the
* ` GUC2VF_RELAY_FROM_PF ` _ with the embedded ` Relay Message ` _ with response : :
*
* VF GuC PF
* | | |
* [ ] VF2GUC_RELAY_TO_PF | |
* [ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - > [ ] |
* [ ] { rid , msg } [ ] |
* [ ] [ ] GUC2PF_RELAY_FROM_VF |
* [ ] [ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - > [ ]
* [ ] | { VFID , rid , msg } [ ]
* [ ] | [ ]
* [ ] | PF2GUC_RELAY_TO_VF [ ]
* [ ] [ ] < - - - - - - - - - - - - - - - - - - - - - - - - - - - [ ]
* [ ] [ ] { VFID , rid , reply } |
* [ ] GUC2VF_RELAY_FROM_PF [ ] |
* [ ] < - - - - - - - - - - - - - - - - - - - - - - - - - - - [ ] |
* | { rid , reply } | |
* | | |
*
* It is also possible that PF driver will initiate communication with the
* selected VF driver . The same GuC action messages will be used : :
*
* VF GuC PF
* | | |
* | | PF2GUC_RELAY_TO_VF [ ]
* | [ ] < - - - - - - - - - - - - - - - - - - - - - - - - - - - [ ]
* | [ ] { VFID , rid , msg } [ ]
* | GUC2VF_RELAY_FROM_PF [ ] [ ]
* [ ] < - - - - - - - - - - - - - - - - - - - - - - - - - - - [ ] [ ]
* [ ] { rid , msg } | [ ]
* [ ] | [ ]
* [ ] VF2GUC_RELAY_TO_PF | [ ]
* [ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - > [ ] [ ]
* | { rid , reply } [ ] [ ]
* | [ ] GUC2PF_RELAY_FROM_VF [ ]
* | [ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - > [ ]
* | | { VFID , rid , reply } |
* | | |
*/
/**
* DOC : Relay Message
*
* The ` Relay Message ` _ is used by Physical Function ( PF ) driver and Virtual
* Function ( VF ) drivers to communicate using ` GuC Relay Communication ` _ .
*
* Format of the ` Relay Message ` _ follows format of the generic ` HXG Message ` _ .
*
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* | ` Relay Message ` _ |
* + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* | ` HXG Message ` _ |
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
*
* Maximum length of the ` Relay Message ` _ is limited by the maximum length of
* the ` CTB HXG Message ` _ and format of the ` GUC2PF_RELAY_FROM_VF ` _ message .
*/
#define GUC_RELAY_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN
#define GUC_RELAY_MSG_MAX_LEN \
(GUC_CTB_MAX_DWORDS - GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN)
static_assert(PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN >
VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN);
/**
* DOC : Relay Error Codes
*
* The ` GuC Relay Communication ` _ can be used to pass ` Relay Message ` _ between
* drivers that run on different Operating Systems . To help in troubleshooting ,
* ` GuC Relay Communication ` _ uses error codes that mostly match errno values .
*/
#define GUC_RELAY_ERROR_UNDISCLOSED 0
#define GUC_RELAY_ERROR_OPERATION_NOT_PERMITTED 1 /* EPERM */
#define GUC_RELAY_ERROR_PERMISSION_DENIED 13 /* EACCES */
#define GUC_RELAY_ERROR_INVALID_ARGUMENT 22 /* EINVAL */
#define GUC_RELAY_ERROR_INVALID_REQUEST_CODE 56 /* EBADRQC */
#define GUC_RELAY_ERROR_NO_DATA_AVAILABLE 61 /* ENODATA */
#define GUC_RELAY_ERROR_PROTOCOL_ERROR 71 /* EPROTO */
#define GUC_RELAY_ERROR_MESSAGE_SIZE 90 /* EMSGSIZE */
#endif
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.10 Sekunden
¤
*© Formatika GbR, Deutschland