From mboxrd@z Thu Jan 1 00:00:00 1970 From: shawnguo@kernel.org (Shawn Guo) Date: Thu, 29 Dec 2016 10:37:26 +0800 Subject: [PATCH v3 1/3] drm: zte: make zx_plane accessible from zx_vou driver In-Reply-To: <1482979048-32037-1-git-send-email-shawnguo@kernel.org> References: <1482979048-32037-1-git-send-email-shawnguo@kernel.org> Message-ID: <1482979048-32037-2-git-send-email-shawnguo@kernel.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Shawn Guo Move struct zx_plane from zx_plane.c to zx_plane.h, so that it can be accessed from zx_vou driver, and we can save the use of struct zx_layer_data completely. More importantly, those additional data used by VOU controller to enable/disable graphic and video layers can later be added and accessed much more easily from zx_vou driver. While at it, we make two changes to zx_plane_init() interface: - Encode struct device pointer in zx_plane, so that we do not need to pass it as a parameter. - Change return of zx_plane_init() from struct drm_plane pointer to error code, since we can get the pointer from zx_plane in zx_vou driver now. Signed-off-by: Shawn Guo --- drivers/gpu/drm/zte/zx_plane.c | 36 +++++++----------------------------- drivers/gpu/drm/zte/zx_plane.h | 11 +++++++---- drivers/gpu/drm/zte/zx_vou.c | 31 +++++++++++++++++++------------ 3 files changed, 33 insertions(+), 45 deletions(-) diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c index 546eb92a94e8..78d29b1db91c 100644 --- a/drivers/gpu/drm/zte/zx_plane.c +++ b/drivers/gpu/drm/zte/zx_plane.c @@ -21,16 +21,6 @@ #include "zx_plane_regs.h" #include "zx_vou.h" -struct zx_plane { - struct drm_plane plane; - void __iomem *layer; - void __iomem *csc; - void __iomem *hbsc; - void __iomem *rsz; -}; - -#define to_zx_plane(plane) container_of(plane, struct zx_plane, plane) - static const uint32_t gl_formats[] = { DRM_FORMAT_ARGB8888, DRM_FORMAT_XRGB8888, @@ -248,28 +238,16 @@ static void zx_plane_hbsc_init(struct zx_plane *zplane) zx_writel(hbsc + HBSC_THRESHOLD_COL3, (0x3c0 << 16) | 0x40); } -struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev, - struct zx_layer_data *data, - enum drm_plane_type type) +int zx_plane_init(struct drm_device *drm, struct zx_plane *zplane, + enum drm_plane_type type) { const struct drm_plane_helper_funcs *helper; - struct zx_plane *zplane; - struct drm_plane *plane; + struct drm_plane *plane = &zplane->plane; + struct device *dev = zplane->dev; const uint32_t *formats; unsigned int format_count; int ret; - zplane = devm_kzalloc(dev, sizeof(*zplane), GFP_KERNEL); - if (!zplane) - return ERR_PTR(-ENOMEM); - - plane = &zplane->plane; - - zplane->layer = data->layer; - zplane->hbsc = data->hbsc; - zplane->csc = data->csc; - zplane->rsz = data->rsz; - zx_plane_hbsc_init(zplane); switch (type) { @@ -282,7 +260,7 @@ struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev, /* TODO: add video layer (vl) support */ break; default: - return ERR_PTR(-ENODEV); + return -ENODEV; } ret = drm_universal_plane_init(drm, plane, VOU_CRTC_MASK, @@ -290,10 +268,10 @@ struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev, type, NULL); if (ret) { DRM_DEV_ERROR(dev, "failed to init universal plane: %d\n", ret); - return ERR_PTR(ret); + return ret; } drm_plane_helper_add(plane, helper); - return plane; + return 0; } diff --git a/drivers/gpu/drm/zte/zx_plane.h b/drivers/gpu/drm/zte/zx_plane.h index 2b82cd558d9d..264a92e0b532 100644 --- a/drivers/gpu/drm/zte/zx_plane.h +++ b/drivers/gpu/drm/zte/zx_plane.h @@ -11,16 +11,19 @@ #ifndef __ZX_PLANE_H__ #define __ZX_PLANE_H__ -struct zx_layer_data { +struct zx_plane { + struct drm_plane plane; + struct device *dev; void __iomem *layer; void __iomem *csc; void __iomem *hbsc; void __iomem *rsz; }; -struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev, - struct zx_layer_data *data, - enum drm_plane_type type); +#define to_zx_plane(plane) container_of(plane, struct zx_plane, plane) + +int zx_plane_init(struct drm_device *drm, struct zx_plane *zplane, + enum drm_plane_type type); void zx_plane_set_update(struct drm_plane *plane); #endif /* __ZX_PLANE_H__ */ diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c index 73fe15c17c32..d5c801f6f97b 100644 --- a/drivers/gpu/drm/zte/zx_vou.c +++ b/drivers/gpu/drm/zte/zx_vou.c @@ -294,7 +294,7 @@ static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou, enum vou_chn_type chn_type) { struct device *dev = vou->dev; - struct zx_layer_data data; + struct zx_plane *zplane; struct zx_crtc *zcrtc; int ret; @@ -305,19 +305,25 @@ static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou, zcrtc->vou = vou; zcrtc->chn_type = chn_type; + zplane = devm_kzalloc(dev, sizeof(*zplane), GFP_KERNEL); + if (!zplane) + return -ENOMEM; + + zplane->dev = dev; + if (chn_type == VOU_CHN_MAIN) { - data.layer = vou->osd + MAIN_GL_OFFSET; - data.csc = vou->osd + MAIN_CSC_OFFSET; - data.hbsc = vou->osd + MAIN_HBSC_OFFSET; - data.rsz = vou->otfppu + MAIN_RSZ_OFFSET; + zplane->layer = vou->osd + MAIN_GL_OFFSET; + zplane->csc = vou->osd + MAIN_CSC_OFFSET; + zplane->hbsc = vou->osd + MAIN_HBSC_OFFSET; + zplane->rsz = vou->otfppu + MAIN_RSZ_OFFSET; zcrtc->chnreg = vou->osd + OSD_MAIN_CHN; zcrtc->regs = &main_crtc_regs; zcrtc->bits = &main_crtc_bits; } else { - data.layer = vou->osd + AUX_GL_OFFSET; - data.csc = vou->osd + AUX_CSC_OFFSET; - data.hbsc = vou->osd + AUX_HBSC_OFFSET; - data.rsz = vou->otfppu + AUX_RSZ_OFFSET; + zplane->layer = vou->osd + AUX_GL_OFFSET; + zplane->csc = vou->osd + AUX_CSC_OFFSET; + zplane->hbsc = vou->osd + AUX_HBSC_OFFSET; + zplane->rsz = vou->otfppu + AUX_RSZ_OFFSET; zcrtc->chnreg = vou->osd + OSD_AUX_CHN; zcrtc->regs = &aux_crtc_regs; zcrtc->bits = &aux_crtc_bits; @@ -331,13 +337,14 @@ static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou, return ret; } - zcrtc->primary = zx_plane_init(drm, dev, &data, DRM_PLANE_TYPE_PRIMARY); - if (IS_ERR(zcrtc->primary)) { - ret = PTR_ERR(zcrtc->primary); + ret = zx_plane_init(drm, zplane, DRM_PLANE_TYPE_PRIMARY); + if (ret) { DRM_DEV_ERROR(dev, "failed to init primary plane: %d\n", ret); return ret; } + zcrtc->primary = &zplane->plane; + ret = drm_crtc_init_with_planes(drm, &zcrtc->crtc, zcrtc->primary, NULL, &zx_crtc_funcs, NULL); if (ret) { -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shawn Guo Subject: [PATCH v3 1/3] drm: zte: make zx_plane accessible from zx_vou driver Date: Thu, 29 Dec 2016 10:37:26 +0800 Message-ID: <1482979048-32037-2-git-send-email-shawnguo@kernel.org> References: <1482979048-32037-1-git-send-email-shawnguo@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB3B36E07F for ; Thu, 29 Dec 2016 02:39:23 +0000 (UTC) In-Reply-To: <1482979048-32037-1-git-send-email-shawnguo@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter , Baoyou Xie , linux-arm-kernel@lists.infradead.org, Jun Nie , Shawn Guo List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2hhd24gR3VvIDxzaGF3bi5ndW9AbGluYXJvLm9yZz4KCk1vdmUgc3RydWN0IHp4X3Bs YW5lIGZyb20genhfcGxhbmUuYyB0byB6eF9wbGFuZS5oLCBzbyB0aGF0IGl0IGNhbiBiZQphY2Nl c3NlZCBmcm9tIHp4X3ZvdSBkcml2ZXIsIGFuZCB3ZSBjYW4gc2F2ZSB0aGUgdXNlIG9mIHN0cnVj dAp6eF9sYXllcl9kYXRhIGNvbXBsZXRlbHkuICBNb3JlIGltcG9ydGFudGx5LCB0aG9zZSBhZGRp dGlvbmFsIGRhdGEgdXNlZApieSBWT1UgY29udHJvbGxlciB0byBlbmFibGUvZGlzYWJsZSBncmFw aGljIGFuZCB2aWRlbyBsYXllcnMgY2FuIGxhdGVyCmJlIGFkZGVkIGFuZCBhY2Nlc3NlZCBtdWNo IG1vcmUgZWFzaWx5IGZyb20genhfdm91IGRyaXZlci4KCldoaWxlIGF0IGl0LCB3ZSBtYWtlIHR3 byBjaGFuZ2VzIHRvIHp4X3BsYW5lX2luaXQoKSBpbnRlcmZhY2U6CgogLSBFbmNvZGUgc3RydWN0 IGRldmljZSBwb2ludGVyIGluIHp4X3BsYW5lLCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCiAg IHBhc3MgaXQgYXMgYSBwYXJhbWV0ZXIuCiAtIENoYW5nZSByZXR1cm4gb2YgenhfcGxhbmVfaW5p dCgpIGZyb20gc3RydWN0IGRybV9wbGFuZSBwb2ludGVyIHRvCiAgIGVycm9yIGNvZGUsIHNpbmNl IHdlIGNhbiBnZXQgdGhlIHBvaW50ZXIgZnJvbSB6eF9wbGFuZSBpbiB6eF92b3UKICAgZHJpdmVy IG5vdy4KClNpZ25lZC1vZmYtYnk6IFNoYXduIEd1byA8c2hhd24uZ3VvQGxpbmFyby5vcmc+Ci0t LQogZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jIHwgMzYgKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmggfCAxMSAr KysrKysrLS0tLQogZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuYyAgIHwgMzEgKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCsp LCA0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3Bs YW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMKaW5kZXggNTQ2ZWI5MmE5NGU4 Li43OGQyOWIxZGI5MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUu YworKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMKQEAgLTIxLDE2ICsyMSw2IEBA CiAjaW5jbHVkZSAienhfcGxhbmVfcmVncy5oIgogI2luY2x1ZGUgInp4X3ZvdS5oIgogCi1zdHJ1 Y3QgenhfcGxhbmUgewotCXN0cnVjdCBkcm1fcGxhbmUgcGxhbmU7Ci0Jdm9pZCBfX2lvbWVtICps YXllcjsKLQl2b2lkIF9faW9tZW0gKmNzYzsKLQl2b2lkIF9faW9tZW0gKmhic2M7Ci0Jdm9pZCBf X2lvbWVtICpyc3o7Ci19OwotCi0jZGVmaW5lIHRvX3p4X3BsYW5lKHBsYW5lKQljb250YWluZXJf b2YocGxhbmUsIHN0cnVjdCB6eF9wbGFuZSwgcGxhbmUpCi0KIHN0YXRpYyBjb25zdCB1aW50MzJf dCBnbF9mb3JtYXRzW10gPSB7CiAJRFJNX0ZPUk1BVF9BUkdCODg4OCwKIAlEUk1fRk9STUFUX1hS R0I4ODg4LApAQCAtMjQ4LDI4ICsyMzgsMTYgQEAgc3RhdGljIHZvaWQgenhfcGxhbmVfaGJzY19p bml0KHN0cnVjdCB6eF9wbGFuZSAqenBsYW5lKQogCXp4X3dyaXRlbChoYnNjICsgSEJTQ19USFJF U0hPTERfQ09MMywgKDB4M2MwIDw8IDE2KSB8IDB4NDApOwogfQogCi1zdHJ1Y3QgZHJtX3BsYW5l ICp6eF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkZXZpY2UgKmRl diwKLQkJCQlzdHJ1Y3QgenhfbGF5ZXJfZGF0YSAqZGF0YSwKLQkJCQllbnVtIGRybV9wbGFuZV90 eXBlIHR5cGUpCitpbnQgenhfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1 Y3QgenhfcGxhbmUgKnpwbGFuZSwKKwkJICBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUpCiB7CiAJ Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgKmhlbHBlcjsKLQlzdHJ1Y3Qgenhf cGxhbmUgKnpwbGFuZTsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSA9ICZ6cGxhbmUtPnBsYW5lOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHpwbGFu ZS0+ZGV2OwogCWNvbnN0IHVpbnQzMl90ICpmb3JtYXRzOwogCXVuc2lnbmVkIGludCBmb3JtYXRf Y291bnQ7CiAJaW50IHJldDsKIAotCXpwbGFuZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq enBsYW5lKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF6cGxhbmUpCi0JCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwotCi0JcGxhbmUgPSAmenBsYW5lLT5wbGFuZTsKLQotCXpwbGFuZS0+bGF5ZXIgPSBk YXRhLT5sYXllcjsKLQl6cGxhbmUtPmhic2MgPSBkYXRhLT5oYnNjOwotCXpwbGFuZS0+Y3NjID0g ZGF0YS0+Y3NjOwotCXpwbGFuZS0+cnN6ID0gZGF0YS0+cnN6OwotCiAJenhfcGxhbmVfaGJzY19p bml0KHpwbGFuZSk7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTI4Miw3ICsyNjAsNyBAQCBzdHJ1 Y3QgZHJtX3BsYW5lICp6eF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVj dCBkZXZpY2UgKmRldiwKIAkJLyogVE9ETzogYWRkIHZpZGVvIGxheWVyICh2bCkgc3VwcG9ydCAq LwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwkJcmV0 dXJuIC1FTk9ERVY7CiAJfQogCiAJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwg cGxhbmUsIFZPVV9DUlRDX01BU0ssCkBAIC0yOTAsMTAgKzI2OCwxMCBAQCBzdHJ1Y3QgZHJtX3Bs YW5lICp6eF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkZXZpY2Ug KmRldiwKIAkJCQkgICAgICAgdHlwZSwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlEUk1fREVWX0VS Uk9SKGRldiwgImZhaWxlZCB0byBpbml0IHVuaXZlcnNhbCBwbGFuZTogJWRcbiIsIHJldCk7Ci0J CXJldHVybiBFUlJfUFRSKHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJZHJtX3BsYW5lX2hl bHBlcl9hZGQocGxhbmUsIGhlbHBlcik7CiAKLQlyZXR1cm4gcGxhbmU7CisJcmV0dXJuIDA7CiB9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmggYi9kcml2ZXJzL2dw dS9kcm0venRlL3p4X3BsYW5lLmgKaW5kZXggMmI4MmNkNTU4ZDlkLi4yNjRhOTJlMGI1MzIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0venRlL3p4X3BsYW5lLmgKQEAgLTExLDE2ICsxMSwxOSBAQAogI2lmbmRlZiBfX1pYX1BM QU5FX0hfXwogI2RlZmluZSBfX1pYX1BMQU5FX0hfXwogCi1zdHJ1Y3QgenhfbGF5ZXJfZGF0YSB7 CitzdHJ1Y3QgenhfcGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUgcGxhbmU7CisJc3RydWN0IGRl dmljZSAqZGV2OwogCXZvaWQgX19pb21lbSAqbGF5ZXI7CiAJdm9pZCBfX2lvbWVtICpjc2M7CiAJ dm9pZCBfX2lvbWVtICpoYnNjOwogCXZvaWQgX19pb21lbSAqcnN6OwogfTsKIAotc3RydWN0IGRy bV9wbGFuZSAqenhfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZGV2 aWNlICpkZXYsCi0JCQkJc3RydWN0IHp4X2xheWVyX2RhdGEgKmRhdGEsCi0JCQkJZW51bSBkcm1f cGxhbmVfdHlwZSB0eXBlKTsKKyNkZWZpbmUgdG9fenhfcGxhbmUocGxhbmUpIGNvbnRhaW5lcl9v ZihwbGFuZSwgc3RydWN0IHp4X3BsYW5lLCBwbGFuZSkKKworaW50IHp4X3BsYW5lX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHp4X3BsYW5lICp6cGxhbmUsCisJCSAgZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlKTsKIHZvaWQgenhfcGxhbmVfc2V0X3VwZGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSk7CiAKICNlbmRpZiAvKiBfX1pYX1BMQU5FX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuYyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhf dm91LmMKaW5kZXggNzNmZTE1YzE3YzMyLi5kNWM4MDFmNmY5N2IgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS96dGUvenhfdm91LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3Uu YwpAQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBpbnQgenhfY3J0Y19pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHN0cnVjdCB6eF92b3VfaHcgKnZvdSwKIAkJCWVudW0gdm91X2Nobl90eXBl IGNobl90eXBlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHZvdS0+ZGV2OwotCXN0cnVjdCB6 eF9sYXllcl9kYXRhIGRhdGE7CisJc3RydWN0IHp4X3BsYW5lICp6cGxhbmU7CiAJc3RydWN0IHp4 X2NydGMgKnpjcnRjOwogCWludCByZXQ7CiAKQEAgLTMwNSwxOSArMzA1LDI1IEBAIHN0YXRpYyBp bnQgenhfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB6eF92b3VfaHcg KnZvdSwKIAl6Y3J0Yy0+dm91ID0gdm91OwogCXpjcnRjLT5jaG5fdHlwZSA9IGNobl90eXBlOwog CisJenBsYW5lID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp6cGxhbmUpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXpwbGFuZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl6cGxhbmUtPmRldiA9IGRl djsKKwogCWlmIChjaG5fdHlwZSA9PSBWT1VfQ0hOX01BSU4pIHsKLQkJZGF0YS5sYXllciA9IHZv dS0+b3NkICsgTUFJTl9HTF9PRkZTRVQ7Ci0JCWRhdGEuY3NjID0gdm91LT5vc2QgKyBNQUlOX0NT Q19PRkZTRVQ7Ci0JCWRhdGEuaGJzYyA9IHZvdS0+b3NkICsgTUFJTl9IQlNDX09GRlNFVDsKLQkJ ZGF0YS5yc3ogPSB2b3UtPm90ZnBwdSArIE1BSU5fUlNaX09GRlNFVDsKKwkJenBsYW5lLT5sYXll ciA9IHZvdS0+b3NkICsgTUFJTl9HTF9PRkZTRVQ7CisJCXpwbGFuZS0+Y3NjID0gdm91LT5vc2Qg KyBNQUlOX0NTQ19PRkZTRVQ7CisJCXpwbGFuZS0+aGJzYyA9IHZvdS0+b3NkICsgTUFJTl9IQlND X09GRlNFVDsKKwkJenBsYW5lLT5yc3ogPSB2b3UtPm90ZnBwdSArIE1BSU5fUlNaX09GRlNFVDsK IAkJemNydGMtPmNobnJlZyA9IHZvdS0+b3NkICsgT1NEX01BSU5fQ0hOOwogCQl6Y3J0Yy0+cmVn cyA9ICZtYWluX2NydGNfcmVnczsKIAkJemNydGMtPmJpdHMgPSAmbWFpbl9jcnRjX2JpdHM7CiAJ fSBlbHNlIHsKLQkJZGF0YS5sYXllciA9IHZvdS0+b3NkICsgQVVYX0dMX09GRlNFVDsKLQkJZGF0 YS5jc2MgPSB2b3UtPm9zZCArIEFVWF9DU0NfT0ZGU0VUOwotCQlkYXRhLmhic2MgPSB2b3UtPm9z ZCArIEFVWF9IQlNDX09GRlNFVDsKLQkJZGF0YS5yc3ogPSB2b3UtPm90ZnBwdSArIEFVWF9SU1pf T0ZGU0VUOworCQl6cGxhbmUtPmxheWVyID0gdm91LT5vc2QgKyBBVVhfR0xfT0ZGU0VUOworCQl6 cGxhbmUtPmNzYyA9IHZvdS0+b3NkICsgQVVYX0NTQ19PRkZTRVQ7CisJCXpwbGFuZS0+aGJzYyA9 IHZvdS0+b3NkICsgQVVYX0hCU0NfT0ZGU0VUOworCQl6cGxhbmUtPnJzeiA9IHZvdS0+b3RmcHB1 ICsgQVVYX1JTWl9PRkZTRVQ7CiAJCXpjcnRjLT5jaG5yZWcgPSB2b3UtPm9zZCArIE9TRF9BVVhf Q0hOOwogCQl6Y3J0Yy0+cmVncyA9ICZhdXhfY3J0Y19yZWdzOwogCQl6Y3J0Yy0+Yml0cyA9ICZh dXhfY3J0Y19iaXRzOwpAQCAtMzMxLDEzICszMzcsMTQgQEAgc3RhdGljIGludCB6eF9jcnRjX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHp4X3ZvdV9odyAqdm91LAogCQlyZXR1 cm4gcmV0OwogCX0KIAotCXpjcnRjLT5wcmltYXJ5ID0genhfcGxhbmVfaW5pdChkcm0sIGRldiwg JmRhdGEsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwotCWlmIChJU19FUlIoemNydGMtPnByaW1h cnkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoemNydGMtPnByaW1hcnkpOworCXJldCA9IHp4X3BsYW5l X2luaXQoZHJtLCB6cGxhbmUsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCWlmIChyZXQpIHsK IAkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gaW5pdCBwcmltYXJ5IHBsYW5lOiAlZFxu IiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwl6Y3J0Yy0+cHJpbWFyeSA9ICZ6cGxhbmUt PnBsYW5lOworCiAJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZ6Y3J0Yy0+ Y3J0YywgemNydGMtPnByaW1hcnksIE5VTEwsCiAJCQkJCSZ6eF9jcnRjX2Z1bmNzLCBOVUxMKTsK IAlpZiAocmV0KSB7Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==