From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: [PATCH v5] drm/i915 : Added Programming of the MOCS Date: Thu, 18 Jun 2015 13:29:45 +0100 Message-ID: <1434630585-6613-1-git-send-email-peter.antoine@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 4A4C66ECD3 for ; Thu, 18 Jun 2015 05:30:01 -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 Cc: daniel.vetter.intel.com@freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBjaGFuZ2UgYWRkcyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGhlIE1PQ1MgcmVnaXN0ZXJzIHRv IHRoZSBnZW4gOSsKcGxhdGZvcm1zLiBUaGlzIGNoYW5nZSBzZXQgcHJvZ3JhbXMgdGhlIE1PQ1Mg cmVnaXN0ZXIgdmFsdWVzIHRvIGEgc2V0Cm9mIHZhbHVlcyB0aGF0IGFyZSBkZWZpbmVkIHRvIGJl IG9wdGltYWwuCgpJdCBjcmVhdGVzIGEgZml4ZWQgcmVnaXN0ZXIgc2V0IHRoYXQgaXMgcHJvZ3Jh bW1lZCBhY3Jvc3MgdGhlIGRpZmZlcmVudAplbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2 ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25lIGFzIHRoZQptYWluIFJDUyBjb250ZXh0IG9u bHkgaG9sZHMgdGhlIHJlZ2lzdGVycyBmb3IgaXRzZWxmIGFuZCB0aGUgc2hhcmVkCkwzIHZhbHVl cy4gQnkgdHJ5aW5nIHRvIGtlZXAgdGhlIHJlZ2lzdGVycyBjb25zaXN0ZW50IGFjcm9zcyB0aGUK ZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5nIGZvciB0aGUg cmVnaXN0ZXJzCmNvbnNpc3RlbnQuCgp2MjoKLSdzdGF0aWMgY29uc3QnIGZvciBwcml2YXRlIGRh dGEgc3RydWN0dXJlcyBhbmQgc3R5bGUgY2hhbmdlcy4oTWF0dCBUdXJuZXIpCnYzOgotIE1ha2Ug dGhlIHRhYmxlcyAic2xpZ2h0bHkiIG1vcmUgcmVhZGFibGUuIChEYW1pZW4gTGVzcGlhdSkKLSBV cGRhdGVkIHRhYmxlcyBmaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KdjQ6Ci0gQ29kZSBmb3Jt YXR0aW5nLiAoQ2hyaXMgV2lsc29uKQotIHJlLXByaXZhdGlzZWQgbW9jcyBjb2RlLiAoRGFuaWVs IFZldHRlcikKdjU6Ci0gQ2hhbmdlZCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLiAoQ2hyaXMgV2ls c29uKQoKU2lnbmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYyAgfCAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5o ICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgfCAzNzAgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX21vY3MuaCB8ICA2MSArKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbW9jcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbW9jcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBiN2RkZjQ4Li5jNzgxZTE5IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRf cGFyc2VyLm8gXAogCSAgaTkxNV9pcnEubyBcCiAJICBpOTE1X3RyYWNlX3BvaW50cy5vIFwKIAkg IGludGVsX2xyYy5vIFwKKwkgIGludGVsX21vY3MubyBcCiAJICBpbnRlbF9yaW5nYnVmZmVyLm8g XAogCSAgaW50ZWxfdW5jb3JlLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggNzIxMzIy NC4uM2E0MzViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC03ODI5LDQgKzc4MjksMTMg QEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5lIF9QQUxFVFRFX0EgKGRldl9w cml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGEwMDApCiAjZGVmaW5lIF9QQUxFVFRF X0IgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGE4MDApCiAKKy8qIE1P Q1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdF TjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUgQ29udHJvbCBiYXNlICovCisKKyNk ZWZpbmUgR0VOOV9HRlhfTU9DU18wCQkoMHhjODAwKQkvKiBHcmFwaGljcyBNT0NTIGJhc2UgcmVn aXN0ZXIqLworI2RlZmluZSBHRU45X01GWDBfTU9DU18wCSgweGM5MDApCS8qIE1lZGlhIDAgTU9D UyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgxX01PQ1NfMAkoMHhjQTAwKQkvKiBN ZWRpYSAxIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5lIEdFTjlfVkVCT1hfTU9DU18wCSgw eGNCMDApCS8qIFZpZGVvIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5lIEdFTjlfQkxUX01P Q1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2UgcmVnaXN0ZXIqLworCiAjZW5kaWYg LyogX0k5MTVfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IDlmNTQ4NWQu LmRkMDFjYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC0xMzUsNiArMTM1LDcgQEAK ICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgogI2luY2x1 ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogCiAjZGVmaW5lIEdFTjlf TFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjIgKiBQQUdFX1NJWkUpCiAjZGVmaW5lIEdFTjhfTFJf Q09OVEVYVF9SRU5ERVJfU0laRSAoMjAgKiBQQUdFX1NJWkUpCkBAIC03OTYsNyArNzk3LDcgQEAg c3RhdGljIGludCBsb2dpY2FsX3JpbmdfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAq cmluZ2J1ZiwKICAqCiAgKiBSZXR1cm46IG5vbi16ZXJvIGlmIHRoZSByaW5nYnVmZmVyIGlzIG5v dCByZWFkeSB0byBiZSB3cml0dGVuIHRvLgogICovCi1zdGF0aWMgaW50IGludGVsX2xvZ2ljYWxf cmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKK2ludCBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCiAJCQkJ ICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsIGludCBudW1fZHdvcmRzKQogewogCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5yaW5nOwpAQCAtMTM3OSw2ICsxMzgw LDEzIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qCisJICogRmFpbGlu ZyB0byBwcm9ncmFtIHRoZSBNT0NTIGlzIG5vbi1mYXRhbC5UaGUgc3lzdGVtIHdpbGwgbm90CisJ ICogcnVuIGF0IHBlYWsgcGVyZm9ybWFuY2UuIFNvIGdlbmVyYXRlIGEgd2FybmluZyBhbmQgY2Fy cnkgb24uCisJICovCisJaWYgKGludGVsX3Jjc19jb250ZXh0X2luaXRfbW9jcyhyaW5nLCBjdHgp ICE9IDApCisJCURSTV9FUlJPUigiTU9DUyBmYWlsZWQgdG8gcHJvZ3JhbTogZXhwZWN0IHBlcmZv cm1hbmNlIGlzc3Vlcy4iKTsKKwogCXJldHVybiBpbnRlbF9scl9jb250ZXh0X3JlbmRlcl9zdGF0 ZV9pbml0KHJpbmcsIGN0eCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKaW5kZXggMDRk M2E2ZC4uZGJiZDZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKQEAgLTQ0LDYgKzQ0LDEw IEBAIGludCBpbnRlbF9sb2dpY2FsX3JpbmdzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CiAKIGludCBsb2dpY2FsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgaW50ZWxfcmluZ2J1 ZmZlciAqcmluZ2J1ZiwKIAkJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpOworCitpbnQg aW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVm LAorCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQgbnVtX2R3b3Jkcyk7CisK IC8qKgogICogaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UoKSAtIGFkdmFuY2UgdGhlIHJpbmdi dWZmZXIgdGFpbAogICogQHJpbmdidWY6IFJpbmdidWZmZXIgdG8gYWR2YW5jZS4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX21vY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjUx Mzc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu YwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK KyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgImludGVsX21vY3MuaCIKKyNpbmNsdWRlICJpbnRlbF9scmMuaCIKKyNpbmNs dWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCisKKy8qIHN0cnVjdHVyZXMgcmVxdWlyZWQgKi8KK3N0 cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IHsKKwl1MzIJY29udHJvbF92YWx1ZTsKKwl1MTYJbDNj Y192YWx1ZTsKK307CisKK3N0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlIHsKKwl1MzIJCQkJCXNp emU7CisJY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkJKnRhYmxlOworfTsKKworLyog RGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoWFhYX01PQ1NfMCAtIFhYWF9NT0NTXzYzKSAqLworI2Rl ZmluZQlNT0NTX0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8IDApCisjZGVmaW5lCU1PQ1Nf VEdUX0NBQ0hFKHZhbHVlKQkJKHZhbHVlIDw8IDIpCisjZGVmaW5lCU1PQ1NfTFJVTSh2YWx1ZSkJ CSh2YWx1ZSA8PCA0KQorI2RlZmluZQlNT0NTX0FPTSh2YWx1ZSkJCQkodmFsdWUgPDwgNikKKyNk ZWZpbmUJTU9DU19MRUNDX0VTQyh2YWx1ZSkJCSh2YWx1ZSA8PCA3KQorI2RlZmluZQlNT0NTX0xF Q0NfU0NDKHZhbHVlKQkJKHZhbHVlIDw8IDgpCisjZGVmaW5lCU1PQ19QRk0odmFsdWUpCQkJKHZh bHVlIDw8IDExKQorI2RlZmluZQlNT0NTX1NDRih2YWx1ZSkJCQkodmFsdWUgPDwgMTQpCisKKy8q IERlZmluZXMgZm9yIHRoZSB0YWJsZXMgKExOQ0ZNT0NTMCAtIExOQ0ZNT0NTMzEpIC0gdHdvIGVu dHJpZXMgcGVyIHdvcmQgKi8KKyNkZWZpbmUJTU9DU19FU0ModmFsdWUpCQkJKHZhbHVlIDw8IDAp CisjZGVmaW5lCU1PQ1NfU0NDKHZhbHVlKQkJCSh2YWx1ZSA8PCAxKQorI2RlZmluZQlNT0NTX0wz X0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8IDQpCisKKy8qIEhlbHBlciBkZWZpbmVzICov CisjZGVmaW5lIEdFTjlfTlVNX01PQ1NfUklOR1MJKDUpCS8qIE51bWJlciBvZiBtb2NzIGVuZ2lu ZXMgdG8gcHJvZ3JhbSAqLworI2RlZmluZSBHRU45X05VTV9NT0NTX0VOVFJJRVMJKDYzKQkvKiA2 MyBvdXQgb2YgNjQgLSA2NCBpcyByc3ZyZCAqLworCisvKiBFRFJBTSBDYWNoaW5nIG9wdGlvbnMg Ki8KKyNkZWZpbmUgRURSQU1fUEFHRVRBQkxFCQkoMCkKKyNkZWZpbmUgRURSQU1fVUMJCSgxKQor I2RlZmluZSBFRFJBTV9SRVNFUlZFRAkJKDIpCisjZGVmaW5lIEVEUkFNX1dCCQkoMykKKworLyog TDMgQ2FjaGluZyBvcHRpb25zICovCisjZGVmaW5lIEwzX0RJUkVDVAkJKDApCisjZGVmaW5lIEwz X1VDCQkJKDEpCisjZGVmaW5lIEwzX1JFU0VSVkVECQkoMikKKyNkZWZpbmUgTDNfV0IJCQkoMykK KworLyogdGFyZ2V0IGNhY2hlICovCisjZGVmaW5lIEVMTEMJCQkoMCkKKyNkZWZpbmUgTExDCQkJ KDEpCisjZGVmaW5lIExMQ19FTExDCQkoMikKKworLyoKKyAqIE1PQ1MgdGFibGVzCisgKgorICog VGhlc2UgYXJlIHRoZSBNT0NTIHRhYmxlcyB0aGF0IGFyZSBwcm9ncmFtbWVkIGFjcm9zcyBhbGwg dGhlIHJpbmdzLgorICogVGhlIGNvbnRyb2wgdmFsdWUgaXMgcHJvZ3JhbW1lZCB0byBhbGwgdGhl IHJpbmdzIHRoYXQgc3VwcG9ydCB0aGUKKyAqIE1PQ1MgcmVnaXN0ZXJzLiBXaGlsZSB0aGUgbDNj Y192YWx1ZXMgYXJlIG9ubHkgcHJvZ3JhbW1lZCB0byB0aGUKKyAqIExOQ0ZDTU9DUzAgLSBMTkNG Q01PQ1MzMiByZWdpc3RlcnMuCisgKgorICogTk9URTogVGhlc2UgdGFibGVzIE1VU1Qgc3RhcnQg d2l0aCBiZWluZyB1bmNhY2hlZCBhbmQgdGhlIGxlbmd0aCBNVVNUIGJlCisgKiAgICAgICBsZXNz IHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGhh cmR3YXJlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgc2t5 bGFrZV9tb2NzX3RhYmxlW10gPSB7CisJIC8qIHsweDAwMDAwMDA5LCAweDAwMTB9ICovCisJeyhN T0NTX0NBQ0hFQUJJTElUWShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAor CQlNT0NTX0xSVU0oMCkgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1ND QygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1P Q1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAw MDNiLCAweDAwMzB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RH VF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSks CisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNf V0IpKX0sCisJIC8qIHsweDAwMDAwMDM5LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElU WShFRFJBTV9VQykgfCBNT0NTX1RHVF9DQUNIRShMTENfRUxMQykgfAorCQlNT0NTX0xSVU0oMykg fCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8CisJCU1PQ19Q Rk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9D U19MM19DQUNIRUFCSUxJVFkoTDNfVUMpKX0sCisJIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICov CisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9DQUNIRShMTEMpIHwK KwkJTU9DU19MUlVNKDEpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBN T0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSl9LAorCSAvKiB7MHgwMDAw MDAxNywgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1fV0IpIHwgTU9DU19U R1RfQ0FDSEUoTExDKSB8CisJCU1PQ1NfTFJVTSgxKSB8IE1PQ1NfQU9NKDApIHwgTU9DU19MRUND X0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgwKSB8IE1PQ1NfU0NGKDApKSwKKwkJ KE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWShMM19VQykp fSwKKwkgLyogezB4MDAwMDAwMTksIDB4MDAxMH0gKi8KKwl7KE1PQ1NfQ0FDSEVBQklMSVRZKEVE UkFNX1VDKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQ19FTExDKSB8CisJCU1PQ1NfTFJVTSgxKSB8IE1P Q1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwKKwkJTU9DX1BGTSgw KSB8IE1PQ1NfU0NGKDApKSwKKwkJKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wz X0NBQ0hFQUJJTElUWShMM19VQykpfSwKKwkgLyogezB4MDAwMDAwMzcsIDB4MDAzMH0gKi8KKwl7 KE1PQ1NfQ0FDSEVBQklMSVRZKEVEUkFNX1dCKSB8IE1PQ1NfVEdUX0NBQ0hFKExMQykgfAorCQlN T0NTX0xSVU0oMykgfCBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygw KSB8CisJCU1PQ19QRk0oMCkgfCBNT0NTX1NDRigwKSksCisJCShNT0NTX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DU19MM19DQUNIRUFCSUxJVFkoTDNfV0IpKX0sCisJIC8qIHsweDAwMDAwMDM3 LCAweDAwMTB9ICovCisJeyhNT0NTX0NBQ0hFQUJJTElUWShFRFJBTV9XQikgfCBNT0NTX1RHVF9D QUNIRShMTEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19BT00oMCkgfCBNT0NTX0xFQ0NfRVND KDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwgTU9DU19TQ0YoMCkpLAorCQkoTU9D U19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSl9LAor CSAvKiB7MHgwMDAwMDAzYiwgMHgwMDEwfSAqLworCXsoTU9DU19DQUNIRUFCSUxJVFkoRURSQU1f V0IpIHwgTU9DU19UR1RfQ0FDSEUoTExDX0VMTEMpIHwKKwkJTU9DU19MUlVNKDMpIHwgTU9DU19B T00oMCkgfCBNT0NTX0xFQ0NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfAorCQlNT0NfUEZNKDApIHwg TU9DU19TQ0YoMCkpLAorCQkoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FD SEVBQklMSVRZKEwzX1VDKSl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9t 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 RUFCSUxJVFkoTDNfVUMpKX0sCit9OworCisvKioKKyAqIGdldF9tb2NzX3NldHRpbmdzCisgKgor ICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgdmFsdWVzIG9mIHRoZSBNT0NTIHRhYmxl IHRoYXQgbmVlZHMgdG8KKyAqIGJlIHByb2dyYW1tZWQgZm9yIHRoZSBwbGF0Zm9ybS4gSXQgd2ls bCByZXR1cm4gdGhlIHZhbHVlcyB0aGF0IG5lZWQKKyAqIHRvIGJlIHByb2dyYW1tZWQgYW5kIGlm IHRoZXkgbmVlZCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWVz IGlzIGZhbHNlIHRoZW4gdGhlIHJlZ2lzdGVycyBkbyBub3QgbmVlZCBwcm9ncmFtbWluZy4KKyAq Lworc3RhdGljIGJvb2wgZ2V0X21vY3Nfc2V0dGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUpIHsKKwlib29sCXJlc3VsdCA9 IGZhbHNlOworCisJaWYgKElTX1NLWUxBS0UoZGV2KSkgeworCQl0YWJsZS0+c2l6ZSAgPSBBUlJB WV9TSVpFKHNreWxha2VfbW9jc190YWJsZSk7CisJCXRhYmxlLT50YWJsZSA9IHNreWxha2VfbW9j c190YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKElTX0JST1hUT04oZGV2KSkg eworCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKGJyb3h0b25fbW9jc190YWJsZSk7CisJCXRh YmxlLT50YWJsZSA9IGJyb3h0b25fbW9jc190YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9IGVs c2UgeworCQkvKiBQbGF0Zm9ybSB0aGF0IHNob3VsZCBoYXZlIGEgTU9DUyB0YWJsZSBkb2VzIG5v dCAqLworCQlXQVJOX09OKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpOworCX0KKworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qKgorICogZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoKSAtIGVtaXQg dGhlIG1vY3MgY29udHJvbCB0YWJsZQorICogQHJpbmdidWY6CURSTSBkZXZpY2UuCisgKiBAdGFi bGU6CVRoZSB2YWx1ZXMgdG8gcHJvZ3JhbSBpbnRvIHRoZSBjb250cm9sIHJlZ3MuCisgKiBAcmVn X2Jhc2U6CVRoZSBiYXNlIGZvciB0aGUgRW5naW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1l ZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJf SU1NIGNvbW1hbmQgZm9yIHRoZQorICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu IGFkZHJlc3MuCisgKgorICogUmV0dXJuOiBOb3RoaW5nLgorICovCitzdGF0aWMgdm9pZCBlbWl0 X21vY3NfY29udHJvbF90YWJsZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJ CQkgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlLAorCQkJCSAgICB1MzIgcmVn X2Jhc2UpCit7CisJdW5zaWduZWQgaW50IGluZGV4OworCisJaW50ZWxfbG9naWNhbF9yaW5nX2Vt aXQocmluZ2J1ZiwKKwkJCU1JX0xPQURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklF UykpOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGFibGUtPnNpemU7IGluZGV4KyspIHsK KwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgcmVnX2Jhc2UgKyAoaW5kZXggKiA0 KSk7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQkJCXRhYmxlLT50YWJs ZVtpbmRleF0uY29udHJvbF92YWx1ZSk7CisJfQorCisJLyoKKwkgKiBPaywgbm93IHNldCB0aGUg dW51c2VkIGVudHJpZXMgdG8gdW5jYWNoZWQuIFRoZXNlIGVudHJpZXMgYXJlCisJICogb2ZmaWNp YWxseSB1bmRlZmluZWQgYW5kIG5vIGNvbnRhY3QgaXMgZ2l2ZW4gZm9yIHRoZSBjb250ZW50cyBh bmQKKwkgKiBzZXR0aW5ncyBpcyBnaXZlbiBmb3IgdGhlc2UgZW50cmllcy4KKwkgKgorCSAqIEVu dHJ5IDAgaW4gdGhlIHRhYmxlIGlzIHVuY2FjaGVkIC0gc28gd2UgYXJlIGp1c3Qgd3JpdHRlbiB0 aGF0CisJICogdmFsdWUgdG8gYWxsIHRoZSB1c2VkIGVudHJpZXMuCisJICovCisJZm9yICg7IGlu ZGV4IDwgR0VOOV9OVU1fTU9DU19FTlRSSUVTOyBpbmRleCsrKSB7CisJCWludGVsX2xvZ2ljYWxf cmluZ19lbWl0KHJpbmdidWYsIHJlZ19iYXNlICsgKGluZGV4ICogNCkpOworCQlpbnRlbF9sb2dp Y2FsX3JpbmdfZW1pdChyaW5nYnVmLCB0YWJsZS0+dGFibGVbMF0uY29udHJvbF92YWx1ZSk7CisJ fQorCisJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgTUlfTk9PUCk7Cit9CisKKy8q KgorICogZW1pdF9tb2NzX2wzY2NfdGFibGUoKSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0YWJs ZQorICogQHJpbmdidWY6CURSTSBkZXZpY2UuCisgKiBAdGFibGU6CVRoZSB2YWx1ZXMgdG8gcHJv Z3JhbSBpbnRvIHRoZSBjb250cm9sIHJlZ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaW1wbHkg ZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kIGZvciB0aGUKKyAqIGdpdmVuIHRh YmxlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyZXNzLiBUaGlzIHJlZ2lzdGVyIHNldCBpcyAg cHJvZ3JhbW1lZAorICogaW4gcGFpcnMuCisgKgorICogUmV0dXJuOiBOb3RoaW5nLgorICovCitz dGF0aWMgdm9pZCBlbWl0X21vY3NfbDNjY190YWJsZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAq cmluZ2J1ZiwKKwkJCSBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUpIHsKKwl1bnNp Z25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHZhbHVlOworCXUzMiBmaWxs ZXIgPSAodGFibGUtPnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKKwkJCSgodGFibGUt PnRhYmxlWzBdLmwzY2NfdmFsdWUgJiAweGZmZmYpIDw8IDE2KTsKKworCWludGVsX2xvZ2ljYWxf cmluZ19lbWl0KHJpbmdidWYsCisJCQlNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU45X05VTV9NT0NT X0VOVFJJRVMgLyAyKSk7CisKKwlmb3IgKGkgPSAwLCBjb3VudCA9IDA7IGkgPCB0YWJsZS0+c2l6 ZSAvIDI7IGkrKywgY291bnQgKz0gMikgeworCQl2YWx1ZSA9ICh0YWJsZS0+dGFibGVbY291bnRd LmwzY2NfdmFsdWUgJiAweGZmZmYpIHwKKwkJCSgodGFibGUtPnRhYmxlW2NvdW50ICsgMV0ubDNj Y192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsIEdFTjlfTE5DRkNNT0NTMCArIChpICogNCkpOworCQlpbnRlbF9sb2dpY2FsX3Jpbmdf ZW1pdChyaW5nYnVmLCB2YWx1ZSk7CisJfQorCisJaWYgKHRhYmxlLT5zaXplICYgMHgwMSkgewor CQkvKiBPZGQgdGFibGUgc2l6ZSAtIDEgbGVmdCBvdmVyICovCisJCXZhbHVlID0gKHRhYmxlLT50 YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0YWJsZS0+dGFibGVbMF0u bDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCX0gZWxzZQorCQl2YWx1ZSA9IGZpbGxlcjsK KworCS8qCisJICogTm93IHNldCB0aGUgcmVzdCBvZiB0aGUgdGFibGUgdG8gdW5jYWNoZWQgLSB1 c2UgZW50cnkgMCBhcyB0aGlzCisJICogd2lsbCBiZSB1bmNhY2hlZC4gTGVhdmUgdGhlIGxhc3Qg cGFpciBhcyBpbml0aWFsaXNlZCBhcyB0aGV5IGFyZQorCSAqIHJlc2VydmVkIGJ5IHRoZSBoYXJk d2FyZS4KKwkgKi8KKwlmb3IgKDsgaSA8IChHRU45X05VTV9NT0NTX0VOVFJJRVMgLyAyKSAtIDE7 IGkrKykgeworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBHRU45X0xOQ0ZDTU9D UzAgKyAoaSAqIDQpKTsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgdmFsdWUp OworCisJCXZhbHVlID0gZmlsbGVyOworCX0KKworCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJp bmdidWYsIE1JX05PT1ApOworfQorCisvKgorICogaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2Nz KCkgLSBwcm9ncmFtIHRoZSBNT0NTIHJlZ2lzdGVyLgorICoKKyAqIHJpbmc6CVRoZSByaW5nIHRo YXQgdGhlIHByb2dyYW1taW5nIGJhdGNoIHdpbGwgYmUgcnVuIGluLgorICogY3R4OgkJVGhlIGlu dGVsX2NvbnRleHQgdG8gYmUgdXNlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW1pdCBh IGJhdGNoIGJ1ZmZlciB3aXRoIHRoZSB2YWx1ZXMgcmVxdWlyZWQgZm9yCisgKiBwcm9ncmFtbWlu ZyB0aGUgTU9DUyByZWdpc3RlciB2YWx1ZXMgZm9yIGFsbCB0aGUgY3VycmVudGx5IHN1cHBvcnRl ZAorICogcmluZ3MuCisgKgorICogVGhlc2UgcmVnaXN0ZXJzIGFyZSBwYXJ0aWFsbHkgc3RvcmVk IGluIHRoZSBSQ1MgY29udGV4dCwgc28gdGhleSBhcmUKKyAqIGVtaXR0ZWQgYXQgdGhlIHNhbWUg dGltZSBzbyB0aGF0IHdoZW4gYSBjb250ZXh0IGlzIGNyZWF0ZWQgdGhlc2UgcmVnaXN0ZXJzCisg KiBhcmUgc2V0IHVwLiBUaGVzZSByZWdpc3RlcnMgaGF2ZSB0byBiZSBlbWl0dGVkIGludG8gdGhl IHN0YXJ0IG9mIHRoZQorICogY29udGV4dCBhcyBzZXR0aW5nIHRoZSBFTFNQIHdpbGwgcmUtaW5p dCBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycyBiYWNrCisgKiB0byB0aGUgaHcgdmFsdWVzLgorICoK KyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgdGhlIGVycm9yIHN0YXR1cy4KKyAq LworaW50IGludGVsX3Jjc19jb250ZXh0X2luaXRfbW9jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLAorCQkJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpCit7CisJaW50IHJldCA9IDA7 CisKKwlzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB0OworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSByaW5nLT5kZXY7CisJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBjdHgt PmVuZ2luZVtyaW5nLT5pZF0ucmluZ2J1ZjsKKworCWlmIChnZXRfbW9jc19zZXR0aW5ncyhkZXYs ICZ0KSkgeworCQl1MzIgdGFibGVfc2l6ZTsKKworCQkvKgorCQkgKiBPSy4gRm9yIGVhY2ggc3Vw cG9ydGVkIHJpbmc6CisJCSAqICBudW1iZXIgb2YgbW9jcyBlbnRyaWVzICogMiBkd29yZHMgZm9y IGVhY2ggY29udHJvbF92YWx1ZQorCQkgKiAgcGx1cyBudW1iZXIgb2YgbW9jcyBlbnRyaWVzIC8y IGR3b3JkcyBmb3IgbDNjYyB2YWx1ZXMuCisJCSAqCisJCSAqICBQbHVzIDEgZm9yIHRoZSBsb2Fk IGNvbW1hbmQgYW5kIDEgZm9yIHRoZSBOT09QIHBlciByaW5nCisJCSAqICBhbmQgdGhlIGwzY2Mg cHJvZ3JhbW1pbmcuCisJCSAqLworCQl0YWJsZV9zaXplID0gR0VOOV9OVU1fTU9DU19SSU5HUyAq CisJCQkJKCgyICogR0VOOV9OVU1fTU9DU19FTlRSSUVTKSArIDIpICsKKwkJCQlHRU45X05VTV9N T0NTX0VOVFJJRVMgKyAyOworCQlyZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmluZ2J1 ZiwgY3R4LCB0YWJsZV9zaXplKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0RFQlVHKCJpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4gZmFpbGVkICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJ fQorCisJCS8qIHByb2dyYW0gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJCWVtaXRfbW9jc19j b250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0dGWF9NT0NTXzApOworCQllbWl0X21vY3Nf Y29udHJvbF90YWJsZShyaW5nYnVmLCAmdCwgR0VOOV9NRlgwX01PQ1NfMCk7CisJCWVtaXRfbW9j c19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X01GWDFfTU9DU18wKTsKKwkJZW1pdF9t b2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfVkVCT1hfTU9DU18wKTsKKwkJZW1p dF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfQkxUX01PQ1NfMCk7CisKKwkJ Lyogbm93IHByb2dyYW0gdGhlIGwzY2MgcmVnaXN0ZXJzICovCisJCWVtaXRfbW9jc19sM2NjX3Rh YmxlKHJpbmdidWYsICZ0KTsKKworCQlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVm KTsKKworCQlEUk1fREVCVUcoIk1PQ1M6IFRhYmxlIHNldCBpbiBDb250ZXh0XG4iKTsKKwl9IGVs c2UgeworCQlEUk1fREVCVUcoIk1PQ1M6IFRhYmxlIE5vdCBzdXBwb3J0ZWQgb24gcGxhdGZvcm1c biIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX21vY3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MyZGViCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCkBAIC0wLDAgKzEsNjEgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJTlRFTF9N T0NTX0gKKyNkZWZpbmUgSU5URUxfTU9DU19ICisKKy8qKgorICogRE9DOiBNZW1vcnkgT2JqZWN0 cyBDb250cm9sIFN0YXRlIChNT0NTKQorICoKKyAqIE1vdGl2YXRpb246CisgKiBJbiBwcmV2aW91 cyBHZW5zIHRoZSBNT0NTIHNldHRpbmdzIHdhcyBhIHZhbHVlIHRoYXQgd2FzIHNldCBieSB1c2Vy IGxhbmQgYXMKKyAqIHBhcnQgb2YgdGhlIGJhdGNoLiBJbiBHZW45IHRoaXMgaGFzIGNoYW5nZWQg dG8gYmUgYSBzaW5nbGUgdGFibGUgKHBlciByaW5nKQorICogdGhhdCBhbGwgYmF0Y2hlcyBub3cg cmVmZXJlbmNlIGJ5IGluZGV4IGluc3RlYWQgb2YgcHJvZ3JhbW1pbmcgdGhlIE1PQ1MKKyAqIGRp cmVjdGx5LgorICoKKyAqIFRoZSBvbmUgd3JpbmtsZSBpbiB0aGlzIGlzIHRoYXQgb25seSBQQVJU IG9mIHRoZSBNT0NTIHRhYmxlcyBhcmUgaW5jbHVkZWQKKyAqIGluIGNvbnRleHQgKFRoZSBHRlhf TU9DU18wIC0gR0ZYX01PQ1NfNjQgYW5kIHRoZSBMTkNGQ01PQ1MwIC0gTE5DRkNNT0NTMzIKKyAq IHJlZ2lzdGVycykuIFRoZSByZXN0IGFyZSBub3QgKHRoZSBzZXR0aW5ncyBmb3IgdGhlIG90aGVy IHJpbmdzKS4KKyAqCisgKiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNldCBhdCBzeXN0ZW0gc3Rh cnQtdXAgYmVjYXVzZSB0aGUgd2F5IHRoZSB0YWJsZQorICogaW50ZXJhY3RzIHdpdGggdGhlIGNv bnRleHRzIGFuZCB0aGUgR21tTGliIGludGVyZmFjZS4KKyAqCisgKgorICogSW1wbGVtZW50YXRp b246CisgKgorICogVGhlIHRhYmxlIGlzIHByb2dyYW1tZWQgb24gYSBwbGF0Zm9ybSBiYXNpcyBm cm9tIGEgdGFibGUgdGhhdCBpcyBnZW5lcmF0ZWQKKyAqIGZyb20gdGhlIG9uZSB0aGF0IGhhcyBi ZWVuIGFncmVlZCBieSB0aGUgZGlmZmVyZW50IHJlc3BvbnNpYmxlIHBhcnRpZXMuIFRoaXMKKyAq IHRhYmxlcyAob25lIHBlciBzdXBwb3J0ZWQgcGxhdGZvcm0pIGlzIGRlZmluZWQgaW4gaW50ZWxf bW9jcy5jIGFuZCBpcworICogcHJvZ3JhbW1lZCBpbiB0aGUgZmlyc3QgYmF0Y2ggYWZ0ZXIgdGhl IGNvbnRleHQgaXMgbG9hZGVkICh3aXRoIHRoZSBoYXJkd2FyZQorICogd29ya2Fyb3VuZHMpLiBU aGlzIHdpbGwgdGhlbiBsZXQgdGhlIHVzdWFsIGNvbnRleHQgaGFuZGxpbmcga2VlcCB0aGUgTU9D UyBpbgorICogc3RlcC4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJp OTE1X2Rydi5oIgorCitpbnQgaW50ZWxfcmNzX2NvbnRleHRfaW5pdF9tb2NzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcsCisJCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KTsKKworI2Vu ZGlmCisKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=