From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH 2/3] tests/kms_psr_sink_crc: Create test to test PSR by checking panel CRC. Date: Thu, 23 Jan 2014 16:18:05 -0200 Message-ID: <1390501086-4727-2-git-send-email-rodrigo.vivi@gmail.com> References: <1390501086-4727-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-gg0-f175.google.com (mail-gg0-f175.google.com [209.85.161.175]) by gabe.freedesktop.org (Postfix) with ESMTP id AC23EFBA13 for ; Thu, 23 Jan 2014 10:18:21 -0800 (PST) Received: by mail-gg0-f175.google.com with SMTP id c2so524880ggn.20 for ; Thu, 23 Jan 2014 10:18:21 -0800 (PST) In-Reply-To: <1390501086-4727-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 ClNpZ25lZC1vZmYtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGdtYWlsLmNvbT4KLS0t CiB0ZXN0cy9BbmRyb2lkLm1rICAgICAgICAgfCAgIDEgKwogdGVzdHMvTWFrZWZpbGUuc291cmNl cyAgIHwgICAxICsKIHRlc3RzL2ttc19wc3Jfc2lua19jcmMuYyB8IDUwOCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MTAg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19wc3Jfc2lua19jcmMu YwoKZGlmZiAtLWdpdCBhL3Rlc3RzL0FuZHJvaWQubWsgYi90ZXN0cy9BbmRyb2lkLm1rCmluZGV4 IGZhOWU5ZDcuLjgxOTA2YmUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvdGVz dHMvQW5kcm9pZC5tawpAQCAtOTUsNiArOTUsNyBAQCBza2lwX3Rlc3RzX2xpc3QgOj0gXAogICAg IGttc19jdXJzb3JfY3JjIFwKICAgICBrbXNfZmxpcCBcCiAgICAga21zX3BpcGVfY3JjX2Jhc2lj IFwKKyAgICBrbXNfcHNyX3NpbmtfY3JjIFwKICAgICBrbXNfZmJjX2NyYyBcCiAgICAga21zX3Jl bmRlciBcCiAgICAga21zX3NldG1vZGUgXApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNWZlNjhhZS4uZmRiMWU0MSAxMDA2 NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCkBAIC01OCw2ICs1OCw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX2ZiY19jcmMgXAog CWttc19mbGlwIFwKIAlrbXNfcGlwZV9jcmNfYmFzaWMgXAorCWttc19wc3Jfc2lua19jcmMgXAog CWttc19yZW5kZXIgXAogCWttc19zZXRtb2RlIFwKIAlrbXNfc2lua19jcmNfYmFzaWMgXApkaWZm IC0tZ2l0IGEvdGVzdHMva21zX3Bzcl9zaW5rX2NyYy5jIGIvdGVzdHMva21zX3Bzcl9zaW5rX2Ny Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzY1MGYKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy9rbXNfcHNyX3NpbmtfY3JjLmMKQEAgLTAsMCArMSw1MDggQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGVycm5v Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisKKyNpbmNsdWRlICJkcm1fZm91cmNjLmgiCisKKyNpbmNsdWRlICJkcm10ZXN0 LmgiCisjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5j bHVkZSAicmVuZGVyY29weS5oIgorCitlbnVtIHRlc3RfbW9kZSB7CisJVEVTVF9QQUdFX0ZMSVAs CisJVEVTVF9NTUFQX0NQVSwKKwlURVNUX01NQVBfR1RULAorCVRFU1RfQkxULAorCVRFU1RfUkVO REVSLAorCVRFU1RfQ09OVEVYVCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9DUFUsCisJVEVT VF9QQUdFX0ZMSVBfQU5EX01NQVBfR1RULAorCVRFU1RfUEFHRV9GTElQX0FORF9CTFQsCisJVEVT VF9QQUdFX0ZMSVBfQU5EX1JFTkRFUiwKKwlURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCwKKwlU RVNUX0NVUlNPUl9NT1ZFLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBrbXN0ZXN0 X2Nvbm5lY3Rvcl9jb25maWcgY29uZmlnOworCWRybU1vZGVNb2RlSW5mbyBtb2RlOworCXN0cnVj dCBrbXN0ZXN0X2ZiIGZiWzJdOworfSBjb25uZWN0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgewor CWludCBkcm1fZmQ7CisJaWd0X2RlYnVnZnNfdCBkZWJ1Z2ZzOworCWRybU1vZGVSZXMgKnJlc291 cmNlczsKKwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJZHJtX2ludGVsX2NvbnRleHQgKmN0 eFsyXTsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50MzJfdCBoYW5kbGVbMl07CisJdWludDMyX3Qg Y3J0Y19pZDsKKwl1aW50MzJfdCBjcnRjX2lkeDsKKwl1aW50MzJfdCBmYl9pZFszXTsKK30gZGF0 YV90OworCitzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9tb2RlX3N0cihlbnVtIHRlc3RfbW9kZSBt b2RlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdF9tb2Rlc1tdID0geworCQlb VEVTVF9QQUdFX0ZMSVBdID0gInBhZ2VfZmxpcCIsCisJCVtURVNUX01NQVBfQ1BVXSA9ICJtbWFw X2NwdSIsCisJCVtURVNUX01NQVBfR1RUXSA9ICJtbWFwX2d0dCIsCisJCVtURVNUX0JMVF0gPSAi Ymx0IiwKKwkJW1RFU1RfUkVOREVSXSA9ICJyZW5kZXIiLAorCQlbVEVTVF9DT05URVhUXSA9ICJj b250ZXh0IiwKKwkJW1RFU1RfUEFHRV9GTElQX0FORF9NTUFQX0NQVV0gPSAicGFnZV9mbGlwX2Fu ZF9tbWFwX2NwdSIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9HVFRdID0gInBhZ2VfZmxp cF9hbmRfbW1hcF9ndHQiLAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX0JMVF0gPSAicGFnZV9mbGlw X2FuZF9ibHQiLAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX1JFTkRFUl0gPSAicGFnZV9mbGlwX2Fu ZF9yZW5kZXIiLAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFRdID0gInBhZ2VfZmxpcF9h bmRfY29udGV4dCIsCisJCVtURVNUX0NVUlNPUl9NT1ZFXSA9ICJjdXJzb3JfbW92ZSIsCisJfTsK KworCXJldHVybiB0ZXN0X21vZGVzW21vZGVdOworfQorCitzdGF0aWMgdWludDMyX3QgY3JlYXRl X2ZiKGRhdGFfdCAqZGF0YSwKKwkJCSAgaW50IHcsIGludCBoLAorCQkJICBkb3VibGUgciwgZG91 YmxlIGcsIGRvdWJsZSBiLAorCQkJICBzdHJ1Y3Qga21zdGVzdF9mYiAqZmIpCit7CisJdWludDMy X3QgZmJfaWQ7CisJY2Fpcm9fdCAqY3I7CisKKwlmYl9pZCA9IGttc3Rlc3RfY3JlYXRlX2ZiMihk YXRhLT5kcm1fZmQsIHcsIGgsCisJCQkJICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgdHJ1ZSwgZmIp OworCWlndF9hc3NlcnQoZmJfaWQpOworCisJY3IgPSBrbXN0ZXN0X2dldF9jYWlyb19jdHgoZGF0 YS0+ZHJtX2ZkLCBmYik7CisJa21zdGVzdF9wYWludF9jb2xvcihjciwgMCwgMCwgdywgaCwgciwg ZywgYik7CisJaWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDApOworCWNhaXJvX2Rlc3Ry b3koY3IpOworCisJcmV0dXJuIGZiX2lkOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfY3Vyc29y X2ZiKGRhdGFfdCAqZGF0YSwgc3RydWN0IGttc3Rlc3RfZmIgKmZiKQoreworCWNhaXJvX3QgKmNy OworCisJZGF0YS0+ZmJfaWRbMl0gPSBrbXN0ZXN0X2NyZWF0ZV9mYjIoZGF0YS0+ZHJtX2ZkLCA2 NCwgNjQsCisJCQkJCSAgICBEUk1fRk9STUFUX0FSR0I4ODg4LCBmYWxzZSwKKwkJCQkJICAgIGZi KTsKKwlpZ3RfYXNzZXJ0KGRhdGEtPmZiX2lkWzJdKTsKKworCWNyID0ga21zdGVzdF9nZXRfY2Fp cm9fY3R4KGRhdGEtPmRybV9mZCwgZmIpOworCWttc3Rlc3RfcGFpbnRfY29sb3JfYWxwaGEoY3Is IDAsIDAsIDY0LCA2NCwgMS4wLCAxLjAsIDEuMCwgMS4wKTsKKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0 YXR1cyhjcikgPT0gMCk7Cit9CisKK3N0YXRpYyBib29sCitjb25uZWN0b3Jfc2V0X21vZGUoZGF0 YV90ICpkYXRhLCBjb25uZWN0b3JfdCAqY29ubmVjdG9yLAorCQkgICBkcm1Nb2RlTW9kZUluZm8g Km1vZGUsIHVpbnQzMl90IGZiX2lkKQoreworCXN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25m aWcgKmNvbmZpZyA9ICZjb25uZWN0b3ItPmNvbmZpZzsKKwlpbnQgcmV0OworCisjaWYgMAorCWZw cmludGYoc3Rkb3V0LCAiVXNpbmcgcGlwZSAlYywgJWR4JWRcbiIsIHBpcGVfbmFtZShjb25maWct PnBpcGUpLAorCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworI2VuZGlmCisKKwly ZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsCisJCQkgICAgIGNvbmZpZy0+Y3J0Yy0+ Y3J0Y19pZCwKKwkJCSAgICAgZmJfaWQsCisJCQkgICAgIDAsIDAsIC8qIHgsIHkgKi8KKwkJCSAg ICAgJmNvbmZpZy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfaWQsCisJCQkgICAgIDEsCisJCQkgICAg IG1vZGUpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIGRpc3BsYXlfaW5pdChkYXRhX3QgKmRhdGEpCit7CisJZGF0YS0+cmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlndF9hc3NlcnQoZGF0YS0+cmVz b3VyY2VzKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGxheV9maW5pKGRhdGFfdCAqZGF0YSkKK3sK Kwlkcm1Nb2RlU2V0Q3Vyc29yKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwgMCwgMCwgMCk7 CisJZHJtTW9kZUZyZWVSZXNvdXJjZXMoZGF0YS0+cmVzb3VyY2VzKTsKK30KKworc3RhdGljIHZv aWQgZmlsbF9ibHQoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBoYW5kbGUsIHVuc2lnbmVkIGNoYXIg Y29sb3IpCit7CisJZHJtX2ludGVsX2JvICpkc3QgPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhk YXRhLT5idWZtZ3IsCisJCQkJCQkgICAgZGF0YS0+ZHJtX2ZkLAorCQkJCQkJICAgICIiLCBoYW5k bGUpOworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisKKwliYXRjaCA9IGludGVs X2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9hc3Nl cnQoYmF0Y2gpOworCisJQkVHSU5fQkFUQ0goNSk7CisJT1VUX0JBVENIKENPTE9SX0JMVF9DTUQp OworCU9VVF9CQVRDSCgoMSA8PCAyNCkgfCAoMHhmMCA8PCAxNikgfCAwKTsKKwlPVVRfQkFUQ0go MSA8PCAxNiB8IDQpOworCU9VVF9SRUxPQyhkc3QsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5 MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOworCU9VVF9CQVRDSChjb2xvcik7CisJQURWQU5DRV9C QVRDSCgpOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2goYmF0Y2gpOworCWludGVsX2JhdGNo YnVmZmVyX2ZyZWUoYmF0Y2gpOworCisJZ2VtX2JvX2J1c3koZGF0YS0+ZHJtX2ZkLCBoYW5kbGUp OworfQorCitzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9pbml0KHN0cnVjdCBzY3JhdGNoX2J1ZiAq YnVmLCBkcm1faW50ZWxfYm8gKmJvKQoreworCWJ1Zi0+Ym8gPSBibzsKKwlidWYtPnN0cmlkZSA9 IDQwOTY7CisJYnVmLT50aWxpbmcgPSBJOTE1X1RJTElOR19YOworCWJ1Zi0+c2l6ZSA9IDQwOTY7 Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfbm9wKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgaGFuZGxl LCBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCkKK3sKKwlkcm1faW50ZWxfYm8gKmRzdDsKKwlz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOworCisJZHN0ID0gZ2VtX2hhbmRsZV90b19s aWJkcm1fYm8oZGF0YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQsICIiLCBoYW5kbGUpOworCWlndF9h c3NlcnQoZHN0KTsKKworCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVm bWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2VydChiYXRjaCk7CisKKwkvKiBhZGQgdGhlIHJl bG9jIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIHdpbGwgdGhpbmsgd2Ugd3JpdGUgdG8gZHN0ICov CisJQkVHSU5fQkFUQ0goNCk7CisJT1VUX0JBVENIKE1JX0JBVENIX0JVRkZFUl9FTkQpOworCU9V VF9CQVRDSChNSV9OT09QKTsKKwlPVVRfUkVMT0MoZHN0LCBJOTE1X0dFTV9ET01BSU5fUkVOREVS LCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCAwKTsKKwlPVVRfQkFUQ0goTUlfTk9PUCk7CisJQURW QU5DRV9CQVRDSCgpOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJh dGNoLCBjb250ZXh0KTsKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKK30KKworc3Rh dGljIHZvaWQgZmlsbF9yZW5kZXIoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBoYW5kbGUsCisJCQlk cm1faW50ZWxfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciBjb2xvcikKK3sKKwlkcm1f aW50ZWxfYm8gKnNyYywgKmRzdDsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwor CXN0cnVjdCBzY3JhdGNoX2J1ZiBzcmNfYnVmLCBkc3RfYnVmOworCWNvbnN0IHVpbnQ4X3QgYnVm WzRdID0geyBjb2xvciwgY29sb3IsIGNvbG9yLCBjb2xvciB9OworCXJlbmRlcl9jb3B5ZnVuY190 IHJlbmRlcmNvcHkgPSBnZXRfcmVuZGVyX2NvcHlmdW5jKGRhdGEtPmRldmlkKTsKKworCWlndF9z a2lwX29uKCFyZW5kZXJjb3B5KTsKKworCWRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRh dGEtPmJ1Zm1nciwgZGF0YS0+ZHJtX2ZkLCAiIiwgaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KGRzdCk7 CisKKwlzcmMgPSBkcm1faW50ZWxfYm9fYWxsb2MoZGF0YS0+YnVmbWdyLCAiIiwgNDA5NiwgNDA5 Nik7CisJaWd0X2Fzc2VydChzcmMpOworCisJZ2VtX3dyaXRlKGRhdGEtPmRybV9mZCwgc3JjLT5o YW5kbGUsIDAsIGJ1ZiwgNCk7CisKKwlzY3JhdGNoX2J1Zl9pbml0KCZzcmNfYnVmLCBzcmMpOwor CXNjcmF0Y2hfYnVmX2luaXQoJmRzdF9idWYsIGRzdCk7CisKKwliYXRjaCA9IGludGVsX2JhdGNo YnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9hc3NlcnQoYmF0 Y2gpOworCisJcmVuZGVyY29weShiYXRjaCwgY29udGV4dCwKKwkJICAgJnNyY19idWYsIDAsIDAs IDEsIDEsCisJCSAgICZkc3RfYnVmLCAwLCAwKTsKKworCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUo YmF0Y2gpOworCisJZ2VtX2JvX2J1c3koZGF0YS0+ZHJtX2ZkLCBoYW5kbGUpOworfQorCitzdGF0 aWMgYm9vbCBwc3Jfc2lua19zdXBwb3J0KGRhdGFfdCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCUZJ TEUgKmZpbGU7CisJY2hhciBzdHJbNF07CisKKwlmaWxlID0gaWd0X2RlYnVnZnNfZm9wZW4oJmRh dGEtPmRlYnVnZnMsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgInIiKTsKKwlpZ3RfcmVxdWlyZShm aWxlKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiU2lua19TdXBwb3J0OiAlc1xuIiwgc3RyKTsK KwlpZiAocmV0ID09IDApCisJICAgIGlndF9za2lwKCJpOTE1X2VkcF9wc3Jfc3RhdHVzIGZvcm1h dCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdGVzdCBjYXNlXG4iKTsKKworCWZjbG9zZShmaWxlKTsK KwlyZXR1cm4gc3RyY21wKHN0ciwgInllcyIpID09IDA7Cit9CisKK3N0YXRpYyBib29sIHBzcl9l bmFibGVkKGRhdGFfdCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCUZJTEUgKmZpbGU7CisJY2hhciBz dHJbNF07CisKKwlmaWxlID0gaWd0X2RlYnVnZnNfZm9wZW4oJmRhdGEtPmRlYnVnZnMsICJpOTE1 X2VkcF9wc3Jfc3RhdHVzIiwgInIiKTsKKwlpZ3RfcmVxdWlyZShmaWxlKTsKKworCXJldCA9IGZz Y2FuZihmaWxlLCAiU2lua19TdXBwb3J0OiAlc1xuIiwgc3RyKTsKKwlpZ3RfYXNzZXJ0KHJldCAh PSAwKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiU291cmNlX09LOiAlc1xuIiwgc3RyKTsKKwlp Z3RfYXNzZXJ0KHJldCAhPSAwKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiRW5hYmxlZDogJXNc biIsIHN0cik7CisJaWd0X2Fzc2VydChyZXQgIT0gMCk7CisKKwlmY2xvc2UoZmlsZSk7CisJcmV0 dXJuIHN0cmNtcChzdHIsICJ5ZXMiKSA9PSAwOworfQorCitzdGF0aWMgYm9vbCB3YWl0X3Bzcl9l bnRyeShkYXRhX3QgKmRhdGEsIGludCB0aW1lb3V0KQoreworCXdoaWxlICh0aW1lb3V0LS0pIHsK KwkJaWYgKHBzcl9lbmFibGVkKGRhdGEpKQorCQkJcmV0dXJuIHRydWU7CisJCXNsZWVwKDEpOwor CX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zaW5rX2NyYyhkYXRhX3Qg KmRhdGEsIGNoYXIgKmNyYykgeworCWludCByZXQ7CisJRklMRSAqZmlsZTsKKworCWZpbGUgPSBp Z3RfZGVidWdmc19mb3BlbigmZGF0YS0+ZGVidWdmcywgImk5MTVfc2lua19jcmNfZURQMSIsICJy Iik7CisJaWd0X3JlcXVpcmUoZmlsZSk7CisKKwlyZXQgPSBmc2NhbmYoZmlsZSwgIiVzXG4iLCBj cmMpOworCWlndF9yZXF1aXJlKHJldCA+IDApOworCisJZmNsb3NlKGZpbGUpOworfQorCitzdGF0 aWMgdm9pZCB0ZXN0X2NyYyhkYXRhX3QgKmRhdGEsIGVudW0gdGVzdF9tb2RlIG1vZGUpCit7CisJ dWludDMyX3QgaGFuZGxlID0gZGF0YS0+aGFuZGxlWzBdOworCWNoYXIgcmVmX2NyY1sxMl07CisJ Y2hhciBjcmNbMTJdOworCisJaWYgKG1vZGUgPT0gVEVTVF9DVVJTT1JfTU9WRSkgeworCQlpZ3Rf YXNzZXJ0KGRybU1vZGVTZXRDdXJzb3IoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLAorCQkJ CQkgICAgaGFuZGxlLCA2NCwgNjQpID09IDApOworCQlpZ3RfYXNzZXJ0KGRybU1vZGVNb3ZlQ3Vy c29yKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgICAxLCAxKSA9PSAwKTsK Kwl9CisKKwl1c2xlZXAoMzAwMDAwKTsKKwlpZ3RfYXNzZXJ0KHdhaXRfcHNyX2VudHJ5KGRhdGEs IDEwKSk7CisJZ2V0X3NpbmtfY3JjKGRhdGEsIHJlZl9jcmMpOworCisJc3dpdGNoIChtb2RlKSB7 CisJCXZvaWQgKnB0cjsKKwljYXNlIFRFU1RfUEFHRV9GTElQOgorCQlpZ3RfYXNzZXJ0KGRybU1v ZGVQYWdlRmxpcChkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsCisJCQkJCSAgIGRhdGEtPmZi X2lkWzFdLCAwLCBOVUxMKSA9PSAwKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX01NQVBfQ1BVOgor CWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVOgorCQlwdHIgPSBnZW1fbW1hcF9fY3B1 KGRhdGEtPmRybV9mZCwgaGFuZGxlLCA0MDk2LCBQUk9UX1dSSVRFKTsKKwkJZ2VtX3NldF9kb21h aW4oZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RP TUFJTl9DUFUpOworCQltZW1zZXQocHRyLCAweGZmLCA0KTsKKwkJbXVubWFwKHB0ciwgNDA5Nik7 CisJCWdlbV9zd19maW5pc2goZGF0YS0+ZHJtX2ZkLCBoYW5kbGUpOworCQlicmVhazsKKwljYXNl IFRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVDoKKwkJaGFuZGxlID0gZGF0YS0+aGFuZGxlWzFd OworCQlpZ3RfYXNzZXJ0KGRybU1vZGVQYWdlRmxpcChkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNf aWQsCisJCQkJCSAgIGRhdGEtPmZiX2lkWzFdLCAwLCBOVUxMKSA9PSAwKTsKKwljYXNlIFRFU1Rf TU1BUF9HVFQ6CisJCXB0ciA9IGdlbV9tbWFwX19ndHQoZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDQw OTYsIFBST1RfV1JJVEUpOworCQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGhhbmRsZSwg STkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7CisJCW1lbXNldChwdHIs IDB4ZmYsIDQpOworCQltdW5tYXAocHRyLCA0MDk2KTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX0JM VDoKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9CTFQ6CisJCWZpbGxfYmx0KGRhdGEsIGhhbmRs ZSwgMHhmZik7CisJCWJyZWFrOworCWNhc2UgVEVTVF9SRU5ERVI6CisJY2FzZSBURVNUX0NPTlRF WFQ6CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSOgorCWNhc2UgVEVTVF9QQUdFX0ZM SVBfQU5EX0NPTlRFWFQ6CisJCWZpbGxfcmVuZGVyKGRhdGEsIGhhbmRsZSwKKwkJCSAgICAobW9k ZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkg PworCQkJICAgIGRhdGEtPmN0eFsxXSA6IE5VTEwsIDB4ZmYpOworCQlicmVhazsKKwljYXNlIFRF U1RfQ1VSU09SX01PVkU6CisJCWlndF9hc3NlcnQoZHJtTW9kZU1vdmVDdXJzb3IoZGF0YS0+ZHJt X2ZkLCBkYXRhLT5jcnRjX2lkLCAxLCAyKSA9PSAwKTsKKwkJYnJlYWs7CisJfQorCisJZ2V0X3Np bmtfY3JjKGRhdGEsIGNyYyk7CisJaWd0X2Fzc2VydChzdHJjbXAocmVmX2NyYywgY3JjKSAhPSAw KTsKK30KKworc3RhdGljIGJvb2wgcHJlcGFyZV9jcnRjKGRhdGFfdCAqZGF0YSwgdWludDMyX3Qg Y29ubmVjdG9yX2lkLCBlbnVtIHRlc3RfbW9kZSBtb2RlKQoreworCWNvbm5lY3Rvcl90IGNvbm5l Y3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0ga21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZyhk YXRhLT5kcm1fZmQsCisJCQkJCSAgIGNvbm5lY3Rvcl9pZCwKKwkJCQkJICAgMSA8PCBkYXRhLT5j cnRjX2lkeCwKKwkJCQkJICAgJmNvbm5lY3Rvci5jb25maWcpOworCWlmIChyZXQpCisJCXJldHVy biBmYWxzZTsKKworCWRhdGEtPmZiX2lkWzBdID0gY3JlYXRlX2ZiKGRhdGEsCisJCQkJICAgY29u bmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUuaGRpc3BsYXksCisJCQkJICAgY29ubmVjdG9yLmNv bmZpZy5kZWZhdWx0X21vZGUudmRpc3BsYXksCisJCQkJICAgMC4wLCAwLjAsIDAuMCwgJmNvbm5l Y3Rvci5mYlswXSk7CisJaWd0X2Fzc2VydChkYXRhLT5mYl9pZFswXSk7CisKKwlpZiAobW9kZSA9 PSBURVNUX0NVUlNPUl9NT1ZFKQorCQljcmVhdGVfY3Vyc29yX2ZiKGRhdGEsICZjb25uZWN0b3Iu ZmJbMF0pOworCisJZGF0YS0+ZmJfaWRbMV0gPSBjcmVhdGVfZmIoZGF0YSwKKwkJCQkgICBjb25u ZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZS5oZGlzcGxheSwKKwkJCQkgICBjb25uZWN0b3IuY29u ZmlnLmRlZmF1bHRfbW9kZS52ZGlzcGxheSwKKwkJCQkgICAwLjEsIDAuMSwgMC4xLCAmY29ubmVj dG9yLmZiWzFdKTsKKwlpZ3RfYXNzZXJ0KGRhdGEtPmZiX2lkWzFdKTsKKworCWRhdGEtPmhhbmRs ZVswXSA9IGNvbm5lY3Rvci5mYlswXS5nZW1faGFuZGxlOworCWRhdGEtPmhhbmRsZVsxXSA9IGNv bm5lY3Rvci5mYlsxXS5nZW1faGFuZGxlOworCisJLyogc2Nhbm91dCA9IGZiWzFdICovCisJY29u bmVjdG9yX3NldF9tb2RlKGRhdGEsICZjb25uZWN0b3IsICZjb25uZWN0b3IuY29uZmlnLmRlZmF1 bHRfbW9kZSwKKwkJCSAgIGRhdGEtPmZiX2lkWzFdKTsKKworCWlmIChtb2RlID09IFRFU1RfQ09O VEVYVCB8fCBtb2RlID09IFRFU1RfUEFHRV9GTElQX0FORF9DT05URVhUKSB7CisJCWRhdGEtPmN0 eFswXSA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUoZGF0YS0+YnVmbWdyKTsKKwkJaWd0 X3JlcXVpcmUoZGF0YS0+Y3R4WzBdKTsKKwkJZGF0YS0+Y3R4WzFdID0gZHJtX2ludGVsX2dlbV9j b250ZXh0X2NyZWF0ZShkYXRhLT5idWZtZ3IpOworCQlpZ3RfcmVxdWlyZShkYXRhLT5jdHhbMV0p OworCisJCS8qCisJCSAqIERpc2FibGUgRkJDIFJUIGFkZHJlc3MgZm9yIGJvdGggY29udGV4dHMK KwkJICogKGJ5ICJyZW5kZXJpbmciIHRvIGEgbm9uLXNjYW5vdXQgYnVmZmVyKS4KKwkJICovCisJ CWV4ZWNfbm9wKGRhdGEsIGRhdGEtPmhhbmRsZVswXSwgZGF0YS0+Y3R4WzFdKTsKKwkJZXhlY19u b3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBdLCBkYXRhLT5jdHhbMF0pOworCQlleGVjX25vcChkYXRh LCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFsxXSk7CisJCWV4ZWNfbm9wKGRhdGEsIGRhdGEt PmhhbmRsZVswXSwgZGF0YS0+Y3R4WzBdKTsKKwl9CisKKwkvKiBzY2Fub3V0ID0gZmJbMF0gKi8K Kwljb25uZWN0b3Jfc2V0X21vZGUoZGF0YSwgJmNvbm5lY3RvciwgJmNvbm5lY3Rvci5jb25maWcu ZGVmYXVsdF9tb2RlLAorCQkJICAgZGF0YS0+ZmJfaWRbMF0pOworCisJaWYgKG1vZGUgPT0gVEVT VF9DT05URVhUIHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpIHsKKwkJLyoK KwkJICogbWFrZSBjdHhbMF0gRkJDIFJUIGFkZHJlc3MgcG9pbnQgdG8gZmJbMF0sIGN0eFsxXQor CQkgKiBGQkMgUlQgYWRkcmVzcyBpcyBsZWZ0IGFzIGRpc2FibGVkLgorCQkgKi8KKwkJZXhlY19u b3AoZGF0YSwgY29ubmVjdG9yLmZiWzBdLmdlbV9oYW5kbGUsIGRhdGEtPmN0eFswXSk7CisJfQor CisJa21zdGVzdF9mcmVlX2Nvbm5lY3Rvcl9jb25maWcoJmNvbm5lY3Rvci5jb25maWcpOworCisJ cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9jcnRjKGRhdGFfdCAqZGF0YSwg ZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sKKwlpZiAobW9kZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9k ZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkgeworCQlkcm1faW50ZWxfZ2VtX2NvbnRl eHRfZGVzdHJveShkYXRhLT5jdHhbMF0pOworCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJv eShkYXRhLT5jdHhbMV0pOworCX0KK30KKworc3RhdGljIHZvaWQgcnVuX3Rlc3QoZGF0YV90ICpk YXRhLCBlbnVtIHRlc3RfbW9kZSBtb2RlKQoreworCWludCBpOworCWRybU1vZGVDb25uZWN0b3JQ dHIgYzsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3Rv cnM7IGkrKykgeworCQl1aW50MzJfdCBjb25uZWN0b3JfaWQgPSBkYXRhLT5yZXNvdXJjZXMtPmNv bm5lY3RvcnNbaV07CisJCWMgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRhdGEtPmRybV9mZCwgY29u bmVjdG9yX2lkKTsKKworCQlpZiAoYy0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVD VE9SX2VEUCB8fAorCQkgICAgYy0+Y29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNURUQpCisJ CQljb250aW51ZTsKKworCQlkYXRhLT5jcnRjX2lkeCA9IDA7CisJCWRhdGEtPmNydGNfaWQgPSBk YXRhLT5yZXNvdXJjZXMtPmNydGNzWzBdOworCisJCWlmICghcHJlcGFyZV9jcnRjKGRhdGEsIGNv bm5lY3Rvcl9pZCwgbW9kZSkpCisJCQljb250aW51ZTsKKworCQl0ZXN0X2NyYyhkYXRhLCBtb2Rl KTsKKworCQlmaW5pc2hfY3J0YyhkYXRhLCBtb2RlKTsKKwl9Cit9CisKK2lndF9tYWluCit7CisJ ZGF0YV90IGRhdGEgPSB7fTsKKwllbnVtIHRlc3RfbW9kZSBtb2RlOworCisJaWd0X3NraXBfb25f c2ltdWxhdGlvbigpOworCisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVu X2FueSgpOworCQlpZ3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlkYXRhLmRldmlkID0g aW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLmRybV9mZCk7CisKKwkJaWd0X2RlYnVnZnNfaW5pdCgm ZGF0YS5kZWJ1Z2ZzKTsKKworCQlpZ3RfYXNzZXJ0KHBzcl9zaW5rX3N1cHBvcnQoJmRhdGEpKTsK KworCQlkYXRhLmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZGF0YS5kcm1fZmQs IDQwOTYpOworCQlpZ3RfYXNzZXJ0KGRhdGEuYnVmbWdyKTsKKwkJZHJtX2ludGVsX2J1Zm1ncl9n ZW1fZW5hYmxlX3JldXNlKGRhdGEuYnVmbWdyKTsKKworCQlkaXNwbGF5X2luaXQoJmRhdGEpOwor CX0KKworCWZvciAobW9kZSA9IFRFU1RfUEFHRV9GTElQOyBtb2RlIDw9IFRFU1RfQ1VSU09SX01P VkU7IG1vZGUrKykgeworCQlpZ3Rfc3VidGVzdF9mKCIlcyIsIHRlc3RfbW9kZV9zdHIobW9kZSkp IHsKKwkJCXJ1bl90ZXN0KCZkYXRhLCBtb2RlKTsKKwkJfQorCX0KKworCWlndF9maXh0dXJlIHsK KwkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEuYnVmbWdyKTsKKwkJZGlzcGxheV9maW5p KCZkYXRhKTsKKwl9Cit9Ci0tIAoxLjguMS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=