From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 10/51] drm/amd/powerplay: add SMU manager sub-component Date: Thu, 12 Nov 2015 01:18:00 -0500 Message-ID: <1447309121-2480-11-git-send-email-alexander.deucher@amd.com> References: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f181.google.com (mail-qk0-f181.google.com [209.85.220.181]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2EBBD7A088 for ; Wed, 11 Nov 2015 22:19:06 -0800 (PST) Received: by qkas77 with SMTP id s77so20226221qka.0 for ; Wed, 11 Nov 2015 22:19:05 -0800 (PST) In-Reply-To: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Rex Zhu List-Id: dri-devel@lists.freedesktop.org RnJvbTogSmFtbXkgWmhvdSA8SmFtbXkuWmhvdUBhbWQuY29tPgoKVGhlIFNNVU1HUiBpcyBvbmUg c3ViLWNvbXBvbmVudCBvZiBwb3dlcnBsYXkgZm9yIFNNVSBmaXJtd2FyZSBzdXBwb3J0LgpUaGUg U01VIGhhbmRsZXMgZmlybXdhcmUgbG9hZGluZyBmb3Igb3RoZXIgSVAgYmxvY2tzIChHRlgsIFNE TUEsIGV0Yy4pCm9uIFZJIHBhcnRzLiAgVGhlIGFkZHMgdGhlIGNvcmUgcG93ZXJwbGF5IGluZnJh c3RydWN0dXJlIHRvIGhhbmRsZSB0aGF0LgoKdjM6IGRpcmVjdCB1c2UgcHJpbnRrIGluIHBvd2Vy cGxheSBtb2R1bGUuCnYyOiBkaXJlY3QgdXNlIGNnc19yZWFkL3dyaXRlX3JlZ2lzdGVyIGZ1bmN0 aW9ucyBpbiBzbXUtbW9kdWxlcwoKU2lnbmVkLW9mZi1ieTogUmV4IFpodSA8UmV4LlpodUBhbWQu Y29tPgpTaWduZWQtb2ZmLWJ5OiBKYW1teSBaaG91IDxKYW1teS5aaG91QGFtZC5jb20+ClJldmll d2VkLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUgICAgICAgICAgfCAgIDQgKwogZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jICAgfCAgODEgKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9wcF9pbnN0YW5jZS5oIHwgIDMz ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9zbXVtZ3IuaCAgICAgIHwg MTgyICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9zbXVt Z3IvTWFrZWZpbGUgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9zbXVt Z3Ivc211bWdyLmMgICB8IDI1MSArKysrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hh bmdlZCwgNTYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9pbmMvcHBfaW5zdGFuY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9zbXVtZ3IuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdW1nci9NYWtlZmlsZQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdW1nci9zbXVtZ3Iu YwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUKaW5kZXggZTc0MjhhMS4uNjBj NjY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUKQEAgLTYsNiArNiwx MCBAQCBzdWJkaXItY2NmbGFncy15ICs9IC1JaW5jbHVkZS9kcm0gIFwKIAogQU1EX1BQX1BBVEgg PSAuLi9wb3dlcnBsYXkKIAorUFBfTElCUyA9IHNtdW1ncgorCitBTURfUE9XRVJQTEFZID0gJChh ZGRzdWZmaXggL01ha2VmaWxlLCQoYWRkcHJlZml4IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5LywkKFBQX0xJQlMpKSkKKwogaW5jbHVkZSAkKEFNRF9QT1dFUlBMQVkpCiAKIFBPV0VSX01H UiA9IGFtZF9wb3dlcnBsYXkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvYW1kX3Bvd2VycGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1k X3Bvd2VycGxheS5jCmluZGV4IDM5ZmZjNWQuLmVhNzg1MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvcG93ZXJwbGF5L2FtZF9wb3dlcnBsYXkuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9hbWRfcG93ZXJwbGF5LmMKQEAgLTIzLDggKzIzLDEwIEBACiAjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRl IDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAiYW1kX3No YXJlZC5oIgogI2luY2x1ZGUgImFtZF9wb3dlcnBsYXkuaCIKKyNpbmNsdWRlICJwcF9pbnN0YW5j ZS5oIgogCiBzdGF0aWMgaW50IHBwX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQogewpAQCAtNDMs MTEgKzQ1LDUxIEBAIHN0YXRpYyBpbnQgcHBfc3dfZmluaSh2b2lkICpoYW5kbGUpCiAKIHN0YXRp YyBpbnQgcHBfaHdfaW5pdCh2b2lkICpoYW5kbGUpCiB7CisJc3RydWN0IHBwX2luc3RhbmNlICpw cF9oYW5kbGU7CisJc3RydWN0IHBwX3NtdW1nciAqc211bWdyOworCWludCByZXQgPSAwOworCisJ aWYgKGhhbmRsZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBwX2hhbmRsZSA9IChz dHJ1Y3QgcHBfaW5zdGFuY2UgKiloYW5kbGU7CisJc211bWdyID0gcHBfaGFuZGxlLT5zbXVfbWdy OworCisJaWYgKHNtdW1nciA9PSBOVUxMIHx8IHNtdW1nci0+c211bWdyX2Z1bmNzID09IE5VTEwg fHwKKwkJc211bWdyLT5zbXVtZ3JfZnVuY3MtPnNtdV9pbml0ID09IE5VTEwgfHwKKwkJc211bWdy LT5zbXVtZ3JfZnVuY3MtPnN0YXJ0X3NtdSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXJldCA9IHNtdW1nci0+c211bWdyX2Z1bmNzLT5zbXVfaW5pdChzbXVtZ3IpOworCWlmIChyZXQp IHsKKwkJcHJpbnRrKEtFUk5fRVJSICJbIHBvd2VycGxheSBdIHNtYyBpbml0aWFsaXphdGlvbiBm YWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNtdW1nci0+c211bWdyX2Z1 bmNzLT5zdGFydF9zbXUoc211bWdyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAi WyBwb3dlcnBsYXkgXSBzbWMgc3RhcnQgZmFpbGVkXG4iKTsKKwkJc211bWdyLT5zbXVtZ3JfZnVu Y3MtPnNtdV9maW5pKHNtdW1ncik7CisJCXJldHVybiByZXQ7CisJfQogCXJldHVybiAwOwogfQog CiBzdGF0aWMgaW50IHBwX2h3X2Zpbmkodm9pZCAqaGFuZGxlKQogeworCXN0cnVjdCBwcF9pbnN0 YW5jZSAqcHBfaGFuZGxlOworCXN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1ncjsKKworCWlmIChoYW5k bGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcF9oYW5kbGUgPSAoc3RydWN0IHBw X2luc3RhbmNlICopaGFuZGxlOworCXNtdW1nciA9IHBwX2hhbmRsZS0+c211X21ncjsKKworCWlm IChzbXVtZ3IgIT0gTlVMTCB8fCBzbXVtZ3ItPnNtdW1ncl9mdW5jcyAhPSBOVUxMIHx8CisJCXNt dW1nci0+c211bWdyX2Z1bmNzLT5zbXVfZmluaSAhPSBOVUxMKQorCQlzbXVtZ3ItPnNtdW1ncl9m dW5jcy0+c211X2Zpbmkoc211bWdyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNzYsMTIgKzIx OCw0OSBAQCBjb25zdCBzdHJ1Y3QgYW1kX3Bvd2VycGxheV9mdW5jcyBwcF9kcG1fZnVuY3MgPSB7 CiAJLnByaW50X2N1cnJlbnRfcGVyZm9ybWFuY2VfbGV2ZWwgPSBwcF9kZWJ1Z2ZzX3ByaW50X2N1 cnJlbnRfcGVyZm9ybWFuY2VfbGV2ZWwsCiB9OwogCitzdGF0aWMgaW50IGFtZF9wcF9pbnN0YW5j ZV9pbml0KHN0cnVjdCBhbWRfcHBfaW5pdCAqcHBfaW5pdCwKKwkJCQlzdHJ1Y3QgYW1kX3Bvd2Vy cGxheSAqYW1kX3BwKQoreworCWludCByZXQ7CisJc3RydWN0IHBwX2luc3RhbmNlICpoYW5kbGU7 CisKKwloYW5kbGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHBfaW5zdGFuY2UpLCBHRlBfS0VS TkVMKTsKKwlpZiAoaGFuZGxlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0g c211bV9pbml0KHBwX2luaXQsIGhhbmRsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWFtZF9wcC0+cHBfaGFuZGxlID0gaGFuZGxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGFtZF9wcF9pbnN0YW5jZV9maW5pKHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgcHBfaW5zdGFu Y2UgKmluc3RhbmNlID0gKHN0cnVjdCBwcF9pbnN0YW5jZSAqKWhhbmRsZTsKKwlpZiAoaW5zdGFu Y2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbXVtX2ZpbmkoaW5zdGFuY2UtPnNt dV9tZ3IpOworCisJa2ZyZWUoaGFuZGxlKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGFtZF9wb3dl cnBsYXlfaW5pdChzdHJ1Y3QgYW1kX3BwX2luaXQgKnBwX2luaXQsCiAJCSAgICAgICBzdHJ1Y3Qg YW1kX3Bvd2VycGxheSAqYW1kX3BwKQogeworCWludCByZXQ7CisKIAlpZiAocHBfaW5pdCA9PSBO VUxMIHx8IGFtZF9wcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJldCA9IGFtZF9w cF9pbnN0YW5jZV9pbml0KHBwX2luaXQsIGFtZF9wcCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCiAJYW1kX3BwLT5pcF9mdW5jcyA9ICZwcF9pcF9mdW5jczsKIAlhbWRfcHAtPnBwX2Z1 bmNzID0gJnBwX2RwbV9mdW5jczsKIApAQCAtMTkwLDUgKzI2OSw3IEBAIGludCBhbWRfcG93ZXJw bGF5X2luaXQoc3RydWN0IGFtZF9wcF9pbml0ICpwcF9pbml0LAogCiBpbnQgYW1kX3Bvd2VycGxh eV9maW5pKHZvaWQgKmhhbmRsZSkKIHsKKwlhbWRfcHBfaW5zdGFuY2VfZmluaShoYW5kbGUpOwor CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxh eS9pbmMvcHBfaW5zdGFuY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9w cF9pbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOGY4MjcK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcHBf aW5zdGFuY2UuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworI2lmbmRlZiBf UFBfSU5TVEFOQ0VfSF8KKyNkZWZpbmUgX1BQX0lOU1RBTkNFX0hfCisKKyNpbmNsdWRlICJzbXVt Z3IuaCIKKworCitzdHJ1Y3QgcHBfaW5zdGFuY2UgeworCXN0cnVjdCBwcF9zbXVtZ3IgKnNtdV9t Z3I7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2luYy9zbXVtZ3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9zbXVt Z3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDRmMDM1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL3NtdW1nci5oCkBA IC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgQWR2YW5jZWQgTWljcm8gRGV2 aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworI2lmbmRlZiBfU01VTUdSX0hfCisj ZGVmaW5lIF9TTVVNR1JfSF8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgInBw X2luc3RhbmNlLmgiCisjaW5jbHVkZSAiYW1kX3Bvd2VycGxheS5oIgorCitzdHJ1Y3QgcHBfc211 bWdyOworc3RydWN0IHBwX2luc3RhbmNlOworCisjZGVmaW5lIHNtdV9sb3dlcl8zMl9iaXRzKG4p ICgodWludDMyX3QpKG4pKQorI2RlZmluZSBzbXVfdXBwZXJfMzJfYml0cyhuKSAoKHVpbnQzMl90 KSgoKG4pPj4xNik+PjE2KSkKKworc3RydWN0IHBwX3NtdW1ncl9mdW5jIHsKKwlpbnQgKCpzbXVf aW5pdCkoc3RydWN0IHBwX3NtdW1nciAqc211bWdyKTsKKwlpbnQgKCpzbXVfZmluaSkoc3RydWN0 IHBwX3NtdW1nciAqc211bWdyKTsKKwlpbnQgKCpzdGFydF9zbXUpKHN0cnVjdCBwcF9zbXVtZ3Ig KnNtdW1ncik7CisJaW50ICgqY2hlY2tfZndfbG9hZF9maW5pc2gpKHN0cnVjdCBwcF9zbXVtZ3Ig KnNtdW1nciwKKwkJCQkgICAgdWludDMyX3QgZmlybXdhcmUpOworCWludCAoKnJlcXVlc3Rfc211 X2xvYWRfZncpKHN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1ncik7CisJaW50ICgqcmVxdWVzdF9zbXVf bG9hZF9zcGVjaWZpY19mdykoc3RydWN0IHBwX3NtdW1nciAqc211bWdyLAorCQkJCQkgICAgdWlu dDMyX3QgZmlybXdhcmUpOworCWludCAoKmdldF9hcmd1bWVudCkoc3RydWN0IHBwX3NtdW1nciAq c211bWdyKTsKKwlpbnQgKCpzZW5kX21zZ190b19zbWMpKHN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1n ciwgdWludDE2X3QgbXNnKTsKKwlpbnQgKCpzZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIp KHN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1nciwKKwkJCQkJICB1aW50MTZfdCBtc2csIHVpbnQzMl90 IHBhcmFtZXRlcik7CisJaW50ICgqZG93bmxvYWRfcHB0YWJsZV9zZXR0aW5ncykoc3RydWN0IHBw X3NtdW1nciAqc211bWdyLAorCQkJCQkgdm9pZCAqKnRhYmxlKTsKKwlpbnQgKCp1cGxvYWRfcHB0 YWJsZV9zZXR0aW5ncykoc3RydWN0IHBwX3NtdW1nciAqc211bWdyKTsKK307CisKK3N0cnVjdCBw cF9zbXVtZ3IgeworCXVpbnQzMl90IGNoaXBfZmFtaWx5OworCXVpbnQzMl90IGNoaXBfaWQ7CisJ dWludDMyX3QgaHdfcmV2aXNpb247CisJdm9pZCAqZGV2aWNlOworCXZvaWQgKmJhY2tlbmQ7CisJ dWludDMyX3QgdXNlY190aW1lb3V0OworCWJvb2wgcmVsb2FkX2Z3OworCWNvbnN0IHN0cnVjdCBw cF9zbXVtZ3JfZnVuYyAqc211bWdyX2Z1bmNzOworfTsKKworCitleHRlcm4gaW50IHNtdW1faW5p dChzdHJ1Y3QgYW1kX3BwX2luaXQgKnBwX2luaXQsCisJCSAgICAgc3RydWN0IHBwX2luc3RhbmNl ICpoYW5kbGUpOworCitleHRlcm4gaW50IHNtdW1fZmluaShzdHJ1Y3QgcHBfc211bWdyICpzbXVt Z3IpOworCitleHRlcm4gaW50IHNtdW1fZ2V0X2FyZ3VtZW50KHN0cnVjdCBwcF9zbXVtZ3IgKnNt dW1ncik7CisKK2V4dGVybiBpbnQgc211bV9kb3dubG9hZF9wb3dlcnBsYXlfdGFibGUoc3RydWN0 IHBwX3NtdW1nciAqc211bWdyLCB2b2lkICoqdGFibGUpOworCitleHRlcm4gaW50IHNtdW1fdXBs b2FkX3Bvd2VycGxheV90YWJsZShzdHJ1Y3QgcHBfc211bWdyICpzbXVtZ3IpOworCitleHRlcm4g aW50IHNtdW1fc2VuZF9tc2dfdG9fc21jKHN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1nciwgdWludDE2 X3QgbXNnKTsKKworZXh0ZXJuIGludCBzbXVtX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRl cihzdHJ1Y3QgcHBfc211bWdyICpzbXVtZ3IsCisJCQkJCXVpbnQxNl90IG1zZywgdWludDMyX3Qg cGFyYW1ldGVyKTsKKworZXh0ZXJuIGludCBzbXVtX3dhaXRfb25fcmVnaXN0ZXIoc3RydWN0IHBw X3NtdW1nciAqc211bWdyLAorCQkJCXVpbnQzMl90IGluZGV4LCB1aW50MzJfdCB2YWx1ZSwgdWlu dDMyX3QgbWFzayk7CisKK2V4dGVybiBpbnQgc211bV93YWl0X2Zvcl9yZWdpc3Rlcl91bmVxdWFs KHN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1nciwKKwkJCQl1aW50MzJfdCBpbmRleCwgdWludDMyX3Qg dmFsdWUsIHVpbnQzMl90IG1hc2spOworCitleHRlcm4gaW50IHNtdW1fd2FpdF9vbl9pbmRpcmVj dF9yZWdpc3RlcihzdHJ1Y3QgcHBfc211bWdyICpzbXVtZ3IsCisJCQkJdWludDMyX3QgaW5kaXJl Y3RfcG9ydCwgdWludDMyX3QgaW5kZXgsCisJCQkJdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG1h c2spOworCisKK2V4dGVybiB2b2lkIHNtdW1fd2FpdF9mb3JfaW5kaXJlY3RfcmVnaXN0ZXJfdW5l cXVhbCgKKwkJCQlzdHJ1Y3QgcHBfc211bWdyICpzbXVtZ3IsCisJCQkJdWludDMyX3QgaW5kaXJl Y3RfcG9ydCwgdWludDMyX3QgaW5kZXgsCisJCQkJdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG1h c2spOworCitleHRlcm4gaW50IHNtdV9hbGxvY2F0ZV9tZW1vcnkodm9pZCAqZGV2aWNlLCB1aW50 MzJfdCBzaXplLAorCQkJIGVudW0gY2dzX2dwdV9tZW1fdHlwZSB0eXBlLAorCQkJIHVpbnQzMl90 IGJ5dGVfYWxpZ24sIHVpbnQ2NF90ICptY19hZGRyLAorCQkJIHZvaWQgKiprcHRyLCB2b2lkICpo YW5kbGUpOworCitleHRlcm4gaW50IHNtdV9mcmVlX21lbW9yeSh2b2lkICpkZXZpY2UsIHZvaWQg KmhhbmRsZSk7CisKKyNkZWZpbmUgU01VTV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSByZWcjI19f IyNmaWVsZCMjX19TSElGVAorCisjZGVmaW5lIFNNVU1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSBy ZWcjI19fIyNmaWVsZCMjX01BU0sKKworI2RlZmluZSBTTVVNX1dBSVRfSU5ESVJFQ1RfUkVHSVNU RVJfR0lWRU5fSU5ERVgoc211bWdyLAkJCVwKKwkJCQkJcG9ydCwgaW5kZXgsIHZhbHVlLCBtYXNr KQlcCisJc211bV93YWl0X29uX2luZGlyZWN0X3JlZ2lzdGVyKHNtdW1nciwJCQkJXAorCQkJCW1t IyNwb3J0IyNfSU5ERVgsIGluZGV4LCB2YWx1ZSwgbWFzaykKKworCisjZGVmaW5lIFNNVU1fV0FJ VF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKHNtdW1nciwgICAgICAgICBcCisJCQkJCQkJ aW5kZXgsIHZhbHVlLCBtYXNrKSBcCisJCXNtdW1fd2FpdF9mb3JfcmVnaXN0ZXJfdW5lcXVhbChz bXVtZ3IsICAgICAgICAgICAgXAorCQkJCQlpbmRleCwgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUg U01VTV9XQUlUX1JFR0lTVEVSX1VORVFVQUwoc211bWdyLCByZWcsIHZhbHVlLCBtYXNrKQkJXAor CVNNVU1fV0FJVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKHNtdW1nciwJCQlcCisJCQkJ bW0jI3JlZywgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUgU01VTV9XQUlUX0ZJRUxEX1VORVFVQUwo c211bWdyLCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJCVwKKwlTTVVNX1dBSVRfUkVHSVNURVJfVU5F UVVBTChzbXVtZ3IsIHJlZywJCQkJXAorCQkoZmllbGR2YWwpIDw8IFNNVU1fRklFTERfU0hJRlQo cmVnLCBmaWVsZCksCQlcCisJCVNNVU1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSkKKworI2RlZmlu ZSBTTVVNX0dFVF9GSUVMRCh2YWx1ZSwgcmVnLCBmaWVsZCkJCQkJXAorCQkoKCh2YWx1ZSkgJiBT TVVNX0ZJRUxEX01BU0socmVnLCBmaWVsZCkpCQlcCisJCT4+IFNNVU1fRklFTERfU0hJRlQocmVn LCBmaWVsZCkpCisKKyNkZWZpbmUgU01VTV9SRUFEX0ZJRUxEKGRldmljZSwgcmVnLCBmaWVsZCkg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCVNNVU1fR0VUX0ZJRUxEKGNnc19yZWFkX3Jl Z2lzdGVyKGRldmljZSwgbW0jI3JlZyksIHJlZywgZmllbGQpCisKKyNkZWZpbmUgU01VTV9TRVRf RklFTEQodmFsdWUsIHJlZywgZmllbGQsIGZpZWxkX3ZhbCkgICAgICAgICAgICAgICAgICBcCisJ CSgoKHZhbHVlKSAmIH5TTVVNX0ZJRUxEX01BU0socmVnLCBmaWVsZCkpIHwgICAgICAgICAgICAg ICAgICAgIFwKKwkJKFNNVU1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSAmICgoZmllbGRfdmFsKSA8 PCAgICAgICAgICAgICAgICAgXAorCQkJU01VTV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSkpKQor CisjZGVmaW5lIFNNVU1fV0FJVF9WRlBGX0lORElSRUNUX1JFR0lTVEVSX0dJVkVOX0lOREVYKHNt dW1nciwJCVwKKwkJCQlwb3J0LCBpbmRleCwgdmFsdWUsIG1hc2spCQlcCisJc211bV93YWl0X29u X2luZGlyZWN0X3JlZ2lzdGVyKHNtdW1nciwJCQkJXAorCQltbSMjcG9ydCMjX0lOREVYXzAsIGlu ZGV4LCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBTTVVNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJ U1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKHNtdW1nciwJXAorCQkJCXBvcnQsIGluZGV4LCB2YWx1 ZSwgbWFzaykJCVwKKwlzbXVtX3dhaXRfZm9yX2luZGlyZWN0X3JlZ2lzdGVyX3VuZXF1YWwoc211 bWdyLAkJCVwKKwkJbW0jI3BvcnQjI19JTkRFWF8wLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKwor I2RlZmluZSBTTVVNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUihzbXVtZ3IsIHBvcnQsIHJl ZywgdmFsdWUsIG1hc2spIFwKKwlTTVVNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9HSVZF Tl9JTkRFWChzbXVtZ3IsIHBvcnQsIGl4IyNyZWcsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFNN VU1fV0FJVF9WRlBGX0lORElSRUNUX1JFR0lTVEVSX1VORVFVQUwoc211bWdyLCBwb3J0LCByZWcs IHZhbHVlLCBtYXNrKSAgICAgXAorCQlTTVVNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9V TkVRVUFMX0dJVkVOX0lOREVYKHNtdW1nciwgcG9ydCwgaXgjI3JlZywgdmFsdWUsIG1hc2spCisK KworLypPcGVyYXRpb25zIG9uIG5hbWVkIGZpZWxkcy4qLworCisjZGVmaW5lIFNNVU1fUkVBRF9W RlBGX0lORElSRUNUX0ZJRUxEKGRldmljZSwgcG9ydCwgcmVnLCBmaWVsZCkgXAorCQlTTVVNX0dF VF9GSUVMRChjZ3NfcmVhZF9pbmRfcmVnaXN0ZXIoZGV2aWNlLCBwb3J0LCBpeCMjcmVnKSwgXAor CQkJcmVnLCBmaWVsZCkKKworI2RlZmluZSBTTVVNX1dSSVRFX0ZJRUxEKGRldmljZSwgcmVnLCBm aWVsZCwgZmllbGR2YWwpICAgICAgICAgICAgXAorCQljZ3Nfd3JpdGVfcmVnaXN0ZXIoZGV2aWNl LCBtbSMjcmVnLCBcCisJCVNNVU1fU0VUX0ZJRUxEKGNnc19yZWFkX3JlZ2lzdGVyKGRldmljZSwg bW0jI3JlZyksIHJlZywgZmllbGQsIGZpZWxkdmFsKSkKKworI2RlZmluZSBTTVVNX1dSSVRFX1ZG UEZfSU5ESVJFQ1RfRklFTEQoZGV2aWNlLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkgICAg XAorCQljZ3Nfd3JpdGVfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9ydCwgaXgjI3JlZywgXAorCQkJ U01VTV9TRVRfRklFTEQoY2dzX3JlYWRfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9ydCwgaXgjI3Jl ZyksIFwKKwkJCXJlZywgZmllbGQsIGZpZWxkdmFsKSkKKworI2RlZmluZSBTTVVNX1dBSVRfVkZQ Rl9JTkRJUkVDVF9GSUVMRChzbXVtZ3IsIHBvcnQsIHJlZywgZmllbGQsIGZpZWxkdmFsKSBcCisJ U01VTV9XQUlUX1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVIoc211bWdyLCBwb3J0LCByZWcsCQlcCisJ CShmaWVsZHZhbCkgPDwgU01VTV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSwJCVwKKwkJU01VTV9G SUVMRF9NQVNLKHJlZywgZmllbGQpKQorCisjZGVmaW5lIFNNVU1fV0FJVF9WRlBGX0lORElSRUNU X0ZJRUxEX1VORVFVQUwoc211bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkgXAorCVNN VU1fV0FJVF9WRlBGX0lORElSRUNUX1JFR0lTVEVSX1VORVFVQUwoc211bWdyLCBwb3J0LCByZWcs CVwKKwkJKGZpZWxkdmFsKSA8PCBTTVVNX0ZJRUxEX1NISUZUKHJlZywgZmllbGQpLAkJXAorCQlT TVVNX0ZJRUxEX01BU0socmVnLCBmaWVsZCkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdW1nci9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvcG93ZXJwbGF5L3NtdW1nci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42MWJmYjJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvc211bWdyL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBm b3IgdGhlICdzbXUgbWFuYWdlcicgc3ViLWNvbXBvbmVudCBvZiBwb3dlcnBsYXkuCisjIEl0IHBy b3ZpZGVzIHRoZSBzbXUgbWFuYWdlbWVudCBzZXJ2aWNlcyBmb3IgdGhlIGRyaXZlci4KKworU01V X01HUiA9IHNtdW1nci5vCisKK0FNRF9QUF9TTVVNR1IgPSAkKGFkZHByZWZpeCAkKEFNRF9QUF9Q QVRIKS9zbXVtZ3IvLCQoU01VX01HUikpCisKK0FNRF9QT1dFUlBMQVlfRklMRVMgKz0gJChBTURf UFBfU01VTUdSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211 bWdyL3NtdW1nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211bWdyL3NtdW1n ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTE3MTQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9zbXVtZ3Ivc211bWdyLmMK QEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBE ZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSAicHBfaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJzbXVtZ3IuaCIKKyNpbmNsdWRl ICJjZ3NfY29tbW9uLmgiCisjaW5jbHVkZSAibGludXgvZGVsYXkuaCIKKworaW50IHNtdW1faW5p dChzdHJ1Y3QgYW1kX3BwX2luaXQgKnBwX2luaXQsIHN0cnVjdCBwcF9pbnN0YW5jZSAqaGFuZGxl KQoreworCXN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1ncjsKKworCWlmICgoaGFuZGxlID09IE5VTEwp IHx8IChwcF9pbml0ID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNtdW1nciA9IGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcF9zbXVtZ3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc211bWdy ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc211bWdyLT5kZXZpY2UgPSBwcF9pbml0 LT5kZXZpY2U7CisJc211bWdyLT5jaGlwX2ZhbWlseSA9IHBwX2luaXQtPmNoaXBfZmFtaWx5Owor CXNtdW1nci0+Y2hpcF9pZCA9IHBwX2luaXQtPmNoaXBfaWQ7CisJc211bWdyLT5od19yZXZpc2lv biA9IHBwX2luaXQtPnJldl9pZDsKKwlzbXVtZ3ItPnVzZWNfdGltZW91dCA9IEFNRF9NQVhfVVNF Q19USU1FT1VUOworCXNtdW1nci0+cmVsb2FkX2Z3ID0gMTsKKwloYW5kbGUtPnNtdV9tZ3IgPSBz bXVtZ3I7CisKKwlzd2l0Y2ggKHNtdW1nci0+Y2hpcF9mYW1pbHkpIHsKKwljYXNlIEFNRF9GQU1J TFlfQ1o6CisJCS8qIFRPRE8gKi8KKwkJYnJlYWs7CisJY2FzZSBBTURfRkFNSUxZX1ZJOgorCQkv KiBUT0RPICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWtmcmVlKHNtdW1ncik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgc211bV9maW5pKHN0cnVjdCBw cF9zbXVtZ3IgKnNtdW1ncikKK3sKKwlrZnJlZShzbXVtZ3IpOworCXJldHVybiAwOworfQorCitp bnQgc211bV9nZXRfYXJndW1lbnQoc3RydWN0IHBwX3NtdW1nciAqc211bWdyKQoreworCWlmIChO VUxMICE9IHNtdW1nci0+c211bWdyX2Z1bmNzLT5nZXRfYXJndW1lbnQpCisJCXJldHVybiBzbXVt Z3ItPnNtdW1ncl9mdW5jcy0+Z2V0X2FyZ3VtZW50KHNtdW1ncik7CisKKwlyZXR1cm4gMDsKK30K KworaW50IHNtdW1fZG93bmxvYWRfcG93ZXJwbGF5X3RhYmxlKHN0cnVjdCBwcF9zbXVtZ3IgKnNt dW1nciwKKwkJCQkJCQkJdm9pZCAqKnRhYmxlKQoreworCWlmIChOVUxMICE9IHNtdW1nci0+c211 bWdyX2Z1bmNzLT5kb3dubG9hZF9wcHRhYmxlX3NldHRpbmdzKQorCQlyZXR1cm4gc211bWdyLT5z bXVtZ3JfZnVuY3MtPmRvd25sb2FkX3BwdGFibGVfc2V0dGluZ3Moc211bWdyLAorCQkJCQkJCQkJ dGFibGUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzbXVtX3VwbG9hZF9wb3dlcnBsYXlfdGFi bGUoc3RydWN0IHBwX3NtdW1nciAqc211bWdyKQoreworCWlmIChOVUxMICE9IHNtdW1nci0+c211 bWdyX2Z1bmNzLT51cGxvYWRfcHB0YWJsZV9zZXR0aW5ncykKKwkJcmV0dXJuIHNtdW1nci0+c211 bWdyX2Z1bmNzLT51cGxvYWRfcHB0YWJsZV9zZXR0aW5ncyhzbXVtZ3IpOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBzbXVtX3NlbmRfbXNnX3RvX3NtYyhzdHJ1Y3QgcHBfc211bWdyICpzbXVtZ3Is IHVpbnQxNl90IG1zZykKK3sKKwlpZiAoc211bWdyID09IE5VTEwgfHwgc211bWdyLT5zbXVtZ3Jf ZnVuY3MtPnNlbmRfbXNnX3RvX3NtYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJl dHVybiBzbXVtZ3ItPnNtdW1ncl9mdW5jcy0+c2VuZF9tc2dfdG9fc21jKHNtdW1nciwgbXNnKTsK K30KKworaW50IHNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKHN0cnVjdCBwcF9z bXVtZ3IgKnNtdW1nciwKKwkJCQkJdWludDE2X3QgbXNnLCB1aW50MzJfdCBwYXJhbWV0ZXIpCit7 CisJaWYgKHNtdW1nciA9PSBOVUxMIHx8CisJCXNtdW1nci0+c211bWdyX2Z1bmNzLT5zZW5kX21z Z190b19zbWNfd2l0aF9wYXJhbWV0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0 dXJuIHNtdW1nci0+c211bWdyX2Z1bmNzLT5zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIo CisJCQkJCQlzbXVtZ3IsIG1zZywgcGFyYW1ldGVyKTsKK30KKworLyoKKyAqIFJldHVybnMgb25j ZSB0aGUgcGFydCBvZiB0aGUgcmVnaXN0ZXIgaW5kaWNhdGVkIGJ5IHRoZSBtYXNrIGhhcworICog cmVhY2hlZCB0aGUgZ2l2ZW4gdmFsdWUuCisgKi8KK2ludCBzbXVtX3dhaXRfb25fcmVnaXN0ZXIo c3RydWN0IHBwX3NtdW1nciAqc211bWdyLAorCQkJCXVpbnQzMl90IGluZGV4LAorCQkJCXVpbnQz Ml90IHZhbHVlLCB1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IGk7CisJdWludDMyX3QgY3Vy X3ZhbHVlOworCisJaWYgKHNtdW1nciA9PSBOVUxMIHx8IHNtdW1nci0+ZGV2aWNlID09IE5VTEwp CisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHNtdW1nci0+dXNlY190aW1l b3V0OyBpKyspIHsKKwkJY3VyX3ZhbHVlID0gY2dzX3JlYWRfcmVnaXN0ZXIoc211bWdyLT5kZXZp Y2UsIGluZGV4KTsKKwkJaWYgKChjdXJfdmFsdWUgJiBtYXNrKSA9PSAodmFsdWUgJiBtYXNrKSkK KwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJLyogdGltZW91dCBtZWFucyB3cm9uZyBs b2dpYyovCisJaWYgKGkgPT0gc211bWdyLT51c2VjX3RpbWVvdXQpCisJCXJldHVybiAtMTsKKwor CXJldHVybiAwOworfQorCitpbnQgc211bV93YWl0X2Zvcl9yZWdpc3Rlcl91bmVxdWFsKHN0cnVj dCBwcF9zbXVtZ3IgKnNtdW1nciwKKwkJCQkJdWludDMyX3QgaW5kZXgsCisJCQkJCXVpbnQzMl90 IHZhbHVlLCB1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IGk7CisJdWludDMyX3QgY3VyX3Zh bHVlOworCisJaWYgKHNtdW1nciA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAo aSA9IDA7IGkgPCBzbXVtZ3ItPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWN1cl92YWx1ZSA9IGNn c19yZWFkX3JlZ2lzdGVyKHNtdW1nci0+ZGV2aWNlLAorCQkJCQkJCQkJaW5kZXgpOworCQlpZiAo KGN1cl92YWx1ZSAmIG1hc2spICE9ICh2YWx1ZSAmIG1hc2spKQorCQkJYnJlYWs7CisJCXVkZWxh eSgxKTsKKwl9CisKKwkvKiB0aW1lb3V0IG1lYW5zIHdyb25nIGxvZ2ljICovCisJaWYgKGkgPT0g c211bWdyLT51c2VjX3RpbWVvdXQpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisK Ky8qCisgKiBSZXR1cm5zIG9uY2UgdGhlIHBhcnQgb2YgdGhlIHJlZ2lzdGVyIGluZGljYXRlZCBi eSB0aGUgbWFzaworICogaGFzIHJlYWNoZWQgdGhlIGdpdmVuIHZhbHVlLlRoZSBpbmRpcmVjdCBz cGFjZSBpcyBkZXNjcmliZWQgYnkKKyAqIGdpdmluZyB0aGUgbWVtb3J5LW1hcHBlZCBpbmRleCBv ZiB0aGUgaW5kaXJlY3QgaW5kZXggcmVnaXN0ZXIuCisgKi8KK2ludCBzbXVtX3dhaXRfb25faW5k aXJlY3RfcmVnaXN0ZXIoc3RydWN0IHBwX3NtdW1nciAqc211bWdyLAorCQkJCQl1aW50MzJfdCBp bmRpcmVjdF9wb3J0LAorCQkJCQl1aW50MzJfdCBpbmRleCwKKwkJCQkJdWludDMyX3QgdmFsdWUs CisJCQkJCXVpbnQzMl90IG1hc2spCit7CisJaWYgKHNtdW1nciA9PSBOVUxMIHx8IHNtdW1nci0+ ZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJY2dzX3dyaXRlX3JlZ2lzdGVy KHNtdW1nci0+ZGV2aWNlLCBpbmRpcmVjdF9wb3J0LCBpbmRleCk7CisJcmV0dXJuIHNtdW1fd2Fp dF9vbl9yZWdpc3RlcihzbXVtZ3IsIGluZGlyZWN0X3BvcnQgKyAxLAorCQkJCQkJbWFzaywgdmFs dWUpOworfQorCit2b2lkIHNtdW1fd2FpdF9mb3JfaW5kaXJlY3RfcmVnaXN0ZXJfdW5lcXVhbCgK KwkJCQkJCXN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1nciwKKwkJCQkJCXVpbnQzMl90IGluZGlyZWN0 X3BvcnQsCisJCQkJCQl1aW50MzJfdCBpbmRleCwKKwkJCQkJCXVpbnQzMl90IHZhbHVlLAorCQkJ CQkJdWludDMyX3QgbWFzaykKK3sKKwlpZiAoc211bWdyID09IE5VTEwgfHwgc211bWdyLT5kZXZp Y2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCWNnc193cml0ZV9yZWdpc3RlcihzbXVtZ3ItPmRldmlj ZSwgaW5kaXJlY3RfcG9ydCwgaW5kZXgpOworCXNtdW1fd2FpdF9mb3JfcmVnaXN0ZXJfdW5lcXVh bChzbXVtZ3IsIGluZGlyZWN0X3BvcnQgKyAxLAorCQkJCQkJdmFsdWUsIG1hc2spOworfQorCitp bnQgc211X2FsbG9jYXRlX21lbW9yeSh2b2lkICpkZXZpY2UsIHVpbnQzMl90IHNpemUsCisJCQkg ZW51bSBjZ3NfZ3B1X21lbV90eXBlIHR5cGUsCisJCQkgdWludDMyX3QgYnl0ZV9hbGlnbiwgdWlu dDY0X3QgKm1jX2FkZHIsCisJCQkgdm9pZCAqKmtwdHIsIHZvaWQgKmhhbmRsZSkKK3sKKwlpbnQg cmV0ID0gMDsKKwljZ3NfaGFuZGxlX3QgY2dzX2hhbmRsZTsKKworCWlmIChkZXZpY2UgPT0gTlVM TCB8fCBoYW5kbGUgPT0gTlVMTCB8fAorCSAgICBtY19hZGRyID09IE5VTEwgfHwga3B0ciA9PSBO VUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGNnc19hbGxvY19ncHVfbWVtKGRldmlj ZSwgdHlwZSwgc2l6ZSwgYnl0ZV9hbGlnbiwKKwkJCQkwLCAwLCAoY2dzX2hhbmRsZV90ICopaGFu ZGxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNnc19oYW5kbGUgPSAqKGNn c19oYW5kbGVfdCAqKWhhbmRsZTsKKworCXJldCA9IGNnc19nbWFwX2dwdV9tZW0oZGV2aWNlLCBj Z3NfaGFuZGxlLCBtY19hZGRyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2dtYXA7CisKKwly ZXQgPSBjZ3Nfa21hcF9ncHVfbWVtKGRldmljZSwgY2dzX2hhbmRsZSwga3B0cik7CisJaWYgKHJl dCkKKwkJZ290byBlcnJvcl9rbWFwOworCisJcmV0dXJuIDA7CisKK2Vycm9yX2ttYXA6CisJY2dz X2d1bm1hcF9ncHVfbWVtKGRldmljZSwgY2dzX2hhbmRsZSk7CisKK2Vycm9yX2dtYXA6CisJY2dz X2ZyZWVfZ3B1X21lbShkZXZpY2UsIGNnc19oYW5kbGUpOworCXJldHVybiByZXQ7Cit9CisKK2lu dCBzbXVfZnJlZV9tZW1vcnkodm9pZCAqZGV2aWNlLCB2b2lkICpoYW5kbGUpCit7CisJY2dzX2hh bmRsZV90IGNnc19oYW5kbGUgPSAoY2dzX2hhbmRsZV90KWhhbmRsZTsKKworCWlmIChkZXZpY2Ug PT0gTlVMTCB8fCBoYW5kbGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZ3Nfa3Vu bWFwX2dwdV9tZW0oZGV2aWNlLCBjZ3NfaGFuZGxlKTsKKwljZ3NfZ3VubWFwX2dwdV9tZW0oZGV2 aWNlLCBjZ3NfaGFuZGxlKTsKKwljZ3NfZnJlZV9ncHVfbWVtKGRldmljZSwgY2dzX2hhbmRsZSk7 CisKKwlyZXR1cm4gMDsKK30KLS0gCjEuOC4zLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==