From: Lukasz Plachno <lukasz.plac...@intel.com> Add VIRTCHNL operations for managing scheduling nodes for VSI subtree. E822/E830 adapters allows VNet based scheduling tree configuration. Management of scheduling nodes up to VSIs is done by devlink interface.
Signed-off-by: Lukasz Plachno <lukasz.plac...@intel.com> Signed-off-by: Soumyadeep Hore <soumyadeep.h...@intel.com> --- drivers/common/iavf/virtchnl.h | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h index a4f3d7724f..ae6770adaf 100644 --- a/drivers/common/iavf/virtchnl.h +++ b/drivers/common/iavf/virtchnl.h @@ -189,6 +189,11 @@ enum virtchnl_ops { VIRTCHNL_OP_SYNCE_GET_HW_INFO = 128, VIRTCHNL_OP_GNSS_READ_I2C = 129, VIRTCHNL_OP_GNSS_WRITE_I2C = 130, + VIRTCHNL_OP_HQOS_TREE_READ = 131, + VIRTCHNL_OP_HQOS_ELEMS_ADD = 132, + VIRTCHNL_OP_HQOS_ELEMS_DEL = 133, + VIRTCHNL_OP_HQOS_ELEMS_MOVE = 134, + VIRTCHNL_OP_HQOS_ELEMS_CONF = 135, VIRTCHNL_OP_MAX, }; @@ -345,6 +350,16 @@ static inline const char *virtchnl_op_str(enum virtchnl_ops v_opcode) return "VIRTCHNL_OP_FLOW_SUBSCRIBE"; case VIRTCHNL_OP_FLOW_UNSUBSCRIBE: return "VIRTCHNL_OP_FLOW_UNSUBSCRIBE"; + case VIRTCHNL_OP_HQOS_TREE_READ: + return "VIRTCHNL_OP_HQOS_TREE_READ"; + case VIRTCHNL_OP_HQOS_ELEMS_ADD: + return "VIRTCHNL_OP_HQOS_ELEMS_ADD"; + case VIRTCHNL_OP_HQOS_ELEMS_DEL: + return "VIRTCHNL_OP_HQOS_ELEMS_DEL"; + case VIRTCHNL_OP_HQOS_ELEMS_MOVE: + return "VIRTCHNL_OP_HQOS_ELEMS_MOVE"; + case VIRTCHNL_OP_HQOS_ELEMS_CONF: + return "VIRTCHNL_OP_HQOS_ELEMS_CONF"; case VIRTCHNL_OP_MAX: return "VIRTCHNL_OP_MAX"; default: @@ -2508,6 +2523,34 @@ struct virtchnl_gnss_read_i2c_resp { VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_gnss_read_i2c_resp); +/* + * VIRTCHNL_OP_HQOS_READ_TREE + * VIRTCHNL_OP_HQOS_ELEM_ADD + * VIRTCHNL_OP_HQOS_ELEM_DEL + * VIRTCHNL_OP_HQOS_ELEM_BW_SET + * List with tc and queues HW QoS values + */ +struct virtchnl_hqos_cfg { +#define VIRTCHNL_HQOS_ELEM_TYPE_NODE 0 +#define VIRTCHNL_HQOS_ELEM_TYPE_LEAF 1 + u8 node_type; + u8 pad[7]; + u32 teid; + u32 parent_teid; + u64 tx_max; + u64 tx_share; + u32 tx_priority; + u32 tx_weight; +}; +VIRTCHNL_CHECK_STRUCT_LEN(40, virtchnl_hqos_cfg); + +struct virtchnl_hqos_cfg_list { + u16 num_elem; + u8 pad[6]; + struct virtchnl_hqos_cfg cfg[1]; +}; +VIRTCHNL_CHECK_STRUCT_LEN(48, virtchnl_hqos_cfg_list); + /* Since VF messages are limited by u16 size, precalculate the maximum possible * values of nested elements in virtchnl structures that virtual channel can * possibly handle in a single message. @@ -2545,6 +2588,10 @@ enum virtchnl_vector_limits { VIRTCHNL_OP_ADD_DEL_VLAN_V2_MAX = ((u16)(~0) - sizeof(struct virtchnl_vlan_filter_list_v2)) / sizeof(struct virtchnl_vlan_filter), + + VIRTCHNL_OP_HQOS_ELEMS_MAX = + ((u16)(~0) - sizeof(struct virtchnl_hqos_cfg_list)) / + sizeof(struct virtchnl_hqos_cfg), }; /** @@ -2928,6 +2975,25 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode, virtchnl_inline_ipsec_val_msg_len(iim->ipsec_opcode); break; } + case VIRTCHNL_OP_HQOS_ELEMS_ADD: + case VIRTCHNL_OP_HQOS_ELEMS_DEL: + case VIRTCHNL_OP_HQOS_ELEMS_MOVE: + case VIRTCHNL_OP_HQOS_ELEMS_CONF: + valid_len = sizeof(struct virtchnl_hqos_cfg_list); + if (msglen >= valid_len) { + struct virtchnl_hqos_cfg_list *v_hcl = + (struct virtchnl_hqos_cfg_list *)msg; + if (v_hcl->num_elem == 0 || + v_hcl->num_elem > VIRTCHNL_OP_HQOS_ELEMS_MAX) { + err_msg_format = true; + break; + } + valid_len += (v_hcl->num_elem - 1) * + sizeof(struct virtchnl_hqos_cfg); + } + break; + case VIRTCHNL_OP_HQOS_TREE_READ: + break; /* These are always errors coming from the VF. */ case VIRTCHNL_OP_EVENT: case VIRTCHNL_OP_UNKNOWN: -- 2.34.1