From mboxrd@z Thu Jan 1 00:00:00 1970 From: libin.yang@intel.com Subject: [PATCH v5 2/3] ALSA: hda - add DP MST audio support Date: Thu, 12 Jan 2017 16:04:53 +0800 Message-ID: <1484208294-8637-3-git-send-email-libin.yang@intel.com> References: <1484208294-8637-1-git-send-email-libin.yang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 507406EBC3 for ; Thu, 12 Jan 2017 08:11:19 +0000 (UTC) In-Reply-To: <1484208294-8637-1-git-send-email-libin.yang@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, jani.nikula@linux.intel.com, ville.syrjala@linux.intel.com, daniel.vetter@intel.com, dhinakaran.pandiyan@intel.com, tiwai@suse.de Cc: Libin Yang List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTGliaW4gWWFuZyA8bGliaW4ueWFuZ0BsaW51eC5pbnRlbC5jb20+CgpUaGlzIHBhdGNo IGFkZHMgdGhlIERQIE1TVCBhdWRpbyBzdXBwb3J0IG9uIGk5MTUgcGxhdGZvcm0gYW5kCml0IHdp bGwgZW5hYmxlIGR5bl9wY21fYXNzaWduIGZlYXR1cmUuCgpEUCBNU1Qgc3VwcG9ydHMgc2V2ZXJh bCBkZXZpY2UgZW50cnkgb24gdGhlIHNhbWUgcG9ydCBhbmQgZWFjaApkZXZpY2UgZW50cnkgY2Fu IG1hcCB0byBvbmUgcGNtIHN0cmVhbS4gRm9yIGV4YW1wbGUsIG9uIGk5MTUsCnRoZXJlIGFyZSAz IHBpbnMsIGFuZCBlYWNoIHBpbiBoYXMgMyBkZXZpY2UgZW50cmllcy4gVGhpcyBtZWFucwp0aGVy ZSBzaG91bGQgYmUgM3gzIHBjbXMuIEhvd2V2ZXIsIHRoZXJlIGlzIG9ubHkgMyBwaXBlIGxpbmVz IGluCmk5MTUuIFRoaXMgbWVhbnMgMyBwY21zIGFyZSBhY3RpdmVkIGF0IG1vc3QgYXQgdGhlIHNh bWUgbW9tZW50LgpXZSB3aWxsIGNyZWF0ZSA1IHBjbXMgKHBpbiBudW1iZXIgKyBkZXYgZW50cnkg bnVtIC0gMSkgaW4gdGhpcyBjYXNlLgpGb3IgdGhlIGRldGFpbHMsIHBsZWFzZSByZWZlciBjb21t aXQgYTc2MDU2ZjJlNTdlCigiQUxTQTogaGRhIC0gaGRtaSBkeW5hbWljYWxseSBiaW5kIFBDTSB0 byBwaW4gd2hlbiBtb25pdG9yIGhvdHBsdWciKQoKRWFjaCBkZXZpY2UgZW50cnkgaXMgYSB2aXJ0 dWFsIHBpbi4gSXQgaXMgZGVzY3JpYmVkIGJ5IHBpbl9uaWQgYW5kIGRldl9pZAppbiBzdHJ1Y3Qg aGRtaV9zcGVjX3Blcl9waW4uCgpSZXZpZXdlZC1ieTogVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNl LmRlPgpTaWduZWQtb2ZmLWJ5OiBMaWJpbiBZYW5nIDxsaWJpbi55YW5nQGxpbnV4LmludGVsLmNv bT4KLS0tCiBzb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jICB8ICAgNCArCiBzb3VuZC9wY2kvaGRh L3BhdGNoX2hkbWkuYyB8IDI0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTk3IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kv aGRhL2hkYV9jb2RlYy5jCmluZGV4IDlkYzg0N2QuLjhmZDc0NWMgMTAwNjQ0Ci0tLSBhL3NvdW5k L3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAt NDY3LDYgKzQ2NywxMCBAQCBzdGF0aWMgaW50IHJlYWRfcGluX2RlZmF1bHRzKHN0cnVjdCBoZGFf Y29kZWMgKmNvZGVjKQogCQlwaW4tPm5pZCA9IG5pZDsKIAkJcGluLT5jZmcgPSBzbmRfaGRhX2Nv ZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKIAkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RF RkFVTFQsIDApOworCQkvKgorCQkgKiBhbGwgZGV2aWNlIGVudHJpZXMgYXJlIHRoZSBzYW1lIHdp ZGdldCBjb250cm9sIHNvIGZhcgorCQkgKiBmaXhtZTogaWYgYW55IGNvZGVjIGlzIGRpZmZlcmVu dCwgbmVlZCBmaXggaGVyZQorCQkgKi8KIAkJcGluLT5jdHJsID0gc25kX2hkYV9jb2RlY19yZWFk KGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgICAgICBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRS T0wsCiAJCQkJCSAgICAgICAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRt aS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKaW5kZXggY2Y5YmMwNDIuLjMyMTA1Y2Ug MTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9o ZGEvcGF0Y2hfaGRtaS5jCkBAIC03Niw2ICs3Niw3IEBAIHN0cnVjdCBoZG1pX3NwZWNfcGVyX2N2 dCB7CiAKIHN0cnVjdCBoZG1pX3NwZWNfcGVyX3BpbiB7CiAJaGRhX25pZF90IHBpbl9uaWQ7CisJ aW50IGRldl9pZDsKIAkvKiBwaW4gaWR4LCBkaWZmZXJlbnQgZGV2aWNlIGVudHJpZXMgb24gdGhl IHNhbWUgcGluIHVzZSB0aGUgc2FtZSBpZHggKi8KIAlpbnQgcGluX25pZF9pZHg7CiAJaW50IG51 bV9tdXhfbmlkczsKQEAgLTEzMCw3ICsxMzEsMjMgQEAgc3RydWN0IGhkbWlfc3BlYyB7CiAJc3Ry dWN0IHNuZF9hcnJheSBjdnRzOyAvKiBzdHJ1Y3QgaGRtaV9zcGVjX3Blcl9jdnQgKi8KIAloZGFf bmlkX3QgY3Z0X25pZHNbNF07IC8qIG9ubHkgZm9yIGhhc3dlbGwgZml4ICovCiAKKwkvKgorCSAq IG51bV9waW5zIGlzIHRoZSBudW1iZXIgb2YgdmlydHVhbCBwaW5zCisJICogZm9yIGV4YW1wbGUs IHRoZXJlIGFyZSAzIHBpbnMsIGFuZCBlYWNoIHBpbgorCSAqIGhhcyA0IGRldmljZSBlbnRyaWVz LCB0aGVuIHRoZSBudW1fcGlucyBpcyAxMgorCSAqLwogCWludCBudW1fcGluczsKKwkvKgorCSAq IG51bV9uaWRzIGlzIHRoZSBudW1iZXIgb2YgcmVhbCBwaW5zCisJICogSW4gdGhlIGFib3ZlIGV4 YW1wbGUsIG51bV9uaWRzIGlzIDMKKwkgKi8KKwlpbnQgbnVtX25pZHM7CisJLyoKKwkgKiBkZXZf bnVtIGlzIHRoZSBudW1iZXIgb2YgZGV2aWNlIGVudHJpZXMKKwkgKiBvbiBlYWNoIHBpbi4KKwkg KiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgZGV2X251bSBpcyA0CisJICovCisJaW50IGRldl9udW07 CiAJc3RydWN0IHNuZF9hcnJheSBwaW5zOyAvKiBzdHJ1Y3QgaGRtaV9zcGVjX3Blcl9waW4gKi8K IAlzdHJ1Y3QgaGRtaV9wY20gcGNtX3JlY1sxNl07CiAJc3RydWN0IG11dGV4IHBjbV9sb2NrOwpA QCAtMjE3LDE0ICsyMzQsMjYgQEAgdW5pb24gYXVkaW9faW5mb2ZyYW1lIHsKIC8qIG9idGFpbiBo ZGFfcGNtIG9iamVjdCBhc3NpZ25lZCB0byBpZHggKi8KICNkZWZpbmUgZ2V0X3BjbV9yZWMoc3Bl YywgaWR4KQkoZ2V0X2hkbWlfcGNtKHNwZWMsIGlkeCktPnBjbSkKIAotc3RhdGljIGludCBwaW5f bmlkX3RvX3Bpbl9pbmRleChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9u aWQpCitzdGF0aWMgaW50IHBpbl9pZF90b19waW5faW5kZXgoc3RydWN0IGhkYV9jb2RlYyAqY29k ZWMsCisJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQsIGludCBkZXZfaWQpCiB7CiAJc3RydWN0 IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBwaW5faWR4OworCXN0cnVjdCBo ZG1pX3NwZWNfcGVyX3BpbiAqcGVyX3BpbjsKKworCS8qCisJICogKGRldl9pZCA9PSAtMSkgbWVh bnMgaXQgaXMgTk9OLU1TVCBwaW4KKwkgKiByZXR1cm4gdGhlIGZpcnN0IHZpcnR1YWwgcGluIG9u IHRoaXMgcG9ydAorCSAqLworCWlmIChkZXZfaWQgPT0gLTEpCisJCWRldl9pZCA9IDA7CiAKLQlm b3IgKHBpbl9pZHggPSAwOyBwaW5faWR4IDwgc3BlYy0+bnVtX3BpbnM7IHBpbl9pZHgrKykKLQkJ aWYgKGdldF9waW4oc3BlYywgcGluX2lkeCktPnBpbl9uaWQgPT0gcGluX25pZCkKKwlmb3IgKHBp bl9pZHggPSAwOyBwaW5faWR4IDwgc3BlYy0+bnVtX3BpbnM7IHBpbl9pZHgrKykgeworCQlwZXJf cGluID0gZ2V0X3BpbihzcGVjLCBwaW5faWR4KTsKKwkJaWYgKChwZXJfcGluLT5waW5fbmlkID09 IHBpbl9uaWQpICYmCisJCQkocGVyX3Bpbi0+ZGV2X2lkID09IGRldl9pZCkpCiAJCQlyZXR1cm4g cGluX2lkeDsKKwl9CiAKIAljb2RlY193YXJuKGNvZGVjLCAiSERNSTogcGluIG5pZCAlZCBub3Qg cmVnaXN0ZXJlZFxuIiwgcGluX25pZCk7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC03MjQsMTAgKzc1 MywxMSBAQCBzdGF0aWMgdm9pZCBoZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaGRh X2NvZGVjICpjb2RlYywKIAogc3RhdGljIGJvb2wgaGRtaV9wcmVzZW50X3NlbnNlKHN0cnVjdCBo ZG1pX3NwZWNfcGVyX3BpbiAqcGVyX3BpbiwgaW50IHJlcG9sbCk7CiAKLXN0YXRpYyB2b2lkIGNo ZWNrX3ByZXNlbmNlX2FuZF9yZXBvcnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRf dCBuaWQpCitzdGF0aWMgdm9pZCBjaGVja19wcmVzZW5jZV9hbmRfcmVwb3J0KHN0cnVjdCBoZGFf Y29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCSAgICAgIGludCBkZXZfaWQpCiB7CiAJ c3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBwaW5faWR4ID0gcGlu X25pZF90b19waW5faW5kZXgoY29kZWMsIG5pZCk7CisJaW50IHBpbl9pZHggPSBwaW5faWRfdG9f cGluX2luZGV4KGNvZGVjLCBuaWQsIGRldl9pZCk7CiAKIAlpZiAocGluX2lkeCA8IDApCiAJCXJl dHVybjsKQEAgLTczOCw3ICs3NjgsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19wcmVzZW5jZV9hbmRf cmVwb3J0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogc3RhdGljIHZv aWQgamFja19jYWxsYmFjayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCSAgc3RydWN0IGhk YV9qYWNrX2NhbGxiYWNrICpqYWNrKQogewotCWNoZWNrX3ByZXNlbmNlX2FuZF9yZXBvcnQoY29k ZWMsIGphY2stPm5pZCk7CisJLyogaGRhX2phY2sgZG9uJ3Qgc3VwcG9ydCBEUCBNU1QgKi8KKwlj aGVja19wcmVzZW5jZV9hbmRfcmVwb3J0KGNvZGVjLCBqYWNrLT5uaWQsIDApOwogfQogCiBzdGF0 aWMgdm9pZCBoZG1pX2ludHJpbnNpY19ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5z aWduZWQgaW50IHJlcykKQEAgLTc0Nyw2ICs3NzgsMTIgQEAgc3RhdGljIHZvaWQgaGRtaV9pbnRy aW5zaWNfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiAJ c3RydWN0IGhkYV9qYWNrX3RibCAqamFjazsKIAlpbnQgZGV2X2VudHJ5ID0gKHJlcyAmIEFDX1VO U09MX1JFU19ERSkgPj4gQUNfVU5TT0xfUkVTX0RFX1NISUZUOwogCisJLyoKKwkgKiBhc3N1bWUg RFAgTVNUIHVzZXMgZHluX3BjbV9hc3NpZ24gYW5kIGFjb21wIGFuZAorCSAqIG5ldmVyIGNvbWVz IGhlcmUKKwkgKiBpZiBEUCBNU1Qgc3VwcG9ydHMgdW5zb2wgZXZlbnQsIGJlbG93IGNvZGUgbmVl ZAorCSAqIGNvbnNpZGVyIGRldl9lbnRyeQorCSAqLwogCWphY2sgPSBzbmRfaGRhX2phY2tfdGJs X2dldF9mcm9tX3RhZyhjb2RlYywgdGFnKTsKIAlpZiAoIWphY2spCiAJCXJldHVybjsKQEAgLTc1 Nyw3ICs3OTQsOCBAQCBzdGF0aWMgdm9pZCBoZG1pX2ludHJpbnNpY19ldmVudChzdHJ1Y3QgaGRh X2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIAkJY29kZWMtPmFkZHIsIGphY2stPm5p ZCwgZGV2X2VudHJ5LCAhIShyZXMgJiBBQ19VTlNPTF9SRVNfSUEpLAogCQkhIShyZXMgJiBBQ19V TlNPTF9SRVNfUEQpLCAhIShyZXMgJiBBQ19VTlNPTF9SRVNfRUxEVikpOwogCi0JY2hlY2tfcHJl c2VuY2VfYW5kX3JlcG9ydChjb2RlYywgamFjay0+bmlkKTsKKwkvKiBoZGFfamFjayBkb24ndCBz dXBwb3J0IERQIE1TVCAqLworCWNoZWNrX3ByZXNlbmNlX2FuZF9yZXBvcnQoY29kZWMsIGphY2st Pm5pZCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhkbWlfbm9uX2ludHJpbnNpY19ldmVudChzdHJ1 Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKQEAgLTk3MCwyOCArMTAwOCw2 MCBAQCBzdGF0aWMgaW50IGludGVsX2N2dF9pZF90b19tdXhfaWR4KHN0cnVjdCBoZG1pX3NwZWMg KnNwZWMsCiAgKiBieSBhbnkgb3RoZXIgcGlucy4KICAqLwogc3RhdGljIHZvaWQgaW50ZWxfbm90 X3NoYXJlX2Fzc2lnbmVkX2N2dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCWhkYV9uaWRf dCBwaW5fbmlkLCBpbnQgbXV4X2lkeCkKKwkJCQkJIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJCQkg aW50IGRldl9pZCwgaW50IG11eF9pZHgpCiB7CiAJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNv ZGVjLT5zcGVjOwogCWhkYV9uaWRfdCBuaWQ7CiAJaW50IGN2dF9pZHgsIGN1cnI7CiAJc3RydWN0 IGhkbWlfc3BlY19wZXJfY3Z0ICpwZXJfY3Z0OworCXN0cnVjdCBoZG1pX3NwZWNfcGVyX3BpbiAq cGVyX3BpbjsKKwlpbnQgcGluX2lkeDsKKworCS8qIGNvbmZpZ3VyZSB0aGUgcGlucyBjb25uZWN0 aW9ucyAqLworCWZvciAocGluX2lkeCA9IDA7IHBpbl9pZHggPCBzcGVjLT5udW1fcGluczsgcGlu X2lkeCsrKSB7CisJCWludCBkZXZfaWRfc2F2ZWQ7CisJCWludCBkZXZfbnVtOwogCi0JLyogY29u ZmlndXJlIGFsbCBwaW5zLCBpbmNsdWRpbmcgIm5vIHBoeXNpY2FsIGNvbm5lY3Rpb24iIG9uZXMg Ki8KLQlmb3JfZWFjaF9oZGFfY29kZWNfbm9kZShuaWQsIGNvZGVjKSB7Ci0JCXVuc2lnbmVkIGlu dCB3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKLQkJdW5zaWduZWQgaW50IHdpZF90 eXBlID0gZ2V0X3djYXBzX3R5cGUod2lkX2NhcHMpOworCQlwZXJfcGluID0gZ2V0X3BpbihzcGVj LCBwaW5faWR4KTsKKwkJLyoKKwkJICogcGluIG5vdCBjb25uZWN0ZWQgdG8gbW9uaXRvcgorCQkg KiBubyBuZWVkIHRvIG9wZXJhdGUgb24gaXQKKwkJICovCisJCWlmICghcGVyX3Bpbi0+cGNtKQor CQkJY29udGludWU7CiAKLQkJaWYgKHdpZF90eXBlICE9IEFDX1dJRF9QSU4pCisJCWlmICgocGVy X3Bpbi0+cGluX25pZCA9PSBwaW5fbmlkKSAmJgorCQkJKHBlcl9waW4tPmRldl9pZCA9PSBkZXZf aWQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKG5pZCA9PSBwaW5fbmlkKQorCQkvKgorCQkgKiBp ZiBwZXJfcGluLT5kZXZfaWQgPj0gZGV2X251bSwKKwkJICogc25kX2hkYV9nZXRfZGV2X3NlbGVj dCgpIHdpbGwgZmFpbCwKKwkJICogYW5kIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIGlzIHVucHJl ZGljdGFibGUuCisJCSAqIFNvIHNraXAgdGhpcyBzaXR1YXRpb24uCisJCSAqLworCQlkZXZfbnVt ID0gc25kX2hkYV9nZXRfbnVtX2RldmljZXMoY29kZWMsIHBlcl9waW4tPnBpbl9uaWQpICsgMTsK KwkJaWYgKHBlcl9waW4tPmRldl9pZCA+PSBkZXZfbnVtKQogCQkJY29udGludWU7CiAKKwkJbmlk ID0gcGVyX3Bpbi0+cGluX25pZDsKKworCQkvKgorCQkgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24g c2hvdWxkIG5vdCBpbXBhY3QKKwkJICogb24gdGhlIGRldmljZSBlbnRyeSBzZWxlY3Rpb24KKwkJ ICogU28gbGV0J3Mgc2F2ZSB0aGUgZGV2IGlkIGZvciBlYWNoIHBpbiwKKwkJICogYW5kIHJlc3Rv cmUgaXQgd2hlbiByZXR1cm4KKwkJICovCisJCWRldl9pZF9zYXZlZCA9IHNuZF9oZGFfZ2V0X2Rl dl9zZWxlY3QoY29kZWMsIG5pZCk7CisJCXNuZF9oZGFfc2V0X2Rldl9zZWxlY3QoY29kZWMsIG5p ZCwgcGVyX3Bpbi0+ZGV2X2lkKTsKIAkJY3VyciA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywg bmlkLCAwLAogCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAwKTsKLQkJaWYgKGN1cnIg IT0gbXV4X2lkeCkKKwkJaWYgKGN1cnIgIT0gbXV4X2lkeCkgeworCQkJc25kX2hkYV9zZXRfZGV2 X3NlbGVjdChjb2RlYywgbmlkLCBkZXZfaWRfc2F2ZWQpOwogCQkJY29udGludWU7CisJCX0KKwog CiAJCS8qIGNob29zZSBhbiB1bmFzc2lnbmVkIGNvbnZlcnRlci4gVGhlIGNvbnZldGVycyBpbiB0 aGUKIAkJICogY29ubmVjdGlvbiBsaXN0IGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBpbiB0aGUg Y29kZWMuCkBAIC0xMDA4LDEyICsxMDc4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX25vdF9zaGFy ZV9hc3NpZ25lZF9jdnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJYnJlYWs7CiAJCQl9 CiAJCX0KKwkJc25kX2hkYV9zZXRfZGV2X3NlbGVjdChjb2RlYywgbmlkLCBkZXZfaWRfc2F2ZWQp OwogCX0KIH0KIAogLyogQSB3cmFwcGVyIG9mIGludGVsX25vdF9zaGFyZV9hc2lnbmVkX2N2dCgp ICovCiBzdGF0aWMgdm9pZCBpbnRlbF9ub3Rfc2hhcmVfYXNzaWduZWRfY3Z0X25pZChzdHJ1Y3Qg aGRhX2NvZGVjICpjb2RlYywKLQkJCWhkYV9uaWRfdCBwaW5fbmlkLCBoZGFfbmlkX3QgY3Z0X25p ZCkKKwkJCWhkYV9uaWRfdCBwaW5fbmlkLCBpbnQgZGV2X2lkLCBoZGFfbmlkX3QgY3Z0X25pZCkK IHsKIAlpbnQgbXV4X2lkeDsKIAlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7 CkBAIC0xMDI1LDcgKzEwOTYsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9ub3Rfc2hhcmVfYXNzaWdu ZWRfY3Z0X25pZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkgKi8KIAltdXhfaWR4ID0gaW50 ZWxfY3Z0X2lkX3RvX211eF9pZHgoc3BlYywgY3Z0X25pZCk7CiAJaWYgKG11eF9pZHggPj0gMCkK LQkJaW50ZWxfbm90X3NoYXJlX2Fzc2lnbmVkX2N2dChjb2RlYywgcGluX25pZCwgbXV4X2lkeCk7 CisJCWludGVsX25vdF9zaGFyZV9hc3NpZ25lZF9jdnQoY29kZWMsIHBpbl9uaWQsIGRldl9pZCwg bXV4X2lkeCk7CiB9CiAKIC8qIHNrZWxldG9uIGNhbGxlciBvZiBwaW5fY3Z0X2ZpeHVwIG9wcyAq LwpAQCAtMTE0MCw2ICsxMjExLDcgQEAgc3RhdGljIGludCBoZG1pX3BjbV9vcGVuKHN0cnVjdCBo ZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJcGVyX3Bpbi0+Y3Z0X25pZCA9IHBlcl9jdnQtPmN2dF9u aWQ7CiAJaGluZm8tPm5pZCA9IHBlcl9jdnQtPmN2dF9uaWQ7CiAKKwlzbmRfaGRhX3NldF9kZXZf c2VsZWN0KGNvZGVjLCBwZXJfcGluLT5waW5fbmlkLCBwZXJfcGluLT5kZXZfaWQpOwogCXNuZF9o ZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHBlcl9waW4tPnBpbl9uaWQsIDAsCiAJCQkgICAg QUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCiAJCQkgICAgcGVyX3Bpbi0+bXV4X2lkeCk7CkBAIC0x MTk4LDYgKzEyNzAsNyBAQCBzdGF0aWMgaW50IGhkbWlfcmVhZF9waW5fY29ubihzdHJ1Y3QgaGRh X2NvZGVjICpjb2RlYywgaW50IHBpbl9pZHgpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8q IGFsbCB0aGUgZGV2aWNlIGVudHJpZXMgb24gdGhlIHNhbWUgcGluIGhhdmUgdGhlIHNhbWUgY29u biBsaXN0ICovCiAJcGVyX3Bpbi0+bnVtX211eF9uaWRzID0gc25kX2hkYV9nZXRfY29ubmVjdGlv bnMoY29kZWMsIHBpbl9uaWQsCiAJCQkJCQkJcGVyX3Bpbi0+bXV4X25pZHMsCiAJCQkJCQkJSERB X01BWF9DT05ORUNUSU9OUyk7CkBAIC0xMjE1LDEzICsxMjg4LDEzIEBAIHN0YXRpYyBpbnQgaGRt aV9maW5kX3BjbV9zbG90KHN0cnVjdCBoZG1pX3NwZWMgKnNwZWMsCiAJCXJldHVybiBwZXJfcGlu LT5waW5fbmlkX2lkeDsKIAogCS8qIGhhdmUgYSBzZWNvbmQgdHJ5OyBjaGVjayB0aGUgInJlc2Vy dmVkIGFyZWEiIG92ZXIgbnVtX3BpbnMgKi8KLQlmb3IgKGkgPSBzcGVjLT5udW1fcGluczsgaSA8 IHNwZWMtPnBjbV91c2VkOyBpKyspIHsKKwlmb3IgKGkgPSBzcGVjLT5udW1fbmlkczsgaSA8IHNw ZWMtPnBjbV91c2VkOyBpKyspIHsKIAkJaWYgKCF0ZXN0X2JpdChpLCAmc3BlYy0+cGNtX2JpdG1h cCkpCiAJCQlyZXR1cm4gaTsKIAl9CiAKIAkvKiB0aGUgbGFzdCB0cnk7IGNoZWNrIHRoZSBlbXB0 eSBzbG90cyBpbiBwaW5zICovCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKysp IHsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX25pZHM7IGkrKykgewogCQlpZiAoIXRlc3Rf Yml0KGksICZzcGVjLT5wY21fYml0bWFwKSkKIAkJCXJldHVybiBpOwogCX0KQEAgLTEyOTYsMTAg KzEzNjksMTMgQEAgc3RhdGljIHZvaWQgaGRtaV9wY21fc2V0dXBfcGluKHN0cnVjdCBoZG1pX3Nw ZWMgKnNwZWMsCiAJcGVyX3Bpbi0+Y3Z0X25pZCA9IGhpbmZvLT5uaWQ7CiAKIAltdXhfaWR4ID0g aGRtaV9nZXRfcGluX2N2dF9tdXgoc3BlYywgcGVyX3BpbiwgaGluZm8tPm5pZCk7Ci0JaWYgKG11 eF9pZHggPCBwZXJfcGluLT5udW1fbXV4X25pZHMpCisJaWYgKG11eF9pZHggPCBwZXJfcGluLT5u dW1fbXV4X25pZHMpIHsKKwkJc25kX2hkYV9zZXRfZGV2X3NlbGVjdChjb2RlYywgcGVyX3Bpbi0+ cGluX25pZCwKKwkJCQkgICBwZXJfcGluLT5kZXZfaWQpOwogCQlzbmRfaGRhX2NvZGVjX3dyaXRl X2NhY2hlKGNvZGVjLCBwZXJfcGluLT5waW5fbmlkLCAwLAogCQkJCUFDX1ZFUkJfU0VUX0NPTk5F Q1RfU0VMLAogCQkJCW11eF9pZHgpOworCX0KIAlzbmRfaGRhX3NwZGlmX2N0bHNfYXNzaWduKGNv ZGVjLCBwZXJfcGluLT5wY21faWR4LCBoaW5mby0+bmlkKTsKIAogCW5vbl9wY20gPSBjaGVja19u b25fcGNtX3Blcl9jdnQoY29kZWMsIGhpbmZvLT5uaWQpOwpAQCAtMTQ2Nyw2ICsxNTQzLDExIEBA IHN0YXRpYyBzdHJ1Y3Qgc25kX2phY2sgKnBpbl9pZHhfdG9famFjayhzdHJ1Y3QgaGRhX2NvZGVj ICpjb2RlYywKIAlpZiAocGVyX3Bpbi0+cGNtX2lkeCA+PSAwICYmIHNwZWMtPmR5bl9wY21fYXNz aWduKQogCQlqYWNrID0gc3BlYy0+cGNtX3JlY1twZXJfcGluLT5wY21faWR4XS5qYWNrOwogCWVs c2UgaWYgKCFzcGVjLT5keW5fcGNtX2Fzc2lnbikgeworCQkvKgorCQkgKiBqYWNrIHRibCBkb2Vz bid0IHN1cHBvcnQgRFAgTVNUCisJCSAqIERQIE1TVCB3aWxsIHVzZSBkeW5fcGNtX2Fzc2lnbiwK KwkJICogc28gRFAgTVNUIHdpbGwgbmV2ZXIgY29tZSBoZXJlCisJCSAqLwogCQlqYWNrX3RibCA9 IHNuZF9oZGFfamFja190YmxfZ2V0KGNvZGVjLCBwZXJfcGluLT5waW5fbmlkKTsKIAkJaWYgKGph Y2tfdGJsKQogCQkJamFjayA9IGphY2tfdGJsLT5qYWNrOwpAQCAtMTQ4NSw5ICsxNTY2LDkgQEAg c3RhdGljIHZvaWQgc3luY19lbGRfdmlhX2Fjb21wKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAog CiAJbXV0ZXhfbG9jaygmcGVyX3Bpbi0+bG9jayk7CiAJZWxkLT5tb25pdG9yX3ByZXNlbnQgPSBm YWxzZTsKLQlzaXplID0gc25kX2hkYWNfYWNvbXBfZ2V0X2VsZCgmY29kZWMtPmNvcmUsIHBlcl9w aW4tPnBpbl9uaWQsIC0xLAotCQkJCSAgICAgICZlbGQtPm1vbml0b3JfcHJlc2VudCwgZWxkLT5l bGRfYnVmZmVyLAotCQkJCSAgICAgIEVMRF9NQVhfU0laRSk7CisJc2l6ZSA9IHNuZF9oZGFjX2Fj b21wX2dldF9lbGQoJmNvZGVjLT5jb3JlLCBwZXJfcGluLT5waW5fbmlkLAorCQkJCSAgICAgIHBl cl9waW4tPmRldl9pZCwgJmVsZC0+bW9uaXRvcl9wcmVzZW50LAorCQkJCSAgICAgIGVsZC0+ZWxk X2J1ZmZlciwgRUxEX01BWF9TSVpFKTsKIAlpZiAoc2l6ZSA+IDApIHsKIAkJc2l6ZSA9IG1pbihz aXplLCBFTERfTUFYX1NJWkUpOwogCQlpZiAoc25kX2hkbWlfcGFyc2VfZWxkKGNvZGVjLCAmZWxk LT5pbmZvLApAQCAtMTU2NSwzOCArMTY0Niw4MSBAQCBzdGF0aWMgaW50IGhkbWlfYWRkX3Bpbihz dHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCiAJaW50IHBpbl9pZHg7 CiAJc3RydWN0IGhkbWlfc3BlY19wZXJfcGluICpwZXJfcGluOwogCWludCBlcnI7CisJaW50IGRl dl9udW0sIGk7CiAKIAljYXBzID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgcGluX25p ZCk7CiAJaWYgKCEoY2FwcyAmIChBQ19QSU5DQVBfSERNSSB8IEFDX1BJTkNBUF9EUCkpKQogCQly ZXR1cm4gMDsKIAorCS8qCisJICogRm9yIERQIE1TVCBhdWRpbywgQ29uZmlndXJhdGlvbiBEZWZh dWx0IGlzIHRoZSBzYW1lIGZvcgorCSAqIGFsbCBkZXZpY2UgZW50cmllcyBvbiB0aGUgc2FtZSBw aW4KKwkgKi8KIAljb25maWcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbl9u aWQpOwogCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZmlnKSA9PSBBQ19KQUNLX1BPUlRfTk9O RSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaXNfaGFzd2VsbF9wbHVzKGNvZGVjKSkKLQkJaW50ZWxf aGFzd2VsbF9maXh1cF9jb25uZWN0X2xpc3QoY29kZWMsIHBpbl9uaWQpOwotCi0JcGluX2lkeCA9 IHNwZWMtPm51bV9waW5zOwotCXBlcl9waW4gPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5waW5zKTsK LQlpZiAoIXBlcl9waW4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGVyX3Bpbi0+cGluX25pZCA9 IHBpbl9uaWQ7Ci0JcGVyX3Bpbi0+bm9uX3BjbSA9IGZhbHNlOwotCWlmIChzcGVjLT5keW5fcGNt X2Fzc2lnbikKLQkJcGVyX3Bpbi0+cGNtX2lkeCA9IC0xOwotCWVsc2UgewotCQlwZXJfcGluLT5w Y20gPSBnZXRfaGRtaV9wY20oc3BlYywgcGluX2lkeCk7Ci0JCXBlcl9waW4tPnBjbV9pZHggPSBw aW5faWR4OworCS8qCisJICogVG8gc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uLCBtYWxsb2Mg YWxsCisJICogdGhlIHZpcnR1YWwgcGlucyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGljYWxs eQorCSAqLworCWlmIChpc19oYXN3ZWxsX3BsdXMoY29kZWMpKSB7CisJCS8qCisJCSAqIE9uIElu dGVsIHBsYXRmb3JtcywgZGV2aWNlIGVudHJpZXMgbnVtYmVyIGlzCisJCSAqIGNoYW5nZWQgZHlu YW1pY2FsbHkuIElmIHRoZXJlIGlzIGEgRFAgTVNUCisJCSAqIGh1YiBjb25uZWN0ZWQsIHRoZSBk ZXZpY2UgZW50cmllcyBudW1iZXIgaXMgMy4KKwkJICogT3RoZXJ3aXNlLCBpdCBpcyAxLgorCQkg KiBIZXJlIHdlIG1hbnVhbGx5IHNldCBkZXZfbnVtIHRvIDMsIHNvIHRoYXQKKwkJICogd2UgY2Fu IGluaXRpYWxpemUgYWxsIHRoZSBkZXZpY2UgZW50cmllcyB3aGVuCisJCSAqIGJvb3R1cCBzdGF0 aWNhbGx5LgorCQkgKi8KKwkJZGV2X251bSA9IDM7CisJCXNwZWMtPmRldl9udW0gPSAzOworCX0g ZWxzZSBpZiAoc3BlYy0+ZHluX3BjbV9hc3NpZ24gJiYgY29kZWMtPmRwX21zdCkgeworCQlkZXZf bnVtID0gc25kX2hkYV9nZXRfbnVtX2RldmljZXMoY29kZWMsIHBpbl9uaWQpICsgMTsKKwkJLyoK KwkJICogc3BlYy0+ZGV2X251bSBpcyB0aGUgbWF4aW51bSBudW1iZXIgb2YgZGV2aWNlIGVudHJp ZXMKKwkJICogYW1vbmcgYWxsIHRoZSBwaW5zCisJCSAqLworCQlzcGVjLT5kZXZfbnVtID0gKHNw ZWMtPmRldl9udW0gPiBkZXZfbnVtKSA/CisJCQlzcGVjLT5kZXZfbnVtIDogZGV2X251bTsKKwl9 IGVsc2UgeworCQkvKgorCQkgKiBJZiB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IERQIE1T VCwKKwkJICogbWFudWFsbHkgc2V0IGRldl9udW0gdG8gMS4gVGhpcyBtZWFucworCQkgKiB0aGUg cGluIGhhcyBvbmx5IG9uZSBkZXZpY2UgZW50cnkuCisJCSAqLworCQlkZXZfbnVtID0gMTsKKwkJ c3BlYy0+ZGV2X251bSA9IDE7CiAJfQotCXBlcl9waW4tPnBpbl9uaWRfaWR4ID0gcGluX2lkeDsK IAotCWVyciA9IGhkbWlfcmVhZF9waW5fY29ubihjb2RlYywgcGluX2lkeCk7Ci0JaWYgKGVyciA8 IDApCi0JCXJldHVybiBlcnI7CisJZm9yIChpID0gMDsgaSA8IGRldl9udW07IGkrKykgeworCQlw aW5faWR4ID0gc3BlYy0+bnVtX3BpbnM7CisJCXBlcl9waW4gPSBzbmRfYXJyYXlfbmV3KCZzcGVj LT5waW5zKTsKIAotCXNwZWMtPm51bV9waW5zKys7CisJCWlmICghcGVyX3BpbikKKwkJCXJldHVy biAtRU5PTUVNOworCisJCWlmIChzcGVjLT5keW5fcGNtX2Fzc2lnbikgeworCQkJcGVyX3Bpbi0+ cGNtID0gTlVMTDsKKwkJCXBlcl9waW4tPnBjbV9pZHggPSAtMTsKKwkJfSBlbHNlIHsKKwkJCXBl cl9waW4tPnBjbSA9IGdldF9oZG1pX3BjbShzcGVjLCBwaW5faWR4KTsKKwkJCXBlcl9waW4tPnBj bV9pZHggPSBwaW5faWR4OworCQl9CisJCXBlcl9waW4tPnBpbl9uaWQgPSBwaW5fbmlkOworCQlw ZXJfcGluLT5waW5fbmlkX2lkeCA9IHNwZWMtPm51bV9uaWRzOworCQlwZXJfcGluLT5kZXZfaWQg PSBpOworCQlwZXJfcGluLT5ub25fcGNtID0gZmFsc2U7CisJCXNuZF9oZGFfc2V0X2Rldl9zZWxl Y3QoY29kZWMsIHBpbl9uaWQsIGkpOworCQlpZiAoaXNfaGFzd2VsbF9wbHVzKGNvZGVjKSkKKwkJ CWludGVsX2hhc3dlbGxfZml4dXBfY29ubmVjdF9saXN0KGNvZGVjLCBwaW5fbmlkKTsKKwkJZXJy ID0gaGRtaV9yZWFkX3Bpbl9jb25uKGNvZGVjLCBwaW5faWR4KTsKKwkJaWYgKGVyciA8IDApCisJ CQlyZXR1cm4gZXJyOworCQlzcGVjLT5udW1fcGlucysrOworCX0KKwlzcGVjLT5udW1fbmlkcysr OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzQ0LDcgKzE4NjgsNyBAQCBzdGF0aWMgaW50IGdlbmVy aWNfaGRtaV9wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZv LAogCS8qIENhbGwgc3luY19hdWRpb19yYXRlIHRvIHNldCB0aGUgTi9DVFMvTSBtYW51YWxseSBp ZiBuZWNlc3NhcnkgKi8KIAkvKiBUb2RvOiBhZGQgRFAxLjIgTVNUIGF1ZGlvIHN1cHBvcnQgbGF0 ZXIgKi8KIAlpZiAoY29kZWNfaGFzX2Fjb21wKGNvZGVjKSkKLQkJc25kX2hkYWNfc3luY19hdWRp b19yYXRlKCZjb2RlYy0+Y29yZSwgcGluX25pZCwgLTEsCisJCXNuZF9oZGFjX3N5bmNfYXVkaW9f cmF0ZSgmY29kZWMtPmNvcmUsIHBpbl9uaWQsIHBlcl9waW4tPmRldl9pZCwKIAkJCQkJIHJ1bnRp bWUtPnJhdGUpOwogCiAJbm9uX3BjbSA9IGNoZWNrX25vbl9wY21fcGVyX2N2dChjb2RlYywgY3Z0 X25pZCk7CkBAIC0xNzYyLDYgKzE4ODYsNyBAQCBzdGF0aWMgaW50IGdlbmVyaWNfaGRtaV9wbGF5 YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAogCQkJCSAgICBw aW5jdGwgfCBQSU5fT1VUKTsKIAl9CiAKKwkvKiBzbmRfaGRhX3NldF9kZXZfc2VsZWN0KCkgaGFz IGJlZW4gY2FsbGVkIGJlZm9yZSAqLwogCWVyciA9IHNwZWMtPm9wcy5zZXR1cF9zdHJlYW0oY29k ZWMsIGN2dF9uaWQsIHBpbl9uaWQsCiAJCQkJIHN0cmVhbV90YWcsIGZvcm1hdCk7CiAJbXV0ZXhf dW5sb2NrKCZzcGVjLT5wY21fbG9jayk7CkBAIC0xODk3LDE3ICsyMDIyLDIzIEBAIHN0YXRpYyBi b29sIGlzX2hkbWlfcGNtX2F0dGFjaGVkKHN0cnVjdCBoZGFjX2RldmljZSAqaGRhYywgaW50IHBj bV9pZHgpCiBzdGF0aWMgaW50IGdlbmVyaWNfaGRtaV9idWlsZF9wY21zKHN0cnVjdCBoZGFfY29k ZWMgKmNvZGVjKQogewogCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlp bnQgcGluX2lkeDsKKwlpbnQgaWR4OwogCi0JZm9yIChwaW5faWR4ID0gMDsgcGluX2lkeCA8IHNw ZWMtPm51bV9waW5zOyBwaW5faWR4KyspIHsKKwkvKgorCSAqIGZvciBub24tbXN0IG1vZGUsIHBj bSBudW1iZXIgaXMgdGhlIHNhbWUgYXMgYmVmb3JlCisJICogZm9yIERQIE1TVCBtb2RlLCBwY20g bnVtYmVyIGlzIChuaWQgbnVtYmVyICsgZGV2X251bSAtIDEpCisJICogIGRldl9udW0gaXMgdGhl IGRldmljZSBlbnRyeSBudW1iZXIgaW4gYSBwaW4KKwkgKgorCSAqLworCWZvciAoaWR4ID0gMDsg aWR4IDwgc3BlYy0+bnVtX25pZHMgKyBzcGVjLT5kZXZfbnVtIC0gMTsgaWR4KyspIHsKIAkJc3Ry dWN0IGhkYV9wY20gKmluZm87CiAJCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqcHN0cjsKIAotCQlp bmZvID0gc25kX2hkYV9jb2RlY19wY21fbmV3KGNvZGVjLCAiSERNSSAlZCIsIHBpbl9pZHgpOwor CQlpbmZvID0gc25kX2hkYV9jb2RlY19wY21fbmV3KGNvZGVjLCAiSERNSSAlZCIsIGlkeCk7CiAJ CWlmICghaW5mbykKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXNwZWMtPnBjbV9yZWNbcGluX2lk eF0ucGNtID0gaW5mbzsKKwkJc3BlYy0+cGNtX3JlY1tpZHhdLnBjbSA9IGluZm87CiAJCXNwZWMt PnBjbV91c2VkKys7CiAJCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CiAJCWlu Zm8tPm93bl9jaG1hcCA9IHRydWU7CkBAIC0xOTE1LDYgKzIwNDYsOSBAQCBzdGF0aWMgaW50IGdl bmVyaWNfaGRtaV9idWlsZF9wY21zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogCQlwc3RyID0g JmluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKIAkJcHN0ci0+c3Vic3Ry ZWFtcyA9IDE7CiAJCXBzdHItPm9wcyA9IGdlbmVyaWNfb3BzOworCQkvKiBwY20gbnVtYmVyIGlz IGxlc3MgdGhhbiAxNiAqLworCQlpZiAoc3BlYy0+cGNtX3VzZWQgPj0gMTYpCisJCQlicmVhazsK IAkJLyogb3RoZXIgcHN0ciBmaWVsZHMgYXJlIHNldCBpbiBvcGVuICovCiAJfQogCkBAIC0yMDcw LDcgKzIyMDQsOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfaGRtaV9pbml0KHN0cnVjdCBoZGFfY29k ZWMgKmNvZGVjKQogCWZvciAocGluX2lkeCA9IDA7IHBpbl9pZHggPCBzcGVjLT5udW1fcGluczsg cGluX2lkeCsrKSB7CiAJCXN0cnVjdCBoZG1pX3NwZWNfcGVyX3BpbiAqcGVyX3BpbiA9IGdldF9w aW4oc3BlYywgcGluX2lkeCk7CiAJCWhkYV9uaWRfdCBwaW5fbmlkID0gcGVyX3Bpbi0+cGluX25p ZDsKKwkJaW50IGRldl9pZCA9IHBlcl9waW4tPmRldl9pZDsKIAorCQlzbmRfaGRhX3NldF9kZXZf c2VsZWN0KGNvZGVjLCBwaW5fbmlkLCBkZXZfaWQpOwogCQloZG1pX2luaXRfcGluKGNvZGVjLCBw aW5fbmlkKTsKIAkJaWYgKCFjb2RlY19oYXNfYWNvbXAoY29kZWMpKQogCQkJc25kX2hkYV9qYWNr X2RldGVjdF9lbmFibGVfY2FsbGJhY2soY29kZWMsIHBpbl9uaWQsCkBAIC0yMTc4LDYgKzIzMTQs NyBAQCBzdGF0aWMgaW50IGFsbG9jX2dlbmVyaWNfaGRtaShzdHJ1Y3QgaGRhX2NvZGVjICpjb2Rl YykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGVjLT5vcHMgPSBnZW5lcmljX3N0YW5kYXJkX2hk bWlfb3BzOworCXNwZWMtPmRldl9udW0gPSAxOwkvKiBpbml0aWFsaXplIHRvIDEgKi8KIAltdXRl eF9pbml0KCZzcGVjLT5wY21fbG9jayk7CiAJc25kX2hkYWNfcmVnaXN0ZXJfY2htYXBfb3BzKCZj b2RlYy0+Y29yZSwgJnNwZWMtPmNobWFwKTsKIApAQCAtMjI5NSw2ICsyNDMyLDcgQEAgc3RhdGlj IHZvaWQgaW50ZWxfcGluX2VsZF9ub3RpZnkodm9pZCAqYXVkaW9fcHRyLCBpbnQgcG9ydCwgaW50 IHBpcGUpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBhdWRpb19wdHI7CiAJaW50IHBp bl9uaWQ7CisJaW50IGRldl9pZCA9IHBpcGU7CiAKIAkvKiB3ZSBhc3N1bWUgb25seSBmcm9tIHBv cnQtQiB0byBwb3J0LUQgKi8KIAlpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDMpCkBAIC0yMzIxLDcg KzI0NTksNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9waW5fZWxkX25vdGlmeSh2b2lkICphdWRpb19w dHIsIGludCBwb3J0LCBpbnQgcGlwZSkKIAkJcmV0dXJuOwogCiAJc25kX2hkYWNfaTkxNV9zZXRf YmNsaygmY29kZWMtPmJ1cy0+Y29yZSk7Ci0JY2hlY2tfcHJlc2VuY2VfYW5kX3JlcG9ydChjb2Rl YywgcGluX25pZCk7CisJY2hlY2tfcHJlc2VuY2VfYW5kX3JlcG9ydChjb2RlYywgcGluX25pZCwg ZGV2X2lkKTsKIH0KIAogLyogcmVnaXN0ZXIgaTkxNSBjb21wb25lbnQgcGluX2VsZF9ub3RpZnkg Y2FsbGJhY2sgKi8KQEAgLTIzNTQsMTEgKzI0OTIsMTMgQEAgc3RhdGljIHZvaWQgaTkxNV9waW5f Y3Z0X2ZpeHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJICAgICAgIGhkYV9uaWRfdCBj dnRfbmlkKQogewogCWlmIChwZXJfcGluKSB7CisJCXNuZF9oZGFfc2V0X2Rldl9zZWxlY3QoY29k ZWMsIHBlcl9waW4tPnBpbl9uaWQsCisJCQkgICAgICAgcGVyX3Bpbi0+ZGV2X2lkKTsKIAkJaW50 ZWxfdmVyaWZ5X3Bpbl9jdnRfY29ubmVjdChjb2RlYywgcGVyX3Bpbik7CiAJCWludGVsX25vdF9z aGFyZV9hc3NpZ25lZF9jdnQoY29kZWMsIHBlcl9waW4tPnBpbl9uaWQsCi0JCQkJCSAgICAgcGVy X3Bpbi0+bXV4X2lkeCk7CisJCQkJICAgICBwZXJfcGluLT5kZXZfaWQsIHBlcl9waW4tPm11eF9p ZHgpOwogCX0gZWxzZSB7Ci0JCWludGVsX25vdF9zaGFyZV9hc3NpZ25lZF9jdnRfbmlkKGNvZGVj LCAwLCBjdnRfbmlkKTsKKwkJaW50ZWxfbm90X3NoYXJlX2Fzc2lnbmVkX2N2dF9uaWQoY29kZWMs IDAsIDAsIGN2dF9uaWQpOwogCX0KIH0KIApAQCAtMjM3OCw2ICsyNTE4LDggQEAgc3RhdGljIGlu dCBwYXRjaF9pOTE1X2hzd19oZG1pKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogCWlmIChlcnIg PCAwKQogCQlyZXR1cm4gZXJyOwogCXNwZWMgPSBjb2RlYy0+c3BlYzsKKwljb2RlYy0+ZHBfbXN0 ID0gdHJ1ZTsKKwlzcGVjLT5keW5fcGNtX2Fzc2lnbiA9IHRydWU7CiAKIAlpbnRlbF9oYXN3ZWxs X2VuYWJsZV9hbGxfcGlucyhjb2RlYywgdHJ1ZSk7CiAJaW50ZWxfaGFzd2VsbF9maXh1cF9lbmFi bGVfZHAxMihjb2RlYyk7CkBAIC0yMzg5LDcgKzI1MzEsNiBAQCBzdGF0aWMgaW50IHBhdGNoX2k5 MTVfaHN3X2hkbWkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiAJCWNvZGVjLT5jb3JlLmxpbmtf cG93ZXJfY29udHJvbCA9IDE7CiAKIAljb2RlYy0+cGF0Y2hfb3BzLnNldF9wb3dlcl9zdGF0ZSA9 IGhhc3dlbGxfc2V0X3Bvd2VyX3N0YXRlOwotCWNvZGVjLT5kcF9tc3QgPSB0cnVlOwogCWNvZGVj LT5kZXBvcF9kZWxheSA9IDA7CiAJY29kZWMtPmF1dG9fcnVudGltZV9wbSA9IDE7CiAKLS0gCjIu Ny40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK