Lines Matching refs:ptp_priv

324 	struct kszphy_ptp_priv ptp_priv;  member
2257 struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts); in lan8814_ts_info() local
2258 struct phy_device *phydev = ptp_priv->phydev; in lan8814_ts_info()
2296 struct kszphy_ptp_priv *ptp_priv = in lan8814_hwtstamp() local
2298 struct phy_device *phydev = ptp_priv->phydev; in lan8814_hwtstamp()
2308 ptp_priv->hwts_tx_type = config.tx_type; in lan8814_hwtstamp()
2309 ptp_priv->rx_filter = config.rx_filter; in lan8814_hwtstamp()
2313 ptp_priv->layer = 0; in lan8814_hwtstamp()
2314 ptp_priv->version = 0; in lan8814_hwtstamp()
2319 ptp_priv->layer = PTP_CLASS_L4; in lan8814_hwtstamp()
2320 ptp_priv->version = PTP_CLASS_V2; in lan8814_hwtstamp()
2325 ptp_priv->layer = PTP_CLASS_L2; in lan8814_hwtstamp()
2326 ptp_priv->version = PTP_CLASS_V2; in lan8814_hwtstamp()
2331 ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2; in lan8814_hwtstamp()
2332 ptp_priv->version = PTP_CLASS_V2; in lan8814_hwtstamp()
2338 if (ptp_priv->layer & PTP_CLASS_L2) { in lan8814_hwtstamp()
2341 } else if (ptp_priv->layer & PTP_CLASS_L4) { in lan8814_hwtstamp()
2345 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_PARSE_CONFIG, rxcfg); in lan8814_hwtstamp()
2346 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_PARSE_CONFIG, txcfg); in lan8814_hwtstamp()
2350 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_TIMESTAMP_EN, pkt_ts_enable); in lan8814_hwtstamp()
2351 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_TIMESTAMP_EN, pkt_ts_enable); in lan8814_hwtstamp()
2353 if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC) in lan8814_hwtstamp()
2354 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD, in lan8814_hwtstamp()
2358 lan8814_config_ts_intr(ptp_priv->phydev, true); in lan8814_hwtstamp()
2360 lan8814_config_ts_intr(ptp_priv->phydev, false); in lan8814_hwtstamp()
2369 lanphy_write_page_reg(ptp_priv->phydev, 4, PTP_CMD_CTL, in lan8814_hwtstamp()
2372 lanphy_write_page_reg(ptp_priv->phydev, 4, PTP_CMD_CTL, in lan8814_hwtstamp()
2377 list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) { in lan8814_hwtstamp()
2381 skb_queue_purge(&ptp_priv->rx_queue); in lan8814_hwtstamp()
2382 skb_queue_purge(&ptp_priv->tx_queue); in lan8814_hwtstamp()
2384 lan8814_flush_fifo(ptp_priv->phydev, false); in lan8814_hwtstamp()
2385 lan8814_flush_fifo(ptp_priv->phydev, true); in lan8814_hwtstamp()
2393 struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts); in lan8814_txtstamp() local
2395 switch (ptp_priv->hwts_tx_type) { in lan8814_txtstamp()
2404 skb_queue_tail(&ptp_priv->tx_queue, skb); in lan8814_txtstamp()
2426 static bool lan8814_match_rx_skb(struct kszphy_ptp_priv *ptp_priv, in lan8814_match_rx_skb() argument
2438 spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags); in lan8814_match_rx_skb()
2439 list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) { in lan8814_match_rx_skb()
2454 spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags); in lan8814_match_rx_skb()
2463 struct kszphy_ptp_priv *ptp_priv = in lan8814_rxtstamp() local
2466 if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE || in lan8814_rxtstamp()
2470 if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0) in lan8814_rxtstamp()
2476 if (!lan8814_match_rx_skb(ptp_priv, skb)) in lan8814_rxtstamp()
2477 skb_queue_tail(&ptp_priv->rx_queue, skb); in lan8814_rxtstamp()
2726 static void lan8814_match_tx_skb(struct kszphy_ptp_priv *ptp_priv, in lan8814_match_tx_skb() argument
2735 spin_lock_irqsave(&ptp_priv->tx_queue.lock, flags); in lan8814_match_tx_skb()
2736 skb_queue_walk_safe(&ptp_priv->tx_queue, skb, skb_tmp) { in lan8814_match_tx_skb()
2742 __skb_unlink(skb, &ptp_priv->tx_queue); in lan8814_match_tx_skb()
2746 spin_unlock_irqrestore(&ptp_priv->tx_queue.lock, flags); in lan8814_match_tx_skb()
2755 static void lan8814_dequeue_tx_skb(struct kszphy_ptp_priv *ptp_priv) in lan8814_dequeue_tx_skb() argument
2757 struct phy_device *phydev = ptp_priv->phydev; in lan8814_dequeue_tx_skb()
2762 lan8814_match_tx_skb(ptp_priv, seconds, nsec, seq_id); in lan8814_dequeue_tx_skb()
2765 static void lan8814_get_tx_ts(struct kszphy_ptp_priv *ptp_priv) in lan8814_get_tx_ts() argument
2767 struct phy_device *phydev = ptp_priv->phydev; in lan8814_get_tx_ts()
2771 lan8814_dequeue_tx_skb(ptp_priv); in lan8814_get_tx_ts()
2780 static bool lan8814_match_skb(struct kszphy_ptp_priv *ptp_priv, in lan8814_match_skb() argument
2789 spin_lock_irqsave(&ptp_priv->rx_queue.lock, flags); in lan8814_match_skb()
2790 skb_queue_walk_safe(&ptp_priv->rx_queue, skb, skb_tmp) { in lan8814_match_skb()
2796 __skb_unlink(skb, &ptp_priv->rx_queue); in lan8814_match_skb()
2801 spin_unlock_irqrestore(&ptp_priv->rx_queue.lock, flags); in lan8814_match_skb()
2813 static void lan8814_match_rx_ts(struct kszphy_ptp_priv *ptp_priv, in lan8814_match_rx_ts() argument
2821 if (!lan8814_match_skb(ptp_priv, rx_ts)) { in lan8814_match_rx_ts()
2822 spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags); in lan8814_match_rx_ts()
2823 list_add(&rx_ts->list, &ptp_priv->rx_ts_list); in lan8814_match_rx_ts()
2824 spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags); in lan8814_match_rx_ts()
2830 static void lan8814_get_rx_ts(struct kszphy_ptp_priv *ptp_priv) in lan8814_get_rx_ts() argument
2832 struct phy_device *phydev = ptp_priv->phydev; in lan8814_get_rx_ts()
2843 lan8814_match_rx_ts(ptp_priv, rx_ts); in lan8814_get_rx_ts()
2855 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv; in lan8814_handle_ptp_interrupt() local
2858 lan8814_get_tx_ts(ptp_priv); in lan8814_handle_ptp_interrupt()
2861 lan8814_get_rx_ts(ptp_priv); in lan8814_handle_ptp_interrupt()
2865 skb_queue_purge(&ptp_priv->tx_queue); in lan8814_handle_ptp_interrupt()
2870 skb_queue_purge(&ptp_priv->rx_queue); in lan8814_handle_ptp_interrupt()
3020 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv; in lan8814_ptp_init() local
3046 skb_queue_head_init(&ptp_priv->tx_queue); in lan8814_ptp_init()
3047 skb_queue_head_init(&ptp_priv->rx_queue); in lan8814_ptp_init()
3048 INIT_LIST_HEAD(&ptp_priv->rx_ts_list); in lan8814_ptp_init()
3049 spin_lock_init(&ptp_priv->rx_ts_lock); in lan8814_ptp_init()
3051 ptp_priv->phydev = phydev; in lan8814_ptp_init()
3053 ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp; in lan8814_ptp_init()
3054 ptp_priv->mii_ts.txtstamp = lan8814_txtstamp; in lan8814_ptp_init()
3055 ptp_priv->mii_ts.hwtstamp = lan8814_hwtstamp; in lan8814_ptp_init()
3056 ptp_priv->mii_ts.ts_info = lan8814_ts_info; in lan8814_ptp_init()
3058 phydev->mii_ts = &ptp_priv->mii_ts; in lan8814_ptp_init()
3360 static bool lan8841_ptp_get_tx_ts(struct kszphy_ptp_priv *ptp_priv, in lan8841_ptp_get_tx_ts() argument
3363 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_get_tx_ts()
3381 static void lan8841_ptp_process_tx_ts(struct kszphy_ptp_priv *ptp_priv) in lan8841_ptp_process_tx_ts() argument
3386 while (lan8841_ptp_get_tx_ts(ptp_priv, &sec, &nsec, &seq)) in lan8841_ptp_process_tx_ts()
3387 lan8814_match_tx_skb(ptp_priv, sec, nsec, seq); in lan8841_ptp_process_tx_ts()
3397 static struct lan8814_ptp_rx_ts *lan8841_ptp_get_rx_ts(struct kszphy_ptp_priv *ptp_priv) in lan8841_ptp_get_rx_ts() argument
3399 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_get_rx_ts()
3428 static void lan8841_ptp_process_rx_ts(struct kszphy_ptp_priv *ptp_priv) in lan8841_ptp_process_rx_ts() argument
3432 while ((rx_ts = lan8841_ptp_get_rx_ts(ptp_priv)) != NULL) in lan8841_ptp_process_rx_ts()
3433 lan8814_match_rx_ts(ptp_priv, rx_ts); in lan8841_ptp_process_rx_ts()
3442 static void lan8841_ptp_flush_fifo(struct kszphy_ptp_priv *ptp_priv, bool egress) in lan8841_ptp_flush_fifo() argument
3444 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_flush_fifo()
3458 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv; in lan8841_handle_ptp_interrupt() local
3464 lan8841_ptp_process_tx_ts(ptp_priv); in lan8841_handle_ptp_interrupt()
3467 lan8841_ptp_process_rx_ts(ptp_priv); in lan8841_handle_ptp_interrupt()
3470 lan8841_ptp_flush_fifo(ptp_priv, true); in lan8841_handle_ptp_interrupt()
3471 skb_queue_purge(&ptp_priv->tx_queue); in lan8841_handle_ptp_interrupt()
3475 lan8841_ptp_flush_fifo(ptp_priv, false); in lan8841_handle_ptp_interrupt()
3476 skb_queue_purge(&ptp_priv->rx_queue); in lan8841_handle_ptp_interrupt()
3511 struct kszphy_ptp_priv *ptp_priv; in lan8841_ts_info() local
3513 ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts); in lan8841_ts_info()
3515 info->phc_index = ptp_priv->ptp_clock ? in lan8841_ts_info()
3516 ptp_clock_index(ptp_priv->ptp_clock) : -1; in lan8841_ts_info()
3546 static void lan8841_ptp_enable_int(struct kszphy_ptp_priv *ptp_priv, in lan8841_ptp_enable_int() argument
3549 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_enable_int()
3577 struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts); in lan8841_hwtstamp() local
3578 struct phy_device *phydev = ptp_priv->phydev; in lan8841_hwtstamp()
3587 ptp_priv->hwts_tx_type = config.tx_type; in lan8841_hwtstamp()
3588 ptp_priv->rx_filter = config.rx_filter; in lan8841_hwtstamp()
3592 ptp_priv->layer = 0; in lan8841_hwtstamp()
3593 ptp_priv->version = 0; in lan8841_hwtstamp()
3598 ptp_priv->layer = PTP_CLASS_L4; in lan8841_hwtstamp()
3599 ptp_priv->version = PTP_CLASS_V2; in lan8841_hwtstamp()
3604 ptp_priv->layer = PTP_CLASS_L2; in lan8841_hwtstamp()
3605 ptp_priv->version = PTP_CLASS_V2; in lan8841_hwtstamp()
3610 ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2; in lan8841_hwtstamp()
3611 ptp_priv->version = PTP_CLASS_V2; in lan8841_hwtstamp()
3620 if (ptp_priv->layer & PTP_CLASS_L2) { in lan8841_hwtstamp()
3623 } else if (ptp_priv->layer & PTP_CLASS_L4) { in lan8841_hwtstamp()
3639 ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC ? in lan8841_hwtstamp()
3643 lan8841_ptp_enable_int(ptp_priv, in lan8841_hwtstamp()
3647 list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) { in lan8841_hwtstamp()
3652 skb_queue_purge(&ptp_priv->rx_queue); in lan8841_hwtstamp()
3653 skb_queue_purge(&ptp_priv->tx_queue); in lan8841_hwtstamp()
3655 lan8841_ptp_flush_fifo(ptp_priv, false); in lan8841_hwtstamp()
3656 lan8841_ptp_flush_fifo(ptp_priv, true); in lan8841_hwtstamp()
3671 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv, in lan8841_ptp_settime64() local
3673 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_settime64()
3676 mutex_lock(&ptp_priv->ptp_lock); in lan8841_ptp_settime64()
3686 mutex_unlock(&ptp_priv->ptp_lock); in lan8841_ptp_settime64()
3701 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv, in lan8841_ptp_gettime64() local
3703 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_gettime64()
3707 mutex_lock(&ptp_priv->ptp_lock); in lan8841_ptp_gettime64()
3722 mutex_unlock(&ptp_priv->ptp_lock); in lan8841_ptp_gettime64()
3736 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv, in lan8841_ptp_adjtime() local
3738 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_adjtime()
3787 mutex_lock(&ptp_priv->ptp_lock); in lan8841_ptp_adjtime()
3804 mutex_unlock(&ptp_priv->ptp_lock); in lan8841_ptp_adjtime()
3815 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv, in lan8841_ptp_adjfine() local
3817 struct phy_device *phydev = ptp_priv->phydev; in lan8841_ptp_adjfine()
3832 mutex_lock(&ptp_priv->ptp_lock); in lan8841_ptp_adjfine()
3837 mutex_unlock(&ptp_priv->ptp_lock); in lan8841_ptp_adjfine()
3857 struct kszphy_ptp_priv *ptp_priv; in lan8841_probe() local
3875 ptp_priv = &priv->ptp_priv; in lan8841_probe()
3877 ptp_priv->ptp_clock_info = lan8841_ptp_clock_info; in lan8841_probe()
3878 ptp_priv->ptp_clock = ptp_clock_register(&ptp_priv->ptp_clock_info, in lan8841_probe()
3880 if (IS_ERR(ptp_priv->ptp_clock)) { in lan8841_probe()
3882 PTR_ERR(ptp_priv->ptp_clock)); in lan8841_probe()
3886 if (!ptp_priv->ptp_clock) in lan8841_probe()
3890 skb_queue_head_init(&ptp_priv->tx_queue); in lan8841_probe()
3891 skb_queue_head_init(&ptp_priv->rx_queue); in lan8841_probe()
3892 INIT_LIST_HEAD(&ptp_priv->rx_ts_list); in lan8841_probe()
3893 spin_lock_init(&ptp_priv->rx_ts_lock); in lan8841_probe()
3894 ptp_priv->phydev = phydev; in lan8841_probe()
3895 mutex_init(&ptp_priv->ptp_lock); in lan8841_probe()
3897 ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp; in lan8841_probe()
3898 ptp_priv->mii_ts.txtstamp = lan8814_txtstamp; in lan8841_probe()
3899 ptp_priv->mii_ts.hwtstamp = lan8841_hwtstamp; in lan8841_probe()
3900 ptp_priv->mii_ts.ts_info = lan8841_ts_info; in lan8841_probe()
3902 phydev->mii_ts = &ptp_priv->mii_ts; in lan8841_probe()