From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yannick Fertre Subject: [PATCH v6 4/9] drm/stm: Add STM32 LTDC driver Date: Fri, 14 Apr 2017 10:10:50 +0200 Message-ID: <1492157455-2283-5-git-send-email-yannick.fertre@st.com> References: <1492157455-2283-1-git-send-email-yannick.fertre@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1492157455-2283-1-git-send-email-yannick.fertre@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandre TORGUE , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre Cc: devicetree@vger.kernel.org, kernel@stlinux.com, Philippe Cornu , Fabien Dessenne , dri-devel@lists.freedesktop.org, Mickael Reulier , Vincent Abriou , Gabriel FERNANDEZ , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBjb250cm9sbGVyIHByb3ZpZGVzIG91dHB1dCBzaWduYWxzIHRvIGludGVyZmFjZSBkaXJl Y3RseSBhIHZhcmlldHkKb2YgTENEIGFuZCBURlQgcGFuZWxzLiBUaGVzZSBvdXRwdXQgc2lnbmFs cyBhcmU6IFJHQiBzaWduYWxzCih1cCB0byAyNGJwcCksIHZlcnRpY2FsICYgaG9yaXpvbnRhbCBz eW5jaHJvbmlzYXRpb25zLCBkYXRhIGVuYWJsZSBhbmQKdGhlIHBpeGVsIGNsb2NrLgoKUmV2aWV3 ZWQtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ClNpZ25lZC1vZmYtYnk6IFlhbm5p Y2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tj b25maWcgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICB8ICAgIDEg KwogZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnICB8ICAgMTYgKwogZHJpdmVycy9ncHUvZHJt L3N0bS9NYWtlZmlsZSB8ICAgIDcgKwogZHJpdmVycy9ncHUvZHJtL3N0bS9kcnYuYyAgICB8ICAy MjEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jICAgfCAxMTYxICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3N0bS9s dGRjLmggICB8ICAgNDAgKysKIDcgZmlsZXMgY2hhbmdlZCwgMTQ0OCBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9zdG0vZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vc3RtL2x0ZGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdG0v bHRkYy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwppbmRleCA3OGQ3ZmMwLi5mNTc1NDBkIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjQ2LDYg KzI0Niw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vdGVncmEvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dw dS9kcm0vc3RtL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmlu ZGV4IDU5ZjBmOWIuLmFhNjJkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTgyLDYgKzgyLDcgQEAgb2JqLSQo Q09ORklHX0RSTV9CT0NIUykgKz0gYm9jaHMvCiBvYmotJChDT05GSUdfRFJNX1ZJUlRJT19HUFUp ICs9IHZpcnRpby8KIG9iai0kKENPTkZJR19EUk1fTVNNKSArPSBtc20vCiBvYmotJChDT05GSUdf RFJNX1RFR1JBKSArPSB0ZWdyYS8KK29iai0kKENPTkZJR19EUk1fU1RNKSArPSBzdG0vCiBvYmot JChDT05GSUdfRFJNX1NUSSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8K IG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3N0bS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDgxN2YKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL0tjb25maWcKQEAgLTAsMCArMSwxNiBAQAorY29uZmln IERSTV9TVE0KKwl0cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIFNUTWljcm9lbGVjdHJvbmljcyBT b0MgU2VyaWVzIgorCWRlcGVuZHMgb24gRFJNICYmIChBUkNIX1NUTTMyIHx8IEFSQ0hfTVVMVElQ TEFURk9STSkKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVM UEVSCisJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgorCXNlbGVjdCBEUk1fUEFORUwKKwlzZWxl Y3QgVklERU9NT0RFX0hFTFBFUlMKKwlzZWxlY3QgRkJfUFJPVklERV9HRVRfRkJfVU5NQVBQRURf QVJFQQorCWRlZmF1bHQgeQorCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBvbi1j aGlwIGRpc3BsYXkgY29udHJvbGxlciBvbgorCSAgU1RNaWNyb2VsZWN0cm9uaWNzIFNUTTMyIE1D VXMuCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJl OiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzdG0tZHJtLgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExNGQ0NQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitjY2Zs YWdzLXkgOj0gLUlpbmNsdWRlL2RybQorCitzdG0tZHJtLXkgOj0gXAorCWRydi5vIFwKKwlsdGRj Lm8KKworb2JqLSQoQ09ORklHX0RSTV9TVE0pICs9IHN0bS1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3N0bS9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vZHJ2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhYjQ4ZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9zdG0vZHJ2LmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBTQSAyMDE3CisgKgorICogQXV0aG9yczogUGhp bGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4KKyAqICAgICAgICAgIFlhbm5pY2sg RmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+CisgKiAgICAgICAgICBGYWJpZW4gRGVzc2Vu bmUgPGZhYmllbi5kZXNzZW5uZUBzdC5jb20+CisgKiAgICAgICAgICBNaWNrYWVsIFJldWxpZXIg PG1pY2thZWwucmV1bGllckBzdC5jb20+CisgKgorICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaW5jbHVkZSA8bGlu dXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJf Y21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKworI2lu Y2x1ZGUgImx0ZGMuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRQkJInN0bSIKKyNkZWZpbmUgRFJJ VkVSX0RFU0MJCSJTVE1pY3JvZWxlY3Ryb25pY3MgU29DIERSTSIKKyNkZWZpbmUgRFJJVkVSX0RB VEUJCSIyMDE3MDMzMCIKKyNkZWZpbmUgRFJJVkVSX01BSk9SCQkxCisjZGVmaW5lIERSSVZFUl9N SU5PUgkJMAorI2RlZmluZSBEUklWRVJfUEFUQ0hfTEVWRUwJMAorCisjZGVmaW5lIFNUTV9NQVhf RkJfV0lEVEgJMjA0OAorI2RlZmluZSBTVE1fTUFYX0ZCX0hFSUdIVAkyMDQ4IC8qIHNhbWUgYXMg d2lkdGggdG8gaGFuZGxlIG9yaWVudGF0aW9uICovCisKK3N0YXRpYyB2b2lkIGRydl9vdXRwdXRf cG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQoreworCXN0cnVjdCBsdGRjX2Rl dmljZSAqbGRldiA9IGRkZXYtPmRldl9wcml2YXRlOworCisJZHJtX2ZiZGV2X2NtYV9ob3RwbHVn X2V2ZW50KGxkZXYtPmZiZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9j b25maWdfZnVuY3MgZHJ2X21vZGVfY29uZmlnX2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBkcm1f ZmJfY21hX2NyZWF0ZSwKKwkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IGRydl9vdXRwdXRfcG9sbF9j aGFuZ2VkLAorCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRv bWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyB2b2lk IGRydl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGx0ZGNf ZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUcoIiVzXG4iLCBf X2Z1bmNfXyk7CisKKwlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZShsZGV2LT5mYmRldik7Cit9 CisKK0RFRklORV9EUk1fR0VNX0NNQV9GT1BTKGRydl9kcml2ZXJfZm9wcyk7CisKK3N0YXRpYyBz dHJ1Y3QgZHJtX2RyaXZlciBkcnZfZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklW RVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FU T01JQywKKwkubGFzdGNsb3NlID0gZHJ2X2xhc3RjbG9zZSwKKwkubmFtZSA9IERSSVZFUl9OQU1F LAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3Ig PSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorCS5wYXRjaGxldmVsID0g RFJJVkVSX1BBVENIX0xFVkVMLAorCS5mb3BzID0gJmRydl9kcml2ZXJfZm9wcywKKwkuZHVtYl9j cmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gZHJt X2dlbV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJf ZGVzdHJveSwKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9f ZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAor CS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKKwku Z2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCisJLmdlbV9wcmltZV9leHBvcnQgPSBk cm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVf aW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0 X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJp bWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1l X3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCisJ LmdlbV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKKwkuZW5hYmxlX3ZibGFu ayA9IGx0ZGNfY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGx0ZGNfY3J0 Y19kaXNhYmxlX3ZibGFuaywKK307CisKK3N0YXRpYyBpbnQgZHJ2X2xvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRm b3JtX2RldmljZShkZGV2LT5kZXYpOworCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKKwlz dHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXY7CisJaW50IHJldDsKKworCURSTV9ERUJVRygiJXNcbiIs IF9fZnVuY19fKTsKKworCWxkZXYgPSBkZXZtX2t6YWxsb2MoZGRldi0+ZGV2LCBzaXplb2YoKmxk ZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGRl di0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWxkZXY7CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChk ZGV2KTsKKworCS8qCisJICogc2V0IG1heCB3aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFs dWUuCisJICogdGhpcyB2YWx1ZSB3b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZyYW1lYnVmZmVyIHNp emUgbGltaXRhdGlvbgorCSAqIGF0IGRybV9tb2RlX2FkZGZiKCkuCisJICovCisJZGRldi0+bW9k ZV9jb25maWcubWluX3dpZHRoID0gMDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0g MDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBTVE1fTUFYX0ZCX1dJRFRIOworCWRk ZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBTVE1fTUFYX0ZCX0hFSUdIVDsKKwlkZGV2LT5t b2RlX2NvbmZpZy5mdW5jcyA9ICZkcnZfbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBsdGRj X2xvYWQoZGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlkcm1fbW9kZV9jb25maWdf cmVzZXQoZGRldik7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRkZXYpOworCisJaWYgKGRk ZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpIHsKKwkJbGRldiA9IGRkZXYtPmRldl9wcml2 YXRlOworCQlmYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdChkZGV2LCAxNiwKKwkJCQkJICAgZGRl di0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7CisJCWlmIChJU19FUlIoZmJkZXYpKSB7CisJ CQlEUk1fREVCVUcoIldhcm5pbmc6IGZhaWxzIHRvIGNyZWF0ZSBmYmRldlxuIik7CisJCQlmYmRl diA9IE5VTEw7CisJCX0KKwkJbGRldi0+ZmJkZXYgPSBmYmRldjsKKwl9CisKKwlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShwZGV2LCBkZGV2KTsKKworCXJldHVybiAwOworZXJyOgorCWRybV9tb2RlX2Nv bmZpZ19jbGVhbnVwKGRkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRydl91 bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICps ZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUcoIiVzXG4iLCBfX2Z1bmNfXyk7 CisKKwlpZiAobGRldi0+ZmJkZXYpIHsKKwkJZHJtX2ZiZGV2X2NtYV9maW5pKGxkZXYtPmZiZGV2 KTsKKwkJbGRldi0+ZmJkZXYgPSBOVUxMOworCX0KKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Zpbmko ZGRldik7CisJbHRkY191bmxvYWQoZGRldik7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGRl dik7Cit9CisKK3N0YXRpYyBpbnQgc3RtX2RybV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CisJaW50IHJldDsKKworCURSTV9ERUJVRygiJXNcbiIs IF9fZnVuY19fKTsKKworCWRtYV9zZXRfY29oZXJlbnRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygz MikpOworCisJZGRldiA9IGRybV9kZXZfYWxsb2MoJmRydl9kcml2ZXIsIGRldik7CisJaWYgKElT X0VSUihkZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7CisKKwlyZXQgPSBkcnZfbG9hZChk ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bnJlZjsKKworCXJldCA9IGRybV9kZXZfcmVn aXN0ZXIoZGRldiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5yZWY7CisKKwlyZXR1cm4g MDsKKworZXJyX3VucmVmOgorCWRybV9kZXZfdW5yZWYoZGRldik7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IHN0bV9kcm1fcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fZnVuY19fKTsKKworCWRybV9k ZXZfdW5yZWdpc3RlcihkZGV2KTsKKwlkcnZfdW5sb2FkKGRkZXYpOworCWRybV9kZXZfdW5yZWYo ZGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgZHJ2X2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic3Qsc3RtMzItbHRkYyJ9LAor CXsgLyogZW5kIG5vZGUgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkcnZfZHRf aWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RtX2RybV9wbGF0Zm9ybV9k cml2ZXIgPSB7CisJLnByb2JlID0gc3RtX2RybV9wbGF0Zm9ybV9wcm9iZSwKKwkucmVtb3ZlID0g c3RtX2RybV9wbGF0Zm9ybV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUklWRVJf TkFNRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZHJ2X2R0X2lkcywKKwl9LAorfTsKKworbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihzdG1fZHJtX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9BVVRI T1IoIlBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Iik7CitNT0RVTEVfQVVU SE9SKCJZYW5uaWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29tPiIpOworTU9EVUxFX0FV VEhPUigiRmFiaWVuIERlc3Nlbm5lIDxmYWJpZW4uZGVzc2VubmVAc3QuY29tPiIpOworTU9EVUxF X0FVVEhPUigiTWlja2FlbCBSZXVsaWVyIDxtaWNrYWVsLnJldWxpZXJAc3QuY29tPiIpOworTU9E VUxFX0RFU0NSSVBUSU9OKCJTVE1pY3JvZWxlY3Ryb25pY3MgU1QgRFJNIExUREMgZHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v c3RtL2x0ZGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmEzNzMxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vc3RtL2x0ZGMuYwpAQCAtMCwwICsxLDExNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IFNUTWljcm9lbGVjdHJvbmljcyBTQSAyMDE3CisgKgorICogQXV0aG9yczogUGhpbGlwcGUgQ29y bnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4KKyAqICAgICAgICAgIFlhbm5pY2sgRmVydHJlIDx5 YW5uaWNrLmZlcnRyZUBzdC5jb20+CisgKiAgICAgICAgICBGYWJpZW4gRGVzc2VubmUgPGZhYmll bi5kZXNzZW5uZUBzdC5jb20+CisgKiAgICAgICAgICBNaWNrYWVsIFJldWxpZXIgPG1pY2thZWwu cmV1bGllckBzdC5jb20+CisgKgorICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVz cy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5o PgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRlIDx2aWRlby92 aWRlb21vZGUuaD4KKworI2luY2x1ZGUgImx0ZGMuaCIKKworI2RlZmluZSBOQl9DUlRDIDEKKyNk ZWZpbmUgQ1JUQ19NQVNLIEdFTk1BU0soTkJfQ1JUQyAtIDEsIDApCisKKyNkZWZpbmUgTUFYX0lS USA0CisKKyNkZWZpbmUgSFdWRVJfMTAyMDAgMHgwMTAyMDAKKyNkZWZpbmUgSFdWRVJfMTAzMDAg MHgwMTAzMDAKKyNkZWZpbmUgSFdWRVJfMjAxMDEgMHgwMjAxMDEKKworLyoKKyAqIFRoZSBhZGRy ZXNzIG9mIHNvbWUgcmVnaXN0ZXJzIGRlcGVuZHMgb24gdGhlIEhXIHZlcnNpb246IHN1Y2ggcmVn aXN0ZXJzIGhhdmUKKyAqIGFuIGV4dHJhIG9mZnNldCBzcGVjaWZpZWQgd2l0aCByZWdfb2ZzLgor ICovCisjZGVmaW5lIFJFR19PRlNfTk9ORQkwCisjZGVmaW5lIFJFR19PRlNfNAk0IC8qIEluc2Vy dGlvbiBvZiAiTGF5ZXIgQ29uZmlndXJhdGlvbiAyIiByZWcgKi8KKyNkZWZpbmUgUkVHX09GUwkJ KGxkZXYtPmNhcHMucmVnX29mcykKKyNkZWZpbmUgTEFZX09GUwkJMHg4MAkvKiBSZWdpc3RlciBP ZmZzZXQgYmV0d2VlbiAyIGxheWVycyAqLworCisvKiBHbG9iYWwgcmVnaXN0ZXIgb2Zmc2V0cyAq LworI2RlZmluZSBMVERDX0lEUgkweDAwMDAgLyogSURlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUg TFREQ19MQ1IJMHgwMDA0IC8qIExheWVyIENvdW50ICovCisjZGVmaW5lIExURENfU1NDUgkweDAw MDggLyogU3luY2hyb25pemF0aW9uIFNpemUgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERD X0JQQ1IJMHgwMDBDIC8qIEJhY2sgUG9yY2ggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERD X0FXQ1IJMHgwMDEwIC8qIEFjdGl2ZSBXaWR0aCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExU RENfVFdDUgkweDAwMTQgLyogVG90YWwgV2lkdGggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBM VERDX0dDUgkweDAwMTggLyogR2xvYmFsIENvbnRyb2wgKi8KKyNkZWZpbmUgTFREQ19HQzFSCTB4 MDAxQyAvKiBHbG9iYWwgQ29uZmlndXJhdGlvbiAxICovCisjZGVmaW5lIExURENfR0MyUgkweDAw MjAgLyogR2xvYmFsIENvbmZpZ3VyYXRpb24gMiAqLworI2RlZmluZSBMVERDX1NSQ1IJMHgwMDI0 IC8qIFNoYWRvdyBSZWxvYWQgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERDX0dBQ1IJMHgw MDI4IC8qIEdBbW1hIENvcnJlY3Rpb24gKi8KKyNkZWZpbmUgTFREQ19CQ0NSCTB4MDAyQyAvKiBC YWNrZ3JvdW5kIENvbG9yIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTFREQ19JRVIJMHgwMDM0 IC8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTFREQ19JU1IJMHgwMDM4IC8qIEludGVy cnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgTFREQ19JQ1IJMHgwMDNDIC8qIEludGVycnVwdCBDbGVh ciAqLworI2RlZmluZSBMVERDX0xJUENSCTB4MDA0MCAvKiBMaW5lIEludGVycnVwdCBQb3NpdGlv biBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfQ1BTUgkweDAwNDQgLyogQ3VycmVudCBQ b3NpdGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgTFREQ19DRFNSCTB4MDA0OCAvKiBDdXJyZW50IERp c3BsYXkgU3RhdHVzICovCisKKy8qIExheWVyIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUg TFREQ19MMUxDMVIJKDB4MDA4MCkJICAgLyogTDEgTGF5ZXIgQ29uZmlndXJhdGlvbiAxICovCisj ZGVmaW5lIExURENfTDFMQzJSCSgweDAwODQpCSAgIC8qIEwxIExheWVyIENvbmZpZ3VyYXRpb24g MiAqLworI2RlZmluZSBMVERDX0wxQ1IJKDB4MDA4NCArIFJFR19PRlMpIC8qIEwxIENvbnRyb2wg Ki8KKyNkZWZpbmUgTFREQ19MMVdIUENSCSgweDAwODggKyBSRUdfT0ZTKSAvKiBMMSBXaW5kb3cg SG9yIFBvc2l0aW9uIENvbmZpZyAqLworI2RlZmluZSBMVERDX0wxV1ZQQ1IJKDB4MDA4QyArIFJF R19PRlMpIC8qIEwxIFdpbmRvdyBWZXJ0IFBvc2l0aW9uIENvbmZpZyAqLworI2RlZmluZSBMVERD X0wxQ0tDUgkoMHgwMDkwICsgUkVHX09GUykgLyogTDEgQ29sb3IgS2V5aW5nIENvbmZpZ3VyYXRp b24gKi8KKyNkZWZpbmUgTFREQ19MMVBGQ1IJKDB4MDA5NCArIFJFR19PRlMpIC8qIEwxIFBpeGVs IEZvcm1hdCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfTDFDQUNSCSgweDAwOTggKyBS RUdfT0ZTKSAvKiBMMSBDb25zdGFudCBBbHBoYSBDb25maWcgKi8KKyNkZWZpbmUgTFREQ19MMURD Q1IJKDB4MDA5QyArIFJFR19PRlMpIC8qIEwxIERlZmF1bHQgQ29sb3IgQ29uZmlndXJhdGlvbiAq LworI2RlZmluZSBMVERDX0wxQkZDUgkoMHgwMEEwICsgUkVHX09GUykgLyogTDEgQmxlbmQgRmFj dG9ycyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfTDFGQkJDUgkoMHgwMEE0ICsgUkVH X09GUykgLyogTDEgRnJhbWVCdWZmZXIgQnVzIENvbnRyb2wgKi8KKyNkZWZpbmUgTFREQ19MMUFG QkNSCSgweDAwQTggKyBSRUdfT0ZTKSAvKiBMMSBBdXhGQiBDb250cm9sICovCisjZGVmaW5lIExU RENfTDFDRkJBUgkoMHgwMEFDICsgUkVHX09GUykgLyogTDEgQ29sb3IgRnJhbWVCdWZmZXIgQWRk cmVzcyAqLworI2RlZmluZSBMVERDX0wxQ0ZCTFIJKDB4MDBCMCArIFJFR19PRlMpIC8qIEwxIENv bG9yIEZyYW1lQnVmZmVyIExlbmd0aCAqLworI2RlZmluZSBMVERDX0wxQ0ZCTE5SCSgweDAwQjQg KyBSRUdfT0ZTKSAvKiBMMSBDb2xvciBGcmFtZUJ1ZmZlciBMaW5lIE5iICovCisjZGVmaW5lIExU RENfTDFBRkJBUgkoMHgwMEI4ICsgUkVHX09GUykgLyogTDEgQXV4RkIgQWRkcmVzcyAqLworI2Rl ZmluZSBMVERDX0wxQUZCTFIJKDB4MDBCQyArIFJFR19PRlMpIC8qIEwxIEF1eEZCIExlbmd0aCAq LworI2RlZmluZSBMVERDX0wxQUZCTE5SCSgweDAwQzAgKyBSRUdfT0ZTKSAvKiBMMSBBdXhGQiBM aW5lIE51bWJlciAqLworI2RlZmluZSBMVERDX0wxQ0xVVFdSCSgweDAwQzQgKyBSRUdfT0ZTKSAv KiBMMSBDTFVUIFdyaXRlICovCisjZGVmaW5lIExURENfTDFZUzFSCSgweDAwRTAgKyBSRUdfT0ZT KSAvKiBMMSBZQ2JDciBTY2FsZSAxICovCisjZGVmaW5lIExURENfTDFZUzJSCSgweDAwRTQgKyBS RUdfT0ZTKSAvKiBMMSBZQ2JDciBTY2FsZSAyICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyAqLwor I2RlZmluZSBTU0NSX1ZTSAlHRU5NQVNLKDEwLCAwKQkvKiBWZXJ0aWNhbCBTeW5jaHJvbml6YXRp b24gSGVpZ2h0ICovCisjZGVmaW5lIFNTQ1JfSFNXCUdFTk1BU0soMjcsIDE2KQkvKiBIb3Jpem9u dGFsIFN5bmNocm9uaXphdGlvbiBXaWR0aCAqLworCisjZGVmaW5lIEJQQ1JfQVZCUAlHRU5NQVNL KDEwLCAwKQkvKiBBY2N1bXVsYXRlZCBWZXJ0aWNhbCBCYWNrIFBvcmNoICovCisjZGVmaW5lIEJQ Q1JfQUhCUAlHRU5NQVNLKDI3LCAxNikJLyogQWNjdW11bGF0ZWQgSG9yaXpvbnRhbCBCYWNrIFBv cmNoICovCisKKyNkZWZpbmUgQVdDUl9BQUgJR0VOTUFTSygxMCwgMCkJLyogQWNjdW11bGF0ZWQg QWN0aXZlIEhlaWdodCAqLworI2RlZmluZSBBV0NSX0FBVwlHRU5NQVNLKDI3LCAxNikJLyogQWNj dW11bGF0ZWQgQWN0aXZlIFdpZHRoICovCisKKyNkZWZpbmUgVFdDUl9UT1RBTEgJR0VOTUFTSygx MCwgMCkJLyogVE9UQUwgSGVpZ2h0ICovCisjZGVmaW5lIFRXQ1JfVE9UQUxXCUdFTk1BU0soMjcs IDE2KQkvKiBUT1RBTCBXaWR0aCAqLworCisjZGVmaW5lIEdDUl9MVERDRU4JQklUKDApCQkvKiBM VERDIEVOYWJsZSAqLworI2RlZmluZSBHQ1JfREVOCQlCSVQoMTYpCQkvKiBEaXRoZXIgRU5hYmxl ICovCisjZGVmaW5lIEdDUl9QQ1BPTAlCSVQoMjgpCQkvKiBQaXhlbCBDbG9jayBQT0xhcml0eSAq LworI2RlZmluZSBHQ1JfREVQT0wJQklUKDI5KQkJLyogRGF0YSBFbmFibGUgUE9MYXJpdHkgKi8K KyNkZWZpbmUgR0NSX1ZTUE9MCUJJVCgzMCkJCS8qIFZlcnRpY2FsIFN5bmNocm8gUE9MYXJpdHkg Ki8KKyNkZWZpbmUgR0NSX0hTUE9MCUJJVCgzMSkJCS8qIEhvcml6b250YWwgU3luY2hybyBQT0xh cml0eSAqLworCisjZGVmaW5lIEdDMVJfV0JDSAlHRU5NQVNLKDMsIDApCS8qIFdpZHRoIG9mIEJs dWUgQ0hhbm5lbCBvdXRwdXQgKi8KKyNkZWZpbmUgR0MxUl9XR0NICUdFTk1BU0soNywgNCkJLyog V2lkdGggb2YgR3JlZW4gQ2hhbm5lbCBvdXRwdXQgKi8KKyNkZWZpbmUgR0MxUl9XUkNICUdFTk1B U0soMTEsIDgpCS8qIFdpZHRoIG9mIFJlZCBDaGFubmVsIG91dHB1dCAqLworI2RlZmluZSBHQzFS X1BCRU4JQklUKDEyKQkJLyogUHJlY2lzZSBCbGVuZGluZyBFTmFibGUgKi8KKyNkZWZpbmUgR0Mx Ul9EVAkJR0VOTUFTSygxNSwgMTQpCS8qIERpdGhlcmluZyBUZWNobmlxdWUgKi8KKyNkZWZpbmUg R0MxUl9HQ1QJR0VOTUFTSygxOSwgMTcpCS8qIEdhbW1hIENvcnJlY3Rpb24gVGVjaG5pcXVlICov CisjZGVmaW5lIEdDMVJfU0hSRU4JQklUKDIxKQkJLyogU0hhZG93IFJlZ2lzdGVycyBFTmFibGVk ICovCisjZGVmaW5lIEdDMVJfQkNQCUJJVCgyMikJCS8qIEJhY2tncm91bmQgQ29sb3VyIFByb2dy YW1tYWJsZSAqLworI2RlZmluZSBHQzFSX0JCRU4JQklUKDIzKQkJLyogQmFja2dyb3VuZCBCbGVu ZGluZyBFTmFibGVkICovCisjZGVmaW5lIEdDMVJfTE5JUAlCSVQoMjQpCQkvKiBMaW5lIE51bWJl ciBJUlEgUG9zaXRpb24gKi8KKyNkZWZpbmUgR0MxUl9UUAkJQklUKDI1KQkJLyogVGltaW5nIFBy b2dyYW1tYWJsZSAqLworI2RlZmluZSBHQzFSX0lQUAlCSVQoMjYpCQkvKiBJUlEgUG9sYXJpdHkg UHJvZ3JhbW1hYmxlICovCisjZGVmaW5lIEdDMVJfU1BQCUJJVCgyNykJCS8qIFN5bmMgUG9sYXJp dHkgUHJvZ3JhbW1hYmxlICovCisjZGVmaW5lIEdDMVJfRFdQCUJJVCgyOCkJCS8qIERpdGhlciBX aWR0aCBQcm9ncmFtbWFibGUgKi8KKyNkZWZpbmUgR0MxUl9TVFJFTglCSVQoMjkpCQkvKiBTVGF0 dXMgUmVnaXN0ZXJzIEVOYWJsZWQgKi8KKyNkZWZpbmUgR0MxUl9CTUVOCUJJVCgzMSkJCS8qIEJs aW5kIE1vZGUgRU5hYmxlZCAqLworCisjZGVmaW5lIEdDMlJfRURDQQlCSVQoMCkJCS8qIEV4dGVy bmFsIERpc3BsYXkgQ29udHJvbCBBYmlsaXR5ICAqLworI2RlZmluZSBHQzJSX1NUU0FFTglCSVQo MSkJCS8qIFNsYXZlIFRpbWluZyBTeW5jIEFiaWxpdHkgRU5hYmxlZCAqLworI2RlZmluZSBHQzJS X0RWQUVOCUJJVCgyKQkJLyogRHVhbC1WaWV3IEFiaWxpdHkgRU5hYmxlZCAqLworI2RlZmluZSBH QzJSX0RQQUVOCUJJVCgzKQkJLyogRHVhbC1Qb3J0IEFiaWxpdHkgRU5hYmxlZCAqLworI2RlZmlu ZSBHQzJSX0JXCQlHRU5NQVNLKDYsIDQpCS8qIEJ1cyBXaWR0aCAobG9nMiBvZiBuYiBvZiBieXRl cykgKi8KKyNkZWZpbmUgR0MyUl9FRENFTglCSVQoNykJCS8qIEV4dGVybmFsIERpc3BsYXkgQ29u dHJvbCBFTmFibGVkICovCisKKyNkZWZpbmUgU1JDUl9JTVIJQklUKDApCQkvKiBJTW1lZGlhdGUg UmVsb2FkICovCisjZGVmaW5lIFNSQ1JfVkJSCUJJVCgxKQkJLyogVmVydGljYWwgQmxhbmtpbmcg UmVsb2FkICovCisKKyNkZWZpbmUgQkNDUl9CQ0JMQUNLCTB4MDAJCS8qIEJhY2tncm91bmQgQ29s b3IgQkxBQ0sgKi8KKyNkZWZpbmUgQkNDUl9CQ0JMVUUJR0VOTUFTSyg3LCAwKQkvKiBCYWNrZ3Jv dW5kIENvbG9yIEJMVUUgKi8KKyNkZWZpbmUgQkNDUl9CQ0dSRUVOCUdFTk1BU0soMTUsIDgpCS8q IEJhY2tncm91bmQgQ29sb3IgR1JFRU4gKi8KKyNkZWZpbmUgQkNDUl9CQ1JFRAlHRU5NQVNLKDIz LCAxNikJLyogQmFja2dyb3VuZCBDb2xvciBSRUQgKi8KKyNkZWZpbmUgQkNDUl9CQ1dISVRFCUdF Tk1BU0soMjMsIDApCS8qIEJhY2tncm91bmQgQ29sb3IgV0hJVEUgKi8KKworI2RlZmluZSBJRVJf TElFCQlCSVQoMCkJCS8qIExpbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfRlVJ RQlCSVQoMSkJCS8qIEZpZm8gVW5kZXJydW4gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJ RVJfVEVSUklFCUJJVCgyKQkJLyogVHJhbnNmZXIgRVJSb3IgSW50ZXJydXB0IEVuYWJsZSAqLwor I2RlZmluZSBJRVJfUlJJRQlCSVQoMykJCS8qIFJlZ2lzdGVyIFJlbG9hZCBJbnRlcnJ1cHQgZW5h YmxlICovCisKKyNkZWZpbmUgSVNSX0xJRgkJQklUKDApCQkvKiBMaW5lIEludGVycnVwdCBGbGFn ICovCisjZGVmaW5lIElTUl9GVUlGCUJJVCgxKQkJLyogRmlmbyBVbmRlcnJ1biBJbnRlcnJ1cHQg RmxhZyAqLworI2RlZmluZSBJU1JfVEVSUklGCUJJVCgyKQkJLyogVHJhbnNmZXIgRVJSb3IgSW50 ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgSVNSX1JSSUYJQklUKDMpCQkvKiBSZWdpc3RlciBSZWxv YWQgSW50ZXJydXB0IEZsYWcgKi8KKworI2RlZmluZSBMWENSX0xFTglCSVQoMCkJCS8qIExheWVy IEVOYWJsZSAqLworI2RlZmluZSBMWENSX0NPTEtFTglCSVQoMSkJCS8qIENvbG9yIEtleWluZyBF bmFibGUgKi8KKyNkZWZpbmUgTFhDUl9DTFVURU4JQklUKDQpCQkvKiBDb2xvciBMb29rLVVwIFRh YmxlIEVOYWJsZSAqLworCisjZGVmaW5lIExYV0hQQ1JfV0hTVFBPUwlHRU5NQVNLKDExLCAwKQkv KiBXaW5kb3cgSG9yaXpvbnRhbCBTdGFyVCBQT1NpdGlvbiAqLworI2RlZmluZSBMWFdIUENSX1dI U1BQT1MJR0VOTUFTSygyNywgMTYpCS8qIFdpbmRvdyBIb3Jpem9udGFsIFN0b1AgUE9TaXRpb24g Ki8KKworI2RlZmluZSBMWFdWUENSX1dWU1RQT1MJR0VOTUFTSygxMCwgMCkJLyogV2luZG93IFZl cnRpY2FsIFN0YXJUIFBPU2l0aW9uICovCisjZGVmaW5lIExYV1ZQQ1JfV1ZTUFBPUwlHRU5NQVNL KDI2LCAxNikJLyogV2luZG93IFZlcnRpY2FsIFN0b1AgUE9TaXRpb24gKi8KKworI2RlZmluZSBM WFBGQ1JfUEYJR0VOTUFTSygyLCAwKQkvKiBQaXhlbCBGb3JtYXQgKi8KKworI2RlZmluZSBMWENB Q1JfQ09OU1RBCUdFTk1BU0soNywgMCkJLyogQ09OU1RhbnQgQWxwaGEgKi8KKworI2RlZmluZSBM WEJGQ1JfQkYyCUdFTk1BU0soMiwgMCkJLyogQmxlbmRpbmcgRmFjdG9yIDIgKi8KKyNkZWZpbmUg TFhCRkNSX0JGMQlHRU5NQVNLKDEwLCA4KQkvKiBCbGVuZGluZyBGYWN0b3IgMSAqLworCisjZGVm aW5lIExYQ0ZCTFJfQ0ZCTEwJR0VOTUFTSygxMiwgMCkJLyogQ29sb3IgRnJhbWUgQnVmZmVyIExp bmUgTGVuZ3RoICovCisjZGVmaW5lIExYQ0ZCTFJfQ0ZCUAlHRU5NQVNLKDI4LCAxNikJLyogQ29s b3IgRnJhbWUgQnVmZmVyIFBpdGNoIGluIGJ5dGVzICovCisKKyNkZWZpbmUgTFhDRkJMTlJfQ0ZC TE4JR0VOTUFTSygxMCwgMCkJIC8qIENvbG9yIEZyYW1lIEJ1ZmZlciBMaW5lIE51bWJlciAqLwor CisjZGVmaW5lIEhTUE9MX0FMICAgMAkJLyogSG9yaXpvbnRhbCBTeW5jIFBPTGFyaXR5IEFjdGl2 ZSBMb3cgKi8KKyNkZWZpbmUgVlNQT0xfQUwgICAwCQkvKiBWZXJ0aWNhbCBTeW5jIFBPTGFyaXR5 IEFjdGl2ZSBMb3cgKi8KKyNkZWZpbmUgREVQT0xfQUwgICAwCQkvKiBEYXRhIEVuYWJsZSBQT0xh cml0eSBBY3RpdmUgTG93ICovCisjZGVmaW5lIFBDUE9MX0lQQyAgMAkJLyogSW5wdXQgUGl4ZWwg Q2xvY2sgKi8KKyNkZWZpbmUgSFNQT0xfQUggICBHQ1JfSFNQT0wJLyogSG9yaXpvbnRhbCBTeW5j IFBPTGFyaXR5IEFjdGl2ZSBIaWdoICovCisjZGVmaW5lIFZTUE9MX0FIICAgR0NSX1ZTUE9MCS8q IFZlcnRpY2FsIFN5bmMgUE9MYXJpdHkgQWN0aXZlIEhpZ2ggKi8KKyNkZWZpbmUgREVQT0xfQUgg ICBHQ1JfREVQT0wJLyogRGF0YSBFbmFibGUgUE9MYXJpdHkgQWN0aXZlIEhpZ2ggKi8KKyNkZWZp bmUgUENQT0xfSUlQQyBHQ1JfUENQT0wJLyogSW52ZXJ0ZWQgSW5wdXQgUGl4ZWwgQ2xvY2sgKi8K KyNkZWZpbmUgQ09OU1RBX01BWCAweEZGCQkvKiBDT05TVGFudCBBbHBoYSBNQVg9IDEuMCAqLwor I2RlZmluZSBCRjFfUEFYQ0EgIDB4NjAwCS8qIFBpeGVsIEFscGhhIHggQ29uc3RhbnQgQWxwaGEg Ki8KKyNkZWZpbmUgQkYxX0NBICAgICAweDQwMAkvKiBDb25zdGFudCBBbHBoYSAqLworI2RlZmlu ZSBCRjJfMVBBWENBIDB4MDA3CS8qIDEgLSAoUGl4ZWwgQWxwaGEgeCBDb25zdGFudCBBbHBoYSkg Ki8KKyNkZWZpbmUgQkYyXzFDQQkgICAweDAwNQkvKiAxIC0gQ29uc3RhbnQgQWxwaGEgKi8KKwor I2RlZmluZSBOQl9QRiAgICAgICAgICAgOCAgICAgICAvKiBNYXggbmIgb2YgSFcgcGl4ZWwgZm9y bWF0ICovCisKK2VudW0gbHRkY19waXhfZm10IHsKKwlQRl9OT05FLAorCS8qIFJHQiBmb3JtYXRz ICovCisJUEZfQVJHQjg4ODgsICAgIC8qIEFSR0IgWzMyIGJpdHNdICovCisJUEZfUkdCQTg4ODgs ICAgIC8qIFJHQkEgWzMyIGJpdHNdICovCisJUEZfUkdCODg4LCAgICAgIC8qIFJHQiBbMjQgYml0 c10gKi8KKwlQRl9SR0I1NjUsICAgICAgLyogUkdCIFsxNiBiaXRzXSAqLworCVBGX0FSR0IxNTU1 LCAgICAvKiBBUkdCIEE6MSBiaXQgUkdCOjE1IGJpdHMgWzE2IGJpdHNdICovCisJUEZfQVJHQjQ0 NDQsICAgIC8qIEFSR0IgQTo0IGJpdHMgUi9HL0I6IDQgYml0cyBlYWNoIFsxNiBiaXRzXSAqLwor CS8qIEluZGV4ZWQgZm9ybWF0cyAqLworCVBGX0w4LCAgICAgICAgICAvKiBJbmRleGVkIDggYml0 cyBbOCBiaXRzXSAqLworCVBGX0FMNDQsICAgICAgICAvKiBBbHBoYTo0IGJpdHMgKyBpbmRleGVk IDQgYml0cyBbOCBiaXRzXSAqLworCVBGX0FMODggICAgICAgICAvKiBBbHBoYTo4IGJpdHMgKyBp bmRleGVkIDggYml0cyBbMTYgYml0c10gKi8KK307CisKKy8qIFRoZSBpbmRleCBnaXZlcyB0aGUg ZW5jb2Rpbmcgb2YgdGhlIHBpeGVsIGZvcm1hdCBmb3IgYW4gSFcgdmVyc2lvbiAqLworc3RhdGlj IGNvbnN0IGVudW0gbHRkY19waXhfZm10IGx0ZGNfcGl4X2ZtdF9hMFtOQl9QRl0gPSB7CisJUEZf QVJHQjg4ODgsCS8qIDB4MDAgKi8KKwlQRl9SR0I4ODgsCS8qIDB4MDEgKi8KKwlQRl9SR0I1NjUs CS8qIDB4MDIgKi8KKwlQRl9BUkdCMTU1NSwJLyogMHgwMyAqLworCVBGX0FSR0I0NDQ0LAkvKiAw eDA0ICovCisJUEZfTDgsCQkvKiAweDA1ICovCisJUEZfQUw0NCwJLyogMHgwNiAqLworCVBGX0FM ODgJCS8qIDB4MDcgKi8KK307CisKK3N0YXRpYyBjb25zdCBlbnVtIGx0ZGNfcGl4X2ZtdCBsdGRj X3BpeF9mbXRfYTFbTkJfUEZdID0geworCVBGX0FSR0I4ODg4LAkvKiAweDAwICovCisJUEZfUkdC ODg4LAkvKiAweDAxICovCisJUEZfUkdCNTY1LAkvKiAweDAyICovCisJUEZfUkdCQTg4ODgsCS8q IDB4MDMgKi8KKwlQRl9BTDQ0LAkvKiAweDA0ICovCisJUEZfTDgsCQkvKiAweDA1ICovCisJUEZf QVJHQjE1NTUsCS8qIDB4MDYgKi8KKwlQRl9BUkdCNDQ0NAkvKiAweDA3ICovCit9OworCitzdGF0 aWMgaW5saW5lIHUzMiByZWdfcmVhZCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcpCit7CisJ cmV0dXJuIHJlYWRsX3JlbGF4ZWQoYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCByZWdfd3JpdGUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdy aXRlbF9yZWxheGVkKHZhbCwgYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBy ZWdfc2V0KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJcmVnX3dy aXRlKGJhc2UsIHJlZywgcmVnX3JlYWQoYmFzZSwgcmVnKSB8IG1hc2spOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgcmVnX2NsZWFyKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZywgdTMyIG1h c2spCit7CisJcmVnX3dyaXRlKGJhc2UsIHJlZywgcmVnX3JlYWQoYmFzZSwgcmVnKSAmIH5tYXNr KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ191cGRhdGVfYml0cyh2b2lkIF9faW9tZW0g KmJhc2UsIHUzMiByZWcsIHUzMiBtYXNrLAorCQkJCSAgIHUzMiB2YWwpCit7CisJcmVnX3dyaXRl KGJhc2UsIHJlZywgKHJlZ19yZWFkKGJhc2UsIHJlZykgJiB+bWFzaykgfCB2YWwpOworfQorCitz dGF0aWMgaW5saW5lIHN0cnVjdCBsdGRjX2RldmljZSAqY3J0Y190b19sdGRjKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKK3sKKwlyZXR1cm4gKHN0cnVjdCBsdGRjX2RldmljZSAqKWNydGMtPmRldi0+ ZGV2X3ByaXZhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGx0ZGNfZGV2aWNlICpwbGFu ZV90b19sdGRjKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXJldHVybiAoc3RydWN0IGx0 ZGNfZGV2aWNlICopcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGx0ZGNfZGV2aWNlICplbmNvZGVyX3RvX2x0ZGMoc3RydWN0IGRybV9lbmNvZGVyICpl bmMpCit7CisJcmV0dXJuIChzdHJ1Y3QgbHRkY19kZXZpY2UgKillbmMtPmRldi0+ZGV2X3ByaXZh dGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGx0ZGNfZGV2aWNlICpjb25uZWN0b3JfdG9f bHRkYyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQoreworCXJldHVybiAoc3RydWN0IGx0ZGNf ZGV2aWNlICopY29uLT5kZXYtPmRldl9wcml2YXRlOworfQorCitzdGF0aWMgaW5saW5lIGVudW0g bHRkY19waXhfZm10IHRvX2x0ZGNfcGl4ZWxmb3JtYXQodTMyIGRybV9mbXQpCit7CisJZW51bSBs dGRjX3BpeF9mbXQgcGY7CisKKwlzd2l0Y2ggKGRybV9mbXQpIHsKKwljYXNlIERSTV9GT1JNQVRf QVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlwZiA9IFBGX0FSR0I4ODg4 OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1fRk9STUFU X1JHQlg4ODg4OgorCQlwZiA9IFBGX1JHQkE4ODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JN QVRfUkdCODg4OgorCQlwZiA9IFBGX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFU X1JHQjU2NToKKwkJcGYgPSBQRl9SR0I1NjU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTU1NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CisJCXBmID0gUEZfQVJHQjE1NTU7 CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRf WFJHQjQ0NDQ6CisJCXBmID0gUEZfQVJHQjQ0NDQ7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1B VF9DODoKKwkJcGYgPSBQRl9MODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGYgPSBQRl9OT05F OworCQlicmVhazsKKwkvKiBOb3RlOiBUaGVyZSBhcmUgbm8gRFJNX0ZPUk1BVCBmb3IgQUw0NCBh bmQgQUw4OCAqLworCX0KKworCXJldHVybiBwZjsKK30KKworc3RhdGljIGlubGluZSB1MzIgdG9f ZHJtX3BpeGVsZm9ybWF0KGVudW0gbHRkY19waXhfZm10IHBmKQoreworCXN3aXRjaCAocGYpIHsK KwljYXNlIFBGX0FSR0I4ODg4OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCODg4ODsKKwljYXNl IFBGX1JHQkE4ODg4OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9SR0JBODg4ODsKKwljYXNlIFBGX1JH Qjg4ODoKKwkJcmV0dXJuIERSTV9GT1JNQVRfUkdCODg4OworCWNhc2UgUEZfUkdCNTY1OgorCQly ZXR1cm4gRFJNX0ZPUk1BVF9SR0I1NjU7CisJY2FzZSBQRl9BUkdCMTU1NToKKwkJcmV0dXJuIERS TV9GT1JNQVRfQVJHQjE1NTU7CisJY2FzZSBQRl9BUkdCNDQ0NDoKKwkJcmV0dXJuIERSTV9GT1JN QVRfQVJHQjQ0NDQ7CisJY2FzZSBQRl9MODoKKwkJcmV0dXJuIERSTV9GT1JNQVRfQzg7CisJY2Fz ZSBQRl9BTDQ0OiAvKiBObyBEUk0gc3VwcG9ydCAqLworCWNhc2UgUEZfQUw4ODogLyogTm8gRFJN IHN1cHBvcnQgKi8KKwljYXNlIFBGX05PTkU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQor fQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbHRkY19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmFy ZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGFyZzsKKwlzdHJ1Y3QgbHRkY19kZXZp Y2UgKmxkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBk cm1fY3J0Y19mcm9tX2luZGV4KGRkZXYsIDApOworCisJLyogTGluZSBJUlEgOiB0cmlnZ2VyIHRo ZSB2YmxhbmsgZXZlbnQgKi8KKwlpZiAobGRldi0+aXJxX3N0YXR1cyAmIElTUl9MSUYpCisJCWRy bV9jcnRjX2hhbmRsZV92YmxhbmsoY3J0Yyk7CisKKwkvKiBTYXZlIEZJRk8gVW5kZXJydW4gJiBU cmFuc2ZlciBFcnJvciBzdGF0dXMgKi8KKwltdXRleF9sb2NrKCZsZGV2LT5lcnJfbG9jayk7CisJ aWYgKGxkZXYtPmlycV9zdGF0dXMgJiBJU1JfRlVJRikKKwkJbGRldi0+ZXJyb3Jfc3RhdHVzIHw9 IElTUl9GVUlGOworCWlmIChsZGV2LT5pcnFfc3RhdHVzICYgSVNSX1RFUlJJRikKKwkJbGRldi0+ ZXJyb3Jfc3RhdHVzIHw9IElTUl9URVJSSUY7CisJbXV0ZXhfdW5sb2NrKCZsZGV2LT5lcnJfbG9j ayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsdGRj X2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBh cmc7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwkv KiBSZWFkICYgQ2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwlsZGV2LT5pcnFfc3RhdHVz ID0gcmVnX3JlYWQobGRldi0+cmVncywgTFREQ19JU1IpOworCXJlZ193cml0ZShsZGV2LT5yZWdz LCBMVERDX0lDUiwgbGRldi0+aXJxX3N0YXR1cyk7CisKKwlyZXR1cm4gSVJRX1dBS0VfVEhSRUFE OworfQorCisvKgorICogRFJNX0NSVEMKKyAqLworCitzdGF0aWMgdm9pZCBsdGRjX2NydGNfbG9h ZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRl diA9IGNydGNfdG9fbHRkYyhjcnRjKTsKKwl1bnNpZ25lZCBpbnQgaSwgbGF5OworCisJZm9yIChs YXkgPSAwOyBsYXkgPCBsZGV2LT5jYXBzLm5iX2xheWVyczsgbGF5KyspCisJCWZvciAoaSA9IDA7 IGkgPCAyNTY7IGkrKykKKwkJCXJlZ193cml0ZShsZGV2LT5yZWdzLCBMVERDX0wxQ0xVVFdSICsg bGF5ICogTEFZX09GUywKKwkJCQkgIGxkZXYtPmNsdXRbaV0pOworfQorCitzdGF0aWMgdm9pZCBs dGRjX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbHRkY19k ZXZpY2UgKmxkZXYgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJc biIpOworCisJLyogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciB2YWx1ZSAqLworCXJlZ193cml0 ZShsZGV2LT5yZWdzLCBMVERDX0JDQ1IsIEJDQ1JfQkNCTEFDSyk7CisKKwkvKiBFbmFibGUgSVJR ICovCisJcmVnX3NldChsZGV2LT5yZWdzLCBMVERDX0lFUiwgSUVSX1JSSUUgfCBJRVJfRlVJRSB8 IElFUl9URVJSSUUpOworCisJLyogSW1tZWRpYXRlbHkgY29tbWl0IHRoZSBwbGFuZXMgKi8KKwly ZWdfc2V0KGxkZXYtPnJlZ3MsIExURENfU1JDUiwgU1JDUl9JTVIpOworCisJLyogRW5hYmxlIExU REMgKi8KKwlyZWdfc2V0KGxkZXYtPnJlZ3MsIExURENfR0NSLCBHQ1JfTFREQ0VOKTsKKworCWRy bV9jcnRjX3ZibGFua19vbihjcnRjKTsKK30KKworc3RhdGljIHZvaWQgbHRkY19jcnRjX2Rpc2Fi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9 IGNydGNfdG9fbHRkYyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpl dmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisK Kwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworCisJLyogZGlzYWJsZSBMVERDICovCisJcmVn X2NsZWFyKGxkZXYtPnJlZ3MsIExURENfR0NSLCBHQ1JfTFREQ0VOKTsKKworCS8qIGRpc2FibGUg SVJRICovCisJcmVnX2NsZWFyKGxkZXYtPnJlZ3MsIExURENfSUVSLCBJRVJfUlJJRSB8IElFUl9G VUlFIHwgSUVSX1RFUlJJRSk7CisKKwkvKiBpbW1lZGlhdGVseSBjb21taXQgZGlzYWJsZSBvZiBs YXllcnMgYmVmb3JlIHN3aXRjaGluZyBvZmYgTFREQyAqLworCXJlZ19zZXQobGRldi0+cmVncywg TFREQ19TUkNSLCBTUkNSX0lNUik7Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfY3J0Y19tb2RlX3Nl dF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxk ZXYgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwlp bnQgcmF0ZSA9IG1vZGUtPmNsb2NrICogMTAwMDsKKwl1MzIgaHN5bmMsIHZzeW5jLCBhY2N1bV9o YnAsIGFjY3VtX3ZicCwgYWNjdW1fYWN0X3csIGFjY3VtX2FjdF9oOworCXUzMiB0b3RhbF93aWR0 aCwgdG90YWxfaGVpZ2h0OworCXUzMiB2YWw7CisKKwlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVv bW9kZShtb2RlLCAmdm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigiQ1JUQzolZCBtb2RlOiVzXG4i LCBjcnRjLT5iYXNlLmlkLCBtb2RlLT5uYW1lKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJWaWRlbyBt b2RlOiAlZHglZCIsIHZtLmhhY3RpdmUsIHZtLnZhY3RpdmUpOworCURSTV9ERUJVR19EUklWRVIo IiBoZnAgJWQgaGJwICVkIGhzbCAlZCB2ZnAgJWQgdmJwICVkIHZzbCAlZFxuIiwKKwkJCSB2bS5o ZnJvbnRfcG9yY2gsIHZtLmhiYWNrX3BvcmNoLCB2bS5oc3luY19sZW4sCisJCQkgdm0udmZyb250 X3BvcmNoLCB2bS52YmFja19wb3JjaCwgdm0udnN5bmNfbGVuKTsKKworCS8qIENvbnZlcnQgdmlk ZW8gdGltaW5ncyB0byBsdGRjIHRpbWluZ3MgKi8KKwloc3luYyA9IHZtLmhzeW5jX2xlbiAtIDE7 CisJdnN5bmMgPSB2bS52c3luY19sZW4gLSAxOworCWFjY3VtX2hicCA9IGhzeW5jICsgdm0uaGJh Y2tfcG9yY2g7CisJYWNjdW1fdmJwID0gdnN5bmMgKyB2bS52YmFja19wb3JjaDsKKwlhY2N1bV9h Y3RfdyA9IGFjY3VtX2hicCArIHZtLmhhY3RpdmU7CisJYWNjdW1fYWN0X2ggPSBhY2N1bV92YnAg KyB2bS52YWN0aXZlOworCXRvdGFsX3dpZHRoID0gYWNjdW1fYWN0X3cgKyB2bS5oZnJvbnRfcG9y Y2g7CisJdG90YWxfaGVpZ2h0ID0gYWNjdW1fYWN0X2ggKyB2bS52ZnJvbnRfcG9yY2g7CisKKwlj bGtfZGlzYWJsZShsZGV2LT5waXhlbF9jbGspOworCisJaWYgKGNsa19zZXRfcmF0ZShsZGV2LT5w aXhlbF9jbGssIHJhdGUpIDwgMCkgeworCQlEUk1fRVJST1IoIkNhbm5vdCBzZXQgcmF0ZSAoJWRI eikgZm9yIHBpeGVsIGNsa1xuIiwgcmF0ZSk7CisJCXJldHVybjsKKwl9CisKKwljbGtfZW5hYmxl KGxkZXYtPnBpeGVsX2Nsayk7CisKKwkvKiBDb25maWd1cmVzIHRoZSBIUywgVlMsIERFIGFuZCBQ QyBwb2xhcml0aWVzLiAqLworCXZhbCA9IEhTUE9MX0FMIHwgSFNQT0xfQUwgfCBERVBPTF9BTCB8 IFBDUE9MX0lQQzsKKworCWlmICh2bS5mbGFncyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfSElHSCkK KwkJdmFsIHw9IEhTUE9MX0FIOworCisJaWYgKHZtLmZsYWdzICYgRElTUExBWV9GTEFHU19WU1lO Q19ISUdIKQorCQl2YWwgfD0gVlNQT0xfQUg7CisKKwlpZiAodm0uZmxhZ3MgJiBESVNQTEFZX0ZM QUdTX0RFX0hJR0gpCisJCXZhbCB8PSBERVBPTF9BSDsKKworCWlmICh2bS5mbGFncyAmIERJU1BM QVlfRkxBR1NfUElYREFUQV9ORUdFREdFKQorCQl2YWwgfD0gUENQT0xfSUlQQzsKKworCXJlZ191 cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0dDUiwKKwkJCUdDUl9IU1BPTCB8IEdDUl9WU1BP TCB8IEdDUl9ERVBPTCB8IEdDUl9QQ1BPTCwgdmFsKTsKKworCS8qIFNldCBTeW5jaHJvbml6YXRp b24gc2l6ZSAqLworCXZhbCA9IChoc3luYyA8PCAxNikgfCB2c3luYzsKKwlyZWdfdXBkYXRlX2Jp dHMobGRldi0+cmVncywgTFREQ19TU0NSLCBTU0NSX1ZTSCB8IFNTQ1JfSFNXLCB2YWwpOworCisJ LyogU2V0IEFjY3VtdWxhdGVkIEJhY2sgcG9yY2ggKi8KKwl2YWwgPSAoYWNjdW1faGJwIDw8IDE2 KSB8IGFjY3VtX3ZicDsKKwlyZWdfdXBkYXRlX2JpdHMobGRldi0+cmVncywgTFREQ19CUENSLCBC UENSX0FWQlAgfCBCUENSX0FIQlAsIHZhbCk7CisKKwkvKiBTZXQgQWNjdW11bGF0ZWQgQWN0aXZl IFdpZHRoICovCisJdmFsID0gKGFjY3VtX2FjdF93IDw8IDE2KSB8IGFjY3VtX2FjdF9oOworCXJl Z191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0FXQ1IsIEFXQ1JfQUFXIHwgQVdDUl9BQUgs IHZhbCk7CisKKwkvKiBTZXQgdG90YWwgd2lkdGggJiBoZWlnaHQgKi8KKwl2YWwgPSAodG90YWxf d2lkdGggPDwgMTYpIHwgdG90YWxfaGVpZ2h0OworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdz LCBMVERDX1RXQ1IsIFRXQ1JfVE9UQUxIIHwgVFdDUl9UT1RBTFcsIHZhbCk7CisKKwlyZWdfd3Jp dGUobGRldi0+cmVncywgTFREQ19MSVBDUiwgKGFjY3VtX2FjdF9oICsgMSkpOworfQorCitzdGF0 aWMgdm9pZCBsdGRjX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBs dGRjX2RldmljZSAqbGRldiA9IGNydGNfdG9fbHRkYyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX3BlbmRp bmdfdmJsYW5rX2V2ZW50ICpldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKworCURSTV9ERUJV R19BVE9NSUMoIlxuIik7CisKKwkvKiBDb21taXQgc2hhZG93IHJlZ2lzdGVycyA9IHVwZGF0ZSBw bGFuZXMgYXQgbmV4dCB2YmxhbmsgKi8KKwlyZWdfc2V0KGxkZXYtPnJlZ3MsIExURENfU1JDUiwg U1JDUl9WQlIpOworCisJaWYgKGV2ZW50KSB7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7 CisKKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwkJaWYgKGRybV9j cnRjX3ZibGFua19nZXQoY3J0YykgPT0gMCkKKwkJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQo Y3J0YywgZXZlbnQpOworCQllbHNlCisJCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRj LCBldmVudCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGx0ZGNfY3J0Y19oZWxw ZXJfZnVuY3MgPSB7CisJLmxvYWRfbHV0ID0gbHRkY19jcnRjX2xvYWRfbHV0LAorCS5lbmFibGUg PSBsdGRjX2NydGNfZW5hYmxlLAorCS5kaXNhYmxlID0gbHRkY19jcnRjX2Rpc2FibGUsCisJLm1v ZGVfc2V0X25vZmIgPSBsdGRjX2NydGNfbW9kZV9zZXRfbm9mYiwKKwkuYXRvbWljX2ZsdXNoID0g bHRkY19jcnRjX2F0b21pY19mbHVzaCwKK307CisKK2ludCBsdGRjX2NydGNfZW5hYmxlX3ZibGFu ayhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0 IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUdfRFJJ VkVSKCJcbiIpOworCXJlZ19zZXQobGRldi0+cmVncywgTFREQ19JRVIsIElFUl9MSUUpOworCisJ cmV0dXJuIDA7Cit9CisKK3ZvaWQgbHRkY19jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1f ZGV2aWNlICpkZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2Ug KmxkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisJ cmVnX2NsZWFyKGxkZXYtPnJlZ3MsIExURENfSUVSLCBJRVJfTElFKTsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fY3J0Y19mdW5jcyBsdGRjX2NydGNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1f Y3J0Y19jbGVhbnVwLAorCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZp ZywKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9 IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCisv KgorICogRFJNX1BMQU5FCisgKi8KKworc3RhdGljIGludCBsdGRjX3BsYW5lX2F0b21pY19jaGVj ayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwl1 MzIgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIp OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwkvKiBjb252ZXJ0IHNyY18gZnJvbSAxNjox NiBmb3JtYXQgKi8KKwlzcmNfeCA9IHN0YXRlLT5zcmNfeCA+PiAxNjsKKwlzcmNfeSA9IHN0YXRl LT5zcmNfeSA+PiAxNjsKKwlzcmNfdyA9IHN0YXRlLT5zcmNfdyA+PiAxNjsKKwlzcmNfaCA9IHN0 YXRlLT5zcmNfaCA+PiAxNjsKKworCS8qIFJlamVjdCBzY2FsaW5nICovCisJaWYgKChzcmNfdyAh PSBzdGF0ZS0+Y3J0Y193KSB8fCAoc3JjX2ggIT0gc3RhdGUtPmNydGNfaCkpIHsKKwkJRFJNX0VS Uk9SKCJTY2FsaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfcGxhbmVfYXRvbWljX3VwZGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg Km9sZHN0YXRlKQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9IHBsYW5lX3RvX2x0ZGMo cGxhbmUpOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0gcGxhbmUtPnN0YXRlOwor CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXUzMiBsb2ZzID0gcGxh bmUtPmluZGV4ICogTEFZX09GUzsKKwl1MzIgeDAgPSBzdGF0ZS0+Y3J0Y194OworCXUzMiB4MSA9 IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0Y193IC0gMTsKKwl1MzIgeTAgPSBzdGF0ZS0+Y3J0 Y195OworCXUzMiB5MSA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oIC0gMTsKKwl1MzIg c3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7CisJdTMyIHZhbCwgcGl0Y2hfaW5fYnl0ZXMsIGxp bmVfbGVuZ3RoLCBwYWRkciwgYWhicCwgYXZicCwgYnBjcjsKKwllbnVtIGx0ZGNfcGl4X2ZtdCBw ZjsKKworCWlmICghc3RhdGUtPmNydGMgfHwgIWZiKSB7CisJCURSTV9ERUJVR19EUklWRVIoImZi IG9yIGNydGMgTlVMTCIpOworCQlyZXR1cm47CisJfQorCisJLyogY29udmVydCBzcmNfIGZyb20g MTY6MTYgZm9ybWF0ICovCisJc3JjX3ggPSBzdGF0ZS0+c3JjX3ggPj4gMTY7CisJc3JjX3kgPSBz dGF0ZS0+c3JjX3kgPj4gMTY7CisJc3JjX3cgPSBzdGF0ZS0+c3JjX3cgPj4gMTY7CisJc3JjX2gg PSBzdGF0ZS0+c3JjX2ggPj4gMTY7CisKKwlEUk1fREVCVUdfRFJJVkVSKAorCQkicGxhbmU6JWQg ZmI6JWQgKCVkeCVkKUAoJWQsJWQpIC0+ICglZHglZClAKCVkLCVkKVxuIiwKKwkJcGxhbmUtPmJh c2UuaWQsIGZiLT5iYXNlLmlkLAorCQlzcmNfdywgc3JjX2gsIHNyY194LCBzcmNfeSwKKwkJc3Rh dGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCwgc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSk7 CisKKwlicGNyID0gcmVnX3JlYWQobGRldi0+cmVncywgTFREQ19CUENSKTsKKwlhaGJwID0gKGJw Y3IgJiBCUENSX0FIQlApID4+IDE2OworCWF2YnAgPSBicGNyICYgQlBDUl9BVkJQOworCisJLyog Q29uZmlndXJlcyB0aGUgaG9yaXpvbnRhbCBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbiAqLworCXZh bCA9ICgoeDEgKyAxICsgYWhicCkgPDwgMTYpICsgKHgwICsgMSArIGFoYnApOworCXJlZ191cGRh dGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wxV0hQQ1IgKyBsb2ZzLAorCQkJTFhXSFBDUl9XSFNU UE9TIHwgTFhXSFBDUl9XSFNQUE9TLCB2YWwpOworCisJLyogQ29uZmlndXJlcyB0aGUgdmVydGlj YWwgc3RhcnQgYW5kIHN0b3AgcG9zaXRpb24gKi8KKwl2YWwgPSAoKHkxICsgMSArIGF2YnApIDw8 IDE2KSArICh5MCArIDEgKyBhdmJwKTsKKwlyZWdfdXBkYXRlX2JpdHMobGRldi0+cmVncywgTFRE Q19MMVdWUENSICsgbG9mcywKKwkJCUxYV1ZQQ1JfV1ZTVFBPUyB8IExYV1ZQQ1JfV1ZTUFBPUywg dmFsKTsKKworCS8qIFNwZWNpZmllcyB0aGUgcGl4ZWwgZm9ybWF0ICovCisJcGYgPSB0b19sdGRj X3BpeGVsZm9ybWF0KGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJZm9yICh2YWwgPSAwOyB2YWwgPCBO Ql9QRjsgdmFsKyspCisJCWlmIChsZGV2LT5jYXBzLnBpeF9mbXRfaHdbdmFsXSA9PSBwZikKKwkJ CWJyZWFrOworCisJaWYgKHZhbCA9PSBOQl9QRikgeworCQlEUk1fRVJST1IoIlBpeGVsIGZvcm1h dCAlLjRzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgIChjaGFyICopJmZiLT5mb3JtYXQtPmZvcm1h dCk7CisJCXZhbCA9IDA7IC8qIHNldCBieSBkZWZhdWx0IEFSR0IgMzIgYml0cyAqLworCX0KKwly ZWdfdXBkYXRlX2JpdHMobGRldi0+cmVncywgTFREQ19MMVBGQ1IgKyBsb2ZzLCBMWFBGQ1JfUEYs IHZhbCk7CisKKwkvKiBDb25maWd1cmVzIHRoZSBjb2xvciBmcmFtZSBidWZmZXIgcGl0Y2ggaW4g Ynl0ZXMgJiBsaW5lIGxlbmd0aCAqLworCXBpdGNoX2luX2J5dGVzID0gZmItPnBpdGNoZXNbMF07 CisJbGluZV9sZW5ndGggPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+Zm9ybWF0LT5mb3JtYXQs IDApICoKKwkJICAgICAgKHgxIC0geDAgKyAxKSArIChsZGV2LT5jYXBzLmJ1c193aWR0aCA+PiAz KSAtIDE7CisJdmFsID0gKChwaXRjaF9pbl9ieXRlcyA8PCAxNikgfCBsaW5lX2xlbmd0aCk7CisJ cmVnX3VwZGF0ZV9iaXRzKGxkZXYtPnJlZ3MsIExURENfTDFDRkJMUiArIGxvZnMsCisJCQlMWENG QkxSX0NGQkxMIHwgTFhDRkJMUl9DRkJQLCB2YWwpOworCisJLyogU3BlY2lmaWVzIHRoZSBjb25z dGFudCBhbHBoYSB2YWx1ZSAqLworCXZhbCA9IENPTlNUQV9NQVg7CisJcmVnX3VwZGF0ZV9iaXRz KGxkZXYtPnJlZ3MsIExURENfTDFDQUNSICsgbG9mcywKKwkJCUxYQ0FDUl9DT05TVEEsIHZhbCk7 CisKKwkvKiBTcGVjaWZpZXMgdGhlIGJsZW5kaW5nIGZhY3RvcnMgKi8KKwl2YWwgPSBCRjFfUEFY Q0EgfCBCRjJfMVBBWENBOworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wxQkZD UiArIGxvZnMsCisJCQlMWEJGQ1JfQkYyIHwgTFhCRkNSX0JGMSwgdmFsKTsKKworCS8qIENvbmZp Z3VyZXMgdGhlIGZyYW1lIGJ1ZmZlciBsaW5lIG51bWJlciAqLworCXZhbCA9IHkxIC0geTAgKyAx OworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wxQ0ZCTE5SICsgbG9mcywKKwkJ CUxYQ0ZCTE5SX0NGQkxOLCB2YWwpOworCisJLyogU2V0cyB0aGUgRkIgYWRkcmVzcyAqLworCXBh ZGRyID0gKHUzMilkcm1fZmJfY21hX2dldF9nZW1fYWRkcihmYiwgc3RhdGUsIDApOworCisJRFJN X0RFQlVHX0RSSVZFUigiZmI6IHBoeXMgMHglMDh4IiwgcGFkZHIpOworCXJlZ193cml0ZShsZGV2 LT5yZWdzLCBMVERDX0wxQ0ZCQVIgKyBsb2ZzLCBwYWRkcik7CisKKwkvKiBFbmFibGUgbGF5ZXIg YW5kIENMVVQgaWYgbmVlZGVkICovCisJdmFsID0gZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9G T1JNQVRfQzggPyBMWENSX0NMVVRFTiA6IDA7CisJdmFsIHw9IExYQ1JfTEVOOworCXJlZ191cGRh dGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wxQ1IgKyBsb2ZzLAorCQkJTFhDUl9MRU4gfCBMWENS X0NMVVRFTiwgdmFsKTsKKworCW11dGV4X2xvY2soJmxkZXYtPmVycl9sb2NrKTsKKwlpZiAobGRl di0+ZXJyb3Jfc3RhdHVzICYgSVNSX0ZVSUYpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiRmlmbyB1 bmRlcnJ1blxuIik7CisJCWxkZXYtPmVycm9yX3N0YXR1cyAmPSB+SVNSX0ZVSUY7CisJfQorCWlm IChsZGV2LT5lcnJvcl9zdGF0dXMgJiBJU1JfVEVSUklGKSB7CisJCURSTV9ERUJVR19EUklWRVIo IlRyYW5zZmVyIGVycm9yXG4iKTsKKwkJbGRldi0+ZXJyb3Jfc3RhdHVzICY9IH5JU1JfVEVSUklG OworCX0KKwltdXRleF91bmxvY2soJmxkZXYtPmVycl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQg bHRkY19wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkg ICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRzdGF0ZSkKK3sKKwlzdHJ1Y3QgbHRkY19k ZXZpY2UgKmxkZXYgPSBwbGFuZV90b19sdGRjKHBsYW5lKTsKKwl1MzIgbG9mcyA9IHBsYW5lLT5p bmRleCAqIExBWV9PRlM7CisKKwkvKiBkaXNhYmxlIGxheWVyICovCisJcmVnX2NsZWFyKGxkZXYt PnJlZ3MsIExURENfTDFDUiArIGxvZnMsIExYQ1JfTEVOKTsKKworCURSTV9ERUJVR19EUklWRVIo IkNSVEM6JWQgcGxhbmU6JWRcbiIsCisJCQkgb2xkc3RhdGUtPmNydGMtPmJhc2UuaWQsIHBsYW5l LT5iYXNlLmlkKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgbHRkY19wbGFu ZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3Bs YW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwK KwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5zZXRfcHJvcGVydHkgPSBkcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBsdGRjX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsK KwkuYXRvbWljX2NoZWNrID0gbHRkY19wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRh dGUgPSBsdGRjX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0gbHRkY19w bGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lICpsdGRj X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKKwkJCQkJICAgZW51bSBkcm1f cGxhbmVfdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgcG9zc2libGVfY3J0Y3MgPSBDUlRD X01BU0s7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gZGRldi0+ZGV2OworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l OworCXVuc2lnbmVkIGludCBpLCBuYl9mbXQgPSAwOworCXUzMiBmb3JtYXRzW05CX1BGXTsKKwl1 MzIgZHJtX2ZtdDsKKwlpbnQgcmV0OworCisJLyogR2V0IHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRz ICovCisJZm9yIChpID0gMDsgaSA8IE5CX1BGOyBpKyspIHsKKwkJZHJtX2ZtdCA9IHRvX2RybV9w aXhlbGZvcm1hdChsZGV2LT5jYXBzLnBpeF9mbXRfaHdbaV0pOworCQlpZiAoIWRybV9mbXQpCisJ CQljb250aW51ZTsKKwkJZm9ybWF0c1tuYl9mbXQrK10gPSBkcm1fZm10OworCX0KKworCXBsYW5l ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICgh cGxhbmUpCisJCXJldHVybiAwOworCisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRk ZXYsIHBsYW5lLCBwb3NzaWJsZV9jcnRjcywKKwkJCQkgICAgICAgJmx0ZGNfcGxhbmVfZnVuY3Ms IGZvcm1hdHMsIG5iX2ZtdCwKKwkJCQkgICAgICAgdHlwZSwgTlVMTCk7CisJaWYgKHJldCA8IDAp CisJCXJldHVybiAwOworCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZsdGRjX3BsYW5l X2hlbHBlcl9mdW5jcyk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJwbGFuZTolZCBjcmVhdGVkXG4i LCBwbGFuZS0+YmFzZS5pZCk7CisKKwlyZXR1cm4gcGxhbmU7Cit9CisKK3N0YXRpYyB2b2lkIGx0 ZGNfcGxhbmVfZGVzdHJveV9hbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsICpwbGFuZV90ZW1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHBsYW5lLCBwbGFuZV90ZW1wLAorCQkJCSAmZGRldi0+bW9kZV9jb25maWcucGxhbmVfbGlz dCwgaGVhZCkKKwkJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOworfQorCitzdGF0aWMgaW50IGx0 ZGNfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwgKm92ZXJsYXk7CisJdW5zaWduZWQgaW50IGk7CisJ aW50IHJlczsKKworCXByaW1hcnkgPSBsdGRjX3BsYW5lX2NyZWF0ZShkZGV2LCBEUk1fUExBTkVf VFlQRV9QUklNQVJZKTsKKwlpZiAoIXByaW1hcnkpIHsKKwkJRFJNX0VSUk9SKCJDYW4gbm90IGNy ZWF0ZSBwcmltYXJ5IHBsYW5lXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzID0g ZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkZGV2LCBjcnRjLCBwcmltYXJ5LCBOVUxMLAorCQkJ CQkmbHRkY19jcnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmVzKSB7CisJCURSTV9FUlJPUigiQ2Fu IG5vdCBpbml0aWFsaXplIENSVENcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJZHJtX2Ny dGNfaGVscGVyX2FkZChjcnRjLCAmbHRkY19jcnRjX2hlbHBlcl9mdW5jcyk7CisKKwlEUk1fREVC VUdfRFJJVkVSKCJDUlRDOiVkIGNyZWF0ZWRcbiIsIGNydGMtPmJhc2UuaWQpOworCisJLyogQWRk IHBsYW5lcy4gTm90ZSA6IHRoZSBmaXJzdCBsYXllciBpcyB1c2VkIGJ5IHByaW1hcnkgcGxhbmUg Ki8KKwlmb3IgKGkgPSAxOyBpIDwgbGRldi0+Y2Fwcy5uYl9sYXllcnM7IGkrKykgeworCQlvdmVy bGF5ID0gbHRkY19wbGFuZV9jcmVhdGUoZGRldiwgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSk7CisJ CWlmICghb3ZlcmxheSkgeworCQkJcmVzID0gLUVOT01FTTsKKwkJCURSTV9FUlJPUigiQ2FuIG5v dCBjcmVhdGUgb3ZlcmxheSBwbGFuZSAlZFxuIiwgaSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0K Kwl9CisKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlsdGRjX3BsYW5lX2Rlc3Ryb3lfYWxsKGRk ZXYpOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBEUk1fRU5DT0RFUgorICovCisKK3N0YXRp YyB2b2lkIGx0ZGNfcmdiX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBlbmNvZGVyX3RvX2x0ZGMoZW5jb2Rl cik7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCisJZHJtX3BhbmVsX3ByZXBhcmUobGRl di0+cGFuZWwpOworCWRybV9wYW5lbF9lbmFibGUobGRldi0+cGFuZWwpOworfQorCitzdGF0aWMg dm9pZCBsdGRjX3JnYl9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9IGVuY29kZXJfdG9fbHRkYyhlbmNvZGVy KTsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisKKwlkcm1fcGFuZWxfZGlzYWJsZShsZGV2 LT5wYW5lbCk7CisJZHJtX3BhbmVsX3VucHJlcGFyZShsZGV2LT5wYW5lbCk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGx0ZGNfcmdiX2VuY29kZXJf aGVscGVyX2Z1bmNzID0geworCS5lbmFibGUgPSBsdGRjX3JnYl9lbmNvZGVyX2VuYWJsZSwKKwku ZGlzYWJsZSA9IGx0ZGNfcmdiX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbHRkY19yZ2JfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVz dHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNv ZGVyICpsdGRjX3JnYl9lbmNvZGVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sK KwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisKKwllbmNvZGVyID0gZGV2bV9remFsbG9j KGRkZXYtPmRldiwgc2l6ZW9mKCplbmNvZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbmNvZGVy KQorCQlyZXR1cm4gTlVMTDsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gQ1JUQ19NQVNL OworCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7IC8qIE5vIGNsb25pbmcgc3VwcG9ydCAq LworCisJZHJtX2VuY29kZXJfaW5pdChkZGV2LCBlbmNvZGVyLCAmbHRkY19yZ2JfZW5jb2Rlcl9m dW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX0RQSSwgTlVMTCk7CisKKwlkcm1fZW5jb2Rlcl9o ZWxwZXJfYWRkKGVuY29kZXIsICZsdGRjX3JnYl9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwlE Uk1fREVCVUdfRFJJVkVSKCJSR0IgZW5jb2RlcjolZCBjcmVhdGVkXG4iLCBlbmNvZGVyLT5iYXNl LmlkKTsKKworCXJldHVybiBlbmNvZGVyOworfQorCisvKgorICogRFJNX0NPTk5FQ1RPUgorICov CisKK3N0YXRpYyBpbnQgbHRkY19yZ2JfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY29ubmVj dG9yLT5kZXY7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7 CisJaW50IHJldCA9IDA7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCisJaWYgKGxkZXYt PnBhbmVsKQorCQlyZXQgPSBkcm1fcGFuZWxfZ2V0X21vZGVzKGxkZXYtPnBhbmVsKTsKKworCXJl dHVybiByZXQgPCAwID8gMCA6IHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9y X2hlbHBlcl9mdW5jcyBsdGRjX3JnYl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRf bW9kZXMgPSBsdGRjX3JnYl9jb25uZWN0b3JfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGVudW0g ZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2x0ZGNfcmdiX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgbHRkY19kZXZp Y2UgKmxkZXYgPSBjb25uZWN0b3JfdG9fbHRkYyhjb25uZWN0b3IpOworCisJcmV0dXJuIGxkZXYt PnBhbmVsID8gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgorCSAgICAgICBjb25uZWN0b3Jf c3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgbHRkY19yZ2JfY29ubmVjdG9y X2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlEUk1fREVCVUdf RFJJVkVSKCJcbiIpOworCisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJ ZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBsdGRjX3JnYl9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRw bXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZmlsbF9tb2RlcyA9IGRy bV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0ID0gbHRkY19y Z2JfY29ubmVjdG9yX2RldGVjdCwKKwkuZGVzdHJveSA9IGx0ZGNfcmdiX2Nvbm5lY3Rvcl9kZXN0 cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqbHRkY19y Z2JfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBlcnI7CisKKwljb25uZWN0b3IgPSBkZXZt X2t6YWxsb2MoZGRldi0+ZGV2LCBzaXplb2YoKmNvbm5lY3RvciksIEdGUF9LRVJORUwpOworCWlm ICghY29ubmVjdG9yKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbm5lY3Rv clxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NP Tk5FQ1RPUl9QT0xMX0hQRDsKKworCWVyciA9IGRybV9jb25uZWN0b3JfaW5pdChkZGV2LCBjb25u ZWN0b3IsICZsdGRjX3JnYl9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RP Ul9EUEkpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBj b25uZWN0b3JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBl cl9hZGQoY29ubmVjdG9yLCAmbHRkY19yZ2JfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlE Uk1fREVCVUdfRFJJVkVSKCJSR0IgY29ubmVjdG9yOiVkIGNyZWF0ZWRcbiIsIGNvbm5lY3Rvci0+ YmFzZS5pZCk7CisKKwlyZXR1cm4gY29ubmVjdG9yOworfQorCitzdGF0aWMgaW50IGx0ZGNfZ2V0 X2NhcHMoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICps ZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGJ1c193aWR0aF9sb2cyLCBsY3IsIGdjMnI7 CisKKwkvKiBhdCBsZWFzdCAxIGxheWVyIG11c3QgYmUgbWFuYWdlZCAqLworCWxjciA9IHJlZ19y ZWFkKGxkZXYtPnJlZ3MsIExURENfTENSKTsKKworCWxkZXYtPmNhcHMubmJfbGF5ZXJzID0gbWF4 X3QoaW50LCBsY3IsIDEpOworCisJLyogc2V0IGRhdGEgYnVzIHdpZHRoICovCisJZ2MyciA9IHJl Z19yZWFkKGxkZXYtPnJlZ3MsIExURENfR0MyUik7CisJYnVzX3dpZHRoX2xvZzIgPSAoZ2MyciAm IEdDMlJfQlcpID4+IDQ7CisJbGRldi0+Y2Fwcy5idXNfd2lkdGggPSA4IDw8IGJ1c193aWR0aF9s b2cyOworCWxkZXYtPmNhcHMuaHdfdmVyc2lvbiA9IHJlZ19yZWFkKGxkZXYtPnJlZ3MsIExURENf SURSKTsKKworCXN3aXRjaCAobGRldi0+Y2Fwcy5od192ZXJzaW9uKSB7CisJY2FzZSBIV1ZFUl8x MDIwMDoKKwljYXNlIEhXVkVSXzEwMzAwOgorCQlsZGV2LT5jYXBzLnJlZ19vZnMgPSBSRUdfT0ZT X05PTkU7CisJCWxkZXYtPmNhcHMucGl4X2ZtdF9odyA9IGx0ZGNfcGl4X2ZtdF9hMDsKKwkJYnJl YWs7CisJY2FzZSBIV1ZFUl8yMDEwMToKKwkJbGRldi0+Y2Fwcy5yZWdfb2ZzID0gUkVHX09GU180 OworCQlsZGV2LT5jYXBzLnBpeF9mbXRfaHcgPSBsdGRjX3BpeF9mbXRfYTE7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgc3RydWN0IGRybV9wYW5lbCAqbHRkY19nZXRfcGFuZWwoc3RydWN0IGRybV9kZXZpY2UgKmRk ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICplbnRpdHksICpw b3J0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IE5VTEw7CisKKwlEUk1fREVC VUdfRFJJVkVSKCJcbiIpOworCisJLyoKKwkgKiBQYXJzZSBsdGRjIG5vZGUgdG8gZ2V0IHJlbW90 ZSBwb3J0IGFuZCBmaW5kIFJHQiBwYW5lbCAvIEhETUkgc2xhdmUKKwkgKiBJZiBhIGRzaSBvciBh IGJyaWRnZSAoaGRtaSwgbHZkcy4uLikgaXMgY29ubmVjdGVkIHRvIGx0ZGMsCisJICogYSByZW1v dGUgcG9ydCAmIFJHQiBwYW5lbCB3aWxsIG5vdCBiZSBmb3VuZC4KKwkgKi8KKwlmb3JfZWFjaF9l bmRwb2ludF9vZl9ub2RlKG5wLCBlbnRpdHkpIHsKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxh YmxlKGVudGl0eSkpCisJCQljb250aW51ZTsKKworCQlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3JlbW90 ZV9wb3J0X3BhcmVudChlbnRpdHkpOworCQlpZiAocG9ydCkgeworCQkJcGFuZWwgPSBvZl9kcm1f ZmluZF9wYW5lbChwb3J0KTsKKwkJCW9mX25vZGVfcHV0KHBvcnQpOworCQkJaWYgKHBhbmVsKSB7 CisJCQkJRFJNX0RFQlVHX0RSSVZFUigicmVtb3RlIHBhbmVsICVzXG4iLAorCQkJCQkJIHBvcnQt PmZ1bGxfbmFtZSk7CisJCQl9IGVsc2UgeworCQkJCURSTV9ERUJVR19EUklWRVIoInBhbmVsIG1p c3NpbmdcbiIpOworCQkJCW9mX25vZGVfcHV0KGVudGl0eSk7CisJCQl9CisJCX0KKwl9CisKKwly ZXR1cm4gcGFuZWw7Cit9CisKK2ludCBsdGRjX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYp Cit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShk ZGV2LT5kZXYpOworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9IGRkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7CisJc3RydWN0IHJlc291cmNlIHJlczsK KwlpbnQgaXJxLCByZXQsIGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCisJbGRldi0+ cGFuZWwgPSBsdGRjX2dldF9wYW5lbChkZGV2KTsKKwlpZiAoIWxkZXYtPnBhbmVsKQorCQlyZXR1 cm4gLUVQUk9CRV9ERUZFUjsKKworCXJzdGMgPSBvZl9yZXNldF9jb250cm9sX2dldChucCwgTlVM TCk7CisKKwltdXRleF9pbml0KCZsZGV2LT5lcnJfbG9jayk7CisKKwlsZGV2LT5waXhlbF9jbGsg PSBkZXZtX2Nsa19nZXQoZGV2LCAibGNkIik7CisJaWYgKElTX0VSUihsZGV2LT5waXhlbF9jbGsp KSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGdldCBsY2QgY2xvY2tcbiIpOworCQlyZXR1cm4g LUVOT0RFVjsKKwl9CisKKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGxkZXYtPnBpeGVsX2Nsaykp IHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBwaXhlbCBjbG9ja1xuIik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAm cmVzKSkgeworCQlEUk1fRVJST1IoIlVuYWJsZSB0byBnZXQgcmVzb3VyY2VcbiIpOworCQlyZXR1 cm4gLUVOT0RFVjsKKwl9CisKKwlsZGV2LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgJnJlcyk7CisJaWYgKElTX0VSUihsZGV2LT5yZWdzKSkgeworCQlEUk1fRVJST1IoIlVuYWJs ZSB0byBnZXQgbHRkYyByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihsZGV2LT5yZWdz KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lSUTsgaSsrKSB7CisJCWlycSA9IHBsYXRm b3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlmIChpcnEgPCAwKQorCQkJY29udGludWU7CisKKwkJ cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGlycSwgbHRkY19pcnEsCisJCQkJ CQlsdGRjX2lycV90aHJlYWQsIElSUUZfT05FU0hPVCwKKwkJCQkJCWRldl9uYW1lKGRldiksIGRk ZXYpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBMVERD IGludGVycnVwdFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJaWYgKCFJU19FUlIo cnN0YykpCisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocnN0Yyk7CisKKwkvKiBEaXNhYmxlIGlu dGVycnVwdHMgKi8KKwlyZWdfY2xlYXIobGRldi0+cmVncywgTFREQ19JRVIsCisJCSAgSUVSX0xJ RSB8IElFUl9SUklFIHwgSUVSX0ZVSUUgfCBJRVJfVEVSUklFKTsKKworCXJldCA9IGx0ZGNfZ2V0 X2NhcHMoZGRldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImhhcmR3YXJlIGlkZW50aWZp ZXIgKDB4JTA4eCkgbm90IHN1cHBvcnRlZCFcbiIsCisJCQkgIGxkZXYtPmNhcHMuaHdfdmVyc2lv bik7CisJCXJldHVybiByZXQ7CisJfQorCisJRFJNX0lORk8oImx0ZGMgaHcgdmVyc2lvbiAweCUw OHggLSByZWFkeVxuIiwgbGRldi0+Y2Fwcy5od192ZXJzaW9uKTsKKworCWlmIChsZGV2LT5wYW5l bCkgeworCQllbmNvZGVyID0gbHRkY19yZ2JfZW5jb2Rlcl9jcmVhdGUoZGRldik7CisJCWlmICgh ZW5jb2RlcikgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFJHQiBlbmNvZGVyXG4i KTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWNvbm5lY3RvciA9 IGx0ZGNfcmdiX2Nvbm5lY3Rvcl9jcmVhdGUoZGRldik7CisJCWlmICghY29ubmVjdG9yKSB7CisJ CQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgUkdCIGNvbm5lY3RvclxuIik7CisJCQlyZXQg PSAtRUlOVkFMOworCQkJZ290byBlcnI7CisJCX0KKworCQlyZXQgPSBkcm1fbW9kZV9jb25uZWN0 b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKKwkJaWYgKHJldCkgeworCQkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciB0byBlbmNvZGVyXG4iKTsKKwkJ CWdvdG8gZXJyOworCQl9CisKKwkJZHJtX3BhbmVsX2F0dGFjaChsZGV2LT5wYW5lbCwgY29ubmVj dG9yKTsKKwl9CisKKwljcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjcnRjKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFjcnRjKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRl IGNydGNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBs dGRjX2NydGNfaW5pdChkZGV2LCBjcnRjKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGluaXQgY3J0Y1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGRybV92Ymxh bmtfaW5pdChkZGV2LCBOQl9DUlRDKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVk IGNhbGxpbmcgZHJtX3ZibGFua19pbml0KClcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBB bGxvdyB1c2FnZSBvZiB2Ymxhbmsgd2l0aG91dCBoYXZpbmcgdG8gY2FsbCBkcm1faXJxX2luc3Rh bGwgKi8KKwlkZGV2LT5pcnFfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlpZiAo bGRldi0+cGFuZWwpCisJCWRybV9wYW5lbF9kZXRhY2gobGRldi0+cGFuZWwpOworCisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGxkZXYtPnBpeGVsX2Nsayk7CisKKwlyZXR1cm4gcmV0OworfQorCit2 b2lkIGx0ZGNfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQoreworCXN0cnVjdCBsdGRj X2RldmljZSAqbGRldiA9IGRkZXYtPmRldl9wcml2YXRlOworCisJRFJNX0RFQlVHX0RSSVZFUigi XG4iKTsKKworCWRybV92YmxhbmtfY2xlYW51cChkZGV2KTsKKworCWlmIChsZGV2LT5wYW5lbCkK KwkJZHJtX3BhbmVsX2RldGFjaChsZGV2LT5wYW5lbCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBh cmUobGRldi0+cGl4ZWxfY2xrKTsKK30KKworTU9EVUxFX0FVVEhPUigiUGhpbGlwcGUgQ29ybnUg PHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIllhbm5pY2sgRmVydHJl IDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGYWJpZW4gRGVzc2Vu bmUgPGZhYmllbi5kZXNzZW5uZUBzdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJNaWNrYWVsIFJl dWxpZXIgPG1pY2thZWwucmV1bGllckBzdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNU TWljcm9lbGVjdHJvbmljcyBTVCBEUk0gTFREQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5oIGIvZHJpdmVy cy9ncHUvZHJtL3N0bS9sdGRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZDdhOWM3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5oCkBA IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBT QSAyMDE3CisgKgorICogQXV0aG9yczogUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0 LmNvbT4KKyAqICAgICAgICAgIFlhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+ CisgKiAgICAgICAgICBGYWJpZW4gRGVzc2VubmUgPGZhYmllbi5kZXNzZW5uZUBzdC5jb20+Cisg KiAgICAgICAgICBNaWNrYWVsIFJldWxpZXIgPG1pY2thZWwucmV1bGllckBzdC5jb20+CisgKgor ICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJz aW9uIDIKKyAqLworCisjaWZuZGVmIF9MVERDX0hfCisjZGVmaW5lIF9MVERDX0hfCisKK3N0cnVj dCBsdGRjX2NhcHMgeworCXUzMiBod192ZXJzaW9uOwkJLyogaGFyZHdhcmUgdmVyc2lvbiAqLwor CXUzMiBuYl9sYXllcnM7CQkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGxheWVycyAqLworCXUzMiBy ZWdfb2ZzOwkJLyogcmVnaXN0ZXIgb2Zmc2V0IGZvciBhcHBsaWNhYmxlIHJlZ3MgKi8KKwl1MzIg YnVzX3dpZHRoOwkJLyogYnVzIHdpZHRoICgzMiBvciA2NCBiaXRzKSAqLworCWNvbnN0IHUzMiAq cGl4X2ZtdF9odzsJLyogc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMgKi8KK307CisKK3N0cnVjdCBs dGRjX2RldmljZSB7CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2OworCXZvaWQgX19pb21l bSAqcmVnczsKKwlzdHJ1Y3QgY2xrICpwaXhlbF9jbGs7CS8qIGxjZCBwaXhlbCBjbG9jayAqLwor CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBtdXRleCBlcnJfbG9jazsJLyogcHJv dGVjdGluZyBlcnJvcl9zdGF0dXMgKi8KKwlzdHJ1Y3QgbHRkY19jYXBzIGNhcHM7CisJdTMyIGNs dXRbMjU2XTsJCS8qIGNvbG9yIGxvb2sgdXAgdGFibGUgKi8KKwl1MzIgZXJyb3Jfc3RhdHVzOwor CXUzMiBpcnFfc3RhdHVzOworfTsKKworaW50IGx0ZGNfY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbHRkY19jcnRjX2Rp c2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKTsK K2ludCBsdGRjX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpOwordm9pZCBsdGRjX3VubG9h ZChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldik7CisKKyNlbmRpZgotLSAKMS45LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=