ionic: advertise support for hardware timestamps
Let the network stack know we've got support for timestamping the packets. Signed-off-by: Allen Hubbe <allenbh@pensando.io> Signed-off-by: Shannon Nelson <snelson@pensando.io> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
196f56c07f
commit
afeefec677
@ -1540,6 +1540,9 @@ static int ionic_set_nic_features(struct ionic_lif *lif,
|
|||||||
|
|
||||||
ctx.cmd.lif_setattr.features = ionic_netdev_features_to_nic(features);
|
ctx.cmd.lif_setattr.features = ionic_netdev_features_to_nic(features);
|
||||||
|
|
||||||
|
if (lif->phc)
|
||||||
|
ctx.cmd.lif_setattr.features |= cpu_to_le64(IONIC_ETH_HW_TIMESTAMP);
|
||||||
|
|
||||||
err = ionic_adminq_post_wait(lif, &ctx);
|
err = ionic_adminq_post_wait(lif, &ctx);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -1587,6 +1590,8 @@ static int ionic_set_nic_features(struct ionic_lif *lif,
|
|||||||
dev_dbg(dev, "feature ETH_HW_TSO_UDP\n");
|
dev_dbg(dev, "feature ETH_HW_TSO_UDP\n");
|
||||||
if (lif->hw_features & IONIC_ETH_HW_TSO_UDP_CSUM)
|
if (lif->hw_features & IONIC_ETH_HW_TSO_UDP_CSUM)
|
||||||
dev_dbg(dev, "feature ETH_HW_TSO_UDP_CSUM\n");
|
dev_dbg(dev, "feature ETH_HW_TSO_UDP_CSUM\n");
|
||||||
|
if (lif->hw_features & IONIC_ETH_HW_TIMESTAMP)
|
||||||
|
dev_dbg(dev, "feature ETH_HW_TIMESTAMP\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2260,6 +2265,20 @@ static int ionic_stop(struct net_device *netdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ionic_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||||
|
{
|
||||||
|
struct ionic_lif *lif = netdev_priv(netdev);
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case SIOCSHWTSTAMP:
|
||||||
|
return ionic_lif_hwstamp_set(lif, ifr);
|
||||||
|
case SIOCGHWTSTAMP:
|
||||||
|
return ionic_lif_hwstamp_get(lif, ifr);
|
||||||
|
default:
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int ionic_get_vf_config(struct net_device *netdev,
|
static int ionic_get_vf_config(struct net_device *netdev,
|
||||||
int vf, struct ifla_vf_info *ivf)
|
int vf, struct ifla_vf_info *ivf)
|
||||||
{
|
{
|
||||||
@ -2508,6 +2527,7 @@ static int ionic_set_vf_link_state(struct net_device *netdev, int vf, int set)
|
|||||||
static const struct net_device_ops ionic_netdev_ops = {
|
static const struct net_device_ops ionic_netdev_ops = {
|
||||||
.ndo_open = ionic_open,
|
.ndo_open = ionic_open,
|
||||||
.ndo_stop = ionic_stop,
|
.ndo_stop = ionic_stop,
|
||||||
|
.ndo_do_ioctl = ionic_do_ioctl,
|
||||||
.ndo_start_xmit = ionic_start_xmit,
|
.ndo_start_xmit = ionic_start_xmit,
|
||||||
.ndo_get_stats64 = ionic_get_stats64,
|
.ndo_get_stats64 = ionic_get_stats64,
|
||||||
.ndo_set_rx_mode = ionic_ndo_set_rx_mode,
|
.ndo_set_rx_mode = ionic_ndo_set_rx_mode,
|
||||||
@ -3331,6 +3351,8 @@ int ionic_lif_register(struct ionic_lif *lif)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
ionic_lif_register_phc(lif);
|
||||||
|
|
||||||
INIT_WORK(&lif->ionic->nb_work, ionic_lif_notify_work);
|
INIT_WORK(&lif->ionic->nb_work, ionic_lif_notify_work);
|
||||||
|
|
||||||
lif->ionic->nb.notifier_call = ionic_lif_notify;
|
lif->ionic->nb.notifier_call = ionic_lif_notify;
|
||||||
@ -3343,6 +3365,7 @@ int ionic_lif_register(struct ionic_lif *lif)
|
|||||||
err = register_netdev(lif->netdev);
|
err = register_netdev(lif->netdev);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(lif->ionic->dev, "Cannot register net device, aborting\n");
|
dev_err(lif->ionic->dev, "Cannot register net device, aborting\n");
|
||||||
|
ionic_lif_unregister_phc(lif);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3364,6 +3387,8 @@ void ionic_lif_unregister(struct ionic_lif *lif)
|
|||||||
if (lif->netdev->reg_state == NETREG_REGISTERED)
|
if (lif->netdev->reg_state == NETREG_REGISTERED)
|
||||||
unregister_netdev(lif->netdev);
|
unregister_netdev(lif->netdev);
|
||||||
|
|
||||||
|
ionic_lif_unregister_phc(lif);
|
||||||
|
|
||||||
lif->registered = false;
|
lif->registered = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user