Subject: Snapper on late macppc models
To: None <port-macppc@netbsd.org>
From: Marco Trillo <marcotrillo@gmail.com>
List: port-macppc
Date: 10/27/2007 13:46:56
------=_Part_430_6193767.1193485616876
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi,

There are reports on the list that snapper(4) doesn't work on late
macppc models (2005, 2006, etc.).

It appears that these models have a somewhat different OpenFirmware
layout that confuses our current drivers. In fact, Mac OS X appears to
use two(!) different I2S/TAS3004 drivers -- one for the models using
the "legacy" layout (AppleLegacyAudio) and one for the newer models
(AppleOnboardAudio).

Some patches have been posted on the list to account for some of these
differentes, but it appears that some issues were not still detected
correctly (basically some GPIO controls such as "hw-reset").

Attached to this mail is a patch to snapper.c (and a minimal patch to
deq.c) that tries to take care of these differences -- based on
OpenFirmware device properties of affected models that have been
poested on the list.

If you have a model with snapper/TAS3004 audio which doesn't work with
the current driver, please try the patch and test if it works and
report here the results. I can only test on models with "legacy"
layouts and there are no regressions on these models.

Basically, these are the changes:
 o Try to find 'platform-xxx' properties in the soundbus node. These
properties point to the nodes of the GPIO controls which are needed
(hw-reset, headphone-detect, amp-mute, etc.).

If such properties are not found, navigate through the GPIO nodes --
like the current code does.

 o Models with "legacy" layout have 'AAPL,address' properties with the
absolute address of the GPIO control. Newer models have "reg" which is
a relative address.

 o Some models use 'hw-reset' instead of 'audio-hw-reset', so look for both.

 o Make sure I2S0 is enabled. It should already be, but it's good to
check just to be on the safe side. Mac OS X code also does this.

 o Request the required clock sources for I2S0 -- the same as above.


Thanks,
     -Marco

------=_Part_430_6193767.1193485616876
Content-Type: text/plain; name=snapper.c.diff
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=snapper.c.diff

