From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v7 03/14] drm/mediatek: Add DSI sub driver Date: Mon, 30 Nov 2015 22:07:45 +0100 Message-ID: <1448917676-25584-4-git-send-email-p.zabel@pengutronix.de> References: <1448917676-25584-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: <1448917676-25584-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 , Tomasz Figa , 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 YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjY6CiAtIEFkZGVkIG10a19k c2lfcG93ZXJvbi9vZmYgcmVmY291bnRpbmcgYW5kIG10a19kZHBfY29tcG9uZW50IHN0YXJ0L3N0 b3AKICAgY2FsbGJhY2tzIHRvIGtlZXAgcGl4ZWwgY2xvY2sgZW5hYmxlZCB1bnRpbCBjcnRjX2Rp c2FibGUKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICB8ICAgNCAr LQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgfCAgIDIgKwogZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggfCAgIDIgKwogZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kc2kuYyAgICAgfCA4MzggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oICAgICB8ICA1NyArKysK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIHwgMzc3ICsrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmggfCAgMjEgKwogNyBm aWxlcyBjaGFuZ2VkLCAxMzAwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggYmQ2ZThkZi4uNTczZjIwOSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9NYWtlZmlsZQpAQCAtNSw3ICs1LDkgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bf b3ZsLm8gXAogCQkgIG10a19kcm1fZHJ2Lm8gXAogCQkgIG10a19kcm1fZmIubyBcCiAJCSAgbXRr X2RybV9nZW0ubyBcCi0JCSAgbXRrX2RybV9wbGFuZS5vCisJCSAgbXRrX2RybV9wbGFuZS5vIFwK KwkJICBtdGtfZHNpLm8gXAorCQkgIG10a19taXBpX3R4Lm8KIAogb2JqLSQoQ09ORklHX0RSTV9N RURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kcnYuYwppbmRleCBhMzRjNzY1Li43MzljM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuYwpAQCAtNTIxLDYgKzUyMSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIG10a19kcm1fcGxhdGZvcm1fZHJpdmVyID0gewogc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKIAkmbXRrX2RybV9wbGF0Zm9y bV9kcml2ZXIsCiAJJm10a19kaXNwX292bF9kcml2ZXIsCisJJm10a19kc2lfZHJpdmVyLAorCSZt dGtfbWlwaV90eF9kcml2ZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQo dm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKaW5kZXggZGY0MjFjZC4u M2I1YjI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTQ5LDUg KzQ5LDcgQEAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CiB9OwogCiBleHRlcm4gc3RydWN0IHBs YXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgbXRrX2RzaV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt dGtfbWlwaV90eF9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41 YjdlZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k c2kuYwpAQCAtMCwwICsxLDgzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4 L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1 ZGUgIm10a19kc2kuaCIKKyNpbmNsdWRlICJtdGtfbWlwaV90eC5oIgorCisjZGVmaW5lIERTSV9W SURFT19GSUZPX0RFUFRICSgxOTIwIC8gNCkKKyNkZWZpbmUgRFNJX0hPU1RfRklGT19ERVBUSAk2 NAorCisjZGVmaW5lIERTSV9TVEFSVAkJMHgwMAorCisjZGVmaW5lIERTSV9DT05fQ1RSTAkJMHgx MAorI2RlZmluZSBEU0lfUkVTRVQJCQlCSVQoMCkKKyNkZWZpbmUgRFNJX0VOCQkJCUJJVCgxKQor CisjZGVmaW5lIERTSV9NT0RFX0NUUkwJCTB4MTQKKyNkZWZpbmUgTU9ERQkJCQkoMykKKyNkZWZp bmUgQ01EX01PREUJCQkwCisjZGVmaW5lIFNZTkNfUFVMU0VfTU9ERQkJCTEKKyNkZWZpbmUgU1lO Q19FVkVOVF9NT0RFCQkJMgorI2RlZmluZSBCVVJTVF9NT0RFCQkJMworI2RlZmluZSBGUk1fTU9E RQkJCUJJVCgxNikKKyNkZWZpbmUgTUlYX01PREUJCQlCSVQoMTcpCisKKyNkZWZpbmUgRFNJX1RY UlhfQ1RSTAkJMHgxOAorI2RlZmluZSBWQ19OVU0JCQkJKDIgPDwgMCkKKyNkZWZpbmUgTEFORV9O VU0JCQkoMHhmIDw8IDIpCisjZGVmaW5lIERJU19FT1QJCQkJQklUKDYpCisjZGVmaW5lIE5VTExf RU4JCQkJQklUKDcpCisjZGVmaW5lIFRFX0ZSRUVSVU4JCQlCSVQoOCkKKyNkZWZpbmUgRVhUX1RF X0VOCQkJQklUKDkpCisjZGVmaW5lIEVYVF9URV9FREdFCQkJQklUKDEwKQorI2RlZmluZSBNQVhf UlROX1NJWkUJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBIU1RYX0NLTFBfRU4JCQlCSVQoMTYpCisK KyNkZWZpbmUgRFNJX1BTQ1RSTAkJMHgxYworI2RlZmluZSBEU0lfUFNfV0MJCQkweDNmZmYKKyNk ZWZpbmUgRFNJX1BTX1NFTAkJCSgzIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMTZCSVRfUkdC NTY1CQkoMCA8PCAxNikKKyNkZWZpbmUgTE9PU0VMWV9QU18xOEJJVF9SR0I2NjYJCSgxIDw8IDE2 KQorI2RlZmluZSBQQUNLRURfUFNfMThCSVRfUkdCNjY2CQkoMiA8PCAxNikKKyNkZWZpbmUgUEFD S0VEX1BTXzI0QklUX1JHQjg4OAkJKDMgPDwgMTYpCisKKyNkZWZpbmUgRFNJX1ZTQV9OTAkJMHgy MAorI2RlZmluZSBEU0lfVkJQX05MCQkweDI0CisjZGVmaW5lIERTSV9WRlBfTkwJCTB4MjgKKyNk ZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4MkMKKyNkZWZpbmUgRFNJX0hTQV9XQwkJMHg1MAorI2RlZmlu ZSBEU0lfSEJQX1dDCQkweDU0CisjZGVmaW5lIERTSV9IRlBfV0MJCTB4NTgKKworI2RlZmluZSBE U0lfSFNUWF9DS0xfV0MJCTB4NjQKKworI2RlZmluZSBEU0lfUEhZX0xDQ09OCQkweDEwNAorI2Rl ZmluZSBMQ19IU19UWF9FTgkJCUJJVCgwKQorI2RlZmluZSBMQ19VTFBNX0VOCQkJQklUKDEpCisj ZGVmaW5lIExDX1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfTEQwQ09OCQkw eDEwOAorI2RlZmluZSBMRDBfSFNfVFhfRU4JCQlCSVQoMCkKKyNkZWZpbmUgTEQwX1VMUE1fRU4J CQlCSVQoMSkKKyNkZWZpbmUgTEQwX1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9Q SFlfVElNRUNPTjAJMHgxMTAKKyNkZWZpbmUgTFBYCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIEhT X1BSUFIJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgSFNfWkVSTwkJCQkoMHhmZiA8PCAxNikKKyNk ZWZpbmUgSFNfVFJBSUwJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04x CTB4MTE0CisjZGVmaW5lIFRBX0dPCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIFRBX1NVUkUJCQkJ KDB4ZmYgPDwgOCkKKyNkZWZpbmUgVEFfR0VUCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBEQV9I U19FWElUCQkJKDB4ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMgkweDExOAor I2RlZmluZSBDT05UX0RFVAkJCSgweGZmIDw8IDApCisjZGVmaW5lIENMS19aRVJPCQkJKDB4ZmYg PDwgMTYpCisjZGVmaW5lIENMS19UUkFJTAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9Q SFlfVElNRUNPTjMJMHgxMWMKKyNkZWZpbmUgQ0xLX0hTX1BSUFIJCQkoMHhmZiA8PCAwKQorI2Rl ZmluZSBDTEtfSFNfUE9TVAkJCSgweGZmIDw8IDgpCisjZGVmaW5lIENMS19IU19FWElUCQkJKDB4 ZmYgPDwgMTYpCisKKyNkZWZpbmUgTlNfVE9fQ1lDTEUobiwgYykgICAgKChuKSAvIGMgKyAoKChu KSAlIGMpID8gMSA6IDApKQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX21hc2soc3RydWN0IG10a19k c2kgKmRzaSwgdTMyIG9mZnNldCwgdTMyIG1hc2ssIHUzMiBkYXRhKQoreworCXUzMiB0ZW1wID0g cmVhZGwoZHNpLT5yZWdzICsgb2Zmc2V0KTsKKworCXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChk YXRhICYgbWFzayksIGRzaS0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9w aHlfdGltY29uZmlnKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMyIHRpbWNvbjAsIHRpbWNv bjEsIHRpbWNvbjIsIHRpbWNvbjM7CisJdW5zaWduZWQgaW50IHVpLCBjeWNsZV90aW1lOworCXVu c2lnbmVkIGludCBscHg7CisKKwl1aSA9IDEwMDAgLyBkc2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJ Y3ljbGVfdGltZSA9IDgwMDAgLyBkc2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJbHB4ID0gNTsKKwor CXRpbWNvbjAgPSAoOCA8PCAyNCkgfCAoMHhhIDw8IDE2KSB8ICgweDYgPDwgOCkgfCBscHg7CisJ dGltY29uMSA9ICg3IDw8IDI0KSB8ICg1ICogbHB4IDw8IDE2KSB8ICgoMyAqIGxweCkgLyAyKSA8 PCA4IHwKKwkJICAoNCAqIGxweCk7CisJdGltY29uMiA9ICgoTlNfVE9fQ1lDTEUoMHg2NCwgY3lj bGVfdGltZSkgKyAweGEpIDw8IDI0KSB8CisJCSAgKE5TX1RPX0NZQ0xFKDB4MTUwLCBjeWNsZV90 aW1lKSA8PCAxNik7CisJdGltY29uMyA9ICgyICogbHB4KSA8PCAxNiB8IE5TX1RPX0NZQ0xFKDgw ICsgNTIgKiB1aSwgY3ljbGVfdGltZSkgPDwgOCB8CisJCSAgIE5TX1RPX0NZQ0xFKDB4NDAsIGN5 Y2xlX3RpbWUpOworCisJd3JpdGVsKHRpbWNvbjAsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNP TjApOworCXdyaXRlbCh0aW1jb24xLCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04xKTsKKwl3 cml0ZWwodGltY29uMiwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMik7CisJd3JpdGVsKHRp bWNvbjMsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjMpOworfQorCitzdGF0aWMgdm9pZCBt dGtfZHNpX2VuYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ks IERTSV9DT05fQ1RSTCwgRFNJX0VOLCBEU0lfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNp X2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lf Q09OX0NUUkwsIERTSV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfcmVzZXQoc3Ry dWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERT SV9SRVNFVCwgRFNJX1JFU0VUKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERT SV9SRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9wb3dlcm9uKHN0cnVjdCBtdGtf ZHNpICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsK KworCWlmICgrK2RzaS0+cmVmY291bnQgIT0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKioKKwkgKiBk YXRhX3JhdGUgPSAocGl4ZWxfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX2RpcHRoICogbWlwaV9yYXRp bzsKKwkgKiBwaXhlbF9jbG9jayB1bml0IGlzIEtoeiwgZGF0YV9yYXRhIHVuaXQgaXMgTUh6LCBz byBuZWVkIGRpdmlkZSAxMDAwLgorCSAqIG1pcGlfcmF0aW8gaXMgbWlwaSBjbGsgY29lZmZpY2ll bnQgZm9yIGJhbGFuY2UgdGhlIHBpeGVsIGNsayBpbiBtaXBpLgorCSAqIHdlIHNldCBtaXBpX3Jh dGlvIGlzIDEuMDUuCisJICovCisJZHNpLT5kYXRhX3JhdGUgPSBkc2ktPnZtLnBpeGVsY2xvY2sg KiAzICogMjEgLyAoMSAqIDEwMDAgKiAxMCk7CisKKwltdGtfbWlwaV90eF9zZXRfZGF0YV9yYXRl KGRzaS0+cGh5LCBkc2ktPmRhdGFfcmF0ZSk7CisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKKwor CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVuZ2luZV9jbGspOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBlbmdpbmUgY2xvY2s6ICVkXG4i LCByZXQpOworCQlnb3RvIGVycl9lbmdpbmVfY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8g ZXJyX2RpZ2l0YWxfY2xrOworCX0KKworCW10a19kc2lfZW5hYmxlKGRzaSk7CisJbXRrX2RzaV9y ZXNldChkc2kpOworCWRzaV9waHlfdGltY29uZmlnKGRzaSk7CisKKwlyZXR1cm4gMDsKKworZXJy X2RpZ2l0YWxfY2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmVuZ2luZV9jbGspOwor ZXJyX2VuZ2luZV9jbGs6CisJZHNpLT5yZWZjb3VudC0tOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIGRzaV9jbGtfdWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sK KwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7CisJbXRr X2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfVUxQTV9FTiwgMCk7Cit9CisKK3N0YXRp YyB2b2lkIGRzaV9jbGtfdWxwX21vZGVfbGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlt dGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKKwltdGtfZHNp X21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4sIExDX1dBS0VVUF9FTik7CisJ bXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfV0FLRVVQX0VOLCAwKTsKK30KKwor c3RhdGljIHZvaWQgZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKHN0cnVjdCBtdGtfZHNpICpkc2kp Cit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9IU19UWF9FTiwgMCk7 CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAwKTsKK30K Kworc3RhdGljIHZvaWQgZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNpICpk c2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAw KTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgTEQw X1dBS0VVUF9FTik7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MRDBDT04sIExEMF9XQUtF VVBfRU4sIDApOworfQorCitzdGF0aWMgYm9vbCBkc2lfY2xrX2hzX3N0YXRlKHN0cnVjdCBtdGtf ZHNpICpkc2kpCit7CisJdTMyIHRtcF9yZWcxOworCisJdG1wX3JlZzEgPSByZWFkbChkc2ktPnJl Z3MgKyBEU0lfUEhZX0xDQ09OKTsKKwlyZXR1cm4gKCh0bXBfcmVnMSAmIExDX0hTX1RYX0VOKSA9 PSAxKSA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa19oc19tb2RlKHN0 cnVjdCBtdGtfZHNpICpkc2ksIGJvb2wgZW50ZXIpCit7CisJaWYgKGVudGVyICYmICFkc2lfY2xr X2hzX3N0YXRlKGRzaSkpCisJCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hT X1RYX0VOLCBMQ19IU19UWF9FTik7CisJZWxzZSBpZiAoIWVudGVyICYmIGRzaV9jbGtfaHNfc3Rh dGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4s IDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfc2V0X21vZGUoc3RydWN0IG10a19kc2kgKmRzaSkK K3sKKwl1MzIgdmlkX21vZGUgPSBDTURfTU9ERTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBN SVBJX0RTSV9NT0RFX1ZJREVPKSB7CisJCXZpZF9tb2RlID0gU1lOQ19QVUxTRV9NT0RFOworCisJ CWlmICgoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgJiYKKwkJ ICAgICEoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSkK KwkJCXZpZF9tb2RlID0gQlVSU1RfTU9ERTsKKwl9CisKKwl3cml0ZWwodmlkX21vZGUsIGRzaS0+ cmVncyArIERTSV9NT0RFX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbF92 YWN0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNp LT52bTsKKwl1MzIgZHNpX2J1Zl9icHAsIHBzX3djOworCXUzMiBwc19icHBfbW9kZTsKKworCWlm IChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQorCQlkc2lfYnVmX2JwcCA9IDI7 CisJZWxzZQorCQlkc2lfYnVmX2JwcCA9IDM7CisKKwlwc193YyA9IHZtLT5oYWN0aXZlICogZHNp X2J1Zl9icHA7CisJcHNfYnBwX21vZGUgPSBwc193YzsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQp IHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9Q U18yNEJJVF9SR0I4ODg7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJ cHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBN SVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJcHNfYnBwX21vZGUgfD0gTE9PU0VMWV9QU18x OEJJVF9SR0I2NjY7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJcHNf YnBwX21vZGUgfD0gUEFDS0VEX1BTXzE2QklUX1JHQjU2NTsKKwkJYnJlYWs7CisJfQorCisJd3Jp dGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisJd3JpdGVsKHBzX2Jw cF9tb2RlLCBkc2ktPnJlZ3MgKyBEU0lfUFNDVFJMKTsKKwl3cml0ZWwocHNfd2MsIGRzaS0+cmVn cyArIERTSV9IU1RYX0NLTF9XQyk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9yeHR4X2NvbnRyb2wo c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzsKKworCXN3aXRjaCAoZHNpLT5s YW5lcykgeworCWNhc2UgMToKKwkJdG1wX3JlZyA9IDEgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSAy OgorCQl0bXBfcmVnID0gMyA8PCAyOworCQlicmVhazsKKwljYXNlIDM6CisJCXRtcF9yZWcgPSA3 IDw8IDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wX3JlZyA9IDB4ZiA8PCAyOworCQlicmVh azsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCX0KKworCXdy aXRlbCh0bXBfcmVnLCBkc2ktPnJlZ3MgKyBEU0lfVFhSWF9DVFJMKTsKK30KKworc3RhdGljIHZv aWQgZHNpX3BzX2NvbnRyb2woc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQg ZHNpX3RtcF9idWZfYnBwOworCXUzMiB0bXBfcmVnOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkg eworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18yNEJJ VF9SR0I4ODg7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9E U0lfRk1UX1JHQjY2NjoKKwkJdG1wX3JlZyA9IExPT1NFTFlfUFNfMThCSVRfUkdCNjY2OworCQlk c2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZf UEFDS0VEOgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzE4QklUX1JHQjY2NjsKKwkJZHNpX3RtcF9i dWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQl0bXBf cmVnID0gUEFDS0VEX1BTXzE2QklUX1JHQjU2NTsKKwkJZHNpX3RtcF9idWZfYnBwID0gMjsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJ CWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCX0KKworCXRtcF9yZWcgKz0gZHNpLT52 bS5oYWN0aXZlICogZHNpX3RtcF9idWZfYnBwICYgRFNJX1BTX1dDOworCXdyaXRlbCh0bXBfcmVn LCBkc2ktPnJlZ3MgKyBEU0lfUFNDVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2NvbmZpZ192 ZG9fdGltaW5nKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdW5zaWduZWQgaW50IGhvcml6b250 YWxfc3luY19hY3RpdmVfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9iYWNrcG9yY2hf Ynl0ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9mcm9udHBvcmNoX2J5dGU7CisJdW5zaWdu ZWQgaW50IGRzaV90bXBfYnVmX2JwcDsKKworCXN0cnVjdCB2aWRlb21vZGUgKnZtID0gJmRzaS0+ dm07CisKKwlpZiAoZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNpX3Rt cF9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisKKwl3cml0ZWwo dm0tPnZzeW5jX2xlbiwgZHNpLT5yZWdzICsgRFNJX1ZTQV9OTCk7CisJd3JpdGVsKHZtLT52YmFj a19wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZCUF9OTCk7CisJd3JpdGVsKHZtLT52ZnJvbnRfcG9y Y2gsIGRzaS0+cmVncyArIERTSV9WRlBfTkwpOworCXdyaXRlbCh2bS0+dmFjdGl2ZSwgZHNpLT5y ZWdzICsgRFNJX1ZBQ1RfTkwpOworCisJaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlID0gKHZt LT5oc3luY19sZW4gKiBkc2lfdG1wX2J1Zl9icHAgLSAxMCk7CisKKwlpZiAoZHNpLT5tb2RlX2Zs YWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKQorCQlob3Jpem9udGFsX2JhY2tw b3JjaF9ieXRlID0KKwkJCSh2bS0+aGJhY2tfcG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMCk7 CisJZWxzZQorCQlob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlID0gKCh2bS0+aGJhY2tfcG9yY2gg KyB2bS0+aHN5bmNfbGVuKSAqCisJCQlkc2lfdG1wX2J1Zl9icHAgLSAxMCk7CisKKwlob3Jpem9u dGFsX2Zyb250cG9yY2hfYnl0ZSA9ICh2bS0+aGZyb250X3BvcmNoICogZHNpX3RtcF9idWZfYnBw IC0gMTIpOworCisJd3JpdGVsKGhvcml6b250YWxfc3luY19hY3RpdmVfYnl0ZSwgZHNpLT5yZWdz ICsgRFNJX0hTQV9XQyk7CisJd3JpdGVsKGhvcml6b250YWxfYmFja3BvcmNoX2J5dGUsIGRzaS0+ cmVncyArIERTSV9IQlBfV0MpOworCXdyaXRlbChob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZSwg ZHNpLT5yZWdzICsgRFNJX0hGUF9XQyk7CisKKwlkc2lfcHNfY29udHJvbChkc2kpOworfQorCitz dGF0aWMgdm9pZCBtdGtfZHNpX3N0YXJ0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJd3JpdGVs KDAsIGRzaS0+cmVncyArIERTSV9TVEFSVCk7CisJd3JpdGVsKDEsIGRzaS0+cmVncyArIERTSV9T VEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfcG93ZXJvZmYoc3RydWN0IG10a19kc2kg KmRzaSkKK3sKKwlpZiAoV0FSTl9PTihkc2ktPnJlZmNvdW50ID09IDApKQorCQlyZXR1cm47CisK KwlpZiAoLS1kc2ktPnJlZmNvdW50ICE9IDApCisJCXJldHVybjsKKworCWRzaV9sYW5lMF91bHBf bW9kZV9lbnRlcihkc2kpOworCWRzaV9jbGtfdWxwX21vZGVfZW50ZXIoZHNpKTsKKworCW10a19k c2lfZGlzYWJsZShkc2kpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Ns ayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZGlnaXRhbF9jbGspOworCisJcGh5X3Bv d2VyX29mZihkc2ktPnBoeSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2VuYWJs ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlpZiAoZHNpLT5lbmFibGVk KQorCQlyZXR1cm47CisKKwlpZiAoZHNpLT5wYW5lbCkgeworCQlpZiAoZHJtX3BhbmVsX3ByZXBh cmUoZHNpLT5wYW5lbCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIHRoZSBwYW5l bFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXQgPSBtdGtfZHNpX3Bvd2Vyb24oZHNp KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwb3dlciBvbiBkc2lc biIpOworCQlyZXR1cm47CisJfQorCisJZHNpX3J4dHhfY29udHJvbChkc2kpOworCisJZHNpX2Ns a191bHBfbW9kZV9sZWF2ZShkc2kpOworCWRzaV9sYW5lMF91bHBfbW9kZV9sZWF2ZShkc2kpOwor CWRzaV9jbGtfaHNfbW9kZShkc2ksIDApOworCWRzaV9zZXRfbW9kZShkc2kpOworCisJZHNpX3Bz X2NvbnRyb2xfdmFjdChkc2kpOworCWRzaV9jb25maWdfdmRvX3RpbWluZyhkc2kpOworCisJZHNp X3NldF9tb2RlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMSk7CisKKwltdGtfZHNpX3N0 YXJ0KGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtf b3V0cHV0X2RzaV9kaXNhYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaWYgKCFkc2ktPmVu YWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxf ZGlzYWJsZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZGlzYWJsZSB0 aGUgcGFuZWxcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbXRrX2RzaV9wb3dlcm9mZihk c2kpOworCisJZHNpLT5lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lf ZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5j b2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNv ZGVyX2Z1bmNzIG10a19kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IG10a19kc2lf ZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIGJvb2wgbXRrX2RzaV9lbmNvZGVyX21vZGVf Zml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk IG10a19kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJ CQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5j b2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwlkc2ktPnZtLnBpeGVsY2xvY2sgPSBhZGp1c3RlZC0+ Y2xvY2s7CisJZHNpLT52bS5oYWN0aXZlID0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0u aGJhY2tfcG9yY2ggPSBhZGp1c3RlZC0+aHRvdGFsIC0gYWRqdXN0ZWQtPmhzeW5jX2VuZDsKKwlk c2ktPnZtLmhmcm9udF9wb3JjaCA9IGFkanVzdGVkLT5oc3luY19zdGFydCAtIGFkanVzdGVkLT5o ZGlzcGxheTsKKwlkc2ktPnZtLmhzeW5jX2xlbiA9IGFkanVzdGVkLT5oc3luY19lbmQgLSBhZGp1 c3RlZC0+aHN5bmNfc3RhcnQ7CisKKwlkc2ktPnZtLnZhY3RpdmUgPSBhZGp1c3RlZC0+dmRpc3Bs YXk7CisJZHNpLT52bS52YmFja19wb3JjaCA9IGFkanVzdGVkLT52dG90YWwgLSBhZGp1c3RlZC0+ dnN5bmNfZW5kOworCWRzaS0+dm0udmZyb250X3BvcmNoID0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0 IC0gYWRqdXN0ZWQtPnZkaXNwbGF5OworCWRzaS0+dm0udnN5bmNfbGVuID0gYWRqdXN0ZWQtPnZz eW5jX2VuZCAtIGFkanVzdGVkLT52c3luY19zdGFydDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rz aV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVj dCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCW10a19vdXRwdXRf ZHNpX2Rpc2FibGUoZHNpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2VuYWJs ZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9 IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZW5hYmxlKGRzaSk7 Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG10a19kc2lfY29ubmVjdG9y X2RldGVjdCgKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQor eworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQg bXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0 b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgaW50IG10a19kc2lfY29ubmVjdG9y X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBt dGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJt X3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBhbmVsKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5j b2RlciAqbXRrX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKAorCQlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9f ZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRzaS0+ZW5jb2RlcjsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2hlbHBl cl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IG10a19kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAor CS5tb2RlX3NldCA9IG10a19kc2lfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJsZSA9IG10a19k c2lfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSBtdGtfZHNpX2VuY29kZXJfZW5hYmxlLAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19kc2lfY29u bmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rw bXMsCisJLmRldGVjdCA9IG10a19kc2lfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9 IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IG10 a19kc2lfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKKwltdGtfZHNpX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG10a19kc2lfY29ubmVjdG9yX2dldF9t b2RlcywKKwkuYmVzdF9lbmNvZGVyID0gbXRrX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAor fTsKKworc3RhdGljIGludCBtdGtfZHJtX2F0dGFjaF9sY21fYnJpZGdlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ aW50IHJldDsKKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIg PSBlbmNvZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdl KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8g ZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3Qg bXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRy bSwgJmRzaS0+ZW5jb2RlciwgJm10a19kc2lfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1f TU9ERV9FTkNPREVSX0RTSSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl bmNvZGVyIGluaXQgdG8gZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2VuY29kZXJf aGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7 CisKKwlkc2ktPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSAxOworCisJLyogUHJlLWVtcHQgRFAg Y29ubmVjdG9yIGNyZWF0aW9uIGlmIHRoZXJlJ3MgYSBicmlkZ2UgKi8KKwlyZXQgPSBtdGtfZHJt X2F0dGFjaF9sY21fYnJpZGdlKGRzaS0+YnJpZGdlLCAmZHNpLT5lbmNvZGVyKTsKKwlpZiAoIXJl dCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5j b25uLCAmbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9E U0kpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIGluaXQg dG8gZHJtXG4iKTsKKwkJZ290byBlcnJjb25uZWN0b3I7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfYWRkKCZkc2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwor CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmZHNpLT5jb25uKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3RvciByZWdpc3RlciB0byBkcm1cbiIpOwor CQlnb3RvIGVycmNvbm5lY3RvcnJlZzsKKwl9CisKKwlkc2ktPmNvbm4uZHBtcyA9IERSTV9NT0RF X0RQTVNfT0ZGOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNpLT5jb25u LCAmZHNpLT5lbmNvZGVyKTsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCXJldCA9IGRybV9wYW5l bF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29ubik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9F UlJPUigiRmFpbGVkIHRvIGF0dGFjdCBwYW5lbCB0byBkcm1cbiIpOworCQkJcmV0dXJuIHJldDsK KwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyY29ubmVjdG9yOgorCWRybV9lbmNvZGVyX2NsZWFu dXAoJmRzaS0+ZW5jb2Rlcik7CitlcnJjb25uZWN0b3JyZWc6CisJZHJtX2Nvbm5lY3Rvcl9jbGVh bnVwKCZkc2ktPmNvbm4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rz aV9kZXN0cm95X2Nvbm5fZW5jKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJZHJtX2VuY29kZXJf Y2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJmRzaS0+ Y29ubik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZkc2ktPmNvbm4pOworfQorCitzdGF0aWMg dm9pZCBtdGtfZHNpX2RkcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0 cnVjdCBtdGtfZHNpICpkc2kgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRk cF9jb21wKTsKKworCW10a19kc2lfcG93ZXJvbihkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtf ZHNpX2RkcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19k c2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRwX2NvbXApOwor CisJbXRrX2RzaV9wb3dlcm9mZihkc2kpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19k ZHBfY29tcF9mdW5jcyBtdGtfZHNpX2Z1bmNzID0geworCS5zdGFydCA9IG10a19kc2lfZGRwX3N0 YXJ0LAorCS5zdG9wID0gbXRrX2RzaV9kZHBfc3RvcCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rz aV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpk YXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3Ry dWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0ID0gbXRrX2Rk cF9jb21wX3JlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJ CQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXQgPSBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhkcm0sIGRzaSk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3Rv IGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwlt dGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKworCWRzaSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwltdGtfZHNpX2Rlc3Ry b3lfY29ubl9lbmMoZHNpKTsKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRk cF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kc2lf Y29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IG10a19kc2lfYmluZCwKKwkudW5iaW5kID0gbXRr X2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19kc2lfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGVfbm9kZSwg KmVuZHBvaW50OworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgY29tcF9pZDsKKwlpbnQg cmV0OworCisJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVM KTsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9E RV9WSURFT19TWU5DX1BVTFNFOworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsK Kwlkc2ktPmxhbmVzID0gNDsKKworCWVuZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9p bnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKKwlpZiAoZW5kcG9pbnQpIHsKKwkJcmVtb3RlX25vZGUg PSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsKKwkJaWYgKCFyZW1v dGVfbm9kZSkgeworCQkJZGV2X2VycihkZXYsICJObyBwYW5lbCBjb25uZWN0ZWRcbiIpOworCQkJ cmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlkc2ktPmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRn ZShyZW1vdGVfbm9kZSk7CisJCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChyZW1vdGVf bm9kZSk7CisJCW9mX25vZGVfcHV0KHJlbW90ZV9ub2RlKTsKKwkJaWYgKCFkc2ktPmJyaWRnZSAm JiAhZHNpLT5wYW5lbCkgeworCQkJZGV2X2luZm8oZGV2LCAiV2FpdGluZyBmb3IgYnJpZGdlIG9y IHBhbmVsIGRyaXZlclxuIik7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0KKwor CWRzaS0+ZW5naW5lX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNf RVJSKGRzaS0+ZW5naW5lX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmVuZ2luZV9jbGsp OworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPmRpZ2l0YWxfY2xrID0gZGV2bV9jbGtfZ2V0 KGRldiwgImRpZ2l0YWwiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZGlnaXRhbF9jbGspKSB7CisJCXJl dCA9IFBUUl9FUlIoZHNpLT5kaWdpdGFsX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv IGdldCBkaWdpdGFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlk c2ktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKKwlpZiAoSVNfRVJS KGRzaS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnJlZ3MpOworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBpb3JlbWFwIG1lbW9yeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAiZHBoeSIpOworCWlmIChJU19F UlIoZHNpLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5waHkpOworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgTUlQSS1EUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19E U0kpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVu dGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisK KwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJmRzaS0+ZGRwX2Nv bXAsIGNvbXBfaWQsCisJCQkJJm10a19kc2lfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CisKKwly ZXQgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIERTSSBjb21wb25lbnRc biIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBtdGtfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBtdGtfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW10 a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZt dGtfZHNpX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdf UE0KK3N0YXRpYyBpbnQgbXRrX2RzaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlt dGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJRFJNX0RFQlVHX0RSSVZFUigiZHNpIHN1c3Bl bmQgc3VjY2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9y ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisKKwlk c2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW10a19vdXRwdXRfZHNpX2VuYWJsZShkc2kp OworCURSTV9ERUJVR19EUklWRVIoImRzaSByZXN1bWUgc3VjY2VzcyFcbiIpOworCisJcmV0dXJu IDA7Cit9CisjZW5kaWYKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfZHNpX3BtX29wcywg bXRrX2RzaV9zdXNwZW5kLCBtdGtfZHNpX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE3My1kc2kiIH0sCisJeyB9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBtdGtfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHNpX3Byb2JlLAorCS5yZW1vdmUg PSBtdGtfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdGstZHNpIiwKKwkJ Lm9mX21hdGNoX3RhYmxlID0gbXRrX2RzaV9vZl9tYXRjaCwKKwkJLnBtID0gJm10a19kc2lfcG1f b3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k c2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzNzNjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX01US19EU0lfSF8KKyNkZWZpbmUg X01US19EU0lfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorCisjaW5jbHVkZSAibXRr X2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcGh5OworCitzdHJ1Y3QgbXRrX2RzaSB7CisJc3Ry dWN0IG10a19kZHBfY29tcCBkZHBfY29tcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0 IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKKwlzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCXN0cnVj dCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXN0cnVjdCBjbGsgKmVuZ2lu ZV9jbGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisKKwl1MzIgZGF0YV9yYXRlOworCisJ dW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZv cm1hdDsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwlpbnQg cmVmY291bnQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRr X2RzaSAqZW5jb2Rlcl90b19kc2koc3RydWN0IGRybV9lbmNvZGVyICplKQoreworCXJldHVybiBj b250YWluZXJfb2YoZSwgc3RydWN0IG10a19kc2ksIGVuY29kZXIpOworfQorCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBtdGtfZHNpICpjb25uZWN0b3JfdG9fZHNpKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kc2ksIGNvbm4pOwor fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlw aV90eC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhZmQwNAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCkBAIC0wLDAgKzEsMzc3IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNpbmNsdWRlICJtdGtfbWlwaV90eC5o IgorCisjZGVmaW5lIE1JUElUWF9EU0lfQ09OCQkweDAwCisjZGVmaW5lIFJHX0RTSV9MRE9DT1JF X0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0NLR19MRE9PVVRfRU4JCUJJVCgxKQorI2RlZmlu ZSBSR19EU0lfQkNMS19TRUwJCQkoMyA8PCAyKQorI2RlZmluZSBSR19EU0lfTERfSURYX1NFTAkJ KDcgPDwgNCkKKyNkZWZpbmUgUkdfRFNJX1BIWUNMS19TRUwJCSgyIDw8IDgpCisjZGVmaW5lIFJH X0RTSV9EU0lDTEtfRlJFUV9TRUwJCUJJVCgxMCkKKyNkZWZpbmUgUkdfRFNJX0xQVFhfQ0xNUF9F TgkJQklUKDExKQorCisjZGVmaW5lIE1JUElUWF9EU0lfQ0xPQ0tfTEFORQkweDA0CisjZGVmaW5l IFJHX0RTSV9MTlRDX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlRDX0NLTEFO RV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNk ZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5U Q19MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQQ0RfSVBMVVMJCUJJ VCg1KQorI2RlZmluZSBSR19EU0lfTE5UQ19MUENEX0lNTFVTCQlCSVQoNikKKyNkZWZpbmUgUkdf RFNJX0xOVENfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9M QU5FMAkweDA4CisjZGVmaW5lIFJHX0RTSV9MTlQwX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5l IFJHX0RTSV9MTlQwX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhf SVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JUExVUzIJCUJJVCgzKQor I2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9M TlQwX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lNSU5VUwkJ QklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQwX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmlu ZSBNSVBJVFhfRFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBSR19EU0lfTE5UMV9MRE9PVVRf RU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMV9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmlu ZSBSR19EU0lfTE5UMV9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQ VFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JTUlOVVMJCUJJVCg0 KQorI2RlZmluZSBSR19EU0lfTE5UMV9MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJ X0xOVDFfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5UMV9SVF9DT0RFCQko MHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUyCTB4MTAKKyNkZWZpbmUg UkdfRFNJX0xOVDJfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfQ0tMQU5F X0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9JUExVUzEJCUJJVCgyKQorI2Rl ZmluZSBSR19EU0lfTE5UMl9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlQy X0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBDRF9JUExVUwkJQklU KDUpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQQ0RfSU1JTlVTCQlCSVQoNikKKyNkZWZpbmUgUkdf RFNJX0xOVDJfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9M QU5FMwkweDE0CisjZGVmaW5lIFJHX0RTSV9MTlQzX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5l IFJHX0RTSV9MTlQzX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhf SVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JUExVUzIJCUJJVCgzKQor I2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9M TlQzX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lNSU5VUwkJ QklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQzX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmlu ZSBNSVBJVFhfRFNJX1RPUF9DT04JMHg0MAorI2RlZmluZSBSR19EU0lfTE5UX0lOVFJfRU4JCUJJ VCgwKQorI2RlZmluZSBSR19EU0lfTE5UX0hTX0JJQVNfRU4JCUJJVCgxKQorI2RlZmluZSBSR19E U0lfTE5UX0lNUF9DQUxfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UX1RFU1RNT0RFX0VO CQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUJCSgweGYgPDwgNCkKKyNk ZWZpbmUgUkdfRFNJX0xOVF9BSU9fU0VMCQkoNyA8PCA4KQorI2RlZmluZSBSR19EU0lfUEFEX1RJ RV9MT1dfRU4JCUJJVCgxMSkKKyNkZWZpbmUgUkdfRFNJX0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIp CisjZGVmaW5lIFJHX0RTSV9QUkVTRVJWRQkJCSg3IDw8IDEzKQorCisjZGVmaW5lIE1JUElUWF9E U0lfQkdfQ09OCTB4NDQKKyNkZWZpbmUgUkdfRFNJX0JHX0NPUkVfRU4JCUJJVCgwKQorI2RlZmlu ZSBSR19EU0lfQkdfQ0tFTgkJCUJJVCgxKQorI2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4MyA8 PCAyKQorI2RlZmluZSBSR19EU0lfQkdfRkFTVF9DSEFSR0UJCUJJVCg0KQorI2RlZmluZSBSR19E U0lfVk9VVF9NU0sJCQkoMHgzZmZmZiA8PCA1KQorI2RlZmluZSBSR19EU0lfVjEyX1NFTAkJCSg3 IDw8IDUpCisjZGVmaW5lIFJHX0RTSV9WMTBfU0VMCQkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJ X1YwNzJfU0VMCQkJKDcgPDwgMTEpCisjZGVmaW5lIFJHX0RTSV9WMDRfU0VMCQkJKDcgPDwgMTQp CisjZGVmaW5lIFJHX0RTSV9WMDMyX1NFTAkJCSg3IDw8IDE3KQorI2RlZmluZSBSR19EU0lfVjAy X1NFTAkJCSg3IDw8IDIwKQorI2RlZmluZSBSR19EU0lfQkdfUjFfVFJJTQkJKDB4ZiA8PCAyNCkK KyNkZWZpbmUgUkdfRFNJX0JHX1IyX1RSSU0JCSgweGYgPDwgMjgpCisKKyNkZWZpbmUgTUlQSVRY X0RTSV9QTExfQ09OMAkweDUwCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQor I2RlZmluZSBSR19EU0lfTVBQTExfRElWX01TSwkJKDB4MWZmIDw8IDEpCisjZGVmaW5lIFJHX0RT SV9NUFBMTF9QUkVESVYJCSgzIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjAJCSgz IDw8IDMpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjEJCSgzIDw8IDUpCisjZGVmaW5lIFJH X0RTSV9NUFBMTF9QT1NESVYJCSg3IDw8IDcpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05WQ19F TgkJQklUKDEwKQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OUkVGX0VOCQlCSVQoMTEpCisjZGVm aW5lIFJHX0RTSV9NUFBMTF9WT0RfRU4JCUJJVCgxMikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BM TF9DT04xCTB4NTQKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9GUkFfRU4JCUJJVCgwKQorI2Rl ZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QSF9JTklUCUJJVCgxKQorI2RlZmluZSBSR19EU0lf TVBQTExfU0RNX1NTQ19FTgkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BS RAkoMHhmZmZmIDw8IDE2KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjIJMHg1OAorCisj ZGVmaW5lIE1JUElUWF9EU0lfUExMX1BXUgkweDY4CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1f UFdSX09OCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQor I2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9BQ0sJQklUKDgpCisKKyNkZWZpbmUgTUlQSVRY X0RTSV9TV19DVFJMCTB4ODAKKyNkZWZpbmUgU1dfQ1RSTF9FTgkJCUJJVCgwKQorCisjZGVmaW5l IE1JUElUWF9EU0lfU1dfQ1RSTF9DT04wCTB4ODQKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9P RQkJQklUKDApCisjZGVmaW5lIFNXX0xOVENfTFBUWF9PRQkJCUJJVCgxKQorI2RlZmluZSBTV19M TlRDX0xQVFhfUAkJCUJJVCgyKQorI2RlZmluZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQorI2Rl ZmluZSBTV19MTlRDX0hTVFhfUFJFX09FCQlCSVQoNCkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX09F CQkJQklUKDUpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9aRVJPQ0xLCQlCSVQoNikKKyNkZWZpbmUg U1dfTE5UMF9MUFRYX1BSRV9PRQkJQklUKDcpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJ VCg4KQorI2RlZmluZSBTV19MTlQwX0xQVFhfUAkJCUJJVCg5KQorI2RlZmluZSBTV19MTlQwX0xQ VFhfTgkJCUJJVCgxMCkKKyNkZWZpbmUgU1dfTE5UMF9IU1RYX1BSRV9PRQkJQklUKDExKQorI2Rl ZmluZSBTV19MTlQwX0hTVFhfT0UJCQlCSVQoMTIpCisjZGVmaW5lIFNXX0xOVDBfTFBSWF9FTgkJ CUJJVCgxMykKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX1BSRV9PRQkJQklUKDE0KQorI2RlZmluZSBT V19MTlQxX0xQVFhfT0UJCQlCSVQoMTUpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9QCQkJQklUKDE2 KQorI2RlZmluZSBTV19MTlQxX0xQVFhfTgkJCUJJVCgxNykKKyNkZWZpbmUgU1dfTE5UMV9IU1RY X1BSRV9PRQkJQklUKDE4KQorI2RlZmluZSBTV19MTlQxX0hTVFhfT0UJCQlCSVQoMTkpCisjZGVm aW5lIFNXX0xOVDJfTFBUWF9QUkVfT0UJCUJJVCgyMCkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX09F CQkJQklUKDIxKQorI2RlZmluZSBTV19MTlQyX0xQVFhfUAkJCUJJVCgyMikKKyNkZWZpbmUgU1df TE5UMl9MUFRYX04JCQlCSVQoMjMpCisjZGVmaW5lIFNXX0xOVDJfSFNUWF9QUkVfT0UJCUJJVCgy NCkKKyNkZWZpbmUgU1dfTE5UMl9IU1RYX09FCQkJQklUKDI1KQorCitzdHJ1Y3QgbXRrX21pcGlf dHggeworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlOworfTsK Kworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfbWFzayhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlf dHgsIHUzMiBvZmZzZXQsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZGF0YSkKK3sKKwl1MzIgdGVt cCA9IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1h c2spIHwgKGRhdGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisKK2ludCBt dGtfbWlwaV90eF9zZXRfZGF0YV9yYXRlKHN0cnVjdCBwaHkgKnBoeSwgdW5zaWduZWQgaW50IGRh dGFfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRh dGEocGh5KTsKKworCWlmIChkYXRhX3JhdGUgPCA1MCB8fCBkYXRhX3JhdGUgPiAxMjUwKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCW1pcGlfdHgtPmRhdGFfcmF0ZSA9IGRhdGFfcmF0ZTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkg KnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEo cGh5KTsKKwl1bnNpZ25lZCBpbnQgdHhkaXYsIHR4ZGl2MCwgdHhkaXYxOworCXU2NCBwY3c7CisK KwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2 MCA9IDA7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0g MjUwKSB7CisJCXR4ZGl2ID0gMjsKKwkJdHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVs c2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAxMjUpIHsKKwkJdHhkaXYgPSA0OworCQl0eGRp djAgPSAyOworCQl0eGRpdjEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4g NjIpIHsKKwkJdHhkaXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxz ZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwKSB7CisJCXR4ZGl2ID0gMTY7CisJCXR4ZGl2 MCA9IDI7CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJCSBSR19E U0lfVk9VVF9NU0sgfCBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLAorCQkJICg0 IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkgKDQgPDwgMTEpIHwgKDQgPDwg OCkgfCAoNCA8PCA1KSB8CisJCQkgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTik7 CisKKwl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs IE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJCSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8IFJHX0RT SV9MTlRfSFNfQklBU19FTiwKKwkJCSAoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7 CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJIFJHX0RT SV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4sCisJCQkgUkdfRFNJX0NLR19MRE9P VVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs IE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8IFJHX0RT SV9NUFBMTF9TRE1fSVNPX0VOLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OKTsKKworCW10 a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExM X1BMTF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM X0NPTjAsCisJCQkgUkdfRFNJX01QUExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAor CQkJIFJHX0RTSV9NUFBMTF9QUkVESVYsCisJCQkgKHR4ZGl2MCA8PCAzKSB8ICh0eGRpdjEgPDwg NSkpOworCisJLyoKKwkgKiBQTEwgUENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRl Z2VyIHBhcnQgb2YgcGN3CisJICogUENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBj dworCSAqIHBjdyA9IGRhdGFfUmF0ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBvc3QgRElW ID00LCBzbyBuZWVkIGRhdGFfUmF0ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAqLworCXBj dyA9ICgodTY0KSBtaXBpX3R4LT5kYXRhX3JhdGUgKiB0eGRpdikgPDwgMjQ7CisJcGN3IC89IDEz OworCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJX1BMTF9DT04yKTsKKwor CW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSBSR19E U0lfTVBQTExfU0RNX0ZSQV9FTiwgUkdfRFNJX01QUExMX1NETV9GUkFfRU4pOworCisJbXRrX21p cGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkgUkdfRFNJX0xO VENfTERPT1VUX0VOLCBSR19EU0lfTE5UQ19MRE9PVVRfRU4pOworCW10a19taXBpX3R4X21hc2so bWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xET09VVF9F TiwgUkdfRFNJX0xOVDBfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J UElUWF9EU0lfREFUQV9MQU5FMSwKKwkJCSBSR19EU0lfTE5UMV9MRE9PVVRfRU4sIFJHX0RTSV9M TlQxX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RB VEFfTEFORTIsCisJCQkgUkdfRFNJX0xOVDJfTERPT1VUX0VOLCBSR19EU0lfTE5UMl9MRE9PVVRf RU4pOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUzLAor CQkJIFJHX0RTSV9MTlQzX0xET09VVF9FTiwgUkdfRFNJX0xOVDNfTERPT1VUX0VOKTsKKworCW10 a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJCSBSR19EU0lf TVBQTExfUExMX0VOLCBSR19EU0lfTVBQTExfUExMX0VOKTsKKworCXVzbGVlcF9yYW5nZSgyMCwg MTAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwK KwkJCSBSR19EU0lfTVBQTExfU0RNX1NTQ19FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p cGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX1BBRF9USUVfTE9XX0VOLCAwKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29mZihzdHJ1Y3Qg cGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZk YXRhKHBoeSk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NP TjAsIFJHX0RTSV9NUFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4 LCBNSVBJVFhfRFNJX1RPUF9DT04sIFJHX0RTSV9QQURfVElFX0xPV19FTiwKKwkJCVJHX0RTSV9Q QURfVElFX0xPV19FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lf Q0xPQ0tfTEFORSwKKwkJCSBSR19EU0lfTE5UQ19MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4 X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xE T09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFf TEFORTEsCisJCQkgUkdfRFNJX0xOVDFfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNr KG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMiwKKwkJCSBSR19EU0lfTE5UMl9MRE9PVVRf RU4sIDApOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUz LAorCQkJIFJHX0RTSV9MTlQzX0xET09VVF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p cGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOIHwg UkdfRFNJX01QUExMX1NETV9QV1JfT04sCisJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTik7CisK KwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX0xO VF9IU19CSUFTX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RT SV9DT04sCisJCQlSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOLCAwKTsK KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQlSR19E U0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2so bWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX0RJVl9NU0ssIDApOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfbWlwaV90eF9vcHMg PSB7CisJLnBvd2VyX29uID0gbXRrX21pcGlfdHhfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IG10 a19taXBpX3R4X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRp YyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfbWlwaV90eCAq bWlwaV90eDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3Ry dWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwltaXBpX3R4ID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptaXBpX3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFt aXBpX3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWlwaV90eC0+cmVncyA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihtaXBpX3R4LT5yZWdzKSkgeworCQly ZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn ZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlw aHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBOVUxMLCAmbXRrX21pcGlfdHhfb3BzKTsKKwlpZiAo SVNfRVJSKHBoeSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIE1JUEkgRC1Q SFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5 LCBtaXBpX3R4KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lz dGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP KHBoeV9wcm92aWRlcik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19taXBpX3R4X21hdGNoW10gPSB7CisJeyAuY29tcGF0 aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIsIH0sCisJe30sCit9OworCitzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfbWlw aV90eF9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX21pcGlfdHhfcmVtb3ZlLAorCS5kcml2ZXIgPSB7 CisJCS5uYW1lID0gIm1lZGlhdGVrLW1pcGktdHgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtf bWlwaV90eF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfbWlwaV90eC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmNGExMAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5oCkBAIC0wLDAg KzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm IF9NVEtfTUlQSV9UWF9IXworI2RlZmluZSBfTVRLX01JUElfVFhfSAorCitzdHJ1Y3QgcGh5Owor CitpbnQgbXRrX21pcGlfdHhfc2V0X2RhdGFfcmF0ZShzdHJ1Y3QgcGh5ICpwaHksIHVuc2lnbmVk IGludCBkYXRhX3JhdGUpOworCisjZW5kaWYKLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=