|
@@ -553,18 +553,6 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev,
|
|
|
case HWTSTAMP_FILTER_NONE:
|
|
|
tsync_rx_ctl = 0;
|
|
|
break;
|
|
|
- case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
|
|
|
- case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
|
|
|
- case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
|
|
|
- case HWTSTAMP_FILTER_ALL:
|
|
|
- /*
|
|
|
- * register TSYNCRXCFG must be set, therefore it is not
|
|
|
- * possible to time stamp both Sync and Delay_Req messages
|
|
|
- * => fall back to time stamping all packets
|
|
|
- */
|
|
|
- tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
|
|
|
- config.rx_filter = HWTSTAMP_FILTER_ALL;
|
|
|
- break;
|
|
|
case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
|
|
|
tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1;
|
|
|
tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE;
|
|
@@ -575,31 +563,33 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev,
|
|
|
tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE;
|
|
|
is_l4 = true;
|
|
|
break;
|
|
|
+ case HWTSTAMP_FILTER_PTP_V2_EVENT:
|
|
|
+ case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
|
|
|
+ case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
|
|
|
+ case HWTSTAMP_FILTER_PTP_V2_SYNC:
|
|
|
case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
|
|
|
case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
|
|
|
- tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L2_L4_V2;
|
|
|
- tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE;
|
|
|
- is_l2 = true;
|
|
|
- is_l4 = true;
|
|
|
- config.rx_filter = HWTSTAMP_FILTER_SOME;
|
|
|
- break;
|
|
|
+ case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
|
|
|
case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
|
|
|
case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
|
|
|
- tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L2_L4_V2;
|
|
|
- tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE;
|
|
|
- is_l2 = true;
|
|
|
- is_l4 = true;
|
|
|
- config.rx_filter = HWTSTAMP_FILTER_SOME;
|
|
|
- break;
|
|
|
- case HWTSTAMP_FILTER_PTP_V2_EVENT:
|
|
|
- case HWTSTAMP_FILTER_PTP_V2_SYNC:
|
|
|
- case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
|
|
|
tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2;
|
|
|
config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
|
|
|
is_l2 = true;
|
|
|
is_l4 = true;
|
|
|
break;
|
|
|
+ case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
|
|
|
+ case HWTSTAMP_FILTER_ALL:
|
|
|
+ /* 82576 cannot timestamp all packets, which it needs to do to
|
|
|
+ * support both V1 Sync and Delay_Req messages
|
|
|
+ */
|
|
|
+ if (hw->mac.type != e1000_82576) {
|
|
|
+ tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
|
|
|
+ config.rx_filter = HWTSTAMP_FILTER_ALL;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /* fall through */
|
|
|
default:
|
|
|
+ config.rx_filter = HWTSTAMP_FILTER_NONE;
|
|
|
return -ERANGE;
|
|
|
}
|
|
|
|
|
@@ -617,6 +607,9 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev,
|
|
|
if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) {
|
|
|
tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED;
|
|
|
tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
|
|
|
+ config.rx_filter = HWTSTAMP_FILTER_ALL;
|
|
|
+ is_l2 = true;
|
|
|
+ is_l4 = true;
|
|
|
|
|
|
if ((hw->mac.type == e1000_i210) ||
|
|
|
(hw->mac.type == e1000_i211)) {
|