From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jyri Sarha Subject: [PATCH v9 3/7] ASoC: hdmi-codec: Add hdmi-codec for external HDMI-encoders Date: Thu, 31 Mar 2016 16:36:00 +0300 Message-ID: <636486b25db48fa13ae640516cdebe7bcfea0d23.1459431292.git.jsarha@ti.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, airlied@linux.ie, linux-omap@vger.kernel.org, devicetree@vger.kernel.org, bcousson@baylibre.com, alsa-devel@alsa-project.org Cc: peter.ujfalusi@ti.com, tony@atomide.com, broonie@kernel.org, arnaud.pouliquen@st.com, Jyri Sarha , liam.r.girdwood@linux.intel.com, tomi.valkeinen@ti.com, rmk+kernel@arm.linux.org.uk List-Id: devicetree@vger.kernel.org VGhlIGhkbWktY29kZWMgaXMgYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyIHRvIGJlIHJlZ2lzdGVy ZWQgZnJvbQpkcml2ZXJzIG9mIGV4dGVybmFsIEhETUkgZW5jb2RlcnMgd2l0aCBJMlMgYW5kL29y IHNwZGlmIGludGVyZmFjZS4gVGhlCmRyaXZlciBpbiB0dXJuIHJlZ2lzdGVycyBhbiBBU29DIGNv ZGVjIGZvciB0aGUgSERNSSBlbmNvZGVyJ3MgYXVkaW8KZnVuY3Rpb25hbGl0eS4KClRoZSBzdHJ1 Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBpbiB0aGUgQVBJIGhlYWRlciBhcmUgbW9zdGx5IHJlZHVu ZGFudApjb3BpZXMgb2Ygc2ltaWxhciBzdHJ1Y3R1cmVzIGluIEFTb0MgaGVhZGVycy4gVGhpcyBp cyBvbiBwdXJwb3NlIHRvCmF2b2lkIGRpcmVjdCBkZXBlbmRlbmNpZXMgdG8gQVNvQyBzdHJ1Y3R1 cmVzIGluIHZpZGVvIHNpZGUgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTogSnlyaSBTYXJoYSA8anNh cmhhQHRpLmNvbT4KLS0tCiBpbmNsdWRlL3NvdW5kL2hkbWktY29kZWMuaCAgICB8IDEwMCArKysr KysrKysrKwogc291bmQvc29jL2NvZGVjcy9LY29uZmlnICAgICAgfCAgIDYgKwogc291bmQvc29j L2NvZGVjcy9NYWtlZmlsZSAgICAgfCAgIDIgKwogc291bmQvc29jL2NvZGVjcy9oZG1pLWNvZGVj LmMgfCAzOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZp bGVzIGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9zb3VuZC9oZG1pLWNvZGVjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvY29kZWNz L2hkbWktY29kZWMuYwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaGRtaS1jb2RlYy5oIGIv aW5jbHVkZS9zb3VuZC9oZG1pLWNvZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZmMzYTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvaGRtaS1jb2Rl Yy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogaGRtaS1jb2RlYy5oIC0gSERNSSBDb2RlYyBk cml2ZXIgQVBJCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIElu Y29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tCisgKgorICogQXV0aG9yOiBKeXJpIFNhcmhh IDxqc2FyaGFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1 dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fSERNSV9DT0RFQ19IX18KKyNkZWZpbmUgX19IRE1J X0NPREVDX0hfXworCisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZWRpZC5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8dWFwaS9zb3Vu ZC9hc291bmQuaD4KKworLyoKKyAqIFByb3RvY29sIGJldHdlZW4gQVNvQyBjcHUtZGFpIGFuZCBI RE1JLWVuY29kZXIKKyAqLworc3RydWN0IGhkbWlfY29kZWNfZGFpZm10IHsKKwllbnVtIHsKKwkJ SERNSV9JMlMsCisJCUhETUlfUklHSFRfSiwKKwkJSERNSV9MRUZUX0osCisJCUhETUlfRFNQX0Es CisJCUhETUlfRFNQX0IsCisJCUhETUlfQUM5NywKKwkJSERNSV9TUERJRiwKKwl9IGZtdDsKKwlp bnQgYml0X2Nsa19pbnY6MTsKKwlpbnQgZnJhbWVfY2xrX2ludjoxOworCWludCBiaXRfY2xrX21h c3RlcjoxOworCWludCBmcmFtZV9jbGtfbWFzdGVyOjE7Cit9OworCisvKgorICogSERNSSBhdWRp byBwYXJhbWV0ZXJzCisgKi8KK3N0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyB7CisJc3RydWN0IGhk bWlfYXVkaW9faW5mb2ZyYW1lIGNlYTsKKwlzdHJ1Y3Qgc25kX2Flc19pZWM5NTggaWVjOworCWlu dCBzYW1wbGVfcmF0ZTsKKwlpbnQgc2FtcGxlX3dpZHRoOworCWludCBjaGFubmVsczsKK307CisK K3N0cnVjdCBoZG1pX2NvZGVjX29wcyB7CisJLyoKKwkgKiBDYWxsZWQgd2hlbiBBU29DIHN0YXJ0 cyBhbiBhdWRpbyBzdHJlYW0gc2V0dXAuCisJICogT3B0aW9uYWwKKwkgKi8KKwlpbnQgKCphdWRp b19zdGFydHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisJLyoKKwkgKiBDb25maWd1cmVzIEhE TUktZW5jb2RlciBmb3IgYXVkaW8gc3RyZWFtLgorCSAqIE1hbmRhdG9yeQorCSAqLworCWludCAo Kmh3X3BhcmFtcykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBoZG1pX2NvZGVjX2Rh aWZtdCAqZm10LAorCQkJIHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqaHBhcm1zKTsKKworCS8q CisJICogU2h1dHMgZG93biB0aGUgYXVkaW8gc3RyZWFtLgorCSAqIE1hbmRhdG9yeQorCSAqLwor CXZvaWQgKCphdWRpb19zaHV0ZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKKworCS8qCisJICog TXV0ZS91bm11dGUgSERNSSBhdWRpbyBzdHJlYW0uCisJICogT3B0aW9uYWwKKwkgKi8KKwlpbnQg KCpkaWdpdGFsX211dGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOworCisJLyoK KwkgKiBQcm92aWRlcyBFRElELUxpa2UtRGF0YSBmcm9tIGNvbm5lY3RlZCBIRE1JIGRldmljZS4K KwkgKiBPcHRpb25hbAorCSAqLworCWludCAoKmdldF9lbGQpKHN0cnVjdCBkZXZpY2UgKmRldiwg dWludDhfdCAqYnVmLCBzaXplX3QgbGVuKTsKK307CisKKy8qIEhETUkgY29kZWMgaW5pdGFsaXph dGlvbiBkYXRhICovCitzdHJ1Y3QgaGRtaV9jb2RlY19wZGF0YSB7CisJY29uc3Qgc3RydWN0IGhk bWlfY29kZWNfb3BzICpvcHM7CisJdWludCBpMnM6MTsKKwl1aW50IHNwZGlmOjE7CisJaW50IG1h eF9pMnNfY2hhbm5lbHM7Cit9OworCisjZGVmaW5lIEhETUlfQ09ERUNfRFJWX05BTUUgImhkbWkt YXVkaW8tY29kZWMiCisKKyNlbmRpZiAvKiBfX0hETUlfQ09ERUNfSF9fICovCmRpZmYgLS1naXQg YS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKaW5k ZXggNTA2OTNjOC4uNjJiNjJmZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmln CisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwpAQCAtODYsNiArODYsNyBAQCBjb25maWcg U05EX1NPQ19BTExfQ09ERUNTCiAJc2VsZWN0IFNORF9TT0NfTUMxMzc4MyBpZiBNRkRfTUMxM1hY WAogCXNlbGVjdCBTTkRfU09DX01MMjYxMjQgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfTkFVODgy NSBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19IRE1JX0NPREVDCiAJc2VsZWN0IFNORF9TT0NfUENN MTY4MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19QQ00xNzlYIGlmIFNQSV9NQVNURVIKIAlzZWxl Y3QgU05EX1NPQ19QQ00zMDA4CkBAIC00NzMsNiArNDc0LDExIEBAIGNvbmZpZyBTTkRfU09DX0JU X1NDTwogY29uZmlnIFNORF9TT0NfRE1JQwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0hE TUlfQ09ERUMKKyAgICAgICB0cmlzdGF0ZQorICAgICAgIHNlbGVjdCBTTkRfUENNX0VMRAorICAg ICAgIHNlbGVjdCBTTkRfUENNX0lFQzk1OAorCiBjb25maWcgU05EX1NPQ19FUzgzMjgKIAl0cmlz dGF0ZSAiRXZlcmVzdCBTZW1pIEVTODMyOCBDT0RFQyIKIApkaWZmIC0tZ2l0IGEvc291bmQvc29j L2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggZDQ0Zjdk My4uNWY3YjAwMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9z b3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC03OSw2ICs3OSw3IEBAIHNuZC1zb2MtbWF4OTg1 MC1vYmpzIDo9IG1heDk4NTAubwogc25kLXNvYy1tYzEzNzgzLW9ianMgOj0gbWMxMzc4My5vCiBz bmQtc29jLW1sMjYxMjQtb2JqcyA6PSBtbDI2MTI0Lm8KIHNuZC1zb2MtbmF1ODgyNS1vYmpzIDo9 IG5hdTg4MjUubworc25kLXNvYy1oZG1pLWNvZGVjLW9ianMgOj0gaGRtaS1jb2RlYy5vCiBzbmQt c29jLXBjbTE2ODEtb2JqcyA6PSBwY20xNjgxLm8KIHNuZC1zb2MtcGNtMTc5eC1jb2RlYy1vYmpz IDo9IHBjbTE3OXgubwogc25kLXNvYy1wY20zMDA4LW9ianMgOj0gcGNtMzAwOC5vCkBAIC0yODMs NiArMjg0LDcgQEAgb2JqLSQoQ09ORklHX1NORF9TT0NfTUFYOTg1MCkJKz0gc25kLXNvYy1tYXg5 ODUwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX01DMTM3ODMpCSs9IHNuZC1zb2MtbWMxMzc4My5v CiBvYmotJChDT05GSUdfU05EX1NPQ19NTDI2MTI0KQkrPSBzbmQtc29jLW1sMjYxMjQubwogb2Jq LSQoQ09ORklHX1NORF9TT0NfTkFVODgyNSkgICArPSBzbmQtc29jLW5hdTg4MjUubworb2JqLSQo Q09ORklHX1NORF9TT0NfSERNSV9DT0RFQykJKz0gc25kLXNvYy1oZG1pLWNvZGVjLm8KIG9iai0k KENPTkZJR19TTkRfU09DX1BDTTE2ODEpCSs9IHNuZC1zb2MtcGNtMTY4MS5vCiBvYmotJChDT05G SUdfU05EX1NPQ19QQ00xNzlYKQkrPSBzbmQtc29jLXBjbTE3OXgtY29kZWMubwogb2JqLSQoQ09O RklHX1NORF9TT0NfUENNMzAwOCkJKz0gc25kLXNvYy1wY20zMDA4Lm8KZGlmZiAtLWdpdCBhL3Nv dW5kL3NvYy9jb2RlY3MvaGRtaS1jb2RlYy5jIGIvc291bmQvc29jL2NvZGVjcy9oZG1pLWNvZGVj LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YjhlZAotLS0gL2Rldi9u dWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvaGRtaS1jb2RlYy5jCkBAIC0wLDAgKzEsMzk2IEBA CisvKgorICogQUxTQSBTb0MgY29kZWMgZm9yIEhETUkgZW5jb2RlciBkcml2ZXJzCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTUgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3 dy50aS5jb20vCisgKiBBdXRob3I6IEp5cmkgU2FyaGEgPGpzYXJoYUB0aS5jb20+CisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICog R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8c291 bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9w YXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fZHJt X2VsZC5oPgorI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9w Y21faWVjOTU4Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4gLyogVGhpcyBpcyBvbmx5 IHRvIGdldCBNQVhfRUxEX0JZVEVTICovCisKK3N0cnVjdCBoZG1pX2NvZGVjX3ByaXYgeworCXN0 cnVjdCBoZG1pX2NvZGVjX3BkYXRhIGhjZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpk YWlkcnY7CisJc3RydWN0IGhkbWlfY29kZWNfZGFpZm10IGRhaWZtdFsyXTsKKwlzdHJ1Y3QgbXV0 ZXggY3VycmVudF9zdHJlYW1fbG9jazsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmN1cnJl bnRfc3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCByYXRlYzsKKwl1 aW50OF90IGVsZFtNQVhfRUxEX0JZVEVTXTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25k X3NvY19kYXBtX3dpZGdldCBoZG1pX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fT1VUUFVU KCJUWCIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaGRt aV9yb3V0ZXNbXSA9IHsKKwl7ICJUWCIsIE5VTEwsICJQbGF5YmFjayIgfSwKK307CisKK2VudW0g eworCURBSV9JRF9JMlMgPSAwLAorCURBSV9JRF9TUERJRiwKK307CisKK3N0YXRpYyBpbnQgaGRt aV9jb2RlY19uZXdfc3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAor CQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaGRtaV9jb2RlY19wcml2 ICpoY3AgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCWludCByZXQgPSAwOworCisJ bXV0ZXhfbG9jaygmaGNwLT5jdXJyZW50X3N0cmVhbV9sb2NrKTsKKwlpZiAoIWhjcC0+Y3VycmVu dF9zdHJlYW0pIHsKKwkJaGNwLT5jdXJyZW50X3N0cmVhbSA9IHN1YnN0cmVhbTsKKwl9IGVsc2Ug aWYgKGhjcC0+Y3VycmVudF9zdHJlYW0gIT0gc3Vic3RyZWFtKSB7CisJCWRldl9lcnIoZGFpLT5k ZXYsICJPbmx5IG9uZSBzaW11bHRhbmVvdXMgc3RyZWFtIHN1cHBvcnRlZCFcbiIpOworCQlyZXQg PSAtRUlOVkFMOworCX0KKwltdXRleF91bmxvY2soJmhjcC0+Y3VycmVudF9zdHJlYW1fbG9jayk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhkbWlfY29kZWNfc3RhcnR1cChzdHJ1 Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgIHN0cnVjdCBzbmRfc29j X2RhaSAqZGFpKQoreworCXN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgKmhjcCA9IHNuZF9zb2NfZGFp X2dldF9kcnZkYXRhKGRhaSk7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAi JXMoKVxuIiwgX19mdW5jX18pOworCisJcmV0ID0gaGRtaV9jb2RlY19uZXdfc3RyZWFtKHN1YnN0 cmVhbSwgZGFpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGhjcC0+aGNkLm9w cy0+YXVkaW9fc3RhcnR1cCkgeworCQlyZXQgPSBoY3AtPmhjZC5vcHMtPmF1ZGlvX3N0YXJ0dXAo ZGFpLT5kZXYtPnBhcmVudCk7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X2xvY2soJmhjcC0+Y3Vy cmVudF9zdHJlYW1fbG9jayk7CisJCQloY3AtPmN1cnJlbnRfc3RyZWFtID0gTlVMTDsKKwkJCW11 dGV4X3VubG9jaygmaGNwLT5jdXJyZW50X3N0cmVhbV9sb2NrKTsKKwkJCXJldHVybiByZXQ7CisJ CX0KKwl9CisKKwlpZiAoaGNwLT5oY2Qub3BzLT5nZXRfZWxkKSB7CisJCXJldCA9IGhjcC0+aGNk Lm9wcy0+Z2V0X2VsZChkYWktPmRldi0+cGFyZW50LCBoY3AtPmVsZCwKKwkJCQkJICAgIHNpemVv ZihoY3AtPmVsZCkpOworCisJCWlmICghcmV0KSB7CisJCQlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0 cmFpbnRfZWxkKHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQkJCQloY3AtPmVsZCk7CisJCQlpZiAo cmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGhkbWlfY29kZWNfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJl YW0sCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGhkbWlfY29kZWNf cHJpdiAqaGNwID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCWRldl9kYmcoZGFp LT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlXQVJOX09OKGhjcC0+Y3VycmVudF9zdHJl YW0gIT0gc3Vic3RyZWFtKTsKKworCWhjcC0+aGNkLm9wcy0+YXVkaW9fc2h1dGRvd24oZGFpLT5k ZXYtPnBhcmVudCk7CisKKwltdXRleF9sb2NrKCZoY3AtPmN1cnJlbnRfc3RyZWFtX2xvY2spOwor CWhjcC0+Y3VycmVudF9zdHJlYW0gPSBOVUxMOworCW11dGV4X3VubG9jaygmaGNwLT5jdXJyZW50 X3N0cmVhbV9sb2NrKTsKK30KKworc3RhdGljIGludCBoZG1pX2NvZGVjX2h3X3BhcmFtcyhzdHJ1 Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19w YXJhbXMgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qg aGRtaV9jb2RlY19wcml2ICpoY3AgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXN0 cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyBocCA9IHsKKwkJLmllYyA9IHsKKwkJCS5zdGF0dXMgPSB7 IDAgfSwKKwkJCS5zdWJjb2RlID0geyAwIH0sCisJCQkucGFkID0gMCwKKwkJCS5kaWdfc3ViZnJh bWUgPSB7IDAgfSwKKwkJfQorCX07CisJaW50IHJldDsKKworCWRldl9kYmcoZGFpLT5kZXYsICIl cygpIHdpZHRoICVkIHJhdGUgJWQgY2hhbm5lbHMgJWRcbiIsIF9fZnVuY19fLAorCQlwYXJhbXNf d2lkdGgocGFyYW1zKSwgcGFyYW1zX3JhdGUocGFyYW1zKSwKKwkJcGFyYW1zX2NoYW5uZWxzKHBh cmFtcykpOworCisJaWYgKHBhcmFtc193aWR0aChwYXJhbXMpID4gMjQpCisJCXBhcmFtcy0+bXNi aXRzID0gMjQ7CisKKwlyZXQgPSBzbmRfcGNtX2NyZWF0ZV9pZWM5NThfY29uc3VtZXJfaHdfcGFy YW1zKHBhcmFtcywgaHAuaWVjLnN0YXR1cywKKwkJCQkJCSAgICAgICBzaXplb2YoaHAuaWVjLnN0 YXR1cykpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGFpLT5kZXYsICJDcmVhdGluZyBJ RUM5NTggY2hhbm5lbCBzdGF0dXMgZmFpbGVkICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSBoZG1pX2NvZGVjX25ld19zdHJlYW0oc3Vic3RyZWFtLCBkYWkpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloZG1pX2F1ZGlvX2luZm9mcmFtZV9pbml0KCZo cC5jZWEpOworCWhwLmNlYS5jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWhw LmNlYS5jb2RpbmdfdHlwZSA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfU1RSRUFNOworCWhwLmNl YS5zYW1wbGVfc2l6ZSA9IEhETUlfQVVESU9fU0FNUExFX1NJWkVfU1RSRUFNOworCWhwLmNlYS5z YW1wbGVfZnJlcXVlbmN5ID0gSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZX1NUUkVBTTsKKwor CWhwLnNhbXBsZV93aWR0aCA9IHBhcmFtc193aWR0aChwYXJhbXMpOworCWhwLnNhbXBsZV9yYXRl ID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlocC5jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhw YXJhbXMpOworCisJcmV0dXJuIGhjcC0+aGNkLm9wcy0+aHdfcGFyYW1zKGRhaS0+ZGV2LT5wYXJl bnQsICZoY3AtPmRhaWZtdFtkYWktPmlkXSwKKwkJCQkgICAgICAgJmhwKTsKK30KKworc3RhdGlj IGludCBoZG1pX2NvZGVjX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkgICAg ICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgKmhjcCA9IHNu ZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IGhkbWlfY29kZWNfZGFpZm10IGNm ID0geyAwIH07CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiJXMoKVxuIiwg X19mdW5jX18pOworCisJaWYgKGRhaS0+aWQgPT0gREFJX0lEX1NQRElGKSB7CisJCWNmLmZtdCA9 IEhETUlfU1BESUY7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9N QVNURVJfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCQljZi5iaXRf Y2xrX21hc3RlciA9IDE7CisJCQljZi5mcmFtZV9jbGtfbWFzdGVyID0gMTsKKwkJCWJyZWFrOwor CQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06CisJCQljZi5mcmFtZV9jbGtfbWFzdGVyID0g MTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCQljZi5iaXRf Y2xrX21hc3RlciA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZT OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN3 aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RB SUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJ Y2YuZnJhbWVfY2xrX2ludiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9J Ql9ORjoKKwkJCWNmLmJpdF9jbGtfaW52ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0Nf REFJRk1UX0lCX0lGOgorCQkJY2YuZnJhbWVfY2xrX2ludiA9IDE7CisJCQljZi5iaXRfY2xrX2lu diA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRf Rk9STUFUX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCQljZi5mbXQgPSBI RE1JX0kyUzsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQkJY2Yu Zm10ID0gSERNSV9EU1BfQTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9C OgorCQkJY2YuZm10ID0gSERNSV9EU1BfQjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJ Rk1UX1JJR0hUX0o6CisJCQljZi5mbXQgPSBIRE1JX1JJR0hUX0o7CisJCQlicmVhazsKKwkJY2Fz ZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCQljZi5mbXQgPSBIRE1JX0xFRlRfSjsKKwkJCWJy ZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0FDOTc6CisJCQljZi5mbXQgPSBIRE1JX0FDOTc7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZGFpLT5kZXYsICJJbnZhbGlkIERB SSBpbnRlcmZhY2UgZm9ybWF0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJ aGNwLT5kYWlmbXRbZGFpLT5pZF0gPSBjZjsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgaGRtaV9jb2RlY19kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBt dXRlKQoreworCXN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgKmhjcCA9IHNuZF9zb2NfZGFpX2dldF9k cnZkYXRhKGRhaSk7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOwor CisJaWYgKGhjcC0+aGNkLm9wcy0+ZGlnaXRhbF9tdXRlKQorCQlyZXR1cm4gaGNwLT5oY2Qub3Bz LT5kaWdpdGFsX211dGUoZGFpLT5kZXYtPnBhcmVudCwgbXV0ZSk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaGRtaV9kYWlfb3BzID0gewor CS5zdGFydHVwCT0gaGRtaV9jb2RlY19zdGFydHVwLAorCS5zaHV0ZG93bgk9IGhkbWlfY29kZWNf c2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IGhkbWlfY29kZWNfaHdfcGFyYW1zLAorCS5zZXRfZm10 CT0gaGRtaV9jb2RlY19zZXRfZm10LAorCS5kaWdpdGFsX211dGUJPSBoZG1pX2NvZGVjX2RpZ2l0 YWxfbXV0ZSwKK307CisKKworI2RlZmluZSBIRE1JX1JBVEVTCShTTkRSVl9QQ01fUkFURV8zMjAw MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHxcCisJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfCBT TkRSVl9QQ01fUkFURV84ODIwMCB8XAorCQkJIFNORFJWX1BDTV9SQVRFXzk2MDAwIHwgU05EUlZf UENNX1JBVEVfMTc2NDAwIHxcCisJCQkgU05EUlZfUENNX1JBVEVfMTkyMDAwKQorCisjZGVmaW5l IFNQRElGX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJ VF9TMTZfQkUgfFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBTTkRSVl9QQ01fRk1U QklUX1MyMF8zQkUgfFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01f Rk1UQklUX1MyNF8zQkUgfFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BD TV9GTVRCSVRfUzI0X0JFKQorCisvKgorICogVGhpcyBsaXN0IGlzIG9ubHkgZm9yIGZvcm1hdHMg YWxsb3dlZCBvbiB0aGUgSTJTIGJ1cy4gU28gdGhlcmUgaXMKKyAqIHNvbWUgZm9ybWF0cyBsaXN0 ZWQgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBIRE1JIGludGVyZmFjZS4gRm9yCisgKiBpbnN0 YW5jZSBhbGxvd2luZyB0aGUgMzItYml0IGZvcm1hdHMgZW5hYmxlcyAyNC1wcmVjaXNpb24gd2l0 aCBDUFUKKyAqIERBSXMgdGhhdCBkbyBub3Qgc3VwcG9ydCAyNC1iaXQgZm9ybWF0cy4gSWYgdGhl IGV4dHJhIGZvcm1hdHMgY2F1c2UKKyAqIHByb2JsZW1zLCB3ZSBzaG91bGQgYWRkIHRoZSB2aWRl byBzaWRlIGRyaXZlciBhbiBvcHRpb24gdG8gZGlzYWJsZQorICogdGhlbS4KKyAqLworI2RlZmlu ZSBJMlNfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklU X1MxNl9CRSB8XAorCQkJIFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFNORFJWX1BDTV9GTVRC SVRfUzIwXzNCRSB8XAorCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9G TVRCSVRfUzI0XzNCRSB8XAorCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENN X0ZNVEJJVF9TMjRfQkUgfFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8IFNORFJWX1BD TV9GTVRCSVRfUzMyX0JFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBoZG1p X2kyc19kYWkgPSB7CisJLm5hbWUgPSAiaTJzLWhpZmkiLAorCS5pZCA9IERBSV9JRF9JMlMsCisJ LnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNf bWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDgsCisJCS5yYXRlcyA9IEhETUlfUkFURVMsCisJ CS5mb3JtYXRzID0gSTJTX0ZPUk1BVFMsCisJCS5zaWdfYml0cyA9IDI0LAorCX0sCisJLm9wcyA9 ICZoZG1pX2RhaV9vcHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpX2Ry aXZlciBoZG1pX3NwZGlmX2RhaSA9IHsKKwkubmFtZSA9ICJzcGRpZi1oaWZpIiwKKwkuaWQgPSBE QUlfSURfU1BESUYsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2si LAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9 IEhETUlfUkFURVMsCisJCS5mb3JtYXRzID0gU1BESUZfRk9STUFUUywKKwl9LAorCS5vcHMgPSAm aGRtaV9kYWlfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBo ZG1pX2NvZGVjID0geworCS5kYXBtX3dpZGdldHMgPSBoZG1pX3dpZGdldHMsCisJLm51bV9kYXBt X3dpZGdldHMgPSBBUlJBWV9TSVpFKGhkbWlfd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gaGRt aV9yb3V0ZXMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoaGRtaV9yb3V0ZXMpLAor fTsKKworc3RhdGljIGludCBoZG1pX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGhkbWlfY29kZWNfcGRhdGEgKmhjZCA9IHBkZXYtPmRldi5wbGF0 Zm9ybV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGhk bWlfY29kZWNfcHJpdiAqaGNwOworCWludCBkYWlfY291bnQsIGkgPSAwOworCWludCByZXQ7CisK KwlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmICghaGNkKSB7CisJCWRl dl9lcnIoZGV2LCAiJXM6IE5vIHBsYWxmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJZGFpX2NvdW50ID0gaGNkLT5pMnMgKyBoY2QtPnNwZGlmOworCWlm IChkYWlfY291bnQgPCAxIHx8ICFoY2QtPm9wcyB8fCAhaGNkLT5vcHMtPmh3X3BhcmFtcyB8fAor CSAgICAhaGNkLT5vcHMtPmF1ZGlvX3NodXRkb3duKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IElu dmFsaWQgcGFyYW1ldGVyc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwloY3AgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhjcCksIEdGUF9LRVJORUwpOworCWlm ICghaGNwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhjcC0+aGNkID0gKmhjZDsKKwltdXRleF9p bml0KCZoY3AtPmN1cnJlbnRfc3RyZWFtX2xvY2spOworCisJaGNwLT5kYWlkcnYgPSBkZXZtX2t6 YWxsb2MoZGV2LCBkYWlfY291bnQgKiBzaXplb2YoKmhjcC0+ZGFpZHJ2KSwKKwkJCQkgICBHRlBf S0VSTkVMKTsKKwlpZiAoIWhjcC0+ZGFpZHJ2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICho Y2QtPmkycykgeworCQloY3AtPmRhaWRydltpXSA9IGhkbWlfaTJzX2RhaTsKKwkJaGNwLT5kYWlk cnZbaV0ucGxheWJhY2suY2hhbm5lbHNfbWF4ID0KKwkJCWhjZC0+bWF4X2kyc19jaGFubmVsczsK KwkJaSsrOworCX0KKworCWlmIChoY2QtPnNwZGlmKQorCQloY3AtPmRhaWRydltpXSA9IGhkbWlf c3BkaWZfZGFpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhkZXYsICZoZG1pX2Nv ZGVjLCBoY3AtPmRhaWRydiwKKwkJCQkgICAgIGRhaV9jb3VudCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIiVzOiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCkgZmFpbGVkICglZClcbiIs CisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfc2V0X2RydmRh dGEoZGV2LCBoY3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfY29kZWNfcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc25kX3NvY191bnJlZ2lzdGVy X2NvZGVjKCZwZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBoZG1pX2NvZGVjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9 IEhETUlfQ09ERUNfRFJWX05BTUUsCisJfSwKKwkucHJvYmUgPSBoZG1pX2NvZGVjX3Byb2JlLAor CS5yZW1vdmUgPSBoZG1pX2NvZGVjX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIoaGRtaV9jb2RlY19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJKeXJpIFNhcmhhIDxqc2Fy aGFAdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIRE1JIEF1ZGlvIENvZGVjIERyaXZl ciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIEhE TUlfQ09ERUNfRFJWX05BTUUpOwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=