From mboxrd@z Thu Jan 1 00:00:00 1970 From: Francisco Jerez Subject: [PATCHv9] drm/i915: Added Programming of the MOCS Date: Fri, 10 Jul 2015 20:13:11 +0300 Message-ID: <1436548391-26718-1-git-send-email-currojerez@riseup.net> References: <1436367082-24434-1-git-send-email-currojerez@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by gabe.freedesktop.org (Postfix) with ESMTPS id 331BE6E019 for ; Fri, 10 Jul 2015 10:12:11 -0700 (PDT) In-Reply-To: <1436367082-24434-1-git-send-email-currojerez@riseup.net> 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 RnJvbTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+CgpUaGlzIGNoYW5n ZSBhZGRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aGUgTU9DUyByZWdpc3RlcnMgdG8gdGhlIGdlbiA5 KwpwbGF0Zm9ybXMuIFRoZSBzZXQgb2YgTU9DUyBjb25maWd1cmF0aW9uIGVudHJpZXMgaW50cm9k dWNlZCBieSB0aGlzCnBhdGNoIGlzIGludGVuZGVkIHRvIGJlIG1pbmltYWwgYnV0IHN1ZmZpY2ll bnQgdG8gY292ZXIgdGhlIG5lZWRzIG9mCmN1cnJlbnQgdXNlcnNwYWNlIC0gaS5lLiBhIGdvb2Qg c2V0IG9mIGRlZmF1bHRzLiBJdCBpcyBleHBlY3RlZCB0byBiZQpleHRlbmRlZCBpbiB0aGUgZnV0 dXJlIHRvIHByb3ZpZGUgZnVydGhlciBkZWZhdWx0IHZhbHVlcyBvciB0byBhbGxvdwp1c2Vyc3Bh Y2UgdG8gcmVkZWZpbmUgaXRzIHByaXZhdGUgTU9DUyB0YWJsZXMgYmFzZWQgb24gaXRzIGRlbWFu ZCBmb3IKYWRkaXRpb25hbCBjYWNoaW5nIGNvbmZpZ3VyYXRpb25zLiBJbiB0aGlzIHNldHVwLCB1 c2Vyc3BhY2Ugc2hvdWxkCm9ubHkgdXRpbGl6ZSB0aGUgZmlyc3QgTiBlbnRyaWVzLCBoaWdoZXIg ZW50cmllcyBhcmUgcmVzZXJ2ZWQgZm9yCmZ1dHVyZSB1c2UuCgpJdCBjcmVhdGVzIGEgZml4ZWQg cmVnaXN0ZXIgc2V0IHRoYXQgaXMgcHJvZ3JhbW1lZCBhY3Jvc3MgdGhlIGRpZmZlcmVudAplbmdp bmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25l IGFzIHRoZQptYWluIFJDUyBjb250ZXh0IG9ubHkgaG9sZHMgdGhlIHJlZ2lzdGVycyBmb3IgaXRz ZWxmIGFuZCB0aGUgc2hhcmVkCkwzIHZhbHVlcy4gQnkgdHJ5aW5nIHRvIGtlZXAgdGhlIHJlZ2lz dGVycyBjb25zaXN0ZW50IGFjcm9zcyB0aGUKZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1h a2UgdGhlIHByb2dyYW1taW5nIGZvciB0aGUgcmVnaXN0ZXJzCmNvbnNpc3RlbnQuCgp2MjoKLSdz dGF0aWMgY29uc3QnIGZvciBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3R5bGUgY2hhbmdl cy4oTWF0dCBUdXJuZXIpCnYzOgotIE1ha2UgdGhlIHRhYmxlcyAic2xpZ2h0bHkiIG1vcmUgcmVh ZGFibGUuIChEYW1pZW4gTGVzcGlhdSkKLSBVcGRhdGVkIHRhYmxlcyBmaXggcGVyZm9ybWFuY2Ug cmVncmVzc2lvbi4KdjQ6Ci0gQ29kZSBmb3JtYXR0aW5nLiAoQ2hyaXMgV2lsc29uKQotIHJlLXBy aXZhdGlzZWQgbW9jcyBjb2RlLiAoRGFuaWVsIFZldHRlcikKdjU6Ci0gQ2hhbmdlZCB0aGUgbmFt ZSBvZiBhIGZ1bmN0aW9uLiAoQ2hyaXMgV2lsc29uKQp2NjoKLSByZS1iYXNlZAotIEFkZGVkIE1l c2EgdGFibGUgZW50cnkgKHNreWxha2UgJiBicm94dG9uKSAoRnJhbmNpc2NvIEplcmV6KQotIFRp ZGllZCB1cCB0aGUgcmVhZGFiaWxpdHkgZGVmaW5lcyAoRnJhbmNpc2NvIEplcmV6KQotIE5VTUJF UiBvZiBlbnRyaWVzIGRlZmluZXMgd3JvbmcuIChKaW0gQmlzaCkKLSBBZGRlZCBjb21tZW50cyB0 byBjbGVhciB1cCB0aGUgbWVhbmluZyBvZiB0aGUgdGFibGVzIChKaW0gQmlzaCkKClNpZ25lZC1v ZmYtYnk6IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgoKdjcgKEZyYW5j aXNjbyBKZXJleik6Ci0gRG9uJ3Qgd3JpdGUgTDMtc3BlY2lmaWMgTU9DU19FU0MvU0NDIHZhbHVl cyBpbnRvIHRoZSBlL0xMQyBjb250cm9sCiAgdGFibGVzLiAgUHJlZml4IEwzLXNwZWNpZmljIGRl ZmluZXMgY29uc2lzdGVudGx5IHdpdGggTDNfIGFuZAogIGUvTExDLXNwZWNpZmljIGRlZmluZXMg d2l0aCBMRV8gdG8gYXZvaWQgdGhpcyBraW5kIG9mIGNvbmZ1c2lvbiBpbgogIHRoZSBmdXR1cmUu Ci0gQ2hhbmdlIEwzQ0MgV1QgZGVmaW5lIGJhY2sgdG8gUkVTRVJWRUQgKG1hdGNoZXMgbXkgaGFy ZHdhcmUKICBkb2N1bWVudGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgcGF0Y2gsIHByb2JhYmx5IGEg bWlzdW5kZXJzdGFuZGluZwogIG9mIG15IG93biBwcmV2aW91cyBjb21tZW50KS4KLSBEcm9wIEFu ZHJvaWQgdGFibGVzLCBkZWZpbmUgbmV3IG1pbmltYWwgdGFibGVzIG1vcmUgc3VpdGFibGUgZm9y IHRoZQogIG9wZW4gc291cmNlIHN0YWNrLgotIEFkZCBjb21tZW50IHRoYXQgdGhlIE1PQ1MgdGFi bGVzIGFyZSBwYXJ0IG9mIHRoZSBrZXJuZWwgQUJJLgotIE1vdmUgaW50ZWxfbG9naWNhbF9yaW5n X2JlZ2luKCkgYW5kIF9hZHZhbmNlKCkgY2FsbHMgb25lIGxldmVsIGRvd24KICAoQ2hyaXMgV2ls c29uKS4KLSBNaW5vciBmb3JtYXR0aW5nIGFuZCBzdHlsZSBmaXhlcy4KdjggKEZyYW5jaXNjbyBK ZXJleik6Ci0gQWRkIHRhYmxlIHNpemUgc2FuaXR5IGNoZWNrIHRvIGVtaXRfbW9jc19jb250cm9s L2wzY2NfdGFibGUoKSAoQ2hyaXMKICBXaWxzb24pLgotIEFkZCBjb21tZW50IGFib3V0IHVuZGVm aW5lZCBlbnRyaWVzIGJlaW5nIGltcGxpY2l0bHkgc2V0IHRvIHVuY2FjaGVkCiAgZm9yIGZvcndh cmRzIGNvbXBhdGliaWxpdHkuCnY5IChGcmFuY2lzY28gSmVyZXopOgotIE1pbm9yIHN0eWxlIGZp eGVzLgoKU2lnbmVkLW9mZi1ieTogRnJhbmNpc2NvIEplcmV6IDxjdXJyb2plcmV6QHJpc2V1cC5u ZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYyAgfCAgMTIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5o ICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgfCAzMzUgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX21vY3MuaCB8ICA1NyArKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDQxMyBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX21vY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX21vY3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZGUyMTk2NS4uZTUyZTAxMiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTM2LDYgKzM2LDcgQEAgaTkxNS15ICs9IGk5MTVfY21k X3BhcnNlci5vIFwKIAkgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXAogCSAgaW50ZWxfaG90cGx1Zy5v IFwKIAkgIGludGVsX2xyYy5vIFwKKwkgIGludGVsX21vY3MubyBcCiAJICBpbnRlbF9yaW5nYnVm ZmVyLm8gXAogCSAgaW50ZWxfdW5jb3JlLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXgg MmEyOWJjYy4uNzk5OTZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC03OTA2LDQgKzc5 MDYsMTMgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5lIF9QQUxFVFRFX0Eg KGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGEwMDApCiAjZGVmaW5lIF9Q QUxFVFRFX0IgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGE4MDApCiAK Ky8qIE1PQ1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkgcmVnaXN0ZXJzICovCisjZGVm aW5lIEdFTjlfTE5DRkNNT0NTMAkJMHhiMDIwCS8qIEwzIENhY2hlIENvbnRyb2wgYmFzZSAqLwor CisjZGVmaW5lIEdFTjlfR0ZYX01PQ1NfMAkJMHhjODAwCS8qIEdyYXBoaWNzIE1PQ1MgYmFzZSBy ZWdpc3RlciovCisjZGVmaW5lIEdFTjlfTUZYMF9NT0NTXzAJMHhjOTAwCS8qIE1lZGlhIDAgTU9D UyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgxX01PQ1NfMAkweGNhMDAJLyogTWVk aWEgMSBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X1ZFQk9YX01PQ1NfMAkweGNi MDAJLyogVmlkZW8gTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9CTFRfTU9DU18w CQkweGNjMDAJLyogQmxpdHRlciBNT0NTIGJhc2UgcmVnaXN0ZXIqLworCiAjZW5kaWYgLyogX0k5 MTVfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IGQ0ZjhiNDMuLjI3NmE0 MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC0xMzUsNiArMTM1LDcgQEAKICNpbmNs dWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgogI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogCiAjZGVmaW5lIEdFTjlfTFJfQ09O VEVYVF9SRU5ERVJfU0laRSAoMjIgKiBQQUdFX1NJWkUpCiAjZGVmaW5lIEdFTjhfTFJfQ09OVEVY VF9SRU5ERVJfU0laRSAoMjAgKiBQQUdFX1NJWkUpCkBAIC03NzIsOCArNzczLDcgQEAgc3RhdGlj IGludCBsb2dpY2FsX3JpbmdfcHJlcGFyZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSwgaW50IGJ5dGVzKQogICoKICAqIFJldHVybjogbm9uLXplcm8gaWYgdGhlIHJpbmdidWZmZXIg aXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gdG8uCiAgKi8KLXN0YXRpYyBpbnQgaW50ZWxfbG9n aWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAotCQkJCSAg ICBpbnQgbnVtX2R3b3JkcykKK2ludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBudW1fZHdvcmRzKQogewogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdjsKIAlpbnQgcmV0OwpAQCAtMTY3NSw2ICsxNjc1LDE0IEBA IHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSBpbnRlbF9yY3Nf Y29udGV4dF9pbml0X21vY3MocmVxKTsKKwkvKgorCSAqIEZhaWxpbmcgdG8gcHJvZ3JhbSB0aGUg TU9DUyBpcyBub24tZmF0YWwuVGhlIHN5c3RlbSB3aWxsIG5vdAorCSAqIHJ1biBhdCBwZWFrIHBl cmZvcm1hbmNlLiBTbyBnZW5lcmF0ZSBhbiBlcnJvciBhbmQgY2Fycnkgb24uCisJICovCisJaWYg KHJldCkKKwkJRFJNX0VSUk9SKCJNT0NTIGZhaWxlZCB0byBwcm9ncmFtOiBleHBlY3QgcGVyZm9y bWFuY2UgaXNzdWVzLlxuIik7CisKIAlyZXR1cm4gaW50ZWxfbHJfY29udGV4dF9yZW5kZXJfc3Rh dGVfaW5pdChyZXEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCmluZGV4IGUwMjk5ZmIu LjY0Zjg5Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaApAQCAtNDIsNiArNDIsNyBAQCBp bnQgaW50ZWxfbG9naWNhbF9yaW5nX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXF1ZXN0KTsKIHZvaWQgaW50ZWxfbG9naWNhbF9yaW5nX3N0b3Aoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZyk7CiB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwogaW50IGludGVsX2xvZ2ljYWxfcmluZ3NfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4o c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBudW1fZHdvcmRzKTsKIAogaW50 IGxvZ2ljYWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKTsKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9j cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjZkM2M2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU SEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCisjaW5jbHVk ZSAiaW50ZWxfbHJjLmgiCisjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgorCisvKiBzdHJ1 Y3R1cmVzIHJlcXVpcmVkICovCitzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSB7CisJdTMyIGNv bnRyb2xfdmFsdWU7CisJdTE2IGwzY2NfdmFsdWU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfbW9j c190YWJsZSB7CisJdTMyIHNpemU7CisJY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkg KnRhYmxlOworfTsKKworLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhY WF9NT0NTXzYzKSAqLworI2RlZmluZSBMRV9DQUNIRUFCSUxJVFkodmFsdWUpCSgodmFsdWUpIDw8 IDApCisjZGVmaW5lIExFX1RHVF9DQUNIRSh2YWx1ZSkJKCh2YWx1ZSkgPDwgMikKKyNkZWZpbmUg TEVfTFJVTSh2YWx1ZSkJCSgodmFsdWUpIDw8IDQpCisjZGVmaW5lIExFX0FPTSh2YWx1ZSkJCSgo dmFsdWUpIDw8IDYpCisjZGVmaW5lIExFX1JTQyh2YWx1ZSkJCSgodmFsdWUpIDw8IDcpCisjZGVm aW5lIExFX1NDQyh2YWx1ZSkJCSgodmFsdWUpIDw8IDgpCisjZGVmaW5lIExFX1BGTSh2YWx1ZSkJ CSgodmFsdWUpIDw8IDExKQorI2RlZmluZSBMRV9TQ0YodmFsdWUpCQkoKHZhbHVlKSA8PCAxNCkK KworLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoTE5DRk1PQ1MwIC0gTE5DRk1PQ1MzMSkgLSB0 d28gZW50cmllcyBwZXIgd29yZCAqLworI2RlZmluZSBMM19FU0ModmFsdWUpCQkoKHZhbHVlKSA8 PCAwKQorI2RlZmluZSBMM19TQ0ModmFsdWUpCQkoKHZhbHVlKSA8PCAxKQorI2RlZmluZSBMM19D QUNIRUFCSUxJVFkodmFsdWUpCSgodmFsdWUpIDw8IDQpCisKKy8qIEhlbHBlciBkZWZpbmVzICov CisjZGVmaW5lIEdFTjlfTlVNX01PQ1NfRU5UUklFUwk2MiAgLyogNjIgb3V0IG9mIDY0IC0gNjMg JiA2NCBhcmUgcmVzZXJ2ZWQuICovCisKKy8qIChlKUxMQyBjYWNoaW5nIG9wdGlvbnMgKi8KKyNk ZWZpbmUgTEVfUEFHRVRBQkxFCQkwCisjZGVmaW5lIExFX1VDCQkJMQorI2RlZmluZSBMRV9XVAkJ CTIKKyNkZWZpbmUgTEVfV0IJCQkzCisKKy8qIEwzIGNhY2hpbmcgb3B0aW9ucyAqLworI2RlZmlu ZSBMM19ESVJFQ1QJCTAKKyNkZWZpbmUgTDNfVUMJCQkxCisjZGVmaW5lIEwzX1JFU0VSVkVECQky CisjZGVmaW5lIEwzX1dCCQkJMworCisvKiBUYXJnZXQgY2FjaGUgKi8KKyNkZWZpbmUgRUxMQwkJ CTAKKyNkZWZpbmUgTExDCQkJMQorI2RlZmluZSBMTENfRUxMQwkJMgorCisvKgorICogTU9DUyB0 YWJsZXMKKyAqCisgKiBUaGVzZSBhcmUgdGhlIE1PQ1MgdGFibGVzIHRoYXQgYXJlIHByb2dyYW1t ZWQgYWNyb3NzIGFsbCB0aGUgcmluZ3MuCisgKiBUaGUgY29udHJvbCB2YWx1ZSBpcyBwcm9ncmFt bWVkIHRvIGFsbCB0aGUgcmluZ3MgdGhhdCBzdXBwb3J0IHRoZQorICogTU9DUyByZWdpc3RlcnMu IFdoaWxlIHRoZSBsM2NjX3ZhbHVlcyBhcmUgb25seSBwcm9ncmFtbWVkIHRvIHRoZQorICogTE5D RkNNT0NTMCAtIExOQ0ZDTU9DUzMyIHJlZ2lzdGVycy4KKyAqCisgKiBUaGVzZSB0YWJsZXMgYXJl IGludGVuZGVkIHRvIGJlIGtlcHQgcmVhc29uYWJseSBjb25zaXN0ZW50IGFjcm9zcworICogcGxh dGZvcm1zLiBIb3dldmVyIHNvbWUgb2YgdGhlIGZpZWxkcyBhcmUgbm90IGFwcGxpY2FibGUgdG8g YWxsIG9mCisgKiB0aGVtLgorICoKKyAqIEVudHJpZXMgbm90IHBhcnQgb2YgdGhlIGZvbGxvd2lu ZyB0YWJsZXMgYXJlIHVuZGVmaW5lZCBhcyBmYXIgYXMKKyAqIHVzZXJzcGFjZSBpcyBjb25jZXJu ZWQgYW5kIHNob3VsZG4ndCBiZSByZWxpZWQgdXBvbi4gIEZvciB0aGUgdGltZQorICogYmVpbmcg dGhleSB3aWxsIGJlIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gdGhlIHN0cmljdGVzdCBjYWNo aW5nCisgKiBjb25maWd1cmF0aW9uICh1bmNhY2hlZCkgdG8gZ3VhcmFudGVlIGZvcndhcmRzIGNv bXBhdGliaWxpdHkgd2l0aAorICogdXNlcnNwYWNlIHByb2dyYW1zIHdyaXR0ZW4gYWdhaW5zdCBt b3JlIHJlY2VudCBrZXJuZWxzIHByb3ZpZGluZworICogYWRkaXRpb25hbCBNT0NTIGVudHJpZXMu CisgKgorICogTk9URTogVGhlc2UgdGFibGVzIE1VU1Qgc3RhcnQgd2l0aCBiZWluZyB1bmNhY2hl ZCBhbmQgdGhlIGxlbmd0aAorICogICAgICAgTVVTVCBiZSBsZXNzIHRoYW4gNjMgYXMgdGhlIGxh c3QgdHdvIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQKKyAqICAgICAgIGJ5IHRoZSBoYXJkd2FyZS4g IFRoZXNlIHRhYmxlcyBhcmUgcGFydCBvZiB0aGUga2VybmVsIEFCSSBhbmQKKyAqICAgICAgIG1h eSBvbmx5IGJlIHVwZGF0ZWQgaW5jcmVtZW50YWxseSBieSBhZGRpbmcgZW50cmllcyBhdCB0aGUK KyAqICAgICAgIGVuZC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2NzX2Vu dHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0geworCS8qIHsgMHgwMDAwMDAwOSwgMHgwMDEwIH0g Ki8KKwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfVUMpIHwgTEVfVEdUX0NBQ0hFKExMQ19FTExDKSB8 IExFX0xSVU0oMCkgfAorCSAgIExFX0FPTSgwKSB8IExFX1JTQygwKSB8IExFX1NDQygwKSB8IExF X1BGTSgwKSB8IExFX1NDRigwKSksCisJICAoTDNfRVNDKDApIHwgTDNfU0NDKDApIHwgTDNfQ0FD SEVBQklMSVRZKEwzX1VDKSkgfSwKKwkvKiB7IDB4MDAwMDAwMzgsIDB4MDAzMCB9ICovCisJeyAo TEVfQ0FDSEVBQklMSVRZKExFX1BBR0VUQUJMRSkgfCBMRV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwg TEVfTFJVTSgzKSB8CisJICAgTEVfQU9NKDApIHwgTEVfUlNDKDApIHwgTEVfU0NDKDApIHwgTEVf UEZNKDApIHwgTEVfU0NGKDApKSwKKwkgIChMM19FU0MoMCkgfCBMM19TQ0MoMCkgfCBMM19DQUNI RUFCSUxJVFkoTDNfV0IpKSB9LAorCS8qIHsgMHgwMDAwMDAzYiwgMHgwMDMwIH0gKi8KKwl7IChM RV9DQUNIRUFCSUxJVFkoTEVfV0IpIHwgTEVfVEdUX0NBQ0hFKExMQ19FTExDKSB8IExFX0xSVU0o MykgfAorCSAgIExFX0FPTSgwKSB8IExFX1JTQygwKSB8IExFX1NDQygwKSB8IExFX1BGTSgwKSB8 IExFX1NDRigwKSksCisJICAoTDNfRVNDKDApIHwgTDNfU0NDKDApIHwgTDNfQ0FDSEVBQklMSVRZ KEwzX1dCKSkgfQorfTsKKworLyogTk9URTogdGhlIExFX1RHVF9DQUNIRSBpcyBub3QgdXNlZCBv biBCcm94dG9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgYnJv eHRvbl9tb2NzX3RhYmxlW10gPSB7CisJLyogeyAweDAwMDAwMDA5LCAweDAwMTAgfSAqLworCXsg KExFX0NBQ0hFQUJJTElUWShMRV9VQykgfCBMRV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwgTEVfTFJV TSgwKSB8CisJICAgTEVfQU9NKDApIHwgTEVfUlNDKDApIHwgTEVfU0NDKDApIHwgTEVfUEZNKDAp IHwgTEVfU0NGKDApKSwKKwkgIChMM19FU0MoMCkgfCBMM19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJ VFkoTDNfVUMpKSB9LAorCS8qIHsgMHgwMDAwMDAzOCwgMHgwMDMwIH0gKi8KKwl7IChMRV9DQUNI RUFCSUxJVFkoTEVfUEFHRVRBQkxFKSB8IExFX1RHVF9DQUNIRShMTENfRUxMQykgfCBMRV9MUlVN KDMpIHwKKwkgICBMRV9BT00oMCkgfCBMRV9SU0MoMCkgfCBMRV9TQ0MoMCkgfCBMRV9QRk0oMCkg fCBMRV9TQ0YoMCkpLAorCSAgKEwzX0VTQygwKSB8IEwzX1NDQygwKSB8IEwzX0NBQ0hFQUJJTElU WShMM19XQikpIH0sCisJLyogeyAweDAwMDAwMDNiLCAweDAwMzAgfSAqLworCXsgKExFX0NBQ0hF QUJJTElUWShMRV9XQikgfCBMRV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgzKSB8CisJ ICAgTEVfQU9NKDApIHwgTEVfUlNDKDApIHwgTEVfU0NDKDApIHwgTEVfUEZNKDApIHwgTEVfU0NG KDApKSwKKwkgIChMM19FU0MoMCkgfCBMM19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJVFkoTDNfV0Ip KSB9Cit9OworCisvKioKKyAqIGdldF9tb2NzX3NldHRpbmdzKCkKKyAqIEBkZXY6ICAgICAgICBE Uk0gZGV2aWNlLgorICogQHRhYmxlOiAgICAgIE91dHB1dCB0YWJsZSB0aGF0IHdpbGwgYmUgbWFk ZSB0byBwb2ludCBhdCBhcHByb3ByaWF0ZQorICogICAgICAgICAgICAgIE1PQ1MgdmFsdWVzIGZv ciB0aGUgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHZhbHVl cyBvZiB0aGUgTU9DUyB0YWJsZSB0aGF0IG5lZWRzIHRvCisgKiBiZSBwcm9ncmFtbWVkIGZvciB0 aGUgcGxhdGZvcm0uIEl0IHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgdGhhdCBuZWVkCisgKiB0byBi ZSBwcm9ncmFtbWVkIGFuZCBpZiB0aGV5IG5lZWQgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBS ZXR1cm46IHRydWUgaWYgdGhlcmUgYXJlIGFwcGxpY2FibGUgTU9DUyBzZXR0aW5ncyBmb3IgdGhl IGRldmljZS4KKyAqLworc3RhdGljIGJvb2wgZ2V0X21vY3Nfc2V0dGluZ3Moc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkK K3sKKwlib29sIHJlc3VsdCA9IGZhbHNlOworCisJaWYgKElTX1NLWUxBS0UoZGV2KSkgeworCQl0 YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKHNreWxha2VfbW9jc190YWJsZSk7CisJCXRhYmxlLT50 YWJsZSA9IHNreWxha2VfbW9jc190YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9IGVsc2UgaWYg KElTX0JST1hUT04oZGV2KSkgeworCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKGJyb3h0b25f bW9jc190YWJsZSk7CisJCXRhYmxlLT50YWJsZSA9IGJyb3h0b25fbW9jc190YWJsZTsKKwkJcmVz dWx0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlXQVJOX09OQ0UoSU5URUxfSU5GTyhkZXYpLT5nZW4g Pj0gOSwKKwkJCSAgIlBsYXRmb3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMg bm90LlxuIik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBlbWl0X21vY3Nf Y29udHJvbF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCisgKiBAcmVxOglS ZXF1ZXN0IHRvIHNldCB1cCB0aGUgTU9DUyB0YWJsZSBmb3IuCisgKiBAdGFibGU6CVRoZSB2YWx1 ZXMgdG8gcHJvZ3JhbSBpbnRvIHRoZSBjb250cm9sIHJlZ3MuCisgKiBAcmVnX2Jhc2U6CVRoZSBi YXNlIGZvciB0aGUgZW5naW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQg Zm9yIHRoZQorICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuCisg KgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB0aGUgZXJyb3Igc3RhdHVzLgor ICovCitzdGF0aWMgaW50IGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxl ICp0YWJsZSwKKwkJCQkgICB1MzIgcmVnX2Jhc2UpCit7CisJc3RydWN0IGludGVsX3JpbmdidWZm ZXIgKnJpbmdidWYgPSByZXEtPnJpbmdidWY7CisJdW5zaWduZWQgaW50IGluZGV4OworCWludCBy ZXQ7CisKKwlpZiAoV0FSTl9PTih0YWJsZS0+c2l6ZSA+IEdFTjlfTlVNX01PQ1NfRU5UUklFUykp CisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJl cSwgMiArIDIgKiBHRU45X05VTV9NT0NTX0VOVFJJRVMpOworCWlmIChyZXQpIHsKKwkJRFJNX0RF QlVHKCJpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4gZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQkJTUlf TE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9OVU1fTU9DU19FTlRSSUVTKSk7CisKKwlmb3IgKGluZGV4 ID0gMDsgaW5kZXggPCB0YWJsZS0+c2l6ZTsgaW5kZXgrKykgeworCQlpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLCByZWdfYmFzZSArIGluZGV4ICogNCk7CisJCWludGVsX2xvZ2ljYWxf cmluZ19lbWl0KHJpbmdidWYsCisJCQkJCXRhYmxlLT50YWJsZVtpbmRleF0uY29udHJvbF92YWx1 ZSk7CisJfQorCisJLyoKKwkgKiBPaywgbm93IHNldCB0aGUgdW51c2VkIGVudHJpZXMgdG8gdW5j YWNoZWQuIFRoZXNlIGVudHJpZXMKKwkgKiBhcmUgb2ZmaWNpYWxseSB1bmRlZmluZWQgYW5kIG5v IGNvbnRyYWN0IGZvciB0aGUgY29udGVudHMKKwkgKiBhbmQgc2V0dGluZ3MgaXMgZ2l2ZW4gZm9y IHRoZXNlIGVudHJpZXMuCisJICoKKwkgKiBFbnRyeSAwIGluIHRoZSB0YWJsZSBpcyB1bmNhY2hl ZCAtIHNvIHdlIGFyZSBqdXN0IHdyaXRpbmcKKwkgKiB0aGF0IHZhbHVlIHRvIGFsbCB0aGUgdXNl ZCBlbnRyaWVzLgorCSAqLworCWZvciAoOyBpbmRleCA8IEdFTjlfTlVNX01PQ1NfRU5UUklFUzsg aW5kZXgrKykgeworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCByZWdfYmFzZSAr IGluZGV4ICogNCk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHRhYmxlLT50 YWJsZVswXS5jb250cm9sX3ZhbHVlKTsKKwl9CisKKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChy aW5nYnVmLCBNSV9OT09QKTsKKwlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsK KworCXJldHVybiAwOworfQorCisvKioKKyAqIGVtaXRfbW9jc19sM2NjX3RhYmxlKCkgLSBlbWl0 IHRoZSBtb2NzIGNvbnRyb2wgdGFibGUKKyAqIEByZXE6CVJlcXVlc3QgdG8gc2V0IHVwIHRoZSBN T0NTIHRhYmxlIGZvci4KKyAqIEB0YWJsZToJVGhlIHZhbHVlcyB0byBwcm9ncmFtIGludG8gdGhl IGNvbnRyb2wgcmVncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xP QURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9yIHRoZQorICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcg YXQgdGhlIGdpdmVuIGFkZHJlc3MuIFRoaXMgcmVnaXN0ZXIgc2V0IGlzCisgKiBwcm9ncmFtbWVk IGluIHBhaXJzLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgdGhlIGVy cm9yIHN0YXR1cy4KKyAqLworc3RhdGljIGludCBlbWl0X21vY3NfbDNjY190YWJsZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfbW9j c190YWJsZSAqdGFibGUpCit7CisJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBy ZXEtPnJpbmdidWY7CisJdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBpOworCXUz MiB2YWx1ZTsKKwl1MzIgZmlsbGVyID0gKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhm ZmZmKSB8CisJCQkoKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAxNik7 CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKHRhYmxlLT5zaXplID4gR0VOOV9OVU1fTU9DU19F TlRSSUVTKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpbnRlbF9sb2dpY2FsX3Jpbmdf YmVnaW4ocmVxLCAyICsgR0VOOV9OVU1fTU9DU19FTlRSSUVTKTsKKwlpZiAocmV0KSB7CisJCURS TV9ERUJVRygiaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAorCQkJ TUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9OVU1fTU9DU19FTlRSSUVTIC8gMikpOworCisJZm9y IChpID0gMCwgY291bnQgPSAwOyBpIDwgdGFibGUtPnNpemUgLyAyOyBpKyssIGNvdW50ICs9IDIp IHsKKwkJdmFsdWUgPSAodGFibGUtPnRhYmxlW2NvdW50XS5sM2NjX3ZhbHVlICYgMHhmZmZmKSB8 CisJCQkoKHRhYmxlLT50YWJsZVtjb3VudCArIDFdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2 KTsKKworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBHRU45X0xOQ0ZDTU9DUzAg KyBpICogNCk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsKKwl9 CisKKwlpZiAodGFibGUtPnNpemUgJiAweDAxKSB7CisJCS8qIE9kZCB0YWJsZSBzaXplIC0gMSBs ZWZ0IG92ZXIgKi8KKwkJdmFsdWUgPSAodGFibGUtPnRhYmxlW2NvdW50XS5sM2NjX3ZhbHVlICYg MHhmZmZmKSB8CisJCQkoKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAx Nik7CisJfSBlbHNlCisJCXZhbHVlID0gZmlsbGVyOworCisJLyoKKwkgKiBOb3cgc2V0IHRoZSBy ZXN0IG9mIHRoZSB0YWJsZSB0byB1bmNhY2hlZCAtIHVzZSBlbnRyeSAwIGFzCisJICogdGhpcyB3 aWxsIGJlIHVuY2FjaGVkLiBMZWF2ZSB0aGUgbGFzdCBwYWlyIHVuaW5pdGlhbGlzZWQgYXMKKwkg KiB0aGV5IGFyZSByZXNlcnZlZCBieSB0aGUgaGFyZHdhcmUuCisJICovCisJZm9yICg7IGkgPCBH RU45X05VTV9NT0NTX0VOVFJJRVMgLyAyOyBpKyspIHsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgaSAqIDQpOworCQlpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7CisKKwkJdmFsdWUgPSBmaWxsZXI7CisJfQorCisJaW50 ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgTUlfTk9PUCk7CisJaW50ZWxfbG9naWNhbF9y aW5nX2FkdmFuY2UocmluZ2J1Zik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbnRlbF9y Y3NfY29udGV4dF9pbml0X21vY3MoKSAtIHByb2dyYW0gdGhlIE1PQ1MgcmVnaXN0ZXIuCisgKiBA cmVxOglSZXF1ZXN0IHRvIHNldCB1cCB0aGUgTU9DUyB0YWJsZXMgZm9yLgorICoKKyAqIFRoaXMg ZnVuY3Rpb24gd2lsbCBlbWl0IGEgYmF0Y2ggYnVmZmVyIHdpdGggdGhlIHZhbHVlcyByZXF1aXJl ZCBmb3IKKyAqIHByb2dyYW1taW5nIHRoZSBNT0NTIHJlZ2lzdGVyIHZhbHVlcyBmb3IgYWxsIHRo ZSBjdXJyZW50bHkgc3VwcG9ydGVkCisgKiByaW5ncy4KKyAqCisgKiBUaGVzZSByZWdpc3RlcnMg YXJlIHBhcnRpYWxseSBzdG9yZWQgaW4gdGhlIFJDUyBjb250ZXh0LCBzbyB0aGV5IGFyZQorICog ZW1pdHRlZCBhdCB0aGUgc2FtZSB0aW1lIHNvIHRoYXQgd2hlbiBhIGNvbnRleHQgaXMgY3JlYXRl ZCB0aGVzZSByZWdpc3RlcnMKKyAqIGFyZSBzZXQgdXAuIFRoZXNlIHJlZ2lzdGVycyBoYXZlIHRv IGJlIGVtaXR0ZWQgaW50byB0aGUgc3RhcnQgb2YgdGhlCisgKiBjb250ZXh0IGFzIHNldHRpbmcg dGhlIEVMU1Agd2lsbCByZS1pbml0IHNvbWUgb2YgdGhlc2UgcmVnaXN0ZXJzIGJhY2sKKyAqIHRv IHRoZSBodyB2YWx1ZXMuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB0 aGUgZXJyb3Igc3RhdHVzLgorICovCitpbnQgaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2NzKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBkcm1faTkxNV9tb2Nz X3RhYmxlIHQ7CisJaW50IHJldDsKKworCWlmIChnZXRfbW9jc19zZXR0aW5ncyhyZXEtPnJpbmct PmRldiwgJnQpKSB7CisJCS8qIFByb2dyYW0gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJCXJl dCA9IGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJlcSwgJnQsIEdFTjlfR0ZYX01PQ1NfMCk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGVtaXRfbW9jc19jb250cm9sX3Rh YmxlKHJlcSwgJnQsIEdFTjlfTUZYMF9NT0NTXzApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCQlyZXQgPSBlbWl0X21vY3NfY29udHJvbF90YWJsZShyZXEsICZ0LCBHRU45X01GWDFf TU9DU18wKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZW1pdF9tb2Nz X2NvbnRyb2xfdGFibGUocmVxLCAmdCwgR0VOOV9WRUJPWF9NT0NTXzApOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBlbWl0X21vY3NfY29udHJvbF90YWJsZShyZXEsICZ0 LCBHRU45X0JMVF9NT0NTXzApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBO b3cgcHJvZ3JhbSB0aGUgbDNjYyByZWdpc3RlcnMgKi8KKwkJcmV0ID0gZW1pdF9tb2NzX2wzY2Nf dGFibGUocmVxLCAmdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjc2ZTQ1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9tb2NzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisg KiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElOVEVMX01PQ1NfSAorI2RlZmluZSBJTlRFTF9N T0NTX0gKKworLyoqCisgKiBET0M6IE1lbW9yeSBPYmplY3RzIENvbnRyb2wgU3RhdGUgKE1PQ1Mp CisgKgorICogTW90aXZhdGlvbjoKKyAqIEluIHByZXZpb3VzIEdlbnMgdGhlIE1PQ1Mgc2V0dGlu Z3Mgd2FzIGEgdmFsdWUgdGhhdCB3YXMgc2V0IGJ5IHVzZXIgbGFuZCBhcworICogcGFydCBvZiB0 aGUgYmF0Y2guIEluIEdlbjkgdGhpcyBoYXMgY2hhbmdlZCB0byBiZSBhIHNpbmdsZSB0YWJsZSAo cGVyIHJpbmcpCisgKiB0aGF0IGFsbCBiYXRjaGVzIG5vdyByZWZlcmVuY2UgYnkgaW5kZXggaW5z dGVhZCBvZiBwcm9ncmFtbWluZyB0aGUgTU9DUworICogZGlyZWN0bHkuCisgKgorICogVGhlIG9u ZSB3cmlua2xlIGluIHRoaXMgaXMgdGhhdCBvbmx5IFBBUlQgb2YgdGhlIE1PQ1MgdGFibGVzIGFy ZSBpbmNsdWRlZAorICogaW4gY29udGV4dCAoVGhlIEdGWF9NT0NTXzAgLSBHRlhfTU9DU182NCBh bmQgdGhlIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1MzMgorICogcmVnaXN0ZXJzKS4gVGhlIHJlc3Qg YXJlIG5vdCAodGhlIHNldHRpbmdzIGZvciB0aGUgb3RoZXIgcmluZ3MpLgorICoKKyAqIFRoaXMg dGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3RlbSBzdGFydC11cCBiZWNhdXNlIHRoZSB3YXkg dGhlIHRhYmxlCisgKiBpbnRlcmFjdHMgd2l0aCB0aGUgY29udGV4dHMgYW5kIHRoZSBHbW1MaWIg aW50ZXJmYWNlLgorICoKKyAqCisgKiBJbXBsZW1lbnRhdGlvbjoKKyAqCisgKiBUaGUgdGFibGVz IChvbmUgcGVyIHN1cHBvcnRlZCBwbGF0Zm9ybSkgYXJlIGRlZmluZWQgaW4gaW50ZWxfbW9jcy5j CisgKiBhbmQgYXJlIHByb2dyYW1tZWQgaW4gdGhlIGZpcnN0IGJhdGNoIGFmdGVyIHRoZSBjb250 ZXh0IGlzIGxvYWRlZAorICogKHdpdGggdGhlIGhhcmR3YXJlIHdvcmthcm91bmRzKS4gVGhpcyB3 aWxsIHRoZW4gbGV0IHRoZSB1c3VhbAorICogY29udGV4dCBoYW5kbGluZyBrZWVwIHRoZSBNT0NT IGluIHN0ZXAuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAiaTkxNV9k cnYuaCIKKworaW50IGludGVsX3Jjc19jb250ZXh0X2luaXRfbW9jcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSk7CisKKyNlbmRpZgotLSAKMi40LjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==