@@ -31,6 +31,15 @@ static const char * const dcb_ver_array[] = {
31
31
"Auto Negotiated"
32
32
};
33
33
34
+ static inline bool cxgb4_dcb_state_synced (enum cxgb4_dcb_state state )
35
+ {
36
+ if (state == CXGB4_DCB_STATE_FW_ALLSYNCED ||
37
+ state == CXGB4_DCB_STATE_HOST )
38
+ return true;
39
+ else
40
+ return false;
41
+ }
42
+
34
43
/* Initialize a port's Data Center Bridging state. Typically used after a
35
44
* Link Down event.
36
45
*/
@@ -603,7 +612,7 @@ static void cxgb4_getpfccfg(struct net_device *dev, int priority, u8 *pfccfg)
603
612
struct port_info * pi = netdev2pinfo (dev );
604
613
struct port_dcb_info * dcb = & pi -> dcb ;
605
614
606
- if (dcb -> state != CXGB4_DCB_STATE_FW_ALLSYNCED ||
615
+ if (! cxgb4_dcb_state_synced ( dcb -> state ) ||
607
616
priority >= CXGB4_MAX_PRIORITY )
608
617
* pfccfg = 0 ;
609
618
else
@@ -620,7 +629,7 @@ static void cxgb4_setpfccfg(struct net_device *dev, int priority, u8 pfccfg)
620
629
struct adapter * adap = pi -> adapter ;
621
630
int err ;
622
631
623
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED ||
632
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) ||
624
633
priority >= CXGB4_MAX_PRIORITY )
625
634
return ;
626
635
@@ -732,7 +741,7 @@ static u8 cxgb4_getpfcstate(struct net_device *dev)
732
741
{
733
742
struct port_info * pi = netdev2pinfo (dev );
734
743
735
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED )
744
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) )
736
745
return false;
737
746
738
747
return pi -> dcb .pfcen != 0 ;
@@ -756,7 +765,7 @@ static int __cxgb4_getapp(struct net_device *dev, u8 app_idtype, u16 app_id,
756
765
struct adapter * adap = pi -> adapter ;
757
766
int i ;
758
767
759
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED )
768
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) )
760
769
return 0 ;
761
770
762
771
for (i = 0 ; i < CXGB4_MAX_DCBX_APP_SUPPORTED ; i ++ ) {
@@ -794,7 +803,9 @@ static int __cxgb4_getapp(struct net_device *dev, u8 app_idtype, u16 app_id,
794
803
*/
795
804
static int cxgb4_getapp (struct net_device * dev , u8 app_idtype , u16 app_id )
796
805
{
797
- return __cxgb4_getapp (dev , app_idtype , app_id , 0 );
806
+ /* Convert app_idtype to firmware format before querying */
807
+ return __cxgb4_getapp (dev , app_idtype == DCB_APP_IDTYPE_ETHTYPE ?
808
+ app_idtype : 3 , app_id , 0 );
798
809
}
799
810
800
811
/* Write a new Application User Priority Map for the specified Application ID
@@ -808,7 +819,7 @@ static int __cxgb4_setapp(struct net_device *dev, u8 app_idtype, u16 app_id,
808
819
int i , err ;
809
820
810
821
811
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED )
822
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) )
812
823
return - EINVAL ;
813
824
814
825
/* DCB info gets thrown away on link up */
@@ -896,10 +907,11 @@ cxgb4_ieee_negotiation_complete(struct net_device *dev,
896
907
struct port_info * pi = netdev2pinfo (dev );
897
908
struct port_dcb_info * dcb = & pi -> dcb ;
898
909
899
- if (dcb_subtype && !(dcb -> msgs & dcb_subtype ))
900
- return 0 ;
910
+ if (dcb -> state == CXGB4_DCB_STATE_FW_ALLSYNCED )
911
+ if (dcb_subtype && !(dcb -> msgs & dcb_subtype ))
912
+ return 0 ;
901
913
902
- return (dcb -> state == CXGB4_DCB_STATE_FW_ALLSYNCED &&
914
+ return (cxgb4_dcb_state_synced ( dcb -> state ) &&
903
915
(dcb -> supported & DCB_CAP_DCBX_VER_IEEE ));
904
916
}
905
917
@@ -1057,7 +1069,7 @@ static u8 cxgb4_setdcbx(struct net_device *dev, u8 dcb_request)
1057
1069
1058
1070
/* Can't enable DCB if we haven't successfully negotiated it.
1059
1071
*/
1060
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED )
1072
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) )
1061
1073
return 1 ;
1062
1074
1063
1075
/* There's currently no mechanism to allow for the firmware DCBX
@@ -1080,7 +1092,7 @@ static int cxgb4_getpeer_app(struct net_device *dev,
1080
1092
struct adapter * adap = pi -> adapter ;
1081
1093
int i , err = 0 ;
1082
1094
1083
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED )
1095
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) )
1084
1096
return 1 ;
1085
1097
1086
1098
info -> willing = 0 ;
@@ -1114,7 +1126,7 @@ static int cxgb4_getpeerapp_tbl(struct net_device *dev, struct dcb_app *table)
1114
1126
struct adapter * adap = pi -> adapter ;
1115
1127
int i , err = 0 ;
1116
1128
1117
- if (pi -> dcb .state != CXGB4_DCB_STATE_FW_ALLSYNCED )
1129
+ if (! cxgb4_dcb_state_synced ( pi -> dcb .state ) )
1118
1130
return 1 ;
1119
1131
1120
1132
for (i = 0 ; i < CXGB4_MAX_DCBX_APP_SUPPORTED ; i ++ ) {
@@ -1133,7 +1145,7 @@ static int cxgb4_getpeerapp_tbl(struct net_device *dev, struct dcb_app *table)
1133
1145
if (!pcmd .u .dcb .app_priority .protocolid )
1134
1146
break ;
1135
1147
1136
- table [i ].selector = pcmd .u .dcb .app_priority .sel_field ;
1148
+ table [i ].selector = ( pcmd .u .dcb .app_priority .sel_field + 1 ) ;
1137
1149
table [i ].protocol =
1138
1150
be16_to_cpu (pcmd .u .dcb .app_priority .protocolid );
1139
1151
table [i ].priority =
@@ -1181,6 +1193,8 @@ static int cxgb4_cee_peer_getpg(struct net_device *dev, struct cee_pg *pg)
1181
1193
for (i = 0 ; i < CXGB4_MAX_PRIORITY ; i ++ )
1182
1194
pg -> pg_bw [i ] = pcmd .u .dcb .pgrate .pgrate [i ];
1183
1195
1196
+ pg -> tcs_supported = pcmd .u .dcb .pgrate .num_tcs_supported ;
1197
+
1184
1198
return 0 ;
1185
1199
}
1186
1200
@@ -1198,6 +1212,8 @@ static int cxgb4_cee_peer_getpfc(struct net_device *dev, struct cee_pfc *pfc)
1198
1212
*/
1199
1213
pfc -> pfc_en = bitswap_1 (pi -> dcb .pfcen );
1200
1214
1215
+ pfc -> tcs_supported = pi -> dcb .pfc_num_tcs_supported ;
1216
+
1201
1217
return 0 ;
1202
1218
}
1203
1219
0 commit comments