From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 75383C433F5 for ; Thu, 31 Mar 2022 06:26:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SZkX8zAiSdBEG5RNdbk/fyj90C8D2VxOwBk8YjNkzV4=; b=HfR8r4Q/w56DWi OIR/3xExe9z786vCMvxzR38efuU3f+rG7ze07wgO5DIFyXYmaleBPm1Inbxb+gNC88KWazXJxybEU fjb4JGjvgoEvEyQ6TebOKyWh3q+Pj1VrY2Kb7+m3R95Z0b6c0DT25Dcgp/iMlNvENdpQRSuu9aEz+ BLp9ZW6UvnG8b31QlF0AmFe2/u6E7cRO29irzYa8JzJ3GExi1QDtyf/oX2QjUNe2Mqz0T8uzxddCC JUhT14sx6SuyTcLKLc3L2ECjKVCEeML9T4ojqrb7Jn8IkSwYZJdMq4TUQOm/k/r11BxjatWGeYgFQ 6+bpKdBfFPw55Pd4E+ZQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nZoF5-000rMk-UU; Thu, 31 Mar 2022 06:25:12 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nZoF1-000rLQ-2g for linux-arm-kernel@lists.infradead.org; Thu, 31 Mar 2022 06:25:10 +0000 Received: by mail-ej1-x633.google.com with SMTP id bg10so45915929ejb.4 for ; Wed, 30 Mar 2022 23:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=hnYpgenr8ngTodpg1JXJIZ6cG9nV0o3xmRF7n8qPQl4=; b=gHpmphjDQwG3JxfIT0R8kvyswU+QuzM0p1XmXy822QYzQWe8fIvZOuw9Id9p6rQzej OYg7cOyZWFyrIj8+RECIfiJQ9DKXHZKa+7BE0MC+VT//nb1mqLZ2XhQxc+eKV/NASKJp vP6mzHxWzTW2WxOg8ewrYuFLbB70B7JlewZ9Czw7pliY8vd7j6HABHjycEHSYcEHbJZV 4IgdtceWzJZOqOFLvVxnoLF/owKrufmSmWTnu13WwmjdGSZnyy+5/5Vuw94CJXBcpBa0 QrA5ECudjrs6kvEtCLVoggx+0tNRfOa6cI41fLPjOGwZuw+3EQ5ReadluYjnkpTEgeRW cosw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=hnYpgenr8ngTodpg1JXJIZ6cG9nV0o3xmRF7n8qPQl4=; b=JKvHL1wpi9D8cQaWmAxUrjogW1iMRMXU4j8ZAYVvEBRJuC0ymTyub6rxrkVNw90l9W /MlOndxdOBIGZ+fmOVqlSE4UbzavG/cvOy9+rP53+RSTDjmOeTPwofSTRWa4VeZrG6Sm x9R4cXEi0TkmK55XKfrwpq8sTVBCNzAp03hKqD10w2ExFeXYWjxUVKnwDt8ug5DddsGO C3BWU2/6xb9z0bcrkEnAIF7CVaDiUUXod+Thg/2pkIpt0OhKK7psjGuw5VOnj5HAgCzG rjlR4Jw+0tCTsP4ceCpspYESOZeMIfN2IusqzWfCBrrLvd/fOEzbo+/Lqe7t+UemVYSY 4EaA== X-Gm-Message-State: AOAM533Q+F9G184lleY0/UlA4AyxitRsdYEMsKSMprM+bKcjSoZGjBI2 9TeQ5KPiOHsgIDUm97DOdH/rIA== X-Google-Smtp-Source: ABdhPJxbCbKQiT/8faWY7saeoFzDh5bg0CdroPpj0kvjXBTD/0QxQTqJ8ts2GkLmZw9hv3lrawB4KQ== X-Received: by 2002:a17:907:2a53:b0:6ce:e4fe:3f92 with SMTP id fe19-20020a1709072a5300b006cee4fe3f92mr3549643ejc.389.1648707904369; Wed, 30 Mar 2022 23:25:04 -0700 (PDT) Received: from [192.168.0.164] (xdsl-188-155-201-27.adslplus.ch. [188.155.201.27]) by smtp.gmail.com with ESMTPSA id p14-20020aa7cc8e000000b0040f13865fa9sm10667804edt.3.2022.03.30.23.25.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 30 Mar 2022 23:25:03 -0700 (PDT) Message-ID: <2b67081a-0b59-20d2-dbb5-a3e0b24862db@linaro.org> Date: Thu, 31 Mar 2022 08:25:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH 2/2] dmaengine: apple-admac: Add Apple ADMAC driver Content-Language: en-US To: =?UTF-8?Q?Martin_Povi=c5=a1er?= , Hector Martin , Sven Peter , Vinod Koul , Rob Herring , Krzysztof Kozlowski Cc: Alyssa Rosenzweig , linux-arm-kernel@lists.infradead.org, dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Kettenis References: <20220330164458.93055-1-povik+lin@cutebit.org> <20220330164458.93055-3-povik+lin@cutebit.org> From: Krzysztof Kozlowski In-Reply-To: <20220330164458.93055-3-povik+lin@cutebit.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220330_232507_235347_2EF9DE67 X-CRM114-Status: GOOD ( 31.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMzAvMDMvMjAyMiAxODo0NCwgTWFydGluIFBvdmnFoWVyIHdyb3RlOgo+IEFkZCBkcml2ZXIg Zm9yIEF1ZGlvIERNQSBDb250cm9sbGVyIHByZXNlbnQgb24gQXBwbGUgU29DcyBmcm9tIHRoZQo+ ICJBcHBsZSBTaWxpY29uIiBmYW1pbHkuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFydGluIFBvdmnF oWVyIDxwb3ZpaytsaW5AY3V0ZWJpdC5vcmc+Cj4gLS0tCj4gIE1BSU5UQUlORVJTICAgICAgICAg ICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2RtYS9LY29uZmlnICAgICAgIHwgICA4ICsKPiAgZHJp dmVycy9kbWEvTWFrZWZpbGUgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZG1hL2FwcGxlLWFkbWFj LmMgfCA3OTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgNCBmaWxl cyBjaGFuZ2VkLCA4MTAgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9kbWEvYXBwbGUtYWRtYWMuYwo+IAoKKC4uLikKCj4gKwo+ICtzdGF0aWMgdm9pZCBhZG1hY19w b2tlKHN0cnVjdCBhZG1hY19kYXRhICphZCwgaW50IHJlZywgdTMyIHZhbCkKPiArewo+ICsJd3Jp dGVsX3JlbGF4ZWQodmFsLCBhZC0+YmFzZSArIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIg YWRtYWNfcGVlayhzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGludCByZWcpCj4gK3sKClBsZWFzZSBk byBub3Qgd3JpdGUgc29tZSBjdXN0b20tbmFtZWQgZnVuY3Rpb25zIGZvciBjb21tb24gZnVuY3Rp b25zLiBObwpuZWVkIHRvICIjZGVmaW5lIHRydWUgMCIgb3IgIiNkZWZpbmUgcmVhZCBwZWVrIiBl dGMuIFJlYWQgaXMgcmVhZCwgd3JpdGUKaXMgd3JpdGUuIFVzaW5nIG90aGVyIG5hbWVzIGlzIGNv dW50ZXIgaW50dWl0aXZlIGFuZCBtYWtlcyByZWFkaW5nIHRoZQpjb2RlIG1vcmUgZGlmZmljdWx0 LgoKWW91IGFjdHVhbGx5IHNob3VsZCBub3QgaGF2ZSB0aGVzZSB3cmFwcGVycyBiZWNhdXNlIHRo ZXkgZG9uJ3QgbWFrZSB0aGUKY29kZSBzbWFsbGVyIChtb3JlIGFyZ3VtZW50cyBuZWVkZWQuLi4p LgoKSWYgeW91IHdhbnQgdGhlIHdyYXBwZXJzLCBwbGVhc2UgdXNlIHJlZ21hcF9tbWlvLgoKT25s eSBtb2RpZnkgd3JhcHBlciBzYXZlIHNvbWUgc3BhY2UsIHNvIGl0IGNvdWxkIHN0YXkuCgo+ICsJ cmV0dXJuIHJlYWRsX3JlbGF4ZWQoYWQtPmJhc2UgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBhZG1hY19tb2RpZnkoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgcmVnLCB1MzIgbWFz aywgdTMyIHZhbCkKPiArewo+ICsJdm9pZCBfX2lvbWVtICphZGRyID0gYWQtPmJhc2UgKyByZWc7 Cj4gKwl1MzIgY3VyciA9IHJlYWRsX3JlbGF4ZWQoYWRkcik7Cj4gKwo+ICsJd3JpdGVsX3JlbGF4 ZWQoKGN1cnIgJiB+bWFzaykgfCAodmFsICYgbWFzayksIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IGFkbWFjX2NoYW4gKnRvX2FkbWFjX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjaGFu KQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBhZG1hY19jaGFuLCBj aGFuKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBhZG1hY190eCAqdG9fYWRtYWNfdHgoc3Ry dWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5l cl9vZih0eCwgc3RydWN0IGFkbWFjX3R4LCB0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRt YV90cmFuc2Zlcl9kaXJlY3Rpb24gYWRtYWNfY2hhbl9kaXJlY3Rpb24oaW50IGNoYW5ubykKPiAr ewo+ICsJcmV0dXJuIChjaGFubm8gJiAxKSA/IERNQV9ERVZfVE9fTUVNIDogRE1BX01FTV9UT19E RVY7Cj4gK30KPiArCj4gK3N0YXRpYyBkbWFfY29va2llX3QgYWRtYWNfdHhfc3VibWl0KHN0cnVj dCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCj4gK3sKPiArCXN0cnVjdCBhZG1hY190eCAq YWR0eCA9IHRvX2FkbWFjX3R4KHR4KTsKPiArCXN0cnVjdCBhZG1hY19jaGFuICphZGNoYW4gPSB0 b19hZG1hY19jaGFuKHR4LT5jaGFuKTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlkbWFf Y29va2llX3QgY29va2llOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZhZGNoYW4tPmxvY2ss IGZsYWdzKTsKPiArCWNvb2tpZSA9IGRtYV9jb29raWVfYXNzaWduKHR4KTsKPiArCWxpc3RfYWRk X3RhaWwoJmFkdHgtPm5vZGUsICZhZGNoYW4tPnN1Ym1pdHRlZCk7Cj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKPiArCj4gKwlyZXR1cm4gY29va2llOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkbWFjX2Rlc2NfZnJlZShzdHJ1Y3QgZG1hX2FzeW5jX3R4 X2Rlc2NyaXB0b3IgKnR4KQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfdHggKmFkdHggPSB0b19hZG1h Y190eCh0eCk7Cj4gKwo+ICsJZGV2bV9rZnJlZSh0b19hZG1hY19jaGFuKHR4LT5jaGFuKS0+aG9z dC0+ZGV2LCBhZHR4KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRt YV9hc3luY190eF9kZXNjcmlwdG9yICphZG1hY19wcmVwX2RtYV9jeWNsaWMoCj4gKwkJc3RydWN0 IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGJ1Zl9hZGRyLCBzaXplX3QgYnVmX2xlbiwKPiAr CQlzaXplX3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlv biwKPiArCQl1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfY2hhbiAq YWRjaGFuID0gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBhZG1hY19jaGFuLCBjaGFuKTsKPiAr CXN0cnVjdCBhZG1hY190eCAqYWR0eDsKPiArCj4gKwlpZiAoZGlyZWN0aW9uICE9IGFkbWFjX2No YW5fZGlyZWN0aW9uKGFkY2hhbi0+bm8pKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWFkdHgg PSBkZXZtX2t6YWxsb2MoYWRjaGFuLT5ob3N0LT5kZXYsIHNpemVvZigqYWR0eCksIEdGUF9OT1dB SVQpOwo+ICsJaWYgKCFhZHR4KQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWFkdHgtPmN5Y2xp YyA9IHRydWU7Cj4gKwo+ICsJYWR0eC0+YnVmX2FkZHIgPSBidWZfYWRkcjsKPiArCWFkdHgtPmJ1 Zl9sZW4gPSBidWZfbGVuOwo+ICsJYWR0eC0+YnVmX2VuZCA9IGJ1Zl9hZGRyICsgYnVmX2xlbjsK PiArCWFkdHgtPnBlcmlvZF9sZW4gPSBwZXJpb2RfbGVuOwo+ICsKPiArCWFkdHgtPnN1Ym1pdHRl ZF9wb3MgPSAwOwo+ICsJYWR0eC0+cmVjbGFpbWVkX3BvcyA9IDA7Cj4gKwo+ICsJZG1hX2FzeW5j X3R4X2Rlc2NyaXB0b3JfaW5pdCgmYWR0eC0+dHgsIGNoYW4pOwo+ICsJYWR0eC0+dHgudHhfc3Vi bWl0ID0gYWRtYWNfdHhfc3VibWl0Owo+ICsJYWR0eC0+dHguZGVzY19mcmVlID0gYWRtYWNfZGVz Y19mcmVlOwo+ICsKPiArCXJldHVybiAmYWR0eC0+dHg7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFdy aXRlIG9uZSBoYXJkd2FyZSBkZXNjcmlwdG9yIGZvciBhIGRtYWVuZ2luZSBjeWNsaWMgdHJhbnNh Y3Rpb24uCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhZG1hY19jeWNsaWNfd3JpdGVfb25lX2Rlc2Mo c3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgY2hhbm5vLAo+ICsJCQkJCXN0cnVjdCBhZG1hY190 eCAqdHgpCj4gK3sKPiArCWRtYV9hZGRyX3QgYWRkcjsKPiArCj4gKwlpZiAoV0FSTl9PTighdHgt PmN5Y2xpYykpCgpXQVJOX09OX09OQ0UoKSAtIGFsdGhvdWdoIEkgd29uZGVyIHdoeSBkbyB5b3Ug bmVlZCB0aGlzLiBZb3UgZnVsbHkKY29udHJvbCB0aGUgY2FsbGVycyB0byB0aGlzIGZ1bmN0aW9u LCBkb24ndCB5b3U/Cgo+ICsJCXJldHVybjsKPiArCj4gKwlhZGRyID0gdHgtPmJ1Zl9hZGRyICsg KHR4LT5zdWJtaXR0ZWRfcG9zICUgdHgtPmJ1Zl9sZW4pOwo+ICsJV0FSTl9PTihhZGRyICsgdHgt PnBlcmlvZF9sZW4gPiB0eC0+YnVmX2VuZCk7CgpJZiB0aGlzIGlzIHBvc3NpYmxlLCB5b3UgaGF2 ZSBidWdneSBjb2RlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgd2h5IHdhcm4/Cgo+ICsKPiAr CWRldl9kYmcoYWQtPmRldiwgImNoJWQgZGVzY3JpcHRvcjogYWRkcj0weCVwYWQgbGVuPTB4JXp4 IGZsYWdzPTB4JXhcbiIsCj4gKwkJY2hhbm5vLCBhZGRyLCB0eC0+cGVyaW9kX2xlbiwgRkxBR19E RVNDX05PVElGWSk7Cj4gKwo+ICsJYWRtYWNfcG9rZShhZCwgUkVHX0RFU0NfV1JJVEUoY2hhbm5v KSwgYWRkcik7Cj4gKwlhZG1hY19wb2tlKGFkLCBSRUdfREVTQ19XUklURShjaGFubm8pLCBhZGRy ID4+IDMyKTsKPiArCWFkbWFjX3Bva2UoYWQsIFJFR19ERVNDX1dSSVRFKGNoYW5ubyksIHR4LT5w ZXJpb2RfbGVuKTsKPiArCWFkbWFjX3Bva2UoYWQsIFJFR19ERVNDX1dSSVRFKGNoYW5ubyksIEZM QUdfREVTQ19OT1RJRlkpOwo+ICsKPiArCXR4LT5zdWJtaXR0ZWRfcG9zICs9IHR4LT5wZXJpb2Rf bGVuOwo+ICsJdHgtPnN1Ym1pdHRlZF9wb3MgJT0gMiAqIHR4LT5idWZfbGVuOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBXcml0ZSBhbGwgdGhlIGhhcmR3YXJlIGRlc2NyaXB0b3JzIGZvciBhIGN5Y2xp YyB0cmFuc2FjdGlvbgo+ICsgKiB0aGVyZSBpcyBzcGFjZSBmb3IuCj4gKyAqLwo+ICtzdGF0aWMg dm9pZCBhZG1hY19jeWNsaWNfd3JpdGVfZGVzYyhzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGludCBj aGFubm8sCj4gKwkJCQkJc3RydWN0IGFkbWFjX3R4ICp0eCkKPiArewo+ICsJaW50IGk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ICsJCWlmIChhZG1hY19wZWVrKGFkLCBSRUdf REVTQ19SSU5HKGNoYW5ubykpICYgUklOR19GVUxMKQo+ICsJCQlicmVhazsKPiArCQlhZG1hY19j eWNsaWNfd3JpdGVfb25lX2Rlc2MoYWQsIGNoYW5ubywgdHgpOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGFkbWFjX3Jpbmdfbm9jY3VwaWVkX3Nsb3RzKGludCByaW5ndmFsKQo+ICt7Cj4g KwlpbnQgd3JzbG90ID0gRklFTERfR0VUKFJJTkdfV1JJVEVfU0xPVCwgcmluZ3ZhbCk7Cj4gKwlp bnQgcmRzbG90ID0gRklFTERfR0VUKFJJTkdfUkVBRF9TTE9ULCByaW5ndmFsKTsKPiArCj4gKwlp ZiAod3JzbG90ICE9IHJkc2xvdCkgewo+ICsJCXJldHVybiAod3JzbG90ICsgNCAtIHJkc2xvdCkg JSA0Owo+ICsJfSBlbHNlIHsKPiArCQlXQVJOX09OKChyaW5ndmFsICYgKFJJTkdfRlVMTCB8IFJJ TkdfRU1QVFkpKSA9PSAwKTsKPiArCj4gKwkJaWYgKHJpbmd2YWwgJiBSSU5HX0ZVTEwpCj4gKwkJ CXJldHVybiA0Owo+ICsJCWVsc2UKPiArCQkJcmV0dXJuIDA7Cj4gKwl9Cj4gK30KPiArCj4gKy8q Cj4gKyAqIFJlYWQgZnJvbSBoYXJkd2FyZSB0aGUgcmVzaWR1ZSBvZiBhIGN5Y2xpYyBkbWFlbmdp bmUgdHJhbnNhY3Rpb24uCj4gKyAqLwo+ICtzdGF0aWMgdTMyIGFkbWFjX2N5Y2xpY19yZWFkX3Jl c2lkdWUoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBpbnQgY2hhbm5vLAo+ICsJCQkJCXN0cnVjdCBh ZG1hY190eCAqYWR0eCkKPiArewo+ICsJdTMyIHJpbmcxLCByaW5nMjsKPiArCXUzMiByZXNpZHVl MSwgcmVzaWR1ZTI7Cj4gKwlpbnQgbnJlcG9ydHM7Cj4gKwlzaXplX3QgcG9zOwo+ICsKPiArCXJp bmcxID0gICAgYWRtYWNfcGVlayhhZCwgUkVHX1JFUE9SVF9SSU5HKGNoYW5ubykpOwo+ICsJcmVz aWR1ZTEgPSBhZG1hY19wZWVrKGFkLCBSRUdfUkVTSURVRShjaGFubm8pKTsKPiArCXJpbmcyID0g ICAgYWRtYWNfcGVlayhhZCwgUkVHX1JFUE9SVF9SSU5HKGNoYW5ubykpOwo+ICsJcmVzaWR1ZTIg PSBhZG1hY19wZWVrKGFkLCBSRUdfUkVTSURVRShjaGFubm8pKTsKPiArCj4gKwlpZiAocmVzaWR1 ZTIgPiByZXNpZHVlMSkgewo+ICsJCS8qCj4gKwkJICogQ29udHJvbGxlciBtdXN0IGhhdmUgbG9h ZGVkIG5leHQgZGVzY3JpcHRvciBiZXR3ZWVuCj4gKwkJICogdGhlIHR3byByZXNpZHVlIHJlYWRz Cj4gKwkJICovCj4gKwkJbnJlcG9ydHMgPSBhZG1hY19yaW5nX25vY2N1cGllZF9zbG90cyhyaW5n MSkgKyAxOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBObyBkZXNjcmlwdG9yIGxvYWQgYmV0d2VlbiB0 aGUgdHdvIHJlYWRzLCByaW5nMiBpcyBzYWZlIHRvIHVzZSAqLwo+ICsJCW5yZXBvcnRzID0gYWRt YWNfcmluZ19ub2NjdXBpZWRfc2xvdHMocmluZzIpOwo+ICsJfQo+ICsKPiArCXBvcyA9IGFkdHgt PnJlY2xhaW1lZF9wb3MgKyBhZHR4LT5wZXJpb2RfbGVuICogKG5yZXBvcnRzICsgMSkgLSByZXNp ZHVlMjsKPiArCj4gKwlyZXR1cm4gYWR0eC0+YnVmX2xlbiAtIHBvcyAlIGFkdHgtPmJ1Zl9sZW47 Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgYWRtYWNfdHhfc3RhdHVzKHN0cnVj dCBkbWFfY2hhbiAqY2hhbiwgZG1hX2Nvb2tpZV90IGNvb2tpZSwKPiArCQkJCXN0cnVjdCBkbWFf dHhfc3RhdGUgKnR4c3RhdGUpCj4gK3sKPiArCXN0cnVjdCBhZG1hY19jaGFuICphZGNoYW4gPSB0 b19hZG1hY19jaGFuKGNoYW4pOwo+ICsJc3RydWN0IGFkbWFjX2RhdGEgKmFkID0gYWRjaGFuLT5o b3N0Owo+ICsJc3RydWN0IGFkbWFjX3R4ICphZHR4Owo+ICsKPiArCWVudW0gZG1hX3N0YXR1cyBy ZXQ7Cj4gKwlzaXplX3QgcmVzaWR1ZTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJ cmV0ID0gZG1hX2Nvb2tpZV9zdGF0dXMoY2hhbiwgY29va2llLCB0eHN0YXRlKTsKPiArCWlmIChy ZXQgPT0gRE1BX0NPTVBMRVRFIHx8ICF0eHN0YXRlKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ c3Bpbl9sb2NrX2lycXNhdmUoJmFkY2hhbi0+bG9jaywgZmxhZ3MpOwo+ICsJYWR0eCA9IGFkY2hh bi0+Y3VycmVudF90eDsKPiArCj4gKwlpZiAoYWR0eCAmJiBhZHR4LT50eC5jb29raWUgPT0gY29v a2llKSB7Cj4gKwkJcmV0ID0gRE1BX0lOX1BST0dSRVNTOwo+ICsJCXJlc2lkdWUgPSBhZG1hY19j eWNsaWNfcmVhZF9yZXNpZHVlKGFkLCBhZGNoYW4tPm5vLCBhZHR4KTsKPiArCX0gZWxzZSB7Cj4g KwkJcmV0ID0gRE1BX0lOX1BST0dSRVNTOwo+ICsJCXJlc2lkdWUgPSAwOwo+ICsJCWxpc3RfZm9y X2VhY2hfZW50cnkoYWR0eCwgJmFkY2hhbi0+aXNzdWVkLCBub2RlKSB7Cj4gKwkJCWlmIChhZHR4 LT50eC5jb29raWUgPT0gY29va2llKSB7Cj4gKwkJCQlyZXNpZHVlID0gYWR0eC0+YnVmX2xlbjsK PiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmYWRjaGFuLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJZG1hX3NldF9yZXNpZHVlKHR4c3Rh dGUsIHJlc2lkdWUpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWRt YWNfc3RhcnRfY2hhbihzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuKQo+ICt7Cj4gKwl1MzIgc3Rh cnRiaXQgPSAxIDw8IChhZGNoYW4tPm5vIC8gMik7Cj4gKwo+ICsJc3dpdGNoIChhZG1hY19jaGFu X2RpcmVjdGlvbihhZGNoYW4tPm5vKSkgewo+ICsJY2FzZSBETUFfTUVNX1RPX0RFVjoKPiArCQlh ZG1hY19wb2tlKGFkY2hhbi0+aG9zdCwgUkVHX1RYX1NUQVJULCBzdGFydGJpdCk7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIERNQV9ERVZfVE9fTUVNOgo+ICsJCWFkbWFjX3Bva2UoYWRjaGFuLT5ob3N0 LCBSRUdfUlhfU1RBUlQsIHN0YXJ0Yml0KTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJ YnJlYWs7Cj4gKwl9Cj4gKwlkZXZfZGJnKGFkY2hhbi0+aG9zdC0+ZGV2LCAiY2glZCBzdGFydFxu IiwgYWRjaGFuLT5ubyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkbWFjX3N0b3BfY2hhbihz dHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuKQo+ICt7Cj4gKwl1MzIgc3RvcGJpdCA9IDEgPDwgKGFk Y2hhbi0+bm8gLyAyKTsKPiArCj4gKwlzd2l0Y2ggKGFkbWFjX2NoYW5fZGlyZWN0aW9uKGFkY2hh bi0+bm8pKSB7Cj4gKwljYXNlIERNQV9NRU1fVE9fREVWOgo+ICsJCWFkbWFjX3Bva2UoYWRjaGFu LT5ob3N0LCBSRUdfVFhfU1RPUCwgc3RvcGJpdCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERNQV9E RVZfVE9fTUVNOgo+ICsJCWFkbWFjX3Bva2UoYWRjaGFuLT5ob3N0LCBSRUdfUlhfU1RPUCwgc3Rv cGJpdCk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJZGV2 X2RiZyhhZGNoYW4tPmhvc3QtPmRldiwgImNoJWQgc3RvcFxuIiwgYWRjaGFuLT5ubyk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGFkbWFjX3N0YXJ0X2N1cnJlbnRfdHgoc3RydWN0IGFkbWFjX2No YW4gKmFkY2hhbikKPiArewo+ICsJc3RydWN0IGFkbWFjX2RhdGEgKmFkID0gYWRjaGFuLT5ob3N0 Owo+ICsJaW50IGNoID0gYWRjaGFuLT5ubzsKPiArCj4gKwlhZG1hY19wb2tlKGFkLCBSRUdfQ0hB Tl9JTlRTVEFUVVMoY2gsIGFkLT5pcnFfaW5kZXgpLAo+ICsJCQlTVEFUVVNfREVTQ19ET05FIHwg U1RBVFVTX0VSUik7Cj4gKwlhZG1hY19wb2tlKGFkLCBSRUdfQ0hBTl9DVEwoY2gpLCBSRUdfQ0hB Tl9DVExfUlNUX1JJTkdTKTsKPiArCWFkbWFjX3Bva2UoYWQsIFJFR19DSEFOX0NUTChjaCksIDAp Owo+ICsKPiArCWFkbWFjX2N5Y2xpY193cml0ZV9vbmVfZGVzYyhhZCwgY2gsIGFkY2hhbi0+Y3Vy cmVudF90eCk7Cj4gKwlhZG1hY19zdGFydF9jaGFuKGFkY2hhbik7Cj4gKwlhZG1hY19jeWNsaWNf d3JpdGVfZGVzYyhhZCwgY2gsIGFkY2hhbi0+Y3VycmVudF90eCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGFkbWFjX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ICt7Cj4g KwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gdG9fYWRtYWNfY2hhbihjaGFuKTsKPiArCXN0 cnVjdCBhZG1hY190eCAqdHg7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXNwaW5f bG9ja19pcnFzYXZlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKPiArCWxpc3Rfc3BsaWNlX3RhaWxf aW5pdCgmYWRjaGFuLT5zdWJtaXR0ZWQsICZhZGNoYW4tPmlzc3VlZCk7Cj4gKwlpZiAoIWxpc3Rf ZW1wdHkoJmFkY2hhbi0+aXNzdWVkKSAmJiAhYWRjaGFuLT5jdXJyZW50X3R4KSB7Cj4gKwkJdHgg PSBsaXN0X2ZpcnN0X2VudHJ5KCZhZGNoYW4tPmlzc3VlZCwgc3RydWN0IGFkbWFjX3R4LCBub2Rl KTsKPiArCQlsaXN0X2RlbCgmdHgtPm5vZGUpOwo+ICsKPiArCQlhZGNoYW4tPmN1cnJlbnRfdHgg PSB0eDsKPiArCQlhZGNoYW4tPm5wZXJpb2RfYWNrcyA9IDA7Cj4gKwkJYWRtYWNfc3RhcnRfY3Vy cmVudF90eChhZGNoYW4pOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRjaGFu LT5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWRtYWNfcGF1c2Uoc3RydWN0 IGRtYV9jaGFuICpjaGFuKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gdG9f YWRtYWNfY2hhbihjaGFuKTsKPiArCj4gKwlhZG1hY19zdG9wX2NoYW4oYWRjaGFuKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZG1hY19yZXN1bWUoc3RydWN0IGRt YV9jaGFuICpjaGFuKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gdG9fYWRt YWNfY2hhbihjaGFuKTsKPiArCj4gKwlhZG1hY19zdGFydF9jaGFuKGFkY2hhbik7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWRtYWNfdGVybWluYXRlX2FsbChzdHJ1 Y3QgZG1hX2NoYW4gKmNoYW4pCj4gK3sKPiArCXN0cnVjdCBhZG1hY19jaGFuICphZGNoYW4gPSB0 b19hZG1hY19jaGFuKGNoYW4pOwo+ICsJc3RydWN0IGFkbWFjX3R4ICphZHR4LCAqX2FkdHg7Cj4g Kwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJTElTVF9IRUFEKGhlYWQpOwo+ICsKPiArCXNwaW5f bG9ja19pcnFzYXZlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKPiArCWFkbWFjX3N0b3BfY2hhbihh ZGNoYW4pOwo+ICsJYWRjaGFuLT5jdXJyZW50X3R4ID0gTlVMTDsKPiArCWxpc3Rfc3BsaWNlX3Rh aWxfaW5pdCgmYWRjaGFuLT5zdWJtaXR0ZWQsICZoZWFkKTsKPiArCWxpc3Rfc3BsaWNlX3RhaWxf aW5pdCgmYWRjaGFuLT5pc3N1ZWQsICZoZWFkKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmFkY2hhbi0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShh ZHR4LCBfYWR0eCwgJmhlYWQsIG5vZGUpIHsKPiArCQlsaXN0X2RlbCgmYWR0eC0+bm9kZSk7Cj4g KwkJYWRtYWNfZGVzY19mcmVlKCZhZHR4LT50eCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgYWRtYWNfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRt YV9jaGFuICpjaGFuKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gdG9fYWRt YWNfY2hhbihjaGFuKTsKPiArCXN0cnVjdCBhZG1hY19kYXRhICphZCA9IGFkY2hhbi0+aG9zdDsK PiArCj4gKwlkbWFfY29va2llX2luaXQoJmFkY2hhbi0+Y2hhbik7Cj4gKwlhZG1hY19wb2tlKGFk LCBSRUdfQ0hBTl9JTlRTVEFUVVMoYWRjaGFuLT5ubywgYWQtPmlycV9pbmRleCksCj4gKwkJCVNU QVRVU19ERVNDX0RPTkUgfCBTVEFUVVNfRVJSKTsKPiArCWFkbWFjX3Bva2UoYWQsIFJFR19DSEFO X0lOVE1BU0soYWRjaGFuLT5ubywgYWQtPmlycV9pbmRleCksCj4gKwkJCVNUQVRVU19ERVNDX0RP TkUgfCBTVEFUVVNfRVJSKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBh ZG1hY19mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiArewo+ICsJ c3RydWN0IGFkbWFjX2NoYW4gKmFkY2hhbiA9IHRvX2FkbWFjX2NoYW4oY2hhbik7Cj4gKwo+ICsJ YWRtYWNfdGVybWluYXRlX2FsbChjaGFuKTsKPiArCXRhc2tsZXRfa2lsbCgmYWRjaGFuLT50YXNr bGV0KTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqYWRtYWNfZG1hX29mX3hs YXRlKHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmRtYV9zcGVjLAo+ICsJCQkJCQlzdHJ1Y3Qgb2Zf ZG1hICpvZmRtYSkKPiArewo+ICsJc3RydWN0IGFkbWFjX2RhdGEgKmFkID0gKHN0cnVjdCBhZG1h Y19kYXRhICopIG9mZG1hLT5vZl9kbWFfZGF0YTsKPiArCXVuc2lnbmVkIGludCBpbmRleDsKPiAr Cj4gKwlpZiAoZG1hX3NwZWMtPmFyZ3NfY291bnQgIT0gMSkKPiArCQlyZXR1cm4gTlVMTDsKPiAr Cj4gKwlpbmRleCA9IGRtYV9zcGVjLT5hcmdzWzBdOwo+ICsKPiArCWlmIChpbmRleCA+PSBhZC0+ bmNoYW5uZWxzKSB7Cj4gKwkJZGV2X2VycihhZC0+ZGV2LCAiY2hhbm5lbCBpbmRleCAldSBvdXQg b2YgYm91bmRzXG4iLCBpbmRleCk7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuICZhZC0+Y2hhbm5lbHNbaW5kZXhdLmNoYW47Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWRt YWNfZHJhaW5fcmVwb3J0cyhzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGludCBjaGFubm8pCj4gK3sK PiArCWludCBjb3VudDsKPiArCj4gKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA0OyBjb3VudCsr KSB7Cj4gKwkJdTMyIGNvdW50dmFsX2hpLCBjb3VudHZhbF9sbywgdW5rMSwgZmxhZ3M7Cj4gKwo+ ICsJCWlmIChhZG1hY19wZWVrKGFkLCBSRUdfUkVQT1JUX1JJTkcoY2hhbm5vKSkgJiBSSU5HX0VN UFRZKQo+ICsJCQlicmVhazsKPiArCj4gKwkJY291bnR2YWxfbG8gPSBhZG1hY19wZWVrKGFkLCBS RUdfUkVQT1JUX1JFQUQoY2hhbm5vKSk7Cj4gKwkJY291bnR2YWxfaGkgPSBhZG1hY19wZWVrKGFk LCBSRUdfUkVQT1JUX1JFQUQoY2hhbm5vKSk7Cj4gKwkJdW5rMSA9ICAgICAgICBhZG1hY19wZWVr KGFkLCBSRUdfUkVQT1JUX1JFQUQoY2hhbm5vKSk7Cj4gKwkJZmxhZ3MgPSAgICAgICBhZG1hY19w ZWVrKGFkLCBSRUdfUkVQT1JUX1JFQUQoY2hhbm5vKSk7Cj4gKwo+ICsJCWRldl9kYmcoYWQtPmRl diwgImNoJWQgcmVwb3J0OiBjb3VudHZhbD0weCVsbHggdW5rMT0weCV4IGZsYWdzPTB4JXhcbiIs Cj4gKwkJCWNoYW5ubywgKCh1NjQpIGNvdW50dmFsX2hpKSA8PCAzMiB8IGNvdW50dmFsX2xvLCB1 bmsxLCBmbGFncyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhZG1hY19oYW5kbGVfc3RhdHVzX2VycihzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGlu dCBjaGFubm8pCj4gK3sKPiArCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwo+ICsKPiArCWlmIChhZG1h Y19wZWVrKGFkLCBSRUdfREVTQ19SSU5HKGNoYW5ubykgJiBSSU5HX0VSUikpIHsKPiArCQlhZG1h Y19wb2tlKGFkLCBSRUdfREVTQ19SSU5HKGNoYW5ubyksIFJJTkdfRVJSKTsKPiArCQlkZXZfZXJy KGFkLT5kZXYsICJjaCVkIGRlc2NyaXB0b3IgcmluZyBlcnJvclxuIiwgY2hhbm5vKTsKCkl0IGxv b2tzIHRoaXMgaXMgZXhlY3V0ZWQgb24gZXZlcnkgaW50ZXJydXB0LCBzbyB5b3UgbWlnaHQgZmxv b2QgdGhlCmRtZXNnLiBUaGlzIHNob3VsZCBiZSByYXRlbGltaXRlZC4KCj4gKwkJaGFuZGxlZCA9 IHRydWU7Cj4gKwl9Cj4gKwo+ICsJaWYgKGFkbWFjX3BlZWsoYWQsIFJFR19SRVBPUlRfUklORyhj aGFubm8pKSAmIFJJTkdfRVJSKSB7Cj4gKwkJYWRtYWNfcG9rZShhZCwgUkVHX1JFUE9SVF9SSU5H KGNoYW5ubyksIFJJTkdfRVJSKTsKPiArCQlkZXZfZXJyKGFkLT5kZXYsICJjaCVkIHJlcG9ydCBy aW5nIGVycm9yXG4iLCBjaGFubm8pOwo+ICsJCWhhbmRsZWQgPSB0cnVlOwo+ICsJfQo+ICsKPiAr CWlmICh1bmxpa2VseSghaGFuZGxlZCkpIHsKPiArCQlkZXZfZXJyKGFkLT5kZXYsICJjaCVkIHVu a25vd24gZXJyb3IsIG1hc2tpbmcgZXJyb3JzIGFzIGNhdXNlIG9mIElSUXNcbiIsIGNoYW5ubyk7 Cj4gKwkJYWRtYWNfbW9kaWZ5KGFkLCBSRUdfQ0hBTl9JTlRNQVNLKGNoYW5ubywgYWQtPmlycV9p bmRleCksCj4gKwkJCQlTVEFUVVNfRVJSLCAwKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYWRtYWNfaGFuZGxlX3N0YXR1c19kZXNjX2RvbmUoc3RydWN0IGFkbWFjX2RhdGEgKmFkLCBp bnQgY2hhbm5vKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gJmFkLT5jaGFu bmVsc1tjaGFubm9dOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCWludCBucmVwb3J0czsK PiArCj4gKwlhZG1hY19wb2tlKGFkLCBSRUdfQ0hBTl9JTlRTVEFUVVMoY2hhbm5vLCBhZC0+aXJx X2luZGV4KSwKPiArCQkJCVNUQVRVU19ERVNDX0RPTkUpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFz YXZlKCZhZGNoYW4tPmxvY2ssIGZsYWdzKTsKPiArCW5yZXBvcnRzID0gYWRtYWNfZHJhaW5fcmVw b3J0cyhhZCwgY2hhbm5vKTsKPiArCj4gKwlpZiAoYWRjaGFuLT5jdXJyZW50X3R4KSB7Cj4gKwkJ c3RydWN0IGFkbWFjX3R4ICp0eCA9IGFkY2hhbi0+Y3VycmVudF90eDsKPiArCj4gKwkJYWRjaGFu LT5ucGVyaW9kX2Fja3MgKz0gbnJlcG9ydHM7Cj4gKwkJdHgtPnJlY2xhaW1lZF9wb3MgKz0gbnJl cG9ydHMgKiB0eC0+cGVyaW9kX2xlbjsKPiArCQl0eC0+cmVjbGFpbWVkX3BvcyAlPSAyICogdHgt PmJ1Zl9sZW47Cj4gKwo+ICsJCWFkbWFjX2N5Y2xpY193cml0ZV9kZXNjKGFkLCBjaGFubm8sIHR4 KTsKPiArCQl0YXNrbGV0X3NjaGVkdWxlKCZhZGNoYW4tPnRhc2tsZXQpOwo+ICsJfQo+ICsJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmYWRjaGFuLT5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGFkbWFjX2hhbmRsZV9jaGFuX2ludChzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQsIGlu dCBubykKPiArewo+ICsJdTMyIGNhdXNlID0gYWRtYWNfcGVlayhhZCwgUkVHX0NIQU5fSU5UU1RB VFVTKG5vLCBhZC0+aXJxX2luZGV4KSk7Cj4gKwo+ICsJaWYgKGNhdXNlICYgU1RBVFVTX0VSUikK PiArCQlhZG1hY19oYW5kbGVfc3RhdHVzX2VycihhZCwgbm8pOwo+ICsKPiArCWlmIChjYXVzZSAm IFNUQVRVU19ERVNDX0RPTkUpCj4gKwkJYWRtYWNfaGFuZGxlX3N0YXR1c19kZXNjX2RvbmUoYWQs IG5vKTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGFkbWFjX2ludGVycnVwdChpbnQg aXJxLCB2b2lkICpkZXZpZCkKPiArewo+ICsJc3RydWN0IGFkbWFjX2RhdGEgKmFkID0gZGV2aWQ7 Cj4gKwl1MzIgcnhfaW50c3RhdGUsIHR4X2ludHN0YXRlOwo+ICsJaW50IGk7Cj4gKwo+ICsJcnhf aW50c3RhdGUgPSBhZG1hY19wZWVrKGFkLCBSRUdfUlhfSU5UU1RBVEUoYWQtPmlycV9pbmRleCkp Owo+ICsJdHhfaW50c3RhdGUgPSBhZG1hY19wZWVrKGFkLCBSRUdfVFhfSU5UU1RBVEUoYWQtPmly cV9pbmRleCkpOwo+ICsKPiArCWlmICghdHhfaW50c3RhdGUgJiYgIXJ4X2ludHN0YXRlKQo+ICsJ CXJldHVybiBJUlFfTk9ORTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgYWQtPm5jaGFubmVsczsg aSArPSAyKSB7Cj4gKwkJaWYgKHR4X2ludHN0YXRlICYgMSkKPiArCQkJYWRtYWNfaGFuZGxlX2No YW5faW50KGFkLCBpKTsKPiArCQl0eF9pbnRzdGF0ZSA+Pj0gMTsKPiArCX0KPiArCj4gKwlmb3Ig KGkgPSAxOyBpIDwgYWQtPm5jaGFubmVsczsgaSArPSAyKSB7Cj4gKwkJaWYgKHJ4X2ludHN0YXRl ICYgMSkKPiArCQkJYWRtYWNfaGFuZGxlX2NoYW5faW50KGFkLCBpKTsKPiArCQlyeF9pbnRzdGF0 ZSA+Pj0gMTsKPiArCX0KPiArCj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGFkbWFjX2NoYW5fdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCj4g K3sKPiArCXN0cnVjdCBhZG1hY19jaGFuICphZGNoYW4gPSBmcm9tX3Rhc2tsZXQoYWRjaGFuLCB0 LCB0YXNrbGV0KTsKPiArCXN0cnVjdCBhZG1hY190eCAqYWR0eDsKPiArCXN0cnVjdCBkbWFlbmdp bmVfZGVzY19jYWxsYmFjayBjYjsKPiArCXN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0IHR4X3Jlc3Vs dDsKPiArCWludCBuYWNrczsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZhZGNoYW4tPmxvY2spOwo+ ICsJYWR0eCA9IGFkY2hhbi0+Y3VycmVudF90eDsKPiArCW5hY2tzID0gYWRjaGFuLT5ucGVyaW9k X2Fja3M7Cj4gKwlhZGNoYW4tPm5wZXJpb2RfYWNrcyA9IDA7Cj4gKwlzcGluX3VubG9ja19pcnEo JmFkY2hhbi0+bG9jayk7Cj4gKwo+ICsJaWYgKCFhZHR4IHx8ICFuYWNrcykKPiArCQlyZXR1cm47 Cj4gKwo+ICsJdHhfcmVzdWx0LnJlc3VsdCA9IERNQV9UUkFOU19OT0VSUk9SOwo+ICsJdHhfcmVz dWx0LnJlc2lkdWUgPSAwOwo+ICsKPiArCWRtYWVuZ2luZV9kZXNjX2dldF9jYWxsYmFjaygmYWR0 eC0+dHgsICZjYik7Cj4gKwl3aGlsZSAobmFja3MtLSkKPiArCQlkbWFlbmdpbmVfZGVzY19jYWxs YmFja19pbnZva2UoJmNiLCAmdHhfcmVzdWx0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZG1h Y19kZXZpY2VfY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKPiArCQkJCSBzdHJ1Y3QgZG1h X3NsYXZlX2NvbmZpZyAqY29uZmlnKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRtYWNfY2hhbiAqYWRjaGFu ID0gdG9fYWRtYWNfY2hhbihjaGFuKTsKPiArCXN0cnVjdCBhZG1hY19kYXRhICphZCA9IGFkY2hh bi0+aG9zdDsKPiArCWJvb2wgaXNfdHggPSBhZG1hY19jaGFuX2RpcmVjdGlvbihhZGNoYW4tPm5v KSA9PSBETUFfTUVNX1RPX0RFVjsKPiArCWludCB3b3Jkc2l6ZSA9IDA7Cj4gKwl1MzIgYnVzX3dp ZHRoID0gMDsKPiArCj4gKwlzd2l0Y2ggKGlzX3R4ID8gY29uZmlnLT5kc3RfYWRkcl93aWR0aCA6 IGNvbmZpZy0+c3JjX2FkZHJfd2lkdGgpIHsKPiArCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFf QllURToKPiArCQl3b3Jkc2l6ZSA9IDE7Cj4gKwkJYnVzX3dpZHRoIHw9IEJVU19XSURUSF84QklU Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKPiArCQl3 b3Jkc2l6ZSA9IDI7Cj4gKwkJYnVzX3dpZHRoIHw9IEJVU19XSURUSF8xNkJJVDsKPiArCQlicmVh azsKPiArCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM6Cj4gKwkJd29yZHNpemUgPSA0 Owo+ICsJCWJ1c193aWR0aCB8PSBCVVNfV0lEVEhfMzJCSVQ7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZh dWx0Ogo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBXZSB0YWtl IHBvcnRfd2luZG93X3NpemUgdG8gYmUgdGhlIG51bWJlciBvZiB3b3JkcyBpbiBhIGZyYW1lLgo+ ICsJICoKPiArCSAqIFRoZSBjb250cm9sbGVyIGhhcyBzb21lIG1lYW5zIG9mIG91dC1vZi1iYW5k IHNpZ25hbGxpbmcsIHRvIHRoZSBwZXJpcGhlcmFsLAo+ICsJICogb2Ygd29yZHMgcG9zaXRpb24g aW4gYSBmcmFtZS4gVGhhdCdzIHdoZXJlIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgY29udHJvbAo+ ICsJICogY29tZXMgZnJvbS4KPiArCSAqLwo+ICsJc3dpdGNoIChpc190eCA/IGNvbmZpZy0+ZHN0 X3BvcnRfd2luZG93X3NpemUgOiBjb25maWctPnNyY19wb3J0X3dpbmRvd19zaXplKSB7Cj4gKwlj YXNlIDAgLi4uIDE6Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI6Cj4gKwkJYnVzX3dpZHRoIHw9IEJV U19XSURUSF9GUkFNRV8yX1dPUkRTOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA0Ogo+ICsJCWJ1c193 aWR0aCB8PSBCVVNfV0lEVEhfRlJBTUVfNF9XT1JEUzsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJYWRtYWNfcG9rZShhZCwgUkVHX0JV U19XSURUSChhZGNoYW4tPm5vKSwgYnVzX3dpZHRoKTsKPiArCj4gKwkvKgo+ICsJICogQnkgRklG T0NUTF9MSU1JVCB3ZSBzZWVtIHRvIHNldCB0aGUgbWF4aW1hbCBudW1iZXIgb2YgYnl0ZXMgYWxs b3dlZCB0byBiZQo+ICsJICogaGVsZCBpbiBjb250cm9sbGVyJ3MgcGVyLWNoYW5uZWwgRklGTy4g VHJhbnNmZXJzIHNlZW0gdG8gYmUgdHJpZ2dlcmVkCj4gKwkgKiBhcm91bmQgdGhlIHRpbWUgRklG TyBvY2N1cGFuY3kgdG91Y2hlcyBGSUZPQ1RMX1RIUkVTSE9MRC4KPiArCSAqCj4gKwkgKiBUaGUg bnVtYmVycyB3ZSBzZXQgYXJlIG1vcmUgb3IgbGVzcyBhcmJpdHJhcnkuCj4gKwkgKi8KPiArCWFk bWFjX3Bva2UoYWQsIFJFR19DSEFOX0ZJRk9DVEwoYWRjaGFuLT5ubyksCj4gKwkJCUZJRUxEX1BS RVAoQ0hBTl9GSUZPQ1RMX0xJTUlULCAweDMwICogd29yZHNpemUpCj4gKwkJCXwgRklFTERfUFJF UChDSEFOX0ZJRk9DVExfVEhSRVNIT0xELCAweDE4ICogd29yZHNpemUpKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZG1hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2 Lm9mX25vZGU7Cj4gKwlzdHJ1Y3QgYWRtYWNfZGF0YSAqYWQ7Cj4gKwlzdHJ1Y3QgZG1hX2Rldmlj ZSAqZG1hOwo+ICsJaW50IG5jaGFubmVsczsKPiArCWludCBlcnIsIGlycSwgaTsKPiArCj4gKwll cnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImRtYS1jaGFubmVscyIsICZuY2hhbm5lbHMp Owo+ICsJaWYgKGVyciB8fCBuY2hhbm5lbHMgPiBOQ0hBTk5FTFNfTUFYKSB7Cj4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAibWlzc2luZyBvciBpbnZhbGlkIGRtYS1jaGFubmVscyBwcm9wZXJ0eVxu Iik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJYWQgPSBkZXZtX2t6YWxsb2Mo JnBkZXYtPmRldiwgc3RydWN0X3NpemUoYWQsIGNoYW5uZWxzLCBuY2hhbm5lbHMpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghYWQpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgYWQpOwo+ICsJYWQtPmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlhZC0+ bmNoYW5uZWxzID0gbmNoYW5uZWxzOwo+ICsKPiArCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KG5wLCAiYXBwbGUsaW50ZXJuYWwtaXJxLWRlc3RpbmF0aW9uIiwKPiArCQkJCQkmYWQtPmlycV9p bmRleCk7Cj4gKwlpZiAoZXJyIHx8IGFkLT5pcnFfaW5kZXggPj0gSVJRX05JTkRJQ0VTKSB7Cj4g KwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBvciBpbnZhbGlkIGFwcGxlLGludGVybmFs LWlycS1kZXN0aW5hdGlvbiBwcm9wZXJ0eVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiArCWlmIChpcnEgPCAw KSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIG9idGFpbiBpbnRlcnJ1cHQg cmVzb3VyY2VcbiIpOwo+ICsJCXJldHVybiBpcnE7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gZGV2bV9y ZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGFkbWFjX2ludGVycnVwdCwKPiArCQkJCQkwLCBk ZXZfbmFtZSgmcGRldi0+ZGV2KSwgYWQpOwoKQWxpZ24gdGhlIGFyZ3VtZW50cyB3aXRoIHByZXZp b3VzIGxpbmUuIFRoaXMgYXBwbGllcyBldmVyeXdoZXJlIGluIHRoZQpkcml2ZXIuCgo+ICsJaWYg KGVycikgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBpbnRl cnJ1cHQ6ICVkXG4iLCBlcnIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJYWQtPmJh c2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7Cj4gKwlpZiAoSVNf RVJSKGFkLT5iYXNlKSkgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBvYnRh aW4gTU1JTyByZXNvdXJjZVxuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoYWQtPmJhc2UpOwo+ICsJ fQo+ICsKPiArCWRtYSA9ICZhZC0+ZG1hOwo+ICsKPiArCWRtYV9jYXBfc2V0KERNQV9QUklWQVRF LCBkbWEtPmNhcF9tYXNrKTsKPiArCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGRtYS0+Y2FwX21h c2spOwo+ICsKPiArCWRtYS0+ZGV2ID0gJnBkZXYtPmRldjsKPiArCWRtYS0+ZGV2aWNlX2FsbG9j X2NoYW5fcmVzb3VyY2VzID0gYWRtYWNfYWxsb2NfY2hhbl9yZXNvdXJjZXM7Cj4gKwlkbWEtPmRl dmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gYWRtYWNfZnJlZV9jaGFuX3Jlc291cmNlczsKPiAr CWRtYS0+ZGV2aWNlX3R4X3N0YXR1cyA9IGFkbWFjX3R4X3N0YXR1czsKPiArCWRtYS0+ZGV2aWNl X2lzc3VlX3BlbmRpbmcgPSBhZG1hY19pc3N1ZV9wZW5kaW5nOwo+ICsJZG1hLT5kZXZpY2VfdGVy bWluYXRlX2FsbCA9IGFkbWFjX3Rlcm1pbmF0ZV9hbGw7Cj4gKwlkbWEtPmRldmljZV9wcmVwX2Rt YV9jeWNsaWMgPSBhZG1hY19wcmVwX2RtYV9jeWNsaWM7Cj4gKwlkbWEtPmRldmljZV9jb25maWcg PSBhZG1hY19kZXZpY2VfY29uZmlnOwo+ICsJZG1hLT5kZXZpY2VfcGF1c2UgPSBhZG1hY19wYXVz ZTsKPiArCWRtYS0+ZGV2aWNlX3Jlc3VtZSA9IGFkbWFjX3Jlc3VtZTsKPiArCj4gKwlkbWEtPmRp cmVjdGlvbnMgPSBCSVQoRE1BX01FTV9UT19ERVYpIHwgQklUKERNQV9ERVZfVE9fTUVNKTsKPiAr CWRtYS0+cmVzaWR1ZV9ncmFudWxhcml0eSA9IERNQV9SRVNJRFVFX0dSQU5VTEFSSVRZX0JVUlNU Owo+ICsJZG1hLT5kc3RfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllU RSkgfAo+ICsJCQlCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVMpIHwKPiArCQkJQklUKERN QV9TTEFWRV9CVVNXSURUSF80X0JZVEVTKTsKPiArCj4gKwlJTklUX0xJU1RfSEVBRCgmZG1hLT5j aGFubmVscyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbmNoYW5uZWxzOyBpKyspIHsKPiArCQlzdHJ1 Y3QgYWRtYWNfY2hhbiAqYWRjaGFuID0gJmFkLT5jaGFubmVsc1tpXTsKPiArCj4gKwkJYWRjaGFu LT5ob3N0ID0gYWQ7Cj4gKwkJYWRjaGFuLT5ubyA9IGk7Cj4gKwkJYWRjaGFuLT5jaGFuLmRldmlj ZSA9ICZhZC0+ZG1hOwo+ICsJCXNwaW5fbG9ja19pbml0KCZhZGNoYW4tPmxvY2spOwo+ICsJCUlO SVRfTElTVF9IRUFEKCZhZGNoYW4tPnN1Ym1pdHRlZCk7Cj4gKwkJSU5JVF9MSVNUX0hFQUQoJmFk Y2hhbi0+aXNzdWVkKTsKPiArCQlsaXN0X2FkZF90YWlsKCZhZGNoYW4tPmNoYW4uZGV2aWNlX25v ZGUsICZkbWEtPmNoYW5uZWxzKTsKPiArCQl0YXNrbGV0X3NldHVwKCZhZGNoYW4tPnRhc2tsZXQs IGFkbWFjX2NoYW5fdGFza2xldCk7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gZG1hX2FzeW5jX2Rldmlj ZV9yZWdpc3RlcigmYWQtPmRtYSk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERNQSBkZXZpY2U6ICVkXG4iLCBlcnIpOwoKVXNlIGRl dl9lcnJfcHJvYmUoKSBoZXJlIGFuZCBpbiBvdGhlciBwbGFjZXMuCgo+ICsJCXJldHVybiBlcnI7 Cj4gKwl9Cj4gKwo+ICsJZXJyID0gb2ZfZG1hX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGRldi0+ZGV2 Lm9mX25vZGUsIGFkbWFjX2RtYV9vZl94bGF0ZSwgYWQpOwo+ICsJaWYgKGVycikgewo+ICsJCWRl dl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciB3aXRoIE9GOiAlZFxuIiwgZXJy KTsKPiArCQlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmFkLT5kbWEpOwo+ICsJCXJldHVy biBlcnI7Cj4gKwl9Cj4gKwo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiYWxsIGdvb2QsIHJlYWR5 IHRvIGdvIVxuIik7CgpObyBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIHNpbXBsZSBwcm9iZSBzdWNj ZXNzLCBwbGVhc2UuCgoKQmVzdCByZWdhcmRzLApLcnp5c3p0b2YKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK