[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] xen/displif: Protocol version 2


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, "jgross@xxxxxxxx" <jgross@xxxxxxxx>, "ian.jackson@xxxxxxxxxxxxx" <ian.jackson@xxxxxxxxxxxxx>, "wl@xxxxxxx" <wl@xxxxxxx>
  • From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>
  • Date: Mon, 27 Jul 2020 06:50:41 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=38v/I1abWphoVhWzS8FPgJ4hNFp2wwqAAb0g6t1rSCc=; b=CsQ96xx28V26at1Kt35liAf31JyqoEl0x8kLlT+Mq5gPdHTf3F67519RPWgN8FBcHgmVaeg8sDNm2e9B14qw4T7iYq4n/R82M0XOWfR1MtBWnTxSK9K+pvaMdoAyytXM5WlECmMrBF1sq4O35qCc5kyrGZ2OVJ2RsDnYPNsnkFReTpjhAIqdnHvmK3E1ibIBZ0sAa1GWMb35xH6ClvlvE6i6IXTryw/TyyHCXkDTOkBPzSCTJAvSqTQpFm+80cjZv6lX7s0jBe5kDkc/3gwdciuE1jRK75aStSOzsapHPKvesQa0d5kXbA9QQNjV1TPk3OIsX7QL9UwkbFnm2+qlbQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fq+ayKI7yWOVm+THdF+cF6PBRuElT+dt9mY+NNJUkKgLxAa0o6bI33MBemoLDM45wYh+7ug7AMgmdhMnVGOwVqzwVGNPELU+LdUi4ObQ4FIlsUSNGOSYqB7xpnEJLpjrk29c2nrjdr3leuORQn/Zlco78mDAMd5SFUNqipqiIfi3FB2KA+Y1A4wjl/Bmx0ksn5nBLOQjxeAdOvAP1uQoyIdxR4uC1M2EiJ7/oYdoYnBenAEnev++qQmq4GjPJTXbmt4RTb/8MhYpuAr+VKztiWyQGuFxSDKvlK7qXoqUQ7pd0lGUwXDD9lt+NK6BkawTCaKu7gS1hbdllcZlhgJk9A==
  • Authentication-results: lists.xenproject.org; dkim=none (message not signed) header.d=none;lists.xenproject.org; dmarc=none action=none header.from=epam.com;
  • Cc: Oleksandr Andrushchenko <andr2000@xxxxxxxxx>, "paul@xxxxxxx" <paul@xxxxxxx>
  • Delivery-date: Mon, 27 Jul 2020 06:51:15 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHWT3f2pfc1d0tAak69A/eTMH1j5qkbJYsA
  • Thread-topic: [PATCH v2] xen/displif: Protocol version 2

Ping

