Skip to content

Commit ff7e4d0

Browse files
Huazhong Tandavem330
authored andcommitted
net: hns3: add a structure for IR shaper's parameter in hclge_shaper_para_calc()
As function hclge_shaper_para_calc() has too many arguments to add more, so encapsulate its three arguments ir_b, ir_u, ir_s into a structure. Signed-off-by: Huazhong Tan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 1329702 commit ff7e4d0

File tree

2 files changed

+49
-44
lines changed

2 files changed

+49
-44
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c

Lines changed: 43 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ enum hclge_shaper_level {
2626
/* hclge_shaper_para_calc: calculate ir parameter for the shaper
2727
* @ir: Rate to be config, its unit is Mbps
2828
* @shaper_level: the shaper level. eg: port, pg, priority, queueset
29-
* @ir_b: IR_B parameter of IR shaper
30-
* @ir_u: IR_U parameter of IR shaper
31-
* @ir_s: IR_S parameter of IR shaper
29+
* @ir_para: parameters of IR shaper
3230
* @max_tm_rate: max tm rate is available to config
3331
*
3432
* the formula:
@@ -40,7 +38,7 @@ enum hclge_shaper_level {
4038
* @return: 0: calculate sucessful, negative: fail
4139
*/
4240
static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
43-
u8 *ir_b, u8 *ir_u, u8 *ir_s,
41+
struct hclge_shaper_ir_para *ir_para,
4442
u32 max_tm_rate)
4543
{
4644
#define DIVISOR_CLK (1000 * 8)
@@ -74,9 +72,9 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
7472
ir_calc = (DIVISOR_IR_B_126 + (tick >> 1) - 1) / tick;
7573

7674
if (ir_calc == ir) {
77-
*ir_b = 126;
78-
*ir_u = 0;
79-
*ir_s = 0;
75+
ir_para->ir_b = 126;
76+
ir_para->ir_u = 0;
77+
ir_para->ir_s = 0;
8078

8179
return 0;
8280
} else if (ir_calc > ir) {
@@ -86,8 +84,8 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
8684
ir_calc = DIVISOR_IR_B_126 / (tick * (1 << ir_s_calc));
8785
}
8886

89-
*ir_b = (ir * tick * (1 << ir_s_calc) + (DIVISOR_CLK >> 1)) /
90-
DIVISOR_CLK;
87+
ir_para->ir_b = (ir * tick * (1 << ir_s_calc) +
88+
(DIVISOR_CLK >> 1)) / DIVISOR_CLK;
9189
} else {
9290
/* Increasing the numerator to select ir_u value */
9391
u32 numerator;
@@ -99,15 +97,16 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
9997
}
10098

10199
if (ir_calc == ir) {
102-
*ir_b = 126;
100+
ir_para->ir_b = 126;
103101
} else {
104102
u32 denominator = DIVISOR_CLK * (1 << --ir_u_calc);
105-
*ir_b = (ir * tick + (denominator >> 1)) / denominator;
103+
ir_para->ir_b = (ir * tick + (denominator >> 1)) /
104+
denominator;
106105
}
107106
}
108107

109-
*ir_u = ir_u_calc;
110-
*ir_s = ir_s_calc;
108+
ir_para->ir_u = ir_u_calc;
109+
ir_para->ir_s = ir_s_calc;
111110

