From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 51/51] drm/amdgpu: extract pcie helpers to common header Date: Thu, 12 Nov 2015 01:18:41 -0500 Message-ID: <1447309121-2480-52-git-send-email-alexander.deucher@amd.com> References: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-f48.google.com (mail-qg0-f48.google.com [209.85.192.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 49E587A11F for ; Wed, 11 Nov 2015 22:19:30 -0800 (PST) Received: by qgec40 with SMTP id c40so40610675qge.2 for ; Wed, 11 Nov 2015 22:19:29 -0800 (PST) In-Reply-To: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Alex Deucher List-Id: dri-devel@lists.freedesktop.org VGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IG11bHRpcGxlIHBvd2VycGxheSBkcml2ZXJzIGFuZApvdGhl ciBJUCBtb2R1bGVzLgoKU2lnbmVkLW9mZi1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1 Y2hlckBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hbWRfcGNpZS5o ICAgICAgICAgICAgfCAgNTAgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9h bWRfcGNpZV9oZWxwZXJzLmggICAgfCAxNDEgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvZmlqaV9od21nci5jICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9maWppX2h3bWdyLmggIHwgICAyIC0KIGRy aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX2h3bWdyLmMgfCAxMTIgKy0t LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Rvbmdh X2h3bWdyLmggfCAgMjQgLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAxOTMgaW5zZXJ0aW9ucygrKSwg MTM3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQv aW5jbHVkZS9hbWRfcGNpZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ft ZC9pbmNsdWRlL2FtZF9wY2llX2hlbHBlcnMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvaW5jbHVkZS9hbWRfcGNpZS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2Ft ZF9wY2llLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyYTkxNgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hbWRfcGNpZS5oCkBA IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZp Y2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg Q09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0FNRF9QQ0lFX0hfXwor I2RlZmluZSBfX0FNRF9QQ0lFX0hfXworCisvKiBGb2xsb3dpbmcgZmxhZ3Mgc2hvd3MgUENJZSBs aW5rIHNwZWVkIHN1cHBvcnRlZCBpbiBkcml2ZXIgd2hpY2ggYXJlIGRlY2lkZWQgYnkgY2hpcHNl dCBhbmQgQVNJQyAqLworI2RlZmluZSBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjEg ICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9H RU4yICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBP UlRfR0VOMyAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQUlMX1BDSUVfTElOS19TUEVFRF9T VVBQT1JUX01BU0sgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktfU1BF RURfU1VQUE9SVF9TSElGVCAgICAgICAxNgorCisvKiBGb2xsb3dpbmcgZmxhZ3Mgc2hvd3MgUENJ ZSBsaW5rIHNwZWVkIHN1cHBvcnRlZCBieSBBU0lDIEgvVy4qLworI2RlZmluZSBDQUlMX0FTSUNf UENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMSAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0FJTF9B U0lDX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjIgICAweDAwMDAwMDAyCisjZGVmaW5lIENB SUxfQVNJQ19QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9HRU4zICAgMHgwMDAwMDAwNAorI2RlZmlu ZSBDQUlMX0FTSUNfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfTUFTSyAgIDB4MDAwMEZGRkYKKyNk ZWZpbmUgQ0FJTF9BU0lDX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX1NISUZUICAwCisKKy8qIEZv bGxvd2luZyBmbGFncyBzaG93cyBQQ0llIGxhbmUgd2lkdGggc3dpdGNoIHN1cHBvcnRlZCBpbiBk cml2ZXIgd2hpY2ggYXJlIGRlY2lkZWQgYnkgY2hpcHNldCBhbmQgQVNJQyAqLworI2RlZmluZSBD QUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1gxICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZp bmUgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YMiAgICAgICAgICAweDAwMDIwMDAwCisj ZGVmaW5lIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRfWDQgICAgICAgICAgMHgwMDA0MDAw MAorI2RlZmluZSBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1g4ICAgICAgICAgIDB4MDAw ODAwMDAKKyNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YMTIgICAgICAgICAw eDAwMTAwMDAwCisjZGVmaW5lIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRfWDE2ICAgICAg ICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1gzMiAg ICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9T SElGVCAgICAgICAxNgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv aW5jbHVkZS9hbWRfcGNpZV9oZWxwZXJzLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUv YW1kX3BjaWVfaGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAz NTIxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYW1k X3BjaWVfaGVscGVycy5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUg QWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5k ZWYgX19BTURfUENJRV9IRUxQRVJTX0hfXworI2RlZmluZSBfX0FNRF9QQ0lFX0hFTFBFUlNfSF9f CisKKyNpbmNsdWRlICJhbWRfcGNpZS5oIgorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGNpZV9n ZW4zX3N1cHBvcnRlZCh1aW50MzJfdCBwY2llX2xpbmtfc3BlZWRfY2FwKQoreworCWlmIChwY2ll X2xpbmtfc3BlZWRfY2FwICYgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9HRU4zKQorCQly ZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGNpZV9n ZW4yX3N1cHBvcnRlZCh1aW50MzJfdCBwY2llX2xpbmtfc3BlZWRfY2FwKQoreworCWlmIChwY2ll X2xpbmtfc3BlZWRfY2FwICYgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9HRU4yKQorCQly ZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiBHZXQgdGhlIG5ldyBQQ0lFIHNwZWVkIGdp dmVuIHRoZSBBU0lDIFBDSUUgQ2FwIGFuZCB0aGUgTmV3U3RhdGUncyByZXF1ZXN0ZWQgUENJRSBz cGVlZCovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGdldF9wY2llX2dlbl9zdXBwb3J0KHVpbnQz Ml90IHBjaWVfbGlua19zcGVlZF9jYXAsCisJCQkJCSAgICB1aW50MTZfdCBuc19wY2llX2dlbikK K3sKKwl1aW50MzJfdCBhc2ljX3BjaWVfbGlua19zcGVlZF9jYXAgPSAocGNpZV9saW5rX3NwZWVk X2NhcCAmCisJCUNBSUxfQVNJQ19QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9NQVNLKTsKKwl1aW50 MzJfdCBzeXNfcGNpZV9saW5rX3NwZWVkX2NhcCAgPSAocGNpZV9saW5rX3NwZWVkX2NhcCAmCisJ CUNBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfTUFTSyk7CisKKwlzd2l0Y2ggKGFzaWNfcGNp ZV9saW5rX3NwZWVkX2NhcCkgeworCWNhc2UgQ0FJTF9BU0lDX1BDSUVfTElOS19TUEVFRF9TVVBQ T1JUX0dFTjE6CisJCXJldHVybiBQUF9QQ0lFR2VuMTsKKworCWNhc2UgQ0FJTF9BU0lDX1BDSUVf TElOS19TUEVFRF9TVVBQT1JUX0dFTjI6CisJCXJldHVybiBQUF9QQ0lFR2VuMjsKKworCWNhc2Ug Q0FJTF9BU0lDX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjM6CisJCXJldHVybiBQUF9QQ0lF R2VuMzsKKworCWRlZmF1bHQ6CisJCWlmIChpc19wY2llX2dlbjNfc3VwcG9ydGVkKHN5c19wY2ll X2xpbmtfc3BlZWRfY2FwKSAmJgorCQkJKG5zX3BjaWVfZ2VuID09IFBQX1BDSUVHZW4zKSkgewor CQkJcmV0dXJuIFBQX1BDSUVHZW4zOworCQl9IGVsc2UgaWYgKGlzX3BjaWVfZ2VuMl9zdXBwb3J0 ZWQoc3lzX3BjaWVfbGlua19zcGVlZF9jYXApICYmCisJCQkoKG5zX3BjaWVfZ2VuID09IFBQX1BD SUVHZW4zKSB8fCAobnNfcGNpZV9nZW4gPT0gUFBfUENJRUdlbjIpKSkgeworCQkJcmV0dXJuIFBQ X1BDSUVHZW4yOworCQl9CisJfQorCisJcmV0dXJuIFBQX1BDSUVHZW4xOworfQorCitzdGF0aWMg aW5saW5lIHVpbnQxNl90IGdldF9wY2llX2xhbmVfc3VwcG9ydCh1aW50MzJfdCBwY2llX2xhbmVf d2lkdGhfY2FwLAorCQkJCQkgICAgIHVpbnQxNl90IG5zX3BjaWVfbGFuZXMpCit7CisJaW50IGks IGo7CisJdWludDE2X3QgbmV3X3BjaWVfbGFuZXMgPSBuc19wY2llX2xhbmVzOworCXVpbnQxNl90 IHBjaWVfbGFuZXNbN10gPSB7MSwgMiwgNCwgOCwgMTIsIDE2LCAzMn07CisKKwlzd2l0Y2ggKHBj aWVfbGFuZV93aWR0aF9jYXApIHsKKwljYXNlIDA6CisJCXByaW50ayhLRVJOX0VSUiAiWyBwb3dl cnBsYXkgXSBObyB2YWxpZCBQQ0lFIGxhbmUgd2lkdGggcmVwb3J0ZWQgYnkgQ0FJTCEiKTsKKwkJ YnJlYWs7CisJY2FzZSBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1gxOgorCQluZXdfcGNp ZV9sYW5lcyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9S VF9YMjoKKwkJbmV3X3BjaWVfbGFuZXMgPSAyOworCQlicmVhazsKKwljYXNlIENBSUxfUENJRV9M SU5LX1dJRFRIX1NVUFBPUlRfWDQ6CisJCW5ld19wY2llX2xhbmVzID0gNDsKKwkJYnJlYWs7CisJ Y2FzZSBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1g4OgorCQluZXdfcGNpZV9sYW5lcyA9 IDg7CisJCWJyZWFrOworCWNhc2UgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YMTI6CisJ CW5ld19wY2llX2xhbmVzID0gMTI7CisJCWJyZWFrOworCWNhc2UgQ0FJTF9QQ0lFX0xJTktfV0lE VEhfU1VQUE9SVF9YMTY6CisJCW5ld19wY2llX2xhbmVzID0gMTY7CisJCWJyZWFrOworCWNhc2Ug Q0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YMzI6CisJCW5ld19wY2llX2xhbmVzID0gMzI7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJCWlm IChuc19wY2llX2xhbmVzID09IHBjaWVfbGFuZXNbaV0pIHsKKwkJCQlpZiAocGNpZV9sYW5lX3dp ZHRoX2NhcCAmICgweDEwMDAwIDw8IGkpKSB7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJ CQkJCWZvciAoaiA9IGkgLSAxOyBqID49IDA7IGotLSkgeworCQkJCQkJaWYgKHBjaWVfbGFuZV93 aWR0aF9jYXAgJiAoMHgxMDAwMCA8PCBqKSkgeworCQkJCQkJCW5ld19wY2llX2xhbmVzID0gcGNp ZV9sYW5lc1tqXTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWlmIChq IDwgMCkgeworCQkJCQkJZm9yIChqID0gaSArIDE7IGogPCA3OyBqKyspIHsKKwkJCQkJCQlpZiAo cGNpZV9sYW5lX3dpZHRoX2NhcCAmICgweDEwMDAwIDw8IGopKSB7CisJCQkJCQkJCW5ld19wY2ll X2xhbmVzID0gcGNpZV9sYW5lc1tqXTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJ fQorCQkJCQkJaWYgKGogPiA3KQorCQkJCQkJCXByaW50ayhLRVJOX0VSUiAiWyBwb3dlcnBsYXkg XSBDYW5ub3QgZmluZCBhIHZhbGlkIFBDSUUgbGFuZSB3aWR0aCEiKTsKKwkJCQkJfQorCQkJCX0K KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbmV3X3BjaWVf bGFuZXM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvaHdtZ3IvZmlqaV9od21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvZmlqaV9od21nci5jCmluZGV4IGFkY2MyZjAuLmNjYmRiZWYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2ZpamlfaHdtZ3IuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9maWppX2h3bWdyLmMKQEAgLTQ5LDYgKzQ5 LDcgQEAKICNpbmNsdWRlICJ0b25nYV9wcHRhYmxlLmgiCiAjaW5jbHVkZSAicHBfZGVidWcuaCIK ICNpbmNsdWRlICJwcF9hY3BpLmgiCisjaW5jbHVkZSAiYW1kX3BjaWVfaGVscGVycy5oIgogCiAj ZGVmaW5lIFZPTFRBR0VfU0NBTEUJNAogI2RlZmluZSBTTUNfUkFNX0VORAkJMHg0MDAwMApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvZmlqaV9od21nci5o IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvZmlqaV9od21nci5oCmluZGV4 IDM4ZGJlNDkuLjIyZDk4NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2h3bWdyL2ZpamlfaHdtZ3IuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxh eS9od21nci9maWppX2h3bWdyLmgKQEAgLTMzOSw4ICszMzksNiBAQCBlbnVtIEZpamlfSTJDTGlu ZUlEIHsKIGV4dGVybiBpbnQgdG9uZ2FfaW5pdGlhbGl6YV9keW5hbWljX3N0YXRlX2FkanVzdG1l bnRfcnVsZV9zZXR0aW5ncyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKIGV4dGVybiBpbnQgdG9u Z2FfaHdtZ3JfYmFja2VuZF9maW5pKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOwogZXh0ZXJuIGlu dCB0b25nYV9nZXRfbWNfbWljcm9jb2RlX3ZlcnNpb24gKHN0cnVjdCBwcF9od21nciAqaHdtZ3Ip OwotZXh0ZXJuIHVpbnQxNl90IGdldF9wY2llX2dlbl9zdXBwb3J0KHVpbnQzMl90IHBjaWVfbGlu a19zcGVlZF9jYXAsIHVpbnQxNl90IG5zX3BjaWVfZ2VuKTsKLWV4dGVybiB1aW50MTZfdCBnZXRf cGNpZV9sYW5lX3N1cHBvcnQodWludDMyX3QgcGNpZV9sYW5lX3dpZHRoX2NhcCwgdWludDE2X3Qg bnNfcGNpZV9sYW5lcyk7CiAKICNkZWZpbmUgUFBfSE9TVF9UT19TTUNfVUwoWCkgY3B1X3RvX2Jl MzIoWCkKICNkZWZpbmUgUFBfU01DX1RPX0hPU1RfVUwoWCkgYmUzMl90b19jcHUoWCkKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX2h3bWdyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV9od21nci5jCmluZGV4 IGE5Y2M3ODYuLjk0NDIzMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2h3bWdyL3RvbmdhX2h3bWdyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBs YXkvaHdtZ3IvdG9uZ2FfaHdtZ3IuYwpAQCAtNTMsNiArNTMsNyBAQAogCiAjaW5jbHVkZSAiY2dz X2xpbnV4LmgiCiAjaW5jbHVkZSAiZXZlbnRtZ3IuaCIKKyNpbmNsdWRlICJhbWRfcGNpZV9oZWxw ZXJzLmgiCiAKICNkZWZpbmUgTUNfQ0dfQVJCX0ZSRVFfRjAgICAgICAgICAgIDB4MGEKICNkZWZp bmUgTUNfQ0dfQVJCX0ZSRVFfRjEgICAgICAgICAgIDB4MGIKQEAgLTI2NTEsMTE3ICsyNjUyLDYg QEAgc3RhdGljIHZvaWQgdG9uZ2Ffc2V0dXBfcGNpZV90YWJsZV9lbnRyeSgKIAlkcG1fdGFibGUt PmRwbV9sZXZlbHNbaW5kZXhdLmVuYWJsZWQgPSAxOwogfQogCi1ib29sIGlzX3BjaWVfZ2VuM19z dXBwb3J0ZWQodWludDMyX3QgcGNpZV9saW5rX3NwZWVkX2NhcCkKLXsKLQlpZiAocGNpZV9saW5r X3NwZWVkX2NhcCAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMykKLQkJcmV0dXJu IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotYm9vbCBpc19wY2llX2dlbjJfc3VwcG9ydGVkKHVpbnQz Ml90IHBjaWVfbGlua19zcGVlZF9jYXApCi17Ci0JaWYgKHBjaWVfbGlua19zcGVlZF9jYXAgJiBD QUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjIpCi0JCXJldHVybiAxOwotCi0JcmV0dXJu IDA7Ci19Ci0KLS8qIEdldCB0aGUgbmV3IFBDSUUgc3BlZWQgZ2l2ZW4gdGhlIEFTSUMgUENJRSBD YXAgYW5kIHRoZSBOZXdTdGF0ZSdzIHJlcXVlc3RlZCBQQ0lFIHNwZWVkKi8KLXVpbnQxNl90IGdl dF9wY2llX2dlbl9zdXBwb3J0KHVpbnQzMl90IHBjaWVfbGlua19zcGVlZF9jYXAsIHVpbnQxNl90 IG5zX3BjaWVfZ2VuKQotewotCXVpbnQzMl90IGFzaWNfcGNpZV9saW5rX3NwZWVkX2NhcCA9IChw Y2llX2xpbmtfc3BlZWRfY2FwICYKLQkJQ0FJTF9BU0lDX1BDSUVfTElOS19TUEVFRF9TVVBQT1JU X01BU0spOwotCXVpbnQzMl90IHN5c19wY2llX2xpbmtfc3BlZWRfY2FwICA9IChwY2llX2xpbmtf c3BlZWRfY2FwICYKLQkJQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9NQVNLKTsKLQotCXN3 aXRjaCAoYXNpY19wY2llX2xpbmtfc3BlZWRfY2FwKSB7Ci0JY2FzZSBDQUlMX0FTSUNfUENJRV9M SU5LX1NQRUVEX1NVUFBPUlRfR0VOMToKLQkJcmV0dXJuIFBQX1BDSUVHZW4xOwotCi0JY2FzZSBD QUlMX0FTSUNfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMjoKLQkJcmV0dXJuIFBQX1BDSUVH ZW4yOwotCi0JY2FzZSBDQUlMX0FTSUNfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMzoKLQkJ cmV0dXJuIFBQX1BDSUVHZW4zOwotCi0JZGVmYXVsdDoKLQkJaWYgKGlzX3BjaWVfZ2VuM19zdXBw b3J0ZWQoc3lzX3BjaWVfbGlua19zcGVlZF9jYXApICYmCi0JCQkobnNfcGNpZV9nZW4gPT0gUFBf UENJRUdlbjMpKSB7Ci0JCQlyZXR1cm4gUFBfUENJRUdlbjM7Ci0JCX0gZWxzZSBpZiAoaXNfcGNp ZV9nZW4yX3N1cHBvcnRlZChzeXNfcGNpZV9saW5rX3NwZWVkX2NhcCkgJiYKLQkJCSgobnNfcGNp ZV9nZW4gPT0gUFBfUENJRUdlbjMpIHx8IChuc19wY2llX2dlbiA9PSBQUF9QQ0lFR2VuMikpKSB7 Ci0JCQlyZXR1cm4gUFBfUENJRUdlbjI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gUFBfUENJRUdlbjE7 Ci19Ci0KLXVpbnQxNl90IGdldF9wY2llX2xhbmVfc3VwcG9ydCh1aW50MzJfdCBwY2llX2xhbmVf d2lkdGhfY2FwLCB1aW50MTZfdCBuc19wY2llX2xhbmVzKQotewotCWludCBpLCBqOwotCXVpbnQx Nl90IG5ld19wY2llX2xhbmVzID0gbnNfcGNpZV9sYW5lczsKLQl1aW50MTZfdCBwY2llX2xhbmVz WzddID0gezEsIDIsIDQsIDgsIDEyLCAxNiwgMzJ9OwotCi0Jc3dpdGNoIChwY2llX2xhbmVfd2lk dGhfY2FwKSB7Ci0JY2FzZSAwOgotCQlwcmludGsoS0VSTl9FUlIgIlsgcG93ZXJwbGF5IF0gTm8g dmFsaWQgUENJRSBsYW5lIHdpZHRoIHJlcG9ydGVkIGJ5IENBSUwhIik7Ci0JCWJyZWFrOwotCWNh c2UgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YMToKLQkJbmV3X3BjaWVfbGFuZXMgPSAx OwotCQlicmVhazsKLQljYXNlIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRfWDI6Ci0JCW5l d19wY2llX2xhbmVzID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBDQUlMX1BDSUVfTElOS19XSURUSF9T VVBQT1JUX1g0OgotCQluZXdfcGNpZV9sYW5lcyA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgQ0FJTF9Q Q0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YODoKLQkJbmV3X3BjaWVfbGFuZXMgPSA4OwotCQlicmVh azsKLQljYXNlIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRfWDEyOgotCQluZXdfcGNpZV9s YW5lcyA9IDEyOwotCQlicmVhazsKLQljYXNlIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRf WDE2OgotCQluZXdfcGNpZV9sYW5lcyA9IDE2OwotCQlicmVhazsKLQljYXNlIENBSUxfUENJRV9M SU5LX1dJRFRIX1NVUFBPUlRfWDMyOgotCQluZXdfcGNpZV9sYW5lcyA9IDMyOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCQlpZiAobnNfcGNpZV9s YW5lcyA9PSBwY2llX2xhbmVzW2ldKSB7Ci0JCQkJaWYgKHBjaWVfbGFuZV93aWR0aF9jYXAgJiAo MHgxMDAwMCA8PCBpKSkgewotCQkJCQlicmVhazsKLQkJCQl9IGVsc2UgewotCQkJCQlmb3IgKGog PSBpIC0gMTsgaiA+PSAwOyBqLS0pIHsKLQkJCQkJCWlmIChwY2llX2xhbmVfd2lkdGhfY2FwICYg KDB4MTAwMDAgPDwgaikpIHsKLQkJCQkJCQluZXdfcGNpZV9sYW5lcyA9IHBjaWVfbGFuZXNbal07 Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQlpZiAoaiA8IDApIHsKLQkJ CQkJCWZvciAoaiA9IGkgKyAxOyBqIDwgNzsgaisrKSB7Ci0JCQkJCQkJaWYgKHBjaWVfbGFuZV93 aWR0aF9jYXAgJiAoMHgxMDAwMCA8PCBqKSkgewotCQkJCQkJCQluZXdfcGNpZV9sYW5lcyA9IHBj aWVfbGFuZXNbal07Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWlm IChqID4gNykKLQkJCQkJCQlwcmludGsoS0VSTl9FUlIgIlsgcG93ZXJwbGF5IF0gQ2Fubm90IGZp bmQgYSB2YWxpZCBQQ0lFIGxhbmUgd2lkdGghIik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYnJlYWs7 Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG5ld19wY2llX2xhbmVzOwotfQot CiBzdGF0aWMgaW50IHRvbmdhX3NldHVwX2RlZmF1bHRfcGNpZV90YWJsZXMoc3RydWN0IHBwX2h3 bWdyICpod21ncikKIHsKIAl0b25nYV9od21nciAqZGF0YSA9ICh0b25nYV9od21nciAqKShod21n ci0+YmFja2VuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9o d21nci90b25nYV9od21nci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv dG9uZ2FfaHdtZ3IuaAppbmRleCA0NGI5ODVhLi40OTE2OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV9od21nci5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX2h3bWdyLmgKQEAgLTM4NiwzMCArMzg2 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgdG9uZ2FfaHdtZ3IgdG9uZ2FfaHdtZ3I7CiAKICNkZWZpbmUg VE9OR0FfVU5VU0VEX0dQSU9fUElOICAgICAgICAgICAgICAgICAgICAgICAgMHg3RgogCi0vKiBG b2xsb3dpbmcgZmxhZ3Mgc2hvd3MgUENJZSBsaW5rIHNwZWVkIHN1cHBvcnRlZCBpbiBkcml2ZXIg d2hpY2ggYXJlIGRlY2lkZWQgYnkgY2hpcHNldCBhbmQgQVNJQyAqLwotI2RlZmluZSBDQUlMX1BD SUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjEgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgQ0FJ TF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9HRU4yICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5l IENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMyAgICAgICAgMHgwMDA0MDAwMAotI2Rl ZmluZSBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX01BU0sgICAgICAgIDB4RkZGRjAwMDAK LSNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9SVF9TSElGVCAgICAgICAxNgotCi0v KiBGb2xsb3dpbmcgZmxhZ3Mgc2hvd3MgUENJZSBsaW5rIHNwZWVkIHN1cHBvcnRlZCBieSBBU0lD IEgvVy4qLwotI2RlZmluZSBDQUlMX0FTSUNfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMSAg IDB4MDAwMDAwMDEKLSNkZWZpbmUgQ0FJTF9BU0lDX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dF TjIgICAweDAwMDAwMDAyCi0jZGVmaW5lIENBSUxfQVNJQ19QQ0lFX0xJTktfU1BFRURfU1VQUE9S VF9HRU4zICAgMHgwMDAwMDAwNAotI2RlZmluZSBDQUlMX0FTSUNfUENJRV9MSU5LX1NQRUVEX1NV UFBPUlRfTUFTSyAgIDB4MDAwMEZGRkYKLSNkZWZpbmUgQ0FJTF9BU0lDX1BDSUVfTElOS19TUEVF RF9TVVBQT1JUX1NISUZUICAwCi0KLS8qIEZvbGxvd2luZyBmbGFncyBzaG93cyBQQ0llIGxhbmUg d2lkdGggc3dpdGNoIHN1cHBvcnRlZCBpbiBkcml2ZXIgd2hpY2ggYXJlIGRlY2lkZWQgYnkgY2hp cHNldCBhbmQgQVNJQyAqLwotI2RlZmluZSBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1gx ICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9S VF9YMiAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIENBSUxfUENJRV9MSU5LX1dJRFRIX1NV UFBPUlRfWDQgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBDQUlMX1BDSUVfTElOS19XSURU SF9TVVBQT1JUX1g4ICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgQ0FJTF9QQ0lFX0xJTktf V0lEVEhfU1VQUE9SVF9YMTIgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIENBSUxfUENJRV9M SU5LX1dJRFRIX1NVUFBPUlRfWDE2ICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBDQUlMX1BD SUVfTElOS19XSURUSF9TVVBQT1JUX1gzMiAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgQ0FJ TF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9TSElGVCAgICAgICAxNgotCiAjZGVmaW5lIFBQX0hP U1RfVE9fU01DX1VMKFgpIGNwdV90b19iZTMyKFgpCiAjZGVmaW5lIFBQX1NNQ19UT19IT1NUX1VM KFgpIGJlMzJfdG9fY3B1KFgpCiAKLS0gCjEuOC4zLjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVsCg==