aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/igb/igb_ptp.c
diff options
context:
space:
mode:
authorMatthew Vick <matthew.vick@intel.com>2012-11-08 03:38:57 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-11-22 05:00:53 -0500
commit3e961a06a0d509d9f7cddc8240431d25f6dcd51f (patch)
treeb13d5cff94286278a04d134a0bd1c83ff98322ba /drivers/net/ethernet/intel/igb/igb_ptp.c
parentb1ac1ef71b05f7127a2f344fc8219b37ed6859de (diff)
igb: Update PTP Rx filters
Update the filters to be more consistent with what the driver wants to do. For example, for devices that timestamp all packets, report that the filter is set for timestamping all packets. Signed-off-by: Matthew Vick <matthew.vick@intel.com> Acked-by: Richard Cochran <richardcochran@gmail.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_ptp.c')
-rw-r--r--drivers/net/ethernet/intel/igb/igb_ptp.c47
1 files changed, 20 insertions, 27 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c
index aa10f69f9f16..ab3429729bde 100644
--- a/drivers/net/ethernet/intel/igb/igb_ptp.c
+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
@@ -553,18 +553,6 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev,
553 case HWTSTAMP_FILTER_NONE: 553 case HWTSTAMP_FILTER_NONE:
554 tsync_rx_ctl = 0; 554 tsync_rx_ctl = 0;
555 break; 555 break;
556 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
557 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
558 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
559 case HWTSTAMP_FILTER_ALL:
560 /*
561 * register TSYNCRXCFG must be set, therefore it is not
562 * possible to time stamp both Sync and Delay_Req messages
563 * => fall back to time stamping all packets
564 */
565 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
566 config.rx_filter = HWTSTAMP_FILTER_ALL;
567 break;
568 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 556 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
569 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1; 557 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1;
570 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE; 558 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE;
@@ -575,31 +563,33 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev,
575 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE; 563 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE;
576 is_l4 = true; 564 is_l4 = true;
577 break; 565 break;
566 case HWTSTAMP_FILTER_PTP_V2_EVENT:
567 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
568 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
569 case HWTSTAMP_FILTER_PTP_V2_SYNC:
578 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 570 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
579 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 571 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
580 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L2_L4_V2; 572 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
581 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE;
582 is_l2 = true;
583 is_l4 = true;
584 config.rx_filter = HWTSTAMP_FILTER_SOME;
585 break;
586 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 573 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
587 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 574 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
588 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L2_L4_V2;
589 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE;
590 is_l2 = true;
591 is_l4 = true;
592 config.rx_filter = HWTSTAMP_FILTER_SOME;
593 break;
594 case HWTSTAMP_FILTER_PTP_V2_EVENT:
595 case HWTSTAMP_FILTER_PTP_V2_SYNC:
596 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
597 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2; 575 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2;
598 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 576 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
599 is_l2 = true; 577 is_l2 = true;
600 is_l4 = true; 578 is_l4 = true;
601 break; 579 break;
580 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
581 case HWTSTAMP_FILTER_ALL:
582 /* 82576 cannot timestamp all packets, which it needs to do to
583 * support both V1 Sync and Delay_Req messages
584 */
585 if (hw->mac.type != e1000_82576) {
586 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
587 config.rx_filter = HWTSTAMP_FILTER_ALL;
588 break;
589 }
590 /* fall through */
602 default: 591 default:
592 config.rx_filter = HWTSTAMP_FILTER_NONE;
603 return -ERANGE; 593 return -ERANGE;
604 } 594 }
605 595
@@ -617,6 +607,9 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev,
617 if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) { 607 if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) {
618 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; 608 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED;
619 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; 609 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
610 config.rx_filter = HWTSTAMP_FILTER_ALL;
611 is_l2 = true;
612 is_l4 = true;
620 613
621 if ((hw->mac.type == e1000_i210) || 614 if ((hw->mac.type == e1000_i210) ||
622 (hw->mac.type == e1000_i211)) { 615 (hw->mac.type == e1000_i211)) {