From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH 39/43] drm/i915: Implement the HDCP2.2 support for DP Date: Wed, 14 Feb 2018 19:43:54 +0530 Message-ID: <1518617638-21684-40-git-send-email-ramalingam.c@intel.com> References: <1518617638-21684-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: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 416FE6E41A for ; Wed, 14 Feb 2018 14:21:19 +0000 (UTC) In-Reply-To: <1518617638-21684-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: seanpaul@chromium.org, intel-gfx@lists.freedesktop.org, rodrigo.vivi@intel.com, daniel.vetter@ffwll.ch Cc: tomas.winkler@intel.com List-Id: intel-gfx@lists.freedesktop.org SW1wbGVtZW50cyB0aGUgRFAgYWRhcHRhdGlvbiBzcGVjaWZpYyBIRENQMi4yIGZ1bmN0aW9ucwpp bnRlbF9oZGNwMl9zaGltLgoKVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0gdGhlIERQQ0QgcmVhZCBh bmQgd3JpdGUgZm9yIGNvbW11bmljYXRpbmcgdGhlCkhEQ1AyLjIgYXV0aCBtZXNzYWdlIGJhY2sg YW5kIGZvcnRoLgoKU2lnbmVkLW9mZi1ieTogUmFtYWxpbmdhbSBDIDxyYW1hbGluZ2FtLmNAaW50 ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgfCAzMzEgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDMzMSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggNmY2YjRjOGUzYTQyLi4y NDE3NzczOTgzNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNTMwMyw2ICs1MzAzLDMz NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSBpbnRlbF9kcF9oZGNwX3No aW0gPSB7CiAJLmhkY3BfY2FwYWJsZSA9IGludGVsX2RwX2hkY3BfY2FwYWJsZSwKIH07CiAKK3N0 YXRpYyBpbmxpbmUKK2ludCBpbnRlbF9kcGNkX29mZnNldF9mb3JfaGRjcDJfbXNnaWQodWludDhf dCBieXRlLCB1bnNpZ25lZCBpbnQgKm9mZnNldCkKK3sKKwlzd2l0Y2ggKGJ5dGUpIHsKKwljYXNl IEFLRV9JTklUOgorCQkqb2Zmc2V0ID0gRFBfSERDUF8yXzJfQUtFX0lOSVRfT0ZGU0VUOworCQli cmVhazsKKwljYXNlIEFLRV9TRU5EX0NFUlQ6CisJCSpvZmZzZXQgPSBEUF9IRENQXzJfMl9BS0Vf U0VORF9DRVJUX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBBS0VfTk9fU1RPUkVEX0tNOgorCQkq b2Zmc2V0ID0gRFBfSERDUF8yXzJfQUtFX05PX1NUT1JFRF9LTV9PRkZTRVQ7CisJCWJyZWFrOwor CWNhc2UgQUtFX1NUT1JFRF9LTToKKwkJKm9mZnNldCA9IERQX0hEQ1BfMl8yX0FLRV9TVE9SRURf S01fT0ZGU0VUOworCQlicmVhazsKKwljYXNlIEFLRV9TRU5EX0hQUklNRToKKwkJKm9mZnNldCA9 IERQX0hEQ1BfMl8yX0FLRV9TRU5EX0hQUklNRV9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgQUtF X1NFTkRfUEFSSU5HX0lORk86CisJCSpvZmZzZXQgPSBEUF9IRENQXzJfMl9BS0VfU0VORF9QQVJJ TkdfSU5GT19PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgTENfSU5JVDoKKwkJKm9mZnNldCA9IERQ X0hEQ1BfMl8yX0xDX0lOSVRfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIExDX1NFTkRfTFBSSU1F OgorCQkqb2Zmc2V0ID0gRFBfSERDUF8yXzJfTENfU0VORF9MUFJJTUVfT0ZGU0VUOworCQlicmVh azsKKwljYXNlIFNLRV9TRU5EX0VLUzoKKwkJKm9mZnNldCA9IERQX0hEQ1BfMl8yX1NLRV9TRU5E X0VLU19PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUkVQX1NFTkRfUkVDVklEX0xJU1Q6CisJCSpv ZmZzZXQgPSBEUF9IRENQXzJfMl9SRVBfU0VORF9SRUNWSURfTElTVF9PRkZTRVQ7CisJCWJyZWFr OworCWNhc2UgUkVQX1NFTkRfQUNLOgorCQkqb2Zmc2V0ID0gRFBfSERDUF8yXzJfUkVQX1NFTkRf QUNLX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBSRVBfU1RSRUFNX01BTkFHRToKKwkJKm9mZnNl dCA9IERQX0hEQ1BfMl8yX1JFUF9TVFJFQU1fTUFOQUdFX09GRlNFVDsKKwkJYnJlYWs7CisJY2Fz ZSBSRVBfU1RSRUFNX1JFQURZOgorCQkqb2Zmc2V0ID0gRFBfSERDUF8yXzJfUkVQX1NUUkVBTV9S RUFEWV9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgRVJSQVRBX0RQX1NUUkVBTV9UWVBFOgorCQkq b2Zmc2V0ID0gRFBfSERDUF8yXzJfUkVHX1NUUkVBTV9UWVBFX09GRlNFVDsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbnJlY29nbml6ZWQgTXNnIElEXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgaW50ZWxf ZHBfaGRjcDJfcmVhZF9yeF9zdGF0dXMoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxf ZGlnX3BvcnQsCisJCQkJdW5pb24gaGRjcDJfZHBfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJ c3NpemVfdCByZXQ7CisKKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9kaWdfcG9ydC0+ ZHAuYXV4LAorCQkJICAgICAgIERQX0hEQ1BfMl8yX1JFR19SWFNUQVRVU19PRkZTRVQsIHJ4X3N0 YXR1cywKKwkJCSAgICAgICBzaXplb2YodW5pb24gaGRjcDJfZHBfcnhfc3RhdHVzKSk7CisJaWYg KHJldCAhPSBzaXplb2YodW5pb24gaGRjcDJfZHBfcnhfc3RhdHVzKSkgeworCQlEUk1fRVJST1Io IlJlYWQgYnN0YXR1cyBmcm9tIERQL0FVWCBmYWlsZWQgKCVsZClcbiIsIHJldCk7CisJCXJldHVy biByZXQgPj0gMCA/IC1FSU8gOiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUKK2ludCBpbnRlbF9kcF9oZGNwMl90aW1lb3V0X2Zvcl9tc2codWludDhfdCBtc2dfaWQs IGJvb2wgcGFpcmVkKQoreworCWludCB0aW1lb3V0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAobXNn X2lkKSB7CisJY2FzZSBBS0VfU0VORF9DRVJUOgorCQl0aW1lb3V0ID0gSERDUF8yXzJfQ0VSVF9U SU1FT1VUOworCQlicmVhazsKKwljYXNlIEFLRV9TRU5EX0hQUklNRToKKwkJaWYgKHBhaXJlZCkK KwkJCXRpbWVvdXQgPSBIRENQXzJfMl9IUFJJTUVfUEFJUkVEX1RJTUVPVVQ7CisJCWVsc2UKKwkJ CXRpbWVvdXQgPSBIRENQXzJfMl9IUFJJTUVfTk9fUEFJUkVEX1RJTUVPVVQ7CisJCWJyZWFrOwor CWNhc2UgQUtFX1NFTkRfUEFSSU5HX0lORk86CisJCXRpbWVvdXQgPSBIRENQXzJfMl9QQUlSSU5H X1RJTUVPVVQ7CisJCWJyZWFrOworCWNhc2UgTENfU0VORF9MUFJJTUU6CisJCXRpbWVvdXQgPSBI RENQXzJfMl9EUF9MUFJJTUVfVElNRU9VVDsKKwkJYnJlYWs7CisJY2FzZSBSRVBfU0VORF9SRUNW SURfTElTVDoKKwkJdGltZW91dCA9IEhEQ1BfMl8yX1JFQ1ZJRF9MSVNUX1RJTUVPVVQ7CisJCWJy ZWFrOworCWNhc2UgUkVQX1NUUkVBTV9SRUFEWToKKwkJdGltZW91dCA9IEhEQ1BfMl8yX1NUUkVB TV9SRUFEWV9USU1FT1VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVuc3Vw cG9ydGVkIG1zZ19pZDogJWRcbiIsIChpbnQpbXNnX2lkKTsKKwl9CisJcmV0dXJuIHRpbWVvdXQ7 Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBoZGNwMl9kZXRlY3RfbXNnX2F2YWlsYWJpbGl0eShz dHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCQkgIHVpbnQ4X3Qg bXNnX2lkLCBib29sICptc2dfcmVhZHkpCit7CisJdW5pb24gaGRjcDJfZHBfcnhfc3RhdHVzIHJ4 X3N0YXR1czsKKwlpbnQgcmV0OworCisJKm1zZ19yZWFkeSA9IGZhbHNlOworCXJldCA9IGludGVs X2RwX2hkY3AyX3JlYWRfcnhfc3RhdHVzKGludGVsX2RpZ19wb3J0LCAmcnhfc3RhdHVzKTsKKwlp ZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAobXNnX2lkKSB7CisJY2FzZSBB S0VfU0VORF9IUFJJTUU6CisJCWlmIChyeF9zdGF0dXMuZmllbGRzLmhwcmltZV9hdmFpbGFibGUp CisJCQkqbXNnX3JlYWR5ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBBS0VfU0VORF9QQVJJTkdf SU5GTzoKKwkJaWYgKHJ4X3N0YXR1cy5maWVsZHMucGFyaW5nX2F2YWlsYWJsZSkKKwkJCSptc2df cmVhZHkgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFUF9TRU5EX1JFQ1ZJRF9MSVNUOgorCQlp ZiAocnhfc3RhdHVzLmZpZWxkcy5yZWFkeSkKKwkJCSptc2dfcmVhZHkgPSB0cnVlOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlEUk1fREVCVUdfS01TKCJVbmlkZW50aWZpZWQgbXNnX2lkOiAlZFxu IiwgKGludCltc2dfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisK Kworc3RhdGljIGlubGluZSBzc2l6ZV90CitpbnRlbF9kcF9oZGNwMl93YWl0X2Zvcl9tc2coc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCisJCQkgICAgdWludDhfdCBt c2dfaWQpCit7CisJc3RydWN0IGludGVsX2RwICpkcCA9ICZpbnRlbF9kaWdfcG9ydC0+ZHA7CisJ c3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSBkcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5oZGNwOwor CWludCByZXQsIHRpbWVvdXQ7CisJYm9vbCBtc2dfcmVhZHkgPSBmYWxzZTsKKworCXRpbWVvdXQg PSBpbnRlbF9kcF9oZGNwMl90aW1lb3V0X2Zvcl9tc2cobXNnX2lkLCBoZGNwLT5pc19wYWlyZWQp OworCXN3aXRjaCAobXNnX2lkKSB7CisKKwkvKgorCSAqIFRoZXJlIGlzIG5vIHdheSB0byBkZXRl Y3QgdGhlIENFUlQsIExQUklNRSBhbmQgU1RSRUFNX1JFQURZCisJICogYXZhaWxhYmlsaXR5LiBT byBXYWl0IGZvciB0aW1lb3V0IGFuZCByZWFkIHRoZSBtc2cuCisJICovCisJY2FzZSBBS0VfU0VO RF9DRVJUOgorCWNhc2UgTENfU0VORF9MUFJJTUU6CisJY2FzZSBSRVBfU1RSRUFNX1JFQURZOgor CQltZGVsYXkodGltZW91dCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgQUtFX1NFTkRf SFBSSU1FOgorCWNhc2UgQUtFX1NFTkRfUEFSSU5HX0lORk86CisJY2FzZSBSRVBfU0VORF9SRUNW SURfTElTVDoKKwkJd2FpdF9mb3JfY3BfaXJxKCZoZGNwLT5jcF9pcnFfcmVjdmVkLCB0aW1lb3V0 KTsKKwkJcmV0ID0gaGRjcDJfZGV0ZWN0X21zZ19hdmFpbGFiaWxpdHkoaW50ZWxfZGlnX3BvcnQs IG1zZ19pZCwKKwkJCQkJCSAgICAmbXNnX3JlYWR5KTsKKwkJaWYgKCFtc2dfcmVhZHkpCisJCQly ZXQgPSAtRVRJTUVET1VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fREVCVUdfS01TKCJV bmlkZW50aWZpZWQgbXNnX2lkOiAlZFxuIiwgKGludCltc2dfaWQpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisJaWYgKHJldCkKKwkJRFJNX0VSUk9SKCJtc2dfaWQgJWQsIHJldCAlZCwgdGltZW91 dChtU2VjKTogJWRcbiIsIG1zZ19pZCwgcmV0LAorCQkJICB0aW1lb3V0KTsKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMKK2ludCBpbnRlbF9kcF9oZGNwMl93cml0ZV9tc2coc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCisJCQkgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90 IHNpemUpCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1aW50OF90ICpieXRlID0gYnVmOwor CXNzaXplX3QgcmV0LCBieXRlc190b193cml0ZSwgbGVuOworCisJaWYgKGludGVsX2RwY2Rfb2Zm c2V0X2Zvcl9oZGNwMl9tc2dpZCgqYnl0ZSwgJm9mZnNldCkgPCAwKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCS8qIE5vIG1zZ19pZCBpbiBEUCBIRENQMi4yIG1zZ3MgKi8KKwlieXRlc190b193cml0 ZSA9IHNpemUgLSAxOworCWJ5dGUrKzsKKworCXdoaWxlIChieXRlc190b193cml0ZSkgeworCQls ZW4gPSBieXRlc190b193cml0ZSA+IERSTV9IRENQX01BWF9BVVhfTEVOID8KKwkJCQlEUk1fSERD UF9NQVhfQVVYX0xFTiA6IGJ5dGVzX3RvX3dyaXRlOworCisJCXJldCA9IGRybV9kcF9kcGNkX3dy aXRlKCZpbnRlbF9kaWdfcG9ydC0+ZHAuYXV4LCBvZmZzZXQsCisJCQkJCSh2b2lkICopYnl0ZSwg bGVuKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJ5dGVzX3RvX3dyaXRl IC09IHJldDsKKwkJYnl0ZSArPSByZXQ7CisJCW9mZnNldCArPSByZXQ7CisJfQorCXJldHVybiBz aXplOworfQorCitzdGF0aWMKK2ludCBpbnRlbF9kcF9oZGNwMl9yZWFkX21zZyhzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCSAgICB1aW50OF90IG1zZ19pZCwg dm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBkZXZfY250 OworCXVpbnQ4X3QgKmJ5dGUgPSBidWY7CisJdW5pb24gaGRjcDJfcnhfaW5mbyByeF9pbmZvOwor CXNzaXplX3QgcmV0LCBieXRlc190b19yZWN2LCBsZW47CisKKwlpZiAoaW50ZWxfZHBjZF9vZmZz ZXRfZm9yX2hkY3AyX21zZ2lkKG1zZ19pZCwgJm9mZnNldCkgPCAwKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJldCA9IGludGVsX2RwX2hkY3AyX3dhaXRfZm9yX21zZyhpbnRlbF9kaWdfcG9ydCwg bXNnX2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZpbmRpbmcgdGhl IFJlY2VpdmVySUQgTGlzdCBzaXplICovCisJaWYgKG1zZ19pZCA9PSBSRVBfU0VORF9SRUNWSURf TElTVCkgeworCQlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9kaWdfcG9ydC0+ZHAuYXV4 LAorCQkJCURQX0hEQ1BfMl8yX1JFR19SWElORk9fT0ZGU0VULCAodm9pZCAqKSZyeF9pbmZvLAor CQkJCXNpemVvZih1bmlvbiBoZGNwMl9yeF9pbmZvKSk7CisJCWlmIChyZXQgIT0gc2l6ZW9mKHVu aW9uIGhkY3AyX3J4X2luZm8pKQorCQkJcmV0dXJuIHJldCA+PSAwID8gLUVJTyA6IHJldDsKKwor CQlkZXZfY250ID0gKHJ4X2luZm8uZmllbGRzLmRldmljZV9jb3VudF9oaSA8PCA0IHwKKwkJCQly eF9pbmZvLmZpZWxkcy5kZXZpY2VfY291bnRfbG8pOworCisJCWlmIChkZXZfY250ID4gSERDUF9N QVhfREVWSUNFX0NPVU5UKQorCQkJZGV2X2NudCA9IEhEQ1BfTUFYX0RFVklDRV9DT1VOVDsKKwor CQlzaXplID0gc2l6ZW9mKHN0cnVjdCBoZGNwMl9yZXBfc2VuZF9yZWNlaXZlcmlkX2xpc3QpIC0K KwkJCQlIRENQX1JFQ0VJVkVSX0lEU19NQVhfTEVOICsKKwkJCQkoZGV2X2NudCAqIEhEQ1BfUkVD RUlWRVJfSURfTEVOKTsKKwl9CisKKwlieXRlc190b19yZWN2ID0gc2l6ZSAtIDE7CisKKwkvKiBU byBza2lwIHRoZSBtc2dfaWQsIGFzIG1zZ3MgaW4gRFAgYWRhcHRhdGlvbiBoYXMgbm8gbXNnX2lk ICovCisJYnl0ZSsrOworCisJd2hpbGUgKGJ5dGVzX3RvX3JlY3YpIHsKKwkJbGVuID0gYnl0ZXNf dG9fcmVjdiA+IERSTV9IRENQX01BWF9BVVhfTEVOID8KKwkJCQlEUk1fSERDUF9NQVhfQVVYX0xF TiA6IGJ5dGVzX3RvX3JlY3Y7CisKKwkJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZCgmaW50ZWxfZGln X3BvcnQtPmRwLmF1eCwgb2Zmc2V0LAorCQkJCSAgICAgICAodm9pZCAqKWJ5dGUsIGxlbik7CisJ CWlmIChyZXQgPCAwKSB7CisJCQlEUk1fREVCVUdfS01TKCJtc2dfaWQgJWQsIHJldCAlZFxuIiwg bXNnX2lkLCAoaW50KXJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJYnl0ZXNfdG9fcmVj diAtPSByZXQ7CisJCWJ5dGUgKz0gcmV0OworCQlvZmZzZXQgKz0gcmV0OworCX0KKwlieXRlID0g YnVmOworCSpieXRlID0gbXNnX2lkOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYworaW50 IGludGVsX2RwX2hkY3AyX2NvbmZpZ19zdHJlYW1fdHlwZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9w b3J0ICppbnRlbF9kaWdfcG9ydCwKKwkJCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBzaXplKQor eworCXJldHVybiBpbnRlbF9kcF9oZGNwMl93cml0ZV9tc2coaW50ZWxfZGlnX3BvcnQsIGJ1Ziwg c2l6ZSk7Cit9CisKK3N0YXRpYworaW50IGludGVsX2RwX2hkY3AyX2NoZWNrX2xpbmsoc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpCit7CisJdW5pb24gaGRjcDJfZHBf cnhfc3RhdHVzIHJ4X3N0YXR1czsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfZHBfaGRjcDJf cmVhZF9yeF9zdGF0dXMoaW50ZWxfZGlnX3BvcnQsICZyeF9zdGF0dXMpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlpZiAocnhfc3RhdHVzLmZpZWxkcy5yZWF1dGhfcmVxKQorCQlyZXQg PSBEUk1fSERDUF9SRUFVVEhfUkVRVUVTVDsKKwllbHNlIGlmIChyeF9zdGF0dXMuZmllbGRzLkxp bmtfaW50ZWdyaXR5X2ZhaWx1cmUpCisJCXJldCA9IERSTV9IRENQX0xJTktfSU5URUdSSVRZX0ZB SUxVUkU7CisJZWxzZSBpZiAocnhfc3RhdHVzLmZpZWxkcy5yZWFkeSkKKwkJcmV0ID0gRFJNX0hE Q1BfVE9QT0xPR1lfQ0hBTkdFOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljCitpbnQgaW50 ZWxfZHBfaGRjcDJfY2FwYWJsZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdf cG9ydCwKKwkJCSAgIGJvb2wgKmNhcGFibGUpCit7CisJdW5pb24gaGRjcDJfcnhfY2FwcyByeF9j YXBzOworCWludCByZXQ7CisKKwkqY2FwYWJsZSA9IGZhbHNlOworCXJldCA9IGRybV9kcF9kcGNk X3JlYWQoJmludGVsX2RpZ19wb3J0LT5kcC5hdXgsCisJCQkgICAgICAgRFBfSERDUF8yXzJfUkVH X1JYX0NBUFNfT0ZGU0VULAorCQkJICAgICAgICZyeF9jYXBzLCBzaXplb2YocnhfY2FwcykpOwor CWlmIChyZXQgIT0gc2l6ZW9mKHJ4X2NhcHMpKQorCQlyZXR1cm4gcmV0ID49IDAgPyAtRUlPIDog cmV0OworCisJaWYgKHJ4X2NhcHMuZmllbGRzLnZlcnNpb24gPT0gSERDUF9SWENBUFNfVkVSU0lP Tl9IRENQXzJfMl9WQUwpCisJCSpjYXBhYmxlID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMKK2VudW0gaGRjcF9wcm90b2NvbCBpbnRlbF9kcF9oZGNwMl9wcm90b2NvbCh2b2lkKQor eworCXJldHVybiBIRENQX1BST1RPQ09MX0RQOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX2hkY3AyX3NoaW0gaW50ZWxfZHBfaGRjcDJfc2hpbSA9IHsKKwkud3JpdGVfbXNnCQk9IGlu dGVsX2RwX2hkY3AyX3dyaXRlX21zZywKKwkucmVhZF9tc2cJCT0gaW50ZWxfZHBfaGRjcDJfcmVh ZF9tc2csCisJLmNvbmZpZ19zdHJlYW1fdHlwZQk9IGludGVsX2RwX2hkY3AyX2NvbmZpZ19zdHJl YW1fdHlwZSwKKwkuY2hlY2tfbGluawkJPSBpbnRlbF9kcF9oZGNwMl9jaGVja19saW5rLAorCS5o ZGNwX2NhcGFibGUJCT0gaW50ZWxfZHBfaGRjcDJfY2FwYWJsZSwKKwkuaGRjcF9wcm90b2NvbAkJ PSBpbnRlbF9kcF9oZGNwMl9wcm90b2NvbCwKK307CisKIHN0YXRpYyB2b2lkIGludGVsX2VkcF9w YW5lbF92ZGRfc2FuaXRpemUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGludGVsX2RwX3RvX2RldihpbnRl bF9kcCkpOwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=