From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: [PATCH] drm/i915 : Added Programming of the MOCS Date: Thu, 4 Jun 2015 19:27:22 +0100 Message-ID: <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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 532456E1DE for ; Thu, 4 Jun 2015 11:27:27 -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 cmVnaXN0ZXJzCmNvbnNpc3RlbnQuCgpTaWduZWQtb2ZmLWJ5OiBQZXRlciBBbnRvaW5lIDxwZXRl ci5hbnRvaW5lQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAg ICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICAgOSArKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgIHwgIDY4ICsrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgfCAyNDEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaCB8IDEw MSArKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDQyMSBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbW9jcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bW9jcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBiN2RkZjQ4Li5jZDdiOTEwIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQpAQCAtMzYsNyArMzYsOCBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2Vy Lm8gXAogCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCiAJICBpbnRlbF9scmMubyBcCiAJICBpbnRl bF9yaW5nYnVmZmVyLm8gXAotCSAgaW50ZWxfdW5jb3JlLm8KKwkgIGludGVsX3VuY29yZS5vIFwK KwkgIGludGVsX21vY3MubwogCiAjIGF1dG9nZW5lcmF0ZWQgbnVsbCByZW5kZXIgc3RhdGUKIGk5 MTUteSArPSBpbnRlbF9yZW5kZXJzdGF0ZV9nZW42Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK aW5kZXggNzIxMzIyNC4uM2E0MzViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC03ODI5 LDQgKzc4MjksMTMgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5lIF9QQUxF VFRFX0EgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGEwMDApCiAjZGVm aW5lIF9QQUxFVFRFX0IgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGE4 MDApCiAKKy8qIE1PQ1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkgcmVnaXN0ZXJzICov CisjZGVmaW5lIEdFTjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUgQ29udHJvbCBi YXNlICovCisKKyNkZWZpbmUgR0VOOV9HRlhfTU9DU18wCQkoMHhjODAwKQkvKiBHcmFwaGljcyBN T0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X01GWDBfTU9DU18wCSgweGM5MDApCS8q IE1lZGlhIDAgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgxX01PQ1NfMAko MHhjQTAwKQkvKiBNZWRpYSAxIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5lIEdFTjlfVkVC T1hfTU9DU18wCSgweGNCMDApCS8qIFZpZGVvIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5l IEdFTjlfQkxUX01PQ1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2UgcmVnaXN0ZXIq LworCiAjZW5kaWYgLyogX0k5MTVfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmlu ZGV4IDlmNTQ4NWQuLmM4NzU1NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC0xMzUs NiArMTM1LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9pOTE1X2Ry bS5oPgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogCiAj ZGVmaW5lIEdFTjlfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjIgKiBQQUdFX1NJWkUpCiAjZGVm aW5lIEdFTjhfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjAgKiBQQUdFX1NJWkUpCkBAIC0xMzcw LDYgKzEzNzEsNjcgQEAgb3V0OgogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBpOTE1X2dlbV9w cm9ncmFtX21vY3MoKSAtIHByb2dyYW0gdGhlIE1PQ1MgcmVnaXN0ZXIuCisgKgorICogcmluZzoJ VGhlIHJpbmcgdGhhdCB0aGUgcHJvZ3JhbW1pbmcgYmF0Y2ggd2lsbCBiZSBydW4gaW4uCisgKiBj dHg6CQlUaGUgaW50ZWxfY29udGV4dCB0byBiZSB1c2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g d2lsbCBlbWl0IGEgYmF0Y2ggYnVmZmVyIHdpdGggdGhlIHZhbHVlcyByZXF1aXJlZCBmb3IKKyAq IHByb2dyYW1taW5nIHRoZSBNT0NTIHJlZ2lzdGVyIHZhbHVlcyBmb3IgYWxsIHRoZSBjdXJyZW5s eSBzdXBwb3J0ZWQKKyAqIHJpbmdzLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhl cndpc2UgdGhlIGVycm9yIHN0YXR1cy4KKyAqLworc3RhdGljIGludCBpOTE1X2dlbV9wcm9ncmFt X21vY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJCSAgc3RydWN0IGludGVsX2Nv bnRleHQgKmN0eCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN0cnVjdCBkcm1faTkxNV9tb2NzX3Rh YmxlIHQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKKwlzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmOwor CisJaWYgKGdldF9tb2NzX3NldHRpbmdzKGRldiwgJnQpKSB7CisJCXUzMiB0YWJsZV9zaXplOwor CisJCS8qCisJCSAqIE9LLiBGb3IgZWFjaCBzdXBwb3J0ZWQgcmluZzoKKwkJICogIHRhYmxlX3Np emUgKiAyIGR3b3JkcyBmb3IgZWFjaCBjb250cm9sX3ZhbHVlCisJCSAqICBwbHVzIHRhYmxlLzIg ZHdvcmRzIGZvciBsM2NjIHZhbHVlcy4KKwkJICoKKwkJICogIFBsdXMgMSBmb3IgdGhlIGxvYWQg Y29tbWFuZCBhbmQgMSBmb3IgdGhlIE5PT1AgcGVyIHJpbmcKKwkJICogIGFuZCB0aGUgbDNjYyBw cm9ncmFtbWluZy4KKwkJICovCisJCXRhYmxlX3NpemUgPSBHRU45X05VTV9NT0NTX1JJTkdTICog KCgyICogdC5zaXplKSArIDIpICsKKwkJCQl0LnNpemUgKyAyOworCQlyZXQgPSBpbnRlbF9sb2dp Y2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgY3R4LCB0YWJsZV9zaXplKTsKKwkJaWYgKHJldCkgewor CQkJRFJNX0VSUk9SKCJpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4gZmFpbGVkICVkXG4iLCByZXQp OworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIHByb2dyYW0gdGhlIGNvbnRyb2wgcmVnaXN0 ZXJzICovCisJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0dGWF9N T0NTXzApOworCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwgR0VOOV9NRlgw X01PQ1NfMCk7CisJCWVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X01G WDFfTU9DU18wKTsKKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlf VkVCT1hfTU9DU18wKTsKKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdF TjlfQkxUX01PQ1NfMCk7CisKKwkJLyogbm93IHByb2dyYW0gdGhlIGwzY2MgcmVnaXN0ZXJzICov CisJCWVtaXRfbW9jc19sM2NjX3RhYmxlKHJpbmdidWYsICZ0KTsKKworCQlpbnRlbF9sb2dpY2Fs X3JpbmdfYWR2YW5jZShyaW5nYnVmKTsKKworCQlEUk1fSU5GTygiTU9DUzogVGFibGUgc2V0IGlu IENvbnRleHRcbiIpOworCX0gZWxzZSB7CisJCURSTV9JTkZPKCJNT0NTOiBUYWJsZSBOb3Qgc3Vw cG9ydGVkIG9uIHBsYXRmb3JtXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKIHN0YXRp YyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs CiAJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQogewpAQCAtMTM3OSw2ICsxNDQx LDEyIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qCisJICogRmFpbGlu ZyB0byBwcm9ncmFtIHRoZSBNT0NTIGlzIG5vbi1mYXRhbC5UaGUgc3lzdGVtIHdpbGwgbm90CisJ ICogcnVuIGF0IHBlYWsgcGVyZm9ybWFuY2UuIFNvIGdlbmVyYXRlIGEgd2FybmluZyBhbmQgY2Fy cnkgb24uCisJICovCisJV0FSTl9PTihpOTE1X2dlbV9wcm9ncmFtX21vY3MocmluZywgY3R4KSAh PSAwKTsKKwogCXJldHVybiBpbnRlbF9scl9jb250ZXh0X3JlbmRlcl9zdGF0ZV9pbml0KHJpbmcs IGN0eCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4yMGM5NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbW9jcy5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0 IChjKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF CisgKiBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgUGV0ZXIgQW50b2luZSA8cGV0 ZXIuYW50b2luZUBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgImludGVsX21vY3MuaCIKKyNp bmNsdWRlICJpbnRlbF9scmMuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCisKKy8q CisgKiBNT0NTIHRhYmxlcworICoKKyAqIFRoZXNlIGFyZSB0aGUgTU9DUyB0YWJsZXMgdGhhdCBh cmUgcHJvZ3JhbW1lZCBhY3Jvc3MgYWxsIHRoZSByaW5ncy4KKyAqIFRoZSBjb250cm9sIHZhbHVl IGlzIHByb2dyYW1tZWQgdG8gYWxsIHRoZSByaW5ncyB0aGF0IHN1cHBvcnQgdGhlCisgKiBNT0NT IHJlZ2lzdGVycy4gV2hpbGUgdGhlIGwzY2NfdmFsdWVzIGFyZSBvbmx5IHByb2dyYW1tZWQgdG8g dGhlCisgKiBMTkNGQ01PQ1MwIC0gTE5DRkNNT0NTMzIgcmVnaXN0ZXJzLgorICoKKyAqIE5PVEU6 IFRoZXNlIHRhYmxlcyBNVVNUIHN0YXJ0IHdpdGggYmVpbmcgdW5jYWNoZWQgezAsMH0gYW5kIHRo ZQorICogICAgICAgdGhlIGxlbmd0aCBNVVNUIGJlIGxlc3MgdGhhbiA2MyBhcyB0aGUgbGFzdCB0 d28gcmVnaXN0ZXJzIGFyZQorICogICAgICAgcmVzZXJ2ZWQgYnkgdGhlIGhhcmR3YXJlLgorICov CitzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSBza3lsYWtlX21vY3NfdGFibGVbXSA9IHsKKwkg LyogezB4MDAwMDAwMDksIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKDEpIHwgTU9D U19UR1RfQ0FDSEUoMikgfCBNT0NTX0xSVU0oMCkgfAorCQlNT0NTX0FPTSgwKSB8IE1PQ1NfTEVD Q19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NTX1NDRigwKSksCisJ CShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoMSkpfSwK KwkgLyogezB4MDAwMDAwM2IsIDB4MDAzMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKDMpIHwg TU9DU19UR1RfQ0FDSEUoMikgfCBNT0NTX0xSVU0oMykgfAorCQlNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NTX1NDRigwKSks CisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoMykp fSwKKwkgLyogezB4MDAwMDAwMzksIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKDEp IHwgTU9DU19UR1RfQ0FDSEUoMikgfCBNT0NTX0xSVU0oMykgfAorCQlNT0NTX0FPTSgwKSB8IE1P Q1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NTX1NDRigw KSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFko MSkpfSwKKwkgLyogezB4MDAwMDAwMTcsIDB4MDAzMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZ KDMpIHwgTU9DU19UR1RfQ0FDSEUoMSkgfCBNT0NTX0xSVU0oMSkgfAorCQlNT0NTX0FPTSgwKSB8 IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NTX1ND RigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJ VFkoMykpfSwKKwkgLyogezB4MDAwMDAwMTcsIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklM SVRZKDMpIHwgTU9DU19UR1RfQ0FDSEUoMSkgfCBNT0NTX0xSVU0oMSkgfAorCQlNT0NTX0FPTSgw KSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlNT0NT X1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFC SUxJVFkoMSkpfSwKKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVB QklMSVRZKDEpIHwgTU9DU19UR1RfQ0FDSEUoMikgfCBNT0NTX0xSVU0oMSkgfAorCQlNT0NTX0FP TSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAorCQlN T0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNI RUFCSUxJVFkoMSkpfSwKKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KKwl7KE1PQ1NfQ0FD SEVBQklMSVRZKDMpIHwgTU9DU19UR1RfQ0FDSEUoMSkgfCBNT0NTX0xSVU0oMykgfAorCQlNT0NT X0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfAor CQlNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19D QUNIRUFCSUxJVFkoMykpfSwKKwkgLyogezB4MDAwMDAwM2IsIDB4MDAxMH0gKi8KKwl7KE1PQ1Nf Q0FDSEVBQklMSVRZKDMpIHwgTU9DU19UR1RfQ0FDSEUoMikgfCBNT0NTX0xSVU0oMykgfAorCQlN T0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkg fAorCQlNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19M M19DQUNIRUFCSUxJVFkoMSkpfSwKK307CisKK3N0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IGJy b3h0b25fbW9jc190YWJsZVtdID0geworCSAvKiB7MHgwMDAwMDAwMSwgMHgwMDEwfSAqLworCXso TU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgwKSB8IE1PQ1NfTFJVTSgwKSB8 CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BG TSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBN T0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAorCSAvKiB7MHgwMDAwNDAwMSwgMHgwMDEwfSAqLwor CXsoTU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgwKSB8IE1PQ1NfTFJVTSgw KSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9D X1BGTSgwKSB8CisJCU1PQ1NfU0NGKDEpKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAorCSAvKiB7MHgwMDAwNDAzYiwgMHgwMDMwfSAq LworCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1NfTFJV TSgzKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwg TU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDEpKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0Mo MCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgzKSl9LAorCSAvKiB7MHgwMDAwNDAxYiwgMHgwMDMw fSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1Nf TFJVTSgxKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDEpKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgzKSl9LAorCSAvKiB7MHgwMDAwMDAxNywgMHgw MDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNIRSgxKSB8IE1P Q1NfTFJVTSgxKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAorCSAvKiB7MHgwMDAwMDAxOSwg MHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgyKSB8 IE1PQ1NfTFJVTSgxKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwg TU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAorCSAvKiB7MHgwMDAwMDAz NywgMHgwMDMwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNIRSgx KSB8IE1PQ1NfTFJVTSgzKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDAp IHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgzKSl9LAorCSAvKiB7MHgwMDAw MDAzYiwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNI RSgyKSB8IE1PQ1NfTFJVTSgzKSB8CisJCU1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8 IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8CisJCU1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVND KDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LAorfTsKKworLyoq CisgKiBnZXRfbW9jc19zZXR0aW5ncworICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4g dGhlIHZhbHVlcyBvZiB0aGUgTU9DUyB0YWJsZSB0aGF0IG5lZWRzIHRvCisgKiBiZSBwcm9ncmFt bWVkIGZvciB0aGUgcGxhdGZvcm0uIEl0IHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgdGhhdCBuZWVk CisgKiB0byBiZSBwcm9ncmFtbWVkIGFuZCBpZiB0aGV5IG5lZWQgdG8gYmUgcHJvZ3JhbW1lZC4K KyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlcyBpcyBmYWxzZSB0aGVuIHRoZSByZWdpc3RlcnMg ZG8gbm90IG5lZWQgcHJvZ3JhbW1pbmcuCisgKi8KK2Jvb2wgZ2V0X21vY3Nfc2V0dGluZ3Moc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxl ICp0YWJsZSkgeworCWJvb2wJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAoSVNfU0tZTEFLRShkZXYp KSB7CisJCXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUoc2t5bGFrZV9tb2NzX3RhYmxlKTsKKwkJ dGFibGUtPnRhYmxlID0gc2t5bGFrZV9tb2NzX3RhYmxlOworCQlyZXN1bHQgPSB0cnVlOworCX0g ZWxzZSBpZiAoSVNfQlJPWFRPTihkZXYpKSB7CisJCXRhYmxlLT5zaXplICA9IEFSUkFZX1NJWkUo YnJveHRvbl9tb2NzX3RhYmxlKTsKKwkJdGFibGUtPnRhYmxlID0gYnJveHRvbl9tb2NzX3RhYmxl OworCQlyZXN1bHQgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIFBsYXRmb3JtIHRoYXQgc2hvdWxk IGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMgbm90ICovCisJCVdBUk5fT04oSU5URUxfSU5GTyhkZXYp LT5nZW4gPj0gOSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBlbWl0X21v Y3NfY29udHJvbF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCisgKiBAcmlu Z2J1ZjoJRFJNIGRldmljZS4KKyAqIEB0YWJsZToJVGhlIHZhbHVlcyB0byBwcm9ncmFtIGludG8g dGhlIGNvbnRyb2wgcmVncy4KKyAqIEByZWdfYmFzZToJVGhlIGJhc2UgZm9yIHRoZSBFbmdpbmUg dGhhdCBuZWVkcyB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5 IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZCBmb3IgdGhlCisgKiBnaXZlbiB0 YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4KKyAqCisgKiBSZXR1cm46IE5vdGhp bmcuCisgKi8KK3ZvaWQgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmdidWYsCisJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJs ZSwKKwkJCQkgICAgdTMyIHJlZ19iYXNlKQoreworCXVuc2lnbmVkIGludCBpbmRleDsKKworCWlu dGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShH RU45X05VTV9NT0NTX0VOVFJJRVMpKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxl LT5zaXplOyBpbmRleCsrKSB7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJl Z19iYXNlICsgKGluZGV4ICogNCkpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVm LAorCQkJCQl0YWJsZS0+dGFibGVbaW5kZXhdLmNvbnRyb2xfdmFsdWUpOworCX0KKworCS8qCisJ ICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2FjaGVkLiBUaGVzZSBlbnRy aWVzIGFyZQorCSAqIG9mZmljaWFsbHkgdW5kZWZpbmVkIGFuZCBubyBjb250YWN0IGlzIGdpdmVu IGZvciB0aGUgY29udGVudHMgYW5kCisJICogc2V0dGluZ3MgaXMgZ2l2ZW4gZm9yIHRoZXNlIGVu dHJpZXMuCisJICoKKwkgKiBFbnRyeSAwIGluIHRoZSB0YWJsZSBpcyB1bmNhY2hlZCAtIHNvIHdl IGFyZSBqdXN0IHdyaXR0ZW4gdGhhdAorCSAqIHZhbHVlIHRvIGFsbCB0aGUgdXNlZCBlbnRyaWVz LgorCSAqLworCWZvciAoOyBpbmRleCA8IEdFTjlfTlVNX01PQ1NfRU5UUklFUzsgaW5kZXgrKykg eworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCByZWdfYmFzZSArIChpbmRleCAq IDQpKTsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdGFibGUtPnRhYmxlWzBd LmNvbnRyb2xfdmFsdWUpOworCX0KKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYs IE1JX05PT1ApOworfQorCisvKioKKyAqIGVtaXRfbW9jc19sM2NjX3RhYmxlKCkgLSBlbWl0IHRo ZSBtb2NzIGNvbnRyb2wgdGFibGUKKyAqIEByaW5nYnVmOglEUk0gZGV2aWNlLgorICogQHRhYmxl OglUaGUgdmFsdWVzIHRvIHByb2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZCBm b3IgdGhlCisgKiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gVGhp cyByZWdpc3RlciBzZXQgaXMgIHByb2dyYW1tZWQKKyAqIGluIHBhaXJzLgorICoKKyAqIFJldHVy bjogTm90aGluZy4KKyAqLwordm9pZCBlbWl0X21vY3NfbDNjY190YWJsZShzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJCSBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFi bGUpIHsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGluZGV4OworCisJaW50 ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKKwkJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShH RU45X05VTV9NT0NTX0VOVFJJRVMvMikpOworCisJZm9yIChpbmRleCA9IDAsIGNvdW50ID0gMDsg aW5kZXggPCB0YWJsZS0+c2l6ZS8yOyBpbmRleCsrLCBjb3VudCArPSAyKSB7CisJCXUzMiB2YWx1 ZSA9ICh0YWJsZS0+dGFibGVbY291bnRdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKKwkJCSgodGFi bGUtPnRhYmxlW2NvdW50ICsgMV0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCisJCWlu dGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIChpbmRleCAq IDQpKTsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdmFsdWUpOworCX0KKwor CS8qCisJICogTm93IHNldCB0aGUgcmVzdCBvZiB0aGUgdGFibGUgdG8gdW5jYWNoZWQgLSB1c2Ug ZW50cnkgMCBhcyB0aGlzCisJICogd2lsbCBiZSB1bmNhY2hlZC4gTGVhdmUgdGhlIGxhc3QgcGFp ciBpbml0aWFsaXNlZCBhcyByZXNlcnZlZCBieQorCSAqIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlm b3IgKDsgaW5kZXggPCBHRU45X05VTV9NT0NTX0VOVFJJRVMvMjsgaW5kZXgrKykgeworCQl1MzIg dmFsdWUgPSAodGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKKwkJCSgodGFi bGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKKworCQlpbnRlbF9sb2dp Y2FsX3JpbmdfZW1pdChyaW5nYnVmLCBHRU45X0xOQ0ZDTU9DUzAgKyAoaW5kZXggKiA0KSk7CisJ CWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsKKwl9CisKKwlpbnRlbF9s b2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBNSV9OT09QKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbW9jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmZhMTUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmgKQEAgLTAs MCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQXV0 aG9yczoKKyAqICAgIFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgorICov CisKKyNpZm5kZWYgSU5URUxfTU9DU19ICisjZGVmaW5lIElOVEVMX01PQ1NfSAorCisvKioKKyAq IERPQzogTWVtb3J5IE9iamVjdHMgQ29udHJvbCBTdGF0ZSAoTU9DUykKKyAqCisgKiBNb3RpdmF0 aW9uOgorICogSW4gcHJldmlvdXMgR2VucyB0aGUgTU9DUyBzZXR0aW5ncyB3YXMgYSB2YWx1ZSB0 aGF0IHdhcyBzZXQgYnkgdXNlciBsYW5kIGFzCisgKiBwYXJ0IG9mIHRoZSBiYXRjaC4gSW4gR2Vu OSB0aGlzIGhhcyBjaGFuZ2VkIHRvIGJlIGEgc2luZ2xlIHRhYmxlIChwZXIgcmluZykKKyAqIHRo YXQgYWxsIGJhdGNoZXMgbm93IHJlZmVyZW5jZSBieSBpbmRleCBpbnN0ZWFkIG9mIHByb2dyYW1t aW5nIHRoZSBNT0NTCisgKiBkaXJlY3RseS4KKyAqCisgKiBUaGUgb25lIHdyaW5rbGUgaW4gdGhp cyBpcyB0aGF0IG9ubHkgUEFSVCBvZiB0aGUgTU9DUyB0YWJsZXMgYXJlIGluY2x1ZGVkCisgKiBp biBjb250ZXh0IChUaGUgR0ZYX01PQ1NfMCAtIEdGWF9NT0NTXzY0IGFuZCB0aGUgTE5DRkNNT0NT MCAtIExOQ0ZDTU9DUzMyCisgKiByZWdpc3RlcnMpLiBUaGUgcmVzdCBhcmUgbm90ICh0aGUgc2V0 dGluZ3MgZm9yIHRoZSBvdGhlciByaW5ncykuCisgKgorICogVGhpcyB0YWJsZSBuZWVkcyB0byBi ZSBzZXQgYXQgc3lzdGVtIHN0YXJ0LXVwIGJlY2F1c2UgdGhlIHdheSB0aGUgdGFibGUKKyAqIGlu dGVyYWN0cyB3aXRoIHRoZSBjb250ZXh0cyBhbmQgdGhlIEdtbUxpYiBpbnRlcmZhY2UuCisgKgor ICoKKyAqIEltcGxlbWVudGF0aW9uOgorICoKKyAqIFRoZSB0YWJsZSBpcyBwcm9ncmFtbWVkIG9u IGEgcGxhdGZvcm0gYmFzaXMgZnJvbSBhIHRhYmxlIHRoYXQgaXMgZ2VuZXJhdGVkCisgKiBmcm9t IHRoZSBvbmUgdGhhdCBoYXMgYmVlbiBhZ3JlZWQgYnkgdGhlIGRpZmZlcmVudCByZXNwb25zaWJs ZSBwYXJ0aWVzLiBUaGlzCisgKiB0YWJsZXMgKG9uZSBwZXIgc3VwcG9ydGVkIHBsYXRmb3JtKSBp cyBkZWZpbmVkIGluIGludGVsX21vY3MuYyBhbmQgaXMKKyAqIHByb2dyYW1tZWQgaW4gdGhlIGZp cnN0IGJhdGNoIGFmdGVyIHRoZSBjb250ZXh0IGlzIGxvYWRlZCAod2l0aCB0aGUgaGFyZHdhcmUK KyAqIHdvcmthcm91bmRzKS4gVGhpcyB3aWxsIHRoZW4gbGV0IHRoZSB1c3VhbCBjb250ZXh0IGhh bmRsaW5nIGtlZXAgdGhlIE1PQ1MgaW4KKyAqIHN0ZXAuCisgKi8KKworI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxl cyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLworI2RlZmluZQlNT0NTX0NBQ0hFQUJJTElU WSh2YWx1ZSkJKCh2YWx1ZSAmIDB4MDMpIDw8IDApCisjZGVmaW5lCU1PQ1NfVEdUX0NBQ0hFKHZh bHVlKQkJKCh2YWx1ZSAmIDB4MDMpIDw8IDIpCisjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJCSgo dmFsdWUgJiAweDAzKSA8PCA0KQorI2RlZmluZQlNT0NTX0FPTSh2YWx1ZSkJCQkoKHZhbHVlICYg MHgwMSkgPDwgNikKKyNkZWZpbmUJTU9DU19MRUNDX0VTQyh2YWx1ZSkJCSgodmFsdWUgJiAweDAx KSA8PCA3KQorI2RlZmluZQlNT0NTX0xFQ0NfU0NDKHZhbHVlKQkJKCh2YWx1ZSAmIDB4MDcpIDw8 IDgpCisjZGVmaW5lCU1PQ19QRk0odmFsdWUpCQkJKCh2YWx1ZSAmIDB4MDcpIDw8IDExKQorI2Rl ZmluZQlNT0NTX1NDRih2YWx1ZSkJCQkoKHZhbHVlICYgMHgwMSkgPDwgMTQpCisKKy8qIERlZmlu ZXMgZm9yIHRoZSB0YWJsZXMgKExOQ0ZNT0NTMCAtIExOQ0ZNT0NTMzEpIC0gdHdvIGVudHJpZXMg cGVyIHdvcmQgKi8KKyNkZWZpbmUJTU9DU19FU0ModmFsdWUpCQkJKCh2YWx1ZSAmIDB4MDEpIDw8 IDApCisjZGVmaW5lCU1PQ1NfU0NDKHZhbHVlKQkJCSgodmFsdWUgJiAweDA3KSA8PCAxKQorI2Rl ZmluZQlNT0NTX0wzX0NBQ0hFQUJJTElUWSh2YWx1ZSkJKCh2YWx1ZSAmIDB4MDMpIDw8IDQpCisK Ky8qIEhlbHBlciBkZWZpbmVzICovCisjZGVmaW5lIEdFTjlfTlVNX01PQ1NfUklOR1MJKDUpCS8q IE51bWJlciBvZiBtb2NzIGVuZ2luZXMgdG8gcHJvZ3JhbSAqLworI2RlZmluZSBHRU45X05VTV9N T0NTX0VOVFJJRVMJKDYzKQkvKiA2MyBvdXQgb2YgNjQgLSA2NCBpcyByc3ZyZCAqLworCisvKiBz dHJ1Y3R1cmVzIHJlcXVpcmVkICovCitzdHJ1Y3QgZHJtX2k5MTVfbW9jc19lbnRyeSB7CisJdTMy CWNvbnRyb2xfdmFsdWU7CisJdTE2CWwzY2NfdmFsdWU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVf bW9jc190YWJsZSB7CisJdTMyCQkJCQlzaXplOworCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9tb2Nz X2VudHJ5CSp0YWJsZTsKK307CisKK3ZvaWQgZW1pdF9tb2NzX2wzY2NfdGFibGUoc3RydWN0IGlu dGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCisJCQkgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUg KnRhYmxlKTsKKwordm9pZCBlbWl0X21vY3NfY29udHJvbF90YWJsZShzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZ2J1ZiwKKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUs CisJCQkJdTMyIHJlZ19iYXNlKTsKKworYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxl KTsKKworI2VuZGlmCisKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=