From: Cornelia Huck <cohuck@redhat.com>
To: Peter Hilber <peter.hilber@opensynergy.com>,
virtio-comment@lists.oasis-open.org
Cc: Peter Hilber <peter.hilber@opensynergy.com>
Subject: Re: [virtio-comment] [RFC PATCH] virtio-rtc: Add device specification.
Date: Mon, 17 Apr 2023 13:49:56 +0200 [thread overview]
Message-ID: <87zg76k9sr.fsf@redhat.com> (raw)
In-Reply-To: <20230313041116.126953-1-peter.hilber@opensynergy.com>
On Mon, Mar 13 2023, Peter Hilber <peter.hilber@opensynergy.com> wrote:
> This is a partial draft for a Real-Time Clock (RTC) device. The
> virtio-rtc device provides information about current time through one or
> more clocks.
>
> It is planned to add a timer/alarm feature as part of a draft spec
> update.
>
> The draft uses the "Timer/Clock" device id which is already part of the
> specification. This device id was registered a long time ago and should
> be unused according to the author's information. The name "RTC" was
> determined to be the best for a device which focuses on current time,
> but is up to discussion.
>
> For this device, there is a prototypical Linux kernel driver for which
> upstreaming is planned, and a proprietary device implementation.
>
> In the spec text, there is some redundancy between the informative and
> the normative text. The intent is that the informative text already
> gives all the essential information about the device.
>
> In the spec, clock ids are 64 bit wide to have unique ids when
> supporting clock hot-plugging in the future.
>
> Any feedback is appreciated very much.
>
> Signed-off-by: Peter Hilber <peter.hilber@opensynergy.com>
> ---
> conformance.tex | 2 +
> content.tex | 3 +-
> device-types/rtc/description.tex | 523 ++++++++++++++++++++++++
> device-types/rtc/device-conformance.tex | 10 +
> device-types/rtc/driver-conformance.tex | 9 +
> 5 files changed, 546 insertions(+), 1 deletion(-)
> create mode 100644 device-types/rtc/description.tex
> create mode 100644 device-types/rtc/device-conformance.tex
> create mode 100644 device-types/rtc/driver-conformance.tex
(...)
> +VIRTIO_RTC_S_INVAL indicates that
> +
> +\begin{itemize}
> +\item the driver request values are not allowed by the specification or
Do we need to specify that, as such a driver would be non-conforming
anyway?
> +\item the device read-only part of the message, or device write-only
> + part of the message, is too small.
> +\end{itemize}
> +
> +VIRTIO_RTC_S_DEVERR indicates that the device encountered an error while
> +executing the request, which could not be attributed to invalid input
> +from the driver.
Is there any way for the driver to find out whether the request has
partially been executed, and whether it should retry?
> +
> +All \field{reserved} fields are written as zero, and their value is
> +ignored.
> +
> +The set of clocks does not change after feature negotiation completion,
> +until device reset. The set of clocks should not change on device reset
> +either (similar to negotiated features). Clock identifiers are
> +zero-based, dense indices. All fields named \field{clock_id} contain
> +clock identifiers.
> +
> +\devicenormative{\subsubsection}{Device Operation}{Device Types / RTC Device / Device Operation}
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_OK if the device successfully
> +executed the request.
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_UNSUPP if the device could not
> +execute the specific request due to an implementation limitation.
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_UNSUPP for a request with a value
> +of the \field{message_type} field which is neither described in this
> +specification nor otherwise known to the implementation.
Should any such implementation limitations be guarded via feature bits?
I.e. can we drop _UNSUPP if we require features to be negotiated (and
per-clock capabilites being clearly communicated)?
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_UNSUPP for a request with a value
> +of the \field{hw_counter} field which is neither described in this
> +specification nor otherwise known to the implementation.
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_NODEV if the \field{clock_id} field
> +value supplied with the message request does not identify a clock.
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_INVAL if the request values are not
> +allowed by the specification and none of the previous requirements in
> +this document stipulated another \field{status}.
I think we can drop this (see above).
> +
> +For \field{struct virtio_rtc_resp_head}, the device MUST set the
> +\field{status} field to VIRTIO_RTC_S_INVAL if the device read-only part
> +of the message is too small.
(...)
> +\item[VIRTIO_RTC_M_CLOCK_CAP] discovers the capabilities of the clock
> +identified by the \field{clock_id} field.
> +
> +\begin{lstlisting}
> +#define VIRTIO_RTC_M_CLOCK_CAP 0x1001 /* message type */
> +
> +struct virtio_rtc_req_clock_cap {
> + struct virtio_rtc_req_head head;
> + __u8 reserved[4];
> + __le64 clock_id;
> +};
> +
> +struct virtio_rtc_resp_clock_cap {
> + struct virtio_rtc_resp_head head;
> + __le16 type;
> + __u8 reserved[10];
> +};
> +\end{lstlisting}
> +
> +The \field{type} field identifies the clock type. A device provides
> +zero or more clocks for a clock type. The following clock types are
> +defined:
> +
> +\begin{lstlisting}
> +#define VIRTIO_RTC_CLOCK_UTC 0
> +#define VIRTIO_RTC_CLOCK_TAI 1
> +#define VIRTIO_RTC_CLOCK_MONO 2
> +\end{lstlisting}
> +
> +VIRTIO_RTC_CLOCK_UTC uses the UTC (Coordinated Universal Time) time
> +standard. The device uses the time epoch of January 1, 1970, 00:00
> +UTC. This is the same epoch as \emph{Unix time}.
> +
> +VIRTIO_RTC_CLOCK_TAI uses the TAI (International Atomic Time) time
> +standard. The device uses the time epoch of January 1, 1970, 00:00
> +TAI.
> +
> +VIRTIO_RTC_CLOCK_MONO uses monotonic physical time (SI seconds
> +subdivisions) since some unspecified epoch. The VIRTIO_RTC_CLOCK_MONO
> +epoch is before or during device reset.
> +
> +Additional clock types may be standardized in the future.
> +Implementation-specific clock type definitions are not recommended and
> +use a clock type id greater than or equal to 0xF000.
Could this command return capabilities in addition to the type?
E.g. indicate whether a clock supports cross-timestamping?
> +
> +\end{description}
(...)
> +\drivernormative{\paragraph}{readq Operation}{Device Types / RTC Device / Device Operation / readq Operation}
> +
> +The driver MUST put the request into the device-readable part of the
> +readq message.
> +
> +The driver MUST allocate enough space for the response in the
> +device-writable part of the readq message.
> +
> +If VIRTIO_RTC_F_READ_CROSS was not negotiated, the driver MUST NOT send
> +the VIRTIO_RTC_M_READ_CROSS message.
There seems to be some dislike for doubly-negated statements, what
about:
"The driver MUST negotiate VIRTIO_RTC_F_READ_CROSS before sending a
VIRTIO_RTC_M_READ_CROSS message."
(...)
Generally, looks reasonable to me, but I'm not that familiar with clocks
and would appreciate if someone else took a look as well.
This publicly archived list offers a means to provide input to the
OASIS Virtual I/O Device (VIRTIO) TC.
In order to verify user consent to the Feedback License terms and
to minimize spam in the list archive, subscription is required
before posting.
Subscribe: virtio-comment-subscribe@lists.oasis-open.org
Unsubscribe: virtio-comment-unsubscribe@lists.oasis-open.org
List help: virtio-comment-help@lists.oasis-open.org
List archive: https://lists.oasis-open.org/archives/virtio-comment/
Feedback License: https://www.oasis-open.org/who/ipr/feedback_license.pdf
List Guidelines: https://www.oasis-open.org/policies-guidelines/mailing-lists
Committee: https://www.oasis-open.org/committees/virtio/
Join OASIS: https://www.oasis-open.org/join/
next prev parent reply other threads:[~2023-04-17 11:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-13 4:11 [virtio-comment] [RFC PATCH] virtio-rtc: Add device specification Peter Hilber
2023-04-17 11:49 ` Cornelia Huck [this message]
2023-04-26 10:07 ` Peter Hilber
2023-05-08 10:10 ` Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zg76k9sr.fsf@redhat.com \
--to=cohuck@redhat.com \
--cc=peter.hilber@opensynergy.com \
--cc=virtio-comment@lists.oasis-open.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.