sfc: Implement the SIOCGHWTSTAMP ioctl
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
fd468c74bd
commit
433dc9b3d1
|
@ -1857,7 +1857,9 @@ static int efx_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd)
|
||||||
struct mii_ioctl_data *data = if_mii(ifr);
|
struct mii_ioctl_data *data = if_mii(ifr);
|
||||||
|
|
||||||
if (cmd == SIOCSHWTSTAMP)
|
if (cmd == SIOCSHWTSTAMP)
|
||||||
return efx_ptp_ioctl(efx, ifr, cmd);
|
return efx_ptp_set_ts_config(efx, ifr);
|
||||||
|
if (cmd == SIOCGHWTSTAMP)
|
||||||
|
return efx_ptp_get_ts_config(efx, ifr);
|
||||||
|
|
||||||
/* Convert phy_id from older PRTAD/DEVAD format */
|
/* Convert phy_id from older PRTAD/DEVAD format */
|
||||||
if ((cmd == SIOCGMIIREG || cmd == SIOCSMIIREG) &&
|
if ((cmd == SIOCGMIIREG || cmd == SIOCSMIIREG) &&
|
||||||
|
|
|
@ -555,7 +555,8 @@ int efx_sriov_set_vf_spoofchk(struct net_device *net_dev, int vf,
|
||||||
|
|
||||||
struct ethtool_ts_info;
|
struct ethtool_ts_info;
|
||||||
void efx_ptp_probe(struct efx_nic *efx);
|
void efx_ptp_probe(struct efx_nic *efx);
|
||||||
int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd);
|
int efx_ptp_set_ts_config(struct efx_nic *efx, struct ifreq *ifr);
|
||||||
|
int efx_ptp_get_ts_config(struct efx_nic *efx, struct ifreq *ifr);
|
||||||
void efx_ptp_get_ts_info(struct efx_nic *efx, struct ethtool_ts_info *ts_info);
|
void efx_ptp_get_ts_info(struct efx_nic *efx, struct ethtool_ts_info *ts_info);
|
||||||
bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb);
|
bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb);
|
||||||
int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb);
|
int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb);
|
||||||
|
|
|
@ -1231,7 +1231,7 @@ void efx_ptp_get_ts_info(struct efx_nic *efx, struct ethtool_ts_info *ts_info)
|
||||||
1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ);
|
1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ);
|
||||||
}
|
}
|
||||||
|
|
||||||
int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd)
|
int efx_ptp_set_ts_config(struct efx_nic *efx, struct ifreq *ifr)
|
||||||
{
|
{
|
||||||
struct hwtstamp_config config;
|
struct hwtstamp_config config;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -1251,6 +1251,15 @@ int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd)
|
||||||
? -EFAULT : 0;
|
? -EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int efx_ptp_get_ts_config(struct efx_nic *efx, struct ifreq *ifr)
|
||||||
|
{
|
||||||
|
if (!efx->ptp_data)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
return copy_to_user(ifr->ifr_data, &efx->ptp_data->config,
|
||||||
|
sizeof(efx->ptp_data->config)) ? -EFAULT : 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void ptp_event_failure(struct efx_nic *efx, int expected_frag_len)
|
static void ptp_event_failure(struct efx_nic *efx, int expected_frag_len)
|
||||||
{
|
{
|
||||||
struct efx_ptp_data *ptp = efx->ptp_data;
|
struct efx_ptp_data *ptp = efx->ptp_data;
|
||||||
|
|
Loading…
Reference in New Issue