From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: [PATCH v6] drm/i915 : Added Programming of the MOCS Date: Tue, 30 Jun 2015 15:59:08 +0100 Message-ID: <1435676348-5282-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 mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 20B376E2EC for ; Tue, 30 Jun 2015 07:59:22 -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 IFZldHRlcikKdjU6Ci0gQ2hhbmdlZCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLiAoQ2hyaXMgV2ls c29uKQp2NjoKLSByZS1iYXNlZAotIEFkZGVkIE1lc2EgdGFibGUgZW50cnkgKHNreWxha2UgJiBi cm94dG9uKSAoRnJhbmNpc2NvIEplcmV6KQotIFRpZGllZCB1cCB0aGUgcmVhZGFiaWxpdHkgZGVm aW5lcyAoRnJhbmNpc2NvIEplcmV6KQotIE5VTUJFUiBvZiBlbnRyaWVzIGRlZmluZXMgd3Jvbmcu IChKaW0gQmlzaCkKLSBBZGRlZCBjb21tZW50cyB0byBjbGVhciB1cCB0aGUgbWVhbmluZyBvZiB0 aGUgdGFibGVzIChKaW0gQmlzaCkKClNpZ25lZC1vZmYtYnk6IFBldGVyIEFudG9pbmUgPHBldGVy LmFudG9pbmVAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAg ICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgfCAgIDkgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgIHwgIDExICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuaCAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9j cy5jIHwgMzgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmggfCAgNjAgKysrKysrCiA2IGZpbGVzIGNoYW5nZWQs IDQ2MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZGUy MTk2NS4uZTUyZTAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTM2LDYgKzM2LDcgQEAgaTkx NS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXAogCSAg aW50ZWxfaG90cGx1Zy5vIFwKIAkgIGludGVsX2xyYy5vIFwKKwkgIGludGVsX21vY3MubyBcCiAJ ICBpbnRlbF9yaW5nYnVmZmVyLm8gXAogCSAgaW50ZWxfdW5jb3JlLm8KIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKaW5kZXggYWM5ODVjNS4uZWY4YmEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o CkBAIC03ODYxLDQgKzc4NjEsMTMgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVm aW5lIF9QQUxFVFRFX0EgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGEw MDApCiAjZGVmaW5lIF9QQUxFVFRFX0IgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZz ZXQgKyAweGE4MDApCiAKKy8qIE1PQ1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkgcmVn aXN0ZXJzICovCisjZGVmaW5lIEdFTjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUg Q29udHJvbCBiYXNlICovCisKKyNkZWZpbmUgR0VOOV9HRlhfTU9DU18wCQkoMHhjODAwKQkvKiBH cmFwaGljcyBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X01GWDBfTU9DU18wCSgw eGM5MDApCS8qIE1lZGlhIDAgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgx X01PQ1NfMAkoMHhjQTAwKQkvKiBNZWRpYSAxIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5l IEdFTjlfVkVCT1hfTU9DU18wCSgweGNCMDApCS8qIFZpZGVvIE1PQ1MgYmFzZSByZWdpc3Rlciov CisjZGVmaW5lIEdFTjlfQkxUX01PQ1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2Ug cmVnaXN0ZXIqLworCiAjZW5kaWYgLyogX0k5MTVfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCmluZGV4IGU4N2Q3NGMuLmE3MjdmNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j CkBAIC0xMzUsNiArMTM1LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRy bS9pOTE1X2RybS5oPgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfbW9j cy5oIgogCiAjZGVmaW5lIEdFTjlfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjIgKiBQQUdFX1NJ WkUpCiAjZGVmaW5lIEdFTjhfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjAgKiBQQUdFX1NJWkUp CkBAIC03OTIsOCArNzkzLDcgQEAgc3RhdGljIGludCBsb2dpY2FsX3JpbmdfcHJlcGFyZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IGJ5dGVzKQogICoKICAqIFJldHVybjog bm9uLXplcm8gaWYgdGhlIHJpbmdidWZmZXIgaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gdG8u CiAgKi8KLXN0YXRpYyBpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLAotCQkJCSAgICBpbnQgbnVtX2R3b3JkcykKK2ludCBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBu dW1fZHdvcmRzKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKIAlpbnQg cmV0OwpAQCAtMTY1OCw2ICsxNjU4LDEzIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250 ZXh0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogCWlmIChyZXQpCiAJCXJldHVy biByZXQ7CiAKKwkvKgorCSAqIEZhaWxpbmcgdG8gcHJvZ3JhbSB0aGUgTU9DUyBpcyBub24tZmF0 YWwuVGhlIHN5c3RlbSB3aWxsIG5vdAorCSAqIHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBTbyBn ZW5lcmF0ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5IG9uLgorCSAqLworCWlmIChpbnRlbF9yY3NfY29u dGV4dF9pbml0X21vY3MocmVxKSAhPSAwKQorCQlEUk1fRVJST1IoIk1PQ1MgZmFpbGVkIHRvIHBy b2dyYW06IGV4cGVjdCBwZXJmb3JtYW5jZSBpc3N1ZXMuIik7CisKIAlyZXR1cm4gaW50ZWxfbHJf Y29udGV4dF9yZW5kZXJfc3RhdGVfaW5pdChyZXEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5oCmluZGV4IGY1OTk0MGEuLjE5Y2M4ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCkBA IC00MSw2ICs0MSw3IEBAIGludCBpbnRlbF9sb2dpY2FsX3JpbmdfcmVzZXJ2ZV9zcGFjZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpOwogdm9pZCBpbnRlbF9sb2dpY2FsX3Jp bmdfc3RvcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKIHZvaWQgaW50ZWxfbG9naWNh bF9yaW5nX2NsZWFudXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CiBpbnQgaW50ZWxf bG9naWNhbF9yaW5nc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGludGVsX2xv Z2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IG51 bV9kd29yZHMpOwogCiBpbnQgbG9naWNhbF9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9tb2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhMTE3NwotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwpAQCAtMCwwICsxLDM4MSBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImludGVs X21vY3MuaCIKKyNpbmNsdWRlICJpbnRlbF9scmMuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVm ZmVyLmgiCisKKy8qIHN0cnVjdHVyZXMgcmVxdWlyZWQgKi8KK3N0cnVjdCBkcm1faTkxNV9tb2Nz X2VudHJ5IHsKKwl1MzIJY29udHJvbF92YWx1ZTsKKwl1MTYJbDNjY192YWx1ZTsKK307CisKK3N0 cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlIHsKKwl1MzIJCQkJCXNpemU7CisJY29uc3Qgc3RydWN0 IGRybV9pOTE1X21vY3NfZW50cnkJKnRhYmxlOworfTsKKworLyogRGVmaW5lcyBmb3IgdGhlIHRh YmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLworI2RlZmluZQlNT0NTX0NBQ0hFQUJJ TElUWSh2YWx1ZSkJKHZhbHVlIDw8IDApCisjZGVmaW5lCU1PQ1NfVEdUX0NBQ0hFKHZhbHVlKQkJ KHZhbHVlIDw8IDIpCisjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJCSh2YWx1ZSA8PCA0KQorI2Rl ZmluZQlNT0NTX0FPTSh2YWx1ZSkJCQkodmFsdWUgPDwgNikKKyNkZWZpbmUJTU9DU19MRUNDX0VT Qyh2YWx1ZSkJCSh2YWx1ZSA8PCA3KQorI2RlZmluZQlNT0NTX0xFQ0NfU0NDKHZhbHVlKQkJKHZh bHVlIDw8IDgpCisjZGVmaW5lCU1PQ19QRk0odmFsdWUpCQkJKHZhbHVlIDw8IDExKQorI2RlZmlu ZQlNT0NTX1NDRih2YWx1ZSkJCQkodmFsdWUgPDwgMTQpCisKKy8qIERlZmluZXMgZm9yIHRoZSB0 YWJsZXMgKExOQ0ZNT0NTMCAtIExOQ0ZNT0NTMzEpIC0gdHdvIGVudHJpZXMgcGVyIHdvcmQgKi8K KyNkZWZpbmUJTU9DU19FU0ModmFsdWUpCQkJKHZhbHVlIDw8IDApCisjZGVmaW5lCU1PQ1NfU0ND KHZhbHVlKQkJCSh2YWx1ZSA8PCAxKQorI2RlZmluZQlNT0NTX0wzX0NBQ0hFQUJJTElUWSh2YWx1 ZSkJKHZhbHVlIDw8IDQpCisKKy8qIEhlbHBlciBkZWZpbmVzICovCisjZGVmaW5lIEdFTjlfTlVN X01PQ1NfUklOR1MJKDUpCS8qIE51bWJlciBvZiBtb2NzIGVuZ2luZXMgdG8gcHJvZ3JhbSAqLwor I2RlZmluZSBHRU45X05VTV9NT0NTX0VOVFJJRVMJKDYyKQkvKiA2MiBvdXQgb2YgNjQgLSA2MyAm IDY0IGFyZSByc3ZyZCAqLworCisvKiBFRFJBTSBDYWNoaW5nIG9wdGlvbnMgKi8KKyNkZWZpbmUg RURSQU1fUEFHRVRBQkxFCQkoMCkKKyNkZWZpbmUgRURSQU1fVUMJCSgxKQorI2RlZmluZSBFRFJB TV9XVAkJKDIpCisjZGVmaW5lIEVEUkFNX1dCCQkoMykKKworLyogTDMgQ2FjaGluZyBvcHRpb25z ICovCisjZGVmaW5lIEwzX0RJUkVDVAkJKDApCisjZGVmaW5lIEwzX1VDCQkJKDEpCisjZGVmaW5l IEwzX1dUCQkJKDIpCisjZGVmaW5lIEwzX1dCCQkJKDMpCisKKy8qIHRhcmdldCBjYWNoZSAqLwor I2RlZmluZSBFTExDCQkJKDApCisjZGVmaW5lIExMQwkJCSgxKQorI2RlZmluZSBMTENfRUxMQwkJ KDIpCisKKy8qCisgKiBNT0NTIHRhYmxlcworICoKKyAqIFRoZXNlIGFyZSB0aGUgTU9DUyB0YWJs ZXMgdGhhdCBhcmUgcHJvZ3JhbW1lZCBhY3Jvc3MgYWxsIHRoZSByaW5ncy4KKyAqIFRoZSBjb250 cm9sIHZhbHVlIGlzIHByb2dyYW1tZWQgdG8gYWxsIHRoZSByaW5ncyB0aGF0IHN1cHBvcnQgdGhl CisgKiBNT0NTIHJlZ2lzdGVycy4gV2hpbGUgdGhlIGwzY2NfdmFsdWVzIGFyZSBvbmx5IHByb2dy YW1tZWQgdG8gdGhlCisgKiBMTkNGQ01PQ1MwIC0gTE5DRkNNT0NTMzIgcmVnaXN0ZXJzLgorICoK KyAqIFRoZXNlIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIGNyb3NzIHBsYXRmb3JtLiBTb21lIG9mIHRo ZSBmaWVsZHMgYXJlIG5vdAorICogYXBwbGljYWJsZSB0byBhbGwgcGxhdGZvcm1zLgorICoKKyAq IE5PVEU6IFRoZXNlIHRhYmxlcyBNVVNUIHN0YXJ0IHdpdGggYmVpbmcgdW5jYWNoZWQgYW5kIHRo ZSBsZW5ndGggTVVTVCBiZQorICogICAgICAgbGVzcyB0aGFuIDYzIGFzIHRoZSBsYXN0IHR3byBy ZWdpc3RlcnMgYXJlIHJlc2VydmVkIGJ5IHRoZSBoYXJkd2FyZS4KKyAqLworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0geworCSAv KiB7MHgwMDAwMDAwOSwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMp IHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00o MCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9D U19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVB QklMSVRZKEwzX1VDKSl9LAorCSAvKiB7MHgwMDAwMDAzYiwgMHgwMDMwfSAqLworCXsoTU9DU19D QUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9D U19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkg fAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAorCSAvKiB7MHgwMDAwMDAzOSwg MHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FD SEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQko TU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9 LAorCSAvKiB7MHgwMDAwMDAxNywgMHgwMDMwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURS QU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8CisJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9N KDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1P Q1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hF QUJJTElUWShMM19XQikpfSwKKwkgLyogezB4MDAwMDAwMTcsIDB4MDAxMH0gKi8KKwl7KE1PQ1Nf Q0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAorCQlNT0NTX0xS VU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJ CU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDE5LCAweDAw MTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShM TENfRUxMQykgfAorCQlNT0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NT X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJ IC8qIHsweDAwMDAwMDM3LCAweDAwMzB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9X QikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkg fCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19T Q0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklM SVRZKEwzX1dCKSl9LAorCSAvKiB7MHgwMDAwMDAzNywgMHgwMDEwfSAqLworCXsoTU9DU19DQUNI RUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8CisJCU1PQ1NfTFJVTSgz KSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9D X1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBN T0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKKwkgLyogezB4MDAwMDAwM2IsIDB4MDAxMH0g Ki8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19F TExDKSB8CisJCU1PQ1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8 IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVND KDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykpfSwKKwkgLyog ezB4MDAwMDAwMzgsIDB4MDAzMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1BBR0VU QUJMRSkgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NT X0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkg fCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19D QUNIRUFCSUxJVFkoTDNfV0IpKX0sCit9OworCisvKiBOT1RFOiB0aGUgTU9DU19UR1RfQ0FDSEUg aXMgbm90IHVzZWQgb24gQnJveHRvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9t b2NzX2VudHJ5IGJyb3h0b25fbW9jc190YWJsZVtdID0geworCSAvKiB7MHgwMDAwMDAwMSwgMHgw MDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUo RUxMQykgfAorCQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkg fCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VT QygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8q IHsweDAwMDAwMDA1LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykg fCBNT0NTX1RHVF9DQUNIRShMTEMpIHwKKwkJTU9DU19MUlVNKDApIHwgTU9DU19BT00oMCkgfCBN T0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0Yo MCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZ KEwzX1VDKSl9LAorCSAvKiB7MHgwMDAwMDAwNSwgMHgwMDMwfSAqLworCXsoTU9DU19DQUNIRUFC SUxJVFkoRURSQU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8CisJCU1PQ1NfTFJVTSgwKSB8 IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BG TSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwKKwkgLyogezB4MDAwMDAwMTcsIDB4MDAzMH0gKi8K Kwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAor CQlNT0NTX0xSVU0oMSkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1ND QygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCisJIC8qIHsweDAwMDAw MDE3LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RH VF9DQUNIRShMTEMpIHwKKwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQko TU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9 LAorCSAvKiB7MHgwMDAwMDAxOSwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURS QU1fVUMpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDEpIHwgTU9D U19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDAp IHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNf Q0FDSEVBQklMSVRZKEwzX1VDKSl9LAorCSAvKiB7MHgwMDAwMDAzNywgMHgwMDMwfSAqLworCXso TU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDKSB8CisJCU1P Q1NfTFJVTSgzKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDAp IHwKKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19XQikpfSwKKwkgLyogezB4MDAwMDAwMzcs IDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NB Q0hFKExMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NT X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJ IC8qIHsweDAwMDAwMDNiLCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9X QikgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FP TSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBN T0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNI RUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDM4LCAweDAwMzB9ICovCisJeyhNT0NT X0NBQ0hFQUJJTElUWShFRFJBTV9QQUdFVEFCTEUpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMp IHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAorCit9OworCisv KioKKyAqIGdldF9tb2NzX3NldHRpbmdzCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVy biB0aGUgdmFsdWVzIG9mIHRoZSBNT0NTIHRhYmxlIHRoYXQgbmVlZHMgdG8KKyAqIGJlIHByb2dy YW1tZWQgZm9yIHRoZSBwbGF0Zm9ybS4gSXQgd2lsbCByZXR1cm4gdGhlIHZhbHVlcyB0aGF0IG5l ZWQKKyAqIHRvIGJlIHByb2dyYW1tZWQgYW5kIGlmIHRoZXkgbmVlZCB0byBiZSBwcm9ncmFtbWVk LgorICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWVzIGlzIGZhbHNlIHRoZW4gdGhlIHJlZ2lzdGVy cyBkbyBub3QgbmVlZCBwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIGJvb2wgZ2V0X21vY3Nfc2V0 dGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190 YWJsZSAqdGFibGUpIHsKKwlib29sCXJlc3VsdCA9IGZhbHNlOworCisJaWYgKElTX1NLWUxBS0Uo ZGV2KSkgeworCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKHNreWxha2VfbW9jc190YWJsZSk7 CisJCXRhYmxlLT50YWJsZSA9IHNreWxha2VfbW9jc190YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsK Kwl9IGVsc2UgaWYgKElTX0JST1hUT04oZGV2KSkgeworCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9T SVpFKGJyb3h0b25fbW9jc190YWJsZSk7CisJCXRhYmxlLT50YWJsZSA9IGJyb3h0b25fbW9jc190 YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQkvKiBQbGF0Zm9ybSB0aGF0IHNo b3VsZCBoYXZlIGEgTU9DUyB0YWJsZSBkb2VzIG5vdCAqLworCQlXQVJOX09OKElOVEVMX0lORk8o ZGV2KS0+Z2VuID49IDkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZW1p dF9tb2NzX2NvbnRyb2xfdGFibGUoKSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0YWJsZQorICog QHJpbmdidWY6CURSTSBkZXZpY2UuCisgKiBAdGFibGU6CVRoZSB2YWx1ZXMgdG8gcHJvZ3JhbSBp bnRvIHRoZSBjb250cm9sIHJlZ3MuCisgKiBAcmVnX2Jhc2U6CVRoZSBiYXNlIGZvciB0aGUgRW5n aW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNp bXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9yIHRoZQorICogZ2l2 ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuCisgKgorICogUmV0dXJuOiBO b3RoaW5nLgorICovCitzdGF0aWMgdm9pZCBlbWl0X21vY3NfY29udHJvbF90YWJsZShzdHJ1Y3Qg aW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJCQkgICAgc3RydWN0IGRybV9pOTE1X21vY3Nf dGFibGUgKnRhYmxlLAorCQkJCSAgICB1MzIgcmVnX2Jhc2UpCit7CisJdW5zaWduZWQgaW50IGlu ZGV4OworCisJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKKwkJCU1JX0xPQURfUkVH SVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUykpOworCisJZm9yIChpbmRleCA9IDA7IGlu ZGV4IDwgdGFibGUtPnNpemU7IGluZGV4KyspIHsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwgcmVnX2Jhc2UgKyAoaW5kZXggKiA0KSk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19l bWl0KHJpbmdidWYsCisJCQkJCXRhYmxlLT50YWJsZVtpbmRleF0uY29udHJvbF92YWx1ZSk7CisJ fQorCisJLyoKKwkgKiBPaywgbm93IHNldCB0aGUgdW51c2VkIGVudHJpZXMgdG8gdW5jYWNoZWQu IFRoZXNlIGVudHJpZXMgYXJlCisJICogb2ZmaWNpYWxseSB1bmRlZmluZWQgYW5kIG5vIGNvbnRh Y3QgaXMgZ2l2ZW4gZm9yIHRoZSBjb250ZW50cyBhbmQKKwkgKiBzZXR0aW5ncyBpcyBnaXZlbiBm b3IgdGhlc2UgZW50cmllcy4KKwkgKgorCSAqIEVudHJ5IDAgaW4gdGhlIHRhYmxlIGlzIHVuY2Fj aGVkIC0gc28gd2UgYXJlIGp1c3Qgd3JpdHRlbiB0aGF0CisJICogdmFsdWUgdG8gYWxsIHRoZSB1 c2VkIGVudHJpZXMuCisJICovCisJZm9yICg7IGluZGV4IDwgR0VOOV9OVU1fTU9DU19FTlRSSUVT OyBpbmRleCsrKSB7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJlZ19iYXNl ICsgKGluZGV4ICogNCkpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB0YWJs ZS0+dGFibGVbMF0uY29udHJvbF92YWx1ZSk7CisJfQorCisJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwgTUlfTk9PUCk7Cit9CisKKy8qKgorICogZW1pdF9tb2NzX2wzY2NfdGFibGUo KSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0YWJsZQorICogQHJpbmdidWY6CURSTSBkZXZpY2Uu CisgKiBAdGFibGU6CVRoZSB2YWx1ZXMgdG8gcHJvZ3JhbSBpbnRvIHRoZSBjb250cm9sIHJlZ3Mu CisgKgorICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lN TSBjb21tYW5kIGZvciB0aGUKKyAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBh ZGRyZXNzLiBUaGlzIHJlZ2lzdGVyIHNldCBpcyAgcHJvZ3JhbW1lZAorICogaW4gcGFpcnMuCisg KgorICogUmV0dXJuOiBOb3RoaW5nLgorICovCitzdGF0aWMgdm9pZCBlbWl0X21vY3NfbDNjY190 YWJsZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJCSBzdHJ1Y3QgZHJtX2k5 MTVfbW9jc190YWJsZSAqdGFibGUpIHsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQg aW50IGk7CisJdTMyIHZhbHVlOworCXUzMiBmaWxsZXIgPSAodGFibGUtPnRhYmxlWzBdLmwzY2Nf dmFsdWUgJiAweGZmZmYpIHwKKwkJCSgodGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZm ZmYpIDw8IDE2KTsKKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQlNSV9M T0FEX1JFR0lTVEVSX0lNTShHRU45X05VTV9NT0NTX0VOVFJJRVMgLyAyKSk7CisKKwlmb3IgKGkg PSAwLCBjb3VudCA9IDA7IGkgPCB0YWJsZS0+c2l6ZSAvIDI7IGkrKywgY291bnQgKz0gMikgewor CQl2YWx1ZSA9ICh0YWJsZS0+dGFibGVbY291bnRdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKKwkJ CSgodGFibGUtPnRhYmxlW2NvdW50ICsgMV0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOwor CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIChp ICogNCkpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7CisJfQor CisJaWYgKHRhYmxlLT5zaXplICYgMHgwMSkgeworCQkvKiBPZGQgdGFibGUgc2l6ZSAtIDEgbGVm dCBvdmVyICovCisJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4 ZmZmZikgfAorCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYp OworCX0gZWxzZQorCQl2YWx1ZSA9IGZpbGxlcjsKKworCS8qCisJICogTm93IHNldCB0aGUgcmVz dCBvZiB0aGUgdGFibGUgdG8gdW5jYWNoZWQgLSB1c2UgZW50cnkgMCBhcyB0aGlzCisJICogd2ls bCBiZSB1bmNhY2hlZC4gTGVhdmUgdGhlIGxhc3QgcGFpciBhcyBpbml0aWFsaXNlZCBhcyB0aGV5 IGFyZQorCSAqIHJlc2VydmVkIGJ5IHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlmb3IgKDsgaSA8IChH RU45X05VTV9NT0NTX0VOVFJJRVMgLyAyKTsgaSsrKSB7CisJCWludGVsX2xvZ2ljYWxfcmluZ19l bWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIChpICogNCkpOworCQlpbnRlbF9sb2dpY2Fs X3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7CisKKwkJdmFsdWUgPSBmaWxsZXI7CisJfQorCisJ aW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgTUlfTk9PUCk7Cit9CisKKy8qCisgKiBp bnRlbF9yY3NfY29udGV4dF9pbml0X21vY3MoKSAtIHByb2dyYW0gdGhlIE1PQ1MgcmVnaXN0ZXIu CisgKgorICogcmluZzoJVGhlIHJpbmcgdGhhdCB0aGUgcHJvZ3JhbW1pbmcgYmF0Y2ggd2lsbCBi ZSBydW4gaW4uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaCBidWZmZXIg d2l0aCB0aGUgdmFsdWVzIHJlcXVpcmVkIGZvcgorICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1MgcmVn aXN0ZXIgdmFsdWVzIGZvciBhbGwgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQKKyAqIHJpbmdzLgor ICoKKyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUgcGFydGlhbGx5IHN0b3JlZCBpbiB0aGUgUkNTIGNv bnRleHQsIHNvIHRoZXkgYXJlCisgKiBlbWl0dGVkIGF0IHRoZSBzYW1lIHRpbWUgc28gdGhhdCB3 aGVuIGEgY29udGV4dCBpcyBjcmVhdGVkIHRoZXNlIHJlZ2lzdGVycworICogYXJlIHNldCB1cC4g VGhlc2UgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgZW1pdHRlZCBpbnRvIHRoZSBzdGFydCBvZiB0aGUK KyAqIGNvbnRleHQgYXMgc2V0dGluZyB0aGUgRUxTUCB3aWxsIHJlLWluaXQgc29tZSBvZiB0aGVz ZSByZWdpc3RlcnMgYmFjaworICogdG8gdGhlIGh3IHZhbHVlcy4KKyAqCisgKiBSZXR1cm46IDAg b24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0dXMuCisgKi8KK2ludCBpbnRlbF9y Y3NfY29udGV4dF9pbml0X21vY3Moc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7 CisJaW50IHJldCA9IDA7CisJc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgdDsKKworCWlmIChn ZXRfbW9jc19zZXR0aW5ncyhyZXEtPnJpbmctPmRldiwgJnQpKSB7CisJCXUzMiB0YWJsZV9zaXpl OworCisJCS8qCisJCSAqIE9LLiBGb3IgZWFjaCBzdXBwb3J0ZWQgcmluZzoKKwkJICogIG51bWJl ciBvZiBtb2NzIGVudHJpZXMgKiAyIGR3b3JkcyBmb3IgZWFjaCBjb250cm9sX3ZhbHVlCisJCSAq ICBwbHVzIG51bWJlciBvZiBtb2NzIGVudHJpZXMgLzIgZHdvcmRzIGZvciBsM2NjIHZhbHVlcy4K KwkJICoKKwkJICogIFBsdXMgMSBmb3IgdGhlIGxvYWQgY29tbWFuZCBhbmQgMSBmb3IgdGhlIE5P T1AgcGVyIHJpbmcKKwkJICogIGFuZCB0aGUgbDNjYyBwcm9ncmFtbWluZy4KKwkJICovCisJCXRh YmxlX3NpemUgPSBHRU45X05VTV9NT0NTX1JJTkdTICoKKwkJCQkoKDIgKiBHRU45X05VTV9NT0NT X0VOVFJJRVMpICsgMikgKworCQkJCUdFTjlfTlVNX01PQ1NfRU5UUklFUyArIDI7CisKKwkJcmV0 ID0gaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJlcSwgdGFibGVfc2l6ZSk7CisJCWlmIChyZXQp IHsKKwkJCURSTV9ERUJVRygiaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luIGZhaWxlZCAlZFxuIiwg cmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBwcm9ncmFtIHRoZSBjb250cm9sIHJl Z2lzdGVycyAqLworCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyZXEtPnJpbmdidWYsICZ0LCBH RU45X0dGWF9NT0NTXzApOworCQllbWl0X21vY3NfY29udHJvbF90YWJsZShyZXEtPnJpbmdidWYs ICZ0LCBHRU45X01GWDBfTU9DU18wKTsKKwkJZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmVxLT5y aW5nYnVmLCAmdCwgR0VOOV9NRlgxX01PQ1NfMCk7CisJCWVtaXRfbW9jc19jb250cm9sX3RhYmxl KHJlcS0+cmluZ2J1ZiwgJnQsIEdFTjlfVkVCT1hfTU9DU18wKTsKKwkJZW1pdF9tb2NzX2NvbnRy b2xfdGFibGUocmVxLT5yaW5nYnVmLCAmdCwgR0VOOV9CTFRfTU9DU18wKTsKKworCQkvKiBub3cg cHJvZ3JhbSB0aGUgbDNjYyByZWdpc3RlcnMgKi8KKwkJZW1pdF9tb2NzX2wzY2NfdGFibGUocmVx LT5yaW5nYnVmLCAmdCk7CisKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmVxLT5yaW5n YnVmKTsKKworCQlEUk1fREVCVUcoIk1PQ1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsKKwl9 IGVsc2UgeworCQlEUk1fREVCVUcoIk1PQ1M6IFRhYmxlIE5vdCBzdXBwb3J0ZWQgb24gcGxhdGZv cm1cbiIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX21vY3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFmZjI5Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCkBAIC0wLDAgKzEsNjAg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJTlRF TF9NT0NTX0gKKyNkZWZpbmUgSU5URUxfTU9DU19ICisKKy8qKgorICogRE9DOiBNZW1vcnkgT2Jq ZWN0cyBDb250cm9sIFN0YXRlIChNT0NTKQorICoKKyAqIE1vdGl2YXRpb246CisgKiBJbiBwcmV2 aW91cyBHZW5zIHRoZSBNT0NTIHNldHRpbmdzIHdhcyBhIHZhbHVlIHRoYXQgd2FzIHNldCBieSB1 c2VyIGxhbmQgYXMKKyAqIHBhcnQgb2YgdGhlIGJhdGNoLiBJbiBHZW45IHRoaXMgaGFzIGNoYW5n ZWQgdG8gYmUgYSBzaW5nbGUgdGFibGUgKHBlciByaW5nKQorICogdGhhdCBhbGwgYmF0Y2hlcyBu b3cgcmVmZXJlbmNlIGJ5IGluZGV4IGluc3RlYWQgb2YgcHJvZ3JhbW1pbmcgdGhlIE1PQ1MKKyAq IGRpcmVjdGx5LgorICoKKyAqIFRoZSBvbmUgd3JpbmtsZSBpbiB0aGlzIGlzIHRoYXQgb25seSBQ QVJUIG9mIHRoZSBNT0NTIHRhYmxlcyBhcmUgaW5jbHVkZWQKKyAqIGluIGNvbnRleHQgKFRoZSBH RlhfTU9DU18wIC0gR0ZYX01PQ1NfNjQgYW5kIHRoZSBMTkNGQ01PQ1MwIC0gTE5DRkNNT0NTMzIK KyAqIHJlZ2lzdGVycykuIFRoZSByZXN0IGFyZSBub3QgKHRoZSBzZXR0aW5ncyBmb3IgdGhlIG90 aGVyIHJpbmdzKS4KKyAqCisgKiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNldCBhdCBzeXN0ZW0g c3RhcnQtdXAgYmVjYXVzZSB0aGUgd2F5IHRoZSB0YWJsZQorICogaW50ZXJhY3RzIHdpdGggdGhl IGNvbnRleHRzIGFuZCB0aGUgR21tTGliIGludGVyZmFjZS4KKyAqCisgKgorICogSW1wbGVtZW50 YXRpb246CisgKgorICogVGhlIHRhYmxlIGlzIHByb2dyYW1tZWQgb24gYSBwbGF0Zm9ybSBiYXNp cyBmcm9tIGEgdGFibGUgdGhhdCBpcyBnZW5lcmF0ZWQKKyAqIGZyb20gdGhlIG9uZSB0aGF0IGhh cyBiZWVuIGFncmVlZCBieSB0aGUgZGlmZmVyZW50IHJlc3BvbnNpYmxlIHBhcnRpZXMuIFRoaXMK KyAqIHRhYmxlcyAob25lIHBlciBzdXBwb3J0ZWQgcGxhdGZvcm0pIGlzIGRlZmluZWQgaW4gaW50 ZWxfbW9jcy5jIGFuZCBpcworICogcHJvZ3JhbW1lZCBpbiB0aGUgZmlyc3QgYmF0Y2ggYWZ0ZXIg dGhlIGNvbnRleHQgaXMgbG9hZGVkICh3aXRoIHRoZSBoYXJkd2FyZQorICogd29ya2Fyb3VuZHMp LiBUaGlzIHdpbGwgdGhlbiBsZXQgdGhlIHVzdWFsIGNvbnRleHQgaGFuZGxpbmcga2VlcCB0aGUg TU9DUyBpbgorICogc3RlcC4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl ICJpOTE1X2Rydi5oIgorCitpbnQgaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2NzKHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKKworI2VuZGlmCisKLS0gCjEuOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=