From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [RFC PATCH 17/31] xen/arm: Add ARM System Control and Power Interface (SCPI) protocol Date: Thu, 9 Nov 2017 19:10:07 +0200 Message-ID: <1510247421-24094-18-git-send-email-olekstysh@gmail.com> References: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eCqLt-0004Ls-QR for xen-devel@lists.xenproject.org; Thu, 09 Nov 2017 17:10:54 +0000 Received: by mail-lf0-f65.google.com with SMTP id b190so8046205lfg.9 for ; Thu, 09 Nov 2017 09:10:51 -0800 (PST) In-Reply-To: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Oleksandr Tyshchenko , Stefano Stabellini , Julien Grall List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKVGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgYm9ycm93ZWQgZnJvbSB0aGUgTGludXguIFBsZWFz ZSBzZWU6Cmh0dHA6Ly9lbGl4aXIuZnJlZS1lbGVjdHJvbnMuY29tL2xpbnV4L3Y0LjE0LXJjNi9z b3VyY2UvZHJpdmVycy9maXJtd2FyZS9hcm1fc2NwaS5jCmh0dHA6Ly9lbGl4aXIuZnJlZS1lbGVj dHJvbnMuY29tL2xpbnV4L3Y0LjE0LXJjNi9zb3VyY2UvaW5jbHVkZS9saW51eC9zY3BpX3Byb3Rv Y29sLmgKCkJpbmRpbmdzIGFyZSBoZXJlOgpodHRwOi8vZWxpeGlyLmZyZWUtZWxlY3Ryb25zLmNv bS9saW51eC92NC4xNC1yYzYvc291cmNlL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9hcm0vYXJtLHNjcGkudHh0CgpSZWNlbnQgcHJvdG9jb2wgdmVyc2lvbiB5b3UgY2FuIGZpbmQg aGVyZToKaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmR1 aTA5MjJnL3NjcF9tZXNzYWdlX2ludGVyZmFjZV92MV8yX0RVSTA5MjJHX2VuLnBkZgoKSSBwb3J0 IHRoaXMgcHJvdG9jb2wgd2l0aCBoYXZpbmcgQ1BVRnJlcSBvbiBBUk0gaW4gbWluZC4KClNpZ25l ZC1vZmYtYnk6IE9sZWtzYW5kciBUeXNoY2hlbmtvIDxvbGVrc2FuZHJfdHlzaGNoZW5rb0BlcGFt LmNvbT4KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ0M6 IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGxpbmFyby5vcmc+Ci0tLQogeGVuL2FyY2gvYXJt L2NwdWZyZXEvYXJtX3NjcGkuYyAgICAgIHwgMTA4NSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiB4ZW4vYXJjaC9hcm0vY3B1ZnJlcS9zY3BpX3Byb3RvY29sLmggfCAgIDg0ICsr KwogMiBmaWxlcyBjaGFuZ2VkLCAxMTY5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB4ZW4vYXJjaC9hcm0vY3B1ZnJlcS9hcm1fc2NwaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVu L2FyY2gvYXJtL2NwdWZyZXEvc2NwaV9wcm90b2NvbC5oCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL2NwdWZyZXEvYXJtX3NjcGkuYyBiL3hlbi9hcmNoL2FybS9jcHVmcmVxL2FybV9zY3BpLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhOWYxYgotLS0gL2Rldi9udWxs CisrKyBiL3hlbi9hcmNoL2FybS9jcHVmcmVxL2FybV9zY3BpLmMKQEAgLTAsMCArMSwxMDg1IEBA CisvKgorICogU3lzdGVtIENvbnRyb2wgYW5kIFBvd2VyIEludGVyZmFjZSAoU0NQSSkgTWVzc2Fn ZSBQcm90b2NvbCBkcml2ZXIKKyAqCisgKiBTQ1BJIE1lc3NhZ2UgUHJvdG9jb2wgaXMgdXNlZCBi ZXR3ZWVuIHRoZSBTeXN0ZW0gQ29udHJvbCBQcm9jZXNzb3IoU0NQKQorICogYW5kIHRoZSBBcHBs aWNhdGlvbiBQcm9jZXNzb3JzKEFQKS4gVGhlIE1lc3NhZ2UgSGFuZGxpbmcgVW5pdChNSFUpCisg KiBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgaW50ZXItcHJvY2Vzc29yIGNvbW11bmljYXRpb24g YmV0d2VlbiBTQ1AncworICogQ29ydGV4IE0zIGFuZCBBUC4KKyAqCisgKiBTQ1Agb2ZmZXJzIGNv bnRyb2wgYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGNvcmUvY2x1c3RlciBwb3dlciBzdGF0ZXMsCisg KiB2YXJpb3VzIHBvd2VyIGRvbWFpbiBEVkZTIGluY2x1ZGluZyB0aGUgY29yZS9jbHVzdGVyLCBj ZXJ0YWluIHN5c3RlbQorICogY2xvY2tzIGNvbmZpZ3VyYXRpb24sIHRoZXJtYWwgc2Vuc29ycyBh bmQgbWFueSBvdGhlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFSTSBMdGQuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQK KyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F UkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10 KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Cisj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVk ZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbWFp bGJveF9jbGllbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRl IDxsaW51eC9wcmludGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9vcHAuaD4KKyNpbmNsdWRlIDxs aW51eC9zY3BpX3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUg PGxpbnV4L3NvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIENN RF9JRF9TSElGVAkJMAorI2RlZmluZSBDTURfSURfTUFTSwkJMHg3ZgorI2RlZmluZSBDTURfVE9L RU5fSURfU0hJRlQJOAorI2RlZmluZSBDTURfVE9LRU5fSURfTUFTSwkweGZmCisjZGVmaW5lIENN RF9EQVRBX1NJWkVfU0hJRlQJMTYKKyNkZWZpbmUgQ01EX0RBVEFfU0laRV9NQVNLCTB4MWZmCisj ZGVmaW5lIENNRF9MRUdBQ1lfREFUQV9TSVpFX1NISUZUCTIwCisjZGVmaW5lIENNRF9MRUdBQ1lf REFUQV9TSVpFX01BU0sJMHgxZmYKKyNkZWZpbmUgUEFDS19TQ1BJX0NNRChjbWRfaWQsIHR4X3N6 KQkJCVwKKwkoKCgoY21kX2lkKSAmIENNRF9JRF9NQVNLKSA8PCBDTURfSURfU0hJRlQpIHwJXAor CSgoKHR4X3N6KSAmIENNRF9EQVRBX1NJWkVfTUFTSykgPDwgQ01EX0RBVEFfU0laRV9TSElGVCkp CisjZGVmaW5lIEFERF9TQ1BJX1RPS0VOKGNtZCwgdG9rZW4pCQkJXAorCSgoY21kKSB8PSAoKCh0 b2tlbikgJiBDTURfVE9LRU5fSURfTUFTSykgPDwgQ01EX1RPS0VOX0lEX1NISUZUKSkKKyNkZWZp bmUgUEFDS19MRUdBQ1lfU0NQSV9DTUQoY21kX2lkLCB0eF9zeikJCQkJXAorCSgoKChjbWRfaWQp ICYgQ01EX0lEX01BU0spIDw8IENNRF9JRF9TSElGVCkgfAkJCSAgICAgICBcCisJKCgodHhfc3op ICYgQ01EX0xFR0FDWV9EQVRBX1NJWkVfTUFTSykgPDwgQ01EX0xFR0FDWV9EQVRBX1NJWkVfU0hJ RlQpKQorCisjZGVmaW5lIENNRF9TSVpFKGNtZCkJKCgoY21kKSA+PiBDTURfREFUQV9TSVpFX1NI SUZUKSAmIENNRF9EQVRBX1NJWkVfTUFTSykKKyNkZWZpbmUgQ01EX0xFR0FDWV9TSVpFKGNtZCkJ KCgoY21kKSA+PiBDTURfTEVHQUNZX0RBVEFfU0laRV9TSElGVCkgJiBcCisJCQkJCUNNRF9MRUdB Q1lfREFUQV9TSVpFX01BU0spCisjZGVmaW5lIENNRF9VTklRX01BU0sJKENNRF9UT0tFTl9JRF9N QVNLIDw8IENNRF9UT0tFTl9JRF9TSElGVCB8IENNRF9JRF9NQVNLKQorI2RlZmluZSBDTURfWFRS QUNUX1VOSVEoY21kKQkoKGNtZCkgJiBDTURfVU5JUV9NQVNLKQorCisjZGVmaW5lIFNDUElfU0xP VAkJMAorCisjZGVmaW5lIE1BWF9EVkZTX0RPTUFJTlMJOAorI2RlZmluZSBNQVhfRFZGU19PUFBT CQkxNgorI2RlZmluZSBEVkZTX0xBVEVOQ1koaGRyKQkobGUzMl90b19jcHUoaGRyKSA+PiAxNikK KyNkZWZpbmUgRFZGU19PUFBfQ09VTlQoaGRyKQkoKGxlMzJfdG9fY3B1KGhkcikgPj4gOCkgJiAw eGZmKQorCisjZGVmaW5lIFBST1RPQ09MX1JFVl9NSU5PUl9CSVRTCTE2CisjZGVmaW5lIFBST1RP Q09MX1JFVl9NSU5PUl9NQVNLCSgoMVUgPDwgUFJPVE9DT0xfUkVWX01JTk9SX0JJVFMpIC0gMSkK KyNkZWZpbmUgUFJPVE9DT0xfUkVWX01BSk9SKHgpCSgoeCkgPj4gUFJPVE9DT0xfUkVWX01JTk9S X0JJVFMpCisjZGVmaW5lIFBST1RPQ09MX1JFVl9NSU5PUih4KQkoKHgpICYgUFJPVE9DT0xfUkVW X01JTk9SX01BU0spCisKKyNkZWZpbmUgRldfUkVWX01BSk9SX0JJVFMJMjQKKyNkZWZpbmUgRldf UkVWX01JTk9SX0JJVFMJMTYKKyNkZWZpbmUgRldfUkVWX1BBVENIX01BU0sJKCgxVSA8PCBGV19S RVZfTUlOT1JfQklUUykgLSAxKQorI2RlZmluZSBGV19SRVZfTUlOT1JfTUFTSwkoKDFVIDw8IEZX X1JFVl9NQUpPUl9CSVRTKSAtIDEpCisjZGVmaW5lIEZXX1JFVl9NQUpPUih4KQkJKCh4KSA+PiBG V19SRVZfTUFKT1JfQklUUykKKyNkZWZpbmUgRldfUkVWX01JTk9SKHgpCQkoKCh4KSAmIEZXX1JF Vl9NSU5PUl9NQVNLKSA+PiBGV19SRVZfTUlOT1JfQklUUykKKyNkZWZpbmUgRldfUkVWX1BBVENI KHgpCQkoKHgpICYgRldfUkVWX1BBVENIX01BU0spCisKKyNkZWZpbmUgTUFYX1JYX1RJTUVPVVQJ CShtc2Vjc190b19qaWZmaWVzKDMwKSkKKworZW51bSBzY3BpX2Vycm9yX2NvZGVzIHsKKwlTQ1BJ X1NVQ0NFU1MgPSAwLCAvKiBTdWNjZXNzICovCisJU0NQSV9FUlJfUEFSQU0gPSAxLCAvKiBJbnZh bGlkIHBhcmFtZXRlcihzKSAqLworCVNDUElfRVJSX0FMSUdOID0gMiwgLyogSW52YWxpZCBhbGln bm1lbnQgKi8KKwlTQ1BJX0VSUl9TSVpFID0gMywgLyogSW52YWxpZCBzaXplICovCisJU0NQSV9F UlJfSEFORExFUiA9IDQsIC8qIEludmFsaWQgaGFuZGxlci9jYWxsYmFjayAqLworCVNDUElfRVJS X0FDQ0VTUyA9IDUsIC8qIEludmFsaWQgYWNjZXNzL3Blcm1pc3Npb24gZGVuaWVkICovCisJU0NQ SV9FUlJfUkFOR0UgPSA2LCAvKiBWYWx1ZSBvdXQgb2YgcmFuZ2UgKi8KKwlTQ1BJX0VSUl9USU1F T1VUID0gNywgLyogVGltZW91dCBoYXMgb2NjdXJyZWQgKi8KKwlTQ1BJX0VSUl9OT01FTSA9IDgs IC8qIEludmFsaWQgbWVtb3J5IGFyZWEgb3IgcG9pbnRlciAqLworCVNDUElfRVJSX1BXUlNUQVRF ID0gOSwgLyogSW52YWxpZCBwb3dlciBzdGF0ZSAqLworCVNDUElfRVJSX1NVUFBPUlQgPSAxMCwg LyogTm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZCAqLworCVNDUElfRVJSX0RFVklDRSA9IDExLCAv KiBEZXZpY2UgZXJyb3IgKi8KKwlTQ1BJX0VSUl9CVVNZID0gMTIsIC8qIERldmljZSBidXN5ICov CisJU0NQSV9FUlJfTUFYCit9OworCisvKiBTQ1BJIFN0YW5kYXJkIGNvbW1hbmRzICovCitlbnVt IHNjcGlfc3RkX2NtZCB7CisJU0NQSV9DTURfSU5WQUxJRAkJPSAweDAwLAorCVNDUElfQ01EX1ND UElfUkVBRFkJCT0gMHgwMSwKKwlTQ1BJX0NNRF9TQ1BJX0NBUEFCSUxJVElFUwk9IDB4MDIsCisJ U0NQSV9DTURfU0VUX0NTU19QV1JfU1RBVEUJPSAweDAzLAorCVNDUElfQ01EX0dFVF9DU1NfUFdS X1NUQVRFCT0gMHgwNCwKKwlTQ1BJX0NNRF9TRVRfU1lTX1BXUl9TVEFURQk9IDB4MDUsCisJU0NQ SV9DTURfU0VUX0NQVV9USU1FUgkJPSAweDA2LAorCVNDUElfQ01EX0NBTkNFTF9DUFVfVElNRVIJ PSAweDA3LAorCVNDUElfQ01EX0RWRlNfQ0FQQUJJTElUSUVTCT0gMHgwOCwKKwlTQ1BJX0NNRF9H RVRfRFZGU19JTkZPCQk9IDB4MDksCisJU0NQSV9DTURfU0VUX0RWRlMJCT0gMHgwYSwKKwlTQ1BJ X0NNRF9HRVRfRFZGUwkJPSAweDBiLAorCVNDUElfQ01EX0dFVF9EVkZTX1NUQVQJCT0gMHgwYywK KwlTQ1BJX0NNRF9DTE9DS19DQVBBQklMSVRJRVMJPSAweDBkLAorCVNDUElfQ01EX0dFVF9DTE9D S19JTkZPCQk9IDB4MGUsCisJU0NQSV9DTURfU0VUX0NMT0NLX1ZBTFVFCT0gMHgwZiwKKwlTQ1BJ X0NNRF9HRVRfQ0xPQ0tfVkFMVUUJPSAweDEwLAorCVNDUElfQ01EX1BTVV9DQVBBQklMSVRJRVMJ PSAweDExLAorCVNDUElfQ01EX0dFVF9QU1VfSU5GTwkJPSAweDEyLAorCVNDUElfQ01EX1NFVF9Q U1UJCT0gMHgxMywKKwlTQ1BJX0NNRF9HRVRfUFNVCQk9IDB4MTQsCisJU0NQSV9DTURfU0VOU09S X0NBUEFCSUxJVElFUwk9IDB4MTUsCisJU0NQSV9DTURfU0VOU09SX0lORk8JCT0gMHgxNiwKKwlT Q1BJX0NNRF9TRU5TT1JfVkFMVUUJCT0gMHgxNywKKwlTQ1BJX0NNRF9TRU5TT1JfQ0ZHX1BFUklP RElDCT0gMHgxOCwKKwlTQ1BJX0NNRF9TRU5TT1JfQ0ZHX0JPVU5EUwk9IDB4MTksCisJU0NQSV9D TURfU0VOU09SX0FTWU5DX1ZBTFVFCT0gMHgxYSwKKwlTQ1BJX0NNRF9TRVRfREVWSUNFX1BXUl9T VEFURQk9IDB4MWIsCisJU0NQSV9DTURfR0VUX0RFVklDRV9QV1JfU1RBVEUJPSAweDFjLAorCVND UElfQ01EX0NPVU5UCit9OworCisvKiBTQ1BJIExlZ2FjeSBDb21tYW5kcyAqLworZW51bSBsZWdh Y3lfc2NwaV9zdGRfY21kIHsKKwlMRUdBQ1lfU0NQSV9DTURfSU5WQUxJRAkJCT0gMHgwMCwKKwlM RUdBQ1lfU0NQSV9DTURfU0NQSV9SRUFEWQkJPSAweDAxLAorCUxFR0FDWV9TQ1BJX0NNRF9TQ1BJ X0NBUEFCSUxJVElFUwk9IDB4MDIsCisJTEVHQUNZX1NDUElfQ01EX0VWRU5UCQkJPSAweDAzLAor CUxFR0FDWV9TQ1BJX0NNRF9TRVRfQ1NTX1BXUl9TVEFURQk9IDB4MDQsCisJTEVHQUNZX1NDUElf Q01EX0dFVF9DU1NfUFdSX1NUQVRFCT0gMHgwNSwKKwlMRUdBQ1lfU0NQSV9DTURfQ0ZHX1BXUl9T VEFURV9TVEFUCT0gMHgwNiwKKwlMRUdBQ1lfU0NQSV9DTURfR0VUX1BXUl9TVEFURV9TVEFUCT0g MHgwNywKKwlMRUdBQ1lfU0NQSV9DTURfU1lTX1BXUl9TVEFURQkJPSAweDA4LAorCUxFR0FDWV9T Q1BJX0NNRF9MMl9SRUFEWQkJPSAweDA5LAorCUxFR0FDWV9TQ1BJX0NNRF9TRVRfQVBfVElNRVIJ CT0gMHgwYSwKKwlMRUdBQ1lfU0NQSV9DTURfQ0FOQ0VMX0FQX1RJTUUJCT0gMHgwYiwKKwlMRUdB Q1lfU0NQSV9DTURfRFZGU19DQVBBQklMSVRJRVMJPSAweDBjLAorCUxFR0FDWV9TQ1BJX0NNRF9H RVRfRFZGU19JTkZPCQk9IDB4MGQsCisJTEVHQUNZX1NDUElfQ01EX1NFVF9EVkZTCQk9IDB4MGUs CisJTEVHQUNZX1NDUElfQ01EX0dFVF9EVkZTCQk9IDB4MGYsCisJTEVHQUNZX1NDUElfQ01EX0dF VF9EVkZTX1NUQVQJCT0gMHgxMCwKKwlMRUdBQ1lfU0NQSV9DTURfU0VUX1JUQwkJCT0gMHgxMSwK KwlMRUdBQ1lfU0NQSV9DTURfR0VUX1JUQwkJCT0gMHgxMiwKKwlMRUdBQ1lfU0NQSV9DTURfQ0xP Q0tfQ0FQQUJJTElUSUVTCT0gMHgxMywKKwlMRUdBQ1lfU0NQSV9DTURfU0VUX0NMT0NLX0lOREVY CQk9IDB4MTQsCisJTEVHQUNZX1NDUElfQ01EX1NFVF9DTE9DS19WQUxVRQkJPSAweDE1LAorCUxF R0FDWV9TQ1BJX0NNRF9HRVRfQ0xPQ0tfVkFMVUUJCT0gMHgxNiwKKwlMRUdBQ1lfU0NQSV9DTURf UFNVX0NBUEFCSUxJVElFUwk9IDB4MTcsCisJTEVHQUNZX1NDUElfQ01EX1NFVF9QU1UJCQk9IDB4 MTgsCisJTEVHQUNZX1NDUElfQ01EX0dFVF9QU1UJCQk9IDB4MTksCisJTEVHQUNZX1NDUElfQ01E X1NFTlNPUl9DQVBBQklMSVRJRVMJPSAweDFhLAorCUxFR0FDWV9TQ1BJX0NNRF9TRU5TT1JfSU5G TwkJPSAweDFiLAorCUxFR0FDWV9TQ1BJX0NNRF9TRU5TT1JfVkFMVUUJCT0gMHgxYywKKwlMRUdB Q1lfU0NQSV9DTURfU0VOU09SX0NGR19QRVJJT0RJQwk9IDB4MWQsCisJTEVHQUNZX1NDUElfQ01E X1NFTlNPUl9DRkdfQk9VTkRTCT0gMHgxZSwKKwlMRUdBQ1lfU0NQSV9DTURfU0VOU09SX0FTWU5D X1ZBTFVFCT0gMHgxZiwKKwlMRUdBQ1lfU0NQSV9DTURfQ09VTlQKK307CisKKy8qIExpc3QgYWxs IGNvbW1hbmRzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGdvIHRocm91Z2ggdGhlIGhpZ2ggcHJpb3Jp dHkgbGluayAqLworc3RhdGljIGludCBsZWdhY3lfaHByaW9yaXR5X2NtZHNbXSA9IHsKKwlMRUdB Q1lfU0NQSV9DTURfR0VUX0NTU19QV1JfU1RBVEUsCisJTEVHQUNZX1NDUElfQ01EX0NGR19QV1Jf U1RBVEVfU1RBVCwKKwlMRUdBQ1lfU0NQSV9DTURfR0VUX1BXUl9TVEFURV9TVEFULAorCUxFR0FD WV9TQ1BJX0NNRF9TRVRfRFZGUywKKwlMRUdBQ1lfU0NQSV9DTURfR0VUX0RWRlMsCisJTEVHQUNZ X1NDUElfQ01EX1NFVF9SVEMsCisJTEVHQUNZX1NDUElfQ01EX0dFVF9SVEMsCisJTEVHQUNZX1ND UElfQ01EX1NFVF9DTE9DS19JTkRFWCwKKwlMRUdBQ1lfU0NQSV9DTURfU0VUX0NMT0NLX1ZBTFVF LAorCUxFR0FDWV9TQ1BJX0NNRF9HRVRfQ0xPQ0tfVkFMVUUsCisJTEVHQUNZX1NDUElfQ01EX1NF VF9QU1UsCisJTEVHQUNZX1NDUElfQ01EX0dFVF9QU1UsCisJTEVHQUNZX1NDUElfQ01EX1NFTlNP Ul9DRkdfUEVSSU9ESUMsCisJTEVHQUNZX1NDUElfQ01EX1NFTlNPUl9DRkdfQk9VTkRTLAorfTsK KworLyogTGlzdCBhbGwgY29tbWFuZHMgdXNlZCBieSB0aGlzIGRyaXZlciwgdXNlZCBhcyBpbmRl eGVzICovCitlbnVtIHNjcGlfZHJ2X2NtZHMgeworCUNNRF9TQ1BJX0NBUEFCSUxJVElFUyA9IDAs CisJQ01EX0dFVF9DTE9DS19JTkZPLAorCUNNRF9HRVRfQ0xPQ0tfVkFMVUUsCisJQ01EX1NFVF9D TE9DS19WQUxVRSwKKwlDTURfR0VUX0RWRlMsCisJQ01EX1NFVF9EVkZTLAorCUNNRF9HRVRfRFZG U19JTkZPLAorCUNNRF9TRU5TT1JfQ0FQQUJJTElUSUVTLAorCUNNRF9TRU5TT1JfSU5GTywKKwlD TURfU0VOU09SX1ZBTFVFLAorCUNNRF9TRVRfREVWSUNFX1BXUl9TVEFURSwKKwlDTURfR0VUX0RF VklDRV9QV1JfU1RBVEUsCisJQ01EX01BWF9DT1VOVCwKK307CisKK3N0YXRpYyBpbnQgc2NwaV9z dGRfY29tbWFuZHNbQ01EX01BWF9DT1VOVF0gPSB7CisJU0NQSV9DTURfU0NQSV9DQVBBQklMSVRJ RVMsCisJU0NQSV9DTURfR0VUX0NMT0NLX0lORk8sCisJU0NQSV9DTURfR0VUX0NMT0NLX1ZBTFVF LAorCVNDUElfQ01EX1NFVF9DTE9DS19WQUxVRSwKKwlTQ1BJX0NNRF9HRVRfRFZGUywKKwlTQ1BJ X0NNRF9TRVRfRFZGUywKKwlTQ1BJX0NNRF9HRVRfRFZGU19JTkZPLAorCVNDUElfQ01EX1NFTlNP Ul9DQVBBQklMSVRJRVMsCisJU0NQSV9DTURfU0VOU09SX0lORk8sCisJU0NQSV9DTURfU0VOU09S X1ZBTFVFLAorCVNDUElfQ01EX1NFVF9ERVZJQ0VfUFdSX1NUQVRFLAorCVNDUElfQ01EX0dFVF9E RVZJQ0VfUFdSX1NUQVRFLAorfTsKKworc3RhdGljIGludCBzY3BpX2xlZ2FjeV9jb21tYW5kc1tD TURfTUFYX0NPVU5UXSA9IHsKKwlMRUdBQ1lfU0NQSV9DTURfU0NQSV9DQVBBQklMSVRJRVMsCisJ LTEsIC8qIEdFVF9DTE9DS19JTkZPICovCisJTEVHQUNZX1NDUElfQ01EX0dFVF9DTE9DS19WQUxV RSwKKwlMRUdBQ1lfU0NQSV9DTURfU0VUX0NMT0NLX1ZBTFVFLAorCUxFR0FDWV9TQ1BJX0NNRF9H RVRfRFZGUywKKwlMRUdBQ1lfU0NQSV9DTURfU0VUX0RWRlMsCisJTEVHQUNZX1NDUElfQ01EX0dF VF9EVkZTX0lORk8sCisJTEVHQUNZX1NDUElfQ01EX1NFTlNPUl9DQVBBQklMSVRJRVMsCisJTEVH QUNZX1NDUElfQ01EX1NFTlNPUl9JTkZPLAorCUxFR0FDWV9TQ1BJX0NNRF9TRU5TT1JfVkFMVUUs CisJLTEsIC8qIFNFVF9ERVZJQ0VfUFdSX1NUQVRFICovCisJLTEsIC8qIEdFVF9ERVZJQ0VfUFdS X1NUQVRFICovCit9OworCitzdHJ1Y3Qgc2NwaV94ZmVyIHsKKwl1MzIgc2xvdDsgLyogaGFzIHRv IGJlIGZpcnN0IGVsZW1lbnQgKi8KKwl1MzIgY21kOworCXUzMiBzdGF0dXM7CisJY29uc3Qgdm9p ZCAqdHhfYnVmOworCXZvaWQgKnJ4X2J1ZjsKKwl1bnNpZ25lZCBpbnQgdHhfbGVuOworCXVuc2ln bmVkIGludCByeF9sZW47CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBjb21wbGV0 aW9uIGRvbmU7Cit9OworCitzdHJ1Y3Qgc2NwaV9jaGFuIHsKKwlzdHJ1Y3QgbWJveF9jbGllbnQg Y2w7CisJc3RydWN0IG1ib3hfY2hhbiAqY2hhbjsKKwl2b2lkIF9faW9tZW0gKnR4X3BheWxvYWQ7 CisJdm9pZCBfX2lvbWVtICpyeF9wYXlsb2FkOworCXN0cnVjdCBsaXN0X2hlYWQgcnhfcGVuZGlu ZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhmZXJzX2xpc3Q7CisJc3RydWN0IHNjcGlfeGZlciAqeGZl cnM7CisJc3BpbmxvY2tfdCByeF9sb2NrOyAvKiBsb2NraW5nIGZvciB0aGUgcnggcGVuZGluZyBs aXN0ICovCisJc3RydWN0IG11dGV4IHhmZXJzX2xvY2s7CisJdTggdG9rZW47Cit9OworCitzdHJ1 Y3Qgc2NwaV9kcnZpbmZvIHsKKwl1MzIgcHJvdG9jb2xfdmVyc2lvbjsKKwl1MzIgZmlybXdhcmVf dmVyc2lvbjsKKwlib29sIGlzX2xlZ2FjeTsKKwlpbnQgbnVtX2NoYW5zOworCWludCAqY29tbWFu ZHM7CisJREVDTEFSRV9CSVRNQVAoY21kX3ByaW9yaXR5LCBMRUdBQ1lfU0NQSV9DTURfQ09VTlQp OworCWF0b21pY190IG5leHRfY2hhbjsKKwlzdHJ1Y3Qgc2NwaV9vcHMgKnNjcGlfb3BzOworCXN0 cnVjdCBzY3BpX2NoYW4gKmNoYW5uZWxzOworCXN0cnVjdCBzY3BpX2R2ZnNfaW5mbyAqZHZmc1tN QVhfRFZGU19ET01BSU5TXTsKK307CisKKy8qCisgKiBUaGUgU0NQIGZpcm13YXJlIG9ubHkgZXhl Y3V0ZXMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLCBzbyBhbnkgYnVmZmVycworICogc2hhcmVkIHRo cm91Z2ggU0NQSSBzaG91bGQgaGF2ZSB0aGVpciBjb250ZW50cyBjb252ZXJ0ZWQgdG8gbGl0dGxl LWVuZGlhbgorICovCitzdHJ1Y3Qgc2NwaV9zaGFyZWRfbWVtIHsKKwlfX2xlMzIgY29tbWFuZDsK KwlfX2xlMzIgc3RhdHVzOworCXU4IHBheWxvYWRbMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg bGVnYWN5X3NjcGlfc2hhcmVkX21lbSB7CisJX19sZTMyIHN0YXR1czsKKwl1OCBwYXlsb2FkWzBd OworfSBfX3BhY2tlZDsKKworc3RydWN0IHNjcF9jYXBhYmlsaXRpZXMgeworCV9fbGUzMiBwcm90 b2NvbF92ZXJzaW9uOworCV9fbGUzMiBldmVudF92ZXJzaW9uOworCV9fbGUzMiBwbGF0Zm9ybV92 ZXJzaW9uOworCV9fbGUzMiBjb21tYW5kc1s0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjbGtf Z2V0X2luZm8geworCV9fbGUxNiBpZDsKKwlfX2xlMTYgZmxhZ3M7CisJX19sZTMyIG1pbl9yYXRl OworCV9fbGUzMiBtYXhfcmF0ZTsKKwl1OCBuYW1lWzIwXTsKK30gX19wYWNrZWQ7CisKK3N0cnVj dCBjbGtfZ2V0X3ZhbHVlIHsKKwlfX2xlMzIgcmF0ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBj bGtfc2V0X3ZhbHVlIHsKKwlfX2xlMTYgaWQ7CisJX19sZTE2IHJlc2VydmVkOworCV9fbGUzMiBy YXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGxlZ2FjeV9jbGtfc2V0X3ZhbHVlIHsKKwlfX2xl MzIgcmF0ZTsKKwlfX2xlMTYgaWQ7CisJX19sZTE2IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKwor c3RydWN0IGR2ZnNfaW5mbyB7CisJX19sZTMyIGhlYWRlcjsKKwlzdHJ1Y3QgeworCQlfX2xlMzIg ZnJlcTsKKwkJX19sZTMyIG1fdm9sdDsKKwl9IG9wcHNbTUFYX0RWRlNfT1BQU107Cit9IF9fcGFj a2VkOworCitzdHJ1Y3QgZHZmc19zZXQgeworCXU4IGRvbWFpbjsKKwl1OCBpbmRleDsKK30gX19w YWNrZWQ7CisKK3N0cnVjdCBzZW5zb3JfY2FwYWJpbGl0aWVzIHsKKwlfX2xlMTYgc2Vuc29yczsK K30gX19wYWNrZWQ7CisKK3N0cnVjdCBfc2NwaV9zZW5zb3JfaW5mbyB7CisJX19sZTE2IHNlbnNv cl9pZDsKKwl1OCBjbGFzczsKKwl1OCB0cmlnZ2VyX3R5cGU7CisJY2hhciBuYW1lWzIwXTsKK307 CisKK3N0cnVjdCBzZW5zb3JfdmFsdWUgeworCV9fbGUzMiBsb192YWw7CisJX19sZTMyIGhpX3Zh bDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBkZXZfcHN0YXRlX3NldCB7CisJX19sZTE2IGRldl9p ZDsKKwl1OCBwc3RhdGU7Cit9IF9fcGFja2VkOworCitzdGF0aWMgc3RydWN0IHNjcGlfZHJ2aW5m byAqc2NwaV9pbmZvOworCitzdGF0aWMgaW50IHNjcGlfbGludXhfZXJybWFwW1NDUElfRVJSX01B WF0gPSB7CisJLyogYmV0dGVyIHRoYW4gc3dpdGNoIGNhc2UgYXMgbG9uZyBhcyByZXR1cm4gdmFs dWUgaXMgY29udGludW91cyAqLworCTAsIC8qIFNDUElfU1VDQ0VTUyAqLworCS1FSU5WQUwsIC8q IFNDUElfRVJSX1BBUkFNICovCisJLUVOT0VYRUMsIC8qIFNDUElfRVJSX0FMSUdOICovCisJLUVN U0dTSVpFLCAvKiBTQ1BJX0VSUl9TSVpFICovCisJLUVJTlZBTCwgLyogU0NQSV9FUlJfSEFORExF UiAqLworCS1FQUNDRVMsIC8qIFNDUElfRVJSX0FDQ0VTUyAqLworCS1FUkFOR0UsIC8qIFNDUElf RVJSX1JBTkdFICovCisJLUVUSU1FRE9VVCwgLyogU0NQSV9FUlJfVElNRU9VVCAqLworCS1FTk9N RU0sIC8qIFNDUElfRVJSX05PTUVNICovCisJLUVJTlZBTCwgLyogU0NQSV9FUlJfUFdSU1RBVEUg Ki8KKwktRU9QTk9UU1VQUCwgLyogU0NQSV9FUlJfU1VQUE9SVCAqLworCS1FSU8sIC8qIFNDUElf RVJSX0RFVklDRSAqLworCS1FQlVTWSwgLyogU0NQSV9FUlJfQlVTWSAqLworfTsKKworc3RhdGlj IGlubGluZSBpbnQgc2NwaV90b19saW51eF9lcnJubyhpbnQgZXJybm8pCit7CisJaWYgKGVycm5v ID49IFNDUElfU1VDQ0VTUyAmJiBlcnJubyA8IFNDUElfRVJSX01BWCkKKwkJcmV0dXJuIHNjcGlf bGludXhfZXJybWFwW2Vycm5vXTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgc2Nw aV9wcm9jZXNzX2NtZChzdHJ1Y3Qgc2NwaV9jaGFuICpjaCwgdTMyIGNtZCkKK3sKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3BpX3hmZXIgKnQsICptYXRjaCA9IE5VTEw7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmY2gtPnJ4X2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgm Y2gtPnJ4X3BlbmRpbmcpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5yeF9sb2Nr LCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDb21tYW5kIHR5cGUgaXMgbm90IHJlcGxp ZWQgYnkgdGhlIFNDUCBGaXJtd2FyZSBpbiBsZWdhY3kgTW9kZQorCSAqIFdlIHNob3VsZCBjb25z aWRlciB0aGF0IGNvbW1hbmQgaXMgdGhlIGhlYWQgb2YgcGVuZGluZyBSWCBjb21tYW5kcworCSAq IGlmIHRoZSBsaXN0IGlzIG5vdCBlbXB0eS4gSW4gVFggb25seSBtb2RlLCB0aGUgbGlzdCB3b3Vs ZCBiZSBlbXB0eS4KKwkgKi8KKwlpZiAoc2NwaV9pbmZvLT5pc19sZWdhY3kpIHsKKwkJbWF0Y2gg PSBsaXN0X2ZpcnN0X2VudHJ5KCZjaC0+cnhfcGVuZGluZywgc3RydWN0IHNjcGlfeGZlciwKKwkJ CQkJIG5vZGUpOworCQlsaXN0X2RlbCgmbWF0Y2gtPm5vZGUpOworCX0gZWxzZSB7CisJCWxpc3Rf Zm9yX2VhY2hfZW50cnkodCwgJmNoLT5yeF9wZW5kaW5nLCBub2RlKQorCQkJaWYgKENNRF9YVFJB Q1RfVU5JUSh0LT5jbWQpID09IENNRF9YVFJBQ1RfVU5JUShjbWQpKSB7CisJCQkJbGlzdF9kZWwo JnQtPm5vZGUpOworCQkJCW1hdGNoID0gdDsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisJLyogY2hl Y2sgaWYgd2FpdF9mb3JfY29tcGxldGlvbiBpcyBpbiBwcm9ncmVzcyBvciB0aW1lZC1vdXQgKi8K KwlpZiAobWF0Y2ggJiYgIWNvbXBsZXRpb25fZG9uZSgmbWF0Y2gtPmRvbmUpKSB7CisJCXVuc2ln bmVkIGludCBsZW47CisKKwkJaWYgKHNjcGlfaW5mby0+aXNfbGVnYWN5KSB7CisJCQlzdHJ1Y3Qg bGVnYWN5X3NjcGlfc2hhcmVkX21lbSAqbWVtID0gY2gtPnJ4X3BheWxvYWQ7CisKKwkJCS8qIFJY IExlbmd0aCBpcyBub3QgcmVwbGllZCBieSB0aGUgbGVnYWN5IEZpcm13YXJlICovCisJCQlsZW4g PSBtYXRjaC0+cnhfbGVuOworCisJCQltYXRjaC0+c3RhdHVzID0gbGUzMl90b19jcHUobWVtLT5z dGF0dXMpOworCQkJbWVtY3B5X2Zyb21pbyhtYXRjaC0+cnhfYnVmLCBtZW0tPnBheWxvYWQsIGxl bik7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc2NwaV9zaGFyZWRfbWVtICptZW0gPSBjaC0+cnhf cGF5bG9hZDsKKworCQkJbGVuID0gbWluKG1hdGNoLT5yeF9sZW4sIENNRF9TSVpFKGNtZCkpOwor CisJCQltYXRjaC0+c3RhdHVzID0gbGUzMl90b19jcHUobWVtLT5zdGF0dXMpOworCQkJbWVtY3B5 X2Zyb21pbyhtYXRjaC0+cnhfYnVmLCBtZW0tPnBheWxvYWQsIGxlbik7CisJCX0KKworCQlpZiAo bWF0Y2gtPnJ4X2xlbiA+IGxlbikKKwkJCW1lbXNldChtYXRjaC0+cnhfYnVmICsgbGVuLCAwLCBt YXRjaC0+cnhfbGVuIC0gbGVuKTsKKwkJY29tcGxldGUoJm1hdGNoLT5kb25lKTsKKwl9CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPnJ4X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZv aWQgc2NwaV9oYW5kbGVfcmVtb3RlX21zZyhzdHJ1Y3QgbWJveF9jbGllbnQgKmMsIHZvaWQgKm1z ZykKK3sKKwlzdHJ1Y3Qgc2NwaV9jaGFuICpjaCA9IGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3Qgc2Nw aV9jaGFuLCBjbCk7CisJc3RydWN0IHNjcGlfc2hhcmVkX21lbSAqbWVtID0gY2gtPnJ4X3BheWxv YWQ7CisJdTMyIGNtZCA9IDA7CisKKwlpZiAoIXNjcGlfaW5mby0+aXNfbGVnYWN5KQorCQljbWQg PSBsZTMyX3RvX2NwdShtZW0tPmNvbW1hbmQpOworCisJc2NwaV9wcm9jZXNzX2NtZChjaCwgY21k KTsKK30KKworc3RhdGljIHZvaWQgc2NwaV90eF9wcmVwYXJlKHN0cnVjdCBtYm94X2NsaWVudCAq Yywgdm9pZCAqbXNnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNjcGlfeGZl ciAqdCA9IG1zZzsKKwlzdHJ1Y3Qgc2NwaV9jaGFuICpjaCA9IGNvbnRhaW5lcl9vZihjLCBzdHJ1 Y3Qgc2NwaV9jaGFuLCBjbCk7CisJc3RydWN0IHNjcGlfc2hhcmVkX21lbSAqbWVtID0gKHN0cnVj dCBzY3BpX3NoYXJlZF9tZW0gKiljaC0+dHhfcGF5bG9hZDsKKworCWlmICh0LT50eF9idWYpIHsK KwkJaWYgKHNjcGlfaW5mby0+aXNfbGVnYWN5KQorCQkJbWVtY3B5X3RvaW8oY2gtPnR4X3BheWxv YWQsIHQtPnR4X2J1ZiwgdC0+dHhfbGVuKTsKKwkJZWxzZQorCQkJbWVtY3B5X3RvaW8obWVtLT5w YXlsb2FkLCB0LT50eF9idWYsIHQtPnR4X2xlbik7CisJfQorCisJaWYgKHQtPnJ4X2J1Zikgewor CQlpZiAoISgrK2NoLT50b2tlbikpCisJCQkrK2NoLT50b2tlbjsKKwkJQUREX1NDUElfVE9LRU4o dC0+Y21kLCBjaC0+dG9rZW4pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPnJ4X2xvY2ssIGZs YWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmdC0+bm9kZSwgJmNoLT5yeF9wZW5kaW5nKTsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPnJ4X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAoIXNj cGlfaW5mby0+aXNfbGVnYWN5KQorCQltZW0tPmNvbW1hbmQgPSBjcHVfdG9fbGUzMih0LT5jbWQp OworfQorCitzdGF0aWMgc3RydWN0IHNjcGlfeGZlciAqZ2V0X3NjcGlfeGZlcihzdHJ1Y3Qgc2Nw aV9jaGFuICpjaCkKK3sKKwlzdHJ1Y3Qgc2NwaV94ZmVyICp0OworCisJbXV0ZXhfbG9jaygmY2gt PnhmZXJzX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZjaC0+eGZlcnNfbGlzdCkpIHsKKwkJbXV0 ZXhfdW5sb2NrKCZjaC0+eGZlcnNfbG9jayk7CisJCXJldHVybiBOVUxMOworCX0KKwl0ID0gbGlz dF9maXJzdF9lbnRyeSgmY2gtPnhmZXJzX2xpc3QsIHN0cnVjdCBzY3BpX3hmZXIsIG5vZGUpOwor CWxpc3RfZGVsKCZ0LT5ub2RlKTsKKwltdXRleF91bmxvY2soJmNoLT54ZmVyc19sb2NrKTsKKwly ZXR1cm4gdDsKK30KKworc3RhdGljIHZvaWQgcHV0X3NjcGlfeGZlcihzdHJ1Y3Qgc2NwaV94ZmVy ICp0LCBzdHJ1Y3Qgc2NwaV9jaGFuICpjaCkKK3sKKwltdXRleF9sb2NrKCZjaC0+eGZlcnNfbG9j ayk7CisJbGlzdF9hZGRfdGFpbCgmdC0+bm9kZSwgJmNoLT54ZmVyc19saXN0KTsKKwltdXRleF91 bmxvY2soJmNoLT54ZmVyc19sb2NrKTsKK30KKworc3RhdGljIGludCBzY3BpX3NlbmRfbWVzc2Fn ZSh1OCBpZHgsIHZvaWQgKnR4X2J1ZiwgdW5zaWduZWQgaW50IHR4X2xlbiwKKwkJCSAgICAgdm9p ZCAqcnhfYnVmLCB1bnNpZ25lZCBpbnQgcnhfbGVuKQoreworCWludCByZXQ7CisJdTggY2hhbjsK Kwl1OCBjbWQ7CisJc3RydWN0IHNjcGlfeGZlciAqbXNnOworCXN0cnVjdCBzY3BpX2NoYW4gKnNj cGlfY2hhbjsKKworCWlmIChzY3BpX2luZm8tPmNvbW1hbmRzW2lkeF0gPCAwKQorCQlyZXR1cm4g LUVPUE5PVFNVUFA7CisKKwljbWQgPSBzY3BpX2luZm8tPmNvbW1hbmRzW2lkeF07CisKKwlpZiAo c2NwaV9pbmZvLT5pc19sZWdhY3kpCisJCWNoYW4gPSB0ZXN0X2JpdChjbWQsIHNjcGlfaW5mby0+ Y21kX3ByaW9yaXR5KSA/IDEgOiAwOworCWVsc2UKKwkJY2hhbiA9IGF0b21pY19pbmNfcmV0dXJu KCZzY3BpX2luZm8tPm5leHRfY2hhbikgJQorCQkJc2NwaV9pbmZvLT5udW1fY2hhbnM7CisJc2Nw aV9jaGFuID0gc2NwaV9pbmZvLT5jaGFubmVscyArIGNoYW47CisKKwltc2cgPSBnZXRfc2NwaV94 ZmVyKHNjcGlfY2hhbik7CisJaWYgKCFtc2cpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHNj cGlfaW5mby0+aXNfbGVnYWN5KSB7CisJCW1zZy0+Y21kID0gUEFDS19MRUdBQ1lfU0NQSV9DTUQo Y21kLCB0eF9sZW4pOworCQltc2ctPnNsb3QgPSBtc2ctPmNtZDsKKwl9IGVsc2UgeworCQltc2ct PnNsb3QgPSBCSVQoU0NQSV9TTE9UKTsKKwkJbXNnLT5jbWQgPSBQQUNLX1NDUElfQ01EKGNtZCwg dHhfbGVuKTsKKwl9CisJbXNnLT50eF9idWYgPSB0eF9idWY7CisJbXNnLT50eF9sZW4gPSB0eF9s ZW47CisJbXNnLT5yeF9idWYgPSByeF9idWY7CisJbXNnLT5yeF9sZW4gPSByeF9sZW47CisJcmVp bml0X2NvbXBsZXRpb24oJm1zZy0+ZG9uZSk7CisKKwlyZXQgPSBtYm94X3NlbmRfbWVzc2FnZShz Y3BpX2NoYW4tPmNoYW4sIG1zZyk7CisJaWYgKHJldCA8IDAgfHwgIXJ4X2J1ZikKKwkJZ290byBv dXQ7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbXNnLT5kb25lLCBNQVhf UlhfVElNRU9VVCkpCisJCXJldCA9IC1FVElNRURPVVQ7CisJZWxzZQorCQkvKiBmaXJzdCBzdGF0 dXMgd29yZCAqLworCQlyZXQgPSBtc2ctPnN0YXR1czsKK291dDoKKwlpZiAocmV0IDwgMCAmJiBy eF9idWYpIC8qIHJlbW92ZSBlbnRyeSBmcm9tIHRoZSBsaXN0IGlmIHRpbWVkLW91dCAqLworCQlz Y3BpX3Byb2Nlc3NfY21kKHNjcGlfY2hhbiwgbXNnLT5jbWQpOworCisJcHV0X3NjcGlfeGZlciht c2csIHNjcGlfY2hhbik7CisJLyogU0NQSSBlcnJvciBjb2RlcyA+IDAsIHRyYW5zbGF0ZSB0aGVt IHRvIExpbnV4IHNjYWxlKi8KKwlyZXR1cm4gcmV0ID4gMCA/IHNjcGlfdG9fbGludXhfZXJybm8o cmV0KSA6IHJldDsKK30KKworc3RhdGljIHUzMiBzY3BpX2dldF92ZXJzaW9uKHZvaWQpCit7CisJ cmV0dXJuIHNjcGlfaW5mby0+cHJvdG9jb2xfdmVyc2lvbjsKK30KKworc3RhdGljIGludAorc2Nw aV9jbGtfZ2V0X3JhbmdlKHUxNiBjbGtfaWQsIHVuc2lnbmVkIGxvbmcgKm1pbiwgdW5zaWduZWQg bG9uZyAqbWF4KQoreworCWludCByZXQ7CisJc3RydWN0IGNsa19nZXRfaW5mbyBjbGs7CisJX19s ZTE2IGxlX2Nsa19pZCA9IGNwdV90b19sZTE2KGNsa19pZCk7CisKKwlyZXQgPSBzY3BpX3NlbmRf bWVzc2FnZShDTURfR0VUX0NMT0NLX0lORk8sICZsZV9jbGtfaWQsCisJCQkJc2l6ZW9mKGxlX2Ns a19pZCksICZjbGssIHNpemVvZihjbGspKTsKKwlpZiAoIXJldCkgeworCQkqbWluID0gbGUzMl90 b19jcHUoY2xrLm1pbl9yYXRlKTsKKwkJKm1heCA9IGxlMzJfdG9fY3B1KGNsay5tYXhfcmF0ZSk7 CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNjcGlfY2xrX2dl dF92YWwodTE2IGNsa19pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjbGtfZ2V0X3ZhbHVlIGNs azsKKwlfX2xlMTYgbGVfY2xrX2lkID0gY3B1X3RvX2xlMTYoY2xrX2lkKTsKKworCXJldCA9IHNj cGlfc2VuZF9tZXNzYWdlKENNRF9HRVRfQ0xPQ0tfVkFMVUUsICZsZV9jbGtfaWQsCisJCQkJc2l6 ZW9mKGxlX2Nsa19pZCksICZjbGssIHNpemVvZihjbGspKTsKKworCXJldHVybiByZXQgPyByZXQg OiBsZTMyX3RvX2NwdShjbGsucmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2NwaV9jbGtfc2V0X3Zh bCh1MTYgY2xrX2lkLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHN0YXQ7CisJc3RydWN0 IGNsa19zZXRfdmFsdWUgY2xrID0geworCQkuaWQgPSBjcHVfdG9fbGUxNihjbGtfaWQpLAorCQku cmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpCisJfTsKKworCXJldHVybiBzY3BpX3NlbmRfbWVzc2Fn ZShDTURfU0VUX0NMT0NLX1ZBTFVFLCAmY2xrLCBzaXplb2YoY2xrKSwKKwkJCQkgJnN0YXQsIHNp emVvZihzdGF0KSk7Cit9CisKK3N0YXRpYyBpbnQgbGVnYWN5X3NjcGlfY2xrX3NldF92YWwodTE2 IGNsa19pZCwgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBzdGF0OworCXN0cnVjdCBsZWdh Y3lfY2xrX3NldF92YWx1ZSBjbGsgPSB7CisJCS5pZCA9IGNwdV90b19sZTE2KGNsa19pZCksCisJ CS5yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSkKKwl9OworCisJcmV0dXJuIHNjcGlfc2VuZF9tZXNz YWdlKENNRF9TRVRfQ0xPQ0tfVkFMVUUsICZjbGssIHNpemVvZihjbGspLAorCQkJCSAmc3RhdCwg c2l6ZW9mKHN0YXQpKTsKK30KKworc3RhdGljIGludCBzY3BpX2R2ZnNfZ2V0X2lkeCh1OCBkb21h aW4pCit7CisJaW50IHJldDsKKwl1OCBkdmZzX2lkeDsKKworCXJldCA9IHNjcGlfc2VuZF9tZXNz YWdlKENNRF9HRVRfRFZGUywgJmRvbWFpbiwgc2l6ZW9mKGRvbWFpbiksCisJCQkJJmR2ZnNfaWR4 LCBzaXplb2YoZHZmc19pZHgpKTsKKworCXJldHVybiByZXQgPyByZXQgOiBkdmZzX2lkeDsKK30K Kworc3RhdGljIGludCBzY3BpX2R2ZnNfc2V0X2lkeCh1OCBkb21haW4sIHU4IGluZGV4KQorewor CWludCBzdGF0OworCXN0cnVjdCBkdmZzX3NldCBkdmZzID0ge2RvbWFpbiwgaW5kZXh9OworCisJ cmV0dXJuIHNjcGlfc2VuZF9tZXNzYWdlKENNRF9TRVRfRFZGUywgJmR2ZnMsIHNpemVvZihkdmZz KSwKKwkJCQkgJnN0YXQsIHNpemVvZihzdGF0KSk7Cit9CisKK3N0YXRpYyBpbnQgb3BwX2NtcF9m dW5jKGNvbnN0IHZvaWQgKm9wcDEsIGNvbnN0IHZvaWQgKm9wcDIpCit7CisJY29uc3Qgc3RydWN0 IHNjcGlfb3BwICp0MSA9IG9wcDEsICp0MiA9IG9wcDI7CisKKwlyZXR1cm4gdDEtPmZyZXEgLSB0 Mi0+ZnJlcTsKK30KKworc3RhdGljIHN0cnVjdCBzY3BpX2R2ZnNfaW5mbyAqc2NwaV9kdmZzX2dl dF9pbmZvKHU4IGRvbWFpbikKK3sKKwlzdHJ1Y3Qgc2NwaV9kdmZzX2luZm8gKmluZm87CisJc3Ry dWN0IHNjcGlfb3BwICpvcHA7CisJc3RydWN0IGR2ZnNfaW5mbyBidWY7CisJaW50IHJldCwgaTsK KworCWlmIChkb21haW4gPj0gTUFYX0RWRlNfRE9NQUlOUykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7CisKKwlpZiAoc2NwaV9pbmZvLT5kdmZzW2RvbWFpbl0pCS8qIGRhdGEgYWxyZWFkeSBw b3B1bGF0ZWQgKi8KKwkJcmV0dXJuIHNjcGlfaW5mby0+ZHZmc1tkb21haW5dOworCisJcmV0ID0g c2NwaV9zZW5kX21lc3NhZ2UoQ01EX0dFVF9EVkZTX0lORk8sICZkb21haW4sIHNpemVvZihkb21h aW4pLAorCQkJCSZidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFpbmZvKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWluZm8tPmNvdW50ID0g RFZGU19PUFBfQ09VTlQoYnVmLmhlYWRlcik7CisJaW5mby0+bGF0ZW5jeSA9IERWRlNfTEFURU5D WShidWYuaGVhZGVyKSAqIDEwMDA7IC8qIHVTIHRvIG5TICovCisKKwlpbmZvLT5vcHBzID0ga2Nh bGxvYyhpbmZvLT5jb3VudCwgc2l6ZW9mKCpvcHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8t Pm9wcHMpIHsKKwkJa2ZyZWUoaW5mbyk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0K KworCWZvciAoaSA9IDAsIG9wcCA9IGluZm8tPm9wcHM7IGkgPCBpbmZvLT5jb3VudDsgaSsrLCBv cHArKykgeworCQlvcHAtPmZyZXEgPSBsZTMyX3RvX2NwdShidWYub3Bwc1tpXS5mcmVxKTsKKwkJ b3BwLT5tX3ZvbHQgPSBsZTMyX3RvX2NwdShidWYub3Bwc1tpXS5tX3ZvbHQpOworCX0KKworCXNv cnQoaW5mby0+b3BwcywgaW5mby0+Y291bnQsIHNpemVvZigqb3BwKSwgb3BwX2NtcF9mdW5jLCBO VUxMKTsKKworCXNjcGlfaW5mby0+ZHZmc1tkb21haW5dID0gaW5mbzsKKwlyZXR1cm4gaW5mbzsK K30KKworc3RhdGljIGludCBzY3BpX2Rldl9kb21haW5faWQoc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgY2xrc3BlYzsKKworCWlmIChvZl9wYXJzZV9waGFu ZGxlX3dpdGhfYXJncyhkZXYtPm9mX25vZGUsICJjbG9ja3MiLCAiI2Nsb2NrLWNlbGxzIiwKKwkJ CQkgICAgICAgMCwgJmNsa3NwZWMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjbGtz cGVjLmFyZ3NbMF07Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NwaV9kdmZzX2luZm8gKnNjcGlfZHZm c19pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZG9tYWluID0gc2NwaV9kZXZfZG9t YWluX2lkKGRldik7CisKKwlpZiAoZG9tYWluIDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoZG9tYWlu KTsKKworCXJldHVybiBzY3BpX2R2ZnNfZ2V0X2luZm8oZG9tYWluKTsKK30KKworc3RhdGljIGlu dCBzY3BpX2R2ZnNfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IHNjcGlfZHZmc19pbmZvICppbmZvID0gc2NwaV9kdmZzX2luZm8oZGV2KTsKKwor CWlmIChJU19FUlIoaW5mbykpCisJCXJldHVybiBQVFJfRVJSKGluZm8pOworCisJaWYgKCFpbmZv LT5sYXRlbmN5KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpbmZvLT5sYXRlbmN5OworfQorCitz dGF0aWMgaW50IHNjcGlfZHZmc19hZGRfb3Bwc190b19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2 KQoreworCWludCBpZHgsIHJldDsKKwlzdHJ1Y3Qgc2NwaV9vcHAgKm9wcDsKKwlzdHJ1Y3Qgc2Nw aV9kdmZzX2luZm8gKmluZm8gPSBzY3BpX2R2ZnNfaW5mbyhkZXYpOworCisJaWYgKElTX0VSUihp bmZvKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CisKKwlpZiAoIWluZm8tPm9wcHMpCisJCXJl dHVybiAtRUlPOworCisJZm9yIChvcHAgPSBpbmZvLT5vcHBzLCBpZHggPSAwOyBpZHggPCBpbmZv LT5jb3VudDsgaWR4KyssIG9wcCsrKSB7CisJCXJldCA9IGRldl9wbV9vcHBfYWRkKGRldiwgb3Bw LT5mcmVxLCBvcHAtPm1fdm9sdCAqIDEwMDApOworCQlpZiAocmV0KSB7CisJCQlkZXZfd2Fybihk ZXYsICJmYWlsZWQgdG8gYWRkIG9wcCAldUh6ICV1bVZcbiIsCisJCQkJIG9wcC0+ZnJlcSwgb3Bw LT5tX3ZvbHQpOworCQkJd2hpbGUgKGlkeC0tID4gMCkKKwkJCQlkZXZfcG1fb3BwX3JlbW92ZShk ZXYsICgtLW9wcCktPmZyZXEpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBzY3BpX3NlbnNvcl9nZXRfY2FwYWJpbGl0eSh1MTYgKnNlbnNvcnMp Cit7CisJc3RydWN0IHNlbnNvcl9jYXBhYmlsaXRpZXMgY2FwX2J1ZjsKKwlpbnQgcmV0OworCisJ cmV0ID0gc2NwaV9zZW5kX21lc3NhZ2UoQ01EX1NFTlNPUl9DQVBBQklMSVRJRVMsIE5VTEwsIDAs ICZjYXBfYnVmLAorCQkJCXNpemVvZihjYXBfYnVmKSk7CisJaWYgKCFyZXQpCisJCSpzZW5zb3Jz ID0gbGUxNl90b19jcHUoY2FwX2J1Zi5zZW5zb3JzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgc2NwaV9zZW5zb3JfZ2V0X2luZm8odTE2IHNlbnNvcl9pZCwgc3RydWN0IHNjcGlf c2Vuc29yX2luZm8gKmluZm8pCit7CisJX19sZTE2IGlkID0gY3B1X3RvX2xlMTYoc2Vuc29yX2lk KTsKKwlzdHJ1Y3QgX3NjcGlfc2Vuc29yX2luZm8gX2luZm87CisJaW50IHJldDsKKworCXJldCA9 IHNjcGlfc2VuZF9tZXNzYWdlKENNRF9TRU5TT1JfSU5GTywgJmlkLCBzaXplb2YoaWQpLAorCQkJ CSZfaW5mbywgc2l6ZW9mKF9pbmZvKSk7CisJaWYgKCFyZXQpIHsKKwkJbWVtY3B5KGluZm8sICZf aW5mbywgc2l6ZW9mKCppbmZvKSk7CisJCWluZm8tPnNlbnNvcl9pZCA9IGxlMTZfdG9fY3B1KF9p bmZvLnNlbnNvcl9pZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzY3Bp X3NlbnNvcl9nZXRfdmFsdWUodTE2IHNlbnNvciwgdTY0ICp2YWwpCit7CisJX19sZTE2IGlkID0g Y3B1X3RvX2xlMTYoc2Vuc29yKTsKKwlzdHJ1Y3Qgc2Vuc29yX3ZhbHVlIGJ1ZjsKKwlpbnQgcmV0 OworCisJcmV0ID0gc2NwaV9zZW5kX21lc3NhZ2UoQ01EX1NFTlNPUl9WQUxVRSwgJmlkLCBzaXpl b2YoaWQpLAorCQkJCSZidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJaWYgKHNjcGlfaW5mby0+aXNfbGVnYWN5KQorCQkvKiBvbmx5IDMyLWJpdHMgc3VwcG9y dGVkLCBoaV92YWwgY2FuIGJlIGp1bmsgKi8KKwkJKnZhbCA9IGxlMzJfdG9fY3B1KGJ1Zi5sb192 YWwpOworCWVsc2UKKwkJKnZhbCA9ICh1NjQpbGUzMl90b19jcHUoYnVmLmhpX3ZhbCkgPDwgMzIg fAorCQkJbGUzMl90b19jcHUoYnVmLmxvX3ZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBzY3BpX2RldmljZV9nZXRfcG93ZXJfc3RhdGUodTE2IGRldl9pZCkKK3sKKwlpbnQgcmV0 OworCXU4IHBzdGF0ZTsKKwlfX2xlMTYgaWQgPSBjcHVfdG9fbGUxNihkZXZfaWQpOworCisJcmV0 ID0gc2NwaV9zZW5kX21lc3NhZ2UoQ01EX0dFVF9ERVZJQ0VfUFdSX1NUQVRFLCAmaWQsCisJCQkJ c2l6ZW9mKGlkKSwgJnBzdGF0ZSwgc2l6ZW9mKHBzdGF0ZSkpOworCXJldHVybiByZXQgPyByZXQg OiBwc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgc2NwaV9kZXZpY2Vfc2V0X3Bvd2VyX3N0YXRlKHUx NiBkZXZfaWQsIHU4IHBzdGF0ZSkKK3sKKwlpbnQgc3RhdDsKKwlzdHJ1Y3QgZGV2X3BzdGF0ZV9z ZXQgZGV2X3NldCA9IHsKKwkJLmRldl9pZCA9IGNwdV90b19sZTE2KGRldl9pZCksCisJCS5wc3Rh dGUgPSBwc3RhdGUsCisJfTsKKworCXJldHVybiBzY3BpX3NlbmRfbWVzc2FnZShDTURfU0VUX0RF VklDRV9QV1JfU1RBVEUsICZkZXZfc2V0LAorCQkJCSBzaXplb2YoZGV2X3NldCksICZzdGF0LCBz aXplb2Yoc3RhdCkpOworfQorCitzdGF0aWMgc3RydWN0IHNjcGlfb3BzIHNjcGlfb3BzID0gewor CS5nZXRfdmVyc2lvbiA9IHNjcGlfZ2V0X3ZlcnNpb24sCisJLmNsa19nZXRfcmFuZ2UgPSBzY3Bp X2Nsa19nZXRfcmFuZ2UsCisJLmNsa19nZXRfdmFsID0gc2NwaV9jbGtfZ2V0X3ZhbCwKKwkuY2xr X3NldF92YWwgPSBzY3BpX2Nsa19zZXRfdmFsLAorCS5kdmZzX2dldF9pZHggPSBzY3BpX2R2ZnNf Z2V0X2lkeCwKKwkuZHZmc19zZXRfaWR4ID0gc2NwaV9kdmZzX3NldF9pZHgsCisJLmR2ZnNfZ2V0 X2luZm8gPSBzY3BpX2R2ZnNfZ2V0X2luZm8sCisJLmRldmljZV9kb21haW5faWQgPSBzY3BpX2Rl dl9kb21haW5faWQsCisJLmdldF90cmFuc2l0aW9uX2xhdGVuY3kgPSBzY3BpX2R2ZnNfZ2V0X3Ry YW5zaXRpb25fbGF0ZW5jeSwKKwkuYWRkX29wcHNfdG9fZGV2aWNlID0gc2NwaV9kdmZzX2FkZF9v cHBzX3RvX2RldmljZSwKKwkuc2Vuc29yX2dldF9jYXBhYmlsaXR5ID0gc2NwaV9zZW5zb3JfZ2V0 X2NhcGFiaWxpdHksCisJLnNlbnNvcl9nZXRfaW5mbyA9IHNjcGlfc2Vuc29yX2dldF9pbmZvLAor CS5zZW5zb3JfZ2V0X3ZhbHVlID0gc2NwaV9zZW5zb3JfZ2V0X3ZhbHVlLAorCS5kZXZpY2VfZ2V0 X3Bvd2VyX3N0YXRlID0gc2NwaV9kZXZpY2VfZ2V0X3Bvd2VyX3N0YXRlLAorCS5kZXZpY2Vfc2V0 X3Bvd2VyX3N0YXRlID0gc2NwaV9kZXZpY2Vfc2V0X3Bvd2VyX3N0YXRlLAorfTsKKworc3RydWN0 IHNjcGlfb3BzICpnZXRfc2NwaV9vcHModm9pZCkKK3sKKwlyZXR1cm4gc2NwaV9pbmZvID8gc2Nw aV9pbmZvLT5zY3BpX29wcyA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRfc2NwaV9v cHMpOworCitzdGF0aWMgaW50IHNjcGlfaW5pdF92ZXJzaW9ucyhzdHJ1Y3Qgc2NwaV9kcnZpbmZv ICppbmZvKQoreworCWludCByZXQ7CisJc3RydWN0IHNjcF9jYXBhYmlsaXRpZXMgY2FwczsKKwor CXJldCA9IHNjcGlfc2VuZF9tZXNzYWdlKENNRF9TQ1BJX0NBUEFCSUxJVElFUywgTlVMTCwgMCwK KwkJCQkmY2Fwcywgc2l6ZW9mKGNhcHMpKTsKKwlpZiAoIXJldCkgeworCQlpbmZvLT5wcm90b2Nv bF92ZXJzaW9uID0gbGUzMl90b19jcHUoY2Fwcy5wcm90b2NvbF92ZXJzaW9uKTsKKwkJaW5mby0+ ZmlybXdhcmVfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGNhcHMucGxhdGZvcm1fdmVyc2lvbik7CisJ fQorCS8qIElnbm9yZSBlcnJvciBpZiBub3QgaW1wbGVtZW50ZWQgKi8KKwlpZiAoc2NwaV9pbmZv LT5pc19sZWdhY3kgJiYgcmV0ID09IC1FT1BOT1RTVVBQKQorCQlyZXR1cm4gMDsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByb3RvY29sX3ZlcnNpb25fc2hvdyhzdHJ1Y3Qg ZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQoreworCXN0cnVjdCBzY3BpX2RydmluZm8gKnNjcGlfaW5mbyA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsCisJCSAgICAgICBQ Uk9UT0NPTF9SRVZfTUFKT1Ioc2NwaV9pbmZvLT5wcm90b2NvbF92ZXJzaW9uKSwKKwkJICAgICAg IFBST1RPQ09MX1JFVl9NSU5PUihzY3BpX2luZm8tPnByb3RvY29sX3ZlcnNpb24pKTsKK30KK3N0 YXRpYyBERVZJQ0VfQVRUUl9STyhwcm90b2NvbF92ZXJzaW9uKTsKKworc3RhdGljIHNzaXplX3Qg ZmlybXdhcmVfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNjcGlfZHJ2 aW5mbyAqc2NwaV9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50 ZihidWYsICIlZC4lZC4lZFxuIiwKKwkJICAgICAgIEZXX1JFVl9NQUpPUihzY3BpX2luZm8tPmZp cm13YXJlX3ZlcnNpb24pLAorCQkgICAgICAgRldfUkVWX01JTk9SKHNjcGlfaW5mby0+ZmlybXdh cmVfdmVyc2lvbiksCisJCSAgICAgICBGV19SRVZfUEFUQ0goc2NwaV9pbmZvLT5maXJtd2FyZV92 ZXJzaW9uKSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUk8oZmlybXdhcmVfdmVyc2lvbik7CisK K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp2ZXJzaW9uc19hdHRyc1tdID0geworCSZkZXZfYXR0 cl9maXJtd2FyZV92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX3Byb3RvY29sX3ZlcnNpb24uYXR0 ciwKKwlOVUxMLAorfTsKK0FUVFJJQlVURV9HUk9VUFModmVyc2lvbnMpOworCitzdGF0aWMgdm9p ZAorc2NwaV9mcmVlX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjcGlfY2hh biAqcGNoYW4sIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3Vu dCAmJiBwY2hhbi0+Y2hhbjsgaSsrLCBwY2hhbisrKSB7CisJCW1ib3hfZnJlZV9jaGFubmVsKHBj aGFuLT5jaGFuKTsKKwkJZGV2bV9rZnJlZShkZXYsIHBjaGFuLT54ZmVycyk7CisJCWRldm1faW91 bm1hcChkZXYsIHBjaGFuLT5yeF9wYXlsb2FkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2NwaV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBzY3BpX2RydmluZm8gKmluZm8gPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNjcGlfaW5mbyA9IE5VTEw7IC8qIHN0b3Ag ZXhwb3J0aW5nIFNDUEkgb3BzIHRocm91Z2ggZ2V0X3NjcGlfb3BzICovCisKKwlvZl9wbGF0Zm9y bV9kZXBvcHVsYXRlKGRldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwcygmZGV2LT5rb2JqLCB2ZXJz aW9uc19ncm91cHMpOworCXNjcGlfZnJlZV9jaGFubmVscyhkZXYsIGluZm8tPmNoYW5uZWxzLCBp bmZvLT5udW1fY2hhbnMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJ Zm9yIChpID0gMDsgaSA8IE1BWF9EVkZTX0RPTUFJTlMgJiYgaW5mby0+ZHZmc1tpXTsgaSsrKSB7 CisJCWtmcmVlKGluZm8tPmR2ZnNbaV0tPm9wcHMpOworCQlrZnJlZShpbmZvLT5kdmZzW2ldKTsK Kwl9CisJZGV2bV9rZnJlZShkZXYsIGluZm8tPmNoYW5uZWxzKTsKKwlkZXZtX2tmcmVlKGRldiwg aW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfU0NQSV9YRkVSUwkJMTAKK3N0 YXRpYyBpbnQgc2NwaV9hbGxvY194ZmVyX2xpc3Qoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg c2NwaV9jaGFuICpjaCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2NwaV94ZmVyICp4ZmVyczsKKwor CXhmZXJzID0gZGV2bV9remFsbG9jKGRldiwgTUFYX1NDUElfWEZFUlMgKiBzaXplb2YoKnhmZXJz KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF4ZmVycykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaC0+ eGZlcnMgPSB4ZmVyczsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NDUElfWEZFUlM7IGkrKywgeGZl cnMrKykgeworCQlpbml0X2NvbXBsZXRpb24oJnhmZXJzLT5kb25lKTsKKwkJbGlzdF9hZGRfdGFp bCgmeGZlcnMtPm5vZGUsICZjaC0+eGZlcnNfbGlzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGxlZ2FjeV9zY3BpX29mX21hdGNoW10g PSB7CisJey5jb21wYXRpYmxlID0gImFybSxzY3BpLXByZS0xLjAifSwKKwl7fSwKK307CisKK3N0 YXRpYyBpbnQgc2NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlu dCBjb3VudCwgaWR4LCByZXQ7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3Qgc2NwaV9j aGFuICpzY3BpX2NoYW47CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCisJc2NwaV9pbmZvID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpzY3BpX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjcGlf aW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAob2ZfbWF0Y2hfZGV2aWNlKGxlZ2FjeV9z Y3BpX29mX21hdGNoLCAmcGRldi0+ZGV2KSkKKwkJc2NwaV9pbmZvLT5pc19sZWdhY3kgPSB0cnVl OworCisJY291bnQgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhucCwgIm1ib3hlcyIsICIj bWJveC1jZWxscyIpOworCWlmIChjb3VudCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJubyBtYm94 ZXMgcHJvcGVydHkgaW4gJyVwT0YnXG4iLCBucCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwor CXNjcGlfY2hhbiA9IGRldm1fa2NhbGxvYyhkZXYsIGNvdW50LCBzaXplb2YoKnNjcGlfY2hhbiks IEdGUF9LRVJORUwpOworCWlmICghc2NwaV9jaGFuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZv ciAoaWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrKSB7CisJCXJlc291cmNlX3NpemVfdCBzaXpl OworCQlzdHJ1Y3Qgc2NwaV9jaGFuICpwY2hhbiA9IHNjcGlfY2hhbiArIGlkeDsKKwkJc3RydWN0 IG1ib3hfY2xpZW50ICpjbCA9ICZwY2hhbi0+Y2w7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2ht ZW0gPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAic2htZW0iLCBpZHgpOworCisJCXJldCA9IG9mX2Fk ZHJlc3NfdG9fcmVzb3VyY2Uoc2htZW0sIDAsICZyZXMpOworCQlvZl9ub2RlX3B1dChzaG1lbSk7 CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBTQ1BJIHBheWxv YWQgbWVtIHJlc291cmNlXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJc2l6ZSA9IHJlc291 cmNlX3NpemUoJnJlcyk7CisJCXBjaGFuLT5yeF9wYXlsb2FkID0gZGV2bV9pb3JlbWFwKGRldiwg cmVzLnN0YXJ0LCBzaXplKTsKKwkJaWYgKCFwY2hhbi0+cnhfcGF5bG9hZCkgeworCQkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gaW9yZW1hcCBTQ1BJIHBheWxvYWRcbiIpOworCQkJcmV0ID0gLUVB RERSTk9UQVZBSUw7CisJCQlnb3RvIGVycjsKKwkJfQorCQlwY2hhbi0+dHhfcGF5bG9hZCA9IHBj aGFuLT5yeF9wYXlsb2FkICsgKHNpemUgPj4gMSk7CisKKwkJY2wtPmRldiA9IGRldjsKKwkJY2wt PnJ4X2NhbGxiYWNrID0gc2NwaV9oYW5kbGVfcmVtb3RlX21zZzsKKwkJY2wtPnR4X3ByZXBhcmUg PSBzY3BpX3R4X3ByZXBhcmU7CisJCWNsLT50eF9ibG9jayA9IHRydWU7CisJCWNsLT50eF90b3V0 ID0gMjA7CisJCWNsLT5rbm93c190eGRvbmUgPSBmYWxzZTsgLyogY29udHJvbGxlciBjYW4ndCBh Y2sgKi8KKworCQlJTklUX0xJU1RfSEVBRCgmcGNoYW4tPnJ4X3BlbmRpbmcpOworCQlJTklUX0xJ U1RfSEVBRCgmcGNoYW4tPnhmZXJzX2xpc3QpOworCQlzcGluX2xvY2tfaW5pdCgmcGNoYW4tPnJ4 X2xvY2spOworCQltdXRleF9pbml0KCZwY2hhbi0+eGZlcnNfbG9jayk7CisKKwkJcmV0ID0gc2Nw aV9hbGxvY194ZmVyX2xpc3QoZGV2LCBwY2hhbik7CisJCWlmICghcmV0KSB7CisJCQlwY2hhbi0+ Y2hhbiA9IG1ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBpZHgpOworCQkJaWYgKCFJU19FUlIocGNo YW4tPmNoYW4pKQorCQkJCWNvbnRpbnVlOworCQkJcmV0ID0gUFRSX0VSUihwY2hhbi0+Y2hhbik7 CisJCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gZ2V0IGNoYW5uZWwlZCBlcnIgJWRcbiIsCisJCQkJCWlkeCwgcmV0KTsKKwkJfQorZXJyOgor CQlzY3BpX2ZyZWVfY2hhbm5lbHMoZGV2LCBzY3BpX2NoYW4sIGlkeCk7CisJCXNjcGlfaW5mbyA9 IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJc2NwaV9pbmZvLT5jaGFubmVscyA9IHNjcGlf Y2hhbjsKKwlzY3BpX2luZm8tPm51bV9jaGFucyA9IGNvdW50OworCXNjcGlfaW5mby0+Y29tbWFu ZHMgPSBzY3BpX3N0ZF9jb21tYW5kczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNj cGlfaW5mbyk7CisKKwlpZiAoc2NwaV9pbmZvLT5pc19sZWdhY3kpIHsKKwkJLyogUmVwbGFjZSB3 aXRoIGxlZ2FjeSB2YXJpYW50cyAqLworCQlzY3BpX29wcy5jbGtfc2V0X3ZhbCA9IGxlZ2FjeV9z Y3BpX2Nsa19zZXRfdmFsOworCQlzY3BpX2luZm8tPmNvbW1hbmRzID0gc2NwaV9sZWdhY3lfY29t bWFuZHM7CisKKwkJLyogRmlsbCBwcmlvcml0eSBiaXRtYXAgKi8KKwkJZm9yIChpZHggPSAwOyBp ZHggPCBBUlJBWV9TSVpFKGxlZ2FjeV9ocHJpb3JpdHlfY21kcyk7IGlkeCsrKQorCQkJc2V0X2Jp dChsZWdhY3lfaHByaW9yaXR5X2NtZHNbaWR4XSwKKwkJCQlzY3BpX2luZm8tPmNtZF9wcmlvcml0 eSk7CisJfQorCisJcmV0ID0gc2NwaV9pbml0X3ZlcnNpb25zKHNjcGlfaW5mbyk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldiwgImluY29ycmVjdCBvciBubyBTQ1AgZmlybXdhcmUgZm91bmRc biIpOworCQlzY3BpX3JlbW92ZShwZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlfZGV2X2lu Zm8oZGV2LCAiU0NQIFByb3RvY29sICVkLiVkIEZpcm13YXJlICVkLiVkLiVkIHZlcnNpb25cbiIs CisJCSAgUFJPVE9DT0xfUkVWX01BSk9SKHNjcGlfaW5mby0+cHJvdG9jb2xfdmVyc2lvbiksCisJ CSAgUFJPVE9DT0xfUkVWX01JTk9SKHNjcGlfaW5mby0+cHJvdG9jb2xfdmVyc2lvbiksCisJCSAg RldfUkVWX01BSk9SKHNjcGlfaW5mby0+ZmlybXdhcmVfdmVyc2lvbiksCisJCSAgRldfUkVWX01J Tk9SKHNjcGlfaW5mby0+ZmlybXdhcmVfdmVyc2lvbiksCisJCSAgRldfUkVWX1BBVENIKHNjcGlf aW5mby0+ZmlybXdhcmVfdmVyc2lvbikpOworCXNjcGlfaW5mby0+c2NwaV9vcHMgPSAmc2NwaV9v cHM7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXBzKCZkZXYtPmtvYmosIHZlcnNpb25zX2dy b3Vwcyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gY3JlYXRlIHN5c2Zz IHZlcnNpb24gZ3JvdXBcbiIpOworCisJcmV0dXJuIG9mX3BsYXRmb3JtX3BvcHVsYXRlKGRldi0+ b2Zfbm9kZSwgTlVMTCwgTlVMTCwgZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgc2NwaV9vZl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJhcm0sc2NwaSJ9 LAorCXsuY29tcGF0aWJsZSA9ICJhcm0sc2NwaS1wcmUtMS4wIn0sCisJe30sCit9OworCitNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBzY3BpX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgc2NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2Nw aV9wcm90b2NvbCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHNjcGlfb2ZfbWF0Y2gsCisJfSwKKwku cHJvYmUgPSBzY3BpX3Byb2JlLAorCS5yZW1vdmUgPSBzY3BpX3JlbW92ZSwKK307Cittb2R1bGVf cGxhdGZvcm1fZHJpdmVyKHNjcGlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiU3VkZWVwIEhv bGxhIDxzdWRlZXAuaG9sbGFAYXJtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQVJNIFND UEkgbWFpbGJveCBwcm90b2NvbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9jcHVmcmVxL3NjcGlfcHJvdG9jb2wuaCBiL3hlbi9h cmNoL2FybS9jcHVmcmVxL3NjcGlfcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4zMjdkNjU2Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL2NwdWZy ZXEvc2NwaV9wcm90b2NvbC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBTQ1BJIE1lc3NhZ2Ug UHJvdG9jb2wgZHJpdmVyIGhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBUk0gTHRk LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX SVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKworc3RydWN0IHNjcGlfb3BwIHsKKwl1MzIgZnJlcTsKKwl1MzIgbV92b2x0 OworfSBfX3BhY2tlZDsKKworc3RydWN0IHNjcGlfZHZmc19pbmZvIHsKKwl1bnNpZ25lZCBpbnQg Y291bnQ7CisJdW5zaWduZWQgaW50IGxhdGVuY3k7IC8qIGluIG5hbm9zZWNvbmRzICovCisJc3Ry dWN0IHNjcGlfb3BwICpvcHBzOworfTsKKworZW51bSBzY3BpX3NlbnNvcl9jbGFzcyB7CisJVEVN UEVSQVRVUkUsCisJVk9MVEFHRSwKKwlDVVJSRU5ULAorCVBPV0VSLAorCUVORVJHWSwKK307CisK K3N0cnVjdCBzY3BpX3NlbnNvcl9pbmZvIHsKKwl1MTYgc2Vuc29yX2lkOworCXU4IGNsYXNzOwor CXU4IHRyaWdnZXJfdHlwZTsKKwljaGFyIG5hbWVbMjBdOworfSBfX3BhY2tlZDsKKworLyoqCisg KiBzdHJ1Y3Qgc2NwaV9vcHMgLSByZXByZXNlbnRzIHRoZSB2YXJpb3VzIG9wZXJhdGlvbnMgcHJv dmlkZWQKKyAqCWJ5IFNDUCB0aHJvdWdoIFNDUEkgbWVzc2FnZSBwcm90b2NvbAorICogQGdldF92 ZXJzaW9uOiByZXR1cm5zIHRoZSBtYWpvciBhbmQgbWlub3IgcmV2aXNpb24gb24gdGhlIFNDUEkK KyAqCW1lc3NhZ2UgcHJvdG9jb2wKKyAqIEBjbGtfZ2V0X3JhbmdlOiBnZXRzIGNsb2NrIHJhbmdl IGxpbWl0KG1pbiAtIG1heCBpbiBIeikKKyAqIEBjbGtfZ2V0X3ZhbDogZ2V0cyBjbG9jayB2YWx1 ZShpbiBIeikKKyAqIEBjbGtfc2V0X3ZhbDogc2V0cyB0aGUgY2xvY2sgdmFsdWUsIHNldHRpbmcg dG8gMCB3aWxsIGRpc2FibGUgdGhlCisgKgljbG9jayAoaWYgc3VwcG9ydGVkKQorICogQGR2ZnNf Z2V0X2lkeDogZ2V0cyB0aGUgT3BlcmF0aW5nIFBvaW50IG9mIHRoZSBnaXZlbiBwb3dlciBkb21h aW4uCisgKglPUFAgaXMgYW4gaW5kZXggdG8gdGhlIGxpc3QgcmV0dXJuIGJ5IEBkdmZzX2dldF9p bmZvCisgKiBAZHZmc19zZXRfaWR4OiBzZXRzIHRoZSBPcGVyYXRpbmcgUG9pbnQgb2YgdGhlIGdp dmVuIHBvd2VyIGRvbWFpbi4KKyAqCU9QUCBpcyBhbiBpbmRleCB0byB0aGUgbGlzdCByZXR1cm4g YnkgQGR2ZnNfZ2V0X2luZm8KKyAqIEBkdmZzX2dldF9pbmZvOiByZXR1cm5zIHRoZSBEVkZTIGNh cGFiaWxpdGllcyBvZiB0aGUgZ2l2ZW4gcG93ZXIKKyAqCWRvbWFpbi4gSXQgaW5jbHVkZXMgdGhl IE9QUCBsaXN0IGFuZCB0aGUgbGF0ZW5jeSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3Qgc2NwaV9v cHMgeworCXUzMiAoKmdldF92ZXJzaW9uKSh2b2lkKTsKKwlpbnQgKCpjbGtfZ2V0X3JhbmdlKSh1 MTYsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKKwl1bnNpZ25lZCBsb25nICgq Y2xrX2dldF92YWwpKHUxNik7CisJaW50ICgqY2xrX3NldF92YWwpKHUxNiwgdW5zaWduZWQgbG9u Zyk7CisJaW50ICgqZHZmc19nZXRfaWR4KSh1OCk7CisJaW50ICgqZHZmc19zZXRfaWR4KSh1OCwg dTgpOworCXN0cnVjdCBzY3BpX2R2ZnNfaW5mbyAqKCpkdmZzX2dldF9pbmZvKSh1OCk7CisJaW50 ICgqZGV2aWNlX2RvbWFpbl9pZCkoc3RydWN0IGRldmljZSAqKTsKKwlpbnQgKCpnZXRfdHJhbnNp dGlvbl9sYXRlbmN5KShzdHJ1Y3QgZGV2aWNlICopOworCWludCAoKmFkZF9vcHBzX3RvX2Rldmlj ZSkoc3RydWN0IGRldmljZSAqKTsKKwlpbnQgKCpzZW5zb3JfZ2V0X2NhcGFiaWxpdHkpKHUxNiAq c2Vuc29ycyk7CisJaW50ICgqc2Vuc29yX2dldF9pbmZvKSh1MTYgc2Vuc29yX2lkLCBzdHJ1Y3Qg c2NwaV9zZW5zb3JfaW5mbyAqKTsKKwlpbnQgKCpzZW5zb3JfZ2V0X3ZhbHVlKSh1MTYsIHU2NCAq KTsKKwlpbnQgKCpkZXZpY2VfZ2V0X3Bvd2VyX3N0YXRlKSh1MTYpOworCWludCAoKmRldmljZV9z ZXRfcG93ZXJfc3RhdGUpKHUxNiwgdTgpOworfTsKKworI2lmIElTX1JFQUNIQUJMRShDT05GSUdf QVJNX1NDUElfUFJPVE9DT0wpCitzdHJ1Y3Qgc2NwaV9vcHMgKmdldF9zY3BpX29wcyh2b2lkKTsK KyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3BpX29wcyAqZ2V0X3NjcGlfb3BzKHZvaWQp IHsgcmV0dXJuIE5VTEw7IH0KKyNlbmRpZgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK