brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · 1e0ffe8 Raw
71 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* cavium_ptp.h - PTP 1588 clock on Cavium hardware3 * Copyright (c) 2003-2015, 2017 Cavium, Inc.4 */5 6#ifndef CAVIUM_PTP_H7#define CAVIUM_PTP_H8 9#include <linux/ptp_clock_kernel.h>10#include <linux/timecounter.h>11 12struct cavium_ptp {13	struct pci_dev *pdev;14 15	/* Serialize access to cycle_counter, time_counter and hw_registers */16	spinlock_t spin_lock;17	struct cyclecounter cycle_counter;18	struct timecounter time_counter;19	void __iomem *reg_base;20 21	u32 clock_rate;22 23	struct ptp_clock_info ptp_info;24	struct ptp_clock *ptp_clock;25};26 27#if IS_REACHABLE(CONFIG_CAVIUM_PTP)28 29struct cavium_ptp *cavium_ptp_get(void);30void cavium_ptp_put(struct cavium_ptp *ptp);31 32static inline u64 cavium_ptp_tstamp2time(struct cavium_ptp *ptp, u64 tstamp)33{34	unsigned long flags;35	u64 ret;36 37	spin_lock_irqsave(&ptp->spin_lock, flags);38	ret = timecounter_cyc2time(&ptp->time_counter, tstamp);39	spin_unlock_irqrestore(&ptp->spin_lock, flags);40 41	return ret;42}43 44static inline int cavium_ptp_clock_index(struct cavium_ptp *clock)45{46	return ptp_clock_index(clock->ptp_clock);47}48 49#else50 51static inline struct cavium_ptp *cavium_ptp_get(void)52{53	return ERR_PTR(-ENODEV);54}55 56static inline void cavium_ptp_put(struct cavium_ptp *ptp) {}57 58static inline u64 cavium_ptp_tstamp2time(struct cavium_ptp *ptp, u64 tstamp)59{60	return 0;61}62 63static inline int cavium_ptp_clock_index(struct cavium_ptp *clock)64{65	return -1;66}67 68#endif69 70#endif71