From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outmail1.freedom2surf.net ([194.106.33.237] helo=outmail.freedom2surf.net) by canuck.infradead.org with esmtp (Exim 4.33 #1 (Red Hat Linux)) id 1BzOsX-0004Vy-7e for linux-mtd@lists.infradead.org; Mon, 23 Aug 2004 20:09:34 -0400 Date: Tue, 24 Aug 2004 01:09:27 +0100 From: Ian Molton To: linux-mtd@lists.infradead.org Message-Id: <20040824010927.04e6ccb3.spyro@f2s.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Tue__24_Aug_2004_01_09_27_+0100_tX+UvdRdnn08b4t3" Cc: tglx@linutronix.de Subject: New driver List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --Multipart=_Tue__24_Aug_2004_01_09_27_+0100_tX+UvdRdnn08b4t3 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. Here is my first run at the TC6393XB NAND/Smartmedia controller driver. Currently the chip init is nonexistant - its done by wince on my board and I have no way of booting without wince on it yet, so I have no plan to implement it until I can test it (this will be soon, probably). Hardware ECC seems to be broken. the code is present but disabled, for educational purposes. this driver requires the read_id override patch (which I will post shortly). --Multipart=_Tue__24_Aug_2004_01_09_27_+0100_tX+UvdRdnn08b4t3 Content-Type: application/octet-stream; name="nand_tmio.c" Content-Disposition: attachment; filename="nand_tmio.c" Content-Transfer-Encoding: base64 LyoKICogIGRyaXZlcnMvbXRkL25hbmQvbmFuZF90bWlvLmMKICoKICogKGMpIElhbiBNb2x0b24g YW5kIFNlYmFzdGlhbiBDYXJsaWVyCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKgogKiBUaGlzIGlzIGEg ZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIHRoZSBUTUlPCiAqIChUb3No aWJhIE11bHRpbyBJTyBDb250cm9sbGVyKSBhcyBmb3VuZCBpbiB0aGUgdG9zaGliYSBlNzUwIGFu ZCBlODAwIFBEQXMuCiAqCiAqIFRoaXMgRHJpdmVyIHNob3VsZCBzdXBwb3J0IHRoZSBUQzYzOTNY QiBTb0MgJ3NtYXJ0bWVkaWEnIGNvbnRyb2xsZXIuCiAqCiAqIFRoaXMgaXMgYWxwaGEgcXVhbGl0 eS4gVGhpcyBjaGlwIGRpZCBub3QgbWVzaCB3ZWxsIHdpdGggdGhlIGxpbnV4CiAqIE5BTkQgZmxh c2ggYmFzZSBjb2RlIGFzIGl0IGhhcyBzb21lIGZ1bm55IHJlcXVpcmVtZW50cyBhcyB0byB3aGVu IHlvdSBjYW4KICogd3JpdGUgYnl0ZXMgdG8gdGhlIGRhdGEgcmVnaXN0ZXIgKGVnLiB5b3UgbmVl ZCB0byB3cml0ZSB0aGUgYWRkcmVzcyBhcyBhCiAqIDMyIGJpdCB3b3JkKS4KICoKICogSSBoYXZl IHVzZWQgdGhlIGRlZmF1bHQgbXRkIE5BTkQgcmVhZCBieXRlIGFuZCB3cml0ZSBieXRlIGZ1bmN0 aW9ucyBzaW5jZQogKiB0aGUgZmV3IHBsYWNlcyB0aGV5IGFyZSB1c2VkIHNlZW0gdG8gYmUgT0sg d2l0aCB0aGlzLiBUaGUgZXhjZXB0aW9uIHdhcyB0aGUKICogcmVhZF9pZCBjb2RlLCB3aGljaCBo YWQgdG8gYmUgc3BsaXQgb2ZmIGFzIGFuIG92dmVyaWRlYWJsZSBmdW5jdGlvbiB0aGFua3MKICog dG8gaGlzIGNoaXAgcmVxdWlyaW5nIGEgd29yZCAoMzJiaXQpIHJlYWQsIG5vdCB0d28gYnl0ZSBh Y2Nlc3NlcywgZG9oISkKICoKICogVGhpcyBjaGlwIGhhcyBhIGhhcmQgRUNDIHVuaXQsIGJ1dCB0 aGlzIGFwcGVhcnMgdG8gYmUgYnVnZ3ksIGF0IGxlYXN0IGZvcgogKiByZWFkcy4gVGhpcyBtYXkg YmUgc29sdmVkIGJ5IHJlYWRpbmcgaGFsZndvcmRzLCBidXQgdGhhdHMgYSBodW5jaCBJIGhhdmVu dAogKiB0cmllZCB5ZXQuCiAqCiAqIE9oLCBhbHNvIC0gdGhpcyBjb2RlIGFzc3VtZXMgYWxsIGJ1 ZmZlcnMgYXJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcyAoMSB3b3JkKQogKiBsb25nIChkdWUgdG8g dGhlIHVzZSBvZiB3b3JkIHJlYWQvd3JpdGVzIGluIHtyZWFkLHdyaXRlLHZlcmlmeX1fYnVmKS4K ICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSWFuIE1vbHRv biA8c3B5cm9AZjJzLmNvbT4KICogIFJldmlzaW9uIGhpc3Rvcnk6CiAqICAgIDIzLzA4LzIwMDQg ICAgIEZpcnN0IHdvcmtpbmcgdmVyc2lvbgogKiAKICogIFRPIERPIGxpc3QKICogICAgRG8gZnVs bCBjaGlwIGluaXRpYWxpc2F0aW9uIChyYXRoZXIgdGhhbiByZWx5IG9uIHdpbkNFKQogKiAgICBG aXggaHdFQ0MgaWYgcG9zcy4KICogICAgTWFrZSB1c2Ugb2YgY2hpcCAncmVhZHknIGludGVycnVw dC4KICoKICovCgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5j bHVkZSA8bGludXgvbXRkL210ZC5oPgojaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KI2luY2x1 ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgojaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMu aD4KI2luY2x1ZGUgPGFzbS9pby5oPgojaW5jbHVkZSA8YXNtL3NpemVzLmg+CgovKgogKiBNVEQg c3RydWN0dXJlIGZvciBUTUlPIG5hbmQgY29udHJvbGxlcgogKi8Kc3RhdGljIHN0cnVjdCBtdGRf aW5mbyAqdG1pb19tdGQgPSBOVUxMOwoKI2RlZmluZSBUTUlPX01PREVfUkVHICAgICAgMHgwNCAg Ly9vZmZzZXQgZnJvbSBkYXRhIHJlZwoKI2RlZmluZSBUTUlPX01PREVfQ0xFICAgICAgMHgwMQoj ZGVmaW5lIFRNSU9fTU9ERV9BTEUgICAgICAweDAyCiNkZWZpbmUgVE1JT19NT0RFX1BDTlRMICAg IDB4MDQgICAvLyBQb3dlciBjb250cm9sCiNkZWZpbmUgVE1JT19NT0RFX0xFRCAgICAgIDB4MDgg ICAvLyBPcHRpb25hbCBMRUQgY29udHJvbAojZGVmaW5lIFRNSU9fTU9ERV9DRSAgICAgICAweDEw CiNkZWZpbmUgVE1JT19NT0RFX0VDQzAgICAgIDB4MjAgICAvLyBFQ0MgY29udHJvbCByZWdzLgoj ZGVmaW5lIFRNSU9fTU9ERV9FQ0MxICAgICAweDQwICAgLy8gLi4uCiNkZWZpbmUgVE1JT19NT0RF X1dQICAgICAgIDB4ODAKCiNkZWZpbmUgVE1JT19TVEFUVVNfUkVHICAgIDB4MDUgIC8vIG9mZnNl dCBmcm9tIGRhdGEgcmVnCgojZGVmaW5lIFRNSU9fU1RBVFVTX1dQRCAgICAweDAxICAgIC8vIFdy aXRlIHByb3RlY3Qgc2VhbCBkZXRlY3RlZAojZGVmaW5lIFRNSU9fU1RBVFVTX0VKUkVRICAweDAy ICAgIC8vIENhcmQgRWplY3QgUmVxdWVzdAojZGVmaW5lIFRNSU9fU1RBVFVTX0NFTkIgICAweDA0 ICAgIC8vIENhcmQgRW5hYmxlCiNkZWZpbmUgVE1JT19TVEFUVVNfU1RDSEcgIDB4MDggICAgLy8g Q2FyZCBTdGF0dXMgQ2hhbmdlCiNkZWZpbmUgVE1JT19TVEFUVVNfUFdPTiAgIDB4MTAgICAgLy8g U21hcnRNZWRpYSBQb3dlciBPbgojZGVmaW5lIFRNSU9fU1RBVFVTX01PREVMICAweDQwICAgIC8v IFNtYXJ0bWVkaWEgdm9sdGFnZSAoMSA9IDUuMCAwID0gMy4zVikKI2RlZmluZSBUTUlPX1NUQVRV U19CVVNZICAgMHg4MCAgICAvLyBIaWdoIHdoZW4gYnVzeQoKLyogCiAqCWhhcmR3YXJlIHNwZWNp ZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCiAqLwoKc3RhdGljIHZvaWQgdG1pb19yZWFkX2lk KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgKm1hZl9pZCwgaW50ICpkZXZfaWQpIHsKCXN0cnVj dCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Cgl1bnNpZ25lZCBsb25nIGlkOwoKCS8qIFNl bmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCgl0aGlzLT5jbWRmdW5jICht dGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwoKCWlkID0gcmVhZGwodGhpcy0+SU9fQURE Ul9SKTsKCSptYWZfaWQgPSBpZCAmIDB4ZmY7CgkqZGV2X2lkID0gKGlkID4+IDgpICYgMHhmZjsK fQoKc3RhdGljIHZvaWQgdG1pb19yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFy ICpidWYsIGludCBsZW4pCnsKCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Cgl1 MzIgKnAgPSAodTMyKilidWY7CglpbnQgaTsKCglpZihsZW4gJiAweDMpCgkJQlVHKCk7CgoJbGVu ID4+PSAyOwoKCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspCgkJcFtpXSA9IHJlYWRsKHRoaXMtPklP X0FERFJfUik7Cn0KCnN0YXRpYyB2b2lkIHRtaW9fd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAq bXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKewoJc3RydWN0IG5hbmRfY2hpcCAqdGhp cyA9IG10ZC0+cHJpdjsKCXUzMiAqcCA9ICh1MzIqKWJ1ZjsKCWludCBpOwoKCWlmKGxlbiAmIDB4 MykKCQlCVUcoKTsKCglsZW4gPj49IDI7CgoJZm9yIChpPTA7IGkgPCBsZW47IGkrKykKCQl3cml0 ZWwocFtpXSwgdGhpcy0+SU9fQUREUl9XKTsKfQoKc3RhdGljIGludCB0bWlvX3ZlcmlmeV9idWYo c3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQp7CglzdHJ1 Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwoJdTMyICpwID0gKHUzMiopYnVmOwoJaW50 IGk7CgoJaWYobGVuICYgMHgzKQoJCUJVRygpOwoKCWxlbiA+Pj0gMjsKCglmb3IgKGk9MDsgaTxs ZW47IGkrKykKCQlpZiAocFtpXSAhPSByZWFkbCh0aGlzLT5JT19BRERSX1IpKQoJCQlyZXR1cm4g LUVGQVVMVDsKCglyZXR1cm4gMDsKfQoKc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RhdDsKI2lmIDAK Ly8gSEFSRFdBUkUgRUNDIERPRVNOVCBXT1JLIFlFVCAoaGFyZHdhcmUgYnVnPykKc3RhdGljIHZv aWQgdG1pb19lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQp7CiAg ICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKCS8vIFJlc2V0IEVDQwoJ d3JpdGViKHN0YXQgfCAweDYwLCB0aGlzLT5JT19BRERSX1cgKyBUTUlPX01PREVfUkVHKTsKCXJl YWRiKHRoaXMtPklPX0FERFJfUik7CgkvLyBFbmFibGUgRUNDCgl3cml0ZWIoc3RhdCB8IDB4MjAs IHRoaXMtPklPX0FERFJfVyArIFRNSU9fTU9ERV9SRUcpOwp9CgpzdGF0aWMgaW50IHRtaW9fY2Fs Y3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVjY19jb2RlKQp7CiAg ICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKCXVuc2lnbmVkIGNoYXIg ZGF0YV8xWzRdLCBkYXRhXzJbNF07CgoJLy9GSVhNRTogbm90IGJpZy1lbmRpYW4gc2FmZQoKCS8v IFJlYWQgRUNDIHJlc3VsdAoJd3JpdGViKHN0YXQgfCAweDQwLCB0aGlzLT5JT19BRERSX1cgKyBU TUlPX01PREVfUkVHKTsKCSoodTMyKilkYXRhXzEgPSByZWFkbCh0aGlzLT5JT19BRERSX1IpOwoJ Kih1MzIqKWRhdGFfMiA9IHJlYWRsKHRoaXMtPklPX0FERFJfUik7CgkvLyBEaXNhYmxlIEVDQwoJ d3JpdGViKHN0YXQsIHRoaXMtPklPX0FERFJfVyArIFRNSU9fTU9ERV9SRUcpOwoJZWNjX2NvZGVb MF0gPSBkYXRhXzJbMF07CgllY2NfY29kZVsxXSA9IGRhdGFfMVszXTsKCWVjY19jb2RlWzJdID0g ZGF0YV8yWzFdOwoJZWNjX2NvZGVbM10gPSBkYXRhXzFbMV07CgllY2NfY29kZVs0XSA9IGRhdGFf MVswXTsKCWVjY19jb2RlWzVdID0gZGF0YV8xWzJdOwoJcmV0dXJuIDA7Cn0KI2VuZGlmCgpzdGF0 aWMgdm9pZCB0bWlvX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkgCnsK CXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CgoJc3dpdGNoKGNtZCkgewoKCQlj YXNlIE5BTkRfQ1RMX1NFVENMRTogc3RhdCB8PSAgVE1JT19NT0RFX0NMRTsgYnJlYWs7CgkJY2Fz ZSBOQU5EX0NUTF9DTFJDTEU6IHN0YXQgJj0gflRNSU9fTU9ERV9DTEU7IGJyZWFrOwoKCQljYXNl IE5BTkRfQ1RMX1NFVEFMRTogc3RhdCB8PSAgVE1JT19NT0RFX0FMRTsgYnJlYWs7CgkJY2FzZSBO QU5EX0NUTF9DTFJBTEU6IHN0YXQgJj0gflRNSU9fTU9ERV9BTEU7IGJyZWFrOwoKCQljYXNlIE5B TkRfQ1RMX1NFVE5DRTogc3RhdCB8PSAgVE1JT19NT0RFX0NFOyBicmVhazsKCQljYXNlIE5BTkRf Q1RMX0NMUk5DRTogc3RhdCAmPSB+VE1JT19NT0RFX0NFOyBicmVhazsKCX0KCgl3cml0ZWIoc3Rh dCwgdGhpcy0+SU9fQUREUl9XICsgVE1JT19NT0RFX1JFRyk7Cn0KCi8vIFRoaXMgaXMgdGhlIG1h aW4gaGFjayB0byB0aGUgZGVmYXVsdCBkcml2ZXJzIC0gdGhpcyBjaGlwIGlzIGZ1bnkgaW4KLy8g dGhhdCB0aGUgYWRkcmVzcyBtdXN0IGJlIHdyaXR0ZW4gYXMgYSB3b3JkLCBub3QgdGhyZWUgYnl0 ZXMgd3JpdGVzLgoKc3RhdGljIHZvaWQgdG1pb19jb21tYW5kIChzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKewoJcmVnaXN0 ZXIgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKCgkvKiBCZWdpbiBjb21tYW5k IGxhdGNoIGN5Y2xlICovCgl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwoJ LyoKCSAqIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLgoJICovCglpZiAoY29t bWFuZCA9PSBOQU5EX0NNRF9TRVFJTikgewoJCWludCByZWFkY21kOwoKCQlpZiAoY29sdW1uID49 IG10ZC0+b29iYmxvY2spIHsKCQkJLyogT09CIGFyZWEgKi8KCQkJY29sdW1uIC09IG10ZC0+b29i YmxvY2s7CgkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFET09COwoJCX0gZWxzZSBpZiAoY29sdW1u IDwgMjU2KSB7CgkJCS8qIEZpcnN0IDI1NiBieXRlcyAtLT4gUkVBRDAgKi8KCQkJcmVhZGNtZCA9 IE5BTkRfQ01EX1JFQUQwOwoJCX0gZWxzZSB7CgkJCWNvbHVtbiAtPSAyNTY7CgkJCXJlYWRjbWQg PSBOQU5EX0NNRF9SRUFEMTsKCQl9CgkJd3JpdGViKHJlYWRjbWQsIHRoaXMtPklPX0FERFJfVyk7 Cgl9Cgl3cml0ZWIoY29tbWFuZCwgdGhpcy0+SU9fQUREUl9XKTsKCgkvKiBTZXQgQUxFIGFuZCBj bGVhciBDTEUgdG8gc3RhcnQgYWRkcmVzcyBjeWNsZSAqLwoJdGhpcy0+aHdjb250cm9sKG10ZCwg TkFORF9DVExfQ0xSQ0xFKTsKCglpZiAoY29sdW1uICE9IC0xIHx8IHBhZ2VfYWRkciAhPSAtMSkg ewoJCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7CgoJCWlmIChjb2x1bW4g IT0gLTEpIHsKCQkJLyogQWRqdXN0IGNvbHVtbnMgZm9yIDE2IGJpdCBidXN3aWR0aCAqLwoJCQl3 cml0ZWIoY29sdW1uLCB0aGlzLT5JT19BRERSX1cpOwoJCX0KCQlpZiAocGFnZV9hZGRyICE9IC0x KQoJCQl3cml0ZWwocGFnZV9hZGRyICYgMHgwMGZmZmZmZiwgdGhpcy0+SU9fQUREUl9XKTsKCgkJ LyogTGF0Y2ggaW4gYWRkcmVzcyAqLwoJCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NM UkFMRSk7Cgl9CgoJLyoKCSAqIHByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kg aGFuZGxlcnMKCSAqIHN0YXR1cyBhbmQgc2VxdWVudGlhbCBpbiBuZWVkcyBubyBkZWxheQoJICov Cglzd2l0Y2ggKGNvbW1hbmQpIHsKCQljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgoJCWNhc2UgTkFO RF9DTURfRVJBU0UxOgoJCWNhc2UgTkFORF9DTURfRVJBU0UyOgoJCWNhc2UgTkFORF9DTURfU0VR SU46CgkJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CgkJCXJldHVybjsKCX0KCgkvKiBBcHBseSB0aGlz IHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQiBpbgoJICog YW55IGNhc2Ugb24gYW55IG1hY2hpbmUuICovCgluZGVsYXkgKDEwMCk7CgkvKiB3YWl0IHVudGls IGNvbW1hbmQgaXMgcHJvY2Vzc2VkICovCgl3aGlsZSAoIXRoaXMtPmRldl9yZWFkeShtdGQpKTsK fQoKLyoKICoJcmVhZCBkZXZpY2UgcmVhZHkgcGluCiAqLwpzdGF0aWMgaW50IHRtaW9fZGV2aWNl X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQp7CglyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlw ICp0aGlzID0gbXRkLT5wcml2OwoJcmV0dXJuIChyZWFkYih0aGlzLT5JT19BRERSX1IgKyBUTUlP X1NUQVRVU19SRUcpICYgVE1JT19TVEFUVVNfQlVTWSkgPyAwIDogMTsKfQoKI2lmZGVmIENPTkZJ R19NVERfUEFSVElUSU9OUwovLyBOaWNlIGFuZCBzaW1wbGUgLSBvbmUgYmlnIHBhcnRpdGlvbi4K c3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9hID0gewoJLm5hbWUgPSAiSW50 ZXJuYWwgTkFORCBmbGFzaCIsCgkub2Zmc2V0ID0gIDAsCgkuc2l6ZSA9ICBNVERQQVJUX1NJWl9G VUxMLAp9OwojZW5kaWYKCi8vIFdpbkNFIHVzZXMgdGhpcyBFQ0MgbGF5b3V0IChpdCB1c2VzIFNT RkRDKS4gbGV0cyBwbGF5IG5pY2UuCnN0cnVjdCBuYW5kX29vYmluZm8gdG1pb19vb2JpbmZvICA9 IHsKCS5lY2Nwb3MgPSB7MTQsMTMsMTUsOSw4LDEwfSwKCS5vb2JmcmVlID0ge3swLDR9LHs2LDJ9 LHsxMSwyfX0sCgkuZWNjYnl0ZXMgPSA2LAoJLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFD RSwKfTsKCi8qCiAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQogKi8Kc3RhdGljIGludCBf X2luaXQgdG1pb19pbml0ICh2b2lkKQp7CglzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwoJaW50IHRt aW9fcGJhc2U9MHgxMDAwMGIwMDsgIC8vRklYTUUgLSBoYXJkY29kZWQgZm9yIHRvc2hpYmEgZXNl cmllcyBQREFzCglpbnQgdG1pb19iYXNlOwoKCS8vIEluaXRpYWwgc3RhdHVzIC0gd3JpdGUgZW5h YmxlZCwgcG93ZXIgb24uCglzdGF0ID0gVE1JT19NT0RFX1BDTlRMIHwgVE1JT19NT0RFX1dQOwoK CS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUg ZGF0YSAqLwoJdG1pb19tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6 ZW9mKHN0cnVjdCBuYW5kX2NoaXApLAoJICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwoJ aWYgKCF0bWlvX210ZCkKCQlyZXR1cm4gLUVOT01FTTsKCgkvKiBtYXAgcGh5c2ljYWwgYWRyZXNz ICovCgkvL0ZJWE1FIC0gbWFwIDB4MTAwPyBpcyB0aGF0IHRoZSBtaW5pbXVtPwoJdG1pb19iYXNl ID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcCh0bWlvX3BiYXNlLCAweDEwMCk7CglpZighdG1pb19i YXNlKSB7CgkJa2ZyZWUodG1pb19tdGQpOwoJCXJldHVybiAtRUlPOwoJfQoKCS8qIEdldCBwb2lu dGVyIHRvIHByaXZhdGUgZGF0YSAqLwoJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmdG1p b19tdGRbMV0pOwoKCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwoJbWVtc2V0KChjaGFyICop IHRtaW9fbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CgltZW1zZXQoKGNoYXIgKikg dGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKCgkvKiBMaW5rIHRoZSBwcml2YXRl IGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwoJdG1pb19tdGQtPnByaXYgPSB0aGlzOwoK CS8qIGluc2VydCBjYWxsYmFja3MgKi8KCXRoaXMtPklPX0FERFJfUiAgPSB0bWlvX2Jhc2U7Cgl0 aGlzLT5JT19BRERSX1cgID0gdG1pb19iYXNlOwoJdGhpcy0+Y21kZnVuYyAgICA9IHRtaW9fY29t bWFuZDsKCXRoaXMtPmh3Y29udHJvbCAgPSB0bWlvX2h3Y29udHJvbDsKCXRoaXMtPmRldl9yZWFk eSAgPSB0bWlvX2RldmljZV9yZWFkeTsKCXRoaXMtPnJlYWRfaWQgICAgPSB0bWlvX3JlYWRfaWQ7 Cgl0aGlzLT5yZWFkX2J1ZiAgID0gdG1pb19yZWFkX2J1ZjsKCXRoaXMtPndyaXRlX2J1ZiAgPSB0 bWlvX3dyaXRlX2J1ZjsKCXRoaXMtPnZlcmlmeV9idWYgPSB0bWlvX3ZlcmlmeV9idWY7Cgl0aGlz LT5hdXRvb29iICAgID0gJnRtaW9fb29iaW5mbzsKCXRoaXMtPmVjY21vZGUgICAgPSBOQU5EX0VD Q19TT0ZUOwojaWYgMAoJLy8gSFcgRUNDIGRvZXNudCB3b3JrIChoYXJkd2FyZSBidWc/KQoJdGhp cy0+ZW5hYmxlX2h3ZWNjID0gdG1pb19lbmFibGVfaHdlY2M7Cgl0aGlzLT5jYWxjdWxhdGVfZWNj ID0gdG1pb19jYWxjdWxhdGVfZWNjOwoJdGhpcy0+Y29ycmVjdF9kYXRhID0gbmFuZF9jb3JyZWN0 X2RhdGE7Cgl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfSFc2XzUxMjsKI2VuZGlmCgoJLyogU2Nh biB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCglpZiAobmFuZF9zY2FuICh0bWlv X210ZCwgMSkpIHsKCQlpb3VubWFwKCh2b2lkICopdG1pb19iYXNlKTsKCQlrZnJlZSAodG1pb19t dGQpOwoJCXJldHVybiAtRU5YSU87Cgl9CgoJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcm5h bCBkYXRhIGJ1ZmZlciAqLwoJdGhpcy0+ZGF0YV9idWYgPSBrbWFsbG9jIChzaXplb2YodV9jaGFy KSAqICh0bWlvX210ZC0+b29iYmxvY2sgKyB0bWlvX210ZC0+b29ic2l6ZSksIEdGUF9LRVJORUwp OwoJaWYgKCF0aGlzLT5kYXRhX2J1ZikgewoJCWlvdW5tYXAoKHZvaWQgKil0bWlvX2Jhc2UpOwoJ CWtmcmVlICh0bWlvX210ZCk7CgkJcmV0dXJuIC1FTk9NRU07Cgl9CgojaWZkZWYgQ09ORklHX01U RF9QQVJUSVRJT05TCgkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwoJYWRkX210ZF9wYXJ0 aXRpb25zKHRtaW9fbXRkLCAmcGFydGl0aW9uX2EsIDEpOwojZW5kaWYKCgkvKiBSZXR1cm4gaGFw cHkgKi8KCXJldHVybiAwOwp9CgovKgogKiBDbGVhbiB1cCByb3V0aW5lCiAqLwpzdGF0aWMgdm9p ZCBfX2V4aXQgdG1pb19jbGVhbnVwICh2b2lkKQp7CglzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0g KHN0cnVjdCBuYW5kX2NoaXAgKikgJnRtaW9fbXRkWzFdOwoKCS8vRklYTUUgLSBkbyB3ZSBuZWVk IHRvIHJlbW92ZSB0aGUgcGFydGl0aW9uPwoKCS8qIFVucmVnaXN0ZXIgdGhlIGRldmljZSAqLwoJ ZGVsX210ZF9kZXZpY2UgKHRtaW9fbXRkKTsKCgkvKiBGcmVlIGludGVybmFsIGRhdGEgYnVmZmVy ICovCglrZnJlZSAodGhpcy0+ZGF0YV9idWYpOwoKCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3Ry dWN0dXJlICovCglrZnJlZSAodG1pb19tdGQpOwp9Cgptb2R1bGVfaW5pdCh0bWlvX2luaXQpOwpt b2R1bGVfZXhpdCh0bWlvX2NsZWFudXApOwoKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpNT0RVTEVf QVVUSE9SKCJJYW4gTW9sdG9uIGFuZCBTZWJhc3RpYW4gQ2FybGllciIpOwpNT0RVTEVfREVTQ1JJ UFRJT04oIk1URCBtYXAgZHJpdmVyIGZvciBUTUlPIE5BTkQgY29udHJvbGxlci4iKTsK --Multipart=_Tue__24_Aug_2004_01_09_27_+0100_tX+UvdRdnn08b4t3--