mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
virtchnl: add support for enabling PTP on iAVF
Add support for allowing a VF to enable PTP feature - Rx timestamps The new capability is gated by VIRTCHNL_VF_CAP_PTP, which must be set by the VF to request access to the new operations. In addition, the VIRTCHNL_OP_1588_PTP_CAPS command is used to determine the specific capabilities available to the VF. This support includes the following additional capabilities: * Rx timestamps enabled in the Rx queues (when using flexible advanced descriptors) * Read access to PHC time over virtchnl using VIRTCHNL_OP_1588_PTP_GET_TIME Extra space is reserved in most structures to allow for future extension (like set clock, Tx timestamps). Additional opcode numbers are reserved and space in the virtchnl_ptp_caps structure is specifically set aside for this. Additionally, each structure has some space reserved for future extensions to allow some flexibility. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com> Reviewed-by: Simon Horman <horms@kernel.org> Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com> Tested-by: Rafal Romanowski <rafal.romanowski@intel.com> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
committed by
Tony Nguyen
parent
7a7e019713
commit
27ebd8bf9e
@@ -154,7 +154,10 @@ enum virtchnl_ops {
|
||||
VIRTCHNL_OP_DISABLE_VLAN_STRIPPING_V2 = 55,
|
||||
VIRTCHNL_OP_ENABLE_VLAN_INSERTION_V2 = 56,
|
||||
VIRTCHNL_OP_DISABLE_VLAN_INSERTION_V2 = 57,
|
||||
/* opcode 57 - 65 are reserved */
|
||||
/* opcode 58 and 59 are reserved */
|
||||
VIRTCHNL_OP_1588_PTP_GET_CAPS = 60,
|
||||
VIRTCHNL_OP_1588_PTP_GET_TIME = 61,
|
||||
/* opcode 62 - 65 are reserved */
|
||||
VIRTCHNL_OP_GET_QOS_CAPS = 66,
|
||||
/* opcode 68 through 111 are reserved */
|
||||
VIRTCHNL_OP_CONFIG_QUEUE_BW = 112,
|
||||
@@ -270,6 +273,7 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource);
|
||||
#define VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF BIT(27)
|
||||
#define VIRTCHNL_VF_OFFLOAD_FDIR_PF BIT(28)
|
||||
#define VIRTCHNL_VF_OFFLOAD_QOS BIT(29)
|
||||
#define VIRTCHNL_VF_CAP_PTP BIT(31)
|
||||
|
||||
#define VF_BASE_MODE_OFFLOADS (VIRTCHNL_VF_OFFLOAD_L2 | \
|
||||
VIRTCHNL_VF_OFFLOAD_VLAN | \
|
||||
@@ -1425,6 +1429,61 @@ struct virtchnl_fdir_del {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_fdir_del);
|
||||
|
||||
#define VIRTCHNL_1588_PTP_CAP_RX_TSTAMP BIT(1)
|
||||
#define VIRTCHNL_1588_PTP_CAP_READ_PHC BIT(2)
|
||||
|
||||
/**
|
||||
* struct virtchnl_ptp_caps - Defines the PTP caps available to the VF.
|
||||
* @caps: On send, VF sets what capabilities it requests. On reply, PF
|
||||
* indicates what has been enabled for this VF. The PF shall not set
|
||||
* bits which were not requested by the VF.
|
||||
* @rsvd: Reserved bits for future extension.
|
||||
*
|
||||
* Structure that defines the PTP capabilities available to the VF. The VF
|
||||
* sends VIRTCHNL_OP_1588_PTP_GET_CAPS, and must fill in the ptp_caps field
|
||||
* indicating what capabilities it is requesting. The PF will respond with the
|
||||
* same message with the virtchnl_ptp_caps structure indicating what is
|
||||
* enabled for the VF.
|
||||
*
|
||||
* VIRTCHNL_1588_PTP_CAP_RX_TSTAMP indicates that the VF receive queues have
|
||||
* receive timestamps enabled in the flexible descriptors. Note that this
|
||||
* requires a VF to also negotiate to enable advanced flexible descriptors in
|
||||
* the receive path instead of the default legacy descriptor format.
|
||||
*
|
||||
* VIRTCHNL_1588_PTP_CAP_READ_PHC indicates that the VF may read the PHC time
|
||||
* via the VIRTCHNL_OP_1588_PTP_GET_TIME command.
|
||||
*
|
||||
* Note that in the future, additional capability flags may be added which
|
||||
* indicate additional extended support. All fields marked as reserved by this
|
||||
* header will be set to zero. VF implementations should verify this to ensure
|
||||
* that future extensions do not break compatibility.
|
||||
*/
|
||||
struct virtchnl_ptp_caps {
|
||||
u32 caps;
|
||||
u8 rsvd[44];
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(48, virtchnl_ptp_caps);
|
||||
|
||||
/**
|
||||
* struct virtchnl_phc_time - Contains the 64bits of PHC clock time in ns.
|
||||
* @time: PHC time in nanoseconds
|
||||
* @rsvd: Reserved for future extension
|
||||
*
|
||||
* Structure received with VIRTCHNL_OP_1588_PTP_GET_TIME. Contains the 64bits
|
||||
* of PHC clock time in nanoseconds.
|
||||
*
|
||||
* VIRTCHNL_OP_1588_PTP_GET_TIME may be sent to request the current time of
|
||||
* the PHC. This op is available in case direct access via the PHC registers
|
||||
* is not available.
|
||||
*/
|
||||
struct virtchnl_phc_time {
|
||||
u64 time;
|
||||
u8 rsvd[8];
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_phc_time);
|
||||
|
||||
struct virtchnl_shaper_bw {
|
||||
/* Unit is Kbps */
|
||||
u32 committed;
|
||||
@@ -1757,6 +1816,12 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
}
|
||||
}
|
||||
break;
|
||||
case VIRTCHNL_OP_1588_PTP_GET_CAPS:
|
||||
valid_len = sizeof(struct virtchnl_ptp_caps);
|
||||
break;
|
||||
case VIRTCHNL_OP_1588_PTP_GET_TIME:
|
||||
valid_len = sizeof(struct virtchnl_phc_time);
|
||||
break;
|
||||
/* These are always errors coming from the VF. */
|
||||
case VIRTCHNL_OP_EVENT:
|
||||
case VIRTCHNL_OP_UNKNOWN:
|
||||
|
||||
Reference in New Issue
Block a user