Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) *//* * Copyright (C) 2022-2024 OpenSynergy GmbH * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. */
#ifndef _LINUX_VIRTIO_RTC_H#define _LINUX_VIRTIO_RTC_H
#include <linux/types.h>
/* alarm feature */#define VIRTIO_RTC_F_ALARM 0
/* read request message types */
#define VIRTIO_RTC_REQ_READ 0x0001#define VIRTIO_RTC_REQ_READ_CROSS 0x0002
/* control request message types */
#define VIRTIO_RTC_REQ_CFG 0x1000#define VIRTIO_RTC_REQ_CLOCK_CAP 0x1001#define VIRTIO_RTC_REQ_CROSS_CAP 0x1002#define VIRTIO_RTC_REQ_READ_ALARM 0x1003#define VIRTIO_RTC_REQ_SET_ALARM 0x1004#define VIRTIO_RTC_REQ_SET_ALARM_ENABLED 0x1005
/* alarmq message types */
#define VIRTIO_RTC_NOTIF_ALARM 0x2000
/* Message headers */
/** common request header */struct virtio_rtc_req_head { __le16 msg_type; __u8 reserved[6];};
/** common response header */struct virtio_rtc_resp_head {#define VIRTIO_RTC_S_OK 0#define VIRTIO_RTC_S_EOPNOTSUPP 2#define VIRTIO_RTC_S_ENODEV 3#define VIRTIO_RTC_S_EINVAL 4#define VIRTIO_RTC_S_EIO 5 __u8 status; __u8 reserved[7];};
/** common notification header */struct virtio_rtc_notif_head { __le16 msg_type; __u8 reserved[6];};
/* read requests */
/* VIRTIO_RTC_REQ_READ message */
struct virtio_rtc_req_read { struct virtio_rtc_req_head head; __le16 clock_id; __u8 reserved[6];};
struct virtio_rtc_resp_read { struct virtio_rtc_resp_head head; __le64 clock_reading;};
/* VIRTIO_RTC_REQ_READ_CROSS message */
struct virtio_rtc_req_read_cross { struct virtio_rtc_req_head head; __le16 clock_id;/* Arm Generic Timer Counter-timer Virtual Count Register (CNTVCT_EL0) */#define VIRTIO_RTC_COUNTER_ARM_VCT 0/* x86 Time-Stamp Counter */#define VIRTIO_RTC_COUNTER_X86_TSC 1/* Invalid */#define VIRTIO_RTC_COUNTER_INVALID 0xFF __u8 hw_counter; __u8 reserved[5];};
struct virtio_rtc_resp_read_cross { struct virtio_rtc_resp_head head; __le64 clock_reading; __le64 counter_cycles;};
/* control requests */
/* VIRTIO_RTC_REQ_CFG message */
struct virtio_rtc_req_cfg { struct virtio_rtc_req_head head; /* no request params */};
struct virtio_rtc_resp_cfg { struct virtio_rtc_resp_head head; /** # of clocks -> clock ids < num_clocks are valid */ __le16 num_clocks; __u8 reserved[6];};
/* VIRTIO_RTC_REQ_CLOCK_CAP message */
struct virtio_rtc_req_clock_cap { struct virtio_rtc_req_head head; __le16 clock_id; __u8 reserved[6];};
struct virtio_rtc_resp_clock_cap { struct virtio_rtc_resp_head head;#define VIRTIO_RTC_CLOCK_UTC 0#define VIRTIO_RTC_CLOCK_TAI 1#define VIRTIO_RTC_CLOCK_MONOTONIC 2#define VIRTIO_RTC_CLOCK_UTC_SMEARED 3#define VIRTIO_RTC_CLOCK_UTC_MAYBE_SMEARED 4 __u8 type;#define VIRTIO_RTC_SMEAR_UNSPECIFIED 0#define VIRTIO_RTC_SMEAR_NOON_LINEAR 1#define VIRTIO_RTC_SMEAR_UTC_SLS 2 __u8 leap_second_smearing;#define VIRTIO_RTC_FLAG_ALARM_CAP (1 << 0) __u8 flags; __u8 reserved[5];};
/* VIRTIO_RTC_REQ_CROSS_CAP message */
struct virtio_rtc_req_cross_cap { struct virtio_rtc_req_head head; __le16 clock_id; __u8 hw_counter; __u8 reserved[5];};
struct virtio_rtc_resp_cross_cap { struct virtio_rtc_resp_head head;#define VIRTIO_RTC_FLAG_CROSS_CAP (1 << 0) __u8 flags; __u8 reserved[7];};
/* VIRTIO_RTC_REQ_READ_ALARM message */
struct virtio_rtc_req_read_alarm { struct virtio_rtc_req_head head; __le16 clock_id; __u8 reserved[6];};
struct virtio_rtc_resp_read_alarm { struct virtio_rtc_resp_head head; __le64 alarm_time;#define VIRTIO_RTC_FLAG_ALARM_ENABLED (1 << 0) __u8 flags; __u8 reserved[7];};
/* VIRTIO_RTC_REQ_SET_ALARM message */
struct virtio_rtc_req_set_alarm { struct virtio_rtc_req_head head; __le64 alarm_time; __le16 clock_id; /* flag VIRTIO_RTC_FLAG_ALARM_ENABLED */ __u8 flags; __u8 reserved[5];};
struct virtio_rtc_resp_set_alarm { struct virtio_rtc_resp_head head; /* no response params */};
/* VIRTIO_RTC_REQ_SET_ALARM_ENABLED message */
struct virtio_rtc_req_set_alarm_enabled { struct virtio_rtc_req_head head; __le16 clock_id; /* flag VIRTIO_RTC_ALARM_ENABLED */ __u8 flags; __u8 reserved[5];};
struct virtio_rtc_resp_set_alarm_enabled { struct virtio_rtc_resp_head head; /* no response params */};
/** Union of request types for requestq */union virtio_rtc_req_requestq { struct virtio_rtc_req_read read; struct virtio_rtc_req_read_cross read_cross; struct virtio_rtc_req_cfg cfg; struct virtio_rtc_req_clock_cap clock_cap; struct virtio_rtc_req_cross_cap cross_cap; struct virtio_rtc_req_read_alarm read_alarm; struct virtio_rtc_req_set_alarm set_alarm; struct virtio_rtc_req_set_alarm_enabled set_alarm_enabled;};
/** Union of response types for requestq */union virtio_rtc_resp_requestq { struct virtio_rtc_resp_read read; struct virtio_rtc_resp_read_cross read_cross; struct virtio_rtc_resp_cfg cfg; struct virtio_rtc_resp_clock_cap clock_cap; struct virtio_rtc_resp_cross_cap cross_cap; struct virtio_rtc_resp_read_alarm read_alarm; struct virtio_rtc_resp_set_alarm set_alarm; struct virtio_rtc_resp_set_alarm_enabled set_alarm_enabled;};
/* alarmq notifications */
/* VIRTIO_RTC_NOTIF_ALARM notification */
struct virtio_rtc_notif_alarm { struct virtio_rtc_notif_head head; __le16 clock_id; __u8 reserved[6];};
/** Union of notification types for alarmq */union virtio_rtc_notif_alarmq { struct virtio_rtc_notif_alarm alarm;};
#endif /* _LINUX_VIRTIO_RTC_H */