Added AQ command to config nod attribute.

Signed-off-by: Ben Shelton <benjamin.h.shel...@intel.com>
Signed-off-by: Qi Zhang <qi.z.zh...@intel.com>
---
 drivers/net/ice/base/ice_adminq_cmd.h | 17 +++++++++++++++++
 drivers/net/ice/base/ice_sched.c      | 27 +++++++++++++++++++++++++++
 drivers/net/ice/base/ice_sched.h      |  4 ++++
 3 files changed, 48 insertions(+)

diff --git a/drivers/net/ice/base/ice_adminq_cmd.h 
b/drivers/net/ice/base/ice_adminq_cmd.h
index 8f7e13096c..9f84ffca67 100644
--- a/drivers/net/ice/base/ice_adminq_cmd.h
+++ b/drivers/net/ice/base/ice_adminq_cmd.h
@@ -1215,6 +1215,22 @@ struct ice_aqc_rl_profile_elem {
        __le16 rl_encode;
 };
 
+/* Config Node Attributes (indirect 0x0419)
+ * Query Node Attributes (indirect 0x041A)
+ */
+struct ice_aqc_node_attr {
+       __le16 num_entries; /* Number of attributes structures in the buffer */
+       u8 reserved[6];
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+struct ice_aqc_node_attr_elem {
+       __le32 node_teid;
+       __le16 max_children;
+       __le16 children_level;
+};
+
 /* Configure L2 Node CGD (indirect 0x0414)
  * This indirect command allows configuring a congestion domain for given L2
  * node TEIDs in the scheduler topology.
@@ -2976,6 +2992,7 @@ struct ice_aq_desc {
                struct ice_aqc_cfg_l2_node_cgd cfg_l2_node_cgd;
                struct ice_aqc_query_port_ets port_ets;
                struct ice_aqc_rl_profile rl_profile;
+               struct ice_aqc_node_attr node_attr;
                struct ice_aqc_nvm nvm;
                struct ice_aqc_nvm_cfg nvm_cfg;
                struct ice_aqc_nvm_checksum nvm_checksum;
diff --git a/drivers/net/ice/base/ice_sched.c b/drivers/net/ice/base/ice_sched.c
index 71b5677f43..6f938d71a1 100644
--- a/drivers/net/ice/base/ice_sched.c
+++ b/drivers/net/ice/base/ice_sched.c
@@ -839,6 +839,33 @@ void ice_sched_cleanup_all(struct ice_hw *hw)
        hw->max_cgds = 0;
 }
 
+/**
+ * ice_aq_cfg_node_attr - configure nodes' per-cone flattening attributes
+ * @hw: pointer to the HW struct
+ * @num_nodes: the number of nodes whose attributes to configure
+ * @buf: pointer to buffer
+ * @buf_size: buffer size in bytes
+ * @cd: pointer to command details structure or NULL
+ *
+ * Configure Node Attributes (0x0417)
+ */
+enum ice_status
+ice_aq_cfg_node_attr(struct ice_hw *hw, u16 num_nodes,
+                    struct ice_aqc_node_attr_elem *buf, u16 buf_size,
+                    struct ice_sq_cd *cd)
+{
+       struct ice_aqc_node_attr *cmd;
+       struct ice_aq_desc desc;
+
+       cmd = &desc.params.node_attr;
+       ice_fill_dflt_direct_cmd_desc(&desc,
+                                     ice_aqc_opc_cfg_node_attr);
+       desc.flags |= CPU_TO_LE16(ICE_AQ_FLAG_RD);
+
+       cmd->num_entries = CPU_TO_LE16(num_nodes);
+       return ice_aq_send_cmd(hw, &desc, buf, buf_size, cd);
+}
+
 /**
  * ice_aq_cfg_l2_node_cgd - configures L2 node to CGD mapping
  * @hw: pointer to the HW struct
diff --git a/drivers/net/ice/base/ice_sched.h b/drivers/net/ice/base/ice_sched.h
index c9f3f79eff..6b12a0688a 100644
--- a/drivers/net/ice/base/ice_sched.h
+++ b/drivers/net/ice/base/ice_sched.h
@@ -78,6 +78,10 @@ ice_aq_query_rl_profile(struct ice_hw *hw, u16 num_profiles,
                        struct ice_aqc_rl_profile_elem *buf, u16 buf_size,
                        struct ice_sq_cd *cd);
 enum ice_status
+ice_aq_cfg_node_attr(struct ice_hw *hw, u16 num_nodes,
+                    struct ice_aqc_node_attr_elem *buf, u16 buf_size,
+                    struct ice_sq_cd *cd);
+enum ice_status
 ice_aq_cfg_l2_node_cgd(struct ice_hw *hw, u16 num_nodes,
                       struct ice_aqc_cfg_l2_node_cgd_elem *buf, u16 buf_size,
                       struct ice_sq_cd *cd);
-- 
2.31.1

Reply via email to