@@ -3940,16 +3940,16 @@ static int ethtool_drvinfo(unsigned char *ptr, size_t size, struct net_device *d
39403940 if (dev -> flags & IFF_UP &&
39413941 dev -> flags & IFF_RUNNING &&
39423942 !_KSETTINGS (__ethtool_get_settings (dev , & ecmd ), __ethtool_get_link_ksettings (dev , & ekmd ))) {
3943- char * s , * p ;
3944-
3945- /* append basic parameters: speed and port */
3946- switch ( _KSETTINGS ( ethtool_cmd_speed ( & ecmd ), ekmd . base . speed )) {
3947- case SPEED_10000 : s = "10Gb" ; break ;
3948- case SPEED_2500 : s = "2.5Gb" ; break ;
3949- case SPEED_1000 : s = "1Gb" ; break ;
3950- case SPEED_100 : s = "100Mb" ; break ;
3951- case SPEED_10 : s = "10Mb" ; break ;
3952- default : s = "" ;
3943+ char * units , * p ;
3944+ __u32 speed = _KSETTINGS ( ethtool_cmd_speed ( & ecmd ), ekmd . base . speed );
3945+
3946+ if ( speed == SPEED_UNKNOWN )
3947+ units = "" ;
3948+ else if ( speed <= 1000 )
3949+ units = "MbE" ;
3950+ else {
3951+ speed /= 1000 ;
3952+ units = "GbE " ;
39533953 }
39543954 switch (_KSETTINGS (ecmd .port , ekmd .base .port )) {
39553955 case PORT_TP : p = "tp" ; break ;
@@ -3962,7 +3962,7 @@ static int ethtool_drvinfo(unsigned char *ptr, size_t size, struct net_device *d
39623962#endif
39633963 default : p = "" ;
39643964 }
3965- n = scnprintf (ptr , len , ",%s,%s" , s , p );
3965+ n = scnprintf (ptr , len , ",%d% s,%s" , speed , units , p );
39663966 len -= n ;
39673967 }
39683968ret :
0 commit comments