From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,2/4] dmaengine: fsl-edma: add fsl-edma-common From: Angelo Dureghello Message-Id: <20180605214535.GA2087@jerusalem> Date: Tue, 5 Jun 2018 23:45:35 +0200 To: dmaengine@vger.kernel.org, vkoul@kernel.org Cc: linux-m68k@vger.kernel.org List-ID: VGhpcyBwYXRjaCBhZGRzIGEgbmV3IGZzbC1lZG1hLWNvbW1vbiBtb2R1bGUgdG8gYWxsb3cgbmV3 Cm1jZi1lZG1hIG1vZHVsZSBjb2RlIHRvIHVzZSBtb3N0IG9mIHRoZSBmc2wtZWRtYSBjb2RlLgoK RHVlIHRvIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBDb2xkRmlyZSBlZG1hICg2NCBjaGFubmVs cykgYW5kCmZzbC1lZG1hICgzMiBjaGFubmVscyksIGFzIHJlZ2lzdGVyIHNldCBvZmZzZXRzIGFu ZCBzb21lIG90aGVyCnBvaW50cyBhcyB0aGUgZGlmZmVyZW50IGludGVycnVwdCBvcmdhbml6YXRp b24gYW5kIG90aGVyIG1pbm9yCnRoaW5ncywgYSBjb21tb24gbW9kdWxlIGNhbiBjb2xsZWN0IG1v c3Qgb2YgdGhlIGNvZGUgZm9yIGJvdGgKMzIgYW5kIDY0IGNoYW5uZWwgZWRtbWEgbW9kdWxlIHZl cnNpb24uCgpTaWduZWQtb2ZmLWJ5OiBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0 PgotLS0KQ2hhbmdlcyBmb3IgdjI6Ci0gcGF0Y2ggc3BsaXR0ZWQgaW50byA0Ci0gYWRkIGZzbC1l ZG1hLWNvbW1vbiBtb2R1bGUKLS0tCiBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYyB8IDY2 MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS9mc2wtZWRt YS1jb21tb24uaCB8IDE3NSArKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgODM3IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMgYi9kcml2ZXJzL2RtYS9mc2wtZWRt YS1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMyMDVj YjA3ZjEzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5j CkBAIC0wLDAgKzEsNjYyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor Ly8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYwor Ly8gQ29weXJpZ2h0IChjKSAyMDE3IFN5c2FtLCBBbmdlbG8gRHVyZWdoZWxsbyAgPGFuZ2Vsb0Bz eXNhbS5pdD4KKy8qCisgKiBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYworICoKKyAqIENv bW1vbiBjb2RlIGZvciBGcmVlc2NhbGUgdGhlIGVkbWEgMzIgb3IgNjQgY2hhbm5lbCB2ZXJzaW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVy IGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Cisg KiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorCisjaW5jbHVkZSAiZnNsLWVkbWEtY29tbW9uLmgiCisKKyNkZWZpbmUgRURNQV9DUgkJ CTB4MDAKKyNkZWZpbmUgRURNQV9FUwkJCTB4MDQKKyNkZWZpbmUgRURNQV9FUlEJCTB4MEMKKyNk ZWZpbmUgRURNQV9FRUkJCTB4MTQKKyNkZWZpbmUgRURNQV9DRUVJCQkweDE4CisjZGVmaW5lIEVE TUFfU0VFSQkJMHgxOQorI2RlZmluZSBFRE1BX0NFUlEJCTB4MUEKKyNkZWZpbmUgRURNQV9TRVJR CQkweDFCCisjZGVmaW5lIEVETUFfQ0lOVAkJMHgxRgorI2RlZmluZSBFRE1BX0NFUlIJCTB4MUUK KyNkZWZpbmUgRURNQV9TU1JUCQkweDFECisjZGVmaW5lIEVETUFfQ0RORQkJMHgxQworI2RlZmlu ZSBFRE1BX0lOVFIJCTB4MjQKKyNkZWZpbmUgRURNQV9FUlIJCTB4MkMKKworI2RlZmluZSBFRE1B NjRfRVJRSAkJMHgwOAorI2RlZmluZSBFRE1BNjRfRUVJSAkJMHgxMAorI2RlZmluZSBFRE1BNjRf U0VSUQkJMHgxOAorI2RlZmluZSBFRE1BNjRfQ0VSUQkJMHgxOQorI2RlZmluZSBFRE1BNjRfU0VF SQkJMHgxYQorI2RlZmluZSBFRE1BNjRfQ0VFSQkJMHgxYgorI2RlZmluZSBFRE1BNjRfQ0lOVAkJ MHgxYworI2RlZmluZSBFRE1BNjRfQ0VSUgkJMHgxZAorI2RlZmluZSBFRE1BNjRfU1NSVAkJMHgx ZQorI2RlZmluZSBFRE1BNjRfQ0RORQkJMHgxZgorI2RlZmluZSBFRE1BNjRfSU5USAkJMHgyMAor I2RlZmluZSBFRE1BNjRfSU5UTAkJMHgyNAorI2RlZmluZSBFRE1BNjRfRVJSSAkJMHgyOAorI2Rl ZmluZSBFRE1BNjRfRVJSTAkJMHgyYworCisjZGVmaW5lIEVETUFfVENECQkweDEwMDAKKyNkZWZp bmUgRURNQV9UQ0RfU0laRQkJMzIKKyNkZWZpbmUgRURNQV9UQ0RfTUVNX0FMSUdOCUVETUFfVENE X1NJWkUKKworI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzhCSVQJMAorI2RlZmluZSBFRE1B X1RDRF9BVFRSX1NTSVpFXzE2QklUCUJJVCgwKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpF XzMyQklUCUJJVCgxKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUCShCSVQoMSkg fCBCSVQoMCkpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMTZCWVRFCUJJVCgyKQorI2Rl ZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQllURQkoQklUKDIpIHwgQklUKDApKQorI2RlZmlu ZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzhCSVQJKEVETUFfVENEX0FUVFJfU1NJWkVfOEJJVCA8PCA4 KQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUCShFRE1BX1RDRF9BVFRSX1NTSVpF XzE2QklUIDw8IDgpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQJKEVETUFfVENE X0FUVFJfU1NJWkVfMzJCSVQgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV82NEJJ VAkoRURNQV9UQ0RfQVRUUl9TU0laRV82NEJJVCA8PCA4KQorI2RlZmluZSBFRE1BX1RDRF9BVFRS X0RTSVpFXzE2QllURQkoRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJZVEUgPDwgOCkKKyNkZWZpbmUg RURNQV9UQ0RfQVRUUl9EU0laRV8zMkJZVEUJKEVETUFfVENEX0FUVFJfU1NJWkVfMzJCWVRFIDw8 IDgpCisKKyNkZWZpbmUgRURNQV9UQ0RfQ0lURVJfQ0lURVIoeCkJCSgoeCkgJiBHRU5NQVNLKDE0 LCAwKSkKKyNkZWZpbmUgRURNQV9UQ0RfQklURVJfQklURVIoeCkJCSgoeCkgJiBHRU5NQVNLKDE0 LCAwKSkKKworI2RlZmluZSBFRE1BX1RDRF9DU1JfU1RBUlQJCUJJVCgwKQorI2RlZmluZSBFRE1B X1RDRF9DU1JfSU5UX01BSk9SCQlCSVQoMSkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9IQUxG CQlCSVQoMikKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0RfUkVRCQlCSVQoMykKKyNkZWZpbmUgRURN QV9UQ0RfQ1NSX0VfU0cJCUJJVCg0KQorI2RlZmluZSBFRE1BX1RDRF9DU1JfRV9MSU5LCQlCSVQo NSkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0FDVElWRQkJQklUKDYpCisjZGVmaW5lIEVETUFfVENE X0NTUl9ET05FCQlCSVQoNykKKworc3RydWN0IGZzbF9lZG1hX2NoYW4gKnRvX2ZzbF9lZG1hX2No YW4oc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwg c3RydWN0IGZzbF9lZG1hX2NoYW4sIHZjaGFuLmNoYW4pOworfQorCitzdHJ1Y3QgZnNsX2VkbWFf ZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9lZG1hX2Rlc2MsIHZkZXNjKTsKK30KKwor LyoKKyAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0dGxlLWVuZGlhbiByZWdpc3RlcnM6 CisgKiBUaGUgZURNQSBjb250cm9sbGVyJ3MgZW5kaWFuIGlzIGluZGVwZW5kZW50IG9mIHRoZSBD UFUgY29yZSdzIGVuZGlhbi4KKyAqIEZvciB0aGUgYmlnLWVuZGlhbiBJUCBtb2R1bGUsIHRoZSBv ZmZzZXQgZm9yIDgtYml0IG9yIDE2LWJpdCByZWdpc3RlcnMKKyAqIHNob3VsZCBhbHNvIGJlIHN3 YXBwZWQgb3Bwb3NpdGUgdG8gdGhhdCBpbiBsaXR0bGUtZW5kaWFuIElQLgorICovCit1MzIgZWRt YV9yZWFkbChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLAorCQkJdm9pZCBfX2lvbWVtICph ZGRyKQoreworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQorCQlyZXR1cm4gaW9yZWFkMzJiZShhZGRy KTsKKwllbHNlCisJCXJldHVybiBpb3JlYWQzMihhZGRyKTsKK30KKwordm9pZCBlZG1hX3dyaXRl YihzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1OCB2YWwsCisJCQl2b2lkIF9faW9tZW0g KmFkZHIpCit7CisJLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVuZGlh biBtb2RlICovCisJaWYgKGVkbWEtPmJpZ19lbmRpYW4pCisJCWlvd3JpdGU4KHZhbCwgKHZvaWQg X19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgzKSk7CisJZWxzZQorCQlpb3dyaXRl OCh2YWwsIGFkZHIpOworfQorCit2b2lkIGVkbWFfd3JpdGV3KHN0cnVjdCBmc2xfZWRtYV9lbmdp bmUgKmVkbWEsIHUxNiB2YWwsCisJCQl2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJLyogc3dhcCB0 aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVuZGlhbiBtb2RlICovCisJaWYgKGVkbWEt PmJpZ19lbmRpYW4pCisJCWlvd3JpdGUxNmJlKHZhbCwgKHZvaWQgX19pb21lbSAqKSgodW5zaWdu ZWQgbG9uZylhZGRyIF4gMHgyKSk7CisJZWxzZQorCQlpb3dyaXRlMTYodmFsLCBhZGRyKTsKK30K Kwordm9pZCBlZG1hX3dyaXRlbChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MzIgdmFs LAorCQkJdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQorCQlp b3dyaXRlMzJiZSh2YWwsIGFkZHIpOworCWVsc2UKKwkJaW93cml0ZTMyKHZhbCwgYWRkcik7Cit9 CisKK3N0YXRpYyB2b2lkIGZzbF9lZG1hX2ZpbGxfdGNkKHN0cnVjdCBmc2xfZWRtYV9od190Y2Qg KnRjZCwKKwkJCXUzMiBzcmMsIHUzMiBkc3QsIHUxNiBhdHRyLCB1MTYgc29mZiwKKwkJCXUzMiBu Ynl0ZXMsIHUzMiBzbGFzdCwgdTE2IGNpdGVyLCB1MTYgYml0ZXIsCisJCQl1MTYgZG9mZiwgdTMy IGRsYXN0X3NnYSwgYm9vbCBtYWpvcl9pbnQsCisJCQlib29sIGRpc2FibGVfcmVxLCBib29sIGVu YWJsZV9zZykKK3sKKwl1MTYgY3NyID0gMDsKKworCS8qCisJICogZURNQSBoYXJkd2FyZSBTR3Mg cmVxdWlyZSB0aGUgVENEcyB0byBiZSBzdG9yZWQgaW4gbGl0dGxlCisJICogZW5kaWFuIGZvcm1h dCBpcnJlc3BlY3RpdmUgb2YgdGhlIHJlZ2lzdGVyIGVuZGlhbiBtb2RlbC4KKwkgKiBTbyB3ZSBw dXQgdGhlIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gaW4gbWVtb3J5LCB3YWl0aW5nCisJICogZm9y IGZzbF9lZG1hX3NldF90Y2RfcmVncyBkb2luZyB0aGUgc3dhcC4KKwkgKi8KKwl0Y2QtPnNhZGRy ID0gY3B1X3RvX2xlMzIoc3JjKTsKKwl0Y2QtPmRhZGRyID0gY3B1X3RvX2xlMzIoZHN0KTsKKwl0 Y2QtPmF0dHIgPSBjcHVfdG9fbGUxNihhdHRyKTsKKwl0Y2QtPnNvZmYgPSBjcHVfdG9fbGUxNihz b2ZmKTsKKwl0Y2QtPm5ieXRlcyA9IGNwdV90b19sZTMyKG5ieXRlcyk7CisJdGNkLT5zbGFzdCA9 IGNwdV90b19sZTMyKHNsYXN0KTsKKwl0Y2QtPmNpdGVyID0gY3B1X3RvX2xlMTYoRURNQV9UQ0Rf Q0lURVJfQ0lURVIoY2l0ZXIpKTsKKwl0Y2QtPmRvZmYgPSBjcHVfdG9fbGUxNihkb2ZmKTsKKwl0 Y2QtPmRsYXN0X3NnYSA9IGNwdV90b19sZTMyKGRsYXN0X3NnYSk7CisJdGNkLT5iaXRlciA9IGNw dV90b19sZTE2KEVETUFfVENEX0JJVEVSX0JJVEVSKGJpdGVyKSk7CisKKwlpZiAobWFqb3JfaW50 KQorCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUjsKKwlpZiAoZGlzYWJsZV9yZXEpCisJ CWNzciB8PSBFRE1BX1RDRF9DU1JfRF9SRVE7CisJaWYgKGVuYWJsZV9zZykKKwkJY3NyIHw9IEVE TUFfVENEX0NTUl9FX1NHOworCisJdGNkLT5jc3IgPSBjcHVfdG9fbGUxNihjc3IpOworfQorCit2 b2lkIGZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh bikKK3sKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9jaGFuLT5lZG1hLT5yZWdzOwor CXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CisKKwlpZiAoZnNsX2NoYW4t PmVkbWEtPnZlcnNpb24gPT0gdjEpIHsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIEVE TUFfU0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7CisJCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5l ZG1hLCBjaCwgcmVncy0+c2VycSk7CisJfSBlbHNlIHsKKwkJLyogQ29sZEZpcmUgaXMgYmlnIGVu ZGlhbiwgYW5kIGFjY2Vzc2VzIG5hdGl2ZWx5CisJCSAqIGJpZyBlbmRpYW4gSS9PIHBlcmlwaGVy YWxzCisJCSAqLworCQlpb3dyaXRlOChFRE1BX1NFRUlfU0VFSShjaCksIHJlZ3MtPnNlZWkpOwor CQlpb3dyaXRlOChjaCwgcmVncy0+c2VycSk7CisJfQorfQorCit2b2lkIGZzbF9lZG1hX2Rpc2Fi bGVfcmVxdWVzdChzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJc3RydWN0IGVk bWFfcmVncyAqcmVncyA9ICZmc2xfY2hhbi0+ZWRtYS0+cmVnczsKKwl1MzIgY2ggPSBmc2xfY2hh bi0+dmNoYW4uY2hhbi5jaGFuX2lkOworCisJaWYgKGZzbF9jaGFuLT5lZG1hLT52ZXJzaW9uID09 IHYxKSB7CisJCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBjaCwgcmVncy0+Y2VycSk7CisJ CWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX0NFRUlfQ0VFSShjaCksIHJlZ3MtPmNl ZWkpOworCX0gZWxzZSB7CisJCS8qIENvbGRGaXJlIGlzIGJpZyBlbmRpYW4sIGFuZCBhY2Nlc3Nl cyBuYXRpdmVseQorCQkgKiBiaWcgZW5kaWFuIEkvTyBwZXJpcGhlcmFscworCQkgKi8KKwkJaW93 cml0ZTgoY2gsIHJlZ3MtPmNlcnEpOworCQlpb3dyaXRlOChFRE1BX0NFRUlfQ0VFSShjaCksIHJl Z3MtPmNlZWkpOworCX0KK30KKwordm9pZCBmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBk bWFfZGV2aWNlICpkbWFkZXYpCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmNoYW4sICpfY2hh bjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwKKwkJCQkmZG1hZGV2 LT5jaGFubmVscywgdmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSkgeworCQlsaXN0X2RlbCgmY2hhbi0+ dmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFz ayk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZzbF9lZG1hX2dldF90Y2RfYXR0cihl bnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRoKQoreworCXN3aXRjaCAoYWRkcl93aWR0 aCkgeworCWNhc2UgMToKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfOEJJVCB8IEVETUFf VENEX0FUVFJfRFNJWkVfOEJJVDsKKwljYXNlIDI6CisJCXJldHVybiBFRE1BX1RDRF9BVFRSX1NT SVpFXzE2QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVDsKKwljYXNlIDQ6CisJCXJldHVy biBFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsK KwljYXNlIDg6CisJCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUIHwgRURNQV9UQ0Rf QVRUUl9EU0laRV82NEJJVDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0la RV8zMkJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQ7CisJfQorfQorCitzdGF0aWMgc3Ry dWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9lZG1hX2FsbG9jX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2No YW4gKmZzbF9jaGFuLAorCQlpbnQgc2dfbGVuKQoreworCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpm c2xfZGVzYzsKKwlpbnQgaTsKKworCWZzbF9kZXNjID0ga3phbGxvYyhzaXplb2YoKmZzbF9kZXNj KSArCisJCQlzaXplb2Yoc3RydWN0IGZzbF9lZG1hX3N3X3RjZCkgKiBzZ19sZW4sIEdGUF9OT1dB SVQpOworCWlmICghZnNsX2Rlc2MpCisJCXJldHVybiBOVUxMOworCisJZnNsX2Rlc2MtPmVjaGFu ID0gZnNsX2NoYW47CisJZnNsX2Rlc2MtPm5fdGNkcyA9IHNnX2xlbjsKKwlmb3IgKGkgPSAwOyBp IDwgc2dfbGVuOyBpKyspIHsKKwkJZnNsX2Rlc2MtPnRjZFtpXS52dGNkID0gZG1hX3Bvb2xfYWxs b2MoZnNsX2NoYW4tPnRjZF9wb29sLAorCQkJCQlHRlBfTk9XQUlULCAmZnNsX2Rlc2MtPnRjZFtp XS5wdGNkKTsKKwkJaWYgKCFmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QpCisJCQlnb3RvIGVycjsKKwl9 CisJcmV0dXJuIGZzbF9kZXNjOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlkbWFfcG9v bF9mcmVlKGZzbF9jaGFuLT50Y2RfcG9vbCwgZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAorCQkJCWZz bF9kZXNjLT50Y2RbaV0ucHRjZCk7CisJa2ZyZWUoZnNsX2Rlc2MpOworCXJldHVybiBOVUxMOwor fQorCitzdGF0aWMgdm9pZCBmc2xfZWRtYV9zZXRfdGNkX3JlZ3Moc3RydWN0IGZzbF9lZG1hX2No YW4gKmZzbF9jaGFuLAorCQkJICAgc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkKQoreworCXN0 cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEgPSBmc2xfY2hhbi0+ZWRtYTsKKwlzdHJ1Y3QgZnNs X2VkbWFfaHdfdGNkICptdGNkID0gZWRtYS0+cmVncy50Y2QKKwkJCQkJKyBmc2xfY2hhbi0+dmNo YW4uY2hhbi5jaGFuX2lkOworCisJLyoKKwkgKiBUQ0QgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGlu IHN0cnVjdCBmc2xfZWRtYV9od190Y2QgaW4gbGl0dGxlCisJICogZW5kaWFuIGZvcm1hdC4gSG93 ZXZlciwgd2UgbmVlZCB0byBsb2FkIHRoZSBUQ0QgcmVnaXN0ZXJzIGluCisJICogYmlnLSBvciBs aXR0bGUtZW5kaWFuIG9iZXlpbmcgdGhlIGVETUEgZW5naW5lIG1vZGVsIGVuZGlhbi4KKwkgKi8K KwllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPnNhZGRyKSwgJm10Y2QtPnNhZGRy KTsKKwllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPmRhZGRyKSwgJm10Y2QtPmRh ZGRyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmF0dHIpLCAmbXRjZC0+ YXR0cik7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5zb2ZmKSwgJm10Y2Qt PnNvZmYpOworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+bmJ5dGVzKSwgJm10 Y2QtPm5ieXRlcyk7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5zbGFzdCks ICZtdGNkLT5zbGFzdCk7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5jaXRl ciksICZtdGNkLT5jaXRlcik7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5i aXRlciksICZtdGNkLT5iaXRlcik7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNk LT5kb2ZmKSwgJm10Y2QtPmRvZmYpOworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRj ZC0+ZGxhc3Rfc2dhKSwgJm10Y2QtPmRsYXN0X3NnYSk7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUx Nl90b19jcHUodGNkLT5jc3IpLCAmbXRjZC0+Y3NyKTsKK30KKworc3RhdGljIHNpemVfdCBmc2xf ZWRtYV9kZXNjX3Jlc2lkdWUoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAorCQlzdHJ1 Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2MsIGJvb2wgaW5fcHJvZ3Jlc3MpCit7CisJc3RydWN0IGZz bF9lZG1hX2Rlc2MgKmVkZXNjID0gZnNsX2NoYW4tPmVkZXNjOworCXN0cnVjdCBlZG1hX3JlZ3Mg KnJlZ3MgPSAmZnNsX2NoYW4tPmVkbWEtPnJlZ3M7CisJdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFu LmNoYW4uY2hhbl9pZDsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyID0gZnNsX2No YW4tPmRpcjsKKwlkbWFfYWRkcl90IGN1cl9hZGRyLCBkbWFfYWRkcjsKKwlzaXplX3QgbGVuLCBz aXplOworCWludCBpOworCisJLyogY2FsY3VsYXRlIHRoZSB0b3RhbCBzaXplIGluIHRoaXMgZGVz YyAqLworCWZvciAobGVuID0gaSA9IDA7IGkgPCBmc2xfY2hhbi0+ZWRlc2MtPm5fdGNkczsgaSsr KQorCQlsZW4gKz0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5uYnl0ZXMpCisJCQkq IGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIpOworCisJaWYgKCFpbl9wcm9n cmVzcykKKwkJcmV0dXJuIGxlbjsKKworCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpCisJCWN1 cl9hZGRyID0gZWRtYV9yZWFkbChmc2xfY2hhbi0+ZWRtYSwgJnJlZ3MtPnRjZFtjaF0uc2FkZHIp OworCWVsc2UKKwkJY3VyX2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCAmcmVncy0+ dGNkW2NoXS5kYWRkcik7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBmaW5pc2hlZCBhbmQgY2FsY3Vs YXRlIHRoZSByZXNpZHVlICovCisJZm9yIChpID0gMDsgaSA8IGZzbF9jaGFuLT5lZGVzYy0+bl90 Y2RzOyBpKyspIHsKKwkJc2l6ZSA9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5 dGVzKQorCQkJKiBsZTE2X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVyKTsKKwkJaWYg KGRpciA9PSBETUFfTUVNX1RPX0RFVikKKwkJCWRtYV9hZGRyID0gbGUzMl90b19jcHUoZWRlc2Mt PnRjZFtpXS52dGNkLT5zYWRkcik7CisJCWVsc2UKKwkJCWRtYV9hZGRyID0gbGUzMl90b19jcHUo ZWRlc2MtPnRjZFtpXS52dGNkLT5kYWRkcik7CisKKwkJbGVuIC09IHNpemU7CisJCWlmIChjdXJf YWRkciA+PSBkbWFfYWRkciAmJiBjdXJfYWRkciA8IGRtYV9hZGRyICsgc2l6ZSkgeworCQkJbGVu ICs9IGRtYV9hZGRyICsgc2l6ZSAtIGN1cl9hZGRyOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwly ZXR1cm4gbGVuOworfQorCit2b2lkIGZzbF9lZG1hX2ZyZWVfZGVzYyhzdHJ1Y3QgdmlydF9kbWFf ZGVzYyAqdmRlc2MpCit7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKm1jZl9kZXNjOworCWludCBp OworCisJbWNmX2Rlc2MgPSB0b19mc2xfZWRtYV9kZXNjKHZkZXNjKTsKKworCWZvciAoaSA9IDA7 IGkgPCBtY2ZfZGVzYy0+bl90Y2RzOyBpKyspCisJCWRtYV9wb29sX2ZyZWUobWNmX2Rlc2MtPmVj aGFuLT50Y2RfcG9vbCwgbWNmX2Rlc2MtPnRjZFtpXS52dGNkLAorCQkJCW1jZl9kZXNjLT50Y2Rb aV0ucHRjZCk7CisJa2ZyZWUobWNmX2Rlc2MpOworfQorCitpbnQgZnNsX2VkbWFfYWxsb2NfY2hh bl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9j aGFuICptY2ZfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisKKwltY2ZfY2hhbi0+dGNk X3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInRjZF9wb29sIiwgY2hhbi0+ZGV2aWNlLT5kZXYsCisJ CQlzaXplb2Yoc3RydWN0IGZzbF9lZG1hX2h3X3RjZCksIEVETUFfVENEX01FTV9BTElHTiwgMCk7 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmc2xfZWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4g PSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9I RUFEKGhlYWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBm bGFncyk7CisJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+ ZWRlc2MgPSBOVUxMOworCXZjaGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hh biwgJmhlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2Nr LCBmbGFncyk7CisKKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmZzbF9jaGFuLT52Y2hhbiwg JmhlYWQpOworCWRtYV9wb29sX2Rlc3Ryb3koZnNsX2NoYW4tPnRjZF9wb29sKTsKKwlmc2xfY2hh bi0+dGNkX3Bvb2wgPSBOVUxMOworfQorCitpbnQgZnNsX2VkbWFfc2xhdmVfY29uZmlnKHN0cnVj dCBkbWFfY2hhbiAqY2hhbiwKKwkJCSAgc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKmNvbmZpZykK K3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNo YW4pOworCisJbWVtY3B5KCZmc2xfY2hhbi0+Y2ZnLCBjb25maWcsIHNpemVvZigqY29uZmlnKSk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xf ZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJf dCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRt YV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQor eworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hh bik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOworCWRtYV9hZGRyX3QgZG1hX2J1 Zl9uZXh0OworCWludCBzZ19sZW4sIGk7CisJdTMyIHNyY19hZGRyLCBkc3RfYWRkciwgbGFzdF9z ZywgbmJ5dGVzLCBhdHRyOworCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCisJaWYgKCFpc19zbGF2 ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZ19sZW4gPSBidWZf bGVuIC8gcGVyaW9kX2xlbjsKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2No YW4sIHNnX2xlbik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVz Yy0+aXNjeWNsaWMgPSB0cnVlOworCWZzbF9jaGFuLT5kaXIgPSBkaXJlY3Rpb247CisKKwlkbWFf YnVmX25leHQgPSBkbWFfYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgewor CQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVmX2xlbikKKwkJCWRtYV9idWZfbmV4 dCA9IGRtYV9hZGRyOworCisJCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLwor CQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOworCisJCWlm IChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCW5ieXRlcyA9IGZzbF9jaGFuLT5j ZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+Y2ZnLmRzdF9tYXhidXJzdDsKKwkJ CXNyY19hZGRyID0gZG1hX2J1Zl9uZXh0OworCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+Y2ZnLmRz dF9hZGRyOworCQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7CisJCQlkb2Zm ID0gMDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoCisJCQkJZnNsX2NoYW4tPmNm Zy5kc3RfYWRkcl93aWR0aCk7CisJCX0gZWxzZSB7CisJCQluYnl0ZXMgPSBmc2xfY2hhbi0+Y2Zn LnNyY19hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4tPmNmZy5zcmNfbWF4YnVyc3Q7CisJCQlz cmNfYWRkciA9ICBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyOworCQkJZHN0X2FkZHIgPSBkbWFfYnVm X25leHQ7CisJCQlzb2ZmID0gMDsKKwkJCWRvZmYgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dp ZHRoOworCQkJYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cigKKwkJCQlmc2xfY2hhbi0+Y2Zn LnNyY19hZGRyX3dpZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBwZXJpb2RfbGVuIC8gbmJ5dGVzOwor CisJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKKwkJCQkgIHNyY19h ZGRyLCBkc3RfYWRkciwKKwkJCQkgIGF0dHIsIHNvZmYsIG5ieXRlcywgMCwgaXRlciwKKwkJCQkg IGl0ZXIsIGRvZmYsIGxhc3Rfc2csIHRydWUsIGZhbHNlLCB0cnVlKTsKKwkJZG1hX2J1Zl9uZXh0 ICs9IHBlcmlvZF9sZW47CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmZzbF9jaGFuLT52 Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQorCitzdHJ1Y3QgZG1hX2FzeW5jX3R4 X2Rlc2NyaXB0b3IgKmZzbF9lZG1hX3ByZXBfc2xhdmVfc2coCisJCXN0cnVjdCBkbWFfY2hhbiAq Y2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCXVuc2lnbmVkIGludCBzZ19sZW4sIGVu dW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCXVuc2lnbmVkIGxvbmcgZmxh Z3MsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0g dG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2Rlc2M7 CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1MzIgc3JjX2FkZHIsIGRzdF9hZGRyLCBsYXN0 X3NnLCBuYnl0ZXMsIGF0dHI7CisJdTE2IHNvZmYsIGRvZmYsIGl0ZXI7CisJaW50IGk7CisKKwlp ZiAoIWlzX3NsYXZlX2RpcmVjdGlvbihkaXJlY3Rpb24pKQorCQlyZXR1cm4gTlVMTDsKKworCWZz bF9kZXNjID0gZnNsX2VkbWFfYWxsb2NfZGVzYyhmc2xfY2hhbiwgc2dfbGVuKTsKKwlpZiAoIWZz bF9kZXNjKQorCQlyZXR1cm4gTlVMTDsKKworCWZzbF9kZXNjLT5pc2N5Y2xpYyA9IGZhbHNlOwor CWZzbF9jaGFuLT5kaXIgPSBkaXJlY3Rpb247CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19s ZW4sIGkpIHsKKwkJLyogZ2V0IG5leHQgc2cncyBwaHlzaWNhbCBhZGRyZXNzICovCisJCWxhc3Rf c2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSkgJSBzZ19sZW5dLnB0Y2Q7CisKKwkJaWYgKGRpcmVj dGlvbiA9PSBETUFfTUVNX1RPX0RFVikgeworCQkJbmJ5dGVzID0gZnNsX2NoYW4tPmNmZy5kc3Rf YWRkcl93aWR0aCAqCisJCQkJIGZzbF9jaGFuLT5jZmcuZHN0X21heGJ1cnN0OworCQkJc3JjX2Fk ZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCQlkc3RfYWRkciA9IGZzbF9jaGFuLT5jZmcuZHN0 X2FkZHI7CisJCQlzb2ZmID0gZnNsX2NoYW4tPmNmZy5kc3RfYWRkcl93aWR0aDsKKwkJCWRvZmYg PSAwOworCQkJYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cigKKwkJCQkJZnNsX2NoYW4tPmNm Zy5kc3RfYWRkcl93aWR0aCk7CisKKwkJfSBlbHNlIHsKKwkJCW5ieXRlcyA9IGZzbF9jaGFuLT5j Zmcuc3JjX2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+Y2ZnLnNyY19tYXhidXJzdDsKKwkJ CXNyY19hZGRyID0gZnNsX2NoYW4tPmNmZy5zcmNfYWRkcjsKKwkJCWRzdF9hZGRyID0gc2dfZG1h X2FkZHJlc3Moc2cpOworCQkJc29mZiA9IDA7CisJCQlkb2ZmID0gZnNsX2NoYW4tPmNmZy5zcmNf YWRkcl93aWR0aDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoCisJCQkJCWZzbF9j aGFuLT5jZmcuc3JjX2FkZHJfd2lkdGgpOworCQl9CisKKwkJaXRlciA9IHNnX2RtYV9sZW4oc2cp IC8gbmJ5dGVzOworCisJCWlmIChpIDwgc2dfbGVuIC0gMSkgeworCQkJbGFzdF9zZyA9IGZzbF9k ZXNjLT50Y2RbKGkgKyAxKV0ucHRjZDsKKwkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50 Y2RbaV0udnRjZCwKKwkJCQkJICBzcmNfYWRkciwKKwkJCQkJICBkc3RfYWRkciwgYXR0ciwgc29m ZiwKKwkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJCQkJCSAg ZmFsc2UsIGZhbHNlLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCWxhc3Rfc2cgPSAwOworCQkJZnNs X2VkbWFfZmlsbF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAorCQkJCQkgIHNyY19hZGRyLAor CQkJCQkgIGRzdF9hZGRyLCBhdHRyLCBzb2ZmLAorCQkJCQkgIG5ieXRlcywgMCwgaXRlciwgaXRl ciwgZG9mZiwgbGFzdF9zZywKKwkJCQkJICB0cnVlLCB0cnVlLCBmYWxzZSk7CisJCX0KKwl9CisK KwlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2Rlc2MtPnZkZXNj LCBmbGFncyk7Cit9CisKK2VudW0gZG1hX3N0YXR1cyBmc2xfZWRtYV90eF9zdGF0dXMoc3RydWN0 IGRtYV9jaGFuICpjaGFuLAorCQlkbWFfY29va2llX3QgY29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0 YXRlICp0eHN0YXRlKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2Zz bF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjOworCWVudW0g ZG1hX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0YXR1cyA9IGRt YV9jb29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7CisJaWYgKHN0YXR1cyA9PSBE TUFfQ09NUExFVEUpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoIXR4c3RhdGUpCisJCXJldHVy biBmc2xfY2hhbi0+c3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hh bi5sb2NrLCBmbGFncyk7CisJdmRlc2MgPSB2Y2hhbl9maW5kX2Rlc2MoJmZzbF9jaGFuLT52Y2hh biwgY29va2llKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjICYmIGNvb2tpZSA9PSBmc2xfY2hhbi0+ ZWRlc2MtPnZkZXNjLnR4LmNvb2tpZSkKKwkJdHhzdGF0ZS0+cmVzaWR1ZSA9CisJCQkJZnNsX2Vk bWFfZGVzY19yZXNpZHVlKGZzbF9jaGFuLCB2ZGVzYywgdHJ1ZSk7CisJZWxzZSBpZiAodmRlc2Mp CisJCXR4c3RhdGUtPnJlc2lkdWUgPQorCQkJCWZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hh biwgdmRlc2MsIGZhbHNlKTsKKwllbHNlCisJCXR4c3RhdGUtPnJlc2lkdWUgPSAwOworCisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKworCXJl dHVybiBmc2xfY2hhbi0+c3RhdHVzOworfQorCitpbnQgZnNsX2VkbWFfcGF1c2Uoc3RydWN0IGRt YV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2Zz bF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCWlmIChmc2xfY2hhbi0+ZWRl c2MpIHsKKwkJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwkJZnNsX2NoYW4t PnN0YXR1cyA9IERNQV9QQVVTRUQ7CisJCWZzbF9jaGFuLT5pZGxlID0gdHJ1ZTsKKwl9CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwlyZXR1 cm4gMDsKK30KKworaW50IGZzbF9lZG1hX3Jlc3VtZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7 CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFu KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFu LT52Y2hhbi5sb2NrLCBmbGFncyk7CisJaWYgKGZzbF9jaGFuLT5lZGVzYykgeworCQlmc2xfZWRt YV9lbmFibGVfcmVxdWVzdChmc2xfY2hhbik7CisJCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfSU5f UFJPR1JFU1M7CisJCWZzbF9jaGFuLT5pZGxlID0gZmFsc2U7CisJfQorCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisK K2ludCBmc2xfZWRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJZnNsX2VkbWFfZGlzYWJsZV9y ZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOworCWZzbF9jaGFuLT5p ZGxlID0gdHJ1ZTsKKwl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3JzKCZmc2xfY2hhbi0+dmNoYW4s ICZoZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywg ZmxhZ3MpOworCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmZnNsX2NoYW4tPnZjaGFuLCAmaGVh ZCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnNsX2VkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9jaGFuID0gdG9f ZnNsX2VkbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJm1jZl9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisKKwlpZiAodmNoYW5faXNz dWVfcGVuZGluZygmbWNmX2NoYW4tPnZjaGFuKSAmJiAhbWNmX2NoYW4tPmVkZXNjKQorCQlmc2xf ZWRtYV94ZmVyX2Rlc2MobWNmX2NoYW4pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNm X2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Mo c3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQoreworCXN0cnVjdCB2aXJ0X2RtYV9kZXNj ICp2ZGVzYzsKKworCXZkZXNjID0gdmNoYW5fbmV4dF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4pOwor CWlmICghdmRlc2MpCisJCXJldHVybjsKKwlmc2xfY2hhbi0+ZWRlc2MgPSB0b19mc2xfZWRtYV9k ZXNjKHZkZXNjKTsKKwlmc2xfZWRtYV9zZXRfdGNkX3JlZ3MoZnNsX2NoYW4sIGZzbF9jaGFuLT5l ZGVzYy0+dGNkWzBdLnZ0Y2QpOworCWZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsK Kwlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCWZzbF9jaGFuLT5pZGxlID0g ZmFsc2U7Cit9CisKKy8qCisgKiBPbiB0aGUgMzIgY2hhbm5lbHMgVnlicmlkL21wYzU3N3ggZWRt YSB2ZXJzaW9uIChoZXJlIGNhbGxlZCAidjEiKSwKKyAqIHJlZ2lzdGVyIG9mZnNldHMgYXJlIGRp ZmZlcmVudCBjb21wYXJlZCB0byBDb2xkRmlyZSBtY2Y1NDQxeCA2NCBjaGFubmVscworICogZWRt YSAoaGVyZSBjYWxsZWQgInYyIikuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHJlZ2lz dGVyIG9mZnNldHMgYXMgcGVyIHByb3BlciBkZWNsYXJlZCB2ZXJzaW9uCisgKiBzbyBtdXN0IGJl IGNhbGxlZCBpbiB4eHhfZWRtYV9wcm9iZSgpIGp1c3QgYWZ0ZXIgc2V0dGluZyB0aGUKKyAqIGVk bWEgInZlcnNpb24iIGFuZCAibWVtYmFzZSIgYXBwcm9wcmlhdGVseS4KKyAqLwordm9pZCBmc2xf ZWRtYV9zZXR1cF9yZWdzKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEpCit7CisJZWRtYS0+ cmVncy5jciA9IGVkbWEtPm1lbWJhc2UgKyBFRE1BX0NSOworCWVkbWEtPnJlZ3MuZXMgPSBlZG1h LT5tZW1iYXNlICsgRURNQV9FUzsKKwllZG1hLT5yZWdzLmVycWwgPSBlZG1hLT5tZW1iYXNlICsg RURNQV9FUlE7CisJZWRtYS0+cmVncy5lZWlsID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRUVJOwor CisJZWRtYS0+cmVncy5zZXJxID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2 MSkgPworCQkJRURNQV9TRVJRIDogRURNQTY0X1NFUlEpOworCWVkbWEtPnJlZ3MuY2VycSA9IGVk bWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfQ0VSUSA6IEVE TUE2NF9DRVJRKTsKKwllZG1hLT5yZWdzLnNlZWkgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52 ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX1NFRUkgOiBFRE1BNjRfU0VFSSk7CisJZWRtYS0+cmVn cy5jZWVpID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURN QV9DRUVJIDogRURNQTY0X0NFRUkpOworCWVkbWEtPnJlZ3MuY2ludCA9IGVkbWEtPm1lbWJhc2Ug KyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfQ0lOVCA6IEVETUE2NF9DSU5UKTsK KwllZG1hLT5yZWdzLmNlcnIgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYx KSA/CisJCQlFRE1BX0NFUlIgOiBFRE1BNjRfQ0VSUik7CisJZWRtYS0+cmVncy5zc3J0ID0gZWRt YS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9TU1JUIDogRURN QTY0X1NTUlQpOworCWVkbWEtPnJlZ3MuY2RuZSA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZl cnNpb24gPT0gdjEpID8KKwkJCUVETUFfQ0RORSA6IEVETUE2NF9DRE5FKTsKKwllZG1hLT5yZWdz LmludGwgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1B X0lOVFIgOiBFRE1BNjRfSU5UTCk7CisJZWRtYS0+cmVncy5lcnJsID0gZWRtYS0+bWVtYmFzZSAr ICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9FUlIgOiBFRE1BNjRfRVJSTCk7CisK KwlpZiAoZWRtYS0+dmVyc2lvbiA9PSB2MikgeworCQllZG1hLT5yZWdzLmVycWggPSBlZG1hLT5t ZW1iYXNlICsgRURNQTY0X0VSUUg7CisJCWVkbWEtPnJlZ3MuZWVpaCA9IGVkbWEtPm1lbWJhc2Ug KyBFRE1BNjRfRUVJSDsKKwkJZWRtYS0+cmVncy5lcnJoID0gZWRtYS0+bWVtYmFzZSArIEVETUE2 NF9FUlJIOworCQllZG1hLT5yZWdzLmludGggPSBlZG1hLT5tZW1iYXNlICsgRURNQTY0X0lOVEg7 CisJfQorCisJZWRtYS0+cmVncy50Y2QgPSBlZG1hLT5tZW1iYXNlICsgRURNQV9UQ0Q7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uaCBiL2RyaXZlcnMvZG1hL2Zz bC1lZG1hLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u ZTU2ZjllNTllNTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29t bW9uLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCisvKgorICogZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKKyAqCisgKiBDb3B5 cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmln aHQgMjAxOCBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0PgorICoKKyAqIENvbW1v biBjb2RlIGZvciBGcmVlc2NhbGUgdGhlIGVkbWEgMzIgb3IgNjQgY2hhbm5lbCB2ZXJzaW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk ICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4 cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisjaWZuZGVmIF9GU0xfRURNQV9DT01NT05fSF8KKyNkZWZpbmUgX0ZTTF9FRE1BX0NPTU1P Tl9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgInZpcnQtZG1hLmgi CisKKyNkZWZpbmUgRE1BTVVYX05SCQkyCisKKyNkZWZpbmUgRURNQV9DUl9FREJHCQlCSVQoMSkK KyNkZWZpbmUgRURNQV9DUl9FUkNBCQlCSVQoMikKKyNkZWZpbmUgRURNQV9DUl9FUkdBCQlCSVQo MykKKyNkZWZpbmUgRURNQV9DUl9IT0UJCUJJVCg0KQorI2RlZmluZSBFRE1BX0NSX0hBTFQJCUJJ VCg1KQorI2RlZmluZSBFRE1BX0NSX0NMTQkJQklUKDYpCisjZGVmaW5lIEVETUFfQ1JfRU1MTQkJ QklUKDcpCisjZGVmaW5lIEVETUFfQ1JfRUNYCQlCSVQoMTYpCisjZGVmaW5lIEVETUFfQ1JfQ1gJ CUJJVCgxNykKKworI2RlZmluZSBFRE1BX1NFRUlfU0VFSSh4KQkoKHgpICYgR0VOTUFTSyg2LCAw KSkKKyNkZWZpbmUgRURNQV9DRUVJX0NFRUkoeCkJKCh4KSAmIEdFTk1BU0soNiwgMCkpCisjZGVm aW5lIEVETUFfQ0lOVF9DSU5UKHgpCSgoeCkgJiBHRU5NQVNLKDYsIDApKQorI2RlZmluZSBFRE1B X0NFUlJfQ0VSUih4KQkoKHgpICYgR0VOTUFTSyg2LCAwKSkKKworI2RlZmluZSBGU0xfRURNQV9C VVNXSURUSFMJKEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8IFwKKwkJCQkgQklUKERN QV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURU SF80X0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF84X0JZVEVTKSkKKwor ZW51bSBmc2xfZWRtYV9wbV9zdGF0ZSB7CisJUlVOTklORyA9IDAsCisJU1VTUEVOREVELAorfTsK KworLyoKKyAqIFRoaXMgYXJlIHRjZCByZWdzLCBlcXVhbCBmb3IgYm90aCB2MzIgYW5kIHY2NAor ICovCitzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIHsKKwlfX2xlMzIJc2FkZHI7CisJX19sZTE2CXNv ZmY7CisJX19sZTE2CWF0dHI7CisJX19sZTMyCW5ieXRlczsKKwlfX2xlMzIJc2xhc3Q7CisJX19s ZTMyCWRhZGRyOworCV9fbGUxNglkb2ZmOworCV9fbGUxNgljaXRlcjsKKwlfX2xlMzIJZGxhc3Rf c2dhOworCV9fbGUxNgljc3I7CisJX19sZTE2CWJpdGVyOworfTsKKworLyoKKyAqIFRoaXMgYXJl IGlvbWVtIHBvaW50ZXJzLCBmb3IgYm90aCB2MzIgYW5kIHY2NC4KKyAqLworc3RydWN0IGVkbWFf cmVncyB7CisJdm9pZCBfX2lvbWVtICpjcjsKKwl2b2lkIF9faW9tZW0gKmVzOworCXZvaWQgX19p b21lbSAqZXJxOworCXZvaWQgX19pb21lbSAqZXJxaDsKKwl2b2lkIF9faW9tZW0gKmVycWw7CS8q IGFrYSBlcnEgb24gdjMyICovCisJdm9pZCBfX2lvbWVtICplZWloOworCXZvaWQgX19pb21lbSAq ZWVpbDsJLyogYWthIGVlaSBvbiB2MzIgKi8KKwl2b2lkIF9faW9tZW0gKnNlZWk7CisJdm9pZCBf X2lvbWVtICpjZWVpOworCXZvaWQgX19pb21lbSAqc2VycTsKKwl2b2lkIF9faW9tZW0gKmNlcnE7 CisJdm9pZCBfX2lvbWVtICpjaW50OworCXZvaWQgX19pb21lbSAqY2VycjsKKwl2b2lkIF9faW9t ZW0gKnNzcnQ7CisJdm9pZCBfX2lvbWVtICpjZG5lOworCXZvaWQgX19pb21lbSAqaW50aDsKKwl2 b2lkIF9faW9tZW0gKmludGw7CisJdm9pZCBfX2lvbWVtICplcnJoOworCXZvaWQgX19pb21lbSAq ZXJybDsKKwlzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIF9faW9tZW0gKnRjZDsKK307CisKK3N0cnVj dCBmc2xfZWRtYV9zd190Y2QgeworCWRtYV9hZGRyX3QgcHRjZDsKKwlzdHJ1Y3QgZnNsX2VkbWFf aHdfdGNkICp2dGNkOworfTsKKworc3RydWN0IGZzbF9lZG1hX2NoYW4geworCXN0cnVjdCB2aXJ0 X2RtYV9jaGFuIHZjaGFuOworCWVudW0gZG1hX3N0YXR1cyBzdGF0dXM7CisJZW51bSBmc2xfZWRt YV9wbV9zdGF0ZSBwbV9zdGF0ZTsKKwlib29sIGlkbGU7CisJdTMyIHNsYXZlX2lkOworCXN0cnVj dCBmc2xfZWRtYV9lbmdpbmUgKmVkbWE7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmVkZXNjOwor CXN0cnVjdCBkbWFfcG9vbCAqdGNkX3Bvb2w7CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgY2Zn OworCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXI7Cit9OworCitzdHJ1Y3QgZnNsX2Vk bWFfZGVzYyB7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgdmRlc2M7CisJc3RydWN0IGZzbF9lZG1h X2NoYW4gKmVjaGFuOworCWJvb2wgaXNjeWNsaWM7CisJdW5zaWduZWQgaW50IG5fdGNkczsKKwlz dHJ1Y3QgZnNsX2VkbWFfc3dfdGNkIHRjZFtdOworfTsKKworZW51bSBlZG1hX3ZlcnNpb24gewor CXYxLCAvKiAzMmNoLCBWeWJkaXIsIG1wYzU3eCwgZXRjICovCisJdjIsIC8qIDY0Y2ggQ29sZGZp cmUgKi8KK307CisKK3N0cnVjdCBmc2xfZWRtYV9lbmdpbmUgeworCXN0cnVjdCBkbWFfZGV2aWNl IGRtYV9kZXY7CisJc3RydWN0IGVkbWFfcmVncyByZWdzOworCXZvaWQgX19pb21lbSAqbWVtYmFz ZTsKKwl2b2lkIF9faW9tZW0gKm11eGJhc2VbRE1BTVVYX05SXTsKKwlzdHJ1Y3QgY2xrICptdXhj bGtbRE1BTVVYX05SXTsKKwlzdHJ1Y3QgbXV0ZXggZnNsX2VkbWFfbXV0ZXg7CisJdTMyIG5fY2hh bnM7CisJaW50IHR4aXJxOworCWludCBlcnJpcnE7CisJYm9vbCBiaWdfZW5kaWFuOworCWVudW0g ZWRtYV92ZXJzaW9uIHZlcnNpb247CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gY2hhbnNbXTsKK307 CisKK3UzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHZvaWQgX19p b21lbSAqYWRkcik7Cit2b2lkIGVkbWFfd3JpdGViKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVk bWEsIHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgZWRtYV93cml0ZXcoc3RydWN0 IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3Zv aWQgZWRtYV93cml0ZWwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwgdm9p ZCBfX2lvbWVtICphZGRyKTsKK3N0cnVjdCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFu KHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CitzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2Vk bWFfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpOwordm9pZCBmc2xfZWRtYV9zZXR1cF9y ZWdzKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEpOwordm9pZCBmc2xfZWRtYV9kaXNhYmxl X3JlcXVlc3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKTsKK3ZvaWQgZnNsX2VkbWFf ZnJlZV9kZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYyk7Cit2b2lkIGZzbF9lZG1hX3hm ZXJfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pOwordm9pZCBmc2xfZWRtYV9j bGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2aWNlICpkbWFkZXYpOworCisvKiBPcGVyYXRpb25z ICovCitpbnQgZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpj aGFuKTsKK3ZvaWQgZnNsX2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4pOworaW50IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4s CisJCQkgIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcpOworc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVf dCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1 bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNs X2VkbWFfcHJlcF9zbGF2ZV9zZygKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnbCwKKwkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY29udGV4 dCk7CitlbnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAq Y2hhbiwKKwkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0 ZSk7CitpbnQgZnNsX2VkbWFfcGF1c2Uoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xf ZWRtYV9yZXN1bWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xfZWRtYV90ZXJtaW5h dGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7Cit2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRp bmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKworI2VuZGlmIC8qIF9GU0xfRURNQV9DT01NT05f SF8gKi8KKwo=