File Index
Files and directories
Sign in
FILE

virtio_rtc_internal.h

File preview with syntax highlighting.

linux-6.19.14/drivers/virtio/virtio_rtc_internal.h C
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * virtio_rtc internal interfaces
  4 *
  5 * Copyright (C) 2022-2023 OpenSynergy GmbH
  6 * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
  7 */
  8
  9#ifndef _VIRTIO_RTC_INTERNAL_H_
 10#define _VIRTIO_RTC_INTERNAL_H_
 11
 12#include <linux/device.h>
 13#include <linux/err.h>
 14#include <linux/ptp_clock_kernel.h>
 15#include <linux/types.h>
 16
 17/* driver core IFs */
 18
 19struct viortc_dev;
 20
 21int viortc_read(struct viortc_dev *viortc, u16 vio_clk_id, u64 *reading);
 22int viortc_read_cross(struct viortc_dev *viortc, u16 vio_clk_id, u8 hw_counter,
 23		      u64 *reading, u64 *cycles);
 24int viortc_cross_cap(struct viortc_dev *viortc, u16 vio_clk_id, u8 hw_counter,
 25		     bool *supported);
 26int viortc_read_alarm(struct viortc_dev *viortc, u16 vio_clk_id,
 27		      u64 *alarm_time, bool *enabled);
 28int viortc_set_alarm(struct viortc_dev *viortc, u16 vio_clk_id, u64 alarm_time,
 29		     bool alarm_enable);
 30int viortc_set_alarm_enabled(struct viortc_dev *viortc, u16 vio_clk_id,
 31			     bool alarm_enable);
 32
 33struct viortc_class;
 34
 35struct viortc_class *viortc_class_from_dev(struct device *dev);
 36
 37/* PTP IFs */
 38
 39struct viortc_ptp_clock;
 40
 41#if IS_ENABLED(CONFIG_VIRTIO_RTC_PTP)
 42
 43struct viortc_ptp_clock *viortc_ptp_register(struct viortc_dev *viortc,
 44					     struct device *parent_dev,
 45					     u16 vio_clk_id,
 46					     const char *ptp_clock_name);
 47int viortc_ptp_unregister(struct viortc_ptp_clock *vio_ptp,
 48			  struct device *parent_dev);
 49
 50#else
 51
 52static inline struct viortc_ptp_clock *
 53viortc_ptp_register(struct viortc_dev *viortc, struct device *parent_dev,
 54		    u16 vio_clk_id, const char *ptp_clock_name)
 55{
 56	return NULL;
 57}
 58
 59static inline int viortc_ptp_unregister(struct viortc_ptp_clock *vio_ptp,
 60					struct device *parent_dev)
 61{
 62	return -ENODEV;
 63}
 64
 65#endif
 66
 67/* HW counter IFs */
 68
 69/**
 70 * viortc_hw_xtstamp_params() - get HW-specific xtstamp params
 71 * @hw_counter: virtio_rtc HW counter type
 72 * @cs_id: clocksource id corresponding to hw_counter
 73 *
 74 * Gets the HW-specific xtstamp params. Returns an error if the driver cannot
 75 * support xtstamp.
 76 *
 77 * Context: Process context.
 78 * Return: Zero on success, negative error code otherwise.
 79 */
 80int viortc_hw_xtstamp_params(u8 *hw_counter, enum clocksource_ids *cs_id);
 81
 82/* RTC class IFs */
 83
 84#if IS_ENABLED(CONFIG_VIRTIO_RTC_CLASS)
 85
 86void viortc_class_alarm(struct viortc_class *viortc_class, u16 vio_clk_id);
 87
 88void viortc_class_stop(struct viortc_class *viortc_class);
 89
 90int viortc_class_register(struct viortc_class *viortc_class);
 91
 92struct viortc_class *viortc_class_init(struct viortc_dev *viortc,
 93				       u16 vio_clk_id, bool have_alarm,
 94				       struct device *parent_dev);
 95
 96#else /* CONFIG_VIRTIO_RTC_CLASS */
 97
 98static inline void viortc_class_alarm(struct viortc_class *viortc_class,
 99				      u16 vio_clk_id)
100{
101}
102
103static inline void viortc_class_stop(struct viortc_class *viortc_class)
104{
105}
106
107static inline int viortc_class_register(struct viortc_class *viortc_class)
108{
109	return -ENODEV;
110}
111
112static inline struct viortc_class *viortc_class_init(struct viortc_dev *viortc,
113						     u16 vio_clk_id,
114						     bool have_alarm,
115						     struct device *parent_dev)
116{
117	return ERR_PTR(-ENODEV);
118}
119
120#endif /* CONFIG_VIRTIO_RTC_CLASS */
121
122#endif /* _VIRTIO_RTC_INTERNAL_H_ */
~/ Read-only file preview.