From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: [PATCH v3] drm/i915 : Added Programming of the MOCS Date: Wed, 10 Jun 2015 09:12:16 +0100 Message-ID: <1433923936-20014-1-git-send-email-peter.antoine@intel.com> References: <1433442442-512-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 769406E2C9 for ; Wed, 10 Jun 2015 01:12:23 -0700 (PDT) In-Reply-To: <1433442442-512-1-git-send-email-peter.antoine@intel.com> 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 cGRhdGVkIHRhYmxlcyBmaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KCgpTaWduZWQtb2ZmLWJ5 OiBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmggICB8ICAgOSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgIHwg IDY4ICsrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYyB8IDI1MiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbW9jcy5oIHwgMTE5ICsrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2Vk LCA0NTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggYjdk ZGY0OC4uY2Q3YjkxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTM2LDcgKzM2LDggQEAgaTkx NS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXAogCSAg aW50ZWxfbHJjLm8gXAogCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKLQkgIGludGVsX3VuY29yZS5v CisJICBpbnRlbF91bmNvcmUubyBcCisJICBpbnRlbF9tb2NzLm8KIAogIyBhdXRvZ2VuZXJhdGVk IG51bGwgcmVuZGVyIHN0YXRlCiBpOTE1LXkgKz0gaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNi5vIFwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDcyMTMyMjQuLjNhNDM1YjUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaApAQCAtNzgyOSw0ICs3ODI5LDEzIEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJf d2VsbHMgewogI2RlZmluZSBfUEFMRVRURV9BIChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9f b2Zmc2V0ICsgMHhhMDAwKQogI2RlZmluZSBfUEFMRVRURV9CIChkZXZfcHJpdi0+aW5mby5kaXNw bGF5X21taW9fb2Zmc2V0ICsgMHhhODAwKQogCisvKiBNT0NTIChNZW1vcnkgT2JqZWN0IENvbnRy b2wgU3RhdGUpIHJlZ2lzdGVycyAqLworI2RlZmluZSBHRU45X0xOQ0ZDTU9DUzAJCSgweEIwMjAp CS8qIEwzIENhY2hlIENvbnRyb2wgYmFzZSAqLworCisjZGVmaW5lIEdFTjlfR0ZYX01PQ1NfMAkJ KDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9N RlgwX01PQ1NfMAkoMHhjOTAwKQkvKiBNZWRpYSAwIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVm aW5lIEdFTjlfTUZYMV9NT0NTXzAJKDB4Y0EwMCkJLyogTWVkaWEgMSBNT0NTIGJhc2UgcmVnaXN0 ZXIqLworI2RlZmluZSBHRU45X1ZFQk9YX01PQ1NfMAkoMHhjQjAwKQkvKiBWaWRlbyBNT0NTIGJh c2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X0JMVF9NT0NTXzAJCSgweGNjMDApCS8qIEJsaXR0 ZXIgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKwogI2VuZGlmIC8qIF9JOTE1X1JFR19IXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCA5ZjU0ODVkLi5jODc1NTY5IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYwpAQCAtMTM1LDYgKzEzNSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4K ICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1 ZGUgImludGVsX21vY3MuaCIKIAogI2RlZmluZSBHRU45X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUg KDIyICogUEFHRV9TSVpFKQogI2RlZmluZSBHRU44X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgKDIw ICogUEFHRV9TSVpFKQpAQCAtMTM3MCw2ICsxMzcxLDY3IEBAIG91dDoKIAlyZXR1cm4gcmV0Owog fQogCisvKgorICogaTkxNV9nZW1fcHJvZ3JhbV9tb2NzKCkgLSBwcm9ncmFtIHRoZSBNT0NTIHJl Z2lzdGVyLgorICoKKyAqIHJpbmc6CVRoZSByaW5nIHRoYXQgdGhlIHByb2dyYW1taW5nIGJhdGNo IHdpbGwgYmUgcnVuIGluLgorICogY3R4OgkJVGhlIGludGVsX2NvbnRleHQgdG8gYmUgdXNlZC4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW1pdCBhIGJhdGNoIGJ1ZmZlciB3aXRoIHRoZSB2 YWx1ZXMgcmVxdWlyZWQgZm9yCisgKiBwcm9ncmFtbWluZyB0aGUgTU9DUyByZWdpc3RlciB2YWx1 ZXMgZm9yIGFsbCB0aGUgY3VycmVubHkgc3VwcG9ydGVkCisgKiByaW5ncy4KKyAqCisgKiBSZXR1 cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0dXMuCisgKi8KK3N0YXRp YyBpbnQgaTkxNV9nZW1fcHJvZ3JhbV9tb2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs CisJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpCit7CisJaW50IHJldCA9IDA7CisKKwlz dHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBy aW5nLT5kZXY7CisJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBjdHgtPmVuZ2lu ZVtyaW5nLT5pZF0ucmluZ2J1ZjsKKworCWlmIChnZXRfbW9jc19zZXR0aW5ncyhkZXYsICZ0KSkg eworCQl1MzIgdGFibGVfc2l6ZTsKKworCQkvKgorCQkgKiBPSy4gRm9yIGVhY2ggc3VwcG9ydGVk IHJpbmc6CisJCSAqICB0YWJsZV9zaXplICogMiBkd29yZHMgZm9yIGVhY2ggY29udHJvbF92YWx1 ZQorCQkgKiAgcGx1cyB0YWJsZS8yIGR3b3JkcyBmb3IgbDNjYyB2YWx1ZXMuCisJCSAqCisJCSAq ICBQbHVzIDEgZm9yIHRoZSBsb2FkIGNvbW1hbmQgYW5kIDEgZm9yIHRoZSBOT09QIHBlciByaW5n CisJCSAqICBhbmQgdGhlIGwzY2MgcHJvZ3JhbW1pbmcuCisJCSAqLworCQl0YWJsZV9zaXplID0g R0VOOV9OVU1fTU9DU19SSU5HUyAqICgoMiAqIHQuc2l6ZSkgKyAyKSArCisJCQkJdC5zaXplICsg MjsKKwkJcmV0ID0gaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJpbmdidWYsIGN0eCwgdGFibGVf c2l6ZSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiaW50ZWxfbG9naWNhbF9yaW5nX2Jl Z2luIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBwcm9n cmFtIHRoZSBjb250cm9sIHJlZ2lzdGVycyAqLworCQllbWl0X21vY3NfY29udHJvbF90YWJsZShy aW5nYnVmLCAmdCwgR0VOOV9HRlhfTU9DU18wKTsKKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUo cmluZ2J1ZiwgJnQsIEdFTjlfTUZYMF9NT0NTXzApOworCQllbWl0X21vY3NfY29udHJvbF90YWJs ZShyaW5nYnVmLCAmdCwgR0VOOV9NRlgxX01PQ1NfMCk7CisJCWVtaXRfbW9jc19jb250cm9sX3Rh YmxlKHJpbmdidWYsICZ0LCBHRU45X1ZFQk9YX01PQ1NfMCk7CisJCWVtaXRfbW9jc19jb250cm9s X3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0JMVF9NT0NTXzApOworCisJCS8qIG5vdyBwcm9ncmFt IHRoZSBsM2NjIHJlZ2lzdGVycyAqLworCQllbWl0X21vY3NfbDNjY190YWJsZShyaW5nYnVmLCAm dCk7CisKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7CisKKwkJRFJNX0lO Rk8oIk1PQ1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsKKwl9IGVsc2UgeworCQlEUk1fSU5G TygiTU9DUzogVGFibGUgTm90IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybVxuIik7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworCiBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29udGV4dChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAogCQkgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0 eCkKIHsKQEAgLTEzNzksNiArMTQ0MSwxMiBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yY3NfY29u dGV4dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7CiAKKwkvKgorCSAqIEZhaWxpbmcgdG8gcHJvZ3JhbSB0aGUgTU9DUyBpcyBub24tZmF0YWwu VGhlIHN5c3RlbSB3aWxsIG5vdAorCSAqIHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBTbyBnZW5l cmF0ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5IG9uLgorCSAqLworCVdBUk5fT04oaTkxNV9nZW1fcHJv Z3JhbV9tb2NzKHJpbmcsIGN0eCkgIT0gMCk7CisKIAlyZXR1cm4gaW50ZWxfbHJfY29udGV4dF9y ZW5kZXJfc3RhdGVfaW5pdChyaW5nLCBjdHgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Nz LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxOTMyYQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwpAQCAtMCwwICsxLDI1 MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAq ICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgorICovCisKKyNpbmNs dWRlICJpbnRlbF9tb2NzLmgiCisjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCisjaW5jbHVkZSAiaW50 ZWxfcmluZ2J1ZmZlci5oIgorCisvKgorICogTU9DUyB0YWJsZXMKKyAqCisgKiBUaGVzZSBhcmUg dGhlIE1PQ1MgdGFibGVzIHRoYXQgYXJlIHByb2dyYW1tZWQgYWNyb3NzIGFsbCB0aGUgcmluZ3Mu CisgKiBUaGUgY29udHJvbCB2YWx1ZSBpcyBwcm9ncmFtbWVkIHRvIGFsbCB0aGUgcmluZ3MgdGhh dCBzdXBwb3J0IHRoZQorICogTU9DUyByZWdpc3RlcnMuIFdoaWxlIHRoZSBsM2NjX3ZhbHVlcyBh cmUgb25seSBwcm9ncmFtbWVkIHRvIHRoZQorICogTE5DRkNNT0NTMCAtIExOQ0ZDTU9DUzMyIHJl Z2lzdGVycy4KKyAqCisgKiBOT1RFOiBUaGVzZSB0YWJsZXMgTVVTVCBzdGFydCB3aXRoIGJlaW5n IHVuY2FjaGVkIHswLDB9IGFuZCB0aGUKKyAqICAgICAgIHRoZSBsZW5ndGggTVVTVCBiZSBsZXNz IHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBhcmUKKyAqICAgICAgIHJlc2VydmVk IGJ5IHRoZSBoYXJkd2FyZS4KKyAqLworc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgc2t5bGFr ZV9tb2NzX3RhYmxlW10gPSB7CisJIC8qIHsweDAwMDAwMDA5LCAweDAwMTB9ICovCisJeyhNT0NT X0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlN T0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDNi LCAweDAwMzB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9D QUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVD Q19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJ CShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0Ip KX0sCisJIC8qIHsweDAwMDAwMDM5LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShF RFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBN T0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0o MCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19M M19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICovCisJ eyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwgTU9D U19MUlVNKDEpIHwKKwkJTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0Mo MCkgfCBNT0NfUEZNKDApIHwKKwkJTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NT X1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAorCSAvKiB7MHgwMDAwMDAx NywgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1Rf Q0FDSEUoTExDKSB8IE1PQ1NfTFJVTSgxKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VT QygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1P Q1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwK KwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFN X1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8CisJCU1PQ1NfTFJVTSgxKSB8IE1PQ1Nf QU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8 IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NB Q0hFQUJJTElUWShMM19VQykpfSwKKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KKwl7KE1P Q1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfCBNT0NTX0xS VU0oMykgfAorCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8 IE1PQ19QRk0oMCkgfAorCQlNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCisJIC8qIHsweDAwMDAwMDM3LCAw eDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNI RShMTEMpIHwgTU9DU19MUlVNKDMpIHwKKwkJTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDAp IHwgTU9DU19TQ0MoMCkgfCBNT0NfUEZNKDApIHwKKwkJTU9DU19TQ0YoMCkpLAorCQkoTU9DU19F U0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAorCSAv KiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0Ip IHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00o MCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9D U19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVB QklMSVRZKEwzX1VDKSl9LAorfTsKKworc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgYnJveHRv bl9tb2NzX3RhYmxlW10gPSB7CisJIC8qIHsweDAwMDAwMDAxLCAweDAwMTB9ICovCisJeyhNT0NT X0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShFTExDKSB8IE1PQ1NfTFJV TSgwKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwg TU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0Mo MCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKKwkgLyogezB4MDAwMDAwMDUsIDB4 MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hF KExMQykgfCBNT0NTX0xSVU0oMCkgfAorCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NTX1NDRigwKSksCisJCShNT0NTX0VT QygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8q IHsweDAwMDAwMDA1LCAweDAwMzB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykg fCBNT0NTX1RHVF9DQUNIRShMTEMpIHwgTU9DU19MUlVNKDApIHwKKwkJTU9DU19BT00oMCkgfCBN T0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NfUEZNKDApIHwKKwkJTU9DU19TQ0Yo MCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZ KEwzX1dCKSl9LAorCSAvKiB7MHgwMDAwMDAxNywgMHgwMDMwfSAqLworCXsoTU9DU19DQUNIRUFC SUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8IE1PQ1NfTFJVTSgxKSB8CisJ CU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgw KSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwKKwkgLyogezB4MDAwMDAwMTcsIDB4MDAxMH0gKi8K Kwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfCBN T0NTX0xSVU0oMSkgfAorCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAw MDE5LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RH VF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSks CisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNf VUMpKX0sCisJIC8qIHsweDAwMDAwMDM3LCAweDAwMzB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElU WShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwgTU9DU19MUlVNKDMpIHwKKwkJTU9D U19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NfUEZNKDApIHwK KwkJTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNf Q0FDSEVBQklMSVRZKEwzX1dCKSl9LAorCSAvKiB7MHgwMDAwMDAzNywgMHgwMDEwfSAqLworCXso TU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8IE1PQ1Nf TFJVTSgzKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKKwkgLyogezB4MDAwMDAwM2Is IDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NB Q0hFKExMQ19FTExDKSB8CisJCU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUND X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJ KE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykp fSwKK307CisKKworLyoqCisgKiBnZXRfbW9jc19zZXR0aW5ncworICoKKyAqIFRoaXMgZnVuY3Rp b24gd2lsbCByZXR1cm4gdGhlIHZhbHVlcyBvZiB0aGUgTU9DUyB0YWJsZSB0aGF0IG5lZWRzIHRv CisgKiBiZSBwcm9ncmFtbWVkIGZvciB0aGUgcGxhdGZvcm0uIEl0IHdpbGwgcmV0dXJuIHRoZSB2 YWx1ZXMgdGhhdCBuZWVkCisgKiB0byBiZSBwcm9ncmFtbWVkIGFuZCBpZiB0aGV5IG5lZWQgdG8g YmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlcyBpcyBmYWxzZSB0aGVu IHRoZSByZWdpc3RlcnMgZG8gbm90IG5lZWQgcHJvZ3JhbW1pbmcuCisgKi8KK2Jvb2wgZ2V0X21v Y3Nfc2V0dGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1f aTkxNV9tb2NzX3RhYmxlICp0YWJsZSkgeworCWJvb2wJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAo SVNfU0tZTEFLRShkZXYpKSB7CisJCXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUoc2t5bGFrZV9t b2NzX3RhYmxlKTsKKwkJdGFibGUtPnRhYmxlID0gc2t5bGFrZV9tb2NzX3RhYmxlOworCQlyZXN1 bHQgPSB0cnVlOworCX0gZWxzZSBpZiAoSVNfQlJPWFRPTihkZXYpKSB7CisJCXRhYmxlLT5zaXpl ICA9IEFSUkFZX1NJWkUoYnJveHRvbl9tb2NzX3RhYmxlKTsKKwkJdGFibGUtPnRhYmxlID0gYnJv eHRvbl9tb2NzX3RhYmxlOworCQlyZXN1bHQgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIFBsYXRm b3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMgbm90ICovCisJCVdBUk5fT04o SU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoqCisgKiBlbWl0X21vY3NfY29udHJvbF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9s IHRhYmxlCisgKiBAcmluZ2J1ZjoJRFJNIGRldmljZS4KKyAqIEB0YWJsZToJVGhlIHZhbHVlcyB0 byBwcm9ncmFtIGludG8gdGhlIGNvbnRyb2wgcmVncy4KKyAqIEByZWdfYmFzZToJVGhlIGJhc2Ug Zm9yIHRoZSBFbmdpbmUgdGhhdCBuZWVkcyB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFRoaXMg ZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZCBmb3Ig dGhlCisgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4KKyAqCisg KiBSZXR1cm46IE5vdGhpbmcuCisgKi8KK3ZvaWQgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoc3Ry dWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCisJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9t b2NzX3RhYmxlICp0YWJsZSwKKwkJCQkgICAgdTMyIHJlZ19iYXNlKQoreworCXVuc2lnbmVkIGlu dCBpbmRleDsKKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQlNSV9MT0FE X1JFR0lTVEVSX0lNTShHRU45X05VTV9NT0NTX0VOVFJJRVMpKTsKKworCWZvciAoaW5kZXggPSAw OyBpbmRleCA8IHRhYmxlLT5zaXplOyBpbmRleCsrKSB7CisJCWludGVsX2xvZ2ljYWxfcmluZ19l bWl0KHJpbmdidWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOworCQlpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLAorCQkJCQl0YWJsZS0+dGFibGVbaW5kZXhdLmNvbnRyb2xfdmFsdWUp OworCX0KKworCS8qCisJICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2Fj aGVkLiBUaGVzZSBlbnRyaWVzIGFyZQorCSAqIG9mZmljaWFsbHkgdW5kZWZpbmVkIGFuZCBubyBj b250YWN0IGlzIGdpdmVuIGZvciB0aGUgY29udGVudHMgYW5kCisJICogc2V0dGluZ3MgaXMgZ2l2 ZW4gZm9yIHRoZXNlIGVudHJpZXMuCisJICoKKwkgKiBFbnRyeSAwIGluIHRoZSB0YWJsZSBpcyB1 bmNhY2hlZCAtIHNvIHdlIGFyZSBqdXN0IHdyaXR0ZW4gdGhhdAorCSAqIHZhbHVlIHRvIGFsbCB0 aGUgdXNlZCBlbnRyaWVzLgorCSAqLworCWZvciAoOyBpbmRleCA8IEdFTjlfTlVNX01PQ1NfRU5U UklFUzsgaW5kZXgrKykgeworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCByZWdf YmFzZSArIChpbmRleCAqIDQpKTsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg dGFibGUtPnRhYmxlWzBdLmNvbnRyb2xfdmFsdWUpOworCX0KKworCWludGVsX2xvZ2ljYWxfcmlu Z19lbWl0KHJpbmdidWYsIE1JX05PT1ApOworfQorCisvKioKKyAqIGVtaXRfbW9jc19sM2NjX3Rh YmxlKCkgLSBlbWl0IHRoZSBtb2NzIGNvbnRyb2wgdGFibGUKKyAqIEByaW5nYnVmOglEUk0gZGV2 aWNlLgorICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCBy ZWdzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RF Ul9JTU0gY29tbWFuZCBmb3IgdGhlCisgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2 ZW4gYWRkcmVzcy4gVGhpcyByZWdpc3RlciBzZXQgaXMgIHByb2dyYW1tZWQKKyAqIGluIHBhaXJz LgorICoKKyAqIFJldHVybjogTm90aGluZy4KKyAqLwordm9pZCBlbWl0X21vY3NfbDNjY190YWJs ZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJCSBzdHJ1Y3QgZHJtX2k5MTVf bW9jc190YWJsZSAqdGFibGUpIHsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50 IGk7CisKKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAorCQkJTUlfTE9BRF9SRUdJ U1RFUl9JTU0oR0VOOV9OVU1fTU9DU19FTlRSSUVTIC8gMikpOworCisJZm9yIChpID0gMCwgY291 bnQgPSAwOyBpIDwgdGFibGUtPnNpemUgLyAyOyBpKyssIGNvdW50ICs9IDIpIHsKKwkJdTMyIHZh bHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0 YWJsZS0+dGFibGVbY291bnQgKyAxXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAxNik7CisKKwkJ aW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0 KSk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsKKwl9CisKKwkv KgorCSAqIE5vdyBzZXQgdGhlIHJlc3Qgb2YgdGhlIHRhYmxlIHRvIHVuY2FjaGVkIC0gdXNlIGVu dHJ5IDAgYXMgdGhpcworCSAqIHdpbGwgYmUgdW5jYWNoZWQuIExlYXZlIHRoZSBsYXN0IHBhaXIg aW5pdGlhbGlzZWQgYXMgcmVzZXJ2ZWQgYnkKKwkgKiB0aGUgaGFyZHdhcmUuCisJICovCisJZm9y ICg7IGkgPCBHRU45X05VTV9NT0NTX0VOVFJJRVMgLyAyOyBpKyspIHsKKwkJdTMyIHZhbHVlID0g KHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8CisJCQkoKHRhYmxlLT50YWJs ZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAxNik7CisKKwkJaW50ZWxfbG9naWNhbF9yaW5n X2VtaXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgKGkgKiA0KSk7CisJCWludGVsX2xvZ2lj YWxfcmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsKKwl9CisKKwlpbnRlbF9sb2dpY2FsX3Jpbmdf ZW1pdChyaW5nYnVmLCBNSV9OT09QKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbW9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmQwY2YKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKQEAgLTAsMCArMSwxMTkgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAg IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgorICovCisKKyNpZm5kZWYg SU5URUxfTU9DU19ICisjZGVmaW5lIElOVEVMX01PQ1NfSAorCisvKioKKyAqIERPQzogTWVtb3J5 IE9iamVjdHMgQ29udHJvbCBTdGF0ZSAoTU9DUykKKyAqCisgKiBNb3RpdmF0aW9uOgorICogSW4g cHJldmlvdXMgR2VucyB0aGUgTU9DUyBzZXR0aW5ncyB3YXMgYSB2YWx1ZSB0aGF0IHdhcyBzZXQg YnkgdXNlciBsYW5kIGFzCisgKiBwYXJ0IG9mIHRoZSBiYXRjaC4gSW4gR2VuOSB0aGlzIGhhcyBj aGFuZ2VkIHRvIGJlIGEgc2luZ2xlIHRhYmxlIChwZXIgcmluZykKKyAqIHRoYXQgYWxsIGJhdGNo ZXMgbm93IHJlZmVyZW5jZSBieSBpbmRleCBpbnN0ZWFkIG9mIHByb2dyYW1taW5nIHRoZSBNT0NT CisgKiBkaXJlY3RseS4KKyAqCisgKiBUaGUgb25lIHdyaW5rbGUgaW4gdGhpcyBpcyB0aGF0IG9u bHkgUEFSVCBvZiB0aGUgTU9DUyB0YWJsZXMgYXJlIGluY2x1ZGVkCisgKiBpbiBjb250ZXh0IChU aGUgR0ZYX01PQ1NfMCAtIEdGWF9NT0NTXzY0IGFuZCB0aGUgTE5DRkNNT0NTMCAtIExOQ0ZDTU9D UzMyCisgKiByZWdpc3RlcnMpLiBUaGUgcmVzdCBhcmUgbm90ICh0aGUgc2V0dGluZ3MgZm9yIHRo ZSBvdGhlciByaW5ncykuCisgKgorICogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzZXQgYXQgc3lz dGVtIHN0YXJ0LXVwIGJlY2F1c2UgdGhlIHdheSB0aGUgdGFibGUKKyAqIGludGVyYWN0cyB3aXRo IHRoZSBjb250ZXh0cyBhbmQgdGhlIEdtbUxpYiBpbnRlcmZhY2UuCisgKgorICoKKyAqIEltcGxl bWVudGF0aW9uOgorICoKKyAqIFRoZSB0YWJsZSBpcyBwcm9ncmFtbWVkIG9uIGEgcGxhdGZvcm0g YmFzaXMgZnJvbSBhIHRhYmxlIHRoYXQgaXMgZ2VuZXJhdGVkCisgKiBmcm9tIHRoZSBvbmUgdGhh dCBoYXMgYmVlbiBhZ3JlZWQgYnkgdGhlIGRpZmZlcmVudCByZXNwb25zaWJsZSBwYXJ0aWVzLiBU aGlzCisgKiB0YWJsZXMgKG9uZSBwZXIgc3VwcG9ydGVkIHBsYXRmb3JtKSBpcyBkZWZpbmVkIGlu IGludGVsX21vY3MuYyBhbmQgaXMKKyAqIHByb2dyYW1tZWQgaW4gdGhlIGZpcnN0IGJhdGNoIGFm dGVyIHRoZSBjb250ZXh0IGlzIGxvYWRlZCAod2l0aCB0aGUgaGFyZHdhcmUKKyAqIHdvcmthcm91 bmRzKS4gVGhpcyB3aWxsIHRoZW4gbGV0IHRoZSB1c3VhbCBjb250ZXh0IGhhbmRsaW5nIGtlZXAg dGhlIE1PQ1MgaW4KKyAqIHN0ZXAuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j bHVkZSAiaTkxNV9kcnYuaCIKKworLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoWFhYX01PQ1Nf MCAtIFhYWF9NT0NTXzYzKSAqLworI2RlZmluZQlNT0NTX0NBQ0hFQUJJTElUWSh2YWx1ZSkJKCh2 YWx1ZSAmIDB4MDMpIDw8IDApCisjZGVmaW5lCU1PQ1NfVEdUX0NBQ0hFKHZhbHVlKQkJKCh2YWx1 ZSAmIDB4MDMpIDw8IDIpCisjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJCSgodmFsdWUgJiAweDAz KSA8PCA0KQorI2RlZmluZQlNT0NTX0FPTSh2YWx1ZSkJCQkoKHZhbHVlICYgMHgwMSkgPDwgNikK KyNkZWZpbmUJTU9DU19MRUNDX0VTQyh2YWx1ZSkJCSgodmFsdWUgJiAweDAxKSA8PCA3KQorI2Rl ZmluZQlNT0NTX0xFQ0NfU0NDKHZhbHVlKQkJKCh2YWx1ZSAmIDB4MDcpIDw8IDgpCisjZGVmaW5l CU1PQ19QRk0odmFsdWUpCQkJKCh2YWx1ZSAmIDB4MDcpIDw8IDExKQorI2RlZmluZQlNT0NTX1ND Rih2YWx1ZSkJCQkoKHZhbHVlICYgMHgwMSkgPDwgMTQpCisKKy8qIERlZmluZXMgZm9yIHRoZSB0 YWJsZXMgKExOQ0ZNT0NTMCAtIExOQ0ZNT0NTMzEpIC0gdHdvIGVudHJpZXMgcGVyIHdvcmQgKi8K KyNkZWZpbmUJTU9DU19FU0ModmFsdWUpCQkJKCh2YWx1ZSAmIDB4MDEpIDw8IDApCisjZGVmaW5l CU1PQ1NfU0NDKHZhbHVlKQkJCSgodmFsdWUgJiAweDA3KSA8PCAxKQorI2RlZmluZQlNT0NTX0wz X0NBQ0hFQUJJTElUWSh2YWx1ZSkJKCh2YWx1ZSAmIDB4MDMpIDw8IDQpCisKKy8qIEhlbHBlciBk ZWZpbmVzICovCisjZGVmaW5lIEdFTjlfTlVNX01PQ1NfUklOR1MJKDUpCS8qIE51bWJlciBvZiBt b2NzIGVuZ2luZXMgdG8gcHJvZ3JhbSAqLworI2RlZmluZSBHRU45X05VTV9NT0NTX0VOVFJJRVMJ KDYzKQkvKiA2MyBvdXQgb2YgNjQgLSA2NCBpcyByc3ZyZCAqLworCisvKiBFRFJBTSBDYWNoaW5n IG9wdGlvbnMgKi8KKyNkZWZpbmUgRURSQU1fUEFHRVRBQkxFCQkoMCkKKyNkZWZpbmUgRURSQU1f VUMJCSgxKQorI2RlZmluZSBFRFJBTV9SRVNFUlZFRAkJKDIpCisjZGVmaW5lIEVEUkFNX1dCCQko MykKKworLyogTDMgQ2FjaGluZyBvcHRpb25zICovCisjZGVmaW5lIEwzX0RJUkVDVAkJKDApCisj ZGVmaW5lIEwzX1VDCQkJKDEpCisjZGVmaW5lIEwzX1JFU0VSVkVECQkoMikKKyNkZWZpbmUgTDNf V0IJCQkoMykKKworLyogdGFyZ2V0IGNhY2hlICovCisjZGVmaW5lIEVMTEMJCQkoMCkKKyNkZWZp bmUgTExDCQkJKDEpCisjZGVmaW5lIExMQ19FTExDCQkoMikKKyNkZWZpbmUgTExDX0VMTEMJCSgz KQorCisvKiBzdHJ1Y3R1cmVzIHJlcXVpcmVkICovCitzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRy eSB7CisJdTMyCWNvbnRyb2xfdmFsdWU7CisJdTE2CWwzY2NfdmFsdWU7Cit9OworCitzdHJ1Y3Qg ZHJtX2k5MTVfbW9jc190YWJsZSB7CisJdTMyCQkJCQlzaXplOworCWNvbnN0IHN0cnVjdCBkcm1f aTkxNV9tb2NzX2VudHJ5CSp0YWJsZTsKK307CisKK3ZvaWQgZW1pdF9tb2NzX2wzY2NfdGFibGUo c3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCisJCQkgc3RydWN0IGRybV9pOTE1X21v Y3NfdGFibGUgKnRhYmxlKTsKKwordm9pZCBlbWl0X21vY3NfY29udHJvbF90YWJsZShzdHJ1Y3Qg aW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJs ZSAqdGFibGUsCisJCQkJdTMyIHJlZ19iYXNlKTsKKworYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFi bGUgKnRhYmxlKTsKKworI2VuZGlmCisKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=