Lines Matching refs:adapter

77 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter);
119 static void igb_ptp_read_i210(struct igb_adapter *adapter, in igb_ptp_read_i210() argument
122 struct e1000_hw *hw = &adapter->hw; in igb_ptp_read_i210()
137 static void igb_ptp_write_i210(struct igb_adapter *adapter, in igb_ptp_write_i210() argument
140 struct e1000_hw *hw = &adapter->hw; in igb_ptp_write_i210()
166 static void igb_ptp_systim_to_hwtstamp(struct igb_adapter *adapter, in igb_ptp_systim_to_hwtstamp() argument
173 switch (adapter->hw.mac.type) { in igb_ptp_systim_to_hwtstamp()
178 spin_lock_irqsave(&adapter->tmreg_lock, flags); in igb_ptp_systim_to_hwtstamp()
180 ns = timecounter_cyc2time(&adapter->tc, systim); in igb_ptp_systim_to_hwtstamp()
182 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); in igb_ptp_systim_to_hwtstamp()
598 struct igb_adapter *adapter = container_of(work, struct igb_adapter, in igb_ptp_tx_work() local
600 struct e1000_hw *hw = &adapter->hw; in igb_ptp_tx_work()
603 if (!adapter->ptp_tx_skb) in igb_ptp_tx_work()
606 if (time_is_before_jiffies(adapter->ptp_tx_start + in igb_ptp_tx_work()
608 dev_kfree_skb_any(adapter->ptp_tx_skb); in igb_ptp_tx_work()
609 adapter->ptp_tx_skb = NULL; in igb_ptp_tx_work()
610 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); in igb_ptp_tx_work()
611 adapter->tx_hwtstamp_timeouts++; in igb_ptp_tx_work()
612 dev_warn(&adapter->pdev->dev, "clearing Tx timestamp hang\n"); in igb_ptp_tx_work()
618 igb_ptp_tx_hwtstamp(adapter); in igb_ptp_tx_work()
621 schedule_work(&adapter->ptp_tx_work); in igb_ptp_tx_work()
648 void igb_ptp_rx_hang(struct igb_adapter *adapter) in igb_ptp_rx_hang() argument
650 struct e1000_hw *hw = &adapter->hw; in igb_ptp_rx_hang()
661 adapter->last_rx_ptp_check = jiffies; in igb_ptp_rx_hang()
666 rx_event = adapter->last_rx_ptp_check; in igb_ptp_rx_hang()
667 if (time_after(adapter->last_rx_timestamp, rx_event)) in igb_ptp_rx_hang()
668 rx_event = adapter->last_rx_timestamp; in igb_ptp_rx_hang()
673 adapter->last_rx_ptp_check = jiffies; in igb_ptp_rx_hang()
674 adapter->rx_hwtstamp_cleared++; in igb_ptp_rx_hang()
675 dev_warn(&adapter->pdev->dev, "clearing Rx timestamp hang\n"); in igb_ptp_rx_hang()
687 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter) in igb_ptp_tx_hwtstamp() argument
689 struct e1000_hw *hw = &adapter->hw; in igb_ptp_tx_hwtstamp()
696 igb_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval); in igb_ptp_tx_hwtstamp()
697 skb_tstamp_tx(adapter->ptp_tx_skb, &shhwtstamps); in igb_ptp_tx_hwtstamp()
698 dev_kfree_skb_any(adapter->ptp_tx_skb); in igb_ptp_tx_hwtstamp()
699 adapter->ptp_tx_skb = NULL; in igb_ptp_tx_hwtstamp()
700 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); in igb_ptp_tx_hwtstamp()
723 igb_ptp_systim_to_hwtstamp(q_vector->adapter, skb_hwtstamps(skb), in igb_ptp_rx_pktstamp()
738 struct igb_adapter *adapter = q_vector->adapter; in igb_ptp_rx_rgtstamp() local
739 struct e1000_hw *hw = &adapter->hw; in igb_ptp_rx_rgtstamp()
758 igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval); in igb_ptp_rx_rgtstamp()
763 adapter->last_rx_timestamp = jiffies; in igb_ptp_rx_rgtstamp()
777 struct igb_adapter *adapter = netdev_priv(netdev); in igb_ptp_get_ts_config() local
778 struct hwtstamp_config *config = &adapter->tstamp_config; in igb_ptp_get_ts_config()
801 static int igb_ptp_set_timestamp_mode(struct igb_adapter *adapter, in igb_ptp_set_timestamp_mode() argument
804 struct e1000_hw *hw = &adapter->hw; in igb_ptp_set_timestamp_mode()
957 struct igb_adapter *adapter = netdev_priv(netdev); in igb_ptp_set_ts_config() local
964 err = igb_ptp_set_timestamp_mode(adapter, &config); in igb_ptp_set_ts_config()
969 memcpy(&adapter->tstamp_config, &config, in igb_ptp_set_ts_config()
970 sizeof(adapter->tstamp_config)); in igb_ptp_set_ts_config()
976 void igb_ptp_init(struct igb_adapter *adapter) in igb_ptp_init() argument
978 struct e1000_hw *hw = &adapter->hw; in igb_ptp_init()
979 struct net_device *netdev = adapter->netdev; in igb_ptp_init()
984 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); in igb_ptp_init()
985 adapter->ptp_caps.owner = THIS_MODULE; in igb_ptp_init()
986 adapter->ptp_caps.max_adj = 999999881; in igb_ptp_init()
987 adapter->ptp_caps.n_ext_ts = 0; in igb_ptp_init()
988 adapter->ptp_caps.pps = 0; in igb_ptp_init()
989 adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82576; in igb_ptp_init()
990 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; in igb_ptp_init()
991 adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576; in igb_ptp_init()
992 adapter->ptp_caps.settime64 = igb_ptp_settime_82576; in igb_ptp_init()
993 adapter->ptp_caps.enable = igb_ptp_feature_enable; in igb_ptp_init()
994 adapter->cc.read = igb_ptp_read_82576; in igb_ptp_init()
995 adapter->cc.mask = CYCLECOUNTER_MASK(64); in igb_ptp_init()
996 adapter->cc.mult = 1; in igb_ptp_init()
997 adapter->cc.shift = IGB_82576_TSYNC_SHIFT; in igb_ptp_init()
1004 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); in igb_ptp_init()
1005 adapter->ptp_caps.owner = THIS_MODULE; in igb_ptp_init()
1006 adapter->ptp_caps.max_adj = 62499999; in igb_ptp_init()
1007 adapter->ptp_caps.n_ext_ts = 0; in igb_ptp_init()
1008 adapter->ptp_caps.pps = 0; in igb_ptp_init()
1009 adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82580; in igb_ptp_init()
1010 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; in igb_ptp_init()
1011 adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576; in igb_ptp_init()
1012 adapter->ptp_caps.settime64 = igb_ptp_settime_82576; in igb_ptp_init()
1013 adapter->ptp_caps.enable = igb_ptp_feature_enable; in igb_ptp_init()
1014 adapter->cc.read = igb_ptp_read_82580; in igb_ptp_init()
1015 adapter->cc.mask = CYCLECOUNTER_MASK(IGB_NBITS_82580); in igb_ptp_init()
1016 adapter->cc.mult = 1; in igb_ptp_init()
1017 adapter->cc.shift = 0; in igb_ptp_init()
1024 struct ptp_pin_desc *ppd = &adapter->sdp_config[i]; in igb_ptp_init()
1030 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); in igb_ptp_init()
1031 adapter->ptp_caps.owner = THIS_MODULE; in igb_ptp_init()
1032 adapter->ptp_caps.max_adj = 62499999; in igb_ptp_init()
1033 adapter->ptp_caps.n_ext_ts = IGB_N_EXTTS; in igb_ptp_init()
1034 adapter->ptp_caps.n_per_out = IGB_N_PEROUT; in igb_ptp_init()
1035 adapter->ptp_caps.n_pins = IGB_N_SDP; in igb_ptp_init()
1036 adapter->ptp_caps.pps = 1; in igb_ptp_init()
1037 adapter->ptp_caps.pin_config = adapter->sdp_config; in igb_ptp_init()
1038 adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82580; in igb_ptp_init()
1039 adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210; in igb_ptp_init()
1040 adapter->ptp_caps.gettime64 = igb_ptp_gettime_i210; in igb_ptp_init()
1041 adapter->ptp_caps.settime64 = igb_ptp_settime_i210; in igb_ptp_init()
1042 adapter->ptp_caps.enable = igb_ptp_feature_enable_i210; in igb_ptp_init()
1043 adapter->ptp_caps.verify = igb_ptp_verify_pin; in igb_ptp_init()
1048 adapter->ptp_clock = NULL; in igb_ptp_init()
1054 spin_lock_init(&adapter->tmreg_lock); in igb_ptp_init()
1055 INIT_WORK(&adapter->ptp_tx_work, igb_ptp_tx_work); in igb_ptp_init()
1061 igb_ptp_settime_i210(&adapter->ptp_caps, &ts); in igb_ptp_init()
1063 timecounter_init(&adapter->tc, &adapter->cc, in igb_ptp_init()
1066 INIT_DELAYED_WORK(&adapter->ptp_overflow_work, in igb_ptp_init()
1069 schedule_delayed_work(&adapter->ptp_overflow_work, in igb_ptp_init()
1079 adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; in igb_ptp_init()
1080 adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF; in igb_ptp_init()
1082 adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps, in igb_ptp_init()
1083 &adapter->pdev->dev); in igb_ptp_init()
1084 if (IS_ERR(adapter->ptp_clock)) { in igb_ptp_init()
1085 adapter->ptp_clock = NULL; in igb_ptp_init()
1086 dev_err(&adapter->pdev->dev, "ptp_clock_register failed\n"); in igb_ptp_init()
1088 dev_info(&adapter->pdev->dev, "added PHC on %s\n", in igb_ptp_init()
1089 adapter->netdev->name); in igb_ptp_init()
1090 adapter->flags |= IGB_FLAG_PTP; in igb_ptp_init()
1100 void igb_ptp_stop(struct igb_adapter *adapter) in igb_ptp_stop() argument
1102 switch (adapter->hw.mac.type) { in igb_ptp_stop()
1107 cancel_delayed_work_sync(&adapter->ptp_overflow_work); in igb_ptp_stop()
1117 cancel_work_sync(&adapter->ptp_tx_work); in igb_ptp_stop()
1118 if (adapter->ptp_tx_skb) { in igb_ptp_stop()
1119 dev_kfree_skb_any(adapter->ptp_tx_skb); in igb_ptp_stop()
1120 adapter->ptp_tx_skb = NULL; in igb_ptp_stop()
1121 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); in igb_ptp_stop()
1124 if (adapter->ptp_clock) { in igb_ptp_stop()
1125 ptp_clock_unregister(adapter->ptp_clock); in igb_ptp_stop()
1126 dev_info(&adapter->pdev->dev, "removed PHC on %s\n", in igb_ptp_stop()
1127 adapter->netdev->name); in igb_ptp_stop()
1128 adapter->flags &= ~IGB_FLAG_PTP; in igb_ptp_stop()
1138 void igb_ptp_reset(struct igb_adapter *adapter) in igb_ptp_reset() argument
1140 struct e1000_hw *hw = &adapter->hw; in igb_ptp_reset()
1143 if (!(adapter->flags & IGB_FLAG_PTP)) in igb_ptp_reset()
1147 igb_ptp_set_timestamp_mode(adapter, &adapter->tstamp_config); in igb_ptp_reset()
1149 spin_lock_irqsave(&adapter->tmreg_lock, flags); in igb_ptp_reset()
1151 switch (adapter->hw.mac.type) { in igb_ptp_reset()
1175 igb_ptp_write_i210(adapter, &ts); in igb_ptp_reset()
1177 timecounter_init(&adapter->tc, &adapter->cc, in igb_ptp_reset()
1181 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); in igb_ptp_reset()