From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igal.Liberman Subject: [RFC,1/8] soc/fman: Add FMan MURAM support Date: Wed, 11 Mar 2015 07:07:49 +0200 Message-ID: <1426050469-12507-1-git-send-email-igal.liberman@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: scottwood@freescale.com, Igal Liberman To: , , Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org RnJvbTogSWdhbCBMaWJlcm1hbiA8SWdhbC5MaWJlcm1hbkBmcmVlc2NhbGUuY29tPgoKQWRkIEZy YW1lIE1hbmFnZXIgTXVsdGktVXNlciBSQU0gc3VwcG9ydC4KClNpZ25lZC1vZmYtYnk6IElnYWwg TGliZXJtYW4gPElnYWwuTGliZXJtYW5AZnJlZXNjYWxlLmNvbT4KLS0tCiBkcml2ZXJzL3NvYy9m c2wvZm1hbi9LY29uZmlnICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvc29jL2ZzbC9mbWFu L01ha2VmaWxlICAgICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMvc29jL2ZzbC9mbWFuL2ZtX211 cmFtLmMgICAgICAgICB8ICAxNzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9zb2MvZnNsL2ZtYW4vaW5jL2ZtX211cmFtX2V4dC5oIHwgICA5OCArKysrKysrKysrKysr KysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyNzYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9mc2wvZm1hbi9mbV9tdXJhbS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvZnNsL2ZtYW4vaW5jL2ZtX211cmFtX2V4dC5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvZnNsL2ZtYW4vS2NvbmZpZyBiL2RyaXZlcnMvc29jL2Zz bC9mbWFuL0tjb25maWcKaW5kZXggNGE5ZjY3Mi4uOTI1OTNiNyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9zb2MvZnNsL2ZtYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL3NvYy9mc2wvZm1hbi9LY29uZmln CkBAIC0xLDYgKzEsNyBAQAogbWVudWNvbmZpZyBGU0xfRk1BTgogCWJvb2wgIkZyZWVzY2FsZSBE UEFBIEZyYW1lIE1hbmFnZXIiCiAJZGVwZW5kcyBvbiBGU0xfU09DIHx8IENPTVBJTEVfVEVTVAor CXNlbGVjdCBQUENfTElCX1JIRUFQCiAJZGVmYXVsdCBuCiAJaGVscAogCQlGcmVlc2NhbGUgRGF0 YS1QYXRoIEFjY2VsZXJhdGlvbiBBcmNoaXRlY3R1cmUgRnJhbWUgTWFuYWdlcgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zb2MvZnNsL2ZtYW4vTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy9mc2wvZm1hbi9N YWtlZmlsZQppbmRleCBiNWVhNjEzLi44OWE4NGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy9m c2wvZm1hbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NvYy9mc2wvZm1hbi9NYWtlZmlsZQpAQCAt MSw4ICsxLDkgQEAKLXN1YmRpci1jY2ZsYWdzLSQoQ09ORklHX0ZTTF9GTUFOKSArPSAtSSQoc3Jj dHJlZSkvZHJpdmVycy9zb2MvZnNsL2ZtYW4vZmxpYgorc3ViZGlyLWNjZmxhZ3MtJChDT05GSUdf RlNMX0ZNQU4pICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL3NvYy9mc2wvZm1hbi9mbGliIFwKKwkJ CQkgICAgIC1JJChzcmN0cmVlKS9kcml2ZXJzL3NvYy9mc2wvZm1hbi9pbmMKIAogb2JqLSQoQ09O RklHX0ZTTF9GTUFOKQkJKz0gZnNsX2ZtYW4ubwogCi1mc2xfZm1hbi1vYmpzCQkJOj0gZm1hbi5v Citmc2xfZm1hbi1vYmpzCTo9IGZtYW4ubyBmbV9tdXJhbS5vCiAKIG9iai0kKENPTkZJR19GU0xf Rk1BTl9QT1JUKQkrPSBwb3J0Lwogb2JqLSQoQ09ORklHX0ZTTF9GTUFOX01BQykJKz0gbWFjLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvZnNsL2ZtYW4vZm1fbXVyYW0uYyBiL2RyaXZlcnMvc29j L2ZzbC9mbWFuL2ZtX211cmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MmE2N2EyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL2ZzbC9mbWFuL2ZtX211cmFt LmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2Fs ZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg bWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl ciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBu YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZF TFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo YXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9y IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rv ciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBGTSBNVVJBTSAuLi4gKi8K KyNpbmNsdWRlICJmbV9tdXJhbV9leHQuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5j bHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3Qg bXVyYW1faW5mbyB7CisJcmhfYmxvY2tfdAlmbV9ib290X211cmFtX3JoX2Jsb2NrWzE2XTsKKwly aF9pbmZvX3QJKmZtX211cmFtX2luZm87CisJdm9pZCBfX2lvbWVtICpmbV9tdXJhbV92YmFzZTsK KwkvKiBTcGlubG9jayBmb3IgTVVSQU0gYWNjZXNzZXMgKi8KKwlzcGlubG9ja190CWZtX211cmFt X2xvY2s7CisJdWludDY0X3QJc2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmZtX211 cmFtX2FkZHIoc3RydWN0IG11cmFtX2luZm8gKnBfbXVyYW0sCisJCQkJICAgdW5zaWduZWQgbG9u ZyBvZmZzZXQpCit7CisJcmV0dXJuIHBfbXVyYW0tPmZtX211cmFtX3ZiYXNlICsgb2Zmc2V0Owor fQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmbV9tdXJhbV9vZmZzZXQoc3RydWN0IG11cmFtX2lu Zm8gKnBfbXVyYW0sCisJCQkJICAgICB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGFk ZHIgLSBwX211cmFtLT5mbV9tdXJhbV92YmFzZTsKK30KKwordm9pZCBmbV9tdXJhbV9jbGVhcihz dHJ1Y3QgbXVyYW1faW5mbyAqcF9tdXJhbSkKK3sKKwltZW1zZXRfaW8ocF9tdXJhbS0+Zm1fbXVy YW1fdmJhc2UsIDAsIHBfbXVyYW0tPnNpemUpOworfQorCitzdHJ1Y3QgbXVyYW1faW5mbyAqZm1f bXVyYW1faW5pdChwaHlzX2FkZHJfdCBiYXNlX2FkZHJlc3MsIHVpbnQ2NF90IHNpemUpCit7CisJ aW50IHJldDsKKwlzdHJ1Y3QgbXVyYW1faW5mbyAqcF9tdXJhbTsKKworCXBfbXVyYW0gPSBremFs bG9jKHNpemVvZigqcF9tdXJhbSksIEdGUF9LRVJORUwpOworCWlmICghcF9tdXJhbSkKKwkJcmV0 dXJuIE5VTEw7CisJLyogQ3JlYXRlIHJlbW90ZSBoZWFwICovCisJcF9tdXJhbS0+Zm1fbXVyYW1f aW5mbyA9IHJoX2NyZWF0ZShzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwkvKiBTcGlubG9jayBm b3IgTVVSQU0gYWNjZXNzZXMgKi8KKwlzcGluX2xvY2tfaW5pdCgmcF9tdXJhbS0+Zm1fbXVyYW1f bG9jayk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBpbmZvIGhlYWRlciAqLworCXJoX2luaXQocF9t dXJhbS0+Zm1fbXVyYW1faW5mbywgMSwKKwkJc2l6ZW9mKHBfbXVyYW0tPmZtX2Jvb3RfbXVyYW1f cmhfYmxvY2spIC8KKwkJc2l6ZW9mKHBfbXVyYW0tPmZtX2Jvb3RfbXVyYW1fcmhfYmxvY2tbMF0p LAorCQlwX211cmFtLT5mbV9ib290X211cmFtX3JoX2Jsb2NrKTsKKworCS8qIEF0dGFjaCByZWdp b24gKi8KKwlyZXQgPSByaF9hdHRhY2hfcmVnaW9uKHBfbXVyYW0tPmZtX211cmFtX2luZm8sCisJ CQkgICAgICAgMCwKKwkJCSAgICAgICBzaXplKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiQ2Fu bm90IGF0dGFjaCByZWdpb25cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBTYXZlIE1V UkFNIHNpemUgKi8KKwlwX211cmFtLT5zaXplID0gc2l6ZTsKKworCS8qIGlvcmVtYXAgcGh5c2lj YWwgYWRkcmVzcyAqLworCXBfbXVyYW0tPmZtX211cmFtX3ZiYXNlID0gaW9yZW1hcChiYXNlX2Fk ZHJlc3MsIHNpemUpOworCWlmICghcF9tdXJhbS0+Zm1fbXVyYW1fdmJhc2UpIHsKKwkJcHJfZXJy KCJDYW5ub3QgbWFwIEZNIE1VUkFNXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJu IHBfbXVyYW07Cit9CisKK2ludCBmbV9tdXJhbV9mcmVlKHN0cnVjdCBtdXJhbV9pbmZvICpwX211 cmFtKQoreworCS8qIERldGFjaCByZWdpb24gKi8KKwlyaF9kZXRhY2hfcmVnaW9uKHBfbXVyYW0t PmZtX211cmFtX2luZm8sIDAsIChpbnQpcF9tdXJhbS0+c2l6ZSk7CisJLyogRGVzdHJveSByZW1v dGUgaGVhcCAqLworCXJoX2Rlc3Ryb3kocF9tdXJhbS0+Zm1fbXVyYW1faW5mbyk7CisJLyogVW5t YXAgbWVtb3J5ICovCisJaW91bm1hcChwX211cmFtLT5mbV9tdXJhbV92YmFzZSk7CisJLyogRnJl ZSBwb2ludGVyICovCisJa2ZyZWUocF9tdXJhbSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBf X2lvbWVtICpmbV9tdXJhbV9hbGxvYyhzdHJ1Y3QgbXVyYW1faW5mbyAqcF9tdXJhbSwgdWludDMy X3Qgc2l6ZSwKKwkJCSAgICAgdWludDMyX3QgYWxpZ24pCit7CisJdW5zaWduZWQgbG9uZyBzdGFy dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBfbXVyYW0t PmZtX211cmFtX2xvY2ssIGZsYWdzKTsKKwlwX211cmFtLT5mbV9tdXJhbV9pbmZvLT5hbGlnbm1l bnQgPSBhbGlnbjsKKwlzdGFydCA9IHJoX2FsbG9jKHBfbXVyYW0tPmZtX211cmFtX2luZm8sIHNp emUsICJmbWFuIik7CisKKwlpZiAoSVNfRVJSKCh2b2lkICopc3RhcnQpKSB7CisJCXByX2Vycigi Rk0gTVVSQU0gY2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnBfbXVyYW0tPmZtX211cmFtX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJbWVtc2V0KGZtX211cmFtX2FkZHIocF9tdXJhbSwgc3RhcnQpLCAwLCBzaXplKTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZwX211cmFtLT5mbV9tdXJhbV9sb2NrLCBmbGFncyk7CisK KwlyZXR1cm4gZm1fbXVyYW1fYWRkcihwX211cmFtLCBzdGFydCk7Cit9CisKK3ZvaWQgX19pb21l bSAqZm1fbXVyYW1fYWxsb2NfZml4ZWQoc3RydWN0IG11cmFtX2luZm8gKnBfbXVyYW0sIHVpbnQz Ml90IG9mZnNldCwKKwkJCQkgICB1aW50MzJfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3Rh cnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwX211cmFt LT5mbV9tdXJhbV9sb2NrLCBmbGFncyk7CisJcF9tdXJhbS0+Zm1fbXVyYW1faW5mby0+YWxpZ25t ZW50ID0gMTsKKwlzdGFydCA9IHJoX2FsbG9jX2ZpeGVkKHBfbXVyYW0tPmZtX211cmFtX2luZm8s IG9mZnNldCwgc2l6ZSwgImZtYW4iKTsKKworCWlmIChJU19FUlIoKHZvaWQgKilzdGFydCkpIHsK KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcF9tdXJhbS0+Zm1fbXVyYW1fbG9jaywgZmxhZ3Mp OworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZW1zZXQoZm1fbXVyYW1fYWRkcihwX211cmFtLCBz dGFydCksIDAsIHNpemUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBfbXVyYW0tPmZtX211 cmFtX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBmbV9tdXJhbV9hZGRyKHBfbXVyYW0sIHN0YXJ0 KTsKK30KKworaW50IGZtX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICpwX211cmFt LCB2b2lkIF9faW9tZW0gKnB0cikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcF9tdXJhbS0+Zm1fbXVyYW1fbG9jaywgZmxhZ3MpOwor CXJldCA9IHJoX2ZyZWUocF9tdXJhbS0+Zm1fbXVyYW1faW5mbywgZm1fbXVyYW1fb2Zmc2V0KHBf bXVyYW0sIHB0cikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBfbXVyYW0tPmZtX211cmFt X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2Mv ZnNsL2ZtYW4vaW5jL2ZtX211cmFtX2V4dC5oIGIvZHJpdmVycy9zb2MvZnNsL2ZtYW4vaW5jL2Zt X211cmFtX2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmI1MDIK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9mc2wvZm1hbi9pbmMvZm1fbXVyYW1fZXh0 LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTUgRnJlZXNjYWxl IFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt ZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy IHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5h bWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVM WSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhh dCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Ig YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9y IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIEZpbGUgICAgICAgICAgZm1f bXVyYW1fZXh0LmgKKyAqIERlc2NyaXB0aW9uICAgRk0gTVVSQU0gQXBwbGljYXRpb24gUHJvZ3Jh bW1pbmcgSW50ZXJmYWNlLgorICovCisjaWZuZGVmIF9fRk1fTVVSQU1fRVhUCisjZGVmaW5lIF9f Rk1fTVVSQU1fRVhUCisKKyNpbmNsdWRlICJhc20vcmhlYXAuaCIKKworLyogU3RydWN0dXJlIGZv ciBGTSBNVVJBTSBpbmZvcm1hdGlvbiAqLworc3RydWN0IG11cmFtX2luZm87CisKKy8qIEZNIE1V UkFNIGluaXRpYWxpemF0aW9uIEFQSSBmdW5jdGlvbnMsIGRlZmluaXRpb25zIGFuZCBlbnVtcyAq LworCisvKiBGdW5jdGlvbglmbV9tdXJhbV9pbml0CisgKiBEZXNjcmlwdGlvbglDcmVhdGVzIHBh cnRpdGlvbiBpbiB0aGUgTVVSQU0uCisgKgkJVGhlIHJvdXRpbmUgcmV0dXJucyBhIHBvaW50ZXIg dG8gdGhlIE1VUkFNIHBhcnRpdGlvbi4KKyAqCQlUaGlzIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQg YXMgZmlyc3QgcGFyYW1ldGVyIHRvIGFsbCBvdGhlcgorICoJCUZNLU1VUkFNIGZ1bmN0aW9uIGNh bGxzLgorICoJCU5vIGFjdHVhbCBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIG9mIEZN X01VUkFNIGhhcmR3YXJlCisgKgkJaXMgZG9uZSBieSB0aGlzIHJvdXRpbmUuCisgKiBQYXJhbVtp bl0JYmFzZV9hZGRyZXNzIC0gUG9pbnRlciB0byBiYXNlIG9mIG1lbW9yeSBtYXBwZWQgRk0tTVVS QU0uCisgKiBQYXJhbVtpbl0Jc2l6ZSAgICAgICAgLSBTaXplIG9mIHRoZSBGTS1NVVJBTSBwYXJ0 aXRpb24uCisgKiBSZXR1cm4JcG9pbnRlciB0byBGTS1NVVJBTSBvYmplY3QsIG9yIE5VTEwgZm9y IEZhaWx1cmUuCisgKi8KK3N0cnVjdCBtdXJhbV9pbmZvICpmbV9tdXJhbV9pbml0KHBoeXNfYWRk cl90IGJhc2VfYWRkcmVzcywgdWludDY0X3Qgc2l6ZSk7CisKKy8qRnVuY3Rpb24JZm1fbXVyYW1f ZnJlZQorICpEZXNjcmlwdGlvbglGcmVlcyBhbGwgcmVzb3VyY2VzIHRoYXQgd2VyZSBhc3NpZ25l ZCB0byBGTS1NVVJBTSBtb2R1bGUuCisgKgkJQ2FsbGluZyB0aGlzIHJvdXRpbmUgaW52YWxpZGF0 ZXMgdGhlIHBvaW50ZXIuCisgKlBhcmFtW2luXQlwX211cmFtIC0gRk0tTVVSQU0gbW9kdWxlIHBv aW50ZXIuCisgKlJldHVybgkwIG9uIHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICov CitpbnQgZm1fbXVyYW1fZnJlZShzdHJ1Y3QgbXVyYW1faW5mbyAqcF9tdXJhbSk7CisKKy8qIEZN IE1VUkFNIGNvbnRyb2wgQVBJIGZ1bmN0aW9ucywgZGVmaW5pdGlvbnMgYW5kIGVudW1zICovCisK Ky8qRnVuY3Rpb24JZm1fbXVyYW1fYWxsb2MKKyAqRGVzY3JpcHRpb24JQWxsb2NhdGUgc29tZSBt ZW1vcnkgZnJvbSBGTS1NVVJBTSBwYXJ0aXRpb24uCisgKlBhcmFtW2luXQlwX211cmFtICAgLSBG TS1NVVJBTSBtb2R1bGUgcG9pbnRlci4KKyAqUGFyYW1baW5dCXNpemUgICAgICAtIHNpemUgb2Yg dGhlIG1lbW9yeSB0byBiZSBhbGxvY2F0ZWQuCisgKlBhcmFtW2luXQlhbGlnbiAgICAgLSBBbGln bm1lbnQgb2YgdGhlIG1lbW9yeS4KKyAqUmV0dXJuCWFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBt ZW1vcnk7IE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkIF9faW9tZW0gKmZtX211cmFtX2FsbG9j KHN0cnVjdCBtdXJhbV9pbmZvICpwX211cmFtLCB1aW50MzJfdCBzaXplLAorCQkJICAgICB1aW50 MzJfdCBhbGlnbik7CisKKy8qRnVuY3Rpb24JZm1fbXVyYW1fYWxsb2NfZml4ZWQKKyAqRGVzY3Jp cHRpb24JQWxsb2NhdGUgc29tZSBzcGVjaWZpYyBtZW1vcnkgZnJvbSBGTS1NVVJBTSBwYXJ0aXRp b24gKGFjY29yZGluZworICoJCXRvIGJhc2UpLgorICpQYXJhbVtpbl0JcF9tdXJhbSAgICAtIEZN LU1VUkFNIG1vZHVsZSBwb2ludGVyLgorICpQYXJhbVtpbl0Jb2Zmc2V0ICAgICAtIHRoZSBkZXNp cmVkIGJhc2UtYWRkcmVzcyB0byBiZSBhbGxvY2F0ZWQuCisgKlBhcmFtW2luXQlzaXplICAgICAg IC0gc2l6ZSBvZiB0aGUgbWVtb3J5IHRvIGJlIGFsbG9jYXRlZC4KKyAqUmV0dXJuCWFkZHJlc3Mg b2YgdGhlIGFsbG9jYXRlZCBtZW1vcnk7IE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkIF9faW9t ZW0gKmZtX211cmFtX2FsbG9jX2ZpeGVkKHN0cnVjdCBtdXJhbV9pbmZvICpwX211cmFtLCB1aW50 MzJfdCBvZmZzZXQsCisJCQkJICAgdWludDMyX3Qgc2l6ZSk7CisKKy8qRnVuY3Rpb24JZm1fbXVy YW1fZnJlZV9tZW0KKyAqRGVzY3JpcHRpb24JRnJlZSBhbiBhbGxvY2F0ZWQgbWVtb3J5IGZyb20g Rk0tTVVSQU0gcGFydGl0aW9uLgorICpQYXJhbVtpbl0JcF9tdXJhbSAgIC0gRk0tTVVSQU0gbW9k dWxlIHBvaW50ZXIuCisgKlBhcmFtW2luXQlwdHIgICAgICAgLSBBIHBvaW50ZXIgdG8gYW4gYWxs b2NhdGVkIG1lbW9yeS4KKyAqUmV0dXJuCTAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndp c2UuCisgKi8KK2ludCBmbV9tdXJhbV9mcmVlX21lbShzdHJ1Y3QgbXVyYW1faW5mbyAqcF9tdXJh bSwgdm9pZCBfX2lvbWVtICpwdHIpOworCisjZW5kaWYgLyogX19GTV9NVVJBTV9FWFQgKi8KLS0g CjEuNy45LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkxpbnV4cHBjLWRldiBtYWlsaW5nIGxpc3QKTGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcK aHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2xpbnV4cHBjLWRldg==