From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH v11 18/42] drm/i915: Implement the HDCP2.2 support for DP Date: Thu, 7 Feb 2019 02:34:07 +0530 Message-ID: <1549487071-15343-19-git-send-email-ramalingam.c@intel.com> References: <1549487071-15343-1-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1549487071-15343-1-git-send-email-ramalingam.c@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, daniel.vetter@ffwll.ch, tomas.winkler@intel.com, uma.shankar@intel.com List-Id: dri-devel@lists.freedesktop.org SW1wbGVtZW50cyB0aGUgRFAgYWRhcHRhdGlvbiBzcGVjaWZpYyBIRENQMi4yIGZ1bmN0aW9ucy4K ClRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIHRoZSBEUENEIHJlYWQgYW5kIHdyaXRlIGZvciBjb21t dW5pY2F0aW5nIHRoZQpIRENQMi4yIGF1dGggbWVzc2FnZSBiYWNrIGFuZCBmb3J0aC4KCnYyOgog IHdhaXQgZm9yIGNwX2lycSBpcyBtZXJnZWQgd2l0aCB0aGlzIHBhdGNoLiBSZWJhc2VkLgp2MzoK ICB3YWl0X3F1ZXVlIGlzIHVzZWQgZm9yIHdhaXQgZm9yIGNwX2lycSBbQ2hyaXMgV2lsc29uXQp2 NDoKICBTdHlsZSBmaXhlZC4KICAlcy9QQVJJTkcvUEFJUklORwogIEZldyBzdHlsZSBmaXhlcyBb VW1hXQp2NToKICBMb29rdXAgdGFibGUgZm9yIERQIEhEQ1AyLjIgbXNnIGRldGFpbHMgW0Rhbmll bF0uCiAgRXh0cmEgbGluZXMgYXJlIHJlbW92ZWQuCnY2OiBSZWJhc2VkLgp2NzoKICBGaXhlZCBz b21lIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBhdCB2NS4gW0Fua2l0XQogIE1hY3JvIEhEQ1BfMl8y X1JYX0NBUFNfVkVSU0lPTl9WQUwgaXMgcmV1c2VkIFtVbWFdCiAgQ29udmVydGVkIGEgZnVuY3Rp b24gdG8gaW5saW5lIFtVbWFdCiAgJXMvdWludHh4X3QvdXh4CnY4OgogIEVycm9yIGR1ZSB0byB0 aGUgc2lua3MgYXJlIHJlcG9ydGVkIGFzIERFQlVHIGxvZ3MuCiAgQWRqdXN0IHRvIHRoZSBuZXcg bWVpIGludGVyZmFjZS4Kdjk6CiAgQVJSQVlfU0laRSBmb3Igbm8gb2YgYXJyYXkgbWVtYmVycyBb Sm9uICYgRGFuaWVsXQogIHJldHVybiBvZiB0aGUgd2FpdF9mb3JfY3BfaXJxIGlzIG1hZGUgYXMg dm9pZCBbRGFuaWVsXQogIFdhaXQgZm9yIEhEQ1AyLjIgbXNnIGlzIGRvbmUgYmFzZWQgb24gcG9s bGluZyB0aGUgcmVnIGJpdCB0aGFuCiAgICBDUF9JUlEgYmFzZWQuIFtEYW5pZWxdCiAgaGRjcCBh ZGFwdGF0aW9uIGlzIGFkZGVkIGFzIGEgY29uc3QgaW4gdGhlIGhkY3Bfc2hpbSBbRGFuaWVsXQp2 MTA6CiAgY29uZmlnX3N0cmVhbV90eXBlIGlzIHJlZGVmaW5lZCBbRGFuaWVsXQogIERQIEVycmF0 YSBzcGVjaWZpYyBkZWZpbmVzIGFyZSBtb3ZlZCBpbnRvIGludGVsX2RwLmMuCgpTaWduZWQtb2Zm LWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6 IEFua2l0IEsgTmF1dGl5YWwgPGFua2l0LmsubmF1dGl5YWxAaW50ZWwuY29tPgpSZXZpZXdlZC1i eTogVW1hIFNoYW5rYXIgPHVtYS5zaGFua2FyQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcC5jIHwgMzMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAzMzMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcC5jCmluZGV4IDlkZDQyOGU1NzAxYS4uOGYxYTZkMzg5N2ZiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RwLmMKQEAgLTU4NDksNiArNTg0OSwzMzMgQEAgaW50IGludGVsX2RwX2hkY3BfY2Fw YWJsZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKIAlyZXR1cm4g MDsKIH0KIAorc3RydWN0IGhkY3AyX2RwX2VycmF0YV9zdHJlYW1fdHlwZSB7CisJdTgJbXNnX2lk OworCXU4CXN0cmVhbV90eXBlOworfSBfX3BhY2tlZDsKKworc3RhdGljIHN0cnVjdCBoZGNwMl9k cF9tc2dfZGF0YSB7CisJdTggbXNnX2lkOworCXUzMiBvZmZzZXQ7CisJYm9vbCBtc2dfZGV0ZWN0 YWJsZTsKKwl1MzIgdGltZW91dDsKKwl1MzIgdGltZW91dDI7IC8qIEFkZGVkIGZvciBub25fcGFp cmVkIHNpdHVhdGlvbiAqLworCX0gaGRjcDJfbXNnX2RhdGFbXSA9IHsKKwkJe0hEQ1BfMl8yX0FL RV9JTklULCBEUF9IRENQXzJfMl9BS0VfSU5JVF9PRkZTRVQsIGZhbHNlLCAwLCAwfSwKKwkJe0hE Q1BfMl8yX0FLRV9TRU5EX0NFUlQsIERQX0hEQ1BfMl8yX0FLRV9TRU5EX0NFUlRfT0ZGU0VULAor CQkJCWZhbHNlLCBIRENQXzJfMl9DRVJUX1RJTUVPVVRfTVMsIDB9LAorCQl7SERDUF8yXzJfQUtF X05PX1NUT1JFRF9LTSwgRFBfSERDUF8yXzJfQUtFX05PX1NUT1JFRF9LTV9PRkZTRVQsCisJCQkJ ZmFsc2UsIDAsIDB9LAorCQl7SERDUF8yXzJfQUtFX1NUT1JFRF9LTSwgRFBfSERDUF8yXzJfQUtF X1NUT1JFRF9LTV9PRkZTRVQsCisJCQkJZmFsc2UsIDAsIDB9LAorCQl7SERDUF8yXzJfQUtFX1NF TkRfSFBSSU1FLCBEUF9IRENQXzJfMl9BS0VfU0VORF9IUFJJTUVfT0ZGU0VULAorCQkJCXRydWUs IEhEQ1BfMl8yX0hQUklNRV9QQUlSRURfVElNRU9VVF9NUywKKwkJCQlIRENQXzJfMl9IUFJJTUVf Tk9fUEFJUkVEX1RJTUVPVVRfTVN9LAorCQl7SERDUF8yXzJfQUtFX1NFTkRfUEFJUklOR19JTkZP LAorCQkJCURQX0hEQ1BfMl8yX0FLRV9TRU5EX1BBSVJJTkdfSU5GT19PRkZTRVQsIHRydWUsCisJ CQkJSERDUF8yXzJfUEFJUklOR19USU1FT1VUX01TLCAwfSwKKwkJe0hEQ1BfMl8yX0xDX0lOSVQs IERQX0hEQ1BfMl8yX0xDX0lOSVRfT0ZGU0VULCBmYWxzZSwgMCwgMH0sCisJCXtIRENQXzJfMl9M Q19TRU5EX0xQUklNRSwgRFBfSERDUF8yXzJfTENfU0VORF9MUFJJTUVfT0ZGU0VULAorCQkJCWZh bHNlLCBIRENQXzJfMl9EUF9MUFJJTUVfVElNRU9VVF9NUywgMH0sCisJCXtIRENQXzJfMl9TS0Vf U0VORF9FS1MsIERQX0hEQ1BfMl8yX1NLRV9TRU5EX0VLU19PRkZTRVQsIGZhbHNlLAorCQkJCTAs IDB9LAorCQl7SERDUF8yXzJfUkVQX1NFTkRfUkVDVklEX0xJU1QsCisJCQkJRFBfSERDUF8yXzJf UkVQX1NFTkRfUkVDVklEX0xJU1RfT0ZGU0VULCB0cnVlLAorCQkJCUhEQ1BfMl8yX1JFQ1ZJRF9M SVNUX1RJTUVPVVRfTVMsIDB9LAorCQl7SERDUF8yXzJfUkVQX1NFTkRfQUNLLCBEUF9IRENQXzJf Ml9SRVBfU0VORF9BQ0tfT0ZGU0VULCBmYWxzZSwKKwkJCQkwLCAwfSwKKwkJe0hEQ1BfMl8yX1JF UF9TVFJFQU1fTUFOQUdFLAorCQkJCURQX0hEQ1BfMl8yX1JFUF9TVFJFQU1fTUFOQUdFX09GRlNF VCwgZmFsc2UsCisJCQkJMCwgMH0sCisJCXtIRENQXzJfMl9SRVBfU1RSRUFNX1JFQURZLCBEUF9I RENQXzJfMl9SRVBfU1RSRUFNX1JFQURZX09GRlNFVCwKKwkJCQlmYWxzZSwgSERDUF8yXzJfU1RS RUFNX1JFQURZX1RJTUVPVVRfTVMsIDB9LAorLyogbG9jYWwgZGVmaW5lIHRvIHNob3ZlbCB0aGlz IHRocm91Z2ggdGhlIHdyaXRlXzJfMiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSERDUF8yXzJfRVJS QVRBX0RQX1NUUkVBTV9UWVBFCTUwCisJCXtIRENQXzJfMl9FUlJBVEFfRFBfU1RSRUFNX1RZUEUs CisJCQkJRFBfSERDUF8yXzJfUkVHX1NUUkVBTV9UWVBFX09GRlNFVCwgZmFsc2UsCisJCQkJMCwg MH0sCisJCX07CisKK3N0YXRpYyBpbmxpbmUKK2ludCBpbnRlbF9kcF9oZGNwMl9yZWFkX3J4X3N0 YXR1cyhzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCQkgIHU4 ICpyeF9zdGF0dXMpCit7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFk KCZpbnRlbF9kaWdfcG9ydC0+ZHAuYXV4LAorCQkJICAgICAgIERQX0hEQ1BfMl8yX1JFR19SWFNU QVRVU19PRkZTRVQsIHJ4X3N0YXR1cywKKwkJCSAgICAgICBIRENQXzJfMl9EUF9SWFNUQVRVU19M RU4pOworCWlmIChyZXQgIT0gSERDUF8yXzJfRFBfUlhTVEFUVVNfTEVOKSB7CisJCURSTV9ERUJV R19LTVMoIlJlYWQgYnN0YXR1cyBmcm9tIERQL0FVWCBmYWlsZWQgKCV6ZClcbiIsIHJldCk7CisJ CXJldHVybiByZXQgPj0gMCA/IC1FSU8gOiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYworaW50IGhkY3AyX2RldGVjdF9tc2dfYXZhaWxhYmlsaXR5KHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAorCQkJCSAgdTggbXNnX2lkLCBib29sICptc2dfcmVh ZHkpCit7CisJdTggcnhfc3RhdHVzOworCWludCByZXQ7CisKKwkqbXNnX3JlYWR5ID0gZmFsc2U7 CisJcmV0ID0gaW50ZWxfZHBfaGRjcDJfcmVhZF9yeF9zdGF0dXMoaW50ZWxfZGlnX3BvcnQsICZy eF9zdGF0dXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChtc2df aWQpIHsKKwljYXNlIEhEQ1BfMl8yX0FLRV9TRU5EX0hQUklNRToKKwkJaWYgKEhEQ1BfMl8yX0RQ X1JYU1RBVFVTX0hfUFJJTUUocnhfc3RhdHVzKSkKKwkJCSptc2dfcmVhZHkgPSB0cnVlOworCQli cmVhazsKKwljYXNlIEhEQ1BfMl8yX0FLRV9TRU5EX1BBSVJJTkdfSU5GTzoKKwkJaWYgKEhEQ1Bf Ml8yX0RQX1JYU1RBVFVTX1BBSVJJTkcocnhfc3RhdHVzKSkKKwkJCSptc2dfcmVhZHkgPSB0cnVl OworCQlicmVhazsKKwljYXNlIEhEQ1BfMl8yX1JFUF9TRU5EX1JFQ1ZJRF9MSVNUOgorCQlpZiAo SERDUF8yXzJfRFBfUlhTVEFUVVNfUkVBRFkocnhfc3RhdHVzKSkKKwkJCSptc2dfcmVhZHkgPSB0 cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVuaWRlbnRpZmllZCBtc2df aWQ6ICVkXG4iLCBtc2dfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHNzaXplX3QKK2ludGVsX2RwX2hkY3AyX3dhaXRfZm9yX21zZyhzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCSAgICBzdHJ1Y3QgaGRjcDJf ZHBfbXNnX2RhdGEgKmhkY3AyX21zZ19kYXRhKQoreworCXN0cnVjdCBpbnRlbF9kcCAqZHAgPSAm aW50ZWxfZGlnX3BvcnQtPmRwOworCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0gJmRwLT5hdHRh Y2hlZF9jb25uZWN0b3ItPmhkY3A7CisJdTggbXNnX2lkID0gaGRjcDJfbXNnX2RhdGEtPm1zZ19p ZDsKKwlpbnQgcmV0LCB0aW1lb3V0OworCWJvb2wgbXNnX3JlYWR5ID0gZmFsc2U7CisKKwlpZiAo bXNnX2lkID09IEhEQ1BfMl8yX0FLRV9TRU5EX0hQUklNRSAmJiAhaGRjcC0+aXNfcGFpcmVkKQor CQl0aW1lb3V0ID0gaGRjcDJfbXNnX2RhdGEtPnRpbWVvdXQyOworCWVsc2UKKwkJdGltZW91dCA9 IGhkY3AyX21zZ19kYXRhLT50aW1lb3V0OworCisJLyoKKwkgKiBUaGVyZSBpcyBubyB3YXkgdG8g ZGV0ZWN0IHRoZSBDRVJULCBMUFJJTUUgYW5kIFNUUkVBTV9SRUFEWQorCSAqIGF2YWlsYWJpbGl0 eS4gU28gV2FpdCBmb3IgdGltZW91dCBhbmQgcmVhZCB0aGUgbXNnLgorCSAqLworCWlmICghaGRj cDJfbXNnX2RhdGEtPm1zZ19kZXRlY3RhYmxlKSB7CisJCW1kZWxheSh0aW1lb3V0KTsKKwkJcmV0 ID0gMDsKKwl9IGVsc2UgeworCQkvKiBUT0RPOiBJbiBjYXNlIGlmIHlvdSBuZWVkIHRvIHdhaXQg b24gQ1BfSVJRLCBkbyBpdCBoZXJlICovCisJCXJldCA9IF9fd2FpdF9mb3IocmV0ID0KKwkJCQkg aGRjcDJfZGV0ZWN0X21zZ19hdmFpbGFiaWxpdHkoaW50ZWxfZGlnX3BvcnQsCisJCQkJCQkJICAg ICAgIG1zZ19pZCwKKwkJCQkJCQkgICAgICAgJm1zZ19yZWFkeSksCisJCQkJICFyZXQgJiYgbXNn X3JlYWR5LCB0aW1lb3V0ICogMTAwMCwKKwkJCQkgMTAwMCwgNSAqIDEwMDApOworCisJCWlmICgh bXNnX3JlYWR5KQorCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAocmV0KQorCQlEUk1f REVCVUdfS01TKCJtc2dfaWQgJWQsIHJldCAlZCwgdGltZW91dChtU2VjKTogJWRcbiIsCisJCQkg ICAgICBoZGNwMl9tc2dfZGF0YS0+bXNnX2lkLCByZXQsIHRpbWVvdXQpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHN0cnVjdCBoZGNwMl9kcF9tc2dfZGF0YSAqZ2V0X2hkY3AyX2RwX21z Z19kYXRhKHU4IG1zZ19pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGhkY3AyX21zZ19kYXRhKTsgaSsrKQorCQlpZiAoaGRjcDJfbXNnX2RhdGFbaV0ubXNnX2lk ID09IG1zZ19pZCkKKwkJCXJldHVybiAmaGRjcDJfbXNnX2RhdGFbaV07CisKKwlyZXR1cm4gTlVM TDsKK30KKworc3RhdGljCitpbnQgaW50ZWxfZHBfaGRjcDJfd3JpdGVfbXNnKHN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAorCQkJICAgICB2b2lkICpidWYsIHNpemVf dCBzaXplKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdTggKmJ5dGUgPSBidWY7CisJc3Np emVfdCByZXQsIGJ5dGVzX3RvX3dyaXRlLCBsZW47CisJc3RydWN0IGhkY3AyX2RwX21zZ19kYXRh ICpoZGNwMl9tc2dfZGF0YTsKKworCWhkY3AyX21zZ19kYXRhID0gZ2V0X2hkY3AyX2RwX21zZ19k YXRhKCpieXRlKTsKKwlpZiAoIWhkY3AyX21zZ19kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CW9mZnNldCA9IGhkY3AyX21zZ19kYXRhLT5vZmZzZXQ7CisKKwkvKiBObyBtc2dfaWQgaW4gRFAg SERDUDIuMiBtc2dzICovCisJYnl0ZXNfdG9fd3JpdGUgPSBzaXplIC0gMTsKKwlieXRlKys7CisK Kwl3aGlsZSAoYnl0ZXNfdG9fd3JpdGUpIHsKKwkJbGVuID0gYnl0ZXNfdG9fd3JpdGUgPiBEUF9B VVhfTUFYX1BBWUxPQURfQllURVMgPworCQkJCURQX0FVWF9NQVhfUEFZTE9BRF9CWVRFUyA6IGJ5 dGVzX3RvX3dyaXRlOworCisJCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKCZpbnRlbF9kaWdfcG9y dC0+ZHAuYXV4LAorCQkJCQlvZmZzZXQsICh2b2lkICopYnl0ZSwgbGVuKTsKKwkJaWYgKHJldCA8 IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJ5dGVzX3RvX3dyaXRlIC09IHJldDsKKwkJYnl0ZSAr PSByZXQ7CisJCW9mZnNldCArPSByZXQ7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRp Yworc3NpemVfdCBnZXRfcmVjZWl2ZXJfaWRfbGlzdF9zaXplKHN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmludGVsX2RpZ19wb3J0KQoreworCXU4IHJ4X2luZm9bSERDUF8yXzJfUlhJTkZPX0xF Tl07CisJdTMyIGRldl9jbnQ7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBkcm1fZHBfZHBjZF9y ZWFkKCZpbnRlbF9kaWdfcG9ydC0+ZHAuYXV4LAorCQkJICAgICAgIERQX0hEQ1BfMl8yX1JFR19S WElORk9fT0ZGU0VULAorCQkJICAgICAgICh2b2lkICopcnhfaW5mbywgSERDUF8yXzJfUlhJTkZP X0xFTik7CisJaWYgKHJldCAhPSBIRENQXzJfMl9SWElORk9fTEVOKQorCQlyZXR1cm4gcmV0ID49 IDAgPyAtRUlPIDogcmV0OworCisJZGV2X2NudCA9IChIRENQXzJfMl9ERVZfQ09VTlRfSEkocnhf aW5mb1swXSkgPDwgNCB8CisJCSAgIEhEQ1BfMl8yX0RFVl9DT1VOVF9MTyhyeF9pbmZvWzFdKSk7 CisKKwlpZiAoZGV2X2NudCA+IEhEQ1BfMl8yX01BWF9ERVZJQ0VfQ09VTlQpCisJCWRldl9jbnQg PSBIRENQXzJfMl9NQVhfREVWSUNFX0NPVU5UOworCisJcmV0ID0gc2l6ZW9mKHN0cnVjdCBoZGNw Ml9yZXBfc2VuZF9yZWNlaXZlcmlkX2xpc3QpIC0KKwkJSERDUF8yXzJfUkVDRUlWRVJfSURTX01B WF9MRU4gKworCQkoZGV2X2NudCAqIEhEQ1BfMl8yX1JFQ0VJVkVSX0lEX0xFTik7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMKK2ludCBpbnRlbF9kcF9oZGNwMl9yZWFkX21zZyhzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCSAgICB1OCBtc2dfaWQsIHZv aWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1OCAqYnl0 ZSA9IGJ1ZjsKKwlzc2l6ZV90IHJldCwgYnl0ZXNfdG9fcmVjdiwgbGVuOworCXN0cnVjdCBoZGNw Ml9kcF9tc2dfZGF0YSAqaGRjcDJfbXNnX2RhdGE7CisKKwloZGNwMl9tc2dfZGF0YSA9IGdldF9o ZGNwMl9kcF9tc2dfZGF0YShtc2dfaWQpOworCWlmICghaGRjcDJfbXNnX2RhdGEpCisJCXJldHVy biAtRUlOVkFMOworCW9mZnNldCA9IGhkY3AyX21zZ19kYXRhLT5vZmZzZXQ7CisKKwlyZXQgPSBp bnRlbF9kcF9oZGNwMl93YWl0X2Zvcl9tc2coaW50ZWxfZGlnX3BvcnQsIGhkY3AyX21zZ19kYXRh KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtc2dfaWQgPT0gSERDUF8y XzJfUkVQX1NFTkRfUkVDVklEX0xJU1QpIHsKKwkJcmV0ID0gZ2V0X3JlY2VpdmVyX2lkX2xpc3Rf c2l6ZShpbnRlbF9kaWdfcG9ydCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwor CQlzaXplID0gcmV0OworCX0KKwlieXRlc190b19yZWN2ID0gc2l6ZSAtIDE7CisKKwkvKiBEUCBh ZGFwdGF0aW9uIG1zZ3MgaGFzIG5vIG1zZ19pZCAqLworCWJ5dGUrKzsKKworCXdoaWxlIChieXRl c190b19yZWN2KSB7CisJCWxlbiA9IGJ5dGVzX3RvX3JlY3YgPiBEUF9BVVhfTUFYX1BBWUxPQURf QllURVMgPworCQkgICAgICBEUF9BVVhfTUFYX1BBWUxPQURfQllURVMgOiBieXRlc190b19yZWN2 OworCisJCXJldCA9IGRybV9kcF9kcGNkX3JlYWQoJmludGVsX2RpZ19wb3J0LT5kcC5hdXgsIG9m ZnNldCwKKwkJCQkgICAgICAgKHZvaWQgKilieXRlLCBsZW4pOworCQlpZiAocmV0IDwgMCkgewor CQkJRFJNX0RFQlVHX0tNUygibXNnX2lkICVkLCByZXQgJXpkXG4iLCBtc2dfaWQsIHJldCk7CisJ CQlyZXR1cm4gcmV0OworCQl9CisKKwkJYnl0ZXNfdG9fcmVjdiAtPSByZXQ7CisJCWJ5dGUgKz0g cmV0OworCQlvZmZzZXQgKz0gcmV0OworCX0KKwlieXRlID0gYnVmOworCSpieXRlID0gbXNnX2lk OworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYworaW50IGludGVsX2RwX2hkY3AyX2NvbmZp Z19zdHJlYW1fdHlwZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwK KwkJCQkgICAgICBib29sIGlzX3JlcGVhdGVyLCB1OCBjb250ZW50X3R5cGUpCit7CisJc3RydWN0 IGhkY3AyX2RwX2VycmF0YV9zdHJlYW1fdHlwZSBzdHJlYW1fdHlwZV9tc2c7CisKKwlpZiAoaXNf cmVwZWF0ZXIpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBFcnJhdGEgZm9yIERQOiBBcyBTdHJl YW0gdHlwZSBpcyB1c2VkIGZvciBlbmNyeXB0aW9uLCBSZWNlaXZlcgorCSAqIHNob3VsZCBiZSBj b21tdW5pY2F0ZWQgd2l0aCBzdHJlYW0gdHlwZSBmb3IgdGhlIGRlY3J5cHRpb24gb2YgdGhlCisJ ICogY29udGVudC4KKwkgKiBSZXBlYXRlciB3aWxsIGJlIGNvbW11bmljYXRlZCB3aXRoIHN0cmVh bSB0eXBlIGFzIGEgcGFydCBvZiBpdCdzCisJICogYXV0aCBsYXRlciBpbiB0aW1lLgorCSAqLwor CXN0cmVhbV90eXBlX21zZy5tc2dfaWQgPSBIRENQXzJfMl9FUlJBVEFfRFBfU1RSRUFNX1RZUEU7 CisJc3RyZWFtX3R5cGVfbXNnLnN0cmVhbV90eXBlID0gY29udGVudF90eXBlOworCisJcmV0dXJu IGludGVsX2RwX2hkY3AyX3dyaXRlX21zZyhpbnRlbF9kaWdfcG9ydCwgJnN0cmVhbV90eXBlX21z ZywKKwkJCQkJc2l6ZW9mKHN0cmVhbV90eXBlX21zZykpOworfQorCitzdGF0aWMKK2ludCBpbnRl bF9kcF9oZGNwMl9jaGVja19saW5rKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2Rp Z19wb3J0KQoreworCXU4IHJ4X3N0YXR1czsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfZHBf aGRjcDJfcmVhZF9yeF9zdGF0dXMoaW50ZWxfZGlnX3BvcnQsICZyeF9zdGF0dXMpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoSERDUF8yXzJfRFBfUlhTVEFUVVNfUkVBVVRIX1JF UShyeF9zdGF0dXMpKQorCQlyZXQgPSBIRENQX1JFQVVUSF9SRVFVRVNUOworCWVsc2UgaWYgKEhE Q1BfMl8yX0RQX1JYU1RBVFVTX0xJTktfRkFJTEVEKHJ4X3N0YXR1cykpCisJCXJldCA9IEhEQ1Bf TElOS19JTlRFR1JJVFlfRkFJTFVSRTsKKwllbHNlIGlmIChIRENQXzJfMl9EUF9SWFNUQVRVU19S RUFEWShyeF9zdGF0dXMpKQorCQlyZXQgPSBIRENQX1RPUE9MT0dZX0NIQU5HRTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYworaW50IGludGVsX2RwX2hkY3AyX2NhcGFibGUoc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCisJCQkgICBib29sICpjYXBhYmxlKQor eworCXU4IHJ4X2NhcHNbM107CisJaW50IHJldDsKKworCSpjYXBhYmxlID0gZmFsc2U7CisJcmV0 ID0gZHJtX2RwX2RwY2RfcmVhZCgmaW50ZWxfZGlnX3BvcnQtPmRwLmF1eCwKKwkJCSAgICAgICBE UF9IRENQXzJfMl9SRUdfUlhfQ0FQU19PRkZTRVQsCisJCQkgICAgICAgcnhfY2FwcywgSERDUF8y XzJfUlhDQVBTX0xFTik7CisJaWYgKHJldCAhPSBIRENQXzJfMl9SWENBUFNfTEVOKQorCQlyZXR1 cm4gcmV0ID49IDAgPyAtRUlPIDogcmV0OworCisJaWYgKHJ4X2NhcHNbMF0gPT0gSERDUF8yXzJf UlhfQ0FQU19WRVJTSU9OX1ZBTCAmJgorCSAgICBIRENQXzJfMl9EUF9IRENQX0NBUEFCTEUocnhf Y2Fwc1syXSkpCisJCSpjYXBhYmxlID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMg Y29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSBpbnRlbF9kcF9oZGNwX3NoaW0gPSB7CiAJLndy aXRlX2FuX2Frc3YgPSBpbnRlbF9kcF9oZGNwX3dyaXRlX2FuX2Frc3YsCiAJLnJlYWRfYmtzdiA9 IGludGVsX2RwX2hkY3BfcmVhZF9ia3N2LApAQCAtNTg2MSw2ICs2MTg4LDEyIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltIGludGVsX2RwX2hkY3Bfc2hpbSA9IHsKIAkudG9n Z2xlX3NpZ25hbGxpbmcgPSBpbnRlbF9kcF9oZGNwX3RvZ2dsZV9zaWduYWxsaW5nLAogCS5jaGVj a19saW5rID0gaW50ZWxfZHBfaGRjcF9jaGVja19saW5rLAogCS5oZGNwX2NhcGFibGUgPSBpbnRl bF9kcF9oZGNwX2NhcGFibGUsCisJLndyaXRlXzJfMl9tc2cgPSBpbnRlbF9kcF9oZGNwMl93cml0 ZV9tc2csCisJLnJlYWRfMl8yX21zZyA9IGludGVsX2RwX2hkY3AyX3JlYWRfbXNnLAorCS5jb25m aWdfc3RyZWFtX3R5cGUgPSBpbnRlbF9kcF9oZGNwMl9jb25maWdfc3RyZWFtX3R5cGUsCisJLmNo ZWNrXzJfMl9saW5rID0gaW50ZWxfZHBfaGRjcDJfY2hlY2tfbGluaywKKwkuaGRjcF8yXzJfY2Fw YWJsZSA9IGludGVsX2RwX2hkY3AyX2NhcGFibGUsCisJLnByb3RvY29sID0gSERDUF9QUk9UT0NP TF9EUCwKIH07CiAKIHN0YXRpYyB2b2lkIGludGVsX2VkcF9wYW5lbF92ZGRfc2FuaXRpemUoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK