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=-11.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,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 EEBE8C43461 for ; Thu, 10 Sep 2020 03:48:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9FB2A2145D for ; Thu, 10 Sep 2020 03:48:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="XZPGZpUi" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730022AbgIJDsj (ORCPT ); Wed, 9 Sep 2020 23:48:39 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:62201 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729717AbgIJDsO (ORCPT ); Wed, 9 Sep 2020 23:48:14 -0400 X-UUID: 266830bd4e18459ea1fecc04307ad153-20200910 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=VBLdS2FRaBL9PFSaCs0Suo8uV5kNutts+oQ1voqLK00=; b=XZPGZpUiRQyE1vfUzYzKhk1Js7iuN6hII4+p10lAZDsgfitWS7gdUPkvAHYZBWK6KAso7z9vhTuEPfRhxZbnN+zmUwucegXdgpOVhavQDMWCPSzIteMQDeXgcX3EAE+g7D0aKvy0ODu47lZOIxkv3NzBbHsWwX2cVIXKNafcxx0=; X-UUID: 266830bd4e18459ea1fecc04307ad153-20200910 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 919481190; Thu, 10 Sep 2020 11:47:57 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 10 Sep 2020 11:47:55 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 10 Sep 2020 11:47:54 +0800 From: Jianjun Wang To: Bjorn Helgaas , Rob Herring , Lorenzo Pieralisi , Ryder Lee CC: Philipp Zabel , Matthias Brugger , Mauro Carvalho Chehab , , , , , , , Sj Huang , Jianjun Wang Subject: [v2,2/3] PCI: mediatek: Add new generation controller support Date: Thu, 10 Sep 2020 11:45:35 +0800 Message-ID: <20200910034536.30860-3-jianjun.wang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200910034536.30860-1-jianjun.wang@mediatek.com> References: <20200910034536.30860-1-jianjun.wang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: 91A676AAC2D84A1A97294442883AF7AD611F2B9E85C289B28A26177860886F622000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org TWVkaWFUZWsncyBQQ0llIGhvc3QgY29udHJvbGxlciBoYXMgdGhyZWUgZ2VuZXJhdGlvbiBIV3Ms IHRoZSBuZXcNCmdlbmVyYXRpb24gSFcgaXMgYW4gaW5kaXZpZHVhbCBicmlkZ2UsIGl0IHN1cG9v cnRzIEdlbjMgc3BlZWQgYW5kDQp1cCB0byAyNTYgTVNJIGludGVycnVwdCBudW1iZXJzIGZvciBt dWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KDQpBZGQgc3VwcG9ydCBmb3IgbmV3IEdlbjMgY29udHJv bGxlciB3aGljaCBjYW4gYmUgZm91bmQgb24gTVQ4MTkyLg0KDQpTaWduZWQtb2ZmLWJ5OiBKaWFu anVuIFdhbmcgPGppYW5qdW4ud2FuZ0BtZWRpYXRlay5jb20+DQpBY2tlZC1ieTogUnlkZXIgTGVl IDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KLS0tDQogZHJpdmVycy9wY2kvY29udHJvbGxlci9L Y29uZmlnICAgICAgICAgICAgICB8ICAgMTQgKw0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFr ZWZpbGUgICAgICAgICAgICAgfCAgICAxICsNCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUt bWVkaWF0ZWstZ2VuMy5jIHwgMTA3NiArKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFu Z2VkLCAxMDkxIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQpp bmRleCBmMThjMzcyNWVmODAuLjgzZGFhNzcyNTk1YiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmln DQpAQCAtMjM5LDYgKzIzOSwyMCBAQCBjb25maWcgUENJRV9NRURJQVRFSw0KIAkgIFNheSBZIGhl cmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQogCSAg TWVkaWFUZWsgU29Dcy4NCiANCitjb25maWcgUENJRV9NRURJQVRFS19HRU4zDQorCXRyaXN0YXRl ICJNZWRpYVRlayBHRU4zIFBDSWUgY29udHJvbGxlciINCisJZGVwZW5kcyBvbiBBUkNIX01FRElB VEVLIHx8IENPTVBJTEVfVEVTVA0KKwlkZXBlbmRzIG9uIE9GDQorCWRlcGVuZHMgb24gUENJX01T SV9JUlFfRE9NQUlODQorCWhlbHANCisJICBBZGRzIHN1cHBvcnQgZm9yIFBDSWUgR2VuMyBNQUMg Y29udHJvbGxlciBmb3IgTWVkaWFUZWsgU29Dcy4NCisJICBUaGlzIFBDSWUgY29udHJvbGxlciBw cm92aWRlcyB0aGUgY2FwYWJsZSBvZiBHZW4zLCBHZW4yIGFuZA0KKwkgIEdlbjEgc3BlZWQsIGFu ZCBzdXBwb3J0IHVwIHRvIDI1NiBNU0kgaW50ZXJydXB0IG51bWJlcnMgZm9yDQorCSAgbXVsdGkt ZnVuY3Rpb24gZGV2aWNlcy4NCisNCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJs ZSBHZW4zIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQorCSAgTWVkaWFUZWsgU29Dcy4NCisN CiBjb25maWcgUENJRV9UQU5HT19TTVA4NzU5DQogCWJvb2wgIlRhbmdvIFNNUDg3NTkgUENJZSBj b250cm9sbGVyIChEQU5HRVJPVVMpIg0KIAlkZXBlbmRzIG9uIEFSQ0hfVEFOR08gJiYgUENJX01T SSAmJiBPRg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgYi9k cml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQppbmRleCBiY2RiZjQ5YWIxZTQuLjljMWI5 Njc3NzU5NyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCisr KyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCkBAIC0yNyw2ICsyNyw3IEBAIG9i ai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQKSArPSBwY2llLXJvY2tjaGlwLm8NCiBvYmotJChDT05G SUdfUENJRV9ST0NLQ0hJUF9FUCkgKz0gcGNpZS1yb2NrY2hpcC1lcC5vDQogb2JqLSQoQ09ORklH X1BDSUVfUk9DS0NISVBfSE9TVCkgKz0gcGNpZS1yb2NrY2hpcC1ob3N0Lm8NCiBvYmotJChDT05G SUdfUENJRV9NRURJQVRFSykgKz0gcGNpZS1tZWRpYXRlay5vDQorb2JqLSQoQ09ORklHX1BDSUVf TUVESUFURUtfR0VOMykgKz0gcGNpZS1tZWRpYXRlay1nZW4zLm8NCiBvYmotJChDT05GSUdfUENJ RV9UQU5HT19TTVA4NzU5KSArPSBwY2llLXRhbmdvLm8NCiBvYmotJChDT05GSUdfVk1EKSArPSB2 bWQubw0KIG9iai0kKENPTkZJR19QQ0lFX0JSQ01TVEIpICs9IHBjaWUtYnJjbXN0Yi5vDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYyBiL2Ry aXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay1nZW4zLmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmY4YzhiZGY4OGQzMw0KLS0tIC9kZXYvbnVsbA0K KysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KQEAgLTAs MCArMSwxMDc2IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0K KyAqIE1lZGlhVGVrIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlci4NCisgKg0KKyAqIENvcHly aWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuDQorICogQXV0aG9yOiBKaWFuanVuIFdhbmcgPGpp YW5qdW4ud2FuZ0BtZWRpYXRlay5jb20+DQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5o Pg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4N CisjaW5jbHVkZSA8bGludXgvaXJxLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5l ZF9pcnEuaD4NCisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+DQorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv bXNpLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgv b2ZfY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9v Zl9wbGF0Zm9ybS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCisjaW5jbHVkZSA8bGludXgv cGh5L3BoeS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVk ZSA8bGludXgvcG1fZG9tYWluLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisj aW5jbHVkZSA8bGludXgvcmVzZXQuaD4NCisNCisjaW5jbHVkZSAiLi4vcGNpLmgiDQorDQorI2Rl ZmluZSBQQ0lFX1NFVFRJTkdfUkVHCQkweDgwDQorI2RlZmluZSBQQ0lFX1BDSV9JRFNfMQkJCTB4 OWMNCisjZGVmaW5lIFBDSV9DTEFTUyhjbGFzcykJCShjbGFzcyA8PCA4KQ0KKyNkZWZpbmUgUENJ RV9SQ19NT0RFCQkJQklUKDApDQorDQorI2RlZmluZSBQQ0lFX0NGR05VTV9SRUcJCQkweDE0MA0K KyNkZWZpbmUgUENJRV9DRkdfREVWRk4oZGV2Zm4pCQkoKGRldmZuKSAmIEdFTk1BU0soNywgMCkp DQorI2RlZmluZSBQQ0lFX0NGR19CVVMoYnVzKQkJKCgoYnVzKSA8PCA4KSAmIEdFTk1BU0soMTUs IDgpKQ0KKyNkZWZpbmUgUENJRV9DRkdfQllURV9FTihieXRlcykJCSgoKGJ5dGVzKSA8PCAxNikg JiBHRU5NQVNLKDE5LCAxNikpDQorI2RlZmluZSBQQ0lFX0NGR19GT1JDRV9CWVRFX0VOCQlCSVQo MjApDQorI2RlZmluZSBQQ0lFX0NGR19PRkZTRVRfQUREUgkJMHgxMDAwDQorI2RlZmluZSBQQ0lF X0NGR19IRUFERVIoZGV2Zm4sIGJ1cykgXA0KKwkoUENJRV9DRkdfREVWRk4oZGV2Zm4pIHwgUENJ RV9DRkdfQlVTKGJ1cykpDQorDQorI2RlZmluZSBQQ0lFX0NGR19IRUFERVJfRk9SQ0VfQkUoZGV2 Zm4sIGJ1cywgYnl0ZXMpIFwNCisJKFBDSUVfQ0ZHX0hFQURFUihkZXZmbiwgYnVzKSB8IFBDSUVf Q0ZHX0JZVEVfRU4oYnl0ZXMpIFwNCisJIHwgUENJRV9DRkdfRk9SQ0VfQllURV9FTikNCisNCisj ZGVmaW5lIFBDSUVfUlNUX0NUUkxfUkVHCQkweDE0OA0KKyNkZWZpbmUgUENJRV9NQUNfUlNUQgkJ CUJJVCgwKQ0KKyNkZWZpbmUgUENJRV9QSFlfUlNUQgkJCUJJVCgxKQ0KKyNkZWZpbmUgUENJRV9C UkdfUlNUQgkJCUJJVCgyKQ0KKyNkZWZpbmUgUENJRV9QRV9SU1RCCQkJQklUKDMpDQorDQorI2Rl ZmluZSBQQ0lFX01JU0NfU1RBVFVTX1JFRwkJMHgxNEMNCisjZGVmaW5lIFBDSUVfTFRSX01TR19S RUNFSVZFRAkJQklUKDApDQorI2RlZmluZSBQQ0lFX1BDSUVfTVNHX1JFQ0VJVkVECQlCSVQoMSkN CisNCisjZGVmaW5lIFBDSUVfTFRTU01fU1RBVFVTX1JFRwkJMHgxNTANCisjZGVmaW5lIFBDSUVf TFRTU01fU1RBVEVfTUFTSwkJR0VOTUFTSygyOCwgMjQpDQorI2RlZmluZSBQQ0lFX0xUU1NNX1NU QVRFKHZhbCkJCSgodmFsICYgUENJRV9MVFNTTV9TVEFURV9NQVNLKSA+PiAyNCkNCisjZGVmaW5l IFBDSUVfTFRTU01fU1RBVEVfTDAJCTB4MTANCisjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEVfTDFf SURMRQkweDEzDQorI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX0wyX0lETEUJMHgxNA0KKw0KKyNk ZWZpbmUgUENJRV9MSU5LX1NUQVRVU19SRUcJCTB4MTU0DQorI2RlZmluZSBQQ0lFX1BPUlRfTElO S1VQCQlCSVQoOCkNCisNCisjZGVmaW5lIFBDSUVfTVNJX1NFVF9OVU0JCTgNCisjZGVmaW5lIFBD SUVfTVNJX0lSUVNfUEVSX1NFVAkJMzINCisjZGVmaW5lIFBDSUVfTVNJX0lSUVNfTlVNIFwNCisJ KFBDSUVfTVNJX0lSUVNfUEVSX1NFVCAqIChQQ0lFX01TSV9TRVRfTlVNKSkNCisNCisjZGVmaW5l IFBDSUVfSU5UX0VOQUJMRV9SRUcJCTB4MTgwDQorI2RlZmluZSBQQ0lFX01TSV9NQVNLCQkJR0VO TUFTSyhQQ0lFX01TSV9TRVRfTlVNICsgOCAtIDEsIDgpDQorI2RlZmluZSBQQ0lFX01TSV9TSElG VAkJCTgNCisjZGVmaW5lIFBDSUVfSU5UWF9TSElGVAkJCTI0DQorI2RlZmluZSBQQ0lFX0lOVFhf TUFTSwkJCUdFTk1BU0soMjcsIDI0KQ0KKyNkZWZpbmUgUENJRV9NU0dfTUFTSwkJCUJJVCgyOCkN CisjZGVmaW5lIFBDSUVfQUVSX01BU0sJCQlCSVQoMjkpDQorI2RlZmluZSBQQ0lFX1BNX01BU0sJ CQlCSVQoMzApDQorDQorI2RlZmluZSBQQ0lFX0lOVF9TVEFUVVNfUkVHCQkweDE4NA0KKyNkZWZp bmUgUENJRV9NU0lfU0VUX0VOQUJMRV9SRUcJCTB4MTkwDQorDQorI2RlZmluZSBQQ0lFX0xPV19Q T1dFUl9DVFJMX1JFRwkJMHgxOTQNCisjZGVmaW5lIFBDSUVfRElTX0xPV1BXUl9NQVNLCQlHRU5N QVNLKDMsIDApDQorI2RlZmluZSBQQ0lFX0RJU19MMFNfTUFTSwkJQklUKDApDQorI2RlZmluZSBQ Q0lFX0RJU19MMV9NQVNLCQlCSVQoMSkNCisjZGVmaW5lIFBDSUVfRElTX0wxMV9NQVNLCQlCSVQo MikNCisjZGVmaW5lIFBDSUVfRElTX0wxMl9NQVNLCQlCSVQoMykNCisjZGVmaW5lIFBDSUVfRk9S Q0VfRElTX0xPV1BXUgkJR0VOTUFTSygxMSwgOCkNCisjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0ww UwkJQklUKDgpDQorI2RlZmluZSBQQ0lFX0ZPUkNFX0RJU19MMQkJQklUKDkpDQorI2RlZmluZSBQ Q0lFX0ZPUkNFX0RJU19MMTEJCUJJVCgxMCkNCisjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxMgkJ QklUKDExKQ0KKw0KKyNkZWZpbmUgUENJRV9JQ01EX1BNX1JFRwkJMHgxOTgNCisjZGVmaW5lIFBD SUVfVFVSTl9PRkZfTElOSwkJQklUKDQpDQorDQorI2RlZmluZSBQQ0lFX01TSV9BRERSX0JBU0Vf UkVHCQkweGMwMA0KKyNkZWZpbmUgUENJRV9NU0lfU0VUX09GRlNFVAkJMHgxMA0KKyNkZWZpbmUg UENJRV9NU0lfU1RBVFVTX09GRlNFVAkJMHgwNA0KKyNkZWZpbmUgUENJRV9NU0lfRU5BQkxFX09G RlNFVAkJMHgwOA0KKw0KKyNkZWZpbmUgUENJRV9UUkFOU19UQUJMRV9CQVNFX1JFRwkweDgwMA0K KyNkZWZpbmUgUENJRV9BVFJfU1JDX0FERFJfTVNCX09GRlNFVAkweDQNCisjZGVmaW5lIFBDSUVf QVRSX1RSU0xfQUREUl9MU0JfT0ZGU0VUCTB4OA0KKyNkZWZpbmUgUENJRV9BVFJfVFJTTF9BRERS X01TQl9PRkZTRVQJMHhjDQorI2RlZmluZSBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVAkweDEw DQorI2RlZmluZSBQQ0lFX0FUUl9UTEJfU0VUX09GRlNFVAkJMHgyMA0KKw0KKyNkZWZpbmUgUENJ RV9NQVhfVFJBTlNfVEFCTEVTCQk4DQorI2RlZmluZSBBVFJfRU4JCQkJQklUKDApDQorI2RlZmlu ZSBBVFJfU0laRShzaXplKQkJCSgoKChzaXplKSAtIDEpIDw8IDEpICYgR0VOTUFTSyg2LCAxKSkN CisjZGVmaW5lIEFUUl9JRChpZCkJCQkoaWQgJiBHRU5NQVNLKDMsIDApKQ0KKyNkZWZpbmUgQVRS X1BBUkFNKHBhcmFtKQkJKCgocGFyYW0pIDw8IDE2KSAmIEdFTk1BU0soMjcsIDE2KSkNCisNCisv KioNCisgKiBzdHJ1Y3QgbXRrX3BjaWVfbXNpIC0gTVNJIGluZm9ybWF0aW9uIGZvciBlYWNoIHNl dA0KKyAqIEBiYXNlOiBJTyBtYXBwZWQgcmVnaXN0ZXIgYmFzZQ0KKyAqIEBod2lycTogSGFyZHdh cmUgaW50ZXJydXB0IG51bWJlcg0KKyAqIEBpcnE6IE1TSSBzZXQgSW50ZXJydXB0IG51bWJlcg0K KyAqIEBpbmRleDogTVNJIHNldCBudW1iZXINCisgKiBAbXNnX2FkZHI6IE1TSSBtZXNzYWdlIGFk ZHJlc3MNCisgKiBAZG9tYWluOiBJUlEgZG9tYWluDQorICovDQorc3RydWN0IG10a19wY2llX21z aSB7DQorCXZvaWQgX19pb21lbSAqYmFzZTsNCisJaW50IGh3aXJxOw0KKwlpbnQgaXJxOw0KKwlp bnQgaW5kZXg7DQorCXBoeXNfYWRkcl90IG1zZ19hZGRyOw0KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAq ZG9tYWluOw0KK307DQorDQorLyoqDQorICogc3RydWN0IG10a19wY2llX3BvcnQgLSBQQ0llIHBv cnQgaW5mb3JtYXRpb24NCisgKiBAZGV2OiBQQ0llIGRldmljZQ0KKyAqIEBiYXNlOiBJTyBtYXBw ZWQgcmVnaXN0ZXIgYmFzZQ0KKyAqIEByZWdfYmFzZTogUGh5c2ljYWwgcmVnaXN0ZXIgYmFzZQ0K KyAqIEBtYWNfcmVzZXQ6IG1hYyByZXNldCBjb250cm9sDQorICogQHBoeV9yZXNldDogcGh5IHJl c2V0IGNvbnRyb2wNCisgKiBAcGh5OiBQSFkgY29udHJvbGxlciBibG9jaw0KKyAqIEBjbGtzOiBQ Q0llIGNsb2Nrcw0KKyAqIEBudW1fY2xrczogUENJZSBjbG9ja3MgY291bnQgZm9yIHRoaXMgcG9y dA0KKyAqIEBpc19zdXNwZW5kZWQ6IGRldmljZSBzdXNwZW5kIHN0YXRlDQorICogQGlycTogUENJ ZSBjb250cm9sbGVyIGludGVycnVwdCBudW1iZXINCisgKiBAaW50eF9kb21haW46IGxlZ2FjeSBJ TlR4IElSUSBkb21haW4NCisgKiBAbXNpX2RvbWFpbjogTVNJIElSUSBkb21haW4NCisgKiBAbXNp X3RvcF9kb21haW46IE1TSSBJUlEgdG9wIGRvbWFpbg0KKyAqIEBtc2lfaW5mbzogTVNJIHNldHMg aW5mb3JtYXRpb24NCisgKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIElSUSBiaXQgbWFwDQorICog QG1zaV9pcnFfaW5fdXNlOiBiaXQgbWFwIGZvciBhc3NpZ25lZCBNU0kgSVJRDQorICovDQorc3Ry dWN0IG10a19wY2llX3BvcnQgew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQorCXZvaWQgX19pb21l bSAqYmFzZTsNCisJcGh5c19hZGRyX3QgcmVnX2Jhc2U7DQorCXN0cnVjdCByZXNldF9jb250cm9s ICptYWNfcmVzZXQ7DQorCXN0cnVjdCByZXNldF9jb250cm9sICpwaHlfcmVzZXQ7DQorCXN0cnVj dCBwaHkgKnBoeTsNCisJc3RydWN0IGNsayAqKmNsa3M7DQorCWludCBudW1fY2xrczsNCisJYm9v bCBpc19zdXNwZW5kZWQ7DQorDQorCWludCBpcnE7DQorCXN0cnVjdCBpcnFfZG9tYWluICppbnR4 X2RvbWFpbjsNCisJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47DQorCXN0cnVjdCBpcnFf ZG9tYWluICptc2lfdG9wX2RvbWFpbjsNCisJc3RydWN0IG10a19wY2llX21zaSAqKm1zaV9pbmZv Ow0KKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCisJREVDTEFSRV9CSVRNQVAobXNpX2lycV9pbl91c2Us IFBDSUVfTVNJX0lSUVNfTlVNKTsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfY29uZmln X3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLA0KKwkJCQkgICAg aW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydCA9IGJ1cy0+c3lzZGF0YTsNCisJaW50IGJ5dGVzOw0KKw0KKwlieXRlcyA9ICgoMSA8 PCBzaXplKSAtIDEpIDw8ICh3aGVyZSAmIDB4Myk7DQorCXdyaXRlbChQQ0lFX0NGR19IRUFERVJf Rk9SQ0VfQkUoZGV2Zm4sIGJ1cy0+bnVtYmVyLCBieXRlcyksDQorCSAgICAgICBwb3J0LT5iYXNl ICsgUENJRV9DRkdOVU1fUkVHKTsNCisNCisJKnZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lF X0NGR19PRkZTRVRfQUREUiArICh3aGVyZSAmIH4weDMpKTsNCisNCisJaWYgKHNpemUgPD0gMikN CisJCSp2YWwgPSAoKnZhbCA+PiAoOCAqICh3aGVyZSAmIDB4MykpKSAmICgoMSA8PCAoc2l6ZSAq IDgpKSAtIDEpOw0KKw0KKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KK30NCisNCitzdGF0 aWMgaW50IG10a19wY2llX2NvbmZpZ193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25l ZCBpbnQgZGV2Zm4sDQorCQkJCSAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCit7 DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gYnVzLT5zeXNkYXRhOw0KKwlpbnQgYnl0 ZXM7DQorDQorCWJ5dGVzID0gKCgxIDw8IHNpemUpIC0gMSkgPDwgKHdoZXJlICYgMHgzKTsNCisJ d3JpdGVsKFBDSUVfQ0ZHX0hFQURFUl9GT1JDRV9CRShkZXZmbiwgYnVzLT5udW1iZXIsIGJ5dGVz KSwNCisJICAgICAgIHBvcnQtPmJhc2UgKyBQQ0lFX0NGR05VTV9SRUcpOw0KKw0KKwlpZiAoc2l6 ZSA8PSAyKQ0KKwkJdmFsID0gKHZhbCAmICgoMSA8PCAoc2l6ZSAqIDgpKSAtIDEpKSA8PCAoKHdo ZXJlICYgMHgzKSAqIDgpOw0KKw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9DRkdf T0ZGU0VUX0FERFIgKyAod2hlcmUgJiB+MHgzKSk7DQorDQorCXJldHVybiBQQ0lCSU9TX1NVQ0NF U1NGVUw7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtdGtfcGNpZV9vcHMgPSB7DQor CS5yZWFkICA9IG10a19wY2llX2NvbmZpZ19yZWFkLA0KKwkud3JpdGUgPSBtdGtfcGNpZV9jb25m aWdfd3JpdGUsDQorfTsNCisNCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9zZXRfdHJhbnNfd2luZG93 KHZvaWQgX19pb21lbSAqcmVnLA0KKwkJCQkgICAgICByZXNvdXJjZV9zaXplX3QgY3B1X2FkZHIs DQorCQkJCSAgICAgIHJlc291cmNlX3NpemVfdCBwY2lfYWRkciwgc2l6ZV90IHNpemUpDQorew0K Kwl3cml0ZWwobG93ZXJfMzJfYml0cyhjcHVfYWRkcikgfCBBVFJfU0laRShmbHMoc2l6ZSkgLSAx KSB8IEFUUl9FTiwgcmVnKTsNCisJd3JpdGVsKHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLCByZWcg KyBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUKTsNCisJd3JpdGVsKGxvd2VyXzMyX2JpdHMo cGNpX2FkZHIpLCByZWcgKyBQQ0lFX0FUUl9UUlNMX0FERFJfTFNCX09GRlNFVCk7DQorCXdyaXRl bCh1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwgcmVnICsgUENJRV9BVFJfVFJTTF9BRERSX01TQl9P RkZTRVQpOw0KKwl3cml0ZWwoQVRSX0lEKDApIHwgQVRSX1BBUkFNKDApLCByZWcgKyBQQ0lFX0FU Ul9UUlNMX1BBUkFNX09GRlNFVCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0X3Ry YW5zX3RhYmxlKHZvaWQgX19pb21lbSAqcmVnLA0KKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IGNw dV9hZGRyLA0KKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9hZGRyLCBzaXplX3Qgc2l6ZSwN CisJCQkJICAgIGludCBudW0pDQorew0KKwl2b2lkIF9faW9tZW0gKnRhYmxlX2Jhc2U7DQorDQor CWlmIChudW0gPiBQQ0lFX01BWF9UUkFOU19UQUJMRVMpDQorCQlyZXR1cm4gLUVOT0RFVjsNCisN CisJdGFibGVfYmFzZSA9IHJlZyArIG51bSAqIFBDSUVfQVRSX1RMQl9TRVRfT0ZGU0VUOw0KKwlt dGtfcGNpZV9zZXRfdHJhbnNfd2luZG93KHRhYmxlX2Jhc2UsIGNwdV9hZGRyLCBwY2lfYWRkciwg c2l6ZSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19wY2llX3N0YXJ0 dXBfcG9ydChzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCit7DQorCXN0cnVjdCByZXNvdXJj ZV9lbnRyeSAqZW50cnk7DQorCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3QgPSBwY2lfaG9z dF9icmlkZ2VfZnJvbV9wcml2KHBvcnQpOw0KKwl1MzIgdmFsOw0KKwlpbnQgZXJyID0gMCwgdGFi bGVfaW5kZXggPSAwOw0KKw0KKwkvKiBTZXQgYXMgUkMgbW9kZSAqLw0KKwl2YWwgPSByZWFkbChw b3J0LT5iYXNlICsgUENJRV9TRVRUSU5HX1JFRyk7DQorCXZhbCB8PSBQQ0lFX1JDX01PREU7DQor CXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1NFVFRJTkdfUkVHKTsNCisNCisJLyogU2V0 IGNsYXNzIGNvZGUgKi8NCisJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfUENJX0lEU18x KTsNCisJdmFsICY9IH5HRU5NQVNLKDMxLCA4KTsNCisJdmFsIHw9IFBDSV9DTEFTUyhQQ0lfQ0xB U1NfQlJJREdFX1BDSSA8PCA4KTsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUENJ X0lEU18xKTsNCisNCisJLyogQXNzZXJ0IGFsbCByZXNldCBzaWduYWxzICovDQorCXZhbCA9IHJl YWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQorCXZhbCB8PSBQQ0lFX01BQ19S U1RCIHwgUENJRV9QSFlfUlNUQiB8IFBDSUVfQlJHX1JTVEIgfCBQQ0lFX1BFX1JTVEI7DQorCXdy aXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQorDQorCS8qIERlLWFz c2VydCByZXNldCBzaWduYWxzKi8NCisJdmFsICY9IH4oUENJRV9NQUNfUlNUQiB8IFBDSUVfUEhZ X1JTVEIgfCBQQ0lFX0JSR19SU1RCKTsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVf UlNUX0NUUkxfUkVHKTsNCisNCisJdXNsZWVwX3JhbmdlKDEwMCAqIDEwMDAsIDEyMCAqIDEwMDAp Ow0KKw0KKwkvKiBEZS1hc3NlcnQgcGUgcmVzZXQqLw0KKwl2YWwgJj0gflBDSUVfUEVfUlNUQjsN CisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCisNCisJLyog Q2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Igbm90ICovDQorCWVyciA9IHJlYWRsX3BvbGxfdGlt ZW91dChwb3J0LT5iYXNlICsgUENJRV9MSU5LX1NUQVRVU19SRUcsIHZhbCwNCisJCQkhISh2YWwg JiBQQ0lFX1BPUlRfTElOS1VQKSwgMjAsDQorCQkJNTAgKiBVU0VDX1BFUl9NU0VDKTsNCisJaWYg KGVycikNCisJCXJldHVybiBlcnI7DQorDQorCS8qIFNldCBQQ0llIHRyYW5zbGF0aW9uIHdpbmRv d3MgKi8NCisJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmhvc3QtPndpbmRv d3MpIHsNCisJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUoZW50cnktPnJlcyk7 DQorCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7DQorCQlyZXNvdXJjZV9zaXplX3QgY3B1 X2FkZHI7DQorCQlyZXNvdXJjZV9zaXplX3QgcGNpX2FkZHI7DQorDQorCQlpZiAoISh0eXBlICYg KElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9JTykpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJ cmVzID0gZW50cnktPnJlczsNCisJCWNwdV9hZGRyID0gcmVzLT5zdGFydDsNCisJCXBjaV9hZGRy ID0gcmVzLT5zdGFydCAtIGVudHJ5LT5vZmZzZXQ7DQorCQltdGtfcGNpZV9zZXRfdHJhbnNfdGFi bGUocG9ydC0+YmFzZSArIFBDSUVfVFJBTlNfVEFCTEVfQkFTRV9SRUcsDQorCQkJCQkgY3B1X2Fk ZHIsIHBjaV9hZGRyLCByZXNvdXJjZV9zaXplKHJlcyksDQorCQkJCQkgdGFibGVfaW5kZXgpOw0K Kw0KKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJTZXQgJXMgdHJhbnMgd2luZG93WyVkXTogY3B1X2Fk ZHIgPSAlI2xseCwgcGNpX2FkZHIgPSAlI2xseCwgc2l6ZSA9ICUjbGx4XG4iLA0KKwkJCSghISh0 eXBlICYgSU9SRVNPVVJDRV9NRU0pID8gIk1FTSIgOiAiSU8iKSwgdGFibGVfaW5kZXgsDQorCQkJ Y3B1X2FkZHIsIHBjaV9hZGRyLCByZXNvdXJjZV9zaXplKHJlcykpOw0KKw0KKwkJdGFibGVfaW5k ZXgrKzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3Qg bXRrX3BjaWVfbXNpICptdGtfZ2V0X21zaV9pbmZvKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0 LA0KKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaHdpcnEpDQorew0KKwlyZXR1cm4gcG9ydC0+bXNp X2luZm9baHdpcnEgLyBQQ0lFX01TSV9JUlFTX1BFUl9TRVRdOw0KK30NCisNCitzdGF0aWMgaW50 IG10a19wY2llX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsDQorCQkJCSBjb25z dCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkNCit7DQorCXN0cnVjdCBtdGtfcGNp ZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCBy ZXQ7DQorDQorCXJldCA9IGlycV9zZXRfYWZmaW5pdHlfaGludChwb3J0LT5pcnEsIG1hc2spOw0K KwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXJxX2RhdGFfdXBkYXRlX2VmZmVjdGl2 ZV9hZmZpbml0eShkYXRhLCBtYXNrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIG10a19jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNp X21zZyAqbXNnKQ0KK3sNCisJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQorCXN0cnVj dCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7 DQorDQorCW1zaV9pbmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQor DQorCW1zZy0+YWRkcmVzc19oaSA9IDA7DQorCW1zZy0+YWRkcmVzc19sbyA9IGxvd2VyXzMyX2Jp dHMobXNpX2luZm8tPm1zZ19hZGRyKTsNCisNCisJbXNnLT5kYXRhID0gZGF0YS0+aHdpcnE7DQor CWRldl9kYmcocG9ydC0+ZGV2LCAibXNpIyUjbHggYWRkcmVzc19oaSAlI3ggYWRkcmVzc19sbyAl I3ggZGF0YSAlZFxuIiwNCisJCWRhdGEtPmh3aXJxLCBtc2ctPmFkZHJlc3NfaGksIG1zZy0+YWRk cmVzc19sbywgbXNnLT5kYXRhKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX21zaV9pcnFfYWNr KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9p bmZvOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hp cF9kYXRhKGRhdGEpOw0KKwlpbnQgaHdpcnE7DQorDQorCW1zaV9pbmZvID0gbXRrX2dldF9tc2lf aW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQorDQorCWh3aXJxID0JZGF0YS0+aHdpcnEgJSBQQ0lF X01TSV9JUlFTX1BFUl9TRVQ7DQorDQorCXdyaXRlbCgxIDw8IGh3aXJxLCBtc2lfaW5mby0+YmFz ZSArIFBDSUVfTVNJX1NUQVRVU19PRkZTRVQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtfbXNp X2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9t c2kgKm1zaV9pbmZvOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dl dF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlpbnQgdmFsOw0KKw0KKwltc2lfaW5mbyA9IG10a19n ZXRfbXNpX2luZm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KKwl2YWwgPSByZWFkbChtc2lfaW5mby0+ YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KKwl2YWwgJj0gfigxIDw8IGRhdGEtPmh3 aXJxKTsNCisJd3JpdGVsKHZhbCwgbXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9FTkFCTEVfT0ZG U0VUKTsNCisNCisJcGNpX21zaV9tYXNrX2lycShkYXRhKTsNCit9DQorDQorc3RhdGljIHZvaWQg bXRrX21zaV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBt dGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGly cV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlpbnQgdmFsOw0KKw0KKwltc2lfaW5m byA9IG10a19nZXRfbXNpX2luZm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KKwl2YWwgPSByZWFkbCht c2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KKwl2YWwgfD0gKDEgPDwg ZGF0YS0+aHdpcnEpOw0KKwl3cml0ZWwodmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VO QUJMRV9PRkZTRVQpOw0KKw0KKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7DQorfQ0KKw0KK3N0 YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV9pcnFfY2hpcCA9IHsNCisJLmlycV9hY2sJCT0g bXRrX21zaV9pcnFfYWNrLA0KKwkuaXJxX2NvbXBvc2VfbXNpX21zZwk9IG10a19jb21wb3NlX21z aV9tc2csDQorCS5pcnFfbWFzawkJPSBtdGtfbXNpX2lycV9tYXNrLA0KKwkuaXJxX3VubWFzawkJ PSBtdGtfbXNpX2lycV91bm1hc2ssDQorCS5pcnFfc2V0X2FmZmluaXR5CT0gbXRrX3BjaWVfc2V0 X2FmZmluaXR5LA0KKwkubmFtZQkJCT0gIlBDSWUiLA0KK307DQorDQorc3RhdGljIGlycV9od19u dW1iZXJfdCBtdGtfcGNpZV9tc2lfZ2V0X2h3aXJxKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmlu Zm8sDQorCQkJCQkgICAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpDQorew0KKwlzdHJ1Y3QgbXNp X2Rlc2MgKmVudHJ5ID0gYXJnLT5kZXNjOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9 IGluZm8tPmNoaXBfZGF0YTsNCisJaW50IGh3aXJxOw0KKw0KKwltdXRleF9sb2NrKCZwb3J0LT5s b2NrKTsNCisNCisJaHdpcnEgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihwb3J0LT5tc2lfaXJx X2luX3VzZSwgUENJRV9NU0lfSVJRU19OVU0sDQorCQkJb3JkZXJfYmFzZV8yKGVudHJ5LT5udmVj X3VzZWQpKTsNCisJaWYgKGh3aXJxIDwgMCkgew0KKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2Nr KTsNCisJCXJldHVybiAtRU5PU1BDOw0KKwl9DQorDQorCW11dGV4X3VubG9jaygmcG9ydC0+bG9j ayk7DQorDQorCXJldHVybiBod2lycTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNp X2ZyZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCisJCQkgICAgICBzdHJ1Y3QgbXNpX2Rv bWFpbl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgdmlycSkNCit7DQorCXN0cnVjdCBpcnFfZGF0 YSAqZGF0YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQorCXN0cnVj dCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7 DQorDQorCW11dGV4X2xvY2soJnBvcnQtPmxvY2spOw0KKw0KKwliaXRtYXBfY2xlYXIocG9ydC0+ bXNpX2lycV9pbl91c2UsIGRhdGEtPmh3aXJxLCAxKTsNCisNCisJbXV0ZXhfdW5sb2NrKCZwb3J0 LT5sb2NrKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX29wcyBtdGtfbXNpX2Rv bWFpbl9vcHMgPSB7DQorCS5nZXRfaHdpcnEJPSBtdGtfcGNpZV9tc2lfZ2V0X2h3aXJxLA0KKwku bXNpX2ZyZWUJPSBtdGtfcGNpZV9tc2lfZnJlZSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgbXNp X2RvbWFpbl9pbmZvIG10a19tc2lfZG9tYWluX2luZm8gPSB7DQorCS5mbGFncwkJPSAoTVNJX0ZM QUdfVVNFX0RFRl9ET01fT1BTIHwgTVNJX0ZMQUdfUENJX01TSVggfA0KKwkJCSAgIE1TSV9GTEFH X1VTRV9ERUZfQ0hJUF9PUFMgfCBNU0lfRkxBR19NVUxUSV9QQ0lfTVNJKSwNCisJLmNoaXAJCT0g Jm10a19tc2lfaXJxX2NoaXAsDQorCS5vcHMJCT0gJm10a19tc2lfZG9tYWluX29wcywNCisJLmhh bmRsZXIJPSBoYW5kbGVfZWRnZV9pcnEsDQorCS5oYW5kbGVyX25hbWUJPSAiTVNJIiwNCit9Ow0K Kw0KK3N0YXRpYyB2b2lkIG10a19tc2lfdG9wX2lycV9hY2soc3RydWN0IGlycV9kYXRhICpkYXRh KQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2No aXBfZGF0YShkYXRhKTsNCisJaW50IG1zaV9pcnEgPSBkYXRhLT5od2lycSArIFBDSUVfTVNJX1NI SUZUOw0KKw0KKwl3cml0ZWwoMSA8PCBtc2lfaXJxLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RB VFVTX1JFRyk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV90b3BfaXJx X2NoaXAgPSB7DQorCS5pcnFfYWNrCT0gbXRrX21zaV90b3BfaXJxX2FjaywNCisJLm5hbWUJCT0g IlBDSWUiLA0KK307DQorDQorc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNpX2hhbmRsZXIoc3RydWN0 IGlycV9kZXNjICpkZXNjKQ0KK3sNCisJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm8gPSBp cnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0KKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycWNo aXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsNCisJdW5zaWduZWQgbG9uZyBtc2lfZW5hYmxl LCBtc2lfc3RhdHVzOw0KKwl1MzIgdmlycSwgYml0LCBod2lycTsNCisNCisJcmF3X3NwaW5fbG9j aygmZGVzYy0+bG9jayk7DQorDQorCW1zaV9lbmFibGUgPSByZWFkbChtc2lfaW5mby0+YmFzZSAr IFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KKwl3aGlsZSAoKG1zaV9zdGF0dXMgPSByZWFkbCht c2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX1NUQVRVU19PRkZTRVQpKSkgew0KKwkJbXNpX3N0YXR1 cyAmPSBtc2lfZW5hYmxlOw0KKwkJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZtc2lfc3RhdHVzLCBQ Q0lFX01TSV9JUlFTX1BFUl9TRVQpIHsNCisJCQlod2lycSA9IGJpdCArIG1zaV9pbmZvLT5pbmRl eCAqIFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsNCisJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyht c2lfaW5mby0+ZG9tYWluLCBod2lycSk7DQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0K KwkJfQ0KKwl9DQorDQorCWlycWNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsNCisNCisJ cmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsNCit9DQorDQorc3RhdGljIGludCBtdGtfbXNp X3RvcF9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sDQorCQkJCSAgICB1bnNp Z25lZCBpbnQgdmlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKQ0KK3sNCisJc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQgPSBkb21haW4tPmhvc3RfZGF0YTsNCisJc3RydWN0IG10a19wY2llX21z aSAqbXNpX2luZm8gPSBwb3J0LT5tc2lfaW5mb1tod2lycV07DQorDQorCWlycV9kb21haW5fc2V0 X2luZm8oZG9tYWluLCB2aXJxLCBod2lycSwNCisJCQkgICAgJm10a19tc2lfdG9wX2lycV9jaGlw LCBkb21haW4tPmhvc3RfZGF0YSwNCisJCQkgICAgbXRrX3BjaWVfbXNpX2hhbmRsZXIsIG1zaV9p bmZvLCBOVUxMKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aXJxX2RvbWFpbl9vcHMgbXRrX21zaV90b3BfZG9tYWluX29wcyA9IHsNCisJLm1hcCA9IG10a19t c2lfdG9wX2RvbWFpbl9tYXAsDQorfTsNCisNCitzdGF0aWMgdm9pZCBtdGtfaW50eF9hY2soc3Ry dWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBp cnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCisJaW50IGh3aXJxOw0KKw0KKwlod2ly cSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUOw0KKwl3cml0ZWwoMSA8PCBod2lycSwg cG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOw0KK30NCisNCitzdGF0aWMgdm9pZCBt dGtfaW50eF9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBtdGtfcGNp ZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCB2 YWw7DQorDQorCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsN CisJdmFsICY9IH4oMSA8PCAoZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQpKTsNCisJd3Jp dGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KK30NCisNCitzdGF0 aWMgdm9pZCBtdGtfaW50eF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRh KTsNCisJaW50IHZhbCwgaHdpcnE7DQorDQorCS8qKg0KKwkgKiBBcyBhbiBlbXVsYXRlZCBsZXZl bCBpcnEsIHRoaXMgaW50ZXJydXB0IHN0YXR1cyB3aWxsIGJlIHJlbWFpbmVkDQorCSAqIHVudGls IHJlY2VpdmUgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBvZiBkZS1hc3NlcnQsIGhlbmNlIHRo YXQNCisJICogdGhlIHN0YXR1cyBjYW4gb25seSBiZSBjbGVhcmVkIGF0IHRoaXMgcG9pbnQuDQor CSAqLw0KKwlod2lycSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUOw0KKwl3cml0ZWwo MSA8PCBod2lycSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOw0KKw0KKwl2YWwg PSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQorCXZhbCB8PSAxIDw8 IChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9TSElGVCk7DQorCXdyaXRlbCh2YWwsIHBvcnQtPmJh c2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpcnFfY2hp cCBtdGtfaW50eF9pcnFfY2hpcCA9IHsNCisJLmlycV9hY2sJCT0gbXRrX2ludHhfYWNrLA0KKwku aXJxX21hc2sJCT0gbXRrX2ludHhfbWFzaywNCisJLmlycV91bm1hc2sJCT0gbXRrX2ludHhfdW5t YXNrLA0KKwkuaXJxX3NldF9hZmZpbml0eQk9IG10a19wY2llX3NldF9hZmZpbml0eSwNCisJLm5h bWUJCQk9ICJQQ0llIiwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfaW50eF9tYXAoc3Ry dWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwNCisJCQkgICAgIGlycV9o d19udW1iZXJfdCBod2lycSkNCit7DQorCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGly cSwgJm10a19pbnR4X2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxLA0KKwkJCQkgICAgICAiSU5U eCIpOw0KKwlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi0+aG9zdF9kYXRhKTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaW50 eF9kb21haW5fb3BzID0gew0KKwkubWFwID0gbXRrX3BjaWVfaW50eF9tYXAsDQorfTsNCisNCitz dGF0aWMgaW50IG10a19wY2llX2luaXRfaXJxX2RvbWFpbnMoc3RydWN0IG10a19wY2llX3BvcnQg KnBvcnQsDQorCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmludGNfbm9k ZTsNCisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9IG9mX25vZGVfdG9fZndub2RlKG5v ZGUpOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCisJc3RydWN0IG1zaV9kb21h aW5faW5mbyAqaW5mbzsNCisJaW50IGksIHZhbCwgcmV0Ow0KKw0KKwkvKiBTZXR1cCBJTlR4ICov DQorCWludGNfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5vZGUsICJpbnRlcnJ1cHQtY29u dHJvbGxlciIpOw0KKwlpZiAoIWludGNfbm9kZSkgew0KKwkJZGV2X25vdGljZShkZXYsICJNaXNz aW5nIFBDSWUgSW50YyBub2RlXG4iKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCXBv cnQtPmludHhfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKGludGNfbm9kZSwgUENJX05V TV9JTlRYLA0KKwkJCQkJCSAgJmludHhfZG9tYWluX29wcywgcG9ydCk7DQorCWlmICghcG9ydC0+ aW50eF9kb21haW4pIHsNCisJCWRldl9ub3RpY2UoZGV2LCAiZmFpbGVkIHRvIGdldCBJTlR4IElS USBkb21haW5cbiIpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJLyogU2V0dXAgTVNJ ICovDQorCW11dGV4X2luaXQoJnBvcnQtPmxvY2spOw0KKw0KKwlpbmZvID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghaW5mbykNCisJCXJldHVy biAtRU5PTUVNOw0KKw0KKwltZW1jcHkoaW5mbywgJm10a19tc2lfZG9tYWluX2luZm8sIHNpemVv ZigqaW5mbykpOw0KKwlpbmZvLT5jaGlwX2RhdGEgPSBwb3J0Ow0KKw0KKwlwb3J0LT5tc2lfZG9t YWluID0gcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUsIGluZm8sIE5VTEwpOw0KKwlp ZiAoIXBvcnQtPm1zaV9kb21haW4pIHsNCisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVh dGUgbXNpIGRvbWFpblxuIik7DQorCQlyZXQgPSAtRU5PREVWOw0KKwkJZ290byBlcnJfbXNpX2Rv bWFpbjsNCisJfQ0KKw0KKwkvKiBFbmFibGUgTVNJIGFuZCBzZXR1cCBwY2llIGRvbWFpbnMgKi8N CisJcG9ydC0+bXNpX3RvcF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9oaWVyYXJjaHkoTlVMTCwg MCwgMCwgbm9kZSwNCisJCQkJCQkJJm10a19tc2lfdG9wX2RvbWFpbl9vcHMsDQorCQkJCQkJCXBv cnQpOw0KKwlpZiAoIXBvcnQtPm1zaV90b3BfZG9tYWluKSB7DQorCQlkZXZfaW5mbyhkZXYsICJm YWlsZWQgdG8gY3JlYXRlIG1zaSB0b3AgZG9tYWluXG4iKTsNCisJCXJldCA9IC1FTk9ERVY7DQor CQlnb3RvIGVycl9tc2lfdG9wX2RvbWFpbjsNCisJfQ0KKw0KKwlwb3J0LT5tc2lfaW5mbyA9IGRl dm1fa3phbGxvYyhkZXYsIFBDSUVfTVNJX1NFVF9OVU0sIEdGUF9LRVJORUwpOw0KKwlpZiAoIXBv cnQtPm1zaV9pbmZvKSB7DQorCQlyZXQgPSAtRU5PTUVNOw0KKwkJZ290byBlcnJfbXNpX2luZm87 DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX1NFVF9OVU07IGkrKykgew0KKwkJ aW50IG9mZnNldCA9IGkgKiBQQ0lFX01TSV9TRVRfT0ZGU0VUOw0KKw0KKwkJbXNpX2luZm8gPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1zaV9pbmZvKSwgR0ZQX0tFUk5FTCk7DQorCQlpZiAo IW1zaV9pbmZvKSB7DQorCQkJcmV0ID0gLUVOT01FTTsNCisJCQlnb3RvIGVycl9tc2lfc2V0Ow0K KwkJfQ0KKw0KKwkJbXNpX2luZm8tPmJhc2UgPSBwb3J0LT5iYXNlICsgUENJRV9NU0lfQUREUl9C QVNFX1JFRyArIG9mZnNldDsNCisJCW1zaV9pbmZvLT5tc2dfYWRkciA9IHBvcnQtPnJlZ19iYXNl ICsgUENJRV9NU0lfQUREUl9CQVNFX1JFRyArDQorCQkJCSAgICAgb2Zmc2V0Ow0KKw0KKwkJd3Jp dGVsKGxvd2VyXzMyX2JpdHMobXNpX2luZm8tPm1zZ19hZGRyKSwgbXNpX2luZm8tPmJhc2UpOw0K Kw0KKwkJbXNpX2luZm8tPmh3aXJxID0gaTsNCisJCW1zaV9pbmZvLT5pbmRleCA9IGk7DQorCQlt c2lfaW5mby0+ZG9tYWluID0gcG9ydC0+bXNpX2RvbWFpbjsNCisNCisJCXBvcnQtPm1zaV9pbmZv W2ldID0gbXNpX2luZm87DQorDQorCQkvKiBBbGxvYyBpcnEgZm9yIGVhY2ggbXNpIHNldCAqLw0K KwkJbXNpX2luZm8tPmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhwb3J0LT5tc2lfdG9wX2RvbWFp biwgaSk7DQorCQlpZiAobXNpX2luZm8tPmlycSA8IDApIHsNCisJCQlkZXZfaW5mbyhkZXYsICJh bGxvY2F0ZSBtc2kgdG9wIGlycSBmYWlsZWRcbiIpOw0KKwkJCXJldCA9IC1FTk9TUEM7DQorCQkJ Z290byBlcnJfbXNpX3NldDsNCisJCX0NCisNCisJCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQ Q0lFX0lOVF9FTkFCTEVfUkVHKTsNCisJCXZhbCB8PSAoMSA8PCAoaSArIFBDSUVfTVNJX1NISUZU KSk7DQorCQl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQor DQorCQl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9SRUcpOw0K KwkJdmFsIHw9ICgxIDw8IGkpOw0KKwkJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfTVNJ X1NFVF9FTkFCTEVfUkVHKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfbXNpX3NldDoN CisJd2hpbGUgKC0taSA+PSAwKSB7DQorCQltc2lfaW5mbyA9IHBvcnQtPm1zaV9pbmZvW2ldOw0K KwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhtc2lfaW5mby0+aXJxKTsNCisJfQ0KK2Vycl9tc2lfaW5m bzoNCisJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX3RvcF9kb21haW4pOw0KK2Vycl9tc2lf dG9wX2RvbWFpbjoNCisJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX2RvbWFpbik7DQorZXJy X21zaV9kb21haW46DQorCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPmludHhfZG9tYWluKTsNCisN CisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX3BjaWVfaXJxX3RlYXJkb3du KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3RydWN0IG10a19wY2llX21zaSAq bXNpX2luZm87DQorCWludCBpOw0KKw0KKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0 YShwb3J0LT5pcnEsIE5VTEwsIE5VTEwpOw0KKw0KKwlpZiAocG9ydC0+aW50eF9kb21haW4pDQor CQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFpbik7DQorDQorCWlmIChwb3J0LT5t c2lfZG9tYWluKQ0KKwkJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX2RvbWFpbik7DQorDQor CWlmIChwb3J0LT5tc2lfdG9wX2RvbWFpbikgew0KKwkJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJ X1NFVF9OVU07IGkrKykgew0KKwkJCW1zaV9pbmZvID0gcG9ydC0+bXNpX2luZm9baV07DQorCQkJ aXJxX2Rpc3Bvc2VfbWFwcGluZyhtc2lfaW5mby0+aXJxKTsNCisJCX0NCisNCisJCWlycV9kb21h aW5fcmVtb3ZlKHBvcnQtPm1zaV90b3BfZG9tYWluKTsNCisJfQ0KKw0KKwlpcnFfZGlzcG9zZV9t YXBwaW5nKHBvcnQtPmlycSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10a19wY2llX2lycV9oYW5k bGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpw b3J0ID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsNCisJc3RydWN0IGlycV9jaGlw ICppcnFjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7DQorCXVuc2lnbmVkIGxvbmcgc3Rh dHVzOw0KKwl1MzIgdmlycTsNCisJdTMyIGlycV9iaXQgPSBQQ0lFX0lOVFhfU0hJRlQ7DQorDQor CWNoYWluZWRfaXJxX2VudGVyKGlycWNoaXAsIGRlc2MpOw0KKw0KKwlzdGF0dXMgPSByZWFkbChw b3J0LT5iYXNlICsgUENJRV9JTlRfU1RBVFVTX1JFRyk7DQorCWlmIChzdGF0dXMgJiBQQ0lFX0lO VFhfTUFTSykgew0KKwkJZm9yX2VhY2hfc2V0X2JpdF9mcm9tKGlycV9iaXQsICZzdGF0dXMsIFBD SV9OVU1fSU5UWCArDQorCQkJCSAgICAgIFBDSUVfSU5UWF9TSElGVCkgew0KKwkJCXZpcnEgPSBp cnFfZmluZF9tYXBwaW5nKHBvcnQtPmludHhfZG9tYWluLA0KKwkJCQkJCWlycV9iaXQgLSBQQ0lF X0lOVFhfU0hJRlQpOw0KKwkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsNCisJCX0NCisJfQ0K Kw0KKwlpZiAoc3RhdHVzICYgUENJRV9NU0lfTUFTSykgew0KKwkJaXJxX2JpdCA9IFBDSUVfTVNJ X1NISUZUOw0KKwkJZm9yX2VhY2hfc2V0X2JpdF9mcm9tKGlycV9iaXQsICZzdGF0dXMsIFBDSUVf TVNJX1NFVF9OVU0gKw0KKwkJCQkgICAgICBQQ0lFX01TSV9TSElGVCkgew0KKwkJCXZpcnEgPSBp cnFfZmluZF9tYXBwaW5nKHBvcnQtPm1zaV90b3BfZG9tYWluLA0KKwkJCQkJCWlycV9iaXQgLSBQ Q0lFX01TSV9TSElGVCk7DQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0KKwkJfQ0KKwl9 DQorDQorCWNoYWluZWRfaXJxX2V4aXQoaXJxY2hpcCwgZGVzYyk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgbXRrX3BjaWVfc2V0dXBfaXJxKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0LA0KKwkJCSAg ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 IHBvcnQtPmRldjsNCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3Jt X2RldmljZShkZXYpOw0KKwlpbnQgZXJyOw0KKw0KKwllcnIgPSBtdGtfcGNpZV9pbml0X2lycV9k b21haW5zKHBvcnQsIG5vZGUpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90aWNlKGRldiwgImZh aWxlZCB0byBpbml0IFBDSWUgSVJRIGRvbWFpblxuIik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQor DQorCXBvcnQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQorCWlmIChwb3J0LT5p cnEgPCAwKQ0KKwkJcmV0dXJuIHBvcnQtPmlycTsNCisNCisJaXJxX3NldF9jaGFpbmVkX2hhbmRs ZXJfYW5kX2RhdGEocG9ydC0+aXJxLCBtdGtfcGNpZV9pcnFfaGFuZGxlciwgcG9ydCk7DQorDQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19wY2llX2Nsa19pbml0KHN0cnVjdCBt dGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2 Ow0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0KKwlpbnQgaTsNCisN CisJcG9ydC0+bnVtX2Nsa3MgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQorCWlmIChw b3J0LT5udW1fY2xrcyA9PSAwKSB7DQorCQlkZXZfbm90aWNlKGRldiwgInBjaWUgY2xvY2sgaXMg bm90IGZvdW5kXG4iKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXBvcnQtPmNsa3Mg PSBkZXZtX2t6YWxsb2MoZGV2LCBwb3J0LT5udW1fY2xrcywgR0ZQX0tFUk5FTCk7DQorCWlmICgh cG9ydC0+Y2xrcykNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcG9y dC0+bnVtX2Nsa3M7IGkrKykgew0KKwkJc3RydWN0IGNsayAgICAgICpjbGs7DQorCQlpbnQgICAg ICAgICAgICAgcmV0Ow0KKw0KKwkJY2xrID0gb2ZfY2xrX2dldChucCwgaSk7DQorCQlpZiAoSVNf RVJSKGNsaykpIHsNCisJCQl3aGlsZSAoLS1pID49IDApDQorCQkJCWNsa19wdXQocG9ydC0+Y2xr c1tpXSk7DQorCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsNCisJCX0NCisNCisJCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShjbGspOw0KKwkJaWYgKHJldCA8IDApIHsNCisJCQl3aGlsZSAoLS1pID49 IDApIHsNCisJCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPmNsa3NbaV0pOw0KKwkJCQlj bGtfcHV0KHBvcnQtPmNsa3NbaV0pOw0KKwkJCX0NCisJCQljbGtfcHV0KGNsayk7DQorDQorCQkJ cmV0dXJuIHJldDsNCisJCX0NCisNCisJCXBvcnQtPmNsa3NbaV0gPSBjbGs7DQorCX0NCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfZGlzYWJsZV9jbGsoc3RydWN0 IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlpbnQgaTsNCisNCisJaWYgKHBvcnQtPm51bV9j bGtzID09IDApDQorCQlyZXR1cm4gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9j bGtzOyBpKyspIHsNCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwb3J0LT5jbGtzW2ldKTsNCisJ CWNsa19wdXQocG9ydC0+Y2xrc1tpXSk7DQorCX0NCisNCisJcG9ydC0+bnVtX2Nsa3MgPSAwOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtfcGNpZV9wb3dlcl91cChzdHJ1 Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQt PmRldjsNCisJaW50IGVycjsNCisNCisJcG9ydC0+cGh5X3Jlc2V0ID0gZGV2bV9yZXNldF9jb250 cm9sX2dldF9vcHRpb25hbChkZXYsICJwaHktcnN0Iik7DQorCWlmIChQVFJfRVJSKHBvcnQtPnBo eV9yZXNldCkgPT0gLUVQUk9CRV9ERUZFUikNCisJCXJldHVybiBQVFJfRVJSKHBvcnQtPnBoeV9y ZXNldCk7DQorDQorCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocG9ydC0+cGh5X3Jlc2V0KTsNCisN CisJLyogcGh5IHBvd2VyIG9uIGFuZCBlbmFibGUgcGlwZSBjbG9jayAqLw0KKwlwb3J0LT5waHkg PSBkZXZtX3BoeV9vcHRpb25hbF9nZXQoZGV2LCAicGNpZS1waHkiKTsNCisJaWYgKElTX0VSUihw b3J0LT5waHkpKQ0KKwkJcG9ydC0+cGh5ID0gTlVMTDsNCisNCisJZXJyID0gcGh5X2luaXQocG9y dC0+cGh5KTsNCisJaWYgKGVycikgew0KKwkJZGV2X25vdGljZShkZXYsICJmYWlsZWQgdG8gaW5p dGlhbGl6ZSBwY2llIHBoeVxuIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwllcnIg PSBwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsNCisJaWYgKGVycikgew0KKwkJZGV2X25vdGljZShk ZXYsICJmYWlsZWQgdG8gcG93ZXIgb24gcGNpZSBwaHlcbiIpOw0KKwkJZ290byBlcnJfcGh5X29u Ow0KKwl9DQorDQorCXBvcnQtPm1hY19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0 aW9uYWwoZGV2LCAibWFjLXJzdCIpOw0KKwlpZiAoUFRSX0VSUihwb3J0LT5tYWNfcmVzZXQpID09 IC1FUFJPQkVfREVGRVIpDQorCQlyZXR1cm4gUFRSX0VSUihwb3J0LT5tYWNfcmVzZXQpOw0KKw0K KwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHBvcnQtPm1hY19yZXNldCk7DQorDQorCS8qIG1hYyBw b3dlciBvbiBhbmQgZW5hYmxlIHRyYW5zYWN0aW9uIGxheWVyIGNsb2NrcyAqLw0KKwlwbV9ydW50 aW1lX2VuYWJsZShkZXYpOw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7DQorDQorCWVyciA9 IG10a19wY2llX2Nsa19pbml0KHBvcnQpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90aWNlKGRl diwgImNsb2NrIGluaXQgZmFpbGVkXG4iKTsNCisJCWdvdG8gZXJyX2Nsa19pbml0Ow0KKwl9DQor DQorCXJldHVybiAwOw0KKw0KK2Vycl9jbGtfaW5pdDoNCisJcG1fcnVudGltZV9wdXRfc3luYyhk ZXYpOw0KKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsNCisJcmVzZXRfY29udHJvbF9hc3NlcnQo cG9ydC0+bWFjX3Jlc2V0KTsNCisJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KK2Vycl9waHlf b246DQorCXBoeV9leGl0KHBvcnQtPnBoeSk7DQorCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQt PnBoeV9yZXNldCk7DQorDQorCXJldHVybiAtRUJVU1k7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10 a19wY2llX3Bvd2VyX2Rvd24oc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlwaHlf cG93ZXJfb2ZmKHBvcnQtPnBoeSk7DQorCXBoeV9leGl0KHBvcnQtPnBoeSk7DQorDQorCW10a19w Y2llX2Rpc2FibGVfY2xrKHBvcnQpOw0KKw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBvcnQtPmRl dik7DQorCXBtX3J1bnRpbWVfZGlzYWJsZShwb3J0LT5kZXYpOw0KK30NCisNCitzdGF0aWMgaW50 IG10a19wY2llX3NldHVwKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7DQorCXN0cnVjdCByZXNvdXJjZSAqcmVnczsNCisJ aW50IGVycjsNCisNCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwg SU9SRVNPVVJDRV9NRU0sICJwY2llLW1hYyIpOw0KKwlwb3J0LT5iYXNlID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVncyk7DQorCWlmIChJU19FUlIocG9ydC0+YmFzZSkpIHsNCisJCWRl dl9ub3RpY2UoZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlciBiYXNlXG4iKTsNCisJCXJldHVy biBQVFJfRVJSKHBvcnQtPmJhc2UpOw0KKwl9DQorDQorCXBvcnQtPnJlZ19iYXNlID0gcmVncy0+ c3RhcnQ7DQorDQorCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgYmVmb3Jl IHBvd2VyIHVwICovDQorCWVyciA9IG10a19wY2llX3Bvd2VyX3VwKHBvcnQpOw0KKwlpZiAoZXJy KQ0KKwkJcmV0dXJuIGVycjsNCisNCisJLyogVHJ5IGxpbmsgdXAgKi8NCisJZXJyID0gbXRrX3Bj aWVfc3RhcnR1cF9wb3J0KHBvcnQpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90aWNlKGRldiwg IlBDSWUgbGluayBkb3duXG4iKTsNCisJCWdvdG8gZXJyX3NldHVwOw0KKwl9DQorDQorCWVyciA9 IG10a19wY2llX3NldHVwX2lycShwb3J0LCBkZXYtPm9mX25vZGUpOw0KKwlpZiAoZXJyKQ0KKwkJ Z290byBlcnJfc2V0dXA7DQorDQorCWRldl9pbmZvKGRldiwgIlBDSWUgbGluayB1cCBzdWNjZXNz IVxuIik7DQorDQorCXJldHVybiAwOw0KKw0KK2Vycl9zZXR1cDoNCisJbXRrX3BjaWVfcG93ZXJf ZG93bihwb3J0KTsNCisNCisJcmV0dXJuIGVycjsNCit9DQorDQorc3RhdGljIGludCBtdGtfcGNp ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQ7DQorCXN0 cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3Q7DQorCWludCBlcnI7DQorDQorCWhvc3QgPSBkZXZt X3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYsIHNpemVvZigqcG9ydCkpOw0KKwlpZiAoIWhvc3Qp DQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcG9ydCA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGhv c3QpOw0KKw0KKwlwb3J0LT5kZXYgPSBkZXY7DQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IHBvcnQpOw0KKw0KKwllcnIgPSBtdGtfcGNpZV9zZXR1cChwb3J0KTsNCisJaWYgKGVycikNCisJ CXJldHVybiBlcnI7DQorDQorCWhvc3QtPmRldi5wYXJlbnQgPSBwb3J0LT5kZXY7DQorCWhvc3Qt Pm9wcyA9ICZtdGtfcGNpZV9vcHM7DQorCWhvc3QtPnN5c2RhdGEgPSBwb3J0Ow0KKw0KKwllcnIg PSBwY2lfaG9zdF9wcm9iZShob3N0KTsNCisJaWYgKGVycikgew0KKwkJbXRrX3BjaWVfcG93ZXJf ZG93bihwb3J0KTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbXRrX3BjaWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp DQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOw0KKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0ID0gcGNpX2hvc3RfYnJpZGdl X2Zyb21fcHJpdihwb3J0KTsNCisNCisJcGNpX3N0b3Bfcm9vdF9idXMoaG9zdC0+YnVzKTsNCisJ cGNpX3JlbW92ZV9yb290X2J1cyhob3N0LT5idXMpOw0KKw0KKwltdGtfcGNpZV9pcnFfdGVhcmRv d24ocG9ydCk7DQorCW10a19wY2llX3Bvd2VyX2Rvd24ocG9ydCk7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10a19wY2llX3R1cm5fb2ZmX2xpbmso c3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlpbnQgdmFsOw0KKw0KKwl2YWwgPSBy ZWFkbChwb3J0LT5iYXNlICsgUENJRV9JQ01EX1BNX1JFRyk7DQorCXZhbCB8PSBQQ0lFX1RVUk5f T0ZGX0xJTks7DQorCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX0lDTURfUE1fUkVHKTsN CisNCisJLyogQ2hlY2sgdGhlIGxpbmsgaXMgTDIgKi8NCisJcmV0dXJuIHJlYWRsX3BvbGxfdGlt ZW91dChwb3J0LT5iYXNlICsgUENJRV9MVFNTTV9TVEFUVVNfUkVHLCB2YWwsDQorCQkJCSAgKFBD SUVfTFRTU01fU1RBVEUodmFsKSA9PQ0KKwkJCQkgICBQQ0lFX0xUU1NNX1NUQVRFX0wyX0lETEUp LCAyMCwNCisJCQkJICAgNTAgKiBVU0VDX1BFUl9NU0VDKTsNCit9DQorDQorc3RhdGljIGludCBf X21heWJlX3VudXNlZCBtdGtfcGNpZV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikN Cit7DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQorCWludCBpLCBlcnIsIHZhbDsNCisNCisJaWYgKHBvcnQtPmlzX3N1c3BlbmRlZCkNCisJCXJl dHVybiAwOw0KKw0KKwkvKiBUcmlnZ2VyIGxpbmsgdG8gTDIgc3RhdGUgKi8NCisJZXJyID0gbXRr X3BjaWVfdHVybl9vZmZfbGluayhwb3J0KTsNCisJaWYgKGVycikgew0KKwkJZGV2X25vdGljZShw b3J0LT5kZXYsICJjYW4gbm90IGVudGVyIEwyIHN0YXRlXG4iKTsNCisJCWdvdG8gcG93ZXJfb2Zm Ow0KKwl9DQorDQorCS8qIFB1bGwgZG93biB0aGUgUEVSU1QjIHBpbiAqLw0KKwl2YWwgPSByZWFk bChwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RSTF9SRUcpOw0KKwl2YWwgfD0gUENJRV9QRV9SU1RC Ow0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RSTF9SRUcpOw0KKw0KKwlk ZXZfaW5mbyhwb3J0LT5kZXYsICJlbnRlciBMMiBzdGF0ZSBzdWNjZXNzIik7DQorDQorcG93ZXJf b2ZmOg0KKwlwaHlfcG93ZXJfb2ZmKHBvcnQtPnBoeSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBw b3J0LT5udW1fY2xrczsgaSsrKQ0KKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPmNsa3Nb aV0pOw0KKw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBvcnQtPmRldik7DQorDQorCXBvcnQtPmlz X3N1c3BlbmRlZCA9IHRydWU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IF9f bWF5YmVfdW51c2VkIG10a19wY2llX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpDQor ew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K KwlpbnQgaSwgZXJyOw0KKw0KKwlpZiAoIXBvcnQtPmlzX3N1c3BlbmRlZCkNCisJCXJldHVybiAw Ow0KKw0KKwlwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsNCisNCisJcG1fcnVudGltZV9nZXRfc3lu Yyhwb3J0LT5kZXYpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2Nsa3M7IGkrKykg ew0KKwkJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBvcnQtPmNsa3NbaV0pOw0KKwkJaWYgKGVy ciA8IDApIHsNCisJCQl3aGlsZSAoLS1pID49IDApDQorCQkJCWNsa19kaXNhYmxlX3VucHJlcGFy ZShwb3J0LT5jbGtzW2ldKTsNCisJCQlyZXR1cm4gZXJyOw0KKwkJfQ0KKwl9DQorDQorCWVyciA9 IG10a19wY2llX3N0YXJ0dXBfcG9ydChwb3J0KTsNCisJaWYgKGVycikgew0KKwkJZGV2X25vdGlj ZShwb3J0LT5kZXYsICJyZXN1bWUgZmFpbGVkXG4iKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisN CisJcG9ydC0+aXNfc3VzcGVuZGVkID0gZmFsc2U7DQorDQorCWRldl9pbmZvKHBvcnQtPmRldiwg InJlc3VtZSBkb25lXG4iKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZGV2X3BtX29wcyBtdGtfcGNpZV9wbV9vcHMgPSB7DQorCVNFVF9OT0lSUV9TWVNURU1f U0xFRVBfUE1fT1BTKG10a19wY2llX3N1c3BlbmRfbm9pcnEsDQorCQkJCSAgICAgIG10a19wY2ll X3Jlc3VtZV9ub2lycSkNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IG10a19wY2llX29mX21hdGNoW10gPSB7DQorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssZ2Vu My1wY2llIiB9LA0KKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE5Mi1wY2llIiB9LA0K Kwl7fSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19wY2llX2Ry aXZlciA9IHsNCisJLnByb2JlID0gbXRrX3BjaWVfcHJvYmUsDQorCS5yZW1vdmUgPSBtdGtfcGNp ZV9yZW1vdmUsDQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9ICJtdGstcGNpZSIsDQorCQkub2Zf bWF0Y2hfdGFibGUgPSBtdGtfcGNpZV9vZl9tYXRjaCwNCisJCS5zdXBwcmVzc19iaW5kX2F0dHJz ID0gdHJ1ZSwNCisJCS5wbSA9ICZtdGtfcGNpZV9wbV9vcHMsDQorCX0sDQorfTsNCisNCittb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKG10a19wY2llX2RyaXZlcik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOw0KLS0gDQoyLjI1LjENCg==