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=-3.0 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY autolearn=no 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 B194AC433E0 for ; Thu, 14 Jan 2021 09:05:58 +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 74D03239FF for ; Thu, 14 Jan 2021 09:05:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 74D03239FF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 16F1E6E0EA; Thu, 14 Jan 2021 09:05:58 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 14F3A6E0EA for ; Thu, 14 Jan 2021 09:05:55 +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-397-lkkdLu1uNcuqv4U5oeziOA-1; Thu, 14 Jan 2021 04:05:44 -0500 X-MC-Unique: lkkdLu1uNcuqv4U5oeziOA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 531AB107ACF8 for ; Thu, 14 Jan 2021 09:05:43 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 89C58100164C; Thu, 14 Jan 2021 09:05:42 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 14 Jan 2021 19:05:21 +1000 Message-Id: <20210114090522.22750-11-airlied@gmail.com> In-Reply-To: <20210114090522.22750-1-airlied@gmail.com> References: <20210114090522.22750-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 10/11] drm/i915: migrate pll enable/disable code to intel_dpll.[ch] X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgbW92ZXMgdGhlIG9s ZGVyIGk5eHgvdmx2L2NodiBlbmFibGUvZGlzYWJsZSB0byBkcGxsIGZpbGUuCi0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgfCA1MTIgLS0tLS0tLS0tLS0t LS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmggfCAg IDMgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jICAgICAgfCAgIDEg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmMgICAgfCA1MDkgKysr KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwu aCAgICB8ICAxNyArCiA1IGZpbGVzIGNoYW5nZWQsIDUyNyBpbnNlcnRpb25zKCspLCA1MTUgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku YwppbmRleCA1YTRjODg0M2NkNzQuLjZhMDc0NmJhYmE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEwOSwxMCArMTA5LDYgQEAgc3RhdGlj IHZvaWQgaTl4eF9zZXRfcGlwZWNvbmYoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpOwogc3RhdGljIHZvaWQgaWxrX3NldF9waXBlY29uZihjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgdm9pZCBoc3dfc2V0X3BpcGVjb25m KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lk IGJkd19zZXRfcGlwZW1pc2MoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpOwotc3RhdGljIHZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Ci1z dGF0aWMgdm9pZCBjaHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIHN0YXRpYyB2 b2lkIGlsa19wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7CiBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0YXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0 eCk7CkBAIC01NjUsMjI0ICs1NjEsNiBAQCBzdGF0aWMgdm9pZCBhc3NlcnRfcGNoX3BvcnRzX2Rp c2FibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlhc3NlcnRfcGNoX2hk bWlfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGUsIFBPUlRfRCwgUENIX0hETUlEKTsKIH0KIAotc3Rh dGljIHZvaWQgX3Zsdl9lbmFibGVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQll bnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg RFBMTChwaXBlKSwgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCk7Ci0JaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsKLQl1ZGVsYXkoMTUwKTsKLQotCWlm IChpbnRlbF9kZV93YWl0X2Zvcl9zZXQoZGV2X3ByaXYsIERQTEwocGlwZSksIERQTExfTE9DS19W TFYsIDEpKQotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRFBMTCAlZCBmYWlsZWQgdG8gbG9j a1xuIiwgcGlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9lbmFibGVfcGxsKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjLAotCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVf Y29uZmlnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo Y3J0Yy0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQotCWFzc2Vy dF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCBwaXBlX2NvbmZpZy0+Y3B1X3RyYW5zY29kZXIpOwot Ci0JLyogUExMIGlzIHByb3RlY3RlZCBieSBwYW5lbCwgbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSBp dCAqLwotCWFzc2VydF9wYW5lbF91bmxvY2tlZChkZXZfcHJpdiwgcGlwZSk7Ci0KLQlpZiAocGlw ZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAmIERQTExfVkNPX0VOQUJMRSkKLQkJX3Zsdl9l bmFibGVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBEUExMX01EKHBpcGUpLAotCQkgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBs bF9tZCk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMX01EKHBpcGUpKTsK LX0KLQotCi1zdGF0aWMgdm9pZCBfY2h2X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNy dGMsCi0JCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQot ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFz ZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQllbnVtIGRwaW9fY2hhbm5l bCBwb3J0ID0gdmx2X3BpcGVfdG9fY2hhbm5lbChwaXBlKTsKLQl1MzIgdG1wOwotCi0Jdmx2X2Rw aW9fZ2V0KGRldl9wcml2KTsKLQotCS8qIEVuYWJsZSBiYWNrIHRoZSAxMGJpdCBjbG9jayB0byBk aXNwbGF5IGNvbnRyb2xsZXIgKi8KLQl0bXAgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBl LCBDSFZfQ01OX0RXMTQocG9ydCkpOwotCXRtcCB8PSBEUElPX0RDTEtQX0VOOwotCXZsdl9kcGlv X3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCksIHRtcCk7Ci0KLQl2bHZf ZHBpb19wdXQoZGV2X3ByaXYpOwotCi0JLyoKLQkgKiBOZWVkIHRvIHdhaXQgPiAxMDBucyBiZXR3 ZWVuIGRjbGtwIGNsb2NrIGVuYWJsZSBiaXQgYW5kIFBMTCBlbmFibGUuCi0JICovCi0JdWRlbGF5 KDEpOwotCi0JLyogRW5hYmxlIFBMTCAqLwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExM KHBpcGUpLCBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsKTsKLQotCS8qIENoZWNrIFBM TCBpcyBsb2NrZWQgKi8KLQlpZiAoaW50ZWxfZGVfd2FpdF9mb3Jfc2V0KGRldl9wcml2LCBEUExM KHBpcGUpLCBEUExMX0xPQ0tfVkxWLCAxKSkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIlBM TCAlZCBmYWlsZWQgdG8gbG9ja1xuIiwgcGlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNodl9lbmFi bGVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0 Yy0+cGlwZTsKLQotCWFzc2VydF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCBwaXBlX2NvbmZpZy0+ Y3B1X3RyYW5zY29kZXIpOwotCi0JLyogUExMIGlzIHByb3RlY3RlZCBieSBwYW5lbCwgbWFrZSBz dXJlIHdlIGNhbiB3cml0ZSBpdCAqLwotCWFzc2VydF9wYW5lbF91bmxvY2tlZChkZXZfcHJpdiwg cGlwZSk7Ci0KLQlpZiAocGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAmIERQTExfVkNP X0VOQUJMRSkKLQkJX2Nodl9lbmFibGVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKLQotCWlmIChw aXBlICE9IFBJUEVfQSkgewotCQkvKgotCQkgKiBXYVBpeGVsUmVwZWF0TW9kZUZpeEZvckMwOmNo dgotCQkgKgotCQkgKiBEUExMQ01EIGlzIEFXT0wuIFVzZSBjaGlja2VuIGJpdHMgdG8gcHJvcGFn YXRlCi0JCSAqIHRoZSB2YWx1ZSBmcm9tIERQTExCTUQgdG8gZWl0aGVyIHBpcGUgQiBvciBDLgot CQkgKi8KLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIENCUjRfVkxWLCBDQlJfRFBMTEJNRF9Q SVBFKHBpcGUpKTsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTExfTUQoUElQRV9CKSwK LQkJCSAgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kKTsKLQkJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIENCUjRfVkxWLCAwKTsKLQkJZGV2X3ByaXYtPmNodl9kcGxsX21k W3BpcGVdID0gcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9tZDsKLQotCQkvKgotCQkg KiBEUExMQiBWR0EgbW9kZSBhbHNvIHNlZW1zIHRvIGNhdXNlIHByb2JsZW1zLgotCQkgKiBXZSBz aG91bGQgYWx3YXlzIGhhdmUgaXQgZGlzYWJsZWQuCi0JCSAqLwotCQlkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwKLQkJCSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFBMTChQSVBFX0Ip KSAmCi0JCQkgICAgIERQTExfVkdBX01PREVfRElTKSA9PSAwKTsKLQl9IGVsc2UgewotCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTF9NRChwaXBlKSwKLQkJCSAgICAgICBwaXBlX2NvbmZp Zy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kKTsKLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9w cml2LCBEUExMX01EKHBpcGUpKTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGk5eHhfaGFzX3Bwcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaWYgKElTX0k4MzAoZGV2X3By aXYpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gSVNfUElORVZJRVcoZGV2X3ByaXYpIHx8 IElTX01PQklMRShkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5eHhfZW5hYmxlX3BsbChz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQlpOTE1X3JlZ190IHJlZyA9IERQTEwoY3J0Yy0+ cGlwZSk7Ci0JdTMyIGRwbGwgPSBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGw7Ci0JaW50 IGk7Ci0KLQlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3Ry YW5zY29kZXIpOwotCi0JLyogUExMIGlzIHByb3RlY3RlZCBieSBwYW5lbCwgbWFrZSBzdXJlIHdl IGNhbiB3cml0ZSBpdCAqLwotCWlmIChpOXh4X2hhc19wcHMoZGV2X3ByaXYpKQotCQlhc3NlcnRf cGFuZWxfdW5sb2NrZWQoZGV2X3ByaXYsIGNydGMtPnBpcGUpOwotCi0JLyoKLQkgKiBBcHBhcmVu dGx5IHdlIG5lZWQgdG8gaGF2ZSBWR0EgbW9kZSBlbmFibGVkIHByaW9yIHRvIGNoYW5naW5nCi0J ICogdGhlIFAxL1AyIGRpdmlkZXJzLiBPdGhlcndpc2UgdGhlIERQTEwgd2lsbCBrZWVwIHVzaW5n IHRoZSBvbGQKLQkgKiBkaXZpZGVycywgZXZlbiB0aG91Z2ggdGhlIHJlZ2lzdGVyIHZhbHVlIGRv ZXMgY2hhbmdlLgotCSAqLwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIGRwbGwgJiB+ RFBMTF9WR0FfTU9ERV9ESVMpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIGRwbGwp OwotCi0JLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCi0JaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gNCkgewotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTF9N RChjcnRjLT5waXBlKSwKLQkJCSAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGxf bWQpOwotCX0gZWxzZSB7Ci0JCS8qIFRoZSBwaXhlbCBtdWx0aXBsaWVyIGNhbiBvbmx5IGJlIHVw ZGF0ZWQgb25jZSB0aGUKLQkJICogRFBMTCBpcyBlbmFibGVkIGFuZCB0aGUgY2xvY2tzIGFyZSBz dGFibGUuCi0JCSAqCi0JCSAqIFNvIHdyaXRlIGl0IGFnYWluLgotCQkgKi8KLQkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgZHBsbCk7Ci0JfQotCi0JLyogV2UgZG8gdGhpcyB0aHJlZSB0 aW1lcyBmb3IgbHVjayAqLwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgZHBsbCk7Ci0JCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZf cHJpdiwgcmVnKTsKLQkJdWRlbGF5KDE1MCk7IC8qIHdhaXQgZm9yIHdhcm11cCAqLwotCX0KLX0K LQotc3RhdGljIHZvaWQgaTl4eF9kaXNhYmxlX3BsbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IGNy dGMtPnBpcGU7Ci0KLQkvKiBEb24ndCBkaXNhYmxlIHBpcGUgb3IgcGlwZSBQTExzIGlmIG5lZWRl ZCAqLwotCWlmIChJU19JODMwKGRldl9wcml2KSkKLQkJcmV0dXJuOwotCi0JLyogTWFrZSBzdXJl IHRoZSBwaXBlIGlzbid0IHN0aWxsIHJlbHlpbmcgb24gdXMgKi8KLQlhc3NlcnRfcGlwZV9kaXNh YmxlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIpOwotCi0JaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIERQTExfVkdBX01PREVfRElTKTsKLQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQTEwocGlwZSkpOwotfQotCi1zdGF0aWMgdm9pZCB2 bHZfZGlzYWJsZV9wbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBp cGUgcGlwZSkKLXsKLQl1MzIgdmFsOwotCi0JLyogTWFrZSBzdXJlIHRoZSBwaXBlIGlzbid0IHN0 aWxsIHJlbHlpbmcgb24gdXMgKi8KLQlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgKGVu dW0gdHJhbnNjb2RlcilwaXBlKTsKLQotCXZhbCA9IERQTExfSU5URUdSQVRFRF9SRUZfQ0xLX1ZM ViB8Ci0JCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7Ci0JaWYg KHBpcGUgIT0gUElQRV9BKQotCQl2YWwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9DTEtfVkxWOwot Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHZhbCk7Ci0JaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2 X2Rpc2FibGVfcGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBl IHBpcGUpCi17Ci0JZW51bSBkcGlvX2NoYW5uZWwgcG9ydCA9IHZsdl9waXBlX3RvX2NoYW5uZWwo cGlwZSk7Ci0JdTMyIHZhbDsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgcGlwZSBpc24ndCBzdGlsbCBy ZWx5aW5nIG9uIHVzICovCi0JYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIChlbnVtIHRy YW5zY29kZXIpcGlwZSk7Ci0KLQl2YWwgPSBEUExMX1NTQ19SRUZfQ0xLX0NIViB8Ci0JCURQTExf UkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7Ci0JaWYgKHBpcGUgIT0gUElQ RV9BKQotCQl2YWwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9DTEtfVkxWOwotCi0JaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHZhbCk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCBEUExMKHBpcGUpKTsKLQotCXZsdl9kcGlvX2dldChkZXZfcHJpdik7Ci0KLQkv KiBEaXNhYmxlIDEwYml0IGNsb2NrIHRvIGRpc3BsYXkgY29udHJvbGxlciAqLwotCXZhbCA9IHZs dl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcxNChwb3J0KSk7Ci0JdmFsICY9 IH5EUElPX0RDTEtQX0VOOwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfQ01O X0RXMTQocG9ydCksIHZhbCk7Ci0KLQl2bHZfZHBpb19wdXQoZGV2X3ByaXYpOwotfQotCiB2b2lk IHZsdl93YWl0X3BvcnRfcmVhZHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAog CQkJIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0LAogCQkJIHVuc2lnbmVkIGlu dCBleHBlY3RlZF9tYXNrKQpAQCAtNTcwOSwzNSArNTQ4Nyw2IEBAIHN0YXRpYyB2b2lkIGludGVs X3BhbmVsX3Nhbml0aXplX3NzYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJ fQogfQogCi1zdGF0aWMgdm9pZCB2bHZfcGxsYl9yZWNhbF9vcGFtcChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZQotCQlwaXBlKQotewotCXUzMiByZWdfdmFsOwot Ci0JLyoKLQkgKiBQTExCIG9wYW1wIGFsd2F5cyBjYWxpYnJhdGVzIHRvIG1heCB2YWx1ZSBvZiAw eDNmLCBmb3JjZSBlbmFibGUgaXQKLQkgKiBhbmQgc2V0IGl0IHRvIGEgcmVhc29uYWJsZSB2YWx1 ZSBpbnN0ZWFkLgotCSAqLwotCXJlZ192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBl LCBWTFZfUExMX0RXOSgxKSk7Ci0JcmVnX3ZhbCAmPSAweGZmZmZmZjAwOwotCXJlZ192YWwgfD0g MHgwMDAwMDAzMDsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzko MSksIHJlZ192YWwpOwotCi0JcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUs IFZMVl9SRUZfRFcxMyk7Ci0JcmVnX3ZhbCAmPSAweDAwZmZmZmZmOwotCXJlZ192YWwgfD0gMHg4 YzAwMDAwMDsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1JFRl9EVzEzLCBy ZWdfdmFsKTsKLQotCXJlZ192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZf UExMX0RXOSgxKSk7Ci0JcmVnX3ZhbCAmPSAweGZmZmZmZjAwOwotCXZsdl9kcGlvX3dyaXRlKGRl dl9wcml2LCBwaXBlLCBWTFZfUExMX0RXOSgxKSwgcmVnX3ZhbCk7Ci0KLQlyZWdfdmFsID0gdmx2 X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1JFRl9EVzEzKTsKLQlyZWdfdmFsICY9IDB4 MDBmZmZmZmY7Ci0JcmVnX3ZhbCB8PSAweGIwMDAwMDAwOwotCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBWTFZfUkVGX0RXMTMsIHJlZ192YWwpOwotfQotCiBzdGF0aWMgdm9pZCBpbnRl bF9wY2hfdHJhbnNjb2Rlcl9zZXRfbV9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAogCQkJCQkgY29uc3Qgc3RydWN0IGludGVsX2xpbmtfbV9uICptX24pCiB7CkBA IC01ODMzLDI2NyArNTU4Miw2IEBAIHZvaWQgaW50ZWxfZHBfc2V0X21fbihjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgZW51bSBsaW5rX21fbl9zCiAJCWludGVsX2Nw dV90cmFuc2NvZGVyX3NldF9tX24oY3J0Y19zdGF0ZSwgZHBfbV9uLCBkcF9tMl9uMik7CiB9CiAK LXN0YXRpYyB2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IGNydGMt PnBpcGU7Ci0JdTMyIG1kaXY7Ci0JdTMyIGJlc3RuLCBiZXN0bTEsIGJlc3RtMiwgYmVzdHAxLCBi ZXN0cDI7Ci0JdTMyIGNvcmVjbGssIHJlZ192YWw7Ci0KLQkvKiBFbmFibGUgUmVmY2xrICovCi0J aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksCi0JCSAgICAgICBwaXBlX2NvbmZp Zy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgfihEUExMX1ZDT19FTkFCTEUgfCBEUExMX0VYVF9CVUZG RVJfRU5BQkxFX1ZMVikpOwotCi0JLyogTm8gbmVlZCB0byBhY3R1YWxseSBzZXQgdXAgdGhlIERQ TEwgd2l0aCBEU0kgKi8KLQlpZiAoKHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgJiBE UExMX1ZDT19FTkFCTEUpID09IDApCi0JCXJldHVybjsKLQotCXZsdl9kcGlvX2dldChkZXZfcHJp dik7Ci0KLQliZXN0biA9IHBpcGVfY29uZmlnLT5kcGxsLm47Ci0JYmVzdG0xID0gcGlwZV9jb25m aWctPmRwbGwubTE7Ci0JYmVzdG0yID0gcGlwZV9jb25maWctPmRwbGwubTI7Ci0JYmVzdHAxID0g cGlwZV9jb25maWctPmRwbGwucDE7Ci0JYmVzdHAyID0gcGlwZV9jb25maWctPmRwbGwucDI7Ci0K LQkvKiBTZWUgZURQIEhETUkgRFBJTyBkcml2ZXIgdmJpb3Mgbm90ZXMgZG9jICovCi0KLQkvKiBQ TEwgQiBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nICovCi0JaWYgKHBpcGUgPT0gUElQRV9CKQotCQl2 bHZfcGxsYl9yZWNhbF9vcGFtcChkZXZfcHJpdiwgcGlwZSk7Ci0KLQkvKiBTZXQgdXAgVHggdGFy Z2V0IGZvciBwZXJpb2RpYyBSY29tcCB1cGRhdGUgKi8KLQl2bHZfZHBpb193cml0ZShkZXZfcHJp diwgcGlwZSwgVkxWX1BMTF9EVzlfQkNBU1QsIDB4MDEwMDAwMGYpOwotCi0JLyogRGlzYWJsZSB0 YXJnZXQgSVJlZiBvbiBQTEwgKi8KLQlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwg cGlwZSwgVkxWX1BMTF9EVzgocGlwZSkpOwotCXJlZ192YWwgJj0gMHgwMGZmZmZmZjsKLQl2bHZf ZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzgocGlwZSksIHJlZ192YWwpOwot Ci0JLyogRGlzYWJsZSBmYXN0IGxvY2sgKi8KLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlw ZSwgVkxWX0NNTl9EVzAsIDB4NjEwKTsKLQotCS8qIFNldCBpZHRhZmNyZWNhbCBiZWZvcmUgUExM IGlzIGVuYWJsZWQgKi8KLQltZGl2ID0gKChiZXN0bTEgPDwgRFBJT19NMURJVl9TSElGVCkgfCAo YmVzdG0yICYgRFBJT19NMkRJVl9NQVNLKSk7Ci0JbWRpdiB8PSAoKGJlc3RwMSA8PCBEUElPX1Ax X1NISUZUKSB8IChiZXN0cDIgPDwgRFBJT19QMl9TSElGVCkpOwotCW1kaXYgfD0gKChiZXN0biA8 PCBEUElPX05fU0hJRlQpKTsKLQltZGl2IHw9ICgxIDw8IERQSU9fS19TSElGVCk7Ci0KLQkvKgot CSAqIFBvc3QgZGl2aWRlciBkZXBlbmRzIG9uIHBpeGVsIGNsb2NrIHJhdGUsIERBQyB2cyBkaWdp dGFsIChhbmQgTFZEUywKLQkgKiBidXQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGF0KS4KLQkgKiBOb3Rl OiBkb24ndCB1c2UgdGhlIERBQyBwb3N0IGRpdmlkZXIgYXMgaXQgc2VlbXMgdW5zdGFibGUuCi0J ICovCi0JbWRpdiB8PSAoRFBJT19QT1NUX0RJVl9IRE1JRFAgPDwgRFBJT19QT1NUX0RJVl9TSElG VCk7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFczKHBpcGUpLCBt ZGl2KTsKLQotCW1kaXYgfD0gRFBJT19FTkFCTEVfQ0FMSUJSQVRJT047Ci0Jdmx2X2RwaW9fd3Jp dGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFczKHBpcGUpLCBtZGl2KTsKLQotCS8qIFNldCBI QlIgYW5kIFJCUiBMUEYgY29lZmZpY2llbnRzICovCi0JaWYgKHBpcGVfY29uZmlnLT5wb3J0X2Ns b2NrID09IDE2MjAwMCB8fAotCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJ TlRFTF9PVVRQVVRfQU5BTE9HKSB8fAotCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29u ZmlnLCBJTlRFTF9PVVRQVVRfSERNSSkpCi0JCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBl LCBWTFZfUExMX0RXMTAocGlwZSksCi0JCQkJIDB4MDA5ZjAwMDMpOwotCWVsc2UKLQkJdmx2X2Rw aW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFcxMChwaXBlKSwKLQkJCQkgMHgwMGQw MDAwZik7Ci0KLQlpZiAoaW50ZWxfY3J0Y19oYXNfZHBfZW5jb2RlcihwaXBlX2NvbmZpZykpIHsK LQkJLyogVXNlIFNTQyBzb3VyY2UgKi8KLQkJaWYgKHBpcGUgPT0gUElQRV9BKQotCQkJdmx2X2Rw aW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc1KHBpcGUpLAotCQkJCQkgMHgwZGY0 MDAwMCk7Ci0JCWVsc2UKLQkJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExM X0RXNShwaXBlKSwKLQkJCQkJIDB4MGRmNzAwMDApOwotCX0gZWxzZSB7IC8qIEhETUkgb3IgVkdB ICovCi0JCS8qIFVzZSBiZW5kIHNvdXJjZSAqLwotCQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCQl2 bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzUocGlwZSksCi0JCQkJCSAw eDBkZjcwMDAwKTsKLQkJZWxzZQotCQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZM Vl9QTExfRFc1KHBpcGUpLAotCQkJCQkgMHgwZGY0MDAwMCk7Ci0JfQotCi0JY29yZWNsayA9IHZs dl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc3KHBpcGUpKTsKLQljb3JlY2xr ID0gKGNvcmVjbGsgJiAweDAwMDBmZjAwKSB8IDB4MDFjMDAwMDA7Ci0JaWYgKGludGVsX2NydGNf aGFzX2RwX2VuY29kZXIocGlwZV9jb25maWcpKQotCQljb3JlY2xrIHw9IDB4MDEwMDAwMDA7Ci0J dmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc3KHBpcGUpLCBjb3JlY2xr KTsKLQotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXMTEocGlwZSks IDB4ODc4NzEwMDApOwotCi0Jdmx2X2RwaW9fcHV0KGRldl9wcml2KTsKLX0KLQotc3RhdGljIHZv aWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQll bnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0gdmx2X3BpcGVfdG9fY2hhbm5lbChwaXBlKTsKLQl1MzIg bG9vcGZpbHRlciwgdHJpYnVmX2NhbGNudHI7Ci0JdTMyIGJlc3RuLCBiZXN0bTEsIGJlc3RtMiwg YmVzdHAxLCBiZXN0cDIsIGJlc3RtMl9mcmFjOwotCXUzMiBkcGlvX3ZhbDsKLQlpbnQgdmNvOwot Ci0JLyogRW5hYmxlIFJlZmNsayBhbmQgU1NDICovCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IERQTEwocGlwZSksCi0JCSAgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYg fkRQTExfVkNPX0VOQUJMRSk7Ci0KLQkvKiBObyBuZWVkIHRvIGFjdHVhbGx5IHNldCB1cCB0aGUg RFBMTCB3aXRoIERTSSAqLwotCWlmICgocGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAm IERQTExfVkNPX0VOQUJMRSkgPT0gMCkKLQkJcmV0dXJuOwotCi0JYmVzdG4gPSBwaXBlX2NvbmZp Zy0+ZHBsbC5uOwotCWJlc3RtMl9mcmFjID0gcGlwZV9jb25maWctPmRwbGwubTIgJiAweDNmZmZm ZjsKLQliZXN0bTEgPSBwaXBlX2NvbmZpZy0+ZHBsbC5tMTsKLQliZXN0bTIgPSBwaXBlX2NvbmZp Zy0+ZHBsbC5tMiA+PiAyMjsKLQliZXN0cDEgPSBwaXBlX2NvbmZpZy0+ZHBsbC5wMTsKLQliZXN0 cDIgPSBwaXBlX2NvbmZpZy0+ZHBsbC5wMjsKLQl2Y28gPSBwaXBlX2NvbmZpZy0+ZHBsbC52Y287 Ci0JZHBpb192YWwgPSAwOwotCWxvb3BmaWx0ZXIgPSAwOwotCi0Jdmx2X2RwaW9fZ2V0KGRldl9w cml2KTsKLQotCS8qIHAxIGFuZCBwMiBkaXZpZGVyICovCi0Jdmx2X2RwaW9fd3JpdGUoZGV2X3By aXYsIHBpcGUsIENIVl9DTU5fRFcxMyhwb3J0KSwKLQkJCTUgPDwgRFBJT19DSFZfUzFfRElWX1NI SUZUIHwKLQkJCWJlc3RwMSA8PCBEUElPX0NIVl9QMV9ESVZfU0hJRlQgfAotCQkJYmVzdHAyIDw8 IERQSU9fQ0hWX1AyX0RJVl9TSElGVCB8Ci0JCQkxIDw8IERQSU9fQ0hWX0tfRElWX1NISUZUKTsK LQotCS8qIEZlZWRiYWNrIHBvc3QtZGl2aWRlciAtIG0yICovCi0Jdmx2X2RwaW9fd3JpdGUoZGV2 X3ByaXYsIHBpcGUsIENIVl9QTExfRFcwKHBvcnQpLCBiZXN0bTIpOwotCi0JLyogRmVlZGJhY2sg cmVmY2xrIGRpdmlkZXIgLSBuIGFuZCBtMSAqLwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBw aXBlLCBDSFZfUExMX0RXMShwb3J0KSwKLQkJCURQSU9fQ0hWX00xX0RJVl9CWV8yIHwKLQkJCTEg PDwgRFBJT19DSFZfTl9ESVZfU0hJRlQpOwotCi0JLyogTTIgZnJhY3Rpb24gZGl2aXNpb24gKi8K LQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzIocG9ydCksIGJlc3Rt Ml9mcmFjKTsKLQotCS8qIE0yIGZyYWN0aW9uIGRpdmlzaW9uIGVuYWJsZSAqLwotCWRwaW9fdmFs ID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzMocG9ydCkpOwotCWRw aW9fdmFsICY9IH4oRFBJT19DSFZfRkVFREZXRF9HQUlOX01BU0sgfCBEUElPX0NIVl9GUkFDX0RJ Vl9FTik7Ci0JZHBpb192YWwgfD0gKDIgPDwgRFBJT19DSFZfRkVFREZXRF9HQUlOX1NISUZUKTsK LQlpZiAoYmVzdG0yX2ZyYWMpCi0JCWRwaW9fdmFsIHw9IERQSU9fQ0hWX0ZSQUNfRElWX0VOOwot CXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXMyhwb3J0KSwgZHBpb192 YWwpOwotCi0JLyogUHJvZ3JhbSBkaWdpdGFsIGxvY2sgZGV0ZWN0IHRocmVzaG9sZCAqLwotCWRw aW9fdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzkocG9ydCkp OwotCWRwaW9fdmFsICY9IH4oRFBJT19DSFZfSU5UX0xPQ0tfVEhSRVNIT0xEX01BU0sgfAotCQkJ CQlEUElPX0NIVl9JTlRfTE9DS19USFJFU0hPTERfU0VMX0NPQVJTRSk7Ci0JZHBpb192YWwgfD0g KDB4NSA8PCBEUElPX0NIVl9JTlRfTE9DS19USFJFU0hPTERfU0hJRlQpOwotCWlmICghYmVzdG0y X2ZyYWMpCi0JCWRwaW9fdmFsIHw9IERQSU9fQ0hWX0lOVF9MT0NLX1RIUkVTSE9MRF9TRUxfQ09B UlNFOwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXOShwb3J0KSwg ZHBpb192YWwpOwotCi0JLyogTG9vcCBmaWx0ZXIgKi8KLQlpZiAodmNvID09IDU0MDAwMDApIHsK LQkJbG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOwotCQls b29wZmlsdGVyIHw9ICgweDggPDwgRFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKLQkJbG9vcGZp bHRlciB8PSAoMHgxIDw8IERQSU9fQ0hWX0dBSU5fQ1RSTF9TSElGVCk7Ci0JCXRyaWJ1Zl9jYWxj bnRyID0gMHg5OwotCX0gZWxzZSBpZiAodmNvIDw9IDYyMDAwMDApIHsKLQkJbG9vcGZpbHRlciB8 PSAoMHg1IDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOwotCQlsb29wZmlsdGVyIHw9ICgw eEIgPDwgRFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKLQkJbG9vcGZpbHRlciB8PSAoMHgzIDw8 IERQSU9fQ0hWX0dBSU5fQ1RSTF9TSElGVCk7Ci0JCXRyaWJ1Zl9jYWxjbnRyID0gMHg5OwotCX0g ZWxzZSBpZiAodmNvIDw9IDY0ODAwMDApIHsKLQkJbG9vcGZpbHRlciB8PSAoMHg0IDw8IERQSU9f Q0hWX1BST1BfQ09FRkZfU0hJRlQpOwotCQlsb29wZmlsdGVyIHw9ICgweDkgPDwgRFBJT19DSFZf SU5UX0NPRUZGX1NISUZUKTsKLQkJbG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX0dBSU5f Q1RSTF9TSElGVCk7Ci0JCXRyaWJ1Zl9jYWxjbnRyID0gMHg4OwotCX0gZWxzZSB7Ci0JCS8qIE5v dCBzdXBwb3J0ZWQuIEFwcGx5IHRoZSBzYW1lIGxpbWl0cyBhcyBpbiB0aGUgbWF4IGNhc2UgKi8K LQkJbG9vcGZpbHRlciB8PSAoMHg0IDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOwotCQls b29wZmlsdGVyIHw9ICgweDkgPDwgRFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKLQkJbG9vcGZp bHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX0dBSU5fQ1RSTF9TSElGVCk7Ci0JCXRyaWJ1Zl9jYWxj bnRyID0gMDsKLQl9Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFc2 KHBvcnQpLCBsb29wZmlsdGVyKTsKLQotCWRwaW9fdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJp diwgcGlwZSwgQ0hWX1BMTF9EVzgocG9ydCkpOwotCWRwaW9fdmFsICY9IH5EUElPX0NIVl9URENf VEFSR0VUX0NOVF9NQVNLOwotCWRwaW9fdmFsIHw9ICh0cmlidWZfY2FsY250ciA8PCBEUElPX0NI Vl9URENfVEFSR0VUX0NOVF9TSElGVCk7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUs IENIVl9QTExfRFc4KHBvcnQpLCBkcGlvX3ZhbCk7Ci0KLQkvKiBBRkMgUmVjYWwgKi8KLQl2bHZf ZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzE0KHBvcnQpLAotCQkJdmx2X2Rw aW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzE0KHBvcnQpKSB8Ci0JCQlEUElPX0FG Q19SRUNBTCk7Ci0KLQl2bHZfZHBpb19wdXQoZGV2X3ByaXYpOwotfQotCi0vKioKLSAqIHZsdl9m b3JjZV9wbGxfb24gLSBmb3JjaWJseSBlbmFibGUganVzdCB0aGUgUExMCi0gKiBAZGV2X3ByaXY6 IGk5MTUgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqIEBwaXBlOiBwaXBlIFBMTCB0byBlbmFibGUKLSAq IEBkcGxsOiBQTEwgY29uZmlndXJhdGlvbgotICoKLSAqIEVuYWJsZSB0aGUgUExMIGZvciBAcGlw ZSB1c2luZyB0aGUgc3VwcGxpZWQgQGRwbGwgY29uZmlnLiBUbyBiZSB1c2VkCi0gKiBpbiBjYXNl cyB3aGVyZSB3ZSBuZWVkIHRoZSBQTEwgZW5hYmxlZCBldmVuIHdoZW4gQHBpcGUgaXMgbm90IGdv aW5nIHRvCi0gKiBiZSBlbmFibGVkLgotICovCi1pbnQgdmx2X2ZvcmNlX3BsbF9vbihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLAotCQkgICAgIGNvbnN0 IHN0cnVjdCBkcGxsICpkcGxsKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gaW50ZWxf Z2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwotCXN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZzsKLQotCXBpcGVfY29uZmlnID0gaW50ZWxfY3J0Y19zdGF0ZV9hbGxv YyhjcnRjKTsKLQlpZiAoIXBpcGVfY29uZmlnKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBpcGVf Y29uZmlnLT5jcHVfdHJhbnNjb2RlciA9IChlbnVtIHRyYW5zY29kZXIpcGlwZTsKLQlwaXBlX2Nv bmZpZy0+cGl4ZWxfbXVsdGlwbGllciA9IDE7Ci0JcGlwZV9jb25maWctPmRwbGwgPSAqZHBsbDsK LQotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQljaHZfY29tcHV0ZV9kcGxsKGNy dGMsIHBpcGVfY29uZmlnKTsKLQkJY2h2X3ByZXBhcmVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsK LQkJY2h2X2VuYWJsZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOwotCX0gZWxzZSB7Ci0JCXZsdl9j b21wdXRlX2RwbGwoY3J0YywgcGlwZV9jb25maWcpOwotCQl2bHZfcHJlcGFyZV9wbGwoY3J0Yywg cGlwZV9jb25maWcpOwotCQl2bHZfZW5hYmxlX3BsbChjcnRjLCBwaXBlX2NvbmZpZyk7Ci0JfQot Ci0Ja2ZyZWUocGlwZV9jb25maWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogdmx2X2Zv cmNlX3BsbF9vZmYgLSBmb3JjaWJseSBkaXNhYmxlIGp1c3QgdGhlIFBMTAotICogQGRldl9wcml2 OiBpOTE1IHByaXZhdGUgc3RydWN0dXJlCi0gKiBAcGlwZTogcGlwZSBQTEwgdG8gZGlzYWJsZQot ICoKLSAqIERpc2FibGUgdGhlIFBMTCBmb3IgQHBpcGUuIFRvIGJlIHVzZWQgaW4gY2FzZXMgd2hl cmUgd2UgbmVlZAotICogdGhlIFBMTCBlbmFibGVkIGV2ZW4gd2hlbiBAcGlwZSBpcyBub3QgZ29p bmcgdG8gYmUgZW5hYmxlZC4KLSAqLwotdm9pZCB2bHZfZm9yY2VfcGxsX29mZihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQotewotCWlmIChJU19DSEVS UllWSUVXKGRldl9wcml2KSkKLQkJY2h2X2Rpc2FibGVfcGxsKGRldl9wcml2LCBwaXBlKTsKLQll bHNlCi0JCXZsdl9kaXNhYmxlX3BsbChkZXZfcHJpdiwgcGlwZSk7Ci19Ci0KLQotCiBzdGF0aWMg dm9pZCBpbnRlbF9zZXRfdHJhbnNjb2Rlcl90aW1pbmdzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuaAppbmRleCAzM2RiYzA1Yzc2YTIuLmIyOWE5MjA3Y2E5YyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKQEAgLTU4 Niw5ICs1ODYsNiBAQCB2b2lkIGludGVsX2NsZWFudXBfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCiB2b2lkIGFzc2VydF9wY2hfdHJhbnNjb2Rlcl9kaXNhYmxlZChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVudW0gcGlwZSBwaXBlKTsKIAotaW50 IHZsdl9mb3JjZV9wbGxfb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVt IHBpcGUgcGlwZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAqZHBsbCk7Ci12b2lkIHZsdl9m b3JjZV9wbGxfb2ZmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBl IHBpcGUpOwogaW50IGxwdF9nZXRfaWNsa2lwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7CiBib29sIGludGVsX2Z1enp5X2Nsb2NrX2NoZWNrKGludCBjbG9jazEsIGludCBjbG9j azIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKaW5kZXggMDQzM2I2 Mzk0MTM3Li4wMjZiM2U0ZDNkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RwLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJpbnRlbF9kcC5oIgogI2luY2x1ZGUg ImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKICNpbmNsdWRlICJpbnRlbF9kcF9tc3QuaCIKKyNp bmNsdWRlICJpbnRlbF9kcGxsLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHBpb19waHkuaCIKICNpbmNs dWRlICJpbnRlbF9maWZvX3VuZGVycnVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuYwppbmRleCA3YmE3ZjMxNWFhZWUu LjE2NmU5YTNhOGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcGxsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxs LmMKQEAgLTMsMTEgKzMsMTMgQEAKICAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0 aW9uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICJpbnRlbF9jcnRj LmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgogI2luY2x1ZGUgImludGVsX2Rp c3BsYXkuaCIKICNpbmNsdWRlICJpbnRlbF9kcGxsLmgiCiAjaW5jbHVkZSAiaW50ZWxfbHZkcy5o IgogI2luY2x1ZGUgImludGVsX3BhbmVsLmgiCisjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIK IAogc3RydWN0IGludGVsX2xpbWl0IHsKIAlzdHJ1Y3QgewpAQCAtMTM2MSwzICsxMzYzLDUxMCBA QCBpbnRlbF9kcGxsX2luaXRfY2xvY2tfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiAJZWxzZQogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBp OHh4X2NydGNfY29tcHV0ZV9jbG9jazsKIH0KKworc3RhdGljIGJvb2wgaTl4eF9oYXNfcHBzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoSVNfSTgzMChkZXZfcHJp dikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBJU19QSU5FVklFVyhkZXZfcHJpdikgfHwg SVNfTU9CSUxFKGRldl9wcml2KTsKK30KKwordm9pZCBpOXh4X2VuYWJsZV9wbGwoc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjLT5iYXNlLmRldik7CisJaTkxNV9yZWdfdCByZWcgPSBEUExMKGNydGMtPnBpcGUpOwor CXUzMiBkcGxsID0gY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsOworCWludCBpOworCisJ YXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVy KTsKKworCS8qIFBMTCBpcyBwcm90ZWN0ZWQgYnkgcGFuZWwsIG1ha2Ugc3VyZSB3ZSBjYW4gd3Jp dGUgaXQgKi8KKwlpZiAoaTl4eF9oYXNfcHBzKGRldl9wcml2KSkKKwkJYXNzZXJ0X3BhbmVsX3Vu bG9ja2VkKGRldl9wcml2LCBjcnRjLT5waXBlKTsKKworCS8qCisJICogQXBwYXJlbnRseSB3ZSBu ZWVkIHRvIGhhdmUgVkdBIG1vZGUgZW5hYmxlZCBwcmlvciB0byBjaGFuZ2luZworCSAqIHRoZSBQ MS9QMiBkaXZpZGVycy4gT3RoZXJ3aXNlIHRoZSBEUExMIHdpbGwga2VlcCB1c2luZyB0aGUgb2xk CisJICogZGl2aWRlcnMsIGV2ZW4gdGhvdWdoIHRoZSByZWdpc3RlciB2YWx1ZSBkb2VzIGNoYW5n ZS4KKwkgKi8KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCBkcGxsICYgfkRQTExfVkdB X01PREVfRElTKTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCBkcGxsKTsKKworCS8q IFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCWludGVsX2RlX3Bvc3Rpbmdf cmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKworCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTExfTUQoY3J0Yy0+ cGlwZSksCisJCQkgICAgICAgY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsX21kKTsKKwl9 IGVsc2UgeworCQkvKiBUaGUgcGl4ZWwgbXVsdGlwbGllciBjYW4gb25seSBiZSB1cGRhdGVkIG9u Y2UgdGhlCisJCSAqIERQTEwgaXMgZW5hYmxlZCBhbmQgdGhlIGNsb2NrcyBhcmUgc3RhYmxlLgor CQkgKgorCQkgKiBTbyB3cml0ZSBpdCBhZ2Fpbi4KKwkJICovCisJCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIGRwbGwpOworCX0KKworCS8qIFdlIGRvIHRoaXMgdGhyZWUgdGltZXMgZm9y IGx1Y2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIGRwbGwpOworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJl Zyk7CisJCXVkZWxheSgxNTApOyAvKiB3YWl0IGZvciB3YXJtdXAgKi8KKwl9Cit9CisKK3N0YXRp YyB2b2lkIHZsdl9wbGxiX3JlY2FsX29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKKwkJCQkgZW51bSBwaXBlIHBpcGUpCit7CisJdTMyIHJlZ192YWw7CisKKwkvKgorCSAq IFBMTEIgb3BhbXAgYWx3YXlzIGNhbGlicmF0ZXMgdG8gbWF4IHZhbHVlIG9mIDB4M2YsIGZvcmNl IGVuYWJsZSBpdAorCSAqIGFuZCBzZXQgaXQgdG8gYSByZWFzb25hYmxlIHZhbHVlIGluc3RlYWQu CisJICovCisJcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExf RFc5KDEpKTsKKwlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7CisJcmVnX3ZhbCB8PSAweDAwMDAwMDMw OworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXOSgxKSwgcmVnX3Zh bCk7CisKKwlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1JFRl9E VzEzKTsKKwlyZWdfdmFsICY9IDB4MDBmZmZmZmY7CisJcmVnX3ZhbCB8PSAweDhjMDAwMDAwOwor CXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMsIHJlZ192YWwpOwor CisJcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc5KDEp KTsKKwlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBp cGUsIFZMVl9QTExfRFc5KDEpLCByZWdfdmFsKTsKKworCXJlZ192YWwgPSB2bHZfZHBpb19yZWFk KGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMpOworCXJlZ192YWwgJj0gMHgwMGZmZmZmZjsK KwlyZWdfdmFsIHw9IDB4YjAwMDAwMDA7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUs IFZMVl9SRUZfRFcxMywgcmVnX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIF92bHZfZW5hYmxlX3Bs bChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5w aXBlOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHBpcGVfY29uZmln LT5kcGxsX2h3X3N0YXRlLmRwbGwpOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwg RFBMTChwaXBlKSk7CisJdWRlbGF5KDE1MCk7CisKKwlpZiAoaW50ZWxfZGVfd2FpdF9mb3Jfc2V0 KGRldl9wcml2LCBEUExMKHBpcGUpLCBEUExMX0xPQ0tfVkxWLCAxKSkKKwkJZHJtX2VycigmZGV2 X3ByaXYtPmRybSwgIkRQTEwgJWQgZmFpbGVkIHRvIGxvY2tcbiIsIHBpcGUpOworfQorCit2b2lk IHZsdl9lbmFibGVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBw aXBlID0gY3J0Yy0+cGlwZTsKKworCWFzc2VydF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCBwaXBl X2NvbmZpZy0+Y3B1X3RyYW5zY29kZXIpOworCisJLyogUExMIGlzIHByb3RlY3RlZCBieSBwYW5l bCwgbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSBpdCAqLworCWFzc2VydF9wYW5lbF91bmxvY2tlZChk ZXZfcHJpdiwgcGlwZSk7CisKKwlpZiAocGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAm IERQTExfVkNPX0VOQUJMRSkKKwkJX3Zsdl9lbmFibGVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsK KworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMX01EKHBpcGUpLAorCQkgICAgICAgcGlw ZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCBEUExMX01EKHBpcGUpKTsKK30KKworCitzdGF0aWMgdm9pZCBfY2h2X2VuYWJs ZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gY3J0 Yy0+cGlwZTsKKwllbnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0gdmx2X3BpcGVfdG9fY2hhbm5lbChw aXBlKTsKKwl1MzIgdG1wOworCisJdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsKKworCS8qIEVuYWJs ZSBiYWNrIHRoZSAxMGJpdCBjbG9jayB0byBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KKwl0bXAgPSB2 bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCkpOworCXRtcCB8 PSBEUElPX0RDTEtQX0VOOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfQ01O X0RXMTQocG9ydCksIHRtcCk7CisKKwl2bHZfZHBpb19wdXQoZGV2X3ByaXYpOworCisJLyoKKwkg KiBOZWVkIHRvIHdhaXQgPiAxMDBucyBiZXR3ZWVuIGRjbGtwIGNsb2NrIGVuYWJsZSBiaXQgYW5k IFBMTCBlbmFibGUuCisJICovCisJdWRlbGF5KDEpOworCisJLyogRW5hYmxlIFBMTCAqLworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZHBsbF9od19z dGF0ZS5kcGxsKTsKKworCS8qIENoZWNrIFBMTCBpcyBsb2NrZWQgKi8KKwlpZiAoaW50ZWxfZGVf d2FpdF9mb3Jfc2V0KGRldl9wcml2LCBEUExMKHBpcGUpLCBEUExMX0xPQ0tfVkxWLCAxKSkKKwkJ ZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIlBMTCAlZCBmYWlsZWQgdG8gbG9ja1xuIiwgcGlwZSk7 Cit9CisKK3ZvaWQgY2h2X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJ ZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCisJYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2 X3ByaXYsIHBpcGVfY29uZmlnLT5jcHVfdHJhbnNjb2Rlcik7CisKKwkvKiBQTEwgaXMgcHJvdGVj dGVkIGJ5IHBhbmVsLCBtYWtlIHN1cmUgd2UgY2FuIHdyaXRlIGl0ICovCisJYXNzZXJ0X3BhbmVs X3VubG9ja2VkKGRldl9wcml2LCBwaXBlKTsKKworCWlmIChwaXBlX2NvbmZpZy0+ZHBsbF9od19z dGF0ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxFKQorCQlfY2h2X2VuYWJsZV9wbGwoY3J0YywgcGlw ZV9jb25maWcpOworCisJaWYgKHBpcGUgIT0gUElQRV9BKSB7CisJCS8qCisJCSAqIFdhUGl4ZWxS ZXBlYXRNb2RlRml4Rm9yQzA6Y2h2CisJCSAqCisJCSAqIERQTExDTUQgaXMgQVdPTC4gVXNlIGNo aWNrZW4gYml0cyB0byBwcm9wYWdhdGUKKwkJICogdGhlIHZhbHVlIGZyb20gRFBMTEJNRCB0byBl aXRoZXIgcGlwZSBCIG9yIEMuCisJCSAqLworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ0JS NF9WTFYsIENCUl9EUExMQk1EX1BJUEUocGlwZSkpOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgRFBMTF9NRChQSVBFX0IpLAorCQkJICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRl LmRwbGxfbWQpOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ0JSNF9WTFYsIDApOworCQlk ZXZfcHJpdi0+Y2h2X2RwbGxfbWRbcGlwZV0gPSBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5k cGxsX21kOworCisJCS8qCisJCSAqIERQTExCIFZHQSBtb2RlIGFsc28gc2VlbXMgdG8gY2F1c2Ug cHJvYmxlbXMuCisJCSAqIFdlIHNob3VsZCBhbHdheXMgaGF2ZSBpdCBkaXNhYmxlZC4KKwkJICov CisJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgIChpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBEUExMKFBJUEVfQikpICYKKwkJCSAgICAgRFBMTF9WR0FfTU9ERV9ESVMpID09IDAp OworCX0gZWxzZSB7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMX01EKHBpcGUpLAor CQkJICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQpOworCQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQTExfTUQocGlwZSkpOworCX0KK30KKwordm9pZCB2 bHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCXUzMiBt ZGl2OworCXUzMiBiZXN0biwgYmVzdG0xLCBiZXN0bTIsIGJlc3RwMSwgYmVzdHAyOworCXUzMiBj b3JlY2xrLCByZWdfdmFsOworCisJLyogRW5hYmxlIFJlZmNsayAqLworCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBEUExMKHBpcGUpLAorCQkgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3Rh dGUuZHBsbCAmIH4oRFBMTF9WQ09fRU5BQkxFIHwgRFBMTF9FWFRfQlVGRkVSX0VOQUJMRV9WTFYp KTsKKworCS8qIE5vIG5lZWQgdG8gYWN0dWFsbHkgc2V0IHVwIHRoZSBEUExMIHdpdGggRFNJICov CisJaWYgKChwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxF KSA9PSAwKQorCQlyZXR1cm47CisKKwl2bHZfZHBpb19nZXQoZGV2X3ByaXYpOworCisJYmVzdG4g PSBwaXBlX2NvbmZpZy0+ZHBsbC5uOworCWJlc3RtMSA9IHBpcGVfY29uZmlnLT5kcGxsLm0xOwor CWJlc3RtMiA9IHBpcGVfY29uZmlnLT5kcGxsLm0yOworCWJlc3RwMSA9IHBpcGVfY29uZmlnLT5k cGxsLnAxOworCWJlc3RwMiA9IHBpcGVfY29uZmlnLT5kcGxsLnAyOworCisJLyogU2VlIGVEUCBI RE1JIERQSU8gZHJpdmVyIHZiaW9zIG5vdGVzIGRvYyAqLworCisJLyogUExMIEIgbmVlZHMgc3Bl Y2lhbCBoYW5kbGluZyAqLworCWlmIChwaXBlID09IFBJUEVfQikKKwkJdmx2X3BsbGJfcmVjYWxf b3BhbXAoZGV2X3ByaXYsIHBpcGUpOworCisJLyogU2V0IHVwIFR4IHRhcmdldCBmb3IgcGVyaW9k aWMgUmNvbXAgdXBkYXRlICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9Q TExfRFc5X0JDQVNULCAweDAxMDAwMDBmKTsKKworCS8qIERpc2FibGUgdGFyZ2V0IElSZWYgb24g UExMICovCisJcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExf RFc4KHBpcGUpKTsKKwlyZWdfdmFsICY9IDB4MDBmZmZmZmY7CisJdmx2X2RwaW9fd3JpdGUoZGV2 X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc4KHBpcGUpLCByZWdfdmFsKTsKKworCS8qIERpc2FibGUg ZmFzdCBsb2NrICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9DTU5fRFcw LCAweDYxMCk7CisKKwkvKiBTZXQgaWR0YWZjcmVjYWwgYmVmb3JlIFBMTCBpcyBlbmFibGVkICov CisJbWRpdiA9ICgoYmVzdG0xIDw8IERQSU9fTTFESVZfU0hJRlQpIHwgKGJlc3RtMiAmIERQSU9f TTJESVZfTUFTSykpOworCW1kaXYgfD0gKChiZXN0cDEgPDwgRFBJT19QMV9TSElGVCkgfCAoYmVz dHAyIDw8IERQSU9fUDJfU0hJRlQpKTsKKwltZGl2IHw9ICgoYmVzdG4gPDwgRFBJT19OX1NISUZU KSk7CisJbWRpdiB8PSAoMSA8PCBEUElPX0tfU0hJRlQpOworCisJLyoKKwkgKiBQb3N0IGRpdmlk ZXIgZGVwZW5kcyBvbiBwaXhlbCBjbG9jayByYXRlLCBEQUMgdnMgZGlnaXRhbCAoYW5kIExWRFMs CisJICogYnV0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCkuCisJICogTm90ZTogZG9uJ3QgdXNlIHRo ZSBEQUMgcG9zdCBkaXZpZGVyIGFzIGl0IHNlZW1zIHVuc3RhYmxlLgorCSAqLworCW1kaXYgfD0g KERQSU9fUE9TVF9ESVZfSERNSURQIDw8IERQSU9fUE9TVF9ESVZfU0hJRlQpOworCXZsdl9kcGlv X3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXMyhwaXBlKSwgbWRpdik7CisKKwltZGl2 IHw9IERQSU9fRU5BQkxFX0NBTElCUkFUSU9OOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBw aXBlLCBWTFZfUExMX0RXMyhwaXBlKSwgbWRpdik7CisKKwkvKiBTZXQgSEJSIGFuZCBSQlIgTFBG IGNvZWZmaWNpZW50cyAqLworCWlmIChwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9PSAxNjIwMDAg fHwKKwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0FO QUxPRykgfHwKKwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VU UFVUX0hETUkpKQorCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzEw KHBpcGUpLAorCQkJCSAweDAwOWYwMDAzKTsKKwllbHNlCisJCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBWTFZfUExMX0RXMTAocGlwZSksCisJCQkJIDB4MDBkMDAwMGYpOworCisJaWYg KGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIocGlwZV9jb25maWcpKSB7CisJCS8qIFVzZSBTU0Mg c291cmNlICovCisJCWlmIChwaXBlID09IFBJUEVfQSkKKwkJCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBWTFZfUExMX0RXNShwaXBlKSwKKwkJCQkJIDB4MGRmNDAwMDApOworCQllbHNl CisJCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzUocGlwZSksCisJ CQkJCSAweDBkZjcwMDAwKTsKKwl9IGVsc2UgeyAvKiBIRE1JIG9yIFZHQSAqLworCQkvKiBVc2Ug YmVuZCBzb3VyY2UgKi8KKwkJaWYgKHBpcGUgPT0gUElQRV9BKQorCQkJdmx2X2RwaW9fd3JpdGUo ZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc1KHBpcGUpLAorCQkJCQkgMHgwZGY3MDAwMCk7CisJ CWVsc2UKKwkJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNShwaXBl KSwKKwkJCQkJIDB4MGRmNDAwMDApOworCX0KKworCWNvcmVjbGsgPSB2bHZfZHBpb19yZWFkKGRl dl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNyhwaXBlKSk7CisJY29yZWNsayA9IChjb3JlY2xrICYg MHgwMDAwZmYwMCkgfCAweDAxYzAwMDAwOworCWlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVy KHBpcGVfY29uZmlnKSkKKwkJY29yZWNsayB8PSAweDAxMDAwMDAwOworCXZsdl9kcGlvX3dyaXRl KGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNyhwaXBlKSwgY29yZWNsayk7CisKKwl2bHZfZHBp b193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzExKHBpcGUpLCAweDg3ODcxMDAwKTsK KworCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Cit9CisKK3ZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFz ZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYp OworCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwllbnVtIGRwaW9fY2hhbm5lbCBwb3J0 ID0gdmx2X3BpcGVfdG9fY2hhbm5lbChwaXBlKTsKKwl1MzIgbG9vcGZpbHRlciwgdHJpYnVmX2Nh bGNudHI7CisJdTMyIGJlc3RuLCBiZXN0bTEsIGJlc3RtMiwgYmVzdHAxLCBiZXN0cDIsIGJlc3Rt Ml9mcmFjOworCXUzMiBkcGlvX3ZhbDsKKwlpbnQgdmNvOworCisJLyogRW5hYmxlIFJlZmNsayBh bmQgU1NDICovCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksCisJCSAgICAg ICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgfkRQTExfVkNPX0VOQUJMRSk7CisK KwkvKiBObyBuZWVkIHRvIGFjdHVhbGx5IHNldCB1cCB0aGUgRFBMTCB3aXRoIERTSSAqLworCWlm ICgocGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAmIERQTExfVkNPX0VOQUJMRSkgPT0g MCkKKwkJcmV0dXJuOworCisJYmVzdG4gPSBwaXBlX2NvbmZpZy0+ZHBsbC5uOworCWJlc3RtMl9m cmFjID0gcGlwZV9jb25maWctPmRwbGwubTIgJiAweDNmZmZmZjsKKwliZXN0bTEgPSBwaXBlX2Nv bmZpZy0+ZHBsbC5tMTsKKwliZXN0bTIgPSBwaXBlX2NvbmZpZy0+ZHBsbC5tMiA+PiAyMjsKKwli ZXN0cDEgPSBwaXBlX2NvbmZpZy0+ZHBsbC5wMTsKKwliZXN0cDIgPSBwaXBlX2NvbmZpZy0+ZHBs bC5wMjsKKwl2Y28gPSBwaXBlX2NvbmZpZy0+ZHBsbC52Y287CisJZHBpb192YWwgPSAwOworCWxv b3BmaWx0ZXIgPSAwOworCisJdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsKKworCS8qIHAxIGFuZCBw MiBkaXZpZGVyICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcx Myhwb3J0KSwKKwkJCTUgPDwgRFBJT19DSFZfUzFfRElWX1NISUZUIHwKKwkJCWJlc3RwMSA8PCBE UElPX0NIVl9QMV9ESVZfU0hJRlQgfAorCQkJYmVzdHAyIDw8IERQSU9fQ0hWX1AyX0RJVl9TSElG VCB8CisJCQkxIDw8IERQSU9fQ0hWX0tfRElWX1NISUZUKTsKKworCS8qIEZlZWRiYWNrIHBvc3Qt ZGl2aWRlciAtIG0yICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExf RFcwKHBvcnQpLCBiZXN0bTIpOworCisJLyogRmVlZGJhY2sgcmVmY2xrIGRpdmlkZXIgLSBuIGFu ZCBtMSAqLworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXMShwb3J0 KSwKKwkJCURQSU9fQ0hWX00xX0RJVl9CWV8yIHwKKwkJCTEgPDwgRFBJT19DSFZfTl9ESVZfU0hJ RlQpOworCisJLyogTTIgZnJhY3Rpb24gZGl2aXNpb24gKi8KKwl2bHZfZHBpb193cml0ZShkZXZf cHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzIocG9ydCksIGJlc3RtMl9mcmFjKTsKKworCS8qIE0yIGZy YWN0aW9uIGRpdmlzaW9uIGVuYWJsZSAqLworCWRwaW9fdmFsID0gdmx2X2RwaW9fcmVhZChkZXZf cHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzMocG9ydCkpOworCWRwaW9fdmFsICY9IH4oRFBJT19DSFZf RkVFREZXRF9HQUlOX01BU0sgfCBEUElPX0NIVl9GUkFDX0RJVl9FTik7CisJZHBpb192YWwgfD0g KDIgPDwgRFBJT19DSFZfRkVFREZXRF9HQUlOX1NISUZUKTsKKwlpZiAoYmVzdG0yX2ZyYWMpCisJ CWRwaW9fdmFsIHw9IERQSU9fQ0hWX0ZSQUNfRElWX0VOOworCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBDSFZfUExMX0RXMyhwb3J0KSwgZHBpb192YWwpOworCisJLyogUHJvZ3JhbSBk aWdpdGFsIGxvY2sgZGV0ZWN0IHRocmVzaG9sZCAqLworCWRwaW9fdmFsID0gdmx2X2RwaW9fcmVh ZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzkocG9ydCkpOworCWRwaW9fdmFsICY9IH4oRFBJ T19DSFZfSU5UX0xPQ0tfVEhSRVNIT0xEX01BU0sgfAorCQkJCQlEUElPX0NIVl9JTlRfTE9DS19U SFJFU0hPTERfU0VMX0NPQVJTRSk7CisJZHBpb192YWwgfD0gKDB4NSA8PCBEUElPX0NIVl9JTlRf TE9DS19USFJFU0hPTERfU0hJRlQpOworCWlmICghYmVzdG0yX2ZyYWMpCisJCWRwaW9fdmFsIHw9 IERQSU9fQ0hWX0lOVF9MT0NLX1RIUkVTSE9MRF9TRUxfQ09BUlNFOworCXZsdl9kcGlvX3dyaXRl KGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXOShwb3J0KSwgZHBpb192YWwpOworCisJLyogTG9v cCBmaWx0ZXIgKi8KKwlpZiAodmNvID09IDU0MDAwMDApIHsKKwkJbG9vcGZpbHRlciB8PSAoMHgz IDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweDggPDwg RFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKKwkJbG9vcGZpbHRlciB8PSAoMHgxIDw8IERQSU9f Q0hWX0dBSU5fQ1RSTF9TSElGVCk7CisJCXRyaWJ1Zl9jYWxjbnRyID0gMHg5OworCX0gZWxzZSBp ZiAodmNvIDw9IDYyMDAwMDApIHsKKwkJbG9vcGZpbHRlciB8PSAoMHg1IDw8IERQSU9fQ0hWX1BS T1BfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweEIgPDwgRFBJT19DSFZfSU5UX0NP RUZGX1NISUZUKTsKKwkJbG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX0dBSU5fQ1RSTF9T SElGVCk7CisJCXRyaWJ1Zl9jYWxjbnRyID0gMHg5OworCX0gZWxzZSBpZiAodmNvIDw9IDY0ODAw MDApIHsKKwkJbG9vcGZpbHRlciB8PSAoMHg0IDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQp OworCQlsb29wZmlsdGVyIHw9ICgweDkgPDwgRFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKKwkJ bG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX0dBSU5fQ1RSTF9TSElGVCk7CisJCXRyaWJ1 Zl9jYWxjbnRyID0gMHg4OworCX0gZWxzZSB7CisJCS8qIE5vdCBzdXBwb3J0ZWQuIEFwcGx5IHRo ZSBzYW1lIGxpbWl0cyBhcyBpbiB0aGUgbWF4IGNhc2UgKi8KKwkJbG9vcGZpbHRlciB8PSAoMHg0 IDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweDkgPDwg RFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKKwkJbG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9f Q0hWX0dBSU5fQ1RSTF9TSElGVCk7CisJCXRyaWJ1Zl9jYWxjbnRyID0gMDsKKwl9CisJdmx2X2Rw aW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFc2KHBvcnQpLCBsb29wZmlsdGVyKTsK KworCWRwaW9fdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzgo cG9ydCkpOworCWRwaW9fdmFsICY9IH5EUElPX0NIVl9URENfVEFSR0VUX0NOVF9NQVNLOworCWRw aW9fdmFsIHw9ICh0cmlidWZfY2FsY250ciA8PCBEUElPX0NIVl9URENfVEFSR0VUX0NOVF9TSElG VCk7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFc4KHBvcnQpLCBk cGlvX3ZhbCk7CisKKwkvKiBBRkMgUmVjYWwgKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwg cGlwZSwgQ0hWX0NNTl9EVzE0KHBvcnQpLAorCQkJdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlw ZSwgQ0hWX0NNTl9EVzE0KHBvcnQpKSB8CisJCQlEUElPX0FGQ19SRUNBTCk7CisKKwl2bHZfZHBp b19wdXQoZGV2X3ByaXYpOworfQorCisvKioKKyAqIHZsdl9mb3JjZV9wbGxfb24gLSBmb3JjaWJs eSBlbmFibGUganVzdCB0aGUgUExMCisgKiBAZGV2X3ByaXY6IGk5MTUgcHJpdmF0ZSBzdHJ1Y3R1 cmUKKyAqIEBwaXBlOiBwaXBlIFBMTCB0byBlbmFibGUKKyAqIEBkcGxsOiBQTEwgY29uZmlndXJh dGlvbgorICoKKyAqIEVuYWJsZSB0aGUgUExMIGZvciBAcGlwZSB1c2luZyB0aGUgc3VwcGxpZWQg QGRwbGwgY29uZmlnLiBUbyBiZSB1c2VkCisgKiBpbiBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRoZSBQ TEwgZW5hYmxlZCBldmVuIHdoZW4gQHBpcGUgaXMgbm90IGdvaW5nIHRvCisgKiBiZSBlbmFibGVk LgorICovCitpbnQgdmx2X2ZvcmNlX3BsbF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIGVudW0gcGlwZSBwaXBlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpkcGxsKQor eworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2 X3ByaXYsIHBpcGUpOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZzsKKwor CXBpcGVfY29uZmlnID0gaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhjcnRjKTsKKwlpZiAoIXBpcGVf Y29uZmlnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBpcGVfY29uZmlnLT5jcHVfdHJhbnNjb2Rl ciA9IChlbnVtIHRyYW5zY29kZXIpcGlwZTsKKwlwaXBlX2NvbmZpZy0+cGl4ZWxfbXVsdGlwbGll ciA9IDE7CisJcGlwZV9jb25maWctPmRwbGwgPSAqZHBsbDsKKworCWlmIChJU19DSEVSUllWSUVX KGRldl9wcml2KSkgeworCQljaHZfY29tcHV0ZV9kcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKKwkJ Y2h2X3ByZXBhcmVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKKwkJY2h2X2VuYWJsZV9wbGwoY3J0 YywgcGlwZV9jb25maWcpOworCX0gZWxzZSB7CisJCXZsdl9jb21wdXRlX2RwbGwoY3J0YywgcGlw ZV9jb25maWcpOworCQl2bHZfcHJlcGFyZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOworCQl2bHZf ZW5hYmxlX3BsbChjcnRjLCBwaXBlX2NvbmZpZyk7CisJfQorCisJa2ZyZWUocGlwZV9jb25maWcp OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmx2X2Rpc2FibGVfcGxsKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJdTMyIHZhbDsKKworCS8q IE1ha2Ugc3VyZSB0aGUgcGlwZSBpc24ndCBzdGlsbCByZWx5aW5nIG9uIHVzICovCisJYXNzZXJ0 X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIChlbnVtIHRyYW5zY29kZXIpcGlwZSk7CisKKwl2YWwg PSBEUExMX0lOVEVHUkFURURfUkVGX0NMS19WTFYgfAorCQlEUExMX1JFRl9DTEtfRU5BQkxFX1ZM ViB8IERQTExfVkdBX01PREVfRElTOworCWlmIChwaXBlICE9IFBJUEVfQSkKKwkJdmFsIHw9IERQ TExfSU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBE UExMKHBpcGUpLCB2YWwpOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBMTChw aXBlKSk7Cit9CisKK3ZvaWQgY2h2X2Rpc2FibGVfcGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJZW51bSBkcGlvX2NoYW5uZWwgcG9ydCA9 IHZsdl9waXBlX3RvX2NoYW5uZWwocGlwZSk7CisJdTMyIHZhbDsKKworCS8qIE1ha2Ugc3VyZSB0 aGUgcGlwZSBpc24ndCBzdGlsbCByZWx5aW5nIG9uIHVzICovCisJYXNzZXJ0X3BpcGVfZGlzYWJs ZWQoZGV2X3ByaXYsIChlbnVtIHRyYW5zY29kZXIpcGlwZSk7CisKKwl2YWwgPSBEUExMX1NTQ19S RUZfQ0xLX0NIViB8CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9E SVM7CisJaWYgKHBpcGUgIT0gUElQRV9BKQorCQl2YWwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9D TEtfVkxWOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHZhbCk7CisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsKKworCXZsdl9kcGlv X2dldChkZXZfcHJpdik7CisKKwkvKiBEaXNhYmxlIDEwYml0IGNsb2NrIHRvIGRpc3BsYXkgY29u dHJvbGxlciAqLworCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5f RFcxNChwb3J0KSk7CisJdmFsICY9IH5EUElPX0RDTEtQX0VOOworCXZsdl9kcGlvX3dyaXRlKGRl dl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCksIHZhbCk7CisKKwl2bHZfZHBpb19wdXQo ZGV2X3ByaXYpOworfQorCit2b2lkIGk5eHhfZGlzYWJsZV9wbGwoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0 b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBp cGUgPSBjcnRjLT5waXBlOworCisJLyogRG9uJ3QgZGlzYWJsZSBwaXBlIG9yIHBpcGUgUExMcyBp ZiBuZWVkZWQgKi8KKwlpZiAoSVNfSTgzMChkZXZfcHJpdikpCisJCXJldHVybjsKKworCS8qIE1h a2Ugc3VyZSB0aGUgcGlwZSBpc24ndCBzdGlsbCByZWx5aW5nIG9uIHVzICovCisJYXNzZXJ0X3Bp cGVfZGlzYWJsZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsKKworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMKHBpcGUpLCBEUExMX1ZHQV9NT0RFX0RJUyk7CisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsKK30KKworCisvKioK KyAqIHZsdl9mb3JjZV9wbGxfb2ZmIC0gZm9yY2libHkgZGlzYWJsZSBqdXN0IHRoZSBQTEwKKyAq IEBkZXZfcHJpdjogaTkxNSBwcml2YXRlIHN0cnVjdHVyZQorICogQHBpcGU6IHBpcGUgUExMIHRv IGRpc2FibGUKKyAqCisgKiBEaXNhYmxlIHRoZSBQTEwgZm9yIEBwaXBlLiBUbyBiZSB1c2VkIGlu IGNhc2VzIHdoZXJlIHdlIG5lZWQKKyAqIHRoZSBQTEwgZW5hYmxlZCBldmVuIHdoZW4gQHBpcGUg aXMgbm90IGdvaW5nIHRvIGJlIGVuYWJsZWQuCisgKi8KK3ZvaWQgdmx2X2ZvcmNlX3BsbF9vZmYo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlp ZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCWNodl9kaXNhYmxlX3BsbChkZXZfcHJpdiwg cGlwZSk7CisJZWxzZQorCQl2bHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUpOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuaAppbmRleCBjYWY0NjE1MDkyZTEu LjIzOGU1NDYzYjU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcGxsLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxs LmgKQEAgLTIwLDQgKzIwLDIxIEBAIHZvaWQgdmx2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKIHZvaWQgY2h2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YywKIAkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIAoraW50 IHZsdl9mb3JjZV9wbGxfb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVt IHBpcGUgcGlwZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgZHBsbCAqZHBsbCk7Cit2b2lkIHZsdl9m b3JjZV9wbGxfb2ZmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBl IHBpcGUpOwordm9pZCBpOXh4X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJ CSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwordm9pZCB2 bHZfZW5hYmxlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cit2b2lkIGNodl9lbmFibGVfcGxsKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnKTsKK3ZvaWQgdmx2X2Rpc2FibGVfcGxsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpOwordm9pZCBjaHZfZGlzYWJsZV9wbGwo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7Cit2b2lk IGk5eHhfZGlzYWJsZV9wbGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpOwordm9pZCB2bHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKK3ZvaWQgY2h2 X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7CisKICNlbmRpZgotLSAKMi4yNy4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK