From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH v3 04/10] drm/msm/hdmi: Manage HDMI PLL through PHY driver Date: Thu, 25 Feb 2016 11:22:39 +0530 Message-ID: <1456379565-15045-5-git-send-email-architt@codeaurora.org> References: <1456379565-15045-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456379565-15045-1-git-send-email-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: robdclark@gmail.com Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, arnd@arndb.de List-Id: linux-arm-msm@vger.kernel.org QWRkIGEgaGVscGVyIHRvIGluaXRpYWxpemUgUExMIGluIHRoZSBQSFkgZHJpdmVyLiBIRE1JIFBM THMgYXJlIGdvaW5nIHRvCmhhdmUgdGhlaXIgb3duIG1taW8gYmFzZSBkaWZmZXJlbnQgZnJvbSB0 aGF0IG9mIFBIWS4KCkZvciB0aGUgY2xvY2sgY29kZSBpbiBoZG1pX3BoeV84OTYwLmMsIHNvbWUg Y2hhbmdlcyB3ZXJlIG5lZWRlZCBmb3IgaXQgdG8Kd29yayB3aXRoIHRoZSB1cGRhdGVkIHJlZ2lz dGVyIG9mZnNldHMuIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHVwZGF0ZWQgY2xvY2sKY29kZSBpbiBo ZG1pX3BsbF84OTYwLmMsIGluc3RlYWQgb2YgcmV3cml0aW5nIGl0IGluIGhkbWlfcGh5Xzg5NjAu YwppdHNlbGYuIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCB0byBwbGFjZSBDT05GSUdfQ09NTU9OX0NM T0NLIGNoZWNrcyBhbGwKYXJvdW5kLCBtYWtlcyB0aGUgY29kZSBtb3JlIGxlZ2libGUsIGFuZCBh bHNvIHJlbW92ZXMgc29tZSBvbGQgY2hlY2twYXRjaAp3YXJuaW5ncyB3aXRoIHRoZSBvcmlnaW5h bCBjb2RlLgoKVGhlIG9sZGVyIGhkbWkgcGxsIGNsb2NrIG9wcyBpbiBoZG1pX3BoeV84OTYwLmMg d2lsbCBiZSByZW1vdmVkIGxhdGVyLiBUaGUKZHJpdmVyIHdpbGwgdXNlIHRoZXNlIHVudGlsIHRo ZSBIRE1JIFBIWS9QTEwgcmVnaXN0ZXIgb2Zmc2V0cyBhcmVuJ3QKY29uc2lkZXJlZCBhcyBzZXBh cmF0ZSBkb21haW5zIChpLmUuIHRoZWlyIG9mZnNldHMgc3RhcnQgZnJvbSAwKS4KClNpZ25lZC1v ZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2hkbWkvaGRtaS5oICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20v aGRtaS9oZG1pX3BoeS5jICAgICAgfCAgMzUgKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkv aGRtaV9wbGxfODk2MC5jIHwgNDYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQg ZmlsZXMgY2hhbmdlZCwgNTA2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9wbGxfODk2MC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5k ZXggNmFkMGY3ZS4uMGM1YzljMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC01Myw2ICs1Myw3IEBA IG1zbS15IDo9IFwKIAogbXNtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IG1zbV9m YmRldi5vCiBtc20tJChDT05GSUdfQ09NTU9OX0NMSykgKz0gbWRwL21kcDQvbWRwNF9sdmRzX3Bs bC5vCittc20tJChDT05GSUdfQ09NTU9OX0NMSykgKz0gaGRtaS9oZG1pX3BsbF84OTYwLm8KIAog bXNtLSQoQ09ORklHX0RSTV9NU01fRFNJKSArPSBkc2kvZHNpLm8gXAogCQkJbWRwL21kcDQvbWRw NF9kc2lfZW5jb2Rlci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9o ZG1pLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaS5oCmluZGV4IDM0MDQyMzUuLjFi ZWFjZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWkuaApAQCAtMTk4LDYgKzE5OCwxNSBAQCB2b2lk IGhkbWlfcGh5X3Bvd2VyZG93bihzdHJ1Y3QgaGRtaV9waHkgKnBoeSk7CiB2b2lkIF9faW5pdCBo ZG1pX3BoeV9kcml2ZXJfcmVnaXN0ZXIodm9pZCk7CiB2b2lkIF9fZXhpdCBoZG1pX3BoeV9kcml2 ZXJfdW5yZWdpc3Rlcih2b2lkKTsKIAorI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCitpbnQgaGRt aV9wbGxfODk2MF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworI2Vsc2UKK2lu dCBoZG1pX3BsbF84OTYwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Cit7CisJ cmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYKKwogLyoKICAqIGF1ZGlvOgogICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHkuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vaGRtaS9oZG1pX3BoeS5jCmluZGV4IGRlM2YwZjUuLjlhZDQ1NzNiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHkuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2hkbWkvaGRtaV9waHkuYwpAQCAtMTE4LDYgKzExOCwyOCBAQCB2b2lkIGhkbWlfcGh5 X3Bvd2VyZG93bihzdHJ1Y3QgaGRtaV9waHkgKnBoeSkKIAlwaHktPmNmZy0+cG93ZXJkb3duKHBo eSk7CiB9CiAKK3N0YXRpYyBpbnQgaGRtaV9waHlfcGxsX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwKKwkJCSAgICAgZW51bSBoZG1pX3BoeV90eXBlIHR5cGUpCit7CisJaW50IHJl dDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTVNNX0hETUlfUEhZXzg5NjA6CisJCXJldCA9 IGhkbWlfcGxsXzg5NjBfaW5pdChwZGV2KTsKKwkJYnJlYWs7CisJLyoKKwkgKiB3ZSBkb24ndCBo YXZlIFBMTCBzdXBwb3J0IGZvciB0aGVzZSwgZG9uJ3QgcmVwb3J0IGFuIGVycm9yIGZvciBub3cK KwkgKi8KKwljYXNlIE1TTV9IRE1JX1BIWV84eDYwOgorCWNhc2UgTVNNX0hETUlfUEhZXzh4NzQ6 CisJZGVmYXVsdDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kwogc3RhdGljIGludCBoZG1pX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CkBAIC0xNDYsNiArMTY4LDE5 IEBAIHN0YXRpYyBpbnQgaGRtaV9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKIAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCisJcmV0ID0gaGRtaV9waHlf cmVzb3VyY2VfZW5hYmxlKHBoeSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IGhkbWlfcGh5X3BsbF9pbml0KHBkZXYsIHBoeS0+Y2ZnLT50eXBlKTsKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoZGV2LCAiY291bGRuJ3QgaW5pdCBQTExcbiIpOworCQloZG1pX3BoeV9yZXNvdXJj ZV9kaXNhYmxlKHBoeSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaGRtaV9waHlfcmVzb3VyY2Vf ZGlzYWJsZShwaHkpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGh5KTsKIAogCXJl dHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWlfcGxsXzg5 NjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX3BsbF84OTYwLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4MzBhOQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX3BsbF84OTYwLmMKQEAgLTAsMCArMSw0NjEgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQKKyAqIEF1dGhvcjog Um9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgImhkbWku aCIKKworc3RydWN0IGhkbWlfcGxsXzg5NjAgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXY7CisJc3RydWN0IGNsa19odyBjbGtfaHc7CisJdm9pZCBfX2lvbWVtICptbWlvOworCisJdW5z aWduZWQgbG9uZyBwaXhjbGs7Cit9OworCisjZGVmaW5lIGh3X2Nsa190b19wbGwoeCkgY29udGFp bmVyX29mKHgsIHN0cnVjdCBoZG1pX3BsbF84OTYwLCBjbGtfaHcpCisKKy8qCisgKiBIRE1JIFBM TDoKKyAqCisgKiBUbyBnZXQgdGhlIHBhcmVudCBjbG9jayBzZXR1cCBwcm9wZXJseSwgd2UgbmVl ZCB0byBwbHVnIGluIGhkbWkgcGxsCisgKiBjb25maWd1cmF0aW9uIGludG8gY29tbW9uLWNsb2Nr LWZyYW1ld29yay4KKyAqLworCitzdHJ1Y3QgcGxsX3JhdGUgeworCXVuc2lnbmVkIGxvbmcgcmF0 ZTsKKwlpbnQgbnVtX3JlZzsKKwlzdHJ1Y3QgeworCQl1MzIgdmFsOworCQl1MzIgcmVnOworCX0g Y29uZlszMl07Cit9OworCisvKiBOT1RFOiBrZWVwIHNvcnRlZCBoaWdoZXN0IGZyZXEgdG8gbG93 ZXN0OiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGxfcmF0ZSBmcmVxdGJsW10gPSB7CisJeyAx NTQwMDAwMDAsIDE0LCB7CisJCXsgMHgwOCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1JFRkNMS19D RkcgICAgfSwKKwkJeyAweDIwLCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9PUF9GTFRfQ0ZHMCB9 LAorCQl7IDB4ZjksIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9MT09QX0ZMVF9DRkcxIH0sCisJCXsg MHgwMiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkcwICAgfSwKKwkJeyAweDAzLCBS RUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzEgICB9LAorCQl7IDB4M2IsIFJFR19IRE1J Xzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMiAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9Q SFlfUExMX1ZDT0NBTF9DRkczICAgfSwKKwkJeyAweDg2LCBSRUdfSERNSV84OTYwX1BIWV9QTExf VkNPQ0FMX0NGRzQgICB9LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxf Q0ZHNSAgIH0sCisJCXsgMHgwZCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkcwICAgICAg fSwKKwkJeyAweDRkLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU0RNX0NGRzEgICAgICB9LAorCQl7 IDB4NWUsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMiAgICAgIH0sCisJCXsgMHg0Miwg UkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkczICAgICAgfSwKKwkJeyAweDAwLCBSRUdfSERN SV84OTYwX1BIWV9QTExfU0RNX0NGRzQgICAgICB9LAorCQkJfQorCX0sCisJLyogMTA4MHA2MC8x MDgwcDUwIGNhc2UgKi8KKwl7IDE0ODUwMDAwMCwgMjcsIHsKKwkJeyAweDAyLCBSRUdfSERNSV84 OTYwX1BIWV9QTExfUkVGQ0xLX0NGRyAgICB9LAorCQl7IDB4MDIsIFJFR19IRE1JXzg5NjBfUEhZ X1BMTF9DSFJHX1BVTVBfQ0ZHIH0sCisJCXsgMHgwMSwgUkVHX0hETUlfODk2MF9QSFlfUExMX0xP T1BfRkxUX0NGRzAgfSwKKwkJeyAweDMzLCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9PUF9GTFRf Q0ZHMSB9LAorCQl7IDB4MmMsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9JREFDX0FESl9DRkcgIH0s CisJCXsgMHgwNiwgUkVHX0hETUlfODk2MF9QSFlfUExMX0lfVklfS1ZDT19DRkcgfSwKKwkJeyAw eDBhLCBSRUdfSERNSV84OTYwX1BIWV9QTExfUFdSRE5fQiAgICAgICB9LAorCQl7IDB4NzYsIFJF R19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMCAgICAgIH0sCisJCXsgMHgwMSwgUkVHX0hETUlf ODk2MF9QSFlfUExMX1NETV9DRkcxICAgICAgfSwKKwkJeyAweDRjLCBSRUdfSERNSV84OTYwX1BI WV9QTExfU0RNX0NGRzIgICAgICB9LAorCQl7IDB4YzAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9T RE1fQ0ZHMyAgICAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkc0 ICAgICAgfSwKKwkJeyAweDlhLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU1NDX0NGRzAgICAgICB9 LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TU0NfQ0ZHMSAgICAgIH0sCisJCXsg MHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NTQ19DRkcyICAgICAgfSwKKwkJeyAweDAwLCBS RUdfSERNSV84OTYwX1BIWV9QTExfU1NDX0NGRzMgICAgICB9LAorCQl7IDB4MTAsIFJFR19IRE1J Xzg5NjBfUEhZX1BMTF9MT0NLREVUX0NGRzAgIH0sCisJCXsgMHgxYSwgUkVHX0hETUlfODk2MF9Q SFlfUExMX0xPQ0tERVRfQ0ZHMSAgfSwKKwkJeyAweDBkLCBSRUdfSERNSV84OTYwX1BIWV9QTExf TE9DS0RFVF9DRkcyICB9LAorCQl7IDB4ZTYsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxf Q0ZHMCAgIH0sCisJCXsgMHgwMiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkcxICAg fSwKKwkJeyAweDNiLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzIgICB9LAorCQl7 IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMyAgIH0sCisJCXsgMHg4Niwg UkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkc0ICAgfSwKKwkJeyAweDAwLCBSRUdfSERN SV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzUgICB9LAorCQl7IDB4MzMsIFJFR19IRE1JXzg5NjBf UEhZX1BMTF9WQ09DQUxfQ0ZHNiAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExM X1ZDT0NBTF9DRkc3ICAgfSwKKwkJCX0KKwl9LAorCXsgMTA4MDAwMDAwLCAxMywgeworCQl7IDB4 MDgsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9SRUZDTEtfQ0ZHICAgIH0sCisJCXsgMHgyMSwgUkVH X0hETUlfODk2MF9QSFlfUExMX0xPT1BfRkxUX0NGRzAgfSwKKwkJeyAweGY5LCBSRUdfSERNSV84 OTYwX1BIWV9QTExfTE9PUF9GTFRfQ0ZHMSB9LAorCQl7IDB4MWMsIFJFR19IRE1JXzg5NjBfUEhZ X1BMTF9WQ09DQUxfQ0ZHMCAgIH0sCisJCXsgMHgwMiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZD T0NBTF9DRkcxICAgfSwKKwkJeyAweDNiLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NG RzIgICB9LAorCQl7IDB4ODYsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHNCAgIH0s CisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkc1ICAgfSwKKwkJeyAw eDQ5LCBSRUdfSERNSV84OTYwX1BIWV9QTExfU0RNX0NGRzAgICAgICB9LAorCQl7IDB4NDksIFJF R19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMSAgICAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlf ODk2MF9QSFlfUExMX1NETV9DRkcyICAgICAgfSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYwX1BI WV9QTExfU0RNX0NGRzMgICAgICB9LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9T RE1fQ0ZHNCAgICAgIH0sCisJCQl9CisJfSwKKwkvKiA3MjBwNjAvNzIwcDUwLzEwODBpNjAvMTA4 MGk1MC8xMDgwcDI0LzEwODBwMzAvMTA4MHAyNSAqLworCXsgNzQyNTAwMDAsIDgsIHsKKwkJeyAw eDBhLCBSRUdfSERNSV84OTYwX1BIWV9QTExfUFdSRE5fQiAgICAgICB9LAorCQl7IDB4MTIsIFJF R19IRE1JXzg5NjBfUEhZX1BMTF9SRUZDTEtfQ0ZHICAgIH0sCisJCXsgMHgwMSwgUkVHX0hETUlf ODk2MF9QSFlfUExMX0xPT1BfRkxUX0NGRzAgfSwKKwkJeyAweDMzLCBSRUdfSERNSV84OTYwX1BI WV9QTExfTE9PUF9GTFRfQ0ZHMSB9LAorCQl7IDB4NzYsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9T RE1fQ0ZHMCAgICAgIH0sCisJCXsgMHhlNiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9D RkcwICAgfSwKKwkJeyAweDAyLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzEgICB9 LAorCQl7IDB4M2IsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMiAgIH0sCisJCQl9 CisJfSwKKwl7IDc0MTc2MDAwLCAxNCwgeworCQl7IDB4MTgsIFJFR19IRE1JXzg5NjBfUEhZX1BM TF9SRUZDTEtfQ0ZHICAgIH0sCisJCXsgMHgyMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX0xPT1Bf RkxUX0NGRzAgfSwKKwkJeyAweGY5LCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9PUF9GTFRfQ0ZH MSB9LAorCQl7IDB4ZTUsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMCAgIH0sCisJ CXsgMHgwMiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkcxICAgfSwKKwkJeyAweDNi LCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzIgICB9LAorCQl7IDB4MDAsIFJFR19I RE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMyAgIH0sCisJCXsgMHg4NiwgUkVHX0hETUlfODk2 MF9QSFlfUExMX1ZDT0NBTF9DRkc0ICAgfSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYwX1BIWV9Q TExfVkNPQ0FMX0NGRzUgICB9LAorCQl7IDB4MGMsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1f Q0ZHMCAgICAgIH0sCisJCXsgMHg0YywgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkcxICAg ICAgfSwKKwkJeyAweDdkLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU0RNX0NGRzIgICAgICB9LAor CQl7IDB4YmMsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMyAgICAgIH0sCisJCXsgMHgw MCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkc0ICAgICAgfSwKKwkJCX0KKwl9LAorCXsg NjUwMDAwMDAsIDE0LCB7CisJCXsgMHgxOCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1JFRkNMS19D RkcgICAgfSwKKwkJeyAweDIwLCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9PUF9GTFRfQ0ZHMCB9 LAorCQl7IDB4ZjksIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9MT09QX0ZMVF9DRkcxIH0sCisJCXsg MHg4YSwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkcwICAgfSwKKwkJeyAweDAyLCBS RUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzEgICB9LAorCQl7IDB4M2IsIFJFR19IRE1J Xzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMiAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9Q SFlfUExMX1ZDT0NBTF9DRkczICAgfSwKKwkJeyAweDg2LCBSRUdfSERNSV84OTYwX1BIWV9QTExf VkNPQ0FMX0NGRzQgICB9LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxf Q0ZHNSAgIH0sCisJCXsgMHgwYiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkcwICAgICAg fSwKKwkJeyAweDRiLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU0RNX0NGRzEgICAgICB9LAorCQl7 IDB4N2IsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMiAgICAgIH0sCisJCXsgMHgwOSwg UkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkczICAgICAgfSwKKwkJeyAweDAwLCBSRUdfSERN SV84OTYwX1BIWV9QTExfU0RNX0NGRzQgICAgICB9LAorCQkJfQorCX0sCisJLyogNDgwcDYwLzQ4 MGk2MCAqLworCXsgMjcwMzAwMDAsIDE4LCB7CisJCXsgMHgwYSwgUkVHX0hETUlfODk2MF9QSFlf UExMX1BXUkROX0IgICAgICAgfSwKKwkJeyAweDM4LCBSRUdfSERNSV84OTYwX1BIWV9QTExfUkVG Q0xLX0NGRyAgICB9LAorCQl7IDB4MDIsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9DSFJHX1BVTVBf Q0ZHIH0sCisJCXsgMHgyMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX0xPT1BfRkxUX0NGRzAgfSwK KwkJeyAweGZmLCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9PUF9GTFRfQ0ZHMSB9LAorCQl7IDB4 MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMCAgICAgIH0sCisJCXsgMHg0ZSwgUkVH X0hETUlfODk2MF9QSFlfUExMX1NETV9DRkcxICAgICAgfSwKKwkJeyAweGQ3LCBSRUdfSERNSV84 OTYwX1BIWV9QTExfU0RNX0NGRzIgICAgICB9LAorCQl7IDB4MDMsIFJFR19IRE1JXzg5NjBfUEhZ X1BMTF9TRE1fQ0ZHMyAgICAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NE TV9DRkc0ICAgICAgfSwKKwkJeyAweDJhLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NG RzAgICB9LAorCQl7IDB4MDMsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMSAgIH0s CisJCXsgMHgzYiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkcyICAgfSwKKwkJeyAw eDAwLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzMgICB9LAorCQl7IDB4ODYsIFJF R19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHNCAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlf ODk2MF9QSFlfUExMX1ZDT0NBTF9DRkc1ICAgfSwKKwkJeyAweDMzLCBSRUdfSERNSV84OTYwX1BI WV9QTExfVkNPQ0FMX0NGRzYgICB9LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9W Q09DQUxfQ0ZHNyAgIH0sCisJCQl9CisJfSwKKwkvKiA1NzZwNTAvNTc2aTUwICovCisJeyAyNzAw MDAwMCwgMjcsIHsKKwkJeyAweDMyLCBSRUdfSERNSV84OTYwX1BIWV9QTExfUkVGQ0xLX0NGRyAg ICB9LAorCQl7IDB4MDIsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9DSFJHX1BVTVBfQ0ZHIH0sCisJ CXsgMHgwMSwgUkVHX0hETUlfODk2MF9QSFlfUExMX0xPT1BfRkxUX0NGRzAgfSwKKwkJeyAweDMz LCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9PUF9GTFRfQ0ZHMSB9LAorCQl7IDB4MmMsIFJFR19I RE1JXzg5NjBfUEhZX1BMTF9JREFDX0FESl9DRkcgIH0sCisJCXsgMHgwNiwgUkVHX0hETUlfODk2 MF9QSFlfUExMX0lfVklfS1ZDT19DRkcgfSwKKwkJeyAweDBhLCBSRUdfSERNSV84OTYwX1BIWV9Q TExfUFdSRE5fQiAgICAgICB9LAorCQl7IDB4N2IsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1f Q0ZHMCAgICAgIH0sCisJCXsgMHgwMSwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkcxICAg ICAgfSwKKwkJeyAweDRjLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU0RNX0NGRzIgICAgICB9LAor CQl7IDB4YzAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMyAgICAgIH0sCisJCXsgMHgw MCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkc0ICAgICAgfSwKKwkJeyAweDlhLCBSRUdf SERNSV84OTYwX1BIWV9QTExfU1NDX0NGRzAgICAgICB9LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5 NjBfUEhZX1BMTF9TU0NfQ0ZHMSAgICAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlf UExMX1NTQ19DRkcyICAgICAgfSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU1ND X0NGRzMgICAgICB9LAorCQl7IDB4MTAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9MT0NLREVUX0NG RzAgIH0sCisJCXsgMHgxYSwgUkVHX0hETUlfODk2MF9QSFlfUExMX0xPQ0tERVRfQ0ZHMSAgfSwK KwkJeyAweDBkLCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9DS0RFVF9DRkcyICB9LAorCQl7IDB4 MmEsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMCAgIH0sCisJCXsgMHgwMywgUkVH X0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkcxICAgfSwKKwkJeyAweDNiLCBSRUdfSERNSV84 OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzIgICB9LAorCQl7IDB4MDAsIFJFR19IRE1JXzg5NjBfUEhZ X1BMTF9WQ09DQUxfQ0ZHMyAgIH0sCisJCXsgMHg4NiwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZD T0NBTF9DRkc0ICAgfSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NG RzUgICB9LAorCQl7IDB4MzMsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHNiAgIH0s CisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkc3ICAgfSwKKwkJCX0K Kwl9LAorCS8qIDY0MHg0ODBwNjAgKi8KKwl7IDI1MjAwMDAwLCAyNywgeworCQl7IDB4MzIsIFJF R19IRE1JXzg5NjBfUEhZX1BMTF9SRUZDTEtfQ0ZHICAgIH0sCisJCXsgMHgwMiwgUkVHX0hETUlf ODk2MF9QSFlfUExMX0NIUkdfUFVNUF9DRkcgfSwKKwkJeyAweDAxLCBSRUdfSERNSV84OTYwX1BI WV9QTExfTE9PUF9GTFRfQ0ZHMCB9LAorCQl7IDB4MzMsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9M T09QX0ZMVF9DRkcxIH0sCisJCXsgMHgyYywgUkVHX0hETUlfODk2MF9QSFlfUExMX0lEQUNfQURK X0NGRyAgfSwKKwkJeyAweDA2LCBSRUdfSERNSV84OTYwX1BIWV9QTExfSV9WSV9LVkNPX0NGRyB9 LAorCQl7IDB4MGEsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9QV1JETl9CICAgICAgIH0sCisJCXsg MHg3NywgUkVHX0hETUlfODk2MF9QSFlfUExMX1NETV9DRkcwICAgICAgfSwKKwkJeyAweDRjLCBS RUdfSERNSV84OTYwX1BIWV9QTExfU0RNX0NGRzEgICAgICB9LAorCQl7IDB4MDAsIFJFR19IRE1J Xzg5NjBfUEhZX1BMTF9TRE1fQ0ZHMiAgICAgIH0sCisJCXsgMHhjMCwgUkVHX0hETUlfODk2MF9Q SFlfUExMX1NETV9DRkczICAgICAgfSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYwX1BIWV9QTExf U0RNX0NGRzQgICAgICB9LAorCQl7IDB4OWEsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TU0NfQ0ZH MCAgICAgIH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1NTQ19DRkcxICAgICAg fSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU1NDX0NGRzIgICAgICB9LAorCQl7 IDB4MjAsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9TU0NfQ0ZHMyAgICAgIH0sCisJCXsgMHgxMCwg UkVHX0hETUlfODk2MF9QSFlfUExMX0xPQ0tERVRfQ0ZHMCAgfSwKKwkJeyAweDFhLCBSRUdfSERN SV84OTYwX1BIWV9QTExfTE9DS0RFVF9DRkcxICB9LAorCQl7IDB4MGQsIFJFR19IRE1JXzg5NjBf UEhZX1BMTF9MT0NLREVUX0NGRzIgIH0sCisJCXsgMHhmNCwgUkVHX0hETUlfODk2MF9QSFlfUExM X1ZDT0NBTF9DRkcwICAgfSwKKwkJeyAweDAyLCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FM X0NGRzEgICB9LAorCQl7IDB4M2IsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHMiAg IH0sCisJCXsgMHgwMCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkczICAgfSwKKwkJ eyAweDg2LCBSRUdfSERNSV84OTYwX1BIWV9QTExfVkNPQ0FMX0NGRzQgICB9LAorCQl7IDB4MDAs IFJFR19IRE1JXzg5NjBfUEhZX1BMTF9WQ09DQUxfQ0ZHNSAgIH0sCisJCXsgMHgzMywgUkVHX0hE TUlfODk2MF9QSFlfUExMX1ZDT0NBTF9DRkc2ICAgfSwKKwkJeyAweDAwLCBSRUdfSERNSV84OTYw X1BIWV9QTExfVkNPQ0FMX0NGRzcgICB9LAorCQkJfQorCX0sCit9OworCitzdGF0aWMgaW5saW5l IHZvaWQgcGxsX3dyaXRlKHN0cnVjdCBoZG1pX3BsbF84OTYwICpwbGwsIHUzMiByZWcsIHUzMiBk YXRhKQoreworCW1zbV93cml0ZWwoZGF0YSwgcGxsLT5tbWlvICsgcmVnKTsKK30KKworc3RhdGlj IGlubGluZSB1MzIgcGxsX3JlYWQoc3RydWN0IGhkbWlfcGxsXzg5NjAgKnBsbCwgdTMyIHJlZykK K3sKKwlyZXR1cm4gbXNtX3JlYWRsKHBsbC0+bW1pbyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IGhkbWlfcGh5ICpwbGxfZ2V0X3BoeShzdHJ1Y3QgaGRtaV9wbGxfODk2MCAqcGxs KQoreworCXJldHVybiBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGwtPnBkZXYpOworfQorCitzdGF0 aWMgaW50IGhkbWlfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgaGRt aV9wbGxfODk2MCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJc3RydWN0IGhkbWlfcGh5ICpw aHkgPSBwbGxfZ2V0X3BoeShwbGwpOworCWludCB0aW1lb3V0X2NvdW50LCBwbGxfbG9ja19yZXRy eSA9IDEwOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlEQkcoIiIpOworCisJLyogQXNzZXJ0IFBM TCBTL1cgcmVzZXQgKi8KKwlwbGxfd3JpdGUocGxsLCBSRUdfSERNSV84OTYwX1BIWV9QTExfTE9D S0RFVF9DRkcyLCAweDhkKTsKKwlwbGxfd3JpdGUocGxsLCBSRUdfSERNSV84OTYwX1BIWV9QTExf TE9DS0RFVF9DRkcwLCAweDEwKTsKKwlwbGxfd3JpdGUocGxsLCBSRUdfSERNSV84OTYwX1BIWV9Q TExfTE9DS0RFVF9DRkcxLCAweDFhKTsKKworCS8qIFdhaXQgZm9yIGEgc2hvcnQgdGltZSBiZWZv cmUgZGUtYXNzZXJ0aW5nCisJICogdG8gYWxsb3cgdGhlIGhhcmR3YXJlIHRvIGNvbXBsZXRlIGl0 cyBqb2IuCisJICogVGhpcyBtdWNoIG9mIGRlbGF5IHNob3VsZCBiZSBmaW5lIGZvciBoYXJkd2Fy ZQorCSAqIHRvIGFzc2VydCBhbmQgZGUtYXNzZXJ0LgorCSAqLworCXVkZWxheSgxMCk7CisKKwkv KiBEZS1hc3NlcnQgUExMIFMvVyByZXNldCAqLworCXBsbF93cml0ZShwbGwsIFJFR19IRE1JXzg5 NjBfUEhZX1BMTF9MT0NLREVUX0NGRzIsIDB4MGQpOworCisJdmFsID0gaGRtaV9waHlfcmVhZChw aHksIFJFR19IRE1JXzg5NjBfUEhZX1JFRzEyKTsKKwl2YWwgfD0gSERNSV84OTYwX1BIWV9SRUcx Ml9TV19SRVNFVDsKKwkvKiBBc3NlcnQgUEhZIFMvVyByZXNldCAqLworCWhkbWlfcGh5X3dyaXRl KHBoeSwgUkVHX0hETUlfODk2MF9QSFlfUkVHMTIsIHZhbCk7CisJdmFsICY9IH5IRE1JXzg5NjBf UEhZX1JFRzEyX1NXX1JFU0VUOworCS8qCisJICogV2FpdCBmb3IgYSBzaG9ydCB0aW1lIGJlZm9y ZSBkZS1hc3NlcnRpbmcgdG8gYWxsb3cgdGhlIGhhcmR3YXJlIHRvCisJICogY29tcGxldGUgaXRz IGpvYi4gVGhpcyBtdWNoIG9mIGRlbGF5IHNob3VsZCBiZSBmaW5lIGZvciBoYXJkd2FyZSB0bwor CSAqIGFzc2VydCBhbmQgZGUtYXNzZXJ0LgorCSAqLworCXVkZWxheSgxMCk7CisJLyogRGUtYXNz ZXJ0IFBIWSBTL1cgcmVzZXQgKi8KKwloZG1pX3BoeV93cml0ZShwaHksIFJFR19IRE1JXzg5NjBf UEhZX1JFRzEyLCB2YWwpOworCWhkbWlfcGh5X3dyaXRlKHBoeSwgUkVHX0hETUlfODk2MF9QSFlf UkVHMiwgIDB4M2YpOworCisJdmFsID0gaGRtaV9waHlfcmVhZChwaHksIFJFR19IRE1JXzg5NjBf UEhZX1JFRzEyKTsKKwl2YWwgfD0gSERNSV84OTYwX1BIWV9SRUcxMl9QV1JETl9COworCWhkbWlf cGh5X3dyaXRlKHBoeSwgUkVHX0hETUlfODk2MF9QSFlfUkVHMTIsIHZhbCk7CisJLyogV2FpdCAx MCB1cyBmb3IgZW5hYmxpbmcgZ2xvYmFsIHBvd2VyIGZvciBQSFkgKi8KKwltYigpOworCXVkZWxh eSgxMCk7CisKKwl2YWwgPSBwbGxfcmVhZChwbGwsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9QV1JE Tl9CKTsKKwl2YWwgfD0gSERNSV84OTYwX1BIWV9QTExfUFdSRE5fQl9QTExfUFdSRE5fQjsKKwl2 YWwgJj0gfkhETUlfODk2MF9QSFlfUExMX1BXUkROX0JfUERfUExMOworCXBsbF93cml0ZShwbGws IFJFR19IRE1JXzg5NjBfUEhZX1BMTF9QV1JETl9CLCB2YWwpOworCWhkbWlfcGh5X3dyaXRlKHBo eSwgUkVHX0hETUlfODk2MF9QSFlfUkVHMiwgMHg4MCk7CisKKwl0aW1lb3V0X2NvdW50ID0gMTAw MDsKKwl3aGlsZSAoLS1wbGxfbG9ja19yZXRyeSA+IDApIHsKKwkJLyogYXJlIHdlIHRoZXJlIHll dD8gKi8KKwkJdmFsID0gcGxsX3JlYWQocGxsLCBSRUdfSERNSV84OTYwX1BIWV9QTExfU1RBVFVT MCk7CisJCWlmICh2YWwgJiBIRE1JXzg5NjBfUEhZX1BMTF9TVEFUVVMwX1BMTF9MT0NLKQorCQkJ YnJlYWs7CisKKwkJdWRlbGF5KDEpOworCisJCWlmICgtLXRpbWVvdXRfY291bnQgPiAwKQorCQkJ Y29udGludWU7CisKKwkJLyoKKwkJICogUExMIGhhcyBzdGlsbCBub3QgbG9ja2VkLgorCQkgKiBE byBhIHNvZnR3YXJlIHJlc2V0IGFuZCB0cnkgYWdhaW4KKwkJICogQXNzZXJ0IFBMTCBTL1cgcmVz ZXQgZmlyc3QKKwkJICovCisJCXBsbF93cml0ZShwbGwsIFJFR19IRE1JXzg5NjBfUEhZX1BMTF9M T0NLREVUX0NGRzIsIDB4OGQpOworCQl1ZGVsYXkoMTApOworCQlwbGxfd3JpdGUocGxsLCBSRUdf SERNSV84OTYwX1BIWV9QTExfTE9DS0RFVF9DRkcyLCAweDBkKTsKKworCQkvKgorCQkgKiBXYWl0 IGZvciBhIHNob3J0IGR1cmF0aW9uIGZvciB0aGUgUExMIGNhbGlicmF0aW9uCisJCSAqIGJlZm9y ZSBjaGVja2luZyBpZiB0aGUgUExMIGdldHMgbG9ja2VkCisJCSAqLworCQl1ZGVsYXkoMzUwKTsK KworCQl0aW1lb3V0X2NvdW50ID0gMTAwMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgaGRtaV9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgaGRt aV9wbGxfODk2MCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJc3RydWN0IGhkbWlfcGh5ICpw aHkgPSBwbGxfZ2V0X3BoeShwbGwpOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlEQkcoIiIpOwor CisJdmFsID0gaGRtaV9waHlfcmVhZChwaHksIFJFR19IRE1JXzg5NjBfUEhZX1JFRzEyKTsKKwl2 YWwgJj0gfkhETUlfODk2MF9QSFlfUkVHMTJfUFdSRE5fQjsKKwloZG1pX3BoeV93cml0ZShwaHks IFJFR19IRE1JXzg5NjBfUEhZX1JFRzEyLCB2YWwpOworCisJdmFsID0gcGxsX3JlYWQocGxsLCBS RUdfSERNSV84OTYwX1BIWV9QTExfUFdSRE5fQik7CisJdmFsIHw9IEhETUlfODk2MF9QSFlfUkVH MTJfU1dfUkVTRVQ7CisJdmFsICY9IH5IRE1JXzg5NjBfUEhZX1JFRzEyX1BXUkROX0I7CisJcGxs X3dyaXRlKHBsbCwgUkVHX0hETUlfODk2MF9QSFlfUExMX1BXUkROX0IsIHZhbCk7CisJLyogTWFr ZSBzdXJlIEhETUkgUEhZL1BMTCBhcmUgcG93ZXJlZCBkb3duICovCisJbWIoKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBwbGxfcmF0ZSAqZmluZF9yYXRlKHVuc2lnbmVkIGxvbmcgcmF0ZSkK K3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGZyZXF0YmwpOyBpKysp CisJCWlmIChyYXRlID4gZnJlcXRibFtpXS5yYXRlKQorCQkJcmV0dXJuICZmcmVxdGJsW2kgLSAx XTsKKworCXJldHVybiAmZnJlcXRibFtpIC0gMV07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25n IGhkbWlfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkgIHVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGhkbWlfcGxsXzg5NjAgKnBsbCA9IGh3X2Ns a190b19wbGwoaHcpOworCisJcmV0dXJuIHBsbC0+cGl4Y2xrOworfQorCitzdGF0aWMgbG9uZyBo ZG1pX3BsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUs CisJCQkJdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpCit7CisJY29uc3Qgc3RydWN0IHBsbF9y YXRlICpwbGxfcmF0ZSA9IGZpbmRfcmF0ZShyYXRlKTsKKworCXJldHVybiBwbGxfcmF0ZS0+cmF0 ZTsKK30KKworc3RhdGljIGludCBoZG1pX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywg dW5zaWduZWQgbG9uZyByYXRlLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQor eworCXN0cnVjdCBoZG1pX3BsbF84OTYwICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwljb25z dCBzdHJ1Y3QgcGxsX3JhdGUgKnBsbF9yYXRlID0gZmluZF9yYXRlKHJhdGUpOworCWludCBpOwor CisJREJHKCJyYXRlPSVsdSIsIHJhdGUpOworCisJZm9yIChpID0gMDsgaSA8IHBsbF9yYXRlLT5u dW1fcmVnOyBpKyspCisJCXBsbF93cml0ZShwbGwsIHBsbF9yYXRlLT5jb25mW2ldLnJlZywgcGxs X3JhdGUtPmNvbmZbaV0udmFsKTsKKworCXBsbC0+cGl4Y2xrID0gcmF0ZTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaGRtaV9wbGxfb3BzID0geworCS5l bmFibGUgPSBoZG1pX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBoZG1pX3BsbF9kaXNhYmxlLAor CS5yZWNhbGNfcmF0ZSA9IGhkbWlfcGxsX3JlY2FsY19yYXRlLAorCS5yb3VuZF9yYXRlID0gaGRt aV9wbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBoZG1pX3BsbF9zZXRfcmF0ZSwKK307CisK K3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGRtaV9wbGxfcGFyZW50c1tdID0geworCSJweG8i LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfaW5pdF9kYXRhIHBsbF9pbml0ID0geworCS5uYW1l ID0gImhkbWlfcGxsIiwKKwkub3BzID0gJmhkbWlfcGxsX29wcywKKwkucGFyZW50X25hbWVzID0g aGRtaV9wbGxfcGFyZW50cywKKwkubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKGhkbWlfcGxsX3Bh cmVudHMpLAorfTsKKworaW50IGhkbWlfcGxsXzg5NjBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0 IGhkbWlfcGxsXzg5NjAgKnBsbDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGk7CisKKwkvKiBz YW5pdHkgY2hlY2s6ICovCisJZm9yIChpID0gMDsgaSA8IChBUlJBWV9TSVpFKGZyZXF0YmwpIC0g MSk7IGkrKykKKwkJaWYgKFdBUk5fT04oZnJlcXRibFtpXS5yYXRlIDwgZnJlcXRibFtpICsgMV0u cmF0ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCXBsbCA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqcGxsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbGwpCisJCXJldHVybiAtRU5PTUVNOwor CisJcGxsLT5tbWlvID0gbXNtX2lvcmVtYXAocGRldiwgImhkbWlfcGxsIiwgIkhETUlfUExMIik7 CisJaWYgKElTX0VSUihwbGwtPm1taW8pKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1h cCBwbGwgYmFzZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBsbC0+cGRldiA9IHBk ZXY7CisJcGxsLT5jbGtfaHcuaW5pdCA9ICZwbGxfaW5pdDsKKworCWNsayA9IGRldm1fY2xrX3Jl Z2lzdGVyKGRldiwgJnBsbC0+Y2xrX2h3KTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcGxsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIDA7Cit9Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLApob3N0ZWQgYnkg VGhlIExpbnV4IEZvdW5kYXRpb24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=