From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: [PATCH v4] drm/i915 : Added Programming of the MOCS Date: Wed, 17 Jun 2015 16:19:22 +0100 Message-ID: <1434554362-22384-1-git-send-email-peter.antoine@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 77D4D6EAC6 for ; Wed, 17 Jun 2015 08:19:33 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBjaGFuZ2UgYWRkcyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGhlIE1PQ1MgcmVnaXN0ZXJzIHRv IHRoZSBnZW4gOSsKcGxhdGZvcm1zLiBUaGlzIGNoYW5nZSBzZXQgcHJvZ3JhbXMgdGhlIE1PQ1Mg cmVnaXN0ZXIgdmFsdWVzIHRvIGEgc2V0Cm9mIHZhbHVlcyB0aGF0IGFyZSBkZWZpbmVkIHRvIGJl IG9wdGltYWwuCgpJdCBjcmVhdGVzIGEgZml4ZWQgcmVnaXN0ZXIgc2V0IHRoYXQgaXMgcHJvZ3Jh bW1lZCBhY3Jvc3MgdGhlIGRpZmZlcmVudAplbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2 ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQptYWluIFJDUyBjb250ZXh0IG9u bHkgaG9sZHMgdGhlIHJlZ2lzdGVycyBmb3IgaXRzZWxmIGFuZCB0aGUgc2hhcmVkCkwzIHZhbHVl cy4gQnkgdHJ5aW5nIHRvIGtlZXAgdGhlIHJlZ2lzdGVycyBjb25zaXN0ZW50IGFjcm9zcyB0aGUK ZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5nIGZvciB0aGUg cmVnaXN0ZXJzCmNvbnNpc3RlbnQuCgp2MjoKLSdzdGF0aWMgY29uc3QnIGZvciBwcml2YXRlIGRh dGEgc3RydWN0dXJlcyBhbmQgc3R5bGUgY2hhbmdlcy4oTWF0dCBUdXJuZXIpCnYzOgotIE1ha2Ug dGhlIHRhYmxlcyAic2xpZ2h0bHkiIG1vcmUgcmVhZGFibGUuIChEYW1pZW4gTGVzcGlhdSkKLSBV cGRhdGVkIHRhYmxlcyBmaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KdjQ6Ci0gQ29kZSBmb3Jt YXR0aW5nLiAoQ2hyaXMgV2lsc29uKQotIHJlLXByaXZhdGlzZWQgbW9jcyBjb2RlLiAoRGFuaWVs IFZldHRlcikKClNpZ25lZC1vZmYtYnk6IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50 ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICB8ICAgMSArCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMgIHwgIDEwICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuaCAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jIHwgMzczICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9tb2NzLmggfCAgNjQgKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA0NjAgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX21vY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX21vY3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggYjdkZGY0OC4uYzc4MWUx OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTM1LDYgKzM1LDcgQEAgaTkxNS15ICs9IGk5MTVf Y21kX3BhcnNlci5vIFwKIAkgIGk5MTVfaXJxLm8gXAogCSAgaTkxNV90cmFjZV9wb2ludHMubyBc CiAJICBpbnRlbF9scmMubyBcCisJICBpbnRlbF9tb2NzLm8gXAogCSAgaW50ZWxfcmluZ2J1ZmZl ci5vIFwKIAkgIGludGVsX3VuY29yZS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDcy MTMyMjQuLjNhNDM1YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVn LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNzgyOSw0ICs3ODI5 LDEzIEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBfUEFMRVRURV9BIChk ZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9fb2Zmc2V0ICsgMHhhMDAwKQogI2RlZmluZSBfUEFM RVRURV9CIChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9fb2Zmc2V0ICsgMHhhODAwKQogCisv KiBNT0NTIChNZW1vcnkgT2JqZWN0IENvbnRyb2wgU3RhdGUpIHJlZ2lzdGVycyAqLworI2RlZmlu ZSBHRU45X0xOQ0ZDTU9DUzAJCSgweEIwMjApCS8qIEwzIENhY2hlIENvbnRyb2wgYmFzZSAqLwor CisjZGVmaW5lIEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBiYXNl IHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgwX01PQ1NfMAkoMHhjOTAwKQkvKiBNZWRpYSAw IE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5lIEdFTjlfTUZYMV9NT0NTXzAJKDB4Y0EwMCkJ LyogTWVkaWEgMSBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X1ZFQk9YX01PQ1Nf MAkoMHhjQjAwKQkvKiBWaWRlbyBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X0JM VF9NT0NTXzAJCSgweGNjMDApCS8qIEJsaXR0ZXIgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKwogI2Vu ZGlmIC8qIF9JOTE1X1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCA5ZjU0 ODVkLi43M2I5MTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtMTM1LDYgKzEzNSw3 IEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNp bmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX21vY3MuaCIKIAogI2RlZmluZSBH RU45X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIyICogUEFHRV9TSVpFKQogI2RlZmluZSBHRU44 X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIwICogUEFHRV9TSVpFKQpAQCAtNzk2LDcgKzc5Nyw3 IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3ByZXBhcmUoc3RydWN0IGludGVsX3JpbmdidWZm ZXIgKnJpbmdidWYsCiAgKgogICogUmV0dXJuOiBub24temVybyBpZiB0aGUgcmluZ2J1ZmZlciBp cyBub3QgcmVhZHkgdG8gYmUgd3JpdHRlbiB0by4KICAqLwotc3RhdGljIGludCBpbnRlbF9sb2dp Y2FsX3JpbmdfYmVnaW4oc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCitpbnQgaW50 ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAog CQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3JkcykKIHsKIAlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gcmluZ2J1Zi0+cmluZzsKQEAgLTEzNzksNiAr MTM4MCwxMyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIEZh aWxpbmcgdG8gcHJvZ3JhbSB0aGUgTU9DUyBpcyBub24tZmF0YWwuVGhlIHN5c3RlbSB3aWxsIG5v dAorCSAqIHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBTbyBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5k IGNhcnJ5IG9uLgorCSAqLworCWlmIChnZW45X3Byb2dyYW1fbW9jcyhyaW5nLCBjdHgpICE9IDAp CisJCURSTV9FUlJPUigiTU9DUyBmYWlsZWQgdG8gcHJvZ3JhbTogZXhwZWN0IHBlcmZvcm1hbmNl IGlzc3Vlcy4iKTsKKwogCXJldHVybiBpbnRlbF9scl9jb250ZXh0X3JlbmRlcl9zdGF0ZV9pbml0 KHJpbmcsIGN0eCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKaW5kZXggMDRkM2E2ZC4u ZGJiZDZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKQEAgLTQ0LDYgKzQ0LDEwIEBAIGlu dCBpbnRlbF9sb2dpY2FsX3JpbmdzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIGlu dCBsb2dpY2FsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAq cmluZ2J1ZiwKIAkJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpOworCitpbnQgaW50ZWxf bG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAorCQkJ CSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3Jkcyk7CisKIC8qKgog ICogaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UoKSAtIGFkdmFuY2UgdGhlIHJpbmdidWZmZXIg dGFpbAogICogQHJpbmdidWY6IFJpbmdidWZmZXIgdG8gYWR2YW5jZS4KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX21vY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA5ZTY3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jCkBAIC0w LDAgKzEsMzczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczogKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcg RlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOgorICogICAgUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+CisgKi8K KworI2luY2x1ZGUgImludGVsX21vY3MuaCIKKyNpbmNsdWRlICJpbnRlbF9scmMuaCIKKyNpbmNs dWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCisKKy8qIHN0cnVjdHVyZXMgcmVxdWlyZWQgKi8KK3N0 cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IHsKKwl1MzIJY29udHJvbF92YWx1ZTsKKwl1MTYJbDNj Y192YWx1ZTsKK307CisKK3N0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlIHsKKwl1MzIJCQkJCXNp emU7CisJY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkJKnRhYmxlOworfTsKKworLyog RGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLworI2Rl ZmluZQlNT0NTX0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8IDApCisjZGVmaW5lCU1PQ1Nf VEdUX0NBQ0hFKHZhbHVlKQkJKHZhbHVlIDw8IDIpCisjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJ CSh2YWx1ZSA8PCA0KQorI2RlZmluZQlNT0NTX0FPTSh2YWx1ZSkJCQkodmFsdWUgPDwgNikKKyNk ZWZpbmUJTU9DU19MRUNDX0VTQyh2YWx1ZSkJCSh2YWx1ZSA8PCA3KQorI2RlZmluZQlNT0NTX0xF Q0NfU0NDKHZhbHVlKQkJKHZhbHVlIDw8IDgpCisjZGVmaW5lCU1PQ19QRk0odmFsdWUpCQkJKHZh bHVlIDw8IDExKQorI2RlZmluZQlNT0NTX1NDRih2YWx1ZSkJCQkodmFsdWUgPDwgMTQpCisKKy8q IERlZmluZXMgZm9yIHRoZSB0YWJsZXMgKExOQ0ZNT0NTMCAtIExOQ0ZNT0NTMzEpIC0gdHdvIGVu dHJpZXMgcGVyIHdvcmQgKi8KKyNkZWZpbmUJTU9DU19FU0ModmFsdWUpCQkJKHZhbHVlIDw8IDAp CisjZGVmaW5lCU1PQ1NfU0NDKHZhbHVlKQkJCSh2YWx1ZSA8PCAxKQorI2RlZmluZQlNT0NTX0wz X0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8IDQpCisKKy8qIEhlbHBlciBkZWZpbmVzICov CisjZGVmaW5lIEdFTjlfTlVNX01PQ1NfUklOR1MJKDUpCS8qIE51bWJlciBvZiBtb2NzIGVuZ2lu ZXMgdG8gcHJvZ3JhbSAqLworI2RlZmluZSBHRU45X05VTV9NT0NTX0VOVFJJRVMJKDYzKQkvKiA2 MyBvdXQgb2YgNjQgLSA2NCBpcyByc3ZyZCAqLworCisvKiBFRFJBTSBDYWNoaW5nIG9wdGlvbnMg Ki8KKyNkZWZpbmUgRURSQU1fUEFHRVRBQkxFCQkoMCkKKyNkZWZpbmUgRURSQU1fVUMJCSgxKQor I2RlZmluZSBFRFJBTV9SRVNFUlZFRAkJKDIpCisjZGVmaW5lIEVEUkFNX1dCCQkoMykKKworLyog TDMgQ2FjaGluZyBvcHRpb25zICovCisjZGVmaW5lIEwzX0RJUkVDVAkJKDApCisjZGVmaW5lIEwz X1VDCQkJKDEpCisjZGVmaW5lIEwzX1JFU0VSVkVECQkoMikKKyNkZWZpbmUgTDNfV0IJCQkoMykK KworLyogdGFyZ2V0IGNhY2hlICovCisjZGVmaW5lIEVMTEMJCQkoMCkKKyNkZWZpbmUgTExDCQkJ KDEpCisjZGVmaW5lIExMQ19FTExDCQkoMikKKworLyoKKyAqIE1PQ1MgdGFibGVzCisgKgorICog VGhlc2UgYXJlIHRoZSBNT0NTIHRhYmxlcyB0aGF0IGFyZSBwcm9ncmFtbWVkIGFjcm9zcyBhbGwg dGhlIHJpbmdzLgorICogVGhlIGNvbnRyb2wgdmFsdWUgaXMgcHJvZ3JhbW1lZCB0byBhbGwgdGhl IHJpbmdzIHRoYXQgc3VwcG9ydCB0aGUKKyAqIE1PQ1MgcmVnaXN0ZXJzLiBXaGlsZSB0aGUgbDNj Y192YWx1ZXMgYXJlIG9ubHkgcHJvZ3JhbW1lZCB0byB0aGUKKyAqIExOQ0ZDTU9DUzAgLSBMTkNG Q01PQ1MzMiByZWdpc3RlcnMuCisgKgorICogTk9URTogVGhlc2UgdGFibGVzIE1VU1Qgc3RhcnQg d2l0aCBiZWluZyB1bmNhY2hlZCBhbmQgdGhlIGxlbmd0aCBNVVNUIGJlCisgKiAgICAgICBsZXNz IHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGhh cmR3YXJlLgorICovCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgc2t5bGFrZV9t b2NzX3RhYmxlW10gPSB7CisJIC8qIHsweDAwMDAwMDA5LCAweDAwMTB9ICovCisJeyhNT0NTX0NB Q0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NT X0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8 CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDNiLCAw eDAwMzB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNI RShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19F U0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShN T0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0s CisJIC8qIHsweDAwMDAwMDM5LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJB TV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NT X0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkg fCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19D QUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICovCisJeyhN T0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKKwkJTU9D U19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAorCSAvKiB7MHgwMDAwMDAxNywg MHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FD SEUoTExDKSB8CisJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygw KSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKKwkg LyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VD KSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8CisJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9N KDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1P Q1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hF QUJJTElUWShMM19VQykpfSwKKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KKwl7KE1PQ1Nf Q0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAorCQlNT0NTX0xS VU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJ CU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCisJIC8qIHsweDAwMDAwMDM3LCAweDAw MTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShM TEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwg TU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAorCSAvKiB7 MHgwMDAwMDAzYiwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwg TU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkg fCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19T Q0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklM SVRZKEwzX1VDKSl9LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IGJy b3h0b25fbW9jc190YWJsZVtdID0geworCSAvKiB7MHgwMDAwMDAwMSwgMHgwMDEwfSAqLworCXso TU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoRUxMQykgfAorCQlN T0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDA1 LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9D QUNIRShMTEMpIHwKKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVND KDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9D U19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAor CSAvKiB7MHgwMDAwMDAwNSwgMHgwMDMwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1f VUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8CisJCU1PQ1NfTFJVTSgwKSB8IE1PQ1NfQU9NKDAp IHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1PQ1Nf U0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJ TElUWShMM19XQikpfSwKKwkgLyogezB4MDAwMDAwMTcsIDB4MDAzMH0gKi8KKwl7KE1PQ1NfQ0FD SEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAorCQlNT0NTX0xSVU0o MSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1P Q19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwg TU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCisJIC8qIHsweDAwMDAwMDE3LCAweDAwMTB9 ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMp IHwKKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAorCSAvKiB7MHgw MDAwMDAxOSwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9D U19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBN T0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZ KEwzX1VDKSl9LAorCSAvKiB7MHgwMDAwMDAzNywgMHgwMDMwfSAqLworCXsoTU9DU19DQUNIRUFC SUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8CisJCU1PQ1NfTFJVTSgzKSB8 IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BG TSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwKKwkgLyogezB4MDAwMDAwMzcsIDB4MDAxMH0gKi8K Kwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAor CQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1ND QygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAw MDNiLCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RH VF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSks CisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNf VUMpKX0sCit9OworCisvKioKKyAqIGdldF9tb2NzX3NldHRpbmdzCisgKgorICogVGhpcyBmdW5j dGlvbiB3aWxsIHJldHVybiB0aGUgdmFsdWVzIG9mIHRoZSBNT0NTIHRhYmxlIHRoYXQgbmVlZHMg dG8KKyAqIGJlIHByb2dyYW1tZWQgZm9yIHRoZSBwbGF0Zm9ybS4gSXQgd2lsbCByZXR1cm4gdGhl IHZhbHVlcyB0aGF0IG5lZWQKKyAqIHRvIGJlIHByb2dyYW1tZWQgYW5kIGlmIHRoZXkgbmVlZCB0 byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWVzIGlzIGZhbHNlIHRo ZW4gdGhlIHJlZ2lzdGVycyBkbyBub3QgbmVlZCBwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIGJv b2wgZ2V0X21vY3Nfc2V0dGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0 cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkgeworCWJvb2wJcmVzdWx0ID0gZmFsc2U7 CisKKwlpZiAoSVNfU0tZTEFLRShkZXYpKSB7CisJCXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUo c2t5bGFrZV9tb2NzX3RhYmxlKTsKKwkJdGFibGUtPnRhYmxlID0gc2t5bGFrZV9tb2NzX3RhYmxl OworCQlyZXN1bHQgPSB0cnVlOworCX0gZWxzZSBpZiAoSVNfQlJPWFRPTihkZXYpKSB7CisJCXRh YmxlLT5zaXplICA9IEFSUkFZX1NJWkUoYnJveHRvbl9tb2NzX3RhYmxlKTsKKwkJdGFibGUtPnRh YmxlID0gYnJveHRvbl9tb2NzX3RhYmxlOworCQlyZXN1bHQgPSB0cnVlOworCX0gZWxzZSB7CisJ CS8qIFBsYXRmb3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMgbm90ICovCisJ CVdBUk5fT04oSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSk7CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KKworLyoqCisgKiBlbWl0X21vY3NfY29udHJvbF90YWJsZSgpIC0gZW1pdCB0aGUgbW9j cyBjb250cm9sIHRhYmxlCisgKiBAcmluZ2J1ZjoJRFJNIGRldmljZS4KKyAqIEB0YWJsZToJVGhl IHZhbHVlcyB0byBwcm9ncmFtIGludG8gdGhlIGNvbnRyb2wgcmVncy4KKyAqIEByZWdfYmFzZToJ VGhlIGJhc2UgZm9yIHRoZSBFbmdpbmUgdGhhdCBuZWVkcyB0byBiZSBwcm9ncmFtbWVkLgorICoK KyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29t bWFuZCBmb3IgdGhlCisgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVz cy4KKyAqCisgKiBSZXR1cm46IE5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGVtaXRfbW9jc19j b250cm9sX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAorCQkJCSAgICBz dHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUsCisJCQkJICAgIHUzMiByZWdfYmFzZSkK K3sKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5n YnVmLAorCQkJTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9OVU1fTU9DU19FTlRSSUVTKSk7CisK Kwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZS0+c2l6ZTsgaW5kZXgrKykgeworCQlpbnRl bF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCByZWdfYmFzZSArIChpbmRleCAqIDQpKTsKKwkJ aW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKKwkJCQkJdGFibGUtPnRhYmxlW2luZGV4 XS5jb250cm9sX3ZhbHVlKTsKKwl9CisKKwkvKgorCSAqIE9rLCBub3cgc2V0IHRoZSB1bnVzZWQg ZW50cmllcyB0byB1bmNhY2hlZC4gVGhlc2UgZW50cmllcyBhcmUKKwkgKiBvZmZpY2lhbGx5IHVu ZGVmaW5lZCBhbmQgbm8gY29udGFjdCBpcyBnaXZlbiBmb3IgdGhlIGNvbnRlbnRzIGFuZAorCSAq IHNldHRpbmdzIGlzIGdpdmVuIGZvciB0aGVzZSBlbnRyaWVzLgorCSAqCisJICogRW50cnkgMCBp biB0aGUgdGFibGUgaXMgdW5jYWNoZWQgLSBzbyB3ZSBhcmUganVzdCB3cml0dGVuIHRoYXQKKwkg KiB2YWx1ZSB0byBhbGwgdGhlIHVzZWQgZW50cmllcy4KKwkgKi8KKwlmb3IgKDsgaW5kZXggPCBH RU45X05VTV9NT0NTX0VOVFJJRVM7IGluZGV4KyspIHsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgcmVnX2Jhc2UgKyAoaW5kZXggKiA0KSk7CisJCWludGVsX2xvZ2ljYWxfcmlu Z19lbWl0KHJpbmdidWYsIHRhYmxlLT50YWJsZVswXS5jb250cm9sX3ZhbHVlKTsKKwl9CisKKwlp bnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBNSV9OT09QKTsKK30KKworLyoqCisgKiBl bWl0X21vY3NfbDNjY190YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCisgKiBA cmluZ2J1ZjoJRFJNIGRldmljZS4KKyAqIEB0YWJsZToJVGhlIHZhbHVlcyB0byBwcm9ncmFtIGlu dG8gdGhlIGNvbnRyb2wgcmVncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBh IE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9yIHRoZQorICogZ2l2ZW4gdGFibGUgc3Rh cnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuIFRoaXMgcmVnaXN0ZXIgc2V0IGlzICBwcm9ncmFt bWVkCisgKiBpbiBwYWlycy4KKyAqCisgKiBSZXR1cm46IE5vdGhpbmcuCisgKi8KK3N0YXRpYyB2 b2lkIGVtaXRfbW9jc19sM2NjX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVm LAorCQkJIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkgeworCXVuc2lnbmVkIGlu dCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsdWU7CisJdTMyIGZpbGxlciA9ICh0 YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0YWJsZS0+dGFibGVb MF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCisJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwKKwkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklF UyAvIDIpKTsKKworCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IHRhYmxlLT5zaXplIC8gMjsg aSsrLCBjb3VudCArPSAyKSB7CisJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192 YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0YWJsZS0+dGFibGVbY291bnQgKyAxXS5sM2NjX3ZhbHVl ICYgMHhmZmZmKSA8PCAxNik7CisKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg R0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsIHZhbHVlKTsKKwl9CisKKwlpZiAodGFibGUtPnNpemUgJiAweDAxKSB7CisJCS8qIE9k ZCB0YWJsZSBzaXplIC0gMSBsZWZ0IG92ZXIgKi8KKwkJdmFsdWUgPSAodGFibGUtPnRhYmxlW2Nv dW50XS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8CisJCQkoKHRhYmxlLT50YWJsZVswXS5sM2NjX3Zh bHVlICYgMHhmZmZmKSA8PCAxNik7CisJfSBlbHNlCisJCXZhbHVlID0gZmlsbGVyOworCisJLyoK KwkgKiBOb3cgc2V0IHRoZSByZXN0IG9mIHRoZSB0YWJsZSB0byB1bmNhY2hlZCAtIHVzZSBlbnRy eSAwIGFzIHRoaXMKKwkgKiB3aWxsIGJlIHVuY2FjaGVkLiBMZWF2ZSB0aGUgbGFzdCBwYWlyIGFz IGluaXRpYWxpc2VkIGFzIHRoZXkgYXJlCisJICogcmVzZXJ2ZWQgYnkgdGhlIGhhcmR3YXJlLgor CSAqLworCWZvciAoOyBpIDwgKEdFTjlfTlVNX01PQ1NfRU5UUklFUyAvIDIpIC0gMTsgaSsrKSB7 CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIChp ICogNCkpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7CisKKwkJ dmFsdWUgPSBmaWxsZXI7CisJfQorCisJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg TUlfTk9PUCk7Cit9CisKKy8qCisgKiBnZW45X3Byb2dyYW1fbW9jcygpIC0gcHJvZ3JhbSB0aGUg TU9DUyByZWdpc3Rlci4KKyAqCisgKiByaW5nOglUaGUgcmluZyB0aGF0IHRoZSBwcm9ncmFtbWlu ZyBiYXRjaCB3aWxsIGJlIHJ1biBpbi4KKyAqIGN0eDoJCVRoZSBpbnRlbF9jb250ZXh0IHRvIGJl IHVzZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaCBidWZmZXIgd2l0 aCB0aGUgdmFsdWVzIHJlcXVpcmVkIGZvcgorICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1MgcmVnaXN0 ZXIgdmFsdWVzIGZvciBhbGwgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQKKyAqIHJpbmdzLgorICoK KyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUgcGFydGlhbGx5IHN0b3JlZCBpbiB0aGUgUkNTIGNvbnRl eHQsIHNvIHRoZXkgYXJlCisgKiBlbWl0dGVkIGF0IHRoZSBzYW1lIHRpbWUgc28gdGhhdCB3aGVu IGEgY29udGV4dCBpcyBjcmVhdGVkIHRoZXNlIHJlZ2lzdGVycworICogYXJlIHNldCB1cC4gVGhl c2UgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgZW1pdHRlZCBpbnRvIHRoZSBzdGFydCBvZiB0aGUKKyAq IGNvbnRleHQgYXMgc2V0dGluZyB0aGUgRUxTUCB3aWxsIHJlLWluaXQgc29tZSBvZiB0aGVzZSBy ZWdpc3RlcnMgYmFjaworICogdG8gdGhlIGh3IHZhbHVlcy4KKyAqCisgKiBSZXR1cm46IDAgb24g c3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0dXMuCisgKi8KK2ludCBnZW45X3Byb2dy YW1fbW9jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJICBzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY3R4KQoreworCWludCByZXQgPSAwOworCisJc3RydWN0IGRybV9pOTE1X21vY3Nf dGFibGUgdDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OworCXN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWY7 CisKKwlpZiAoZ2V0X21vY3Nfc2V0dGluZ3MoZGV2LCAmdCkpIHsKKwkJdTMyIHRhYmxlX3NpemU7 CisKKwkJLyoKKwkJICogT0suIEZvciBlYWNoIHN1cHBvcnRlZCByaW5nOgorCQkgKiAgbnVtYmVy IG9mIG1vY3MgZW50cmllcyAqIDIgZHdvcmRzIGZvciBlYWNoIGNvbnRyb2xfdmFsdWUKKwkJICog IHBsdXMgbnVtYmVyIG9mIG1vY3MgZW50cmllcyAvMiBkd29yZHMgZm9yIGwzY2MgdmFsdWVzLgor CQkgKgorCQkgKiAgUGx1cyAxIGZvciB0aGUgbG9hZCBjb21tYW5kIGFuZCAxIGZvciB0aGUgTk9P UCBwZXIgcmluZworCQkgKiAgYW5kIHRoZSBsM2NjIHByb2dyYW1taW5nLgorCQkgKi8KKwkJdGFi bGVfc2l6ZSA9IEdFTjlfTlVNX01PQ1NfUklOR1MgKgorCQkJCSgoMiAqIEdFTjlfTlVNX01PQ1Nf RU5UUklFUykgKyAyKSArCisJCQkJR0VOOV9OVU1fTU9DU19FTlRSSUVTICsgMjsKKwkJcmV0ID0g aW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJpbmdidWYsIGN0eCwgdGFibGVfc2l6ZSk7CisJCWlm IChyZXQpIHsKKwkJCURSTV9ERUJVRygiaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luIGZhaWxlZCAl ZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBwcm9ncmFtIHRoZSBjb250 cm9sIHJlZ2lzdGVycyAqLworCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwg R0VOOV9HRlhfTU9DU18wKTsKKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQs IEdFTjlfTUZYMF9NT0NTXzApOworCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAm dCwgR0VOOV9NRlgxX01PQ1NfMCk7CisJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYs ICZ0LCBHRU45X1ZFQk9YX01PQ1NfMCk7CisJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdi dWYsICZ0LCBHRU45X0JMVF9NT0NTXzApOworCisJCS8qIG5vdyBwcm9ncmFtIHRoZSBsM2NjIHJl Z2lzdGVycyAqLworCQllbWl0X21vY3NfbDNjY190YWJsZShyaW5nYnVmLCAmdCk7CisKKwkJaW50 ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7CisKKwkJRFJNX0RFQlVHKCJNT0NTOiBU YWJsZSBzZXQgaW4gQ29udGV4dFxuIik7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHKCJNT0NTOiBU YWJsZSBOb3Qgc3VwcG9ydGVkIG9uIHBsYXRmb3JtXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZTI3ODBjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX21vY3MuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRv aW5lQGludGVsLmNvbT4KKyAqLworCisjaWZuZGVmIElOVEVMX01PQ1NfSAorI2RlZmluZSBJTlRF TF9NT0NTX0gKKworLyoqCisgKiBET0M6IE1lbW9yeSBPYmplY3RzIENvbnRyb2wgU3RhdGUgKE1P Q1MpCisgKgorICogTW90aXZhdGlvbjoKKyAqIEluIHByZXZpb3VzIEdlbnMgdGhlIE1PQ1Mgc2V0 dGluZ3Mgd2FzIGEgdmFsdWUgdGhhdCB3YXMgc2V0IGJ5IHVzZXIgbGFuZCBhcworICogcGFydCBv ZiB0aGUgYmF0Y2guIEluIEdlbjkgdGhpcyBoYXMgY2hhbmdlZCB0byBiZSBhIHNpbmdsZSB0YWJs ZSAocGVyIHJpbmcpCisgKiB0aGF0IGFsbCBiYXRjaGVzIG5vdyByZWZlcmVuY2UgYnkgaW5kZXgg aW5zdGVhZCBvZiBwcm9ncmFtbWluZyB0aGUgTU9DUworICogZGlyZWN0bHkuCisgKgorICogVGhl IG9uZSB3cmlua2xlIGluIHRoaXMgaXMgdGhhdCBvbmx5IFBBUlQgb2YgdGhlIE1PQ1MgdGFibGVz IGFyZSBpbmNsdWRlZAorICogaW4gY29udGV4dCAoVGhlIEdGWF9NT0NTXzAgLSBHRlhfTU9DU182 NCBhbmQgdGhlIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1MzMgorICogcmVnaXN0ZXJzKS4gVGhlIHJl c3QgYXJlIG5vdCAodGhlIHNldHRpbmdzIGZvciB0aGUgb3RoZXIgcmluZ3MpLgorICoKKyAqIFRo aXMgdGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3RlbSBzdGFydC11cCBiZWNhdXNlIHRoZSB3 YXkgdGhlIHRhYmxlCisgKiBpbnRlcmFjdHMgd2l0aCB0aGUgY29udGV4dHMgYW5kIHRoZSBHbW1M aWIgaW50ZXJmYWNlLgorICoKKyAqCisgKiBJbXBsZW1lbnRhdGlvbjoKKyAqCisgKiBUaGUgdGFi bGUgaXMgcHJvZ3JhbW1lZCBvbiBhIHBsYXRmb3JtIGJhc2lzIGZyb20gYSB0YWJsZSB0aGF0IGlz IGdlbmVyYXRlZAorICogZnJvbSB0aGUgb25lIHRoYXQgaGFzIGJlZW4gYWdyZWVkIGJ5IHRoZSBk aWZmZXJlbnQgcmVzcG9uc2libGUgcGFydGllcy4gVGhpcworICogdGFibGVzIChvbmUgcGVyIHN1 cHBvcnRlZCBwbGF0Zm9ybSkgaXMgZGVmaW5lZCBpbiBpbnRlbF9tb2NzLmMgYW5kIGlzCisgKiBw cm9ncmFtbWVkIGluIHRoZSBmaXJzdCBiYXRjaCBhZnRlciB0aGUgY29udGV4dCBpcyBsb2FkZWQg KHdpdGggdGhlIGhhcmR3YXJlCisgKiB3b3JrYXJvdW5kcykuIFRoaXMgd2lsbCB0aGVuIGxldCB0 aGUgdXN1YWwgY29udGV4dCBoYW5kbGluZyBrZWVwIHRoZSBNT0NTIGluCisgKiBzdGVwLgorICov CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKK2ludCBn ZW45X3Byb2dyYW1fbW9jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJc3RydWN0 IGludGVsX2NvbnRleHQgKmN0eCk7CisKKyNlbmRpZgorCi0tIAoxLjkuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK