All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleksandr Andrushchenko <andr2000@gmail.com>
To: alsa-devel@alsa-project.org, xen-devel@lists.xenproject.org,
	konrad.wilk@oracle.com, tiwai@suse.de
Cc: andr2000@gmail.com,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Subject: [Xen-devel][PATCH v3 5/5] sndif: Add explicit back and front parameter negotiation
Date: Mon, 19 Mar 2018 09:22:24 +0200	[thread overview]
Message-ID: <1521444144-12451-6-git-send-email-andr2000@gmail.com> (raw)
In-Reply-To: <1521444144-12451-1-git-send-email-andr2000@gmail.com>

From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>

In order to provide explicit stream parameter negotiation between
backend and frontend the following change is introduced to the protocol:
 - add XENSND_OP_HW_PARAM_QUERY request to read/update
   stream configuration space: request passes desired intervals/formats for
   the stream parameters and the response returns allowed intervals and
   formats mask that can be used.

Parameters supported by this request/response:
 - formats mask
 - sample rate interval
 - number of channels interval
 - buffer size, interval, frames
 - period size, interval, frames

Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Takashi Iwai <tiwai@suse.de>
---
 xen/include/public/io/sndif.h | 133 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 126 insertions(+), 7 deletions(-)

diff --git a/xen/include/public/io/sndif.h b/xen/include/public/io/sndif.h
index be8d7c83fa72..417d3ebc7981 100644
--- a/xen/include/public/io/sndif.h
+++ b/xen/include/public/io/sndif.h
@@ -465,6 +465,7 @@
 #define XENSND_OP_MUTE                  6
 #define XENSND_OP_UNMUTE                7
 #define XENSND_OP_TRIGGER               8
+#define XENSND_OP_HW_PARAM_QUERY        9
 
 #define XENSND_OP_TRIGGER_START         0
 #define XENSND_OP_TRIGGER_PAUSE         1
