From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 02/15] drm/i915: Embedded microcontroller (uC) firmware loading support Date: Fri, 3 Jul 2015 13:30:24 +0100 Message-ID: <1435926637-30892-3-git-send-email-david.s.gordon@intel.com> References: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id E73736E304 for ; Fri, 3 Jul 2015 05:30:56 -0700 (PDT) In-Reply-To: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q3VycmVudCBkZXZpY2VzIG1heSBjb250YWluIG9uZSBvciBtb3JlIHByb2dyYW1tYWJsZSBtaWNy b2NvbnRyb2xsZXJzCnRoYXQgbmVlZCB0byBoYXZlIGEgZmlybXdhcmUgaW1hZ2UgKGFrYSAiYmlu YXJ5IGJsb2IiKSBsb2FkZWQgZnJvbSBhbgpleHRlcm5hbCBtZWRpdW0gYW5kIHRyYW5zZmVycmVk IHRvIHRoZSBkZXZpY2UncyBtZW1vcnkuCgpUaGlzIGZpbGUgcHJvdmlkZXMgY29tbW9uIHN1cHBv cnQgZnVuY3Rpb25zIGZvciBkb2luZyB0aGlzOyB0aGV5IGNhbgp0aGVuIGJlIHVzZWQgYnkgZWFj aCB1Qy1zcGVjaWZpYyBsb2FkZXIsIHRodXMgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbgphbmQg dGVzdGluZyBlZmZvcnQuCgp2MjoKICAgIExvY2FsIGZ1bmN0aW9ucyBzaG91bGQgcGFzcyBkZXZf cHJpdiByYXRoZXIgdGhhbiBkZXYgW0NocmlzIFdpbHNvbl0KICAgIFZhcmlvdXMgb3RoZXIgaW1w cm92ZW1lbnRzIHBlciBDaHJpcyBXaWxzb24ncyByZXZpZXcgY29tbWVudHMKCnYzOgogICAgRGVm ZWF0dXJlZCB2ZXJzaW9uIHdpdGhvdXQgYXN5bmMgcHJlZmV0Y2ggW0RhbmllbCBWZXR0ZXJdCgpT aWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF91Y19sb2FkZXIuYyB8IDMxMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oIHwgIDkyICsrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNDA1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQppbmRleCBkZTIxOTY1Li5mMWY4MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMzksNiAr MzksOSBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAogCSAgaW50ZWxfcmluZ2J1ZmZl ci5vIFwKIAkgIGludGVsX3VuY29yZS5vCiAKKyMgZ2VuZXJpYyBhbmNpbGxpYXJ5IG1pY3JvY29u dHJvbGxlciBzdXBwb3J0CitpOTE1LXkgKz0gaW50ZWxfdWNfbG9hZGVyLm8KKwogIyBhdXRvZ2Vu ZXJhdGVkIG51bGwgcmVuZGVyIHN0YXRlCiBpOTE1LXkgKz0gaW50ZWxfcmVuZGVyc3RhdGVfZ2Vu Ni5vIFwKIAkgIGludGVsX3JlbmRlcnN0YXRlX2dlbjcubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VjX2xvYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmMx ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2Fk ZXIuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcjoKKyAqCURhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+ CisgKi8KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImk5MTVfZHJ2Lmgi CisjaW5jbHVkZSAiaW50ZWxfdWNfbG9hZGVyLmgiCisKKy8qKgorICogRE9DOiBDb21tb24gZnVu Y3Rpb25zIGZvciBlbWJlZGRlZCBtaWNyb2NvbnRyb2xsZXIgKHVDKSBmaXJtd2FyZSBsb2FkaW5n CisgKgorICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgcHJvdmlkZSBjb21tb24gc3VwcG9y dCBjb2RlIGZvciBsb2FkaW5nIHRoZQorICogZmlybXdhcmUgdGhhdCBtYXkgYmUgcmVxdWlyZWQg YnkgYW4gZW1iZWRkZWQgbWljcm9jb250cm9sbGVyICh1QykuCisgKgorICogVGhlIGZ1bmN0aW9u IGludGVsX3VjX2Z3X2luaXQoKSBzaG91bGQgYmUgY2FsbGVkIGZpcnN0OyBpdCByZXF1aXJlcyBu bworICogbG9ja2luZywgYW5kIGNhbiBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgR0VNIGhhcyBiZWVu IGluaXRpYWxpc2VkLiBJdCBqdXN0CisgKiBpbml0aWFsaXNlcyB0aGUgdHJhY2tpbmcgZGF0YSBh bmQgc3RvcmVzIGl0cyBwYXJhbWV0ZXJzIGZvciB0aGUgc3Vic2VxdWVudAorICogY2FsbCB0byBp bnRlbF91Y19md19mZXRjaCgpLgorICoKKyAqIEF0IHNvbWUgY29udmVuaWVudCBwb2ludCBhZnRl ciBHRU0gaW5pdGlhbGlzYXRpb24sIHRoZSBkcml2ZXIgc2hvdWxkIGNhbGwKKyAqIGludGVsX3Vj X2Z3X2ZldGNoKCkuIFRoZSBmaXJzdCB0aW1lLCB0aGlzIHdpbGwgdXNlIHRoZSBMaW51eCBrZXJu ZWwncworICogcmVxdWVzdF9maXJtd2FyZSgpIGNhbGwgdG8gb3BlbiBhbmQgcmVhZCB0aGUgZmly bXdhcmUgaW1hZ2UgaW50byBtZW1vcnkuCisgKiAoT24gc3Vic2VxdWVudCBjYWxscywgdGhpcyBp cyBza2lwcGVkLCBhcyBlaXRoZXIgdGhlIGZpcm13YXJlIGhhcyBhbHJlYWR5CisgKiBiZWVuIGZl dGNoZWQgaW50byBtZW1vcnksIG9yIGl0IGlzIGFscmVhZHkga25vd24gdGhhdCBubyB2YWxpZCBm aXJtd2FyZQorICogaW1hZ2UgY291bGQgYmUgZm91bmQpLgorICoKKyAqIFRoZSBjYWxsYmFjaygp IGZ1bmN0aW9uIHBhc3NlZCB0byBpbnRlbF91Y19md19mZXRjaCgpIGNhbiBmdXJ0aGVyIGNoZWNr CisgKiB0aGUgZmlybXdhcmUgaW1hZ2UgYmVmb3JlIGl0IGlzIHNhdmVkLiBUaGlzIGZ1bmN0aW9u IGNhbiByZWplY3QgdGhlIGltYWdlCisgKiBieSByZXR1cm5pbmcgYSBuZWdhdGl2ZSBlcnJvciBj b2RlIChlLmcuIC1FTk9FWEVDKSwgb3IgYWNjZXB0IGl0LiBJbiB0aGUKKyAqIGxhdHRlciBjYXNl LCBpdCBjYW4gcmV0dXJuIElOVEVMX1VDX0ZXX0dPT0QgKHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1 bHQgaWYKKyAqIG5vIGNhbGxiYWNrKCkgaXMgc3VwcGxpZWQpLCBhbmQgdGhlIGNvbW1vbiBjb2Rl IGhlcmUgd2lsbCBzYXZlIHRoZSB3aG9sZQorICogb2YgdGhlIGZpcm13YXJlIGltYWdlIGluIGEg KHBhZ2VhYmxlLCBzaG1mcy1iYWNrZWQpIEdFTSBvYmplY3QuCisgKgorICogSWYgc2F2aW5nIHRo ZSB3aG9sZSBpbWFnZSB1bm1vZGlmaWVkIGlzIG5vdCBhcHByb3ByaWF0ZSAoZm9yIGV4YW1wbGUs IGlmCisgKiBvbmx5IGEgc21hbGwgcGFydCBvZiB0aGUgaW1hZ2UgaXMgbmVlZGVkIGxhdGVyLCBv ciB0aGUgZGF0YSBuZWVkcyB0byBiZQorICogcmVvcmdhbmlzZWQgYmVmb3JlIHNhdmluZyksIHRo ZSBjYWxsYmFjaygpIGZ1bmN0aW9uIGNhbiBpbnN0ZWFkIG1ha2UgaXRzCisgKiBvd24gYXJyYW5n ZW1lbnRzIGZvciBzYXZpbmcgdGhlIHJlcXVpcmVkIGRhdGEgaW4gYSBHRU0gb2JqZWN0IG9yIG90 aGVyd2lzZQorICogYW5kIHRoZW4gcmV0dXJuIElOVEVMX1VDX0ZXX1NBVkVELgorICoKKyAqIChJ ZiBzdWNoIGEgY2FsbGJhY2sgZG9lcyBzdGFzaCAoc29tZSBvZikgdGhlIGltYWdlIGRhdGEgaW4g YSBHRU0gb2JqZWN0LAorICogaXQgY2FuIHVzZSB0aGUgdWNfZndfb2JqIGFuZCB1Y19md19zaXpl IGZpZWxkczsgdGhlIGNvbW1vbiBmcmFtZXdvcmsgd2lsbAorICogdGhlbiBoYW5kbGUgZGVhbGxv Y2F0aW5nIHRoZSBvYmplY3Qgb24gZmFpbHVyZSBvciBmaW5hbGlzYXRpb24uIE90aGVyd2lzZQor ICogYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgd2lsbCBoYXZlIHRvIGJlIG1hbmFnZWQgYnkgdGhl IHVDLXNwZWNpZmljIGNvZGUpLgorICoKKyAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGlu dGVsX3VjX2Z3X2ZldGNoKCksIHRoZSB1Qy1zcGVjaWZpYyBjb2RlIGNhbgorICogdHJhbnNmZXIg dGhlIGRhdGEgaW4gdGhlIEdFTSBvYmplY3QgKG9yIGl0cyBvd24gYWx0ZXJuYXRpdmUpIHRvIHRo ZSB1QydzCisgKiBtZW1vcnkgKGluIHNvbWUgdUMtc3BlY2lmaWMgd2F5LCBub3QgaGFuZGxlZCBo ZXJlKS4KKyAqCisgKiBEdXJpbmcgZHJpdmVyIHNodXRkb3duLCBvciBpZiBkcml2ZXIgbG9hZCBp cyBhYm9ydGVkLCBpbnRlbF91Y19md19maW5pKCkKKyAqIHNob3VsZCBiZSBjYWxsZWQgdG8gcmVs ZWFzZSBhbnkgcmVtYWluaW5nIHJlc291cmNlcy4KKyAqLworCisvKiBVc2VyLWZyaWVuZGx5IHJl cHJlc2VudGF0aW9uIG9mIGFuIGVudW0gKi8KK2NvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1 c19yZXByKGVudW0gaW50ZWxfdWNfZndfc3RhdHVzIHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1 cykgeworCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfRkFJTDoKKwkJcmV0dXJuICJGQUlMIjsKKwlj YXNlIElOVEVMX1VDX0ZJUk1XQVJFX05PTkU6CisJCXJldHVybiAiTk9ORSI7CisJY2FzZSBJTlRF TF9VQ19GSVJNV0FSRV9QRU5ESU5HOgorCQlyZXR1cm4gIlBFTkRJTkciOworCWNhc2UgSU5URUxf VUNfRklSTVdBUkVfU1VDQ0VTUzoKKwkJcmV0dXJuICJTVUNDRVNTIjsKKwlkZWZhdWx0OgorCQly ZXR1cm4gIlVOS05PV04hIjsKKwl9Cit9OworCisvKgorICogQ2FsbGVkIG9uY2UgcGVyIHVDLCBs YXRlIGluIGRyaXZlciBpbml0aWFsaXNhdGlvbiwgYWZ0ZXIgR0VNIGlzIHNldCB1cC4KKyAqIEZp cnN0LCB3ZSBmZXRjaCB0aGUgZmlybXdhcmUgaW1hZ2UgdXNpbmcgcmVxdWVzdF9maXJtd2FyZSgp LCB0aGVuIGFsbG93CisgKiB0aGUgb3B0aW9uYWwgY2FsbGJhY2soKSBmdW5jdGlvbiB0byBjaGVj ayBpdC4gSWYgaXQncyBnb29kLCBhbmQgY2FsbGJhY2soKQorICogZG9lc24ndCBzYXkgaXQncyBh bHJlYWR5IHNhdmVkIHRoZSBpbWFnZSwgd2Ugd2lsbCBzYXZlIGl0IGhlcmUgYnkgY29weWluZwor ICogdGhlIHdob2xlIHRoaW5nIGludG8gYSAocGFnZWFibGUsIHNobWZzLWJhY2tlZCkgR0VNIG9i amVjdCwKKyAqLworc3RhdGljIHZvaWQKK3VjX2Z3X2ZldGNoKHN0cnVjdCBpbnRlbF91Y19mdyAq dWNfZncsCisJICAgIGludCBjYWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHVjX2Z3LT51Y19kZXY7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBjYl9zdGF0 dXMgPSBJTlRFTF9VQ19GV19HT09EOworCisJRFJNX0RFQlVHX0RSSVZFUigiYmVmb3JlIHdhaXRp bmc6ICVzIGZ3IGZldGNoIHN0YXR1cyAlcywgZncgJXBcbiIsCisJCXVjX2Z3LT51Y19uYW1lLAor CQlpbnRlbF91Y19md19zdGF0dXNfcmVwcih1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzKSwKKwkJ dWNfZnctPnVjX2Z3X2Jsb2IpOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0 cnVjdF9tdXRleCkpOworCVdBUk5fT04odWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyAhPSBJTlRF TF9VQ19GSVJNV0FSRV9QRU5ESU5HKTsKKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgdWNf ZnctPnVjX2Z3X3BhdGgsICZkZXYtPnBkZXYtPmRldikpCisJCWdvdG8gZmFpbDsKKwlpZiAoIWZ3 KQorCQlnb3RvIGZhaWw7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJmZXRjaCAlcyBmdyBmcm9tICVz IHN1Y2NlZWRlZCwgZncgJXBcbiIsCisJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfcGF0 aCwgZncpOworCXVjX2Z3LT51Y19md19ibG9iID0gZnc7CisKKwkvKiBDYWxsYmFjayB0byB0aGUg b3B0aW9uYWwgdUMtc3BlY2lmaWMgZnVuY3Rpb24sIGlmIHN1cHBsaWVkICovCisJaWYgKGNhbGxi YWNrKQorCQljYl9zdGF0dXMgPSBjYWxsYmFjayh1Y19mdyk7CisJaWYgKGNiX3N0YXR1cyA8IDAp CisJCWdvdG8gZmFpbDsKKwlzd2l0Y2ggKGNiX3N0YXR1cykgeworCWRlZmF1bHQ6CisJCVdBUk4o MSwgIkludmFsaWQgc3RhdHVzICVkIGZyb20gZncgY2hlY2tpbmcgY2FsbGJhY2sgJXBmXG4iLAor CQkJCWNiX3N0YXR1cywgY2FsbGJhY2spOworCQlnb3RvIGZhaWw7CisKKwljYXNlIElOVEVMX1VD X0ZXX1NBVkVEOgorCQkvLyBHb29kLCBhbHJlYWR5IHNhdmVkLCBub3RoaW5nIHRvIGRvCisJCWJy ZWFrOworCisJY2FzZSBJTlRFTF9VQ19GV19HT09EOgorCQkvLyBHb29kLCBzYXZlIGluIEdFTSBv YmplY3QKKwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9mcm9tX2RhdGEoZGV2LCBmdy0+ ZGF0YSwgZnctPnNpemUpOworCQlpZiAoIW9iaikKKwkJCWdvdG8gZmFpbDsKKworCQl1Y19mdy0+ dWNfZndfb2JqID0gb2JqOworCQl1Y19mdy0+dWNfZndfc2l6ZSA9IGZ3LT5zaXplOworCX0KKwor CURSTV9ERUJVR19EUklWRVIoIiVzIGZ3IGZldGNoIHN0YXR1cyBTVUNDRVNTLCBjYiAlZCwgb2Jq ICVwXG4iLAorCQkJdWNfZnctPnVjX25hbWUsIGNiX3N0YXR1cywgdWNfZnctPnVjX2Z3X29iaik7 CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwl1Y19mdy0+dWNfZndfYmxvYiA9IE5VTEw7CisJ dWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M7CisJ cmV0dXJuOworCitmYWlsOgorCURSTV9ERUJVR19EUklWRVIoIiVzIGZ3IGZldGNoIHN0YXR1cyBG QUlMOyBmdyAlcCwgb2JqICVwXG4iLAorCQl1Y19mdy0+dWNfbmFtZSwgZncsIHVjX2Z3LT51Y19m d19vYmopOworCURSTV9FUlJPUigiRmFpbGVkIHRvIGZldGNoICVzIGZpcm13YXJlIGZyb20gJXNc biIsCisJCSAgdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoKTsKKworCW9iaiA9IHVj X2Z3LT51Y19md19vYmo7CisJaWYgKG9iaikKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo Jm9iai0+YmFzZSk7CisJdWNfZnctPnVjX2Z3X29iaiA9IE5VTEw7CisKKwlyZWxlYXNlX2Zpcm13 YXJlKGZ3KTsJCS8qIE9LIGV2ZW4gaWYgZncgaXMgTlVMTCAqLworCXVjX2Z3LT51Y19md19ibG9i ID0gTlVMTDsKKwl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVf RkFJTDsKK30KKworLyoqCisgKiBpbnRlbF91Y19md19mZXRjaCgpIC0gZmV0Y2ggdGhlIGZpcm13 YXJlIGltYWdlCisgKiBAdWNfZnc6CWludGVsX3VjX2Z3IHN0cnVjdHVyZQorICogQGNhbGxiYWNr OglvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQvb3Igc2F2ZSB0aGUg aW1hZ2UKKyAqCisgKiBJZiB0aGUgZmV0Y2ggaXMgbm90IFBFTkRJTkcgKGkuZS4gb24gdGhlIHNl Y29uZCBhbmQgc3Vic2VxdWVudCBjYWxscyksIHRoaXMKKyAqIGZ1bmN0aW9uIHdpbGwganVzdCBy ZXR1cm4gYW4gYXBwcm9yaWF0ZSBlcnJubywgYmFzZWQgb24gdGhlIHByZXZpb3VzbHktc2V0Cisg KiBzdGF0dXMuCisgKgorICogT24gdGhlIGZpcnN0IGNhbGwgb25seSwgaXQgd2lsbCB0cnkgdG8g cmV0cmlldmUgdGhlIGZpcm1hd2FyZSBpbWFnZSB1c2luZworICogdGhlIHBhcmFtZXRlcnMgc2V0 IGVhcmxpZXIuIElmIGFuIGltYWdlIGlzIGZvdW5kLCB0aGUgb3B0aW9uYWwgQGNhbGxiYWNrKCkK KyAqIHdpbGwgYmUgY2FsbGVkIHRvIGZ1cnRoZXIgdmFsaWRhdGUgaXQuCisgKgorICogV2hlbiBp dCBpcyBjYWxsZWQsIEB1Y19mdy0+dWNfZndfYmxvYiByZWZlcnMgdG8gdGhlIGZldGNoZWQgZmly bXdhcmUgaW1hZ2UsCisgKiBhbmQgQHVjX2Z3LT51Y19md19vYmogaXMgTlVMTC4gVGhlIEBjYWxs YmFjaygpIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW4gZXJyb3IKKyAqIGNvZGUgKGFueSBuZWdhdGl2 ZSB2YWx1ZSksIGluIHdoaWNoIGNhc2UgdGhlIGltYWdlIHdpbGwgYmUgcmVqZWN0ZWQuICBUaGUK KyAqIGZldGNoIHN0YXR1cyB3aWxsIGJlIHNldCB0byBGQUlMLCBhbmQgdGhpcyBmdW5jdGlvbiB3 aWxsIHJldHVybiAtRUlPLgorICoKKyAqIE9yLCBAY2FsbGJhY2soKSBjYW4gcmV0dXJuIElOVEVM X1VDX0ZXX0dPT0QuIFRoZSBpbWFnZSBpcyBjb25zaWRlcmVkIGdvb2QsCisgKiBhbmQgaXQgd2ls bCBiZSBzYXZlZCBpbiBhIEdFTSBvYmplY3QgYXMgZGVzY3JpYmVkIGFib3ZlLiBJbiB0aGlzIGNh c2UsCisgKiBAdWNfZnctPnVjX2Z3X29iaiB3aWxsIGJlIHNldCB0byBwb2ludCB0byB0aGUgR0VN IG9iamVjdCwgYW5kIHRoZSBzaXplIG9mCisgKiB0aGUgaW1hZ2Ugd2lsbCBiZSBpbiBAdWNfZnct PnVjX2Z3X3NpemUuIFRoaXMgaXMgYWxzbyB0aGUgZGVmYXVsdCBpZiBubworICogQGNhbGxiYWNr KCkgaXMgc3VwcGxpZWQuCisgKgorICogRmluYWxseSwgQGNhbGxiYWNrKCkgY2FuIHJldHVybiBJ TlRFTF9VQ19GV19TQVZFRC4gVGhlIGltYWdlIGlzIGNvbnNpZGVyZWQKKyAqIGdvb2QsIGJ1dCBA Y2FsbGJhY2soKSBoYXMgYWxyZWFkeSBkZWFsIHdpdGggc2F2aW5nIHRoZSBjb250ZW50LCBzbyB0 aGlzCisgKiBjb21tb24gY29kZSB3aWxsIG5vdCBhbGxvY2F0ZSBhbmQgZmlsbCBhIEdFTSBvYmpl Y3QuIEBjYWxsYmFjaygpIG1heSB1c2UKKyAqIEB1Y19mdy0+dWNfZndfb2JqIHRvIGhvbGQgYSBy ZWZlcmVuY2UgdG8gaXRzIG93biBHRU0gb2JqZWN0LCBpZiBpdCBoYXMKKyAqIGFsbG9jYXRlZCBv bmUsIGFuZCBpbiB0aGlzIGNhc2UgdGhlIGNvbW1vbiBjb2RlIHdpbGwgZGVhbCB3aXRoIGRpc3Bv c2luZworICogb2YgaXQgb24gZXJyb3Igb3IgZmluYWxpc2F0aW9uOyBvdGhlcndpc2UgaXQgY2Fu IG1ha2UgaXRzIG93biBhcnJhZ2VtZW50cy4KKyAqCisgKiBBZnRlciB0aGlzIGNhbGwsIEB1Y19m dy0+dWNfZndfZmV0Y2hfc3RhdHVzIHdpbGwgc2hvdyB3aGV0aGVyIHRoZSBmaXJtd2FyZQorICog aW1hZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBmZXRjaGVkIGFuZCBzYXZlZC4KKyAqCisgKiBJbiBhbGwg Y2FzZXMgdGhlIGZpcm13YXJlIGJsb2IgaXMgcmVsZWFzZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24g cmV0dXJucy4KKyAqCisgKiBSZXR1cm46CW5vbi16ZXJvIGNvZGUgb24gZXJyb3IKKyAqLworaW50 CitpbnRlbF91Y19md19mZXRjaChzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAorCQkgIGludCBj YWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikpCit7CisJV0FSTl9PTighbXV0ZXhfaXNfbG9j a2VkKCZ1Y19mdy0+dWNfZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCWlmICh1Y19mdy0+dWNfZndf ZmV0Y2hfc3RhdHVzID09IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpIHsKKwkJLyogV2Ugb25s eSBjb21lIGhlcmUgb25jZSAqLworCQl1Y19md19mZXRjaCh1Y19mdywgY2FsbGJhY2spOworCQkv KiBzdGF0dXMgbXVzdCBub3cgYmUgRkFJTCBvciBTVUNDRVNTICovCisJfQorCisJRFJNX0RFQlVH X0RSSVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzICVzXG4iLCB1Y19mdy0+dWNfbmFtZSwKKwkJaW50 ZWxfdWNfZndfc3RhdHVzX3JlcHIodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cykpOworCisJc3dp dGNoICh1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzKSB7CisJY2FzZSBJTlRFTF9VQ19GSVJNV0FS RV9GQUlMOgorCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyA6KCAqLworCQlyZXR1cm4gLUVJTzsK KworCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfTk9ORToKKwkJLyogbm8gZmlybXdhcmUsIG5vdGhp bmcgdG8gZG8gKG5vdCBhbiBlcnJvcikgKi8KKwkJcmV0dXJuIDA7CisKKwljYXNlIElOVEVMX1VD X0ZJUk1XQVJFX1BFTkRJTkc6CisJZGVmYXVsdDoKKwkJLyogImNhbid0IGhhcHBlbiIgKi8KKwkJ V0FSTl9PTkNFKDEsICIlcyBmdyAlcyBpbnZhbGlkIHVjX2Z3X2ZldGNoX3N0YXR1cyAlcyBbJWRd XG4iLAorCQkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoLAorCQkJaW50ZWxfdWNf Zndfc3RhdHVzX3JlcHIodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyksCisJCQl1Y19mdy0+dWNf ZndfZmV0Y2hfc3RhdHVzKTsKKwkJcmV0dXJuIC1FTlhJTzsKKworCWNhc2UgSU5URUxfVUNfRklS TVdBUkVfU1VDQ0VTUzoKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKioKKyAqIGludGVsX3VjX2Z3 X2luaXQoKSAtIGRlZmluZSBwYXJhbWV0ZXJzIGZvciBmZXRjaGluZyBmaXJtd2FyZQorICogQGRl djoJZHJtIGRldmljZQorICogQHVjX2Z3OglpbnRlbF91Y19mdyBzdHJ1Y3R1cmUKKyAqIEBuYW1l OglodW1hbi1yZWFkYWJsZSBkZXZpY2UgbmFtZSAoZS5nLiAiR3VDIikgZm9yIG1lc3NhZ2VzCisg KiBAZndfcGF0aDoJKHRyYWlsaW5nIHBhcnRzIG9mKSBwYXRoIHRvIGZpcm13YXJlIChlLmcuICJp OTE1L2d1Y19mdy5iaW4iKQorICogCQlAZndfcGF0aCA9PSBOVUxMIG1lYW5zICJubyBmaXJtd2Fy ZSBleHBlY3RlZCIgKG5vdCBhbiBlcnJvciksCisgKiAJCUBmd19wYXRoID09ICIiIChlbXB0eSBz dHJpbmcpIG1lYW5zICJmaXJtd2FyZSB1bmtub3duIiBpLmUuCisgKiAJCXRoZSB1QyByZXF1aXJl cyBmaXJtd2FyZSwgYnV0IHRoZSBkcml2ZXIgZG9lc24ndCBrbm93IHdoZXJlCisgKiAJCXRvIGZp bmQgdGhlIHByb3BlciB2ZXJzaW9uLiBUaGlzIHdpbGwgYmUgbG9nZ2VkIGFzIGFuIGVycm9yLgor ICoKKyAqIFRoaXMgaXMgY2FsbGVkIGp1c3Qgb25jZSBwZXIgdUMsIGR1cmluZyBkcml2ZXIgbG9h ZGluZy4gSXQgaXMgdGhlcmVmb3JlCisgKiBhdXRvbWF0aWNhbGx5IHNpbmdsZS10aHJlYWRlZCBh bmQgZG9lcyBub3QgbmVlZCB0byBhY3F1aXJlIGFueSBtdXRleGVzCisgKiBvciBzcGlubG9ja3Mu IE9UT0gsIEdFTSBpcyBub3QgeWV0IGZ1bGx5IGluaXRpYWxpc2VkLCBzbyB3ZSBjYW4ndCBkbwor ICogdmVyeSBtdWNoIGhlcmUuCisgKgorICogVGhlIG1haW4gdGFzayBoZXJlIGlzIHRvIHNhdmUg dGhlIHBhcmFtZXRlcnMgZm9yIGxhdGVyLiBUaGUgYWN0dWFsIGZldGNoaW5nCisgKiB3aWxsIGhh cHBlbiB3aGVuIGludGVsX3VjX2Z3X2luaXQoKSBpcyBjYWxsZWQsIGFmdGVyIEdFTSBpbml0aWFs aXNhdGlvbiBpcworICogY29tcGxldGUuCisgKi8KK3ZvaWQKK2ludGVsX3VjX2Z3X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKKwkJIGNvbnN0 IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZ3X3BhdGgpCit7CisJdWNfZnctPnVjX2RldiA9IGRl djsKKwl1Y19mdy0+dWNfbmFtZSA9IG5hbWU7CisJdWNfZnctPnVjX2Z3X3BhdGggPSBmd19wYXRo OworCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT05FOwor CXVjX2Z3LT51Y19md19sb2FkX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PTkU7CisKKwlp ZiAoZndfcGF0aCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoKmZ3X3BhdGggPT0gJ1wwJykg eworCQlEUk1fRVJST1IoIk5vICVzIGZpcm13YXJlIGtub3duIGZvciB0aGlzIHBsYXRmb3JtXG4i LCBuYW1lKTsKKwkJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJF X0ZBSUw7CisJCXJldHVybjsKKwl9CisKKwl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5U RUxfVUNfRklSTVdBUkVfUEVORElORzsKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmaXJtd2FyZSBw ZW5kaW5nLCBwYXRoICVzXG4iLAorCQluYW1lLCBmd19wYXRoKTsKK30KKworLyoqCisgKiBpbnRl bF91Y19md19maW5pKCkgLSBjbGVhbiB1cCBhbGwgdUMgZmlybXdhcmUtcmVsYXRlZCBkYXRhCisg KiBAdWNfZnc6CWludGVsX3VjX2Z3IHN0cnVjdHVyZQorICovCit2b2lkCitpbnRlbF91Y19md19m aW5pKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpCit7CisJV0FSTl9PTighbXV0ZXhfaXNfbG9j a2VkKCZ1Y19mdy0+dWNfZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCWlmICh1Y19mdy0+dWNfZndf b2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmdWNfZnctPnVjX2Z3X29iai0+YmFz ZSk7CisJdWNfZnctPnVjX2Z3X29iaiA9IE5VTEw7CisKKwlyZWxlYXNlX2Zpcm13YXJlKHVjX2Z3 LT51Y19md19ibG9iKTsJLyogT0sgZXZlbiBpZiBOVUxMICovCisJdWNfZnctPnVjX2Z3X2Jsb2Ig PSBOVUxMOworCisJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJF X05PTkU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2Fk ZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MTA0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuaApAQCAtMCwwICsxLDkyIEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yOgorICoJRGF2ZSBHb3Jk b24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KKyAqLworI2lmbmRlZiBfSU5URUxfVUNfTE9B REVSX0gKKyNkZWZpbmUgX0lOVEVMX1VDX0xPQURFUl9ICisKKy8qCisgKiBNaWNyb2NvbnRyb2xs ZXIgKHVDKSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQKKyAqLworCisvKgorICogVGhlc2UgdmFs dWVzIGFyZSB1c2VkIHRvIHRyYWNrIHRoZSBzdGFnZXMgb2YgZ2V0dGluZyB0aGUgcmVxdWlyZWQg ZmlybXdhcmUKKyAqIGludG8gYW4gb25ib2FyZCBtaWNyb2NvbnRyb2xsZXIuIFRoZSBjb21tb24g Y29kZSB0cmFja3MgdGhlIHBoYXNlcyBvZgorICogZmV0Y2hpbmcgdGhlIGZpcm13YXJlIChha2Eg ImJpbmFyeSBibG9iIikgZnJvbSBhbiBleHRlcm5hbCBmaWxlIGludG8gYSBHRU0KKyAqIG9iamVj dCBpbiB0aGUgJ3VjX2Z3X2ZldGNoX3N0YXR1cycgZmllbGQgYmVsb3c7IHRoZSB1Qy1zcGVjaWZp YyBETUEgY29kZQorICogdXNlcyB0aGUgJ3VjX2Z3X2xvYWRfc3RhdHVzJyBmaWVsZCB0byB0cmFj ayB0aGUgdHJhbnNmZXIgZnJvbSBHRU0gb2JqZWN0CisgKiB0byB1QyBtZW1vcnkuCisgKgorICog Rm9yIHRoZSBmaXJzdCAoZmV0Y2gpIHN0YWdlLCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHZh bHVlcyBpczoKKyAqIE5PTkUgLSBubyBmaXJtd2FyZSBpcyBiZWluZyBmZXRjaGVkIGUuZy4gYmVj YXVzZSB0aGVyZSBpcyBubyB1QworICogUEVORElORyAtIHBhcmFtZXRlcnMgaW5pdGlhbGlzZWQs IHBlbmRpbmcgY2FsbCB0byBpbnRlbF91Y19md19mZXRjaCgpCisgKiBTVUNDRVNTIC0gdUMgZmly bXdhcmUgZmV0Y2hlZCBpbnRvIGEgR0VNIG9iamVjdCBhbmQgcmVhZHkgZm9yIHVzZQorICogRkFJ TCAtIHNvbWV0aGluZyB3ZW50IHdyb25nOyB1QyBmaXJtd2FyZSBpcyBub3QgYXZhaWxhYmxlCisg KgorICogVGhlIHNlY29uZCAobG9hZCkgc3RhZ2UgaXMgc2ltaWxhcjoKKyAqIE5PTkUgLSBubyBm aXJtd2FyZSBpcyBiZWluZyBsb2FkZWQgZS5nLiBiZWNhdXNlIHRoZXJlIGlzIG5vIHVDCisgKiBQ RU5ESU5HIC0gZmlybXdhcmUgRE1BIGxvYWQgaW4gcHJvZ3Jlc3MKKyAqIFNVQ0NFU1MgLSB1QyBm aXJtd2FyZSBsb2FkZWQgaW50byB1QyBtZW1vcnkgYW5kIHJlYWR5IGZvciB1c2UKKyAqIEZBSUwg LSBzb21ldGhpbmcgd2VudCB3cm9uZzsgdUMgZmlybXdhcmUgaXMgbm90IGF2YWlsYWJsZQorICoK KyAqIFRoZSBmdW5jdGlvbiBpbnRlbF91Y19md19zdGF0dXNfcmVwcigpIHdpbGwgY29udmVydCB0 aGlzIGVudW0gdG8gYQorICogc3RyaW5nIHJlcHJlc2VudGF0aW9uIHN1aXRhYmxlIGZvciB1c2Ug aW4gbG9nIG1lc3NhZ2VzLgorICovCitlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyB7CisJSU5URUxf VUNfRklSTVdBUkVfRkFJTCA9IC0xLAorCUlOVEVMX1VDX0ZJUk1XQVJFX05PTkUgPSAwLAorCUlO VEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcsCisJSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUworfTsK K2NvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1c19yZXByKGVudW0gaW50ZWxfdWNfZndfc3Rh dHVzIHN0YXR1cyk7CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBlbmNhcHN1bGF0ZXMgYWxsIHRo ZSBkYXRhIG5lZWRlZCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YKKyAqIGZldGNoaW5nLCBjYWNoaW5n LCBhbmQgbG9hZGluZyB0aGUgZmlybXdhcmUgaW1hZ2UgaW50byB0aGUgdUMuCisgKi8KK3N0cnVj dCBpbnRlbF91Y19mdyB7CisJc3RydWN0IGRybV9kZXZpY2UgKgkJdWNfZGV2OworCWNvbnN0IGNo YXIgKgkJCXVjX25hbWU7CisJY29uc3QgY2hhciAqCQkJdWNfZndfcGF0aDsKKwljb25zdCBzdHJ1 Y3QgZmlybXdhcmUgKgkJdWNfZndfYmxvYjsKKwlzaXplX3QJCQkJdWNfZndfc2l6ZTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCXVjX2Z3X29iajsKKwllbnVtIGludGVsX3VjX2Z3X3N0 YXR1cwkJdWNfZndfZmV0Y2hfc3RhdHVzOworCWVudW0gaW50ZWxfdWNfZndfc3RhdHVzCQl1Y19m d19sb2FkX3N0YXR1czsKK307CisKK3ZvaWQgaW50ZWxfdWNfZndfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAorCQljb25zdCBjaGFyICp1Y19u YW1lLCBjb25zdCBjaGFyICpmd19wYXRoKTsKK2ludCBpbnRlbF91Y19md19mZXRjaChzdHJ1Y3Qg aW50ZWxfdWNfZncgKnVjX2Z3LAorCQlpbnQgY2FsbGJhY2soc3RydWN0IGludGVsX3VjX2Z3ICop KTsKK3ZvaWQgaW50ZWxfdWNfZndfZmluaShzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KTsKKwor LyoKKyAqIFRoZSBjYWxsYmFjaygpIGZ1bmN0aW9uIHBhc3NlZCB0byBpbnRlbF91Y19md19mZXRj aCgpIGFib3ZlIGNhbiByZXR1cm4KKyAqIGEgbmVnYXRpdmUgbnVtYmVyIChhIHN0YW5kYXJkIGVy cm9yIGNvZGUpLCBvciBvbmUgb2YgdGhlIHZhbHVlcyBiZWxvdzoKKyAqLworI2RlZmluZQlJTlRF TF9VQ19GV19HT09ECTEJLyogZi93IGdvb2QsIHNhdmUgaW4gR0VNIG9iamVjdAkqLworI2RlZmlu ZQlJTlRFTF9VQ19GV19TQVZFRAkyCS8qIGYvdyBnb29kLCBhbHJlYWR5IHNhdmVkCSovCisKKyNl bmRpZgotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==