All of lore.kernel.org
 help / color / mirror / Atom feed
* [virtio-comment] [PATCH] virtio-snd: add support for audio controls
@ 2021-04-20 18:32 Anton Yakovlev
  2021-05-18 14:20 ` [virtio-comment] " Anton Yakovlev
  2021-07-27 15:57 ` [virtio-comment] " Cornelia Huck
  0 siblings, 2 replies; 5+ messages in thread
From: Anton Yakovlev @ 2021-04-20 18:32 UTC (permalink / raw)
  To: virtio-comment
  Cc: liam.r.girdwood, tiwai, broonie, maz, james.morse,
	julien.thierry.kdev, suzuki.poulose, cdupontd, kraxel,
	jean-philippe, Anton Yakovlev

This patch extends the virtio sound device specification by adding
support for audio controls. Audio controls can be used to set the volume
level, mute/unmute the audio signal, switch different modes/states of
the virtual sound device, etc.

Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
---
 conformance.tex  |   5 +
 virtio-sound.tex | 374 ++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 378 insertions(+), 1 deletion(-)

diff --git a/conformance.tex b/conformance.tex
index a164cbb..0f97286 100644
--- a/conformance.tex
+++ b/conformance.tex
@@ -255,6 +255,8 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets}
 \item \ref{drivernormative:Device Types / Sound Device / Device Operation / PCM Stream Parameters}
 \item \ref{drivernormative:Device Types / Sound Device / Device Operation / PCM Output Stream}
 \item \ref{drivernormative:Device Types / Sound Device / Device Operation / PCM Input Stream}
+\item \ref{drivernormative:Device Types / Sound Device / Device Operation / Control Element Value}
+\item \ref{drivernormative:Device Types / Sound Device / Device Operation / Control Element Metadata}
 \end{itemize}
 
 \conformance{\subsection}{Memory Driver Conformance}\label{sec:Conformance / Driver Conformance / Memory Driver Conformance}
@@ -492,6 +494,9 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets}
 \item \ref{devicenormative:Device Types / Sound Device / Device Operation / PCM Output Stream}
 \item \ref{devicenormative:Device Types / Sound Device / Device Operation / PCM Input Stream}
 \item \ref{devicenormative:Device Types / Sound Device / Device Operation / Channel Map Information}
+\item \ref{devicenormative:Device Types / Sound Device / Device Operation / Control Element Information}
+\item \ref{devicenormative:Device Types / Sound Device / Device Operation / Control Element Metadata}
+\item \ref{devicenormative:Device Types / Sound Device / Device Operation / Control Element Notifications}
 \end{itemize}
 
 \conformance{\subsection}{Memory Device Conformance}\label{sec:Conformance / Device Conformance / Memory Device Conformance}
diff --git a/virtio-sound.tex b/virtio-sound.tex
index 195eadd..54c9c8e 100644
--- a/virtio-sound.tex
+++ b/virtio-sound.tex
@@ -41,7 +41,10 @@ \subsection{Virtqueues}\label{sec:Device Types / Sound Device / Virtqueues}
 
 \subsection{Feature Bits}\label{sec:Device Types / Sound Device / Feature Bits}
 
-None currently defined.
+\begin{description}
+\item[VIRTIO_SND_F_CTLS (0)]
+Device supports control elements.
+\end{description}
 
 \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device / Device Configuration Layout}
 
@@ -50,6 +53,7 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
     le32 jacks;
     le32 streams;
     le32 chmaps;
+    le32 controls;
 };
 \end{lstlisting}
 
@@ -62,6 +66,9 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
 PCM streams.
 \item[\field{chmaps}] (driver-read-only) indicates a total number of all available
 channel maps.
+\item[\field{controls}] (driver-read-only) indicates a total number of all available
+control elements if VIRTIO_SND_F_CTLS has been negotiated.
+
 \end{description}
 
 \subsection{Device Initialization}
@@ -74,12 +81,16 @@ \subsection{Device Initialization}
 about the available PCM streams.
 \item Read the \field{chmaps} field and send a control request to query information
 about the available channel maps.
+\item If VIRTIO_SND_F_CTLS has been negotiated, read the \field{controls} field
+and send a control request to query information about the available control elements.
 \item Populate the event queue with empty buffers.
 \end{enumerate}
 
 \drivernormative{\subsubsection}{Device Initialization}{Device Types / Sound Device / Device Initialization}
 
 \begin{itemize}
+\item The driver MUST NOT read the \field{controls} field
+if VIRTIO_SND_F_CTLS has not been negotiated.
 \item The driver MUST populate the event queue with empty buffers of at least
 the struct virtio_snd_event size.
 \item The driver MUST NOT put a device-readable buffers in the event queue.
