#include #include #include #include "fbnic.h" #include "fbnic_netdev.h" #include "fbnic_tlv.h" static void fbnic_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo) { struct fbnic_net *fbn = netdev_priv(netdev); struct fbnic_dev *fbd = fbn->fbd; fbnic_get_fw_ver_commit_str(fbd, drvinfo->fw_version, sizeof(drvinfo->fw_version)); } static void fbnic_set_counter(u64 *stat, struct fbnic_stat_counter *counter) { if (counter->reported) *stat = counter->value; } static void fbnic_get_eth_mac_stats(struct net_device *netdev, struct ethtool_eth_mac_stats *eth_mac_stats) { struct fbnic_net *fbn = netdev_priv(netdev); struct fbnic_mac_stats *mac_stats; struct fbnic_dev *fbd = fbn->fbd; const struct fbnic_mac *mac; mac_stats = &fbd->hw_stats.mac; mac = fbd->mac; mac->get_eth_mac_stats(fbd, false, &mac_stats->eth_mac); fbnic_set_counter(ð_mac_stats->FramesTransmittedOK, &mac_stats->eth_mac.FramesTransmittedOK); fbnic_set_counter(ð_mac_stats->FramesReceivedOK, &mac_stats->eth_mac.FramesReceivedOK); fbnic_set_counter(ð_mac_stats->FrameCheckSequenceErrors, &mac_stats->eth_mac.FrameCheckSequenceErrors); fbnic_set_counter(ð_mac_stats->AlignmentErrors, &mac_stats->eth_mac.AlignmentErrors); fbnic_set_counter(ð_mac_stats->OctetsTransmittedOK, &mac_stats->eth_mac.OctetsTransmittedOK); fbnic_set_counter(ð_mac_stats->FramesLostDueToIntMACXmitError, &mac_stats->eth_mac.FramesLostDueToIntMACXmitError); fbnic_set_counter(ð_mac_stats->OctetsReceivedOK, &mac_stats->eth_mac.OctetsReceivedOK); fbnic_set_counter(ð_mac_stats->FramesLostDueToIntMACRcvError, &mac_stats->eth_mac.FramesLostDueToIntMACRcvError); fbnic_set_counter(ð_mac_stats->MulticastFramesXmittedOK, &mac_stats->eth_mac.MulticastFramesXmittedOK); fbnic_set_counter(ð_mac_stats->BroadcastFramesXmittedOK, &mac_stats->eth_mac.BroadcastFramesXmittedOK); fbnic_set_counter(ð_mac_stats->MulticastFramesReceivedOK, &mac_stats->eth_mac.MulticastFramesReceivedOK); fbnic_set_counter(ð_mac_stats->BroadcastFramesReceivedOK, &mac_stats->eth_mac.BroadcastFramesReceivedOK); fbnic_set_counter(ð_mac_stats->FrameTooLongErrors, &mac_stats->eth_mac.FrameTooLongErrors); } static const struct ethtool_ops fbnic_ethtool_ops = { .get_drvinfo = fbnic_get_drvinfo, .get_eth_mac_stats = fbnic_get_eth_mac_stats, }; void fbnic_set_ethtool_ops(struct net_device *dev) { dev->ethtool_ops = &fbnic_ethtool_ops; }