From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751260AbWADOBe (ORCPT ); Wed, 4 Jan 2006 09:01:34 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751259AbWADOBe (ORCPT ); Wed, 4 Jan 2006 09:01:34 -0500 Received: from [81.2.110.250] ([81.2.110.250]:43467 "EHLO lxorguk.ukuu.org.uk") by vger.kernel.org with ESMTP id S1750817AbWADOBd (ORCPT ); Wed, 4 Jan 2006 09:01:33 -0500 Subject: Re: [git patches] 2.6.x libata updates From: Alan Cox To: Jeff Garzik Cc: Bartlomiej Zolnierkiewicz , Andrew Morton , Linus Torvalds , linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <43BAB7D4.4050204@pobox.com> References: <20060103164319.GA402@havoc.gtf.org> <58cb370e0601030851w62fc917bibe0fd5069b2f3e44@mail.gmail.com> <1136309555.22598.10.camel@localhost.localdomain> <43BAB7D4.4050204@pobox.com> Content-Type: multipart/mixed; boundary="=-Ua7I4bsHRkjFyPqcbYrp" Date: Wed, 04 Jan 2006 14:02:45 +0000 Message-Id: <1136383369.22598.104.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.2.3 (2.2.3-2.fc4) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --=-Ua7I4bsHRkjFyPqcbYrp Content-Type: text/plain Content-Transfer-Encoding: 7bit On Maw, 2006-01-03 at 12:43 -0500, Jeff Garzik wrote: > Not really. If there's no support in mainline, I'm ok with pushing them > upstream... provided that they have been tested and verified to work on > at least one machine? :) Tested with real hardware and Debian (not enough RAM on MPIIX boxes for Fedora 8)). The driver mostly duplicates some core code because the MPIIX isn't quite a PCI IDE controller in the modern sense. That could be changed to some flags (ALWAYS_LEGACY and DONT_DISABLE) for the core PCI code but I agree with Bartlomiej sentiment from some time ago that it is better not to clutter the core libata code with historical wonders. Would be slightly cleaner if the core code set adev->pio_mode to PIO0 before doing the identify. Thats something that perhaps should be handled more specifically by the ATA core since we've no idea how the BIOS left PATA/SATA controller modes before handing off to us ? Suggested config entry: config SCSI_ATA_MPIIX tristate "Intel MPIIX PATA support" depends on SCSI_SATA && PCI && X86 && !X86_64 help This option enables support for the Intel MPIIX laptop IDE controller found on some older pentium class laptops. If unsure, say N. --=-Ua7I4bsHRkjFyPqcbYrp Content-Description: Driver for MPIIX chipsets Content-Disposition: inline; filename=a1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 LyoNCiAqIHBhdGFfbXBpaXguYyAJLSBJbnRlbCBNUElJWCBQQVRBIGZvciBuZXcgQVRBIGxheWVy DQogKgkJCSAgKEMpIDIwMDUtMjAwNiBSZWQgSGF0IEluYw0KICoJCQkgIEFsYW4gQ294IDxhbGFu QHJlZGhhdC5jb20+DQogKg0KICogVGhlIE1QSUlYIGlzIGRpZmZlcmVudCBlbm91Z2ggdG8gdGhl IFBJSVg0IGFuZCBmcmllbmRzIHRoYXQgd2UgZ2l2ZSBpdA0KICogYSBzZXBhcmF0ZSBkcml2ZXIu IFRoZSBvbGQgaWRlL3BjaSBjb2RlIGhhbmRsZXMgdGhpcyBieSBqdXN0IG5vdCB0dW5pbmcNCiAq IE1QSUlYIGF0IGFsbC4gDQogKg0KICogVGhlIE1QSUlYIGFsc28gZGlmZmVycyBpbiBhbm90aGVy IGltcG9ydGFudCB3YXkgZnJvbSB0aGUgbWFqb3JpdHkgb2YgUElJWA0KICogZGV2aWNlcy4gVGhl IGNoaXAgaXMgYSBicmlkZ2UgKHBhcmRvbiB0aGUgcHVuKSBiZXR3ZWVuIHRoZSBvbGQgd29ybGQg b2YNCiAqIElTQSBJREUgYW5kIFBDSSBJREUuIEFsdGhvdWdoIHRoZSBBVEEgdGltaW5ncyBhcmUg UENJIGNvbmZpZ3VyZWQgdGhlIGFjdHVhbA0KICogSURFIGNvbnRyb2xsZXIgaXMgbm90IGRlY29k ZWQgaW4gUENJIHNwYWNlIGFuZCB0aGUgY2hpcCBkb2VzIG5vdCBjbGFpbSB0bw0KICogYmUgSURF IGNsYXNzIFBDSS4gVGhpcyByZXF1aXJlcyBzbGlnaHRseSBub24tc3RhbmRhcmQgcHJvYmUgbG9n aWMgY29tcGFyZWQNCiAqIHdpdGggUENJIElERSBhbmQgYWxzbyB0aGF0IHdlIGRvIG5vdCBkaXNh YmxlIHRoZSBkZXZpY2Ugd2hlbiBvdXIgZHJpdmVyIGlzDQogKiB1bmxvYWRlZCAoYXMgaXQgaGFz IG1hbnkgb3RoZXIgZnVuY3Rpb25zKS4NCiAqDQogKiBUaGUgZHJpdmVyIGNvbmNpb3VzbHkga2Vl cHMgdGhpcyBsb2dpYyBpbnRlcm5hbGx5IHRvIGF2b2lkIHB1c2hpbmcgcXVpcmt5DQogKiBQQVRB IGhpc3RvcnkgaW50byB0aGUgY2xlYW4gbGliYXRhIGxheWVyLg0KICoNCiAqIFRoaW5rcGFkIHNw ZWNpZmljIG5vdGU6IElmIHlvdSBib290IGFuIE1QSUlYIHVzaW5nIHRoaW5rcGFkIHdpdGggYSBQ Q01DSUEgDQogKiBoYXJkIGRpc2sgcHJlc2VudCB0aGlzIGRyaXZlciB3aWxsIG5vdCBkZXRlY3Qg aXQuIFRoaXMgaXMgbm90IGEgYnVnLiBJbiB0aGlzDQogKiBjb25maWd1cmF0aW9uIHRoZSBzZWNv bmRhcnkgcG9ydCBvZiB0aGUgTVBJSVggaXMgZGlzYWJsZWQgYW5kIHRoZSBhZGRyZXNzZXMNCiAq IGFyZSBkZWNvZGVkIGJ5IHRoZSBQQ01DSUEgYnJpZGdlIGFuZCB0aGVyZWZvcmUgYXJlIGZvciBh IGdlbmVyaWMgSURFIGRyaXZlcg0KICogdG8gb3BlcmF0ZS4NCiAqLw0KDQojaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQojaW5jbHVkZSA8bGludXgv cGNpLmg+DQojaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5o Pg0KI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQojaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4N CiNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4NCg0KI2RlZmluZSBEUlZfTkFNRSAicGF0YV9tcGlp eCINCiNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMyINCg0KLyoqDQogKgltcGlpeF9waHlfcmVzZXQJ CS0JcHJvYmUgcmVzZXQNCiAqCUBhcDogQVRBIHBvcnQNCiAqDQogKglQZXJmb3JtIHRoZSBBVEEg cHJvYmUgYW5kIGJ1cyByZXNldCBzZXF1ZW5jZSBwbHVzIHNwZWNpZmljIGhhbmRsaW5nDQogKglm b3IgdGhpcyBoYXJkd2FyZS4gVGhlIE1QSUlYIGhhcyB0aGUgZW5hYmxlIGJpdHMgaW4gYSBkaWZm ZXJlbnQgcGxhY2UNCiAqCXRvIFBJSVg0IGFuZCBmcmllbmRzLiBBcyBhIHB1cmUgUElPIGRldmlj ZSBpdCBoYXMgbm8gY2FibGUgZGV0ZWN0DQogKi8NCg0Kc3RhdGljIHZvaWQgbXBpaXhfcGh5X3Jl c2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApDQp7DQoJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19w Y2lfZGV2KGFwLT5ob3N0X3NldC0+ZGV2KTsNCglzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRz IG1waWl4X2VuYWJsZV9iaXRzW10gPSB7DQoJCXsgMHg2RCwgMSwgMHg4MCwgMHg4MCB9LA0KCQl7 IDB4NkYsIDEsIDB4ODAsIDB4ODAgfQ0KCX07DQoNCglpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRz KHBkZXYsICZtcGlpeF9lbmFibGVfYml0c1thcC0+aGFyZF9wb3J0X25vXSkpIHsNCgkJYXRhX3Bv cnRfZGlzYWJsZShhcCk7DQoJCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBwb3J0IGRpc2FibGVk LiBpZ25vcmluZy5cbiIsIGFwLT5pZCk7DQoJCXJldHVybjsNCgl9DQoJYXAtPmNibCA9IEFUQV9D QkxfUEFUQTQwOw0KCWF0YV9wb3J0X3Byb2JlKGFwKTsNCglhdGFfYnVzX3Jlc2V0KGFwKTsNCn0N Cg0KLyoqDQogKgltcGlpeF9zZXRfcGlvbW9kZQktCXNldCBpbml0aWFsIFBJTyBtb2RlIGRhdGEN CiAqCUBhcDogQVRBIGludGVyZmFjZQ0KICoJQGFkZXY6IEFUQSBkZXZpY2UNCiAqDQogKglDYWxs ZWQgdG8gZG8gdGhlIFBJTyBtb2RlIHNldHVwLiBUaGUgTVBJSVggYWxsb3dzIHVzIHRvIHByb2dy YW0gdGhlDQogKglJT1JEWSBzYW1wbGUgcG9pbnQgKDItNSBjbG9ja3MpLCByZWNvdmVyeSAxLTQg Y2xvY2tzIGFuZCB3aGV0aGVyDQogKglwcmVmZXRjaGluZyBvciBpb3JkeSBhcmUgdXNlZC4NCiAq DQogKglUaGlzIHdvdWxkIGdldCB2ZXJ5IHVnbHkgYmVjYXVzZSB3ZSBjYW4gb25seSBwcm9ncmFt IHRpbWluZyBmb3Igb25lDQogKglkZXZpY2UgYXQgYSB0aW1lLCB0aGUgb3RoZXIgZ2V0cyBQSU8w LiBGb3J0dW5hdGVseSBsaWJhdGEgY2FsbHMgDQogKglvdXIgcWNfaXNzdWVfcHJvdCBjb21tYW5k IGJlZm9yZSBhIGNvbW1hbmQgaXMgaXNzdWVkIHNvIHdlIGNhbg0KICoJZmxpcCB0aGUgdGltaW5n cyBiYWNrIGFuZCBmb3J0aCB0byByZWR1Y2UgdGhlIHBhaW4uDQogKi8NCg0Kc3RhdGljIHZvaWQg bXBpaXhfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2Ug KmFkZXYpDQp7DQoJaW50IGNvbnRyb2wgPSAwOw0KCWludCBwaW8gPSBhZGV2LT5waW9fbW9kZSAt IFhGRVJfUElPXzA7DQoJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0 X3NldC0+ZGV2KTsNCgl1MTYgaWRldGltOw0KCXN0YXRpYyBjb25zdAkgLyogSVNQICBSVEMgKi8N Cgl1OCB0aW1pbmdzW11bMl0JPSB7IHsgMCwgMCB9LA0KCQkJICAgIHsgMCwgMCB9LA0KCQkJICAg IHsgMSwgMCB9LA0KCQkJICAgIHsgMiwgMSB9LA0KCQkJICAgIHsgMiwgMyB9LCB9Ow0KDQoJcGNp X3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHg2QywgJmlkZXRpbSk7DQoJLyogTWFzayB0aGUgSU9S RFkvVElNRS9QUEUwIGJhbmsgZm9yIHRoaXMgZGV2aWNlICovDQoJaWYgKGFkZXYtPmNsYXNzID09 IEFUQV9ERVZfQVRBKQ0KCQljb250cm9sIHw9IDQ7CS8qIFBQRSBlbmFibGUgZm9yIGRpc2sgKi8N CglpZiAoYXRhX3Bpb19uZWVkX2lvcmR5KGFkZXYpKQ0KCQljb250cm9sIHw9IDI7CS8qIElPUkRZ ICovDQoJaWYgKHBpbyA+IDApDQoJCWNvbnRyb2wgfD0gMTsJLyogVGhpcyBkcml2ZSBpcyBvbiB0 aGUgZmFzdCB0aW1pbmcgYmFuayAqLw0KDQoJLyogTWFzayBvdXQgdGltaW5nIGFuZCBjbGVhciBi b3RoIFRJTUUgYmFuayBzZWxlY3RzICovDQoJaWRldGltICY9IDB4Q0NFRTsNCglpZGV0aW0gJj0g figweDA3ICA8PCAoMiAqIGFkZXYtPmRldm5vKSk7DQoJaWRldGltIHw9IChjb250cm9sIDw8ICgy ICogYWRldi0+ZGV2bm8pKTsNCgkNCglpZGV0aW0gfD0gKHRpbWluZ3NbcGlvXVswXSA8PCAxMikg fCAodGltaW5nc1twaW9dWzFdIDw8IDgpOw0KCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAw eDZDLCBpZGV0aW0pOw0KCQ0KCS8qIFdlIHVzZSBhcC0+cHJpdmF0ZV9kYXRhIGFzIGEgcG9pbnRl ciB0byB0aGUgZGV2aWNlIGN1cnJlbnRseQ0KCSAgIGxvYWRlZCBmb3IgdGltaW5nICovDQoJYXAt PnByaXZhdGVfZGF0YSA9IGFkZXY7DQp9DQoNCi8qKg0KICoJbXBpaXhfcWNfaXNzdWVfcHJvdAkt CWNvbW1hbmQgaXNzdWUNCiAqCUBxYzogY29tbWFuZCBwZW5kaW5nDQogKg0KICoJQ2FsbGVkIHdo ZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAN CiAqCXRoaXMgaW50ZXJmYWNlIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhlIGNvcnJlY3QgQVRBIHRp bWluZ3MgaWYNCiAqCW5lY2Nlc3NhcnkuIE91ciBsb2dpYyBhbHNvIGNsZWFycyBUSU1FMC9USU1F MSBmb3IgdGhlIG90aGVyIGRldmljZSBzbw0KICoJdGhhdCwgZXZlbiBpZiB3ZSBnZXQgdGhpcyB3 cm9uZywgY3ljbGVzIHRvIHRoZSBvdGhlciBkZXZpY2Ugd2lsbA0KICoJYmUgbWFkZSBQSU8wLg0K ICovDQoNCnN0YXRpYyBpbnQgbXBpaXhfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9j bWQgKnFjKQ0Kew0KCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7DQoJc3RydWN0IGF0YV9k ZXZpY2UgKmFkZXYgPSBxYy0+ZGV2Ow0KDQoJLyogSWYgbW9kZXMgaGF2ZSBiZWVuIGNvbmZpZ3Vy ZWQgYW5kIHRoZSBjaGFubmVsIGRhdGEgaXMgbm90IGxvYWRlZA0KCSAgIHRoZW4gbG9hZCBpdC4g V2UgaGF2ZSB0byBjaGVjayBpZiBwaW9fbW9kZSBpcyBzZXQgYXMgdGhlIGNvcmUgY29kZQ0KCSAg IGRvZXMgbm90IHNldCBhZGV2LT5waW9fbW9kZSB0byBYRkVSX1BJT18wIHdoaWxlIHByb2Jpbmcg YXMgd291bGQgYmUNCgkgICBsb2dpY2FsICovDQoJICAgDQoJaWYoYWRldi0+cGlvX21vZGUgJiYg YWRldiAhPSBhcC0+cHJpdmF0ZV9kYXRhKQ0KCQltcGlpeF9zZXRfcGlvbW9kZShhcCwgYWRldik7 DQoJCQ0KCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7DQp9DQoNCnN0YXRpYyBzdHJ1Y3Qg c2NzaV9ob3N0X3RlbXBsYXRlIG1waWl4X3NodCA9IHsNCgkubW9kdWxlCQkJPSBUSElTX01PRFVM RSwNCgkubmFtZQkJCT0gRFJWX05BTUUsDQoJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwNCgku cXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLA0KCS5laF9zdHJhdGVneV9oYW5kbGVy CT0gYXRhX3Njc2lfZXJyb3IsDQoJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLA0KCS50aGlz X2lkCQk9IEFUQV9TSFRfVEhJU19JRCwNCgkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJE LA0KCS5tYXhfc2VjdG9ycwkJPSBBVEFfTUFYX1NFQ1RPUlMsDQoJLmNtZF9wZXJfbHVuCQk9IEFU QV9TSFRfQ01EX1BFUl9MVU4sDQoJLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsDQoJLnVz ZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsDQoJLnByb2NfbmFtZQkJPSBE UlZfTkFNRSwNCgkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksDQoJLnNsYXZlX2Nv bmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywNCgkuYmlvc19wYXJhbQkJPSBhdGFfc3Rk X2Jpb3NfcGFyYW0sDQoJLm9yZGVyZWRfZmx1c2gJCT0gMSwNCn07DQoNCnN0YXRpYyBzdHJ1Y3Qg YXRhX3BvcnRfb3BlcmF0aW9ucyBtcGlpeF9wb3J0X29wcyA9IHsNCgkucG9ydF9kaXNhYmxlCT0g YXRhX3BvcnRfZGlzYWJsZSwNCgkuc2V0X3Bpb21vZGUJPSBtcGlpeF9zZXRfcGlvbW9kZSwNCg0K CS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsDQoJLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwNCgkuY2hl Y2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsDQoJLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVj X2NvbW1hbmQsDQoJLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LA0KDQoJLnBoeV9y ZXNldAk9IG1waWl4X3BoeV9yZXNldCwNCg0KCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLA0KCS5x Y19pc3N1ZQk9IG1waWl4X3FjX2lzc3VlX3Byb3QsDQoJLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190 aW1lb3V0LA0KDQoJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwNCgkuaXJxX2NsZWFyCT0g YXRhX2JtZG1hX2lycV9jbGVhciwNCg0KCS5wb3J0X3N0YXJ0CT0gYXRhX3BvcnRfc3RhcnQsDQoJ LnBvcnRfc3RvcAk9IGF0YV9wb3J0X3N0b3AsDQoJLmhvc3Rfc3RvcAk9IGF0YV9ob3N0X3N0b3AN Cn07DQoNCnN0YXRpYyBpbnQgbXBpaXhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29u c3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQ0Kew0KCS8qIFNpbmdsZSB0aHJlYWRlZCBieSB0 aGUgUENJIHByb2JlIGxvZ2ljICovDQoJc3RhdGljIHN0cnVjdCBhdGFfcHJvYmVfZW50IHByb2Jl WzJdOw0KCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOw0KCXUxNiBpZGV0aW07DQoJaW50IHBv cnRzID0gMDsNCgkNCglpZiAoIXByaW50ZWRfdmVyc2lvbisrKQ0KCQlkZXZfcHJpbnRrKEtFUk5f REVCVUcsICZkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsNCgkJDQoJLyog TVBJSVggaGFzIG1hbnkgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSB0dXJuZWQgb24gb3Igb2ZmIGFj Y29yZGluZw0KCSAgIHRvIG90aGVyIGRldmljZXMgcHJlc2VudC4gTWFrZSBzdXJlIElERSBpcyBl bmFibGVkIGJlZm9yZSB3ZSB0cnkNCgkgICBhbmQgdXNlIGl0ICovDQoJICAgDQoJcGNpX3JlYWRf Y29uZmlnX3dvcmQoZGV2LCAweDZDLCAmaWRldGltKTsNCglpZighKGlkZXRpbSAmIDB4ODAwMCkp DQoJCXJldHVybiAtRU5PREVWOw0KDQoJLyogV2UgZG8gb3VyIG93biBwbHVtYmluZyB0byBhdm9p ZCBsZWFraW5nIHNwZWNpYWwgY2FzZXMgZm9yIHdoYWNrbw0KCSAgIGFuY2llbnQgaGFyZHdhcmUg aW50byB0aGUgY29yZSBjb2RlLiBUaGVyZSBhcmUgdHdvIGlzc3VlcyB0byANCgkgICB3b3JyeSBh Ym91dC4gICMxIFRoZSBjaGlwIGlzIGEgYnJpZGdlIHNvIGlmIGluIGxlZ2FjeSBtb2RlIGFuZA0K CSAgIHdpdGhvdXQgQkFScyBzZXQgZm9vbHMgdGhlIHNldHVwLiAgIzIgSWYgeW91IHBjaV9kaXNh YmxlX2RldmljZQ0KCSAgIHRoZSBNUElJWCB5b3VyIGJveCBnb2VzIGNhc3RvcnMgdXAgKi8NCg0K CUlOSVRfTElTVF9IRUFEKCZwcm9iZVswXS5ub2RlKTsNCglwcm9iZVswXS5kZXYgPSBwY2lfZGV2 X3RvX2RldihkZXYpOw0KCXByb2JlWzBdLnBvcnRfb3BzID0gJm1waWl4X3BvcnRfb3BzOw0KCXBy b2JlWzBdLnNodCA9ICZtcGlpeF9zaHQ7DQoJcHJvYmVbMF0ucGlvX21hc2sgPSAweDFGOw0KCXBy b2JlWzBdLmlycSA9IDE0Ow0KCXByb2JlWzBdLmlycV9mbGFncyA9IFNBX1NISVJROw0KCXByb2Jl WzBdLmhvc3RfZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTOw0KCXByb2JlWzBdLmxlZ2FjeV9t b2RlID0gMTsNCglwcm9iZVswXS5oYXJkX3BvcnRfbm8gPSAwOw0KCXByb2JlWzBdLm5fcG9ydHMg PSAxOw0KCXByb2JlWzBdLnBvcnRbMF0uY21kX2FkZHIgPSAweDFGMDsNCglwcm9iZVswXS5wb3J0 WzBdLmN0bF9hZGRyID0gMHgzRjY7DQoJcHJvYmVbMF0ucG9ydFswXS5hbHRzdGF0dXNfYWRkciA9 IDB4M0Y2Ow0KCQ0KCS8qIFRoZSBzZWNvbmRhcnkgbHVya3MgYXQgZGlmZmVyZW50IGFkZHJlc3Nl cyBidXQgaXMgb3RoZXJ3aXNlDQoJICAgdGhlIHNhbWUgYmVhc3RpZSAqLw0KCSAgIA0KCUlOSVRf TElTVF9IRUFEKCZwcm9iZVsxXS5ub2RlKTsNCglwcm9iZVsxXSA9IHByb2JlWzBdOw0KCXByb2Jl WzFdLmlycSA9IDE1Ow0KCXByb2JlWzFdLmhhcmRfcG9ydF9ubyA9IDE7DQoJcHJvYmVbMV0ucG9y dFswXS5jbWRfYWRkciA9IDB4MTcwOw0KCXByb2JlWzFdLnBvcnRbMF0uY3RsX2FkZHIgPSAweDM3 NjsNCglwcm9iZVsxXS5wb3J0WzBdLmFsdHN0YXR1c19hZGRyID0gMHgzNzY7DQoJDQoJLyogTGV0 IGxpYmF0YSBmaWxsIGluIHRoZSBwb3J0IGRldGFpbHMgKi8NCglhdGFfc3RkX3BvcnRzKCZwcm9i ZVswXS5wb3J0WzBdKTsNCglhdGFfc3RkX3BvcnRzKCZwcm9iZVsxXS5wb3J0WzBdKTsNCgkNCgkv KiBOb3cgYWRkIHRoZSBwb3J0cyB0aGF0IGFyZSBhY3RpdmUgKi8NCglwb3J0cyArPSBhdGFfZGV2 aWNlX2FkZCgmcHJvYmVbMF0pOw0KCXBvcnRzICs9IGF0YV9kZXZpY2VfYWRkKCZwcm9iZVsxXSk7 DQoJaWYocG9ydHMpDQoJCXJldHVybiAwOw0KCXJldHVybiAtRU5PREVWOw0KfQ0KDQovKioNCiAq CW1waWl4X3JlbW92ZV9vbmUJLQlkZXZpY2UgdW5sb2FkDQogKglAcGRldjogUENJIGRldmljZSBi ZWluZyByZW1vdmVkDQogKg0KICoJSGFuZGxlIGFuIHVucGx1Zy91bmxvYWQgZXZlbnQgZm9yIGEg UENJIGRldmljZS4gVW5sb2FkIHRoZQ0KICoJUENJIGRyaXZlciBidXQgZG8gbm90IHVzZSB0aGUg ZGVmYXVsdCBoYW5kbGVyIGFzIHdlICpNVVNUIE5PVCoNCiAqCWRpc2FibGUgdGhlIGRldmljZSBh cyBpdCBoYXMgb3RoZXIgZnVuY3Rpb25zLg0KICovDQogDQpzdGF0aWMgdm9pZCBfX2RldmV4aXQg bXBpaXhfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikNCnsNCglzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBwY2lfZGV2X3RvX2RldihwZGV2KTsNCglzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0 X3NldCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KDQoJYXRhX2hvc3Rfc2V0X3JlbW92ZShob3N0 X3NldCk7DQoJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7DQp9DQoNCg0KDQpzdGF0aWMgY29u c3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXBpaXhbXSA9IHsNCgl7IFBDSV9WRU5ET1JfSURfSU5U RUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFNWCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwg MCwgMCwgMCB9LA0KCXsgMCwgfSwNCn07DQoNCnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtcGlp eF9wY2lfZHJpdmVyID0gew0KICAgICAgICAubmFtZSAJCT0gRFJWX05BTUUsDQoJLmlkX3RhYmxl CT0gbXBpaXgsDQoJLnByb2JlIAkJPSBtcGlpeF9pbml0X29uZSwNCgkucmVtb3ZlCQk9IG1waWl4 X3JlbW92ZV9vbmUNCn07DQoNCnN0YXRpYyBpbnQgX19pbml0IG1waWl4X2luaXQodm9pZCkNCnsN CglyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZtcGlpeF9wY2lfZHJpdmVyKTsNCn0NCg0KDQpzdGF0 aWMgdm9pZCBfX2V4aXQgbXBpaXhfZXhpdCh2b2lkKQ0Kew0KCXBjaV91bnJlZ2lzdGVyX2RyaXZl cigmbXBpaXhfcGNpX2RyaXZlcik7DQp9DQoNCg0KTU9EVUxFX0FVVEhPUigiQWxhbiBDb3giKTsN Ck1PRFVMRV9ERVNDUklQVElPTigibG93LWxldmVsIGRyaXZlciBmb3IgSW50ZWwgTVBJSVgiKTsN Ck1PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCk1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtcGlpeCk7 DQpNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7DQoNCm1vZHVsZV9pbml0KG1waWl4X2luaXQp Ow0KbW9kdWxlX2V4aXQobXBpaXhfZXhpdCk7DQo= --=-Ua7I4bsHRkjFyPqcbYrp--