@@ -1819,6 +1819,46 @@ static int igc_ethtool_set_mm(struct net_device *netdev,
1819
1819
return igc_tsn_offload_apply (adapter );
1820
1820
}
1821
1821
1822
+ /**
1823
+ * igc_ethtool_get_frame_ass_error - Get the frame assembly error count.
1824
+ * @reg_value: Register value for IGC_PRMEXCPRCNT
1825
+ * Return: The count of frame assembly errors.
1826
+ */
1827
+ static u64 igc_ethtool_get_frame_ass_error (u32 reg_value )
1828
+ {
1829
+ /* Out of order statistics */
1830
+ u32 ooo_frame_cnt , ooo_frag_cnt ;
1831
+ u32 miss_frame_frag_cnt ;
1832
+
1833
+ ooo_frame_cnt = FIELD_GET (IGC_PRMEXCPRCNT_OOO_FRAME_CNT , reg_value );
1834
+ ooo_frag_cnt = FIELD_GET (IGC_PRMEXCPRCNT_OOO_FRAG_CNT , reg_value );
1835
+ miss_frame_frag_cnt = FIELD_GET (IGC_PRMEXCPRCNT_MISS_FRAME_FRAG_CNT ,
1836
+ reg_value );
1837
+
1838
+ return ooo_frame_cnt + ooo_frag_cnt + miss_frame_frag_cnt ;
1839
+ }
1840
+
1841
+ static u64 igc_ethtool_get_frame_smd_error (u32 reg_value )
1842
+ {
1843
+ return FIELD_GET (IGC_PRMEXCPRCNT_OOO_SMDC , reg_value );
1844
+ }
1845
+
1846
+ static void igc_ethtool_get_mm_stats (struct net_device * dev ,
1847
+ struct ethtool_mm_stats * stats )
1848
+ {
1849
+ struct igc_adapter * adapter = netdev_priv (dev );
1850
+ struct igc_hw * hw = & adapter -> hw ;
1851
+ u32 reg_value ;
1852
+
1853
+ reg_value = rd32 (IGC_PRMEXCPRCNT );
1854
+
1855
+ stats -> MACMergeFrameAssErrorCount = igc_ethtool_get_frame_ass_error (reg_value );
1856
+ stats -> MACMergeFrameSmdErrorCount = igc_ethtool_get_frame_smd_error (reg_value );
1857
+ stats -> MACMergeFrameAssOkCount = rd32 (IGC_PRMPTDRCNT );
1858
+ stats -> MACMergeFragCountRx = rd32 (IGC_PRMEVNTRCNT );
1859
+ stats -> MACMergeFragCountTx = rd32 (IGC_PRMEVNTTCNT );
1860
+ }
1861
+
1822
1862
static int igc_ethtool_get_link_ksettings (struct net_device * netdev ,
1823
1863
struct ethtool_link_ksettings * cmd )
1824
1864
{
@@ -2115,6 +2155,7 @@ static const struct ethtool_ops igc_ethtool_ops = {
2115
2155
.set_link_ksettings = igc_ethtool_set_link_ksettings ,
2116
2156
.self_test = igc_ethtool_diag_test ,
2117
2157
.get_mm = igc_ethtool_get_mm ,
2158
+ .get_mm_stats = igc_ethtool_get_mm_stats ,
2118
2159
.set_mm = igc_ethtool_set_mm ,
2119
2160
};
2120
2161
0 commit comments