75 lines
2.5 KiB
C
75 lines
2.5 KiB
C
#include <linux/ethtool.h>
|
|
#include <linux/netdevice.h>
|
|
#include <linux/pci.h>
|
|
|
|
#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;
|
|
}
|