From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sat, 20 Dec 2003 15:16:24 +0100 From: Colin Leroy To: linuxppc-dev list Cc: benh@kernel.crashing.org Subject: Re: Kernel module for iBook G4's fan controller Message-Id: <20031220151624.3211073e.colin@colino.net> In-Reply-To: <20031220142910.6b8ff017.colin@colino.net> References: <20031220142910.6b8ff017.colin@colino.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Sat__20_Dec_2003_15_16_24_+0100_=.NnLpsx+z?cmwRF" Sender: owner-linuxppc-dev@lists.linuxppc.org List-Id: This is a multi-part message in MIME format. --Multipart_Sat__20_Dec_2003_15_16_24_+0100_=.NnLpsx+z?cmwRF Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On 20 Dec 2003 at 14h12, Colin Leroy wrote: Hi, > here's a module to allow fine control of the iBook G4's fan controller. This one's better (hysteresis when forcing fan speed too). -- Colin --Multipart_Sat__20_Dec_2003_15_16_24_+0100_=.NnLpsx+z?cmwRF 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 QUxfTUFTSyAgMHhlMAojZGVmaW5lIEFVVE9fTUFTSyAgICAweDIwCiNkZWZpbmUgRkFOX1NQRF9T RVQgIDB4MzAKCnN0YXRpYyBpbnQgbGltaXRfZGVjcmVhc2UgPSAxNTsKc3RhdGljIGludCBmYW5f c3BlZWQgPSAtMTsKCk1PRFVMRV9BVVRIT1IoIkNvbGluIExlcm95IDxjb2xpbkBjb2xpbm8ubmV0 PiIpOwpNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQURUNzQ2NyB0aGVybW9zdGF0IGlu IGlCb29rIEc0Iik7Ck1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCk1PRFVMRV9QQVJNKGxpbWl0X2Rl Y3JlYXNlLCJpIik7Ck1PRFVMRV9QQVJNX0RFU0MobGltaXRfZGVjcmVhc2UsIkRlY3JlYXNlIHN0 YW5kYXJkIG1heGltdW0gdGVtcGVyYXR1cmVzIGJ5IE4gsEMsIGRlZmF1bHQgaXMgMTUiKTsKTU9E VUxFX1BBUk0oZmFuX3NwZWVkLCJpIik7Ck1PRFVMRV9QQVJNX0RFU0MoZmFuX3NwZWVkLCJTcGVj aWZ5IGZhbiBzcGVlZCAoMC0yNTUpIHdoZW4gbGltIDwgdGVtcCA8IGxpbSs4IChkYW5nZXJvdXMg ISksIGRlZmF1bHQgaXMgYXV0b21hdGljIik7CgoKRVhQT1JUX05PX1NZTUJPTFM7CgpzdHJ1Y3Qg dGhlcm1vc3RhdCB7CglzdHJ1Y3QgaTJjX2NsaWVudAljbHQ7Cgl1OAkJCWNhY2hlZF90ZW1wWzNd OwoJdTgJCQlpbml0aWFsX2xpbWl0c1szXTsKCXU4CQkJbGltaXRzWzNdOwoJaW50CQkJbGFzdF9z cGVlZDsKCWludAkJCW92ZXJyaWRpbmc7Cn07CgpzdGF0aWMgaW50IHRoZXJtX2J1cywgdGhlcm1f YWRkcmVzczsKc3RhdGljIHN0cnVjdCB0aGVybW9zdGF0KiB0aGVybW9zdGF0OwpzdGF0aWMgcGlk X3QgbW9uaXRvcl90aHJlYWRfaWQ7CnN0YXRpYyBpbnQgbW9uaXRvcl9ydW5uaW5nOwpzdGF0aWMg REVDTEFSRV9DT01QTEVUSU9OKG1vbml0b3JfZGVhZCk7CgpzdGF0aWMgaW50IGF0dGFjaF9vbmVf dGhlcm1vc3RhdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQgYnVz bm8pOwpzdGF0aWMgdm9pZCB3cml0ZV9mYW5fc3BlZWQoc3RydWN0IHRoZXJtb3N0YXQgKnRoLCBp bnQgc3BlZWQpOwoKc3RhdGljIGludAp3cml0ZV9yZWcoc3RydWN0IHRoZXJtb3N0YXQqIHRoLCBp bnQgcmVnLCB1OCBkYXRhKQp7Cgl1OCB0bXBbMl07CglpbnQgcmM7CgkKCXRtcFswXSA9IHJlZzsK CXRtcFsxXSA9IGRhdGE7CglyYyA9IGkyY19tYXN0ZXJfc2VuZCgmdGgtPmNsdCwgKGNvbnN0IGNo YXIgKil0bXAsIDIpOwoJaWYgKHJjIDwgMCkKCQlyZXR1cm4gcmM7CglpZiAocmMgIT0gMikKCQly ZXR1cm4gLUVOT0RFVjsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50CnJlYWRfcmVnKHN0cnVjdCB0 aGVybW9zdGF0KiB0aCwgaW50IHJlZykKewoJdTggcmVnX2FkZHIsIGRhdGE7CglpbnQgcmM7CgoJ cmVnX2FkZHIgPSAodTgpcmVnOwoJcmMgPSBpMmNfbWFzdGVyX3NlbmQoJnRoLT5jbHQsICZyZWdf YWRkciwgMSk7CglpZiAocmMgPCAwKQoJCXJldHVybiByYzsKCWlmIChyYyAhPSAxKQoJCXJldHVy biAtRU5PREVWOwoJcmMgPSBpMmNfbWFzdGVyX3JlY3YoJnRoLT5jbHQsIChjaGFyICopJmRhdGEs IDEpOwoJaWYgKHJjIDwgMCkKCQlyZXR1cm4gcmM7CglyZXR1cm4gZGF0YTsKfQoKc3RhdGljIGlu dAphdHRhY2hfdGhlcm1vc3RhdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCnsKCXVuc2ln bmVkIGxvbmcgYnVzX25vOwoKCWlmIChzdHJuY21wKGFkYXB0ZXItPm5hbWUsICJ1bmktbiIsIDUp KQoJCXJldHVybiAwOwoJYnVzX25vID0gc2ltcGxlX3N0cnRvdWwoYWRhcHRlci0+bmFtZSArIDYs IE5VTEwsIDEwKTsKCWlmIChidXNfbm8gIT0gdGhlcm1fYnVzKQoJCXJldHVybiAwOwkKCXJldHVy biBhdHRhY2hfb25lX3RoZXJtb3N0YXQoYWRhcHRlciwgdGhlcm1fYWRkcmVzcywgYnVzX25vKTsK fQoKc3RhdGljIGludApkZXRhY2hfdGhlcm1vc3RhdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 KQp7CglzdHJ1Y3QgdGhlcm1vc3RhdCogdGg7CgkKCWlmICh0aGVybW9zdGF0ID09IE5VTEwpCgkJ cmV0dXJuIDA7CgoJdGggPSB0aGVybW9zdGF0OwoKCXByaW50ayhLRVJOX0lORk8gImFkdDc0Njc6 IFB1dHRpbmcgbWF4IHRlbXBlcmF0dXJlcyBiYWNrIGZyb20gJWQsICVkLCAlZCwiCgkJIiB0byAl ZCwgJWQsICVkLCAosEMpXG4iLCAKCQl0aC0+bGltaXRzWzBdLCB0aC0+bGltaXRzWzFdLCB0aC0+ bGltaXRzWzJdLAoJCXRoLT5pbml0aWFsX2xpbWl0c1swXSwgdGgtPmluaXRpYWxfbGltaXRzWzFd LCB0aC0+aW5pdGlhbF9saW1pdHNbMl0pOwoJd3JpdGVfcmVnKHRoLCBMSU1fTE9DQUwsICAgdGgt PmluaXRpYWxfbGltaXRzWzBdKTsKCXdyaXRlX3JlZyh0aCwgTElNX1JFTU9URTEsIHRoLT5pbml0 aWFsX2xpbWl0c1sxXSk7Cgl3cml0ZV9yZWcodGgsIExJTV9SRU1PVEUyLCB0aC0+aW5pdGlhbF9s aW1pdHNbMl0pOwoJd3JpdGVfZmFuX3NwZWVkKHRoLCAtMSk7CgoJdGhlcm1vc3RhdCA9IE5VTEw7 CgoJaWYgKG1vbml0b3JfcnVubmluZykgewoJCSh2b2lkKWtpbGxfcHJvYyhtb25pdG9yX3RocmVh ZF9pZCwgU0lHVEVSTSwgMSk7CgkJd2FpdF9mb3JfY29tcGxldGlvbigmbW9uaXRvcl9kZWFkKTsK CX0KCQkKCWkyY19kZXRhY2hfY2xpZW50KCZ0aC0+Y2x0KTsKCWtmcmVlKHRoKTsKCglyZXR1cm4g MDsKfQoKCi8qIFdoYXQgaXMgdGhpcyBzdXBwb3NlZCB0byBiZSA/IHJlZ2lzdGVyZWQgPyBJIGhh dGUKICogbWFnaWMgbnVtYmVycyBsaWtlIHRoYXQgLi4uCiAqLwojZGVmaW5lIEkyQ19EUklWRVJJ RF9USEVSTU9TVEFUICgweERFQUQpCgpzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGhlcm1vc3Rh dF9kcml2ZXIgPSB7ICAKCW5hbWU6CQkiQXBwbGUgVGhlcm1vc3RhdCIsCglpZDoJCUkyQ19EUklW RVJJRF9USEVSTU9TVEFULAoJZmxhZ3M6CQlJMkNfREZfTk9USUZZLAoJYXR0YWNoX2FkYXB0ZXI6 CSZhdHRhY2hfdGhlcm1vc3RhdCwKCWRldGFjaF9jbGllbnQ6CSZkZXRhY2hfdGhlcm1vc3RhdCwK CWNvbW1hbmQ6CU5VTEwsCglpbmNfdXNlOglOVUxMLAoJZGVjX3VzZToJTlVMTCAKfTsKCnN0YXRp YyBpbnQgcmVhZF9mYW5fc3BlZWQoc3RydWN0IHRoZXJtb3N0YXQgKnRoLCB1OCBhZGRyKQp7Cgl1 OCB0bXBbMl07Cgl1MTYgcmVzOwoJCgkvKiBzaG91bGQgc3RhcnQgd2l0aCBsb3cgYnl0ZSAqLwoJ dG1wWzFdID0gcmVhZF9yZWcodGgsIGFkZHIpOwoJdG1wWzBdID0gcmVhZF9yZWcodGgsIGFkZHIg KyAxKTsKCQoJcmVzID0gdG1wWzFdICsgKHRtcFswXSA8PCA4KTsKCXJldHVybiAoOTAwMDAqNjAp L3JlczsKfQoKc3RhdGljIHZvaWQgd3JpdGVfZmFuX3NwZWVkKHN0cnVjdCB0aGVybW9zdGF0ICp0 aCwgaW50IHNwZWVkKQp7Cgl1OCBtYW51YWw7CgkKCWlmIChzcGVlZCA+IDB4ZmYpIAoJCXNwZWVk ID0gMHhmZjsKCWVsc2UgaWYgKHNwZWVkIDwgLTEpIAoJCXNwZWVkID0gMDsKCQoJaWYgKHNwZWVk ID49IDApIHsKCQltYW51YWwgPSByZWFkX3JlZyh0aCwgTUFOVUFMX01PREUpOwoJCXdyaXRlX3Jl Zyh0aCwgTUFOVUFMX01PREUsIG1hbnVhbHxNQU5VQUxfTUFTSyk7CgkJaWYgKHRoLT5sYXN0X3Nw ZWVkICE9IHNwZWVkKQoJCQlwcmludGsoS0VSTl9JTkZPICJhZHQ3NDY3OiBTZXR0aW5nIHNwZWVk IHRvOiAlZFxuIiwgc3BlZWQpOwoJCXRoLT5sYXN0X3NwZWVkID0gc3BlZWQ7CgkJd3JpdGVfcmVn KHRoLCBGQU5fU1BEX1NFVCwgc3BlZWQpOwoJfSBlbHNlIHsKCQkvKiBiYWNrIHRvIGF1dG9tYXRp YyAqLwoJCW1hbnVhbCA9IHJlYWRfcmVnKHRoLCBNQU5VQUxfTU9ERSk7CgkJaWYgKHRoLT5sYXN0 X3NwZWVkICE9IC0xKQoJCQlwcmludGsoS0VSTl9JTkZPICJhZHQ3NDY3OiBTZXR0aW5nIHNwZWVk IHRvOiBhdXRvbWF0aWNcbiIpOwoJCXRoLT5sYXN0X3NwZWVkID0gLTE7CgkJd3JpdGVfcmVnKHRo LCBNQU5VQUxfTU9ERSwgbWFudWFsJih+QVVUT19NQVNLKSk7Cgl9Cn0KCnN0YXRpYyBpbnQgbW9u aXRvcl90YXNrKHZvaWQgKmFyZykKewoJc3RydWN0IHRoZXJtb3N0YXQqIHRoID0gYXJnOwoJdTgg dGVtcHNbM107Cgl1OCBsaW1zWzNdOwoJdTggaHlzdFsyXTsKI2lmZGVmIERFQlVHCglpbnQgbWZh bl9zcGVlZDsKI2VuZGlmCgkKCWxvY2tfa2VybmVsKCk7CglkYWVtb25pemUoKTsKCXVubG9ja19r ZXJuZWwoKTsKCXN0cmNweShjdXJyZW50LT5jb21tLCAidGhlcm1vc3RhdCIpOwoJbW9uaXRvcl9y dW5uaW5nID0gMTsKCgl3aGlsZSgxKQoJewoJCXNldF90YXNrX3N0YXRlKGN1cnJlbnQsIFRBU0tf SU5URVJSVVBUSUJMRSk7CgkJc2NoZWR1bGVfdGltZW91dCgxKkhaKTsKCQlpZiAoc2lnbmFsX3Bl bmRpbmcoY3VycmVudCkpCgkJCWJyZWFrOwoKCQkvKiBDaGVjayBzdGF0dXMgKi8KCQkvKiByZW1v dGUgMTogQ1BVID8qLwoJCS8qIHJlbW90ZSAyOiBHUFUgPyovCgkJdGVtcHNbMF0gID0gcmVhZF9y ZWcodGgsIFRFTVBfTE9DQUwpOwoJCXRlbXBzWzFdICA9IHJlYWRfcmVnKHRoLCBURU1QX1JFTU9U RTEpOwoJCXRlbXBzWzJdICA9IHJlYWRfcmVnKHRoLCBURU1QX1JFTU9URTIpOwoJCWxpbXNbMF0g ICA9IHJlYWRfcmVnKHRoLCBMSU1fTE9DQUwpOwoJCWxpbXNbMV0gICA9IHJlYWRfcmVnKHRoLCBM SU1fUkVNT1RFMSk7CgkJbGltc1syXSAgID0gcmVhZF9yZWcodGgsIExJTV9SRU1PVEUyKTsKCQlo eXN0WzBdICAgPSByZWFkX3JlZyh0aCwgSFlTVDApOwoJCWh5c3RbMV0gICA9IHJlYWRfcmVnKHRo LCBIWVNUMSk7CgkJCgkJaHlzdFswXSA9IChoeXN0WzBdICYgMHhmMCkgPj4gNDsKCQloeXN0WzFd ID0gKGh5c3RbMV0gJiAweGYwKSA+PiA0OwoJCQoJCWlmIChmYW5fc3BlZWQgIT0gLTEpIHsKCQkJ aWYgKHRlbXBzWzBdID4gbGltc1swXQoJCQl8fCAgdGVtcHNbMV0gPiBsaW1zWzFdCgkJCXx8ICB0 ZW1wc1syXSA+IGxpbXNbMl0pIHsKCQkJCWludCB2YXIgPSAwOwoJCQkJdmFyID0gKHRlbXBzWzBd IC0gbGltc1swXSA+IHZhcikgPyB0ZW1wc1swXSAtIGxpbXNbMF0gOiB2YXI7CgkJCQl2YXIgPSAo dGVtcHNbMV0gLSBsaW1zWzFdID4gdmFyKSA/IHRlbXBzWzFdIC0gbGltc1sxXSA6IHZhcjsKCQkJ CXZhciA9ICh0ZW1wc1syXSAtIGxpbXNbMl0gPiB2YXIpID8gdGVtcHNbMl0gLSBsaW1zWzJdIDog dmFyOwoJCQkJaWYgKHZhciA+IDgpIHsKCQkJCQlpZiAodGgtPm92ZXJyaWRpbmcgPT0gMCkKCQkJ CQkJcHJpbnRrKEtFUk5fSU5GTyAiYWR0NzQ2NzogTGltaXQgZXhjZWVkZWQgYnkgJWSwQywgb3Zl cnJpZGluZyBzcGVjaWZpZWQgZmFuIHNwZWVkLlxuIiwKCQkJCQkJCXZhcik7CgkJCQkJdGgtPm92 ZXJyaWRpbmcgPSAxOwoJCQkJCXdyaXRlX2Zhbl9zcGVlZCh0aCwgLTEpOwoJCQkJfSBlbHNlIHsK CQkJCQlpZiAodGgtPm92ZXJyaWRpbmcgPT0gMSkKCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWR0 NzQ2NzogTGltaXQgZXhjZXNzIGlzIG92ZXIsIHNldHRpbmcgc3BlZWQgdG8gc3BlY2lmaWVkLlxu Iik7CQkJCQl0aC0+b3ZlcnJpZGluZyA9IDA7CgkJCQkJd3JpdGVfZmFuX3NwZWVkKHRoLCBmYW5f c3BlZWQpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJaW50IHZhciA9IDEwOwoJCQkJdmFyID0gKGxp bXNbMF0gLSB0ZW1wc1swXSA8IHZhcikgPyBsaW1zWzBdIC0gdGVtcHNbMF0gOiB2YXI7CgkJCQl2 YXIgPSAobGltc1sxXSAtIHRlbXBzWzFdIDwgdmFyKSA/IGxpbXNbMV0gLSB0ZW1wc1sxXSA6IHZh cjsKCQkJCXZhciA9IChsaW1zWzJdIC0gdGVtcHNbMl0gPCB2YXIpID8gbGltc1syXSAtIHRlbXBz WzJdIDogdmFyOwoJCQkJaWYgKHZhciA+PSAyKSAvKiBwc2V1ZG8gaHlzdGVyZXNpcyAqLwoJCQkJ CXdyaXRlX2Zhbl9zcGVlZCh0aCwgMCk7CgkJCX0KCQl9CiNpZmRlZiBERUJVRwoJCW1mYW5fc3Bl ZWQgPSByZWFkX2Zhbl9zcGVlZCh0aCwgRkFOMF9TUEVFRCk7CgkJLyogb25seSBvbmUgZmFuIGlu IHRoZSBpQm9vayBHNCAqLwoJCQkJCgkJaWYgKHRlbXBzWzBdICE9IHRoLT5jYWNoZWRfdGVtcFsw XQoJCXx8ICB0ZW1wc1sxXSAhPSB0aC0+Y2FjaGVkX3RlbXBbMV0KCQl8fCAgdGVtcHNbMl0gIT0g dGgtPmNhY2hlZF90ZW1wWzJdKSB7CgkJCXByaW50ayhLRVJOX0lORk8gImFkdDc0Njc6IFRlbXBl cmF0dXJlIGluZm9zOiIKCQkJCQkgIiB0aGVybW9zdGF0czogJWQsJWQsJWQgsEM7IgoJCQkJCSAi IGxpbWl0czogJWQsJWQsJWQgsEM7IgoJCQkJCSAiIGZhbiBzcGVlZDogJWQgUlBNOyIKCQkJCQkg IiBoeXN0ZXJlc2lzOiAlZCwlZFxuIiwKCQkJCXRlbXBzWzBdLCB0ZW1wc1sxXSwgdGVtcHNbMl0s CgkJCQlsaW1zWzBdLCAgbGltc1sxXSwgIGxpbXNbMl0sCgkJCQltZmFuX3NwZWVkLGh5c3RbMF0s ICBoeXN0WzFdKTsKCQl9CiNlbmRpZgkJCgkJdGgtPmNhY2hlZF90ZW1wWzBdID0gdGVtcHNbMF07 CgkJdGgtPmNhY2hlZF90ZW1wWzFdID0gdGVtcHNbMV07CgkJdGgtPmNhY2hlZF90ZW1wWzJdID0g dGVtcHNbMl07Cgl9Cgltb25pdG9yX3J1bm5pbmcgPSAwOwoJY29tcGxldGVfYW5kX2V4aXQoJm1v bml0b3JfZGVhZCwgMCk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludAphdHRhY2hfb25lX3RoZXJt b3N0YXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGJ1c25vKQp7 CglzdHJ1Y3QgdGhlcm1vc3RhdCogdGg7CglpbnQgcmM7CgoJaWYgKHRoZXJtb3N0YXQpCgkJcmV0 dXJuIDA7Cgl0aCA9IChzdHJ1Y3QgdGhlcm1vc3RhdCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0 aGVybW9zdGF0KSwgR0ZQX0tFUk5FTCk7CglpZiAoIXRoKQoJCXJldHVybiAtRU5PTUVNOwoJbWVt c2V0KHRoLCAwLCBzaXplb2YoKnRoKSk7Cgl0aC0+Y2x0LmFkZHIgPSBhZGRyOwoJdGgtPmNsdC5h ZGFwdGVyID0gYWRhcHRlcjsKCXRoLT5jbHQuZHJpdmVyID0gJnRoZXJtb3N0YXRfZHJpdmVyOwoJ dGgtPmNsdC5mbGFncyA9IDA7Cgl0aC0+Y2x0LmRhdGEgPSBOVUxMOwoJc3RyY3B5KHRoLT5jbHQu bmFtZSwgInRoZXJtb3N0YXQiKTsKCglyYyA9IHJlYWRfcmVnKHRoLCAwKTsKCWlmIChyYyA8IDAp IHsKCQlwcmludGsoS0VSTl9FUlIgImFkdDc0Njc6IFRoZXJtb3N0YXQgZmFpbGVkIHRvIHJlYWQg Y29uZmlnIGZyb20gYnVzICVkICFcbiIsCgkJCWJ1c25vKTsKCQlrZnJlZSh0aCk7CgkJcmV0dXJu IC1FTk9ERVY7Cgl9CglwcmludGsoS0VSTl9JTkZPICJhZHQ3NDY3OiBBRFQ3NDY3IGluaXRpYWxp emluZ1xuIik7CgoJdGgtPmluaXRpYWxfbGltaXRzWzBdID0gcmVhZF9yZWcodGgsIExJTV9MT0NB TCk7Cgl0aC0+aW5pdGlhbF9saW1pdHNbMV0gPSByZWFkX3JlZyh0aCwgTElNX1JFTU9URTEpOwoJ dGgtPmluaXRpYWxfbGltaXRzWzJdID0gcmVhZF9yZWcodGgsIExJTV9SRU1PVEUyKTsKCXRoLT5s aW1pdHNbMF0gPSB0aC0+aW5pdGlhbF9saW1pdHNbMF0gLSBsaW1pdF9kZWNyZWFzZTsKCXRoLT5s aW1pdHNbMV0gPSB0aC0+aW5pdGlhbF9saW1pdHNbMV0gLSBsaW1pdF9kZWNyZWFzZTsKCXRoLT5s aW1pdHNbMl0gPSB0aC0+aW5pdGlhbF9saW1pdHNbMl0gLSBsaW1pdF9kZWNyZWFzZTsKCQoJcHJp bnRrKEtFUk5fSU5GTyAiYWR0NzQ2NzogTG93ZXJpbmcgbWF4IHRlbXBlcmF0dXJlcyBmcm9tICVk LCAlZCwgJWQiCgkJIiB0byAlZCwgJWQsICVkICiwQylcbiIsIAoJCXRoLT5pbml0aWFsX2xpbWl0 c1swXSwgdGgtPmluaXRpYWxfbGltaXRzWzFdLCB0aC0+aW5pdGlhbF9saW1pdHNbMl0sIAoJCXRo LT5saW1pdHNbMF0sIHRoLT5saW1pdHNbMV0sIHRoLT5saW1pdHNbMl0pOwoJd3JpdGVfcmVnKHRo LCBMSU1fTE9DQUwsICAgdGgtPmxpbWl0c1swXSk7Cgl3cml0ZV9yZWcodGgsIExJTV9SRU1PVEUx LCB0aC0+bGltaXRzWzFdKTsKCXdyaXRlX3JlZyh0aCwgTElNX1JFTU9URTIsIHRoLT5saW1pdHNb Ml0pOwoKCXRoZXJtb3N0YXQgPSB0aDsKCglpZiAoaTJjX2F0dGFjaF9jbGllbnQoJnRoLT5jbHQp KSB7CgkJcHJpbnRrKCJhZHQ3NDY3OiBUaGVybW9zdGF0IGZhaWxlZCB0byBhdHRhY2ggY2xpZW50 ICFcbiIpOwoJCXRoZXJtb3N0YXQgPSBOVUxMOwoJCWtmcmVlKHRoKTsKCQlyZXR1cm4gLUVOT0RF VjsKCX0KCglpZiAoZmFuX3NwZWVkICE9IC0xKSB7CgkJd3JpdGVfZmFuX3NwZWVkKHRoLCAwKTsK CX0gZWxzZSB7CgkJd3JpdGVfZmFuX3NwZWVkKHRoLCAtMSk7Cgl9CgkKCW1vbml0b3JfdGhyZWFk X2lkID0ga2VybmVsX3RocmVhZChtb25pdG9yX3Rhc2ssIHRoLAoJCVNJR0NITEQgfCBDTE9ORV9G UyB8IENMT05FX0ZJTEVTIHwgQ0xPTkVfU0lHSEFORCk7CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBp bnQgX19pbml0CnRoZXJtb3N0YXRfaW5pdCh2b2lkKQp7CglzdHJ1Y3QgZGV2aWNlX25vZGUqIG5w OwoJdTMyICpwcm9wOwoJCglucCA9IGZpbmRfZGV2aWNlcygiZmFuIik7CglpZiAoIW5wKQoJCXJl dHVybiAtRU5PREVWOwoJaWYgKCFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFkdDc0NjciKSkK CQlyZXR1cm4gLUVOT0RFVjsKCglwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIs IE5VTEwpOwoJaWYgKCFwcm9wKQoJCXJldHVybiAtRU5PREVWOwoJdGhlcm1fYnVzID0gKCgqcHJv cCkgPj4gOCkgJiAweDBmOwoJdGhlcm1fYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsK CglwcmludGsoS0VSTl9JTkZPICJhZHQ3NDY3OiBUaGVybW9zdGF0IGJ1czogJWQsIGFkZHJlc3M6 IDB4JTAyeCwgbGltaXRfZGVjcmVhc2U6ICVkLCBmYW5fc3BlZWQ6ICVkXG4iLAoJCXRoZXJtX2J1 cywgdGhlcm1fYWRkcmVzcywgbGltaXRfZGVjcmVhc2UsIGZhbl9zcGVlZCk7CgoJcmV0dXJuIGky Y19hZGRfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7Cn0KCnN0YXRpYyB2b2lkIF9fZXhpdAp0 aGVybW9zdGF0X2V4aXQodm9pZCkKewoJaTJjX2RlbF9kcml2ZXIoJnRoZXJtb3N0YXRfZHJpdmVy KTsKfQoKbW9kdWxlX2luaXQodGhlcm1vc3RhdF9pbml0KTsKbW9kdWxlX2V4aXQodGhlcm1vc3Rh dF9leGl0KTsK --Multipart_Sat__20_Dec_2003_15_16_24_+0100_=.NnLpsx+z?cmwRF-- ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/