112111
return 0;
113112
}
@@ -400,22 +399,22 @@ static int hclge_tm_pg_shapping_cfg(struct hclge_dev *hdev,
400399
static int hclge_tm_port_shaper_cfg(struct hclge_dev *hdev)
401400
{
402401
struct hclge_port_shapping_cmd *shap_cfg_cmd;
402+
struct hclge_shaper_ir_para ir_para;
403403
struct hclge_desc desc;
404-
u8 ir_u, ir_b, ir_s;
405404
u32 shapping_para;
406405
int ret;
407406

408-
ret = hclge_shaper_para_calc(hdev->hw.mac.speed,
409-
HCLGE_SHAPER_LVL_PORT,
410-
&ir_b, &ir_u, &ir_s,
407+
ret = hclge_shaper_para_calc(hdev->hw.mac.speed, HCLGE_SHAPER_LVL_PORT,
408+
&ir_para,
411409
hdev->ae_dev->dev_specs.max_tm_rate);
412410
if (ret)
413411
return ret;
414412

415413
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TM_PORT_SHAPPING, false);
416414
shap_cfg_cmd = (struct hclge_port_shapping_cmd *)desc.data;
417415

418-
shapping_para = hclge_tm_get_shapping_para(ir_b, ir_u, ir_s,
416+
shapping_para = hclge_tm_get_shapping_para(ir_para.ir_b, ir_para.ir_u,
417+
ir_para.ir_s,
419418
HCLGE_SHAPER_BS_U_DEF,
420419
HCLGE_SHAPER_BS_S_DEF);
421420

@@ -516,22 +515,23 @@ int hclge_tm_qs_shaper_cfg(struct hclge_vport *vport, int max_tx_rate)
516515
{
517516
struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
518517
struct hclge_qs_shapping_cmd *shap_cfg_cmd;
518+
struct hclge_shaper_ir_para ir_para;
519519
struct hclge_dev *hdev = vport->back;
520520
struct hclge_desc desc;
521-
u8 ir_b, ir_u, ir_s;
522521
u32 shaper_para;
523522
int ret, i;
524523

525524
if (!max_tx_rate)
526525
max_tx_rate = hdev->ae_dev->dev_specs.max_tm_rate;
527526

528527
ret = hclge_shaper_para_calc(max_tx_rate, HCLGE_SHAPER_LVL_QSET,
529-
&ir_b, &ir_u, &ir_s,
528+
&ir_para,
530529
hdev->ae_dev->dev_specs.max_tm_rate);
531530
if (ret)
532531
return ret;
533532

534-
shaper_para = hclge_tm_get_shapping_para(ir_b, ir_u, ir_s,
533+
shaper_para = hclge_tm_get_shapping_para(ir_para.ir_b, ir_para.ir_u,
534+
ir_para.ir_s,
535535
HCLGE_SHAPER_BS_U_DEF,
536536
HCLGE_SHAPER_BS_S_DEF);
537537

@@ -733,7 +733,7 @@ static int hclge_tm_pg_to_pri_map(struct hclge_dev *hdev)
733733
static int hclge_tm_pg_shaper_cfg(struct hclge_dev *hdev)
734734
{
735735
u32 max_tm_rate = hdev->ae_dev->dev_specs.max_tm_rate;
736-
u8 ir_u, ir_b, ir_s;
736+
struct hclge_shaper_ir_para ir_para;
737737
u32 shaper_para;
738738
int ret;
739739
u32 i;
@@ -745,11 +745,9 @@ static int hclge_tm_pg_shaper_cfg(struct hclge_dev *hdev)
745745
/* Pg to pri */
746746
for (i = 0; i < hdev->tm_info.num_pg; i++) {
747747
/* Calc shaper para */
748-
ret = hclge_shaper_para_calc(
749-
hdev->tm_info.pg_info[i].bw_limit,
750-
HCLGE_SHAPER_LVL_PG,
751-
&ir_b, &ir_u, &ir_s,
752-
max_tm_rate);
748+
ret = hclge_shaper_para_calc(hdev->tm_info.pg_info[i].bw_limit,
749+
HCLGE_SHAPER_LVL_PG,
750+
&ir_para, max_tm_rate);
753751
if (ret)
754752
return ret;
755753

@@ -762,7 +760,9 @@ static int hclge_tm_pg_shaper_cfg(struct hclge_dev *hdev)
762760
if (ret)
763761
return ret;
764762

765-
shaper_para = hclge_tm_get_shapping_para(ir_b, ir_u, ir_s,
763+
shaper_para = hclge_tm_get_shapping_para(ir_para.ir_b,
764+
ir_para.ir_u,
765+
ir_para.ir_s,
766766
HCLGE_SHAPER_BS_U_DEF,
767767
HCLGE_SHAPER_BS_S_DEF);
768768
ret = hclge_tm_pg_shapping_cfg(hdev,
@@ -867,17 +867,15 @@ static int hclge_tm_pri_q_qs_cfg(struct hclge_dev *hdev)
867867
static int hclge_tm_pri_tc_base_shaper_cfg(struct hclge_dev *hdev)
868868
{
869869
u32 max_tm_rate = hdev->ae_dev->dev_specs.max_tm_rate;
870-
u8 ir_u, ir_b, ir_s;
870+
struct hclge_shaper_ir_para ir_para;
871871
u32 shaper_para;
872872
int ret;
873873
u32 i;
874874

875875
for (i = 0; i < hdev->tm_info.num_tc; i++) {
876-
ret = hclge_shaper_para_calc(
877-
hdev->tm_info.tc_info[i].bw_limit,
878-
HCLGE_SHAPER_LVL_PRI,
879-
&ir_b, &ir_u, &ir_s,
880-
max_tm_rate);
876+
ret = hclge_shaper_para_calc(hdev->tm_info.tc_info[i].bw_limit,
877+
HCLGE_SHAPER_LVL_PRI,
878+
&ir_para, max_tm_rate);
881879
if (ret)
882880
return ret;
883881

@@ -889,7 +887,9 @@ static int hclge_tm_pri_tc_base_shaper_cfg(struct hclge_dev *hdev)
889887
if (ret)
890888
return ret;
891889

892-
shaper_para = hclge_tm_get_shapping_para(ir_b, ir_u, ir_s,
890+
shaper_para = hclge_tm_get_shapping_para(ir_para.ir_b,
891+
ir_para.ir_u,
892+
ir_para.ir_s,
893893
HCLGE_SHAPER_BS_U_DEF,
894894
HCLGE_SHAPER_BS_S_DEF);
895895
ret = hclge_tm_pri_shapping_cfg(hdev, HCLGE_TM_SHAP_P_BUCKET, i,
@@ -904,12 +904,12 @@ static int hclge_tm_pri_tc_base_shaper_cfg(struct hclge_dev *hdev)
904904
static int hclge_tm_pri_vnet_base_shaper_pri_cfg(struct hclge_vport *vport)
905905
{
906906
struct hclge_dev *hdev = vport->back;
907-
u8 ir_u, ir_b, ir_s;
907+
struct hclge_shaper_ir_para ir_para;
908908
u32 shaper_para;
909909
int ret;
910910

911911
ret = hclge_shaper_para_calc(vport->bw_limit, HCLGE_SHAPER_LVL_VF,
912-
&ir_b, &ir_u, &ir_s,
912+
&ir_para,
913913
hdev->ae_dev->dev_specs.max_tm_rate);
914914
if (ret)
915915
return ret;
@@ -922,7 +922,8 @@ static int hclge_tm_pri_vnet_base_shaper_pri_cfg(struct hclge_vport *vport)
922922
if (ret)
923923
return ret;
924924

925-
shaper_para = hclge_tm_get_shapping_para(ir_b, ir_u, ir_s,
925+
shaper_para = hclge_tm_get_shapping_para(ir_para.ir_b, ir_para.ir_u,
926+
ir_para.ir_s,
926927
HCLGE_SHAPER_BS_U_DEF,
927928
HCLGE_SHAPER_BS_S_DEF);
928929
ret = hclge_tm_pri_shapping_cfg(hdev, HCLGE_TM_SHAP_P_BUCKET,
@@ -938,16 +939,14 @@ static int hclge_tm_pri_vnet_base_shaper_qs_cfg(struct hclge_vport *vport)
938939
struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
939940
struct hclge_dev *hdev = vport->back;
940941
u32 max_tm_rate = hdev->ae_dev->dev_specs.max_tm_rate;
941-
u8 ir_u, ir_b, ir_s;
942+
struct hclge_shaper_ir_para ir_para;
942943
u32 i;
943944
int ret;
944945

945946
for (i = 0; i < kinfo->num_tc; i++) {
946-
ret = hclge_shaper_para_calc(
947-
hdev->tm_info.tc_info[i].bw_limit,
948-
HCLGE_SHAPER_LVL_QSET,
949-
&ir_b, &ir_u, &ir_s,
950-
max_tm_rate);
947+
ret = hclge_shaper_para_calc(hdev->tm_info.tc_info[i].bw_limit,
948+
HCLGE_SHAPER_LVL_QSET,
949+
&ir_para, max_tm_rate);
951950
if (ret)
952951
return ret;
953952
}

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ struct hclge_port_shapping_cmd {
141141
__le32 port_shapping_para;
142142
};
143143

144+
struct hclge_shaper_ir_para {
145+
u8 ir_b; /* IR_B parameter of IR shaper */
146+
u8 ir_u; /* IR_U parameter of IR shaper */
147+
u8 ir_s; /* IR_S parameter of IR shaper */
148+
};
149+
144150
#define hclge_tm_set_field(dest, string, val) \
145151
hnae3_set_field((dest), \
146152
(HCLGE_TM_SHAP_##string##_MSK), \

0 commit comments

Comments
 (0)