From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 18/29] xl: split out pci related code Date: Fri, 24 Feb 2017 16:13:03 +0000 Message-ID: <20170224161314.22154-19-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIY2-0006pE-Ub for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:47 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDI0NyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMveGwveGxfcGNp LmMgICAgIHwgMjc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI3OSBpbnNlcnRpb25zKCspLCAyNDggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMveGwveGxfcGNpLmMKCmRpZmYgLS1naXQgYS90 b29scy94bC9NYWtlZmlsZSBiL3Rvb2xzL3hsL01ha2VmaWxlCmluZGV4IDhhYTI5NGQ1YTAuLjBh ZjFlOTJiNjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL01ha2VmaWxlCisrKyBiL3Rvb2xzL3hsL01h a2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBAIENGTEFHU19YTCArPSAtV3NoYWRvdwogWExfT0JKUyA9 IHhsLm8geGxfY21kaW1wbC5vIHhsX2NtZHRhYmxlLm8geGxfc3hwLm8geGxfdXRpbHMubwogWExf T0JKUyArPSB4bF90bWVtLm8geGxfcGFyc2UubyB4bF9jcHVwb29sLm8geGxfZmxhc2subwogWExf T0JKUyArPSB4bF92dHBtLm8geGxfYmxvY2subyB4bF9uaWMubyB4bF91c2IubwotWExfT0JKUyAr PSB4bF9zY2hlZC5vCitYTF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNpLm8KIAogJChYTF9PQkpT KTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cpCiAkKFhMX09CSlMpOiBDRkxBR1Mg Kz0gJChDRkxBR1NfWEwpCmRpZmYgLS1naXQgYS90b29scy94bC94bF9jbWRpbXBsLmMgYi90b29s cy94bC94bF9jbWRpbXBsLmMKaW5kZXggN2Q2ZGUzOTU3ZS4uYjMyMjMzZTk1ZSAxMDA2NDQKLS0t IGEvdG9vbHMveGwveGxfY21kaW1wbC5jCisrKyBiL3Rvb2xzL3hsL3hsX2NtZGltcGwuYwpAQCAt MTM0NywyNTMgKzEzNDcsNiBAQCBpbnQgbWFpbl92bmN2aWV3ZXIoaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaWxpc3Qo dWludDMyX3QgZG9taWQpCi17Ci0gICAgbGlieGxfZGV2aWNlX3BjaSAqcGNpZGV2czsKLSAgICBp bnQgbnVtLCBpOwotCi0gICAgcGNpZGV2cyA9IGxpYnhsX2RldmljZV9wY2lfbGlzdChjdHgsIGRv bWlkLCAmbnVtKTsKLSAgICBpZiAocGNpZGV2cyA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0g ICAgcHJpbnRmKCJWZGV2IERldmljZVxuIik7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsr KSB7Ci0gICAgICAgIHByaW50ZigiJTAyeC4lMDF4ICUwNHg6JTAyeDolMDJ4LiUwMXhcbiIsCi0g ICAgICAgICAgICAgICAocGNpZGV2c1tpXS52ZGV2Zm4gPj4gMykgJiAweDFmLCBwY2lkZXZzW2ld LnZkZXZmbiAmIDB4NywKLSAgICAgICAgICAgICAgIHBjaWRldnNbaV0uZG9tYWluLCBwY2lkZXZz W2ldLmJ1cywgcGNpZGV2c1tpXS5kZXYsIHBjaWRldnNbaV0uZnVuYyk7Ci0gICAgICAgIGxpYnhs X2RldmljZV9wY2lfZGlzcG9zZSgmcGNpZGV2c1tpXSk7Ci0gICAgfQotICAgIGZyZWUocGNpZGV2 cyk7Ci19Ci0KLWludCBtYWluX3BjaWxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAg IHVpbnQzMl90IGRvbWlkOwotICAgIGludCBvcHQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQo b3B0LCAiIiwgTlVMTCwgInBjaS1saXN0IiwgMSkgewotICAgICAgICAvKiBObyBvcHRpb25zICov Ci0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKLQotICAg IHBjaWxpc3QoZG9taWQpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjaWRldGFj aCh1aW50MzJfdCBkb21pZCwgY29uc3QgY2hhciAqYmRmLCBpbnQgZm9yY2UpCi17Ci0gICAgbGli eGxfZGV2aWNlX3BjaSBwY2lkZXY7Ci0gICAgWExVX0NvbmZpZyAqY29uZmlnOwotICAgIGludCBy ID0gMDsKLQotICAgIGxpYnhsX2RldmljZV9wY2lfaW5pdCgmcGNpZGV2KTsKLQotICAgIGNvbmZp ZyA9IHhsdV9jZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKLSAgICBpZiAoIWNvbmZp ZykgeyBwZXJyb3IoInhsdV9jZmdfaW5pZyIpOyBleGl0KC0xKTsgfQotCi0gICAgaWYgKHhsdV9w Y2lfcGFyc2VfYmRmKGNvbmZpZywgJnBjaWRldiwgYmRmKSkgewotICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgInBjaS1kZXRhY2g6IG1hbGZvcm1lZCBCREYgc3BlY2lmaWNhdGlvbiBcIiVzXCJcbiIs IGJkZik7Ci0gICAgICAgIGV4aXQoMik7Ci0gICAgfQotICAgIGlmIChmb3JjZSkgewotICAgICAg ICBpZiAobGlieGxfZGV2aWNlX3BjaV9kZXN0cm95KGN0eCwgZG9taWQsICZwY2lkZXYsIDApKQot ICAgICAgICAgICAgciA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGxpYnhsX2Rldmlj ZV9wY2lfcmVtb3ZlKGN0eCwgZG9taWQsICZwY2lkZXYsIDApKQotICAgICAgICAgICAgciA9IDE7 Ci0gICAgfQotCi0gICAgbGlieGxfZGV2aWNlX3BjaV9kaXNwb3NlKCZwY2lkZXYpOwotICAgIHhs dV9jZmdfZGVzdHJveShjb25maWcpOwotCi0gICAgcmV0dXJuIHI7Ci19Ci0KLWludCBtYWluX3Bj aWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0g ICAgaW50IG9wdDsKLSAgICBpbnQgZm9yY2UgPSAwOwotICAgIGNvbnN0IGNoYXIgKmJkZiA9IE5V TEw7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiZiIsIE5VTEwsICJwY2ktZGV0YWNo IiwgMikgewotICAgIGNhc2UgJ2YnOgotICAgICAgICBmb3JjZSA9IDE7Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7Ci0gICAg YmRmID0gYXJndltvcHRpbmQgKyAxXTsKLQotICAgIGlmIChwY2lkZXRhY2goZG9taWQsIGJkZiwg Zm9yY2UpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotCi0gICAgcmV0dXJuIEVYSVRf U1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBwY2lhdHRhY2godWludDMyX3QgZG9taWQsIGNvbnN0 IGNoYXIgKmJkZiwgY29uc3QgY2hhciAqdnMpCi17Ci0gICAgbGlieGxfZGV2aWNlX3BjaSBwY2lk ZXY7Ci0gICAgWExVX0NvbmZpZyAqY29uZmlnOwotICAgIGludCByID0gMDsKLQotICAgIGxpYnhs X2RldmljZV9wY2lfaW5pdCgmcGNpZGV2KTsKLQotICAgIGNvbmZpZyA9IHhsdV9jZmdfaW5pdChz dGRlcnIsICJjb21tYW5kIGxpbmUiKTsKLSAgICBpZiAoIWNvbmZpZykgeyBwZXJyb3IoInhsdV9j ZmdfaW5pZyIpOyBleGl0KC0xKTsgfQotCi0gICAgaWYgKHhsdV9wY2lfcGFyc2VfYmRmKGNvbmZp ZywgJnBjaWRldiwgYmRmKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBjaS1hdHRhY2g6 IG1hbGZvcm1lZCBCREYgc3BlY2lmaWNhdGlvbiBcIiVzXCJcbiIsIGJkZik7Ci0gICAgICAgIGV4 aXQoMik7Ci0gICAgfQotCi0gICAgaWYgKGxpYnhsX2RldmljZV9wY2lfYWRkKGN0eCwgZG9taWQs ICZwY2lkZXYsIDApKQotICAgICAgICByID0gMTsKLQotICAgIGxpYnhsX2RldmljZV9wY2lfZGlz cG9zZSgmcGNpZGV2KTsKLSAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKLQotICAgIHJldHVy biByOwotfQotCi1pbnQgbWFpbl9wY2lhdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewot ICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGludCBvcHQ7Ci0gICAgY29uc3QgY2hhciAqYmRmID0g TlVMTCwgKnZzID0gTlVMTDsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxM LCAicGNpLWF0dGFjaCIsIDIpIHsKLSAgICAgICAgLyogTm8gb3B0aW9ucyAqLwotICAgIH0KLQot ICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7Ci0gICAgYmRmID0gYXJndltv cHRpbmQgKyAxXTsKLQotICAgIGlmIChvcHRpbmQgKyAxIDwgYXJnYykKLSAgICAgICAgdnMgPSBh cmd2W29wdGluZCArIDJdOwotCi0gICAgaWYgKHBjaWF0dGFjaChkb21pZCwgYmRmLCB2cykpCi0g ICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwot fQotCi1zdGF0aWMgdm9pZCBwY2lhc3NpZ25hYmxlX2xpc3Qodm9pZCkKLXsKLSAgICBsaWJ4bF9k ZXZpY2VfcGNpICpwY2lkZXZzOwotICAgIGludCBudW0sIGk7Ci0KLSAgICBwY2lkZXZzID0gbGli eGxfZGV2aWNlX3BjaV9hc3NpZ25hYmxlX2xpc3QoY3R4LCAmbnVtKTsKLQotICAgIGlmICggcGNp ZGV2cyA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW07 IGkrKykgewotICAgICAgICBwcmludGYoIiUwNHg6JTAyeDolMDJ4LiUwMXhcbiIsCi0gICAgICAg ICAgICAgICBwY2lkZXZzW2ldLmRvbWFpbiwgcGNpZGV2c1tpXS5idXMsIHBjaWRldnNbaV0uZGV2 LCBwY2lkZXZzW2ldLmZ1bmMpOwotICAgICAgICBsaWJ4bF9kZXZpY2VfcGNpX2Rpc3Bvc2UoJnBj aWRldnNbaV0pOwotICAgIH0KLSAgICBmcmVlKHBjaWRldnMpOwotfQotCi1pbnQgbWFpbl9wY2lh c3NpZ25hYmxlX2xpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBvcHQ7Ci0K LSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInBjaS1hc3NpZ25hYmxlLWxp c3QiLCAwKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICBwY2lhc3Np Z25hYmxlX2xpc3QoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2lhc3NpZ25h YmxlX2FkZChjb25zdCBjaGFyICpiZGYsIGludCByZWJpbmQpCi17Ci0gICAgbGlieGxfZGV2aWNl X3BjaSBwY2lkZXY7Ci0gICAgWExVX0NvbmZpZyAqY29uZmlnOwotICAgIGludCByID0gMDsKLQot ICAgIGxpYnhsX2RldmljZV9wY2lfaW5pdCgmcGNpZGV2KTsKLQotICAgIGNvbmZpZyA9IHhsdV9j ZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKLSAgICBpZiAoIWNvbmZpZykgeyBwZXJy b3IoInhsdV9jZmdfaW5pdCIpOyBleGl0KC0xKTsgfQotCi0gICAgaWYgKHhsdV9wY2lfcGFyc2Vf YmRmKGNvbmZpZywgJnBjaWRldiwgYmRmKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBj aS1hc3NpZ25hYmxlLWFkZDogbWFsZm9ybWVkIEJERiBzcGVjaWZpY2F0aW9uIFwiJXNcIlxuIiwg YmRmKTsKLSAgICAgICAgZXhpdCgyKTsKLSAgICB9Ci0KLSAgICBpZiAobGlieGxfZGV2aWNlX3Bj aV9hc3NpZ25hYmxlX2FkZChjdHgsICZwY2lkZXYsIHJlYmluZCkpCi0gICAgICAgIHIgPSAxOwot Ci0gICAgbGlieGxfZGV2aWNlX3BjaV9kaXNwb3NlKCZwY2lkZXYpOwotICAgIHhsdV9jZmdfZGVz dHJveShjb25maWcpOwotCi0gICAgcmV0dXJuIHI7Ci19Ci0KLWludCBtYWluX3BjaWFzc2lnbmFi bGVfYWRkKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgb3B0OwotICAgIGNvbnN0 IGNoYXIgKmJkZiA9IE5VTEw7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVM TCwgInBjaS1hc3NpZ25hYmxlLWFkZCIsIDEpIHsKLSAgICAgICAgLyogTm8gb3B0aW9ucyAqLwot ICAgIH0KLQotICAgIGJkZiA9IGFyZ3Zbb3B0aW5kXTsKLQotICAgIGlmIChwY2lhc3NpZ25hYmxl X2FkZChiZGYsIDEpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotCi0gICAgcmV0dXJu IEVYSVRfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBwY2lhc3NpZ25hYmxlX3JlbW92ZShjb25z dCBjaGFyICpiZGYsIGludCByZWJpbmQpCi17Ci0gICAgbGlieGxfZGV2aWNlX3BjaSBwY2lkZXY7 Ci0gICAgWExVX0NvbmZpZyAqY29uZmlnOwotICAgIGludCByID0gMDsKLQotICAgIGxpYnhsX2Rl dmljZV9wY2lfaW5pdCgmcGNpZGV2KTsKLQotICAgIGNvbmZpZyA9IHhsdV9jZmdfaW5pdChzdGRl cnIsICJjb21tYW5kIGxpbmUiKTsKLSAgICBpZiAoIWNvbmZpZykgeyBwZXJyb3IoInhsdV9jZmdf aW5pdCIpOyBleGl0KC0xKTsgfQotCi0gICAgaWYgKHhsdV9wY2lfcGFyc2VfYmRmKGNvbmZpZywg JnBjaWRldiwgYmRmKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBjaS1hc3NpZ25hYmxl LXJlbW92ZTogbWFsZm9ybWVkIEJERiBzcGVjaWZpY2F0aW9uIFwiJXNcIlxuIiwgYmRmKTsKLSAg ICAgICAgZXhpdCgyKTsKLSAgICB9Ci0KLSAgICBpZiAobGlieGxfZGV2aWNlX3BjaV9hc3NpZ25h YmxlX3JlbW92ZShjdHgsICZwY2lkZXYsIHJlYmluZCkpCi0gICAgICAgIHIgPSAxOwotCi0gICAg bGlieGxfZGV2aWNlX3BjaV9kaXNwb3NlKCZwY2lkZXYpOwotICAgIHhsdV9jZmdfZGVzdHJveShj b25maWcpOwotCi0gICAgcmV0dXJuIHI7Ci19Ci0KLWludCBtYWluX3BjaWFzc2lnbmFibGVfcmVt b3ZlKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgb3B0OwotICAgIGNvbnN0IGNo YXIgKmJkZiA9IE5VTEw7Ci0gICAgaW50IHJlYmluZCA9IDA7Ci0KLSAgICBTV0lUQ0hfRk9SRUFD SF9PUFQob3B0LCAiciIsIE5VTEwsICJwY2ktYXNzaWduYWJsZS1yZW1vdmUiLCAxKSB7Ci0gICAg Y2FzZSAncic6Ci0gICAgICAgIHJlYmluZD0xOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg ICBiZGYgPSBhcmd2W29wdGluZF07Ci0KLSAgICBpZiAocGNpYXNzaWduYWJsZV9yZW1vdmUoYmRm LCByZWJpbmQpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotCi0gICAgcmV0dXJuIEVY SVRfU1VDQ0VTUzsKLX0KLQogc3RhdGljIHZvaWQgcGF1c2VfZG9tYWluKHVpbnQzMl90IGRvbWlk KQogewogICAgIGxpYnhsX2RvbWFpbl9wYXVzZShjdHgsIGRvbWlkKTsKZGlmZiAtLWdpdCBhL3Rv b2xzL3hsL3hsX3BjaS5jIGIvdG9vbHMveGwveGxfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uMmUwZjZmZGRhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3hs L3hsX3BjaS5jCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDktMjAxNyBD aXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJz aW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBk ZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5j bHVkZSA8bGlieGxfdXRpbHMuaD4KKyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1ZGUg InhsLmgiCisjaW5jbHVkZSAieGxfdXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgorCitz dGF0aWMgdm9pZCBwY2lsaXN0KHVpbnQzMl90IGRvbWlkKQoreworICAgIGxpYnhsX2RldmljZV9w Y2kgKnBjaWRldnM7CisgICAgaW50IG51bSwgaTsKKworICAgIHBjaWRldnMgPSBsaWJ4bF9kZXZp Y2VfcGNpX2xpc3QoY3R4LCBkb21pZCwgJm51bSk7CisgICAgaWYgKHBjaWRldnMgPT0gTlVMTCkK KyAgICAgICAgcmV0dXJuOworICAgIHByaW50ZigiVmRldiBEZXZpY2VcbiIpOworICAgIGZvciAo aSA9IDA7IGkgPCBudW07IGkrKykgeworICAgICAgICBwcmludGYoIiUwMnguJTAxeCAlMDR4OiUw Mng6JTAyeC4lMDF4XG4iLAorICAgICAgICAgICAgICAgKHBjaWRldnNbaV0udmRldmZuID4+IDMp ICYgMHgxZiwgcGNpZGV2c1tpXS52ZGV2Zm4gJiAweDcsCisgICAgICAgICAgICAgICBwY2lkZXZz W2ldLmRvbWFpbiwgcGNpZGV2c1tpXS5idXMsIHBjaWRldnNbaV0uZGV2LCBwY2lkZXZzW2ldLmZ1 bmMpOworICAgICAgICBsaWJ4bF9kZXZpY2VfcGNpX2Rpc3Bvc2UoJnBjaWRldnNbaV0pOworICAg IH0KKyAgICBmcmVlKHBjaWRldnMpOworfQorCitpbnQgbWFpbl9wY2lsaXN0KGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBpbnQgb3B0OworCisgICAg U1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJwY2ktbGlzdCIsIDEpIHsKKyAgICAg ICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFy Z3Zbb3B0aW5kXSk7CisKKyAgICBwY2lsaXN0KGRvbWlkKTsKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBwY2lkZXRhY2godWludDMyX3QgZG9taWQsIGNvbnN0IGNoYXIgKmJkZiwgaW50 IGZvcmNlKQoreworICAgIGxpYnhsX2RldmljZV9wY2kgcGNpZGV2OworICAgIFhMVV9Db25maWcg KmNvbmZpZzsKKyAgICBpbnQgciA9IDA7CisKKyAgICBsaWJ4bF9kZXZpY2VfcGNpX2luaXQoJnBj aWRldik7CisKKyAgICBjb25maWcgPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5l Iik7CisgICAgaWYgKCFjb25maWcpIHsgcGVycm9yKCJ4bHVfY2ZnX2luaWciKTsgZXhpdCgtMSk7 IH0KKworICAgIGlmICh4bHVfcGNpX3BhcnNlX2JkZihjb25maWcsICZwY2lkZXYsIGJkZikpIHsK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwY2ktZGV0YWNoOiBtYWxmb3JtZWQgQkRGIHNwZWNp ZmljYXRpb24gXCIlc1wiXG4iLCBiZGYpOworICAgICAgICBleGl0KDIpOworICAgIH0KKyAgICBp ZiAoZm9yY2UpIHsKKyAgICAgICAgaWYgKGxpYnhsX2RldmljZV9wY2lfZGVzdHJveShjdHgsIGRv bWlkLCAmcGNpZGV2LCAwKSkKKyAgICAgICAgICAgIHIgPSAxOworICAgIH0gZWxzZSB7CisgICAg ICAgIGlmIChsaWJ4bF9kZXZpY2VfcGNpX3JlbW92ZShjdHgsIGRvbWlkLCAmcGNpZGV2LCAwKSkK KyAgICAgICAgICAgIHIgPSAxOworICAgIH0KKworICAgIGxpYnhsX2RldmljZV9wY2lfZGlzcG9z ZSgmcGNpZGV2KTsKKyAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKworICAgIHJldHVybiBy OworfQorCitpbnQgbWFpbl9wY2lkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAg IHVpbnQzMl90IGRvbWlkOworICAgIGludCBvcHQ7CisgICAgaW50IGZvcmNlID0gMDsKKyAgICBj b25zdCBjaGFyICpiZGYgPSBOVUxMOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImYi LCBOVUxMLCAicGNpLWRldGFjaCIsIDIpIHsKKyAgICBjYXNlICdmJzoKKyAgICAgICAgZm9yY2Ug PSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihh cmd2W29wdGluZF0pOworICAgIGJkZiA9IGFyZ3Zbb3B0aW5kICsgMV07CisKKyAgICBpZiAocGNp ZGV0YWNoKGRvbWlkLCBiZGYsIGZvcmNlKSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsK KworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgcGNpYXR0YWNoKHVp bnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICpiZGYsIGNvbnN0IGNoYXIgKnZzKQoreworICAgIGxp YnhsX2RldmljZV9wY2kgcGNpZGV2OworICAgIFhMVV9Db25maWcgKmNvbmZpZzsKKyAgICBpbnQg ciA9IDA7CisKKyAgICBsaWJ4bF9kZXZpY2VfcGNpX2luaXQoJnBjaWRldik7CisKKyAgICBjb25m aWcgPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7CisgICAgaWYgKCFjb25m aWcpIHsgcGVycm9yKCJ4bHVfY2ZnX2luaWciKTsgZXhpdCgtMSk7IH0KKworICAgIGlmICh4bHVf cGNpX3BhcnNlX2JkZihjb25maWcsICZwY2lkZXYsIGJkZikpIHsKKyAgICAgICAgZnByaW50Zihz dGRlcnIsICJwY2ktYXR0YWNoOiBtYWxmb3JtZWQgQkRGIHNwZWNpZmljYXRpb24gXCIlc1wiXG4i LCBiZGYpOworICAgICAgICBleGl0KDIpOworICAgIH0KKworICAgIGlmIChsaWJ4bF9kZXZpY2Vf cGNpX2FkZChjdHgsIGRvbWlkLCAmcGNpZGV2LCAwKSkKKyAgICAgICAgciA9IDE7CisKKyAgICBs aWJ4bF9kZXZpY2VfcGNpX2Rpc3Bvc2UoJnBjaWRldik7CisgICAgeGx1X2NmZ19kZXN0cm95KGNv bmZpZyk7CisKKyAgICByZXR1cm4gcjsKK30KKworaW50IG1haW5fcGNpYXR0YWNoKGludCBhcmdj LCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBpbnQgb3B0OworICAg IGNvbnN0IGNoYXIgKmJkZiA9IE5VTEwsICp2cyA9IE5VTEw7CisKKyAgICBTV0lUQ0hfRk9SRUFD SF9PUFQob3B0LCAiIiwgTlVMTCwgInBjaS1hdHRhY2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9w dGlvbnMgKi8KKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0p OworICAgIGJkZiA9IGFyZ3Zbb3B0aW5kICsgMV07CisKKyAgICBpZiAob3B0aW5kICsgMSA8IGFy Z2MpCisgICAgICAgIHZzID0gYXJndltvcHRpbmQgKyAyXTsKKworICAgIGlmIChwY2lhdHRhY2go ZG9taWQsIGJkZiwgdnMpKQorICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworCisgICAgcmV0 dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgcGNpYXNzaWduYWJsZV9saXN0KHZv aWQpCit7CisgICAgbGlieGxfZGV2aWNlX3BjaSAqcGNpZGV2czsKKyAgICBpbnQgbnVtLCBpOwor CisgICAgcGNpZGV2cyA9IGxpYnhsX2RldmljZV9wY2lfYXNzaWduYWJsZV9saXN0KGN0eCwgJm51 bSk7CisKKyAgICBpZiAoIHBjaWRldnMgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKyAgICBm b3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCIlMDR4OiUwMng6JTAy eC4lMDF4XG4iLAorICAgICAgICAgICAgICAgcGNpZGV2c1tpXS5kb21haW4sIHBjaWRldnNbaV0u YnVzLCBwY2lkZXZzW2ldLmRldiwgcGNpZGV2c1tpXS5mdW5jKTsKKyAgICAgICAgbGlieGxfZGV2 aWNlX3BjaV9kaXNwb3NlKCZwY2lkZXZzW2ldKTsKKyAgICB9CisgICAgZnJlZShwY2lkZXZzKTsK K30KKworaW50IG1haW5fcGNpYXNzaWduYWJsZV9saXN0KGludCBhcmdjLCBjaGFyICoqYXJndikK K3sKKyAgICBpbnQgb3B0OworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEws ICJwY2ktYXNzaWduYWJsZS1saXN0IiwgMCkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisg ICAgfQorCisgICAgcGNpYXNzaWduYWJsZV9saXN0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcGNpYXNzaWduYWJsZV9hZGQoY29uc3QgY2hhciAqYmRmLCBpbnQgcmViaW5kKQor eworICAgIGxpYnhsX2RldmljZV9wY2kgcGNpZGV2OworICAgIFhMVV9Db25maWcgKmNvbmZpZzsK KyAgICBpbnQgciA9IDA7CisKKyAgICBsaWJ4bF9kZXZpY2VfcGNpX2luaXQoJnBjaWRldik7CisK KyAgICBjb25maWcgPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7CisgICAg aWYgKCFjb25maWcpIHsgcGVycm9yKCJ4bHVfY2ZnX2luaXQiKTsgZXhpdCgtMSk7IH0KKworICAg IGlmICh4bHVfcGNpX3BhcnNlX2JkZihjb25maWcsICZwY2lkZXYsIGJkZikpIHsKKyAgICAgICAg ZnByaW50ZihzdGRlcnIsICJwY2ktYXNzaWduYWJsZS1hZGQ6IG1hbGZvcm1lZCBCREYgc3BlY2lm aWNhdGlvbiBcIiVzXCJcbiIsIGJkZik7CisgICAgICAgIGV4aXQoMik7CisgICAgfQorCisgICAg aWYgKGxpYnhsX2RldmljZV9wY2lfYXNzaWduYWJsZV9hZGQoY3R4LCAmcGNpZGV2LCByZWJpbmQp KQorICAgICAgICByID0gMTsKKworICAgIGxpYnhsX2RldmljZV9wY2lfZGlzcG9zZSgmcGNpZGV2 KTsKKyAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKworICAgIHJldHVybiByOworfQorCitp bnQgbWFpbl9wY2lhc3NpZ25hYmxlX2FkZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg aW50IG9wdDsKKyAgICBjb25zdCBjaGFyICpiZGYgPSBOVUxMOworCisgICAgU1dJVENIX0ZPUkVB Q0hfT1BUKG9wdCwgIiIsIE5VTEwsICJwY2ktYXNzaWduYWJsZS1hZGQiLCAxKSB7CisgICAgICAg IC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBiZGYgPSBhcmd2W29wdGluZF07CisKKyAg ICBpZiAocGNpYXNzaWduYWJsZV9hZGQoYmRmLCAxKSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJ TFVSRTsKKworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgcGNpYXNz aWduYWJsZV9yZW1vdmUoY29uc3QgY2hhciAqYmRmLCBpbnQgcmViaW5kKQoreworICAgIGxpYnhs X2RldmljZV9wY2kgcGNpZGV2OworICAgIFhMVV9Db25maWcgKmNvbmZpZzsKKyAgICBpbnQgciA9 IDA7CisKKyAgICBsaWJ4bF9kZXZpY2VfcGNpX2luaXQoJnBjaWRldik7CisKKyAgICBjb25maWcg PSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7CisgICAgaWYgKCFjb25maWcp IHsgcGVycm9yKCJ4bHVfY2ZnX2luaXQiKTsgZXhpdCgtMSk7IH0KKworICAgIGlmICh4bHVfcGNp X3BhcnNlX2JkZihjb25maWcsICZwY2lkZXYsIGJkZikpIHsKKyAgICAgICAgZnByaW50ZihzdGRl cnIsICJwY2ktYXNzaWduYWJsZS1yZW1vdmU6IG1hbGZvcm1lZCBCREYgc3BlY2lmaWNhdGlvbiBc IiVzXCJcbiIsIGJkZik7CisgICAgICAgIGV4aXQoMik7CisgICAgfQorCisgICAgaWYgKGxpYnhs X2RldmljZV9wY2lfYXNzaWduYWJsZV9yZW1vdmUoY3R4LCAmcGNpZGV2LCByZWJpbmQpKQorICAg ICAgICByID0gMTsKKworICAgIGxpYnhsX2RldmljZV9wY2lfZGlzcG9zZSgmcGNpZGV2KTsKKyAg ICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKworICAgIHJldHVybiByOworfQorCitpbnQgbWFp bl9wY2lhc3NpZ25hYmxlX3JlbW92ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50 IG9wdDsKKyAgICBjb25zdCBjaGFyICpiZGYgPSBOVUxMOworICAgIGludCByZWJpbmQgPSAwOwor CisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgInIiLCBOVUxMLCAicGNpLWFzc2lnbmFibGUt cmVtb3ZlIiwgMSkgeworICAgIGNhc2UgJ3InOgorICAgICAgICByZWJpbmQ9MTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorCisgICAgYmRmID0gYXJndltvcHRpbmRdOworCisgICAgaWYgKHBjaWFz c2lnbmFibGVfcmVtb3ZlKGJkZiwgcmViaW5kKSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVS RTsKKworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJs ZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=