From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [RFC v5 03/12] drm/mediatek: Add DSI sub driver
Date: Wed, 4 Nov 2015 12:45:00 +0100
Message-ID: <1446637509-6418-4-git-send-email-p.zabel@pengutronix.de>
References: <1446637509-6418-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1446637509-6418-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp
bGUgICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMg
fCAgMTkgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggfCAgIDIgKwog
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYyAgICAgfCA3ODcgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5o
ICAgICB8ICA1NCArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIHwg
Mzc1ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90
eC5oIHwgIDIxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTI2MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0
aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
c2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNp
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlf
dHguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlw
aV90eC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCmluZGV4IGJhNmQzZmMuLjBkNGFlZWIg
MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQorKysgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTQsNyArNCw5IEBAIG1lZGlhdGVrLWRy
bS15IDo9IG10a19kcm1fZHJ2Lm8gXAogCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCiAJCSAgbXRr
X2RybV9mYi5vIFwKIAkJICBtdGtfZHJtX2dlbS5vIFwKLQkJICBtdGtfZHJtX3BsYW5lLm8KKwkJ
ICBtdGtfZHJtX3BsYW5lLm8gXAorCQkgIG10a19kc2kubyBcCisJCSAgbXRrX21pcGlfdHgubwog
CiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubwogCmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IGZiY2E5OWYuLmNiYWYyMDggMTAwNjQ0
Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01NTAsOCArNTUwLDI1IEBAIHN0
YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQogCQlnb3RvIGRybV9lcnI7CiAJfQog
CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdGtfZHNpX2RyaXZlcik7CisJaWYg
KHJldCA8IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgRFNJIHBsYXRmb3JtIGRy
aXZlcjogJWRcbiEiLCByZXQpOworCQlnb3RvIGRpc3Bfb3ZsX2VycjsKKwl9CisKKwlyZXQgPSBw
bGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm10a19taXBpX3R4X2RyaXZlcik7CisJaWYgKHJldCA8
IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBUWCBwbGF0Zm9ybSBkcml2
ZXI6ICVkXG4hIiwKKwkJICAgICAgIHJldCk7CisJCWdvdG8gZHNpX2VycjsKKwl9CisKIAlyZXR1
cm4gMDsKIAorZHNpX2VycjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXRrX2RzaV9k
cml2ZXIpOworZGlzcF9vdmxfZXJyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdGtf
ZGlzcF9vdmxfZHJpdmVyKTsKIGRybV9lcnI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo
Jm10a19kcm1fcGxhdGZvcm1fZHJpdmVyKTsKIGVycjoKQEAgLTU2MCw2ICs1NzcsOCBAQCBlcnI6
CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtdGtfZHJtX2V4aXQodm9pZCkKIHsKKwlwbGF0Zm9ybV9k
cml2ZXJfdW5yZWdpc3RlcigmbXRrX21pcGlfdHhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJf
dW5yZWdpc3RlcigmbXRrX2RzaV9kcml2ZXIpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy
KCZtdGtfZGlzcF9vdmxfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXRr
X2RybV9wbGF0Zm9ybV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
cnYuaAppbmRleCA1ZTUxMjhlLi45YzgxYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kcnYuaApAQCAtNTcsNSArNTcsNyBAQCBzdHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKIH07
CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7Citl
eHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2RyaXZlcjsKK2V4dGVybiBzdHJ1
Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlcjsKIAogI2VuZGlmIC8qIE1US19E
Uk1fRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNp
LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZlM2M0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCkBAIC0wLDAgKzEsNzg3IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg
YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk
ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl
ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Bh
bmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50
Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5o
PgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5o
PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHZpZGVvL3Zp
ZGVvbW9kZS5oPgorCisjaW5jbHVkZSAibXRrX2RzaS5oIgorI2luY2x1ZGUgIm10a19taXBpX3R4
LmgiCisKKyNkZWZpbmUgRFNJX1ZJREVPX0ZJRk9fREVQVEgJKDE5MjAgLyA0KQorI2RlZmluZSBE
U0lfSE9TVF9GSUZPX0RFUFRICTY0CisKKyNkZWZpbmUgRFNJX1NUQVJUCQkweDAwCisKKyNkZWZp
bmUgRFNJX0NPTl9DVFJMCQkweDEwCisjZGVmaW5lIERTSV9SRVNFVAkJCUJJVCgwKQorI2RlZmlu
ZSBEU0lfRU4JCQkJQklUKDEpCisKKyNkZWZpbmUgRFNJX01PREVfQ1RSTAkJMHgxNAorI2RlZmlu
ZSBNT0RFCQkJCSgzKQorI2RlZmluZSBDTURfTU9ERQkJCTAKKyNkZWZpbmUgU1lOQ19QVUxTRV9N
T0RFCQkJMQorI2RlZmluZSBTWU5DX0VWRU5UX01PREUJCQkyCisjZGVmaW5lIEJVUlNUX01PREUJ
CQkzCisjZGVmaW5lIEZSTV9NT0RFCQkJQklUKDE2KQorI2RlZmluZSBNSVhfTU9ERQkJCUJJVCgx
NykKKworI2RlZmluZSBEU0lfVFhSWF9DVFJMCQkweDE4CisjZGVmaW5lIFZDX05VTQkJCQkoMiA8
PCAwKQorI2RlZmluZSBMQU5FX05VTQkJCSgweGYgPDwgMikKKyNkZWZpbmUgRElTX0VPVAkJCQlC
SVQoNikKKyNkZWZpbmUgTlVMTF9FTgkJCQlCSVQoNykKKyNkZWZpbmUgVEVfRlJFRVJVTgkJCUJJ
VCg4KQorI2RlZmluZSBFWFRfVEVfRU4JCQlCSVQoOSkKKyNkZWZpbmUgRVhUX1RFX0VER0UJCQlC
SVQoMTApCisjZGVmaW5lIE1BWF9SVE5fU0laRQkJCSgweGYgPDwgMTIpCisjZGVmaW5lIEhTVFhf
Q0tMUF9FTgkJCUJJVCgxNikKKworI2RlZmluZSBEU0lfUFNDVFJMCQkweDFjCisjZGVmaW5lIERT
SV9QU19XQwkJCTB4M2ZmZgorI2RlZmluZSBEU0lfUFNfU0VMCQkJKDMgPDwgMTYpCisjZGVmaW5l
IFBBQ0tFRF9QU18xNkJJVF9SR0I1NjUJCSgwIDw8IDE2KQorI2RlZmluZSBMT09TRUxZX1BTXzE4
QklUX1JHQjY2NgkJKDEgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18xOEJJVF9SR0I2NjYJCSgy
IDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMjRCSVRfUkdCODg4CQkoMyA8PCAxNikKKworI2Rl
ZmluZSBEU0lfVlNBX05MCQkweDIwCisjZGVmaW5lIERTSV9WQlBfTkwJCTB4MjQKKyNkZWZpbmUg
RFNJX1ZGUF9OTAkJMHgyOAorI2RlZmluZSBEU0lfVkFDVF9OTAkJMHgyQworI2RlZmluZSBEU0lf
SFNBX1dDCQkweDUwCisjZGVmaW5lIERTSV9IQlBfV0MJCTB4NTQKKyNkZWZpbmUgRFNJX0hGUF9X
QwkJMHg1OAorCisjZGVmaW5lIERTSV9IU1RYX0NLTF9XQwkJMHg2NAorCisjZGVmaW5lIERTSV9Q
SFlfTENDT04JCTB4MTA0CisjZGVmaW5lIExDX0hTX1RYX0VOCQkJQklUKDApCisjZGVmaW5lIExD
X1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTENfV0FLRVVQX0VOCQkJQklUKDIpCisKKyNkZWZp
bmUgRFNJX1BIWV9MRDBDT04JCTB4MTA4CisjZGVmaW5lIExEMF9IU19UWF9FTgkJCUJJVCgwKQor
I2RlZmluZSBMRDBfVUxQTV9FTgkJCUJJVCgxKQorI2RlZmluZSBMRDBfV0FLRVVQX0VOCQkJQklU
KDIpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMAkweDExMAorI2RlZmluZSBMUFgJCQkJKDB4
ZmYgPDwgMCkKKyNkZWZpbmUgSFNfUFJQUgkJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBIU19aRVJP
CQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBIU19UUkFJTAkJCSgweGZmIDw8IDI0KQorCisjZGVm
aW5lIERTSV9QSFlfVElNRUNPTjEJMHgxMTQKKyNkZWZpbmUgVEFfR08JCQkJKDB4ZmYgPDwgMCkK
KyNkZWZpbmUgVEFfU1VSRQkJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBUQV9HRVQJCQkJKDB4ZmYg
PDwgMTYpCisjZGVmaW5lIERBX0hTX0VYSVQJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lf
UEhZX1RJTUVDT04yCTB4MTE4CisjZGVmaW5lIENPTlRfREVUCQkJKDB4ZmYgPDwgMCkKKyNkZWZp
bmUgQ0xLX1pFUk8JCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgQ0xLX1RSQUlMCQkJKDB4ZmYgPDwg
MjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMwkweDExYworI2RlZmluZSBDTEtfSFNfUFJQ
UgkJCSgweGZmIDw8IDApCisjZGVmaW5lIENMS19IU19QT1NUCQkJKDB4ZmYgPDwgOCkKKyNkZWZp
bmUgQ0xLX0hTX0VYSVQJCQkoMHhmZiA8PCAxNikKKworI2RlZmluZSBOU19UT19DWUNMRShuLCBj
KSAgICAoKG4pIC8gYyArICgoKG4pICUgYykgPyAxIDogMCkpCisKK3N0YXRpYyB2b2lkIG10a19k
c2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIGRh
dGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPmRzaV9yZWdfYmFzZSArIG9mZnNldCk7CisK
Kwl3cml0ZWwoKHRlbXAgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBkc2ktPmRzaV9yZWdfYmFz
ZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9waHlfdGltY29uZmlnKHN0cnVjdCBt
dGtfZHNpICpkc2kpCit7CisJdTMyIHRpbWNvbjAsIHRpbWNvbjEsIHRpbWNvbjIsIHRpbWNvbjM7
CisJdW5zaWduZWQgaW50IHVpLCBjeWNsZV90aW1lOworCXVuc2lnbmVkIGludCBscHg7CisKKwl1
aSA9IDEwMDAgLyBkc2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJY3ljbGVfdGltZSA9IDgwMDAgLyBk
c2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJbHB4ID0gNTsKKworCXRpbWNvbjAgPSAoOCA8PCAyNCkg
fCAoMHhhIDw8IDE2KSB8ICgweDYgPDwgOCkgfCBscHg7CisJdGltY29uMSA9ICg3IDw8IDI0KSB8
ICg1ICogbHB4IDw8IDE2KSB8ICgoMyAqIGxweCkgLyAyKSA8PCA4IHwKKwkJICAoNCAqIGxweCk7
CisJdGltY29uMiA9ICgoTlNfVE9fQ1lDTEUoMHg2NCwgY3ljbGVfdGltZSkgKyAweGEpIDw8IDI0
KSB8CisJCSAgKE5TX1RPX0NZQ0xFKDB4MTUwLCBjeWNsZV90aW1lKSA8PCAxNik7CisJdGltY29u
MyA9ICgyICogbHB4KSA8PCAxNiB8IE5TX1RPX0NZQ0xFKDgwICsgNTIgKiB1aSwgY3ljbGVfdGlt
ZSkgPDwgOCB8CisJCSAgIE5TX1RPX0NZQ0xFKDB4NDAsIGN5Y2xlX3RpbWUpOworCisJd3JpdGVs
KHRpbWNvbjAsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVs
KHRpbWNvbjEsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1BIWV9USU1FQ09OMSk7CisJd3JpdGVs
KHRpbWNvbjIsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1BIWV9USU1FQ09OMik7CisJd3JpdGVs
KHRpbWNvbjMsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1BIWV9USU1FQ09OMyk7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19kc2lfY2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10
a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCBEU0lfRU4pOworfQorCitzdGF0
aWMgdm9pZCBtdGtfZHNpX2Nsa19kaXNhYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRr
X2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIDApOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHNpX3Jlc2V0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRz
aSwgRFNJX0NPTl9DVFJMLCBEU0lfUkVTRVQsIERTSV9SRVNFVCk7CisJbXRrX2RzaV9tYXNrKGRz
aSwgRFNJX0NPTl9DVFJMLCBEU0lfUkVTRVQsIDApOworfQorCitzdGF0aWMgaW50IG10a19kc2lf
cG93ZXJvbihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9k
ZXZpY2UgKmRldiA9IGRzaS0+ZHJtX2RldjsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhl
bF9jbG9jayAvIDEwMDApICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Ns
b2NrIHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEw
MDAuCisJICogbWlwaV9yYXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0
aGUgcGl4ZWwgY2xrIGluIG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkg
Ki8KKwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICog
MTAwMCAqIDEwKTsKKworCW10a19taXBpX3R4X3NldF9kYXRhX3JhdGUoZHNpLT5waHksIGRzaS0+
ZGF0YV9yYXRlKTsKKwlwaHlfcG93ZXJfb24oZHNpLT5waHkpOworCisJcmV0ID0gY2xrX3ByZXBh
cmVfZW5hYmxlKGRzaS0+ZHNpMF9lbmdpbmVfY2xrX2NnKTsKKwlpZiAocmV0IDwgMCkgeworCQlk
ZXZfZXJyKGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIGRzaTBfZW5naW5lX2Nsa19jZyAlZFxuIiwg
cmV0KTsKKwkJZ290byBlcnJfZHNpMF9lbmdpbmVfY2xrX2NnOworCX0KKworCXJldCA9IGNsa19w
cmVwYXJlX2VuYWJsZShkc2ktPmRzaTBfZGlnaXRhbF9jbGtfY2cpOworCWlmIChyZXQgPCAwKSB7
CisJCWRldl9lcnIoZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgZHNpMF9kaWdpdGFsX2Nsa19jZyAl
ZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZHNpMF9kaWdpdGFsX2Nsa19jZzsKKwl9CisKKwltdGtf
ZHNpX2Nsa19lbmFibGUoZHNpKTsKKwltdGtfZHNpX3Jlc2V0KGRzaSk7CisJZHNpX3BoeV90aW1j
b25maWcoZHNpKTsKKworCXJldHVybiAwOworCitlcnJfZHNpMF9kaWdpdGFsX2Nsa19jZzoKKwlj
bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kc2kwX2VuZ2luZV9jbGtfY2cpOworCitlcnJfZHNp
MF9lbmdpbmVfY2xrX2NnOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9jbGtf
dWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNp
LCBEU0lfUEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJ
X1BIWV9MQ0NPTiwgTENfVUxQTV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9jbGtfdWxw
X21vZGVfbGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBE
U0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ
X0xDQ09OLCBMQ19XQUtFVVBfRU4sIExDX1dBS0VVUF9FTik7CisJbXRrX2RzaV9tYXNrKGRzaSwg
RFNJX1BIWV9MQ0NPTiwgTENfV0FLRVVQX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2xh
bmUwX3VscF9tb2RlX2VudGVyKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNr
KGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9IU19UWF9FTiwgMCk7CisJbXRrX2RzaV9tYXNrKGRz
aSwgRFNJX1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNp
X2xhbmUwX3VscF9tb2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9t
YXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAwKTsKKwltdGtfZHNpX21hc2so
ZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgTEQwX1dBS0VVUF9FTik7CisJbXRr
X2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9XQUtFVVBfRU4sIDApOworfQorCitz
dGF0aWMgYm9vbCBkc2lfY2xrX2hzX3N0YXRlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMy
IHRtcF9yZWcxOworCisJdG1wX3JlZzEgPSByZWFkbChkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9Q
SFlfTENDT04pOworCXJldHVybiAoKHRtcF9yZWcxICYgTENfSFNfVFhfRU4pID09IDEpID8gdHJ1
ZSA6IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX2hzX21vZGUoc3RydWN0IG10a19k
c2kgKmRzaSwgYm9vbCBlbnRlcikKK3sKKwlpZiAoZW50ZXIgJiYgIWRzaV9jbGtfaHNfc3RhdGUo
ZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIExD
X0hTX1RYX0VOKTsKKwllbHNlIGlmICghZW50ZXIgJiYgZHNpX2Nsa19oc19zdGF0ZShkc2kpKQor
CQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB2
aWRfbW9kZSA9IENNRF9NT0RFOworCisJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01P
REVfVklERU8pIHsKKwkJdmlkX21vZGUgPSBTWU5DX1BVTFNFX01PREU7CisKKwkJaWYgKChkc2kt
Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJgorCQkgICAgIShkc2kt
Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQkJdmlkX21v
ZGUgPSBCVVJTVF9NT0RFOworCX0KKworCXdyaXRlbCh2aWRfbW9kZSwgZHNpLT5kc2lfcmVnX2Jh
c2UgKyBEU0lfTU9ERV9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BzX2NvbnRyb2xfdmFj
dChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXN0cnVjdCB2aWRlb21vZGUgKnZtID0gJmRzaS0+
dm07CisJdTMyIGRzaV9idWZfYnBwLCBwc193YzsKKwl1MzIgcHNfYnBwX21vZGU7CisKKwlpZiAo
ZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNpX2J1Zl9icHAgPSAyOwor
CWVsc2UKKwkJZHNpX2J1Zl9icHAgPSAzOworCisJcHNfd2MgPSB2bS0+aGFjdGl2ZSAqIGRzaV9i
dWZfYnBwOworCXBzX2JwcF9tb2RlID0gcHNfd2M7CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7
CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNf
MjRCSVRfUkdCODg4OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCXBz
X2JwcF9tb2RlIHw9IFBBQ0tFRF9QU18xOEJJVF9SR0I2NjY7CisJCWJyZWFrOworCWNhc2UgTUlQ
SV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXBzX2JwcF9tb2RlIHw9IExPT1NFTFlfUFNfMThC
SVRfUkdCNjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCXBzX2Jw
cF9tb2RlIHw9IFBBQ0tFRF9QU18xNkJJVF9SR0I1NjU7CisJCWJyZWFrOworCX0KKworCXdyaXRl
bCh2bS0+dmFjdGl2ZSwgZHNpLT5kc2lfcmVnX2Jhc2UgKyBEU0lfVkFDVF9OTCk7CisJd3JpdGVs
KHBzX2JwcF9tb2RlLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9QU0NUUkwpOworCXdyaXRlbChw
c193YywgZHNpLT5kc2lfcmVnX2Jhc2UgKyBEU0lfSFNUWF9DS0xfV0MpOworfQorCitzdGF0aWMg
dm9pZCBkc2lfcnh0eF9jb250cm9sKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMyIHRtcF9y
ZWc7CisKKwlzd2l0Y2ggKGRzaS0+bGFuZXMpIHsKKwljYXNlIDE6CisJCXRtcF9yZWcgPSAxIDw8
IDI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wX3JlZyA9IDMgPDwgMjsKKwkJYnJlYWs7CisJ
Y2FzZSAzOgorCQl0bXBfcmVnID0gNyA8PCAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRtcF9y
ZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3JlZyA9IDB4ZiA8PCAy
OworCQlicmVhazsKKwl9CisKKwl3cml0ZWwodG1wX3JlZywgZHNpLT5kc2lfcmVnX2Jhc2UgKyBE
U0lfVFhSWF9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BzX2NvbnRyb2woc3RydWN0IG10
a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCXUzMiB0bXBf
cmVnOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4
ODoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJCWRzaV90bXBfYnVmX2Jw
cCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJdG1wX3JlZyA9
IExPT1NFTFlfUFNfMThCSVRfUkdCNjY2OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVh
azsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQl0bXBfcmVnID0gUEFDS0VE
X1BTXzE4QklUX1JHQjY2NjsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2Fz
ZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzE2QklUX1JHQjU2
NTsKKwkJZHNpX3RtcF9idWZfYnBwID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3Jl
ZyA9IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJy
ZWFrOworCX0KKworCXRtcF9yZWcgKz0gZHNpLT52bS5oYWN0aXZlICogZHNpX3RtcF9idWZfYnBw
ICYgRFNJX1BTX1dDOworCXdyaXRlbCh0bXBfcmVnLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9Q
U0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10
a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRl
OworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGlu
dCBob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZf
YnBwOworCisJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZv
cm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVs
c2UKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2kt
PmRzaV9yZWdfYmFzZSArIERTSV9WU0FfTkwpOworCXdyaXRlbCh2bS0+dmJhY2tfcG9yY2gsIGRz
aS0+ZHNpX3JlZ19iYXNlICsgRFNJX1ZCUF9OTCk7CisJd3JpdGVsKHZtLT52ZnJvbnRfcG9yY2gs
IGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1ZGUF9OTCk7CisJd3JpdGVsKHZtLT52YWN0aXZlLCBk
c2ktPmRzaV9yZWdfYmFzZSArIERTSV9WQUNUX05MKTsKKworCWhvcml6b250YWxfc3luY19hY3Rp
dmVfYnl0ZSA9ICh2bS0+aHN5bmNfbGVuICogZHNpX3RtcF9idWZfYnBwIC0gMTApOworCisJaWYg
KGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJaG9y
aXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSA9CisJCQkodm0tPmhiYWNrX3BvcmNoICogZHNpX3RtcF9i
dWZfYnBwIC0gMTApOworCWVsc2UKKwkJaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSA9ICgodm0t
PmhiYWNrX3BvcmNoICsgdm0tPmhzeW5jX2xlbikgKgorCQkJZHNpX3RtcF9idWZfYnBwIC0gMTAp
OworCisJaG9yaXpvbnRhbF9mcm9udHBvcmNoX2J5dGUgPSAodm0tPmhmcm9udF9wb3JjaCAqIGRz
aV90bXBfYnVmX2JwcCAtIDEyKTsKKworCXdyaXRlbChob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5
dGUsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX0hTQV9XQyk7CisJd3JpdGVsKGhvcml6b250YWxf
YmFja3BvcmNoX2J5dGUsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX0hCUF9XQyk7CisJd3JpdGVs
KGhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlLCBkc2ktPmRzaV9yZWdfYmFzZSArIERTSV9IRlBf
V0MpOworCisJZHNpX3BzX2NvbnRyb2woZHNpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9z
dGFydChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXdyaXRlbCgwLCBkc2ktPmRzaV9yZWdfYmFz
ZSArIERTSV9TVEFSVCk7CisJd3JpdGVsKDEsIGRzaS0+ZHNpX3JlZ19iYXNlICsgRFNJX1NUQVJU
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1Y3QgbXRrX2RzaSAqZHNp
KQoreworCW10a19kc2lfY2xrX2Rpc2FibGUoZHNpKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFy
ZShkc2ktPmRzaTBfZW5naW5lX2Nsa19jZyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+
ZHNpMF9kaWdpdGFsX2Nsa19jZyk7CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX291dHB1dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7
CisJaW50IHJldDsKKworCWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2kt
PnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJN
X0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQor
CX0KKworCXJldCA9IG10a19kc2lfcG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURS
TV9FUlJPUigiZmFpbGVkIHRvIHBvd2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlk
c2lfcnh0eF9jb250cm9sKGRzaSk7CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJ
ZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7
CisJZHNpX3NldF9tb2RlKGRzaSk7CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNp
X2NvbmZpZ192ZG9fdGltaW5nKGRzaSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xr
X2hzX21vZGUoZHNpLCAxKTsKKworCW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxl
ZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0
IG10a19kc2kgKmRzaSkKK3sKKwlpZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYg
KGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJ
CQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47
CisJCX0KKwl9CisKKwlkc2lfbGFuZTBfdWxwX21vZGVfZW50ZXIoZHNpKTsKKwlkc2lfY2xrX3Vs
cF9tb2RlX2VudGVyKGRzaSk7CisJbXRrX2RzaV9wb3dlcm9mZihkc2kpOworCisJZHNpLT5lbmFi
bGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5jb2Rlcl9kZXN0cm95KHN0
cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29k
ZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIG10a19kc2lf
ZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IG10a19kc2lfZW5jb2Rlcl9kZXN0cm95LAor
fTsKKworc3RhdGljIGJvb2wgbXRrX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRybV9l
bmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k
ZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v
ZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5jb2Rlcl9t
b2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph
ZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rl
cik7CisKKwlkc2ktPnZtLnBpeGVsY2xvY2sgPSBhZGp1c3RlZC0+Y2xvY2s7CisJZHNpLT52bS5o
YWN0aXZlID0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaGJhY2tfcG9yY2ggPSBhZGp1
c3RlZC0+aHRvdGFsIC0gYWRqdXN0ZWQtPmhzeW5jX2VuZDsKKwlkc2ktPnZtLmhmcm9udF9wb3Jj
aCA9IGFkanVzdGVkLT5oc3luY19zdGFydCAtIGFkanVzdGVkLT5oZGlzcGxheTsKKwlkc2ktPnZt
LmhzeW5jX2xlbiA9IGFkanVzdGVkLT5oc3luY19lbmQgLSBhZGp1c3RlZC0+aHN5bmNfc3RhcnQ7
CisKKwlkc2ktPnZtLnZhY3RpdmUgPSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52YmFj
a19wb3JjaCA9IGFkanVzdGVkLT52dG90YWwgLSBhZGp1c3RlZC0+dnN5bmNfZW5kOworCWRzaS0+
dm0udmZyb250X3BvcmNoID0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0IC0gYWRqdXN0ZWQtPnZkaXNw
bGF5OworCWRzaS0+dm0udnN5bmNfbGVuID0gYWRqdXN0ZWQtPnZzeW5jX2VuZCAtIGFkanVzdGVk
LT52c3luY19zdGFydDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUo
c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBl
bmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCW10a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29k
ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVu
Y29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZW5hYmxlKGRzaSk7Cit9CisKK3N0YXRpYyBlbnVt
IGRybV9jb25uZWN0b3Jfc3RhdHVzIG10a19kc2lfY29ubmVjdG9yX2RldGVjdCgKKwlzdHJ1Y3Qg
ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXJldHVybiBjb25uZWN0
b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9jb25uZWN0b3Jf
ZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0
b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0
b3IpOworfQorCitzdGF0aWMgaW50IG10a19kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3Qg
ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb25u
ZWN0b3JfdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2Rlcyhk
c2ktPnBhbmVsKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqbXRrX2RzaV9jb25u
ZWN0b3JfYmVzdF9lbmNvZGVyKAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor
eworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9fZHNpKGNvbm5lY3Rvcik7CisK
KwlyZXR1cm4gJmRzaS0+ZW5jb2RlcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5j
b2Rlcl9oZWxwZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9k
ZV9maXh1cCA9IG10a19kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5tb2RlX3NldCA9IG10a19k
c2lfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJsZSA9IG10a19kc2lfZW5jb2Rlcl9kaXNhYmxl
LAorCS5lbmFibGUgPSBtdGtfZHNpX2VuY29kZXJfZW5hYmxlLAorfTsKKworc3RhdGljIGNvbnN0
IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19kc2lfY29ubmVjdG9yX2Z1bmNzID0gewor
CS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IG10
a19kc2lfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVf
c2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IG10a19kc2lfY29ubmVjdG9yX2Rl
c3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5h
dG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxp
Y2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j
b25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nv
bm5lY3Rvcl9oZWxwZXJfZnVuY3MKKwltdGtfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7
CisJLmdldF9tb2RlcyA9IG10a19kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNv
ZGVyID0gbXRrX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIGludCBt
dGtfZHJtX2F0dGFjaF9sY21fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJ
ICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50IHJldDsKKworCWVuY29k
ZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIgPSBlbmNvZGVyOworCXJldCA9
IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdlKTsKKwlpZiAocmV0KSB7CisJ
CURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8gZHJtXG4iKTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2NyZWF0ZV9j
b25uX2VuYyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1f
ZW5jb2Rlcl9pbml0KGRzaS0+ZHJtX2RldiwgJmRzaS0+ZW5jb2RlciwKKwkJCSAgICAgICAmbXRr
X2RzaV9lbmNvZGVyX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX0RTSSk7CisKKwlpZiAocmV0KSB7
CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1
cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtf
ZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRj
cyA9IDE7CisKKwkvKiBQcmUtZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYgdGhlcmUncyBh
IGJyaWRnZSAqLworCXJldCA9IG10a19kcm1fYXR0YWNoX2xjbV9icmlkZ2UoZHNpLT5icmlkZ2Us
ICZkc2ktPmVuY29kZXIpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXJldCA9IGRybV9j
b25uZWN0b3JfaW5pdChkc2ktPmRybV9kZXYsICZkc2ktPmNvbm4sCisJCQkJICZtdGtfZHNpX2Nv
bm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJaWYgKHJldCkg
eworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb25uZWN0b3IgaW5pdCB0byBkcm1cbiIpOworCQln
b3RvIGVycmNvbm5lY3RvcjsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+
Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29u
bmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJG
YWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRybVxuIik7CisJCWdvdG8gZXJyY29ubmVj
dG9ycmVnOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisJZHJt
X21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVuY29kZXIp
OworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBh
bmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g
YXR0YWN0IHBhbmVsIHRvIGRybVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVy
biAwOworCitlcnJjb25uZWN0b3I6CisJZHJtX2VuY29kZXJfY2xlYW51cCgmZHNpLT5lbmNvZGVy
KTsKK2VycmNvbm5lY3RvcnJlZzoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7
CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Rlc3Ryb3lfY29ubl9l
bmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVu
Y29kZXIpOworCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHNpLT5jb25uKTsKKwlkcm1fY29u
bmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9iaW5k
KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQor
eworCWludCByZXQ7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp
OworCisJZHNpLT5kcm1fZGV2ID0gZGF0YTsKKworCXJldCA9IG10a19kc2lfY3JlYXRlX2Nvbm5f
ZW5jKGRzaSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxl
ZCB3aXRoICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQor
CitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk
ZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kc2kgKmRz
aTsKKworCWRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYp
KTsKKwltdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoZHNpKTsKKworCWRzaS0+ZHJtX2RldiA9IE5V
TEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZHNpX2NvbXBv
bmVudF9vcHMgPSB7CisJLmJpbmQgPSBtdGtfZHNpX2JpbmQsCisJLnVuYmluZCA9IG10a19kc2lf
dW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k
ZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKwlzdHJ1Y3QgZGV2aWNlICpk
ZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3RlX25vZGUsICplbmRw
b2ludDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1f
a3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJZHNpLT5tb2RlX2ZsYWdz
ID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRTsK
Kwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5sYW5lcyA9IDQ7CisK
KwllbmRwb2ludCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVM
TCk7CisJaWYgKGVuZHBvaW50KSB7CisJCXJlbW90ZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90
ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7CisJCWlmICghcmVtb3RlX25vZGUpIHsKKwkJCWRldl9l
cnIoZGV2LCAiTm8gcGFuZWwgY29ubmVjdGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9
CisKKwkJZHNpLT5icmlkZ2UgPSBvZl9kcm1fZmluZF9icmlkZ2UocmVtb3RlX25vZGUpOworCQlk
c2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocmVtb3RlX25vZGUpOworCQlvZl9ub2RlX3B1
dChyZW1vdGVfbm9kZSk7CisJCWlmICghZHNpLT5icmlkZ2UgJiYgIWRzaS0+cGFuZWwpIHsKKwkJ
CWRldl9pbmZvKGRldiwgIldhaXRpbmcgZm9yIGJyaWRnZSBvciBwYW5lbCBkcml2ZXJcbiIpOwor
CQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCX0KKwl9CisKKwlkc2ktPmRzaTBfZW5naW5lX2Ns
a19jZyA9IGRldm1fY2xrX2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHNp
MF9lbmdpbmVfY2xrX2NnKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZHNpMF9lbmdpbmVfY2xr
X2NnKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGVuZ2luZSBjbG9jazogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5kc2kwX2RpZ2l0YWxfY2xrX2NnID0g
ZGV2bV9jbGtfZ2V0KGRldiwgImRpZ2l0YWwiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHNpMF9kaWdp
dGFsX2Nsa19jZykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRzaTBfZGlnaXRhbF9jbGtfY2cp
OworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJl
dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw
ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHNpLT5kc2lfcmVnX2Jhc2UgPSBkZXZtX2lvcmVt
YXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHNpX3JlZ19iYXNlKSkg
eworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZHNpX3JlZ19iYXNlKTsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gaW9yZW1hcCBtZW1vcnk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K
KworCWRzaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImRwaHkiKTsKKwlpZiAoSVNfRVJSKGRz
aS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5KTsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gZ2V0IE1JUEktRFBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKworCXJldCA9IGNvbXBvbmVudF9h
ZGQoJnBkZXYtPmRldiwgJm10a19kc2lfY29tcG9uZW50X29wcyk7CisJaWYgKHJldCkgeworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgRFNJIGNvbXBvbmVudFxuIik7CisJCXJldHVybiAt
RVBST0JFX0RFRkVSOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kc2lf
cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kc2kg
KmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX291dHB1dF9kc2lfZGlz
YWJsZShkc2kpOworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kc2lfY29tcG9uZW50
X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBt
dGtfZHNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpk
c2k7CisKKwlkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW10a19vdXRwdXRfZHNpX2Rp
c2FibGUoZHNpKTsKKwlEUk1fSU5GTygiZHNpIHN1c3BlbmQgc3VjY2VzcyFcbiIpOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2
KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisKKwlkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2
KTsKKworCW10a19vdXRwdXRfZHNpX2VuYWJsZShkc2kpOworCURSTV9JTkZPKCJkc2kgcmVzdW1l
IHN1Y2Nlc3MhXG4iKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCitTSU1QTEVfREVWX1BNX09Q
UyhtdGtfZHNpX3BtX29wcywgbXRrX2RzaV9zdXNwZW5kLCBtdGtfZHNpX3Jlc3VtZSk7CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7
IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiIH0sCisJeyB9LAorfTsKKworc3Ry
dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHNp
X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFt
ZSA9ICJtdGstZHNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RzaV9vZl9tYXRjaCwKKwkJ
LnBtID0gJm10a19kc2lfcG1fb3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kc2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNp
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhMTQ2YgotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX01U
S19EU0lfSF8KKyNkZWZpbmUgX01US19EU0lfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o
PgorCitzdHJ1Y3QgcGh5OworCitzdHJ1Y3QgbXRrX2RzaSB7CisJc3RydWN0IGRybV9kZXZpY2Ug
KmRybV9kZXY7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25u
ZWN0b3IgY29ubjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRn
ZSAqYnJpZGdlOworCXN0cnVjdCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqZHNpX3JlZ19i
YXNlOworCXZvaWQgX19pb21lbSAqZHNpX3R4X3JlZ19iYXNlOworCisJc3RydWN0IGNsayAqZHNp
MF9lbmdpbmVfY2xrX2NnOworCXN0cnVjdCBjbGsgKmRzaTBfZGlnaXRhbF9jbGtfY2c7CisKKwl1
MzIgZGF0YV9yYXRlOworCisJdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWVudW0gbWlwaV9k
c2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJc3RydWN0IHZp
ZGVvbW9kZSB2bTsKKwlib29sIGVuYWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt
dGtfZHNpICplbmNvZGVyX3RvX2RzaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmUpCit7CisJcmV0dXJu
IGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgbXRrX2RzaSwgZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgc3RydWN0IG10a19kc2kgKmNvbm5lY3Rvcl90b19kc2koc3RydWN0IGRybV9jb25uZWN0
b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RzaSwgY29ubik7
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t
aXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDk3NWNkCi0tLSAvZGV2L251bGwKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKQEAgLTAsMCArMSwzNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgv
Y2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgor
I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj
ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2RlZmluZSBNSVBJVFhfRFNJX0NP
TgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RT
SV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMgPDwg
MikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5lIFJHX0RTSV9Q
SFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlCSVQo
MTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2RlZmluZSBNSVBJ
VFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBSR19EU0lfTE5UQ19MRE9PVVRfRU4JCUJJ
VCgwKQorI2RlZmluZSBSR19EU0lfTE5UQ19DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19E
U0lfTE5UQ19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhfSVBM
VVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2Rl
ZmluZSBSR19EU0lfTE5UQ19MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVENf
TFBDRF9JTUxVUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlRDX1JUX0NPREUJCSgweGYgPDwg
OCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJMHgwOAorI2RlZmluZSBSR19EU0lf
TE5UMF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMF9DS0xBTkVfRU4JCUJJ
VCgxKQorI2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJH
X0RTSV9MTlQwX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9J
TUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lQTFVTCQlCSVQoNSkKKyNk
ZWZpbmUgUkdfRFNJX0xOVDBfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5U
MF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUxCTB4
MGMKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ
X0xOVDFfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JUExVUzEJ
CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5l
IFJHX0RTSV9MTlQxX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBD
RF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQQ0RfSU1JTlVTCQlCSVQoNikK
KyNkZWZpbmUgUkdfRFNJX0xOVDFfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElU
WF9EU0lfREFUQV9MQU5FMgkweDEwCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xET09VVF9FTgkJQklU
KDApCisjZGVmaW5lIFJHX0RTSV9MTlQyX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RT
SV9MTlQyX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9JUExV
UzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVm
aW5lIFJHX0RTSV9MTlQyX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMl9M
UENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQyX1JUX0NPREUJCSgweGYgPDwg
OCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAorI2RlZmluZSBSR19EU0lf
TE5UM19MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UM19DS0xBTkVfRU4JCUJJ
VCgxKQorI2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJH
X0RTSV9MTlQzX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9J
TUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lQTFVTCQlCSVQoNSkKKyNk
ZWZpbmUgUkdfRFNJX0xOVDNfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5U
M19SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9UT1BfQ09OCTB4NDAK
KyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVF9I
U19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0VOCQlCSVQoMikK
KyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9M
TlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RTSV9MTlRfQUlPX1NFTAkJ
KDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEpCisjZGVmaW5l
IFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBSR19EU0lfUFJFU0VSVkUJ
CQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkweDQ0CisjZGVmaW5lIFJH
X0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JHX0NLRU4JCQlCSVQoMSkK
KyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZpbmUgUkdfRFNJX0JHX0ZB
U1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4M2ZmZmYgPDwg
NSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2RlZmluZSBSR19EU0lfVjEw
X1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8IDExKQorI2Rl
ZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBSR19EU0lfVjAzMl9TRUwJ
CQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkKKyNkZWZpbmUg
UkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0RTSV9CR19SMl9UUklN
CQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjAJMHg1MAorI2RlZmlu
ZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX0RJVl9N
U0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJFRElWCQkoMyA8PCAxKQor
I2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2RlZmluZSBSR19EU0lfTVBQ
TExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExfUE9TRElWCQkoNyA8PCA3
KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkKKyNkZWZpbmUgUkdfRFNJ
X01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lfTVBQTExfVk9EX0VOCQlC
SVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0CisjZGVmaW5lIFJHX0RT
SV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0Nf
UEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4JCUJJVCgyKQor
I2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8PCAxNikKKworI2RlZmlu
ZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9QV1IJ
MHg2OAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTgkJQklUKDApCisjZGVmaW5lIFJH
X0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9Q
V1JfQUNLCUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTAkweDgwCisjZGVmaW5l
IFNXX0NUUkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1NXX0NUUkxfQ09OMAkw
eDg0CisjZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQorI2RlZmluZSBTV19MTlRD
X0xQVFhfT0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJCQlCSVQoMikKKyNkZWZp
bmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX1BSRV9PRQkJ
QklUKDQpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQorI2RlZmluZSBTV19MTlRD
X0hTVFhfWkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9QUkVfT0UJCUJJVCg3
KQorI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKKyNkZWZpbmUgU1dfTE5UMF9MUFRY
X1AJCQlCSVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04JCQlCSVQoMTApCisjZGVmaW5lIFNX
X0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUgU1dfTE5UMF9IU1RYX09FCQkJQklU
KDEyKQorI2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQoMTMpCisjZGVmaW5lIFNXX0xOVDFf
TFBUWF9QUkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX09FCQkJQklUKDE1KQor
I2RlZmluZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX04J
CQlCSVQoMTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJVCgxOCkKKyNkZWZpbmUg
U1dfTE5UMV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBTV19MTlQyX0xQVFhfUFJFX09FCQlC
SVQoMjApCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkKKyNkZWZpbmUgU1dfTE5U
Ml9MUFRYX1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9OCQkJQklUKDIzKQorI2Rl
ZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisjZGVmaW5lIFNXX0xOVDJfSFNUWF9P
RQkJCUJJVCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7
CisJdW5zaWduZWQgaW50IGRhdGFfcmF0ZTsKK307CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4
X21hc2soc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywK
KwkJCSAgICAgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsg
b2Zmc2V0KTsKKworCXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIG1pcGlf
dHgtPnJlZ3MgKyBvZmZzZXQpOworfQorCitpbnQgbXRrX21pcGlfdHhfc2V0X2RhdGFfcmF0ZShz
dHJ1Y3QgcGh5ICpwaHksIHVuc2lnbmVkIGludCBkYXRhX3JhdGUpCit7CisJc3RydWN0IG10a19t
aXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwlpZiAoZGF0YV9yYXRl
IDwgNTAgfHwgZGF0YV9yYXRlID4gMTI1MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltaXBpX3R4
LT5kYXRhX3JhdGUgPSBkYXRhX3JhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt
dGtfbWlwaV90eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBp
X3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJdW5zaWduZWQgaW50IHR4ZGl2
LCB0eGRpdjAsIHR4ZGl2MTsKKwl1NjQgcGN3OworCisJaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+
PSA1MDApIHsKKwkJdHhkaXYgPSAxOworCQl0eGRpdjAgPSAwOworCQl0eGRpdjEgPSAwOworCX0g
ZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDI1MCkgeworCQl0eGRpdiA9IDI7CisJCXR4
ZGl2MCA9IDE7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUg
Pj0gMTI1KSB7CisJCXR4ZGl2ID0gNDsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0gMDsKKwl9
IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+IDYyKSB7CisJCXR4ZGl2ID0gODsKKwkJdHhk
aXYwID0gMjsKKwkJdHhkaXYxID0gMTsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+
PSA1MCkgeworCQl0eGRpdiA9IDE2OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAyOworCX0g
ZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW10a19taXBpX3R4X21hc2sobWlwaV90
eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkgUkdfRFNJX1ZPVVRfTVNLIHwgUkdfRFNJX0JHX0NL
RU4gfCBSR19EU0lfQkdfQ09SRV9FTiwKKwkJCSAoNCA8PCAyMCkgfCAoNCA8PCAxNykgfCAoNCA8
PCAxNCkgfAorCQkJICg0IDw8IDExKSB8ICg0IDw8IDgpIHwgKDQgPDwgNSkgfAorCQkJIFJHX0RT
SV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4pOworCisJdXNsZWVwX3JhbmdlKDMwLCAxMDAp
OworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkg
UkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUgfCBSR19EU0lfTE5UX0hTX0JJQVNfRU4sCisJCQkgKDgg
PDwgNCkgfCBSR19EU0lfTE5UX0hTX0JJQVNfRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBp
X3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9M
RE9DT1JFX0VOLAorCQkJIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4p
OworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkg
UkdfRFNJX01QUExMX1NETV9QV1JfT04gfCBSR19EU0lfTVBQTExfU0RNX0lTT19FTiwKKwkJCSBS
R19EU0lfTVBQTExfU0RNX1BXUl9PTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J
UElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlf
dHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJIFJHX0RTSV9NUFBMTF9U
WERJVjAgfCBSR19EU0lfTVBQTExfVFhESVYxIHwKKwkJCSBSR19EU0lfTVBQTExfUFJFRElWLAor
CQkJICh0eGRpdjAgPDwgMykgfCAodHhkaXYxIDw8IDUpKTsKKworCS8qCisJICogUExMIFBDVyBj
b25maWcKKwkgKiBQQ1cgYml0IDI0fjMwID0gaW50ZWdlciBwYXJ0IG9mIHBjdworCSAqIFBDVyBi
aXQgMH4yMyA9IGZyYWN0aW9uYWwgcGFydCBvZiBwY3cKKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0
eGRpdi8oUmVmX2NsayoyKTsKKwkgKiBQb3N0IERJViA9NCwgc28gbmVlZCBkYXRhX1JhdGUqNAor
CSAqIFJlZl9jbGsgaXMgMjZNSHoKKwkgKi8KKwlwY3cgPSAoKHU2NCkgbWlwaV90eC0+ZGF0YV9y
YXRlICogdHhkaXYpIDw8IDI0OworCXBjdyAvPSAxMzsKKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5y
ZWdzICsgTUlQSVRYX0RTSV9QTExfQ09OMik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs
IE1JUElUWF9EU0lfUExMX0NPTjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9GUkFfRU4sIFJHX0RT
SV9NUFBMTF9TRE1fRlJBX0VOKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRY
X0RTSV9DTE9DS19MQU5FLAorCQkJIFJHX0RTSV9MTlRDX0xET09VVF9FTiwgUkdfRFNJX0xOVENf
TERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9M
QU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIFJHX0RTSV9MTlQwX0xET09VVF9FTik7
CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJCQkg
UkdfRFNJX0xOVDFfTERPT1VUX0VOLCBSR19EU0lfTE5UMV9MRE9PVVRfRU4pOworCW10a19taXBp
X3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJIFJHX0RTSV9MTlQy
X0xET09VVF9FTiwgUkdfRFNJX0xOVDJfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1p
cGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5UM19MRE9PVVRfRU4s
IFJHX0RTSV9MTlQzX0xET09VVF9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J
UElUWF9EU0lfUExMX0NPTjAsCisJCQkgUkdfRFNJX01QUExMX1BMTF9FTiwgUkdfRFNJX01QUExM
X1BMTF9FTik7CisKKwl1c2xlZXBfcmFuZ2UoMjAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNr
KG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9TU0Nf
RU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04s
IFJHX0RTSV9QQURfVElFX0xPV19FTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu
dCBtdGtfbWlwaV90eF9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtf
bWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRrX21pcGlfdHhf
bWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExfUExMX0VOLCAw
KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLCBSR19E
U0lfUEFEX1RJRV9MT1dfRU4sCisJCQlSR19EU0lfUEFEX1RJRV9MT1dfRU4pOworCisJbXRrX21p
cGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkgUkdfRFNJX0xO
VENfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lf
REFUQV9MQU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4
X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUxLAorCQkJIFJHX0RTSV9MTlQxX0xE
T09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFf
TEFORTIsCisJCQkgUkdfRFNJX0xOVDJfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNr
KG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5UM19MRE9PVVRf
RU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1Is
CisJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTiB8IFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OLAor
CQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4
LCBNSVBJVFhfRFNJX1RPUF9DT04sIFJHX0RTSV9MTlRfSFNfQklBU19FTiwgMCk7CisKKwltdGtf
bWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJUkdfRFNJX0NLR19MRE9P
VVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlf
dHgsIE1JUElUWF9EU0lfQkdfQ09OLAorCQkJUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09S
RV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NP
TjAsIFJHX0RTSV9NUFBMTF9ESVZfTVNLLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg
c3RydWN0IHBoeV9vcHMgbXRrX21pcGlfdHhfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19taXBp
X3R4X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmYsCisJLm93
bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Byb2JlKHN0
cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk
ZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHg7CisJc3RydWN0IHJlc291cmNl
ICptZW07CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92
aWRlcjsKKwlpbnQgcmV0OworCisJbWlwaV90eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq
bWlwaV90eCksIEdGUF9LRVJORUwpOworCWlmICghbWlwaV90eCkKKwkJcmV0dXJuIC1FTk9NRU07
CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDAp
OworCW1pcGlfdHgtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlm
IChJU19FUlIobWlwaV90eC0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWdz
KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwg
TlVMTCwgJm10a19taXBpX3R4X29wcyk7CisJaWYgKElTX0VSUihwaHkpKSB7CisJCWRldl9lcnIo
ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBNSVBJIEQtUEhZXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIo
cGh5KTsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwgbWlwaV90eCk7CisKKwlwaHlfcHJvdmlk
ZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxh
dGUpOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwaHlfcHJvdmlkZXIpOworfQorCitzdGF0
aWMgaW50IG10a19taXBpX3R4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor
eworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtf
bWlwaV90eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1p
cGktdHgiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlwaV90
eF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX21pcGlfdHhfcHJvYmUsCisJLnJlbW92ZSA9IG10
a19taXBpX3R4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1taXBp
LXR4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX21pcGlfdHhfbWF0Y2gsCisJfSwKK307CmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM1ZjRhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX21pcGlfdHguaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK
KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRLX01JUElfVFhfSF8KKyNkZWZpbmUg
X01US19NSVBJX1RYX0gKKworc3RydWN0IHBoeTsKKworaW50IG10a19taXBpX3R4X3NldF9kYXRh
X3JhdGUoc3RydWN0IHBoeSAqcGh5LCB1bnNpZ25lZCBpbnQgZGF0YV9yYXRlKTsKKworI2VuZGlm
Ci0tIAoyLjYuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn
Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK