From: Michal Wilczynski <michal.wilczyn...@intel.com>

Add new functions to configure the hardware with new parameters.

Signed-off-by: Michal Wilczynski <michal.wilczyn...@intel.com>
Signed-off-by: Ian Stokes <ian.sto...@intel.com>
---
 drivers/net/ice/base/ice_sched.c | 52 ++++++++++++++++++++++++++++++++
 drivers/net/ice/base/ice_sched.h |  9 ++++++
 2 files changed, 61 insertions(+)

diff --git a/drivers/net/ice/base/ice_sched.c b/drivers/net/ice/base/ice_sched.c
index 353316cd0e..373c32a518 100644
--- a/drivers/net/ice/base/ice_sched.c
+++ b/drivers/net/ice/base/ice_sched.c
@@ -4418,6 +4418,58 @@ ice_sched_set_node_bw(struct ice_port_info *pi, struct 
ice_sched_node *node,
                                       ICE_AQC_RL_PROFILE_TYPE_M, old_id);
 }
 
+/**
+ * ice_sched_set_node_priority - set node's priority
+ * @pi: port information structure
+ * @node: tree node
+ * @priority: number 0-7 representing priority among siblings
+ *
+ * This function sets priority of a node among it's siblings.
+ */
+int
+ice_sched_set_node_priority(struct ice_port_info *pi, struct ice_sched_node 
*node,
+                           u16 priority)
+{
+       struct ice_aqc_txsched_elem_data buf;
+       struct ice_aqc_txsched_elem *data;
+
+       buf = node->info;
+       data = &buf.data;
+
+       data->valid_sections |= ICE_AQC_ELEM_VALID_GENERIC;
+       data->generic |= ICE_AQC_ELEM_GENERIC_PRIO_M &
+                        (priority << ICE_AQC_ELEM_GENERIC_PRIO_S);
+
+       return ice_sched_update_elem(pi->hw, node, &buf);
+}
+
+/**
+ * ice_sched_set_node_weight - set node's weight
+ * @pi: port information structure
+ * @node: tree node
+ * @weight: number 1-200 representing weight for WFQ
+ *
+ * This function sets weight of the node for WFQ algorithm.
+ */
+int
+ice_sched_set_node_weight(struct ice_port_info *pi, struct ice_sched_node 
*node, u16 weight)
+{
+       struct ice_aqc_txsched_elem_data buf;
+       struct ice_aqc_txsched_elem *data;
+
+       buf = node->info;
+       data = &buf.data;
+
+       data->valid_sections = ICE_AQC_ELEM_VALID_CIR | ICE_AQC_ELEM_VALID_EIR |
+                              ICE_AQC_ELEM_VALID_GENERIC;
+       data->cir_bw.bw_alloc = CPU_TO_LE16(weight);
+       data->eir_bw.bw_alloc = CPU_TO_LE16(weight);
+       data->generic |= ICE_AQC_ELEM_GENERIC_SP_M &
+                        (0x0 << ICE_AQC_ELEM_GENERIC_SP_S);
+
+       return ice_sched_update_elem(pi->hw, node, &buf);
+}
+
 /**
  * ice_sched_set_node_bw_lmt - set node's BW limit
  * @pi: port information structure
diff --git a/drivers/net/ice/base/ice_sched.h b/drivers/net/ice/base/ice_sched.h
index 0037cbf76f..9f78516dfb 100644
--- a/drivers/net/ice/base/ice_sched.h
+++ b/drivers/net/ice/base/ice_sched.h
@@ -7,6 +7,8 @@
 
 #include "ice_common.h"
 
+#define SCHED_NODE_NAME_MAX_LEN 32
+
 #define ICE_SCHED_5_LAYERS     5
 #define ICE_SCHED_9_LAYERS     9
 
@@ -120,6 +122,13 @@ int
 ice_sched_move_nodes(struct ice_port_info *pi, struct ice_sched_node *parent,
                     u16 num_items, u32 *list);
 
+int
+ice_sched_set_node_priority(struct ice_port_info *pi, struct ice_sched_node 
*node,
+                           u16 priority);
+int
+ice_sched_set_node_weight(struct ice_port_info *pi, struct ice_sched_node 
*node,
+                         u16 weight);
+
 int ice_sched_init_port(struct ice_port_info *pi);
 int ice_sched_query_res_alloc(struct ice_hw *hw);
 void ice_sched_get_psm_clk_freq(struct ice_hw *hw);
-- 
2.43.0

Reply via email to