From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jitao Shi Subject: [PATCH v1 1/2] drm/mediatek: separate mipi_tx to different file Date: Tue, 19 Feb 2019 17:14:03 +0800 Message-ID: <20190219091404.89370-2-jitao.shi@mediatek.com> References: <20190219091404.89370-1-jitao.shi@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190219091404.89370-1-jitao.shi@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , linux-pwm@vger.kernel.org, David Airlie , Matthias Brugger Cc: stonea168@163.com, dri-devel@lists.freedesktop.org, Andy Yan , Ajay Kumar , Vincent Palatin , cawa.cheng@mediatek.com, Russell King , Thierry Reding , devicetree@vger.kernel.org, Jitao Shi , linux-mediatek@lists.infradead.org, yingjoe.chen@mediatek.com, eddie.huang@mediatek.com, linux-arm-kernel@lists.infradead.org, Rahul Sharma , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Sascha Hauer , Sean Paul List-Id: linux-mediatek@lists.infradead.org RGlmZmVyZW50IElDIGhhcyBkaWZmZXJlbnQgbWlwaV90eCBzZXR0aW5nIG9mIGRzaS4KVGhpcyBw YXRjaCBzZXBhcmF0ZXMgdGhlIG1pcGlfdHggaGFyZHdhcmUgcmVsYXRlIHBhcnQgZm9yIG10ODE3 My4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgICAgICAgIHwgMzUwICsrLS0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmggICAg ICAgIHwgIDUxICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfbWlwaV90 eC5jIHwgMjkwICsrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNzcgaW5zZXJ0aW9u cygrKSwgMzE1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfbWlwaV90eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19tdDgxNzNfbWlwaV90eC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm aWxlCmluZGV4IDgyYWU0OWM2NDIyMS4uMmM4ZGUxZjVhNWVlIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX2Nv bG9yLm8gXAogCQkgIG10a19kcm1fcGxhbmUubyBcCiAJCSAgbXRrX2RzaS5vIFwKIAkJICBtdGtf bWlwaV90eC5vIFwKKwkJICBtdGtfbXQ4MTczX21pcGlfdHgubyBcCiAJCSAgbXRrX2RwaS5vCiAK IG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCmluZGV4IDkwZTkxMzEwODk1MC4uZmEzNjFjOGJlOGQ3 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwpAQCAtMTEsMjkyICsxMSw0 NSBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAq LwogCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS9waHku aD4KLQotI2RlZmluZSBNSVBJVFhfRFNJX0NPTgkJMHgwMAotI2RlZmluZSBSR19EU0lfTERPQ09S RV9FTgkJQklUKDApCi0jZGVmaW5lIFJHX0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKLSNkZWZp bmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMgPDwgMikKLSNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJ CSg3IDw8IDQpCi0jZGVmaW5lIFJHX0RTSV9QSFlDTEtfU0VMCQkoMiA8PCA4KQotI2RlZmluZSBS R19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlCSVQoMTApCi0jZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBf RU4JCUJJVCgxMSkKLQotI2RlZmluZSBNSVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAotI2RlZmlu ZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJMHgwOAotI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFO RTEJMHgwYwotI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTIJMHgxMAotI2RlZmluZSBNSVBJ VFhfRFNJX0RBVEFfTEFORTMJMHgxNAotI2RlZmluZSBSR19EU0lfTE5UeF9MRE9PVVRfRU4JCUJJ VCgwKQotI2RlZmluZSBSR19EU0lfTE5UeF9DS0xBTkVfRU4JCUJJVCgxKQotI2RlZmluZSBSR19E U0lfTE5UeF9MUFRYX0lQTFVTMQkJQklUKDIpCi0jZGVmaW5lIFJHX0RTSV9MTlR4X0xQVFhfSVBM VVMyCQlCSVQoMykKLSNkZWZpbmUgUkdfRFNJX0xOVHhfTFBUWF9JTUlOVVMJCUJJVCg0KQotI2Rl ZmluZSBSR19EU0lfTE5UeF9MUENEX0lQTFVTCQlCSVQoNSkKLSNkZWZpbmUgUkdfRFNJX0xOVHhf TFBDRF9JTUlOVVMJCUJJVCg2KQotI2RlZmluZSBSR19EU0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8 IDgpCi0KLSNkZWZpbmUgTUlQSVRYX0RTSV9UT1BfQ09OCTB4NDAKLSNkZWZpbmUgUkdfRFNJX0xO VF9JTlRSX0VOCQlCSVQoMCkKLSNkZWZpbmUgUkdfRFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkK LSNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0VOCQlCSVQoMikKLSNkZWZpbmUgUkdfRFNJX0xO VF9URVNUTU9ERV9FTgkJQklUKDMpCi0jZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQko MHhmIDw8IDQpCi0jZGVmaW5lIFJHX0RTSV9MTlRfQUlPX1NFTAkJKDcgPDwgOCkKLSNkZWZpbmUg UkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEpCi0jZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBV VF9FTgkJQklUKDEyKQotI2RlZmluZSBSR19EU0lfUFJFU0VSVkUJCQkoNyA8PCAxMykKLQotI2Rl ZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkweDQ0Ci0jZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlC SVQoMCkKLSNkZWZpbmUgUkdfRFNJX0JHX0NLRU4JCQlCSVQoMSkKLSNkZWZpbmUgUkdfRFNJX0JH X0RJVgkJCSgweDMgPDwgMikKLSNkZWZpbmUgUkdfRFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkK LSNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4M2ZmZmYgPDwgNSkKLSNkZWZpbmUgUkdfRFNJ X1YxMl9TRUwJCQkoNyA8PCA1KQotI2RlZmluZSBSR19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCi0j ZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8IDExKQotI2RlZmluZSBSR19EU0lfVjA0X1NF TAkJCSg3IDw8IDE0KQotI2RlZmluZSBSR19EU0lfVjAzMl9TRUwJCQkoNyA8PCAxNykKLSNkZWZp bmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkKLSNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0J CSgweGYgPDwgMjQpCi0jZGVmaW5lIFJHX0RTSV9CR19SMl9UUklNCQkoMHhmIDw8IDI4KQotCi0j ZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjAJMHg1MAotI2RlZmluZSBSR19EU0lfTVBQTExfUExM X0VOCQlCSVQoMCkKLSNkZWZpbmUgUkdfRFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQot I2RlZmluZSBSR19EU0lfTVBQTExfUFJFRElWCQkoMyA8PCAxKQotI2RlZmluZSBSR19EU0lfTVBQ TExfVFhESVYwCQkoMyA8PCAzKQotI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1 KQotI2RlZmluZSBSR19EU0lfTVBQTExfUE9TRElWCQkoNyA8PCA3KQotI2RlZmluZSBSR19EU0lf TVBQTExfTU9OVkNfRU4JCUJJVCgxMCkKLSNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJ QklUKDExKQotI2RlZmluZSBSR19EU0lfTVBQTExfVk9EX0VOCQlCSVQoMTIpCi0KLSNkZWZpbmUg TUlQSVRYX0RTSV9QTExfQ09OMQkweDU0Ci0jZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VO CQlCSVQoMCkKLSNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKLSNk ZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4JCUJJVCgyKQotI2RlZmluZSBSR19EU0lfTVBQ TExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8PCAxNikKLQotI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9D T04yCTB4NTgKLQotI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9UT1AJMHg2NAotI2RlZmluZSBSR19E U0lfTVBQTExfUFJFU0VSVkUJCSgweGZmIDw8IDgpCi0KLSNkZWZpbmUgTUlQSVRYX0RTSV9QTExf UFdSCTB4NjgKLSNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfT04JCUJJVCgwKQotI2RlZmlu ZSBSR19EU0lfTVBQTExfU0RNX0lTT19FTgkJQklUKDEpCi0jZGVmaW5lIFJHX0RTSV9NUFBMTF9T RE1fUFdSX0FDSwlCSVQoOCkKLQotI2RlZmluZSBNSVBJVFhfRFNJX1NXX0NUUkwJMHg4MAotI2Rl ZmluZSBTV19DVFJMX0VOCQkJQklUKDApCi0KLSNkZWZpbmUgTUlQSVRYX0RTSV9TV19DVFJMX0NP TjAJMHg4NAotI2RlZmluZSBTV19MTlRDX0xQVFhfUFJFX09FCQlCSVQoMCkKLSNkZWZpbmUgU1df TE5UQ19MUFRYX09FCQkJQklUKDEpCi0jZGVmaW5lIFNXX0xOVENfTFBUWF9QCQkJQklUKDIpCi0j ZGVmaW5lIFNXX0xOVENfTFBUWF9OCQkJQklUKDMpCi0jZGVmaW5lIFNXX0xOVENfSFNUWF9QUkVf T0UJCUJJVCg0KQotI2RlZmluZSBTV19MTlRDX0hTVFhfT0UJCQlCSVQoNSkKLSNkZWZpbmUgU1df TE5UQ19IU1RYX1pFUk9DTEsJCUJJVCg2KQotI2RlZmluZSBTV19MTlQwX0xQVFhfUFJFX09FCQlC SVQoNykKLSNkZWZpbmUgU1dfTE5UMF9MUFRYX09FCQkJQklUKDgpCi0jZGVmaW5lIFNXX0xOVDBf TFBUWF9QCQkJQklUKDkpCi0jZGVmaW5lIFNXX0xOVDBfTFBUWF9OCQkJQklUKDEwKQotI2RlZmlu ZSBTV19MTlQwX0hTVFhfUFJFX09FCQlCSVQoMTEpCi0jZGVmaW5lIFNXX0xOVDBfSFNUWF9PRQkJ CUJJVCgxMikKLSNkZWZpbmUgU1dfTE5UMF9MUFJYX0VOCQkJQklUKDEzKQotI2RlZmluZSBTV19M TlQxX0xQVFhfUFJFX09FCQlCSVQoMTQpCi0jZGVmaW5lIFNXX0xOVDFfTFBUWF9PRQkJCUJJVCgx NSkKLSNkZWZpbmUgU1dfTE5UMV9MUFRYX1AJCQlCSVQoMTYpCi0jZGVmaW5lIFNXX0xOVDFfTFBU WF9OCQkJQklUKDE3KQotI2RlZmluZSBTV19MTlQxX0hTVFhfUFJFX09FCQlCSVQoMTgpCi0jZGVm aW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJVCgxOSkKLSNkZWZpbmUgU1dfTE5UMl9MUFRYX1BSRV9P RQkJQklUKDIwKQotI2RlZmluZSBTV19MTlQyX0xQVFhfT0UJCQlCSVQoMjEpCi0jZGVmaW5lIFNX X0xOVDJfTFBUWF9QCQkJQklUKDIyKQotI2RlZmluZSBTV19MTlQyX0xQVFhfTgkJCUJJVCgyMykK LSNkZWZpbmUgU1dfTE5UMl9IU1RYX1BSRV9PRQkJQklUKDI0KQotI2RlZmluZSBTV19MTlQyX0hT VFhfT0UJCQlCSVQoMjUpCi0KLXN0cnVjdCBtdGtfbWlwaXR4X2RhdGEgewotCWNvbnN0IHUzMiBt cHBsbF9wcmVzZXJ2ZTsKLX07Ci0KLXN0cnVjdCBtdGtfbWlwaV90eCB7Ci0Jc3RydWN0IGRldmlj ZSAqZGV2OwotCXZvaWQgX19pb21lbSAqcmVnczsKLQl1MzIgZGF0YV9yYXRlOwotCWNvbnN0IHN0 cnVjdCBtdGtfbWlwaXR4X2RhdGEgKmRyaXZlcl9kYXRhOwotCXN0cnVjdCBjbGtfaHcgcGxsX2h3 OwotCXN0cnVjdCBjbGsgKnBsbDsKLX07CisjaW5jbHVkZSAibXRrX21pcGlfdHguaCIKIAotc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX21pcGlfdHggKm10a19taXBpX3R4X2Zyb21fY2xrX2h3KHN0 cnVjdCBjbGtfaHcgKmh3KQoraW5saW5lIHN0cnVjdCBtdGtfbWlwaV90eCAqbXRrX21pcGlfdHhf ZnJvbV9jbGtfaHcoc3RydWN0IGNsa19odyAqaHcpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZiho dywgc3RydWN0IG10a19taXBpX3R4LCBwbGxfaHcpOwogfQogCi1zdGF0aWMgdm9pZCBtdGtfbWlw aV90eF9jbGVhcl9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCwgdTMyIG9mZnNldCwK LQkJCQkgICB1MzIgYml0cykKK3ZvaWQgbXRrX21pcGlfdHhfY2xlYXJfYml0cyhzdHJ1Y3QgbXRr X21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCisJCQkgICAgdTMyIGJpdHMpCiB7CiAJdTMy IHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKIAogCXdyaXRlbCh0ZW1wICYg fmJpdHMsIG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBtdGtfbWlw aV90eF9zZXRfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCi0J CQkJIHUzMiBiaXRzKQordm9pZCBtdGtfbWlwaV90eF9zZXRfYml0cyhzdHJ1Y3QgbXRrX21pcGlf dHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCisJCQkgIHUzMiBiaXRzKQogewogCXUzMiB0ZW1wID0g cmVhZGwobWlwaV90eC0+cmVncyArIG9mZnNldCk7CiAKIAl3cml0ZWwodGVtcCB8IGJpdHMsIG1p cGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBtdGtfbWlwaV90eF91cGRh dGVfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCi0JCQkJICAg IHUzMiBtYXNrLCB1MzIgZGF0YSkKK3ZvaWQgbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMoc3RydWN0 IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LAorCQkJICAgICB1MzIgbWFzaywgdTMy IGRhdGEpCiB7CiAJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKIAog CXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIG1pcGlfdHgtPnJlZ3MgKyBv ZmZzZXQpOwogfQogCi1zdGF0aWMgaW50IG10a19taXBpX3R4X3BsbF9wcmVwYXJlKHN0cnVjdCBj bGtfaHcgKmh3KQotewotCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IG10a19taXBpX3R4 X2Zyb21fY2xrX2h3KGh3KTsKLQl1OCB0eGRpdiwgdHhkaXYwLCB0eGRpdjE7Ci0JdTY0IHBjdzsK LQotCWRldl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTogJXUgSHpcbiIsIG1pcGlfdHgtPmRh dGFfcmF0ZSk7Ci0KLQlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwMCkgewotCQl0 eGRpdiA9IDE7Ci0JCXR4ZGl2MCA9IDA7Ci0JCXR4ZGl2MSA9IDA7Ci0JfSBlbHNlIGlmIChtaXBp X3R4LT5kYXRhX3JhdGUgPj0gMjUwMDAwMDAwKSB7Ci0JCXR4ZGl2ID0gMjsKLQkJdHhkaXYwID0g MTsKLQkJdHhkaXYxID0gMDsKLQl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAxMjUw MDAwMDApIHsKLQkJdHhkaXYgPSA0OwotCQl0eGRpdjAgPSAyOwotCQl0eGRpdjEgPSAwOwotCX0g ZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDApIHsKLQkJdHhkaXYgPSA4Owot CQl0eGRpdjAgPSAyOwotCQl0eGRpdjEgPSAxOwotCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9y YXRlID49IDUwMDAwMDAwKSB7Ci0JCXR4ZGl2ID0gMTY7Ci0JCXR4ZGl2MCA9IDI7Ci0JCXR4ZGl2 MSA9IDI7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXRrX21pcGlfdHhf dXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCi0JCQkJUkdfRFNJX1ZPVVRf TVNLIHwKLQkJCQlSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLAotCQkJCSg0IDw8 IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8Ci0JCQkJKDQgPDwgMTEpIHwgKDQgPDwgOCkg fCAoNCA8PCA1KSB8Ci0JCQkJUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTik7Ci0K LQl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7Ci0KLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBp X3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCi0JCQkJUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUgfCBS R19EU0lfTE5UX0hTX0JJQVNfRU4sCi0JCQkJKDggPDwgNCkgfCBSR19EU0lfTE5UX0hTX0JJQVNf RU4pOwotCi0JbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCi0J CQkgICAgIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4pOwotCi0JbXRr X21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfUFdSLAotCQkJCVJH X0RTSV9NUFBMTF9TRE1fUFdSX09OIHwKLQkJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTiwKLQkJ CQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTik7Ci0KLQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1p cGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCi0JCQkgICAgICAgUkdfRFNJX01QUExMX1BMTF9F Tik7Ci0KLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9D T04wLAotCQkJCVJHX0RTSV9NUFBMTF9UWERJVjAgfCBSR19EU0lfTVBQTExfVFhESVYxIHwKLQkJ CQlSR19EU0lfTVBQTExfUFJFRElWLAotCQkJCSh0eGRpdjAgPDwgMykgfCAodHhkaXYxIDw8IDUp KTsKLQotCS8qCi0JICogUExMIFBDVyBjb25maWcKLQkgKiBQQ1cgYml0IDI0fjMwID0gaW50ZWdl ciBwYXJ0IG9mIHBjdwotCSAqIFBDVyBiaXQgMH4yMyA9IGZyYWN0aW9uYWwgcGFydCBvZiBwY3cK LQkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2NsayoyKTsKLQkgKiBQb3N0IERJViA9 NCwgc28gbmVlZCBkYXRhX1JhdGUqNAotCSAqIFJlZl9jbGsgaXMgMjZNSHoKLQkgKi8KLQlwY3cg PSBkaXZfdTY0KCgodTY0KW1pcGlfdHgtPmRhdGFfcmF0ZSAqIDIgKiB0eGRpdikgPDwgMjQsCi0J CSAgICAgIDI2MDAwMDAwKTsKLQl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRYX0RT SV9QTExfQ09OMik7Ci0KLQltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJ X1BMTF9DT04xLAotCQkJICAgICBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7Ci0KLQltdGtfbWlw aV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExf UExMX0VOKTsKLQotCXVzbGVlcF9yYW5nZSgyMCwgMTAwKTsKLQotCW10a19taXBpX3R4X2NsZWFy X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKLQkJCSAgICAgICBSR19EU0lfTVBQ TExfU0RNX1NTQ19FTik7Ci0KLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJ VFhfRFNJX1BMTF9UT1AsCi0JCQkJUkdfRFNJX01QUExMX1BSRVNFUlZFLAotCQkJCW1pcGlfdHgt PmRyaXZlcl9kYXRhLT5tcHBsbF9wcmVzZXJ2ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IHZvaWQgbXRrX21pcGlfdHhfcGxsX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKLXsKLQlz dHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7 Ci0KLQlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInVucHJlcGFyZVxuIik7Ci0KLQltdGtfbWlwaV90 eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCi0JCQkgICAgICAgUkdf RFNJX01QUExMX1BMTF9FTik7Ci0KLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBN SVBJVFhfRFNJX1BMTF9UT1AsCi0JCQkJUkdfRFNJX01QUExMX1BSRVNFUlZFLCAwKTsKLQotCW10 a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKLQkJCQlS R19EU0lfTVBQTExfU0RNX0lTT19FTiB8Ci0JCQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04sCi0J CQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4pOwotCi0JbXRrX21pcGlfdHhfY2xlYXJfYml0cyht aXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCi0JCQkgICAgICAgUkdfRFNJX0xOVF9IU19CSUFT X0VOKTsKLQotCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9DT04s Ci0JCQkgICAgICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7Ci0K LQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAotCQkJ ICAgICAgIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4pOwotCi0JbXRrX21pcGlf dHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAotCQkJICAgICAgIFJH X0RTSV9NUFBMTF9ESVZfTVNLKTsKLX0KLQotc3RhdGljIGxvbmcgbXRrX21pcGlfdHhfcGxsX3Jv dW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKLQkJCQkgICAg ICAgdW5zaWduZWQgbG9uZyAqcHJhdGUpCitsb25nIG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRl KHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJdW5zaWduZWQgbG9u ZyAqcHJhdGUpCiB7CiAJcmV0dXJuIGNsYW1wX3ZhbChyYXRlLCA1MDAwMDAwMCwgMTI1MDAwMDAw MCk7CiB9CiAKLXN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtf aHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpCitpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1 bnNpZ25lZCBsb25nIHJhdGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCiB7 CiAJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHco aHcpOwogCkBAIC0zMDcsMzcgKzYwLDE0IEBAIHN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3Nl dF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJcmV0dXJuIDA7 CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZShz dHJ1Y3QgY2xrX2h3ICpodywKLQkJCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQordW5z aWduZWQgbG9uZyBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcs CisJCQkJCSAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKIHsKIAlzdHJ1Y3QgbXRrX21pcGlf dHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7CiAKIAlyZXR1cm4gbWlw aV90eC0+ZGF0YV9yYXRlOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgbXRrX21p cGlfdHhfcGxsX29wcyA9IHsKLQkucHJlcGFyZSA9IG10a19taXBpX3R4X3BsbF9wcmVwYXJlLAot CS51bnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlLAotCS5yb3VuZF9yYXRlID0g bXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gbXRrX21pcGlfdHhfcGxs X3NldF9yYXRlLAotCS5yZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZSwK LX07Ci0KLXN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb25fc2lnbmFsKHN0cnVjdCBwaHkg KnBoeSkKLXsKLQlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEo cGh5KTsKLQl1MzIgcmVnOwotCi0JZm9yIChyZWcgPSBNSVBJVFhfRFNJX0NMT0NLX0xBTkU7Ci0J ICAgICByZWcgPD0gTUlQSVRYX0RTSV9EQVRBX0xBTkUzOyByZWcgKz0gNCkKLQkJbXRrX21pcGlf dHhfc2V0X2JpdHMobWlwaV90eCwgcmVnLCBSR19EU0lfTE5UeF9MRE9PVVRfRU4pOwotCi0JbXRr X21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCi0JCQkgICAg ICAgUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50 IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKIHsKIAlzdHJ1Y3QgbXRrX21p cGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKQEAgLTM0OSwzMCArNzksMTYg QEAgc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCiAJCXJl dHVybiByZXQ7CiAKIAkvKiBFbmFibGUgRFNJIExhbmUgTERPIG91dHB1dHMsIGRpc2FibGUgcGFk IHRpZSBsb3cgKi8KLQltdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwocGh5KTsKLQorCW1pcGlf dHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2VuYWJsZV9zaWduYWwocGh5KTsKIAlyZXR1cm4gMDsK IH0KIAotc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1Y3QgcGh5 ICpwaHkpCi17Ci0Jc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRh KHBoeSk7Ci0JdTMyIHJlZzsKLQotCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElU WF9EU0lfVE9QX0NPTiwKLQkJCSAgICAgUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKLQotCWZvciAo cmVnID0gTUlQSVRYX0RTSV9DTE9DS19MQU5FOwotCSAgICAgcmVnIDw9IE1JUElUWF9EU0lfREFU QV9MQU5FMzsgcmVnICs9IDQpCi0JCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgcmVn LCBSR19EU0lfTE5UeF9MRE9PVVRfRU4pOwotfQotCiBzdGF0aWMgaW50IG10a19taXBpX3R4X3Bv d2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCiB7CiAJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4 ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CiAKIAkvKiBFbmFibGUgcGFkIHRpZSBsb3csIGRpc2Fi bGUgRFNJIExhbmUgTERPIG91dHB1dHMgKi8KLQltdGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFs KHBoeSk7CisJbWlwaV90eC0+ZHJpdmVyX2RhdGEtPm1pcGlfdHhfZGlzYWJsZV9zaWduYWwocGh5 KTsKIAogCS8qIERpc2FibGUgUExMIGFuZCBwb3dlciBkb3duIGNvcmUgKi8KIAljbGtfZGlzYWJs ZV91bnByZXBhcmUobWlwaV90eC0+cGxsKTsKQEAgLTM4NiwxNSArMTAyLDIzIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgcGh5X29wcyBtdGtfbWlwaV90eF9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19N T0RVTEUsCiB9OwogCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9jbGtfZ2V0X29wcyhzdHJ1Y3Qg bXRrX21pcGlfdHggKm1pcGlfdHgsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjbGtfb3BzICoqb3Bz KQoreworCWlmIChtaXBpX3R4ICYmIG1pcGlfdHgtPmRyaXZlcl9kYXRhICYmCisJICAgIG1pcGlf dHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2Nsa19vcHMpCisJCSpvcHMgPSBtaXBpX3R4LT5kcml2 ZXJfZGF0YS0+bWlwaV90eF9jbGtfb3BzOworCWVsc2UKKwkJZGV2X2VycihtaXBpX3R4LT5kZXYs ICJGYWlsZWQgdG8gZ2V0IGNsayBvcHMgb2YgcGh5XG4iKTsKK30KKwogc3RhdGljIGludCBtdGtf bWlwaV90eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4Owog CXN0cnVjdCByZXNvdXJjZSAqbWVtOwotCXN0cnVjdCBjbGsgKnJlZl9jbGs7CiAJY29uc3QgY2hh ciAqcmVmX2Nsa19uYW1lOwogCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19pbml0ID0gewotCQku b3BzID0gJm10a19taXBpX3R4X3BsbF9vcHMsCiAJCS5udW1fcGFyZW50cyA9IDEsCiAJCS5wYXJl bnRfbmFtZXMgPSAoY29uc3QgY2hhciAqIGNvbnN0ICopJnJlZl9jbGtfbmFtZSwKIAkJLmZsYWdz ID0gQ0xLX1NFVF9SQVRFX0dBVEUsCkBAIC00MDgsNiArMTMyLDcgQEAgc3RhdGljIGludCBtdGtf bWlwaV90eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlyZXR1cm4gLUVO T01FTTsKIAogCW1pcGlfdHgtPmRyaXZlcl9kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRh KGRldik7CisKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOwogCW1pcGlfdHgtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0p OwogCWlmIChJU19FUlIobWlwaV90eC0+cmVncykpIHsKQEAgLTQxNiwxMyArMTQxLDE0IEBAIHN0 YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK IAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7 Ci0JaWYgKElTX0VSUihyZWZfY2xrKSkgewotCQlyZXQgPSBQVFJfRVJSKHJlZl9jbGspOworCW1p cGlfdHgtPnJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKG1p cGlfdHgtPnJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+cmVmX2Nsayk7CiAJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVkXG4iLCByZXQp OwogCQlyZXR1cm4gcmV0OwogCX0KLQlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRfbmFtZShyZWZf Y2xrKTsKKworCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKG1pcGlfdHgtPnJlZl9jbGsp OwogCiAJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2st b3V0cHV0LW5hbWVzIiwKIAkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CkBAIC00MzEsNiArMTU3 LDggQEAgc3RhdGljIGludCBtdGtfbWlwaV90eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQogCQlyZXR1cm4gcmV0OwogCX0KIAorCW10a19taXBpX3R4X2Nsa19nZXRfb3BzKG1p cGlfdHgsICZjbGtfaW5pdC5vcHMpOworCiAJbWlwaV90eC0+cGxsX2h3LmluaXQgPSAmY2xrX2lu aXQ7CiAJbWlwaV90eC0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIoZGV2LCAmbWlwaV90eC0+cGxs X2h3KTsKIAlpZiAoSVNfRVJSKG1pcGlfdHgtPnBsbCkpIHsKQEAgLTQ2NSwyMCArMTkzLDEyIEBA IHN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX21pcGl0eF9kYXRh IG10MjcwMV9taXBpdHhfZGF0YSA9IHsKLQkubXBwbGxfcHJlc2VydmUgPSAoMyA8PCA4KQotfTsK LQotc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfbWlwaXR4X2RhdGEgbXQ4MTczX21pcGl0eF9kYXRh ID0gewotCS5tcHBsbF9wcmVzZXJ2ZSA9ICgwIDw8IDgpCi19OwotCiBzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBtdGtfbWlwaV90eF9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQyNzAxLW1pcGktdHgiLAogCSAgLmRhdGEgPSAmbXQyNzAxX21pcGl0eF9k YXRhIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIsCiAJICAu ZGF0YSA9ICZtdDgxNzNfbWlwaXR4X2RhdGEgfSwKLQl7fSwKKwl7IH0sCiB9OwogCiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19taXBpX3R4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li4yZDdmMDViMGQ2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX21pcGlfdHguaApAQCAtMCwwICsxLDUxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KKyAqLworCisj aWZuZGVmIF9NVEtfTUlQSV9UWF9ICisjZGVmaW5lIF9NVEtfTUlQSV9UWF9ICisKKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorCitzdHJ1Y3Qg bXRrX21pcGl0eF9kYXRhIHsKKwljb25zdCB1MzIgbXBwbGxfcHJlc2VydmU7CisJY29uc3Qgc3Ry dWN0IGNsa19vcHMgKm1pcGlfdHhfY2xrX29wczsKKwl2b2lkICgqbWlwaV90eF9lbmFibGVfc2ln bmFsKShzdHJ1Y3QgcGh5ICpwaHkpOworCXZvaWQgKCptaXBpX3R4X2Rpc2FibGVfc2lnbmFsKShz dHJ1Y3QgcGh5ICpwaHkpOworfTsKKworc3RydWN0IG10a19taXBpX3R4IHsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXUzMiBkYXRhX3JhdGU7CisJc3RydWN0 IGNsayAqcmVmX2NsazsKKwljb25zdCBzdHJ1Y3QgbXRrX21pcGl0eF9kYXRhICpkcml2ZXJfZGF0 YTsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwlzdHJ1Y3QgY2xrICpwbGw7Cit9OworCitzdHJ1 Y3QgbXRrX21pcGlfdHggKm10a19taXBpX3R4X2Zyb21fY2xrX2h3KHN0cnVjdCBjbGtfaHcgKmh3 KTsKK3ZvaWQgbXRrX21pcGlfdHhfY2xlYXJfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlf dHgsIHUzMiBvZmZzZXQsIHUzMiBiaXRzKTsKK3ZvaWQgbXRrX21pcGlfdHhfc2V0X2JpdHMoc3Ry dWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LCB1MzIgYml0cyk7Cit2b2lkIG10 a19taXBpX3R4X3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCwgdTMyIG9m ZnNldCwgdTMyIG1hc2ssCisJCQkgICAgIHUzMiBkYXRhKTsKK2xvbmcgbXRrX21pcGlfdHhfcGxs X3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQl1 bnNpZ25lZCBsb25nICpwcmF0ZSk7CitpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVj dCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcg cGFyZW50X3JhdGUpOwordW5zaWduZWQgbG9uZyBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUo c3RydWN0IGNsa19odyAqaHcsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7CisK K2V4dGVybiBjb25zdCBzdHJ1Y3QgbXRrX21pcGl0eF9kYXRhIG10MjcwMV9taXBpdHhfZGF0YTsK K2V4dGVybiBjb25zdCBzdHJ1Y3QgbXRrX21pcGl0eF9kYXRhIG10ODE3M19taXBpdHhfZGF0YTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3 M19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19taXBpX3R4 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZTU3Y2RmODViMDYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19t aXBpX3R4LmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworCisjaW5jbHVkZSAibXRrX21pcGlfdHguaCIKKworI2RlZmluZSBNSVBJVFhfRFNJ X0NPTgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJH X0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMg PDwgMikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5lIFJHX0RT SV9QSFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlC SVQoMTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2RlZmluZSBN SVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJ MHgwOAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBNSVBJVFhf RFNJX0RBVEFfTEFORTIJMHgxMAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAor I2RlZmluZSBSR19EU0lfTE5UeF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5U eF9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UeF9MUFRYX0lQTFVTMQkJQklU KDIpCisjZGVmaW5lIFJHX0RTSV9MTlR4X0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdf RFNJX0xOVHhfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UeF9MUENEX0lQ TFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2Rl ZmluZSBSR19EU0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RT SV9UT1BfQ09OCTB4NDAKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZp bmUgUkdfRFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBf Q0FMX0VOCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisj ZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RT SV9MTlRfQUlPX1NFTAkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlC SVQoMTEpCisjZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBS R19EU0lfUFJFU0VSVkUJCQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkw eDQ0CisjZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JH X0NLRU4JCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZp bmUgUkdfRFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNL CQkJKDB4M2ZmZmYgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2Rl ZmluZSBSR19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJ CSg3IDw8IDExKQorI2RlZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBS R19EU0lfVjAzMl9TRUwJCQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8 PCAyMCkKKyNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJH X0RTSV9CR19SMl9UUklNCQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NP TjAJMHg1MAorI2RlZmluZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdf RFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJF RElWCQkoMyA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2Rl ZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExf UE9TRElWCQkoNyA8PCA3KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkK KyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lf TVBQTExfVk9EX0VOCQlCSVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0 CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ X01QUExMX1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9T U0NfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8 PCAxNikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJ VFhfRFNJX1BMTF9UT1AJMHg2NAorI2RlZmluZSBSR19EU0lfTVBQTExfUFJFU0VSVkUJCSgweGZm IDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfUFdSCTB4NjgKKyNkZWZpbmUgUkdfRFNJ X01QUExMX1NETV9QV1JfT04JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX0lTT19F TgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fUFdSX0FDSwlCSVQoOCkKKworI2Rl ZmluZSBNSVBJVFhfRFNJX1NXX0NUUkwJMHg4MAorI2RlZmluZSBTV19DVFJMX0VOCQkJQklUKDAp CisKKyNkZWZpbmUgTUlQSVRYX0RTSV9TV19DVFJMX0NPTjAJMHg4NAorI2RlZmluZSBTV19MTlRD X0xQVFhfUFJFX09FCQlCSVQoMCkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX09FCQkJQklUKDEpCisj ZGVmaW5lIFNXX0xOVENfTFBUWF9QCQkJQklUKDIpCisjZGVmaW5lIFNXX0xOVENfTFBUWF9OCQkJ QklUKDMpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9QUkVfT0UJCUJJVCg0KQorI2RlZmluZSBTV19M TlRDX0hTVFhfT0UJCQlCSVQoNSkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX1pFUk9DTEsJCUJJVCg2 KQorI2RlZmluZSBTV19MTlQwX0xQVFhfUFJFX09FCQlCSVQoNykKKyNkZWZpbmUgU1dfTE5UMF9M UFRYX09FCQkJQklUKDgpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9QCQkJQklUKDkpCisjZGVmaW5l IFNXX0xOVDBfTFBUWF9OCQkJQklUKDEwKQorI2RlZmluZSBTV19MTlQwX0hTVFhfUFJFX09FCQlC SVQoMTEpCisjZGVmaW5lIFNXX0xOVDBfSFNUWF9PRQkJCUJJVCgxMikKKyNkZWZpbmUgU1dfTE5U MF9MUFJYX0VOCQkJQklUKDEzKQorI2RlZmluZSBTV19MTlQxX0xQVFhfUFJFX09FCQlCSVQoMTQp CisjZGVmaW5lIFNXX0xOVDFfTFBUWF9PRQkJCUJJVCgxNSkKKyNkZWZpbmUgU1dfTE5UMV9MUFRY X1AJCQlCSVQoMTYpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9OCQkJQklUKDE3KQorI2RlZmluZSBT V19MTlQxX0hTVFhfUFJFX09FCQlCSVQoMTgpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJ VCgxOSkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX1BSRV9PRQkJQklUKDIwKQorI2RlZmluZSBTV19M TlQyX0xQVFhfT0UJCQlCSVQoMjEpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9QCQkJQklUKDIyKQor I2RlZmluZSBTV19MTlQyX0xQVFhfTgkJCUJJVCgyMykKKyNkZWZpbmUgU1dfTE5UMl9IU1RYX1BS RV9PRQkJQklUKDI0KQorI2RlZmluZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQoMjUpCisKK3N0YXRp YyBpbnQgbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3Ry dWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcpOwor CXU4IHR4ZGl2LCB0eGRpdjAsIHR4ZGl2MTsKKwl1NjQgcGN3OworCisJZGV2X2RiZyhtaXBpX3R4 LT5kZXYsICJwcmVwYXJlOiAldSBIelxuIiwgbWlwaV90eC0+ZGF0YV9yYXRlKTsKKworCWlmICht aXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTsKKwkJdHhkaXYw ID0gMDsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAy NTAwMDAwMDApIHsKKwkJdHhkaXYgPSAyOworCQl0eGRpdjAgPSAxOworCQl0eGRpdjEgPSAwOwor CX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDEyNTAwMDAwMCkgeworCQl0eGRpdiA9 IDQ7CisJCXR4ZGl2MCA9IDI7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5k YXRhX3JhdGUgPiA2MjAwMDAwMCkgeworCQl0eGRpdiA9IDg7CisJCXR4ZGl2MCA9IDI7CisJCXR4 ZGl2MSA9IDE7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDApIHsK KwkJdHhkaXYgPSAxNjsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0gMjsKKwl9IGVsc2Ugewor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4 LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJCQlSR19EU0lfVk9VVF9NU0sgfAorCQkJCVJHX0RTSV9C R19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4sCisJCQkJKDQgPDwgMjApIHwgKDQgPDwgMTcpIHwg KDQgPDwgMTQpIHwKKwkJCQkoNCA8PCAxMSkgfCAoNCA8PCA4KSB8ICg0IDw8IDUpIHwKKwkJCQlS R19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsKKworCXVzbGVlcF9yYW5nZSgzMCwg MTAwKTsKKworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9Q X0NPTiwKKwkJCQlSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8IFJHX0RTSV9MTlRfSFNfQklBU19F TiwKKwkJCQkoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7CisKKwltdGtfbWlwaV90 eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSAgICAgUkdfRFNJX0NLR19M RE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF91cGRhdGVfYml0 cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkJUkdfRFNJX01QUExMX1NETV9QV1Jf T04gfAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1f UFdSX09OKTsKKworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9Q TExfQ09OMCwKKwkJCSAgICAgICBSR19EU0lfTVBQTExfUExMX0VOKTsKKworCW10a19taXBpX3R4 X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkJUkdfRFNJX01Q UExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAorCQkJCVJHX0RTSV9NUFBMTF9QUkVE SVYsCisJCQkJKHR4ZGl2MCA8PCAzKSB8ICh0eGRpdjEgPDwgNSkpOworCisJLyoKKwkgKiBQTEwg UENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRlZ2VyIHBhcnQgb2YgcGN3CisJICog UENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBjdworCSAqIHBjdyA9IGRhdGFfUmF0 ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBvc3QgRElWID00LCBzbyBuZWVkIGRhdGFfUmF0 ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAqLworCXBjdyA9IGRpdl91NjQoKCh1NjQpbWlw aV90eC0+ZGF0YV9yYXRlICogMiAqIHR4ZGl2KSA8PCAyNCwKKwkJICAgICAgMjYwMDAwMDApOwor CXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJX1BMTF9DT04yKTsKKworCW10 a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjEsCisJCQkgICAg IFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOKTsKKworCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlf dHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9QTExfRU4pOworCisJdXNsZWVw X3JhbmdlKDIwLCAxMDApOworCisJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJ VFhfRFNJX1BMTF9DT04xLAorCQkJICAgICAgIFJHX0RTSV9NUFBMTF9TRE1fU1NDX0VOKTsKKwor CW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1RPUCwKKwkJ CQlSR19EU0lfTVBQTExfUFJFU0VSVkUsCisJCQkJbWlwaV90eC0+ZHJpdmVyX2RhdGEtPm1wcGxs X3ByZXNlcnZlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9w bGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAq bWlwaV90eCA9IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKworCWRldl9kYmcobWlwaV90 eC0+ZGV2LCAidW5wcmVwYXJlXG4iKTsKKworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90 eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJCSAgICAgICBSR19EU0lfTVBQTExfUExMX0VOKTsK KworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1RPUCwK KwkJCQlSR19EU0lfTVBQTExfUFJFU0VSVkUsIDApOworCisJbXRrX21pcGlfdHhfdXBkYXRlX2Jp dHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfUFdSLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNP X0VOIHwKKwkJCQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTiwKKwkJCQlSR19EU0lfTVBQTExfU0RN X0lTT19FTik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lf VE9QX0NPTiwKKwkJCSAgICAgICBSR19EU0lfTE5UX0hTX0JJQVNfRU4pOworCisJbXRrX21pcGlf dHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSAgICAgICBSR19EU0lf Q0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOKTsKKworCW10a19taXBpX3R4X2NsZWFy X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkgICAgICAgUkdfRFNJX0JHX0NL RU4gfCBSR19EU0lfQkdfQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlf dHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkgICAgICAgUkdfRFNJX01QUExMX0RJVl9NU0sp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgbXRrX21pcGlfdHhfcGxsX29wcyA9 IHsKKwkucHJlcGFyZSA9IG10a19taXBpX3R4X3BsbF9wcmVwYXJlLAorCS51bnByZXBhcmUgPSBt dGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlLAorCS5yb3VuZF9yYXRlID0gbXRrX21pcGlfdHhfcGxs X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlLAorCS5y ZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZSwKK307CisKK3N0YXRpYyB2 b2lkIG10a19taXBpX3R4X3Bvd2VyX29uX3NpZ25hbChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3Ry dWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJdTMyIHJl ZzsKKworCWZvciAocmVnID0gTUlQSVRYX0RTSV9DTE9DS19MQU5FOworCSAgICAgcmVnIDw9IE1J UElUWF9EU0lfREFUQV9MQU5FMzsgcmVnICs9IDQpCisJCW10a19taXBpX3R4X3NldF9iaXRzKG1p cGlfdHgsIHJlZywgUkdfRFNJX0xOVHhfTERPT1VUX0VOKTsKKworCW10a19taXBpX3R4X2NsZWFy X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJICAgICAgIFJHX0RTSV9QQURf VElFX0xPV19FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3Bvd2VyX29mZl9zaWdu YWwoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBo eV9nZXRfZHJ2ZGF0YShwaHkpOworCXUzMiByZWc7CisKKwltdGtfbWlwaV90eF9zZXRfYml0cyht aXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkgICAgIFJHX0RTSV9QQURfVElFX0xPV19F Tik7CisKKwlmb3IgKHJlZyA9IE1JUElUWF9EU0lfQ0xPQ0tfTEFORTsKKwkgICAgIHJlZyA8PSBN SVBJVFhfRFNJX0RBVEFfTEFORTM7IHJlZyArPSA0KQorCQltdGtfbWlwaV90eF9jbGVhcl9iaXRz KG1pcGlfdHgsIHJlZywgUkdfRFNJX0xOVHhfTERPT1VUX0VOKTsKK30KKworY29uc3Qgc3RydWN0 IG10a19taXBpdHhfZGF0YSBtdDI3MDFfbWlwaXR4X2RhdGEgPSB7CisJLm1wcGxsX3ByZXNlcnZl ID0gKDMgPDwgOCksCisJLm1pcGlfdHhfY2xrX29wcyA9ICZtdGtfbWlwaV90eF9wbGxfb3BzLAor CS5taXBpX3R4X2VuYWJsZV9zaWduYWwgPSBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwsCisJ Lm1pcGlfdHhfZGlzYWJsZV9zaWduYWwgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFsLAor fTsKKworY29uc3Qgc3RydWN0IG10a19taXBpdHhfZGF0YSBtdDgxNzNfbWlwaXR4X2RhdGEgPSB7 CisJLm1wcGxsX3ByZXNlcnZlID0gKDAgPDwgOCksCisJLm1pcGlfdHhfY2xrX29wcyA9ICZtdGtf bWlwaV90eF9wbGxfb3BzLAorCS5taXBpX3R4X2VuYWJsZV9zaWduYWwgPSBtdGtfbWlwaV90eF9w b3dlcl9vbl9zaWduYWwsCisJLm1pcGlfdHhfZGlzYWJsZV9zaWduYWwgPSBtdGtfbWlwaV90eF9w b3dlcl9vZmZfc2lnbmFsLAorfTsKKwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWw=