From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian King Subject: [PATCH 2/2] libata: Add support for SATA attachment to SAS adapters Date: Mon, 24 Oct 2005 17:20:34 -0500 Message-ID: <435D5E32.4080902@us.ibm.com> References: <4341A91A.3020000@us.ibm.com> <434251E0.9060000@pobox.com> <58cb370e0510040322q1cb7a13bjfc6c7875140d20a9@mail.gmail.com> <58cb370e0510041356h780e7a5aifda0c232f677471e@mail.gmail.com> <43443E99.4090008@pobox.com> <435D5D83.1060201@us.ibm.com> Reply-To: brking@us.ibm.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020102050003090305050603" Return-path: In-Reply-To: <435D5D83.1060201@us.ibm.com> Sender: linux-scsi-owner@vger.kernel.org To: brking@us.ibm.com Cc: Jeff Garzik , Bartlomiej Zolnierkiewicz , linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org List-Id: linux-ide@vger.kernel.org This is a multi-part message in MIME format. --------------020102050003090305050603 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit --------------020102050003090305050603 Content-Type: text/plain; name="libata_sas.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="libata_sas.patch" ClRoZSBmb2xsb3dpbmcgcGF0Y2ggZW5oYW5jZXMgbGliYXRhIHRvIGFsbG93IFNBUyBkZXZp Y2UgZHJpdmVycwp0byB1dGlsaXplIGxpYmF0YSB0byB0YWxrIHRvIFNBVEEgZGV2aWNlcy4g SXQgaW50cm9kdWNlcyBzb21lCm5ldyBBUElzIHdoaWNoIGFsbG93IGxpYmF0YSB0byBiZSB1 c2VkIHdpdGhvdXQgYWxsb2NhdGluZyBhCnZpcnR1YWwgc2NzaSBob3N0LgoKU2luY2UgdGhl IGxhc3QgdGltZSBJIHBvc3RlZCB0aGlzIGNvZGUsIEkgaGF2ZSByZW1vdmVkIGFsbApkZXBl bmRlbmNlIG9uIHRoZSBhdGFfaG9zdF9zZXQgc3RydWN0LgoKTmV3IEFQSXM6CgphdGFfc2Fz X3BvcnRfYWxsb2MgLSBBbGxvY2F0ZSBhbiBhdGFfcG9ydCAKYXRhX3Nhc19wb3J0X2luaXQg LSBJbml0aWFsaXplIGFuIGF0YV9wb3J0IChwcm9iZSBkZXZpY2UsIGV0YykKYXRhX3Nhc19w b3J0X2Rlc3Ryb3kgLSBGcmVlIGFuIGF0YV9wb3J0IGFsbG9jYXRlZCBieSBhdGFfc2FzX3Bv cnRfYWxsb2MKYXRhX3Nhc19zbGF2ZV9jb25maWd1cmUgLSBjb25maWd1cmUgc2NzaSBkZXZp Y2UKYXRhX3Nhc19xdWV1ZWNtZCAtIHF1ZXVlIGEgc2NzaSBjb21tYW5kLCBzaW1pbGFyIHRv IGF0YV9zY3NpX3F1ZXVlY29tYW5kCgpUaGVzZSBuZXcgQVBJcyBjYW4gYmUgdXNlZCBlaXRo ZXIgZGlyZWN0bHkgYnkgYSBTQVMgTExERCBvciBjb3VsZCBiZSB1c2VkCmJ5IHRoZSBTQVMg dHJhbnNwb3J0IGNsYXNzLiAKClBvc3NpYmxlIHVzYWdlIGZvciBhIFNBUyBMTEREIHdvdWxk IGJlOgoKc2NzaV9zY2FuX2hvc3QKCXNsYXZlX2FsbG9jCgkJYXRhX3Nhc19wb3J0X2FsbG9j CgkJYXRhX3Nhc19wb3J0X2luaXQKCXNsYXZlX2NvbmZpZ3VyZQoJCWF0YV9zYXNfc2xhdmVf Y29uZmlndXJlCgpDb21tYW5kcyByZWNlaXZlZCBieSB0aGUgTExERCBmb3IgU0FUQSBkZXZp Y2VzIHdvdWxkIGNhbGwgYXRhX3Nhc19xdWV1ZWNtZC4KCkRldmljZSB0ZWFyZG93biB3b3Vs ZCBvY2N1ciB3aXRoOgoKc2xhdmVfZGVzdHJveQoJYXRhX3Nhc19wb3J0X2Rlc3Ryb3kKClNp Z25lZC1vZmYtYnk6IEJyaWFuIEtpbmcgPGJya2luZ0B1cy5pYm0uY29tPgotLS0KCiBsaW51 eC0yLjYtYmpraW5nMS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyB8ICAgMzIgKystLQog bGludXgtMi42LWJqa2luZzEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgfCAgMTkxICsr KysrKysrKysrKysrKysrKysrKysrLS0tLQogbGludXgtMi42LWJqa2luZzEvZHJpdmVycy9z Y3NpL2xpYmF0YS5oICAgICAgfCAgICA3IAogbGludXgtMi42LWJqa2luZzEvaW5jbHVkZS9s aW51eC9saWJhdGEuaCAgICAgfCAgICA3IAogNCBmaWxlcyBjaGFuZ2VkLCAxOTkgaW5zZXJ0 aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC1wdU4gZHJpdmVycy9zY3NpL2xpYmF0 YS1zY3NpLmN+bGliYXRhX3NhcyBkcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwotLS0gbGlu dXgtMi42L2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jfmxpYmF0YV9zYXMJMjAwNS0xMC0y NCAxNTowODoyNy4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi1iamtpbmcxL2RyaXZl cnMvc2NzaS9saWJhdGEtc2NzaS5jCTIwMDUtMTAtMjQgMTY6NTM6NDguMDAwMDAwMDAwIC0w NTAwCkBAIC0zMjUsNiArMzI1LDMwIEBAIHZvaWQgYXRhX3RvX3NlbnNlX2Vycm9yKHN0cnVj dCBhdGFfcXVldWUKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0YV9zY3NpX3NkZXZfY29uZmln KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzZGV2LT51c2VfMTBfZm9yX3J3ID0g MTsKKwlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKK30KKworc3RhdGljIHZvaWQgYXRhX3Nj c2lfZGV2X2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisJCQkJc3RydWN0IGF0 YV9kZXZpY2UgKmRldikKK3sKKwkvKiBUT0RPOiAxMDI0IGlzIGFuIGFyYml0cmFyeSBudW1i ZXIsIG5vdCB0aGUKKwkgKiBoYXJkd2FyZSBtYXhpbXVtLiAgVGhpcyBzaG91bGQgYmUgaW5j cmVhc2VkIHRvCisJICogNjU1MzQgd2hlbiBKZW5zIEF4Ym9lJ3MgcGF0Y2ggZm9yIGR5bmFt aWNhbGx5CisJICogZGV0ZXJtaW5pbmcgbWF4X3NlY3RvcnMgaXMgbWVyZ2VkLgorCSAqLwor CWlmICgoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19MQkE0OCkgJiYKKwkgICAgKChkZXYtPmZs YWdzICYgQVRBX0RGTEFHX0xPQ0tfU0VDVE9SUykgPT0gMCkpIHsKKwkJLyoKKwkJICogZG8g bm90IG92ZXJ3cml0ZSBzZGV2LT5ob3N0LT5tYXhfc2VjdG9ycywgc2luY2UKKwkJICogb3Ro ZXIgZHJpdmVzIG9uIHRoaXMgaG9zdCBtYXkgbm90IHN1cHBvcnQgTEJBNDgKKwkJICovCisJ CWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAyMDQ4KTsKKwl9 Cit9CisKIC8qKgogICoJYXRhX3Njc2lfc2xhdmVfY29uZmlnIC0gU2V0IFNDU0kgZGV2aWNl IGF0dHJpYnV0ZXMKICAqCUBzZGV2OiBTQ1NJIGRldmljZSB0byBleGFtaW5lCkBAIC0zMzks OSArMzYzLDcgQEAgdm9pZCBhdGFfdG9fc2Vuc2VfZXJyb3Ioc3RydWN0IGF0YV9xdWV1ZQog CiBpbnQgYXRhX3Njc2lfc2xhdmVfY29uZmlnKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikK IHsKLQlzZGV2LT51c2VfMTBfZm9yX3J3ID0gMTsKLQlzZGV2LT51c2VfMTBfZm9yX21zID0g MTsKLQorCWF0YV9zY3NpX3NkZXZfY29uZmlnKHNkZXYpOwogCWJsa19xdWV1ZV9tYXhfcGh5 c19zZWdtZW50cyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBMSUJBVEFfTUFYX1BSRCk7CiAKIAlp ZiAoc2Rldi0+aWQgPCBBVEFfTUFYX0RFVklDRVMpIHsKQEAgLTM1MSwxOSArMzczLDcgQEAg aW50IGF0YV9zY3NpX3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZQogCQlhcCA9IChzdHJ1 Y3QgYXRhX3BvcnQgKikgJnNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdOwogCQlkZXYgPSAmYXAt PmRldmljZVtzZGV2LT5pZF07CiAKLQkJLyogVE9ETzogMTAyNCBpcyBhbiBhcmJpdHJhcnkg bnVtYmVyLCBub3QgdGhlCi0JCSAqIGhhcmR3YXJlIG1heGltdW0uICBUaGlzIHNob3VsZCBi ZSBpbmNyZWFzZWQgdG8KLQkJICogNjU1MzQgd2hlbiBKZW5zIEF4Ym9lJ3MgcGF0Y2ggZm9y IGR5bmFtaWNhbGx5Ci0JCSAqIGRldGVybWluaW5nIG1heF9zZWN0b3JzIGlzIG1lcmdlZC4K LQkJICovCi0JCWlmICgoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19MQkE0OCkgJiYKLQkJICAg ICgoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19MT0NLX1NFQ1RPUlMpID09IDApKSB7Ci0JCQkv KgotCQkJICogZG8gbm90IG92ZXJ3cml0ZSBzZGV2LT5ob3N0LT5tYXhfc2VjdG9ycywgc2lu Y2UKLQkJCSAqIG90aGVyIGRyaXZlcyBvbiB0aGlzIGhvc3QgbWF5IG5vdCBzdXBwb3J0IExC QTQ4Ci0JCQkgKi8KLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1 ZXVlLCAyMDQ4KTsKLQkJfQorCQlhdGFfc2NzaV9kZXZfY29uZmlnKHNkZXYsIGRldik7CiAJ fQogCiAJcmV0dXJuIDA7CS8qIHNjc2kgbGF5ZXIgZG9lc24ndCBjaGVjayByZXR1cm4gdmFs dWUsIHNpZ2ggKi8KQEAgLTE1NDEsNiArMTU1MSwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQg YXRhX3Njc2lfZHVtcF9jZGIoc3RyCiAjZW5kaWYKIH0KIAorc3RhdGljIHZvaWQgX19hdGFf c2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1 Y3Qgc2NzaV9jbW5kICopLAorCQkJCXN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFf ZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKKwkJ YXRhX3hsYXRfZnVuY190IHhsYXRfZnVuYyA9IGF0YV9nZXRfeGxhdF9mdW5jKGRldiwKKwkJ CQkJCQkgICAgICBjbWQtPmNtbmRbMF0pOworCisJCWlmICh4bGF0X2Z1bmMpCisJCQlhdGFf c2NzaV90cmFuc2xhdGUoYXAsIGRldiwgY21kLCBkb25lLCB4bGF0X2Z1bmMpOworCQllbHNl CisJCQlhdGFfc2NzaV9zaW11bGF0ZShkZXYtPmlkLCBjbWQsIGRvbmUpOworCX0gZWxzZQor CQlhdGFfc2NzaV90cmFuc2xhdGUoYXAsIGRldiwgY21kLCBkb25lLCBhdGFwaV94bGF0KTsK K30KKwogLyoqCiAgKglhdGFfc2NzaV9xdWV1ZWNtZCAtIElzc3VlIFNDU0kgY2RiIHRvIGxp YmF0YS1tYW5hZ2VkIGRldmljZQogICoJQGNtZDogU0NTSSBjb21tYW5kIHRvIGJlIHNlbnQK QEAgLTE1NzcsMTYgKzE2MDIsNyBAQCBpbnQgYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNj c2lfY21uZCAqCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpZiAoZGV2LT5jbGFzcyA9 PSBBVEFfREVWX0FUQSkgewotCQlhdGFfeGxhdF9mdW5jX3QgeGxhdF9mdW5jID0gYXRhX2dl dF94bGF0X2Z1bmMoZGV2LAotCQkJCQkJCSAgICAgIGNtZC0+Y21uZFswXSk7Ci0KLQkJaWYg KHhsYXRfZnVuYykKLQkJCWF0YV9zY3NpX3RyYW5zbGF0ZShhcCwgZGV2LCBjbWQsIGRvbmUs IHhsYXRfZnVuYyk7Ci0JCWVsc2UKLQkJCWF0YV9zY3NpX3NpbXVsYXRlKGRldi0+aWQsIGNt ZCwgZG9uZSk7Ci0JfSBlbHNlCi0JCWF0YV9zY3NpX3RyYW5zbGF0ZShhcCwgZGV2LCBjbWQs IGRvbmUsIGF0YXBpX3hsYXQpOworCV9fYXRhX3Njc2lfcXVldWVjbWQoY21kLCBkb25lLCBh cCwgZGV2KTsKIAogb3V0X3VubG9jazoKIAlyZXR1cm4gMDsKQEAgLTE2NzgsMyArMTY5NCwx MjYgQEAgdm9pZCBhdGFfc2NzaV9zaW11bGF0ZSh1MTYgKmlkLAogCX0KIH0KIAorLyoqCisg KglhdGFfc2FzX3BvcnRfYWxsb2MgLSBBbGxvY2F0ZSBwb3J0IGZvciBhIFNBUyBhdHRhY2hl ZCBTQVRBIGRldmljZQorICoJQHBkZXY6IFBDSSBkZXZpY2UgdGhhdCB0aGUgc2NzaSBkZXZp Y2UgaXMgYXR0YWNoZWQgdG8KKyAqCUBwb3J0X2luZm86IEluZm9ybWF0aW9uIGZyb20gbG93 LWxldmVsIGhvc3QgZHJpdmVyCisgKgorICoJTE9DS0lORzoKKyAqCVBDSS9ldGMuIGJ1cyBw cm9iZSBzZW0uCisgKgorICoJUkVUVVJOUzoKKyAqCWF0YV9wb3J0IHBvaW50ZXIgb24gc3Vj Y2VzcyAvIE5VTEwgb24gZmFpbHVyZS4KKyAqLworCitzdHJ1Y3QgYXRhX3BvcnQgKmF0YV9z YXNfcG9ydF9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgc3RydWN0IGF0 YV9wb3J0X2luZm8gKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0ga3ph bGxvYyhzaXplb2YoKmFwKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWFwKQorCQlyZXR1cm4g TlVMTDsKKworCWFwLT5kZXYgPSAmcGRldi0+ZGV2OworCWFwLT5vcHMgPSBwb3J0X2luZm8t PnBvcnRfb3BzOworCWFwLT5mbGFncyA9IHBvcnRfaW5mby0+aG9zdF9mbGFnczsKKwlhcC0+ cGlvX21hc2sgPSBwb3J0X2luZm8tPnBpb19tYXNrOworCWFwLT5td2RtYV9tYXNrID0gcG9y dF9pbmZvLT5td2RtYV9tYXNrOworCWFwLT51ZG1hX21hc2sgPSBwb3J0X2luZm8tPnVkbWFf bWFzazsKKwlhcC0+Y2JsID0gQVRBX0NCTF9TQVRBOworCWFwLT5hY3RpdmVfdGFnID0gQVRB X1RBR19QT0lTT047CisJYXAtPmxhc3RfY3RsID0gMHhGRjsKKwlyZXR1cm4gYXA7Cit9CitF WFBPUlRfU1lNQk9MX0dQTChhdGFfc2FzX3BvcnRfYWxsb2MpOworCitzdGF0aWMgdm9pZCBh dGFfc2FzX3BvcnRfZnJlZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWtmcmVlKGFwKTsK K30KKworLyoqCisgKglhdGFfc2FzX3BvcnRfaW5pdCAtIEluaXRpYWxpemUgYSBTQVRBIGRl dmljZQorICoJQGFwOiBTQVRBIHBvcnQgdG8gaW5pdGlhbGl6ZQorICoKKyAqCUxPQ0tJTkc6 CisgKglQQ0kvZXRjLiBidXMgcHJvYmUgc2VtLgorICoKKyAqCVJFVFVSTlM6CisgKglaZXJv IG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGVycm9yLgorICovCisKK2ludCBhdGFfc2FzX3Bv cnRfaW5pdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWludCByYyA9IGFwLT5vcHMtPnBv cnRfc3RhcnQoYXApOworCisJaWYgKCFyYykKKwkJcmMgPSBhdGFfYnVzX3Byb2JlKGFwKTsK KworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zYXNfcG9ydF9pbml0 KTsKKworLyoqCisgKglhdGFfc2FzX3BvcnRfZGVzdHJveSAtIERlc3Ryb3kgYSBTQVRBIHBv cnQgYWxsb2NhdGVkIGJ5IGF0YV9zYXNfcG9ydF9hbGxvYworICoJQGFwOiBTQVRBIHBvcnQg dG8gZGVzdHJveQorICoKKyAqLworCit2b2lkIGF0YV9zYXNfcG9ydF9kZXN0cm95KHN0cnVj dCBhdGFfcG9ydCAqYXApCit7CisJaWYgKGFwKSB7CisJCWFwLT5vcHMtPnBvcnRfc3RvcChh cCk7CisJCWF0YV9zYXNfcG9ydF9mcmVlKGFwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChhdGFfc2FzX3BvcnRfZGVzdHJveSk7CisKKy8qKgorICoJYXRhX3Nhc19zbGF2ZV9jb25m aWd1cmUgLSBEZWZhdWx0IHNsYXZlX2NvbmZpZyByb3V0aW5lIGZvciBsaWJhdGEgZGV2aWNl cworICoJQHNkZXY6IFNDU0kgZGV2aWNlIHRvIGNvbmZpZ3VyZQorICoJQGFwOiBBVEEgcG9y dCB0byB3aGljaCBTQ1NJIGRldmljZSBpcyBhdHRhY2hlZAorICoKKyAqCVJFVFVSTlM6Cisg KglaZXJvLgorICovCisKK2ludCBhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2Nz aV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJYXRhX3Njc2lfc2Rl dl9jb25maWcoc2Rldik7CisJYXRhX3Njc2lfZGV2X2NvbmZpZyhzZGV2LCBhcC0+ZGV2aWNl KTsKKwlpZiAoYXRhX2Rldl9rbm9iYmxlKGFwKSkKKwkJYmxrX3F1ZXVlX21heF9zZWN0b3Jz KHNkZXYtPnJlcXVlc3RfcXVldWUsIEFUQV9NQVhfU0VDVE9SUyk7CisJcmV0dXJuIDA7Cit9 CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZSk7CisKKy8qKgor ICoJYXRhX3Nhc19xdWV1ZWNtZCAtIElzc3VlIFNDU0kgY2RiIHRvIGxpYmF0YS1tYW5hZ2Vk IGRldmljZQorICoJQGNtZDogU0NTSSBjb21tYW5kIHRvIGJlIHNlbnQKKyAqCUBkb25lOiBD b21wbGV0aW9uIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBjb21tYW5kIGlzIGNvbXBsZXRlCisg KglAYXA6CUFUQSBwb3J0IHRvIHdoaWNoIHRoZSBjb21tYW5kIGlzIGJlaW5nIHNlbnQKKyAq CisgKglSRVRVUk5TOgorICoJWmVyby4KKyAqLworCitpbnQgYXRhX3Nhc19xdWV1ZWNtZChz dHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICop LAorCQkgICAgIHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJaWYgKHVubGlrZWx5KCFhdGFf ZGV2X3ByZXNlbnQoYXAtPmRldmljZSkpKSB7CisJCWNtZC0+cmVzdWx0ID0gKERJRF9CQURf VEFSR0VUIDw8IDE2KTsKKwkJZG9uZShjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAo Y21kLT5jbWRfbGVuID4gYXAtPmNkYl9sZW4pIHsKKwkJY21kLT5yZXN1bHQgPSAoRElEX0FC T1JUIDw8IDE2KTsKKwkJZG9uZShjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlfX2F0YV9z Y3NpX3F1ZXVlY21kKGNtZCwgZG9uZSwgYXAsIGFwLT5kZXZpY2UpOworCXJldHVybiAwOwor fQorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Nhc19xdWV1ZWNtZCk7CmRpZmYgLXB1TiBkcml2 ZXJzL3Njc2kvbGliYXRhLWNvcmUuY35saWJhdGFfc2FzIGRyaXZlcnMvc2NzaS9saWJhdGEt Y29yZS5jCi0tLSBsaW51eC0yLjYvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmN+bGliYXRh X3NhcwkyMDA1LTEwLTI0IDE1OjA4OjI3LjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42 LWJqa2luZzEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMJMjAwNS0xMC0yNCAxNTowODoy Ny4wMDAwMDAwMDAgLTA1MDAKQEAgLTExMDYsNiArMTEwNiwyMSBAQCBzdGF0aWMgaW5saW5l IHZvaWQgYXRhX2R1bXBfaWQoc3RydWN0IGF0CiAJCWRldi0+aWRbOTNdKTsKIH0KIAorc3Rh dGljIHZvaWQgYXRhX3NldF9jZGJfbGVuKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVk IGludCBjZGJfbGVuKQoreworCWFwLT5jZGJfbGVuID0gY2RiX2xlbjsKKwlpZiAoYXAtPmhv c3QpCisJCWFwLT5ob3N0LT5tYXhfY21kX2xlbiA9IGNkYl9sZW47Cit9CisKK3N0YXRpYyB2 b2lkIGF0YV9zZXRfbWF4X3NlY3RvcnMoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQg aW50IG1heF9zZWN0b3JzKQoreworCWlmIChhcC0+aG9zdCkgeworCQlhcC0+aG9zdC0+bWF4 X3NlY3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7CisJCWFwLT5ob3N0LT5ob3N0dC0+bWF4X3Nl Y3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7CisJfQorfQorCiAvKioKICAqCWF0YV9kZXZfaWRl bnRpZnkgLSBvYnRhaW4gSURFTlRJRlkgeCBERVZJQ0UgcGFnZQogICoJQGFwOiBwb3J0IG9u IHdoaWNoIGRldmljZSB3ZSB3aXNoIHRvIHByb2JlIHJlc2lkZXMKQEAgLTEyNjYsNyArMTI4 MSw3IEBAIHJldHJ5OgogCQkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfdTMyKGRldi0+aWQs IDYwKTsKIAkJfQogCi0JCWFwLT5ob3N0LT5tYXhfY21kX2xlbiA9IDE2OworCQlhdGFfc2V0 X2NkYl9sZW4oYXAsIDE2KTsKIAogCQkvKiBwcmludCBkZXZpY2UgaW5mbyB0byBkbWVzZyAq LwogCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogZGV2ICV1IEFUQSwgbWF4ICVzLCAlTHUg c2VjdG9yczolc1xuIiwKQEAgLTEyODYsOCArMTMwMSw4IEBAIHJldHJ5OgogCQkJcHJpbnRr KEtFUk5fV0FSTklORyAiYXRhJXU6IHVuc3VwcG9ydGVkIENEQiBsZW5cbiIsIGFwLT5pZCk7 CiAJCQlnb3RvIGVycl9vdXRfbm9zdXA7CiAJCX0KLQkJYXAtPmNkYl9sZW4gPSAodW5zaWdu ZWQgaW50KSByYzsKLQkJYXAtPmhvc3QtPm1heF9jbWRfbGVuID0gKHVuc2lnbmVkIGNoYXIp IGFwLT5jZGJfbGVuOworCisJCWF0YV9zZXRfY2RiX2xlbihhcCwgcmMpOwogCiAJCS8qIHBy aW50IGRldmljZSBpbmZvIHRvIGRtZXNnICovCiAJCXByaW50ayhLRVJOX0lORk8gImF0YSV1 OiBkZXYgJXUgQVRBUEksIG1heCAlc1xuIiwKQEAgLTEzMDYsMTIgKzEzMjEsNiBAQCBlcnJf b3V0OgogCURQUklOVEsoIkVYSVQsIGVyclxuIik7CiB9CiAKLQotc3RhdGljIGlubGluZSB1 OCBhdGFfZGV2X2tub2JibGUoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlyZXR1cm4gKChh cC0+Y2JsID09IEFUQV9DQkxfU0FUQSkgJiYgKCFhdGFfaWRfaXNfc2F0YShhcC0+ZGV2aWNl LT5pZCkpKTsKLX0KLQogLyoqCiAgKiAJYXRhX2Rldl9jb25maWcgLSBSdW4gZGV2aWNlIHNw ZWNpZmljIGhhbmRsZXJzIGFuZCBjaGVjayBmb3IKICAqIAkJCSBTQVRBLT5QQVRBIGJyaWRn ZXMKQEAgLTEzMjgsOCArMTMzNyw3IEBAIHZvaWQgYXRhX2Rldl9jb25maWcoc3RydWN0IGF0 YV9wb3J0ICphcCwKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXUoJXUpOiBhcHBseWluZyBi cmlkZ2UgbGltaXRzXG4iLAogCQkJYXAtPmlkLCBhcC0+ZGV2aWNlLT5kZXZubyk7CiAJCWFw LT51ZG1hX21hc2sgJj0gQVRBX1VETUE1OwotCQlhcC0+aG9zdC0+bWF4X3NlY3RvcnMgPSBB VEFfTUFYX1NFQ1RPUlM7Ci0JCWFwLT5ob3N0LT5ob3N0dC0+bWF4X3NlY3RvcnMgPSBBVEFf TUFYX1NFQ1RPUlM7CisJCWF0YV9zZXRfbWF4X3NlY3RvcnMoYXAsIEFUQV9NQVhfU0VDVE9S Uyk7CiAJCWFwLT5kZXZpY2UtPmZsYWdzIHw9IEFUQV9ERkxBR19MT0NLX1NFQ1RPUlM7CiAJ fQogCkBAIC0xMzUyLDcgKzEzNjAsNyBAQCB2b2lkIGF0YV9kZXZfY29uZmlnKHN0cnVjdCBh dGFfcG9ydCAqYXAsCiAgKglaZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGVycm9yLgog ICovCiAKLXN0YXRpYyBpbnQgYXRhX2J1c19wcm9iZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQor aW50IGF0YV9idXNfcHJvYmUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl1bnNpZ25lZCBp bnQgaSwgZm91bmQgPSAwOwogCmRpZmYgLXB1TiBkcml2ZXJzL3Njc2kvbGliYXRhLmh+bGli YXRhX3NhcyBkcml2ZXJzL3Njc2kvbGliYXRhLmgKLS0tIGxpbnV4LTIuNi9kcml2ZXJzL3Nj c2kvbGliYXRhLmh+bGliYXRhX3NhcwkyMDA1LTEwLTI0IDE1OjA4OjI3LjAwMDAwMDAwMCAt MDUwMAorKysgbGludXgtMi42LWJqa2luZzEvZHJpdmVycy9zY3NpL2xpYmF0YS5oCTIwMDUt MTAtMjQgMTU6MDg6MjcuMDAwMDAwMDAwIC0wNTAwCkBAIC03OSw2ICs3OSw4IEBAIGV4dGVy biB2b2lkIGF0YV9zY3NpX2JhZGNtZChzdHJ1Y3Qgc2NzaV8KIGV4dGVybiB2b2lkIGF0YV9z Y3NpX3JidWZfZmlsbChzdHJ1Y3QgYXRhX3Njc2lfYXJncyAqYXJncywKICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCAoKmFjdG9yKSAoc3RydWN0IGF0YV9zY3NpX2Fy Z3MgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTggKnJidWYsIHVuc2lnbmVkIGludCBidWZsZW4pKTsKK2V4dGVybiBpbnQgYXRhX2J1c19w cm9iZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiBpbnQgYXRhX3Nhc19wb3J0X2lu aXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGFfYmFk X3Njc2lvcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2Nz aV9jbW5kICopKQogewpAQCAtOTAsNCArOTIsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXRh X2JhZF9jZGIoc3RydWN0IHNjCiAJYXRhX3Njc2lfYmFkY21kKGNtZCwgZG9uZSwgMHgyNCwg MHgwMCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggYXRhX2Rldl9rbm9iYmxlKHN0cnVjdCBh dGFfcG9ydCAqYXApCit7CisJcmV0dXJuICgoYXAtPmNibCA9PSBBVEFfQ0JMX1NBVEEpICYm ICghYXRhX2lkX2lzX3NhdGEoYXAtPmRldmljZS0+aWQpKSk7Cit9CisKICNlbmRpZiAvKiBf X0xJQkFUQV9IX18gKi8KZGlmZiAtcHVOIGluY2x1ZGUvbGludXgvbGliYXRhLmh+bGliYXRh X3NhcyBpbmNsdWRlL2xpbnV4L2xpYmF0YS5oCi0tLSBsaW51eC0yLjYvaW5jbHVkZS9saW51 eC9saWJhdGEuaH5saWJhdGFfc2FzCTIwMDUtMTAtMjQgMTU6MDg6MjcuMDAwMDAwMDAwIC0w NTAwCisrKyBsaW51eC0yLjYtYmpraW5nMS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCTIwMDUt MTAtMjQgMTU6MDg6MjcuMDAwMDAwMDAwIC0wNTAwCkBAIC00MDEsNiArNDAxLDEzIEBAIGV4 dGVybiBpbnQgYXRhX3Njc2lfaW9jdGwoc3RydWN0IHNjc2lfZGUKIGV4dGVybiBpbnQgYXRh X3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3Ry dWN0IHNjc2lfY21uZCAqKSk7CiBleHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBT Y3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9yZWxlYXNlKHN0cnVjdCBT Y3NpX0hvc3QgKmhvc3QpOworZXh0ZXJuIHZvaWQgYXRhX3Nhc19wb3J0X2Rlc3Ryb3koc3Ry dWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gc3RydWN0IGF0YV9wb3J0ICphdGFfc2FzX3Bv cnRfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgIHN0cnVjdCBhdGFfcG9y dF9pbmZvICpwb3J0X2luZm8pOworZXh0ZXJuIGludCBhdGFfc2FzX3BvcnRfaW5pdChzdHJ1 Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiBpbnQgYXRhX3Nhc19zbGF2ZV9jb25maWd1cmUo c3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVy biBpbnQgYXRhX3Nhc19xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpk b25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopLAorCQkJICAgIHN0cnVjdCBhdGFfcG9ydCAqYXAp OwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAq YXAsIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogLyoKICAqIERlZmF1bHQgZHJpdmVy IG9wcyBpbXBsZW1lbnRhdGlvbnMKXwo= --------------020102050003090305050603--