From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sat, 20 Dec 2003 14:29:10 +0100 From: Colin Leroy To: linuxppc-dev list Cc: benh@kernel.crashing.org Subject: Kernel module for iBook G4's fan controller Message-Id: <20031220142910.6b8ff017.colin@colino.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Sat__20_Dec_2003_14_29_10_+0100_=.34s+iZGDZ'cPcG" Sender: owner-linuxppc-dev@lists.linuxppc.org List-Id: This is a multi-part message in MIME format. --Multipart_Sat__20_Dec_2003_14_29_10_+0100_=.34s+iZGDZ'cPcG Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, here's a module to allow fine control of the iBook G4's fan controller. The defaults temperature limits are pretty high. it's also available at http://geekounet.org/powerbook/patches/files/therm_adt7467.c It's intended to go with the other therm_* modules in drivers/macintosh/ and is for kernel 2.4. Hope it's fine, -- Colin --Multipart_Sat__20_Dec_2003_14_29_10_+0100_=.34s+iZGDZ'cPcG Content-Type: text/x-csrc; name="therm_adt7467.c" Content-Disposition: attachment; filename="therm_adt7467.c" Content-Transfer-Encoding: base64 LyoKICogRGV2aWNlIGRyaXZlciBmb3IgdGhlIGkyYyB0aGVybW9zdGF0IGZvdW5kIG9uIHRoZSBp Qm9vayBHNAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDMgQ29saW4gTGVyb3ksIEJlbmphbWluIEhl cnJlbnNjaG1pZHQKICoKICogRG9jdW1lbnRhdGlvbiBmcm9tCiAqIGh0dHA6Ly93d3cuYW5hbG9n LmNvbS9VcGxvYWRlZEZpbGVzL0RhdGFfU2hlZXRzLzExNTI1NDE3NUFEVDc0NjdfcHJhLnBkZgog KgogKi8KCiNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiNpbmNsdWRlIDxs aW51eC9zY2hlZC5oPgojaW5jbHVkZSA8bGludXgvaTJjLmg+CiNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgoj aW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KI2luY2x1 ZGUgPGFzbS9wcm9tLmg+CiNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgojaW5jbHVkZSA8YXNtL2lv Lmg+CiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KCiN1 bmRlZiBERUJVRwoKI2RlZmluZSBURU1QX0xPQ0FMICAgMHgyNgojZGVmaW5lIFRFTVBfUkVNT1RF MSAweDI1CiNkZWZpbmUgVEVNUF9SRU1PVEUyIDB4MjcKI2RlZmluZSBMSU1fTE9DQUwgICAgMHg2 YQojZGVmaW5lIExJTV9SRU1PVEUxICAweDZiCiNkZWZpbmUgTElNX1JFTU9URTIgIDB4NmMKI2Rl ZmluZSBGQU4wX1NQRUVEICAgMHgyOAojZGVmaW5lIEhZU1QwICAgICAgICAweDZkCiNkZWZpbmUg SFlTVDEgICAgICAgIDB4NmUKCiNkZWZpbmUgTUFOVUFMX01PREUgIDB4NWMKI2RlZmluZSBNQU5V QUxfTUFTSyAgMHhlMAojZGVmaW5lIEFVVE9fTUFTSyAgICAweDIwCgpzdGF0aWMgaW50IGxpbWl0 X2RlY3JlYXNlID0gMTU7CnN0YXRpYyBpbnQgZmFuX3NwZWVkID0gLTE7CgpNT0RVTEVfQVVUSE9S KCJDb2xpbiBMZXJveSA8Y29saW5AY29saW5vLm5ldD4iKTsKTU9EVUxFX0RFU0NSSVBUSU9OKCJE cml2ZXIgZm9yIEFEVDc0NjcgdGhlcm1vc3RhdCBpbiBpQm9vayBHNCIpOwpNT0RVTEVfTElDRU5T RSgiR1BMIik7CgpNT0RVTEVfUEFSTShsaW1pdF9kZWNyZWFzZSwiaSIpOwpNT0RVTEVfUEFSTV9E RVNDKGxpbWl0X2RlY3JlYXNlLCJEZWNyZWFzZSBzdGFuZGFyZCBtYXhpbXVtIHRlbXBlcmF0dXJl cyBieSBOILBDLCBkZWZhdWx0IGlzIDE1Iik7Ck1PRFVMRV9QQVJNKGZhbl9zcGVlZCwiaSIpOwpN T0RVTEVfUEFSTV9ERVNDKGZhbl9zcGVlZCwiU3BlY2lmeSBmYW4gc3BlZWQgKDAtMjU1KSB3aGVu IGxpbSA8IHRlbXAgPCBsaW0rOCAoZGFuZ2Vyb3VzICEpLCBkZWZhdWx0IGlzIGF1dG9tYXRpYyIp OwoKCkVYUE9SVF9OT19TWU1CT0xTOwoKc3RydWN0IHRoZXJtb3N0YXQgewoJc3RydWN0IGkyY19j bGllbnQJY2x0OwoJdTgJCQljYWNoZWRfdGVtcFszXTsKCXU4CQkJaW5pdGlhbF9saW1pdHNbM107 Cgl1OAkJCWxpbWl0c1szXTsKCWludAkJCWxhc3Rfc3BlZWQ7CglpbnQJCQlvdmVycmlkaW5nOwp9 OwoKc3RhdGljIGludCB0aGVybV9idXMsIHRoZXJtX2FkZHJlc3M7CnN0YXRpYyBzdHJ1Y3QgdGhl cm1vc3RhdCogdGhlcm1vc3RhdDsKc3RhdGljIHBpZF90IG1vbml0b3JfdGhyZWFkX2lkOwpzdGF0 aWMgaW50IG1vbml0b3JfcnVubmluZzsKc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihtb25pdG9y X2RlYWQpOwoKc3RhdGljIGludCBhdHRhY2hfb25lX3RoZXJtb3N0YXQoc3RydWN0IGkyY19hZGFw dGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGJ1c25vKTsKc3RhdGljIHZvaWQgd3JpdGVfZmFu X3NwZWVkKHN0cnVjdCB0aGVybW9zdGF0ICp0aCwgaW50IHNwZWVkKTsKCnN0YXRpYyBpbnQKd3Jp dGVfcmVnKHN0cnVjdCB0aGVybW9zdGF0KiB0aCwgaW50IHJlZywgdTggZGF0YSkKewoJdTggdG1w WzJdOwoJaW50IHJjOwoJCgl0bXBbMF0gPSByZWc7Cgl0bXBbMV0gPSBkYXRhOwoJcmMgPSBpMmNf bWFzdGVyX3NlbmQoJnRoLT5jbHQsIChjb25zdCBjaGFyICopdG1wLCAyKTsKCWlmIChyYyA8IDAp CgkJcmV0dXJuIHJjOwoJaWYgKHJjICE9IDIpCgkJcmV0dXJuIC1FTk9ERVY7CglyZXR1cm4gMDsK fQoKc3RhdGljIGludApyZWFkX3JlZyhzdHJ1Y3QgdGhlcm1vc3RhdCogdGgsIGludCByZWcpCnsK CXU4IHJlZ19hZGRyLCBkYXRhOwoJaW50IHJjOwoKCXJlZ19hZGRyID0gKHU4KXJlZzsKCXJjID0g aTJjX21hc3Rlcl9zZW5kKCZ0aC0+Y2x0LCAmcmVnX2FkZHIsIDEpOwoJaWYgKHJjIDwgMCkKCQly ZXR1cm4gcmM7CglpZiAocmMgIT0gMSkKCQlyZXR1cm4gLUVOT0RFVjsKCXJjID0gaTJjX21hc3Rl cl9yZWN2KCZ0aC0+Y2x0LCAoY2hhciAqKSZkYXRhLCAxKTsKCWlmIChyYyA8IDApCgkJcmV0dXJu IHJjOwoJcmV0dXJuIGRhdGE7Cn0KCnN0YXRpYyBpbnQKYXR0YWNoX3RoZXJtb3N0YXQoc3RydWN0 IGkyY19hZGFwdGVyICphZGFwdGVyKQp7Cgl1bnNpZ25lZCBsb25nIGJ1c19ubzsKCglpZiAoc3Ry bmNtcChhZGFwdGVyLT5uYW1lLCAidW5pLW4iLCA1KSkKCQlyZXR1cm4gMDsKCWJ1c19ubyA9IHNp bXBsZV9zdHJ0b3VsKGFkYXB0ZXItPm5hbWUgKyA2LCBOVUxMLCAxMCk7CglpZiAoYnVzX25vICE9 IHRoZXJtX2J1cykKCQlyZXR1cm4gMDsJCglyZXR1cm4gYXR0YWNoX29uZV90aGVybW9zdGF0KGFk YXB0ZXIsIHRoZXJtX2FkZHJlc3MsIGJ1c19ubyk7Cn0KCnN0YXRpYyBpbnQKZGV0YWNoX3RoZXJt b3N0YXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKewoJc3RydWN0IHRoZXJtb3N0YXQqIHRo OwoJCglpZiAodGhlcm1vc3RhdCA9PSBOVUxMKQoJCXJldHVybiAwOwoKCXRoID0gdGhlcm1vc3Rh dDsKCglwcmludGsoS0VSTl9JTkZPICJhZHQ3NDY3OiBQdXR0aW5nIG1heCB0ZW1wZXJhdHVyZXMg YmFjayBmcm9tICVkLCAlZCwgJWQsIgoJCSIgdG8gJWQsICVkLCAlZCwgKLBDKVxuIiwgCgkJdGgt PmxpbWl0c1swXSwgdGgtPmxpbWl0c1sxXSwgdGgtPmxpbWl0c1syXSwKCQl0aC0+aW5pdGlhbF9s aW1pdHNbMF0sIHRoLT5pbml0aWFsX2xpbWl0c1sxXSwgdGgtPmluaXRpYWxfbGltaXRzWzJdKTsK CXdyaXRlX3JlZyh0aCwgTElNX0xPQ0FMLCAgIHRoLT5pbml0aWFsX2xpbWl0c1swXSk7Cgl3cml0 ZV9yZWcodGgsIExJTV9SRU1PVEUxLCB0aC0+aW5pdGlhbF9saW1pdHNbMV0pOwoJd3JpdGVfcmVn KHRoLCBMSU1fUkVNT1RFMiwgdGgtPmluaXRpYWxfbGltaXRzWzJdKTsKCXdyaXRlX2Zhbl9zcGVl ZCh0aCwgLTEpOwoKCXRoZXJtb3N0YXQgPSBOVUxMOwoKCWlmIChtb25pdG9yX3J1bm5pbmcpIHsK CQkodm9pZClraWxsX3Byb2MobW9uaXRvcl90aHJlYWRfaWQsIFNJR1RFUk0sIDEpOwoJCXdhaXRf Zm9yX2NvbXBsZXRpb24oJm1vbml0b3JfZGVhZCk7Cgl9CgkJCglpMmNfZGV0YWNoX2NsaWVudCgm dGgtPmNsdCk7CglrZnJlZSh0aCk7CgoJcmV0dXJuIDA7Cn0KCgovKiBXaGF0IGlzIHRoaXMgc3Vw cG9zZWQgdG8gYmUgPyByZWdpc3RlcmVkID8gSSBoYXRlCiAqIG1hZ2ljIG51bWJlcnMgbGlrZSB0 aGF0IC4uLgogKi8KI2RlZmluZSBJMkNfRFJJVkVSSURfVEhFUk1PU1RBVCAoMHhERUFEKQoKc3Rh dGljIHN0cnVjdCBpMmNfZHJpdmVyIHRoZXJtb3N0YXRfZHJpdmVyID0geyAgCgluYW1lOgkJIkFw cGxlIFRoZXJtb3N0YXQiLAoJaWQ6CQlJMkNfRFJJVkVSSURfVEhFUk1PU1RBVCwKCWZsYWdzOgkJ STJDX0RGX05PVElGWSwKCWF0dGFjaF9hZGFwdGVyOgkmYXR0YWNoX3RoZXJtb3N0YXQsCglkZXRh Y2hfY2xpZW50OgkmZGV0YWNoX3RoZXJtb3N0YXQsCgljb21tYW5kOglOVUxMLAoJaW5jX3VzZToJ TlVMTCwKCWRlY191c2U6CU5VTEwgCn07CgpzdGF0aWMgaW50IHJlYWRfZmFuX3NwZWVkKHN0cnVj dCB0aGVybW9zdGF0ICp0aCwgdTggYWRkcikKewoJdTggdG1wWzJdOwoJdTE2IHJlczsKCQoJLyog c2hvdWxkIHN0YXJ0IHdpdGggbG93IGJ5dGUgKi8KCXRtcFsxXSA9IHJlYWRfcmVnKHRoLCBhZGRy KTsKCXRtcFswXSA9IHJlYWRfcmVnKHRoLCBhZGRyICsgMSk7CgkKCXJlcyA9IHRtcFsxXSArICh0 bXBbMF0gPDwgOCk7CglyZXR1cm4gKDkwMDAwKjYwKS9yZXM7Cn0KCnN0YXRpYyB2b2lkIHdyaXRl X2Zhbl9zcGVlZChzdHJ1Y3QgdGhlcm1vc3RhdCAqdGgsIGludCBzcGVlZCkKewoJdTggbWFudWFs OwoJCglpZiAoc3BlZWQgPiAweGZmKSAKCQlzcGVlZCA9IDB4ZmY7CgllbHNlIGlmIChzcGVlZCA8 IC0xKSAKCQlzcGVlZCA9IDA7CgkKCWlmIChzcGVlZCA+PSAwKSB7CgkJbWFudWFsID0gcmVhZF9y ZWcodGgsIE1BTlVBTF9NT0RFKTsKCQl3cml0ZV9yZWcodGgsIDB4NWMsIG1hbnVhbHxNQU5VQUxf TUFTSyk7CgkJaWYgKHRoLT5sYXN0X3NwZWVkICE9IHNwZWVkKQoJCQlwcmludGsoS0VSTl9JTkZP ICJhZHQ3NDY3OiBTZXR0aW5nIHNwZWVkIHRvOiAlZFxuIiwgc3BlZWQpOwoJCXRoLT5sYXN0X3Nw ZWVkID0gc3BlZWQ7CgkJd3JpdGVfcmVnKHRoLCAweDMwLCBzcGVlZCk7Cgl9IGVsc2UgewoJCS8q IGJhY2sgdG8gYXV0b21hdGljICovCgkJbWFudWFsID0gcmVhZF9yZWcodGgsIE1BTlVBTF9NT0RF KTsKCQlpZiAodGgtPmxhc3Rfc3BlZWQgIT0gLTEpCgkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0 Njc6IFNldHRpbmcgc3BlZWQgdG86IGF1dG9tYXRpY1xuIik7CgkJdGgtPmxhc3Rfc3BlZWQgPSAt MTsKCQl3cml0ZV9yZWcodGgsIDB4NWMsIG1hbnVhbCYofkFVVE9fTUFTSykpOwoJfQp9CgpzdGF0 aWMgaW50IG1vbml0b3JfdGFzayh2b2lkICphcmcpCnsKCXN0cnVjdCB0aGVybW9zdGF0KiB0aCA9 IGFyZzsKCXU4IHRlbXBzWzNdOwoJdTggbGltc1szXTsKCXU4IGh5c3RbMl07CiNpZmRlZiBERUJV RwoJaW50IG1mYW5fc3BlZWQ7CiNlbmRpZgoJCglsb2NrX2tlcm5lbCgpOwoJZGFlbW9uaXplKCk7 Cgl1bmxvY2tfa2VybmVsKCk7CglzdHJjcHkoY3VycmVudC0+Y29tbSwgInRoZXJtb3N0YXQiKTsK CW1vbml0b3JfcnVubmluZyA9IDE7CgoJd2hpbGUoMSkKCXsKCQlzZXRfdGFza19zdGF0ZShjdXJy ZW50LCBUQVNLX0lOVEVSUlVQVElCTEUpOwoJCXNjaGVkdWxlX3RpbWVvdXQoMSpIWik7CgkJaWYg KHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQoJCQlicmVhazsKCgkJLyogQ2hlY2sgc3RhdHVzICov CgkJLyogcmVtb3RlIDE6IENQVSA/Ki8KCQkvKiByZW1vdGUgMjogR1BVID8qLwoJCXRlbXBzWzBd ICA9IHJlYWRfcmVnKHRoLCBURU1QX0xPQ0FMKTsKCQl0ZW1wc1sxXSAgPSByZWFkX3JlZyh0aCwg VEVNUF9SRU1PVEUxKTsKCQl0ZW1wc1syXSAgPSByZWFkX3JlZyh0aCwgVEVNUF9SRU1PVEUyKTsK CQlsaW1zWzBdICAgPSByZWFkX3JlZyh0aCwgTElNX0xPQ0FMKTsKCQlsaW1zWzFdICAgPSByZWFk X3JlZyh0aCwgTElNX1JFTU9URTEpOwoJCWxpbXNbMl0gICA9IHJlYWRfcmVnKHRoLCBMSU1fUkVN T1RFMik7CgkJaHlzdFswXSAgID0gcmVhZF9yZWcodGgsIEhZU1QwKTsKCQloeXN0WzFdICAgPSBy ZWFkX3JlZyh0aCwgSFlTVDEpOwoJCQoJCWh5c3RbMF0gPSAoaHlzdFswXSAmIDB4ZjApID4+IDQ7 CgkJaHlzdFsxXSA9IChoeXN0WzFdICYgMHhmMCkgPj4gNDsKCQkKCQlpZiAoZmFuX3NwZWVkICE9 IC0xKSB7CgkJCWlmICh0ZW1wc1swXSA+IGxpbXNbMF0KCQkJfHwgIHRlbXBzWzFdID4gbGltc1sx XQoJCQl8fCAgdGVtcHNbMl0gPiBsaW1zWzJdKSB7CgkJCQlpbnQgdmFyID0gMDsKCQkJCXZhciA9 ICh0ZW1wc1swXSAtIGxpbXNbMF0gPiB2YXIpID8gdGVtcHNbMF0gLSBsaW1zWzBdIDogdmFyOwoJ CQkJdmFyID0gKHRlbXBzWzFdIC0gbGltc1sxXSA+IHZhcikgPyB0ZW1wc1sxXSAtIGxpbXNbMV0g OiB2YXI7CgkJCQl2YXIgPSAodGVtcHNbMl0gLSBsaW1zWzJdID4gdmFyKSA/IHRlbXBzWzJdIC0g bGltc1syXSA6IHZhcjsKCQkJCWlmICh2YXIgPiA4KSB7CgkJCQkJaWYgKHRoLT5vdmVycmlkaW5n ID09IDApCgkJCQkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0Njc6IExpbWl0IGV4Y2VlZGVkIGJ5 ICVksEMsIG92ZXJyaWRpbmcgc3BlY2lmaWVkIGZhbiBzcGVlZC5cbiIsCgkJCQkJCQl2YXIpOwoJ CQkJCXRoLT5vdmVycmlkaW5nID0gMTsKCQkJCQl3cml0ZV9mYW5fc3BlZWQodGgsIC0xKTsKCQkJ CX0gZWxzZSB7CgkJCQkJaWYgKHRoLT5vdmVycmlkaW5nID09IDEpCgkJCQkJCXByaW50ayhLRVJO X0lORk8gImFkdDc0Njc6IExpbWl0IGV4Y2VzcyBpcyBvdmVyLCBzZXR0aW5nIHNwZWVkIHRvIHNw ZWNpZmllZC5cbiIpOwkJCQkJdGgtPm92ZXJyaWRpbmcgPSAwOwoJCQkJCXdyaXRlX2Zhbl9zcGVl ZCh0aCwgZmFuX3NwZWVkKTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCXdyaXRlX2Zhbl9zcGVlZCh0 aCwgMCk7CgkJCX0KCQl9CiNpZmRlZiBERUJVRwoJCW1mYW5fc3BlZWQgPSByZWFkX2Zhbl9zcGVl ZCh0aCwgRkFOMF9TUEVFRCk7CgkJLyogb25seSBvbmUgZmFuIGluIHRoZSBpQm9vayBHNCAqLwoJ CQkJCgkJaWYgKHRlbXBzWzBdICE9IHRoLT5jYWNoZWRfdGVtcFswXQoJCXx8ICB0ZW1wc1sxXSAh PSB0aC0+Y2FjaGVkX3RlbXBbMV0KCQl8fCAgdGVtcHNbMl0gIT0gdGgtPmNhY2hlZF90ZW1wWzJd KSB7CgkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0Njc6IFRlbXBlcmF0dXJlIGluZm9zOiIKCQkJ CQkgIiB0aGVybW9zdGF0czogJWQsJWQsJWQgsEM7IgoJCQkJCSAiIGxpbWl0czogJWQsJWQsJWQg sEM7IgoJCQkJCSAiIGZhbiBzcGVlZDogJWQgUlBNOyIKCQkJCQkgIiBoeXN0ZXJlc2lzOiAlZCwl ZFxuIiwKCQkJCXRlbXBzWzBdLCB0ZW1wc1sxXSwgdGVtcHNbMl0sCgkJCQlsaW1zWzBdLCAgbGlt c1sxXSwgIGxpbXNbMl0sCgkJCQltZmFuX3NwZWVkLGh5c3RbMF0sICBoeXN0WzFdKTsKCQl9CiNl bmRpZgkJCgkJdGgtPmNhY2hlZF90ZW1wWzBdID0gdGVtcHNbMF07CgkJdGgtPmNhY2hlZF90ZW1w WzFdID0gdGVtcHNbMV07CgkJdGgtPmNhY2hlZF90ZW1wWzJdID0gdGVtcHNbMl07Cgl9Cgltb25p dG9yX3J1bm5pbmcgPSAwOwoJY29tcGxldGVfYW5kX2V4aXQoJm1vbml0b3JfZGVhZCwgMCk7Cgly ZXR1cm4gMDsKfQoKc3RhdGljIGludAphdHRhY2hfb25lX3RoZXJtb3N0YXQoc3RydWN0IGkyY19h ZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGJ1c25vKQp7CglzdHJ1Y3QgdGhlcm1vc3Rh dCogdGg7CglpbnQgcmM7CgoJaWYgKHRoZXJtb3N0YXQpCgkJcmV0dXJuIDA7Cgl0aCA9IChzdHJ1 Y3QgdGhlcm1vc3RhdCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aGVybW9zdGF0KSwgR0ZQX0tF Uk5FTCk7CglpZiAoIXRoKQoJCXJldHVybiAtRU5PTUVNOwoJbWVtc2V0KHRoLCAwLCBzaXplb2Yo KnRoKSk7Cgl0aC0+Y2x0LmFkZHIgPSBhZGRyOwoJdGgtPmNsdC5hZGFwdGVyID0gYWRhcHRlcjsK CXRoLT5jbHQuZHJpdmVyID0gJnRoZXJtb3N0YXRfZHJpdmVyOwoJdGgtPmNsdC5mbGFncyA9IDA7 Cgl0aC0+Y2x0LmRhdGEgPSBOVUxMOwoJc3RyY3B5KHRoLT5jbHQubmFtZSwgInRoZXJtb3N0YXQi KTsKCglyYyA9IHJlYWRfcmVnKHRoLCAwKTsKCWlmIChyYyA8IDApIHsKCQlwcmludGsoS0VSTl9F UlIgImFkdDc0Njc6IFRoZXJtb3N0YXQgZmFpbGVkIHRvIHJlYWQgY29uZmlnIGZyb20gYnVzICVk ICFcbiIsCgkJCWJ1c25vKTsKCQlrZnJlZSh0aCk7CgkJcmV0dXJuIC1FTk9ERVY7Cgl9Cglwcmlu dGsoS0VSTl9JTkZPICJhZHQ3NDY3OiBBRFQ3NDY3IGluaXRpYWxpemluZ1xuIik7CgoJdGgtPmlu aXRpYWxfbGltaXRzWzBdID0gcmVhZF9yZWcodGgsIExJTV9MT0NBTCk7Cgl0aC0+aW5pdGlhbF9s aW1pdHNbMV0gPSByZWFkX3JlZyh0aCwgTElNX1JFTU9URTEpOwoJdGgtPmluaXRpYWxfbGltaXRz WzJdID0gcmVhZF9yZWcodGgsIExJTV9SRU1PVEUyKTsKCXRoLT5saW1pdHNbMF0gPSB0aC0+aW5p dGlhbF9saW1pdHNbMF0gLSBsaW1pdF9kZWNyZWFzZTsKCXRoLT5saW1pdHNbMV0gPSB0aC0+aW5p dGlhbF9saW1pdHNbMV0gLSBsaW1pdF9kZWNyZWFzZTsKCXRoLT5saW1pdHNbMl0gPSB0aC0+aW5p dGlhbF9saW1pdHNbMl0gLSBsaW1pdF9kZWNyZWFzZTsKCQoJcHJpbnRrKEtFUk5fSU5GTyAiYWR0 NzQ2NzogTG93ZXJpbmcgbWF4IHRlbXBlcmF0dXJlcyBmcm9tICVkLCAlZCwgJWQiCgkJIiB0byAl ZCwgJWQsICVkICiwQylcbiIsIAoJCXRoLT5pbml0aWFsX2xpbWl0c1swXSwgdGgtPmluaXRpYWxf bGltaXRzWzFdLCB0aC0+aW5pdGlhbF9saW1pdHNbMl0sIAoJCXRoLT5saW1pdHNbMF0sIHRoLT5s aW1pdHNbMV0sIHRoLT5saW1pdHNbMl0pOwoJd3JpdGVfcmVnKHRoLCBMSU1fTE9DQUwsICAgdGgt PmxpbWl0c1swXSk7Cgl3cml0ZV9yZWcodGgsIExJTV9SRU1PVEUxLCB0aC0+bGltaXRzWzFdKTsK CXdyaXRlX3JlZyh0aCwgTElNX1JFTU9URTIsIHRoLT5saW1pdHNbMl0pOwoKCXRoZXJtb3N0YXQg PSB0aDsKCglpZiAoaTJjX2F0dGFjaF9jbGllbnQoJnRoLT5jbHQpKSB7CgkJcHJpbnRrKCJhZHQ3 NDY3OiBUaGVybW9zdGF0IGZhaWxlZCB0byBhdHRhY2ggY2xpZW50ICFcbiIpOwoJCXRoZXJtb3N0 YXQgPSBOVUxMOwoJCWtmcmVlKHRoKTsKCQlyZXR1cm4gLUVOT0RFVjsKCX0KCglpZiAoZmFuX3Nw ZWVkICE9IC0xKSB7CgkJd3JpdGVfZmFuX3NwZWVkKHRoLCAwKTsKCX0gZWxzZSB7CgkJd3JpdGVf ZmFuX3NwZWVkKHRoLCAtMSk7Cgl9CgkKCW1vbml0b3JfdGhyZWFkX2lkID0ga2VybmVsX3RocmVh ZChtb25pdG9yX3Rhc2ssIHRoLAoJCVNJR0NITEQgfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwg Q0xPTkVfU0lHSEFORCk7CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgX19pbml0CnRoZXJtb3N0 YXRfaW5pdCh2b2lkKQp7CglzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wOwoJdTMyICpwcm9wOwoJCglu cCA9IGZpbmRfZGV2aWNlcygiZmFuIik7CglpZiAoIW5wKQoJCXJldHVybiAtRU5PREVWOwoJaWYg KCFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFkdDc0NjciKSkKCQlyZXR1cm4gLUVOT0RFVjsK Cglwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwoJaWYgKCFwcm9w KQoJCXJldHVybiAtRU5PREVWOwoJdGhlcm1fYnVzID0gKCgqcHJvcCkgPj4gOCkgJiAweDBmOwoJ dGhlcm1fYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKCglwcmludGsoS0VSTl9JTkZP ICJhZHQ3NDY3OiBUaGVybW9zdGF0IGJ1czogJWQsIGFkZHJlc3M6IDB4JTAyeCwgbGltaXRfZGVj cmVhc2U6ICVkLCBmYW5fc3BlZWQ6ICVkXG4iLAoJCXRoZXJtX2J1cywgdGhlcm1fYWRkcmVzcywg bGltaXRfZGVjcmVhc2UsIGZhbl9zcGVlZCk7CgoJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0aGVy bW9zdGF0X2RyaXZlcik7Cn0KCnN0YXRpYyB2b2lkIF9fZXhpdAp0aGVybW9zdGF0X2V4aXQodm9p ZCkKewoJaTJjX2RlbF9kcml2ZXIoJnRoZXJtb3N0YXRfZHJpdmVyKTsKfQoKbW9kdWxlX2luaXQo dGhlcm1vc3RhdF9pbml0KTsKbW9kdWxlX2V4aXQodGhlcm1vc3RhdF9leGl0KTsK --Multipart_Sat__20_Dec_2003_14_29_10_+0100_=.34s+iZGDZ'cPcG-- ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/