Lines Matching refs:dp83640
230 struct dp83640_private *dp83640 = phydev->priv; in ext_read() local
233 if (dp83640->clock->page != page) { in ext_read()
235 dp83640->clock->page = page; in ext_read()
246 struct dp83640_private *dp83640 = phydev->priv; in ext_write() local
248 if (dp83640->clock->page != page) { in ext_write()
250 dp83640->clock->page = page; in ext_write()
309 struct dp83640_private *dp83640 = clock->chosen; in periodic_output() local
310 struct phy_device *phydev = dp83640->phydev; in periodic_output()
537 struct dp83640_private *dp83640 = phydev->priv; in enable_status_frames() local
538 struct dp83640_clock *clock = dp83640->clock; in enable_status_frames()
584 static void prune_rx_ts(struct dp83640_private *dp83640) in prune_rx_ts() argument
589 list_for_each_safe(this, next, &dp83640->rxts) { in prune_rx_ts()
593 list_add(&rxts->list, &dp83640->rxpool); in prune_rx_ts()
732 static int decode_evnt(struct dp83640_private *dp83640, in decode_evnt() argument
760 dp83640->edata.sec_hi = phy_txts->sec_hi; in decode_evnt()
762 dp83640->edata.sec_lo = phy_txts->sec_lo; in decode_evnt()
764 dp83640->edata.ns_hi = phy_txts->ns_hi; in decode_evnt()
766 dp83640->edata.ns_lo = phy_txts->ns_lo; in decode_evnt()
775 event.timestamp = phy2txts(&dp83640->edata); in decode_evnt()
783 ptp_clock_event(dp83640->clock->ptp_clock, &event); in decode_evnt()
829 static void decode_rxts(struct dp83640_private *dp83640, in decode_rxts() argument
842 spin_lock_irqsave(&dp83640->rx_lock, flags); in decode_rxts()
844 prune_rx_ts(dp83640); in decode_rxts()
846 if (list_empty(&dp83640->rxpool)) { in decode_rxts()
850 rxts = list_first_entry(&dp83640->rxpool, struct rxts, list); in decode_rxts()
854 spin_lock(&dp83640->rx_queue.lock); in decode_rxts()
855 skb_queue_walk(&dp83640->rx_queue, skb) { in decode_rxts()
860 __skb_unlink(skb, &dp83640->rx_queue); in decode_rxts()
865 list_add(&rxts->list, &dp83640->rxpool); in decode_rxts()
869 spin_unlock(&dp83640->rx_queue.lock); in decode_rxts()
872 list_add_tail(&rxts->list, &dp83640->rxts); in decode_rxts()
874 spin_unlock_irqrestore(&dp83640->rx_lock, flags); in decode_rxts()
877 static void decode_txts(struct dp83640_private *dp83640, in decode_txts() argument
887 skb = skb_dequeue(&dp83640->tx_queue); in decode_txts()
899 skb = skb_dequeue(&dp83640->tx_queue); in decode_txts()
910 static void decode_status_frame(struct dp83640_private *dp83640, in decode_status_frame() argument
932 decode_rxts(dp83640, phy_rxts); in decode_status_frame()
938 decode_txts(dp83640, phy_txts); in decode_status_frame()
943 size = decode_evnt(dp83640, ptr, len, ests); in decode_status_frame()
1108 struct dp83640_private *dp83640; in dp83640_probe() local
1118 dp83640 = kzalloc(sizeof(struct dp83640_private), GFP_KERNEL); in dp83640_probe()
1119 if (!dp83640) in dp83640_probe()
1122 dp83640->phydev = phydev; in dp83640_probe()
1123 INIT_WORK(&dp83640->ts_work, rx_timestamp_work); in dp83640_probe()
1125 INIT_LIST_HEAD(&dp83640->rxts); in dp83640_probe()
1126 INIT_LIST_HEAD(&dp83640->rxpool); in dp83640_probe()
1128 list_add(&dp83640->rx_pool_data[i].list, &dp83640->rxpool); in dp83640_probe()
1130 phydev->priv = dp83640; in dp83640_probe()
1132 spin_lock_init(&dp83640->rx_lock); in dp83640_probe()
1133 skb_queue_head_init(&dp83640->rx_queue); in dp83640_probe()
1134 skb_queue_head_init(&dp83640->tx_queue); in dp83640_probe()
1136 dp83640->clock = clock; in dp83640_probe()
1139 clock->chosen = dp83640; in dp83640_probe()
1146 list_add_tail(&dp83640->list, &clock->phylist); in dp83640_probe()
1153 kfree(dp83640); in dp83640_probe()
1164 struct dp83640_private *tmp, *dp83640 = phydev->priv; in dp83640_remove() local
1170 cancel_work_sync(&dp83640->ts_work); in dp83640_remove()
1172 skb_queue_purge(&dp83640->rx_queue); in dp83640_remove()
1173 skb_queue_purge(&dp83640->tx_queue); in dp83640_remove()
1175 clock = dp83640_clock_get(dp83640->clock); in dp83640_remove()
1177 if (dp83640 == clock->chosen) { in dp83640_remove()
1183 if (tmp == dp83640) { in dp83640_remove()
1191 kfree(dp83640); in dp83640_remove()
1196 struct dp83640_private *dp83640 = phydev->priv; in dp83640_config_init() local
1197 struct dp83640_clock *clock = dp83640->clock; in dp83640_config_init()
1277 struct dp83640_private *dp83640 = phydev->priv; in dp83640_hwtstamp() local
1290 dp83640->hwts_tx_en = cfg.tx_type; in dp83640_hwtstamp()
1294 dp83640->hwts_rx_en = 0; in dp83640_hwtstamp()
1295 dp83640->layer = 0; in dp83640_hwtstamp()
1296 dp83640->version = 0; in dp83640_hwtstamp()
1301 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1302 dp83640->layer = LAYER4; in dp83640_hwtstamp()
1303 dp83640->version = 1; in dp83640_hwtstamp()
1308 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1309 dp83640->layer = LAYER4; in dp83640_hwtstamp()
1310 dp83640->version = 2; in dp83640_hwtstamp()
1315 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1316 dp83640->layer = LAYER2; in dp83640_hwtstamp()
1317 dp83640->version = 2; in dp83640_hwtstamp()
1322 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1323 dp83640->layer = LAYER4|LAYER2; in dp83640_hwtstamp()
1324 dp83640->version = 2; in dp83640_hwtstamp()
1330 txcfg0 = (dp83640->version & TX_PTP_VER_MASK) << TX_PTP_VER_SHIFT; in dp83640_hwtstamp()
1331 rxcfg0 = (dp83640->version & TX_PTP_VER_MASK) << TX_PTP_VER_SHIFT; in dp83640_hwtstamp()
1333 if (dp83640->layer & LAYER2) { in dp83640_hwtstamp()
1337 if (dp83640->layer & LAYER4) { in dp83640_hwtstamp()
1342 if (dp83640->hwts_tx_en) in dp83640_hwtstamp()
1345 if (dp83640->hwts_tx_en == HWTSTAMP_TX_ONESTEP_SYNC) in dp83640_hwtstamp()
1348 if (dp83640->hwts_rx_en) in dp83640_hwtstamp()
1351 mutex_lock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1356 mutex_unlock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1363 struct dp83640_private *dp83640 = in rx_timestamp_work() local
1368 while ((skb = skb_dequeue(&dp83640->rx_queue))) { in rx_timestamp_work()
1373 skb_queue_head(&dp83640->rx_queue, skb); in rx_timestamp_work()
1380 if (!skb_queue_empty(&dp83640->rx_queue)) in rx_timestamp_work()
1381 schedule_work(&dp83640->ts_work); in rx_timestamp_work()
1387 struct dp83640_private *dp83640 = phydev->priv; in dp83640_rxtstamp() local
1395 decode_status_frame(dp83640, skb); in dp83640_rxtstamp()
1400 if (!dp83640->hwts_rx_en) in dp83640_rxtstamp()
1403 spin_lock_irqsave(&dp83640->rx_lock, flags); in dp83640_rxtstamp()
1404 list_for_each_safe(this, next, &dp83640->rxts) { in dp83640_rxtstamp()
1412 list_add(&rxts->list, &dp83640->rxpool); in dp83640_rxtstamp()
1416 spin_unlock_irqrestore(&dp83640->rx_lock, flags); in dp83640_rxtstamp()
1421 skb_queue_tail(&dp83640->rx_queue, skb); in dp83640_rxtstamp()
1422 schedule_work(&dp83640->ts_work); in dp83640_rxtstamp()
1431 struct dp83640_private *dp83640 = phydev->priv; in dp83640_txtstamp() local
1433 switch (dp83640->hwts_tx_en) { in dp83640_txtstamp()
1443 skb_queue_tail(&dp83640->tx_queue, skb); in dp83640_txtstamp()
1455 struct dp83640_private *dp83640 = dev->priv; in dp83640_ts_info() local
1461 info->phc_index = ptp_clock_index(dp83640->clock->ptp_clock); in dp83640_ts_info()