From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E56B6C49EAD for ; Tue, 5 Nov 2019 09:38:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A91A72190F for ; Tue, 5 Nov 2019 09:38:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PQVBZzL/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730846AbfKEJiL (ORCPT ); Tue, 5 Nov 2019 04:38:11 -0500 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:60809 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730556AbfKEJiL (ORCPT ); Tue, 5 Nov 2019 04:38:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572946689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HbOiebGgVWYiwShAeT9cSxTLA5sWEIMRFlVhkay6wXY=; b=PQVBZzL/gVHjAtAcKBaj8u8GzkdO9blhSuIqswwsavPdkm/y7zg/bE4cGz7txjb4WtFgO/ FMntioPx1ycwpEyDuHXdqPv39Zy4gyD24sGyeaZs0EzP3AXLALMz8rDEwBLQR03EMWwKBF ey46BVP7BPcPFJMQq22IG5R67eNumkE= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-164-tR3tNhCwMZuUVe3S9-7p7g-1; Tue, 05 Nov 2019 04:38:06 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CFF47800C73; Tue, 5 Nov 2019 09:38:01 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id CDF395C1B2; Tue, 5 Nov 2019 09:36:38 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com, Jason Wang Subject: [PATCH V8 4/6] mdev: introduce virtio device and its device ops Date: Tue, 5 Nov 2019 17:32:38 +0800 Message-Id: <20191105093240.5135-5-jasowang@redhat.com> In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: tR3tNhCwMZuUVe3S9-7p7g-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch implements basic support for mdev driver that supports virtio transport for kernel virtio driver. Signed-off-by: Jason Wang --- drivers/vfio/mdev/mdev_core.c | 21 +++++ drivers/vfio/mdev/mdev_private.h | 2 + include/linux/mdev.h | 6 ++ include/linux/mdev_virtio_ops.h | 149 +++++++++++++++++++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 include/linux/mdev_virtio_ops.h diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index 4e70f19ac145..c58253404ed5 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -78,6 +78,27 @@ const struct mdev_vfio_device_ops *mdev_get_vfio_ops(str= uct mdev_device *mdev) } EXPORT_SYMBOL(mdev_get_vfio_ops); =20 +/* + * Specify the virtio device ops for the mdev device, this + * must be called during create() callback for virtio mdev device. + */ +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops) +{ +=09mdev_set_class(mdev, MDEV_CLASS_ID_VIRTIO); +=09mdev->virtio_ops =3D virtio_ops; +} +EXPORT_SYMBOL(mdev_set_virtio_ops); + +/* Get the virtio device ops for the mdev device. */ +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev) +{ +=09WARN_ON(mdev->class_id !=3D MDEV_CLASS_ID_VIRTIO); +=09return mdev->virtio_ops; +} +EXPORT_SYMBOL(mdev_get_virtio_ops); + struct device *mdev_dev(struct mdev_device *mdev) { =09return &mdev->dev; diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_priv= ate.h index 411227373625..2c74dd032409 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -11,6 +11,7 @@ #define MDEV_PRIVATE_H =20 #include +#include =20 int mdev_bus_register(void); void mdev_bus_unregister(void); @@ -38,6 +39,7 @@ struct mdev_device { =09u16 class_id; =09union { =09=09const struct mdev_vfio_device_ops *vfio_ops; +=09=09const struct mdev_virtio_device_ops *virtio_ops; =09}; }; =20 diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 9e37506d1987..f3d75a60c2b5 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -17,6 +17,7 @@ =20 struct mdev_device; struct mdev_vfio_device_ops; +struct mdev_virtio_device_ops; =20 /* * Called by the parent device driver to set the device which represents @@ -112,6 +113,10 @@ void mdev_set_class(struct mdev_device *mdev, u16 id); void mdev_set_vfio_ops(struct mdev_device *mdev, =09=09 const struct mdev_vfio_device_ops *vfio_ops); const struct mdev_vfio_device_ops *mdev_get_vfio_ops(struct mdev_device *m= dev); +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev); =20 extern struct bus_type mdev_bus_type; =20 @@ -127,6 +132,7 @@ struct mdev_device *mdev_from_dev(struct device *dev); =20 enum { =09MDEV_CLASS_ID_VFIO =3D 1, +=09MDEV_CLASS_ID_VIRTIO =3D 2, =09/* New entries must be added here */ }; =20 diff --git a/include/linux/mdev_virtio_ops.h b/include/linux/mdev_virtio_op= s.h new file mode 100644 index 000000000000..379bfa5d6a30 --- /dev/null +++ b/include/linux/mdev_virtio_ops.h @@ -0,0 +1,149 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Virtio mediated device driver + * + * Copyright 2019, Red Hat Corp. + * Author: Jason Wang + */ +#ifndef MDEV_VIRTIO_OPS_H +#define MDEV_VIRTIO_OPS_H + +#include +#include +#include + +#define VIRTIO_MDEV_DEVICE_API_STRING=09=09"virtio-mdev" +#define VIRTIO_MDEV_F_VERSION_1 0x1 + +struct virtio_mdev_callback { +=09irqreturn_t (*callback)(void *data); +=09void *private; +}; + +/** + * struct mdev_virtio_device_ops - Structure to be registered for each + * mdev device to register the device for virtio/vhost drivers. + * + * The device ops that is supported by VIRTIO_MDEV_F_VERSION_1, the + * callbacks are mandatory unless explicity mentioned. + * + * @set_vq_address:=09=09Set the address of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@desc_area: address of desc area + *=09=09=09=09@driver_area: address of driver area + *=09=09=09=09@device_area: address of device area + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_vq_num:=09=09=09Set the size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@num: the size of virtqueue + * @kick_vq:=09=09=09Kick the virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + * @set_vq_cb:=09=09=09Set the interrupt callback function for + *=09=09=09=09a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @set_vq_ready:=09=09Set ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@ready: ready (true) not ready(false) + * @get_vq_ready:=09=09Get ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns boolean: ready (true) or not (false) + * @set_vq_state:=09=09Set the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@state: virtqueue state (last_avail_idx) + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @get_vq_state:=09=09Get the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns virtqueue state (last_avail_idx) + * @get_vq_align:=09=09Get the virtqueue align requirement + *=09=09=09=09for the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns virtqueue algin requirement + * @get_features:=09=09Get virtio features supported by the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns the virtio features support by the + *=09=09=09=09device + * @set_features:=09=09Set virtio features supported by the driver + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@features: feature support by the driver + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_config_cb:=09=09Set the config interrupt callback + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @get_vq_num_max:=09=09Get the max size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u16: max size of virtqueue + * @get_device_id:=09=09Get virtio device id + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio device id + * @get_vendor_id:=09=09Get id for the vendor that provides this device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio vendor id + * @get_status:=09=09=09Get the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u8: virtio device status + * @set_status:=09=09=09Set the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@status: virtio device status + * @get_config:=09=09=09Read from device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to read to + *=09=09=09=09@len: the length to read from + *=09=09=09=09configration space + * @set_config:=09=09=09Write to device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to write from + *=09=09=09=09@len: the length to write to + *=09=09=09=09configration space + * @get_generation:=09=09Get device config generaton (optional) + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: device generation + */ +struct mdev_virtio_device_ops { +=09/* Virtqueue ops */ +=09int (*set_vq_address)(struct mdev_device *mdev, +=09=09=09 u16 idx, u64 desc_area, u64 driver_area, +=09=09=09 u64 device_area); +=09void (*set_vq_num)(struct mdev_device *mdev, u16 idx, u32 num); +=09void (*kick_vq)(struct mdev_device *mdev, u16 idx); +=09void (*set_vq_cb)(struct mdev_device *mdev, u16 idx, +=09=09=09 struct virtio_mdev_callback *cb); +=09void (*set_vq_ready)(struct mdev_device *mdev, u16 idx, bool ready); +=09bool (*get_vq_ready)(struct mdev_device *mdev, u16 idx); +=09int (*set_vq_state)(struct mdev_device *mdev, u16 idx, u64 state); +=09u64 (*get_vq_state)(struct mdev_device *mdev, u16 idx); + +=09/* Virtio device ops */ +=09u16 (*get_vq_align)(struct mdev_device *mdev); +=09u64 (*get_features)(struct mdev_device *mdev); +=09int (*set_features)(struct mdev_device *mdev, u64 features); +=09void (*set_config_cb)(struct mdev_device *mdev, +=09=09=09 struct virtio_mdev_callback *cb); +=09u16 (*get_vq_num_max)(struct mdev_device *mdev); +=09u32 (*get_device_id)(struct mdev_device *mdev); +=09u32 (*get_vendor_id)(struct mdev_device *mdev); +=09u8 (*get_status)(struct mdev_device *mdev); +=09void (*set_status)(struct mdev_device *mdev, u8 status); +=09void (*get_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 void *buf, unsigned int len); +=09void (*set_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 const void *buf, unsigned int len); +=09u32 (*get_generation)(struct mdev_device *mdev); +}; + +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); + +#endif --=20 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V8 4/6] mdev: introduce virtio device and its device ops Date: Tue, 5 Nov 2019 17:32:38 +0800 Message-ID: <20191105093240.5135-5-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> Sender: linux-kernel-owner@vger.kernel.org To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com List-Id: dri-devel@lists.freedesktop.org This patch implements basic support for mdev driver that supports virtio transport for kernel virtio driver. Signed-off-by: Jason Wang --- drivers/vfio/mdev/mdev_core.c | 21 +++++ drivers/vfio/mdev/mdev_private.h | 2 + include/linux/mdev.h | 6 ++ include/linux/mdev_virtio_ops.h | 149 +++++++++++++++++++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 include/linux/mdev_virtio_ops.h diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index 4e70f19ac145..c58253404ed5 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -78,6 +78,27 @@ const struct mdev_vfio_device_ops *mdev_get_vfio_ops(str= uct mdev_device *mdev) } EXPORT_SYMBOL(mdev_get_vfio_ops); =20 +/* + * Specify the virtio device ops for the mdev device, this + * must be called during create() callback for virtio mdev device. + */ +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops) +{ +=09mdev_set_class(mdev, MDEV_CLASS_ID_VIRTIO); +=09mdev->virtio_ops =3D virtio_ops; +} +EXPORT_SYMBOL(mdev_set_virtio_ops); + +/* Get the virtio device ops for the mdev device. */ +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev) +{ +=09WARN_ON(mdev->class_id !=3D MDEV_CLASS_ID_VIRTIO); +=09return mdev->virtio_ops; +} +EXPORT_SYMBOL(mdev_get_virtio_ops); + struct device *mdev_dev(struct mdev_device *mdev) { =09return &mdev->dev; diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_priv= ate.h index 411227373625..2c74dd032409 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -11,6 +11,7 @@ #define MDEV_PRIVATE_H =20 #include +#include =20 int mdev_bus_register(void); void mdev_bus_unregister(void); @@ -38,6 +39,7 @@ struct mdev_device { =09u16 class_id; =09union { =09=09const struct mdev_vfio_device_ops *vfio_ops; +=09=09const struct mdev_virtio_device_ops *virtio_ops; =09}; }; =20 diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 9e37506d1987..f3d75a60c2b5 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -17,6 +17,7 @@ =20 struct mdev_device; struct mdev_vfio_device_ops; +struct mdev_virtio_device_ops; =20 /* * Called by the parent device driver to set the device which represents @@ -112,6 +113,10 @@ void mdev_set_class(struct mdev_device *mdev, u16 id); void mdev_set_vfio_ops(struct mdev_device *mdev, =09=09 const struct mdev_vfio_device_ops *vfio_ops); const struct mdev_vfio_device_ops *mdev_get_vfio_ops(struct mdev_device *m= dev); +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev); =20 extern struct bus_type mdev_bus_type; =20 @@ -127,6 +132,7 @@ struct mdev_device *mdev_from_dev(struct device *dev); =20 enum { =09MDEV_CLASS_ID_VFIO =3D 1, +=09MDEV_CLASS_ID_VIRTIO =3D 2, =09/* New entries must be added here */ }; =20 diff --git a/include/linux/mdev_virtio_ops.h b/include/linux/mdev_virtio_op= s.h new file mode 100644 index 000000000000..379bfa5d6a30 --- /dev/null +++ b/include/linux/mdev_virtio_ops.h @@ -0,0 +1,149 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Virtio mediated device driver + * + * Copyright 2019, Red Hat Corp. + * Author: Jason Wang + */ +#ifndef MDEV_VIRTIO_OPS_H +#define MDEV_VIRTIO_OPS_H + +#include +#include +#include + +#define VIRTIO_MDEV_DEVICE_API_STRING=09=09"virtio-mdev" +#define VIRTIO_MDEV_F_VERSION_1 0x1 + +struct virtio_mdev_callback { +=09irqreturn_t (*callback)(void *data); +=09void *private; +}; + +/** + * struct mdev_virtio_device_ops - Structure to be registered for each + * mdev device to register the device for virtio/vhost drivers. + * + * The device ops that is supported by VIRTIO_MDEV_F_VERSION_1, the + * callbacks are mandatory unless explicity mentioned. + * + * @set_vq_address:=09=09Set the address of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@desc_area: address of desc area + *=09=09=09=09@driver_area: address of driver area + *=09=09=09=09@device_area: address of device area + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_vq_num:=09=09=09Set the size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@num: the size of virtqueue + * @kick_vq:=09=09=09Kick the virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + * @set_vq_cb:=09=09=09Set the interrupt callback function for + *=09=09=09=09a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @set_vq_ready:=09=09Set ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@ready: ready (true) not ready(false) + * @get_vq_ready:=09=09Get ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns boolean: ready (true) or not (false) + * @set_vq_state:=09=09Set the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@state: virtqueue state (last_avail_idx) + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @get_vq_state:=09=09Get the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns virtqueue state (last_avail_idx) + * @get_vq_align:=09=09Get the virtqueue align requirement + *=09=09=09=09for the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns virtqueue algin requirement + * @get_features:=09=09Get virtio features supported by the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns the virtio features support by the + *=09=09=09=09device + * @set_features:=09=09Set virtio features supported by the driver + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@features: feature support by the driver + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_config_cb:=09=09Set the config interrupt callback + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @get_vq_num_max:=09=09Get the max size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u16: max size of virtqueue + * @get_device_id:=09=09Get virtio device id + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio device id + * @get_vendor_id:=09=09Get id for the vendor that provides this device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio vendor id + * @get_status:=09=09=09Get the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u8: virtio device status + * @set_status:=09=09=09Set the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@status: virtio device status + * @get_config:=09=09=09Read from device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to read to + *=09=09=09=09@len: the length to read from + *=09=09=09=09configration space + * @set_config:=09=09=09Write to device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to write from + *=09=09=09=09@len: the length to write to + *=09=09=09=09configration space + * @get_generation:=09=09Get device config generaton (optional) + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: device generation + */ +struct mdev_virtio_device_ops { +=09/* Virtqueue ops */ +=09int (*set_vq_address)(struct mdev_device *mdev, +=09=09=09 u16 idx, u64 desc_area, u64 driver_area, +=09=09=09 u64 device_area); +=09void (*set_vq_num)(struct mdev_device *mdev, u16 idx, u32 num); +=09void (*kick_vq)(struct mdev_device *mdev, u16 idx); +=09void (*set_vq_cb)(struct mdev_device *mdev, u16 idx, +=09=09=09 struct virtio_mdev_callback *cb); +=09void (*set_vq_ready)(struct mdev_device *mdev, u16 idx, bool ready); +=09bool (*get_vq_ready)(struct mdev_device *mdev, u16 idx); +=09int (*set_vq_state)(struct mdev_device *mdev, u16 idx, u64 state); +=09u64 (*get_vq_state)(struct mdev_device *mdev, u16 idx); + +=09/* Virtio device ops */ +=09u16 (*get_vq_align)(struct mdev_device *mdev); +=09u64 (*get_features)(struct mdev_device *mdev); +=09int (*set_features)(struct mdev_device *mdev, u64 features); +=09void (*set_config_cb)(struct mdev_device *mdev, +=09=09=09 struct virtio_mdev_callback *cb); +=09u16 (*get_vq_num_max)(struct mdev_device *mdev); +=09u32 (*get_device_id)(struct mdev_device *mdev); +=09u32 (*get_vendor_id)(struct mdev_device *mdev); +=09u8 (*get_status)(struct mdev_device *mdev); +=09void (*set_status)(struct mdev_device *mdev, u8 status); +=09void (*get_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 void *buf, unsigned int len); +=09void (*set_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 const void *buf, unsigned int len); +=09u32 (*get_generation)(struct mdev_device *mdev); +}; + +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); + +#endif --=20 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBE61C49EAD for ; Tue, 5 Nov 2019 09:38:12 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 98AD7217F5 for ; Tue, 5 Nov 2019 09:38:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 98AD7217F5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 00AF36E96C; Tue, 5 Nov 2019 09:38:12 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D6D06E96C for ; Tue, 5 Nov 2019 09:38:10 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-164-tR3tNhCwMZuUVe3S9-7p7g-1; Tue, 05 Nov 2019 04:38:06 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CFF47800C73; Tue, 5 Nov 2019 09:38:01 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id CDF395C1B2; Tue, 5 Nov 2019 09:36:38 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Subject: [PATCH V8 4/6] mdev: introduce virtio device and its device ops Date: Tue, 5 Nov 2019 17:32:38 +0800 Message-Id: <20191105093240.5135-5-jasowang@redhat.com> In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: tR3tNhCwMZuUVe3S9-7p7g-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572946689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HbOiebGgVWYiwShAeT9cSxTLA5sWEIMRFlVhkay6wXY=; b=PQVBZzL/gVHjAtAcKBaj8u8GzkdO9blhSuIqswwsavPdkm/y7zg/bE4cGz7txjb4WtFgO/ FMntioPx1ycwpEyDuHXdqPv39Zy4gyD24sGyeaZs0EzP3AXLALMz8rDEwBLQR03EMWwKBF ey46BVP7BPcPFJMQq22IG5R67eNumkE= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, kevin.tian@intel.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, zhi.a.wang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191105093238.aWKrdI4rehMz2eiqnUq4xy9t2BthEXMLscF_VAUKmlQ@z> VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGJhc2ljIHN1cHBvcnQgZm9yIG1kZXYgZHJpdmVyIHRoYXQg c3VwcG9ydHMKdmlydGlvIHRyYW5zcG9ydCBmb3Iga2VybmVsIHZpcnRpbyBkcml2ZXIuCgpTaWdu ZWQtb2ZmLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMv dmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIxICsrKysrCiBkcml2ZXJzL3ZmaW8vbWRldi9t ZGV2X3ByaXZhdGUuaCB8ICAgMiArCiBpbmNsdWRlL2xpbnV4L21kZXYuaCAgICAgICAgICAgICB8 ICAgNiArKwogaW5jbHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaCAgfCAxNDkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxNzggaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWRldl92aXJ0aW9fb3BzLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYyBiL2RyaXZlcnMvdmZpby9t ZGV2L21kZXZfY29yZS5jCmluZGV4IDRlNzBmMTlhYzE0NS4uYzU4MjUzNDA0ZWQ1IDEwMDY0NAot LS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYworKysgYi9kcml2ZXJzL3ZmaW8vbWRl di9tZGV2X2NvcmUuYwpAQCAtNzgsNiArNzgsMjcgQEAgY29uc3Qgc3RydWN0IG1kZXZfdmZpb19k ZXZpY2Vfb3BzICptZGV2X2dldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiB9 CiBFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZmaW9fb3BzKTsKIAorLyoKKyAqIFNwZWNpZnkgdGhl IHZpcnRpbyBkZXZpY2Ugb3BzIGZvciB0aGUgbWRldiBkZXZpY2UsIHRoaXMKKyAqIG11c3QgYmUg Y2FsbGVkIGR1cmluZyBjcmVhdGUoKSBjYWxsYmFjayBmb3IgdmlydGlvIG1kZXYgZGV2aWNlLgor ICovCit2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAor CQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKQorewor CW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVklSVElPKTsKKwltZGV2LT52aXJ0 aW9fb3BzID0gdmlydGlvX29wczsKK30KK0VYUE9SVF9TWU1CT0wobWRldl9zZXRfdmlydGlvX29w cyk7CisKKy8qIEdldCB0aGUgdmlydGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZS4g Ki8KK2NvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICoKK21kZXZfZ2V0X3ZpcnRp b19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQoreworCVdBUk5fT04obWRldi0+Y2xhc3Nf aWQgIT0gTURFVl9DTEFTU19JRF9WSVJUSU8pOworCXJldHVybiBtZGV2LT52aXJ0aW9fb3BzOwor fQorRVhQT1JUX1NZTUJPTChtZGV2X2dldF92aXJ0aW9fb3BzKTsKKwogc3RydWN0IGRldmljZSAq bWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogewogCXJldHVybiAmbWRldi0+ZGV2 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggYi9kcml2ZXJz L3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaAppbmRleCA0MTEyMjczNzM2MjUuLjJjNzRkZDAzMjQw OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKKysrIGIvZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUg TURFVl9QUklWQVRFX0gKIAogI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpb19vcHMuaD4KKyNpbmNs dWRlIDxsaW51eC9tZGV2X3ZpcnRpb19vcHMuaD4KIAogaW50ICBtZGV2X2J1c19yZWdpc3Rlcih2 b2lkKTsKIHZvaWQgbWRldl9idXNfdW5yZWdpc3Rlcih2b2lkKTsKQEAgLTM4LDYgKzM5LDcgQEAg c3RydWN0IG1kZXZfZGV2aWNlIHsKIAl1MTYgY2xhc3NfaWQ7CiAJdW5pb24gewogCQljb25zdCBz dHJ1Y3QgbWRldl92ZmlvX2RldmljZV9vcHMgKnZmaW9fb3BzOworCQljb25zdCBzdHJ1Y3QgbWRl dl92aXJ0aW9fZGV2aWNlX29wcyAqdmlydGlvX29wczsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9tZGV2LmggYi9pbmNsdWRlL2xpbnV4L21kZXYuaAppbmRleCA5ZTM3NTA2 ZDE5ODcuLmYzZDc1YTYwYzJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZGV2LmgKKysr IGIvaW5jbHVkZS9saW51eC9tZGV2LmgKQEAgLTE3LDYgKzE3LDcgQEAKIAogc3RydWN0IG1kZXZf ZGV2aWNlOwogc3RydWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzOworc3RydWN0IG1kZXZfdmlydGlv X2RldmljZV9vcHM7CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIHBhcmVudCBkZXZpY2UgZHJpdmVy IHRvIHNldCB0aGUgZGV2aWNlIHdoaWNoIHJlcHJlc2VudHMKQEAgLTExMiw2ICsxMTMsMTAgQEAg dm9pZCBtZGV2X3NldF9jbGFzcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZCk7CiB2 b2lkIG1kZXZfc2V0X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKIAkJICAgICAg IGNvbnN0IHN0cnVjdCBtZGV2X3ZmaW9fZGV2aWNlX29wcyAqdmZpb19vcHMpOwogY29uc3Qgc3Ry dWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzICptZGV2X2dldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9k ZXZpY2UgKm1kZXYpOwordm9pZCBtZGV2X3NldF92aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldiwKKwkJCSBjb25zdCBzdHJ1Y3QgbWRldl92aXJ0aW9fZGV2aWNlX29wcyAqdmlydGlv X29wcyk7Citjb25zdCBzdHJ1Y3QgbWRldl92aXJ0aW9fZGV2aWNlX29wcyAqCittZGV2X2dldF92 aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CiAKIGV4dGVybiBzdHJ1Y3QgYnVz X3R5cGUgbWRldl9idXNfdHlwZTsKIApAQCAtMTI3LDYgKzEzMiw3IEBAIHN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldl9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBlbnVtIHsKIAlNREVW X0NMQVNTX0lEX1ZGSU8gPSAxLAorCU1ERVZfQ0xBU1NfSURfVklSVElPID0gMiwKIAkvKiBOZXcg ZW50cmllcyBtdXN0IGJlIGFkZGVkIGhlcmUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbWRldl92aXJ0aW9fb3BzLmggYi9pbmNsdWRlL2xpbnV4L21kZXZfdmlydGlvX29wcy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzc5YmZhNWQ2YTMwCi0t LSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaApAQCAtMCww ICsxLDE0OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwor LyoKKyAqIFZpcnRpbyBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIw MTksIFJlZCBIYXQgQ29ycC4KKyAqICAgICBBdXRob3I6IEphc29uIFdhbmcgPGphc293YW5nQHJl ZGhhdC5jb20+CisgKi8KKyNpZm5kZWYgTURFVl9WSVJUSU9fT1BTX0gKKyNkZWZpbmUgTURFVl9W SVJUSU9fT1BTX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxp bnV4L21kZXYuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3Zob3N0Lmg+CisKKyNkZWZpbmUgVklS VElPX01ERVZfREVWSUNFX0FQSV9TVFJJTkcJCSJ2aXJ0aW8tbWRldiIKKyNkZWZpbmUgVklSVElP X01ERVZfRl9WRVJTSU9OXzEgMHgxCisKK3N0cnVjdCB2aXJ0aW9fbWRldl9jYWxsYmFjayB7CisJ aXJxcmV0dXJuX3QgKCpjYWxsYmFjaykodm9pZCAqZGF0YSk7CisJdm9pZCAqcHJpdmF0ZTsKK307 CisKKy8qKgorICogc3RydWN0IG1kZXZfdmlydGlvX2RldmljZV9vcHMgLSBTdHJ1Y3R1cmUgdG8g YmUgcmVnaXN0ZXJlZCBmb3IgZWFjaAorICogbWRldiBkZXZpY2UgdG8gcmVnaXN0ZXIgdGhlIGRl dmljZSBmb3IgdmlydGlvL3Zob3N0IGRyaXZlcnMuCisgKgorICogVGhlIGRldmljZSBvcHMgdGhh dCBpcyBzdXBwb3J0ZWQgYnkgVklSVElPX01ERVZfRl9WRVJTSU9OXzEsIHRoZQorICogY2FsbGJh Y2tzIGFyZSBtYW5kYXRvcnkgdW5sZXNzIGV4cGxpY2l0eSBtZW50aW9uZWQuCisgKgorICogQHNl dF92cV9hZGRyZXNzOgkJU2V0IHRoZSBhZGRyZXNzIG9mIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6 IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4CisgKgkJCQlAZGVz Y19hcmVhOiBhZGRyZXNzIG9mIGRlc2MgYXJlYQorICoJCQkJQGRyaXZlcl9hcmVhOiBhZGRyZXNz IG9mIGRyaXZlciBhcmVhCisgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mgb2YgZGV2aWNlIGFy ZWEKKyAqCQkJCVJldHVybnMgaW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJyb3IgKDwgMCkKKyAq IEBzZXRfdnFfbnVtOgkJCVNldCB0aGUgc2l6ZSBvZiB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBt ZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAorICoJCQkJQG51bTog dGhlIHNpemUgb2YgdmlydHF1ZXVlCisgKiBAa2lja192cToJCQlLaWNrIHRoZSB2aXJ0cXVldWUK KyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRl eAorICogQHNldF92cV9jYjoJCQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbiBm b3IKKyAqCQkJCWEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJ CQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUBjYjogdmlydGlvLW1kZXYgaW50ZXJydXB0 IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQHNldF92cV9yZWFkeToJCVNldCByZWFkeSBzdGF0dXMg Zm9yIGEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAaWR4 OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUByZWFkeTogcmVhZHkgKHRydWUpIG5vdCByZWFkeShm YWxzZSkKKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQgcmVhZHkgc3RhdHVzIGZvciBhIHZpcnRxdWV1 ZQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGlu ZGV4CisgKgkJCQlSZXR1cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBub3QgKGZhbHNlKQor ICogQHNldF92cV9zdGF0ZToJCVNldCB0aGUgc3RhdGUgZm9yIGEgdmlydHF1ZXVlCisgKgkJCQlA bWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJ CUBzdGF0ZTogdmlydHF1ZXVlIHN0YXRlIChsYXN0X2F2YWlsX2lkeCkKKyAqCQkJCVJldHVybnMg aW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJyb3IgKDwgMCkKKyAqIEBnZXRfdnFfc3RhdGU6CQlH ZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmlj ZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4CisgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBz dGF0ZSAobGFzdF9hdmFpbF9pZHgpCisgKiBAZ2V0X3ZxX2FsaWduOgkJR2V0IHRoZSB2aXJ0cXVl dWUgYWxpZ24gcmVxdWlyZW1lbnQKKyAqCQkJCWZvciB0aGUgZGV2aWNlCisgKgkJCQlAbWRldjog bWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBhbGdpbiByZXF1aXJlbWVu dAorICogQGdldF9mZWF0dXJlczoJCUdldCB2aXJ0aW8gZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRo ZSBkZXZpY2UKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCVJldHVybnMgdGhl IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0IGJ5IHRoZQorICoJCQkJZGV2aWNlCisgKiBAc2V0X2Zl YXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcgorICoJ CQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGZlYXR1cmVzOiBmZWF0dXJlIHN1cHBv cnQgYnkgdGhlIGRyaXZlcgorICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNjZXNzICgwKSBvciBl cnJvciAoPCAwKQorICogQHNldF9jb25maWdfY2I6CQlTZXQgdGhlIGNvbmZpZyBpbnRlcnJ1cHQg Y2FsbGJhY2sKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBjYjogdmlydGlv LW1kZXYgaW50ZXJydXB0IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQGdldF92cV9udW1fbWF4OgkJ R2V0IHRoZSBtYXggc2l6ZSBvZiB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKKyAqCQkJCVJldHVybnMgdTE2OiBtYXggc2l6ZSBvZiB2aXJ0cXVldWUKKyAqIEBnZXRfZGV2 aWNlX2lkOgkJR2V0IHZpcnRpbyBkZXZpY2UgaWQKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKKyAqCQkJCVJldHVybnMgdTMyOiB2aXJ0aW8gZGV2aWNlIGlkCisgKiBAZ2V0X3ZlbmRvcl9p ZDoJCUdldCBpZCBmb3IgdGhlIHZlbmRvciB0aGF0IHByb3ZpZGVzIHRoaXMgZGV2aWNlCisgKgkJ CQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHUzMjogdmlydGlvIHZlbmRv ciBpZAorICogQGdldF9zdGF0dXM6CQkJR2V0IHRoZSBkZXZpY2Ugc3RhdHVzCisgKgkJCQlAbWRl djogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHU4OiB2aXJ0aW8gZGV2aWNlIHN0YXR1 cworICogQHNldF9zdGF0dXM6CQkJU2V0IHRoZSBkZXZpY2Ugc3RhdHVzCisgKgkJCQlAbWRldjog bWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAc3RhdHVzOiB2aXJ0aW8gZGV2aWNlIHN0YXR1cworICog QGdldF9jb25maWc6CQkJUmVhZCBmcm9tIGRldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNw YWNlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAb2Zmc2V0OiBvZmZzZXQg ZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisgKgkJCQljb25maWd1cmF0aW9uIHNwYWNlCisgKgkJCQlA YnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCisgKgkJCQlAbGVuOiB0aGUgbGVuZ3RoIHRvIHJl YWQgZnJvbQorICoJCQkJY29uZmlncmF0aW9uIHNwYWNlCisgKiBAc2V0X2NvbmZpZzoJCQlXcml0 ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQorICoJCQkJQG1kZXY6IG1l ZGlhdGVkIGRldmljZQorICoJCQkJQG9mZnNldDogb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBv ZgorICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQorICoJCQkJQGJ1ZjogYnVmZmVyIHVzZWQgdG8g d3JpdGUgZnJvbQorICoJCQkJQGxlbjogdGhlIGxlbmd0aCB0byB3cml0ZSB0bworICoJCQkJY29u ZmlncmF0aW9uIHNwYWNlCisgKiBAZ2V0X2dlbmVyYXRpb246CQlHZXQgZGV2aWNlIGNvbmZpZyBn ZW5lcmF0b24gKG9wdGlvbmFsKQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJ UmV0dXJucyB1MzI6IGRldmljZSBnZW5lcmF0aW9uCisgKi8KK3N0cnVjdCBtZGV2X3ZpcnRpb19k ZXZpY2Vfb3BzIHsKKwkvKiBWaXJ0cXVldWUgb3BzICovCisJaW50ICgqc2V0X3ZxX2FkZHJlc3Mp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKKwkJCSAgICAgIHUxNiBpZHgsIHU2NCBkZXNjX2Fy ZWEsIHU2NCBkcml2ZXJfYXJlYSwKKwkJCSAgICAgIHU2NCBkZXZpY2VfYXJlYSk7CisJdm9pZCAo KnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCwgdTMyIG51bSk7 CisJdm9pZCAoKmtpY2tfdnEpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCk7CisJ dm9pZCAoKnNldF92cV9jYikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWR4LAorCQkJ ICBzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgKmNiKTsKKwl2b2lkICgqc2V0X3ZxX3JlYWR5 KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIGJvb2wgcmVhZHkpOworCWJvb2wg KCpnZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCk7CisJaW50 ICgqc2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIHU2NCBz dGF0ZSk7CisJdTY0ICgqZ2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUx NiBpZHgpOworCisJLyogVmlydGlvIGRldmljZSBvcHMgKi8KKwl1MTYgKCpnZXRfdnFfYWxpZ24p KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJdTY0ICgqZ2V0X2ZlYXR1cmVzKShzdHJ1Y3Qg bWRldl9kZXZpY2UgKm1kZXYpOworCWludCAoKnNldF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2 aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOworCXZvaWQgKCpzZXRfY29uZmlnX2NiKShzdHJ1Y3Qg bWRldl9kZXZpY2UgKm1kZXYsCisJCQkgICAgICBzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sg KmNiKTsKKwl1MTYgKCpnZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsK Kwl1MzIgKCpnZXRfZGV2aWNlX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCXUzMiAo KmdldF92ZW5kb3JfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJdTggKCpnZXRfc3Rh dHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCXZvaWQgKCpzZXRfc3RhdHVzKShzdHJ1 Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHU4IHN0YXR1cyk7CisJdm9pZCAoKmdldF9jb25maWcpKHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIHZvaWQg KmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdm9pZCAoKnNldF9jb25maWcpKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIGNvbnN0IHZvaWQgKmJ1 ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdTMyICgqZ2V0X2dlbmVyYXRpb24pKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldik7Cit9OworCit2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3Bz ICp2aXJ0aW9fb3BzKTsKKworI2VuZGlmCi0tIAoyLjE5LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55183C49EAB for ; Tue, 5 Nov 2019 09:38:13 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 36600217F5 for ; Tue, 5 Nov 2019 09:38:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 36600217F5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3D1CA6E96E; Tue, 5 Nov 2019 09:38:12 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by gabe.freedesktop.org (Postfix) with ESMTPS id 69BC16E96E for ; Tue, 5 Nov 2019 09:38:10 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-164-tR3tNhCwMZuUVe3S9-7p7g-1; Tue, 05 Nov 2019 04:38:06 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CFF47800C73; Tue, 5 Nov 2019 09:38:01 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id CDF395C1B2; Tue, 5 Nov 2019 09:36:38 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Date: Tue, 5 Nov 2019 17:32:38 +0800 Message-Id: <20191105093240.5135-5-jasowang@redhat.com> In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: tR3tNhCwMZuUVe3S9-7p7g-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572946689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HbOiebGgVWYiwShAeT9cSxTLA5sWEIMRFlVhkay6wXY=; b=PQVBZzL/gVHjAtAcKBaj8u8GzkdO9blhSuIqswwsavPdkm/y7zg/bE4cGz7txjb4WtFgO/ FMntioPx1ycwpEyDuHXdqPv39Zy4gyD24sGyeaZs0EzP3AXLALMz8rDEwBLQR03EMWwKBF ey46BVP7BPcPFJMQq22IG5R67eNumkE= Subject: [Intel-gfx] [PATCH V8 4/6] mdev: introduce virtio device and its device ops X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191105093238.C7N0sQGgYQTAtRmKaTzG2O3jVKwuQB8h-lFaCxdZm6M@z> VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGJhc2ljIHN1cHBvcnQgZm9yIG1kZXYgZHJpdmVyIHRoYXQg c3VwcG9ydHMKdmlydGlvIHRyYW5zcG9ydCBmb3Iga2VybmVsIHZpcnRpbyBkcml2ZXIuCgpTaWdu ZWQtb2ZmLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMv dmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIxICsrKysrCiBkcml2ZXJzL3ZmaW8vbWRldi9t ZGV2X3ByaXZhdGUuaCB8ICAgMiArCiBpbmNsdWRlL2xpbnV4L21kZXYuaCAgICAgICAgICAgICB8 ICAgNiArKwogaW5jbHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaCAgfCAxNDkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxNzggaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWRldl92aXJ0aW9fb3BzLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYyBiL2RyaXZlcnMvdmZpby9t ZGV2L21kZXZfY29yZS5jCmluZGV4IDRlNzBmMTlhYzE0NS4uYzU4MjUzNDA0ZWQ1IDEwMDY0NAot LS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYworKysgYi9kcml2ZXJzL3ZmaW8vbWRl di9tZGV2X2NvcmUuYwpAQCAtNzgsNiArNzgsMjcgQEAgY29uc3Qgc3RydWN0IG1kZXZfdmZpb19k ZXZpY2Vfb3BzICptZGV2X2dldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiB9 CiBFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZmaW9fb3BzKTsKIAorLyoKKyAqIFNwZWNpZnkgdGhl IHZpcnRpbyBkZXZpY2Ugb3BzIGZvciB0aGUgbWRldiBkZXZpY2UsIHRoaXMKKyAqIG11c3QgYmUg Y2FsbGVkIGR1cmluZyBjcmVhdGUoKSBjYWxsYmFjayBmb3IgdmlydGlvIG1kZXYgZGV2aWNlLgor ICovCit2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAor CQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKQorewor CW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVklSVElPKTsKKwltZGV2LT52aXJ0 aW9fb3BzID0gdmlydGlvX29wczsKK30KK0VYUE9SVF9TWU1CT0wobWRldl9zZXRfdmlydGlvX29w cyk7CisKKy8qIEdldCB0aGUgdmlydGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZS4g Ki8KK2NvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICoKK21kZXZfZ2V0X3ZpcnRp b19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQoreworCVdBUk5fT04obWRldi0+Y2xhc3Nf aWQgIT0gTURFVl9DTEFTU19JRF9WSVJUSU8pOworCXJldHVybiBtZGV2LT52aXJ0aW9fb3BzOwor fQorRVhQT1JUX1NZTUJPTChtZGV2X2dldF92aXJ0aW9fb3BzKTsKKwogc3RydWN0IGRldmljZSAq bWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogewogCXJldHVybiAmbWRldi0+ZGV2 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggYi9kcml2ZXJz L3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaAppbmRleCA0MTEyMjczNzM2MjUuLjJjNzRkZDAzMjQw OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKKysrIGIvZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUg TURFVl9QUklWQVRFX0gKIAogI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpb19vcHMuaD4KKyNpbmNs dWRlIDxsaW51eC9tZGV2X3ZpcnRpb19vcHMuaD4KIAogaW50ICBtZGV2X2J1c19yZWdpc3Rlcih2 b2lkKTsKIHZvaWQgbWRldl9idXNfdW5yZWdpc3Rlcih2b2lkKTsKQEAgLTM4LDYgKzM5LDcgQEAg c3RydWN0IG1kZXZfZGV2aWNlIHsKIAl1MTYgY2xhc3NfaWQ7CiAJdW5pb24gewogCQljb25zdCBz dHJ1Y3QgbWRldl92ZmlvX2RldmljZV9vcHMgKnZmaW9fb3BzOworCQljb25zdCBzdHJ1Y3QgbWRl dl92aXJ0aW9fZGV2aWNlX29wcyAqdmlydGlvX29wczsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9tZGV2LmggYi9pbmNsdWRlL2xpbnV4L21kZXYuaAppbmRleCA5ZTM3NTA2 ZDE5ODcuLmYzZDc1YTYwYzJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZGV2LmgKKysr IGIvaW5jbHVkZS9saW51eC9tZGV2LmgKQEAgLTE3LDYgKzE3LDcgQEAKIAogc3RydWN0IG1kZXZf ZGV2aWNlOwogc3RydWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzOworc3RydWN0IG1kZXZfdmlydGlv X2RldmljZV9vcHM7CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIHBhcmVudCBkZXZpY2UgZHJpdmVy IHRvIHNldCB0aGUgZGV2aWNlIHdoaWNoIHJlcHJlc2VudHMKQEAgLTExMiw2ICsxMTMsMTAgQEAg dm9pZCBtZGV2X3NldF9jbGFzcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZCk7CiB2 b2lkIG1kZXZfc2V0X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKIAkJICAgICAg IGNvbnN0IHN0cnVjdCBtZGV2X3ZmaW9fZGV2aWNlX29wcyAqdmZpb19vcHMpOwogY29uc3Qgc3Ry dWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzICptZGV2X2dldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9k ZXZpY2UgKm1kZXYpOwordm9pZCBtZGV2X3NldF92aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldiwKKwkJCSBjb25zdCBzdHJ1Y3QgbWRldl92aXJ0aW9fZGV2aWNlX29wcyAqdmlydGlv X29wcyk7Citjb25zdCBzdHJ1Y3QgbWRldl92aXJ0aW9fZGV2aWNlX29wcyAqCittZGV2X2dldF92 aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CiAKIGV4dGVybiBzdHJ1Y3QgYnVz X3R5cGUgbWRldl9idXNfdHlwZTsKIApAQCAtMTI3LDYgKzEzMiw3IEBAIHN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldl9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBlbnVtIHsKIAlNREVW X0NMQVNTX0lEX1ZGSU8gPSAxLAorCU1ERVZfQ0xBU1NfSURfVklSVElPID0gMiwKIAkvKiBOZXcg ZW50cmllcyBtdXN0IGJlIGFkZGVkIGhlcmUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbWRldl92aXJ0aW9fb3BzLmggYi9pbmNsdWRlL2xpbnV4L21kZXZfdmlydGlvX29wcy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzc5YmZhNWQ2YTMwCi0t LSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaApAQCAtMCww ICsxLDE0OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwor LyoKKyAqIFZpcnRpbyBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIw MTksIFJlZCBIYXQgQ29ycC4KKyAqICAgICBBdXRob3I6IEphc29uIFdhbmcgPGphc293YW5nQHJl ZGhhdC5jb20+CisgKi8KKyNpZm5kZWYgTURFVl9WSVJUSU9fT1BTX0gKKyNkZWZpbmUgTURFVl9W SVJUSU9fT1BTX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxp bnV4L21kZXYuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3Zob3N0Lmg+CisKKyNkZWZpbmUgVklS VElPX01ERVZfREVWSUNFX0FQSV9TVFJJTkcJCSJ2aXJ0aW8tbWRldiIKKyNkZWZpbmUgVklSVElP X01ERVZfRl9WRVJTSU9OXzEgMHgxCisKK3N0cnVjdCB2aXJ0aW9fbWRldl9jYWxsYmFjayB7CisJ aXJxcmV0dXJuX3QgKCpjYWxsYmFjaykodm9pZCAqZGF0YSk7CisJdm9pZCAqcHJpdmF0ZTsKK307 CisKKy8qKgorICogc3RydWN0IG1kZXZfdmlydGlvX2RldmljZV9vcHMgLSBTdHJ1Y3R1cmUgdG8g YmUgcmVnaXN0ZXJlZCBmb3IgZWFjaAorICogbWRldiBkZXZpY2UgdG8gcmVnaXN0ZXIgdGhlIGRl dmljZSBmb3IgdmlydGlvL3Zob3N0IGRyaXZlcnMuCisgKgorICogVGhlIGRldmljZSBvcHMgdGhh dCBpcyBzdXBwb3J0ZWQgYnkgVklSVElPX01ERVZfRl9WRVJTSU9OXzEsIHRoZQorICogY2FsbGJh Y2tzIGFyZSBtYW5kYXRvcnkgdW5sZXNzIGV4cGxpY2l0eSBtZW50aW9uZWQuCisgKgorICogQHNl dF92cV9hZGRyZXNzOgkJU2V0IHRoZSBhZGRyZXNzIG9mIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6 IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4CisgKgkJCQlAZGVz Y19hcmVhOiBhZGRyZXNzIG9mIGRlc2MgYXJlYQorICoJCQkJQGRyaXZlcl9hcmVhOiBhZGRyZXNz IG9mIGRyaXZlciBhcmVhCisgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mgb2YgZGV2aWNlIGFy ZWEKKyAqCQkJCVJldHVybnMgaW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJyb3IgKDwgMCkKKyAq IEBzZXRfdnFfbnVtOgkJCVNldCB0aGUgc2l6ZSBvZiB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBt ZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAorICoJCQkJQG51bTog dGhlIHNpemUgb2YgdmlydHF1ZXVlCisgKiBAa2lja192cToJCQlLaWNrIHRoZSB2aXJ0cXVldWUK KyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRl eAorICogQHNldF92cV9jYjoJCQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbiBm b3IKKyAqCQkJCWEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJ CQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUBjYjogdmlydGlvLW1kZXYgaW50ZXJydXB0 IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQHNldF92cV9yZWFkeToJCVNldCByZWFkeSBzdGF0dXMg Zm9yIGEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAaWR4 OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUByZWFkeTogcmVhZHkgKHRydWUpIG5vdCByZWFkeShm YWxzZSkKKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQgcmVhZHkgc3RhdHVzIGZvciBhIHZpcnRxdWV1 ZQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGlu ZGV4CisgKgkJCQlSZXR1cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBub3QgKGZhbHNlKQor ICogQHNldF92cV9zdGF0ZToJCVNldCB0aGUgc3RhdGUgZm9yIGEgdmlydHF1ZXVlCisgKgkJCQlA bWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJ CUBzdGF0ZTogdmlydHF1ZXVlIHN0YXRlIChsYXN0X2F2YWlsX2lkeCkKKyAqCQkJCVJldHVybnMg aW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJyb3IgKDwgMCkKKyAqIEBnZXRfdnFfc3RhdGU6CQlH ZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmlj ZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4CisgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBz dGF0ZSAobGFzdF9hdmFpbF9pZHgpCisgKiBAZ2V0X3ZxX2FsaWduOgkJR2V0IHRoZSB2aXJ0cXVl dWUgYWxpZ24gcmVxdWlyZW1lbnQKKyAqCQkJCWZvciB0aGUgZGV2aWNlCisgKgkJCQlAbWRldjog bWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBhbGdpbiByZXF1aXJlbWVu dAorICogQGdldF9mZWF0dXJlczoJCUdldCB2aXJ0aW8gZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRo ZSBkZXZpY2UKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCVJldHVybnMgdGhl IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0IGJ5IHRoZQorICoJCQkJZGV2aWNlCisgKiBAc2V0X2Zl YXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcgorICoJ CQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGZlYXR1cmVzOiBmZWF0dXJlIHN1cHBv cnQgYnkgdGhlIGRyaXZlcgorICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNjZXNzICgwKSBvciBl cnJvciAoPCAwKQorICogQHNldF9jb25maWdfY2I6CQlTZXQgdGhlIGNvbmZpZyBpbnRlcnJ1cHQg Y2FsbGJhY2sKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBjYjogdmlydGlv LW1kZXYgaW50ZXJydXB0IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQGdldF92cV9udW1fbWF4OgkJ R2V0IHRoZSBtYXggc2l6ZSBvZiB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKKyAqCQkJCVJldHVybnMgdTE2OiBtYXggc2l6ZSBvZiB2aXJ0cXVldWUKKyAqIEBnZXRfZGV2 aWNlX2lkOgkJR2V0IHZpcnRpbyBkZXZpY2UgaWQKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKKyAqCQkJCVJldHVybnMgdTMyOiB2aXJ0aW8gZGV2aWNlIGlkCisgKiBAZ2V0X3ZlbmRvcl9p ZDoJCUdldCBpZCBmb3IgdGhlIHZlbmRvciB0aGF0IHByb3ZpZGVzIHRoaXMgZGV2aWNlCisgKgkJ CQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHUzMjogdmlydGlvIHZlbmRv ciBpZAorICogQGdldF9zdGF0dXM6CQkJR2V0IHRoZSBkZXZpY2Ugc3RhdHVzCisgKgkJCQlAbWRl djogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHU4OiB2aXJ0aW8gZGV2aWNlIHN0YXR1 cworICogQHNldF9zdGF0dXM6CQkJU2V0IHRoZSBkZXZpY2Ugc3RhdHVzCisgKgkJCQlAbWRldjog bWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAc3RhdHVzOiB2aXJ0aW8gZGV2aWNlIHN0YXR1cworICog QGdldF9jb25maWc6CQkJUmVhZCBmcm9tIGRldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNw YWNlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAb2Zmc2V0OiBvZmZzZXQg ZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisgKgkJCQljb25maWd1cmF0aW9uIHNwYWNlCisgKgkJCQlA YnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCisgKgkJCQlAbGVuOiB0aGUgbGVuZ3RoIHRvIHJl YWQgZnJvbQorICoJCQkJY29uZmlncmF0aW9uIHNwYWNlCisgKiBAc2V0X2NvbmZpZzoJCQlXcml0 ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQorICoJCQkJQG1kZXY6IG1l ZGlhdGVkIGRldmljZQorICoJCQkJQG9mZnNldDogb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBv ZgorICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQorICoJCQkJQGJ1ZjogYnVmZmVyIHVzZWQgdG8g d3JpdGUgZnJvbQorICoJCQkJQGxlbjogdGhlIGxlbmd0aCB0byB3cml0ZSB0bworICoJCQkJY29u ZmlncmF0aW9uIHNwYWNlCisgKiBAZ2V0X2dlbmVyYXRpb246CQlHZXQgZGV2aWNlIGNvbmZpZyBn ZW5lcmF0b24gKG9wdGlvbmFsKQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJ UmV0dXJucyB1MzI6IGRldmljZSBnZW5lcmF0aW9uCisgKi8KK3N0cnVjdCBtZGV2X3ZpcnRpb19k ZXZpY2Vfb3BzIHsKKwkvKiBWaXJ0cXVldWUgb3BzICovCisJaW50ICgqc2V0X3ZxX2FkZHJlc3Mp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKKwkJCSAgICAgIHUxNiBpZHgsIHU2NCBkZXNjX2Fy ZWEsIHU2NCBkcml2ZXJfYXJlYSwKKwkJCSAgICAgIHU2NCBkZXZpY2VfYXJlYSk7CisJdm9pZCAo KnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCwgdTMyIG51bSk7 CisJdm9pZCAoKmtpY2tfdnEpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCk7CisJ dm9pZCAoKnNldF92cV9jYikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWR4LAorCQkJ ICBzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgKmNiKTsKKwl2b2lkICgqc2V0X3ZxX3JlYWR5 KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIGJvb2wgcmVhZHkpOworCWJvb2wg KCpnZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCk7CisJaW50 ICgqc2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIHU2NCBz dGF0ZSk7CisJdTY0ICgqZ2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUx NiBpZHgpOworCisJLyogVmlydGlvIGRldmljZSBvcHMgKi8KKwl1MTYgKCpnZXRfdnFfYWxpZ24p KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJdTY0ICgqZ2V0X2ZlYXR1cmVzKShzdHJ1Y3Qg bWRldl9kZXZpY2UgKm1kZXYpOworCWludCAoKnNldF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2 aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOworCXZvaWQgKCpzZXRfY29uZmlnX2NiKShzdHJ1Y3Qg bWRldl9kZXZpY2UgKm1kZXYsCisJCQkgICAgICBzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sg KmNiKTsKKwl1MTYgKCpnZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsK Kwl1MzIgKCpnZXRfZGV2aWNlX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCXUzMiAo KmdldF92ZW5kb3JfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJdTggKCpnZXRfc3Rh dHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCXZvaWQgKCpzZXRfc3RhdHVzKShzdHJ1 Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHU4IHN0YXR1cyk7CisJdm9pZCAoKmdldF9jb25maWcpKHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIHZvaWQg KmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdm9pZCAoKnNldF9jb25maWcpKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIGNvbnN0IHZvaWQgKmJ1 ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdTMyICgqZ2V0X2dlbmVyYXRpb24pKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldik7Cit9OworCit2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3Bz ICp2aXJ0aW9fb3BzKTsKKworI2VuZGlmCi0tIAoyLjE5LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==