@@ -689,8 +689,8 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
689
689
return value ;
690
690
}
691
691
692
- static void mv88e6xxx_stats_get_strings (struct mv88e6xxx_chip * chip ,
693
- uint8_t * data , int types )
692
+ static int mv88e6xxx_stats_get_strings (struct mv88e6xxx_chip * chip ,
693
+ uint8_t * data , int types )
694
694
{
695
695
struct mv88e6xxx_hw_stat * stat ;
696
696
int i , j ;
@@ -703,31 +703,39 @@ static void mv88e6xxx_stats_get_strings(struct mv88e6xxx_chip *chip,
703
703
j ++ ;
704
704
}
705
705
}
706
+
707
+ return j ;
706
708
}
707
709
708
- static void mv88e6095_stats_get_strings (struct mv88e6xxx_chip * chip ,
709
- uint8_t * data )
710
+ static int mv88e6095_stats_get_strings (struct mv88e6xxx_chip * chip ,
711
+ uint8_t * data )
710
712
{
711
- mv88e6xxx_stats_get_strings (chip , data ,
712
- STATS_TYPE_BANK0 | STATS_TYPE_PORT );
713
+ return mv88e6xxx_stats_get_strings (chip , data ,
714
+ STATS_TYPE_BANK0 | STATS_TYPE_PORT );
713
715
}
714
716
715
- static void mv88e6320_stats_get_strings (struct mv88e6xxx_chip * chip ,
716
- uint8_t * data )
717
+ static int mv88e6320_stats_get_strings (struct mv88e6xxx_chip * chip ,
718
+ uint8_t * data )
717
719
{
718
- mv88e6xxx_stats_get_strings (chip , data ,
719
- STATS_TYPE_BANK0 | STATS_TYPE_BANK1 );
720
+ return mv88e6xxx_stats_get_strings (chip , data ,
721
+ STATS_TYPE_BANK0 | STATS_TYPE_BANK1 );
720
722
}
721
723
722
724
static void mv88e6xxx_get_strings (struct dsa_switch * ds , int port ,
723
725
uint8_t * data )
724
726
{
725
727
struct mv88e6xxx_chip * chip = ds -> priv ;
728
+ int count = 0 ;
726
729
727
730
mutex_lock (& chip -> reg_lock );
728
731
729
732
if (chip -> info -> ops -> stats_get_strings )
730
- chip -> info -> ops -> stats_get_strings (chip , data );
733
+ count = chip -> info -> ops -> stats_get_strings (chip , data );
734
+
735
+ if (chip -> info -> ops -> serdes_get_strings ) {
736
+ data += count * ETH_GSTRING_LEN ;
737
+ chip -> info -> ops -> serdes_get_strings (chip , port , data );
738
+ }
731
739
732
740
mutex_unlock (& chip -> reg_lock );
733
741
}
@@ -761,19 +769,31 @@ static int mv88e6320_stats_get_sset_count(struct mv88e6xxx_chip *chip)
761
769
static int mv88e6xxx_get_sset_count (struct dsa_switch * ds , int port )
762
770
{
763
771
struct mv88e6xxx_chip * chip = ds -> priv ;
764
- int ret = 0 ;
772
+ int serdes_count = 0 ;
773
+ int count = 0 ;
765
774
766
775
mutex_lock (& chip -> reg_lock );
767
776
if (chip -> info -> ops -> stats_get_sset_count )
768
- ret = chip -> info -> ops -> stats_get_sset_count (chip );
777
+ count = chip -> info -> ops -> stats_get_sset_count (chip );
778
+ if (count < 0 )
779
+ goto out ;
780
+
781
+ if (chip -> info -> ops -> serdes_get_sset_count )
782
+ serdes_count = chip -> info -> ops -> serdes_get_sset_count (chip ,
783
+ port );
784
+ if (serdes_count < 0 )
785
+ count = serdes_count ;
786
+ else
787
+ count += serdes_count ;
788
+ out :
769
789
mutex_unlock (& chip -> reg_lock );
770
790
771
- return ret ;
791
+ return count ;
772
792
}
773
793
774
- static void mv88e6xxx_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
775
- uint64_t * data , int types ,
776
- u16 bank1_select , u16 histogram )
794
+ static int mv88e6xxx_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
795
+ uint64_t * data , int types ,
796
+ u16 bank1_select , u16 histogram )
777
797
{
778
798
struct mv88e6xxx_hw_stat * stat ;
779
799
int i , j ;
@@ -790,27 +810,28 @@ static void mv88e6xxx_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
790
810
j ++ ;
791
811
}
792
812
}
813
+ return j ;
793
814
}
794
815
795
- static void mv88e6095_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
796
- uint64_t * data )
816
+ static int mv88e6095_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
817
+ uint64_t * data )
797
818
{
798
819
return mv88e6xxx_stats_get_stats (chip , port , data ,
799
820
STATS_TYPE_BANK0 | STATS_TYPE_PORT ,
800
821
0 , MV88E6XXX_G1_STATS_OP_HIST_RX_TX );
801
822
}
802
823
803
- static void mv88e6320_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
804
- uint64_t * data )
824
+ static int mv88e6320_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
825
+ uint64_t * data )
805
826
{
806
827
return mv88e6xxx_stats_get_stats (chip , port , data ,
807
828
STATS_TYPE_BANK0 | STATS_TYPE_BANK1 ,
808
829
MV88E6XXX_G1_STATS_OP_BANK_1_BIT_9 ,
809
830
MV88E6XXX_G1_STATS_OP_HIST_RX_TX );
810
831
}
811
832
812
- static void mv88e6390_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
813
- uint64_t * data )
833
+ static int mv88e6390_stats_get_stats (struct mv88e6xxx_chip * chip , int port ,
834
+ uint64_t * data )
814
835
{
815
836
return mv88e6xxx_stats_get_stats (chip , port , data ,
816
837
STATS_TYPE_BANK0 | STATS_TYPE_BANK1 ,
@@ -821,8 +842,15 @@ static void mv88e6390_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
821
842
static void mv88e6xxx_get_stats (struct mv88e6xxx_chip * chip , int port ,
822
843
uint64_t * data )
823
844
{
845
+ int count = 0 ;
846
+
824
847
if (chip -> info -> ops -> stats_get_stats )
825
- chip -> info -> ops -> stats_get_stats (chip , port , data );
848
+ count = chip -> info -> ops -> stats_get_stats (chip , port , data );
849
+
850
+ if (chip -> info -> ops -> serdes_get_stats ) {
851
+ data += count ;
852
+ chip -> info -> ops -> serdes_get_stats (chip , port , data );
853
+ }
826
854
}
827
855
828
856
static void mv88e6xxx_get_ethtool_stats (struct dsa_switch * ds , int port ,
0 commit comments