From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian Masney Subject: [PATCH 5/6] soc: qcom: add OCMEM driver Date: Sun, 16 Jun 2019 09:29:29 -0400 Message-ID: <20190616132930.6942-6-masneyb@onstation.org> References: <20190616132930.6942-1-masneyb@onstation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190616132930.6942-1-masneyb-1iNe0GrtECGEi8DpZVb4nw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: agross-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, david.brown-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jonathan-eSc4qw6YbEQ@public.gmane.org, airlied-cv59FeDIM0c@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, bjorn.andersson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, daniel-/w4YWyX8dFk@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: devicetree@vger.kernel.org RnJvbTogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgoKVGhlIE9DTUVNIGRyaXZlciBo YW5kbGVzIGFsbG9jYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE9uIENoaXAKTUVNb3J5 IHRoYXQgaXMgcHJlc2VudCBvbiBzb21lIFNuYXBkcmFnb24gU29Dcy4KCkRldmljZXMgd2hpY2gg aGF2ZSBPQ01FTSBkbyBub3QgaGF2ZSBHTUVNIGluc2lkZSB0aGUgR1BVIGNvcmUsIHNvIHRoZQpH UFUgbXVzdCBpbnN0ZWFkIHVzZSBPQ01FTSB0byBiZSBmdW5jdGlvbmFsLiBTaW5jZSBjdXJyZW50 bHkgdGhlIEdQVQppcyB0aGUgb25seSBPQ01FTSB1c2VyIHdpdGggYW4gdXBzdHJlYW0gZHJpdmVy LCB0aGlzIGlzIGp1c3QgYSBtaW5pbWFsCmltcGxlbWVudGF0aW9uIHN1ZmZpY2llbnQgZm9yIHN0 YXRpY2FsbHkgYWxsb2NhdGluZyB0byB0aGUgR1BVIGl0J3MKY2h1bmsgb2YgT0NNRU0uCgpTaWdu ZWQtb2ZmLWJ5OiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CkNvLWRldmVsb3BlZC1i eTogQnJpYW4gTWFzbmV5IDxtYXNuZXliQG9uc3RhdGlvbi5vcmc+ClNpZ25lZC1vZmYtYnk6IEJy aWFuIE1hc25leSA8bWFzbmV5YkBvbnN0YXRpb24ub3JnPgotLS0KQ2hhbmdlcyBzaW5jZSBSb2In cyBsYXN0IHZlcnNpb24gb2YgdGhpcyBwYXRjaDoKaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9y Zy9wYXRjaC83Mzc5ODAxLwotIHJlZm9ybWF0dGVkIGRyaXZlciB0byBhbGxvdyBtdWx0aXBsZSBp bnN0YW5jZXMKLSB1cGRhdGVkIGxvZ2dpbmcgb2YgZXJyb3IgcGF0aHMgZHVyaW5nIGRldmljZSBw cm9iaW5nCi0gcmVtb3ZlIHVudXNlZCBwc2dzY19jdHJsCi0gcmVtb3ZlIF9jbGsgZnJvbSBjbG9j ayBuYW1lcwotIHByb3BhZ2F0ZSBlcnJvciBjb2RlIGZyb20gZGV2bV9pb3JlbWFwX3Jlc291cmNl KCkKLSB1c2UgZGV2aWNlX2dldF9tYXRjaF9kYXRhKCkKLSBTUERYIGxpY2Vuc2UgdGFncwotIHJl bW92ZSBRQ09NX1NNRCBpbiBLY29uZmlnCi0gc2VsZWN0IEFSQ0hfUUNPTSBpbiBLY29uZmlnCi0g c2VsZWN0IFFDT01fU0NNIGluIEtjb25maWcKLSBsb25nZXIgZGVzY3JpcHRpb24gaW4gS2NvbmZp ZwoKIGRyaXZlcnMvc29jL3Fjb20vS2NvbmZpZyAgICAgfCAgMTAgKwogZHJpdmVycy9zb2MvcWNv bS9NYWtlZmlsZSAgICB8ICAgMSArCiBkcml2ZXJzL3NvYy9xY29tL29jbWVtLmMgICAgIHwgNDAy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL3NvYy9xY29tL29j bWVtLnhtbC5oIHwgIDg2ICsrKysrKysrCiBpbmNsdWRlL3NvYy9xY29tL29jbWVtLmggICAgIHwg IDM0ICsrKwogNSBmaWxlcyBjaGFuZ2VkLCA1MzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc29jL3Fjb20vb2NtZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc29jL3Fjb20vb2NtZW0ueG1sLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3NvYy9x Y29tL29jbWVtLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9xY29tL0tjb25maWcgYi9kcml2 ZXJzL3NvYy9xY29tL0tjb25maWcKaW5kZXggODgwY2YwMjkwOTYyLi45OThkOTRkNjBhM2MgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3Fjb20vS2NvbmZpZworKysgYi9kcml2ZXJzL3NvYy9xY29t L0tjb25maWcKQEAgLTYyLDYgKzYyLDE2IEBAIGNvbmZpZyBRQ09NX01EVF9MT0FERVIKIAl0cmlz dGF0ZQogCXNlbGVjdCBRQ09NX1NDTQogCitjb25maWcgUUNPTV9PQ01FTQorCXRyaXN0YXRlICJR dWFsY29tbSBPbiBDaGlwIE1lbW9yeSAoT0NNRU0pIGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSQ0hf UUNPTQorCXNlbGVjdCBRQ09NX1NDTQorCWhlbHAKKyAgICAgICAgICBUaGUgT24gQ2hpcCBNZW1v cnkgKE9DTUVNKSBhbGxvY2F0b3IgYWxsb3dzIHZhcmlvdXMgY2xpZW50cyB0bworICAgICAgICAg IGFsbG9jYXRlIG1lbW9yeSBmcm9tIE9DTUVNIGJhc2VkIG9uIHBlcmZvcm1hbmNlLCBsYXRlbmN5 IGFuZCBwb3dlcgorICAgICAgICAgIHJlcXVpcmVtZW50cy4gVGhpcyBpcyB0eXBpY2FsbHkgdXNl ZCBieSB0aGUgR1BVLCBjYW1lcmEvdmlkZW8sIGFuZAorICAgICAgICAgIGF1ZGlvIGNvbXBvbmVu dHMgb24gc29tZSBTbmFwZHJhZ29uIFNvQ3MuCisKIGNvbmZpZyBRQ09NX1BNCiAJYm9vbCAiUXVh bGNvbW0gUG93ZXIgTWFuYWdlbWVudCIKIAlkZXBlbmRzIG9uIEFSQ0hfUUNPTSAmJiAhQVJNNjQK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy9xY29t L01ha2VmaWxlCmluZGV4IGZmZTUxOWIwY2I2Ni4uNzZhYzQ2OWY1NDhjIDEwMDY0NAotLS0gYS9k cml2ZXJzL3NvYy9xY29tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUK QEAgLTUsNiArNSw3IEBAIG9iai0kKENPTkZJR19RQ09NX0NPTU1BTkRfREIpICs9IGNtZC1kYi5v CiBvYmotJChDT05GSUdfUUNPTV9HTElOS19TU1IpICs9CWdsaW5rX3Nzci5vCiBvYmotJChDT05G SUdfUUNPTV9HU0JJKQkrPQlxY29tX2dzYmkubwogb2JqLSQoQ09ORklHX1FDT01fTURUX0xPQURF UikJKz0gbWR0X2xvYWRlci5vCitvYmotJChDT05GSUdfUUNPTV9PQ01FTSkJKz0gb2NtZW0ubwog b2JqLSQoQ09ORklHX1FDT01fUE0pCSs9CXNwbS5vCiBvYmotJChDT05GSUdfUUNPTV9RTUlfSEVM UEVSUykJKz0gcW1pX2hlbHBlcnMubwogcW1pX2hlbHBlcnMteQkrPSBxbWlfZW5jZGVjLm8gcW1p X2ludGVyZmFjZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9xY29tL29jbWVtLmMgYi9kcml2 ZXJzL3NvYy9xY29tL29jbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi41ZWJmNTAzMWI2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9xY29tL29j bWVtLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQnJpYW4gTWFzbmV5IDxtYXNuZXli QG9uc3RhdGlvbi5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgUmVkIEhhdC4gQXV0aG9yOiBS b2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcWNvbV9z Y20uaD4KKyNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8c29jL3Fjb20vb2NtZW0uaD4K KyNpbmNsdWRlICJvY21lbS54bWwuaCIKKworZW51bSByZWdpb25fbW9kZSB7CisJV0lERV9NT0RF ID0gMHgwLAorCVRISU5fTU9ERSwKKwlNT0RFX0RFRkFVTFQgPSBXSURFX01PREUsCit9OworCitz dHJ1Y3Qgb2NtZW1fcmVnaW9uIHsKKwlib29sIGludGVybGVhdmVkOworCWVudW0gcmVnaW9uX21v ZGUgbW9kZTsKKwl1bnNpZ25lZCBpbnQgbnVtX21hY3JvczsKKwllbnVtIG9jbWVtX21hY3JvX3N0 YXRlIG1hY3JvX3N0YXRlWzRdOworCXVuc2lnbmVkIGxvbmcgbWFjcm9fc2l6ZTsKKwl1bnNpZ25l ZCBsb25nIHJlZ2lvbl9zaXplOworfTsKKworc3RydWN0IG9jbWVtX2NvbmZpZyB7CisJdWludDhf dCBudW1fcmVnaW9uczsKKwl1aW50MzJfdCBtYWNyb19zaXplOworfTsKKworc3RydWN0IG9jbWVt IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJY29uc3Qgc3RydWN0IG9jbWVtX2NvbmZpZyAqY29u ZmlnOworCXN0cnVjdCByZXNvdXJjZSAqb2NtZW1fbWVtOworCXN0cnVjdCBjbGsgKmNvcmVfY2xr OworCXN0cnVjdCBjbGsgKmlmYWNlX2NsazsKKwl2b2lkIF9faW9tZW0gKm1taW87CisJdW5zaWdu ZWQgaW50IG51bV9wb3J0czsKKwl1bnNpZ25lZCBpbnQgbnVtX21hY3JvczsKKwlib29sIGludGVy bGVhdmVkOworCXN0cnVjdCBvY21lbV9yZWdpb24gKnJlZ2lvbnM7Cit9OworCisjZGVmaW5lIEZJ RUxEKHZhbCwgbmFtZSkgKCgodmFsKSAmIG5hbWUgIyMgX19NQVNLKSA+PiBuYW1lICMjIF9fU0hJ RlQpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY21lbV93cml0ZShzdHJ1Y3Qgb2NtZW0gKm9jbWVt LCB1MzIgcmVnLCB1MzIgZGF0YSkKK3sKKwl3cml0ZWwoZGF0YSwgb2NtZW0tPm1taW8gKyByZWcp OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBvY21lbV9yZWFkKHN0cnVjdCBvY21lbSAqb2NtZW0s IHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKG9jbWVtLT5tbWlvICsgcmVnKTsKK30KKworc3Rh dGljIGludCBvY21lbV9jbGtfZW5hYmxlKHN0cnVjdCBvY21lbSAqb2NtZW0pCit7CisJaW50IHJl dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShvY21lbS0+Y29yZV9jbGspOworCWlmIChy ZXQpIHsKKwkJZGV2X2luZm8ob2NtZW0tPmRldiwgIkZhaWwgdG8gZW5hYmxlIGNvcmUgY2xrXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUob2NtZW0t PmlmYWNlX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbyhvY21lbS0+ZGV2LCAiRmFpbCB0 byBlbmFibGUgaWZhY2UgY2xrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgb2NtZW1fY2xrX2Rpc2FibGUoc3RydWN0IG9jbWVtICpvY21lbSkK K3sKKwljbGtfZGlzYWJsZV91bnByZXBhcmUob2NtZW0tPmlmYWNlX2Nsayk7CisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKG9jbWVtLT5jb3JlX2Nsayk7Cit9CisKK3N0YXRpYyBpbnQgb2NtZW1fZGV2 X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvY21lbSAq b2NtZW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW9jbWVtX2Nsa19kaXNhYmxl KG9jbWVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfb2NtZW0oc3Ry dWN0IG9jbWVtICpvY21lbSkKK3sKKwl1aW50MzJfdCByZWdpb25fbW9kZV9jdHJsID0gMHgwOwor CXVuc2lnbmVkIGludCBwb3MgPSAwLCBpID0gMDsKKworCWlmICghcWNvbV9zY21fb2NtZW1fbG9j a19hdmFpbGFibGUoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgb2NtZW0tPmNvbmZpZy0+bnVtX3Jl Z2lvbnM7IGkrKykgeworCQkJc3RydWN0IG9jbWVtX3JlZ2lvbiAqcmVnaW9uID0gJm9jbWVtLT5y ZWdpb25zW2ldOworCisJCQlwb3MgPSBpIDw8IDI7CisJCQlpZiAocmVnaW9uLT5tb2RlID09IFRI SU5fTU9ERSkKKwkJCQlyZWdpb25fbW9kZV9jdHJsIHw9IEJJVChwb3MpOworCQl9CisKKwkJZGV2 X2RiZyhvY21lbS0+ZGV2LCAib2NtZW1fcmVnaW9uX21vZGVfY29udHJvbCAleFxuIiwKKwkJCXJl Z2lvbl9tb2RlX2N0cmwpOworCQlvY21lbV93cml0ZShvY21lbSwgUkVHX09DTUVNX1JFR0lPTl9N T0RFX0NUTCwgcmVnaW9uX21vZGVfY3RybCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG9jbWVt LT5jb25maWctPm51bV9yZWdpb25zOyBpKyspIHsKKwkJc3RydWN0IG9jbWVtX3JlZ2lvbiAqcmVn aW9uID0gJm9jbWVtLT5yZWdpb25zW2ldOworCQl1MzIgZGF0YTsKKworCQlkYXRhID0gT0NNRU1f UFNHU0NfQ1RMX01BQ1JPMF9NT0RFKHJlZ2lvbi0+bWFjcm9fc3RhdGVbMF0pIHwKKwkJCU9DTUVN X1BTR1NDX0NUTF9NQUNSTzFfTU9ERShyZWdpb24tPm1hY3JvX3N0YXRlWzFdKSB8CisJCQlPQ01F TV9QU0dTQ19DVExfTUFDUk8yX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVsyXSkgfAorCQkJT0NN RU1fUFNHU0NfQ1RMX01BQ1JPM19NT0RFKHJlZ2lvbi0+bWFjcm9fc3RhdGVbM10pOworCisJCW9j bWVtX3dyaXRlKG9jbWVtLCBSRUdfT0NNRU1fUFNHU0NfQ1RMKGkpLCBkYXRhKTsKKwl9Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBsb25nIHBoeXNfdG9fb2Zmc2V0KHN0cnVjdCBvY21lbSAqb2NtZW0s CisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoYWRkciA8IG9jbWVtLT5vY21l bV9tZW0tPnN0YXJ0IHx8IGFkZHIgPj0gb2NtZW0tPm9jbWVtX21lbS0+ZW5kKQorCQlyZXR1cm4g MDsKKworCXJldHVybiBhZGRyIC0gb2NtZW0tPm9jbWVtX21lbS0+c3RhcnQ7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBsb25nIGRldmljZV9hZGRyZXNzKHN0cnVjdCBvY21lbSAqb2NtZW0sCisJCQkJ ICAgIGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRy KQoreworCS8qIFRPRE8sIGdwdSB1c2VzIHBoeXNfdG9fb2Zmc2V0LCBidXQgb3RoZXJzIGRvIG5v dC4uICovCisJcmV0dXJuIHBoeXNfdG9fb2Zmc2V0KG9jbWVtLCBhZGRyKTsKK30KKworc3RhdGlj IHZvaWQgdXBkYXRlX3JhbmdlKHN0cnVjdCBvY21lbSAqb2NtZW0sIHN0cnVjdCBvY21lbV9idWYg KmJ1ZiwKKwkJCSBlbnVtIG9jbWVtX21hY3JvX3N0YXRlIG1zdGF0ZSwgZW51bSByZWdpb25fbW9k ZSBybW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJaW50IGksIGo7CisKKwkv KgorCSAqIFRPRE8gcHJvYmFibHkgc2hvdWxkIGFzc2VydCBzb21ld2hlcmUgdGhhdCByYW5nZSBp cyBhbGlnbmVkCisJICogdG8gbWFjcm8gYm91bmRhcmllcy4uCisJICovCisKKwlmb3IgKGkgPSAw OyBpIDwgb2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnM7IGkrKykgeworCQlzdHJ1Y3Qgb2NtZW1f cmVnaW9uICpyZWdpb24gPSAmb2NtZW0tPnJlZ2lvbnNbaV07CisKKwkJaWYgKGJ1Zi0+b2Zmc2V0 IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBidWYtPm9mZnNldCArIGJ1Zi0+bGVuKQorCQkJcmVnaW9u LT5tb2RlID0gcm1vZGU7CisKKwkJZm9yIChqID0gMDsgaiA8IHJlZ2lvbi0+bnVtX21hY3Jvczsg aisrKSB7CisJCQlpZiAoYnVmLT5vZmZzZXQgPD0gb2Zmc2V0ICYmCisJCQkgICAgb2Zmc2V0IDwg YnVmLT5vZmZzZXQgKyBidWYtPmxlbikKKwkJCQlyZWdpb24tPm1hY3JvX3N0YXRlW2pdID0gbXN0 YXRlOworCisJCQlvZmZzZXQgKz0gcmVnaW9uLT5tYWNyb19zaXplOworCQl9CisJfQorCisJdXBk YXRlX29jbWVtKG9jbWVtKTsKK30KKworc3RydWN0IG9jbWVtICpvZl9nZXRfb2NtZW0oc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0 IGRldmljZV9ub2RlICpkZXZub2RlOworCisJZGV2bm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2 LT5vZl9ub2RlLCAib2NtZW0iLCAwKTsKKwlpZiAoIWRldm5vZGUpIHsKKwkJZGV2X2VycihkZXYs ICJDYW5ub3QgbG9vayB1cCBvY21lbSBwaGFuZGxlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZGV2bm9kZSk7CisJaWYgKCFwZGV2KSB7 CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGZpbmQgZGV2aWNlIG5vZGUgJXNcbiIsIGRldm5vZGUt Pm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2RydmRh dGEocGRldik7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2dldF9vY21lbSk7CisKK3N0cnVjdCBvY21l bV9idWYgKm9jbWVtX2FsbG9jYXRlKHN0cnVjdCBvY21lbSAqb2NtZW0sIGVudW0gb2NtZW1fY2xp ZW50IGNsaWVudCwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBvY21lbV9i dWYgKmJ1ZjsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWJ1ZikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlidWYtPm9mZnNldCA9IDA7 CisJYnVmLT5hZGRyID0gZGV2aWNlX2FkZHJlc3Mob2NtZW0sIGNsaWVudCwgYnVmLT5vZmZzZXQp OworCWJ1Zi0+bGVuID0gc2l6ZTsKKworCXVwZGF0ZV9yYW5nZShvY21lbSwgYnVmLCBDT1JFX09O LCBXSURFX01PREUpOworCisJaWYgKHFjb21fc2NtX29jbWVtX2xvY2tfYXZhaWxhYmxlKCkpIHsK KwkJaW50IHJldDsKKworCQlyZXQgPSBxY29tX3NjbV9vY21lbV9sb2NrKFFDT01fU0NNX09DTUVN X0dSQVBISUNTX0lELAorCQkJCQkgIGJ1Zi0+b2Zmc2V0LCBidWYtPmxlbiwgV0lERV9NT0RFKTsK KwkJaWYgKHJldCkKKwkJCWRldl9lcnIob2NtZW0tPmRldiwgImNvdWxkIG5vdCBsb2NrOiAlZFxu IiwgcmV0KTsKKwl9IGVsc2UgeworCQlpZiAoY2xpZW50ID09IE9DTUVNX0dSQVBISUNTKSB7CisJ CQlvY21lbV93cml0ZShvY21lbSwgUkVHX09DTUVNX0dGWF9NUFVfU1RBUlQsCisJCQkJICAgIGJ1 Zi0+b2Zmc2V0KTsKKwkJCW9jbWVtX3dyaXRlKG9jbWVtLCBSRUdfT0NNRU1fR0ZYX01QVV9FTkQs CisJCQkJICAgIGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW4pOworCQl9CisJfQorCisJcmV0dXJuIGJ1 ZjsKK30KK0VYUE9SVF9TWU1CT0wob2NtZW1fYWxsb2NhdGUpOworCit2b2lkIG9jbWVtX2ZyZWUo c3RydWN0IG9jbWVtICpvY21lbSwgZW51bSBvY21lbV9jbGllbnQgY2xpZW50LAorCQlzdHJ1Y3Qg b2NtZW1fYnVmICpidWYpCit7CisJdXBkYXRlX3JhbmdlKG9jbWVtLCBidWYsIENMS19PRkYsIE1P REVfREVGQVVMVCk7CisKKwlpZiAocWNvbV9zY21fb2NtZW1fbG9ja19hdmFpbGFibGUoKSkgewor CQlpbnQgcmV0OworCisJCXJldCA9IHFjb21fc2NtX29jbWVtX3VubG9jayhRQ09NX1NDTV9PQ01F TV9HUkFQSElDU19JRCwKKwkJCQkJICAgIGJ1Zi0+b2Zmc2V0LCBidWYtPmxlbik7CisJCWlmIChy ZXQpCisJCQlkZXZfZXJyKG9jbWVtLT5kZXYsICJjb3VsZCBub3QgdW5sb2NrOiAlZFxuIiwgcmV0 KTsKKwl9IGVsc2UgeworCQlpZiAoY2xpZW50ID09IE9DTUVNX0dSQVBISUNTKSB7CisJCQlvY21l bV93cml0ZShvY21lbSwgUkVHX09DTUVNX0dGWF9NUFVfU1RBUlQsIDB4MCk7CisJCQlvY21lbV93 cml0ZShvY21lbSwgUkVHX09DTUVNX0dGWF9NUFVfRU5ELCAweDApOworCQl9CisJfQorCisJa2Zy ZWUoYnVmKTsKK30KK0VYUE9SVF9TWU1CT0wob2NtZW1fZnJlZSk7CisKK3N0YXRpYyBpbnQgb2Nt ZW1fZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9j bWVtICpvY21lbTsKKwl1aW50MzJfdCByZWcsIG51bV9iYW5rcywgcmVnaW9uX3NpemU7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlp bnQgaSwgaiwgcmV0OworCisJaWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSkKKwkJcmV0dXJu IC1FUFJPQkVfREVGRVI7CisKKwlvY21lbSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqb2Nt ZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9jbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9j bWVtLT5kZXYgPSBkZXY7CisJb2NtZW0tPmNvbmZpZyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShk ZXYpOworCisJb2NtZW0tPmNvcmVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImNvcmUiKTsKKwlp ZiAoSVNfRVJSKG9jbWVtLT5jb3JlX2NsaykpIHsKKwkJaWYgKFBUUl9FUlIob2NtZW0tPmNvcmVf Y2xrKSAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHRo ZSBjb3JlIGNsb2NrXG4iKTsKKworCQlyZXR1cm4gUFRSX0VSUihvY21lbS0+Y29yZV9jbGspOwor CX0KKworCW9jbWVtLT5pZmFjZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaWZhY2UiKTsKKwlp ZiAoSVNfRVJSKG9jbWVtLT5pZmFjZV9jbGspKSB7CisJCWlmIChQVFJfRVJSKG9jbWVtLT5pZmFj ZV9jbGspICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQg dGhlIGlmYWNlIGNsb2NrXG4iKTsKKworCQlyZXR1cm4gUFRSX0VSUihvY21lbS0+aWZhY2VfY2xr KTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVT T1VSQ0VfTUVNLAorCQkJCQkgICAib2NtZW1fY3RybF9waHlzaWNhbCIpOworCWlmICghcmVzKSB7 CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGdldCBvY21lbV9jdHJsX3BoeXNpY2FsIHJlZ2lv blxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJb2NtZW0tPm1taW8gPSBkZXZtX2lvcmVt YXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG9jbWVtLT5tbWlvKSkg eworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGlvcmVtYXAgb2NtZW1fY3Ry bF9waHlzaWNhbCByZXNvdXJjZVxuIik7CisJCXJldHVybiBQVFJfRVJSKG9jbWVtLT5tbWlvKTsK Kwl9CisKKwlvY21lbS0+b2NtZW1fbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShw ZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJCQkib2NtZW1fcGh5c2ljYWwiKTsKKwlpZiAoIW9j bWVtLT5vY21lbV9tZW0pIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZ2V0IG9jbWVtX3Bo eXNpY2FsIHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogVGhlIGNvcmUg Y2xvY2sgaXMgc3luY2hyb25vdXMgd2l0aCBncmFwaGljcyAqLworCVdBUk5fT04oY2xrX3NldF9y YXRlKG9jbWVtLT5jb3JlX2NsaywgMTAwMCkgPCAwKTsKKworCXJldCA9IG9jbWVtX2Nsa19lbmFi bGUob2NtZW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocWNvbV9zY21fcmVz dG9yZV9zZWNfY29uZmlnX2F2YWlsYWJsZSgpKSB7CisJCWRldl9kYmcoZGV2LCAiY29uZmlndXJp bmcgc2NtXG4iKTsKKwkJcmV0ID0gcWNvbV9zY21fcmVzdG9yZV9zZWNfY29uZmlnKCZwZGV2LT5k ZXYsCisJCQkJCQkgIFFDT01fU0NNX09DTUVNX0RFVl9JRCk7CisJCWlmIChyZXQpIHsKKwkJCWRl dl9lcnIoZGV2LCAiQ291bGQgbm90IGVuYWJsZSBzZWN1cmUgY29uZmlndXJhdGlvblxuIik7CisJ CQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwkJfQorCX0KKworCXJlZyA9IG9jbWVtX3JlYWQob2Nt ZW0sIFJFR19PQ01FTV9IV19QUk9GSUxFKTsKKwlvY21lbS0+bnVtX3BvcnRzID0gRklFTEQocmVn LCBPQ01FTV9IV19QUk9GSUxFX05VTV9QT1JUUyk7CisJb2NtZW0tPm51bV9tYWNyb3MgPSBGSUVM RChyZWcsIE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPUyk7CisJb2NtZW0tPmludGVybGVhdmVk ID0gISEocmVnICYgT0NNRU1fSFdfUFJPRklMRV9JTlRFUkxFQVZJTkcpOworCisJbnVtX2Jhbmtz ID0gb2NtZW0tPm51bV9wb3J0cyAvIDI7CisJcmVnaW9uX3NpemUgPSBvY21lbS0+Y29uZmlnLT5t YWNyb19zaXplICogbnVtX2JhbmtzOworCisJZGV2X2luZm8oZGV2LCAiJXUgcG9ydHMsICV1IHJl Z2lvbnMsICV1IG1hY3JvcywgJXNpbnRlcmxlYXZlZFxuIiwKKwkJIG9jbWVtLT5udW1fcG9ydHMs IG9jbWVtLT5jb25maWctPm51bV9yZWdpb25zLAorCQkgb2NtZW0tPm51bV9tYWNyb3MsIG9jbWVt LT5pbnRlcmxlYXZlZCA/ICIiIDogIm5vdCAiKTsKKworCW9jbWVtLT5yZWdpb25zID0gZGV2bV9r Y2FsbG9jKGRldiwgb2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnMsCisJCQkJICAgICAgc2l6ZW9m KHN0cnVjdCBvY21lbV9yZWdpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9jbWVtLT5yZWdpb25z KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCX0KKworCWZv ciAoaSA9IDA7IGkgPCBvY21lbS0+Y29uZmlnLT5udW1fcmVnaW9uczsgaSsrKSB7CisJCXN0cnVj dCBvY21lbV9yZWdpb24gKnJlZ2lvbiA9ICZvY21lbS0+cmVnaW9uc1tpXTsKKworCQlpZiAoV0FS Tl9PTihudW1fYmFua3MgPiBBUlJBWV9TSVpFKHJlZ2lvbi0+bWFjcm9fc3RhdGUpKSkgeworCQkJ cmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCQl9CisKKwkJcmVnaW9u LT5tb2RlID0gTU9ERV9ERUZBVUxUOworCQlyZWdpb24tPm51bV9tYWNyb3MgPSBudW1fYmFua3M7 CisKKwkJaWYgKGkgPT0gKG9jbWVtLT5jb25maWctPm51bV9yZWdpb25zIC0gMSkgJiYKKwkJICAg IHJlZyAmIE9DTUVNX0hXX1BST0ZJTEVfTEFTVF9SRUdOX0hBTEZTSVpFKSB7CisJCQlyZWdpb24t Pm1hY3JvX3NpemUgPSBvY21lbS0+Y29uZmlnLT5tYWNyb19zaXplIC8gMjsKKwkJCXJlZ2lvbi0+ cmVnaW9uX3NpemUgPSByZWdpb25fc2l6ZSAvIDI7CisJCX0gZWxzZSB7CisJCQlyZWdpb24tPm1h Y3JvX3NpemUgPSBvY21lbS0+Y29uZmlnLT5tYWNyb19zaXplOworCQkJcmVnaW9uLT5yZWdpb25f c2l6ZSA9IHJlZ2lvbl9zaXplOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUo cmVnaW9uLT5tYWNyb19zdGF0ZSk7IGorKykKKwkJCXJlZ2lvbi0+bWFjcm9fc3RhdGVbal0gPSBD TEtfT0ZGOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG9jbWVtKTsKKworCXJl dHVybiAwOworCitlcnJfY2xrX2Rpc2FibGU6CisJb2NtZW1fY2xrX2Rpc2FibGUob2NtZW0pOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NtZW1fY29uZmlnIG9jbWVt Xzg5NzRfY29uZmlnID0geworCS5udW1fcmVnaW9ucyA9IDMsCisJLm1hY3JvX3NpemUgPSBTWl8x MjhLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2NtZW1fb2ZfbWF0 Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInFjb20sb2NtZW0tbXNtODk3NCIsIC5kYXRhID0g Jm9jbWVtXzg5NzRfY29uZmlnIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBvY21lbV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9jbWVt X2RyaXZlciA9IHsKKwkucHJvYmUgPSBvY21lbV9kZXZfcHJvYmUsCisJLnJlbW92ZSA9IG9jbWVt X2Rldl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAib2NtZW0iLAorCQkub2ZfbWF0 Y2hfdGFibGUgPSBvY21lbV9vZl9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihvY21lbV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9vY21lbS54 bWwuaCBiL2RyaXZlcnMvc29jL3Fjb20vb2NtZW0ueG1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5iNGJmYjg1ZDFlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL3NvYy9xY29tL29jbWVtLnhtbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBNSVQgKi8KKworI2lmbmRlZiBPQ01FTV9YTUwKKyNkZWZpbmUgT0NNRU1f WE1MCisKKy8qIEF1dG9nZW5lcmF0ZWQgZmlsZSwgRE8gTk9UIEVESVQgbWFudWFsbHkhCisKK1Ro aXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBydWxlcy1uZy1uZyBoZWFkZXJnZW4gdG9vbCBp biB0aGlzIGdpdCByZXBvc2l0b3J5OgoraHR0cDovL2dpdGh1Yi5jb20vZnJlZWRyZW5vL2Vudnl0 b29scy8KK2dpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vZnJlZWRyZW5vL2Vudnl0b29scy5n aXQKKworVGhlIHJ1bGVzLW5nLW5nIHNvdXJjZSBmaWxlcyB0aGlzIGhlYWRlciB3YXMgZ2VuZXJh dGVkIGZyb20gYXJlOgorLSAvaG9tZS9yb2JjbGFyay9zcmMvZnJlZWRyZW5vL2Vudnl0b29scy9y bm5kYi9hZHJlbm8vb2NtZW0ueG1sICAgICAgICAgKCAgIDE3NzMgYnl0ZXMsIGZyb20gMjAxNS0w OS0yNCAxNzozMDowMCkKKworQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgYnkgdGhlIGZvbGxvd2lu ZyBhdXRob3JzOgorLSBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+IChyb2JjbGFyaykK KyovCisKK2VudW0gb2NtZW1fbWFjcm9fc3RhdGUgeworCVBBU1NUSFJPVUdIID0gMCwKKwlQRVJJ X09OID0gMSwKKwlDT1JFX09OID0gMiwKKwlDTEtfT0ZGID0gNCwKK307CisKKyNkZWZpbmUgUkVH X09DTUVNX0hXX1ZFUlNJT04JCQkJCTB4MDAwMDAwMDAKKworI2RlZmluZSBSRUdfT0NNRU1fSFdf UFJPRklMRQkJCQkJMHgwMDAwMDAwNAorI2RlZmluZSBPQ01FTV9IV19QUk9GSUxFX05VTV9QT1JU U19fTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgT0NNRU1fSFdfUFJPRklMRV9OVU1fUE9SVFNf X1NISUZUCQkJMAorc3RhdGljIGlubGluZSB1aW50MzJfdCBPQ01FTV9IV19QUk9GSUxFX05VTV9Q T1JUUyh1aW50MzJfdCB2YWwpCit7CisJcmV0dXJuICgodmFsKSA8PCBPQ01FTV9IV19QUk9GSUxF X05VTV9QT1JUU19fU0hJRlQpICYgT0NNRU1fSFdfUFJPRklMRV9OVU1fUE9SVFNfX01BU0s7Cit9 CisjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPU19fTUFTSwkJCTB4MDAwMDNmMDAK KyNkZWZpbmUgT0NNRU1fSFdfUFJPRklMRV9OVU1fTUFDUk9TX19TSElGVAkJCTgKK3N0YXRpYyBp bmxpbmUgdWludDMyX3QgT0NNRU1fSFdfUFJPRklMRV9OVU1fTUFDUk9TKHVpbnQzMl90IHZhbCkK K3sKKwlyZXR1cm4gKCh2YWwpIDw8IE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPU19fU0hJRlQp ICYgT0NNRU1fSFdfUFJPRklMRV9OVU1fTUFDUk9TX19NQVNLOworfQorI2RlZmluZSBPQ01FTV9I V19QUk9GSUxFX0xBU1RfUkVHTl9IQUxGU0laRQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgT0NNRU1f SFdfUFJPRklMRV9JTlRFUkxFQVZJTkcJCQkJMHgwMDAyMDAwMAorCisjZGVmaW5lIFJFR19PQ01F TV9HRU5fU1RBVFVTCQkJCQkweDAwMDAwMDBjCisKKyNkZWZpbmUgUkVHX09DTUVNX1BTR1NDX1NU QVRVUwkJCQkJMHgwMDAwMDAzOAorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJFR19PQ01FTV9Q U0dTQyh1aW50MzJfdCBpMCkgeyByZXR1cm4gMHgwMDAwMDAzYyArIDB4MSppMDsgfQorCitzdGF0 aWMgaW5saW5lIHVpbnQzMl90IFJFR19PQ01FTV9QU0dTQ19DVEwodWludDMyX3QgaTApIHsgcmV0 dXJuIDB4MDAwMDAwM2MgKyAweDEqaTA7IH0KKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RMX01BQ1JP MF9NT0RFX19NQVNLCQkJMHgwMDAwMDAwNworI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFDUk8w X01PREVfX1NISUZUCQkJMAorc3RhdGljIGlubGluZSB1aW50MzJfdCBPQ01FTV9QU0dTQ19DVExf TUFDUk8wX01PREUoZW51bSBvY21lbV9tYWNyb19zdGF0ZSB2YWwpCit7CisJcmV0dXJuICgodmFs KSA8PCBPQ01FTV9QU0dTQ19DVExfTUFDUk8wX01PREVfX1NISUZUKSAmIE9DTUVNX1BTR1NDX0NU TF9NQUNSTzBfTU9ERV9fTUFTSzsKK30KKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPMV9N T0RFX19NQVNLCQkJMHgwMDAwMDA3MAorI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFDUk8xX01P REVfX1NISUZUCQkJNAorc3RhdGljIGlubGluZSB1aW50MzJfdCBPQ01FTV9QU0dTQ19DVExfTUFD Uk8xX01PREUoZW51bSBvY21lbV9tYWNyb19zdGF0ZSB2YWwpCit7CisJcmV0dXJuICgodmFsKSA8 PCBPQ01FTV9QU0dTQ19DVExfTUFDUk8xX01PREVfX1NISUZUKSAmIE9DTUVNX1BTR1NDX0NUTF9N QUNSTzFfTU9ERV9fTUFTSzsKK30KKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPMl9NT0RF X19NQVNLCQkJMHgwMDAwMDcwMAorI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFDUk8yX01PREVf X1NISUZUCQkJOAorc3RhdGljIGlubGluZSB1aW50MzJfdCBPQ01FTV9QU0dTQ19DVExfTUFDUk8y X01PREUoZW51bSBvY21lbV9tYWNyb19zdGF0ZSB2YWwpCit7CisJcmV0dXJuICgodmFsKSA8PCBP Q01FTV9QU0dTQ19DVExfTUFDUk8yX01PREVfX1NISUZUKSAmIE9DTUVNX1BTR1NDX0NUTF9NQUNS TzJfTU9ERV9fTUFTSzsKK30KKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPM19NT0RFX19N QVNLCQkJMHgwMDAwNzAwMAorI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFDUk8zX01PREVfX1NI SUZUCQkJMTIKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPM19N T0RFKGVudW0gb2NtZW1fbWFjcm9fc3RhdGUgdmFsKQoreworCXJldHVybiAoKHZhbCkgPDwgT0NN RU1fUFNHU0NfQ1RMX01BQ1JPM19NT0RFX19TSElGVCkgJiBPQ01FTV9QU0dTQ19DVExfTUFDUk8z X01PREVfX01BU0s7Cit9CisKKyNkZWZpbmUgUkVHX09DTUVNX1JFR0lPTl9NT0RFX0NUTAkJCQkw eDAwMDAxMDAwCisjZGVmaW5lIE9DTUVNX1JFR0lPTl9NT0RFX0NUTF9SRUcwX1RISU4JCQkJMHgw MDAwMDAwMQorI2RlZmluZSBPQ01FTV9SRUdJT05fTU9ERV9DVExfUkVHMV9USElOCQkJCTB4MDAw MDAwMDIKKyNkZWZpbmUgT0NNRU1fUkVHSU9OX01PREVfQ1RMX1JFRzJfVEhJTgkJCQkweDAwMDAw MDA0CisjZGVmaW5lIE9DTUVNX1JFR0lPTl9NT0RFX0NUTF9SRUczX1RISU4JCQkJMHgwMDAwMDAw OAorCisjZGVmaW5lIFJFR19PQ01FTV9HRlhfTVBVX1NUQVJUCQkJCQkweDAwMDAxMDA0CisKKyNk ZWZpbmUgUkVHX09DTUVNX0dGWF9NUFVfRU5ECQkJCQkweDAwMDAxMDA4CisKKyNlbmRpZiAvKiBP Q01FTV9YTUwgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc29jL3Fjb20vb2NtZW0uaCBiL2luY2x1 ZGUvc29jL3Fjb20vb2NtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmU1NmNlMjIwMDk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc29jL3Fjb20vb2Nt ZW0uaApAQCAtMCwwICsxLDM0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFJlZCBIYXQKKyAqIEF1dGhvcjog Um9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgorICovCisKKyNpZm5kZWYgX19PQ01FTV9I X18KKyNkZWZpbmUgX19PQ01FTV9IX18KKworZW51bSBvY21lbV9jbGllbnQgeworCS8qIEdNRU0g Y2xpZW50cyAqLworCU9DTUVNX0dSQVBISUNTID0gMHgwLAorCS8qCisJICogVE9ETyBhZGQgbW9y ZSBvbmNlIG9jbWVtX2FsbG9jYXRlKCkgaXMgY2xldmVyIGVub3VnaCB0bworCSAqIGRlYWwgd2l0 aCBtdWx0aXBsZSBjbGllbnRzLgorCSAqLworCU9DTUVNX0NMSUVOVF9NQVgsCit9OworCitzdHJ1 Y3Qgb2NtZW07CisKK3N0cnVjdCBvY21lbV9idWYgeworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owor CXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKK307CisKK3N0cnVjdCBv Y21lbSAqb2ZfZ2V0X29jbWVtKHN0cnVjdCBkZXZpY2UgKmRldik7CitzdHJ1Y3Qgb2NtZW1fYnVm ICpvY21lbV9hbGxvY2F0ZShzdHJ1Y3Qgb2NtZW0gKm9jbWVtLCBlbnVtIG9jbWVtX2NsaWVudCBj bGllbnQsCisJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lkIG9jbWVtX2ZyZWUoc3RydWN0 IG9jbWVtICpvY21lbSwgZW51bSBvY21lbV9jbGllbnQgY2xpZW50LAorCQlzdHJ1Y3Qgb2NtZW1f YnVmICpidWYpOworCisjZW5kaWYgLyogX19PQ01FTV9IX18gKi8KLS0gCjIuMjAuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxp bmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5v