@@ -832,28 +833,142 @@ struct xensnd_trigger_req {
 };
 
 /*
- *---------------------------------- Responses --------------------------------
+ * Request stream parameter ranges: request intervals and
+ *   masks of supported ranges for stream configuration values.
  *
- * All response packets have the same length (64 octets)
+ *   Sound device configuration for a particular stream is a limited subset
+ *   of the multidimensional configuration available on XenStore, e.g.
+ *   once the frame rate has been selected there is a limited supported range
+ *   for sample rates becomes available (which might be the same set configured
+ *   on XenStore or less). For example, selecting 96kHz sample rate may limit
+ *   number of channels available for such configuration from 4 to 2, etc.
+ *   Thus, each call to XENSND_OP_HW_PARAM_QUERY may reduce configuration
+ *   space making it possible to iteratively get the final stream configuration,
+ *   used in XENSND_OP_OPEN request.
+ *
+ *   See response format for this request.
  *
- * Response for all requests:
  *         0                1                 2               3        octet
  * +----------------+----------------+----------------+----------------+
- * |               id                |    operation   |    reserved    | 4
+ * |               id                | _HW_PARAM_QUERY|    reserved    | 4
  * +----------------+----------------+----------------+----------------+
- * |                              status                               | 8
+ * |                             reserved                              | 8
+ * +----------------+----------------+----------------+----------------+
+ * |                     formats mask low 32-bit                       | 12
+ * +----------------+----------------+----------------+----------------+
+ * |                     formats mask high 32-bit                      | 16
+ * +----------------+----------------+----------------+----------------+
+ * |                              min rate                             | 20
+ * +----------------+----------------+----------------+----------------+
+ * |                              max rate                             | 24
+ * +----------------+----------------+----------------+----------------+
+ * |                            min channels                           | 28
+ * +----------------+----------------+----------------+----------------+
+ * |                            max channels                           | 32
+ * +----------------+----------------+----------------+----------------+
+ * |                         min buffer frames                         | 36
+ * +----------------+----------------+----------------+----------------+
+ * |                         max buffer frames                         | 40
+ * +----------------+----------------+----------------+----------------+
+ * |                         min period frames                         | 44
+ * +----------------+----------------+----------------+----------------+
+ * |                         max period frames                         | 48
  * +----------------+----------------+----------------+----------------+
- * |                             reserved                              | 12
+ * |                             reserved                              | 52
  * +----------------+----------------+----------------+----------------+
  * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
  * +----------------+----------------+----------------+----------------+
  * |                             reserved                              | 64
  * +----------------+----------------+----------------+----------------+
  *
+ * formats - uint64_t, bit mask representing values of the parameter
+ *   made as bitwise OR of (1 << XENSND_PCM_FORMAT_XXX) values
+ *
+ * For interval parameters:
+ *   min - uint32_t, minimum value of the parameter
+ *   max - uint32_t, maximum value of the parameter
+ *
+ * Frame is defined as a product of the number of channels by the
+ * number of octets per one sample.
+ */
+
+struct xensnd_query_hw_param {
+    uint64_t formats;
+    struct {
+        uint32_t min;
+        uint32_t max;
+    } rates;
+    struct {
+        uint32_t min;
+        uint32_t max;
+    } channels;
+    struct {
+        uint32_t min;
+        uint32_t max;
+    } buffer;
+    struct {
+        uint32_t min;
+        uint32_t max;
+    } period;
+};
+
+/*
+ *---------------------------------- Responses --------------------------------
+ *
+ * All response packets have the same length (64 octets)
+ *
+ * All response packets have common header:
+ *         0                1                 2               3        octet
+ * +----------------+----------------+----------------+----------------+
+ * |               id                |    operation   |    reserved    | 4
+ * +----------------+----------------+----------------+----------------+
+ * |                              status                               | 8
+ * +----------------+----------------+----------------+----------------+
+ *
  * id - uint16_t, copied from the request
  * operation - uint8_t, XENSND_OP_* - copied from request
  * status - int32_t, response status, zero on success and -XEN_EXX on failure
  *
+ *
+ * HW parameter query response - response for XENSND_OP_HW_PARAM_QUERY:
+ *         0                1                 2               3        octet
+ * +----------------+----------------+----------------+----------------+
+ * |               id                |    operation   |    reserved    | 4
+ * +----------------+----------------+----------------+----------------+
+ * |                              status                               | 8
+ * +----------------+----------------+----------------+----------------+
+ * |                     formats mask low 32-bit                       | 12
+ * +----------------+----------------+----------------+----------------+
+ * |                     formats mask high 32-bit                      | 16
+ * +----------------+----------------+----------------+----------------+
+ * |                              min rate                             | 20
+ * +----------------+----------------+----------------+----------------+
+ * |                              max rate                             | 24
+ * +----------------+----------------+----------------+----------------+
+ * |                            min channels                           | 28
+ * +----------------+----------------+----------------+----------------+
+ * |                            max channels                           | 32
+ * +----------------+----------------+----------------+----------------+
+ * |                         min buffer frames                         | 36
+ * +----------------+----------------+----------------+----------------+
+ * |                         max buffer frames                         | 40
+ * +----------------+----------------+----------------+----------------+
+ * |                         min period frames                         | 44
+ * +----------------+----------------+----------------+----------------+
+ * |                         max period frames                         | 48
+ * +----------------+----------------+----------------+----------------+
+ * |                             reserved                              | 52
+ * +----------------+----------------+----------------+----------------+
+ * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
+ * +----------------+----------------+----------------+----------------+
+ * |                             reserved                              | 64
+ * +----------------+----------------+----------------+----------------+
+ *
+ * Meaning of the values in this response is the same as for
+ * XENSND_OP_HW_PARAM_QUERY request.
+ */
+
+/*
  *----------------------------------- Events ----------------------------------
  *
  * Events are sent via shared page allocated by the front and propagated by
@@ -906,6 +1021,7 @@ struct xensnd_req {
         struct xensnd_open_req open;
         struct xensnd_rw_req rw;
         struct xensnd_trigger_req trigger;
+        struct xensnd_query_hw_param hw_param;
         uint8_t reserved[56];
     } op;
 };
@@ -915,7 +1031,10 @@ struct xensnd_resp {
     uint8_t operation;
     uint8_t reserved;
     int32_t status;
-    uint8_t reserved1[56];
+    union {
+        struct xensnd_query_hw_param hw_param;
+        uint8_t reserved1[56];
+    } resp;
 };
 
 struct xensnd_evt {
-- 
2.7.4

  parent reply	other threads:[~2018-03-19  7:22 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-19  7:22 [Xen-devel][PATCH v3 0/5] sndif: add explicit back and front synchronization Oleksandr Andrushchenko
2018-03-19  7:22 ` [PATCH v3 1/5] sndif: Introduce protocol version Oleksandr Andrushchenko
2018-03-19  7:22 ` [Xen-devel][PATCH " Oleksandr Andrushchenko
2018-03-19  7:22 ` [Xen-devel][PATCH v3 2/5] sndif: Fix missed "reserved" fields in comments Oleksandr Andrushchenko
2018-03-19  7:22 ` [PATCH " Oleksandr Andrushchenko
2018-03-19  7:22 ` [Xen-devel][PATCH v3 3/5] sndif: Make requests and responses 64 octets long Oleksandr Andrushchenko
2018-03-19  7:22 ` [PATCH " Oleksandr Andrushchenko
2018-03-19  7:22 ` [PATCH v3 4/5] sndif: Add explicit back and front synchronization Oleksandr Andrushchenko
2018-03-19  7:22 ` [Xen-devel][PATCH " Oleksandr Andrushchenko
2018-03-19  7:22 ` [PATCH v3 5/5] sndif: Add explicit back and front parameter negotiation Oleksandr Andrushchenko
2018-03-19  7:22 ` Oleksandr Andrushchenko [this message]
2018-03-20 20:22 ` [PATCH v3 0/5] sndif: add explicit back and front synchronization Takashi Iwai
2018-03-20 20:22 ` [Xen-devel][PATCH " Takashi Iwai
2018-03-21  7:15   ` [PATCH " Oleksandr Andrushchenko
2018-03-21  7:15   ` [Xen-devel][PATCH " Oleksandr Andrushchenko
2018-03-21  7:20     ` [PATCH " Takashi Iwai
2018-03-21  7:20     ` [Xen-devel][PATCH " Takashi Iwai
2018-03-21  7:25       ` [PATCH " Oleksandr Andrushchenko
2018-03-21  7:25       ` [Xen-devel][PATCH " Oleksandr Andrushchenko
2018-03-27  5:41         ` Oleksandr Andrushchenko
2018-04-03  5:37           ` Oleksandr Andrushchenko
2018-04-10  5:28             ` [PATCH " Oleksandr Andrushchenko
2018-04-10  5:28             ` [Xen-devel][PATCH " Oleksandr Andrushchenko
2018-04-03  5:37           ` [PATCH " Oleksandr Andrushchenko
2018-03-27  5:41         ` Oleksandr Andrushchenko
2018-04-12 14:31     ` Konrad Rzeszutek Wilk
2018-04-12 14:31     ` [Xen-devel][PATCH " Konrad Rzeszutek Wilk
2018-04-12 14:35       ` [PATCH " Oleksandr Andrushchenko
2018-04-12 14:35       ` [Xen-devel][PATCH " Oleksandr Andrushchenko
2018-04-06  9:13 ` [PATCH " Juergen Gross
2018-04-06  9:18   ` [Xen-devel] " Oleksandr Andrushchenko
2018-04-06  9:18   ` Oleksandr Andrushchenko

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=1521444144-12451-6-git-send-email-andr2000@gmail.com \
    --to=andr2000@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=konrad.wilk@oracle.com \
    --cc=oleksandr_andrushchenko@epam.com \
    --cc=tiwai@suse.de \
    --cc=xen-devel@lists.xenproject.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.