From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhawanpreet Lakha Subject: [PATCH 11/20] drm/amd/display: add PSP block to verify hdcp steps Date: Tue, 10 Sep 2019 15:04:13 -0400 Message-ID: <20190910190422.794-12-Bhawanpreet.Lakha@amd.com> References: <20190910190422.794-1-Bhawanpreet.Lakha@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190910190422.794-1-Bhawanpreet.Lakha-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Bhawanpreet Lakha W1doeV0KQWxsIHRoZSBIRENQIHRyYW5zYWN0aW9ucyBzaG91bGQgYmUgdmVyaWZpZWQgdXNpbmcg UFNQLgoKW0hvd10KVGhpcyBwYXRjaCBjYWxscyBwc3Agd2l0aCB0aGUgY29ycmVjdCBpbnB1dHMg dG8gdmVyaWZ5IHRoZSBzdGVwcwpvZiBhdXRoZW50aWNhdGlvbi4KClNpZ25lZC1vZmYtYnk6IEJo YXdhbnByZWV0IExha2hhIDxCaGF3YW5wcmVldC5MYWtoYUBhbWQuY29tPgpSZXZpZXdlZC1ieTog SGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+Ci0tLQogLi4uL2RybS9hbWQv ZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9wc3AuYyAgIHwgMzI4ICsrKysrKysrKysrKysrKysr KwogLi4uL2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9wc3AuaCAgIHwgMjcyICsr KysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA2MDAgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRj cF9wc3AuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9t b2R1bGVzL2hkY3AvaGRjcF9wc3AuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9wc3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9tb2R1bGVzL2hkY3AvaGRjcF9wc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjY0NmQ5MDliYmMzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9wc3AuYwpAQCAtMCwwICsxLDMyOCBA QAorLyoKKyAqIENvcHlyaWdodCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgor ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2RlZmluZSBNQVhf TlVNX0RJU1BMQVlTIDI0CisKKworI2luY2x1ZGUgImhkY3AuaCIKKworI2luY2x1ZGUgImFtZGdw dS5oIgorI2luY2x1ZGUgImhkY3BfcHNwLmgiCisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9o ZGNwX3JlbW92ZV9kaXNwbGF5X3RvcG9sb2d5KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwor CXN0cnVjdCBwc3BfY29udGV4dCAqcHNwID0gaGRjcC0+Y29uZmlnLnBzcC5oYW5kbGU7CisJc3Ry dWN0IHRhX2R0bV9zaGFyZWRfbWVtb3J5ICpkdG1fY21kOworCXN0cnVjdCBtb2RfaGRjcF9kaXNw bGF5ICpkaXNwbGF5ID0gTlVMTDsKKwl1aW50OF90IGk7CisKKwlkdG1fY21kID0gKHN0cnVjdCB0 YV9kdG1fc2hhcmVkX21lbW9yeSAqKXBzcC0+ZHRtX2NvbnRleHQuZHRtX3NoYXJlZF9idWY7CisK Kwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9ESVNQTEFZUzsgaSsrKSB7CisJCWlmIChoZGNw LT5jb25uZWN0aW9uLmRpc3BsYXlzW2ldLnN0YXRlID09IE1PRF9IRENQX0RJU1BMQVlfQUNUSVZF X0FORF9BRERFRCkgeworCisJCQltZW1zZXQoZHRtX2NtZCwgMCwgc2l6ZW9mKHN0cnVjdCB0YV9k dG1fc2hhcmVkX21lbW9yeSkpOworCisJCQlkaXNwbGF5ID0gJmhkY3AtPmNvbm5lY3Rpb24uZGlz cGxheXNbaV07CisKKwkJCWR0bV9jbWQtPmNtZF9pZCA9IFRBX0RUTV9DT01NQU5EX19UT1BPTE9H WV9VUERBVEVfVjI7CisJCQlkdG1fY21kLT5kdG1faW5fbWVzc2FnZS50b3BvbG9neV91cGRhdGVf djIuZGlzcGxheV9oYW5kbGUgPSBkaXNwbGF5LT5pbmRleDsKKwkJCWR0bV9jbWQtPmR0bV9pbl9t ZXNzYWdlLnRvcG9sb2d5X3VwZGF0ZV92Mi5pc19hY3RpdmUgPSAwOworCQkJZHRtX2NtZC0+ZHRt X3N0YXR1cyA9IFRBX0RUTV9TVEFUVVNfX0dFTkVSSUNfRkFJTFVSRTsKKworCQkJcHNwX2R0bV9p bnZva2UocHNwLCBkdG1fY21kLT5jbWRfaWQpOworCisJCQlpZiAoZHRtX2NtZC0+ZHRtX3N0YXR1 cyAhPSBUQV9EVE1fU1RBVFVTX19TVUNDRVNTKQorCQkJCXJldHVybiBNT0RfSERDUF9TVEFUVVNf VVBEQVRFX1RPUE9MT0dZX0ZBSUxVUkU7CisKKwkJCWRpc3BsYXktPnN0YXRlID0gTU9EX0hEQ1Bf RElTUExBWV9BQ1RJVkU7CisJCQlIRENQX1RPUF9SRU1PVkVfRElTUExBWV9UUkFDRShoZGNwLCBk aXNwbGF5LT5pbmRleCk7CisJCX0KKwl9CisKKwlyZXR1cm4gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NF U1M7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2FkZF9kaXNwbGF5X3RvcG9s b2d5KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCA9 IGhkY3AtPmNvbmZpZy5wc3AuaGFuZGxlOworCXN0cnVjdCB0YV9kdG1fc2hhcmVkX21lbW9yeSAq ZHRtX2NtZDsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7CisJc3Ry dWN0IG1vZF9oZGNwX2xpbmsgKmxpbmsgPSAmaGRjcC0+Y29ubmVjdGlvbi5saW5rOworCXVpbnQ4 X3QgaTsKKworCWlmICghcHNwLT5kdG1fY29udGV4dC5kdG1faW5pdGlhbGl6ZWQpIHsKKwkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gYWRkIGRpc3BsYXkgdG9wb2xvZ3ksIERUTSBUQSBpcyBub3QgaW5p dGlhbGl6ZWQuIik7CisJCXJldHVybiBNT0RfSERDUF9TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwlk dG1fY21kID0gKHN0cnVjdCB0YV9kdG1fc2hhcmVkX21lbW9yeSAqKXBzcC0+ZHRtX2NvbnRleHQu ZHRtX3NoYXJlZF9idWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9ESVNQTEFZUzsg aSsrKSB7CisJCWlmIChoZGNwLT5jb25uZWN0aW9uLmRpc3BsYXlzW2ldLnN0YXRlID09IE1PRF9I RENQX0RJU1BMQVlfQUNUSVZFKSB7CisJCQlkaXNwbGF5ID0gJmhkY3AtPmNvbm5lY3Rpb24uZGlz cGxheXNbaV07CisKKwkJCW1lbXNldChkdG1fY21kLCAwLCBzaXplb2Yoc3RydWN0IHRhX2R0bV9z aGFyZWRfbWVtb3J5KSk7CisKKwkJCWR0bV9jbWQtPmNtZF9pZCA9IFRBX0RUTV9DT01NQU5EX19U T1BPTE9HWV9VUERBVEVfVjI7CisJCQlkdG1fY21kLT5kdG1faW5fbWVzc2FnZS50b3BvbG9neV91 cGRhdGVfdjIuZGlzcGxheV9oYW5kbGUgPSBkaXNwbGF5LT5pbmRleDsKKwkJCWR0bV9jbWQtPmR0 bV9pbl9tZXNzYWdlLnRvcG9sb2d5X3VwZGF0ZV92Mi5pc19hY3RpdmUgPSAxOworCQkJZHRtX2Nt ZC0+ZHRtX2luX21lc3NhZ2UudG9wb2xvZ3lfdXBkYXRlX3YyLmNvbnRyb2xsZXIgPSBkaXNwbGF5 LT5jb250cm9sbGVyOworCQkJZHRtX2NtZC0+ZHRtX2luX21lc3NhZ2UudG9wb2xvZ3lfdXBkYXRl X3YyLmRkY19saW5lID0gbGluay0+ZGRjX2xpbmU7CisJCQlkdG1fY21kLT5kdG1faW5fbWVzc2Fn ZS50b3BvbG9neV91cGRhdGVfdjIuZGlnX2JlID0gbGluay0+ZGlnX2JlOworCQkJZHRtX2NtZC0+ ZHRtX2luX21lc3NhZ2UudG9wb2xvZ3lfdXBkYXRlX3YyLmRpZ19mZSA9IGRpc3BsYXktPmRpZ19m ZTsKKwkJCWR0bV9jbWQtPmR0bV9pbl9tZXNzYWdlLnRvcG9sb2d5X3VwZGF0ZV92Mi5kcF9tc3Rf dmNpZCA9IGRpc3BsYXktPnZjX2lkOworCQkJZHRtX2NtZC0+ZHRtX2luX21lc3NhZ2UudG9wb2xv Z3lfdXBkYXRlX3YyLm1heF9oZGNwX3N1cHBvcnRlZF92ZXJzaW9uID0KKwkJCQlUQV9EVE1fSERD UF9WRVJTSU9OX01BWF9TVVBQT1JURURfXzFfeDsKKwkJCWR0bV9jbWQtPmR0bV9zdGF0dXMgPSBU QV9EVE1fU1RBVFVTX19HRU5FUklDX0ZBSUxVUkU7CisKKwkJCXBzcF9kdG1faW52b2tlKHBzcCwg ZHRtX2NtZC0+Y21kX2lkKTsKKworCQkJaWYgKGR0bV9jbWQtPmR0bV9zdGF0dXMgIT0gVEFfRFRN X1NUQVRVU19fU1VDQ0VTUykKKwkJCQlyZXR1cm4gTU9EX0hEQ1BfU1RBVFVTX1VQREFURV9UT1BP TE9HWV9GQUlMVVJFOworCisJCQlkaXNwbGF5LT5zdGF0ZSA9IE1PRF9IRENQX0RJU1BMQVlfQUNU SVZFX0FORF9BRERFRDsKKwkJCUhEQ1BfVE9QX0FERF9ESVNQTEFZX1RSQUNFKGhkY3AsIGRpc3Bs YXktPmluZGV4KTsKKwkJfQorCX0KKworCXJldHVybiBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsK K30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfY3JlYXRlX3Nlc3Npb24o c3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCisJc3RydWN0IHBzcF9jb250ZXh0ICpwc3AgPSBo ZGNwLT5jb25maWcucHNwLmhhbmRsZTsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxh eSA9IGdldF9maXJzdF9hZGRlZF9kaXNwbGF5KGhkY3ApOworCXN0cnVjdCB0YV9oZGNwX3NoYXJl ZF9tZW1vcnkgKmhkY3BfY21kOworCisJaWYgKCFwc3AtPmhkY3BfY29udGV4dC5oZGNwX2luaXRp YWxpemVkKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBoZGNwIHNlc3Npb24uIEhE Q1AgVEEgaXMgbm90IGluaXRpYWxpemVkLiIpOworCQlyZXR1cm4gTU9EX0hEQ1BfU1RBVFVTX0ZB SUxVUkU7CisJfQorCisJaGRjcF9jbWQgPSAoc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAq KXBzcC0+aGRjcF9jb250ZXh0LmhkY3Bfc2hhcmVkX2J1ZjsKKwltZW1zZXQoaGRjcF9jbWQsIDAs IHNpemVvZihzdHJ1Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5KSk7CisKKwloZGNwX2NtZC0+aW5f bXNnLmhkY3AxX2NyZWF0ZV9zZXNzaW9uLmRpc3BsYXlfaGFuZGxlID0gZGlzcGxheS0+aW5kZXg7 CisJaGRjcF9jbWQtPmNtZF9pZCA9IFRBX0hEQ1BfQ09NTUFORF9fSERDUDFfQ1JFQVRFX1NFU1NJ T047CisKKwlwc3BfaGRjcF9pbnZva2UocHNwLCBoZGNwX2NtZC0+Y21kX2lkKTsKKworCWlmICho ZGNwX2NtZC0+aGRjcF9zdGF0dXMgIT0gVEFfSERDUF9TVEFUVVNfX1NVQ0NFU1MpCisJCXJldHVy biBNT0RfSERDUF9TVEFUVVNfSERDUDFfQ1JFQVRFX1NFU1NJT05fRkFJTFVSRTsKKworCWhkY3At PmF1dGguaWQgPSBoZGNwX2NtZC0+b3V0X21zZy5oZGNwMV9jcmVhdGVfc2Vzc2lvbi5zZXNzaW9u X2hhbmRsZTsKKwloZGNwLT5hdXRoLm1zZy5oZGNwMS5haW5mbyA9IGhkY3BfY21kLT5vdXRfbXNn LmhkY3AxX2NyZWF0ZV9zZXNzaW9uLmFpbmZvX3ByaW1hcnk7CisJbWVtY3B5KGhkY3AtPmF1dGgu bXNnLmhkY3AxLmFrc3YsIGhkY3BfY21kLT5vdXRfbXNnLmhkY3AxX2NyZWF0ZV9zZXNzaW9uLmFr c3ZfcHJpbWFyeSwKKwkJc2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmFrc3YpKTsKKwltZW1j cHkoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYW4sIGhkY3BfY21kLT5vdXRfbXNnLmhkY3AxX2NyZWF0 ZV9zZXNzaW9uLmFuX3ByaW1hcnksCisJCXNpemVvZihoZGNwLT5hdXRoLm1zZy5oZGNwMS5hbikp OworCisJcmV0dXJuIE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworfQorCitlbnVtIG1vZF9oZGNw X3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9kZXN0cm95X3Nlc3Npb24oc3RydWN0IG1vZF9oZGNwICpo ZGNwKQoreworCisJc3RydWN0IHBzcF9jb250ZXh0ICpwc3AgPSBoZGNwLT5jb25maWcucHNwLmhh bmRsZTsKKwlzdHJ1Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5ICpoZGNwX2NtZDsKKworCWhkY3Bf Y21kID0gKHN0cnVjdCB0YV9oZGNwX3NoYXJlZF9tZW1vcnkgKilwc3AtPmhkY3BfY29udGV4dC5o ZGNwX3NoYXJlZF9idWY7CisJbWVtc2V0KGhkY3BfY21kLCAwLCBzaXplb2Yoc3RydWN0IHRhX2hk Y3Bfc2hhcmVkX21lbW9yeSkpOworCisJaGRjcF9jbWQtPmluX21zZy5oZGNwMV9kZXN0cm95X3Nl c3Npb24uc2Vzc2lvbl9oYW5kbGUgPSBoZGNwLT5hdXRoLmlkOworCWhkY3BfY21kLT5jbWRfaWQg PSBUQV9IRENQX0NPTU1BTkRfX0hEQ1AxX0RFU1RST1lfU0VTU0lPTjsKKworCXBzcF9oZGNwX2lu dm9rZShwc3AsIGhkY3BfY21kLT5jbWRfaWQpOworCisJaWYgKGhkY3BfY21kLT5oZGNwX3N0YXR1 cyAhPSBUQV9IRENQX1NUQVRVU19fU1VDQ0VTUykKKwkJcmV0dXJuIE1PRF9IRENQX1NUQVRVU19I RENQMV9ERVNUUk9ZX1NFU1NJT05fRkFJTFVSRTsKKworCUhEQ1BfVE9QX0hEQ1AxX0RFU1RST1lf U0VTU0lPTl9UUkFDRShoZGNwKTsKKworCXJldHVybiBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsK K30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfdmFsaWRhdGVfcngoc3Ry dWN0IG1vZF9oZGNwICpoZGNwKQoreworCXN0cnVjdCBwc3BfY29udGV4dCAqcHNwID0gaGRjcC0+ Y29uZmlnLnBzcC5oYW5kbGU7CisJc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAqaGRjcF9j bWQ7CisKKwloZGNwX2NtZCA9IChzdHJ1Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5ICopcHNwLT5o ZGNwX2NvbnRleHQuaGRjcF9zaGFyZWRfYnVmOworCW1lbXNldChoZGNwX2NtZCwgMCwgc2l6ZW9m KHN0cnVjdCB0YV9oZGNwX3NoYXJlZF9tZW1vcnkpKTsKKworCWhkY3BfY21kLT5pbl9tc2cuaGRj cDFfZmlyc3RfcGFydF9hdXRoZW50aWNhdGlvbi5zZXNzaW9uX2hhbmRsZSA9IGhkY3AtPmF1dGgu aWQ7CisKKwltZW1jcHkoaGRjcF9jbWQtPmluX21zZy5oZGNwMV9maXJzdF9wYXJ0X2F1dGhlbnRp Y2F0aW9uLmJrc3ZfcHJpbWFyeSwgaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmtzdiwKKwkJVEFfSERD UF9fSERDUDFfS1NWX1NJWkUpOworCisJaGRjcF9jbWQtPmluX21zZy5oZGNwMV9maXJzdF9wYXJ0 X2F1dGhlbnRpY2F0aW9uLnIwX3ByaW1lX3ByaW1hcnkgPSBoZGNwLT5hdXRoLm1zZy5oZGNwMS5y MHA7CisJaGRjcF9jbWQtPmluX21zZy5oZGNwMV9maXJzdF9wYXJ0X2F1dGhlbnRpY2F0aW9uLmJj YXBzID0gaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmNhcHM7CisJaGRjcF9jbWQtPmNtZF9pZCA9IFRB X0hEQ1BfQ09NTUFORF9fSERDUDFfRklSU1RfUEFSVF9BVVRIRU5USUNBVElPTjsKKworCXBzcF9o ZGNwX2ludm9rZShwc3AsIGhkY3BfY21kLT5jbWRfaWQpOworCisJaWYgKGhkY3BfY21kLT5oZGNw X3N0YXR1cyAhPSBUQV9IRENQX1NUQVRVU19fU1VDQ0VTUykKKwkJcmV0dXJuIE1PRF9IRENQX1NU QVRVU19IRENQMV9WQUxJREFURV9SWF9GQUlMVVJFOworCisJaWYgKGhkY3BfY21kLT5vdXRfbXNn LmhkY3AxX2ZpcnN0X3BhcnRfYXV0aGVudGljYXRpb24uYXV0aGVudGljYXRpb25fc3RhdHVzID09 CisJICAgIFRBX0hEQ1BfQVVUSEVOVElDQVRJT05fU1RBVFVTX19IRENQMV9GSVJTVF9QQVJUX0NP TVBMRVRFKSB7CisJCS8qIG5lZWRzIHNlY29uZCBwYXJ0IG9mIGF1dGhlbnRpY2F0aW9uICovCisJ CWhkY3AtPmNvbm5lY3Rpb24uaXNfcmVwZWF0ZXIgPSAxOworCX0gZWxzZSBpZiAoaGRjcF9jbWQt Pm91dF9tc2cuaGRjcDFfZmlyc3RfcGFydF9hdXRoZW50aWNhdGlvbi5hdXRoZW50aWNhdGlvbl9z dGF0dXMgPT0KKwkJICAgVEFfSERDUF9BVVRIRU5USUNBVElPTl9TVEFUVVNfX0hEQ1AxX0FVVEhF TlRJQ0FURUQpIHsKKwkJaGRjcC0+Y29ubmVjdGlvbi5pc19yZXBlYXRlciA9IDA7CisJfSBlbHNl CisJCXJldHVybiBNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVfUlhfRkFJTFVSRTsKKwor CisJcmV0dXJuIE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworfQorCitlbnVtIG1vZF9oZGNwX3N0 YXR1cyBtb2RfaGRjcF9oZGNwMV9lbmFibGVfZW5jcnlwdGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhk Y3ApCit7CisJc3RydWN0IHBzcF9jb250ZXh0ICpwc3AgPSBoZGNwLT5jb25maWcucHNwLmhhbmRs ZTsKKwlzdHJ1Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5ICpoZGNwX2NtZDsKKwlzdHJ1Y3QgbW9k X2hkY3BfZGlzcGxheSAqZGlzcGxheSA9IGdldF9maXJzdF9hZGRlZF9kaXNwbGF5KGhkY3ApOwor CisJaGRjcF9jbWQgPSAoc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAqKXBzcC0+aGRjcF9j b250ZXh0LmhkY3Bfc2hhcmVkX2J1ZjsKKwltZW1zZXQoaGRjcF9jbWQsIDAsIHNpemVvZihzdHJ1 Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5KSk7CisKKwloZGNwX2NtZC0+aW5fbXNnLmhkY3AxX2Vu YWJsZV9lbmNyeXB0aW9uLnNlc3Npb25faGFuZGxlID0gaGRjcC0+YXV0aC5pZDsKKwloZGNwX2Nt ZC0+Y21kX2lkID0gVEFfSERDUF9DT01NQU5EX19IRENQMV9FTkFCTEVfRU5DUllQVElPTjsKKwor CXBzcF9oZGNwX2ludm9rZShwc3AsIGhkY3BfY21kLT5jbWRfaWQpOworCisJaWYgKGhkY3BfY21k LT5oZGNwX3N0YXR1cyAhPSBUQV9IRENQX1NUQVRVU19fU1VDQ0VTUykKKwkJcmV0dXJuIE1PRF9I RENQX1NUQVRVU19IRENQMV9FTkFCTEVfRU5DUllQVElPTjsKKworCWlmICghaXNfZHBfbXN0X2hk Y3AoaGRjcCkpIHsKKwkJZGlzcGxheS0+c3RhdGUgPSBNT0RfSERDUF9ESVNQTEFZX0VOQ1JZUFRJ T05fRU5BQkxFRDsKKwkJSERDUF9IRENQMV9FTkFCTEVEX1RSQUNFKGhkY3AsIGRpc3BsYXktPmlu ZGV4KTsKKwl9CisJcmV0dXJuIE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworfQorCitlbnVtIG1v ZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV92YWxpZGF0ZV9rc3ZsaXN0X3ZwKHN0cnVjdCBt b2RfaGRjcCAqaGRjcCkKK3sKKwlzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCA9IGhkY3AtPmNvbmZp Zy5wc3AuaGFuZGxlOworCXN0cnVjdCB0YV9oZGNwX3NoYXJlZF9tZW1vcnkgKmhkY3BfY21kOwor CisJaGRjcF9jbWQgPSAoc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAqKXBzcC0+aGRjcF9j b250ZXh0LmhkY3Bfc2hhcmVkX2J1ZjsKKwltZW1zZXQoaGRjcF9jbWQsIDAsIHNpemVvZihzdHJ1 Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5KSk7CisKKwloZGNwX2NtZC0+aW5fbXNnLmhkY3AxX3Nl Y29uZF9wYXJ0X2F1dGhlbnRpY2F0aW9uLnNlc3Npb25faGFuZGxlID0gaGRjcC0+YXV0aC5pZDsK KworCWhkY3BfY21kLT5pbl9tc2cuaGRjcDFfc2Vjb25kX3BhcnRfYXV0aGVudGljYXRpb24ua3N2 X2xpc3Rfc2l6ZSA9IGhkY3AtPmF1dGgubXNnLmhkY3AxLmtzdmxpc3Rfc2l6ZTsKKwltZW1jcHko aGRjcF9jbWQtPmluX21zZy5oZGNwMV9zZWNvbmRfcGFydF9hdXRoZW50aWNhdGlvbi5rc3ZfbGlz dCwgaGRjcC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdCwKKwkgICAgICAgaGRjcC0+YXV0aC5tc2cu aGRjcDEua3N2bGlzdF9zaXplKTsKKworCW1lbWNweShoZGNwX2NtZC0+aW5fbXNnLmhkY3AxX3Nl Y29uZF9wYXJ0X2F1dGhlbnRpY2F0aW9uLnZfcHJpbWUsIGhkY3AtPmF1dGgubXNnLmhkY3AxLnZw LAorCSAgICAgICBzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEudnApKTsKKworCWhkY3BfY21k LT5pbl9tc2cuaGRjcDFfc2Vjb25kX3BhcnRfYXV0aGVudGljYXRpb24uYnN0YXR1c19iaW5mbyA9 CisJCWlzX2RwX2hkY3AoaGRjcCkgPyBoZGNwLT5hdXRoLm1zZy5oZGNwMS5iaW5mb19kcCA6IGhk Y3AtPmF1dGgubXNnLmhkY3AxLmJzdGF0dXM7CisJaGRjcF9jbWQtPmNtZF9pZCA9IFRBX0hEQ1Bf Q09NTUFORF9fSERDUDFfU0VDT05EX1BBUlRfQVVUSEVOVElDQVRJT047CisKKwlwc3BfaGRjcF9p bnZva2UocHNwLCBoZGNwX2NtZC0+Y21kX2lkKTsKKworCWlmIChoZGNwX2NtZC0+aGRjcF9zdGF0 dXMgIT0gVEFfSERDUF9TVEFUVVNfX1NVQ0NFU1MpCisJCXJldHVybiBNT0RfSERDUF9TVEFUVVNf SERDUDFfVkFMSURBVEVfS1NWX0xJU1RfRkFJTFVSRTsKKworCXJldHVybiBNT0RfSERDUF9TVEFU VVNfU1VDQ0VTUzsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfZW5h YmxlX2RwX3N0cmVhbV9lbmNyeXB0aW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKworCXN0 cnVjdCBwc3BfY29udGV4dCAqcHNwID0gaGRjcC0+Y29uZmlnLnBzcC5oYW5kbGU7CisJc3RydWN0 IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAqaGRjcF9jbWQ7CisJaW50IGkgPSAwOworCisJaGRjcF9j bWQgPSAoc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAqKXBzcC0+aGRjcF9jb250ZXh0Lmhk Y3Bfc2hhcmVkX2J1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0RJU1BMQVlTOyBp KyspIHsKKworCQlpZiAoaGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXS5zdGF0ZSAhPSBNT0Rf SERDUF9ESVNQTEFZX0FDVElWRV9BTkRfQURERUQgfHwKKwkJICAgIGhkY3AtPmNvbm5lY3Rpb24u ZGlzcGxheXNbaV0uYWRqdXN0LmRpc2FibGUpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoaGRj cF9jbWQsIDAsIHNpemVvZihzdHJ1Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5KSk7CisKKwkJaGRj cF9jbWQtPmluX21zZy5oZGNwMV9lbmFibGVfZHBfc3RyZWFtX2VuY3J5cHRpb24uc2Vzc2lvbl9o YW5kbGUgPSBoZGNwLT5hdXRoLmlkOworCQloZGNwX2NtZC0+aW5fbXNnLmhkY3AxX2VuYWJsZV9k cF9zdHJlYW1fZW5jcnlwdGlvbi5kaXNwbGF5X2hhbmRsZSA9IGhkY3AtPmNvbm5lY3Rpb24uZGlz cGxheXNbaV0uaW5kZXg7CisJCWhkY3BfY21kLT5jbWRfaWQgPSBUQV9IRENQX0NPTU1BTkRfX0hE Q1AxX0VOQUJMRV9EUF9TVFJFQU1fRU5DUllQVElPTjsKKworCQlwc3BfaGRjcF9pbnZva2UocHNw LCBoZGNwX2NtZC0+Y21kX2lkKTsKKworCQlpZiAoaGRjcF9jbWQtPmhkY3Bfc3RhdHVzICE9IFRB X0hEQ1BfU1RBVFVTX19TVUNDRVNTKQorCQkJcmV0dXJuIE1PRF9IRENQX1NUQVRVU19IRENQMV9F TkFCTEVfU1RSRUFNX0VOQ1JZUFRJT05fRkFJTFVSRTsKKworCQloZGNwLT5jb25uZWN0aW9uLmRp c3BsYXlzW2ldLnN0YXRlID0gTU9EX0hEQ1BfRElTUExBWV9FTkNSWVBUSU9OX0VOQUJMRUQ7CisJ CUhEQ1BfSERDUDFfRU5BQkxFRF9UUkFDRShoZGNwLCBoZGNwLT5jb25uZWN0aW9uLmRpc3BsYXlz W2ldLmluZGV4KTsKKwl9CisKKwlyZXR1cm4gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7Cit9CisK K2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2hkY3AxX2xpbmtfbWFpbnRlbmFuY2Uoc3Ry dWN0IG1vZF9oZGNwICpoZGNwKQoreworCXN0cnVjdCBwc3BfY29udGV4dCAqcHNwID0gaGRjcC0+ Y29uZmlnLnBzcC5oYW5kbGU7CisJc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSAqaGRjcF9j bWQ7CisKKwloZGNwX2NtZCA9IChzdHJ1Y3QgdGFfaGRjcF9zaGFyZWRfbWVtb3J5ICopcHNwLT5o ZGNwX2NvbnRleHQuaGRjcF9zaGFyZWRfYnVmOworCisJbWVtc2V0KGhkY3BfY21kLCAwLCBzaXpl b2Yoc3RydWN0IHRhX2hkY3Bfc2hhcmVkX21lbW9yeSkpOworCisJaGRjcF9jbWQtPmluX21zZy5o ZGNwMV9nZXRfZW5jcnlwdGlvbl9zdGF0dXMuc2Vzc2lvbl9oYW5kbGUgPSBoZGNwLT5hdXRoLmlk OworCisJaGRjcF9jbWQtPm91dF9tc2cuaGRjcDFfZ2V0X2VuY3J5cHRpb25fc3RhdHVzLnByb3Rl Y3Rpb25fbGV2ZWwgPSAwOworCWhkY3BfY21kLT5jbWRfaWQgPSBUQV9IRENQX0NPTU1BTkRfX0hE Q1AxX0dFVF9FTkNSWVBUSU9OX1NUQVRVUzsKKworCXBzcF9oZGNwX2ludm9rZShwc3AsIGhkY3Bf Y21kLT5jbWRfaWQpOworCisJaWYgKGhkY3BfY21kLT5oZGNwX3N0YXR1cyAhPSBUQV9IRENQX1NU QVRVU19fU1VDQ0VTUykKKwkJcmV0dXJuIE1PRF9IRENQX1NUQVRVU19IRENQMV9MSU5LX01BSU5U RU5BTkNFX0ZBSUxVUkU7CisKKwlyZXR1cm4gKGhkY3BfY21kLT5vdXRfbXNnLmhkY3AxX2dldF9l bmNyeXB0aW9uX3N0YXR1cy5wcm90ZWN0aW9uX2xldmVsID09IDEpCisJCSAgICAgICA/IE1PRF9I RENQX1NUQVRVU19TVUNDRVNTCisJCSAgICAgICA6IE1PRF9IRENQX1NUQVRVU19IRENQMV9MSU5L X01BSU5URU5BTkNFX0ZBSUxVUkU7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNw X2hkY3AxX2dldF9saW5rX2VuY3J5cHRpb25fc3RhdHVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwK KwkJCQkJCQkgICAgICAgZW51bSBtb2RfaGRjcF9lbmNyeXB0aW9uX3N0YXR1cyAqZW5jcnlwdGlv bl9zdGF0dXMpCit7CisJKmVuY3J5cHRpb25fc3RhdHVzID0gTU9EX0hEQ1BfRU5DUllQVElPTl9T VEFUVVNfSERDUF9PRkY7CisKKwlpZiAobW9kX2hkY3BfaGRjcDFfbGlua19tYWludGVuYW5jZSho ZGNwKSAhPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIE1PRF9IRENQX1NUQVRV U19GQUlMVVJFOworCisJKmVuY3J5cHRpb25fc3RhdHVzID0gTU9EX0hEQ1BfRU5DUllQVElPTl9T VEFUVVNfSERDUDFfT047CisKKwlyZXR1cm4gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7Cit9CisK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRj cF9wc3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9w c3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk4NmZjMDdlYTll YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVz L2hkY3AvaGRjcF9wc3AuaApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5 IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRlZiBNT0RVTEVTX0hEQ1BfSERDUF9QU1BfSF8KKyNk ZWZpbmUgTU9EVUxFU19IRENQX0hEQ1BfUFNQX0hfCisKKy8qCisgKiBOT1RFOiBUaGVzZSBwYXJh bWV0ZXJzIGFyZSBhIG9uZS10by1vbmUgY29weSBvZiB0aGUKKyAqIHBhcmFtZXRlcnMgcmVxdWly ZWQgYnkgUFNQCisgKi8KK2VudW0gYmdkX3NlY3VyaXR5X2hkY3BfZW5jcnlwdGlvbl9sZXZlbCB7 CisJSERDUF9FTkNSWVBUSU9OX0xFVkVMX19JTlZBTElEID0gMCwKKwlIRENQX0VOQ1JZUFRJT05f TEVWRUxfX09GRiwKKwlIRENQX0VOQ1JZUFRJT05fTEVWRUxfX09OCit9OworCitlbnVtIHRhX2R0 bV9jb21tYW5kIHsKKwlUQV9EVE1fQ09NTUFORF9fVU5VU0VEXzEgPSAxLAorCVRBX0RUTV9DT01N QU5EX19UT1BPTE9HWV9VUERBVEVfVjIsCisJVEFfRFRNX0NPTU1BTkRfX1RPUE9MT0dZX0FTU1Jf RU5BQkxFCit9OworCisvKiBEVE0gcmVsYXRlZCBlbnVtZXJhdGlvbnMgKi8KKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVt IHRhX2R0bV9zdGF0dXMgeworCVRBX0RUTV9TVEFUVVNfX1NVQ0NFU1MgPSAweDAwLAorCVRBX0RU TV9TVEFUVVNfX0dFTkVSSUNfRkFJTFVSRSA9IDB4MDEsCisJVEFfRFRNX1NUQVRVU19fSU5WQUxJ RF9QQVJBTUVURVIgPSAweDAyLAorCVRBX0RUTV9TVEFUVVNfX05VTExfUE9JTlRFUiA9IDB4Mwor fTsKKworLyogaW5wdXQvb3V0cHV0IHN0cnVjdHVyZXMgZm9yIERUTSBjb21tYW5kcyAqLworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisvKioKKyAqIElucHV0IHN0cnVjdHVyZXMKKyAqLworZW51bSB0YV9kdG1faGRjcF92ZXJzaW9u X21heF9zdXBwb3J0ZWQgeworCVRBX0RUTV9IRENQX1ZFUlNJT05fTUFYX1NVUFBPUlRFRF9fTk9O RSA9IDAsCisJVEFfRFRNX0hEQ1BfVkVSU0lPTl9NQVhfU1VQUE9SVEVEX18xX3ggPSAxMCwKKwlU QV9EVE1fSERDUF9WRVJTSU9OX01BWF9TVVBQT1JURURfXzJfMCA9IDIwLAorCVRBX0RUTV9IRENQ X1ZFUlNJT05fTUFYX1NVUFBPUlRFRF9fMl8xID0gMjEsCisJVEFfRFRNX0hEQ1BfVkVSU0lPTl9N QVhfU1VQUE9SVEVEX18yXzIgPSAyMiwKKwlUQV9EVE1fSERDUF9WRVJTSU9OX01BWF9TVVBQT1JU RURfXzJfMyA9IDIzCit9OworCitzdHJ1Y3QgdGFfZHRtX3RvcG9sb2d5X3VwZGF0ZV9pbnB1dF92 MiB7CisJLyogZGlzcGxheSBoYW5kbGUgaXMgdW5pcXVlIGFjcm9zcyB0aGUgZHJpdmVyIGFuZCBp cyB1c2VkIHRvIGlkZW50aWZ5IGEgZGlzcGxheSAqLworCS8qIGZvciBhbGwgc2VjdXJpdHkgaW50 ZXJmYWNlcyB3aGljaCByZWZlcmVuY2UgZGlzcGxheXMgc3VjaCBhcyBIRENQICovCisJdWludDMy X3QgZGlzcGxheV9oYW5kbGU7CisJdWludDMyX3QgaXNfYWN0aXZlOworCXVpbnQzMl90IGlzX21p cmFjYXN0OworCXVpbnQzMl90IGNvbnRyb2xsZXI7CisJdWludDMyX3QgZGRjX2xpbmU7CisJdWlu dDMyX3QgZGlnX2JlOworCXVpbnQzMl90IGRpZ19mZTsKKwl1aW50MzJfdCBkcF9tc3RfdmNpZDsK Kwl1aW50MzJfdCBpc19hc3NyOworCXVpbnQzMl90IG1heF9oZGNwX3N1cHBvcnRlZF92ZXJzaW9u OworfTsKKworc3RydWN0IHRhX2R0bV90b3BvbG9neV9hc3NyX2VuYWJsZSB7CisJdWludDMyX3Qg ZGlzcGxheV90b3BvbG9neV9kaWdfYmVfaW5kZXg7Cit9OworCisvKioKKyAqIE91dHB1dCBzdHJ1 Y3R1cmVzCisgKi8KKworLyogTm8gb3V0cHV0IHN0cnVjdHVyZXMgeWV0ICovCisKK3VuaW9uIHRh X2R0bV9jbWRfaW5wdXQgeworCXN0cnVjdCB0YV9kdG1fdG9wb2xvZ3lfdXBkYXRlX2lucHV0X3Yy IHRvcG9sb2d5X3VwZGF0ZV92MjsKKwlzdHJ1Y3QgdGFfZHRtX3RvcG9sb2d5X2Fzc3JfZW5hYmxl IHRvcG9sb2d5X2Fzc3JfZW5hYmxlOworfTsKKwordW5pb24gdGFfZHRtX2NtZF9vdXRwdXQgewor CXVpbnQzMl90IHJlc2VydmVkOworfTsKKworc3RydWN0IHRhX2R0bV9zaGFyZWRfbWVtb3J5IHsK Kwl1aW50MzJfdCBjbWRfaWQ7CisJdWludDMyX3QgcmVzcF9pZDsKKwllbnVtIHRhX2R0bV9zdGF0 dXMgZHRtX3N0YXR1czsKKwl1aW50MzJfdCByZXNlcnZlZDsKKwl1bmlvbiB0YV9kdG1fY21kX2lu cHV0IGR0bV9pbl9tZXNzYWdlOworCXVuaW9uIHRhX2R0bV9jbWRfb3V0cHV0IGR0bV9vdXRfbWVz c2FnZTsKK307CisKK2ludCBwc3BfY21kX3N1Ym1pdF9idWYoc3RydWN0IHBzcF9jb250ZXh0ICpw c3AsIHN0cnVjdCBhbWRncHVfZmlybXdhcmVfaW5mbyAqdWNvZGUsIHN0cnVjdCBwc3BfZ2Z4X2Nt ZF9yZXNwICpjbWQsCisJCXVpbnQ2NF90IGZlbmNlX21jX2FkZHIpOworCitlbnVtIHRhX2hkY3Bf Y29tbWFuZCB7CisJVEFfSERDUF9DT01NQU5EX19JTklUSUFMSVpFLAorCVRBX0hEQ1BfQ09NTUFO RF9fSERDUDFfQ1JFQVRFX1NFU1NJT04sCisJVEFfSERDUF9DT01NQU5EX19IRENQMV9ERVNUUk9Z X1NFU1NJT04sCisJVEFfSERDUF9DT01NQU5EX19IRENQMV9GSVJTVF9QQVJUX0FVVEhFTlRJQ0FU SU9OLAorCVRBX0hEQ1BfQ09NTUFORF9fSERDUDFfU0VDT05EX1BBUlRfQVVUSEVOVElDQVRJT04s CisJVEFfSERDUF9DT01NQU5EX19IRENQMV9FTkFCTEVfRU5DUllQVElPTiwKKwlUQV9IRENQX0NP TU1BTkRfX0hEQ1AxX0VOQUJMRV9EUF9TVFJFQU1fRU5DUllQVElPTiwKKwlUQV9IRENQX0NPTU1B TkRfX0hEQ1AxX0dFVF9FTkNSWVBUSU9OX1NUQVRVUywKK307CisKKworLyogSERDUCByZWxhdGVk IGVudW1lcmF0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRBX0hEQ1BfX0lOVkFMSURfU0VTU0lPTiAw eEZGRkYKKyNkZWZpbmUgVEFfSERDUF9fSERDUDFfQU5fU0laRSA4CisjZGVmaW5lIFRBX0hEQ1Bf X0hEQ1AxX0tTVl9TSVpFIDUKKyNkZWZpbmUgVEFfSERDUF9fSERDUDFfS1NWX0xJU1RfTUFYX0VO VFJJRVMgMTI3CisjZGVmaW5lIFRBX0hEQ1BfX0hEQ1AxX1ZfUFJJTUVfU0laRSAyMAorCitlbnVt IHRhX2hkY3Bfc3RhdHVzIHsKKwlUQV9IRENQX1NUQVRVU19fU1VDQ0VTUyA9IDB4MDAsCisJVEFf SERDUF9TVEFUVVNfX0dFTkVSSUNfRkFJTFVSRSA9IDB4MDEsCisJVEFfSERDUF9TVEFUVVNfX05V TExfUE9JTlRFUiA9IDB4MDIsCisJVEFfSERDUF9TVEFUVVNfX0ZBSUxFRF9BTExPQ0FUSU5HX1NF U1NJT04gPSAweDAzLAorCVRBX0hEQ1BfU1RBVFVTX19GQUlMRURfU0VUVVBfVFggPSAweDA0LAor CVRBX0hEQ1BfU1RBVFVTX19JTlZBTElEX1BBUkFNRVRFUiA9IDB4MDUsCisJVEFfSERDUF9TVEFU VVNfX1ZIWF9FUlJPUiA9IDB4MDYsCisJVEFfSERDUF9TVEFUVVNfX1NFU1NJT05fTk9UX0NMT1NF RF9QUk9QRVJMWSA9IDB4MDcsCisJVEFfSERDUF9TVEFUVVNfX1NSTV9GQUlMVVJFID0gMHgwOCwK KwlUQV9IRENQX1NUQVRVU19fTVNUX0FVVEhFTlRJQ0FURURfQUxSRUFEWV9TVEFSVEVEID0gMHgw OSwKKwlUQV9IRENQX1NUQVRVU19fQUtFX1NFTkRfQ0VSVF9GQUlMVVJFID0gMHgwQSwKKwlUQV9I RENQX1NUQVRVU19fQUtFX05PX1NUT1JFRF9LTV9GQUlMVVJFID0gMHgwQiwKKwlUQV9IRENQX1NU QVRVU19fQUtFX1NFTkRfSFBSSU1FX0ZBSUxVUkUgPSAweDBDLAorCVRBX0hEQ1BfU1RBVFVTX19M Q19TRU5EX0xQUklNRV9GQUlMVVJFID0gMHgwRCwKKwlUQV9IRENQX1NUQVRVU19fU0tFX1NFTkRf RUtTX0ZBSUxVUkUgPSAweDBFLAorCVRBX0hEQ1BfU1RBVFVTX19SRVBBVVRIX1NFTkRfUlhJRExJ U1RfRkFJTFVSRSA9IDB4MEYsCisJVEFfSERDUF9TVEFUVVNfX1JFUEFVVEhfU1RSRUFNX1JFQURZ X0ZBSUxVUkUgPSAweDEwLAorCVRBX0hEQ1BfU1RBVFVTX19BU0RfR0VORVJJQ19GQUlMVVJFID0g MHgxMSwKKwlUQV9IRENQX1NUQVRVU19fVU5XUkFQX1NFQ1JFVF9GQUlMVVJFID0gMHgxMiwKKwlU QV9IRENQX1NUQVRVU19fRU5BQkxFX0VOQ1JfRkFJTFVSRSA9IDB4MTMsCisJVEFfSERDUF9TVEFU VVNfX0RJU0FCTEVfRU5DUl9GQUlMVVJFID0gMHgxNCwKKwlUQV9IRENQX1NUQVRVU19fTk9UX0VO T1VHSF9NRU1PUllfRkFJTFVSRSA9IDB4MTUsCisJVEFfSERDUF9TVEFUVVNfX1VOS05PV05fTUVT U0FHRSA9IDB4MTYsCisJVEFfSERDUF9TVEFUVVNfX1RPT19NQU5ZX1NUUkVBTSA9IDB4MTcKK307 CisKK2VudW0gdGFfaGRjcF9hdXRoZW50aWNhdGlvbl9zdGF0dXMgeworCVRBX0hEQ1BfQVVUSEVO VElDQVRJT05fU1RBVFVTX19OT1RfU1RBUlRFRCA9IDB4MDAsCisJVEFfSERDUF9BVVRIRU5USUNB VElPTl9TVEFUVVNfX0hEQ1AxX0ZJUlNUX1BBUlRfRkFJTEVEID0gMHgwMSwKKwlUQV9IRENQX0FV VEhFTlRJQ0FUSU9OX1NUQVRVU19fSERDUDFfRklSU1RfUEFSVF9DT01QTEVURSA9IDB4MDIsCisJ VEFfSERDUF9BVVRIRU5USUNBVElPTl9TVEFUVVNfX0hEQ1AxX1NFQ09ORF9QQVJUX0ZBSUxFRCA9 IDB4MDMsCisJVEFfSERDUF9BVVRIRU5USUNBVElPTl9TVEFUVVNfX0hEQ1AxX0FVVEhFTlRJQ0FU RUQgPSAweDA0LAorCVRBX0hEQ1BfQVVUSEVOVElDQVRJT05fU1RBVFVTX19IRENQMV9LU1ZfVkFM SURBVElPTl9GQUlMRUQgPSAweDA5Cit9OworCisKKy8qIGlucHV0L291dHB1dCBzdHJ1Y3R1cmVz IGZvciBIRENQIGNvbW1hbmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9jcmVh dGVfc2Vzc2lvbl9pbnB1dCB7CisJdWludDhfdCBkaXNwbGF5X2hhbmRsZTsKK307CisKK3N0cnVj dCB0YV9oZGNwX2NtZF9oZGNwMV9jcmVhdGVfc2Vzc2lvbl9vdXRwdXQgeworCXVpbnQzMl90IHNl c3Npb25faGFuZGxlOworCXVpbnQ4X3QgYW5fcHJpbWFyeVtUQV9IRENQX19IRENQMV9BTl9TSVpF XTsKKwl1aW50OF90IGFrc3ZfcHJpbWFyeVtUQV9IRENQX19IRENQMV9LU1ZfU0laRV07CisJdWlu dDhfdCBhaW5mb19wcmltYXJ5OworCXVpbnQ4X3QgYW5fc2Vjb25kYXJ5W1RBX0hEQ1BfX0hEQ1Ax X0FOX1NJWkVdOworCXVpbnQ4X3QgYWtzdl9zZWNvbmRhcnlbVEFfSERDUF9fSERDUDFfS1NWX1NJ WkVdOworCXVpbnQ4X3QgYWluZm9fc2Vjb25kYXJ5OworfTsKKworc3RydWN0IHRhX2hkY3BfY21k X2hkY3AxX2Rlc3Ryb3lfc2Vzc2lvbl9pbnB1dCB7CisJdWludDMyX3Qgc2Vzc2lvbl9oYW5kbGU7 Cit9OworCitzdHJ1Y3QgdGFfaGRjcF9jbWRfaGRjcDFfZmlyc3RfcGFydF9hdXRoZW50aWNhdGlv bl9pbnB1dCB7CisJdWludDMyX3Qgc2Vzc2lvbl9oYW5kbGU7CisJdWludDhfdCBia3N2X3ByaW1h cnlbVEFfSERDUF9fSERDUDFfS1NWX1NJWkVdOworCXVpbnQ4X3QgYmtzdl9zZWNvbmRhcnlbVEFf SERDUF9fSERDUDFfS1NWX1NJWkVdOworCXVpbnQ4X3QgYmNhcHM7CisJdWludDE2X3QgcjBfcHJp bWVfcHJpbWFyeTsKKwl1aW50MTZfdCByMF9wcmltZV9zZWNvbmRhcnk7Cit9OworCitzdHJ1Y3Qg dGFfaGRjcF9jbWRfaGRjcDFfZmlyc3RfcGFydF9hdXRoZW50aWNhdGlvbl9vdXRwdXQgeworCWVu dW0gdGFfaGRjcF9hdXRoZW50aWNhdGlvbl9zdGF0dXMgYXV0aGVudGljYXRpb25fc3RhdHVzOwor fTsKKworc3RydWN0IHRhX2hkY3BfY21kX2hkY3AxX3NlY29uZF9wYXJ0X2F1dGhlbnRpY2F0aW9u X2lucHV0IHsKKwl1aW50MzJfdCBzZXNzaW9uX2hhbmRsZTsKKwl1aW50MTZfdCBic3RhdHVzX2Jp bmZvOworCXVpbnQ4X3Qga3N2X2xpc3RbVEFfSERDUF9fSERDUDFfS1NWX0xJU1RfTUFYX0VOVFJJ RVNdW1RBX0hEQ1BfX0hEQ1AxX0tTVl9TSVpFXTsKKwl1aW50MzJfdCBrc3ZfbGlzdF9zaXplOwor CXVpbnQ4X3QgcGpfcHJpbWU7CisJdWludDhfdCB2X3ByaW1lW1RBX0hEQ1BfX0hEQ1AxX1ZfUFJJ TUVfU0laRV07Cit9OworCitzdHJ1Y3QgdGFfaGRjcF9jbWRfaGRjcDFfc2Vjb25kX3BhcnRfYXV0 aGVudGljYXRpb25fb3V0cHV0IHsKKwllbnVtIHRhX2hkY3BfYXV0aGVudGljYXRpb25fc3RhdHVz IGF1dGhlbnRpY2F0aW9uX3N0YXR1czsKK307CisKK3N0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9l bmFibGVfZW5jcnlwdGlvbl9pbnB1dCB7CisJdWludDMyX3Qgc2Vzc2lvbl9oYW5kbGU7Cit9Owor CitzdHJ1Y3QgdGFfaGRjcF9jbWRfaGRjcDFfZW5hYmxlX2RwX3N0cmVhbV9lbmNyeXB0aW9uX2lu cHV0IHsKKwl1aW50MzJfdCBzZXNzaW9uX2hhbmRsZTsKKwl1aW50MzJfdCBkaXNwbGF5X2hhbmRs ZTsKK307CisKK3N0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9nZXRfZW5jcnlwdGlvbl9zdGF0dXNf aW5wdXQgeworCXVpbnQzMl90IHNlc3Npb25faGFuZGxlOworfTsKKworc3RydWN0IHRhX2hkY3Bf Y21kX2hkY3AxX2dldF9lbmNyeXB0aW9uX3N0YXR1c19vdXRwdXQgeworCXVpbnQzMl90IHByb3Rl Y3Rpb25fbGV2ZWw7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbW1vbiBpbnB1dCBzdHJ1Y3R1cmUgZm9yIEhE Q1AgY2FsbGJhY2tzICovCit1bmlvbiB0YV9oZGNwX2NtZF9pbnB1dCB7CisJc3RydWN0IHRhX2hk Y3BfY21kX2hkY3AxX2NyZWF0ZV9zZXNzaW9uX2lucHV0IGhkY3AxX2NyZWF0ZV9zZXNzaW9uOwor CXN0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9kZXN0cm95X3Nlc3Npb25faW5wdXQgaGRjcDFfZGVz dHJveV9zZXNzaW9uOworCXN0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9maXJzdF9wYXJ0X2F1dGhl bnRpY2F0aW9uX2lucHV0IGhkY3AxX2ZpcnN0X3BhcnRfYXV0aGVudGljYXRpb247CisJc3RydWN0 IHRhX2hkY3BfY21kX2hkY3AxX3NlY29uZF9wYXJ0X2F1dGhlbnRpY2F0aW9uX2lucHV0IGhkY3Ax X3NlY29uZF9wYXJ0X2F1dGhlbnRpY2F0aW9uOworCXN0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9l bmFibGVfZW5jcnlwdGlvbl9pbnB1dCBoZGNwMV9lbmFibGVfZW5jcnlwdGlvbjsKKwlzdHJ1Y3Qg dGFfaGRjcF9jbWRfaGRjcDFfZW5hYmxlX2RwX3N0cmVhbV9lbmNyeXB0aW9uX2lucHV0IGhkY3Ax X2VuYWJsZV9kcF9zdHJlYW1fZW5jcnlwdGlvbjsKKwlzdHJ1Y3QgdGFfaGRjcF9jbWRfaGRjcDFf Z2V0X2VuY3J5cHRpb25fc3RhdHVzX2lucHV0IGhkY3AxX2dldF9lbmNyeXB0aW9uX3N0YXR1czsK K307CisKKy8qIENvbW1vbiBvdXRwdXQgc3RydWN0dXJlIGZvciBIRENQIGNhbGxiYWNrcyAqLwor dW5pb24gdGFfaGRjcF9jbWRfb3V0cHV0IHsKKwlzdHJ1Y3QgdGFfaGRjcF9jbWRfaGRjcDFfY3Jl YXRlX3Nlc3Npb25fb3V0cHV0IGhkY3AxX2NyZWF0ZV9zZXNzaW9uOworCXN0cnVjdCB0YV9oZGNw X2NtZF9oZGNwMV9maXJzdF9wYXJ0X2F1dGhlbnRpY2F0aW9uX291dHB1dCBoZGNwMV9maXJzdF9w YXJ0X2F1dGhlbnRpY2F0aW9uOworCXN0cnVjdCB0YV9oZGNwX2NtZF9oZGNwMV9zZWNvbmRfcGFy dF9hdXRoZW50aWNhdGlvbl9vdXRwdXQgaGRjcDFfc2Vjb25kX3BhcnRfYXV0aGVudGljYXRpb247 CisJc3RydWN0IHRhX2hkY3BfY21kX2hkY3AxX2dldF9lbmNyeXB0aW9uX3N0YXR1c19vdXRwdXQg aGRjcDFfZ2V0X2VuY3J5cHRpb25fc3RhdHVzOworfTsKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgdGFfaGRjcF9z aGFyZWRfbWVtb3J5IHsKKwl1aW50MzJfdCBjbWRfaWQ7CisJZW51bSB0YV9oZGNwX3N0YXR1cyBo ZGNwX3N0YXR1czsKKwl1aW50MzJfdCByZXNlcnZlZDsKKwl1bmlvbiB0YV9oZGNwX2NtZF9pbnB1 dCBpbl9tc2c7CisJdW5pb24gdGFfaGRjcF9jbWRfb3V0cHV0IG91dF9tc2c7Cit9OworCitlbnVt IHBzcF9zdGF0dXMgeworCVBTUF9TVEFUVVNfX1NVQ0NFU1MgPSAwLAorCVBTUF9TVEFUVVNfX0VS Uk9SX0lOVkFMSURfUEFSQU1TLAorCVBTUF9TVEFUVVNfX0VSUk9SX0dFTkVSSUMsCisJUFNQX1NU QVRVU19fRVJST1JfT1VUX09GX01FTU9SWSwKKwlQU1BfU1RBVFVTX19FUlJPUl9VTlNVUFBPUlRF RF9GRUFUVVJFCit9OworCisjZW5kaWYgLyogTU9EVUxFU19IRENQX0hEQ1BfUFNQX0hfICovCi0t IAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA==