From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v4 06/13] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Date: Fri, 20 Nov 2015 16:15:32 +0800 Message-ID: <1448007339-10966-7-git-send-email-zyw@rock-chips.com> References: <1448007339-10966-1-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: <1448007339-10966-1-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, emil.l.velikov@gmail.com Cc: Vincent Palatin , Andrew Bresticker , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Andy Yan , Chris Zhong , rmk+kernel@arm.linux.org.uk, ajaykumar.rs@samsung.com, Rahul Sharma List-Id: linux-rockchip.vger.kernel.org YWRkIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciBz dXBwb3J0LgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4K LS0tCgpDaGFuZ2VzIGluIHY0OgplbGltaW5hdGUgc29tZSB3YXJubmluZwoKQ2hhbmdlcyBpbiB2 MzogTm9uZQpDaGFuZ2VzIGluIHYyOiBOb25lCgogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnICAgICAgIHwgICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAg fCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuYyB8IDEwNTYgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21p cGlfZHNpLmggICAgIHwgICAyNyArCiA0IGZpbGVzIGNoYW5nZWQsIDEwOTUgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfbWlwaV9kc2ku YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9LY29uZmlnCmluZGV4IDZkZGRkMzkuLmMwOTAwZTAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcKQEAgLTIyLDYgKzIyLDE3IEBAIGNvbmZpZyBEUk1fRFdfSERNSV9BSEJfQVVESU8K IAkgIERlc2lnbndhcmUgSERNSSBibG9jay4gIFRoaXMgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3 aXRoCiAJICB0aGUgaS5NWDYgSERNSSBkcml2ZXIuCiAKK2NvbmZpZyBEUk1fRFdfTUlQSV9EU0kK Kwl0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIg YnJpZGdlIgorCWRlcGVuZHMgb24gRFJNCisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0 IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKKwloZWxwCisJICBDaG9vc2UgdGhpcyBp ZiB5b3Ugd2FudCB0byB1c2UgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdAor CSAgY29udHJvbGxlciBicmlkZ2UuIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBi ZQorCSAgY2FsbGVkIGR3X21pcGlfZHNpLiBEUk1fTUlQSV9EU0kgc3VwcG9ydCBpcyByZXF1aXJl ZCBmb3IgdGhpcyBkcml2ZXIKKwkgIHRvIHdvcmsuCiAKIGNvbmZpZyBEUk1fTlhQX1BUTjM0NjAK IAl0cmlzdGF0ZSAiTlhQIFBUTjM0NjAgRFAvTFZEUyBicmlkZ2UiCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZQppbmRleCBkNGUyOGJlLi5kOTA4YzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKQEAg LTIsNSArMiw2IEBAIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKIG9iai0kKENPTkZJR19E Uk1fRFdfSERNSSkgKz0gZHdfaGRtaS5vCiBvYmotJChDT05GSUdfRFJNX0RXX0hETUlfQUhCX0FV RElPKSArPSBkd19oZG1pLWFoYi1hdWRpby5vCitvYmotJChDT05GSUdfRFJNX0RXX01JUElfRFNJ KSArPSBkd19taXBpX2RzaS5vCiBvYmotJChDT05GSUdfRFJNX05YUF9QVE4zNDYwKSArPSBueHAt cHRuMzQ2MC5vCiBvYmotJChDT05GSUdfRFJNX1BBUkFERV9QUzg2MjIpICs9IHBhcmFkZS1wczg2 MjIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjIzYjYxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2R3X21pcGlfZHNpLmMKQEAgLTAsMCArMSwxMDU2IEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDE0LCBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4K KyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxkcm0vYnJpZGdlL2R3X21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNkZWZpbmUg RFNJX1ZFUlNJT04JCQkweDAwCisKKyNkZWZpbmUgRFNJX1BXUl9VUAkJCTB4MDQKKyNkZWZpbmUg UkVTRVQJCQkJMAorI2RlZmluZSBQT1dFUlVQCQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9DTEtN R1JfQ0ZHCQkJMHgwOAorI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikJCSgoKGRpdikgJiAw eGZmKSA8PCA4KQorI2RlZmluZSBUWF9FU0NfQ0xLX0RJVklEU0lPTihkaXYpCSgoKGRpdikgJiAw eGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9EUElfVkNJRAkJCTB4MGMKKyNkZWZpbmUgRFBJX1ZJ RCh2aWQpCQkJKCgodmlkKSAmIDB4MykgPDwgMCkKKworI2RlZmluZSBEU0lfRFBJX0NPTE9SX0NP RElORwkJMHgxMAorI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQoOCkKKyNkZWZpbmUgRFBJX0NP TE9SX0NPRElOR18xNkJJVF8xCTB4MAorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzIJ MHgxCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMwkweDIKKyNkZWZpbmUgRFBJX0NP TE9SX0NPRElOR18xOEJJVF8xCTB4MworI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIJ MHg0CisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMjRCSVQJCTB4NQorCisjZGVmaW5lIERTSV9E UElfQ0ZHX1BPTAkJCTB4MTQKKyNkZWZpbmUgQ09MT1JNX0FDVElWRV9MT1cJCUJJVCg0KQorI2Rl ZmluZSBTSFVURF9BQ1RJVkVfTE9XCQlCSVQoMykKKyNkZWZpbmUgSFNZTkNfQUNUSVZFX0xPVwkJ QklUKDIpCisjZGVmaW5lIFZTWU5DX0FDVElWRV9MT1cJCUJJVCgxKQorI2RlZmluZSBEQVRBRU5f QUNUSVZFX0xPVwkJQklUKDApCisKKyNkZWZpbmUgRFNJX0RQSV9MUF9DTURfVElNCQkweDE4Cisj ZGVmaW5lIE9VVFZBQ1RfTFBDTURfVElNRShwKQkJKCgocCkgJiAweGZmKSA8PCAxNikKKyNkZWZp bmUgSU5WQUNUX0xQQ01EX1RJTUUocCkJCSgocCkgJiAweGZmKQorCisjZGVmaW5lIERTSV9EQklf Q0ZHCQkJMHgyMAorI2RlZmluZSBEU0lfREJJX0NNRFNJWkUJCQkweDI4CisKKyNkZWZpbmUgRFNJ X1BDS0hETF9DRkcJCQkweDJjCisjZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0KQorI2RlZmluZSBF Tl9FQ0NfUlgJCQlCSVQoMykKKyNkZWZpbmUgRU5fQlRBCQkJCUJJVCgyKQorI2RlZmluZSBFTl9F T1RQX1JYCQkJQklUKDEpCisjZGVmaW5lIEVOX0VPVFBfVFgJCQlCSVQoMCkKKworI2RlZmluZSBE U0lfTU9ERV9DRkcJCQkweDM0CisjZGVmaW5lIEVOQUJMRV9WSURFT19NT0RFCQkwCisjZGVmaW5l IEVOQUJMRV9DTURfTU9ERQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfTU9ERV9DRkcJCTB4 MzgKKyNkZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxNCkKKyNkZWZpbmUgRU5BQkxFX0xPV19Q T1dFUgkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUl9NQVNLCQkoMHgzZiA8 PCA4KQorI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VTCQkweDIKKyNkZWZp bmUgVklEX01PREVfVFlQRV9NQVNLCQkJMHgzCisKKyNkZWZpbmUgRFNJX1ZJRF9QS1RfU0laRQkJ MHgzYworI2RlZmluZSBWSURfUEtUX1NJWkUocCkJCQkoKChwKSAmIDB4M2ZmZikgPDwgMCkKKyNk ZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHgzZmZmCisKKyNkZWZpbmUgRFNJX1ZJRF9IU0FfVElN RQkJMHg0OAorI2RlZmluZSBEU0lfVklEX0hCUF9USU1FCQkweDRjCisjZGVmaW5lIERTSV9WSURf SExJTkVfVElNRQkJMHg1MAorI2RlZmluZSBEU0lfVklEX1ZTQV9MSU5FUwkJMHg1NAorI2RlZmlu ZSBEU0lfVklEX1ZCUF9MSU5FUwkJMHg1OAorI2RlZmluZSBEU0lfVklEX1ZGUF9MSU5FUwkJMHg1 YworI2RlZmluZSBEU0lfVklEX1ZBQ1RJVkVfTElORVMJCTB4NjAKKyNkZWZpbmUgRFNJX0NNRF9N T0RFX0NGRwkJMHg2OAorI2RlZmluZSBNQVhfUkRfUEtUX1NJWkVfTFAJCUJJVCgyNCkKKyNkZWZp bmUgRENTX0xXX1RYX0xQCQkJQklUKDE5KQorI2RlZmluZSBEQ1NfU1JfMFBfVFhfTFAJCQlCSVQo MTgpCisjZGVmaW5lIERDU19TV18xUF9UWF9MUAkJCUJJVCgxNykKKyNkZWZpbmUgRENTX1NXXzBQ X1RYX0xQCQkJQklUKDE2KQorI2RlZmluZSBHRU5fTFdfVFhfTFAJCQlCSVQoMTQpCisjZGVmaW5l IEdFTl9TUl8yUF9UWF9MUAkJCUJJVCgxMykKKyNkZWZpbmUgR0VOX1NSXzFQX1RYX0xQCQkJQklU KDEyKQorI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAJCQlCSVQoMTEpCisjZGVmaW5lIEdFTl9TV18y UF9UWF9MUAkJCUJJVCgxMCkKKyNkZWZpbmUgR0VOX1NXXzFQX1RYX0xQCQkJQklUKDkpCisjZGVm aW5lIEdFTl9TV18wUF9UWF9MUAkJCUJJVCg4KQorI2RlZmluZSBFTl9BQ0tfUlFTVAkJCUJJVCgx KQorI2RlZmluZSBFTl9URUFSX0ZYCQkJQklUKDApCisKKyNkZWZpbmUgQ01EX01PREVfQUxMX0xQ CQkJKE1BWF9SRF9QS1RfU0laRV9MUCB8IFwKKwkJCQkJIERDU19MV19UWF9MUCB8IFwKKwkJCQkJ IERDU19TUl8wUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18xUF9UWF9MUCB8IFwKKwkJCQkJIERD U19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8y UF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8wUF9U WF9MUCB8IFwKKwkJCQkJIEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18xUF9UWF9M UCB8IFwKKwkJCQkJIEdFTl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lfR0VOX0hEUgkJCTB4 NmMKKyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYpIDw8IDgpCisj ZGVmaW5lIEdFTl9IREFUQV9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBHRU5fSFRZUEUo dHlwZSkJCQkoKCh0eXBlKSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9IVFlQRV9NQVNLCQkJ MHhmZgorCisjZGVmaW5lIERTSV9HRU5fUExEX0RBVEEJCTB4NzAKKworI2RlZmluZSBEU0lfQ01E X1BLVF9TVEFUVVMJCTB4NzQKKyNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgwKQorI2RlZmlu ZSBHRU5fQ01EX0ZVTEwJCQlCSVQoMSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZCQkJQklUKDIp CisjZGVmaW5lIEdFTl9QTERfV19GVUxMCQkJQklUKDMpCisjZGVmaW5lIEdFTl9QTERfUl9FTVBU WQkJCUJJVCg0KQorI2RlZmluZSBHRU5fUExEX1JfRlVMTAkJCUJJVCg1KQorI2RlZmluZSBHRU5f UkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lfVE9fQ05UX0NGRwkJCTB4NzgKKyNk ZWZpbmUgSFNUWF9UT19DTlQocCkJCQkoKChwKSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lIExQ UlhfVE9fQ05UKHApCQkJKChwKSAmIDB4ZmZmZikKKworI2RlZmluZSBEU0lfQlRBX1RPX0NOVAkJ CTB4OGMKKworI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKKyNkZWZpbmUgQVVUT19DTEtM QU5FX0NUUkwJCUJJVCgxKQorI2RlZmluZSBQSFlfVFhSRVFVRVNUQ0xLSFMJCUJJVCgwKQorCisj ZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAorI2RlZmluZSBQSFlfQ0xLSFMyTFBf VElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZikgPDwgMTYpCisjZGVmaW5lIFBIWV9DTEtMUDJI U19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYpCisKKyNkZWZpbmUgRFNJX1BIWV9UTVJfQ0ZH CQkJMHg5YworI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweGZmKSA8 PCAyNCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwg MTYpCisjZGVmaW5lIE1BWF9SRF9USU1FKGxiY2MpCQkoKGxiY2MpICYgMHg3ZmZmKQorCisjZGVm aW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZpbmUgUEhZX0RJU0ZPUkNFUExMCQkJMAorI2Rl ZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQorI2RlZmluZSBQSFlfRElTQUJMRUNMSwkJCTAK KyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlfUlNUWgkJCTAKKyNk ZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERPV05aCQkJMAorI2Rl ZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZX0lGX0NGRwkJ CTB4YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8PCAwKQorI2Rl ZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgpCisK KyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCisjZGVmaW5lIExPQ0sJCQkJQklUKDApCisj ZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVFNU X0NUUkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisjZGVmaW5lIFBIWV9V TlRFU1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisjZGVmaW5lIFBIWV9V TlRFU1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgKKyNkZWZpbmUg UEhZX1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAorI2RlZmluZSBQ SFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFBIWV9URVNURElO KG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYwor I2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNkZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAor I2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisKKyNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VU CQkxMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUCQkyMAorCitzdHJ1Y3QgZHdfbWlw aV9kc2kgeworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0OworCXN0cnVjdCBkcm1fY29u bmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlzdHJ1Y3QgY2xrICpwbGxy ZWZfY2xrOworCXN0cnVjdCBjbGsgKmNmZ19jbGs7CisJc3RydWN0IGNsayAqcGNsazsKKworCXVu c2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCisJdTMyIGNoYW5uZWw7CisJdTMy IGxhbmVzOworCXUzMiBmb3JtYXQ7CisJdTE2IGlucHV0X2RpdjsKKwl1MTYgZmVlZGJhY2tfZGl2 OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJY29uc3Qgc3RydWN0IGR3X21p cGlfZHNpX3BsYXRfZGF0YSAqcGRhdGE7CisKKwlib29sIGVuYWJsZWQ7Cit9OworCitlbnVtIHsK KwlTVEFUVVNfVE9fQ0xFQVIsCisJU1RBVFVTX1RPX1NFVCwKK307CisKK2VudW0gZHdfbWlwaV9k c2lfbW9kZSB7CisJRFdfTUlQSV9EU0lfQ01EX01PREUsCisJRFdfTUlQSV9EU0lfVklEX01PREUs Cit9OworCitzdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgeworCXVuc2lnbmVkIGludCBtYXhf bWJwczsKKwl1OCB0ZXN0ZGluOworfTsKKworLyogVGhlIHRhYmxlIGlzIGJhc2VkIG9uIDI3TUh6 IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9w bGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0geworCXs5MCwgMHgwMH0sIHsxMDAsIDB4MTB9 LCB7MTEwLCAweDIwfSwgezEzMCwgMHgwMX0sCisJezE0MCwgMHgxMX0sIHsxNTAsIDB4MjF9LCB7 MTcwLCAweDAyfSwgezE4MCwgMHgxMn0sCisJezIwMCwgMHgyMn0sIHsyMjAsIDB4MDN9LCB7MjQw LCAweDEzfSwgezI1MCwgMHgyM30sCisJezI3MCwgMHgwNH0sIHszMDAsIDB4MTR9LCB7MzMwLCAw eDA1fSwgezM2MCwgMHgxNX0sCisJezQwMCwgMHgyNX0sIHs0NTAsIDB4MDZ9LCB7NTAwLCAweDE2 fSwgezU1MCwgMHgwN30sCisJezYwMCwgMHgxN30sIHs2NTAsIDB4MDh9LCB7NzAwLCAweDE4fSwg ezc1MCwgMHgwOX0sCisJezgwMCwgMHgxOX0sIHs4NTAsIDB4Mjl9LCB7OTAwLCAweDM5fSwgezk1 MCwgMHgwYX0sCisJezEwMDAsIDB4MWF9LCB7MTA1MCwgMHgyYX0sIHsxMTAwLCAweDNhfSwgezEx NTAsIDB4MGJ9LAorCXsxMjAwLCAweDFifSwgezEyNTAsIDB4MmJ9LCB7MTMwMCwgMHgzYn0sIHsx MzUwLCAweDBjfSwKKwl7MTQwMCwgMHgxY30sIHsxNDUwLCAweDJjfSwgezE1MDAsIDB4M2N9Cit9 OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqaG9zdF90b19kc2koc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBzdHJ1 Y3QgZHdfbWlwaV9kc2ksIGRzaV9ob3N0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdf bWlwaV9kc2kgKmNvbl90b19kc2koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbikKK3sKKwlyZXR1 cm4gY29udGFpbmVyX29mKGNvbiwgc3RydWN0IGR3X21pcGlfZHNpLCBjb25uZWN0b3IpOworfQor CitpbnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxfZm9ybWF0KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXItPmJy aWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXR1cm4gZHNpLT5mb3JtYXQ7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChkd19taXBpX2RzaV9nZXRfZW5jb2Rlcl9waXhlbF9mb3JtYXQpOworCitzdGF0 aWMgaW50IG1heF9tYnBzX3RvX3Rlc3RkaW4odW5zaWduZWQgaW50IG1heF9tYnBzKQoreworCWlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB0ZGluX21hcCk7IGkrKykKKwkJ aWYgKGRwdGRpbl9tYXBbaV0ubWF4X21icHMgPiBtYXhfbWJwcykKKwkJCXJldHVybiBkcHRkaW5f bWFwW2ldLnRlc3RkaW47CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkK K3sKKwl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUz MiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKK3sKKwlyZXR1cm4g cmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzaV9tb2Rp Znkoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsCisJCQkgICAgICB1MzIgbWFzaywg dTMyIHZhbCkKK3sKKwl1MzIgdjsKKworCXYgPSByZWFkbChkc2ktPmJhc2UgKyByZWcpOworCXYg Jj0gfm1hc2s7CisJdiB8PSB2YWw7CisJd3JpdGVsKHYsIGRzaS0+YmFzZSArIHJlZyk7Cit9CisK K3N0YXRpYyBpbnQgY2hlY2tfc3RhdHVzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVn LCB1MzIgc3RhdHVzLAorCQkJdW5zaWduZWQgaW50IHRpbWVvdXQsIGJvb2wgdG9fc2V0KQorewor CXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCWJvb2wgb3V0OworCXUzMiB2YWw7CisKKwlleHBpcmUg PSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwlmb3IgKDs7KSB7CisJCXZh bCA9IGRzaV9yZWFkKGRzaSwgcmVnKTsKKwkJb3V0ID0gdG9fc2V0ID8gKCh2YWwgJiBzdGF0dXMp ID09IHN0YXR1cykgOiAhKHZhbCAmIHN0YXR1cyk7CisJCWlmIChvdXQpCisJCQlicmVhazsKKwor CQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBleHBpcmUpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7 CisKKwkJY3B1X3JlbGF4KCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgY29u dHJvbGxlciBzaG91bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCisgKiBwcmVwYXJpbmcgdGhl IHBlcmlwaGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19m cmFtZXMoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdW5zaWduZWQgbG9uZyBleHBpcmU7 CisJaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7CisKKwlyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJl c2goZHNpLT5tb2RlKTsKKwl0d29fZnJhbWVzID0gRElWX1JPVU5EX1VQKE1TRUNfUEVSX1NFQywg cmVmcmVzaCkgKiAyOworCisJZXhwaXJlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModHdv X2ZyYW1lcyk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGV4cGlyZSkpCisJCWNwdV9y ZWxheCgpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9waHlfdGVzdChzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSwgdTggdGVzdF9jb2RlLAorCQkJCSB1OCB0ZXN0X2RhdGEpCit7CisJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNU Q0xSKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVTVEVOIHwg UEhZX1RFU1RET1VUKDApIHwKKwkJCQkJICBQSFlfVEVTVERJTih0ZXN0X2NvZGUpKTsKKworCWRz aV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RD TFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwg UEhZX1VOVEVTVENMUik7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZ X1VOVEVTVEVOIHwgUEhZX1RFU1RET1VUKDApIHwKKwkJCQkJICBQSFlfVEVTVERJTih0ZXN0X2Rh dGEpKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8 IFBIWV9VTlRFU1RDTFIpOworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlf VU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lf cGh5X2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJaW50IHJldCwgdGVzdGRpbiwg dmNvOworCisJdmNvID0gKGRzaS0+bGFuZV9tYnBzIDwgMjAwKSA/IDAgOiAoZHNpLT5sYW5lX21i cHMgKyAxMDApIC8gMjAwOworCisJdGVzdGRpbiA9IG1heF9tYnBzX3RvX3Rlc3RkaW4oZHNpLT5s YW5lX21icHMpOworCWlmICh0ZXN0ZGluIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJ ImZhaWxlZCB0byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBzIGxhbmUgY2xvY2tcbiIsCisJCQlkc2kt PmxhbmVfbWJwcyk7CisJCXJldHVybiB0ZXN0ZGluOworCX0KKworCWRzaV93cml0ZShkc2ksIERT SV9QV1JfVVAsIFBPV0VSVVApOworCisJZHdfbWlwaV9kc2lfcGh5X3Rlc3QoZHNpLCAweDEwLCAw eDgwIHwgKHZjbyAmIDB4NykgPDwgMyB8IDB4Myk7CisJZHdfbWlwaV9kc2lfcGh5X3Rlc3QoZHNp LCAweDExLCAweDgpOworCWR3X21pcGlfZHNpX3BoeV90ZXN0KGRzaSwgMHgxMiwgMHhjMCk7CisK Kwlkd19taXBpX2RzaV9waHlfdGVzdChkc2ksIDB4NDQsIHRlc3RkaW4gPDwgMSk7CisKKwlkd19t aXBpX2RzaV9waHlfdGVzdChkc2ksIDB4MTcsIGRzaS0+aW5wdXRfZGl2IC0gMSk7CisJZHdfbWlw aV9kc2lfcGh5X3Rlc3QoZHNpLCAweDE4LCAoZHNpLT5mZWVkYmFja19kaXYgLSAxKSAmIDB4MWYp OworCWR3X21pcGlfZHNpX3BoeV90ZXN0KGRzaSwgMHgxOCwgKGRzaS0+ZmVlZGJhY2tfZGl2IC0g MSkgPj4gNSB8IDB4ODApOworCWR3X21pcGlfZHNpX3BoeV90ZXN0KGRzaSwgMHgxOSwgMHgzMCk7 CisKKwlkd19taXBpX2RzaV9waHlfdGVzdChkc2ksIDB4MjAsIDB4NGQpOworCWR3X21pcGlfZHNp X3BoeV90ZXN0KGRzaSwgMHgyMSwgMHgzZCk7CisJZHdfbWlwaV9kc2lfcGh5X3Rlc3QoZHNpLCAw eDIxLCAweGRmKTsKKwlkd19taXBpX2RzaV9waHlfdGVzdChkc2ksIDB4MjIsIDB4Nyk7CisJZHdf bWlwaV9kc2lfcGh5X3Rlc3QoZHNpLCAweDIyLCAweDg3KTsKKwlkd19taXBpX2RzaV9waHlfdGVz dChkc2ksIDB4NzAsIDB4ODAgfCAweGYpOworCWR3X21pcGlfZHNpX3BoeV90ZXN0KGRzaSwgMHg3 MSwgMHg4MCB8IDB4NTUpOworCWR3X21pcGlfZHNpX3BoeV90ZXN0KGRzaSwgMHg3MiwgMHg0MCB8 IDB4YSk7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9FTkZPUkNFUExMIHwg UEhZX0VOQUJMRUNMSworCQkgIHwgUEhZX1VOUlNUWiB8IFBIWV9VTlNIVVRET1dOWik7CisKKwly ZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfUEhZX1NUQVRVUywgTE9DSywKKwkJCSAgIFBIWV9T VEFUVVNfVElNRU9VVCwgU1RBVFVTX1RPX1NFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cihkc2ktPmRldiwgImZhaWxlZCB0byB3YWl0IGZvciBwaHkgbG9jayBzdGF0ZVxuIik7CisJCXJl dHVybiByZXQ7CisJfQorCXJldCA9IGNoZWNrX3N0YXR1cyhkc2ksIERTSV9QSFlfU1RBVFVTLCBT VE9QX1NUQVRFX0NMS19MQU5FLAorCQkJICAgUEhZX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9f U0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LAorCQkJImZhaWxlZCB0 byB3YWl0IGZvciBwaHkgY2xrIGxhbmUgc3RvcCBzdGF0ZVxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9nZXRfbGFuZV9i cHMoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJaW50IGJwcCwgaTsKKwl1bnNpZ25lZCBp bnQgbWF4X21icHMgPSAwLCB0YXJnZXRfbWJwcyA9IDEwMDA7CisJdW5zaWduZWQgbG9uZyBtcGNs aywgcGxscmVmLCB0bXA7CisJaW50IG0gPSAxLCBuID0gMSwgcHJlOworCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZHB0ZGluX21hcCk7IGkrKykgeworCQlpZiAobWF4X21icHMgPCBkcHRk aW5fbWFwW2ldLm1heF9tYnBzKQorCQkJbWF4X21icHMgPSBkcHRkaW5fbWFwW2ldLm1heF9tYnBz OworCX0KKworCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQp OworCWlmIChicHAgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGJw cCBmb3IgcGl4ZWwgZm9ybWF0ICVkXG4iLAorCQkJZHNpLT5mb3JtYXQpOworCQlyZXR1cm4gYnBw OworCX0KKworCW1wY2xrID0gRElWX1JPVU5EX1VQKGRzaS0+bW9kZS0+Y2xvY2ssIE1TRUNfUEVS X1NFQyk7CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2UgMSAvIDAuOSwgc2luY2UgbWJwcyBtdXN0 IGJpZyB0aGFuIGJhbmR3aWR0aCBvZiBSR0IgKi8KKwkJdG1wID0gbXBjbGsgKiAoYnBwIC8gZHNp LT5sYW5lcykgKiAxMCAvIDk7CisJCWlmICh0bXAgPCBtYXhfbWJwcykKKwkJCXRhcmdldF9tYnBz ID0gdG1wOworCQllbHNlCisJCQlkZXZfZXJyKGRzaS0+ZGV2LCAiRFBIWSBjbG9jayBmcmVxdWVu Y3kgaXMgb3V0IG9mIHJhbmdlXG4iKTsKKwl9CisKKwlwbGxyZWYgPSBESVZfUk9VTkRfVVAoY2xr X2dldF9yYXRlKGRzaS0+cGxscmVmX2NsayksIFVTRUNfUEVSX1NFQyk7CisJdG1wID0gcGxscmVm OworCisJZm9yIChpID0gMTsgaSA8IDY7IGkrKykgeworCQlwcmUgPSBwbGxyZWYgLyBpOworCQlp ZiAoKHRtcCA+ICh0YXJnZXRfbWJwcyAlIHByZSkpICYmICh0YXJnZXRfbWJwcyAvIHByZSA8IDUx MikpIHsKKwkJCXRtcCA9IHRhcmdldF9tYnBzICUgcHJlOworCQkJbiA9IGk7CisJCQltID0gdGFy Z2V0X21icHMgLyBwcmU7CisJCX0KKwkJaWYgKHRtcCA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJ ZHNpLT5sYW5lX21icHMgPSBwbGxyZWYgLyBuICogbTsKKwlkc2ktPmlucHV0X2RpdiA9IG47CisJ ZHNpLT5mZWVkYmFja19kaXYgPSBtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdf bWlwaV9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJICAg c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAq ZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlpZiAoZGV2aWNlLT5sYW5lcyA+IGRzaS0+cGRh dGEtPm1heF9kYXRhX2xhbmVzKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0aGUgbnVtYmVyIG9m IGRhdGEgbGFuZXMoJWQpIGlzIHRvbyBtYW55XG4iLAorCQkJCWRldmljZS0+bGFuZXMpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIShkZXZpY2UtPm1vZGVfZmxhZ3MgJiBNSVBJX0RT SV9NT0RFX1ZJREVPX0JVUlNUKSB8fAorCSAgICAhKGRldmljZS0+bW9kZV9mbGFncyAmIE1JUElf RFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImRldmlj ZSBtb2RlIGlzIHVuc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHNp LT5sYW5lcyA9IGRldmljZS0+bGFuZXM7CisJZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFubmVs OworCWRzaS0+Zm9ybWF0ID0gZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5wYW5lbCA9IG9mX2RybV9m aW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25vZGUpOworCWRybV9wYW5lbF9hdHRhY2goZHNpLT5w YW5lbCwgJmRzaS0+Y29ubmVjdG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3 X21pcGlfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAg IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVs KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dlbl9wa3RfaGRy X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgdmFsKQoreworCWludCByZXQ7CisK KwlyZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfQ01EX1BLVF9TVEFUVVMsIEdFTl9DTURfRlVM TCwKKwkJCSAgIENNRF9QS1RfU1RBVFVTX1RJTUVPVVQsIFNUQVRVU19UT19DTEVBUik7CisJaWYg KHJldCA8IDApIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYXZhaWxhYmxl IGNvbW1hbmQgRklGT1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpX3dyaXRlKGRzaSwg RFNJX0dFTl9IRFIsIHZhbCk7CisKKwlyZXQgPSBjaGVja19zdGF0dXMoZHNpLCBEU0lfQ01EX1BL VF9TVEFUVVMsCisJCQkgICBHRU5fQ01EX0VNUFRZIHwgR0VOX1BMRF9XX0VNUFRZLAorCQkJICAg Q01EX1BLVF9TVEFUVVNfVElNRU9VVCwgU1RBVFVTX1RPX1NFVCk7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byB3cml0ZSBjb21tYW5kIEZJRk9cbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlf ZHNpX2Rjc19zaG9ydF93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgICAg Y29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUxNiAqdHhfYnVmID0g bXNnLT50eF9idWY7CisJdTMyIHZhbCA9IEdFTl9IREFUQSgqdHhfYnVmKSB8IEdFTl9IVFlQRSht c2ctPnR5cGUpOworCisJaWYgKG1zZy0+dHhfbGVuID4gMikgeworCQlkZXZfZXJyKGRzaS0+ZGV2 LCAidG9vIGxvbmcgdHggYnVmIGxlbmd0aCAlZCBmb3Igc2hvcnQgd3JpdGVcbiIsCisJCQkoaW50 KW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGR3X21pcGlf ZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKK30KKworc3RhdGljIGludCBkd19taXBp X2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkgICAgICBj b25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJY29uc3QgdTMyICp0eF9idWYgPSBt c2ctPnR4X2J1ZjsKKwlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9kYXRhX2J5dGVzID0gc2l6 ZW9mKCp0eF9idWYpLCByZXQ7CisJdTMyIHZhbCA9IEdFTl9IREFUQShtc2ctPnR4X2xlbikgfCBH RU5fSFRZUEUobXNnLT50eXBlKTsKKwl1MzIgcmVtYWluZGVyID0gMDsKKworCWlmIChtc2ctPnR4 X2xlbiA8IDMpIHsKKwkJZGV2X2Vycihkc2ktPmRldiwgIndyb25nIHR4IGJ1ZiBsZW5ndGggJWQg Zm9yIGxvbmcgd3JpdGVcbiIsCisJCQkoaW50KW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJd2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkgewor CQlpZiAobGVuIDwgcGxkX2RhdGFfYnl0ZXMpIHsKKwkJCW1lbWNweSgmcmVtYWluZGVyLCB0eF9i dWYsIGxlbik7CisJCQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIp OworCQkJbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExE X0RBVEEsICp0eF9idWYpOworCQkJdHhfYnVmKys7CisJCQlsZW4gLT0gcGxkX2RhdGFfYnl0ZXM7 CisJCX0KKwkJcmV0ID0gY2hlY2tfc3RhdHVzKGRzaSwgRFNJX0NNRF9QS1RfU1RBVFVTLCBHRU5f UExEX1dfRlVMTCwKKwkJCQkgICBDTURfUEtUX1NUQVRVU19USU1FT1VULCBTVEFUVVNfVE9fQ0xF QVIpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycihkc2ktPmRldiwKKwkJCQkiZmFpbGVk IHRvIGdldCBhdmFpbGFibGUgd3JpdGUgcGF5bG9hZCBGSUZPXG4iKTsKKwkJCXJldHVybiByZXQ7 CisJCX0KKwl9CisKKwlyZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCB2 YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAq bXNnKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJ aW50IHJldDsKKworCXN3aXRjaCAobXNnLT50eXBlKSB7CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hP UlRfV1JJVEU6CisJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06CisJY2FzZSBN SVBJX0RTSV9TRVRfTUFYSU1VTV9SRVRVUk5fUEFDS0VUX1NJWkU6CisJCXJldCA9IGR3X21pcGlf ZHNpX2Rjc19zaG9ydF93cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lf RENTX0xPTkdfV1JJVEU6CisJCXJldCA9IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKGRzaSwg bXNnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihkc2ktPmRldiwgInVuc3VwcG9y dGVkIG1lc3NhZ2UgdHlwZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBpX2Rz aV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gsCisJLmRl dGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGR3X21pcGlfZHNp X2hvc3RfdHJhbnNmZXIsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwor ZHdfbWlwaV9kc2lfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wg Zm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9y KTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVj dCBkcm1fY29ubmVjdG9yX2Z1bmNzIGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwku ZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVs cGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGR3X21pcGlfZHNp X2RldGVjdCwKKwkuZGVzdHJveSA9IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveSwK K307CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0g Y29uX3RvX2RzaShjb25uZWN0b3IpOworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNp LT5wYW5lbCk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBkd19taXBpX2RzaV9t b2RlX3ZhbGlkKAorCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVf c3RhdHVzID0gTU9ERV9PSzsKKworCWlmIChkc2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQorCQltb2Rl X3N0YXR1cyA9IGRzaS0+cGRhdGEtPm1vZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJl dHVybiBtb2RlX3N0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqZHdfbWlw aV9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29u bmVjdG9yKTsKKworCXJldHVybiBkc2ktPmVuY29kZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5j cyA9IHsKKwkuZ2V0X21vZGVzID0gZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKKwku bW9kZV92YWxpZCA9IGR3X21pcGlfZHNpX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IGR3 X21pcGlfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1 MzIgdmFsOworCisJdmFsID0gVklEX01PREVfVFlQRV9CVVJTVF9TWU5DX1BVTFNFUyB8IEVOQUJM RV9MT1dfUE9XRVI7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX01PREVfQ0ZHLCB2YWwpOwor fQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9zZXRfbW9kZShzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSwKKwkJCQkgZW51bSBkd19taXBpX2RzaV9tb2RlIG1vZGUpCit7CisJaWYgKG1vZGUgPT0g RFdfTUlQSV9EU0lfQ01EX01PREUpIHsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVT RVQpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7CisJ CWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCX0gZWxzZSB7CisJCWRzaV93 cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX01PREVf Q0ZHLCBFTkFCTEVfVklERU9fTU9ERSk7CisJCWR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmln KGRzaSk7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCX0KK30KKwor c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkK K3sKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9SU1RaLCBQSFlfUlNUWik7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Jy aWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisKKwlpZiAoZHNpLT5lbmFibGVk KQorCQlyZXR1cm47CisKKwlpZiAoIUlTX0VSUihkc2ktPmNmZ19jbGspKQorCQljbGtfcHJlcGFy ZV9lbmFibGUoZHNpLT5jZmdfY2xrKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGsp OworCWR3X21pcGlfZHNpX3BoeV9pbml0KGRzaSk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNp LCBEV19NSVBJX0RTSV9WSURfTU9ERSk7CisJZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1l cyhkc2kpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUp OworCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWR3X21pcGlfZHNpX3NldF9tb2Rl KGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2kt PnBjbGspOworCisJaWYgKCFJU19FUlIoZHNpLT5jZmdfY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+Y2ZnX2Nsayk7CisKKwlkcm1fcGFuZWxfZW5hYmxlKGRzaS0+cGFuZWwpOwor CisJZHNpLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfYnJp ZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBleHBp cmU7CisKKwlpZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZHJtX3BhbmVsX2Rpc2Fi bGUoZHNpLT5wYW5lbCk7CisKKwlpZiAoIUlTX0VSUihkc2ktPmNmZ19jbGspKQorCQljbGtfcHJl cGFyZV9lbmFibGUoZHNpLT5jZmdfY2xrKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBj bGspOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwor CWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisJZHdfbWlwaV9kc2lfc2V0X21vZGUo ZHNpLCBEV19NSVBJX0RTSV9WSURfTU9ERSk7CisKKwkvKgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5 IHRvIG1ha2Ugc3VyZSB0aGUgcGVyaXBoZXJhbAorCSAqIHdpbGwgYmUgZHJpdmVuIG5vcm1hbGx5 IHdoZW4gdGhlIGRpc3BsYXkgaXMKKwkgKiBlbmFibGVkIGFnYWluIGxhdGVyLgorCSAqLworCWV4 cGlyZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyMCk7CisJd2hpbGUgKHRpbWVfYmVm b3JlKGppZmZpZXMsIGV4cGlyZSkpCisJCWNwdV9yZWxheCgpOworCisJZHdfbWlwaV9kc2lfc2V0 X21vZGUoZHNpLCBEV19NSVBJX0RTSV9DTURfTU9ERSk7CisJZHdfbWlwaV9kc2lfZGlzYWJsZShk c2kpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworCisJaWYgKCFJU19FUlIo ZHNpLT5jZmdfY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Y2ZnX2Nsayk7CisK Kwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfYnJp ZGdlX25vcGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwkvKiBkbyBub3RoaW5nICov Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2luaXQoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCWRzaV93cml0ZShk c2ksIERTSV9QSFlfUlNUWiwgUEhZX0RJU0ZPUkNFUExMIHwgUEhZX0RJU0FCTEVDTEsKKwkJICB8 IFBIWV9SU1RaIHwgUEhZX1NIVVRET1dOWik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0NMS01HUl9D RkcsIFRPX0NMS19ESVZJRFNJT04oMTApIHwKKwkJICBUWF9FU0NfQ0xLX0RJVklEU0lPTig3KSk7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkwsIFBIWV9UWFJFUVVFU1RDTEtIUyk7Cit9 CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2RwaV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNp ICpkc2ksCisJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTMyIHZh bCA9IDAsIGNhbG9yID0gMDsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I4ODg6CisJCWNhbG9yID0gRFBJX0NPTE9SX0NPRElOR18yNEJJVDsKKwkJYnJl YWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQljYWxvciA9IERQSV9DT0xPUl9DT0RJ TkdfMThCSVRfMiB8IEVOMThfTE9PU0VMWTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRf UkdCNjY2X1BBQ0tFRDoKKwkJY2Fsb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzE7CisJCWJy ZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJY2Fsb3IgPSBEUElfQ09MT1JfQ09E SU5HXzE2QklUXzE7CisJCWJyZWFrOworCX0KKworCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19QVlNZTkMpKQorCQl2YWwgfD0gVlNZTkNfQUNUSVZFX0xPVzsKKwlpZiAoIShtb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKSkKKwkJdmFsIHw9IEhTWU5DX0FDVElWRV9M T1c7CisKKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX1ZDSUQsIERQSV9WSUQoZHNpLT5jaGFubmVs KSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DT0xPUl9DT0RJTkcsIGNhbG9yKTsKKwlkc2lf d3JpdGUoZHNpLCBEU0lfRFBJX0NGR19QT0wsIHZhbCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQ SV9MUF9DTURfVElNLCBPVVRWQUNUX0xQQ01EX1RJTUUoNCkKKwkJICB8IElOVkFDVF9MUENNRF9U SU1FKDQpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29u ZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QQ0tI RExfQ0ZHLCBFTl9DUkNfUlggfCBFTl9FQ0NfUlggfCBFTl9CVEEpOworfQorCitzdGF0aWMgdm9p ZCBkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp LAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJZHNpX3dyaXRl KGRzaSwgRFNJX1ZJRF9QS1RfU0laRSwgVklEX1BLVF9TSVpFKG1vZGUtPmhkaXNwbGF5KSk7Cit9 CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoc3RydWN0IGR3 X21pcGlfZHNpICpkc2kpCit7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1RPX0NOVF9DRkcsIEhTVFhf VE9fQ05UKDEwMDApIHwgTFBSWF9UT19DTlQoMTAwMCkpOworCWRzaV93cml0ZShkc2ksIERTSV9C VEFfVE9fQ05ULCAweGQwMCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0NNRF9NT0RFX0NGRywgQ01E X01PREVfQUxMX0xQKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURf TU9ERSk7Cit9CisKKy8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLworc3RhdGljIHUz MiBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp LAorCQkJCQkgICB1MzIgaGNvbXBvbmVudCkKK3sKKwl1MzIgZnJhYywgbGJjYzsKKworCWxiY2Mg PSBoY29tcG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMgLyA4OworCisJZnJh YyA9IGxiY2MgJSBkc2ktPm1vZGUtPmNsb2NrOworCWxiY2MgPSBsYmNjIC8gZHNpLT5tb2RlLT5j bG9jazsKKwlpZiAoZnJhYykKKwkJbGJjYysrOworCisJcmV0dXJuIGxiY2M7Cit9CisKK3N0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpKQoreworCXUzMiBodG90YWwsIGhzYSwgaGJwLCBsYmNjOworCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlID0gZHNpLT5tb2RlOworCisJaHRvdGFsID0gbW9kZS0+aHRvdGFsOworCWhz YSA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCWhicCA9IG1vZGUtPmh0 b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKKworCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBv bmVudF9sYmNjKGRzaSwgaHRvdGFsKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hMSU5FX1RJ TUUsIGxiY2MpOworCisJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNp LCBoc2EpOworCWRzaV93cml0ZShkc2ksIERTSV9WSURfSFNBX1RJTUUsIGxiY2MpOworCisJbGJj YyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBoYnApOworCWRzaV93cml0 ZShkc2ksIERTSV9WSURfSEJQX1RJTUUsIGxiY2MpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQorewor CXUzMiB2YWN0aXZlLCB2c2EsIHZmcCwgdmJwOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlID0gZHNpLT5tb2RlOworCisJdmFjdGl2ZSA9IG1vZGUtPnZkaXNwbGF5OworCXZzYSA9IG1v ZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZmcCA9IG1vZGUtPnZzeW5jX3N0 YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJdmJwID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNf ZW5kOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WQUNUSVZFX0xJTkVTLCB2YWN0aXZlKTsK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZTQV9MSU5FUywgdnNhKTsKKwlkc2lfd3JpdGUoZHNp LCBEU0lfVklEX1ZGUF9MSU5FUywgdmZwKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZCUF9M SU5FUywgdmJwKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29u ZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf VE1SX0NGRywgUEhZX0hTMkxQX1RJTUUoMHg0MCkKKwkJICB8IFBIWV9MUDJIU19USU1FKDB4NDAp IHwgTUFYX1JEX1RJTUUoMTAwMDApKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0xQ Q0xLX0NGRywgUEhZX0NMS0hTMkxQX1RJTUUoMHg0MCkKKwkJICB8IFBIWV9DTEtMUDJIU19USU1F KDB4NDApKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9pbnRlcmZhY2VfY29u ZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf SUZfQ0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfAorCQkgIE5fTEFORVMoZHNpLT5sYW5l cykpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jbGVhcl9lcnIoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJZHNpX3JlYWQoZHNpLCBEU0lfSU5UX1NUMCk7CisJZHNpX3JlYWQo ZHNpLCBEU0lfSU5UX1NUMSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0swLCAwKTsKKwlk c2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzEsIDApOworfQorCitzdGF0aWMgdm9pZCBkd19taXBp X2RzaV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlLT5k cml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJZHNpLT5tb2RlID0gYWRqdXN0ZWRfbW9kZTsK KworCXJldCA9IGR3X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2kpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm47CisKKwlpZiAoIUlTX0VSUihkc2ktPmNmZ19jbGspKQorCQljbGtfcHJlcGFyZV9l bmFibGUoZHNpLT5jZmdfY2xrKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGspOwor CWR3X21pcGlfZHNpX2luaXQoZHNpKTsKKwlkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9k ZSk7CisJZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9k c2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29u ZmlnKGRzaSwgbW9kZSk7CisJZHdfbWlwaV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOwor CWR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfdmVydGlj YWxfdGltaW5nX2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhk c2kpOworCWR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOworCWR3X21pcGlf ZHNpX2NsZWFyX2Vycihkc2kpOworCWR3X21pcGlfZHNpX3BoeV9pbml0KGRzaSk7CisJZHdfbWlw aV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhkc2kpOworCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+ cGFuZWwpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOworCisJaWYgKCFJU19F UlIoZHNpLT5jZmdfY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+Y2ZnX2Nsayk7 Cit9CisKK3N0YXRpYyBib29sIGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UsCisJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGR3X21pcGlf ZHNpX2JyaWRnZV9mdW5jcyA9IHsKKwkuZW5hYmxlID0gZHdfbWlwaV9kc2lfYnJpZGdlX2VuYWJs ZSwKKwkuZGlzYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9kaXNhYmxlLAorCS5wcmVfZW5hYmxl ID0gZHdfbWlwaV9kc2lfYnJpZGdlX25vcGUsCisJLnBvc3RfZGlzYWJsZSA9IGR3X21pcGlfZHNp X2JyaWRnZV9ub3BlLAorCS5tb2RlX3NldCA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX3NldCwK KwkubW9kZV9maXh1cCA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLAorfTsKKworc3Rh dGljIGludCBkd19taXBpX2RzaV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBk c2ktPmVuY29kZXI7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlpbnQgcmV0OworCisJ YnJpZGdlID0gZGV2bV9remFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKmJyaWRnZSksIEdGUF9LRVJO RUwpOworCWlmICghYnJpZGdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzaS0+YnJpZGdlID0g YnJpZGdlOworCWJyaWRnZS0+ZHJpdmVyX3ByaXZhdGUgPSBkc2k7CisKKwlicmlkZ2UtPmZ1bmNz ID0gJmR3X21pcGlfZHNpX2JyaWRnZV9mdW5jczsKKwlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChk cm0sIGJyaWRnZSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFs aXplIGJyaWRnZSB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZW5jb2Rlci0+ YnJpZGdlID0gYnJpZGdlOworCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZkc2ktPmNvbm5l Y3RvciwKKwkJCSZkd19taXBpX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlkcm1fY29u bmVjdG9yX2luaXQoZHJtLCAmZHNpLT5jb25uZWN0b3IsICZkd19taXBpX2RzaV9jb25uZWN0b3Jf ZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKworCWRybV9tb2RlX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNpLT5jb25uZWN0b3IsIGRzaS0+ZW5jb2Rlcik7CisKKwly ZXR1cm4gMDsKK30KKworaW50IGR3X21pcGlfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEg KnBkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gZGF0YTsKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaTsKKwl1MzIgdmFsOworCWludCBy ZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwp OworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzaS0+cGRhdGEgPSBwZGF0YTsK Kwlkc2ktPmRldiA9IGRldjsKKwlkc2ktPmRzaV9ob3N0Lm9wcyA9ICZkd19taXBpX2RzaV9ob3N0 X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKKwlkc2ktPmVuY29kZXIgPSBlbmNvZGVy OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkc2ktPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKKwkJcmV0 dXJuIFBUUl9FUlIoZHNpLT5iYXNlKTsKKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJyZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0g UFRSX0VSUihkc2ktPnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQg cGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWNs a19wcmVwYXJlX2VuYWJsZShkc2ktPnBsbHJlZl9jbGspOworCisJZHNpLT5jZmdfY2xrID0gZGV2 bV9jbGtfZ2V0KGRldiwgImNmZyIpOworCWlmIChJU19FUlIoZHNpLT5jZmdfY2xrKSkKKwkJZGV2 X3dhcm4oZGV2LCAiSGF2ZSBubyBjb25maWd1cmF0aW9uIGNsb2NrXG4iKTsKKworCWRzaS0+cGNs ayA9IGRldm1fY2xrX2dldChkZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkc2ktPnBjbGspKSB7 CisJCXJldCA9IFBUUl9FUlIoZHNpLT5wY2xrKTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8g Z2V0IGNvbmZpZ3VyYXRpb24gY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbGxyZWY7 CisJfQorCisJaWYgKCFJU19FUlIoZHNpLT5jZmdfY2xrKSkKKwkJY2xrX3ByZXBhcmVfZW5hYmxl KGRzaS0+Y2ZnX2Nsayk7CisKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsKKwl2YWwg PSBkc2lfcmVhZChkc2ksIERTSV9WRVJTSU9OKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5wY2xrKTsKKworCWlmICghSVNfRVJSKGRzaS0+Y2ZnX2NsaykpCisJCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShkc2ktPmNmZ19jbGspOworCisJZGV2X2luZm8oZGV2LCAidmVyc2lvbiBudW1iZXIg aXMgMHglMDh4XG4iLCB2YWwpOworCisJcmV0ID0gZHdfbWlwaV9kc2lfcmVnaXN0ZXIoZHJtLCBk c2kpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgZHNp OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcGxscmVmOworCX0KKwlkZXZfc2V0X2RydmRhdGEo ZGV2LCBkc2kpOworCisJcmV0dXJuIG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hv c3QpOworCitlcnJfcGxscmVmOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9j bGspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV9iaW5k KTsKKwordm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpICpkc2kg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNp LT5kc2lfaG9zdCk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7Cit9 CitFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV91bmJpbmQpOworCitNT0RVTEVfREVTQ1JJ UFRJT04oIlN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgaG9zdCBjb250cm9sbGVyIGRyaXZl ciIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2JyaWRnZS9k d19taXBpX2RzaS5oIGIvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzNTFlNAotLS0gL2Rldi9udWxsCisrKyBiL2lu Y2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBD b3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0RXX01JUElfRFNJ X18KKyNkZWZpbmUgX19EV19NSVBJX0RTSV9fCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCitz dHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFu ZXM7CisJZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAorCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7 Cit9OworCitpbnQgZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxfZm9ybWF0KHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2Rlcik7CisKK2ludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkgICAgIHZvaWQgKmRhdGEsIHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJICAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lf cGxhdF9kYXRhICpwZGF0YSk7Cit2b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSk7CisjZW5kaWYJLyogX19E V19NSVBJX0RTSV9fICovCi0tIAoyLjYuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK