Lines Matching defs:ptp_priv

433 	struct kszphy_ptp_priv ptp_priv;
2467 struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2468 struct phy_device *phydev = ptp_priv->phydev;
2508 struct kszphy_ptp_priv *ptp_priv =
2515 ptp_priv->hwts_tx_type = config->tx_type;
2516 ptp_priv->rx_filter = config->rx_filter;
2520 ptp_priv->layer = 0;
2521 ptp_priv->version = 0;
2526 ptp_priv->layer = PTP_CLASS_L4;
2527 ptp_priv->version = PTP_CLASS_V2;
2532 ptp_priv->layer = PTP_CLASS_L2;
2533 ptp_priv->version = PTP_CLASS_V2;
2538 ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
2539 ptp_priv->version = PTP_CLASS_V2;
2545 if (ptp_priv->layer & PTP_CLASS_L2) {
2548 } else if (ptp_priv->layer & PTP_CLASS_L4) {
2552 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_PARSE_CONFIG, rxcfg);
2553 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_PARSE_CONFIG, txcfg);
2557 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_TIMESTAMP_EN, pkt_ts_enable);
2558 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_TIMESTAMP_EN, pkt_ts_enable);
2560 tx_mod = lanphy_read_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD);
2561 if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC) {
2562 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD,
2564 } else if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ON) {
2565 lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD,
2570 lan8814_config_ts_intr(ptp_priv->phydev, true);
2572 lan8814_config_ts_intr(ptp_priv->phydev, false);
2575 list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
2579 skb_queue_purge(&ptp_priv->rx_queue);
2580 skb_queue_purge(&ptp_priv->tx_queue);
2582 lan8814_flush_fifo(ptp_priv->phydev, false);
2583 lan8814_flush_fifo(ptp_priv->phydev, true);
2591 struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2593 switch (ptp_priv->hwts_tx_type) {
2602 skb_queue_tail(&ptp_priv->tx_queue, skb);
2628 static bool lan8814_match_rx_skb(struct kszphy_ptp_priv *ptp_priv,
2641 spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
2642 list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
2657 spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
2666 struct kszphy_ptp_priv *ptp_priv =
2669 if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
2673 if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
2679 if (!lan8814_match_rx_skb(ptp_priv, skb))
2680 skb_queue_tail(&ptp_priv->rx_queue, skb);
3292 static void lan8814_match_tx_skb(struct kszphy_ptp_priv *ptp_priv,
3301 spin_lock_irqsave(&ptp_priv->tx_queue.lock, flags);
3302 skb_queue_walk_safe(&ptp_priv->tx_queue, skb, skb_tmp) {
3309 __skb_unlink(skb, &ptp_priv->tx_queue);
3313 spin_unlock_irqrestore(&ptp_priv->tx_queue.lock, flags);
3322 static void lan8814_dequeue_tx_skb(struct kszphy_ptp_priv *ptp_priv)
3324 struct phy_device *phydev = ptp_priv->phydev;
3329 lan8814_match_tx_skb(ptp_priv, seconds, nsec, seq_id);
3332 static void lan8814_get_tx_ts(struct kszphy_ptp_priv *ptp_priv)
3334 struct phy_device *phydev = ptp_priv->phydev;
3338 lan8814_dequeue_tx_skb(ptp_priv);
3347 static bool lan8814_match_skb(struct kszphy_ptp_priv *ptp_priv,
3356 spin_lock_irqsave(&ptp_priv->rx_queue.lock, flags);
3357 skb_queue_walk_safe(&ptp_priv->rx_queue, skb, skb_tmp) {
3364 __skb_unlink(skb, &ptp_priv->rx_queue);
3369 spin_unlock_irqrestore(&ptp_priv->rx_queue.lock, flags);
3381 static void lan8814_match_rx_ts(struct kszphy_ptp_priv *ptp_priv,
3389 if (!lan8814_match_skb(ptp_priv, rx_ts)) {
3390 spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
3391 list_add(&rx_ts->list, &ptp_priv->rx_ts_list);
3392 spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
3398 static void lan8814_get_rx_ts(struct kszphy_ptp_priv *ptp_priv)
3400 struct phy_device *phydev = ptp_priv->phydev;
3411 lan8814_match_rx_ts(ptp_priv, rx_ts);
3423 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
3426 lan8814_get_tx_ts(ptp_priv);
3429 lan8814_get_rx_ts(ptp_priv);
3433 skb_queue_purge(&ptp_priv->tx_queue);
3438 skb_queue_purge(&ptp_priv->rx_queue);
3649 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
3681 skb_queue_head_init(&ptp_priv->tx_queue);
3682 skb_queue_head_init(&ptp_priv->rx_queue);
3683 INIT_LIST_HEAD(&ptp_priv->rx_ts_list);
3684 spin_lock_init(&ptp_priv->rx_ts_lock);
3686 ptp_priv->phydev = phydev;
3688 ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
3689 ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
3690 ptp_priv->mii_ts.hwtstamp = lan8814_hwtstamp;
3691 ptp_priv->mii_ts.ts_info = lan8814_ts_info;
3693 phydev->mii_ts = &ptp_priv->mii_ts;
4068 static bool lan8841_ptp_get_tx_ts(struct kszphy_ptp_priv *ptp_priv,
4071 struct phy_device *phydev = ptp_priv->phydev;
4089 static void lan8841_ptp_process_tx_ts(struct kszphy_ptp_priv *ptp_priv)
4094 while (lan8841_ptp_get_tx_ts(ptp_priv, &sec, &nsec, &seq))
4095 lan8814_match_tx_skb(ptp_priv, sec, nsec, seq);
4103 static void lan8841_ptp_flush_fifo(struct kszphy_ptp_priv *ptp_priv)
4105 struct phy_device *phydev = ptp_priv->phydev;
4126 static void lan8841_gpio_process_cap(struct kszphy_ptp_priv *ptp_priv)
4128 struct phy_device *phydev = ptp_priv->phydev;
4133 pin = ptp_find_pin_unlocked(ptp_priv->ptp_clock, PTP_PF_EXTTS, 0);
4146 mutex_lock(&ptp_priv->ptp_lock);
4164 mutex_unlock(&ptp_priv->ptp_lock);
4172 ptp_clock_event(ptp_priv->ptp_clock, &ptp_event);
4178 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
4185 lan8841_ptp_process_tx_ts(ptp_priv);
4188 lan8841_gpio_process_cap(ptp_priv);
4191 lan8841_ptp_flush_fifo(ptp_priv);
4192 skb_queue_purge(&ptp_priv->tx_queue);
4229 struct kszphy_ptp_priv *ptp_priv;
4231 ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
4233 info->phc_index = ptp_priv->ptp_clock ?
4234 ptp_clock_index(ptp_priv->ptp_clock) : -1;
4258 static void lan8841_ptp_enable_processing(struct kszphy_ptp_priv *ptp_priv,
4261 struct phy_device *phydev = ptp_priv->phydev;
4282 ptp_schedule_worker(ptp_priv->ptp_clock, 0);
4295 ptp_cancel_worker_sync(ptp_priv->ptp_clock);
4307 struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
4308 struct phy_device *phydev = ptp_priv->phydev;
4312 ptp_priv->hwts_tx_type = config->tx_type;
4313 ptp_priv->rx_filter = config->rx_filter;
4317 ptp_priv->layer = 0;
4318 ptp_priv->version = 0;
4323 ptp_priv->layer = PTP_CLASS_L4;
4324 ptp_priv->version = PTP_CLASS_V2;
4329 ptp_priv->layer = PTP_CLASS_L2;
4330 ptp_priv->version = PTP_CLASS_V2;
4335 ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
4336 ptp_priv->version = PTP_CLASS_V2;
4345 if (ptp_priv->layer & PTP_CLASS_L2) {
4348 } else if (ptp_priv->layer & PTP_CLASS_L4) {
4364 ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC ?
4368 lan8841_ptp_enable_processing(ptp_priv,
4371 skb_queue_purge(&ptp_priv->tx_queue);
4373 lan8841_ptp_flush_fifo(ptp_priv);
4381 struct kszphy_ptp_priv *ptp_priv =
4392 if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
4396 if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
4399 spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
4400 ts.tv_sec = ptp_priv->seconds;
4401 spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
4430 static int lan8841_ptp_set_target(struct kszphy_ptp_priv *ptp_priv, u8 event,
4433 struct phy_device *phydev = ptp_priv->phydev;
4457 static int lan8841_ptp_update_target(struct kszphy_ptp_priv *ptp_priv,
4460 return lan8841_ptp_set_target(ptp_priv, LAN8841_EVENT_A,
4469 static int lan8841_ptp_set_reload(struct kszphy_ptp_priv *ptp_priv, u8 event,
4472 struct phy_device *phydev = ptp_priv->phydev;
4504 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4506 struct phy_device *phydev = ptp_priv->phydev;
4511 mutex_lock(&ptp_priv->ptp_lock);
4521 ret = lan8841_ptp_update_target(ptp_priv, ts);
4522 mutex_unlock(&ptp_priv->ptp_lock);
4524 spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
4525 ptp_priv->seconds = ts->tv_sec;
4526 spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
4541 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4543 struct phy_device *phydev = ptp_priv->phydev;
4547 mutex_lock(&ptp_priv->ptp_lock);
4562 mutex_unlock(&ptp_priv->ptp_lock);
4571 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4573 struct phy_device *phydev = ptp_priv->phydev;
4576 mutex_lock(&ptp_priv->ptp_lock);
4587 mutex_unlock(&ptp_priv->ptp_lock);
4600 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4602 struct phy_device *phydev = ptp_priv->phydev;
4652 mutex_lock(&ptp_priv->ptp_lock);
4669 mutex_unlock(&ptp_priv->ptp_lock);
4673 mutex_lock(&ptp_priv->ptp_lock);
4674 ret = lan8841_ptp_update_target(ptp_priv, &ts);
4675 mutex_unlock(&ptp_priv->ptp_lock);
4686 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4688 struct phy_device *phydev = ptp_priv->phydev;
4703 mutex_lock(&ptp_priv->ptp_lock);
4708 mutex_unlock(&ptp_priv->ptp_lock);
4733 static int lan8841_ptp_perout_off(struct kszphy_ptp_priv *ptp_priv, int pin)
4735 struct phy_device *phydev = ptp_priv->phydev;
4749 static int lan8841_ptp_perout_on(struct kszphy_ptp_priv *ptp_priv, int pin)
4751 struct phy_device *phydev = ptp_priv->phydev;
4778 static int lan8841_ptp_remove_event(struct kszphy_ptp_priv *ptp_priv, int pin,
4781 struct phy_device *phydev = ptp_priv->phydev;
4809 static int lan8841_ptp_enable_event(struct kszphy_ptp_priv *ptp_priv, int pin,
4812 struct phy_device *phydev = ptp_priv->phydev;
4869 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4871 struct phy_device *phydev = ptp_priv->phydev;
4881 pin = ptp_find_pin(ptp_priv->ptp_clock, PTP_PF_PEROUT, rq->perout.index);
4886 ret = lan8841_ptp_perout_off(ptp_priv, pin);
4890 return lan8841_ptp_remove_event(ptp_priv, LAN8841_EVENT_A, pin);
4963 mutex_lock(&ptp_priv->ptp_lock);
4964 ret = lan8841_ptp_set_target(ptp_priv, LAN8841_EVENT_A, rq->perout.start.sec,
4966 mutex_unlock(&ptp_priv->ptp_lock);
4970 ret = lan8841_ptp_set_reload(ptp_priv, LAN8841_EVENT_A, rq->perout.period.sec,
4975 ret = lan8841_ptp_enable_event(ptp_priv, pin, LAN8841_EVENT_A,
4980 ret = lan8841_ptp_perout_on(ptp_priv, pin);
4982 lan8841_ptp_remove_event(ptp_priv, pin, LAN8841_EVENT_A);
4992 static int lan8841_ptp_extts_on(struct kszphy_ptp_priv *ptp_priv, int pin,
4995 struct phy_device *phydev = ptp_priv->phydev;
5023 static int lan8841_ptp_extts_off(struct kszphy_ptp_priv *ptp_priv, int pin)
5025 struct phy_device *phydev = ptp_priv->phydev;
5054 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
5065 pin = ptp_find_pin(ptp_priv->ptp_clock, PTP_PF_EXTTS, rq->extts.index);
5069 mutex_lock(&ptp_priv->ptp_lock);
5071 ret = lan8841_ptp_extts_on(ptp_priv, pin, rq->extts.flags);
5073 ret = lan8841_ptp_extts_off(ptp_priv, pin);
5074 mutex_unlock(&ptp_priv->ptp_lock);
5096 struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
5101 lan8841_ptp_getseconds(&ptp_priv->ptp_clock_info, &ts);
5103 spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
5104 ptp_priv->seconds = ts.tv_sec;
5105 spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
5131 struct kszphy_ptp_priv *ptp_priv;
5149 ptp_priv = &priv->ptp_priv;
5151 ptp_priv->pin_config = devm_kcalloc(&phydev->mdio.dev,
5153 sizeof(*ptp_priv->pin_config),
5155 if (!ptp_priv->pin_config)
5159 struct ptp_pin_desc *p = &ptp_priv->pin_config[i];
5166 ptp_priv->ptp_clock_info = lan8841_ptp_clock_info;
5167 ptp_priv->ptp_clock_info.pin_config = ptp_priv->pin_config;
5168 ptp_priv->ptp_clock = ptp_clock_register(&ptp_priv->ptp_clock_info,
5170 if (IS_ERR(ptp_priv->ptp_clock)) {
5172 PTR_ERR(ptp_priv->ptp_clock));
5176 if (!ptp_priv->ptp_clock)
5180 skb_queue_head_init(&ptp_priv->tx_queue);
5181 ptp_priv->phydev = phydev;
5182 mutex_init(&ptp_priv->ptp_lock);
5183 spin_lock_init(&ptp_priv->seconds_lock);
5185 ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
5186 ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
5187 ptp_priv->mii_ts.hwtstamp = lan8841_hwtstamp;
5188 ptp_priv->mii_ts.ts_info = lan8841_ts_info;
5190 phydev->mii_ts = &ptp_priv->mii_ts;
5198 struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
5200 if (ptp_priv->ptp_clock)
5201 ptp_cancel_worker_sync(ptp_priv->ptp_clock);