From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shawn Guo Subject: [PATCH v3 4/4] drm: zte: add VGA driver support Date: Tue, 11 Apr 2017 19:30:26 +0800 Message-ID: <1491910226-7831-1-git-send-email-shawnguo@kernel.org> References: <1491490870-6330-5-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 49E646E127 for ; Tue, 11 Apr 2017 11:31:46 +0000 (UTC) In-Reply-To: <1491490870-6330-5-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: Xin Zhou , Daniel Vetter , Baoyou Xie , Jun Nie List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2hhd24gR3VvIDxzaGF3bi5ndW9AbGluYXJvLm9yZz4KCkl0IGFkZHMgVkdBIGRyaXZl ciBzdXBwb3J0LCB3aGljaCBuZWVkcyB0byBjb25maWd1cmUgY29ycmVzcG9uZGluZyBWT1UKaW50 ZXJmYWNlIGluIFJHQl84ODggZm9ybWF0LCBhbmQgdGh1cyB0aGUgZm9sbG93aW5nIGNoYW5nZXMg YXJlIG5lZWRlZApvbiB6eF92b3UuCgogLSBSZW5hbWUgdGhlIENTQyBibG9jayBvZiBHcmFwaGlj IExheWVyIGEgYml0IHRvIG1ha2UgaXQgbW9yZSBzcGVjaWZpYywKICAgYW5kIGFkZCBDU0Mgb2Yg Q2hhbm5lbCB0byBzdXBwb3J0IFJHQiBvdXRwdXQuCiAtIEJ5cGFzcyBEaXRoZXIgYmxvY2sgZm9y IFJHQiBvdXRwdXQuCgpTaWduZWQtb2ZmLWJ5OiBTaGF3biBHdW8gPHNoYXduLmd1b0BsaW5hcm8u b3JnPgpBY2tlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KLS0t CkNoYW5nZXMgZm9yIHYzOgogLSBTZXQgZGV2aWNlIHN0YXRlIGludG8gZGlzY29ubmVjdGVkIHdo ZW4gZWRpZCByZWFkIGZhaWxzIGluIC5nZXRfbW9kZXMKICAgaG9vay4KIC0gRHJvcCBsb2NraW5n IGFuZCBhZGQgY29tbWVudHMgZm9yIHVuZGVyc3RhbmRpbmcgd2h5IGl0J3Mgbm90CiAgIG5lY2Vz c2FyeS4KCkNoYW5nZXMgZm9yIHYyOgogLSBBZGQgcmV0dXJuIGNoZWNrIGZvciBlbmNvZGVyIGFu ZCBjb25uZWN0b3IgaW5pdCBmdW5jdGlvbiBjYWxscy4KIC0gSW1wcm92ZSBjb21tZW50cyBpbiBm dW5jdGlvbiB6eF92Z2FfaXJxX2hhbmRsZXIoKSB0byBhdm9pZCBjb25mdXNpb24uCiAtIEFkZCBs b2NrIGZvciBWR0FfQVVUT19ERVRFQ1RfU0VMIHJlZ2lzdGVyIGFjY2VzcyB0byBhdm9pZCByYWNl CiAgIGNvbmRpdGlvbiBiZXR3ZWVuIGlycSBoYW5kbGVyIGFuZCAuZ2V0X21vZGVzIGhvb2suCiBk cml2ZXJzL2dwdS9kcm0venRlL01ha2VmaWxlICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJt L3p0ZS96eF9kcm1fZHJ2LmMgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Ry di5oICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0venRlL3p4X3ZnYS5jICAgICAgfCA1MzEgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS96dGUv enhfdmdhX3JlZ3MuaCB8ICAzNiArKysKIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfdm91LmMgICAg ICB8ICAzMyArKy0KIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfdm91X3JlZ3MuaCB8ICAxMiArLQog NyBmaWxlcyBjaGFuZ2VkLCA2MTEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0venRlL3p4X3ZnYS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92Z2FfcmVncy5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUK aW5kZXggMDEzNTJiNTZjNDE4Li45ZGY3NzY2YTdmOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS96dGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS9NYWtlZmlsZQpAQCAt Myw2ICszLDcgQEAgenhkcm0teSA6PSBcCiAJenhfaGRtaS5vIFwKIAl6eF9wbGFuZS5vIFwKIAl6 eF90dmVuYy5vIFwKKwl6eF92Z2EubyBcCiAJenhfdm91Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9a VEUpICs9IHp4ZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Ry di5jIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmMKaW5kZXggNWM2OTQ0YTFlNzJj Li44YTY4OTJlZWI0NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Ry di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5jCkBAIC0yNDgsNiArMjQ4 LDcgQEAgc3RhdGljIGludCB6eF9kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCiAJJnp4X2NydGNfZHJpdmVyLAogCSZ6eF9oZG1pX2RyaXZlciwKIAkmenhfdHZlbmNfZHJp dmVyLAorCSZ6eF92Z2FfZHJpdmVyLAogCSZ6eF9kcm1fcGxhdGZvcm1fZHJpdmVyLAogfTsKIApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0venRlL3p4X2RybV9kcnYuaAppbmRleCA1Y2EwMzViMDc5YzcuLjJhOGNkYzVmOGJlNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmgKQEAgLTE0LDYgKzE0LDcgQEAKIGV4dGVybiBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIHp4X2NydGNfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgenhfaGRtaV9kcml2ZXI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6 eF90dmVuY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eF92Z2FfZHJp dmVyOwogCiBzdGF0aWMgaW5saW5lIHUzMiB6eF9yZWFkbCh2b2lkIF9faW9tZW0gKnJlZykKIHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfdmdhLmMgYi9kcml2ZXJzL2dwdS9k cm0venRlL3p4X3ZnYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u MWUwODExZjc3NWNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92 Z2EuYwpAQCAtMCwwICsxLDUzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBTYW5lY2hp cHMgVGVjaG5vbG9neSBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAyMDE3IExpbmFybyBMdGQuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5j bHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgor I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1QLmg+CisKKyNpbmNsdWRlICJ6eF9kcm1fZHJ2LmgiCisjaW5jbHVkZSAienhfdmdhX3JlZ3Mu aCIKKyNpbmNsdWRlICJ6eF92b3UuaCIKKworc3RydWN0IHp4X3ZnYV9wd3JjdHJsIHsKKwlzdHJ1 Y3QgcmVnbWFwICpyZWdtYXA7CisJdTMyIHJlZzsKKwl1MzIgbWFzazsKK307CisKK3N0cnVjdCB6 eF92Z2FfaTJjIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcDsKKwlzdHJ1Y3QgbXV0ZXggbG9j azsKK307CisKK3N0cnVjdCB6eF92Z2EgeworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3Rv cjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgenhfdmdhX2kyYyAqZGRj OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKm1taW87CisJc3RydWN0IGNs ayAqaTJjX3djbGs7CisJc3RydWN0IHp4X3ZnYV9wd3JjdHJsIHB3cmN0cmw7CisJc3RydWN0IGNv bXBsZXRpb24gY29tcGxldGU7CisJYm9vbCBjb25uZWN0ZWQ7Cit9OworCisjZGVmaW5lIHRvX3p4 X3ZnYSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHp4X3ZnYSwgeCkKKworc3RhdGljIHZvaWQg enhfdmdhX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlz dHJ1Y3QgenhfdmdhICp2Z2EgPSB0b196eF92Z2EoZW5jb2Rlcik7CisJc3RydWN0IHp4X3ZnYV9w d3JjdHJsICpwd3JjdHJsID0gJnZnYS0+cHdyY3RybDsKKworCS8qIFNldCBiaXQgdG8gcG93ZXIg dXAgVkdBIERBQ3MgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMocHdyY3RybC0+cmVnbWFwLCBwd3Jj dHJsLT5yZWcsIHB3cmN0cmwtPm1hc2ssCisJCQkgICBwd3JjdHJsLT5tYXNrKTsKKworCXZvdV9p bmZfZW5hYmxlKFZPVV9WR0EsIGVuY29kZXItPmNydGMpOworfQorCitzdGF0aWMgdm9pZCB6eF92 Z2FfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1 Y3QgenhfdmdhICp2Z2EgPSB0b196eF92Z2EoZW5jb2Rlcik7CisJc3RydWN0IHp4X3ZnYV9wd3Jj dHJsICpwd3JjdHJsID0gJnZnYS0+cHdyY3RybDsKKworCXZvdV9pbmZfZGlzYWJsZShWT1VfVkdB LCBlbmNvZGVyLT5jcnRjKTsKKworCS8qIENsZWFyIGJpdCB0byBwb3dlciBkb3duIFZHQSBEQUNz ICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHB3cmN0cmwtPnJlZ21hcCwgcHdyY3RybC0+cmVnLCBw d3JjdHJsLT5tYXNrLCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9o ZWxwZXJfZnVuY3MgenhfdmdhX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUJPSB6 eF92Z2FfZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUgPSB6eF92Z2FfZW5jb2Rlcl9kaXNhYmxl LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB6eF92Z2FfZW5j b2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitz dGF0aWMgaW50IHp4X3ZnYV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IHp4X3ZnYSAqdmdhID0gdG9fenhfdmdhKGNvbm5lY3Rv cik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldDsKKworCS8qCisJICogQ2xlYXIgYm90 aCBkZXRlY3Rpb24gYml0cyB0byBzd2l0Y2ggSTJDIGJ1cyBmcm9tIGRldmljZQorCSAqIGRldGVj dGluZyB0byBFRElEIHJlYWRpbmcuCisJICovCisJenhfd3JpdGVsKHZnYS0+bW1pbyArIFZHQV9B VVRPX0RFVEVDVF9TRUwsIDApOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZ2 Z2EtPmRkYy0+YWRhcCk7CisJaWYgKCFlZGlkKSB7CisJCS8qCisJCSAqIElmIEVESUQgcmVhZGlu ZyBmYWlscywgd2Ugc2V0IHRoZSBkZXZpY2Ugc3RhdGUgaW50bworCQkgKiBkaXNjb25uZWN0ZWQu ICBMb2NraW5nIGlzIG5vdCByZXF1aXJlZCBoZXJlLCBzaW5jZSB0aGUKKwkJICogVkdBX0FVVE9f REVURUNUX1NFTCByZWdpc3RlciB3cml0ZSBpbiBpcnEgaGFuZGxlciBjYW5ub3QKKwkJICogYmUg dHJpZ2dlcmVkIHdoZW4gYm90aCBkZXRlY3Rpb24gYml0cyBhcmUgY2xlYXJlZCBhcyBhYm92ZS4K KwkJICovCisJCXp4X3dyaXRlbCh2Z2EtPm1taW8gKyBWR0FfQVVUT19ERVRFQ1RfU0VMLAorCQkJ ICBWR0FfREVURUNUX1NFTF9OT19ERVZJQ0UpOworCQl2Z2EtPmNvbm5lY3RlZCA9IGZhbHNlOwor CQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEFzIGVkaWQgcmVhZGluZyBzdWNjZWVkcywgZGV2 aWNlIG11c3QgYmUgY29ubmVjdGVkLCBzbyB3ZSBzZXQKKwkgKiB1cCBkZXRlY3Rpb24gYml0IGZv ciB1bnBsdWcgaW50ZXJydXB0IGhlcmUuCisJICovCisJenhfd3JpdGVsKHZnYS0+bW1pbyArIFZH QV9BVVRPX0RFVEVDVF9TRUwsIFZHQV9ERVRFQ1RfU0VMX0hBU19ERVZJQ0UpOworCisJZHJtX21v ZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJcmV0 ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKK3p4X3ZnYV9j b25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJ ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJldHVybiBNT0RFX09LOwor fQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHp4X3ZnYV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB6eF92Z2FfY29ubmVjdG9yX2dl dF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHp4X3ZnYV9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307 CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCit6eF92Z2FfY29ubmVjdG9yX2Rl dGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0 cnVjdCB6eF92Z2EgKnZnYSA9IHRvX3p4X3ZnYShjb25uZWN0b3IpOworCisJcmV0dXJuIHZnYS0+ Y29ubmVjdGVkID8gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgorCQkJCWNvbm5lY3Rvcl9z dGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3MgenhfdmdhX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9z aW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSB6eF92Z2FfY29ubmVjdG9yX2RldGVj dCwKKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKKwkucmVzZXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVz dHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAor fTsKKworc3RhdGljIGludCB6eF92Z2FfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg c3RydWN0IHp4X3ZnYSAqdmdhKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZ2 Z2EtPmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZ2Z2EtPmNv bm5lY3RvcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB2Z2EtPmRldjsKKwlpbnQgcmV0OworCisJ ZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBWT1VfQ1JUQ19NQVNLOworCisJcmV0ID0gZHJtX2Vu Y29kZXJfaW5pdChkcm0sIGVuY29kZXIsICZ6eF92Z2FfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAg ICBEUk1fTU9ERV9FTkNPREVSX0RBQywgTlVMTCk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VS Uk9SKGRldiwgImZhaWxlZCB0byBpbml0IGVuY29kZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX07CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZ6eF92Z2FfZW5j b2Rlcl9oZWxwZXJfZnVuY3MpOworCisJdmdhLT5jb25uZWN0b3IucG9sbGVkID0gRFJNX0NPTk5F Q1RPUl9QT0xMX0hQRDsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm0sIGNvbm5lY3Rv ciwgJnp4X3ZnYV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0Ep OworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gaW5pdCBjb25u ZWN0b3I6ICVkXG4iLCByZXQpOworCQlnb3RvIGNsZWFuX2VuY29kZXI7CisJfTsKKworCWRybV9j b25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZ6eF92Z2FfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyk7CisKKwlyZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVj dG9yLCBlbmNvZGVyKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVk IHRvIGF0dGFjaCBlbmNvZGVyOiAlZFxuIiwgcmV0KTsKKwkJZ290byBjbGVhbl9jb25uZWN0b3I7 CisJfTsKKworCXJldHVybiAwOworCitjbGVhbl9jb25uZWN0b3I6CisJZHJtX2Nvbm5lY3Rvcl9j bGVhbnVwKGNvbm5lY3Rvcik7CitjbGVhbl9lbmNvZGVyOgorCWRybV9lbmNvZGVyX2NsZWFudXAo ZW5jb2Rlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB6eF92Z2FfcHdyY3RybF9p bml0KHN0cnVjdCB6eF92Z2EgKnZnYSkKK3sKKwlzdHJ1Y3QgenhfdmdhX3B3cmN0cmwgKnB3cmN0 cmwgPSAmdmdhLT5wd3JjdHJsOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHZnYS0+ZGV2OworCXN0 cnVjdCBvZl9waGFuZGxlX2FyZ3Mgb3V0X2FyZ3M7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwor CWludCByZXQ7CisKKwlyZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJncyhkZXYt Pm9mX25vZGUsCisJCQkJInp0ZSx2Z2EtcG93ZXItY29udHJvbCIsIDIsIDAsICZvdXRfYXJncyk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlZ21hcCA9IHN5c2Nvbl9ub2RlX3RvX3Jl Z21hcChvdXRfYXJncy5ucCk7CisJaWYgKElTX0VSUihyZWdtYXApKSB7CisJCXJldCA9IFBUUl9F UlIocmVnbWFwKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHdyY3RybC0+cmVnbWFwID0gcmVnbWFw OworCXB3cmN0cmwtPnJlZyA9IG91dF9hcmdzLmFyZ3NbMF07CisJcHdyY3RybC0+bWFzayA9IG91 dF9hcmdzLmFyZ3NbMV07CisKK291dDoKKwlvZl9ub2RlX3B1dChvdXRfYXJncy5ucCk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCB6eF92Z2FfaTJjX3JlYWQoc3RydWN0IHp4X3ZnYSAq dmdhLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCWludCBsZW4gPSBtc2ctPmxlbjsKKwl1OCAq YnVmID0gbXNnLT5idWY7CisJdTMyIG9mZnNldCA9IDA7CisJaW50IGk7CisKKwlyZWluaXRfY29t cGxldGlvbigmdmdhLT5jb21wbGV0ZSk7CisKKwkvKiBTZWxlY3QgY29tYm8gd3JpdGUgKi8KKwl6 eF93cml0ZWxfbWFzayh2Z2EtPm1taW8gKyBWR0FfQ01EX0NGRywgVkdBX0NNRF9DT01CTywgVkdB X0NNRF9DT01CTyk7CisJenhfd3JpdGVsX21hc2sodmdhLT5tbWlvICsgVkdBX0NNRF9DRkcsIFZH QV9DTURfUlcsIDApOworCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJdTMyIGNudDsKKworCQkvKiBD bGVhciBSWCBGSUZPICovCisJCXp4X3dyaXRlbF9tYXNrKHZnYS0+bW1pbyArIFZHQV9SWEZfQ1RS TCwgVkdBX1JYX0ZJRk9fQ0xFQVIsCisJCQkgICAgICAgVkdBX1JYX0ZJRk9fQ0xFQVIpOworCisJ CS8qIERhdGEgb2Zmc2V0IHRvIHJlYWQgZnJvbSAqLworCQl6eF93cml0ZWwodmdhLT5tbWlvICsg VkdBX1NVQl9BRERSLCBvZmZzZXQpOworCisJCS8qIEtpY2sgb2ZmIHRoZSB0cmFuc2ZlciAqLwor CQl6eF93cml0ZWxfbWFzayh2Z2EtPm1taW8gKyBWR0FfQ01EX0NGRywgVkdBX0NNRF9UUkFOUywK KwkJCSAgICAgICBWR0FfQ01EX1RSQU5TKTsKKworCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmdmdhLT5jb21wbGV0ZSwKKwkJCQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkg eworCQkJRFJNX0RFVl9FUlJPUih2Z2EtPmRldiwgInRyYW5zZmVyIHRpbWVvdXRcbiIpOworCQkJ cmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQljbnQgPSB6eF9yZWFkbCh2Z2EtPm1taW8gKyBW R0FfUlhGX1NUQVRVUyk7CisJCWNudCA9IChjbnQgJiBWR0FfUlhGX0NPVU5UX01BU0spID4+IFZH QV9SWEZfQ09VTlRfU0hJRlQ7CisJCS8qIEZJRk8gc3RhdHVzIG1heSByZXBvcnQgbW9yZSBkYXRh IHRoYW4gd2UgbmVlZCB0byByZWFkICovCisJCWNudCA9IG1pbl90KHUzMiwgbGVuLCBjbnQpOwor CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJCSpidWYrKyA9IHp4X3JlYWRsKHZnYS0+ bW1pbyArIFZHQV9EQVRBKTsKKworCQlsZW4gLT0gY250OworCQlvZmZzZXQgKz0gY250OworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp4X3ZnYV9pMmNfd3JpdGUoc3RydWN0IHp4 X3ZnYSAqdmdhLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCS8qCisJICogVGhlIEREQyBJMkMg YWRhcHRlciBpcyBvbmx5IGZvciByZWFkaW5nIEVESUQgZGF0YSwgc28gd2UgYXNzdW1lCisJICog dGhhdCB0aGUgd3JpdGUgdG8gdGhpcyBhZGFwdGVyIG11c3QgYmUgdGhlIEVESUQgZGF0YSBvZmZz ZXQuCisJICovCisJaWYgKChtc2ctPmxlbiAhPSAxKSB8fCAoKG1zZy0+YWRkciAhPSBERENfQURE UikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEhhcmR3YXJlIHdpbGwgdGFrZSBjYXJlIG9m IHRoZSBzbGF2ZSBhZGRyZXNzIHNoaWZ0aW5nICovCisJenhfd3JpdGVsKHZnYS0+bW1pbyArIFZH QV9ERVZJQ0VfQUREUiwgbXNnLT5hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHp4X3ZnYV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNn ICptc2dzLAorCQkJICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgenhfdmdhICp2Z2EgPSBpMmNfZ2V0 X2FkYXBkYXRhKGFkYXApOworCXN0cnVjdCB6eF92Z2FfaTJjICpkZGMgPSB2Z2EtPmRkYzsKKwlp bnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJmRkYy0+bG9jayk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkK KwkJCXJldCA9IHp4X3ZnYV9pMmNfcmVhZCh2Z2EsICZtc2dzW2ldKTsKKwkJZWxzZQorCQkJcmV0 ID0genhfdmdhX2kyY193cml0ZSh2Z2EsICZtc2dzW2ldKTsKKworCQlpZiAocmV0IDwgMCkKKwkJ CWJyZWFrOworCX0KKworCWlmICghcmV0KQorCQlyZXQgPSBudW07CisKKwltdXRleF91bmxvY2so JmRkYy0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHp4X3ZnYV9pMmNf ZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0ky QyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Fs Z29yaXRobSB6eF92Z2FfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlcgk9IHp4X3ZnYV9pMmNf eGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IHp4X3ZnYV9pMmNfZnVuYywKK307CisKK3N0YXRpYyBp bnQgenhfdmdhX2RkY19yZWdpc3RlcihzdHJ1Y3QgenhfdmdhICp2Z2EpCit7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gdmdhLT5kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOworCXN0cnVj dCB6eF92Z2FfaTJjICpkZGM7CisJaW50IHJldDsKKworCWRkYyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqZGRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZGMpCisJCXJldHVybiAtRU5PTUVN OworCisJdmdhLT5kZGMgPSBkZGM7CisJbXV0ZXhfaW5pdCgmZGRjLT5sb2NrKTsKKworCWFkYXAg PSAmZGRjLT5hZGFwOworCWFkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJYWRhcC0+Y2xhc3Mg PSBJMkNfQ0xBU1NfRERDOworCWFkYXAtPmRldi5wYXJlbnQgPSBkZXY7CisJYWRhcC0+YWxnbyA9 ICZ6eF92Z2FfYWxnb3JpdGhtOworCXNucHJpbnRmKGFkYXAtPm5hbWUsIHNpemVvZihhZGFwLT5u YW1lKSwgInp4IHZnYSBpMmMiKTsKKworCXJldCA9IGkyY19hZGRfYWRhcHRlcihhZGFwKTsKKwlp ZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGFkZCBJMkMgYWRhcHRl cjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaTJjX3NldF9hZGFwZGF0YShh ZGFwLCB2Z2EpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB6eF92Z2Ff aXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHp4X3ZnYSAqdmdh ID0gZGV2X2lkOworCisJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KHZnYS0+Y29ubmVjdG9yLmRl dik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB6eF92 Z2FfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB6eF92Z2Eg KnZnYSA9IGRldl9pZDsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0genhfcmVhZGwodmdhLT5t bWlvICsgVkdBX0kyQ19TVEFUVVMpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwor CXp4X3dyaXRlbF9tYXNrKHZnYS0+bW1pbyArIFZHQV9JMkNfU1RBVFVTLCBWR0FfQ0xFQVJfSVJR LAorCQkgICAgICAgVkdBX0NMRUFSX0lSUSk7CisKKwlpZiAoc3RhdHVzICYgVkdBX0RFVklDRV9D T05ORUNURUQpIHsKKwkJLyoKKwkJICogU2luY2UgVkdBX0RFVEVDVF9TRUwgYml0cyBuZWVkIHRv IGJlIHJlc2V0IGZvciBzd2l0Y2hpbmcgRERDCisJCSAqIGJ1cyBmcm9tIGRldmljZSBkZXRlY3Rp b24gdG8gRURJRCByZWFkLCByYXRoZXIgdGhhbiBzZXR0aW5nCisJCSAqIHVwIEhBU19ERVZJQ0Ug Yml0IGhlcmUsIHdlIG5lZWQgdG8gZG8gdGhhdCBpbiAuZ2V0X21vZGVzCisJCSAqIGhvb2sgZm9y IHVucGx1ZyBkZXRlY3RpbmcgYWZ0ZXIgRURJRCByZWFkIHN1Y2NlZWRzLgorCQkgKi8KKwkJdmdh LT5jb25uZWN0ZWQgPSB0cnVlOworCQlyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOworCX0KKworCWlm IChzdGF0dXMgJiBWR0FfREVWSUNFX0RJU0NPTk5FQ1RFRCkgeworCQl6eF93cml0ZWwodmdhLT5t bWlvICsgVkdBX0FVVE9fREVURUNUX1NFTCwKKwkJCSAgVkdBX0RFVEVDVF9TRUxfTk9fREVWSUNF KTsKKwkJdmdhLT5jb25uZWN0ZWQgPSBmYWxzZTsKKwkJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsK Kwl9CisKKwlpZiAoc3RhdHVzICYgVkdBX1RSQU5TX0RPTkUpIHsKKwkJY29tcGxldGUoJnZnYS0+ Y29tcGxldGUpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05F OworfQorCitzdGF0aWMgdm9pZCB6eF92Z2FfaHdfaW5pdChzdHJ1Y3QgenhfdmdhICp2Z2EpCit7 CisJdW5zaWduZWQgbG9uZyByZWYgPSBjbGtfZ2V0X3JhdGUodmdhLT5pMmNfd2Nsayk7CisJaW50 IGRpdjsKKworCS8qCisJICogU2V0IHVwIEkyQyBmYXN0IHNwZWVkIGRpdmlkZXIgcGVyIGZvcm11 bGEgYmVsb3cgdG8gZ2V0IDQwMGtIei4KKwkgKiAgIHNjbCA9IHJlZiAvICgoZGl2ICsgMSkgKiA0 KQorCSAqLworCWRpdiA9IERJVl9ST1VORF9VUChyZWYgLyAxMDAwLCA0MDAgKiA0KSAtIDE7CisJ enhfd3JpdGVsKHZnYS0+bW1pbyArIFZHQV9DTEtfRElWX0ZTLCBkaXYpOworCisJLyogU2V0IHVw IGRldmljZSBkZXRlY3Rpb24gKi8KKwl6eF93cml0ZWwodmdhLT5tbWlvICsgVkdBX0FVVE9fREVU RUNUX1BBUkEsIDB4ODApOworCXp4X3dyaXRlbCh2Z2EtPm1taW8gKyBWR0FfQVVUT19ERVRFQ1Rf U0VMLCBWR0FfREVURUNUX1NFTF9OT19ERVZJQ0UpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHBv a2UgbW9uaXRvciB2aWEgRERDIGJ1cyB0byBnZXQgY29ubmVjdGlvbiBpcnEKKwkgKiBzdGFydCB3 b3JraW5nLgorCSAqLworCXp4X3dyaXRlbCh2Z2EtPm1taW8gKyBWR0FfREVWSUNFX0FERFIsIERE Q19BRERSKTsKKwl6eF93cml0ZWxfbWFzayh2Z2EtPm1taW8gKyBWR0FfQ01EX0NGRywgVkdBX0NN RF9UUkFOUywgVkdBX0NNRF9UUkFOUyk7Cit9CisKK3N0YXRpYyBpbnQgenhfdmdhX2JpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwor CXN0cnVjdCB6eF92Z2EgKnZnYTsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwl2Z2EgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKnZnYSksIEdGUF9LRVJORUwpOworCWlmICghdmdhKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXZnYS0+ZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYs IHZnYSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOworCXZnYS0+bW1pbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJ aWYgKElTX0VSUih2Z2EtPm1taW8pKQorCQlyZXR1cm4gUFRSX0VSUih2Z2EtPm1taW8pOworCisJ aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJu IGlycTsKKworCXZnYS0+aTJjX3djbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaTJjX3djbGsiKTsK KwlpZiAoSVNfRVJSKHZnYS0+aTJjX3djbGspKSB7CisJCXJldCA9IFBUUl9FUlIodmdhLT5pMmNf d2Nsayk7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGdldCBpMmNfd2NsazogJWRc biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0genhfdmdhX3B3cmN0cmxfaW5p dCh2Z2EpOworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gaW5p dCBwb3dlciBjb250cm9sOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSB6eF92Z2FfZGRjX3JlZ2lzdGVyKHZnYSk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9S KGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkZGM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldCA9IHp4X3ZnYV9yZWdpc3Rlcihkcm0sIHZnYSk7CisJaWYgKHJldCkgewor CQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZWdpc3RlciB2Z2E6ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCWluaXRfY29tcGxldGlvbigmdmdhLT5jb21wbGV0ZSk7 CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCB6eF92Z2FfaXJx X2hhbmRsZXIsCisJCQkJCXp4X3ZnYV9pcnFfdGhyZWFkLCBJUlFGX1NIQVJFRCwKKwkJCQkJZGV2 X25hbWUoZGV2KSwgdmdhKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFp bGVkIHRvIHJlcXVlc3QgdGhyZWFkZWQgaXJxOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUodmdhLT5pMmNfd2Nsayk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXp4X3ZnYV9od19pbml0KHZnYSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgenhfdmdhX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgenhfdmdhICp2 Z2EgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh2Z2Et PmkyY193Y2xrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIHp4X3Zn YV9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0genhfdmdhX2JpbmQsCisJLnVuYmluZCA9IHp4 X3ZnYV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IHp4X3ZnYV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ6 eF92Z2FfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgenhfdmdhX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwg Jnp4X3ZnYV9jb21wb25lbnRfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgenhfdmdhX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJ6dGUsengyOTY3MTgtdmdhIiwgfSwKKwl7IC8qIGVuZCAqLyB9LAorfTsKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHp4X3ZnYV9vZl9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg enhfdmdhX2RyaXZlciA9IHsKKwkucHJvYmUgPSB6eF92Z2FfcHJvYmUsCisJLnJlbW92ZSA9IHp4 X3ZnYV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiengtdmdhIiwKKwkJLm9mX21h dGNoX3RhYmxlCT0genhfdmdhX29mX21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3p0ZS96eF92Z2FfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92Z2Ff cmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmVhYTM0NWZl NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92Z2FfcmVncy5o CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU2FuZWNoaXBzIFRl Y2hub2xvZ3kgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgMjAxNyBMaW5hcm8gTHRkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1pYX1ZHQV9SRUdTX0hfXworI2RlZmlu ZSBfX1pYX1ZHQV9SRUdTX0hfXworCisjZGVmaW5lIFZHQV9DTURfQ0ZHCQkJMHgwNAorI2RlZmlu ZSBWR0FfQ01EX1RSQU5TCQkJQklUKDYpCisjZGVmaW5lIFZHQV9DTURfQ09NQk8JCQlCSVQoNSkK KyNkZWZpbmUgVkdBX0NNRF9SVwkJCUJJVCg0KQorI2RlZmluZSBWR0FfU1VCX0FERFIJCQkweDBj CisjZGVmaW5lIFZHQV9ERVZJQ0VfQUREUgkJCTB4MTAKKyNkZWZpbmUgVkdBX0NMS19ESVZfRlMJ CQkweDE0CisjZGVmaW5lIFZHQV9SWEZfQ1RSTAkJCTB4MjAKKyNkZWZpbmUgVkdBX1JYX0ZJRk9f Q0xFQVIJCUJJVCg3KQorI2RlZmluZSBWR0FfREFUQQkJCTB4MjQKKyNkZWZpbmUgVkdBX0kyQ19T VEFUVVMJCQkweDI4CisjZGVmaW5lIFZHQV9ERVZJQ0VfRElTQ09OTkVDVEVECQlCSVQoNykKKyNk ZWZpbmUgVkdBX0RFVklDRV9DT05ORUNURUQJCUJJVCg2KQorI2RlZmluZSBWR0FfQ0xFQVJfSVJR CQkJQklUKDQpCisjZGVmaW5lIFZHQV9UUkFOU19ET05FCQkJQklUKDApCisjZGVmaW5lIFZHQV9S WEZfU1RBVFVTCQkJMHgzMAorI2RlZmluZSBWR0FfUlhGX0NPVU5UX1NISUZUCQkyCisjZGVmaW5l IFZHQV9SWEZfQ09VTlRfTUFTSwkJR0VOTUFTSyg3LCAyKQorI2RlZmluZSBWR0FfQVVUT19ERVRF Q1RfUEFSQQkJMHgzNAorI2RlZmluZSBWR0FfQVVUT19ERVRFQ1RfU0VMCQkweDM4CisjZGVmaW5l IFZHQV9ERVRFQ1RfU0VMX0hBU19ERVZJQ0UJQklUKDEpCisjZGVmaW5lIFZHQV9ERVRFQ1RfU0VM X05PX0RFVklDRQlCSVQoMCkKKworI2VuZGlmIC8qIF9fWlhfVkdBX1JFR1NfSF9fICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3ZvdS5jIGIvZHJpdmVycy9ncHUvZHJtL3p0 ZS96eF92b3UuYwppbmRleCAyYTJkOTBiZDk0MjUuLmNjNWJkZmM1M2U4ZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4 X3ZvdS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIu aD4KICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogCisjaW5jbHVkZSAienhfY29tbW9uX3JlZ3MuaCIK ICNpbmNsdWRlICJ6eF9kcm1fZHJ2LmgiCiAjaW5jbHVkZSAienhfcGxhbmUuaCIKICNpbmNsdWRl ICJ6eF92b3UuaCIKQEAgLTEyMiw2ICsxMjMsOCBAQCBzdHJ1Y3QgenhfY3J0YyB7CiAJc3RydWN0 IGRybV9wbGFuZSAqcHJpbWFyeTsKIAlzdHJ1Y3Qgenhfdm91X2h3ICp2b3U7CiAJdm9pZCBfX2lv bWVtICpjaG5yZWc7CisJdm9pZCBfX2lvbWVtICpjaG5jc2M7CisJdm9pZCBfX2lvbWVtICpkaXRo ZXI7CiAJY29uc3Qgc3RydWN0IHp4X2NydGNfcmVncyAqcmVnczsKIAljb25zdCBzdHJ1Y3Qgenhf Y3J0Y19iaXRzICpiaXRzOwogCWVudW0gdm91X2Nobl90eXBlIGNobl90eXBlOwpAQCAtMjA0LDYg KzIwNywxMSBAQCBzdHJ1Y3Qgdm91X2luZiB7CiAJCS5jbG9ja3NfZW5fYml0cyA9IEJJVCgxNSks CiAJCS5jbG9ja3Nfc2VsX2JpdHMgPSBCSVQoMTEpIHwgQklUKDApLAogCX0sCisJW1ZPVV9WR0Fd ID0geworCQkuZGF0YV9zZWwgPSBWT1VfUkdCXzg4OCwKKwkJLmNsb2Nrc19lbl9iaXRzID0gQklU KDEpLAorCQkuY2xvY2tzX3NlbF9iaXRzID0gQklUKDEwKSwKKwl9LAogfTsKIAogc3RhdGljIGlu bGluZSBzdHJ1Y3Qgenhfdm91X2h3ICpjcnRjX3RvX3ZvdShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CkBAIC0yMjcsOSArMjM1LDI2IEBAIHZvaWQgdm91X2luZl9lbmFibGUoZW51bSB2b3VfaW5mX2lk IGlkLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJc3RydWN0IHp4X2NydGMgKnpjcnRjID0gdG9f enhfY3J0YyhjcnRjKTsKIAlzdHJ1Y3Qgenhfdm91X2h3ICp2b3UgPSB6Y3J0Yy0+dm91OwogCXN0 cnVjdCB2b3VfaW5mICppbmYgPSAmdm91X2luZnNbaWRdOworCXZvaWQgX19pb21lbSAqZGl0aGVy ID0gemNydGMtPmRpdGhlcjsKKwl2b2lkIF9faW9tZW0gKmNzYyA9IHpjcnRjLT5jaG5jc2M7CiAJ Ym9vbCBpc19tYWluID0gemNydGMtPmNobl90eXBlID09IFZPVV9DSE5fTUFJTjsKIAl1MzIgZGF0 YV9zZWxfc2hpZnQgPSBpZCA8PCAxOwogCisJaWYgKGluZi0+ZGF0YV9zZWwgIT0gVk9VX1lVVjQ0 NCkgeworCQkvKiBFbmFibGUgY2hhbm5lbCBDU0MgZm9yIFJHQiBvdXRwdXQgKi8KKwkJenhfd3Jp dGVsX21hc2soY3NjICsgQ1NDX0NUUkwwLCBDU0NfQ09WX01PREVfTUFTSywKKwkJCSAgICAgICBD U0NfQlQ3MDlfSU1BR0VfWUNCQ1IyUkdCIDw8IENTQ19DT1ZfTU9ERV9TSElGVCk7CisJCXp4X3dy aXRlbF9tYXNrKGNzYyArIENTQ19DVFJMMCwgQ1NDX1dPUktfRU5BQkxFLAorCQkJICAgICAgIENT Q19XT1JLX0VOQUJMRSk7CisKKwkJLyogQnlwYXNzIERpdGhlciBibG9jayBmb3IgUkdCIG91dHB1 dCAqLworCQl6eF93cml0ZWxfbWFzayhkaXRoZXIgKyBPU0RfRElUSEVSX0NUUkwwLCBESVRIRVJf QllTUEFTUywKKwkJCSAgICAgICBESVRIRVJfQllTUEFTUyk7CisJfSBlbHNlIHsKKwkJenhfd3Jp dGVsX21hc2soY3NjICsgQ1NDX0NUUkwwLCBDU0NfV09SS19FTkFCTEUsIDApOworCQl6eF93cml0 ZWxfbWFzayhkaXRoZXIgKyBPU0RfRElUSEVSX0NUUkwwLCBESVRIRVJfQllTUEFTUywgMCk7CisJ fQorCiAJLyogU2VsZWN0IGRhdGEgZm9ybWF0ICovCiAJenhfd3JpdGVsX21hc2sodm91LT52b3Vj dGwgKyBWT1VfSU5GX0RBVEFfU0VMLCAweDMgPDwgZGF0YV9zZWxfc2hpZnQsCiAJCSAgICAgICBp bmYtPmRhdGFfc2VsIDw8IGRhdGFfc2VsX3NoaWZ0KTsKQEAgLTUwMiwyMCArNTI3LDI0IEBAIHN0 YXRpYyBpbnQgenhfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB6eF92 b3VfaHcgKnZvdSwKIAogCWlmIChjaG5fdHlwZSA9PSBWT1VfQ0hOX01BSU4pIHsKIAkJenBsYW5l LT5sYXllciA9IHZvdS0+b3NkICsgTUFJTl9HTF9PRkZTRVQ7Ci0JCXpwbGFuZS0+Y3NjID0gdm91 LT5vc2QgKyBNQUlOX0NTQ19PRkZTRVQ7CisJCXpwbGFuZS0+Y3NjID0gdm91LT5vc2QgKyBNQUlO X0dMX0NTQ19PRkZTRVQ7CiAJCXpwbGFuZS0+aGJzYyA9IHZvdS0+b3NkICsgTUFJTl9IQlNDX09G RlNFVDsKIAkJenBsYW5lLT5yc3ogPSB2b3UtPm90ZnBwdSArIE1BSU5fUlNaX09GRlNFVDsKIAkJ enBsYW5lLT5iaXRzID0gJnp4X2dsX2JpdHNbMF07CiAJCXpjcnRjLT5jaG5yZWcgPSB2b3UtPm9z ZCArIE9TRF9NQUlOX0NITjsKKwkJemNydGMtPmNobmNzYyA9IHZvdS0+b3NkICsgTUFJTl9DSE5f Q1NDX09GRlNFVDsKKwkJemNydGMtPmRpdGhlciA9IHZvdS0+b3NkICsgTUFJTl9ESVRIRVJfT0ZG U0VUOwogCQl6Y3J0Yy0+cmVncyA9ICZtYWluX2NydGNfcmVnczsKIAkJemNydGMtPmJpdHMgPSAm bWFpbl9jcnRjX2JpdHM7CiAJfSBlbHNlIHsKIAkJenBsYW5lLT5sYXllciA9IHZvdS0+b3NkICsg QVVYX0dMX09GRlNFVDsKLQkJenBsYW5lLT5jc2MgPSB2b3UtPm9zZCArIEFVWF9DU0NfT0ZGU0VU OworCQl6cGxhbmUtPmNzYyA9IHZvdS0+b3NkICsgQVVYX0dMX0NTQ19PRkZTRVQ7CiAJCXpwbGFu ZS0+aGJzYyA9IHZvdS0+b3NkICsgQVVYX0hCU0NfT0ZGU0VUOwogCQl6cGxhbmUtPnJzeiA9IHZv dS0+b3RmcHB1ICsgQVVYX1JTWl9PRkZTRVQ7CiAJCXpwbGFuZS0+Yml0cyA9ICZ6eF9nbF9iaXRz WzFdOwogCQl6Y3J0Yy0+Y2hucmVnID0gdm91LT5vc2QgKyBPU0RfQVVYX0NITjsKKwkJemNydGMt PmNobmNzYyA9IHZvdS0+b3NkICsgQVVYX0NITl9DU0NfT0ZGU0VUOworCQl6Y3J0Yy0+ZGl0aGVy ID0gdm91LT5vc2QgKyBBVVhfRElUSEVSX09GRlNFVDsKIAkJemNydGMtPnJlZ3MgPSAmYXV4X2Ny dGNfcmVnczsKIAkJemNydGMtPmJpdHMgPSAmYXV4X2NydGNfYml0czsKIAl9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3ZvdV9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0venRl L3p4X3ZvdV9yZWdzLmgKaW5kZXggYzA2NmVmMTIzNDM0Li41YTIxODM1MWI0OTcgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfdm91X3JlZ3MuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0venRlL3p4X3ZvdV9yZWdzLmgKQEAgLTEzLDEzICsxMywxNyBAQAogCiAvKiBTdWItbW9kdWxl IG9mZnNldCAqLwogI2RlZmluZSBNQUlOX0dMX09GRlNFVAkJCTB4MTMwCi0jZGVmaW5lIE1BSU5f Q1NDX09GRlNFVAkJCTB4NTgwCisjZGVmaW5lIE1BSU5fR0xfQ1NDX09GRlNFVAkJMHg1ODAKKyNk ZWZpbmUgTUFJTl9DSE5fQ1NDX09GRlNFVAkJMHg2YzAKICNkZWZpbmUgTUFJTl9IQlNDX09GRlNF VAkJMHg4MjAKKyNkZWZpbmUgTUFJTl9ESVRIRVJfT0ZGU0VUCQkweDk2MAogI2RlZmluZSBNQUlO X1JTWl9PRkZTRVQJCQkweDYwMCAvKiBPVEZQUFUgc3ViLW1vZHVsZSAqLwogCiAjZGVmaW5lIEFV WF9HTF9PRkZTRVQJCQkweDIwMAotI2RlZmluZSBBVVhfQ1NDX09GRlNFVAkJCTB4NWQwCisjZGVm aW5lIEFVWF9HTF9DU0NfT0ZGU0VUCQkweDVkMAorI2RlZmluZSBBVVhfQ0hOX0NTQ19PRkZTRVQJ CTB4NzEwCiAjZGVmaW5lIEFVWF9IQlNDX09GRlNFVAkJCTB4ODYwCisjZGVmaW5lIEFVWF9ESVRI RVJfT0ZGU0VUCQkweDk3MAogI2RlZmluZSBBVVhfUlNaX09GRlNFVAkJCTB4ODAwCiAKICNkZWZp bmUgT1NEX1ZMMF9PRkZTRVQJCQkweDA0MApAQCAtNzgsNiArODIsMTAgQEAKICNkZWZpbmUgQ0hO X0lOVEVSTEFDRV9CVUZfQ1RSTAkJMHgyNAogI2RlZmluZSBDSE5fSU5URVJMQUNFX0VOCQlCSVQo MikKIAorLyogRGl0aGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBPU0RfRElUSEVSX0NUUkwwCQkw eDAwCisjZGVmaW5lIERJVEhFUl9CWVNQQVNTCQkJQklUKDMxKQorCiAvKiBUSU1JTkdfQ1RSTCBy ZWdpc3RlcnMgKi8KICNkZWZpbmUgVElNSU5HX1RDX0VOQUJMRQkJMHgwNAogI2RlZmluZSBBVVhf VENfRU4JCQlCSVQoMSkKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK