Exemplo n.º 1
0
static int ptp_ixp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
{
	u64 ns;
	unsigned long flags;
	struct ixp_clock *ixp_clock = container_of(ptp, struct ixp_clock, caps);
	struct ixp46x_ts_regs *regs = ixp_clock->regs;

	spin_lock_irqsave(&register_lock, flags);

	ns = ixp_systime_read(regs);

	spin_unlock_irqrestore(&register_lock, flags);

	*ts = ns_to_timespec64(ns);
	return 0;
}
Exemplo n.º 2
0
static int ptp_ixp_adjtime(struct ptp_clock_info *ptp, s64 delta)
{
    s64 now;
    unsigned long flags;
    struct ixp_clock *ixp_clock = container_of(ptp, struct ixp_clock, caps);
    struct ixp46x_ts_regs *regs = ixp_clock->regs;

    spin_lock_irqsave(&register_lock, flags);

    now = ixp_systime_read(regs);
    now += delta;
    ixp_systime_write(regs, now);

    spin_unlock_irqrestore(&register_lock, flags);

    return 0;
}
Exemplo n.º 3
0
static int ptp_ixp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
{
    u64 ns;
    u32 remainder;
    unsigned long flags;
    struct ixp_clock *ixp_clock = container_of(ptp, struct ixp_clock, caps);
    struct ixp46x_ts_regs *regs = ixp_clock->regs;

    spin_lock_irqsave(&register_lock, flags);

    ns = ixp_systime_read(regs);

    spin_unlock_irqrestore(&register_lock, flags);

    ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder);
    ts->tv_nsec = remainder;
    return 0;
}