History

Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost

Pull virtio updates from Michael Tsirkin: - A new virtio RTC driver - vhost scsi now logs write descriptors so migration works - Some hardening work in virtio core - An old spec compliance issue fixed in vhost net - A couple of cleanups, fixes in vringh, virtio-pci, vdpa * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost: virtio: reject shm region if length is zero virtio_rtc: Add RTC class driver virtio_rtc: Add Arm Generic Timer cross-timestamping virtio_rtc: Add PTP clocks virtio_rtc: Add module and driver core vringh: use bvec_kmap_local vhost: vringh: Use matching allocation type in resize_iovec() virtio-pci: Fix result size returned for the admin command completion vdpa/octeon_ep: Control PCI dev enabling manually vhost-scsi: log event queue write descriptors vhost-scsi: log control queue write descriptors vhost-scsi: log I/O queue write descriptors vhost-scsi: adjust vhost_scsi_get_desc() to log vring descriptors vhost: modify vhost_log_write() for broader users

Linus Torvalds committed 1 year ago

Commit 8ca154e2 parents 43db111 206cc4415 files · +2707 −36Browse files

Showing the changes to include/uapi/linux (1 of 15 files). Show all

Unified · Split

include/uapi/linux/virtio_rtc.h+237−0
@@ -0,0 +1,237 @@
1+/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */
2+/*
3+ * Copyright (C) 2022-2024 OpenSynergy GmbH
4+ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
5+ */
6+
7+#ifndef _LINUX_VIRTIO_RTC_H
8+#define _LINUX_VIRTIO_RTC_H
9+
10+#include <linux/types.h>
11+
12+/* alarm feature */
13+#define VIRTIO_RTC_F_ALARM 0
14+
15+/* read request message types */
16+
17+#define VIRTIO_RTC_REQ_READ 0x0001
18+#define VIRTIO_RTC_REQ_READ_CROSS 0x0002
19+
20+/* control request message types */
21+
22+#define VIRTIO_RTC_REQ_CFG 0x1000
23+#define VIRTIO_RTC_REQ_CLOCK_CAP 0x1001
24+#define VIRTIO_RTC_REQ_CROSS_CAP 0x1002
25+#define VIRTIO_RTC_REQ_READ_ALARM 0x1003
26+#define VIRTIO_RTC_REQ_SET_ALARM 0x1004
27+#define VIRTIO_RTC_REQ_SET_ALARM_ENABLED 0x1005
28+
29+/* alarmq message types */
30+
31+#define VIRTIO_RTC_NOTIF_ALARM 0x2000
32+
33+/* Message headers */
34+
35+/** common request header */
36+struct virtio_rtc_req_head {
37+ __le16 msg_type;
38+ __u8 reserved[6];
39+};
40+
41+/** common response header */
42+struct virtio_rtc_resp_head {
43+#define VIRTIO_RTC_S_OK 0
44+#define VIRTIO_RTC_S_EOPNOTSUPP 2
45+#define VIRTIO_RTC_S_ENODEV 3
46+#define VIRTIO_RTC_S_EINVAL 4
47+#define VIRTIO_RTC_S_EIO 5
48+ __u8 status;
49+ __u8 reserved[7];
50+};
51+
52+/** common notification header */
53+struct virtio_rtc_notif_head {
54+ __le16 msg_type;
55+ __u8 reserved[6];
56+};
57+
58+/* read requests */
59+
60+/* VIRTIO_RTC_REQ_READ message */
61+
62+struct virtio_rtc_req_read {
63+ struct virtio_rtc_req_head head;
64+ __le16 clock_id;
65+ __u8 reserved[6];
66+};
67+
68+struct virtio_rtc_resp_read {
69+ struct virtio_rtc_resp_head head;
70+ __le64 clock_reading;
71+};
72+
73+/* VIRTIO_RTC_REQ_READ_CROSS message */
74+
75+struct virtio_rtc_req_read_cross {
76+ struct virtio_rtc_req_head head;
77+ __le16 clock_id;
78+/* Arm Generic Timer Counter-timer Virtual Count Register (CNTVCT_EL0) */
79+#define VIRTIO_RTC_COUNTER_ARM_VCT 0
80+/* x86 Time-Stamp Counter */
81+#define VIRTIO_RTC_COUNTER_X86_TSC 1
82+/* Invalid */
83+#define VIRTIO_RTC_COUNTER_INVALID 0xFF
84+ __u8 hw_counter;
85+ __u8 reserved[5];
86+};
87+
88+struct virtio_rtc_resp_read_cross {
89+ struct virtio_rtc_resp_head head;
90+ __le64 clock_reading;
91+ __le64 counter_cycles;
92+};
93+
94+/* control requests */
95+
96+/* VIRTIO_RTC_REQ_CFG message */
97+
98+struct virtio_rtc_req_cfg {
99+ struct virtio_rtc_req_head head;
100+ /* no request params */
101+};
102+
103+struct virtio_rtc_resp_cfg {
104+ struct virtio_rtc_resp_head head;
105+ /** # of clocks -> clock ids < num_clocks are valid */
106+ __le16 num_clocks;
107+ __u8 reserved[6];
108+};
109+
110+/* VIRTIO_RTC_REQ_CLOCK_CAP message */
111+
112+struct virtio_rtc_req_clock_cap {
113+ struct virtio_rtc_req_head head;
114+ __le16 clock_id;
115+ __u8 reserved[6];
116+};
117+
118+struct virtio_rtc_resp_clock_cap {
119+ struct virtio_rtc_resp_head head;
120+#define VIRTIO_RTC_CLOCK_UTC 0
121+#define VIRTIO_RTC_CLOCK_TAI 1
122+#define VIRTIO_RTC_CLOCK_MONOTONIC 2
123+#define VIRTIO_RTC_CLOCK_UTC_SMEARED 3
124+#define VIRTIO_RTC_CLOCK_UTC_MAYBE_SMEARED 4
125+ __u8 type;
126+#define VIRTIO_RTC_SMEAR_UNSPECIFIED 0
127+#define VIRTIO_RTC_SMEAR_NOON_LINEAR 1
128+#define VIRTIO_RTC_SMEAR_UTC_SLS 2
129+ __u8 leap_second_smearing;
130+#define VIRTIO_RTC_FLAG_ALARM_CAP (1 << 0)
131+ __u8 flags;
132+ __u8 reserved[5];
133+};
134+
135+/* VIRTIO_RTC_REQ_CROSS_CAP message */
136+
137+struct virtio_rtc_req_cross_cap {
138+ struct virtio_rtc_req_head head;
139+ __le16 clock_id;
140+ __u8 hw_counter;
141+ __u8 reserved[5];
142+};
143+
144+struct virtio_rtc_resp_cross_cap {
145+ struct virtio_rtc_resp_head head;
146+#define VIRTIO_RTC_FLAG_CROSS_CAP (1 << 0)
147+ __u8 flags;
148+ __u8 reserved[7];
149+};
150+
151+/* VIRTIO_RTC_REQ_READ_ALARM message */
152+
153+struct virtio_rtc_req_read_alarm {
154+ struct virtio_rtc_req_head head;
155+ __le16 clock_id;
156+ __u8 reserved[6];
157+};
158+
159+struct virtio_rtc_resp_read_alarm {
160+ struct virtio_rtc_resp_head head;
161+ __le64 alarm_time;
162+#define VIRTIO_RTC_FLAG_ALARM_ENABLED (1 << 0)
163+ __u8 flags;
164+ __u8 reserved[7];
165+};
166+
167+/* VIRTIO_RTC_REQ_SET_ALARM message */
168+
169+struct virtio_rtc_req_set_alarm {
170+ struct virtio_rtc_req_head head;
171+ __le64 alarm_time;
172+ __le16 clock_id;
173+ /* flag VIRTIO_RTC_FLAG_ALARM_ENABLED */
174+ __u8 flags;
175+ __u8 reserved[5];
176+};
177+
178+struct virtio_rtc_resp_set_alarm {
179+ struct virtio_rtc_resp_head head;
180+ /* no response params */
181+};
182+
183+/* VIRTIO_RTC_REQ_SET_ALARM_ENABLED message */
184+
185+struct virtio_rtc_req_set_alarm_enabled {
186+ struct virtio_rtc_req_head head;
187+ __le16 clock_id;
188+ /* flag VIRTIO_RTC_ALARM_ENABLED */
189+ __u8 flags;
190+ __u8 reserved[5];
191+};
192+
193+struct virtio_rtc_resp_set_alarm_enabled {
194+ struct virtio_rtc_resp_head head;
195+ /* no response params */
196+};
197+
198+/** Union of request types for requestq */
199+union virtio_rtc_req_requestq {
200+ struct virtio_rtc_req_read read;
201+ struct virtio_rtc_req_read_cross read_cross;
202+ struct virtio_rtc_req_cfg cfg;
203+ struct virtio_rtc_req_clock_cap clock_cap;
204+ struct virtio_rtc_req_cross_cap cross_cap;
205+ struct virtio_rtc_req_read_alarm read_alarm;
206+ struct virtio_rtc_req_set_alarm set_alarm;
207+ struct virtio_rtc_req_set_alarm_enabled set_alarm_enabled;
208+};
209+
210+/** Union of response types for requestq */
211+union virtio_rtc_resp_requestq {
212+ struct virtio_rtc_resp_read read;
213+ struct virtio_rtc_resp_read_cross read_cross;
214+ struct virtio_rtc_resp_cfg cfg;
215+ struct virtio_rtc_resp_clock_cap clock_cap;
216+ struct virtio_rtc_resp_cross_cap cross_cap;
217+ struct virtio_rtc_resp_read_alarm read_alarm;
218+ struct virtio_rtc_resp_set_alarm set_alarm;
219+ struct virtio_rtc_resp_set_alarm_enabled set_alarm_enabled;
220+};
221+
222+/* alarmq notifications */
223+
224+/* VIRTIO_RTC_NOTIF_ALARM notification */
225+
226+struct virtio_rtc_notif_alarm {
227+ struct virtio_rtc_notif_head head;
228+ __le16 clock_id;
229+ __u8 reserved[6];
230+};
231+
232+/** Union of notification types for alarmq */
233+union virtio_rtc_notif_alarmq {
234+ struct virtio_rtc_notif_alarm alarm;
235+};
236+
237+#endif /* _LINUX_VIRTIO_RTC_H */