Merge tag 'media/v4.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[cascardo/linux.git] / drivers / net / ethernet / qlogic / qed / qed_init_fw_funcs.c
index 1dd5324..e8a3b9d 100644 (file)
@@ -712,6 +712,21 @@ int qed_qm_pf_rt_init(struct qed_hwfn *p_hwfn,
        return 0;
 }
 
+int qed_init_pf_wfq(struct qed_hwfn *p_hwfn,
+                   struct qed_ptt *p_ptt,
+                   u8 pf_id, u16 pf_wfq)
+{
+       u32 inc_val = QM_WFQ_INC_VAL(pf_wfq);
+
+       if (!inc_val || inc_val > QM_WFQ_MAX_INC_VAL) {
+               DP_NOTICE(p_hwfn, "Invalid PF WFQ weight configuration");
+               return -1;
+       }
+
+       qed_wr(p_hwfn, p_ptt, QM_REG_WFQPFWEIGHT + pf_id * 4, inc_val);
+       return 0;
+}
+
 int qed_init_pf_rl(struct qed_hwfn *p_hwfn,
                   struct qed_ptt *p_ptt,
                   u8 pf_id,
@@ -732,6 +747,31 @@ int qed_init_pf_rl(struct qed_hwfn *p_hwfn,
        return 0;
 }
 
+int qed_init_vport_wfq(struct qed_hwfn *p_hwfn,
+                      struct qed_ptt *p_ptt,
+                      u16 first_tx_pq_id[NUM_OF_TCS],
+                      u16 vport_wfq)
+{
+       u32 inc_val = QM_WFQ_INC_VAL(vport_wfq);
+       u8 tc;
+
+       if (!inc_val || inc_val > QM_WFQ_MAX_INC_VAL) {
+               DP_NOTICE(p_hwfn, "Invalid VPORT WFQ weight configuration");
+               return -1;
+       }
+
+       for (tc = 0; tc < NUM_OF_TCS; tc++) {
+               u16 vport_pq_id = first_tx_pq_id[tc];
+
+               if (vport_pq_id != QM_INVALID_PQ_ID)
+                       qed_wr(p_hwfn, p_ptt,
+                              QM_REG_WFQVPWEIGHT + vport_pq_id * 4,
+                              inc_val);
+       }
+
+       return 0;
+}
+
 int qed_init_vport_rl(struct qed_hwfn *p_hwfn,
                      struct qed_ptt *p_ptt,
                      u8 vport_id,