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