static int bfin_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) { s64 now; unsigned long flags; struct bfin_mac_local *lp = container_of(ptp, struct bfin_mac_local, caps); spin_lock_irqsave(&lp->phc_lock, flags); now = bfin_ptp_time_read(lp); now += delta; bfin_ptp_time_write(lp, now); spin_unlock_irqrestore(&lp->phc_lock, flags); return 0; }
static int bfin_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) { u64 ns; unsigned long flags; struct bfin_mac_local *lp = container_of(ptp, struct bfin_mac_local, caps); spin_lock_irqsave(&lp->phc_lock, flags); ns = bfin_ptp_time_read(lp); spin_unlock_irqrestore(&lp->phc_lock, flags); *ts = ns_to_timespec64(ns); return 0; }
static int bfin_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts) { u64 ns; u32 remainder; unsigned long flags; struct bfin_mac_local *lp = container_of(ptp, struct bfin_mac_local, caps); spin_lock_irqsave(&lp->phc_lock, flags); ns = bfin_ptp_time_read(lp); spin_unlock_irqrestore(&lp->phc_lock, flags); ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder); ts->tv_nsec = remainder; return 0; }