Lines Matching full:lif

67 static int ionic_lif_hwstamp_set_ts_config(struct ionic_lif *lif,
73 struct ionic *ionic = lif->ionic;
80 if (!lif->phc || !lif->phc->ptp)
83 mutex_lock(&lif->phc->config_lock);
95 memcpy(config, &lif->phc->ts_config, sizeof(*config));
96 memset(&lif->phc->ts_config, 0, sizeof(lif->phc->ts_config));
97 lif->phc->ts_config_tx_mode = 0;
98 lif->phc->ts_config_rx_filt = 0;
110 if ((ionic->ident.lif.eth.hwstamp_tx_modes & mask) != mask) {
121 if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) != mask) {
131 err = ionic_lif_create_hwstamp_txq(lif);
140 err = ionic_lif_create_hwstamp_rxq(lif);
148 if (tx_mode != lif->phc->ts_config_tx_mode) {
149 err = ionic_lif_set_hwstamp_txmode(lif, tx_mode);
157 if (rx_filt != lif->phc->ts_config_rx_filt) {
158 err = ionic_lif_set_hwstamp_rxfilt(lif, rx_filt);
166 if (rx_all != (lif->phc->ts_config.rx_filter == HWTSTAMP_FILTER_ALL)) {
167 err = ionic_lif_config_hwstamp_rxq_all(lif, rx_all);
175 memcpy(&lif->phc->ts_config, config, sizeof(*config));
176 lif->phc->ts_config_rx_filt = rx_filt;
177 lif->phc->ts_config_tx_mode = tx_mode;
179 mutex_unlock(&lif->phc->config_lock);
184 if (rx_filt != lif->phc->ts_config_rx_filt) {
185 rx_filt = lif->phc->ts_config_rx_filt;
186 err2 = ionic_lif_set_hwstamp_rxfilt(lif, rx_filt);
192 if (tx_mode != lif->phc->ts_config_tx_mode) {
193 tx_mode = lif->phc->ts_config_tx_mode;
194 err2 = ionic_lif_set_hwstamp_txmode(lif, tx_mode);
202 mutex_unlock(&lif->phc->config_lock);
210 struct ionic_lif *lif = netdev_priv(netdev);
213 if (!lif->phc || !lif->phc->ptp)
216 mutex_lock(&lif->queue_lock);
217 err = ionic_lif_hwstamp_set_ts_config(lif, config, extack);
218 mutex_unlock(&lif->queue_lock);
220 netdev_info(lif->netdev, "hwstamp set failed: %d\n", err);
227 void ionic_lif_hwstamp_replay(struct ionic_lif *lif)
231 if (!lif->phc || !lif->phc->ptp)
234 mutex_lock(&lif->queue_lock);
235 err = ionic_lif_hwstamp_set_ts_config(lif, NULL, NULL);
236 mutex_unlock(&lif->queue_lock);
238 netdev_info(lif->netdev, "hwstamp replay failed: %d\n", err);
241 void ionic_lif_hwstamp_recreate_queues(struct ionic_lif *lif)
245 if (!lif->phc || !lif->phc->ptp)
248 mutex_lock(&lif->phc->config_lock);
250 if (lif->phc->ts_config_tx_mode) {
251 err = ionic_lif_create_hwstamp_txq(lif);
253 netdev_info(lif->netdev, "hwstamp recreate txq failed: %d\n", err);
256 if (lif->phc->ts_config_rx_filt) {
257 err = ionic_lif_create_hwstamp_rxq(lif);
259 netdev_info(lif->netdev, "hwstamp recreate rxq failed: %d\n", err);
262 mutex_unlock(&lif->phc->config_lock);
268 struct ionic_lif *lif = netdev_priv(netdev);
270 if (!lif->phc || !lif->phc->ptp)
273 mutex_lock(&lif->phc->config_lock);
274 memcpy(config, &lif->phc->ts_config, sizeof(*config));
275 mutex_unlock(&lif->phc->config_lock);
311 struct ionic *ionic = phc->lif->ionic;
321 ctx->cmd.lif_setphc.lif_index = cpu_to_le16(phc->lif->index);
329 return ionic_adminq_post(phc->lif, ctx);
341 if (test_bit(IONIC_LIF_F_FW_RESET, phc->lif->state))
366 return ionic_adminq_wait(phc->lif, &ctx, err, true);
377 if (test_bit(IONIC_LIF_F_FW_RESET, phc->lif->state))
391 return ionic_adminq_wait(phc->lif, &ctx, err, true);
404 if (test_bit(IONIC_LIF_F_FW_RESET, phc->lif->state))
420 return ionic_adminq_wait(phc->lif, &ctx, err, true);
428 struct ionic *ionic = phc->lif->ionic;
433 if (test_bit(IONIC_LIF_F_FW_RESET, phc->lif->state))
462 if (test_bit(IONIC_LIF_F_FW_RESET, phc->lif->state))
477 ionic_adminq_wait(phc->lif, &ctx, err, true);
482 ktime_t ionic_lif_phc_ktime(struct ionic_lif *lif, u64 tick)
487 if (!lif->phc)
490 spin_lock_irqsave(&lif->phc->lock, irqflags);
491 ns = timecounter_cyc2time(&lif->phc->tc, tick);
492 spin_unlock_irqrestore(&lif->phc->lock, irqflags);
507 void ionic_lif_register_phc(struct ionic_lif *lif)
509 if (!lif->phc || !(lif->hw_features & IONIC_ETH_HW_TIMESTAMP))
512 lif->phc->ptp = ptp_clock_register(&lif->phc->ptp_info, lif->ionic->dev);
514 if (IS_ERR(lif->phc->ptp)) {
515 dev_warn(lif->ionic->dev, "Cannot register phc device: %ld\n",
516 PTR_ERR(lif->phc->ptp));
518 lif->phc->ptp = NULL;
521 if (lif->phc->ptp)
522 ptp_schedule_worker(lif->phc->ptp, lif->phc->aux_work_delay);
525 void ionic_lif_unregister_phc(struct ionic_lif *lif)
527 if (!lif->phc || !lif->phc->ptp)
530 ptp_clock_unregister(lif->phc->ptp);
532 lif->phc->ptp = NULL;
535 void ionic_lif_alloc_phc(struct ionic_lif *lif)
537 struct ionic *ionic = lif->ionic;
547 features = le64_to_cpu(ionic->ident.lif.eth.config.features);
555 phc->lif = lif;
563 dev_err(lif->ionic->dev,
566 devm_kfree(lif->ionic->dev, phc);
567 lif->phc = NULL;
571 dev_dbg(lif->ionic->dev, "Device PHC mask %#llx mult %u shift %u\n",
627 dev_dbg(lif->ionic->dev, "Initial PHC mask %#llx mult %u shift %u\n",
638 dev_dbg(lif->ionic->dev, "Work delay %llu ms\n", delay / NSEC_PER_MSEC);
649 lif->phc = phc;
652 void ionic_lif_free_phc(struct ionic_lif *lif)
654 if (!lif->phc)
657 mutex_destroy(&lif->phc->config_lock);
659 devm_kfree(lif->ionic->dev, lif->phc);
660 lif->phc = NULL;