Lines Matching refs:dp83640
228 struct dp83640_private *dp83640 = phydev->priv; in ext_read() local
231 if (dp83640->clock->page != page) { in ext_read()
233 dp83640->clock->page = page; in ext_read()
244 struct dp83640_private *dp83640 = phydev->priv; in ext_write() local
246 if (dp83640->clock->page != page) { in ext_write()
248 dp83640->clock->page = page; in ext_write()
307 struct dp83640_private *dp83640 = clock->chosen; in periodic_output() local
308 struct phy_device *phydev = dp83640->phydev; in periodic_output()
551 struct dp83640_private *dp83640 = phydev->priv; in enable_status_frames() local
552 struct dp83640_clock *clock = dp83640->clock; in enable_status_frames()
599 static void prune_rx_ts(struct dp83640_private *dp83640) in prune_rx_ts() argument
604 list_for_each_safe(this, next, &dp83640->rxts) { in prune_rx_ts()
608 list_add(&rxts->list, &dp83640->rxpool); in prune_rx_ts()
742 static int decode_evnt(struct dp83640_private *dp83640, in decode_evnt() argument
770 dp83640->edata.sec_hi = phy_txts->sec_hi; in decode_evnt()
773 dp83640->edata.sec_lo = phy_txts->sec_lo; in decode_evnt()
776 dp83640->edata.ns_hi = phy_txts->ns_hi; in decode_evnt()
779 dp83640->edata.ns_lo = phy_txts->ns_lo; in decode_evnt()
788 event.timestamp = phy2txts(&dp83640->edata); in decode_evnt()
796 ptp_clock_event(dp83640->clock->ptp_clock, &event); in decode_evnt()
835 static void decode_rxts(struct dp83640_private *dp83640, in decode_rxts() argument
848 spin_lock_irqsave(&dp83640->rx_lock, flags); in decode_rxts()
850 prune_rx_ts(dp83640); in decode_rxts()
852 if (list_empty(&dp83640->rxpool)) { in decode_rxts()
856 rxts = list_first_entry(&dp83640->rxpool, struct rxts, list); in decode_rxts()
860 spin_lock(&dp83640->rx_queue.lock); in decode_rxts()
861 skb_queue_walk(&dp83640->rx_queue, skb) { in decode_rxts()
866 __skb_unlink(skb, &dp83640->rx_queue); in decode_rxts()
870 list_add(&rxts->list, &dp83640->rxpool); in decode_rxts()
874 spin_unlock(&dp83640->rx_queue.lock); in decode_rxts()
877 list_add_tail(&rxts->list, &dp83640->rxts); in decode_rxts()
879 spin_unlock_irqrestore(&dp83640->rx_lock, flags); in decode_rxts()
885 static void decode_txts(struct dp83640_private *dp83640, in decode_txts() argument
896 skb = skb_dequeue(&dp83640->tx_queue); in decode_txts()
907 skb = skb_dequeue(&dp83640->tx_queue); in decode_txts()
923 static void decode_status_frame(struct dp83640_private *dp83640, in decode_status_frame() argument
945 decode_rxts(dp83640, phy_rxts); in decode_status_frame()
951 decode_txts(dp83640, phy_txts); in decode_status_frame()
956 size = decode_evnt(dp83640, ptr, len, ests); in decode_status_frame()
1105 struct dp83640_private *dp83640 = phydev->priv; in dp83640_config_init() local
1106 struct dp83640_clock *clock = dp83640->clock; in dp83640_config_init()
1214 struct dp83640_private *dp83640 = in dp83640_hwtstamp() local
1221 dp83640->hwts_tx_en = cfg->tx_type; in dp83640_hwtstamp()
1225 dp83640->hwts_rx_en = 0; in dp83640_hwtstamp()
1226 dp83640->layer = 0; in dp83640_hwtstamp()
1227 dp83640->version = 0; in dp83640_hwtstamp()
1232 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1233 dp83640->layer = PTP_CLASS_L4; in dp83640_hwtstamp()
1234 dp83640->version = PTP_CLASS_V1; in dp83640_hwtstamp()
1240 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1241 dp83640->layer = PTP_CLASS_L4; in dp83640_hwtstamp()
1242 dp83640->version = PTP_CLASS_V2; in dp83640_hwtstamp()
1248 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1249 dp83640->layer = PTP_CLASS_L2; in dp83640_hwtstamp()
1250 dp83640->version = PTP_CLASS_V2; in dp83640_hwtstamp()
1256 dp83640->hwts_rx_en = 1; in dp83640_hwtstamp()
1257 dp83640->layer = PTP_CLASS_L4 | PTP_CLASS_L2; in dp83640_hwtstamp()
1258 dp83640->version = PTP_CLASS_V2; in dp83640_hwtstamp()
1265 txcfg0 = (dp83640->version & TX_PTP_VER_MASK) << TX_PTP_VER_SHIFT; in dp83640_hwtstamp()
1266 rxcfg0 = (dp83640->version & TX_PTP_VER_MASK) << TX_PTP_VER_SHIFT; in dp83640_hwtstamp()
1268 if (dp83640->layer & PTP_CLASS_L2) { in dp83640_hwtstamp()
1272 if (dp83640->layer & PTP_CLASS_L4) { in dp83640_hwtstamp()
1277 if (dp83640->hwts_tx_en) in dp83640_hwtstamp()
1280 if (dp83640->hwts_tx_en == HWTSTAMP_TX_ONESTEP_SYNC) in dp83640_hwtstamp()
1283 if (dp83640->hwts_rx_en) in dp83640_hwtstamp()
1286 mutex_lock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1288 ext_write(0, dp83640->phydev, PAGE5, PTP_TXCFG0, txcfg0); in dp83640_hwtstamp()
1289 ext_write(0, dp83640->phydev, PAGE5, PTP_RXCFG0, rxcfg0); in dp83640_hwtstamp()
1291 mutex_unlock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1298 struct dp83640_private *dp83640 = in rx_timestamp_work() local
1303 while ((skb = skb_dequeue(&dp83640->rx_queue))) { in rx_timestamp_work()
1308 skb_queue_head(&dp83640->rx_queue, skb); in rx_timestamp_work()
1315 if (!skb_queue_empty(&dp83640->rx_queue)) in rx_timestamp_work()
1316 schedule_delayed_work(&dp83640->ts_work, SKB_TIMESTAMP_TIMEOUT); in rx_timestamp_work()
1322 struct dp83640_private *dp83640 = in dp83640_rxtstamp() local
1331 decode_status_frame(dp83640, skb); in dp83640_rxtstamp()
1336 if (!dp83640->hwts_rx_en) in dp83640_rxtstamp()
1339 if ((type & dp83640->version) == 0 || (type & dp83640->layer) == 0) in dp83640_rxtstamp()
1342 spin_lock_irqsave(&dp83640->rx_lock, flags); in dp83640_rxtstamp()
1343 prune_rx_ts(dp83640); in dp83640_rxtstamp()
1344 list_for_each_safe(this, next, &dp83640->rxts) { in dp83640_rxtstamp()
1351 list_add(&rxts->list, &dp83640->rxpool); in dp83640_rxtstamp()
1355 spin_unlock_irqrestore(&dp83640->rx_lock, flags); in dp83640_rxtstamp()
1360 skb_queue_tail(&dp83640->rx_queue, skb); in dp83640_rxtstamp()
1361 schedule_delayed_work(&dp83640->ts_work, SKB_TIMESTAMP_TIMEOUT); in dp83640_rxtstamp()
1373 struct dp83640_private *dp83640 = in dp83640_txtstamp() local
1376 switch (dp83640->hwts_tx_en) { in dp83640_txtstamp()
1387 skb_queue_tail(&dp83640->tx_queue, skb); in dp83640_txtstamp()
1400 struct dp83640_private *dp83640 = in dp83640_ts_info() local
1407 info->phc_index = ptp_clock_index(dp83640->clock->ptp_clock); in dp83640_ts_info()
1424 struct dp83640_private *dp83640; in dp83640_probe() local
1434 dp83640 = kzalloc(sizeof(struct dp83640_private), GFP_KERNEL); in dp83640_probe()
1435 if (!dp83640) in dp83640_probe()
1438 dp83640->phydev = phydev; in dp83640_probe()
1439 dp83640->mii_ts.rxtstamp = dp83640_rxtstamp; in dp83640_probe()
1440 dp83640->mii_ts.txtstamp = dp83640_txtstamp; in dp83640_probe()
1441 dp83640->mii_ts.hwtstamp = dp83640_hwtstamp; in dp83640_probe()
1442 dp83640->mii_ts.ts_info = dp83640_ts_info; in dp83640_probe()
1444 INIT_DELAYED_WORK(&dp83640->ts_work, rx_timestamp_work); in dp83640_probe()
1445 INIT_LIST_HEAD(&dp83640->rxts); in dp83640_probe()
1446 INIT_LIST_HEAD(&dp83640->rxpool); in dp83640_probe()
1448 list_add(&dp83640->rx_pool_data[i].list, &dp83640->rxpool); in dp83640_probe()
1452 phydev->mii_ts = &dp83640->mii_ts; in dp83640_probe()
1453 phydev->priv = dp83640; in dp83640_probe()
1455 spin_lock_init(&dp83640->rx_lock); in dp83640_probe()
1456 skb_queue_head_init(&dp83640->rx_queue); in dp83640_probe()
1457 skb_queue_head_init(&dp83640->tx_queue); in dp83640_probe()
1459 dp83640->clock = clock; in dp83640_probe()
1462 clock->chosen = dp83640; in dp83640_probe()
1470 list_add_tail(&dp83640->list, &clock->phylist); in dp83640_probe()
1477 kfree(dp83640); in dp83640_probe()
1488 struct dp83640_private *tmp, *dp83640 = phydev->priv; in dp83640_remove() local
1496 cancel_delayed_work_sync(&dp83640->ts_work); in dp83640_remove()
1498 skb_queue_purge(&dp83640->rx_queue); in dp83640_remove()
1499 skb_queue_purge(&dp83640->tx_queue); in dp83640_remove()
1501 clock = dp83640_clock_get(dp83640->clock); in dp83640_remove()
1503 if (dp83640 == clock->chosen) { in dp83640_remove()
1509 if (tmp == dp83640) { in dp83640_remove()
1517 kfree(dp83640); in dp83640_remove()