From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian King Subject: [RFC 2/2] libata: support SATA devices on SAS HBAs Date: Mon, 03 Oct 2005 16:58:49 -0500 Message-ID: <4341A999.3030807@us.ibm.com> References: <4341A91A.3020000@us.ibm.com> Reply-To: brking@us.ibm.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040200080105050306000602" Return-path: Received: from e4.ny.us.ibm.com ([32.97.182.144]:43501 "EHLO e4.ny.us.ibm.com") by vger.kernel.org with ESMTP id S932367AbVJCV6v (ORCPT ); Mon, 3 Oct 2005 17:58:51 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e4.ny.us.ibm.com (8.12.11/8.12.11) with ESMTP id j93LwoIb015942 for ; Mon, 3 Oct 2005 17:58:50 -0400 Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay02.pok.ibm.com (8.12.10/NCO/VERS6.7) with ESMTP id j93LwoVc096640 for ; Mon, 3 Oct 2005 17:58:50 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.12.11/8.13.3) with ESMTP id j93Lwocd027063 for ; Mon, 3 Oct 2005 17:58:50 -0400 In-Reply-To: <4341A91A.3020000@us.ibm.com> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: brking@us.ibm.com Cc: linux-ide@vger.kernel.org This is a multi-part message in MIME format. --------------040200080105050306000602 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit --------------040200080105050306000602 Content-Type: text/plain; name="libata_sas.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="libata_sas.patch" ClRoZSBmb2xsb3dpbmcgcGF0Y2ggZW5oYW5jZXMgbGliYXRhIHRvIGFsbG93IFNBUyBkZXZp Y2UgZHJpdmVycwp0byB1dGlsaXplIGxpYmF0YSB0byB0YWxrIHRvIFNBVEEgZGV2aWNlcy4g SXQgaW50cm9kdWNlcyBzb21lCm5ldyBBUElzIHdoaWNoIGFsbG93IGxpYmF0YSB0byBiZSB1 c2VkIHdpdGhvdXQgYWxsb2NhdGluZyBhCnZpcnR1YWwgc2NzaSBob3N0LiBUaGlzIGlzIGp1 c3QgYSBzbmFwc2hvdCBvZiB3aGF0IEkndmUKY29tZSB1cCB3aXRoIGF0IHRoaXMgcG9pbnQg YW5kIEkgZmlndXJlZCBJIHdvdWxkIHBvc3QgaXQgdG8Kc2VlIGlmIEkgd2FzIGhlYWRpbmcg aW4gYSByZWFzb25hYmxlIGRpcmVjdGlvbiBvciBub3QsIHNvCmRvbid0IGV4cGVjdCB0aGUg Y29kZSBiZWxvdyB0byBkbyBhbnl0aGluZyB1c2VmdWwgYXQgdGhpcyBwb2ludAphcyBpdCBp cyB1bnRlc3RlZC4KCk5ldyBBUElzOgoKYXRhX3Nhc19wb3J0X2FsbG9jIC0gQWxsb2NhdGUg YW4gYXRhX3BvcnQgCmF0YV9zYXNfcG9ydF9pbml0IC0gSW5pdGlhbGl6ZSBhbiBhdGFfcG9y dCAocHJvYmUgYnVzLCBldGMpCmF0YV9zYXNfcG9ydF9kZXN0cm95IC0gRnJlZSBhbiBhdGFf cG9ydCBhbGxvY2F0ZWQgYnkgYXRhX3Nhc19wb3J0X2FsbG9jCmF0YV9zYXNfc2xhdmVfY29u ZmlndXJlIC0gY29uZmlndXJlIHNjc2kgZGV2aWNlCmF0YV9zYXNfcXVldWVjbWQgLSBxdWV1 ZSBhIHNjc2kgY29tbWFuZCwgc2ltaWxhciB0byBhdGFfc2NzaV9xdWV1ZWNvbWFuZAoKVGhl c2UgbmV3IEFQSXMgY2FuIGJlIHVzZWQgZWl0aGVyIGRpcmVjdGx5IGJ5IGEgU0FTIExMREQg b3IgY291bGQgYmUgdXNlZApieSB0aGUgU0FTIHRyYW5zcG9ydCBjbGFzcy4gCgpQb3NzaWJs ZSB1c2FnZSBmb3IgYSBTQVMgTExERCB3b3VsZCBiZToKCnNjc2lfc2Nhbl9ob3N0CglzbGF2 ZV9hbGxvYwoJCWF0YV9zYXNfcG9ydF9hbGxvYwoJCWF0YV9zYXNfcG9ydF9pbml0CglzbGF2 ZV9jb25maWd1cmUKCQlhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZQoKQ29tbWFuZHMgcmVjZWl2 ZWQgYnkgdGhlIExMREQgZm9yIFNBVEEgZGV2aWNlcyB3b3VsZCBjYWxsIGF0YV9zYXNfcXVl dWVjbWQuCgpEZXZpY2UgdGVhcmRvd24gd291bGQgb2NjdXIgd2l0aDoKCnNsYXZlX2Rlc3Ry b3kKCWF0YV9zYXNfcG9ydF9kZXN0cm95CgpTaWduZWQtb2ZmLWJ5OiBCcmlhbiBLaW5nIDxi cmtpbmdAdXMuaWJtLmNvbT4KLS0tCgogbGludXgtMi42LWJqa2luZzEvZHJpdmVycy9zY3Np L2xpYmF0YS1jb3JlLmMgfCAgIDMyICsrLS0KIGxpbnV4LTIuNi1iamtpbmcxL2RyaXZlcnMv c2NzaS9saWJhdGEtc2NzaS5jIHwgIDIxMyArKysrKysrKysrKysrKysrKysrKysrKy0tLS0K IGxpbnV4LTIuNi1iamtpbmcxL2RyaXZlcnMvc2NzaS9saWJhdGEuaCAgICAgIHwgICAgNyAK IGxpbnV4LTIuNi1iamtpbmcxL2luY2x1ZGUvbGludXgvbGliYXRhLmggICAgIHwgICAgOCAr CiA0IGZpbGVzIGNoYW5nZWQsIDIyMiBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkK CmRpZmYgLXB1TiBkcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuY35saWJhdGFfc2FzIGRyaXZl cnMvc2NzaS9saWJhdGEtc2NzaS5jCi0tLSBsaW51eC0yLjYvZHJpdmVycy9zY3NpL2xpYmF0 YS1zY3NpLmN+bGliYXRhX3NhcwkyMDA1LTA5LTI2IDE0OjIzOjAxLjAwMDAwMDAwMCAtMDUw MAorKysgbGludXgtMi42LWJqa2luZzEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMJMjAw NS0wOS0yNiAxNDoyMzowMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTMyNSw2ICszMjUsMzAgQEAg dm9pZCBhdGFfdG9fc2Vuc2VfZXJyb3Ioc3RydWN0IGF0YV9xdWV1ZQogCX0KIH0KIAorc3Rh dGljIHZvaWQgYXRhX3Njc2lfc2Rldl9jb25maWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2 KQoreworCXNkZXYtPnVzZV8xMF9mb3JfcncgPSAxOworCXNkZXYtPnVzZV8xMF9mb3JfbXMg PSAxOworfQorCitzdGF0aWMgdm9pZCBhdGFfc2NzaV9kZXZfY29uZmlnKHN0cnVjdCBzY3Np X2RldmljZSAqc2RldiwKKwkJCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQoreworCS8qIFRP RE86IDEwMjQgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciwgbm90IHRoZQorCSAqIGhhcmR3YXJl IG1heGltdW0uICBUaGlzIHNob3VsZCBiZSBpbmNyZWFzZWQgdG8KKwkgKiA2NTUzNCB3aGVu IEplbnMgQXhib2UncyBwYXRjaCBmb3IgZHluYW1pY2FsbHkKKwkgKiBkZXRlcm1pbmluZyBt YXhfc2VjdG9ycyBpcyBtZXJnZWQuCisJICovCisJaWYgKChkZXYtPmZsYWdzICYgQVRBX0RG TEFHX0xCQTQ4KSAmJgorCSAgICAoKGRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfTE9DS19TRUNU T1JTKSA9PSAwKSkgeworCQkvKgorCQkgKiBkbyBub3Qgb3ZlcndyaXRlIHNkZXYtPmhvc3Qt Pm1heF9zZWN0b3JzLCBzaW5jZQorCQkgKiBvdGhlciBkcml2ZXMgb24gdGhpcyBob3N0IG1h eSBub3Qgc3VwcG9ydCBMQkE0OAorCQkgKi8KKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNk ZXYtPnJlcXVlc3RfcXVldWUsIDIwNDgpOworCX0KK30KKwogLyoqCiAgKglhdGFfc2NzaV9z bGF2ZV9jb25maWcgLSBTZXQgU0NTSSBkZXZpY2UgYXR0cmlidXRlcwogICoJQHNkZXY6IFND U0kgZGV2aWNlIHRvIGV4YW1pbmUKQEAgLTMzOSw5ICszNjMsNyBAQCB2b2lkIGF0YV90b19z ZW5zZV9lcnJvcihzdHJ1Y3QgYXRhX3F1ZXVlCiAKIGludCBhdGFfc2NzaV9zbGF2ZV9jb25m aWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXNkZXYtPnVzZV8xMF9mb3Jfcncg PSAxOwotCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOwotCisJYXRhX3Njc2lfc2Rldl9jb25m aWcoc2Rldik7CiAJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHNkZXYtPnJlcXVlc3Rf cXVldWUsIExJQkFUQV9NQVhfUFJEKTsKIAogCWlmIChzZGV2LT5pZCA8IEFUQV9NQVhfREVW SUNFUykgewpAQCAtMzUxLDE5ICszNzMsNyBAQCBpbnQgYXRhX3Njc2lfc2xhdmVfY29uZmln KHN0cnVjdCBzY3NpX2RlCiAJCWFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmc2Rldi0+aG9z dC0+aG9zdGRhdGFbMF07CiAJCWRldiA9ICZhcC0+ZGV2aWNlW3NkZXYtPmlkXTsKIAotCQkv KiBUT0RPOiAxMDI0IGlzIGFuIGFyYml0cmFyeSBudW1iZXIsIG5vdCB0aGUKLQkJICogaGFy ZHdhcmUgbWF4aW11bS4gIFRoaXMgc2hvdWxkIGJlIGluY3JlYXNlZCB0bwotCQkgKiA2NTUz NCB3aGVuIEplbnMgQXhib2UncyBwYXRjaCBmb3IgZHluYW1pY2FsbHkKLQkJICogZGV0ZXJt aW5pbmcgbWF4X3NlY3RvcnMgaXMgbWVyZ2VkLgotCQkgKi8KLQkJaWYgKChkZXYtPmZsYWdz ICYgQVRBX0RGTEFHX0xCQTQ4KSAmJgotCQkgICAgKChkZXYtPmZsYWdzICYgQVRBX0RGTEFH X0xPQ0tfU0VDVE9SUykgPT0gMCkpIHsKLQkJCS8qCi0JCQkgKiBkbyBub3Qgb3ZlcndyaXRl IHNkZXYtPmhvc3QtPm1heF9zZWN0b3JzLCBzaW5jZQotCQkJICogb3RoZXIgZHJpdmVzIG9u IHRoaXMgaG9zdCBtYXkgbm90IHN1cHBvcnQgTEJBNDgKLQkJCSAqLwotCQkJYmxrX3F1ZXVl X21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDIwNDgpOwotCQl9CisJCWF0YV9z Y3NpX2Rldl9jb25maWcoc2RldiwgZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsJLyogc2NzaSBs YXllciBkb2Vzbid0IGNoZWNrIHJldHVybiB2YWx1ZSwgc2lnaCAqLwpAQCAtMTU0MSw2ICsx NTUxLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGFfc2NzaV9kdW1wX2NkYihzdHIKICNl bmRpZgogfQogCitzdGF0aWMgdm9pZCBfX2F0YV9zY3NpX3F1ZXVlY21kKHN0cnVjdCBzY3Np X2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCisJCQkJc3Ry dWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2 LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkgeworCQlhdGFfeGxhdF9mdW5jX3QgeGxhdF9mdW5j ID0gYXRhX2dldF94bGF0X2Z1bmMoZGV2LAorCQkJCQkJCSAgICAgIGNtZC0+Y21uZFswXSk7 CisKKwkJaWYgKHhsYXRfZnVuYykKKwkJCWF0YV9zY3NpX3RyYW5zbGF0ZShhcCwgZGV2LCBj bWQsIGRvbmUsIHhsYXRfZnVuYyk7CisJCWVsc2UKKwkJCWF0YV9zY3NpX3NpbXVsYXRlKGRl di0+aWQsIGNtZCwgZG9uZSk7CisJfSBlbHNlCisJCWF0YV9zY3NpX3RyYW5zbGF0ZShhcCwg ZGV2LCBjbWQsIGRvbmUsIGF0YXBpX3hsYXQpOworfQorCiAvKioKICAqCWF0YV9zY3NpX3F1 ZXVlY21kIC0gSXNzdWUgU0NTSSBjZGIgdG8gbGliYXRhLW1hbmFnZWQgZGV2aWNlCiAgKglA Y21kOiBTQ1NJIGNvbW1hbmQgdG8gYmUgc2VudApAQCAtMTU3NywxNiArMTYwMiw3IEBAIGlu dCBhdGFfc2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICoKIAkJZ290byBvdXRfdW5s b2NrOwogCX0KIAotCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7Ci0JCWF0YV94 bGF0X2Z1bmNfdCB4bGF0X2Z1bmMgPSBhdGFfZ2V0X3hsYXRfZnVuYyhkZXYsCi0JCQkJCQkJ ICAgICAgY21kLT5jbW5kWzBdKTsKLQotCQlpZiAoeGxhdF9mdW5jKQotCQkJYXRhX3Njc2lf dHJhbnNsYXRlKGFwLCBkZXYsIGNtZCwgZG9uZSwgeGxhdF9mdW5jKTsKLQkJZWxzZQotCQkJ YXRhX3Njc2lfc2ltdWxhdGUoZGV2LT5pZCwgY21kLCBkb25lKTsKLQl9IGVsc2UKLQkJYXRh X3Njc2lfdHJhbnNsYXRlKGFwLCBkZXYsIGNtZCwgZG9uZSwgYXRhcGlfeGxhdCk7CisJX19h dGFfc2NzaV9xdWV1ZWNtZChjbWQsIGRvbmUsIGFwLCBkZXYpOwogCiBvdXRfdW5sb2NrOgog CXJldHVybiAwOwpAQCAtMTY3OCwzICsxNjk0LDE0OCBAQCB2b2lkIGF0YV9zY3NpX3NpbXVs YXRlKHUxNiAqaWQsCiAJfQogfQogCisvKioKKyAqCWF0YV9zYXNfcG9ydF9hbGxvYyAtIEFs bG9jYXRlIHBvcnQgZm9yIGEgU0FTIGF0dGFjaGVkIFNBVEEgZGV2aWNlCisgKglAc2Rldjog U0NTSSBkZXZpY2UgdG8gYWxsb2NhdGUgcG9ydCBmb3IKKyAqCUBwZGV2OiBQQ0kgZGV2aWNl IHRoYXQgdGhlIHNjc2kgZGV2aWNlIGlzIGF0dGFjaGVkIHRvCisgKglAcG9ydF9pbmZvOiBJ bmZvcm1hdGlvbiBmcm9tIGxvdy1sZXZlbCBob3N0IGRyaXZlcgorICoKKyAqCUxPQ0tJTkc6 CisgKglQQ0kvZXRjLiBidXMgcHJvYmUgc2VtLgorICoKKyAqCVJFVFVSTlM6CisgKglhdGFf cG9ydCBwb2ludGVyIG9uIHN1Y2Nlc3MgLyBOVUxMIG9uIGZhaWx1cmUuCisgKi8KKworc3Ry dWN0IGF0YV9wb3J0ICphdGFfc2FzX3BvcnRfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpz ZGV2LAorCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgc3RydWN0IGF0 YV9wb3J0X2luZm8gKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0ga3ph bGxvYyhzaXplb2YoKmFwKSArIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKKwlzdHJ1 Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCA9IGt6YWxsb2Moc2l6ZW9mKCpob3N0X3NldCks IEdGUF9LRVJORUwpOworCisJaWYgKCFhcCB8fCAhaG9zdF9zZXQpIHsKKwkJa2ZyZWUoYXAp OworCQlrZnJlZShob3N0X3NldCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWhvc3Rfc2V0 LT5kZXYgPSAmcGRldi0+ZGV2OworCWhvc3Rfc2V0LT5uX3BvcnRzID0gMTsKKwlob3N0X3Nl dC0+b3BzID0gcG9ydF9pbmZvLT5wb3J0X29wczsKKwlob3N0X3NldC0+cG9ydHNbMF0gPSBh cDsKKwlhdGFfYXNzaWduX2xvY2soaG9zdF9zZXQsIHNkZXYtPmhvc3QtPmhvc3RfbG9jayk7 CisKKwlhcC0+aG9zdF9zZXQgPSBob3N0X3NldDsKKwlhcC0+b3BzID0gcG9ydF9pbmZvLT5w b3J0X29wczsKKwlhcC0+ZmxhZ3MgPSBwb3J0X2luZm8tPmhvc3RfZmxhZ3M7CisJYXAtPnBp b19tYXNrID0gcG9ydF9pbmZvLT5waW9fbWFzazsKKwlhcC0+bXdkbWFfbWFzayA9IHBvcnRf aW5mby0+bXdkbWFfbWFzazsKKwlhcC0+dWRtYV9tYXNrID0gcG9ydF9pbmZvLT51ZG1hX21h c2s7CisJYXAtPmNibCA9IEFUQV9DQkxfU0FUQTsKKwlhcC0+YWN0aXZlX3RhZyA9IEFUQV9U QUdfUE9JU09OOworCWFwLT5sYXN0X2N0bCA9IDB4RkY7CisJcmV0dXJuIGFwOworfQorRVhQ T1JUX1NZTUJPTF9HUEwoYXRhX3Nhc19wb3J0X2FsbG9jKTsKKworc3RhdGljIHZvaWQgYXRh X3Nhc19wb3J0X2ZyZWUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlrZnJlZShhcC0+aG9z dF9zZXQpOworCWtmcmVlKGFwKTsKK30KKworLyoqCisgKglhdGFfc2FzX3BvcnRfaW5pdCAt IEluaXRpYWxpemUgYSBTQVRBIGRldmljZQorICoJQGFwOiBTQVRBIHBvcnQgdG8gaW5pdGlh bGl6ZQorICoKKyAqCUxPQ0tJTkc6CisgKglQQ0kvZXRjLiBidXMgcHJvYmUgc2VtLgorICoK KyAqCVJFVFVSTlM6CisgKglaZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGVycm9yLgor ICovCisKK2ludCBhdGFfc2FzX3BvcnRfaW5pdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorewor CWludCByYyA9IGFwLT5vcHMtPnBvcnRfc3RhcnQoYXApOworCisJaWYgKCFyYykKKwkJcmMg PSBhdGFfYnVzX3Byb2JlKGFwKTsKKworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGF0YV9zYXNfcG9ydF9pbml0KTsKKworLyoqCisgKglhdGFfc2FzX3BvcnRfZGVzdHJv eSAtIERlc3Ryb3kgYSBTQVRBIHBvcnQgYWxsb2NhdGVkIGJ5IGF0YV9zYXNfcG9ydF9hbGxv YworICoJQGFwOiBTQVRBIHBvcnQgdG8gZGVzdHJveQorICoKKyAqCUxPQ0tJTkc6CisgKglz cGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICoKKyAqLworCit2b2lkIGF0YV9z YXNfcG9ydF9kZXN0cm95KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJaWYgKGFwKSB7CisJ CWFwLT5vcHMtPnBvcnRfc3RvcChhcCk7CisJCWF0YV9zYXNfcG9ydF9mcmVlKGFwKTsKKwl9 Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2FzX3BvcnRfZGVzdHJveSk7CisKKy8qKgor ICoJYXRhX3Nhc19zbGF2ZV9jb25maWd1cmUgLSBEZWZhdWx0IHNsYXZlX2NvbmZpZyByb3V0 aW5lIGZvciBsaWJhdGEgZGV2aWNlcworICoJQHNkZXY6IFNDU0kgZGV2aWNlIHRvIGNvbmZp Z3VyZQorICoJQGFwOiBBVEEgcG9ydCB0byB3aGljaCBTQ1NJIGRldmljZSBpcyBhdHRhY2hl ZAorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2Nr KQorICoKKyAqCVJFVFVSTlM6CisgKglaZXJvLgorICovCisKK2ludCBhdGFfc2FzX3NsYXZl X2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBhdGFfcG9ydCAq YXApCit7CisJYXRhX3Njc2lfc2Rldl9jb25maWcoc2Rldik7CisJYXRhX3Njc2lfZGV2X2Nv bmZpZyhzZGV2LCBhcC0+ZGV2aWNlKTsKKwlpZiAoYXRhX2Rldl9rbm9iYmxlKGFwKSkKKwkJ YmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIEFUQV9NQVhfU0VD VE9SUyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2FzX3NsYXZl X2NvbmZpZ3VyZSk7CisKKy8qKgorICoJYXRhX3Nhc19xdWV1ZWNtZCAtIElzc3VlIFNDU0kg Y2RiIHRvIGxpYmF0YS1tYW5hZ2VkIGRldmljZQorICoJQGNtZDogU0NTSSBjb21tYW5kIHRv IGJlIHNlbnQKKyAqCUBkb25lOiBDb21wbGV0aW9uIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBj b21tYW5kIGlzIGNvbXBsZXRlCisgKglAYXA6CUFUQSBwb3J0IHRvIHdoaWNoIHRoZSBjb21t YW5kIGlzIGJlaW5nIHNlbnQKKyAqCisgKglMT0NLSU5HOgorICoJc3Bpbl9sb2NrX2lycXNh dmUoaG9zdF9zZXQgbG9jaykKKyAqCisgKglSRVRVUk5TOgorICoJWmVyby4KKyAqLworCitp bnQgYXRhX3Nhc19xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25l KShzdHJ1Y3Qgc2NzaV9jbW5kICopLAorCQkgICAgIHN0cnVjdCBhdGFfcG9ydCAqYXApCit7 CisJaWYgKHVubGlrZWx5KCFhdGFfZGV2X3ByZXNlbnQoYXAtPmRldmljZSkpKSB7CisJCWNt ZC0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KTsKKwkJZG9uZShjbWQpOworCQly ZXR1cm4gMDsKKwl9CisKKwlpZiAoY21kLT5jbWRfbGVuID4gYXAtPmNkYl9sZW4pIHsKKwkJ Y21kLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKKwkJZG9uZShjbWQpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlfX2F0YV9zY3NpX3F1ZXVlY21kKGNtZCwgZG9uZSwgYXAsIGFwLT5k ZXZpY2UpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Nhc19xdWV1 ZWNtZCk7CmRpZmYgLXB1TiBkcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuY35saWJhdGFfc2Fz IGRyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCi0tLSBsaW51eC0yLjYvZHJpdmVycy9zY3Np L2xpYmF0YS1jb3JlLmN+bGliYXRhX3NhcwkyMDA1LTA5LTI2IDE0OjIzOjAxLjAwMDAwMDAw MCAtMDUwMAorKysgbGludXgtMi42LWJqa2luZzEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3Jl LmMJMjAwNS0wOS0yNiAxNDoyMzowMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTExMDYsNiArMTEw NiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXRhX2R1bXBfaWQoc3RydWN0IGF0CiAJCWRl di0+aWRbOTNdKTsKIH0KIAorc3RhdGljIHZvaWQgYXRhX3NldF9jZGJfbGVuKHN0cnVjdCBh dGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBjZGJfbGVuKQoreworCWFwLT5jZGJfbGVuID0g Y2RiX2xlbjsKKwlpZiAoYXAtPmhvc3QpCisJCWFwLT5ob3N0LT5tYXhfY21kX2xlbiA9IGNk Yl9sZW47Cit9CisKK3N0YXRpYyB2b2lkIGF0YV9zZXRfbWF4X3NlY3RvcnMoc3RydWN0IGF0 YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IG1heF9zZWN0b3JzKQoreworCWlmIChhcC0+aG9z dCkgeworCQlhcC0+aG9zdC0+bWF4X3NlY3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7CisJCWFw LT5ob3N0LT5ob3N0dC0+bWF4X3NlY3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7CisJfQorfQor CiAvKioKICAqCWF0YV9kZXZfaWRlbnRpZnkgLSBvYnRhaW4gSURFTlRJRlkgeCBERVZJQ0Ug cGFnZQogICoJQGFwOiBwb3J0IG9uIHdoaWNoIGRldmljZSB3ZSB3aXNoIHRvIHByb2JlIHJl c2lkZXMKQEAgLTEyNjksNyArMTI4NCw3IEBAIHJldHJ5OgogCQkJZGV2LT5uX3NlY3RvcnMg PSBhdGFfaWRfdTMyKGRldi0+aWQsIDYwKTsKIAkJfQogCi0JCWFwLT5ob3N0LT5tYXhfY21k X2xlbiA9IDE2OworCQlhdGFfc2V0X2NkYl9sZW4oYXAsIDE2KTsKIAogCQkvKiBwcmludCBk ZXZpY2UgaW5mbyB0byBkbWVzZyAqLwogCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogZGV2 ICV1IEFUQSwgbWF4ICVzLCAlTHUgc2VjdG9yczolc1xuIiwKQEAgLTEyODksOCArMTMwNCw4 IEBAIHJldHJ5OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhJXU6IHVuc3VwcG9ydGVk IENEQiBsZW5cbiIsIGFwLT5pZCk7CiAJCQlnb3RvIGVycl9vdXRfbm9zdXA7CiAJCX0KLQkJ YXAtPmNkYl9sZW4gPSAodW5zaWduZWQgaW50KSByYzsKLQkJYXAtPmhvc3QtPm1heF9jbWRf bGVuID0gKHVuc2lnbmVkIGNoYXIpIGFwLT5jZGJfbGVuOworCisJCWF0YV9zZXRfY2RiX2xl bihhcCwgcmMpOwogCiAJCS8qIHByaW50IGRldmljZSBpbmZvIHRvIGRtZXNnICovCiAJCXBy aW50ayhLRVJOX0lORk8gImF0YSV1OiBkZXYgJXUgQVRBUEksIG1heCAlc1xuIiwKQEAgLTEz MDksMTIgKzEzMjQsNiBAQCBlcnJfb3V0OgogCURQUklOVEsoIkVYSVQsIGVyclxuIik7CiB9 CiAKLQotc3RhdGljIGlubGluZSB1OCBhdGFfZGV2X2tub2JibGUoc3RydWN0IGF0YV9wb3J0 ICphcCkKLXsKLQlyZXR1cm4gKChhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkgJiYgKCFhdGFf aWRfaXNfc2F0YShhcC0+ZGV2aWNlLT5pZCkpKTsKLX0KLQogLyoqCiAgKiAJYXRhX2Rldl9j b25maWcgLSBSdW4gZGV2aWNlIHNwZWNpZmljIGhhbmRsZXJzIGFuZCBjaGVjayBmb3IKICAq IAkJCSBTQVRBLT5QQVRBIGJyaWRnZXMKQEAgLTEzMzEsOCArMTM0MCw3IEBAIHZvaWQgYXRh X2Rldl9jb25maWcoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJcHJpbnRrKEtFUk5fSU5GTyAi YXRhJXUoJXUpOiBhcHBseWluZyBicmlkZ2UgbGltaXRzXG4iLAogCQkJYXAtPmlkLCBhcC0+ ZGV2aWNlLT5kZXZubyk7CiAJCWFwLT51ZG1hX21hc2sgJj0gQVRBX1VETUE1OwotCQlhcC0+ aG9zdC0+bWF4X3NlY3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7Ci0JCWFwLT5ob3N0LT5ob3N0 dC0+bWF4X3NlY3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7CisJCWF0YV9zZXRfbWF4X3NlY3Rv cnMoYXAsIEFUQV9NQVhfU0VDVE9SUyk7CiAJCWFwLT5kZXZpY2UtPmZsYWdzIHw9IEFUQV9E RkxBR19MT0NLX1NFQ1RPUlM7CiAJfQogCkBAIC0xMzU1LDcgKzEzNjMsNyBAQCB2b2lkIGF0 YV9kZXZfY29uZmlnKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAgKglaZXJvIG9uIHN1Y2Nlc3Ms IG5vbi16ZXJvIG9uIGVycm9yLgogICovCiAKLXN0YXRpYyBpbnQgYXRhX2J1c19wcm9iZShz dHJ1Y3QgYXRhX3BvcnQgKmFwKQoraW50IGF0YV9idXNfcHJvYmUoc3RydWN0IGF0YV9wb3J0 ICphcCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgZm91bmQgPSAwOwogCmRpZmYgLXB1TiBkcml2 ZXJzL3Njc2kvbGliYXRhLmh+bGliYXRhX3NhcyBkcml2ZXJzL3Njc2kvbGliYXRhLmgKLS0t IGxpbnV4LTIuNi9kcml2ZXJzL3Njc2kvbGliYXRhLmh+bGliYXRhX3NhcwkyMDA1LTA5LTI2 IDE0OjIzOjAxLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LWJqa2luZzEvZHJpdmVy cy9zY3NpL2xpYmF0YS5oCTIwMDUtMDktMjYgMTQ6MjM6MDEuMDAwMDAwMDAwIC0wNTAwCkBA IC03OSw2ICs3OSw4IEBAIGV4dGVybiB2b2lkIGF0YV9zY3NpX2JhZGNtZChzdHJ1Y3Qgc2Nz aV8KIGV4dGVybiB2b2lkIGF0YV9zY3NpX3JidWZfZmlsbChzdHJ1Y3QgYXRhX3Njc2lfYXJn cyAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAoKmFjdG9y KSAoc3RydWN0IGF0YV9zY3NpX2FyZ3MgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdTggKnJidWYsIHVuc2lnbmVkIGludCBidWZsZW4pKTsK K2V4dGVybiBpbnQgYXRhX2J1c19wcm9iZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVy biBpbnQgYXRhX3Nhc19wb3J0X2luaXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKIHN0YXRp YyBpbmxpbmUgdm9pZCBhdGFfYmFkX3Njc2lvcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZv aWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogewpAQCAtOTAsNCArOTIsOSBAQCBz dGF0aWMgaW5saW5lIHZvaWQgYXRhX2JhZF9jZGIoc3RydWN0IHNjCiAJYXRhX3Njc2lfYmFk Y21kKGNtZCwgZG9uZSwgMHgyNCwgMHgwMCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggYXRh X2Rldl9rbm9iYmxlKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuICgoYXAtPmNi bCA9PSBBVEFfQ0JMX1NBVEEpICYmICghYXRhX2lkX2lzX3NhdGEoYXAtPmRldmljZS0+aWQp KSk7Cit9CisKICNlbmRpZiAvKiBfX0xJQkFUQV9IX18gKi8KZGlmZiAtcHVOIGluY2x1ZGUv bGludXgvbGliYXRhLmh+bGliYXRhX3NhcyBpbmNsdWRlL2xpbnV4L2xpYmF0YS5oCi0tLSBs aW51eC0yLjYvaW5jbHVkZS9saW51eC9saWJhdGEuaH5saWJhdGFfc2FzCTIwMDUtMDktMjYg MTQ6MjM6MDEuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYtYmpraW5nMS9pbmNsdWRl L2xpbnV4L2xpYmF0YS5oCTIwMDUtMDktMjYgMTQ6MjM6MDEuMDAwMDAwMDAwIC0wNTAwCkBA IC00MDAsNiArNDAwLDE0IEBAIGV4dGVybiBpbnQgYXRhX3Njc2lfaW9jdGwoc3RydWN0IHNj c2lfZGUKIGV4dGVybiBpbnQgYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAq Y21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CiBleHRlcm4gaW50IGF0 YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIGludCBhdGFf c2NzaV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOworZXh0ZXJuIHZvaWQgYXRh X3Nhc19wb3J0X2Rlc3Ryb3koc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gc3RydWN0 IGF0YV9wb3J0ICphdGFfc2FzX3BvcnRfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2 LAorCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgc3RydWN0IGF0YV9w b3J0X2luZm8gKnBvcnRfaW5mbyk7CitleHRlcm4gaW50IGF0YV9zYXNfcG9ydF9pbml0KHN0 cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIGludCBhdGFfc2FzX3NsYXZlX2NvbmZpZ3Vy ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0 ZXJuIGludCBhdGFfc2FzX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAo KmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCisJCQkgICAgc3RydWN0IGF0YV9wb3J0ICph cCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0 ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAvKgogICogRGVmYXVsdCBkcml2 ZXIgb3BzIGltcGxlbWVudGF0aW9ucwpfCg== --------------040200080105050306000602--