SW5kZXg6IHNuYXBwZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Fy
Y2gvbWFjcHBjL2Rldi9zbmFwcGVyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAt
dSAtcjEuMjQgc25hcHBlci5jCi0tLSBzbmFwcGVyLmMJMTggT2N0IDIwMDcgMjI6MDM6MDkgLTAw
MDAJMS4yNAorKysgc25hcHBlci5jCTI3IE9jdCAyMDA3IDExOjI0OjE3IC0wMDAwCkBAIC03Miw2
ICs3Miw3IEBACiAjZGVmaW5lIFNOQVBQRVJfU1dWT0wJCTIgLy8gc29mdHdhcmUgY29kZWMKIAkK
IAlpbnQgc2Nfbm9kZTsKKwlpbnQgc2Nfc291bmRidXM7CiAKIAlzdHJ1Y3QgYXVkaW9fZW5jb2Rp
bmdfc2V0ICpzY19lbmNvZGluZ3M7CiAKQEAgLTEwNyw3ICsxMDgsNiBAQAogCWJ1c19zcGFjZV9o
YW5kbGVfdCBzY19pZG1haDsKIAlkYmRtYV9yZWdtYXBfdCAqc2Nfb2RtYTsKIAlkYmRtYV9yZWdt
YXBfdCAqc2NfaWRtYTsKLQl1bnNpZ25lZCBjaGFyCWRiZG1hX2NtZHNwYWNlW3NpemVvZihzdHJ1
Y3QgZGJkbWFfY29tbWFuZCkgKiA0MCArIDE1XTsKIAlzdHJ1Y3QgZGJkbWFfY29tbWFuZCAqc2Nf
b2RtYWNtZDsKIAlzdHJ1Y3QgZGJkbWFfY29tbWFuZCAqc2NfaWRtYWNtZDsKIH07CkBAIC0xNDYs
NyArMTQ2LDcgQEAKIHZvaWQgc25hcHBlcl9tdXRlX2hlYWRwaG9uZShzdHJ1Y3Qgc25hcHBlcl9z
b2Z0YyAqLCBpbnQpOwogaW50IHNuYXBwZXJfY2ludCh2b2lkICopOwogaW50IHRhczMwMDRfaW5p
dChzdHJ1Y3Qgc25hcHBlcl9zb2Z0YyAqKTsKLXZvaWQgc25hcHBlcl9pbml0KHN0cnVjdCBzbmFw
cGVyX3NvZnRjICosIGludCk7Cit2b2lkIHNuYXBwZXJfaW5pdChzdHJ1Y3Qgc25hcHBlcl9zb2Z0
YyAqKTsKIAogc3RydWN0IHNuYXBwZXJfY29kZWN2YXIgewogCXN0cmVhbV9maWx0ZXJfdAliYXNl
OwpAQCAtNTQ0LDEwICs1NDQsMTAgQEAKIAkgMiwgQVVGTVRfU1RFUkVPLCA0LCB7MzIwMDAsIDQ0
MTAwLCA0ODAwMCwgOTYwMDB9fSwKIH07CiAKLXN0YXRpYyB1X2NoYXIgKmFtcF9tdXRlOwotc3Rh
dGljIHVfY2hhciAqaGVhZHBob25lX211dGU7Ci1zdGF0aWMgdV9jaGFyICphdWRpb19od19yZXNl
dDsKLXN0YXRpYyB1X2NoYXIgKmhlYWRwaG9uZV9kZXRlY3Q7CitzdGF0aWMgdV9jaGFyICphbXBf
bXV0ZSA9IE5VTEw7CitzdGF0aWMgdV9jaGFyICpoZWFkcGhvbmVfbXV0ZSA9IE5VTEw7CitzdGF0
aWMgdV9jaGFyICphdWRpb19od19yZXNldCA9IE5VTEw7CitzdGF0aWMgdV9jaGFyICpoZWFkcGhv
bmVfZGV0ZWN0ID0gTlVMTDsKIHN0YXRpYyBpbnQgaGVhZHBob25lX2RldGVjdF9hY3RpdmU7CiAK
IApAQCAtNTYxLDEzICs1NjEsMjAgQEAKIC8qIEkyU19JTlQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMg
Ki8KICNkZWZpbmUgSTJTX0lOVF9DTEtTVE9QUEVORCAweDAxMDAwMDAwICAvKiBjbG9jay1zdG9w
IGludGVycnVwdCBwZW5kaW5nICovCiAKLS8qIEZDUigweDNjKSBiaXRzICovCi0jZGVmaW5lIEtF
WUxBUkdPX0ZDUjEgICAweDNjCisvKgorICogRmVhdHVyZSBDb250cm9sIFJlZ2lzdGVyIChGQ1Ip
IG9mIEkvTyBtb2R1bGUKKyAqIFhYWCAtLSB0aGVzZSBkZWZpbml0aW9ucyBkb24ndCBiZWxvbmcg
aGVyZQorICovCisjZGVmaW5lIEtFWUxBUkdPX0ZDUjEgMHgzYwogI2RlZmluZSAgSTJTMENMS0VO
ICAgICAgMHgxMDAwCiAjZGVmaW5lICBJMlMwRU4gICAgICAgICAweDIwMDAKLSNkZWZpbmUgIEky
UzFDTEtFTiAgICAgIDB4MDgwMDAwCi0jZGVmaW5lICBJMlMxRU4gICAgICAgICAweDEwMDAwMAot
I2RlZmluZSBGQ1IzQ19CSVRNQVNLICJcMDIwXDI1STJTMUVOXDI0STJTMUNMS0VOXDE2STJTMEVO
XDE1STJTMENMS0VOIgorI2RlZmluZSAgSTJTMENFTExFTiAgICAgMHg0MDAKKyNkZWZpbmUgS0VZ
TEFSR09fRkNSMiAweDQwCisjZGVmaW5lIEtFWUxBUkdPX0ZDUjMgMHg0NAorI2RlZmluZSAgQ0xL
MThNSFpFTiAgICAweDQwMDAJLy8gZW5hYmxlIDE4TUh6IEkyUyBjbG9jaworI2RlZmluZSAgQ0xL
NDVNSFpFTiAgICAweDQwMAkvLyBlbmFibGUgNDVNSHogSTJTIGNsb2NrCisjZGVmaW5lICBDTEs0
OU1IWkVOICAgIDB4MjAwCS8vIGVuYWJsZSA0OU1IeiBJMlMgY2xvY2sKKyNkZWZpbmUgS0VZTEFS
R09fRkNSNCAweDQ4CiAKIC8qIFRBUzMwMDQvVEFTMzAwMSByZWdpc3RlcnMgKi8KICNkZWZpbmUg
REVRX01DUjEJMHgwMQkvKiBNYWluIGNvbnRyb2wgcmVnaXN0ZXIgMSAoMWJ5dGUpICovCkBAIC03
MjMsMTEgKzczMCwyNCBAQAogCWludCBjaXJxLCBvaXJxLCBpaXJxLCBjaXJxX3R5cGUsIG9pcnFf
dHlwZSwgaWlycV90eXBlOwogCWludCBzb3VuZGJ1cywgaW50cls2XTsKIAljaGFyIGNvbXBhdFsz
Ml07CisJdV9pbnQgcmVnWzZdOwogCiAJc2MgPSBkZXZpY2VfcHJpdmF0ZShzZWxmKTsKIAljYSA9
IGF1eDsKIAotCXNvdW5kYnVzID0gT0ZfY2hpbGQoY2EtPmNhX25vZGUpOworCWZvciAoc291bmRi
dXMgPSBPRl9jaGlsZChjYS0+Y2Ffbm9kZSk7IHNvdW5kYnVzOyAKKwkgICAgIHNvdW5kYnVzID0g
T0ZfcGVlcihzb3VuZGJ1cykpIHsKKwkJaWYgKE9GX2dldHByb3Aoc291bmRidXMsICJuYW1lIiwg
Y29tcGF0LCBzaXplb2YoY29tcGF0KSkgPCAyKQorCQkJY29udGludWU7CisJCWlmIChzdHJjbXAo
Y29tcGF0LCAiaTJzLWEiKSA9PSAwKQorCQkJZ290byBmb3VuZDsKKwl9CisJcHJpbnRmKCI6IGNv
dWxkbid0IGZpbmQgaTJzLWFcbiIpOworCXJldHVybjsKK2ZvdW5kOgorCXNjLT5zY19ub2RlID0g
Y2EtPmNhX25vZGU7CisJc2MtPnNjX3NvdW5kYnVzID0gc291bmRidXM7CisJCiAJYnplcm8oY29t
cGF0LCBzaXplb2YgY29tcGF0KTsKIAlPRl9nZXRwcm9wKE9GX2NoaWxkKHNvdW5kYnVzKSwgImNv
bXBhdGlibGUiLCBjb21wYXQsIHNpemVvZiBjb21wYXQpOwogCkBAIC03MzcsMTMgKzc1NywxMyBA
QAogCWlmIChzYy0+c2NfbW9kZSA9PSBTTkFQUEVSX0lTX1RBUzMwMDEpIHsKIAkJaWYgKGF1Y29u
dl9jcmVhdGVfZW5jb2RpbmdzKHR1bWJsZXJfZm9ybWF0cywgVFVNQkxFUl9ORk9STUFUUywKIAkJ
CQkmc2MtPnNjX2VuY29kaW5ncykgIT0gMCkgewotCQkJYXByaW50X25vcm1hbCgiY2FuJ3QgY3Jl
YXRlIGVuY29kaW5nc1xuIik7CisJCQlhcHJpbnRfbm9ybWFsKCI6IGNhbid0IGNyZWF0ZSBlbmNv
ZGluZ3NcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGF1Y29udl9jcmVh
dGVfZW5jb2RpbmdzKHNuYXBwZXJfZm9ybWF0cywgU05BUFBFUl9ORk9STUFUUywKIAkJCQkmc2Mt
PnNjX2VuY29kaW5ncykgIT0gMCkgewotCQkJYXByaW50X25vcm1hbCgiY2FuJ3QgY3JlYXRlIGVu
Y29kaW5nc1xuIik7CisJCQlhcHJpbnRfbm9ybWFsKCI6IGNhbid0IGNyZWF0ZSBlbmNvZGluZ3Nc
biIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNzUzLDE3ICs3NzMsMjAgQEAKIAlzYy0+c2Nf
aWRtYWNtZCA9IGRiZG1hX2FsbG9jKChTTkFQUEVSX01BWFBBR0VTICsgNCkgKiAKIAkJCQkgICAg
IHNpemVvZihzdHJ1Y3QgZGJkbWFfY29tbWFuZCkpOwogCisJaWYgKE9GX2dldHByb3Aoc291bmRi
dXMsICJyZWciLCByZWcsIHNpemVvZihyZWcpKSA8IHNpemVvZihyZWcpKSB7CisJCXByaW50Zigi
OiBjb3VsZG4ndCBmaW5kICdyZWcnIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuOworCX0KIAlzYy0+
c2NfYmFzZWFkZHIgPSBjYS0+Y2FfYmFzZWFkZHI7Ci0JY2EtPmNhX3JlZ1swXSArPSBjYS0+Y2Ff
YmFzZWFkZHI7Ci0JY2EtPmNhX3JlZ1syXSArPSBjYS0+Y2FfYmFzZWFkZHI7Ci0JY2EtPmNhX3Jl
Z1s0XSArPSBjYS0+Y2FfYmFzZWFkZHI7CisJcmVnWzBdICs9IGNhLT5jYV9iYXNlYWRkcjsKKwly
ZWdbMl0gKz0gY2EtPmNhX2Jhc2VhZGRyOworCXJlZ1s0XSArPSBjYS0+Y2FfYmFzZWFkZHI7CiAK
LQlzYy0+c2Nfbm9kZSA9IGNhLT5jYV9ub2RlOwogCXNjLT5zY190YWcgPSBjYS0+Y2FfdGFnOwot
CWJ1c19zcGFjZV9tYXAoc2MtPnNjX3RhZywgY2EtPmNhX3JlZ1swXSwgY2EtPmNhX3JlZ1sxXSwg
MCwgJnNjLT5zY19ic2gpOwotCWJ1c19zcGFjZV9tYXAoc2MtPnNjX3RhZywgY2EtPmNhX3JlZ1sy
XSwgY2EtPmNhX3JlZ1szXSwKKwlidXNfc3BhY2VfbWFwKHNjLT5zY190YWcsIHJlZ1swXSwgcmVn
WzFdLCAwLCAmc2MtPnNjX2JzaCk7CisJYnVzX3NwYWNlX21hcChzYy0+c2NfdGFnLCByZWdbMl0s
IHJlZ1szXSwKIAkgICAgQlVTX1NQQUNFX01BUF9MSU5FQVIsICZzYy0+c2Nfb2RtYWgpOwotCWJ1
c19zcGFjZV9tYXAoc2MtPnNjX3RhZywgY2EtPmNhX3JlZ1s0XSwgY2EtPmNhX3JlZ1s1XSwKKwli
dXNfc3BhY2VfbWFwKHNjLT5zY190YWcsIHJlZ1s0XSwgcmVnWzVdLAogCSAgICBCVVNfU1BBQ0Vf
TUFQX0xJTkVBUiwgJnNjLT5zY19pZG1haCk7CiAJc2MtPnNjX29kbWEgPSBidXNfc3BhY2VfdmFk
ZHIoc2MtPnNjX3RhZywgc2MtPnNjX29kbWFoKTsKIAlzYy0+c2NfaWRtYSA9IGJ1c19zcGFjZV92
YWRkcihzYy0+c2NfdGFnLCBzYy0+c2NfaWRtYWgpOwpAQCAtODE5LDEwICs4NDIsOCBAQAogCQli
cmVhazsKIAl9CiAKKwlzbmFwcGVyX2luaXQoc2MpOwogCWF1ZGlvX2F0dGFjaF9taSgmc25hcHBl
cl9od19pZiwgc2MsICZzYy0+c2NfZGV2KTsKLQotCS8qIGtpMmNfc2V0bW9kZShzYy0+c2NfaTJj
LCBJMkNfU1REU1VCTU9ERSk7ICovCi0Jc25hcHBlcl9pbml0KHNjLCBzYy0+c2Nfbm9kZSk7CiB9
CiAKIGludApAQCAtMjAwNCw4MSArMjAyNSwxMjEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRp
YyB2b2lkCitncGlvX3NldHVwKHN0cnVjdCBzbmFwcGVyX3NvZnRjICpzYywgaW50IG5vZGUsIHVf
Y2hhciAqKmFkZHIpCit7CisJYm9vbCByID0gZmFsc2U7CisJaW50IGludHJbMl0gPSB7LTEsIC0x
fTsKKworCWlmIChPRl9nZXRwcm9wKG5vZGUsICJBQVBMLGFkZHJlc3MiLCBhZGRyLCBzaXplb2Yo
KmFkZHIpKSA9PSBzaXplb2YoKmFkZHIpKQorCQlyID0gdHJ1ZTsKKwllbHNlIGlmIChPRl9nZXRw
cm9wKG5vZGUsICJyZWciLCBhZGRyLCBzaXplb2YoKmFkZHIpKSA9PSBzaXplb2YoKmFkZHIpKSB7
CisJCSphZGRyICs9IHNjLT5zY19iYXNlYWRkcjsKKwkJciA9IHRydWU7CisJfQorCisJaWYgKHIg
JiYgYWRkciA9PSAmaGVhZHBob25lX2RldGVjdCkgeworCQlPRl9nZXRwcm9wKG5vZGUsICJhdWRp
by1ncGlvLWFjdGl2ZS1zdGF0ZSIsCisJCQkgJmhlYWRwaG9uZV9kZXRlY3RfYWN0aXZlLAorCQkJ
IHNpemVvZihoZWFkcGhvbmVfZGV0ZWN0X2FjdGl2ZSkpOworCQlPRl9nZXRwcm9wKG5vZGUsICJp
bnRlcnJ1cHRzIiwgaW50ciwgc2l6ZW9mKGludHIpKTsKKwkJaWYgKGludHJbMF0gIT0gLTEpCisJ
CQlpbnRyX2VzdGFibGlzaChpbnRyWzBdLCBJU1RfRURHRSwgSVBMX0FVRElPLCBzbmFwcGVyX2Np
bnQsIHNjKTsKKwl9Cit9CisKIHZvaWQKLXNuYXBwZXJfaW5pdChzdHJ1Y3Qgc25hcHBlcl9zb2Z0
YyAqc2MsIGludCBub2RlKQorc25hcHBlcl9pbml0KHN0cnVjdCBzbmFwcGVyX3NvZnRjICpzYykK
IHsKLQlpbnQgZ3BpbzsKLQlpbnQgaGVhZHBob25lX2RldGVjdF9pbnRyLCBoZWFkcGhvbmVfZGV0
ZWN0X2ludHJ0eXBlOwotI2lmZGVmIFNOQVBQRVJfREVCVUcKLQljaGFyIGZjclszMl07CisJaW50
IG5vZGUgPSBzYy0+c2Nfbm9kZSwgc291bmRidXMgPSBzYy0+c2Nfc291bmRidXMsIGdwaW87CisJ
aW50IGksIG47CisJdWludDMyX3QgeCwgdmFsOworCWNoYXIgbmFtZVs2NF07CisJc3RhdGljIGNv
bnN0IHN0cnVjdCBncGlvX2NvbnRyb2wgeworIAkJY29uc3QgY2hhciAgICAgICpnY19uYW1lOwor
IAkJdV9jaGFyICAgICAgICAgICoqZ2NfYWRkcjsKKwl9IGdwaW9fY29udHJvbHNbXSA9IHsKKyAJ
CXsiaGVhZHBob25lLW11dGUiLCAmaGVhZHBob25lX211dGV9LAorIAkJeyJhbXAtbXV0ZSIsICZh
bXBfbXV0ZX0sCisgCQl7ImhlYWRwaG9uZS1kZXRlY3QiLCAmaGVhZHBob25lX2RldGVjdH0sCisJ
CXsiYXVkaW8taHctcmVzZXQiLCAmYXVkaW9faHdfcmVzZXR9LAorCSAJeyJody1yZXNldCIsICZh
dWRpb19od19yZXNldH0KKyAJfTsKKwluID0gc2l6ZW9mKGdwaW9fY29udHJvbHMpIC8gc2l6ZW9m
KGdwaW9fY29udHJvbHNbMF0pOwogCi0JYml0bWFza19zbnByaW50ZihpbjMycmIoc2MtPnNjX2Jh
c2VhZGRyICsgS0VZTEFSR09fRkNSMSksIEZDUjNDX0JJVE1BU0ssIAkgICAgZmNyLCBzaXplb2Yg
ZmNyKTsKLQlwcmludGYoIkZDUigweDNjKSAweCVzXG4iLCBmY3IpOwotI2VuZGlmCi0JaGVhZHBo
b25lX2RldGVjdF9pbnRyID0gLTE7CisJLyoKKwkgKiBGaW5kIHRoZSBHUElPIGNvbnRyb2xzIHdl
IG5lZWQuCisJICogVHJ5IHBsYXRmb3JtIGZ1bmN0aW9ucyBmaXJzdAorCSAqLworCWZvciAoaSA9
IDA7IGkgPCBuOyArK2kpIHsKKwkJc3RyY3B5KG5hbWUsICJwbGF0Zm9ybS0iKTsKKwkJc3RyY2F0
KG5hbWUsIGdwaW9fY29udHJvbHNbaV0uZ2NfbmFtZSk7CisKKwkJaWYgKE9GX2dldHByb3Aoc291
bmRidXMsIG5hbWUsICZncGlvLCBzaXplb2YoZ3BpbykpID09IAorCQkgICAgc2l6ZW9mKGdwaW8p
ICYmIGdwaW8pCisJCQlncGlvX3NldHVwKHNjLCBncGlvLCBncGlvX2NvbnRyb2xzW2ldLmdjX2Fk
ZHIpOworCX0KIAotCWdwaW8gPSBnZXRub2RlYnluYW1lKE9GX3BhcmVudChub2RlKSwgImdwaW8i
KTsKLQlEUFJJTlRGKCIgL2dwaW8gMHgleFxuIiwgZ3Bpbyk7Ci0JZ3BpbyA9IE9GX2NoaWxkKGdw
aW8pOwotCXdoaWxlIChncGlvKSB7Ci0JCWNoYXIgbmFtZVs2NF0sIGF1ZGlvX2dwaW9bNjRdOwot
CQlpbnQgaW50clsyXTsKLQkJY2hhciAqYWRkcjsKLQotCQliemVybyhuYW1lLCBzaXplb2YgbmFt
ZSk7Ci0JCWJ6ZXJvKGF1ZGlvX2dwaW8sIHNpemVvZiBhdWRpb19ncGlvKTsKLQkJYWRkciA9IDA7
Ci0JCU9GX2dldHByb3AoZ3BpbywgIm5hbWUiLCBuYW1lLCBzaXplb2YgbmFtZSk7Ci0JCU9GX2dl
dHByb3AoZ3BpbywgImF1ZGlvLWdwaW8iLCBhdWRpb19ncGlvLCBzaXplb2YgYXVkaW9fZ3Bpbyk7
Ci0JCU9GX2dldHByb3AoZ3BpbywgIkFBUEwsYWRkcmVzcyIsICZhZGRyLCBzaXplb2YgYWRkcik7
Ci0JCURQUklOVEYoIiAweCV4ICVzICVzXG4iLCBncGlvLCBuYW1lLCBhdWRpb19ncGlvKTsKLQot
CQkvKiBncGlvNSAqLwotCQlpZiAoc3RyY21wKGF1ZGlvX2dwaW8sICJoZWFkcGhvbmUtbXV0ZSIp
ID09IDApCi0JCQloZWFkcGhvbmVfbXV0ZSA9IGFkZHI7Ci0JCS8qIGdwaW82ICovCi0JCWlmIChz
dHJjbXAoYXVkaW9fZ3BpbywgImFtcC1tdXRlIikgPT0gMCkKLQkJCWFtcF9tdXRlID0gYWRkcjsK
LQkJLyogZXh0aW50LWdwaW8xNSAqLwotCQlpZiAoc3RyY21wKGF1ZGlvX2dwaW8sICJoZWFkcGhv
bmUtZGV0ZWN0IikgPT0gMCkgewotCQkJaGVhZHBob25lX2RldGVjdCA9IGFkZHI7Ci0JCQlPRl9n
ZXRwcm9wKGdwaW8sICJhdWRpby1ncGlvLWFjdGl2ZS1zdGF0ZSIsCi0JCQkgICAgJmhlYWRwaG9u
ZV9kZXRlY3RfYWN0aXZlLCA0KTsKLQkJCU9GX2dldHByb3AoZ3BpbywgImludGVycnVwdHMiLCBp
bnRyLCA4KTsKLQkJCWhlYWRwaG9uZV9kZXRlY3RfaW50ciA9IGludHJbMF07Ci0JCQloZWFkcGhv
bmVfZGV0ZWN0X2ludHJ0eXBlID0gaW50clsxXTsKKwkvKiB3YWxrIHRocm91Z2ggR1BJTyBub2Rl
cyAqLworCWlmICgoIWhlYWRwaG9uZV9tdXRlIHx8ICFhbXBfbXV0ZSB8fCAhaGVhZHBob25lX2Rl
dGVjdCAKKwkgICAgIHx8ICFhdWRpb19od19yZXNldCkgJiYgCisJICAgIChncGlvID0gZ2V0bm9k
ZWJ5bmFtZShPRl9wYXJlbnQobm9kZSksICJncGlvIikpKSB7CisJCXVfY2hhciAqYWRkcjsKKwkJ
CisJCWZvciAoZ3BpbyA9IE9GX2NoaWxkKGdwaW8pOyBncGlvOyBncGlvID0gT0ZfcGVlcihncGlv
KSkgeworCQkJYnplcm8obmFtZSwgc2l6ZW9mIG5hbWUpOworCQkJYWRkciA9IDA7CisJCQorCQkJ
aWYgKE9GX2dldHByb3AoZ3BpbywgImF1ZGlvLWdwaW8iLCBuYW1lLCBzaXplb2YobmFtZSkpIAor
CQkJICAgIDwgMiAmJiAKKwkJCSAgICBPRl9nZXRwcm9wKGdwaW8sICJuYW1lIiwgbmFtZSwgc2l6
ZW9mKG5hbWUpKSA8IDIpCisJCQkJY29udGludWU7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyAr
K2kpIHsKKwkJCQlpZiAoKihncGlvX2NvbnRyb2xzW2ldLmdjX2FkZHIpICE9IE5VTEwpCisJCQkJ
CWNvbnRpbnVlOworCQkJCWlmIChzdHJjbXAobmFtZSwgZ3Bpb19jb250cm9sc1tpXS5nY19uYW1l
KSA9PSAwKQorCQkJCQlncGlvX3NldHVwKHNjLCBncGlvLCAKKwkJCQkJCSAgIGdwaW9fY29udHJv
bHNbaV0uZ2NfYWRkcik7CisJCQl9CiAJCX0KLQkJLyogZ3BpbzExIChrZXl3ZXN0LTExKSAqLwot
CQlpZiAoc3RyY21wKGF1ZGlvX2dwaW8sICJhdWRpby1ody1yZXNldCIpID09IDApCi0JCQlhdWRp
b19od19yZXNldCA9IGFkZHI7Ci0JCWdwaW8gPSBPRl9wZWVyKGdwaW8pOwotCX0KLQlEUFJJTlRG
KCIgaGVhZHBob25lLW11dGUgJXBcbiIsIGhlYWRwaG9uZV9tdXRlKTsKLQlEUFJJTlRGKCIgYW1w
LW11dGUgJXBcbiIsIGFtcF9tdXRlKTsKLQlEUFJJTlRGKCIgaGVhZHBob25lLWRldGVjdCAlcFxu
IiwgaGVhZHBob25lX2RldGVjdCk7Ci0JRFBSSU5URigiIGhlYWRwaG9uZS1kZXRlY3QgYWN0aXZl
ICV4XG4iLCBoZWFkcGhvbmVfZGV0ZWN0X2FjdGl2ZSk7Ci0JRFBSSU5URigiIGhlYWRwaG9uZS1k
ZXRlY3QgaW50ciAleFxuIiwgaGVhZHBob25lX2RldGVjdF9pbnRyKTsKLQlEUFJJTlRGKCIgYXVk
aW8taHctcmVzZXQgJXBcbiIsIGF1ZGlvX2h3X3Jlc2V0KTsKLQotCWlmIChoZWFkcGhvbmVfZGV0
ZWN0X2ludHIgIT0gLTEpCi0JCWludHJfZXN0YWJsaXNoKGhlYWRwaG9uZV9kZXRlY3RfaW50ciwg
SVNUX0VER0UsIElQTF9BVURJTywKLQkJICAgIHNuYXBwZXJfY2ludCwgc2MpOworCX0KKwlpZiAo
IWhlYWRwaG9uZV9tdXRlIHx8ICFhbXBfbXV0ZSB8fCAhaGVhZHBob25lX2RldGVjdCB8fCAKKwkg
ICAgIWF1ZGlvX2h3X3Jlc2V0KQorCQlwYW5pYygic25hcHBlcl9pbml0Iik7CiAKLQlzYy0+c2Nf
cmF0ZSA9IDQ0MTAwOwkvKiBkZWZhdWx0IHJhdGUgKi8KKwkvKiBkZWZhdWx0IHBhcmFtZXRlcnMg
Ki8KKwlzYy0+c2NfcmF0ZSA9IDQ0MTAwOwogCXNjLT5zY19iaXRzcGVyc2FtcGxlID0gMTY7CiAK
KwkvKiB1cGRhdGUgaGVhZHBob25lIHN0YXR1cz8gKi8KKwlzbmFwcGVyX2NpbnQoc2MpOworCiAJ
LyogRW5hYmxlIGhlYWRwaG9uZSBpbnRlcnJ1cHQ/ICovCiAJKmhlYWRwaG9uZV9kZXRlY3QgfD0g
MHg4MDsKIAlfX2FzbSB2b2xhdGlsZSAoImVpZWlvIik7CiAKLQkvKiBpMmNfc2V0X3BvcnQocG9y
dCk7ICovCisJLyogRW5hYmxlIEkyUzA/ICovCisJeCA9IGluMzJyYihzYy0+c2NfYmFzZWFkZHIg
KyBLRVlMQVJHT19GQ1IxKTsKKwl2YWwgPSBJMlMwRU4gfCBJMlMwQ0VMTEVOIHwgSTJTMENMS0VO
OworCWlmICgoeCAmIHZhbCkgIT0gdmFsKSB7CisJCXByaW50ZigiJXM6IGVuYWJsaW5nIEkyUzBc
biIsIGRldmljZV94bmFtZSgmc2MtPnNjX2RldikpOworCQlvdXQzMnJiKHNjLT5zY19iYXNlYWRk
ciArIEtFWUxBUkdPX0ZDUjEsIHggfCB2YWwpOworCX0KKworCS8qIHJlcXVlc3QgY2xvY2sgc291
cmNlcz8gKi8KKwl4ID0gaW4zMnJiKHNjLT5zY19iYXNlYWRkciArIEtFWUxBUkdPX0ZDUjMpOwor
CXZhbCA9IENMSzE4TUhaRU4gfCBDTEs0NU1IWkVOIHwgQ0xLNDlNSFpFTjsKKwlpZiAoKHggJiB2
YWwpICE9IHZhbCkgeworCQlwcmludGYoIiVzOiByZXF1ZXN0aW5nIEkyUzAgY2xvY2sgc291cmNl
c1xuIiwgCisJCSAgICAgICBkZXZpY2VfeG5hbWUoJnNjLT5zY19kZXYpKTsKKwkJb3V0MzJyYihz
Yy0+c2NfYmFzZWFkZHIgKyBLRVlMQVJHT19GQ1IzLCB4IHwgdmFsKTsKKwl9CiAKKwkvKiBpMmNf
c2V0X3BvcnQocG9ydCk7ICovCiAJaWYgKHRhczMwMDRfaW5pdChzYykpCiAJCXJldHVybjsKIAot
CS8qIFVwZGF0ZSBoZWFkcGhvbmUgc3RhdHVzLiAqLwotCXNuYXBwZXJfY2ludChzYyk7Ci0KIAlz
bmFwcGVyX3NldF92b2x1bWUoc2MsIDEyOCwgMTI4KTsKIAlzbmFwcGVyX3NldF9iYXNzKHNjLCAx
MjgpOwogCXNuYXBwZXJfc2V0X3RyZWJsZShzYywgMTI4KTsK
------=_Part_430_6193767.1193485616876
Content-Type: text/plain; name=deq.c.diff
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=deq.c.diff

SW5kZXg6IGRlcS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC9t
YWNwcGMvZGV2L2RlcS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcjEuMyBk
ZXEuYwotLS0gZGVxLmMJMTcgSmFuIDIwMDcgMjM6MDU6NDkgLTAwMDAJMS4zCisrKyBkZXEuYwky
NyBPY3QgMjAwNyAxMToyNTo0MCAtMDAwMApAQCAtNjQsNyArNjQsOCBAQAogCXN0cnVjdCBraTJj
X2NvbmZhcmdzICprYSA9IGF1eDsKIAljaGFyIGNvbXBhdFszMl07CiAJCi0JaWYgKHN0cmNtcChr
YS0+a2FfbmFtZSwgImRlcSIpICE9IDApCisJaWYgKHN0cmNtcChrYS0+a2FfbmFtZSwgImRlcSIp
ICE9IDAgJiYgCisJICAgIHN0cmNtcChrYS0+a2FfbmFtZSwgImNvZGVjIikgIT0gMCkKIAkJcmV0
dXJuIDA7CiAKIAltZW1zZXQoY29tcGF0LCAwLCBzaXplb2YoY29tcGF0KSk7Cg==
------=_Part_430_6193767.1193485616876--