@@ -26,9 +26,7 @@ enum hclge_shaper_level {
26
26
/* hclge_shaper_para_calc: calculate ir parameter for the shaper
27
27
* @ir: Rate to be config, its unit is Mbps
28
28
* @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
32
30
* @max_tm_rate: max tm rate is available to config
33
31
*
34
32
* the formula:
@@ -40,7 +38,7 @@ enum hclge_shaper_level {
40
38
* @return: 0: calculate sucessful, negative: fail
41
39
*/
42
40
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 ,
44
42
u32 max_tm_rate )
45
43
{
46
44
#define DIVISOR_CLK (1000 * 8)
@@ -74,9 +72,9 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
74
72
ir_calc = (DIVISOR_IR_B_126 + (tick >> 1 ) - 1 ) / tick ;
75
73
76
74
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 ;
80
78
81
79
return 0 ;
82
80
} else if (ir_calc > ir ) {
@@ -86,8 +84,8 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
86
84
ir_calc = DIVISOR_IR_B_126 / (tick * (1 << ir_s_calc ));
87
85
}
88
86
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 ;
91
89
} else {
92
90
/* Increasing the numerator to select ir_u value */
93
91
u32 numerator ;
@@ -99,15 +97,16 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
99
97
}
100
98
101
99
if (ir_calc == ir ) {
102
- * ir_b = 126 ;
100
+ ir_para -> ir_b = 126 ;
103
101
} else {
104
102
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 ;
106
105
}
107
106
}
108
107
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 ;
111
110
112
111
return 0 ;
113
112
}
@@ -400,22 +399,22 @@ static int hclge_tm_pg_shapping_cfg(struct hclge_dev *hdev,
400
399
static int hclge_tm_port_shaper_cfg (struct hclge_dev * hdev )
401
400
{
402
401
struct hclge_port_shapping_cmd * shap_cfg_cmd ;
402
+ struct hclge_shaper_ir_para ir_para ;
403
403
struct hclge_desc desc ;
404
- u8 ir_u , ir_b , ir_s ;
405
404
u32 shapping_para ;
406
405
int ret ;
407
406
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 ,
411
409
hdev -> ae_dev -> dev_specs .max_tm_rate );
412
410
if (ret )
413
411
return ret ;
414
412
415
413
hclge_cmd_setup_basic_desc (& desc , HCLGE_OPC_TM_PORT_SHAPPING , false);
416
414
shap_cfg_cmd = (struct hclge_port_shapping_cmd * )desc .data ;
417
415
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 ,
419
418
HCLGE_SHAPER_BS_U_DEF ,
420
419
HCLGE_SHAPER_BS_S_DEF );
421
420
@@ -516,22 +515,23 @@ int hclge_tm_qs_shaper_cfg(struct hclge_vport *vport, int max_tx_rate)
516
515
{
517
516
struct hnae3_knic_private_info * kinfo = & vport -> nic .kinfo ;
518
517
struct hclge_qs_shapping_cmd * shap_cfg_cmd ;
518
+ struct hclge_shaper_ir_para ir_para ;
519
519
struct hclge_dev * hdev = vport -> back ;
520
520
struct hclge_desc desc ;
521
- u8 ir_b , ir_u , ir_s ;
522
521
u32 shaper_para ;
523
522
int ret , i ;
524
523
525
524
if (!max_tx_rate )
526
525
max_tx_rate = hdev -> ae_dev -> dev_specs .max_tm_rate ;
527
526
528
527
ret = hclge_shaper_para_calc (max_tx_rate , HCLGE_SHAPER_LVL_QSET ,
529
- & ir_b , & ir_u , & ir_s ,
528
+ & ir_para ,
530
529
hdev -> ae_dev -> dev_specs .max_tm_rate );
531
530
if (ret )
532
531
return ret ;
533
532
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 ,
535
535
HCLGE_SHAPER_BS_U_DEF ,
536
536
HCLGE_SHAPER_BS_S_DEF );
537
537
@@ -733,7 +733,7 @@ static int hclge_tm_pg_to_pri_map(struct hclge_dev *hdev)
733
733
static int hclge_tm_pg_shaper_cfg (struct hclge_dev * hdev )
734
734
{
735
735
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 ;
737
737
u32 shaper_para ;
738
738
int ret ;
739
739
u32 i ;
@@ -745,11 +745,9 @@ static int hclge_tm_pg_shaper_cfg(struct hclge_dev *hdev)
745
745
/* Pg to pri */
746
746
for (i = 0 ; i < hdev -> tm_info .num_pg ; i ++ ) {
747
747
/* 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 );
753
751
if (ret )
754
752
return ret ;
755
753
@@ -762,7 +760,9 @@ static int hclge_tm_pg_shaper_cfg(struct hclge_dev *hdev)
762
760
if (ret )
763
761
return ret ;
764
762
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 ,
766
766
HCLGE_SHAPER_BS_U_DEF ,
767
767
HCLGE_SHAPER_BS_S_DEF );
768
768
ret = hclge_tm_pg_shapping_cfg (hdev ,
@@ -867,17 +867,15 @@ static int hclge_tm_pri_q_qs_cfg(struct hclge_dev *hdev)
867
867
static int hclge_tm_pri_tc_base_shaper_cfg (struct hclge_dev * hdev )
868
868
{
869
869
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 ;
871
871
u32 shaper_para ;
872
872
int ret ;
873
873
u32 i ;
874
874
875
875
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 );
881
879
if (ret )
882
880
return ret ;
883
881
@@ -889,7 +887,9 @@ static int hclge_tm_pri_tc_base_shaper_cfg(struct hclge_dev *hdev)
889
887
if (ret )
890
888
return ret ;
891
889
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 ,
893
893
HCLGE_SHAPER_BS_U_DEF ,
894
894
HCLGE_SHAPER_BS_S_DEF );
895
895
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)
904
904
static int hclge_tm_pri_vnet_base_shaper_pri_cfg (struct hclge_vport * vport )
905
905
{
906
906
struct hclge_dev * hdev = vport -> back ;
907
- u8 ir_u , ir_b , ir_s ;
907
+ struct hclge_shaper_ir_para ir_para ;
908
908
u32 shaper_para ;
909
909
int ret ;
910
910
911
911
ret = hclge_shaper_para_calc (vport -> bw_limit , HCLGE_SHAPER_LVL_VF ,
912
- & ir_b , & ir_u , & ir_s ,
912
+ & ir_para ,
913
913
hdev -> ae_dev -> dev_specs .max_tm_rate );
914
914
if (ret )
915
915
return ret ;
@@ -922,7 +922,8 @@ static int hclge_tm_pri_vnet_base_shaper_pri_cfg(struct hclge_vport *vport)
922
922
if (ret )
923
923
return ret ;
924
924
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 ,
926
927
HCLGE_SHAPER_BS_U_DEF ,
927
928
HCLGE_SHAPER_BS_S_DEF );
928
929
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)
938
939
struct hnae3_knic_private_info * kinfo = & vport -> nic .kinfo ;
939
940
struct hclge_dev * hdev = vport -> back ;
940
941
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 ;
942
943
u32 i ;
943
944
int ret ;
944
945
945
946
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 );
951
950
if (ret )
952
951
return ret ;
953
952
}
0 commit comments