@@ -186,6 +186,7 @@ STATIC void sysctl_mvneta_init(struct mvneta_softc *);
186186
187187/* MIB */
188188STATIC void mvneta_clear_mib (struct mvneta_softc * );
189+ STATIC uint64_t mvneta_read_mib (struct mvneta_softc * , int );
189190STATIC void mvneta_update_mib (struct mvneta_softc * );
190191
191192/* Switch */
@@ -1102,7 +1103,7 @@ STATIC int
11021103mvneta_initreg (struct ifnet * ifp )
11031104{
11041105 struct mvneta_softc * sc ;
1105- int q , i ;
1106+ int q ;
11061107 uint32_t reg ;
11071108
11081109 sc = ifp -> if_softc ;
@@ -1189,14 +1190,7 @@ mvneta_initreg(struct ifnet *ifp)
11891190 MVNETA_WRITE (sc , MVNETA_PXCX , reg );
11901191
11911192 /* clear MIB counter registers(clear by read) */
1192- for (i = 0 ; i < nitems (mvneta_mib_list ); i ++ ) {
1193- if (mvneta_mib_list [i ].reg64 )
1194- MVNETA_READ_MIB_8 (sc , mvneta_mib_list [i ].regnum );
1195- else
1196- MVNETA_READ_MIB_4 (sc , mvneta_mib_list [i ].regnum );
1197- }
1198- MVNETA_READ (sc , MVNETA_PDFC );
1199- MVNETA_READ (sc , MVNETA_POFC );
1193+ mvneta_clear_mib (sc );
12001194
12011195 /* Set SDC register except IPGINT bits */
12021196 reg = MVNETA_SDC_RXBSZ_16_64BITWORDS ;
@@ -3538,6 +3532,19 @@ sysctl_mvneta_init(struct mvneta_softc *sc)
35383532/*
35393533 * MIB
35403534 */
3535+ STATIC uint64_t
3536+ mvneta_read_mib (struct mvneta_softc * sc , int index )
3537+ {
3538+ struct mvneta_mib_def * mib ;
3539+ uint64_t val ;
3540+
3541+ mib = & mvneta_mib_list [index ];
3542+ val = MVNETA_READ_MIB (sc , mib -> regnum );
3543+ if (mib -> reg64 )
3544+ val |= (uint64_t )MVNETA_READ_MIB (sc , mib -> regnum + 4 ) << 32 ;
3545+ return (val );
3546+ }
3547+
35413548STATIC void
35423549mvneta_clear_mib (struct mvneta_softc * sc )
35433550{
@@ -3546,10 +3553,7 @@ mvneta_clear_mib(struct mvneta_softc *sc)
35463553 KASSERT_SC_MTX (sc );
35473554
35483555 for (i = 0 ; i < nitems (mvneta_mib_list ); i ++ ) {
3549- if (mvneta_mib_list [i ].reg64 )
3550- MVNETA_READ_MIB_8 (sc , mvneta_mib_list [i ].regnum );
3551- else
3552- MVNETA_READ_MIB_4 (sc , mvneta_mib_list [i ].regnum );
3556+ (void )mvneta_read_mib (sc , i );
35533557 sc -> sysctl_mib [i ].counter = 0 ;
35543558 }
35553559 MVNETA_READ (sc , MVNETA_PDFC );
@@ -3569,11 +3573,7 @@ mvneta_update_mib(struct mvneta_softc *sc)
35693573
35703574 for (i = 0 ; i < nitems (mvneta_mib_list ); i ++ ) {
35713575
3572- if (mvneta_mib_list [i ].reg64 )
3573- val = MVNETA_READ_MIB_8 (sc , mvneta_mib_list [i ].regnum );
3574- else
3575- val = MVNETA_READ_MIB_4 (sc , mvneta_mib_list [i ].regnum );
3576-
3576+ val = mvneta_read_mib (sc , i );
35773577 if (val == 0 )
35783578 continue ;
35793579
0 commit comments