On 7/1/20 10:19 AM, Oleksandr Andrushchenko wrote:
> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
>
> 1. Add protocol version as an integer
>
> Version string, which is in fact an integer, is hard to handle in the
> code that supports different protocol versions. To simplify that
> also add the version as an integer.
>
> 2. Pass buffer offset with XENDISPL_OP_DBUF_CREATE
>
> There are cases when display data buffer is created with non-zero
> offset to the data start. Handle such cases and provide that offset
> while creating a display buffer.
>
> 3. Add XENDISPL_OP_GET_EDID command
>
> Add an optional request for reading Extended Display Identification
> Data (EDID) structure which allows better configuration of the
> display connectors over the configuration set in XenStore.
> With this change connectors may have multiple resolutions defined
> with respect to detailed timing definitions and additional properties
> normally provided by displays.
>
> If this request is not supported by the backend then visible area
> is defined by the relevant XenStore's "resolution" property.
>
> If backend provides extended display identification data (EDID) with
> XENDISPL_OP_GET_EDID request then EDID values must take precedence
> over the resolutions defined in XenStore.
>
> 4. Bump protocol version to 2.
>
> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
> ---
>   xen/include/public/io/displif.h | 91 +++++++++++++++++++++++++++++++--
>   1 file changed, 88 insertions(+), 3 deletions(-)
>
> diff --git a/xen/include/public/io/displif.h b/xen/include/public/io/displif.h
> index cc5de9cb1f35..0055895510f7 100644
> --- a/xen/include/public/io/displif.h
> +++ b/xen/include/public/io/displif.h
> @@ -38,7 +38,8 @@
>    *                           Protocol version
>    
> ******************************************************************************
>    */
> -#define XENDISPL_PROTOCOL_VERSION     "1"
> +#define XENDISPL_PROTOCOL_VERSION     "2"
> +#define XENDISPL_PROTOCOL_VERSION_INT  2
>   
>   /*
>    
> ******************************************************************************
> @@ -202,6 +203,9 @@
>    *      Width and height of the connector in pixels separated by
>    *      XENDISPL_RESOLUTION_SEPARATOR. This defines visible area of the
>    *      display.
> + *      If backend provides extended display identification data (EDID) with
> + *      XENDISPL_OP_GET_EDID request then EDID values must take precedence
> + *      over the resolutions defined here.
>    *
>    *------------------ Connector Request Transport Parameters 
> -------------------
>    *
> @@ -349,6 +353,8 @@
>   #define XENDISPL_OP_FB_DETACH         0x13
>   #define XENDISPL_OP_SET_CONFIG        0x14
>   #define XENDISPL_OP_PG_FLIP           0x15
> +/* The below command is available in protocol version 2 and above. */
> +#define XENDISPL_OP_GET_EDID          0x16
>   
>   /*
>    
> ******************************************************************************
> @@ -377,6 +383,10 @@
>   #define XENDISPL_FIELD_BE_ALLOC       "be-alloc"
>   #define XENDISPL_FIELD_UNIQUE_ID      "unique-id"
>   
> +#define XENDISPL_EDID_BLOCK_SIZE      128
> +#define XENDISPL_EDID_BLOCK_COUNT     256
> +#define XENDISPL_EDID_MAX_SIZE        (XENDISPL_EDID_BLOCK_SIZE * 
> XENDISPL_EDID_BLOCK_COUNT)
> +
>   /*
>    
> ******************************************************************************
>    *                          STATUS RETURN CODES
> @@ -451,7 +461,9 @@
>    * +----------------+----------------+----------------+----------------+
>    * |                           gref_directory                          | 40
>    * +----------------+----------------+----------------+----------------+
> - * |                             reserved                              | 44
> + * |                             data_ofs                              | 44
> + * +----------------+----------------+----------------+----------------+
> + * |                             reserved                              | 48
>    * +----------------+----------------+----------------+----------------+
>    * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
>    * +----------------+----------------+----------------+----------------+
> @@ -494,6 +506,7 @@
>    *   buffer size (buffer_sz) exceeds what can be addressed by this single 
> page,
>    *   then reference to the next page must be supplied (see 
> gref_dir_next_page
>    *   below)
> + * data_ofs - uint32_t, offset of the data in the buffer, octets
>    */
>   
>   #define XENDISPL_DBUF_FLG_REQ_ALLOC       (1 << 0)
> @@ -506,6 +519,7 @@ struct xendispl_dbuf_create_req {
>       uint32_t buffer_sz;
>       uint32_t flags;
>       grant_ref_t gref_directory;
> +    uint32_t data_ofs;
>   };
>   
>   /*
> @@ -731,6 +745,44 @@ struct xendispl_page_flip_req {
>       uint64_t fb_cookie;
>   };
>   
> +/*
> + * Request EDID - request EDID describing current connector:
> + *         0                1                 2               3        octet
> + * +----------------+----------------+----------------+----------------+
> + * |               id                | _OP_GET_EDID   |   reserved     | 4
> + * +----------------+----------------+----------------+----------------+
> + * |                             buffer_sz                             | 8
> + * +----------------+----------------+----------------+----------------+
> + * |                          gref_directory                           | 12
> + * +----------------+----------------+----------------+----------------+
> + * |                             reserved                              | 16
> + * +----------------+----------------+----------------+----------------+
> + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> + * +----------------+----------------+----------------+----------------+
> + * |                             reserved                              | 64
> + * +----------------+----------------+----------------+----------------+
> + *
> + * Notes:
> + *   - This command is not available in protocol version 1 and should be
> + *     ignored.
> + *   - This request is optional and if not supported then visible area
> + *     is defined by the relevant XenStore's "resolution" property.
> + *   - Shared buffer, allocated for EDID storage, must not be less then
> + *     XENDISPL_EDID_MAX_SIZE octets.
> + *
> + * buffer_sz - uint32_t, buffer size to be allocated, octets
> + * gref_directory - grant_ref_t, a reference to the first shared page
> + *   describing EDID buffer references. See XENDISPL_OP_DBUF_CREATE for
> + *   grant page directory structure (struct xendispl_page_directory).
> + *
> + * See response format for this request.
> + */
> +
> +struct xendispl_get_edid_req {
> +    uint32_t buffer_sz;
> +    grant_ref_t gref_directory;
> +};
> +
>   /*
>    *---------------------------------- Responses 
> --------------------------------
>    *
> @@ -753,6 +805,35 @@ struct xendispl_page_flip_req {
>    * id - uint16_t, private guest value, echoed from request
>    * status - int32_t, response status, zero on success and -XEN_EXX on 
> failure
>    *
> + *
> + * Get EDID response - response for XENDISPL_OP_GET_EDID:
> + *         0                1                 2               3        octet
> + * +----------------+----------------+----------------+----------------+
> + * |               id                |    operation   |    reserved    | 4
> + * +----------------+----------------+----------------+----------------+
> + * |                              status                               | 8
> + * +----------------+----------------+----------------+----------------+
> + * |                             edid_sz                               | 12
> + * +----------------+----------------+----------------+----------------+
> + * |                             reserved                              | 16
> + * +----------------+----------------+----------------+----------------+
> + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> + * +----------------+----------------+----------------+----------------+
> + * |                             reserved                              | 64
> + * +----------------+----------------+----------------+----------------+
> + *
> + * Notes:
> + *   - This response is not available in protocol version 1 and should be
> + *     ignored.
> + *
> + * edid_sz - uint32_t, size of the EDID, octets
> + */
> +
> +struct xendispl_get_edid_resp {
> +    uint32_t edid_sz;
> +};
> +
> +/*
>    *----------------------------------- Events 
> ----------------------------------
>    *
>    * Events are sent via a shared page allocated by the front and propagated 
> by
> @@ -804,6 +885,7 @@ struct xendispl_req {
>           struct xendispl_fb_detach_req fb_detach;
>           struct xendispl_set_config_req set_config;
>           struct xendispl_page_flip_req pg_flip;
> +        struct xendispl_get_edid_req get_edid;
>           uint8_t reserved[56];
>       } op;
>   };
> @@ -813,7 +895,10 @@ struct xendispl_resp {
>       uint8_t operation;
>       uint8_t reserved;
>       int32_t status;
> -    uint8_t reserved1[56];
> +    union {
> +        struct xendispl_get_edid_resp get_edid;
> +        uint8_t reserved1[56];
> +    } op;
>   };
>   
>   struct xendispl_evt {

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.