From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v6.2 4/6] drm: rockchip: Support Synopsys DW MIPI DSI Date: Tue, 22 Dec 2015 14:58:20 +0800 Message-ID: <1450767500-2793-1-git-send-email-zyw@rock-chips.com> References: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: heiko@sntech.de, linux-rockchip@lists.infradead.org, mark.yao@rock-chips.com, treding@nvidia.com Cc: Chris Zhong , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgY29udHJvbGxlciB3 aGljaCBpcwplbWJlZGRlZCBpbiB0aGUgcmszMjg4IFNvQ3MuCgpTaWduZWQtb2ZmLWJ5OiBDaHJp cyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjYuMjoKLSBSZW1v dmUgdGhlIGF0b21pYyBmZWF0dXJlIGNoZWNrIChNYXJrIFlhbykKCkNoYW5nZXMgaW4gdjYuMToK LSBBZGQgYXRvbWljIEFQSSBzdXBwb3J0IChIZWlrbyBTdMO8Ym5lKQoKQ2hhbmdlcyBpbiB2NjoK LSBEbyBub3QgdXNlIGJyaWRnZSBkcml2ZXIgKFRoaWVycnkgUmVkaW5nKQotIE9wdGltaXphdGlv biB0aGUgcGh5IGluaXQgc2VxdWVuY2UKCkNoYW5nZXMgaW4gdjU6IE5vbmUKQ2hhbmdlcyBpbiB2 NDogTm9uZQpDaGFuZ2VzIGluIHYzOiBOb25lCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tj b25maWcgICAgICAgICAgICB8ICAgMTAgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2Vm aWxlICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGkt ZHNpLmMgICAgICB8IDExOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIHwgICAgMyArCiA0IGZpbGVzIGNoYW5n ZWQsIDEyMTAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCA2 ODZjYjQ5Li4xZGIxYjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtMzQsMyArMzQs MTMgQEAgY29uZmlnIFJPQ0tDSElQX0FOQUxPR0lYX0RQCiAJICBUaGlzIHNlbGVjdHMgc3VwcG9y dCBmb3IgUm9ja2NoaXAgU29DIHNwZWNpZmljIGV4dGVuc2lvbnMKIAkgIGZvciB0aGUgQW5hbG9n aXggQ29yZSBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEUAogCSAgb24gUkszMjg4 IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzIG9wdGlvbi4KKworY29uZmlnIFJPQ0tD SElQX0RXX01JUElfRFNJCisJYm9vbCAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3Ig U3lub3BzeXMgRFcgTUlQSSBEU0kiCisJZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKKwlzZWxlY3Qg RFJNX01JUElfRFNJCisJaGVscAorCSBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgUm9ja2NoaXAg U29DIHNwZWNpZmljIGV4dGVuc2lvbnMKKwkgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEhE TUkgZHJpdmVyLiBJZiB5b3Ugd2FudCB0bworCSBlbmFibGUgTUlQSSBEU0kgb24gUkszMjg4IGJh c2VkIFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzCisJIG9wdGlvbi4KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9NYWtlZmlsZQppbmRleCA4YWQwMWZiLi5jNWMyZDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01h a2VmaWxlCkBAIC03LDUgKzcsNiBAQCByb2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9kcnYu byByb2NrY2hpcF9kcm1fZmIubyByb2NrY2hpcF9kcm1fZmJkZXYubyBcCiAKIG9iai0kKENPTkZJ R19ST0NLQ0hJUF9EV19IRE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8KIG9iai0kKENPTkZJR19S T0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXhfZHAtcm9ja2NoaXAubworb2JqLSQoQ09O RklHX1JPQ0tDSElQX0RXX01JUElfRFNJKSArPSBkdy1taXBpLWRzaS5vCiAKIG9iai0kKENPTkZJ R19EUk1fUk9DS0NISVApICs9IHJvY2tjaGlwZHJtLm8gcm9ja2NoaXBfZHJtX3ZvcC5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjFmZTYzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvZHctbWlwaS1kc2kuYwpAQCAtMCwwICsxLDExOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTQsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNs dWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRl IDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29m Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+Cisj aW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1f ZHJ2LmgiCisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5oIgorCisjZGVmaW5lIERSSVZFUl9O QU1FICAgICJkdy1taXBpLWRzaSIKKworI2RlZmluZSBHUkZfU09DX0NPTjYgICAgICAgICAgICAg ICAgICAgIDB4MDI1YworI2RlZmluZSBEU0kwX1NFTF9WT1BfTElUICAgICAgICAgICAgICAgICgx IDw8IDYpCisjZGVmaW5lIERTSTFfU0VMX1ZPUF9MSVQgICAgICAgICAgICAgICAgKDEgPDwgOSkK KworI2RlZmluZSBEU0lfVkVSU0lPTgkJCTB4MDAKKyNkZWZpbmUgRFNJX1BXUl9VUAkJCTB4MDQK KyNkZWZpbmUgUkVTRVQJCQkJMAorI2RlZmluZSBQT1dFUlVQCQkJCUJJVCgwKQorCisjZGVmaW5l IERTSV9DTEtNR1JfQ0ZHCQkJMHgwOAorI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikJCSgo KGRpdikgJiAweGZmKSA8PCA4KQorI2RlZmluZSBUWF9FU0NfQ0xLX0RJVklEU0lPTihkaXYpCSgo KGRpdikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9EUElfVkNJRAkJCTB4MGMKKyNkZWZp bmUgRFBJX1ZJRCh2aWQpCQkJKCgodmlkKSAmIDB4MykgPDwgMCkKKworI2RlZmluZSBEU0lfRFBJ X0NPTE9SX0NPRElORwkJMHgxMAorI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQoOCkKKyNkZWZp bmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xCTB4MAorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5H XzE2QklUXzIJMHgxCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMwkweDIKKyNkZWZp bmUgRFBJX0NPTE9SX0NPRElOR18xOEJJVF8xCTB4MworI2RlZmluZSBEUElfQ09MT1JfQ09ESU5H XzE4QklUXzIJMHg0CisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMjRCSVQJCTB4NQorCisjZGVm aW5lIERTSV9EUElfQ0ZHX1BPTAkJCTB4MTQKKyNkZWZpbmUgQ09MT1JNX0FDVElWRV9MT1cJCUJJ VCg0KQorI2RlZmluZSBTSFVURF9BQ1RJVkVfTE9XCQlCSVQoMykKKyNkZWZpbmUgSFNZTkNfQUNU SVZFX0xPVwkJQklUKDIpCisjZGVmaW5lIFZTWU5DX0FDVElWRV9MT1cJCUJJVCgxKQorI2RlZmlu ZSBEQVRBRU5fQUNUSVZFX0xPVwkJQklUKDApCisKKyNkZWZpbmUgRFNJX0RQSV9MUF9DTURfVElN CQkweDE4CisjZGVmaW5lIE9VVFZBQ1RfTFBDTURfVElNRShwKQkJKCgocCkgJiAweGZmKSA8PCAx NikKKyNkZWZpbmUgSU5WQUNUX0xQQ01EX1RJTUUocCkJCSgocCkgJiAweGZmKQorCisjZGVmaW5l IERTSV9EQklfQ0ZHCQkJMHgyMAorI2RlZmluZSBEU0lfREJJX0NNRFNJWkUJCQkweDI4CisKKyNk ZWZpbmUgRFNJX1BDS0hETF9DRkcJCQkweDJjCisjZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0KQor I2RlZmluZSBFTl9FQ0NfUlgJCQlCSVQoMykKKyNkZWZpbmUgRU5fQlRBCQkJCUJJVCgyKQorI2Rl ZmluZSBFTl9FT1RQX1JYCQkJQklUKDEpCisjZGVmaW5lIEVOX0VPVFBfVFgJCQlCSVQoMCkKKwor I2RlZmluZSBEU0lfTU9ERV9DRkcJCQkweDM0CisjZGVmaW5lIEVOQUJMRV9WSURFT19NT0RFCQkw CisjZGVmaW5lIEVOQUJMRV9DTURfTU9ERQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfTU9E RV9DRkcJCTB4MzgKKyNkZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxNCkKKyNkZWZpbmUgRU5B QkxFX0xPV19QT1dFUgkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUl9NQVNL CQkoMHgzZiA8PCA4KQorI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VTCQkw eDIKKyNkZWZpbmUgVklEX01PREVfVFlQRV9NQVNLCQkJMHgzCisKKyNkZWZpbmUgRFNJX1ZJRF9Q S1RfU0laRQkJMHgzYworI2RlZmluZSBWSURfUEtUX1NJWkUocCkJCQkoKChwKSAmIDB4M2ZmZikg PDwgMCkKKyNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHgzZmZmCisKKyNkZWZpbmUgRFNJX1ZJ RF9IU0FfVElNRQkJMHg0OAorI2RlZmluZSBEU0lfVklEX0hCUF9USU1FCQkweDRjCisjZGVmaW5l IERTSV9WSURfSExJTkVfVElNRQkJMHg1MAorI2RlZmluZSBEU0lfVklEX1ZTQV9MSU5FUwkJMHg1 NAorI2RlZmluZSBEU0lfVklEX1ZCUF9MSU5FUwkJMHg1OAorI2RlZmluZSBEU0lfVklEX1ZGUF9M SU5FUwkJMHg1YworI2RlZmluZSBEU0lfVklEX1ZBQ1RJVkVfTElORVMJCTB4NjAKKyNkZWZpbmUg RFNJX0NNRF9NT0RFX0NGRwkJMHg2OAorI2RlZmluZSBNQVhfUkRfUEtUX1NJWkVfTFAJCUJJVCgy NCkKKyNkZWZpbmUgRENTX0xXX1RYX0xQCQkJQklUKDE5KQorI2RlZmluZSBEQ1NfU1JfMFBfVFhf TFAJCQlCSVQoMTgpCisjZGVmaW5lIERDU19TV18xUF9UWF9MUAkJCUJJVCgxNykKKyNkZWZpbmUg RENTX1NXXzBQX1RYX0xQCQkJQklUKDE2KQorI2RlZmluZSBHRU5fTFdfVFhfTFAJCQlCSVQoMTQp CisjZGVmaW5lIEdFTl9TUl8yUF9UWF9MUAkJCUJJVCgxMykKKyNkZWZpbmUgR0VOX1NSXzFQX1RY X0xQCQkJQklUKDEyKQorI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAJCQlCSVQoMTEpCisjZGVmaW5l IEdFTl9TV18yUF9UWF9MUAkJCUJJVCgxMCkKKyNkZWZpbmUgR0VOX1NXXzFQX1RYX0xQCQkJQklU KDkpCisjZGVmaW5lIEdFTl9TV18wUF9UWF9MUAkJCUJJVCg4KQorI2RlZmluZSBFTl9BQ0tfUlFT VAkJCUJJVCgxKQorI2RlZmluZSBFTl9URUFSX0ZYCQkJQklUKDApCisKKyNkZWZpbmUgQ01EX01P REVfQUxMX0xQCQkJKE1BWF9SRF9QS1RfU0laRV9MUCB8IFwKKwkJCQkJIERDU19MV19UWF9MUCB8 IFwKKwkJCQkJIERDU19TUl8wUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18xUF9UWF9MUCB8IFwK KwkJCQkJIERDU19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJCQkJ IEdFTl9TUl8yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJIEdF Tl9TUl8wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9T V18xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lfR0VO X0hEUgkJCTB4NmMKKyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYp IDw8IDgpCisjZGVmaW5lIEdFTl9IREFUQV9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBH RU5fSFRZUEUodHlwZSkJCQkoKCh0eXBlKSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9IVFlQ RV9NQVNLCQkJMHhmZgorCisjZGVmaW5lIERTSV9HRU5fUExEX0RBVEEJCTB4NzAKKworI2RlZmlu ZSBEU0lfQ01EX1BLVF9TVEFUVVMJCTB4NzQKKyNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgw KQorI2RlZmluZSBHRU5fQ01EX0ZVTEwJCQlCSVQoMSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZ CQkJQklUKDIpCisjZGVmaW5lIEdFTl9QTERfV19GVUxMCQkJQklUKDMpCisjZGVmaW5lIEdFTl9Q TERfUl9FTVBUWQkJCUJJVCg0KQorI2RlZmluZSBHRU5fUExEX1JfRlVMTAkJCUJJVCg1KQorI2Rl ZmluZSBHRU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lfVE9fQ05UX0NGRwkJ CTB4NzgKKyNkZWZpbmUgSFNUWF9UT19DTlQocCkJCQkoKChwKSAmIDB4ZmZmZikgPDwgMTYpCisj ZGVmaW5lIExQUlhfVE9fQ05UKHApCQkJKChwKSAmIDB4ZmZmZikKKworI2RlZmluZSBEU0lfQlRB X1RPX0NOVAkJCTB4OGMKKworI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKKyNkZWZpbmUg QVVUT19DTEtMQU5FX0NUUkwJCUJJVCgxKQorI2RlZmluZSBQSFlfVFhSRVFVRVNUQ0xLSFMJCUJJ VCgwKQorCisjZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAorI2RlZmluZSBQSFlf Q0xLSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZikgPDwgMTYpCisjZGVmaW5lIFBI WV9DTEtMUDJIU19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYpCisKKyNkZWZpbmUgRFNJX1BI WV9UTVJfQ0ZHCQkJMHg5YworI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykg JiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2MpICYg MHhmZikgPDwgMTYpCisjZGVmaW5lIE1BWF9SRF9USU1FKGxiY2MpCQkoKGxiY2MpICYgMHg3ZmZm KQorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZpbmUgUEhZX0RJU0ZPUkNFUExM CQkJMAorI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQorI2RlZmluZSBQSFlfRElTQUJM RUNMSwkJCTAKKyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlfUlNU WgkJCTAKKyNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERPV05a CQkJMAorI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZ X0lGX0NGRwkJCTB4YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8 PCAwKQorI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYp IDw8IDgpCisKKyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCisjZGVmaW5lIExPQ0sJCQkJ QklUKDApCisjZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5lIERT SV9QSFlfVFNUX0NUUkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisjZGVm aW5lIFBIWV9VTlRFU1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisjZGVm aW5lIFBIWV9VTlRFU1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgK KyNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAor I2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFBI WV9URVNURElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9JTlRfU1Qw CQkJMHhiYworI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNkZWZpbmUgRFNJX0lOVF9NU0sw CQkJMHhjNAorI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisKKyNkZWZpbmUgUEhZX1NUQVRV U19USU1FT1VUX1VTCQkxMDAwMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTCTIw MDAwCisKKyNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKKyNkZWZpbmUgVkNPX1JBTkdF X0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQorI2RlZmluZSBWQ09fSU5fQ0FQX0NP Tl9ERUZBVUxUCSgweDAgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwg MSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEpCisjZGVmaW5lIFJFRl9C SUFTX0NVUl9TRUwJQklUKDApCisKKyNkZWZpbmUgQ1BfQ1VSUkVOVF8zTUEJCUJJVCgzKQorI2Rl ZmluZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgTFBGX1BST0dSQU1fRU4JCUJJVCg2 KQorI2RlZmluZSBMUEZfUkVTSVNUT1JTXzIwX0tPSE0JMAorCisjZGVmaW5lIEhTRlJFUVJBTkdF X1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQorCisjZGVmaW5lIElOUFVUX0RJVklERVIo dmFsKQkoKHZhbCAtIDEpICYgMHg3ZikKKyNkZWZpbmUgTE9XX1BST0dSQU1fRU4JCTAKKyNkZWZp bmUgSElHSF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgTE9PUF9ESVZfTE9XX1NFTCh2YWwp CSgodmFsIC0gMSkgJiAweDFmKQorI2RlZmluZSBMT09QX0RJVl9ISUdIX1NFTCh2YWwpCSgoKHZh bCAtIDEpID4+IDUpICYgMHgxZikKKyNkZWZpbmUgUExMX0xPT1BfRElWX0VOCQlCSVQoNSkKKyNk ZWZpbmUgUExMX0lOUFVUX0RJVl9FTglCSVQoNCkKKworI2RlZmluZSBQT1dFUl9DT05UUk9MCQlC SVQoNikKKyNkZWZpbmUgSU5URVJOQUxfUkVHX0NVUlJFTlQJQklUKDMpCisjZGVmaW5lIEJJQVNf QkxPQ0tfT04JCUJJVCgyKQorI2RlZmluZSBCQU5ER0FQX09OCQlCSVQoMCkKKworI2RlZmluZSBU RVJfUkVTSVNUT1JfSElHSAlCSVQoNykKKyNkZWZpbmUJVEVSX1JFU0lTVE9SX0xPVwkwCisjZGVm aW5lIExFVkVMX1NISUZURVJTX09OCUJJVCg2KQorI2RlZmluZSBURVJfQ0FMX0RPTkUJCUJJVCg1 KQorI2RlZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikKKyNkZWZpbmUgUE9XRVJfTUFOQUdFCQlC SVQoMSkKKyNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglCSVQoMCkKKworI2RlZmluZSBCSUFTRVhU Ul9TRUwodmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5lIEJBTkRHQVBfU0VMKHZhbCkJKCh2YWwp ICYgMHg3KQorI2RlZmluZSBUTFBfUFJPR1JBTV9FTgkJQklUKDcpCisjZGVmaW5lIFRIU19QUkVf UFJPR1JBTV9FTglCSVQoNykKKyNkZWZpbmUgVEhTX1pFUk9fUFJPR1JBTV9FTglCSVQoNikKKwor ZW51bSB7CisJQkFOREdBUF85N18wNywKKwlCQU5ER0FQXzk4XzA1LAorCUJBTkRHQVBfOTlfMDIs CisJQkFOREdBUF8xMDBfMDAsCisJQkFOREdBUF85M18xNywKKwlCQU5ER0FQXzk0XzE1LAorCUJB TkRHQVBfOTVfMTIsCisJQkFOREdBUF85Nl8xMCwKK307CisKK2VudW0geworCUJJQVNFWFRSXzg3 XzEsCisJQklBU0VYVFJfOTFfNSwKKwlCSUFTRVhUUl85NV85LAorCUJJQVNFWFRSXzEwMCwKKwlC SUFTRVhUUl8xMDVfOTQsCisJQklBU0VYVFJfMTExXzg4LAorCUJJQVNFWFRSXzExOF84LAorCUJJ QVNFWFRSXzEyN183LAorfTsKKworc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSB7CisJdW5z aWduZWQgaW50IG1heF9kYXRhX2xhbmVzOworCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9kZV92 YWxpZCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpOworfTsKKworc3RydWN0IGR3X21pcGlfZHNpIHsKKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7 CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7CisJc3RydWN0IGRybV9wYW5lbCAqcGFu ZWw7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZWdtYXAgKmdyZl9yZWdtYXA7CisJ dm9pZCBfX2lvbWVtICpiYXNlOworCisJc3RydWN0IGNsayAqcGxscmVmX2NsazsKKwlzdHJ1Y3Qg Y2xrICpwY2xrOworCisJdW5zaWduZWQgaW50IGxhbmVfbWJwczsgLyogcGVyIGxhbmUgKi8KKwl1 MzIgY2hhbm5lbDsKKwl1MzIgbGFuZXM7CisJdTMyIGZvcm1hdDsKKwl1MTYgaW5wdXRfZGl2Owor CXUxNiBmZWVkYmFja19kaXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwlj b25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YTsKKworfTsKKworZW51bSBk d19taXBpX2RzaV9tb2RlIHsKKwlEV19NSVBJX0RTSV9DTURfTU9ERSwKKwlEV19NSVBJX0RTSV9W SURfTU9ERSwKK307CisKK3N0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7CisJdW5zaWduZWQg aW50IG1heF9tYnBzOworCXU4IHRlc3RkaW47Cit9OworCisvKiBUaGUgdGFibGUgaXMgYmFzZWQg b24gMjdNSHogRFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrLiAqLworc3RhdGljIGNvbnN0IHN0cnVj dCBkcGh5X3BsbF90ZXN0ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7CisJeyAgOTAsIDB4MDB9LCB7 IDEwMCwgMHgxMH0sIHsgMTEwLCAweDIwfSwgeyAxMzAsIDB4MDF9LAorCXsgMTQwLCAweDExfSwg eyAxNTAsIDB4MjF9LCB7IDE3MCwgMHgwMn0sIHsgMTgwLCAweDEyfSwKKwl7IDIwMCwgMHgyMn0s IHsgMjIwLCAweDAzfSwgeyAyNDAsIDB4MTN9LCB7IDI1MCwgMHgyM30sCisJeyAyNzAsIDB4MDR9 LCB7IDMwMCwgMHgxNH0sIHsgMzMwLCAweDA1fSwgeyAzNjAsIDB4MTV9LAorCXsgNDAwLCAweDI1 fSwgeyA0NTAsIDB4MDZ9LCB7IDUwMCwgMHgxNn0sIHsgNTUwLCAweDA3fSwKKwl7IDYwMCwgMHgx N30sIHsgNjUwLCAweDA4fSwgeyA3MDAsIDB4MTh9LCB7IDc1MCwgMHgwOX0sCisJeyA4MDAsIDB4 MTl9LCB7IDg1MCwgMHgyOX0sIHsgOTAwLCAweDM5fSwgeyA5NTAsIDB4MGF9LAorCXsxMDAwLCAw eDFhfSwgezEwNTAsIDB4MmF9LCB7MTEwMCwgMHgzYX0sIHsxMTUwLCAweDBifSwKKwl7MTIwMCwg MHgxYn0sIHsxMjUwLCAweDJifSwgezEzMDAsIDB4M2J9LCB7MTM1MCwgMHgwY30sCisJezE0MDAs IDB4MWN9LCB7MTQ1MCwgMHgyY30sIHsxNTAwLCAweDNjfQorfTsKKworc3RhdGljIGludCBtYXhf bWJwc190b190ZXN0ZGluKHVuc2lnbmVkIGludCBtYXhfbWJwcykKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwdGRpbl9tYXApOyBpKyspCisJCWlmIChkcHRkaW5f bWFwW2ldLm1heF9tYnBzID4gbWF4X21icHMpCisJCQlyZXR1cm4gZHB0ZGluX21hcFtpXS50ZXN0 ZGluOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBUaGUgY29udHJvbGxlciBzaG91 bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCisgKiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVyYWwu CisgKi8KK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoc3RydWN0 IGR3X21pcGlfZHNpICpkc2kpCit7CisJaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7CisKKwlyZWZy ZXNoID0gZHJtX21vZGVfdnJlZnJlc2goZHNpLT5tb2RlKTsKKwl0d29fZnJhbWVzID0gRElWX1JP VU5EX1VQKE1TRUNfUEVSX1NFQywgcmVmcmVzaCkgKiAyOworCW1zbGVlcCh0d29fZnJhbWVzKTsK K30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmhvc3RfdG9fZHNpKHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0KQoreworCXJldHVybiBjb250YWluZXJfb2YoaG9zdCwgc3Ry dWN0IGR3X21pcGlfZHNpLCBkc2lfaG9zdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3 X21pcGlfZHNpICpjb25fdG9fZHNpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb24pCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZihjb24sIHN0cnVjdCBkd19taXBpX2RzaSwgY29ubmVjdG9yKTsKK30K Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIs IHN0cnVjdCBkd19taXBpX2RzaSwgZW5jb2Rlcik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZHNp X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdy aXRlbCh2YWwsIGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzaV9y ZWFkKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChk c2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9waHlfd3JpdGUo c3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHU4IHRlc3RfY29kZSwKKwkJCQkgdTggdGVzdF9kYXRh KQoreworCS8qCisJICogV2l0aCB0aGUgZmFsbGluZyBlZGdlIG9uIFRFU1RDTEssIHRoZSBURVNU RElOWzc6MF0gc2lnbmFsIGNvbnRlbnQKKwkgKiBpcyBsYXRjaGVkIGludGVybmFsbHkgYXMgdGhl IGN1cnJlbnQgdGVzdCBjb2RlLiBUZXN0IGRhdGEgaXMKKwkgKiBwcm9ncmFtbWVkIGludGVybmFs bHkgYnkgcmlzaW5nIGVkZ2Ugb24gVEVTVENMSy4KKwkgKi8KKwlkc2lfd3JpdGUoZHNpLCBEU0lf UEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKworCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVTVEVOIHwgUEhZX1RFU1RET1VUKDApIHwK KwkJCQkJICBQSFlfVEVTVERJTih0ZXN0X2NvZGUpKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9Q SFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1VOVEVTVEVOIHwgUEhZX1RFU1RET1VUKDAp IHwKKwkJCQkJICBQSFlfVEVTVERJTih0ZXN0X2RhdGEpKTsKKworCWRzaV93cml0ZShkc2ksIERT SV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworfQorCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX3BoeV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQorewor CWludCByZXQsIHRlc3RkaW4sIHZjbywgdmFsOworCisJdmNvID0gKGRzaS0+bGFuZV9tYnBzIDwg MjAwKSA/IDAgOiAoZHNpLT5sYW5lX21icHMgKyAxMDApIC8gMjAwOworCisJdGVzdGRpbiA9IG1h eF9tYnBzX3RvX3Rlc3RkaW4oZHNpLT5sYW5lX21icHMpOworCWlmICh0ZXN0ZGluIDwgMCkgewor CQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJImZhaWxlZCB0byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBz IGxhbmUgY2xvY2tcbiIsCisJCQlkc2ktPmxhbmVfbWJwcyk7CisJCXJldHVybiB0ZXN0ZGluOwor CX0KKworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCisJZHdfbWlwaV9k c2lfcGh5X3dyaXRlKGRzaSwgMHgxMCwgQllQQVNTX1ZDT19SQU5HRSB8CisJCQkJCSBWQ09fUkFO R0VfQ09OX1NFTCh2Y28pIHwKKwkJCQkJIFZDT19JTl9DQVBfQ09OX0xPVyB8CisJCQkJCSBSRUZf QklBU19DVVJfU0VMKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTEsIENQX0NV UlJFTlRfM01BKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDEyLCBDUF9QUk9HUkFN X0VOIHwgTFBGX1BST0dSQU1fRU4gfAorCQkJCQkgTFBGX1JFU0lTVE9SU18yMF9LT0hNKTsKKwor CWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NDQsIEhTRlJFUVJBTkdFX1NFTCh0ZXN0ZGlu KSk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE5LCBQTExfTE9PUF9ESVZfRU4g fCBQTExfSU5QVVRfRElWX0VOKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE3LCBJ TlBVVF9ESVZJREVSKGRzaS0+aW5wdXRfZGl2KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRz aSwgMHgxOCwgTE9PUF9ESVZfTE9XX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAorCQkJCQkgTE9X X1BST0dSQU1fRU4pOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElW X0hJR0hfU0VMKGRzaS0+ZmVlZGJhY2tfZGl2KSB8CisJCQkJCSBISUdIX1BST0dSQU1fRU4pOwor CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMCwgUE9XRVJfQ09OVFJPTCB8IElOVEVS TkFMX1JFR19DVVJSRU5UIHwKKwkJCQkJIEJJQVNfQkxPQ0tfT04gfCBCQU5ER0FQX09OKTsKKwor CWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9MT1cgfCBURVJf Q0FMX0RPTkUgfAorCQkJCQkgU0VUUkRfTUFYIHwgVEVSX1JFU0lTVE9SU19PTik7CisJZHdfbWlw aV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMSwgVEVSX1JFU0lTVE9SX0hJR0ggfCBMRVZFTF9TSElG VEVSU19PTiB8CisJCQkJCSBTRVRSRF9NQVggfCBQT1dFUl9NQU5BR0UgfAorCQkJCQkgVEVSX1JF U0lTVE9SU19PTik7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIyLCBMT1dfUFJP R1JBTV9FTiB8CisJCQkJCSBCSUFTRVhUUl9TRUwoQklBU0VYVFJfMTI3XzcpKTsKKwlkd19taXBp X2RzaV9waHlfd3JpdGUoZHNpLCAweDIyLCBISUdIX1BST0dSQU1fRU4gfAorCQkJCQkgQkFOREdB UF9TRUwoQkFOREdBUF85Nl8xMCkpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3 MCwgVExQX1BST0dSQU1fRU4gfCAweGYpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4 NzEsIFRIU19QUkVfUFJPR1JBTV9FTiB8IDB4NTUpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShk c2ksIDB4NzIsIFRIU19aRVJPX1BST0dSQU1fRU4gfCAweGEpOworCisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9SU1RaLCBQSFlfRU5GT1JDRVBMTCB8IFBIWV9FTkFCTEVDTEsgfAorCQkJCSAgICAg UEhZX1VOUlNUWiB8IFBIWV9VTlNIVVRET1dOWik7CisKKworCXJldCA9IHJlYWR4X3BvbGxfdGlt ZW91dChyZWFkbCwgZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFUVVMsCisJCQkJIHZhbCwgdmFsICYg TE9DSywgMTAwMCwgUEhZX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBsb2NrIHN0YXRlXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRz aS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAorCQkJCSB2YWwsIHZhbCAmIFNUT1BfU1RBVEVfQ0xL X0xBTkUsIDEwMDAsCisJCQkJIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2Vycihkc2ktPmRldiwKKwkJCSJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGNsayBs YW5lIHN0b3Agc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpKQoreworCXVuc2lnbmVkIGludCBicHAsIGksIHByZTsKKwl1bnNpZ25lZCBsb25nIG1w Y2xrLCBwbGxyZWYsIHRtcDsKKwl1bnNpZ25lZCBpbnQgbSA9IDEsIG4gPSAxLCB0YXJnZXRfbWJw cyA9IDEwMDA7CisJdW5zaWduZWQgaW50IG1heF9tYnBzID0gZHB0ZGluX21hcFtBUlJBWV9TSVpF KGRwdGRpbl9tYXApIC0gMV0ubWF4X21icHM7CisKKwlicHAgPSBtaXBpX2RzaV9waXhlbF9mb3Jt YXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKwlpZiAoYnBwIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ ZGV2LCAiZmFpbGVkIHRvIGdldCBicHAgZm9yIHBpeGVsIGZvcm1hdCAlZFxuIiwKKwkJCWRzaS0+ Zm9ybWF0KTsKKwkJcmV0dXJuIGJwcDsKKwl9CisKKwltcGNsayA9IERJVl9ST1VORF9VUChkc2kt Pm1vZGUtPmNsb2NrLCBNU0VDX1BFUl9TRUMpOworCWlmIChtcGNsaykgeworCQkvKiB0YWtlIDEg LyAwLjksIHNpbmNlIG1icHMgbXVzdCBiaWcgdGhhbiBiYW5kd2lkdGggb2YgUkdCICovCisJCXRt cCA9IG1wY2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTAgLyA5OworCQlpZiAodG1wIDwgbWF4 X21icHMpCisJCQl0YXJnZXRfbWJwcyA9IHRtcDsKKwkJZWxzZQorCQkJZGV2X2Vycihkc2ktPmRl diwgIkRQSFkgY2xvY2sgZnJlcXVlbmN5IGlzIG91dCBvZiByYW5nZVxuIik7CisJfQorCisJcGxs cmVmID0gRElWX1JPVU5EX1VQKGNsa19nZXRfcmF0ZShkc2ktPnBsbHJlZl9jbGspLCBVU0VDX1BF Ul9TRUMpOworCXRtcCA9IHBsbHJlZjsKKworCWZvciAoaSA9IDE7IGkgPCA2OyBpKyspIHsKKwkJ cHJlID0gcGxscmVmIC8gaTsKKwkJaWYgKCh0bXAgPiAodGFyZ2V0X21icHMgJSBwcmUpKSAmJiAo dGFyZ2V0X21icHMgLyBwcmUgPCA1MTIpKSB7CisJCQl0bXAgPSB0YXJnZXRfbWJwcyAlIHByZTsK KwkJCW4gPSBpOworCQkJbSA9IHRhcmdldF9tYnBzIC8gcHJlOworCQl9CisJCWlmICh0bXAgPT0g MCkKKwkJCWJyZWFrOworCX0KKworCWRzaS0+bGFuZV9tYnBzID0gcGxscmVmIC8gbiAqIG07CisJ ZHNpLT5pbnB1dF9kaXYgPSBuOworCWRzaS0+ZmVlZGJhY2tfZGl2ID0gbTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2Rz aV9ob3N0ICpob3N0LAorCQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sK KwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJaWYgKGRl dmljZS0+bGFuZXMgPiBkc2ktPnBkYXRhLT5tYXhfZGF0YV9sYW5lcykgeworCQlkZXZfZXJyKGRz aS0+ZGV2LCAidGhlIG51bWJlciBvZiBkYXRhIGxhbmVzKCV1KSBpcyB0b28gbWFueVxuIiwKKwkJ CQlkZXZpY2UtPmxhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoZGV2aWNl LT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgfHwKKwkgICAgIShkZXZp Y2UtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKSB7CisJCWRl dl9lcnIoZHNpLT5kZXYsICJkZXZpY2UgbW9kZSBpcyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOworCWRzaS0+Y2hh bm5lbCA9IGRldmljZS0+Y2hhbm5lbDsKKwlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0Owor CWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChkZXZpY2UtPmRldi5vZl9ub2RlKTsKKwlp ZiAoZHNpLT5wYW5lbCkKKwkJcmV0dXJuIGRybV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRz aS0+Y29ubmVjdG9yKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGR3X21p cGlfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAgIHN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dy aXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgdmFsKQoreworCWludCByZXQ7CisKKwly ZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NU QVRVUywKKwkJCQkgdmFsLCAhKHZhbCAmIEdFTl9DTURfRlVMTCksIDEwMDAsCisJCQkJIENNRF9Q S1RfU1RBVFVTX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5k ZXYsICJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBjb21tYW5kIEZJRk9cbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCWRzaV93cml0ZShkc2ksIERTSV9HRU5fSERSLCB2YWwpOworCisJcmV0ID0g cmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMs CisJCQkJIHZhbCwgdmFsICYgKEdFTl9DTURfRU1QVFkgfCBHRU5fUExEX1dfRU1QVFkpLAorCQkJ CSAxMDAwLCBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgRklGT1xuIik7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lf ZGNzX3Nob3J0X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgICAgICBjb25z dCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJY29uc3QgdTE2ICp0eF9idWYgPSBtc2ct PnR4X2J1ZjsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKCp0eF9idWYpIHwgR0VOX0hUWVBFKG1zZy0+ dHlwZSk7CisKKwlpZiAobXNnLT50eF9sZW4gPiAyKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0 b28gbG9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3Igc2hvcnQgd3JpdGVcbiIsCisJCQltc2ctPnR4 X2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBkd19taXBpX2RzaV9nZW5f cGt0X2hkcl93cml0ZShkc2ksIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNz X2xvbmdfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJICAgICAgY29uc3Qgc3Ry dWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUzMiAqdHhfYnVmID0gbXNnLT50eF9i dWY7CisJaW50IGxlbiA9IG1zZy0+dHhfbGVuLCBwbGRfZGF0YV9ieXRlcyA9IHNpemVvZigqdHhf YnVmKSwgcmV0OworCXUzMiB2YWwgPSBHRU5fSERBVEEobXNnLT50eF9sZW4pIHwgR0VOX0hUWVBF KG1zZy0+dHlwZSk7CisJdTMyIHJlbWFpbmRlciA9IDA7CisKKwlpZiAobXNnLT50eF9sZW4gPCAz KSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ3cm9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3IgbG9u ZyB3cml0ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ d2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkgeworCQlpZiAobGVuIDwg cGxkX2RhdGFfYnl0ZXMpIHsKKwkJCW1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIGxlbik7CisJ CQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIpOworCQkJbGVuID0g MDsKKwkJfSBlbHNlIHsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsICp0eF9i dWYpOworCQkJdHhfYnVmKys7CisJCQlsZW4gLT0gcGxkX2RhdGFfYnl0ZXM7CisJCX0KKworCQly ZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NU QVRVUywKKwkJCQkJIHZhbCwgISh2YWwgJiBHRU5fUExEX1dfRlVMTCksIDEwMDAsCisJCQkJCSBD TURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIo ZHNpLT5kZXYsCisJCQkJImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIHdyaXRlIHBheWxvYWQgRklG T1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIGR3X21pcGlfZHNpX2dl bl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgZHdfbWlwaV9k c2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkJIGNvbnN0 IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9 IGhvc3RfdG9fZHNpKGhvc3QpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1zZy0+dHlwZSkgewor CWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFOgorCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JU X1dSSVRFX1BBUkFNOgorCWNhc2UgTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9T SVpFOgorCQlyZXQgPSBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOworCQli cmVhazsKKwljYXNlIE1JUElfRFNJX0RDU19MT05HX1dSSVRFOgorCQlyZXQgPSBkd19taXBpX2Rz aV9kY3NfbG9uZ193cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9l cnIoZHNpLT5kZXYsICJ1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGVcbiIpOworCQlyZXQgPSAtRUlO VkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9k c2lfaG9zdF9vcHMgZHdfbWlwaV9kc2lfaG9zdF9vcHMgPSB7CisJLmF0dGFjaCA9IGR3X21pcGlf ZHNpX2hvc3RfYXR0YWNoLAorCS5kZXRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2RldGFjaCwKKwku dHJhbnNmZXIgPSBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyLAorfTsKKworc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7 CisJdTMyIHZhbDsKKworCXZhbCA9IFZJRF9NT0RFX1RZUEVfQlVSU1RfU1lOQ19QVUxTRVMgfCBF TkFCTEVfTE9XX1BPV0VSOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywgdmFs KTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfc2V0X21vZGUoc3RydWN0IGR3X21pcGlf ZHNpICpkc2ksCisJCQkJIGVudW0gZHdfbWlwaV9kc2lfbW9kZSBtb2RlKQoreworCWlmIChtb2Rl ID09IERXX01JUElfRFNJX0NNRF9NT0RFKSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAs IFJFU0VUKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfQ01EX01PREUp OworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKKwl9IGVsc2UgeworCQlk c2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJCWRzaV93cml0ZShkc2ksIERTSV9N T0RFX0NGRywgRU5BQkxFX1ZJREVPX01PREUpOworCQlkd19taXBpX2RzaV92aWRlb19tb2RlX2Nv bmZpZyhkc2kpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Rpc2FibGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCWRzaV93cml0ZShk c2ksIERTSV9QSFlfUlNUWiwgUEhZX1JTVFopOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2Rz aV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9Q V1JfVVAsIFJFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9ESVNGT1JD RVBMTCB8IFBIWV9ESVNBQkxFQ0xLCisJCSAgfCBQSFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOwor CWRzaV93cml0ZShkc2ksIERTSV9DTEtNR1JfQ0ZHLCBUT19DTEtfRElWSURTSU9OKDEwKSB8CisJ CSAgVFhfRVNDX0NMS19ESVZJRFNJT04oNykpOworCWRzaV93cml0ZShkc2ksIERTSV9MUENMS19D VFJMLCBQSFlfVFhSRVFVRVNUQ0xLSFMpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9k cGlfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlKQoreworCXUzMiB2YWwgPSAwLCBjb2xvciA9IDA7CisKKwlzd2l0Y2gg KGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQljb2xvciA9IERQ SV9DT0xPUl9DT0RJTkdfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2 NjoKKwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIgfCBFTjE4X0xPT1NFTFk7CisJ CWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCWNvbG9yID0gRFBJ X0NPTE9SX0NPRElOR18xOEJJVF8xOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1 NjU6CisJCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xOworCQlicmVhazsKKwl9CisK KwlpZiAoIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKSkKKwkJdmFsIHw9IFZT WU5DX0FDVElWRV9MT1c7CisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lO QykpCisJCXZhbCB8PSBIU1lOQ19BQ1RJVkVfTE9XOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQ SV9WQ0lELCBEUElfVklEKGRzaS0+Y2hhbm5lbCkpOworCWRzaV93cml0ZShkc2ksIERTSV9EUElf Q09MT1JfQ09ESU5HLCBjb2xvcik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DRkdfUE9MLCB2 YWwpOworCWRzaV93cml0ZShkc2ksIERTSV9EUElfTFBfQ01EX1RJTSwgT1VUVkFDVF9MUENNRF9U SU1FKDQpCisJCSAgfCBJTlZBQ1RfTFBDTURfVElNRSg0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUENLSERMX0NGRywgRU5fQ1JDX1JYIHwgRU5fRUNDX1JY IHwgRU5fQlRBKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2Nv bmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQoreworCWRzaV93cml0ZShkc2ksIERTSV9WSURfUEtUX1NJWkUsIFZJRF9Q S1RfU0laRShtb2RlLT5oZGlzcGxheSkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9j b21tYW5kX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0 ZShkc2ksIERTSV9UT19DTlRfQ0ZHLCBIU1RYX1RPX0NOVCgxMDAwKSB8IExQUlhfVE9fQ05UKDEw MDApKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfQlRBX1RPX0NOVCwgMHhkMDApOworCWRzaV93cml0 ZShkc2ksIERTSV9DTURfTU9ERV9DRkcsIENNRF9NT0RFX0FMTF9MUCk7CisJZHNpX3dyaXRlKGRz aSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfQ01EX01PREUpOworfQorCisvKiBHZXQgbGFuZSBieXRl IGNsb2NrIGN5Y2xlcy4gKi8KK3N0YXRpYyB1MzIgZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRf bGJjYyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkJICAgdTMyIGhjb21wb25lbnQpCit7 CisJdTMyIGZyYWMsIGxiY2M7CisKKwlsYmNjID0gaGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBz ICogTVNFQ19QRVJfU0VDIC8gODsKKworCWZyYWMgPSBsYmNjICUgZHNpLT5tb2RlLT5jbG9jazsK KwlsYmNjID0gbGJjYyAvIGRzaS0+bW9kZS0+Y2xvY2s7CisJaWYgKGZyYWMpCisJCWxiY2MrKzsK KworCXJldHVybiBsYmNjOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3RpbWVy X2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgaHRvdGFsLCBoc2EsIGhi cCwgbGJjYzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKwor CWh0b3RhbCA9IG1vZGUtPmh0b3RhbDsKKwloc2EgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5o c3luY19zdGFydDsKKwloYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisKKwls YmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGh0b3RhbCk7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1ZJRF9ITElORV9USU1FLCBsYmNjKTsKKworCWxiY2MgPSBkd19taXBp X2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgaHNhKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lf VklEX0hTQV9USU1FLCBsYmNjKTsKKworCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVu dF9sYmNjKGRzaSwgaGJwKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hCUF9USU1FLCBsYmNj KTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsK KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKworCXZhY3RpdmUg PSBtb2RlLT52ZGlzcGxheTsKKwl2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19z dGFydDsKKwl2ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OworCXZicCA9 IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKworCWRzaV93cml0ZShkc2ksIERTSV9W SURfVkFDVElWRV9MSU5FUywgdmFjdGl2ZSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WU0Ff TElORVMsIHZzYSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WRlBfTElORVMsIHZmcCk7CisJ ZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WQlBfTElORVMsIHZicCk7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RNUl9DRkcsIFBIWV9IUzJMUF9USU1FKDB4NDAp CisJCSAgfCBQSFlfTFAySFNfVElNRSgweDQwKSB8IE1BWF9SRF9USU1FKDEwMDAwKSk7CisKKwlk c2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RNUl9MUENMS19DRkcsIFBIWV9DTEtIUzJMUF9USU1FKDB4 NDApCisJCSAgfCBQSFlfQ0xLTFAySFNfVElNRSgweDQwKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX0lGX0NGRywgUEhZX1NUT1BfV0FJVF9USU1FKDB4 MjApIHwKKwkJICBOX0xBTkVTKGRzaS0+bGFuZXMpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfY2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV9yZWFkKGRz aSwgRFNJX0lOVF9TVDApOworCWRzaV9yZWFkKGRzaSwgRFNJX0lOVF9TVDEpOworCWRzaV93cml0 ZShkc2ksIERTSV9JTlRfTVNLMCwgMCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0sxLCAw KTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCWludCByZXQ7 CisKKwlkc2ktPm1vZGUgPSBhZGp1c3RlZF9tb2RlOworCisJcmV0ID0gZHdfbWlwaV9kc2lfZ2V0 X2xhbmVfYnBzKGRzaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybjsKKworCWlmIChjbGtfcHJl cGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiJXM6IEZhaWxl ZCB0byBlbmFibGUgcGNsa1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZHdfbWlw aV9kc2lfaW5pdChkc2kpOworCWR3X21pcGlfZHNpX2RwaV9jb25maWcoZHNpLCBtb2RlKTsKKwlk d19taXBpX2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRl b19tb2RlX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoZHNp LCBtb2RlKTsKKwlkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKGRzaSk7CisJZHdfbWlw aV9kc2lfbGluZV90aW1lcl9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1p bmdfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKGRzaSk7CisJ ZHdfbWlwaV9kc2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfY2xl YXJfZXJyKGRzaSk7CisJaWYgKGRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpKSB7CisJCWRl dl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gcHJlcGFyZSBwYW5lbFxuIik7CisJCXJldHVybjsK Kwl9CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Cit9CisKK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp Cit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsK KworCWRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpOworCisJaWYgKGNsa19wcmVwYXJlX2Vu YWJsZShkc2ktPnBjbGspKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICIlczogRmFpbGVkIHRvIGVu YWJsZSBwY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkd19taXBpX2RzaV9z ZXRfbW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKKwlkcm1fcGFuZWxfdW5wcmVwYXJl KGRzaS0+cGFuZWwpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklE X01PREUpOworCisJLyoKKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgdGhlIHBl cmlwaGVyYWwgd2lsbCBiZSBkcml2ZW4KKwkgKiBub3JtYWxseSB3aGVuIHRoZSBkaXNwbGF5IGlz IGVuYWJsZWQgYWdhaW4gbGF0ZXIuCisJICovCisJbXNsZWVwKDEyMCk7CisKKwlkd19taXBpX2Rz aV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKKwlkd19taXBpX2RzaV9kaXNh YmxlKGRzaSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Cit9CisKK3N0YXRp YyBib29sIGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCisJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9jb21taXQoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rl cl90b19kc2koZW5jb2Rlcik7CisJaW50IG11eCAgPSByb2NrY2hpcF9kcm1fZW5jb2Rlcl9nZXRf bXV4X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKKwl1MzIgaW50ZXJmYWNlX3BpeF9m bXQ7CisJdTMyIHZhbDsKKworCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgewor CQlkZXZfZXJyKGRzaS0+ZGV2LCAiJXM6IEZhaWxlZCB0byBlbmFibGUgcGNsa1xuIiwgX19mdW5j X18pOworCQlyZXR1cm47CisJfQorCisJZHdfbWlwaV9kc2lfcGh5X2luaXQoZHNpKTsKKwlkd19t aXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKGRzaSk7CisKKwlkd19taXBpX2RzaV9zZXRfbW9k ZShkc2ksIERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKwlkcm1fcGFuZWxfZW5hYmxlKGRzaS0+cGFu ZWwpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7CisKKwlzd2l0Y2ggKGRz aS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlpbnRlcmZhY2VfcGl4 X2ZtdCA9IFJPQ0tDSElQX09VVF9NT0RFX1A4ODg7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjY2NjoKKwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNjY2 OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCWludGVyZmFjZV9waXhf Zm10ID0gUk9DS0NISVBfT1VUX01PREVfUDU2NTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FS Tl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCXJvY2tjaGlwX2RybV9jcnRjX21vZGVfY29uZmln KGVuY29kZXItPmNydGMsIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0ksCisJCQkJICAgICAgaW50ZXJm YWNlX3BpeF9mbXQpOworCisJaWYgKG11eCkKKwkJdmFsID0gRFNJMF9TRUxfVk9QX0xJVCB8IChE U0kwX1NFTF9WT1BfTElUIDw8IDE2KTsKKwllbHNlCisJCXZhbCA9IERTSTBfU0VMX1ZPUF9MSVQg PDwgMTY7CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5ncmZfcmVnbWFwLCBHUkZfU09DX0NPTjYsIHZh bCk7CisJZGV2X2RiZyhkc2ktPmRldiwgInZvcCAlcyBvdXRwdXQgdG8gZHNpMFxuIiwgKG11eCkg PyAiTElUIiA6ICJCSUciKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MKK2R3X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVw ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5jb21taXQgPSBkd19taXBpX2Rz aV9lbmNvZGVyX2NvbW1pdCwKKwkubW9kZV9zZXQgPSBkd19taXBpX2RzaV9lbmNvZGVyX21vZGVf c2V0LAorCS5kaXNhYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAorfTsKKworc3Rh dGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzID0g eworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRpYyBpbnQgZHdf bWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3RvX2RzaShjb25uZWN0b3Ip OworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRp YyBlbnVtIGRybV9tb2RlX3N0YXR1cyBkd19taXBpX2RzaV9tb2RlX3ZhbGlkKAorCQkJCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVj dG9yKTsKKworCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVzID0gTU9ERV9PSzsKKwor CWlmIChkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQorCQltb2RlX3N0YXR1cyA9IGRzaS0+cGRhdGEt Pm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiBtb2RlX3N0YXR1czsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Jlc3Rf ZW5jb2RlcigKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAm ZHNpLT5lbmNvZGVyOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9 IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBkd19taXBp X2RzaV9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBkd19taXBpX2RzaV9jb25uZWN0b3Jf YmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2R3 X21pcGlfZHNpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZv cmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7 CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkd19taXBpX2RzaV9hdG9taWNfY29ubmVjdG9yX2Z1bmNzID0g eworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9k ZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9 IGR3X21pcGlfZHNpX2RldGVjdCwKKwkuZGVzdHJveSA9IGR3X21pcGlfZHNpX2RybV9jb25uZWN0 b3JfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQs CisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBkd19taXBpX2Rz aV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCSAgICAgIHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkc2ktPmVu Y29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZkc2ktPmNvbm5lY3Rv cjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJZW5jb2Rl ci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm0sCisJCQkJ CQkJICAgICBkZXYtPm9mX25vZGUpOworCS8qCisJICogSWYgd2UgZmFpbGVkIHRvIGZpbmQgdGhl IENSVEMocykgd2hpY2ggdGhpcyBlbmNvZGVyIGlzCisJICogc3VwcG9zZWQgdG8gYmUgY29ubmVj dGVkIHRvLCBpdCdzIGJlY2F1c2UgdGhlIENSVEMgaGFzCisJICogbm90IGJlZW4gcmVnaXN0ZXJl ZCB5ZXQuICBEZWZlciBwcm9iaW5nLCBhbmQgaG9wZSB0aGF0CisJICogdGhlIHJlcXVpcmVkIENS VEMgaXMgYWRkZWQgbGF0ZXIuCisJICovCisJaWYgKGVuY29kZXItPnBvc3NpYmxlX2NydGNzID09 IDApCisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgm ZHNpLT5lbmNvZGVyLAorCQkJICAgICAgICZkd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5j cyk7CisJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkcm0sICZkc2ktPmVuY29kZXIsICZkd19taXBp X2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09ERVJfRFNJKTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZW5jb2RlciB3aXRoIGRy bVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNv bm5lY3RvciwKKwkJCSZkd19taXBpX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWRy bV9jb25uZWN0b3JfaW5pdChkcm0sICZkc2ktPmNvbm5lY3RvciwKKwkJCSAgICZkd19taXBpX2Rz aV9hdG9taWNfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7 CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVy KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJvY2tjaGlwX21pcGlfcGFyc2VfZHQo c3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRz aS0+ZGV2LT5vZl9ub2RlOworCisJZHNpLT5ncmZfcmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29r dXBfYnlfcGhhbmRsZShucCwgInJvY2tjaGlwLGdyZiIpOworCWlmIChJU19FUlIoZHNpLT5ncmZf cmVnbWFwKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiVW5hYmxlIHRvIGdldCByb2NrY2hpcCxn cmZcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkc2ktPmdyZl9yZWdtYXApOworCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgcmszMjg4X21pcGlfZHNpX21v ZGVfdmFsaWQoCisJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCS8qCisJICogVGhlIFZJRF9QS1RfU0la RSBmaWVsZCBpbiB0aGUgRFNJX1ZJRF9QS1RfQ0ZHCisJICogcmVnaXN0ZXIgaXMgMTEtYml0Lgor CSAqLworCWlmIChtb2RlLT5oZGlzcGxheSA+IDB4N2ZmKQorCQlyZXR1cm4gTU9ERV9CQURfSFZB TFVFOworCisJLyoKKwkgKiBUaGUgVl9BQ1RJVkVfTElORVMgZmllbGQgaW4gdGhlIERTSV9WVElN SU5HX0NGRworCSAqIHJlZ2lzdGVyIGlzIDExLWJpdC4KKwkgKi8KKwlpZiAobW9kZS0+dmRpc3Bs YXkgPiAweDdmZikKKwkJcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsKKworCXJldHVybiBNT0RFX09L OworfQorCitzdGF0aWMgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSByazMyODhfbWlwaV9k c2lfZHJ2X2RhdGEgPSB7CisJLm1heF9kYXRhX2xhbmVzID0gNCwKKwkubW9kZV92YWxpZCA9IHJr MzI4OF9taXBpX2RzaV9tb2RlX3ZhbGlkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgZHdfbWlwaV9kc2lfZHRfaWRzW10gPSB7CisJeworCSAuY29tcGF0aWJsZSA9ICJy b2NrY2hpcCxyazMyODgtbWlwaS1kc2kiLAorCSAuZGF0YSA9ICZyazMyODhfbWlwaV9kc2lfZHJ2 X2RhdGEsCisJfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBkd19taXBpX2RzaV9kdF9pZHMpOworCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgIHZvaWQg KmRhdGEpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQorCQkJb2ZfbWF0 Y2hfZGV2aWNlKGR3X21pcGlfZHNpX2R0X2lkcywgZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHdfbWlw aV9kc2lfcGxhdF9kYXRhICpwZGF0YSA9IG9mX2lkLT5kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaTsKKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKKwlpbnQgcmV0OworCisJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpk c2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc2kt PmRldiA9IGRldjsKKwlkc2ktPnBkYXRhID0gcGRhdGE7CisKKwlyZXQgPSByb2NrY2hpcF9taXBp X3BhcnNlX2R0KGRzaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJ CXJldHVybiAtRU5PREVWOworCisJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsKKwlpZiAoSVNfRVJSKGRzaS0+YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGRzaS0+ YmFzZSk7CisKKwlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmIik7CisJ aWYgKElTX0VSUihkc2ktPnBsbHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5wbGxy ZWZfY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHBsbCByZWZlcmVuY2UgY2xv Y2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+cGNsayA9IGRldm1f Y2xrX2dldChkZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkc2ktPnBjbGspKSB7CisJCXJldCA9 IFBUUl9FUlIoZHNpLT5wY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHBjbGs6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShkc2ktPnBsbHJlZl9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICIlczog RmFpbGVkIHRvIGVuYWJsZSBwbGxyZWZfY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gZHdfbWlwaV9kc2lfcmVnaXN0ZXIoZHJtLCBkc2kpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbWlwaV9kc2k6ICVkXG4iLCBy ZXQpOworCQlnb3RvIGVycl9wbGxyZWY7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHNp KTsKKworCWRzaS0+ZHNpX2hvc3Qub3BzID0gJmR3X21pcGlfZHNpX2hvc3Rfb3BzOworCWRzaS0+ ZHNpX2hvc3QuZGV2ID0gZGV2OworCXJldHVybiBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2kt PmRzaV9ob3N0KTsKKworZXJyX3BsbHJlZjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5w bGxyZWZfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV91 bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJdm9pZCAq ZGF0YSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIGR3X21pcGlfZHNpX29wcyA9IHsKKwkuYmluZAk9IGR3X21pcGlfZHNp X2JpbmQsCisJLnVuYmluZAk9IGR3X21pcGlfZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1 cm4gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfb3BzKTsKK30KKworc3Rh dGljIGludCBkd19taXBpX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK K3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZkd19taXBpX2RzaV9vcHMpOworCXJldHVy biAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9kcml2 ZXIgPSB7CisJLnByb2JlCQk9IGR3X21pcGlfZHNpX3Byb2JlLAorCS5yZW1vdmUJCT0gZHdfbWlw aV9kc2lfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBp X2RzaV9kdF9pZHMsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKK307Cittb2R1bGVfcGxh dGZvcm1fZHJpdmVyKGR3X21pcGlfZHNpX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigi Uk9DS0NISVAgTUlQSSBEU0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhP UigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIGIvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwppbmRleCBkOWVjNzgwLi5lMTc1YjUz IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKQEAgLTEy MDksNiArMTIwOSw5IEBAIHN0YXRpYyBpbnQgdm9wX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9j cnRjICpjcnRjLAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCQlWT1BfQ1RSTF9T RVQodm9wLCBoZG1pX2VuLCAxKTsKIAkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1Jf RFNJOgorCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX2VuLCAxKTsKKwkJYnJlYWs7CiAJZGVmYXVs dDoKIAkJRFJNX0VSUk9SKCJ1bnN1cHBvcnQgY29ubmVjdG9yX3R5cGVbJWRdXG4iLAogCQkJICB2 b3AtPmNvbm5lY3Rvcl90eXBlKTsKLS0gCjIuNi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=