@@ -108,6 +119,15 @@ \subsection{Device Operation}\label{sec:Device Types / Sound Device / Device Ope
     /* channel map control request types */
     VIRTIO_SND_R_CHMAP_INFO = 0x0200,
 
+    /* control element request types */
+    VIRTIO_SND_R_CTL_INFO = 0x0300,
+    VIRTIO_SND_R_CTL_ENUM_ITEMS,
+    VIRTIO_SND_R_CTL_READ,
+    VIRTIO_SND_R_CTL_WRITE,
+    VIRTIO_SND_R_CTL_TLV_READ,
+    VIRTIO_SND_R_CTL_TLV_WRITE,
+    VIRTIO_SND_R_CTL_TLV_COMMAND,
+
     /* jack event types */
     VIRTIO_SND_EVT_JACK_CONNECTED = 0x1000,
     VIRTIO_SND_EVT_JACK_DISCONNECTED,
@@ -116,6 +136,9 @@ \subsection{Device Operation}\label{sec:Device Types / Sound Device / Device Ope
     VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED = 0x1100,
     VIRTIO_SND_EVT_PCM_XRUN,
 
+    /* control element event types */
+    VIRTIO_SND_EVT_CTL_NOTIFY = 0x1200,
+
     /* common status codes */
     VIRTIO_SND_S_OK = 0x8000,
     VIRTIO_SND_S_BAD_MSG,
@@ -805,3 +828,352 @@ \subsubsection{Channel Map Control Messages}\label{sec:Device Types / Sound Devi
 \item The device MUST NOT set undefined direction values.
 \item The device MUST NOT set the channels value to more than VIRTIO_SND_CHMAP_MAX_SIZE.
 \end{itemize}
+
+\subsubsection{Control Elements}\label{sec:Device Types / Sound Device / Device Operation / Control Elements}
+
+Control elements can be used to set the volume level, mute/unmute the audio
+signal, switch different modes/states of the virtual sound device, etc. Design
+of virtual audio controls is based on and derived from ALSA audio controls.
+
+The device informs about the support of audio controls by setting the
+VIRTIO_SND_F_CTLS feature bit. If VIRTIO_SND_F_CTLS has been negotiated, the
+following messages are available for manipulation of control elements.
+
+A control request has, or consists of, a common header with the following
+layout structure:
+
+\begin{lstlisting}
+struct virtio_snd_ctl_hdr {
+    struct virtio_snd_hdr hdr;
+    le32 control_id;
+};
+\end{lstlisting}
+
+The header consists of the following device-readable fields:
+
+\begin{description}
+\item[\field{hdr}] specifies request type (VIRTIO_SND_R_CTL_*).
+\item[\field{control_id}] specifies a control element identifier from 0 to
+\field{virtio_snd_config::controls} - 1.
+\end{description}
+
+\paragraph{Query information}
+
+The VIRTIO_SND_R_CTL_INFO control message is used to query basic information
+about the available control elements.
+
+The request consists of the virtio_snd_query_info structure
+(see \nameref{sec:Device Types / Sound Device / Device Operation / Item Information Request}).
+The response consists of the virtio_snd_hdr structure, followed by the following
+control element information structures:
+
+\begin{lstlisting}
+enum {
+    VIRTIO_SND_CTL_ROLE_UNDEFINED = 0,
+    VIRTIO_SND_CTL_ROLE_VOLUME,
+    VIRTIO_SND_CTL_ROLE_MUTE,
+    VIRTIO_SND_CTL_ROLE_GAIN
+};
+
+enum {
+    VIRTIO_SND_CTL_TYPE_BOOLEAN = 0,
+    VIRTIO_SND_CTL_TYPE_INTEGER,
+    VIRTIO_SND_CTL_TYPE_INTEGER64,
+    VIRTIO_SND_CTL_TYPE_ENUMERATED,
+    VIRTIO_SND_CTL_TYPE_BYTES,
+    VIRTIO_SND_CTL_TYPE_IEC958
+};
+
+enum {
+    VIRTIO_SND_CTL_ACCESS_READ = 0,
+    VIRTIO_SND_CTL_ACCESS_WRITE,
+    VIRTIO_SND_CTL_ACCESS_VOLATILE,
+    VIRTIO_SND_CTL_ACCESS_INACTIVE,
+    VIRTIO_SND_CTL_ACCESS_TLV_READ,
+    VIRTIO_SND_CTL_ACCESS_TLV_WRITE,
+    VIRTIO_SND_CTL_ACCESS_TLV_COMMAND
+};
+
+struct virtio_snd_ctl_info {
+    struct virtio_snd_info hdr;
+    le32 role;
+    le32 type;
+    le32 access; /* 1 << VIRTIO_SND_CTL_ACCESS_XXX */
+    le32 count;
+    le32 index;
+    u8 name[44];
+    union {
+        struct {
+            le32 min;
+            le32 max;
+            le32 step;
+        } integer;
+        struct {
+            le64 min;
+            le64 max;
+            le64 step;
+        } integer64;
+        struct {
+            le32 items;
+        } enumerated;
+    } value;
+};
+\end{lstlisting}
+
+The structure contains the following device-writable fields:
+
+\begin{description}
+\item[\field{role}] indicates a role for the element. If the field value
+is not equal to UNDEFINED, then the least significant bit indicates the direction
+of data flow (VIRTIO_SND_D_*), and (\field{role} \& 0xfffffffe) >> 1 is equal to
+one of the following values (VIRTIO_SND_CTL_ROLE_*):
+\begin{description}
+\item[VOLUME] is for a volume control.
+\item[MUTE] is for a mute switch.
+\item[GAIN] is for a gain control.
+\end{description}
+\item[\field{type}] indicates the element value type (VIRTIO_SND_CTL_TYPE_*):
+\begin{description}
+\item[BOOLEAN] This is a special case of the INTEGER type, which can take only
+two values: 0 (off) and 1 (on).
+\item[INTEGER] 32-bit integer values.
+\item[INTEGER64] 64-bit integer values.
+\item[ENUMERATED] The value is represented by an array of ASCII strings.
+\item[BYTES] 8-bit integer values.
+\item[IEC958] This element is connected to the digital audio interface.
+The value is in the form of the virtio_snd_ctl_iec958 structure.
+\end{description}
+\item[\field{access}] indicates a bit mask describing access rights to the
+element (VIRTIO_SND_CTL_ACCESS_*):
+\begin{description}
+\item[READ] It is possible to read the value.
+\item[WRITE] It is possible to write (change) the value.
+\item[VOLATILE] The value may be changed without a notification.
+\item[INACTIVE] The element does actually nothing, but may be updated.
+\item[TLV_READ] It is possible to read metadata.
+\item[TLV_WRITE] It is possible to write (change) metadata.
+\item[TLV_COMMAND] It is possible to execute a command for metadata.
+\end{description}
+\item[\field{count}] indicates the number of \field{type} members that represent
+the value of the element.
+\item[\field{index}] indicates the index for an element with a non-unique \field{name}.
+\item[\field{name}] indicates the name identifier string for the element.
+\item[\field{value}] indicates some additional information about the value for
+certain types of elements:
+\begin{description}
+\item[\field{integer}]
+\item[\field{integer64}] \field{min} and \field{max} indicate minimum and maximum
+element values. \field{step} indicates a fixed step size for changing the element
+value between minimum and maximum values. The special value 0 means that the step
+has variable size.
+\item[\field{enumerated}] \field{items} indicates the number of items from which
+the element value can be selected.
+\end{description}
+\end{description}
+
+To query an array of items for elements with the ENUMERATED type, an additional
+VIRTIO_SND_R_CTL_ENUM_ITEMS control message is used. The request consists of the
+virtio_snd_ctl_hdr structure. The response consists of the virtio_snd_hdr structure,
+followed by an array of size \field{value.enumerated.items}, consisting of the following
+structures:
+
+\begin{lstlisting}
+struct virtio_snd_ctl_enum_item {
+    u8 item[64];
+};
+\end{lstlisting}
+
+The structure contains the only device-writable field:
+
+\begin{description}
+\item[\field{item}] indicates the name of an available element option.
+\end{description}
+
+\devicenormative{\subparagraph}{Control Element Information}{Device Types / Sound Device / Device Operation / Control Element Information}
+
+\begin{itemize}
+\item The device MUST NOT set undefined \field{role}, \field{type} and
+\field{access} values.
+\item The device MUST set the \field{count} to a value other than zero. The maximum
+allowed value depends on the element type:
+\begin{description}
+\item[BOOLEAN] 128
+\item[INTEGER] 128
+\item[INTEGER64] 64
+\item[ENUMERATED] 128
+\item[BYTES] 512
+\item[IEC958] 1
+\end{description}
+\item The device MUST set \field{name} and \field{item} fields to a non-empty
+0-terminated ASCII strings.
+\item The device MUST ensure that the combination (\field{name}, \field{index})
+is unique for each available element.
+\end{itemize}
+
+\paragraph{Value}
+
+If the element has VIRTIO_SND_CTL_ACCESS_READ access right, then the driver
+can issue VIRTIO_SND_R_CTL_READ request to the device to read the element's
+value.
+
+If the element has VIRTIO_SND_CTL_ACCESS_WRITE access right, then the driver
+can issue VIRTIO_SND_R_CTL_WRITE request to the device to write the element's
+value.
+
+The following structure and layout definitions are used in read and write requests:
+
+\begin{lstlisting}
+struct virtio_snd_ctl_iec958 {
+    u8 status[24];      /* AES/IEC958 channel status bits */
+    u8 subcode[147];    /* AES/IEC958 subcode bits */
+    u8 pad;             /* nothing */
+    u8 dig_subframe[4]; /* AES/IEC958 subframe bits */
+};
+
+struct virtio_snd_ctl_value {
+    union {
+        le32 integer[128];
+        le64 integer64[64];
+        le32 enumerated[128];
+        u8 bytes[512];
+        struct virtio_snd_ctl_iec958 iec958;
+    } value;
+};
+\end{lstlisting}
+
+The element value structure consists of a single \field{value} union, which
+contains the following fields:
+
+\begin{description}
+\item[\field{integer}] specifies values for an element of type BOOLEAN or
+INTEGER.
+\item[\field{integer64}] specifies values for an element of type INTEGER64.
+\item[\field{enumerated}] specifies indexes of items for an element of type
+ENUMERATED.
+\item[\field{bytes}] specifies values for an element of type BYTES.
+\item[\field{iec958}] specifies a value for an element of type IEC958.
+\end{description}
+
+For all types, except for IEC958, the array contains \field{count} values
+(the \field{count} is reported in the element information structure).
+
+A read request consists of a (device-readable) virtio_snd_ctl_hdr structure
+containing request, followed by (device-writable) virtio_snd_hdr and
+virtio_snd_ctl_value structures, into which the status of the request and
+the current value of the element will be written.
+
+A write request consists of (device-readable) virtio_snd_ctl_hdr and
+virtio_snd_ctl_value structures containing request and the new element value,
+followed by (device-writable) virtio_snd_hdr structure, into which the status
+of the request will be written.
+
+\drivernormative{\subparagraph}{Control Element Value}{Device Types / Sound Device / Device Operation / Control Element Value}
+
+\begin{itemize}
+\item The driver MUST NOT send READ request if the element does not have ACCESS_READ access right.
+\item The driver MUST NOT send WRITE request if the element does not have ACCESS_WRITE access right.
+\end{itemize}
+
+\paragraph{Metadata}
+
+Metadata can be used to provide additional (arbitrary) information about the
+element (e.g. dB range).
+
+If the element has VIRTIO_SND_CTL_ACCESS_TLV_READ access right, then the driver
+can issue VIRTIO_SND_R_CTL_TLV_READ request to the device to read the element's
+metadata.
+
+If the element has VIRTIO_SND_CTL_ACCESS_TLV_WRITE access right, then the driver
+can issue VIRTIO_SND_R_CTL_TLV_WRITE request to the device to write the element's
+metadata.
+
+If the element has VIRTIO_SND_CTL_ACCESS_TLV_COMMAND access right, then the driver
+can issue VIRTIO_SND_R_CTL_TLV_COMMAND request to the device to execute a command
+for element's metadata.
+
+All information related to metadata is presented in the form of TLV (Type-Length-Value):
+
+\begin{lstlisting}
+struct virtio_snd_ctl_tlv {
+    le32 type;
+    le32 length;
+    le32 value[];
+};
+\end{lstlisting}
+
+The structure contains the following fields:
+
+\begin{description}
+\item[\field{type}] specifies metadata type. ALSA defines several standard metadata
+types for control elements, details of which can be found in various ALSA documentation.
+Device implementers can also define their own types and formats.
+\item[\field{length}] specifies the \field{value} length in bytes aligned to 4.
+\item[\field{value}] contains metadata in form of an array of 4-byte integers.
+\end{description}
+
+A read request consists of a (device-readable) virtio_snd_ctl_hdr structure
+containing request, followed by (device-writable) virtio_snd_hdr and
+virtio_snd_ctl_tlv structures, into which the status of the request and
+element's metadata will be written.
+
+A write and command requests consist of (device-readable) virtio_snd_ctl_hdr and
+virtio_snd_ctl_tlv structures containing request and element's metadata/command
+content, followed by (device-writable) virtio_snd_hdr structure, into which the
+status of the request will be written.
+
+\devicenormative{\subparagraph}{Control Element Metadata}{Device Types / Sound Device / Device Operation / Control Element Metadata}
+
+\begin{itemize}
+\item For a read request, if there is not enough space in the \field{value} field,
+the device SHOULD write as much as it can and successfully complete the request.
+\end{itemize}
+
+\drivernormative{\subparagraph}{Control Element Metadata}{Device Types / Sound Device / Device Operation / Control Element Metadata}
+
+\begin{itemize}
+\item The driver MUST NOT send TLV_READ request if the element does not have
+ACCESS_TLV_READ access right.
+\item The driver MUST NOT send TLV_WRITE request if the element does not have
+ACCESS_TLV_WRITE access right.
+\item The driver MUST NOT send TLV_COMMAND request if the element does not have
+ACCESS_TLV_COMMAND access right.
+\item The driver MUST NOT submit the \field{value} field larger than 65536 bytes. 
+\end{itemize}
+
+\paragraph{Notifications}
+
+The notification uses the following structure and layout definitions:
+
+\begin{lstlisting}
+enum {
+    VIRTIO_SND_CTL_EVT_MASK_VALUE = 0,
+    VIRTIO_SND_CTL_EVT_MASK_INFO,
+    VIRTIO_SND_CTL_EVT_MASK_TLV
+};
+
+struct virtio_snd_ctl_event {
+    struct virtio_snd_hdr hdr; /* .code = VIRTIO_SND_EVT_CTL_NOTIFY */
+    le16 control_id;
+    le16 mask; /* 1 << VIRTIO_SND_CTL_EVT_MASK_XXX */
+};
+\end{lstlisting}
+
+The structure contains the following device-writable fields:
+
+\begin{description}
+\item[\field{control_id}] indicates a control element identifier from 0 to
+\field{virtio_snd_config::controls} - 1.
+\item[\field{mask}] indicates a bit mask describing the reason(s) for sending
+the notification (VIRTIO_SND_CTL_EVT_MASK_*):
+\begin{description}
+\item[VALUE] means the element's value has changed.
+\item[INFO] means the element's information has changed.
+\item[TLV] means the element's metadata has changed.
+\end{description}
+\end{description}
+
+\devicenormative{\subparagraph}{Control Element Notifications}{Device Types / Sound Device / Device Operation / Control Element Notifications}
+
+\begin{itemize}
+\item The device MUST NOT set undefined \field{mask} values.
+\end{itemize}
-- 
2.31.1



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/


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [virtio-comment] Re: [PATCH] virtio-snd: add support for audio controls
  2021-04-20 18:32 [virtio-comment] [PATCH] virtio-snd: add support for audio controls Anton Yakovlev
@ 2021-05-18 14:20 ` Anton Yakovlev
  2021-07-27 15:57 ` [virtio-comment] " Cornelia Huck
  1 sibling, 0 replies; 5+ messages in thread
From: Anton Yakovlev @ 2021-05-18 14:20 UTC (permalink / raw)
  To: virtio-comment

Kindly reminder. Any comments are appreciated.


On 20.04.2021 20:32, Anton Yakovlev wrote:
> This patch extends the virtio sound device specification by adding
> support for audio controls. Audio controls can be used to set the volume
> level, mute/unmute the audio signal, switch different modes/states of
> the virtual sound device, etc.
> 
> Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
> ---
>   conformance.tex  |   5 +
>   virtio-sound.tex | 374 ++++++++++++++++++++++++++++++++++++++++++++++-
>   2 files changed, 378 insertions(+), 1 deletion(-)
> 
> diff --git a/conformance.tex b/conformance.tex
> index a164cbb..0f97286 100644
> --- a/conformance.tex
> +++ b/conformance.tex
> @@ -255,6 +255,8 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets}
>   \item \ref{drivernormative:Device Types / Sound Device / Device Operation / PCM Stream Parameters}
>   \item \ref{drivernormative:Device Types / Sound Device / Device Operation / PCM Output Stream}
>   \item \ref{drivernormative:Device Types / Sound Device / Device Operation / PCM Input Stream}
> +\item \ref{drivernormative:Device Types / Sound Device / Device Operation / Control Element Value}
> +\item \ref{drivernormative:Device Types / Sound Device / Device Operation / Control Element Metadata}
>   \end{itemize}
>   
>   \conformance{\subsection}{Memory Driver Conformance}\label{sec:Conformance / Driver Conformance / Memory Driver Conformance}
> @@ -492,6 +494,9 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets}
>   \item \ref{devicenormative:Device Types / Sound Device / Device Operation / PCM Output Stream}
>   \item \ref{devicenormative:Device Types / Sound Device / Device Operation / PCM Input Stream}
>   \item \ref{devicenormative:Device Types / Sound Device / Device Operation / Channel Map Information}
> +\item \ref{devicenormative:Device Types / Sound Device / Device Operation / Control Element Information}
> +\item \ref{devicenormative:Device Types / Sound Device / Device Operation / Control Element Metadata}
> +\item \ref{devicenormative:Device Types / Sound Device / Device Operation / Control Element Notifications}
>   \end{itemize}
>   
>   \conformance{\subsection}{Memory Device Conformance}\label{sec:Conformance / Device Conformance / Memory Device Conformance}
> diff --git a/virtio-sound.tex b/virtio-sound.tex
> index 195eadd..54c9c8e 100644
> --- a/virtio-sound.tex
> +++ b/virtio-sound.tex
> @@ -41,7 +41,10 @@ \subsection{Virtqueues}\label{sec:Device Types / Sound Device / Virtqueues}
>   
>   \subsection{Feature Bits}\label{sec:Device Types / Sound Device / Feature Bits}
>   
> -None currently defined.
> +\begin{description}
> +\item[VIRTIO_SND_F_CTLS (0)]
> +Device supports control elements.
> +\end{description}
>   
>   \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device / Device Configuration Layout}
>   
> @@ -50,6 +53,7 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
>       le32 jacks;
>       le32 streams;
>       le32 chmaps;
> +    le32 controls;
>   };
>   \end{lstlisting}
>   
> @@ -62,6 +66,9 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
>   PCM streams.
>   \item[\field{chmaps}] (driver-read-only) indicates a total number of all available
>   channel maps.
> +\item[\field{controls}] (driver-read-only) indicates a total number of all available
> +control elements if VIRTIO_SND_F_CTLS has been negotiated.
> +
>   \end{description}
>   
>   \subsection{Device Initialization}
> @@ -74,12 +81,16 @@ \subsection{Device Initialization}
>   about the available PCM streams.
>   \item Read the \field{chmaps} field and send a control request to query information
>   about the available channel maps.
> +\item If VIRTIO_SND_F_CTLS has been negotiated, read the \field{controls} field
> +and send a control request to query information about the available control elements.
>   \item Populate the event queue with empty buffers.
>   \end{enumerate}
>   
>   \drivernormative{\subsubsection}{Device Initialization}{Device Types / Sound Device / Device Initialization}
>   
>   \begin{itemize}
> +\item The driver MUST NOT read the \field{controls} field
> +if VIRTIO_SND_F_CTLS has not been negotiated.
>   \item The driver MUST populate the event queue with empty buffers of at least
>   the struct virtio_snd_event size.
>   \item The driver MUST NOT put a device-readable buffers in the event queue.
> @@ -108,6 +119,15 @@ \subsection{Device Operation}\label{sec:Device Types / Sound Device / Device Ope
>       /* channel map control request types */
>       VIRTIO_SND_R_CHMAP_INFO = 0x0200,
>   
> +    /* control element request types */
> +    VIRTIO_SND_R_CTL_INFO = 0x0300,
> +    VIRTIO_SND_R_CTL_ENUM_ITEMS,
> +    VIRTIO_SND_R_CTL_READ,
> +    VIRTIO_SND_R_CTL_WRITE,
> +    VIRTIO_SND_R_CTL_TLV_READ,
> +    VIRTIO_SND_R_CTL_TLV_WRITE,
> +    VIRTIO_SND_R_CTL_TLV_COMMAND,
> +
>       /* jack event types */
>       VIRTIO_SND_EVT_JACK_CONNECTED = 0x1000,
>       VIRTIO_SND_EVT_JACK_DISCONNECTED,
> @@ -116,6 +136,9 @@ \subsection{Device Operation}\label{sec:Device Types / Sound Device / Device Ope
>       VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED = 0x1100,
>       VIRTIO_SND_EVT_PCM_XRUN,
>   
> +    /* control element event types */
> +    VIRTIO_SND_EVT_CTL_NOTIFY = 0x1200,
> +
>       /* common status codes */
>       VIRTIO_SND_S_OK = 0x8000,
>       VIRTIO_SND_S_BAD_MSG,
> @@ -805,3 +828,352 @@ \subsubsection{Channel Map Control Messages}\label{sec:Device Types / Sound Devi
>   \item The device MUST NOT set undefined direction values.
>   \item The device MUST NOT set the channels value to more than VIRTIO_SND_CHMAP_MAX_SIZE.
>   \end{itemize}
> +
> +\subsubsection{Control Elements}\label{sec:Device Types / Sound Device / Device Operation / Control Elements}
> +
> +Control elements can be used to set the volume level, mute/unmute the audio
> +signal, switch different modes/states of the virtual sound device, etc. Design
> +of virtual audio controls is based on and derived from ALSA audio controls.
> +
> +The device informs about the support of audio controls by setting the
> +VIRTIO_SND_F_CTLS feature bit. If VIRTIO_SND_F_CTLS has been negotiated, the
> +following messages are available for manipulation of control elements.
> +
> +A control request has, or consists of, a common header with the following
> +layout structure:
> +
> +\begin{lstlisting}
> +struct virtio_snd_ctl_hdr {
> +    struct virtio_snd_hdr hdr;
> +    le32 control_id;
> +};
> +\end{lstlisting}
> +
> +The header consists of the following device-readable fields:
> +
> +\begin{description}
> +\item[\field{hdr}] specifies request type (VIRTIO_SND_R_CTL_*).
> +\item[\field{control_id}] specifies a control element identifier from 0 to
> +\field{virtio_snd_config::controls} - 1.
> +\end{description}
> +
> +\paragraph{Query information}
> +
> +The VIRTIO_SND_R_CTL_INFO control message is used to query basic information
> +about the available control elements.
> +
> +The request consists of the virtio_snd_query_info structure
> +(see \nameref{sec:Device Types / Sound Device / Device Operation / Item Information Request}).
> +The response consists of the virtio_snd_hdr structure, followed by the following
> +control element information structures:
> +
> +\begin{lstlisting}
> +enum {
> +    VIRTIO_SND_CTL_ROLE_UNDEFINED = 0,
> +    VIRTIO_SND_CTL_ROLE_VOLUME,
> +    VIRTIO_SND_CTL_ROLE_MUTE,
> +    VIRTIO_SND_CTL_ROLE_GAIN
> +};
> +
> +enum {
> +    VIRTIO_SND_CTL_TYPE_BOOLEAN = 0,
> +    VIRTIO_SND_CTL_TYPE_INTEGER,
> +    VIRTIO_SND_CTL_TYPE_INTEGER64,
> +    VIRTIO_SND_CTL_TYPE_ENUMERATED,
> +    VIRTIO_SND_CTL_TYPE_BYTES,
> +    VIRTIO_SND_CTL_TYPE_IEC958
> +};
> +
> +enum {
> +    VIRTIO_SND_CTL_ACCESS_READ = 0,
> +    VIRTIO_SND_CTL_ACCESS_WRITE,
> +    VIRTIO_SND_CTL_ACCESS_VOLATILE,
> +    VIRTIO_SND_CTL_ACCESS_INACTIVE,
> +    VIRTIO_SND_CTL_ACCESS_TLV_READ,
> +    VIRTIO_SND_CTL_ACCESS_TLV_WRITE,
> +    VIRTIO_SND_CTL_ACCESS_TLV_COMMAND
> +};
> +
> +struct virtio_snd_ctl_info {
> +    struct virtio_snd_info hdr;
> +    le32 role;
> +    le32 type;
> +    le32 access; /* 1 << VIRTIO_SND_CTL_ACCESS_XXX */
> +    le32 count;
> +    le32 index;
> +    u8 name[44];
> +    union {
> +        struct {
> +            le32 min;
> +            le32 max;
> +            le32 step;
> +        } integer;
> +        struct {
> +            le64 min;
> +            le64 max;
> +            le64 step;
> +        } integer64;
> +        struct {
> +            le32 items;
> +        } enumerated;
> +    } value;
> +};
> +\end{lstlisting}
> +
> +The structure contains the following device-writable fields:
> +
> +\begin{description}
> +\item[\field{role}] indicates a role for the element. If the field value
> +is not equal to UNDEFINED, then the least significant bit indicates the direction
> +of data flow (VIRTIO_SND_D_*), and (\field{role} \& 0xfffffffe) >> 1 is equal to
> +one of the following values (VIRTIO_SND_CTL_ROLE_*):
> +\begin{description}
> +\item[VOLUME] is for a volume control.
> +\item[MUTE] is for a mute switch.
> +\item[GAIN] is for a gain control.
> +\end{description}
> +\item[\field{type}] indicates the element value type (VIRTIO_SND_CTL_TYPE_*):
> +\begin{description}
> +\item[BOOLEAN] This is a special case of the INTEGER type, which can take only
> +two values: 0 (off) and 1 (on).
> +\item[INTEGER] 32-bit integer values.
> +\item[INTEGER64] 64-bit integer values.
> +\item[ENUMERATED] The value is represented by an array of ASCII strings.
> +\item[BYTES] 8-bit integer values.
> +\item[IEC958] This element is connected to the digital audio interface.
> +The value is in the form of the virtio_snd_ctl_iec958 structure.
> +\end{description}
> +\item[\field{access}] indicates a bit mask describing access rights to the
> +element (VIRTIO_SND_CTL_ACCESS_*):
> +\begin{description}
> +\item[READ] It is possible to read the value.
> +\item[WRITE] It is possible to write (change) the value.
> +\item[VOLATILE] The value may be changed without a notification.
> +\item[INACTIVE] The element does actually nothing, but may be updated.
> +\item[TLV_READ] It is possible to read metadata.
> +\item[TLV_WRITE] It is possible to write (change) metadata.
> +\item[TLV_COMMAND] It is possible to execute a command for metadata.
> +\end{description}
> +\item[\field{count}] indicates the number of \field{type} members that represent
> +the value of the element.
> +\item[\field{index}] indicates the index for an element with a non-unique \field{name}.
> +\item[\field{name}] indicates the name identifier string for the element.
> +\item[\field{value}] indicates some additional information about the value for
> +certain types of elements:
> +\begin{description}
> +\item[\field{integer}]
> +\item[\field{integer64}] \field{min} and \field{max} indicate minimum and maximum
> +element values. \field{step} indicates a fixed step size for changing the element
> +value between minimum and maximum values. The special value 0 means that the step
> +has variable size.
> +\item[\field{enumerated}] \field{items} indicates the number of items from which
> +the element value can be selected.
> +\end{description}
> +\end{description}
> +
> +To query an array of items for elements with the ENUMERATED type, an additional
> +VIRTIO_SND_R_CTL_ENUM_ITEMS control message is used. The request consists of the
> +virtio_snd_ctl_hdr structure. The response consists of the virtio_snd_hdr structure,
> +followed by an array of size \field{value.enumerated.items}, consisting of the following
> +structures:
> +
> +\begin{lstlisting}
> +struct virtio_snd_ctl_enum_item {
> +    u8 item[64];
> +};
> +\end{lstlisting}
> +
> +The structure contains the only device-writable field:
> +
> +\begin{description}
> +\item[\field{item}] indicates the name of an available element option.
> +\end{description}
> +
> +\devicenormative{\subparagraph}{Control Element Information}{Device Types / Sound Device / Device Operation / Control Element Information}
> +
> +\begin{itemize}
> +\item The device MUST NOT set undefined \field{role}, \field{type} and
> +\field{access} values.
> +\item The device MUST set the \field{count} to a value other than zero. The maximum
> +allowed value depends on the element type:
> +\begin{description}
> +\item[BOOLEAN] 128
> +\item[INTEGER] 128
> +\item[INTEGER64] 64
> +\item[ENUMERATED] 128
> +\item[BYTES] 512
> +\item[IEC958] 1
> +\end{description}
> +\item The device MUST set \field{name} and \field{item} fields to a non-empty
> +0-terminated ASCII strings.
> +\item The device MUST ensure that the combination (\field{name}, \field{index})
> +is unique for each available element.
> +\end{itemize}
> +
> +\paragraph{Value}
> +
> +If the element has VIRTIO_SND_CTL_ACCESS_READ access right, then the driver
> +can issue VIRTIO_SND_R_CTL_READ request to the device to read the element's
> +value.
> +
> +If the element has VIRTIO_SND_CTL_ACCESS_WRITE access right, then the driver
> +can issue VIRTIO_SND_R_CTL_WRITE request to the device to write the element's
> +value.
> +
> +The following structure and layout definitions are used in read and write requests:
> +
> +\begin{lstlisting}
> +struct virtio_snd_ctl_iec958 {
> +    u8 status[24];      /* AES/IEC958 channel status bits */
> +    u8 subcode[147];    /* AES/IEC958 subcode bits */
> +    u8 pad;             /* nothing */
> +    u8 dig_subframe[4]; /* AES/IEC958 subframe bits */
> +};
> +
> +struct virtio_snd_ctl_value {
> +    union {
> +        le32 integer[128];
> +        le64 integer64[64];
> +        le32 enumerated[128];
> +        u8 bytes[512];
> +        struct virtio_snd_ctl_iec958 iec958;
> +    } value;
> +};
> +\end{lstlisting}
> +
> +The element value structure consists of a single \field{value} union, which
> +contains the following fields:
> +
> +\begin{description}
> +\item[\field{integer}] specifies values for an element of type BOOLEAN or
> +INTEGER.
> +\item[\field{integer64}] specifies values for an element of type INTEGER64.
> +\item[\field{enumerated}] specifies indexes of items for an element of type
> +ENUMERATED.
> +\item[\field{bytes}] specifies values for an element of type BYTES.
> +\item[\field{iec958}] specifies a value for an element of type IEC958.
> +\end{description}
> +
> +For all types, except for IEC958, the array contains \field{count} values
> +(the \field{count} is reported in the element information structure).
> +
> +A read request consists of a (device-readable) virtio_snd_ctl_hdr structure
> +containing request, followed by (device-writable) virtio_snd_hdr and
> +virtio_snd_ctl_value structures, into which the status of the request and
> +the current value of the element will be written.
> +
> +A write request consists of (device-readable) virtio_snd_ctl_hdr and
> +virtio_snd_ctl_value structures containing request and the new element value,
> +followed by (device-writable) virtio_snd_hdr structure, into which the status
> +of the request will be written.
> +
> +\drivernormative{\subparagraph}{Control Element Value}{Device Types / Sound Device / Device Operation / Control Element Value}
> +
> +\begin{itemize}
> +\item The driver MUST NOT send READ request if the element does not have ACCESS_READ access right.
> +\item The driver MUST NOT send WRITE request if the element does not have ACCESS_WRITE access right.
> +\end{itemize}
> +
> +\paragraph{Metadata}
> +
> +Metadata can be used to provide additional (arbitrary) information about the
> +element (e.g. dB range).
> +
> +If the element has VIRTIO_SND_CTL_ACCESS_TLV_READ access right, then the driver
> +can issue VIRTIO_SND_R_CTL_TLV_READ request to the device to read the element's
> +metadata.
> +
> +If the element has VIRTIO_SND_CTL_ACCESS_TLV_WRITE access right, then the driver
> +can issue VIRTIO_SND_R_CTL_TLV_WRITE request to the device to write the element's
> +metadata.
> +
> +If the element has VIRTIO_SND_CTL_ACCESS_TLV_COMMAND access right, then the driver
> +can issue VIRTIO_SND_R_CTL_TLV_COMMAND request to the device to execute a command
> +for element's metadata.
> +
> +All information related to metadata is presented in the form of TLV (Type-Length-Value):
> +
> +\begin{lstlisting}
> +struct virtio_snd_ctl_tlv {
> +    le32 type;
> +    le32 length;
> +    le32 value[];
> +};
> +\end{lstlisting}
> +
> +The structure contains the following fields:
> +
> +\begin{description}
> +\item[\field{type}] specifies metadata type. ALSA defines several standard metadata
> +types for control elements, details of which can be found in various ALSA documentation.
> +Device implementers can also define their own types and formats.
> +\item[\field{length}] specifies the \field{value} length in bytes aligned to 4.
> +\item[\field{value}] contains metadata in form of an array of 4-byte integers.
> +\end{description}
> +
> +A read request consists of a (device-readable) virtio_snd_ctl_hdr structure
> +containing request, followed by (device-writable) virtio_snd_hdr and
> +virtio_snd_ctl_tlv structures, into which the status of the request and
> +element's metadata will be written.
> +
> +A write and command requests consist of (device-readable) virtio_snd_ctl_hdr and
> +virtio_snd_ctl_tlv structures containing request and element's metadata/command
> +content, followed by (device-writable) virtio_snd_hdr structure, into which the
> +status of the request will be written.
> +
> +\devicenormative{\subparagraph}{Control Element Metadata}{Device Types / Sound Device / Device Operation / Control Element Metadata}
> +
> +\begin{itemize}
> +\item For a read request, if there is not enough space in the \field{value} field,
> +the device SHOULD write as much as it can and successfully complete the request.
> +\end{itemize}
> +
> +\drivernormative{\subparagraph}{Control Element Metadata}{Device Types / Sound Device / Device Operation / Control Element Metadata}
> +
> +\begin{itemize}
> +\item The driver MUST NOT send TLV_READ request if the element does not have
> +ACCESS_TLV_READ access right.
> +\item The driver MUST NOT send TLV_WRITE request if the element does not have
> +ACCESS_TLV_WRITE access right.
> +\item The driver MUST NOT send TLV_COMMAND request if the element does not have
> +ACCESS_TLV_COMMAND access right.
> +\item The driver MUST NOT submit the \field{value} field larger than 65536 bytes.
> +\end{itemize}
> +
> +\paragraph{Notifications}
> +
> +The notification uses the following structure and layout definitions:
> +
> +\begin{lstlisting}
> +enum {
> +    VIRTIO_SND_CTL_EVT_MASK_VALUE = 0,
> +    VIRTIO_SND_CTL_EVT_MASK_INFO,
> +    VIRTIO_SND_CTL_EVT_MASK_TLV
> +};
> +
> +struct virtio_snd_ctl_event {
> +    struct virtio_snd_hdr hdr; /* .code = VIRTIO_SND_EVT_CTL_NOTIFY */
> +    le16 control_id;
> +    le16 mask; /* 1 << VIRTIO_SND_CTL_EVT_MASK_XXX */
> +};
> +\end{lstlisting}
> +
> +The structure contains the following device-writable fields:
> +
> +\begin{description}
> +\item[\field{control_id}] indicates a control element identifier from 0 to
> +\field{virtio_snd_config::controls} - 1.
> +\item[\field{mask}] indicates a bit mask describing the reason(s) for sending
> +the notification (VIRTIO_SND_CTL_EVT_MASK_*):
> +\begin{description}
> +\item[VALUE] means the element's value has changed.
> +\item[INFO] means the element's information has changed.
> +\item[TLV] means the element's metadata has changed.
> +\end{description}
> +\end{description}
> +
> +\devicenormative{\subparagraph}{Control Element Notifications}{Device Types / Sound Device / Device Operation / Control Element Notifications}
> +
> +\begin{itemize}
> +\item The device MUST NOT set undefined \field{mask} values.
> +\end{itemize}
> 

-- 
Anton Yakovlev
Senior Software Engineer

OpenSynergy GmbH
Rotherstr. 20, 10245 Berlin


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/


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [virtio-comment] [PATCH] virtio-snd: add support for audio controls
  2021-04-20 18:32 [virtio-comment] [PATCH] virtio-snd: add support for audio controls Anton Yakovlev
  2021-05-18 14:20 ` [virtio-comment] " Anton Yakovlev
@ 2021-07-27 15:57 ` Cornelia Huck
  2022-06-17 11:20   ` Michael S. Tsirkin
  1 sibling, 1 reply; 5+ messages in thread
From: Cornelia Huck @ 2021-07-27 15:57 UTC (permalink / raw)
  To: Anton Yakovlev, virtio-comment
  Cc: liam.r.girdwood, tiwai, broonie, maz, james.morse,
	julien.thierry.kdev, suzuki.poulose, cdupontd, kraxel,
	jean-philippe, Anton Yakovlev

On Tue, Apr 20 2021, Anton Yakovlev <anton.yakovlev@opensynergy.com> wrote:

> This patch extends the virtio sound device specification by adding
> support for audio controls. Audio controls can be used to set the volume
> level, mute/unmute the audio signal, switch different modes/states of
> the virtual sound device, etc.
>
> Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
> ---
>  conformance.tex  |   5 +
>  virtio-sound.tex | 374 ++++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 378 insertions(+), 1 deletion(-)
>

> @@ -50,6 +53,7 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
>      le32 jacks;
>      le32 streams;
>      le32 chmaps;
> +    le32 controls;
>  };
>  \end{lstlisting}
>  
> @@ -62,6 +66,9 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
>  PCM streams.
>  \item[\field{chmaps}] (driver-read-only) indicates a total number of all available
>  channel maps.
> +\item[\field{controls}] (driver-read-only) indicates a total number of all available
> +control elements if VIRTIO_SND_F_CTLS has been negotiated.

While the driver is not supposed to read this if the feature has not
been negotiated, do we also want to add a normative statement about what
the device is supposed to do in this case? Does the field always exist?

> +
>  \end{description}
>  
>  \subsection{Device Initialization}

Does anyone familiar with virtio-snd want to take a look at this update?


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/


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [virtio-comment] [PATCH] virtio-snd: add support for audio controls
  2021-07-27 15:57 ` [virtio-comment] " Cornelia Huck
@ 2022-06-17 11:20   ` Michael S. Tsirkin
  2022-06-20 13:47     ` Cornelia Huck
  0 siblings, 1 reply; 5+ messages in thread
From: Michael S. Tsirkin @ 2022-06-17 11:20 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Anton Yakovlev, virtio-comment, liam.r.girdwood, tiwai, broonie,
	maz, james.morse, julien.thierry.kdev, suzuki.poulose, cdupontd,
	kraxel, jean-philippe

On Tue, Jul 27, 2021 at 05:57:23PM +0200, Cornelia Huck wrote:
> On Tue, Apr 20 2021, Anton Yakovlev <anton.yakovlev@opensynergy.com> wrote:
> 
> > This patch extends the virtio sound device specification by adding
> > support for audio controls. Audio controls can be used to set the volume
> > level, mute/unmute the audio signal, switch different modes/states of
> > the virtual sound device, etc.
> >
> > Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
> > ---
> >  conformance.tex  |   5 +
> >  virtio-sound.tex | 374 ++++++++++++++++++++++++++++++++++++++++++++++-
> >  2 files changed, 378 insertions(+), 1 deletion(-)
> >
> 
> > @@ -50,6 +53,7 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
> >      le32 jacks;
> >      le32 streams;
> >      le32 chmaps;
> > +    le32 controls;
> >  };
> >  \end{lstlisting}
> >  
> > @@ -62,6 +66,9 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
> >  PCM streams.
> >  \item[\field{chmaps}] (driver-read-only) indicates a total number of all available
> >  channel maps.
> > +\item[\field{controls}] (driver-read-only) indicates a total number of all available
> > +control elements if VIRTIO_SND_F_CTLS has been negotiated.
> 
> While the driver is not supposed to read this if the feature has not
> been negotiated, do we also want to add a normative statement about what
> the device is supposed to do in this case? Does the field always exist?


Cornelia this is a general issue in the spec. We should be clearer
that
- drivers should be ready for config space to be shorter
or longer than described here, as long as they do not
need to access outside of it, it is ok.
- negotiated/offered confusion


I will revive my proposal where feature is negotiated even before
FEATURES_OK

I think this can stand as is for now.

-- 
MST


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/


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [virtio-comment] [PATCH] virtio-snd: add support for audio controls
  2022-06-17 11:20   ` Michael S. Tsirkin
@ 2022-06-20 13:47     ` Cornelia Huck
  0 siblings, 0 replies; 5+ messages in thread
From: Cornelia Huck @ 2022-06-20 13:47 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Anton Yakovlev, virtio-comment, liam.r.girdwood, tiwai, broonie,
	maz, james.morse, julien.thierry.kdev, suzuki.poulose, cdupontd,
	kraxel, jean-philippe

On Fri, Jun 17 2022, "Michael S. Tsirkin" <mst@redhat.com> wrote:

> On Tue, Jul 27, 2021 at 05:57:23PM +0200, Cornelia Huck wrote:
>> On Tue, Apr 20 2021, Anton Yakovlev <anton.yakovlev@opensynergy.com> wrote:
>> 
>> > This patch extends the virtio sound device specification by adding
>> > support for audio controls. Audio controls can be used to set the volume
>> > level, mute/unmute the audio signal, switch different modes/states of
>> > the virtual sound device, etc.
>> >
>> > Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
>> > ---
>> >  conformance.tex  |   5 +
>> >  virtio-sound.tex | 374 ++++++++++++++++++++++++++++++++++++++++++++++-
>> >  2 files changed, 378 insertions(+), 1 deletion(-)
>> >
>> 
>> > @@ -50,6 +53,7 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
>> >      le32 jacks;
>> >      le32 streams;
>> >      le32 chmaps;
>> > +    le32 controls;
>> >  };
>> >  \end{lstlisting}
>> >  
>> > @@ -62,6 +66,9 @@ \subsection{Device Configuration Layout}\label{sec:Device Types / Sound Device /
>> >  PCM streams.
>> >  \item[\field{chmaps}] (driver-read-only) indicates a total number of all available
>> >  channel maps.
>> > +\item[\field{controls}] (driver-read-only) indicates a total number of all available
>> > +control elements if VIRTIO_SND_F_CTLS has been negotiated.
>> 
>> While the driver is not supposed to read this if the feature has not
>> been negotiated, do we also want to add a normative statement about what
>> the device is supposed to do in this case? Does the field always exist?
>
>
> Cornelia this is a general issue in the spec. We should be clearer
> that
> - drivers should be ready for config space to be shorter
> or longer than described here, as long as they do not
> need to access outside of it, it is ok.
> - negotiated/offered confusion

Yes, I remember we had some discussions about that in the meantime...

>
>
> I will revive my proposal where feature is negotiated even before
> FEATURES_OK
>
> I think this can stand as is for now.

Fine with me.


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/


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-06-20 13:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-20 18:32 [virtio-comment] [PATCH] virtio-snd: add support for audio controls Anton Yakovlev
2021-05-18 14:20 ` [virtio-comment] " Anton Yakovlev
2021-07-27 15:57 ` [virtio-comment] " Cornelia Huck
2022-06-17 11:20   ` Michael S. Tsirkin
2022-06-20 13:47     ` Cornelia Huck

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.