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 X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62A90C433DF for ; Mon, 12 Oct 2020 10:48:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E7029206B6 for ; Mon, 12 Oct 2020 10:48:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="CQuFWIgu" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387989AbgJLKsc (ORCPT ); Mon, 12 Oct 2020 06:48:32 -0400 Received: from mail-dm6nam11on2076.outbound.protection.outlook.com ([40.107.223.76]:59488 "EHLO NAM11-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387864AbgJLKrx (ORCPT ); Mon, 12 Oct 2020 06:47:53 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RIBkD4CvHGnQfyZUeNAm+ylmZ5gKjfyF3/KBxQNYd7VWOUskIzHZdUPwVY5X+aPVEu038KputecMMWN4g0NpZMPOeQluEVLkdmL+t0jmzlaC+4TEc7JSL+YwkDxMfKa3kdpdJNhWXNbiBN9HDxzdLuGroSPBlZJ04+7aoEd860cwmtUUATq57z20cVjUpq56kUFOqucbQMj+dmuw8jloQBa+1HFHQpepadeh8Do/DUEJNjwF9H+c1XU6SA1WI8Sa0VuS5jcP9A9ntZ5Lwup1NxUCxcpET+qBmUD6qxfK/bykmN1HlkuXEq4B9YJh31Ig4+zDAJfhV4g2qKdkbCjN7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IIiqqNB94B6kFLuhsr8N7i+nwNhZIjpAUFPBisdsGMs=; b=KXt0Sxxm6zR2hLn1T7YYrNT5/riFKDzLv3SZdoPNgTIGZOY+QvdLFAvxMvSRIPGqs3rNpPfikoUzOkKJQ2F7685YdsLY1bNTmkmYwHE226Y2BG7EgQUoe7D18qqRC6AoJ1s0lR4f3T13CNM9dAI0B3Ka79WlG51L8u7DGLBu8IJhfrrklUoC4IKDqQNlPzPJwV+W7fS0K6t792wrbt1XWpp1oVCrF7qtrczk947BuIcbao3G1BqU3q/YjYwnHCeO4Gx9PzZfssvQP4CgkS2hFLqanITM6Aikr9VR5f1dzK1qRY9UGF/b1gzh8iVC6/OQpFESVjM5ygDunxDOSn0E4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IIiqqNB94B6kFLuhsr8N7i+nwNhZIjpAUFPBisdsGMs=; b=CQuFWIgu8yhTwlLGISW5ID3P1xW754vJgcJydSoodipb05wTRZRCPp8UNXExeIKkH+QBp8pAWBibgkVXQOwg7LJBFvUbKDpFqk6drSFArYn3MFAhPmJQv+crWlhOaJxSDI+yuLTmoaqR4Kq3Yb1CImnkLNrAg60eWjNPV6AHdGs= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SA0PR11MB4734.namprd11.prod.outlook.com (2603:10b6:806:99::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.23; Mon, 12 Oct 2020 10:47:24 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a%5]) with mapi id 15.20.3455.029; Mon, 12 Oct 2020 10:47:24 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH 10/23] wfx: add bh.c/bh.h Date: Mon, 12 Oct 2020 12:46:35 +0200 Message-Id: <20201012104648.985256-11-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> References: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.home (82.67.86.106) by PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.21 via Frontend Transport; Mon, 12 Oct 2020 10:47:22 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8b2420cd-9539-4db8-be97-08d86e9c3441 X-MS-TrafficTypeDiagnostic: SA0PR11MB4734: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kxLEmBiClJTzxek1fpJQGILKYRS/v8OdedxQnfnysoDfDrTMyPQx3gKNWzPR8Uv9tNDmBZbR94tSXBt+fmoAhxYjYU+pl2wrOhnoqTUGryqSkm0kDhM4aHDAYd2X1m8jBK3nn4LySyw+jP4n4ohkNdJxj7Cq3JsEvHojvnNwnQTRYTkAKWXQqZm42Flcoi3+t8vhwCsL2Be1FgolMryMGYYStxnVrInbFfQ/3zkt7ymZaV35NTqPlK6IiRJblKbQcx97LSigwsBZXu2XdjBPNpR5WjXvWZLyCKw6nC5gHBaX559uAT4Q6fXilRh7PeLxojNOEWVeqMcxfUOTqmvY5w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(366004)(136003)(346002)(376002)(66556008)(66476007)(6512007)(26005)(36756003)(66946007)(16526019)(186003)(316002)(4326008)(2616005)(956004)(1076003)(30864003)(5660300002)(107886003)(6486002)(54906003)(86362001)(8676002)(83380400001)(8936002)(66574015)(52116002)(2906002)(6506007)(8886007)(6666004)(478600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 6uPrs4Zo8m12KHd8Hrah2IYtGgwC7ioTtJUQJXE8FRC9YLdahKTGC8OZKPG0/2uvx++qhw+uEfXX0ANfUnAvU2DtgqZEUlWCvGcMI6iKKmnpTa3y+HdUFRxMxzJU9gVdxjxSS3nChW9Y2mZLxafLJjmEu5qaJDiwG10kv6BzlAxvVtES6P/vwW4ym/rKwKrWBlu5WtM9BWoMdvP3BjN3tWd6eZPbtdbacQkerpdwI1raj14nL8betZP3rt7JuvFSAcHgHOXbIekDpSUfj5/1VT9p9Aa4vMhzr//jxV3aRbX05lCpq/wueUKAXPviyug+c6ohDP1vngPFULUUVZXAKiTyVbOaV0cZUm3WDn9vIqNANtpuh4Tnw0KKu/P6m6iP76zgnQ3h3gtqIP4w056Mk0yxRTQJIeQrKdEya5VitJjSsvIsJfNDdubhLmEefaaBj7LLZFRM/T725ZV/MWgd7gNsxy60+gCrO9lIrnIlHExH3UDlrtQoBmsjhh41SWsaOj9ZQmqWR+mcJUjqmmXau8n3EkTkEFquWIUWLt8CmW0neBgZJWKezutI4FV28tV1NTGvasNDaSCOuKA1mSyAWj75wDAvSVKhWJ5K4HUM+08lTstcP1yasLSKnnLd/cIYcIjA8fF2aXz6VAuUeCIBAw== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b2420cd-9539-4db8-be97-08d86e9c3441 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2020 10:47:24.6101 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2GbixYQoryllMvMZabffNuYiwpyS99h9Zr4Oo4WvoM2h7LUOUbcwEGPkTN+dWDbJM+RcuKEnhqVC/4xGh0kc/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4734 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguYyB8IDMzMyArKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmgu aCB8ICAzMyArKysKIDIgZmlsZXMgY2hhbmdlZCwgMzY2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi4yZmZhNTg3YWVmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2JoLmMKQEAgLTAsMCArMSwzMzMgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbnRlcnJ1cHQgYm90dG9tIGhhbGYgKEJI KS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMs IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqLworI2luY2x1ZGUg PGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2lu Y2x1ZGUgImJoLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiaHdpby5oIgorI2luY2x1 ZGUgInRyYWNlcy5oIgorI2luY2x1ZGUgImhpZl9yeC5oIgorI2luY2x1ZGUgImhpZl9hcGlfY21k LmgiCisKK3N0YXRpYyB2b2lkIGRldmljZV93YWtldXAoc3RydWN0IHdmeF9kZXYgKndkZXYpCit7 CisJaW50IG1heF9yZXRyeSA9IDM7CisKKwlpZiAoIXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwKQor CQlyZXR1cm47CisJaWYgKGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlv X3dha2V1cCkgPj0gMCkKKwkJcmV0dXJuOworCisJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2 LCAxLCA0KSkgeworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRhdGEuZ3Bpb193 YWtldXAsIDEpOworCQlpZiAoIWNvbXBsZXRpb25fZG9uZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkp KQorCQkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOworCQlyZXR1cm47CisJfQorCWZvciAoOzsp IHsKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAx KTsKKwkJLy8gY29tcGxldGlvbi5oIGRvZXMgbm90IHByb3ZpZGUgYW55IGZ1bmN0aW9uIHRvIHdh aXQKKwkJLy8gY29tcGxldGlvbiB3aXRob3V0IGNvbnN1bWUgaXQgKGEga2luZCBvZgorCQkvLyB3 YWl0X2Zvcl9jb21wbGV0aW9uX2RvbmVfdGltZW91dCgpKS4gU28gd2UgaGF2ZSB0byBlbXVsYXRl CisJCS8vIGl0LgorCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5oaWYu Y3RybF9yZWFkeSwKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMikpKSB7CisJCQljb21wbGV0ZSgm d2Rldi0+aGlmLmN0cmxfcmVhZHkpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKG1heF9yZXRy eS0tID4gMCkgeworCQkJLy8gT2xkZXIgZmlybXdhcmVzIGhhdmUgYSByYWNlIGluIHNsZWVwL3dh a2UtdXAgcHJvY2Vzcy4KKwkJCS8vIFJlZG8gdGhlIHByb2Nlc3MgaXMgc3VmZmljaWVudCB0byB1 bmZyZWV6ZSB0aGUKKwkJCS8vIGNoaXAuCisJCQlkZXZfZXJyKHdkZXYtPmRldiwgInRpbWVvdXQg d2hpbGUgd2FrZSB1cCBjaGlwXG4iKTsKKwkJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2 LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7CisJCQl1c2xlZXBfcmFuZ2UoMjAwMCwgMjUwMCk7CisJ CX0gZWxzZSB7CisJCQlkZXZfZXJyKHdkZXYtPmRldiwgIm1heCB3YWtlLXVwIHJldHJpZXMgcmVh Y2hlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9y ZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQoreworCWlmICghd2Rldi0+cGRhdGEuZ3Bpb193 YWtldXApCisJCXJldHVybjsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0 YS5ncGlvX3dha2V1cCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcnhfaGVscGVyKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCBzaXplX3QgcmVhZF9sZW4sIGludCAqaXNfY25mKQoreworCXN0cnVjdCBza19i dWZmICpza2I7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzaXplX3QgYWxsb2NfbGVuOworCXNp emVfdCBjb21wdXRlZF9sZW47CisJaW50IHJlbGVhc2VfY291bnQ7CisJaW50IHBpZ2d5YmFjayA9 IDA7CisKKwlXQVJOKHJlYWRfbGVuID4gcm91bmRfZG93bigweEZGRiwgMikgKiBzaXplb2YodTE2 KSwKKwkgICAgICIlczogcmVxdWVzdCBleGNlZWQgV0Z4IGNhcGFiaWxpdHkiLCBfX2Z1bmNfXyk7 CisKKwkvLyBBZGQgMiB0byB0YWtlIGludG8gYWNjb3VudCBwaWdneWJhY2sgc2l6ZQorCWFsbG9j X2xlbiA9IHdkZXYtPmh3YnVzX29wcy0+YWxpZ25fc2l6ZSh3ZGV2LT5od2J1c19wcml2LCByZWFk X2xlbiArIDIpOworCXNrYiA9IGRldl9hbGxvY19za2IoYWxsb2NfbGVuKTsKKwlpZiAoIXNrYikK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAod2Z4X2RhdGFfcmVhZCh3ZGV2LCBza2ItPmRhdGEs IGFsbG9jX2xlbikpCisJCWdvdG8gZXJyOworCisJcGlnZ3liYWNrID0gbGUxNl90b19jcHVwKChf X2xlMTYgKikoc2tiLT5kYXRhICsgYWxsb2NfbGVuIC0gMikpOworCV90cmFjZV9waWdneWJhY2so cGlnZ3liYWNrLCBmYWxzZSk7CisKKwloaWYgPSAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7 CisJV0FSTihoaWYtPmVuY3J5cHRlZCAmIDB4MywgImVuY3J5cHRpb24gaXMgdW5zdXBwb3J0ZWQi KTsKKwlpZiAoV0FSTihyZWFkX2xlbiA8IHNpemVvZihzdHJ1Y3QgaGlmX21zZyksICJjb3JydXB0 ZWQgcmVhZCIpKQorCQlnb3RvIGVycjsKKwljb21wdXRlZF9sZW4gPSBsZTE2X3RvX2NwdShoaWYt Pmxlbik7CisJY29tcHV0ZWRfbGVuID0gcm91bmRfdXAoY29tcHV0ZWRfbGVuLCAyKTsKKwlpZiAo Y29tcHV0ZWRfbGVuICE9IHJlYWRfbGVuKSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LCAiaW5jb25z aXN0ZW50IG1lc3NhZ2UgbGVuZ3RoOiAlenUgIT0gJXp1XG4iLAorCQkJY29tcHV0ZWRfbGVuLCBy ZWFkX2xlbik7CisJCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgImhpZjogIiwgRFVNUF9QUkVG SVhfT0ZGU0VULCAxNiwgMSwKKwkJCSAgICAgICBoaWYsIHJlYWRfbGVuLCB0cnVlKTsKKwkJZ290 byBlcnI7CisJfQorCisJaWYgKCEoaGlmLT5pZCAmIEhJRl9JRF9JU19JTkRJQ0FUSU9OKSkgewor CQkoKmlzX2NuZikrKzsKKwkJaWYgKGhpZi0+aWQgPT0gSElGX0NORl9JRF9NVUxUSV9UUkFOU01J VCkKKwkJCXJlbGVhc2VfY291bnQgPSAoKHN0cnVjdCBoaWZfY25mX211bHRpX3RyYW5zbWl0ICop aGlmLT5ib2R5KS0+bnVtX3R4X2NvbmZzOworCQllbHNlCisJCQlyZWxlYXNlX2NvdW50ID0gMTsK KwkJV0FSTih3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkIDwgcmVsZWFzZV9jb3VudCwgImNvcnJ1 cHRlZCBidWZmZXIgY291bnRlciIpOworCQl3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkIC09IHJl bGVhc2VfY291bnQ7CisJfQorCV90cmFjZV9oaWZfcmVjdihoaWYsIHdkZXYtPmhpZi50eF9idWZm ZXJzX3VzZWQpOworCisJaWYgKGhpZi0+aWQgIT0gSElGX0lORF9JRF9FWENFUFRJT04gJiYgaGlm LT5pZCAhPSBISUZfSU5EX0lEX0VSUk9SKSB7CisJCWlmIChoaWYtPnNlcW51bSAhPSB3ZGV2LT5o aWYucnhfc2VxbnVtKQorCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAid3JvbmcgbWVzc2FnZSBzZXF1 ZW5jZTogJWQgIT0gJWRcbiIsCisJCQkJIGhpZi0+c2VxbnVtLCB3ZGV2LT5oaWYucnhfc2VxbnVt KTsKKwkJd2Rldi0+aGlmLnJ4X3NlcW51bSA9IChoaWYtPnNlcW51bSArIDEpICUgKEhJRl9DT1VO VEVSX01BWCArIDEpOworCX0KKworCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdShoaWYtPmxlbikp OworCS8vIHdmeF9oYW5kbGVfcnggdGFrZXMgY2FyZSBvbiBTS0IgbGl2ZXRpbWUKKwl3ZnhfaGFu ZGxlX3J4KHdkZXYsIHNrYik7CisJaWYgKCF3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkKQorCQl3 YWtlX3VwKCZ3ZGV2LT5oaWYudHhfYnVmZmVyc19lbXB0eSk7CisKKwlyZXR1cm4gcGlnZ3liYWNr OworCitlcnI6CisJaWYgKHNrYikKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiAtRUlP OworfQorCitzdGF0aWMgaW50IGJoX3dvcmtfcngoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBt YXhfbXNnLCBpbnQgKm51bV9jbmYpCit7CisJc2l6ZV90IGxlbjsKKwlpbnQgaTsKKwlpbnQgY3Ry bF9yZWcsIHBpZ2d5YmFjazsKKworCXBpZ2d5YmFjayA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1h eF9tc2c7IGkrKykgeworCQlpZiAocGlnZ3liYWNrICYgQ1RSTF9ORVhUX0xFTl9NQVNLKQorCQkJ Y3RybF9yZWcgPSBwaWdneWJhY2s7CisJCWVsc2UgaWYgKHRyeV93YWl0X2Zvcl9jb21wbGV0aW9u KCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSkpCisJCQljdHJsX3JlZyA9IGF0b21pY194Y2hnKCZ3ZGV2 LT5oaWYuY3RybF9yZWcsIDApOworCQllbHNlCisJCQljdHJsX3JlZyA9IDA7CisJCWlmICghKGN0 cmxfcmVnICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSkKKwkJCXJldHVybiBpOworCQkvLyBjdHJsX3Jl ZyB1bml0cyBhcmUgMTZiaXRzIHdvcmRzCisJCWxlbiA9IChjdHJsX3JlZyAmIENUUkxfTkVYVF9M RU5fTUFTSykgKiAyOworCQlwaWdneWJhY2sgPSByeF9oZWxwZXIod2RldiwgbGVuLCBudW1fY25m KTsKKwkJaWYgKHBpZ2d5YmFjayA8IDApCisJCQlyZXR1cm4gaTsKKwkJaWYgKCEocGlnZ3liYWNr ICYgQ1RSTF9XTEFOX1JFQURZKSkKKwkJCWRldl9lcnIod2Rldi0+ZGV2LCAidW5leHBlY3RlZCBw aWdneWJhY2sgdmFsdWU6IHJlYWR5IGJpdCBub3Qgc2V0OiAlMDR4XG4iLAorCQkJCXBpZ2d5YmFj ayk7CisJfQorCWlmIChwaWdneWJhY2sgJiBDVFJMX05FWFRfTEVOX01BU0spIHsKKwkJY3RybF9y ZWcgPSBhdG9taWNfeGNoZygmd2Rldi0+aGlmLmN0cmxfcmVnLCBwaWdneWJhY2spOworCQljb21w bGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOworCQlpZiAoY3RybF9yZWcpCisJCQlkZXZfZXJy KHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgSVJRIGhhcHBlbmVkOiAlMDR4LyUwNHhcbiIsCisJCQkJ Y3RybF9yZWcsIHBpZ2d5YmFjayk7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCB0 eF9oZWxwZXIoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYpCit7CisJ aW50IHJldDsKKwl2b2lkICpkYXRhOworCWJvb2wgaXNfZW5jcnlwdGVkID0gZmFsc2U7CisJc2l6 ZV90IGxlbiA9IGxlMTZfdG9fY3B1KGhpZi0+bGVuKTsKKworCVdBUk4obGVuIDwgc2l6ZW9mKCpo aWYpLCAidHJ5IHRvIHNlbmQgY29ycnVwdGVkIGRhdGEiKTsKKworCWhpZi0+c2VxbnVtID0gd2Rl di0+aGlmLnR4X3NlcW51bTsKKwl3ZGV2LT5oaWYudHhfc2VxbnVtID0gKHdkZXYtPmhpZi50eF9z ZXFudW0gKyAxKSAlIChISUZfQ09VTlRFUl9NQVggKyAxKTsKKworCWRhdGEgPSBoaWY7CisJV0FS TihsZW4gPiB3ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1ZiwKKwkgICAgICIlczogcmVxdWVz dCBleGNlZWQgV0Z4IGNhcGFiaWxpdHk6ICV6dSA+ICVkXG4iLCBfX2Z1bmNfXywKKwkgICAgIGxl biwgd2Rldi0+aHdfY2Fwcy5zaXplX2lucF9jaF9idWYpOworCWxlbiA9IHdkZXYtPmh3YnVzX29w cy0+YWxpZ25fc2l6ZSh3ZGV2LT5od2J1c19wcml2LCBsZW4pOworCXJldCA9IHdmeF9kYXRhX3dy aXRlKHdkZXYsIGRhdGEsIGxlbik7CisJaWYgKHJldCkKKwkJZ290byBlbmQ7CisKKwl3ZGV2LT5o aWYudHhfYnVmZmVyc191c2VkKys7CisJX3RyYWNlX2hpZl9zZW5kKGhpZiwgd2Rldi0+aGlmLnR4 X2J1ZmZlcnNfdXNlZCk7CitlbmQ6CisJaWYgKGlzX2VuY3J5cHRlZCkKKwkJa2ZyZWUoZGF0YSk7 Cit9CisKK3N0YXRpYyBpbnQgYmhfd29ya190eChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IG1h eF9tc2cpCit7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBtYXhfbXNnOyBpKyspIHsKKwkJaGlmID0gTlVMTDsKKwkJaWYgKHdkZXYtPmhpZi50eF9i dWZmZXJzX3VzZWQgPCB3ZGV2LT5od19jYXBzLm51bV9pbnBfY2hfYnVmcykgeworCQkJaWYgKHRy eV93YWl0X2Zvcl9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KSkgeworCQkJCVdBUk4o IW11dGV4X2lzX2xvY2tlZCgmd2Rldi0+aGlmX2NtZC5sb2NrKSwgImRhdGEgbG9ja2luZyBlcnJv ciIpOworCQkJCWhpZiA9IHdkZXYtPmhpZl9jbWQuYnVmX3NlbmQ7CisJCQl9IGVsc2UgeworCQkJ CWhpZiA9IHdmeF90eF9xdWV1ZXNfZ2V0KHdkZXYpOworCQkJfQorCQl9CisJCWlmICghaGlmKQor CQkJcmV0dXJuIGk7CisJCXR4X2hlbHBlcih3ZGV2LCBoaWYpOworCX0KKwlyZXR1cm4gaTsKK30K KworLyogSW4gU0RJTyBtb2RlLCBpdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhbiBhY2Nlc3MgdG8g YSByZWdpc3RlciB0byBhY2tub3dsZWRnZQorICogbGFzdCByZWNlaXZlZCBtZXNzYWdlLiBJdCBj b3VsZCBiZSBwb3NzaWJsZSB0byByZXN0cmljdCB0aGlzIGFja25vd2xlZGdlIHRvCisgKiBTRElP IG1vZGUgYW5kIG9ubHkgaWYgbGFzdCBvcGVyYXRpb24gd2FzIHJ4LgorICovCitzdGF0aWMgdm9p ZCBhY2tfc2Rpb19kYXRhKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQoreworCXUzMiBjZmdfcmVnOwor CisJY29uZmlnX3JlZ19yZWFkKHdkZXYsICZjZmdfcmVnKTsKKwlpZiAoY2ZnX3JlZyAmIDB4RkYp IHsKKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiY2hpcCByZXBvcnRzIGVycm9yczogJTAyeFxuIiwK KwkJCSBjZmdfcmVnICYgMHhGRik7CisJCWNvbmZpZ19yZWdfd3JpdGVfYml0cyh3ZGV2LCAweEZG LCAweDAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0 cnVjdCB3ZnhfZGV2LCBoaWYuYmgpOworCWludCBzdGF0c19yZXEgPSAwLCBzdGF0c19jbmYgPSAw LCBzdGF0c19pbmQgPSAwOworCWJvb2wgcmVsZWFzZV9jaGlwID0gZmFsc2UsIGxhc3Rfb3BfaXNf cnggPSBmYWxzZTsKKwlpbnQgbnVtX3R4LCBudW1fcng7CisKKwlkZXZpY2Vfd2FrZXVwKHdkZXYp OworCWRvIHsKKwkJbnVtX3R4ID0gYmhfd29ya190eCh3ZGV2LCAzMik7CisJCXN0YXRzX3JlcSAr PSBudW1fdHg7CisJCWlmIChudW1fdHgpCisJCQlsYXN0X29wX2lzX3J4ID0gZmFsc2U7CisJCW51 bV9yeCA9IGJoX3dvcmtfcngod2RldiwgMzIsICZzdGF0c19jbmYpOworCQlzdGF0c19pbmQgKz0g bnVtX3J4OworCQlpZiAobnVtX3J4KQorCQkJbGFzdF9vcF9pc19yeCA9IHRydWU7CisJfSB3aGls ZSAobnVtX3J4IHx8IG51bV90eCk7CisJc3RhdHNfaW5kIC09IHN0YXRzX2NuZjsKKworCWlmIChs YXN0X29wX2lzX3J4KQorCQlhY2tfc2Rpb19kYXRhKHdkZXYpOworCWlmICghd2Rldi0+aGlmLnR4 X2J1ZmZlcnNfdXNlZCAmJiAhd29ya19wZW5kaW5nKHdvcmspKSB7CisJCWRldmljZV9yZWxlYXNl KHdkZXYpOworCQlyZWxlYXNlX2NoaXAgPSB0cnVlOworCX0KKwlfdHJhY2VfYmhfc3RhdHMoc3Rh dHNfaW5kLCBzdGF0c19yZXEsIHN0YXRzX2NuZiwKKwkJCXdkZXYtPmhpZi50eF9idWZmZXJzX3Vz ZWQsIHJlbGVhc2VfY2hpcCk7Cit9CisKKy8qCisgKiBBbiBJUlEgZnJvbSBjaGlwIGRpZCBvY2N1 cgorICovCit2b2lkIHdmeF9iaF9yZXF1ZXN0X3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQorewor CXUzMiBjdXIsIHByZXY7CisKKwljb250cm9sX3JlZ19yZWFkKHdkZXYsICZjdXIpOworCXByZXYg PSBhdG9taWNfeGNoZygmd2Rldi0+aGlmLmN0cmxfcmVnLCBjdXIpOworCWNvbXBsZXRlKCZ3ZGV2 LT5oaWYuY3RybF9yZWFkeSk7CisJcXVldWVfd29yayhzeXN0ZW1faGlnaHByaV93cSwgJndkZXYt PmhpZi5iaCk7CisKKwlpZiAoIShjdXIgJiBDVFJMX05FWFRfTEVOX01BU0spKQorCQlkZXZfZXJy KHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgY29udHJvbCByZWdpc3RlciB2YWx1ZTogbGVuZ3RoIGZp ZWxkIGlzIDA6ICUwNHhcbiIsCisJCQljdXIpOworCWlmIChwcmV2ICE9IDApCisJCWRldl9lcnIo d2Rldi0+ZGV2LCAicmVjZWl2ZWQgSVJRIGJ1dCBwcmV2aW91cyBkYXRhIHdhcyBub3QgKHlldCkg cmVhZDogJTA0eC8lMDR4XG4iLAorCQkJcHJldiwgY3VyKTsKK30KKworLyoKKyAqIERyaXZlciB3 YW50IHRvIHNlbmQgZGF0YQorICovCit2b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KQoreworCXF1ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZ3ZGV2LT5oaWYu YmgpOworfQorCisvKgorICogSWYgSVJRIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24g YWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJvbAorICogcmVnaXN0ZXIgYW5kIHNpbXVs YXRlIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVkLgorICoKKyAqIE5vdGUgdGhhdCB0aGUg ZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVhZCBjb250cm9s CisgKiByZWdpc3RlciwgdGhlIElSUSBpcyBsb3N0LiBTbywgdXNlIHRoaXMgZnVuY3Rpb24gY2Fy ZWZ1bGx5IChvbmx5IGR1aW5nCisgKiBkZXZpY2UgaW5pdGlhbGlzYXRpb24pLgorICovCit2b2lk IHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwlrdGltZV90IG5vdywg c3RhcnQ7CisJdTMyIHJlZzsKKworCVdBUk4oIXdkZXYtPnBvbGxfaXJxLCAidW5leHBlY3RlZCBJ UlEgcG9sbGluZyBjYW4gbWFzayBJUlEiKTsKKwlzdGFydCA9IGt0aW1lX2dldCgpOworCWZvciAo OzspIHsKKwkJY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmcmVnKTsKKwkJbm93ID0ga3RpbWVfZ2V0 KCk7CisJCWlmIChyZWcgJiAweEZGRikKKwkJCWJyZWFrOworCQlpZiAoa3RpbWVfYWZ0ZXIobm93 LCBrdGltZV9hZGRfbXMoc3RhcnQsIDEwMDApKSkgeworCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ0 aW1lIG91dCB3aGlsZSBwb2xsaW5nIGNvbnRyb2wgcmVnaXN0ZXJcbiIpOworCQkJcmV0dXJuOwor CQl9CisJCXVkZWxheSgyMDApOworCX0KKwl3ZnhfYmhfcmVxdWVzdF9yeCh3ZGV2KTsKK30KKwor dm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpCit7CisJSU5JVF9XT1JL KCZ3ZGV2LT5oaWYuYmgsIGJoX3dvcmspOworCWluaXRfY29tcGxldGlvbigmd2Rldi0+aGlmLmN0 cmxfcmVhZHkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndkZXYtPmhpZi50eF9idWZmZXJzX2Vt cHR5KTsKK30KKwordm9pZCB3ZnhfYmhfdW5yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2RldiAqd2RldikK K3sKKwlmbHVzaF93b3JrKCZ3ZGV2LT5oaWYuYmgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9iaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzhjNDkz MjllMjJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dm eC9iaC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkgKi8KKy8qCisgKiBJbnRlcnJ1cHQgYm90dG9tIGhhbGYuCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmln aHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8KKyNpZm5kZWYgV0ZYX0JIX0gKKyNkZWZpbmUg V0ZYX0JIX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworc3RydWN0IHdmeF9kZXY7CisK K3N0cnVjdCB3ZnhfaGlmIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmg7CisJc3RydWN0IGNvbXBs ZXRpb24gY3RybF9yZWFkeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB0eF9idWZmZXJzX2VtcHR5Owor CWF0b21pY190IGN0cmxfcmVnOworCWludCByeF9zZXFudW07CisJaW50IHR4X3NlcW51bTsKKwlp bnQgdHhfYnVmZmVyc191c2VkOworfTsKKwordm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdm eF9kZXYgKndkZXYpOwordm9pZCB3ZnhfYmhfdW5yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2RldiAqd2Rl dik7Cit2b2lkIHdmeF9iaF9yZXF1ZXN0X3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKK3ZvaWQg d2Z4X2JoX3JlcXVlc3RfdHgoc3RydWN0IHdmeF9kZXYgKndkZXYpOwordm9pZCB3ZnhfYmhfcG9s bF9pcnEoc3RydWN0IHdmeF9kZXYgKndkZXYpOworCisjZW5kaWYgLyogV0ZYX0JIX0ggKi8KLS0g CjIuMjguMAoK