From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH] tests/kms_psr_sink_crc: Create test to test PSR by checking panel CRC. Date: Wed, 29 Jan 2014 12:56:26 -0200 Message-ID: <1391007386-8822-1-git-send-email-rodrigo.vivi@gmail.com> References: <1390938491-4735-1-git-send-email-rodrigo.vivi@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f46.google.com (mail-pa0-f46.google.com [209.85.220.46]) by gabe.freedesktop.org (Postfix) with ESMTP id C2339FBD4F for ; Wed, 29 Jan 2014 06:56:38 -0800 (PST) Received: by mail-pa0-f46.google.com with SMTP id rd3so1845344pab.33 for ; Wed, 29 Jan 2014 06:56:38 -0800 (PST) In-Reply-To: <1390938491-4735-1-git-send-email-rodrigo.vivi@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org djI6IFdhaXQgcHNyIGVuYWJsZSB3aXRoIHRpbWVvdXQgYW5kIG1vcmUgc3VidGVzdCBhZGRlZC4K djM6IEFkZCB3YWl0IGZvciB2X2JsYW5rIGxlZXRpbmcgdGVzdCBtb3JlIHJlbGlhYmxlIGFuZCBw cmVwYXJpbmcgdG8KICAgIGFkZCBCYXl0cmFpbCBwZXItcGlwZSB0ZXN0cy4KdjQ6IENhbGwgYnVz eV9pb2N0bCBvbiBtbWFwX2d0dCB0byBtYXRjaCB0aGUgcmVhbCB1c2FnZSBhbmQgcmVtb3ZlIHRo ZSBuZWVkCiAgICBvZiBpbmFjdGl2YXRlIG9uIHNldF9kb21haW4sIHdoYXQgd2FzIHNlbWFudGlj YWxseSB3cm9uZy4KCkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K U2lnbmVkLW9mZi1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAZ21haWwuY29tPgotLS0K IHRlc3RzL0FuZHJvaWQubWsgICAgICAgICB8ICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz ICAgfCAgIDEgKwogdGVzdHMva21zX3Bzcl9zaW5rX2NyYy5jIHwgNTE1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDUxNyBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3Bzcl9zaW5rX2NyYy5j CgpkaWZmIC0tZ2l0IGEvdGVzdHMvQW5kcm9pZC5tayBiL3Rlc3RzL0FuZHJvaWQubWsKaW5kZXgg ZmE5ZTlkNy4uODE5MDZiZSAxMDA2NDQKLS0tIGEvdGVzdHMvQW5kcm9pZC5taworKysgYi90ZXN0 cy9BbmRyb2lkLm1rCkBAIC05NSw2ICs5NSw3IEBAIHNraXBfdGVzdHNfbGlzdCA6PSBcCiAgICAg a21zX2N1cnNvcl9jcmMgXAogICAgIGttc19mbGlwIFwKICAgICBrbXNfcGlwZV9jcmNfYmFzaWMg XAorICAgIGttc19wc3Jfc2lua19jcmMgXAogICAgIGttc19mYmNfY3JjIFwKICAgICBrbXNfcmVu ZGVyIFwKICAgICBrbXNfc2V0bW9kZSBcCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA1ZmU2OGFlLi5mZGIxZTQxIDEwMDY0 NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKQEAgLTU4LDYgKzU4LDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKIAlrbXNfZmJjX2NyYyBcCiAJ a21zX2ZsaXAgXAogCWttc19waXBlX2NyY19iYXNpYyBcCisJa21zX3Bzcl9zaW5rX2NyYyBcCiAJ a21zX3JlbmRlciBcCiAJa21zX3NldG1vZGUgXAogCWttc19zaW5rX2NyY19iYXNpYyBcCmRpZmYg LS1naXQgYS90ZXN0cy9rbXNfcHNyX3NpbmtfY3JjLmMgYi90ZXN0cy9rbXNfcHNyX3NpbmtfY3Jj LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5N2NhYQotLS0gL2Rldi9u dWxsCisrKyBiL3Rlc3RzL2ttc19wc3Jfc2lua19jcmMuYwpAQCAtMCwwICsxLDUxNSBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8ZXJybm8u aD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KKworI2luY2x1ZGUgImRybV9mb3VyY2MuaCIKKworI2luY2x1ZGUgImRybXRlc3Qu aCIKKyNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgorI2luY2x1ZGUgImlndF9rbXMuaCIKKyNpbmNs dWRlICJyZW5kZXJjb3B5LmgiCisKK2VudW0gdGVzdF9tb2RlIHsKKwlURVNUX1BBR0VfRkxJUCwK KwlURVNUX01NQVBfQ1BVLAorCVRFU1RfTU1BUF9HVFQsCisJVEVTVF9CTFQsCisJVEVTVF9SRU5E RVIsCisJVEVTVF9DT05URVhULAorCVRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0NQVSwKKwlURVNU X1BBR0VfRkxJUF9BTkRfTU1BUF9HVFQsCisJVEVTVF9QQUdFX0ZMSVBfQU5EX0JMVCwKKwlURVNU X1BBR0VfRkxJUF9BTkRfUkVOREVSLAorCVRFU1RfUEFHRV9GTElQX0FORF9DT05URVhULAorCVRF U1RfQ1VSU09SX01PVkUsCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IGttc3Rlc3Rf Y29ubmVjdG9yX2NvbmZpZyBjb25maWc7CisJZHJtTW9kZU1vZGVJbmZvIG1vZGU7CisJc3RydWN0 IGttc3Rlc3RfZmIgZmJbMl07Cit9IGNvbm5lY3Rvcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJ aW50IGRybV9mZDsKKwlpZ3RfZGVidWdmc190IGRlYnVnZnM7CisJZHJtTW9kZVJlcyAqcmVzb3Vy Y2VzOworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1faW50ZWxfY29udGV4dCAqY3R4 WzJdOworCXVpbnQzMl90IGRldmlkOworCXVpbnQzMl90IGhhbmRsZVsyXTsKKwl1aW50MzJfdCBj cnRjX2lkOworCXVpbnQzMl90IGNydGNfaWR4OworCXVpbnQzMl90IGZiX2lkWzNdOworfSBkYXRh X3Q7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X21vZGVfc3RyKGVudW0gdGVzdF9tb2RlIG1v ZGUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXN0X21vZGVzW10gPSB7CisJCVtU RVNUX1BBR0VfRkxJUF0gPSAicGFnZV9mbGlwIiwKKwkJW1RFU1RfTU1BUF9DUFVdID0gIm1tYXBf Y3B1IiwKKwkJW1RFU1RfTU1BUF9HVFRdID0gIm1tYXBfZ3R0IiwKKwkJW1RFU1RfQkxUXSA9ICJi bHQiLAorCQlbVEVTVF9SRU5ERVJdID0gInJlbmRlciIsCisJCVtURVNUX0NPTlRFWFRdID0gImNv bnRleHQiLAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVXSA9ICJwYWdlX2ZsaXBfYW5k X21tYXBfY3B1IiwKKwkJW1RFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVF0gPSAicGFnZV9mbGlw X2FuZF9tbWFwX2d0dCIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfQkxUXSA9ICJwYWdlX2ZsaXBf YW5kX2JsdCIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSXSA9ICJwYWdlX2ZsaXBfYW5k X3JlbmRlciIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVF0gPSAicGFnZV9mbGlwX2Fu ZF9jb250ZXh0IiwKKwkJW1RFU1RfQ1VSU09SX01PVkVdID0gImN1cnNvcl9tb3ZlIiwKKwl9Owor CisJcmV0dXJuIHRlc3RfbW9kZXNbbW9kZV07Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcmVhdGVf ZmIoZGF0YV90ICpkYXRhLAorCQkJICBpbnQgdywgaW50IGgsCisJCQkgIGRvdWJsZSByLCBkb3Vi bGUgZywgZG91YmxlIGIsCisJCQkgIHN0cnVjdCBrbXN0ZXN0X2ZiICpmYikKK3sKKwl1aW50MzJf dCBmYl9pZDsKKwljYWlyb190ICpjcjsKKworCWZiX2lkID0ga21zdGVzdF9jcmVhdGVfZmIyKGRh dGEtPmRybV9mZCwgdywgaCwKKwkJCQkgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB0cnVlLCBmYik7 CisJaWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGttc3Rlc3RfZ2V0X2NhaXJvX2N0eChkYXRh LT5kcm1fZmQsIGZiKTsKKwlrbXN0ZXN0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCB3LCBoLCByLCBn LCBiKTsKKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7CisJY2Fpcm9fZGVzdHJv eShjcik7CisKKwlyZXR1cm4gZmJfaWQ7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9jdXJzb3Jf ZmIoZGF0YV90ICpkYXRhLCBzdHJ1Y3Qga21zdGVzdF9mYiAqZmIpCit7CisJY2Fpcm9fdCAqY3I7 CisKKwlkYXRhLT5mYl9pZFsyXSA9IGttc3Rlc3RfY3JlYXRlX2ZiMihkYXRhLT5kcm1fZmQsIDY0 LCA2NCwKKwkJCQkJICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIGZhbHNlLAorCQkJCQkgICAgZmIp OworCWlndF9hc3NlcnQoZGF0YS0+ZmJfaWRbMl0pOworCisJY3IgPSBrbXN0ZXN0X2dldF9jYWly b19jdHgoZGF0YS0+ZHJtX2ZkLCBmYik7CisJa21zdGVzdF9wYWludF9jb2xvcl9hbHBoYShjciwg MCwgMCwgNjQsIDY0LCAxLjAsIDEuMCwgMS4wLCAxLjApOworCWlndF9hc3NlcnQoY2Fpcm9fc3Rh dHVzKGNyKSA9PSAwKTsKK30KKworc3RhdGljIGJvb2wKK2Nvbm5lY3Rvcl9zZXRfbW9kZShkYXRh X3QgKmRhdGEsIGNvbm5lY3Rvcl90ICpjb25uZWN0b3IsCisJCSAgIGRybU1vZGVNb2RlSW5mbyAq bW9kZSwgdWludDMyX3QgZmJfaWQpCit7CisJc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZp ZyAqY29uZmlnID0gJmNvbm5lY3Rvci0+Y29uZmlnOworCWludCByZXQ7CisKKyNpZiAwCisJZnBy aW50ZihzdGRvdXQsICJVc2luZyBwaXBlICVjLCAlZHglZFxuIiwgcGlwZV9uYW1lKGNvbmZpZy0+ cGlwZSksCisJCW1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisjZW5kaWYKKworCXJl dCA9IGRybU1vZGVTZXRDcnRjKGRhdGEtPmRybV9mZCwKKwkJCSAgICAgY29uZmlnLT5jcnRjLT5j cnRjX2lkLAorCQkJICAgICBmYl9pZCwKKwkJCSAgICAgMCwgMCwgLyogeCwgeSAqLworCQkJICAg ICAmY29uZmlnLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwKKwkJCSAgICAgMSwKKwkJCSAgICAg bW9kZSk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgZGlzcGxheV9pbml0KGRhdGFfdCAqZGF0YSkKK3sKKwlkYXRhLT5yZXNvdXJjZXMgPSBk cm1Nb2RlR2V0UmVzb3VyY2VzKGRhdGEtPmRybV9mZCk7CisJaWd0X2Fzc2VydChkYXRhLT5yZXNv dXJjZXMpOworfQorCitzdGF0aWMgdm9pZCBkaXNwbGF5X2ZpbmkoZGF0YV90ICpkYXRhKQorewor CWRybU1vZGVTZXRDdXJzb3IoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLCAwLCAwLCAwKTsK Kwlkcm1Nb2RlRnJlZVJlc291cmNlcyhkYXRhLT5yZXNvdXJjZXMpOworfQorCitzdGF0aWMgdm9p ZCBmaWxsX2JsdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgdW5zaWduZWQgY2hhciBj b2xvcikKK3sKKwlkcm1faW50ZWxfYm8gKmRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRh dGEtPmJ1Zm1nciwKKwkJCQkJCSAgICBkYXRhLT5kcm1fZmQsCisJCQkJCQkgICAgIiIsIGhhbmRs ZSk7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKworCWJhdGNoID0gaW50ZWxf YmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2Vy dChiYXRjaCk7CisKKwlCRUdJTl9CQVRDSCg1KTsKKwlPVVRfQkFUQ0goQ09MT1JfQkxUX0NNRCk7 CisJT1VUX0JBVENIKCgxIDw8IDI0KSB8ICgweGYwIDw8IDE2KSB8IDApOworCU9VVF9CQVRDSCgx IDw8IDE2IHwgNCk7CisJT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkx NV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7CisJT1VUX0JBVENIKGNvbG9yKTsKKwlBRFZBTkNFX0JB VENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7CisJaW50ZWxfYmF0Y2hi dWZmZXJfZnJlZShiYXRjaCk7CisKKwlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7 Cit9CisKK3N0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoc3RydWN0IHNjcmF0Y2hfYnVmICpi dWYsIGRybV9pbnRlbF9ibyAqYm8pCit7CisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+c3RyaWRlID0g NDA5NjsKKwlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX1g7CisJYnVmLT5zaXplID0gNDA5NjsK K30KKworc3RhdGljIHZvaWQgZXhlY19ub3AoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBoYW5kbGUs IGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0KQoreworCWRybV9pbnRlbF9ibyAqZHN0OworCXN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisKKwlkc3QgPSBnZW1faGFuZGxlX3RvX2xp YmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsIGhhbmRsZSk7CisJaWd0X2Fz c2VydChkc3QpOworCisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZt Z3IsIGRhdGEtPmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCS8qIGFkZCB0aGUgcmVs b2MgdG8gbWFrZSBzdXJlIHRoZSBrZXJuZWwgd2lsbCB0aGluayB3ZSB3cml0ZSB0byBkc3QgKi8K KwlCRUdJTl9CQVRDSCg0KTsKKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJT1VU X0JBVENIKE1JX05PT1ApOworCU9VVF9SRUxPQyhkc3QsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIs IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOworCU9VVF9CQVRDSChNSV9OT09QKTsKKwlBRFZB TkNFX0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0 Y2gsIGNvbnRleHQpOworCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOworfQorCitzdGF0 aWMgdm9pZCBmaWxsX3JlbmRlcihkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwKKwkJCWRy bV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyIGNvbG9yKQoreworCWRybV9p bnRlbF9ibyAqc3JjLCAqZHN0OworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisJ c3RydWN0IHNjcmF0Y2hfYnVmIHNyY19idWYsIGRzdF9idWY7CisJY29uc3QgdWludDhfdCBidWZb NF0gPSB7IGNvbG9yLCBjb2xvciwgY29sb3IsIGNvbG9yIH07CisJcmVuZGVyX2NvcHlmdW5jX3Qg cmVuZGVyY29weSA9IGdldF9yZW5kZXJfY29weWZ1bmMoZGF0YS0+ZGV2aWQpOworCisJaWd0X3Nr aXBfb24oIXJlbmRlcmNvcHkpOworCisJZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oZGF0 YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQsICIiLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZHN0KTsK KworCXNyYyA9IGRybV9pbnRlbF9ib19hbGxvYyhkYXRhLT5idWZtZ3IsICIiLCA0MDk2LCA0MDk2 KTsKKwlpZ3RfYXNzZXJ0KHNyYyk7CisKKwlnZW1fd3JpdGUoZGF0YS0+ZHJtX2ZkLCBzcmMtPmhh bmRsZSwgMCwgYnVmLCA0KTsKKworCXNjcmF0Y2hfYnVmX2luaXQoJnNyY19idWYsIHNyYyk7CisJ c2NyYXRjaF9idWZfaW5pdCgmZHN0X2J1ZiwgZHN0KTsKKworCWJhdGNoID0gaW50ZWxfYmF0Y2hi dWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2VydChiYXRj aCk7CisKKwlyZW5kZXJjb3B5KGJhdGNoLCBjb250ZXh0LAorCQkgICAmc3JjX2J1ZiwgMCwgMCwg MSwgMSwKKwkJICAgJmRzdF9idWYsIDAsIDApOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShi YXRjaCk7CisKKwlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7Cit9CisKK3N0YXRp YyBib29sIHBzcl9zaW5rX3N1cHBvcnQoZGF0YV90ICpkYXRhKQoreworCWludCByZXQ7CisJRklM RSAqZmlsZTsKKwljaGFyIHN0cls0XTsKKworCWZpbGUgPSBpZ3RfZGVidWdmc19mb3BlbigmZGF0 YS0+ZGVidWdmcywgImk5MTVfZWRwX3Bzcl9zdGF0dXMiLCAiciIpOworCWlndF9yZXF1aXJlKGZp bGUpOworCisJcmV0ID0gZnNjYW5mKGZpbGUsICJTaW5rX1N1cHBvcnQ6ICVzXG4iLCBzdHIpOwor CWlmIChyZXQgPT0gMCkKKwkgICAgaWd0X3NraXAoImk5MTVfZWRwX3Bzcl9zdGF0dXMgZm9ybWF0 IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0ZXN0IGNhc2VcbiIpOworCisJZmNsb3NlKGZpbGUpOwor CXJldHVybiBzdHJjbXAoc3RyLCAieWVzIikgPT0gMDsKK30KKworc3RhdGljIGJvb2wgcHNyX2Vu YWJsZWQoZGF0YV90ICpkYXRhKQoreworCWludCByZXQ7CisJRklMRSAqZmlsZTsKKwljaGFyIHN0 cls0XTsKKworCWZpbGUgPSBpZ3RfZGVidWdmc19mb3BlbigmZGF0YS0+ZGVidWdmcywgImk5MTVf ZWRwX3Bzcl9zdGF0dXMiLCAiciIpOworCWlndF9yZXF1aXJlKGZpbGUpOworCisJcmV0ID0gZnNj YW5mKGZpbGUsICJTaW5rX1N1cHBvcnQ6ICVzXG4iLCBzdHIpOworCWlndF9hc3NlcnQocmV0ICE9 IDApOworCisJcmV0ID0gZnNjYW5mKGZpbGUsICJTb3VyY2VfT0s6ICVzXG4iLCBzdHIpOworCWln dF9hc3NlcnQocmV0ICE9IDApOworCisJcmV0ID0gZnNjYW5mKGZpbGUsICJFbmFibGVkOiAlc1xu Iiwgc3RyKTsKKwlpZ3RfYXNzZXJ0KHJldCAhPSAwKTsKKworCWZjbG9zZShmaWxlKTsKKwlyZXR1 cm4gc3RyY21wKHN0ciwgInllcyIpID09IDA7Cit9CisKK3N0YXRpYyBib29sIHdhaXRfcHNyX2Vu dHJ5KGRhdGFfdCAqZGF0YSwgaW50IHRpbWVvdXQpCit7CisJd2hpbGUgKHRpbWVvdXQtLSkgewor CQlpZiAocHNyX2VuYWJsZWQoZGF0YSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJc2xlZXAoMSk7CisJ fQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3NpbmtfY3JjKGRhdGFfdCAq ZGF0YSwgY2hhciAqY3JjKSB7CisJaW50IHJldDsKKwlGSUxFICpmaWxlOworCisJZmlsZSA9IGln dF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLT5kZWJ1Z2ZzLCAiaTkxNV9zaW5rX2NyY19lRFAxIiwgInIi KTsKKwlpZ3RfcmVxdWlyZShmaWxlKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiJXNcbiIsIGNy Yyk7CisJaWd0X3JlcXVpcmUocmV0ID4gMCk7CisKKwlmY2xvc2UoZmlsZSk7Cit9CisKK3N0YXRp YyB2b2lkIHRlc3RfY3JjKGRhdGFfdCAqZGF0YSwgZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sKKwl1 aW50MzJfdCBoYW5kbGUgPSBkYXRhLT5oYW5kbGVbMF07CisJY2hhciByZWZfY3JjWzEyXTsKKwlj aGFyIGNyY1sxMl07CisKKwlpZiAobW9kZSA9PSBURVNUX0NVUlNPUl9NT1ZFKSB7CisJCWlndF9h c3NlcnQoZHJtTW9kZVNldEN1cnNvcihkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsCisJCQkJ CSAgICBoYW5kbGUsIDY0LCA2NCkgPT0gMCk7CisJCWlndF9hc3NlcnQoZHJtTW9kZU1vdmVDdXJz b3IoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLAorCQkJCQkgICAgIDEsIDEpID09IDApOwor CX0KKworCXVzbGVlcCgzMDAwMDApOworCWlndF9hc3NlcnQod2FpdF9wc3JfZW50cnkoZGF0YSwg MTApKTsKKwlnZXRfc2lua19jcmMoZGF0YSwgcmVmX2NyYyk7CisKKwlzd2l0Y2ggKG1vZGUpIHsK KwkJdm9pZCAqcHRyOworCWNhc2UgVEVTVF9QQUdFX0ZMSVA6CisJCWlndF9hc3NlcnQoZHJtTW9k ZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJf aWRbMV0sIDAsIE5VTEwpID09IDApOworCQlicmVhazsKKwljYXNlIFRFU1RfTU1BUF9DUFU6CisJ Y2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9DUFU6CisJCXB0ciA9IGdlbV9tbWFwX19jcHUo ZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDQwOTYsIFBST1RfV1JJVEUpOworCQlnZW1fc2V0X2RvbWFp bihkYXRhLT5kcm1fZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9N QUlOX0NQVSk7CisJCW1lbXNldChwdHIsIDB4ZmYsIDQpOworCQltdW5tYXAocHRyLCA0MDk2KTsK KwkJZ2VtX3N3X2ZpbmlzaChkYXRhLT5kcm1fZmQsIGhhbmRsZSk7CisJCWJyZWFrOworCWNhc2Ug VEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfR1RUOgorCQloYW5kbGUgPSBkYXRhLT5oYW5kbGVbMV07 CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19p ZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwpID09IDApOworCWNhc2UgVEVTVF9N TUFQX0dUVDoKKwkJcHRyID0gZ2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIGhhbmRsZSwgNDA5 NiwgUFJPVF9XUklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJ OTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJbWVtc2V0KHB0ciwg MHhmZiwgNCk7CisJCW11bm1hcChwdHIsIDQwOTYpOworCQlnZW1fYm9fYnVzeShkYXRhLT5kcm1f ZmQsIGhhbmRsZSk7CisJCWJyZWFrOworCWNhc2UgVEVTVF9CTFQ6CisJY2FzZSBURVNUX1BBR0Vf RkxJUF9BTkRfQkxUOgorCQlmaWxsX2JsdChkYXRhLCBoYW5kbGUsIDB4ZmYpOworCQlicmVhazsK KwljYXNlIFRFU1RfUkVOREVSOgorCWNhc2UgVEVTVF9DT05URVhUOgorCWNhc2UgVEVTVF9QQUdF X0ZMSVBfQU5EX1JFTkRFUjoKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9DT05URVhUOgorCQlm aWxsX3JlbmRlcihkYXRhLCBoYW5kbGUsCisJCQkgICAgKG1vZGUgPT0gVEVTVF9DT05URVhUIHx8 IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpID8KKwkJCSAgICBkYXRhLT5jdHhb MV0gOiBOVUxMLCAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX0NVUlNPUl9NT1ZFOgorCQlp Z3RfYXNzZXJ0KGRybU1vZGVNb3ZlQ3Vyc29yKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwg MSwgMikgPT0gMCk7CisJCWJyZWFrOworCX0KKwlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRhdGEtPmRy bV9mZCwgZGF0YS0+Y3J0Y19pZHgpOworCisJZ2V0X3NpbmtfY3JjKGRhdGEsIGNyYyk7CisJaWd0 X2Fzc2VydChzdHJjbXAocmVmX2NyYywgY3JjKSAhPSAwKTsKK30KKworc3RhdGljIGJvb2wgcHJl cGFyZV9jcnRjKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgY29ubmVjdG9yX2lkLCBlbnVtIHRlc3Rf bW9kZSBtb2RlKQoreworCWNvbm5lY3Rvcl90IGNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJcmV0 ID0ga21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZyhkYXRhLT5kcm1fZmQsCisJCQkJCSAgIGNv bm5lY3Rvcl9pZCwKKwkJCQkJICAgMSA8PCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkJICAgJmNvbm5l Y3Rvci5jb25maWcpOworCWlmIChyZXQpCisJCXJldHVybiBmYWxzZTsKKworCWRhdGEtPmZiX2lk WzBdID0gY3JlYXRlX2ZiKGRhdGEsCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21v ZGUuaGRpc3BsYXksCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUudmRpc3Bs YXksCisJCQkJICAgMC4wLCAwLjAsIDAuMCwgJmNvbm5lY3Rvci5mYlswXSk7CisJaWd0X2Fzc2Vy dChkYXRhLT5mYl9pZFswXSk7CisKKwlpZiAobW9kZSA9PSBURVNUX0NVUlNPUl9NT1ZFKQorCQlj cmVhdGVfY3Vyc29yX2ZiKGRhdGEsICZjb25uZWN0b3IuZmJbMF0pOworCisJZGF0YS0+ZmJfaWRb MV0gPSBjcmVhdGVfZmIoZGF0YSwKKwkJCQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9k ZS5oZGlzcGxheSwKKwkJCQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZS52ZGlzcGxh eSwKKwkJCQkgICAwLjEsIDAuMSwgMC4xLCAmY29ubmVjdG9yLmZiWzFdKTsKKwlpZ3RfYXNzZXJ0 KGRhdGEtPmZiX2lkWzFdKTsKKworCWRhdGEtPmhhbmRsZVswXSA9IGNvbm5lY3Rvci5mYlswXS5n ZW1faGFuZGxlOworCWRhdGEtPmhhbmRsZVsxXSA9IGNvbm5lY3Rvci5mYlsxXS5nZW1faGFuZGxl OworCisJLyogc2Nhbm91dCA9IGZiWzFdICovCisJY29ubmVjdG9yX3NldF9tb2RlKGRhdGEsICZj b25uZWN0b3IsICZjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZSwKKwkJCSAgIGRhdGEtPmZi X2lkWzFdKTsKKworCWlmIChtb2RlID09IFRFU1RfQ09OVEVYVCB8fCBtb2RlID09IFRFU1RfUEFH RV9GTElQX0FORF9DT05URVhUKSB7CisJCWRhdGEtPmN0eFswXSA9IGRybV9pbnRlbF9nZW1fY29u dGV4dF9jcmVhdGUoZGF0YS0+YnVmbWdyKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS0+Y3R4WzBdKTsK KwkJZGF0YS0+Y3R4WzFdID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShkYXRhLT5idWZt Z3IpOworCQlpZ3RfcmVxdWlyZShkYXRhLT5jdHhbMV0pOworCisJCS8qCisJCSAqIERpc2FibGUg RkJDIFJUIGFkZHJlc3MgZm9yIGJvdGggY29udGV4dHMKKwkJICogKGJ5ICJyZW5kZXJpbmciIHRv IGEgbm9uLXNjYW5vdXQgYnVmZmVyKS4KKwkJICovCisJCWV4ZWNfbm9wKGRhdGEsIGRhdGEtPmhh bmRsZVswXSwgZGF0YS0+Y3R4WzFdKTsKKwkJZXhlY19ub3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBd LCBkYXRhLT5jdHhbMF0pOworCQlleGVjX25vcChkYXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEt PmN0eFsxXSk7CisJCWV4ZWNfbm9wKGRhdGEsIGRhdGEtPmhhbmRsZVswXSwgZGF0YS0+Y3R4WzBd KTsKKwl9CisKKwkvKiBzY2Fub3V0ID0gZmJbMF0gKi8KKwljb25uZWN0b3Jfc2V0X21vZGUoZGF0 YSwgJmNvbm5lY3RvciwgJmNvbm5lY3Rvci5jb25maWcuZGVmYXVsdF9tb2RlLAorCQkJICAgZGF0 YS0+ZmJfaWRbMF0pOworCisJaWYgKG1vZGUgPT0gVEVTVF9DT05URVhUIHx8IG1vZGUgPT0gVEVT VF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpIHsKKwkJLyoKKwkJICogbWFrZSBjdHhbMF0gRkJDIFJU IGFkZHJlc3MgcG9pbnQgdG8gZmJbMF0sIGN0eFsxXQorCQkgKiBGQkMgUlQgYWRkcmVzcyBpcyBs ZWZ0IGFzIGRpc2FibGVkLgorCQkgKi8KKwkJZXhlY19ub3AoZGF0YSwgY29ubmVjdG9yLmZiWzBd LmdlbV9oYW5kbGUsIGRhdGEtPmN0eFswXSk7CisJfQorCisJa21zdGVzdF9mcmVlX2Nvbm5lY3Rv cl9jb25maWcoJmNvbm5lY3Rvci5jb25maWcpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyB2b2lkIGZpbmlzaF9jcnRjKGRhdGFfdCAqZGF0YSwgZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sK KwlpZiAobW9kZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRf Q09OVEVYVCkgeworCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShkYXRhLT5jdHhbMF0p OworCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShkYXRhLT5jdHhbMV0pOworCX0KK30K Kworc3RhdGljIHZvaWQgcnVuX3Rlc3QoZGF0YV90ICpkYXRhLCBlbnVtIHRlc3RfbW9kZSBtb2Rl KQoreworCWludCBpLCBuOworCWRybU1vZGVDb25uZWN0b3JQdHIgYzsKKwkvKiBCYXl0cmFpbCBz dXBwb3J0cyBwZXItcGlwZSBQU1IgY29uZmlndXJhdGlvbiwgaG93ZXZlciBQU1Igb24KKwkgKiBQ SVBFX0IgaXNuJ3Qgd29ya2luZyBwcm9wZXJseS4gU28gbGV0J3Mga2VlcCBpdCBkaXNhYmxlZCBm b3Igbm93LgorCSAqIGNydGNzID0gSVNfVkFMTEVZVklFVyhkYXRhLT5kZXZpZCk/IDIgOiAxOyAq LworCWludCBjcnRjcyA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzb3VyY2VzLT5j b3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJdWludDMyX3QgY29ubmVjdG9yX2lkID0gZGF0YS0+ cmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldOworCQljID0gZHJtTW9kZUdldENvbm5lY3RvcihkYXRh LT5kcm1fZmQsIGNvbm5lY3Rvcl9pZCk7CisKKwkJaWYgKGMtPmNvbm5lY3Rvcl90eXBlICE9IERS TV9NT0RFX0NPTk5FQ1RPUl9lRFAgfHwKKwkJICAgIGMtPmNvbm5lY3Rpb24gIT0gRFJNX01PREVf Q09OTkVDVEVEKQorCQkJY29udGludWU7CisJCWZvciAobiA9IDA7IG4gPCBjcnRjczsgbisrKSB7 CisJCQlkYXRhLT5jcnRjX2lkeCA9IG47CisJCQlkYXRhLT5jcnRjX2lkID0gZGF0YS0+cmVzb3Vy Y2VzLT5jcnRjc1tuXTsKKworCQkJaWYgKCFwcmVwYXJlX2NydGMoZGF0YSwgY29ubmVjdG9yX2lk LCBtb2RlKSkKKwkJCQljb250aW51ZTsKKworCQkJdGVzdF9jcmMoZGF0YSwgbW9kZSk7CisKKwkJ CWZpbmlzaF9jcnRjKGRhdGEsIG1vZGUpOworCQl9CisJfQorfQorCitpZ3RfbWFpbgoreworCWRh dGFfdCBkYXRhID0ge307CisJZW51bSB0ZXN0X21vZGUgbW9kZTsKKworCWlndF9za2lwX29uX3Np bXVsYXRpb24oKTsKKworCWlndF9maXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9h bnkoKTsKKwkJaWd0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJZGF0YS5kZXZpZCA9IGlu dGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOworCisJCWlndF9kZWJ1Z2ZzX2luaXQoJmRh dGEuZGVidWdmcyk7CisKKwkJaWd0X2Fzc2VydChwc3Jfc2lua19zdXBwb3J0KCZkYXRhKSk7CisK KwkJZGF0YS5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEuZHJtX2ZkLCA0 MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLmJ1Zm1ncik7CisJCWRybV9pbnRlbF9idWZtZ3JfZ2Vt X2VuYWJsZV9yZXVzZShkYXRhLmJ1Zm1ncik7CisKKwkJZGlzcGxheV9pbml0KCZkYXRhKTsKKwl9 CisKKwlmb3IgKG1vZGUgPSBURVNUX1BBR0VfRkxJUDsgbW9kZSA8PSBURVNUX0NVUlNPUl9NT1ZF OyBtb2RlKyspIHsKKwkJaWd0X3N1YnRlc3RfZigiJXMiLCB0ZXN0X21vZGVfc3RyKG1vZGUpKSB7 CisJCQlydW5fdGVzdCgmZGF0YSwgbW9kZSk7CisJCX0KKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJ CWRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShkYXRhLmJ1Zm1ncik7CisJCWRpc3BsYXlfZmluaSgm ZGF0YSk7CisJfQorfQotLSAKMS44LjEuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK