Date: Thu, 16 Nov 2000 16:53:57 +0000 From: Jamie Heckford <heckfordj@psi-domain.co.uk> To: freebsd-hackers@freebsd.org Subject: New sound driver Message-ID: <00111616571802.00211@freefire.psi-domain.co.uk>
next in thread | raw e-mail | index | archive | help
--Boundary-=_WfAZyzAZOHsNGHcxSfUBSnsNWfUJ Content-Type: text/plain Content-Transfer-Encoding: 8bit Hi, I tried to get my onboard intel AC'97 card to work, and used a third party driver to get success (written by Katsurajima Naoto) The following card is: pcm0: <Intel 82801AA AC'97 audio port 0xdc00-0xdc3f,0xd800-0xd8ff irq 5 at device 31.5 on pci0 This wasn't supported by FreeBSD first off, but after inclusion of the attached driver to the kernel, all i did was recompile with device pcm and it worked. Any chance someone with commit privs. could take a look at the source and *maybe* include it in FreeBSD? Thanks, -- Jamie Heckford Chief Network Engineer Psi-Domain - Innovative Linux Solutions. Ask Us How. =================================== email: heckfordj@psi-domain.co.uk web: http://www.psi-domain.co.uk/ tel: +44 (0)1737 789 246 fax: +44 (0)1737 789 245 mobile: +44 (0)7779 646 529 =================================== --Boundary-=_WfAZyzAZOHsNGHcxSfUBSnsNWfUJ Content-Type: text/english; name="ich.c" Content-Transfer-Encoding: base64 Content-Description: ICH.C Driver Source Content-Disposition: attachment; filename="ich.c" LyoKICogQ29weXJpZ2h0IChjKSAyMDAwIEthdHN1cmFqaW1hIE5hb3RvIDxyYXZlbkBrYXRzdXJh amltYS5zZXlhLnlva29oYW1hLmpwPgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT IElTJycgQU5ECiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSSU4gQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEVQT1NTSUJJTElU WSBPRgogKiBTVUNIIERBTUFHRS4KICoKICogJEZyZWVCU0QkCiAqLwoKI2luY2x1ZGUgPGRldi9z b3VuZC9wY20vc291bmQuaD4KI2luY2x1ZGUgPGRldi9zb3VuZC9wY20vYWM5Ny5oPgoKI2luY2x1 ZGUgPHBjaS9wY2lyZWcuaD4KI2luY2x1ZGUgPHBjaS9wY2l2YXIuaD4KCgovKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLwoKI2RlZmluZSBJQ0hfUkVDUFJJTUFSWSAwCgojZGVmaW5lIElDSF9USU1FT1VUIDEwMDAg Lyogc2VtYXBob3JlIHRpbWVvdXQgcG9sbGluZyBjb3VudCAqLwoKI2RlZmluZSBQQ0lSX05BTUJB UiAweDEwCiNkZWZpbmUgUENJUl9OQUJNQkFSIDB4MTQKCi8qIE5hdGl2ZSBBdWRpbyBCdXMgTWFz dGVyIENvbnRyb2wgUmVnaXN0ZXJzICovCiNkZWZpbmUgSUNIX1JFR19QSV9CREJBUiAweDAwCiNk ZWZpbmUgSUNIX1JFR19QSV9DSVYgICAweDA0CiNkZWZpbmUgSUNIX1JFR19QSV9MVkkgICAweDA1 CiNkZWZpbmUgSUNIX1JFR19QSV9TUiAgICAweDA2CiNkZWZpbmUgSUNIX1JFR19QSV9QSUNCICAw eDA4CiNkZWZpbmUgSUNIX1JFR19QSV9QSVYgICAweDBhCiNkZWZpbmUgSUNIX1JFR19QSV9DUiAg ICAweDBiCiNkZWZpbmUgSUNIX1JFR19QT19CREJBUiAweDEwCiNkZWZpbmUgSUNIX1JFR19QT19D SVYgICAweDE0CiNkZWZpbmUgSUNIX1JFR19QT19MVkkgICAweDE1CiNkZWZpbmUgSUNIX1JFR19Q T19TUiAgICAweDE2CiNkZWZpbmUgSUNIX1JFR19QT19QSUNCICAweDE4CiNkZWZpbmUgSUNIX1JF R19QT19QSVYgICAweDFhCiNkZWZpbmUgSUNIX1JFR19QT19DUiAgICAweDFiCiNkZWZpbmUgSUNI X1JFR19NQ19CREJBUiAweDIwCiNkZWZpbmUgSUNIX1JFR19NQ19DSVYgICAweDI0CiNkZWZpbmUg SUNIX1JFR19NQ19MVkkgICAweDI1CiNkZWZpbmUgSUNIX1JFR19NQ19TUiAgICAweDI2CiNkZWZp bmUgSUNIX1JFR19NQ19QSUNCICAweDI4CiNkZWZpbmUgSUNIX1JFR19NQ19QSVYgICAweDJhCiNk ZWZpbmUgSUNIX1JFR19NQ19DUiAgICAweDJiCiNkZWZpbmUgSUNIX1JFR19HTE9CX0NOVCAweDJj CiNkZWZpbmUgSUNIX1JFR19HTE9CX1NUQSAweDMwCiNkZWZpbmUgSUNIX1JFR19BQ0NfU0VNQSAw eDM0Ci8qIFN0YXR1cyBSZWdpc3RlciBWYWx1ZXMgKi8KI2RlZmluZSBJQ0hfWF9TUl9EQ0ggICAw eDAwMDEKI2RlZmluZSBJQ0hfWF9TUl9DRUxWICAweDAwMDIKI2RlZmluZSBJQ0hfWF9TUl9MVkJD SSAweDAwMDQKI2RlZmluZSBJQ0hfWF9TUl9CQ0lTICAweDAwMDgKI2RlZmluZSBJQ0hfWF9TUl9G SUZPRSAweDAwMTAKLyogQ29udHJvbCBSZWdpc3RlciBWYWx1ZXMgKi8KI2RlZmluZSBJQ0hfWF9D Ul9SUEJNICAweDAxCiNkZWZpbmUgSUNIX1hfQ1JfUlIgICAgMHgwMgojZGVmaW5lIElDSF9YX0NS X0xWQklFIDB4MDQKI2RlZmluZSBJQ0hfWF9DUl9GRUlFICAweDA4CiNkZWZpbmUgSUNIX1hfQ1Jf SU9DRSAgMHgxMAovKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciBWYWx1ZXMgKi8KI2RlZmluZSBJ Q0hfR0xPQl9DVExfR0lFICAweDAwMDAwMDAxCiNkZWZpbmUgSUNIX0dMT0JfQ1RMX0NPTEQgMHgw MDAwMDAwMiAvKiBuZWdhdGUgKi8KI2RlZmluZSBJQ0hfR0xPQl9DVExfV0FSTSAweDAwMDAwMDA0 CiNkZWZpbmUgSUNIX0dMT0JfQ1RMX1NIVVQgMHgwMDAwMDAwOAojZGVmaW5lIElDSF9HTE9CX0NU TF9QUkVTIDB4MDAwMDAwMTAKI2RlZmluZSBJQ0hfR0xPQl9DVExfU1JFUyAweDAwMDAwMDIwCi8q IEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgVmFsdWVzICovCiNkZWZpbmUgSUNIX0dMT0JfU1RBX0dT Q0kgICAweDAwMDAwMDAxCiNkZWZpbmUgSUNIX0dMT0JfU1RBX01JSU5UICAweDAwMDAwMDAyCiNk ZWZpbmUgSUNIX0dMT0JfU1RBX01PSU5UICAweDAwMDAwMDA0CiNkZWZpbmUgSUNIX0dMT0JfU1RB X1BJSU5UICAweDAwMDAwMDIwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1BPSU5UICAweDAwMDAwMDQw CiNkZWZpbmUgSUNIX0dMT0JfU1RBX01JTlQgICAweDAwMDAwMDgwCiNkZWZpbmUgSUNIX0dMT0Jf U1RBX1BDUiAgICAweDAwMDAwMTAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1NDUiAgICAweDAwMDAw MjAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1BSRVMgICAweDAwMDAwNDAwCiNkZWZpbmUgSUNIX0dM T0JfU1RBX1NSRVMgICAweDAwMDAwODAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1NMT1QxMiAweDAw MDA3MDAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1JDT0RFQyAweDAwMDA4MDAwCiNkZWZpbmUgSUNI X0dMT0JfU1RBX0FEMyAgICAweDAwMDEwMDAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX01EMyAgICAw eDAwMDIwMDAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX0lNQVNLICAoSUNIX0dMT0JfU1RBX01JSU5U IHwgSUNIX0dMT0JfU1RBX01PSU5UIHwgSUNIX0dMT0JfU1RBX1BJSU5UIHwgSUNIX0dMT0JfU1RB X1BPSU5UIHwgSUNIX0dMT0JfU1RBX01JTlQgfCBJQ0hfR0xPQl9TVEFfUFJFUyB8IElDSF9HTE9C X1NUQV9TUkVTKQoKLyogQUMnOTcgcG93ZXIvcmVhZHkgZnVuY3Rpb25zICovCiNkZWZpbmUgQUM5 N19QT1dFUl9QSU5QT1dFUiAgMHgwMTAwCiNkZWZpbmUgQUM5N19QT1dFUl9QSU5SRUFEWSAgMHgw MDAxCiNkZWZpbmUgQUM5N19QT1dFUl9QT1VUUE9XRVIgMHgwMjAwCiNkZWZpbmUgQUM5N19QT1dF Ul9QT1VUUkVBRFkgMHgwMDAyCgovKiBwbGF5L3JlY29yZCBidWZmZXIgKi8KI2RlZmluZSBJQ0hf RklGT0lOREVYIDMyCiNkZWZpbmUgSUNIX0JEQ19JT0MgMHg4MDAwMDAwMAojZGVmaW5lIElDSF9C RENfQlVQIDB4NDAwMDAwMDAKI2RlZmluZSBJQ0hfREVGQVVMVF9CTE9DS1NaIDIwNDgKLyogYnVm ZmVyIGRlc2NyaXB0b3IgKi8Kc3RydWN0IGljaF9kZXNjIHsKCXZvbGF0aWxlIHVfaW50MzJfdCBi dWZmZXI7Cgl2b2xhdGlsZSB1X2ludDMyX3QgbGVuZ3RoOwp9OwoKc3RydWN0IHNjX2luZm87Cgov KiBjaGFubmVsIHJlZ2lzdGVycyAqLwpzdHJ1Y3Qgc2NfY2hpbmZvIHsKCWludCBydW4sIHNwZCwg ZGlyLCBmbXQ7CglzbmRfZGJ1ZiAqYnVmZmVyOwoJcGNtX2NoYW5uZWwgKmNoYW5uZWw7CglzdHJ1 Y3Qgc2NfaW5mbyAqcGFyZW50OwoJc3RydWN0IGljaF9kZXNjICppbmRleDsKCXVfaW50MzJfdCBs dmk7Cn07CgovKiBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCnN0cnVjdCBzY19pbmZvIHsKCWRldmlj ZV90CWRldjsKCXVfaW50MzJfdCAJdHlwZSwgcmV2OwoJdV9pbnQzMl90CWNkMmlkLCBjdHJsYmFz ZTsKCglzdHJ1Y3QgcmVzb3VyY2UgKm5hbWJhciwgKm5hYm1iYXI7CglpbnQJCW5hbWJhcmlkLCBu YWJtYmFyaWQ7CglidXNfc3BhY2VfdGFnX3QgbmFtYmFydCwgbmFibWJhcnQ7CglidXNfc3BhY2Vf aGFuZGxlX3QgbmFtYmFyaCwgbmFibWJhcmg7CglidXNfZG1hX3RhZ190IHBhcmVudF9kbWF0OwoJ c3RydWN0IHJlc291cmNlICppcnE7CglpbnQJCWlycWlkOwoJdm9pZAkJKmloOwoKCXN0cnVjdCBh Yzk3X2luZm8gKmNvZGVjOwoJc3RydWN0IHNjX2NoaW5mbyAqcGksICpwbzsKfTsKCnN0cnVjdCB7 Cgl1X2ludDMyX3QgZGV2LCBzdWJkZXY7CgljaGFyICpuYW1lOwoJdV9pbnQzMl90ICptY29kZTsK fSBpY2hfZGV2c1tdID0gewovKiBCZXdhcmUsIHRoaW5ncyBrbm93IHRoZSBpbmRleGVzIGhlcmUg Ki8KCXsweDcxOTU4MDg2LCAwLCAiSW50ZWwgNDQzTVggQUMnOTcgYXVkaW8iLCBOVUxMfSwKCXsw eDI0MTU4MDg2LCAwLCAiSW50ZWwgODI4MDFBQSBBQyc5NyBhdWRpbyIsIE5VTEx9LAoJezB4MjQy NTgwODYsIDAsICJJbnRlbCA4MjkwMUFCIEFDJzk3IGF1ZGlvIiwgTlVMTH0sCgl7MHgyNDQ1ODA4 NiwgMCwgIkludGVsIDgyODAxQkEgQUMnOTcgYXVkaW8iLCBOVUxMfSwKCXswLCAwLCBOVUxMLCBO VUxMfQp9OwoKLyogdmFyaWFibGUgcmF0ZSBhdWRpbyAqLwpzdGF0aWMgdV9pbnQxNl90IGljaF9y YXRlW10gPSB7CiAgICA4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCA0NDEwMCwgNDgwMDAsIDAK fTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCgovKgogKiBwcm90b3R5cGVzCiAqLwoKLyogY2hhbm5lbCBp bnRlcmZhY2UgKi8Kc3RhdGljIHZvaWQgKmljaHBjaGFuX2luaXQodm9pZCAqZGV2aW5mbywgc25k X2RidWYgKmIsIHBjbV9jaGFubmVsICpjLCBpbnQgZGlyKTsKc3RhdGljIGludCBpY2hwY2hhbl9z ZXRkaXIodm9pZCAqZGF0YSwgaW50IGRpcik7CnN0YXRpYyBpbnQgaWNocGNoYW5fc2V0Zm9ybWF0 KHZvaWQgKmRhdGEsIHVfaW50MzJfdCBmb3JtYXQpOwpzdGF0aWMgaW50IGljaHBjaGFuX3NldHNw ZWVkKHZvaWQgKmRhdGEsIHVfaW50MzJfdCBzcGVlZCk7CnN0YXRpYyBpbnQgaWNocGNoYW5fc2V0 YmxvY2tzaXplKHZvaWQgKmRhdGEsIHVfaW50MzJfdCBibG9ja3NpemUpOwpzdGF0aWMgaW50IGlj aHBjaGFuX3RyaWdnZXIodm9pZCAqZGF0YSwgaW50IGdvKTsKc3RhdGljIGludCBpY2hwY2hhbl9n ZXRwdHIodm9pZCAqZGF0YSk7CnN0YXRpYyBwY21jaGFuX2NhcHMgKmljaHBjaGFuX2dldGNhcHMo dm9pZCAqZGF0YSk7CgpzdGF0aWMgdm9pZCAqaWNocmNoYW5faW5pdCh2b2lkICpkZXZpbmZvLCBz bmRfZGJ1ZiAqYiwgcGNtX2NoYW5uZWwgKmMsIGludCBkaXIpOwpzdGF0aWMgaW50IGljaHJjaGFu X3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGlyKTsKc3RhdGljIGludCBpY2hyY2hhbl9zZXRmb3Jt YXQodm9pZCAqZGF0YSwgdV9pbnQzMl90IGZvcm1hdCk7CnN0YXRpYyBpbnQgaWNocmNoYW5fc2V0 c3BlZWQodm9pZCAqZGF0YSwgdV9pbnQzMl90IHNwZWVkKTsKc3RhdGljIGludCBpY2hyY2hhbl9z ZXRibG9ja3NpemUodm9pZCAqZGF0YSwgdV9pbnQzMl90IGJsb2Nrc2l6ZSk7CnN0YXRpYyBpbnQg aWNocmNoYW5fdHJpZ2dlcih2b2lkICpkYXRhLCBpbnQgZ28pOwpzdGF0aWMgaW50IGljaHJjaGFu X2dldHB0cih2b2lkICpkYXRhKTsKc3RhdGljIHBjbWNoYW5fY2FwcyAqaWNocmNoYW5fZ2V0Y2Fw cyh2b2lkICpkYXRhKTsKCi8qIHRhbGsgdG8gdGhlIGNvZGVjIC0gY2FsbGVkIGZyb20gYWM5Ny5j ICovCnN0YXRpYyB1X2ludDMyX3QgaWNoX3JkY2Qodm9pZCAqLCBpbnQpOwpzdGF0aWMgdm9pZCAg CSBpY2hfd3JjZCh2b2lkICosIGludCwgdV9pbnQzMl90KTsKCi8qIHN0dWZmICovCnN0YXRpYyBp bnQgICAgICAgaWNoX2luaXQoc3RydWN0IHNjX2luZm8gKik7CnN0YXRpYyB2b2lkICAgICAgaWNo X2ludHIodm9pZCAqKTsKCi8qIHRhbGsgdG8gdGhlIGNhcmQgKi8Kc3RhdGljIHVfaW50MzJfdCBp Y2hfcmQoc3RydWN0IHNjX2luZm8gKiwgaW50LCBpbnQpOwpzdGF0aWMgdm9pZCAJIGljaF93cihz dHJ1Y3Qgc2NfaW5mbyAqLCBpbnQsIHVfaW50MzJfdCwgaW50KTsKCi8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CgpzdGF0aWMgdV9pbnQzMl90IGljaF9yZWNmbXRbXSA9IHsKCUFGTVRfU1RFUkVPIHwgQUZNVF9T MTZfTEUsCgkwCn07CnN0YXRpYyBwY21jaGFuX2NhcHMgaWNoX3JlY2NhcHMgPSB7ODAwMCwgNDgw MDAsIGljaF9yZWNmbXQsIDB9OwoKc3RhdGljIHVfaW50MzJfdCBpY2hfcGxheWZtdFtdID0gewoJ QUZNVF9TVEVSRU8gfCBBRk1UX1MxNl9MRSwKCTAKfTsKc3RhdGljIHBjbWNoYW5fY2FwcyBpY2hf cGxheWNhcHMgPSB7ODAwMCwgNDgwMDAsIGljaF9wbGF5Zm10LCAwfTsKCnN0YXRpYyBwY21fY2hh bm5lbCBpY2hfcGNoYW50ZW1wbGF0ZSA9IHsKCWljaHBjaGFuX2luaXQsCglpY2hwY2hhbl9zZXRk aXIsCglpY2hwY2hhbl9zZXRmb3JtYXQsCglpY2hwY2hhbl9zZXRzcGVlZCwKCWljaHBjaGFuX3Nl dGJsb2Nrc2l6ZSwKCWljaHBjaGFuX3RyaWdnZXIsCglpY2hwY2hhbl9nZXRwdHIsCglpY2hwY2hh bl9nZXRjYXBzLAp9OwoKc3RhdGljIHBjbV9jaGFubmVsIGljaF9yY2hhbnRlbXBsYXRlID0gewoJ aWNocmNoYW5faW5pdCwKCWljaHJjaGFuX3NldGRpciwKCWljaHJjaGFuX3NldGZvcm1hdCwKCWlj aHJjaGFuX3NldHNwZWVkLAoJaWNocmNoYW5fc2V0YmxvY2tzaXplLAoJaWNocmNoYW5fdHJpZ2dl ciwKCWljaHJjaGFuX2dldHB0ciwKCWljaHJjaGFuX2dldGNhcHMsCn07CgovKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLwovKiBIYXJkd2FyZSAqLwpzdGF0aWMgdV9pbnQzMl90CmljaF9yZChzdHJ1Y3Qgc2NfaW5m byAqc2MsIGludCByZWdubywgaW50IHNpemUpCnsKCXN3aXRjaCAoc2l6ZSkgewoJY2FzZSAxOgoJ CXJldHVybiBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8p OwoJY2FzZSAyOgoJCXJldHVybiBidXNfc3BhY2VfcmVhZF8yKHNjLT5uYW1iYXJ0LCBzYy0+bmFt YmFyaCwgcmVnbm8pOwoJY2FzZSA0OgoJCXJldHVybiBidXNfc3BhY2VfcmVhZF80KHNjLT5uYW1i YXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8pOwoJZGVmYXVsdDoKCQlyZXR1cm4gMHhmZmZmZmZmZjsK CX0KfQoKc3RhdGljIHZvaWQKaWNoX3dyKHN0cnVjdCBzY19pbmZvICpzYywgaW50IHJlZ25vLCB1 X2ludDMyX3QgZGF0YSwgaW50IHNpemUpCnsKCXN3aXRjaCAoc2l6ZSkgewoJY2FzZSAxOgoJCWJ1 c19zcGFjZV93cml0ZV8xKHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8sIGRhdGEpOwoJ CWJyZWFrOwoJY2FzZSAyOgoJCWJ1c19zcGFjZV93cml0ZV8yKHNjLT5uYW1iYXJ0LCBzYy0+bmFt YmFyaCwgcmVnbm8sIGRhdGEpOwoJCWJyZWFrOwoJY2FzZSA0OgoJCWJ1c19zcGFjZV93cml0ZV80 KHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8sIGRhdGEpOwoJCWJyZWFrOwoJfQp9Cgov KiBhYzk3IGNvZGVjICovCnN0YXRpYyBpbnQKaWNoX3dhaXRjZCh2b2lkICpkZXZpbmZvKQp7Cglp bnQgaTsKCXVfaW50MzJfdCBkYXRhOwoJc3RydWN0IHNjX2luZm8gKnNjID0gKHN0cnVjdCBzY19p bmZvICopZGV2aW5mbzsKCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCWRhdGEg PSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLAoJCSAgICBJQ0hf UkVHX0FDQ19TRU1BKTsKCQlpZiAoKGRhdGEgJiAweDAxKSA9PSAwKQoJCQlyZXR1cm4gMDsKCX0K CWRldmljZV9wcmludGYoc2MtPmRldiwgIkNPREVDIHNlbWFwaG9yZSB0aW1lb3V0XG4iKTsKCXJl dHVybiBFVElNRURPVVQ7Cn0KCnN0YXRpYyB1X2ludDMyX3QKaWNoX3JkY2Qodm9pZCAqZGV2aW5m bywgaW50IHJlZ25vKQp7CglzdHJ1Y3Qgc2NfaW5mbyAqc2MgPSAoc3RydWN0IHNjX2luZm8gKilk ZXZpbmZvOwoJcmVnbm8gJj0gMHhmZjsKI2lmKDApCglkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJp Y2hfcmRjZChzYywgMHglMDJ4KVxuIiwgcmVnbm8pOwojZW5kaWYKCWljaF93YWl0Y2Qoc2MpOwoJ cmV0dXJuIGljaF9yZChzYywgcmVnbm8sIDIpOwp9CgpzdGF0aWMgdm9pZAppY2hfd3JjZCh2b2lk ICpkZXZpbmZvLCBpbnQgcmVnbm8sIHVfaW50MzJfdCBkYXRhKQp7CglzdHJ1Y3Qgc2NfaW5mbyAq c2MgPSAoc3RydWN0IHNjX2luZm8gKilkZXZpbmZvOwoJcmVnbm8gJj0gMHhmZjsKI2lmKDApCglk ZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJpY2hfd3JjZChzYywgMHglMDJ4LCAweCUwNHgpXG4iLCBy ZWdubywgZGF0YSk7CiNlbmRpZgoJaWNoX3dhaXRjZChzYyk7CglpY2hfd3Ioc2MsIHJlZ25vLCBk YXRhLCAyKTsKfQoKLyogY2hhbm5lbCBjb21tb24gcm91dGluZXMgKi8Kc3RhdGljIHZvaWQKaWNo Y2hhbl9zZXRtYXAodm9pZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWcs IGludCBlcnJvcikKewoJc3RydWN0IHNjX2NoaW5mbyAqY2ggPSBhcmc7CgoJaWYgKGJvb3R2ZXJi b3NlKSB7CgkJZGV2aWNlX3ByaW50ZihjaC0+cGFyZW50LT5kZXYsICJzZXRtYXAoMHglbHgsIDB4 JWx4KVxuIiwgKHVuc2lnbmVkIGxvbmcpc2Vncy0+ZHNfYWRkciwgKHVuc2lnbmVkIGxvbmcpc2Vn cy0+ZHNfbGVuKTsKCX0KfQoKc3RhdGljIGludAppY2hjaGFuX2luaXRidWYoc3RydWN0IHNjX2No aW5mbyAqY2gpCnsKCXN0cnVjdCBzY19pbmZvICpzYyA9IGNoLT5wYXJlbnQ7CglidXNfZG1hbWFw X3QgbWFwOwoJaW50IGk7CgoJY2gtPmJ1ZmZlci0+YnVmID0gTlVMTDsKCWNoLT5idWZmZXItPmJ1 ZnNpemUgPSBJQ0hfREVGQVVMVF9CTE9DS1NaICogSUNIX0ZJRk9JTkRFWDsKCWlmIChjaG5fYWxs b2NidWYoY2gtPmJ1ZmZlciwgc2MtPnBhcmVudF9kbWF0KSkgewoJCWZyZWUoY2gsIE1fREVWQlVG KTsKCQlyZXR1cm4gLTE7Cgl9CglpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+cGFyZW50X2RtYXQs KHZvaWQgKiopJmNoLT5pbmRleCwgQlVTX0RNQV9OT1dBSVQsICZtYXApKSB7CgkJZnJlZShjaCwg TV9ERVZCVUYpOwoJCXJldHVybiAtMTsKCX0KCWlmIChidXNfZG1hbWFwX2xvYWQoc2MtPnBhcmVu dF9kbWF0LCBtYXAsIGNoLT5pbmRleCwKCSAgICBzaXplb2Yoc3RydWN0IGljaF9kZXNjKSAqIElD SF9GSUZPSU5ERVgsIGljaGNoYW5fc2V0bWFwLCBjaCwgMCkpIHsKCQlmcmVlKGNoLCBNX0RFVkJV Rik7CgkJcmV0dXJuIC0xOwoJfQoJZm9yIChpID0gMDtpIDwgSUNIX0ZJRk9JTkRFWDtpKyspIHsK CQljaC0+aW5kZXhbaV0uYnVmZmVyID0gdnRvcGh5cyhjaC0+YnVmZmVyLT5idWYpICsKCQkgICAg SUNIX0RFRkFVTFRfQkxPQ0tTWiAqIGk7CgkJaWYgKGNoLT5kaXIgPT0gUENNRElSX1BMQVkpCgkJ CWNoLT5pbmRleFtpXS5sZW5ndGggPSAwOwoJCWVsc2UKCQkJY2gtPmluZGV4W2ldLmxlbmd0aCA9 IElDSF9CRENfSU9DICsKCQkJICAgIElDSF9ERUZBVUxUX0JMT0NLU1ogLyAyOwoJfQoJcmV0dXJu IDA7Cn0KCi8qIHBsYXkgY2hhbm5lbCBpbnRlcmZhY2UgKi8Kc3RhdGljIGludAppY2hwY2hhbl9w b3dlcihzdHJ1Y3Qgc2NfaW5mbyAqc2MsIGludCBzdykKewoJdV9pbnQzMl90IGNyOwoJaW50IGk7 CgoJY3IgPSBpY2hfcmRjZChzYywgQUM5N19SRUdfUE9XRVIpOwoJaWYgKHN3KSB7IC8qIHBvd2Vy IG9uICovCgkJY3IgJj0gfkFDOTdfUE9XRVJfUE9VVFBPV0VSOwoJCWljaF93cmNkKHNjLCBBQzk3 X1JFR19QT1dFUiwgY3IpOwoJCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCQlj ciA9IGljaF9yZGNkKHNjLCBBQzk3X1JFR19QT1dFUik7CgkJCWlmICgoY3IgJiBBQzk3X1BPV0VS X1BPVVRSRUFEWSkgIT0gMCkKCQkJCWJyZWFrOwoJCX0KCX0KCWVsc2UgeyAvKiBwb3dlciBvZmYg Ki8KCQljciB8PSBBQzk3X1BPV0VSX1BPVVRQT1dFUjsKCQlpY2hfd3JjZChzYywgQUM5N19SRUdf UE9XRVIsIGNyKTsKCQlmb3IgKGkgPSAwO2kgPCBJQ0hfVElNRU9VVDtpKyspIHsKCQkJY3IgPSBp Y2hfcmRjZChzYywgQUM5N19SRUdfUE9XRVIpOwoJCQlpZiAoKGNyICYgQUM5N19QT1dFUl9QT1VU UkVBRFkpID09IDApCgkJCQlicmVhazsKCQl9Cgl9CglpZiAoaSA9PSBJQ0hfVElNRU9VVCkKCQly ZXR1cm4gLTE7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgKgppY2hwY2hhbl9pbml0KHZvaWQg KmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAqYywgaW50IGRpcikKewoJc3RydWN0 IHNjX2luZm8gKnNjID0gZGV2aW5mbzsKCXN0cnVjdCBzY19jaGluZm8gKmNoOwoJdV9pbnQzMl90 IGNyOwoJaW50IGk7CgojaWYoMCkKCWRldmljZV9wcmludGYoc2MtPmRldiwgImljaHBjaGFuX2lu aXQoMHglMDh4LCAweCUwOHgsIDB4JTA4eCwgJWQpXG4iLCBkZXZpbmZvLCBiLCBjLCBkaXIpOwoj ZW5kaWYKCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hf UkVHX1BPX0NSLCAwKTsKCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1i YXJoLCBJQ0hfUkVHX1BPX0NSLAoJICAgIElDSF9YX0NSX1JSKTsKCWZvciAoaSA9IDA7aSA8IElD SF9USU1FT1VUO2krKykgewoJCWNyID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFibWJhcnQsIHNj LT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19QT19DUik7CgkJaWYgKGNyID09IDApCgkJCWJyZWFr OwoJfQoJaWYgKGkgPT0gSUNIX1RJTUVPVVQpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJj YW5ub3QgcmVzZXQgcGxheSBjb2RlY1xuIik7CgkJcmV0dXJuIE5VTEw7Cgl9CglpZiAoaWNocGNo YW5fcG93ZXIoc2MsIDEpID09IC0xKSB7CgkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAicGxheSBE QUMgbm90IHJlYWR5XG4iKTsKCQlyZXR1cm4gTlVMTDsKCX0KCWljaHBjaGFuX3Bvd2VyKHNjLCAw KTsKCWlmICgoY2ggPSBtYWxsb2Moc2l6ZW9mKCpjaCksIE1fREVWQlVGLCBNX05PV0FJVCkpID09 IE5VTEwpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgY2hhbm5l bCBpbmZvIGFyZWFcbiIpOwoJCXJldHVybiBOVUxMOwoJfQoJY2gtPmJ1ZmZlciA9IGI7CgljaC0+ Y2hhbm5lbCA9IGM7CgljaC0+cGFyZW50ID0gc2M7CgljaC0+ZGlyID0gUENNRElSX1BMQVk7Cglj aC0+cnVuID0gMDsKCWNoLT5sdmkgPSAwOwoJaWYgKGljaGNoYW5faW5pdGJ1ZihjaCkpIHsKCQlk ZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgY2hhbm5lbCBidWZmZXJcbiIp OwoJCXJldHVybiBOVUxMOwoJfQoJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+ bmFibWJhcmgsIElDSF9SRUdfUE9fQkRCQVIsCgkgICAgKHVfaW50MzJfdCl2dG9waHlzKGNoLT5p bmRleCkpOwoJc2MtPnBvID0gY2g7CglpZiAoYm9vdHZlcmJvc2UpIHsKCQlkZXZpY2VfcHJpbnRm KHNjLT5kZXYsIlBsYXkgY29kZWMgc3VwcG9ydCByYXRlKEh6KTogIik7CgkJZm9yIChpID0gMDtp Y2hfcmF0ZVtpXSAhPSAwO2krKykgewoJCQlpZiAoaWNocGNoYW5fc2V0c3BlZWQoY2gsIGljaF9y YXRlW2ldKSA9PSBpY2hfcmF0ZVtpXSkgewoJCQkJcHJpbnRmKCIlZCAiLCBpY2hfcmF0ZVtpXSk7 CgkJCX0KCQl9CgkJcHJpbnRmKCJcbiIpOwoJfQoJcmV0dXJuIGNoOwp9CgpzdGF0aWMgaW50Cmlj aHBjaGFuX3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGlyKQp7CiNpZigwKQoJc3RydWN0IHNjX2No aW5mbyAqY2ggPSBkYXRhOwoJZGV2aWNlX3ByaW50ZihjaC0+cGFyZW50LT5kZXYsICJpY2hwY2hh bl9zZXRkaXIoMHglMDh4LCAlZClcbiIsIGRhdGEsIGRpcik7CiNlbmRpZgoJcmV0dXJuIDA7Cn0K CnN0YXRpYyBpbnQKaWNocGNoYW5fc2V0Zm9ybWF0KHZvaWQgKmRhdGEsIHVfaW50MzJfdCBmb3Jt YXQpCnsKCXN0cnVjdCBzY19jaGluZm8gKmNoID0gZGF0YTsKCiNpZigwKQoJZGV2aWNlX3ByaW50 ZihjaC0+cGFyZW50LT5kZXYsICJpY2hwY2hhbl9zZXRmb3JtYXQoMHglMDh4LCAweCUwOHgpXG4i LCBkYXRhLCBmb3JtYXQpOwojZW5kaWYKCWNoLT5mbXQgPSBmb3JtYXQ7CglyZXR1cm4gMDsKfQoK c3RhdGljIGludAppY2hwY2hhbl9zZXRzcGVlZCh2b2lkICpkYXRhLCB1X2ludDMyX3Qgc3BlZWQp CnsKCXN0cnVjdCBzY19jaGluZm8gKmNoID0gZGF0YTsKCXVfaW50MzJfdCBleHRjYXA7CgojaWYo MCkKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fc2V0c3BlZWQoMHgl MDh4LCAlZClcbiIsIGRhdGEsIHNwZWVkKTsKI2VuZGlmCglleHRjYXAgPSBpY2hfcmRjZChjaC0+ cGFyZW50LCBBQzk3X1JFR0VYVF9JRCk7CglpZiAoZXh0Y2FwICYgQUM5N19FWFRDQVBfVlJBKSB7 CgkJaWNoX3dyY2QoY2gtPnBhcmVudCwgQUM5N19SRUdFWFRfRkRBQ1JBVEUsIHNwZWVkKTsKCQlj aC0+c3BkID0gaWNoX3JkY2QoY2gtPnBhcmVudCwgQUM5N19SRUdFWFRfRkRBQ1JBVEUpOwoJfQoJ ZWxzZSB7CgkJY2gtPnNwZCA9IDQ4MDAwOyAvKiBiZWZvcmUgQUMnOTcgUjIuMCAqLwoJfQojaWYo MCkKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fc2V0c3BlZWQoKTpj aC0+c3BkID0gJWRcbiIsIGNoLT5zcGQpOwojZW5kaWYKCXJldHVybiBjaC0+c3BkOwp9CgpzdGF0 aWMgaW50CmljaHBjaGFuX3NldGJsb2Nrc2l6ZSh2b2lkICpkYXRhLCB1X2ludDMyX3QgYmxvY2tz aXplKQp7CglyZXR1cm4gYmxvY2tzaXplOwp9CgovKiB1cGRhdGUgaW5kZXggKi8Kc3RhdGljIHZv aWQKaWNocGNoYW5fdXBkYXRlKHN0cnVjdCBzY19jaGluZm8gKmNoKQp7CglzdHJ1Y3Qgc2NfaW5m byAqc2MgPSBjaC0+cGFyZW50OwoJdV9pbnQzMl90IGx2aTsKCWludCBmcDsKCWludCBsYXN0OwoJ aW50IGk7CgojaWYoMCkKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5f dXBkYXRlKClcbiIpOwojZW5kaWYKCWZwID0gY2gtPmJ1ZmZlci0+ZnA7CglsYXN0ID0gZnAgLSAx OwoJaWYgKGxhc3QgPCAwKQoJCWxhc3QgPSBJQ0hfREVGQVVMVF9CTE9DS1NaICogSUNIX0ZJRk9J TkRFWCAtIDE7CglsdmkgPSBsYXN0IC8gSUNIX0RFRkFVTFRfQkxPQ0tTWjsKCWlmIChsdmkgPj0g Y2gtPmx2aSkgewoJCWZvciAoaSA9IGNoLT5sdmk7aSA8IGx2aTtpKyspCgkJCWNoLT5pbmRleFtp XS5sZW5ndGggPQoJCQkgICAgSUNIX0JEQ19JT0MgKyBJQ0hfREVGQVVMVF9CTE9DS1NaIC8gMjsK CQljaC0+aW5kZXhbaV0ubGVuZ3RoID0gSUNIX0JEQ19JT0MgKyBJQ0hfQkRDX0JVUAoJCSAgICAr IChsYXN0ICUgSUNIX0RFRkFVTFRfQkxPQ0tTWiArIDEpIC8gMjsKCX0KCWVsc2UgewoJCWZvciAo aSA9IGNoLT5sdmk7aSA8IElDSF9GSUZPSU5ERVg7aSsrKQoJCQljaC0+aW5kZXhbaV0ubGVuZ3Ro ID0KCQkJICAgIElDSF9CRENfSU9DICsgSUNIX0RFRkFVTFRfQkxPQ0tTWiAvIDI7CgkJZm9yIChp ID0gMDtpIDwgbHZpO2krKykKCQkJY2gtPmluZGV4W2ldLmxlbmd0aCA9CgkJCSAgICBJQ0hfQkRD X0lPQyArIElDSF9ERUZBVUxUX0JMT0NLU1ogLyAyOwoJCWNoLT5pbmRleFtpXS5sZW5ndGggPSBJ Q0hfQkRDX0lPQyArIElDSF9CRENfQlVQCgkJICAgICsgKGxhc3QgJSBJQ0hfREVGQVVMVF9CTE9D S1NaICsgMSkgLyAyOwoJfQoJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFi bWJhcmgsIElDSF9SRUdfUE9fTFZJLCBsdmkpOwoJY2gtPmx2aSA9IGx2aTsKI2lmKDApCglkZXZp Y2VfcHJpbnRmKGNoLT5wYXJlbnQtPmRldiwgImljaHBjaGFuX3VwZGF0ZSgpOmZwID0gJWQsIGx2 aSA9ICVkXG4iLCBmcCwgbHZpKTsKI2VuZGlmCglyZXR1cm47Cn0Kc3RhdGljIHZvaWQKaWNocGNo YW5fZmlsbGJsYW5rKHN0cnVjdCBzY19jaGluZm8gKmNoKQp7CglzdHJ1Y3Qgc2NfaW5mbyAqc2Mg PSBjaC0+cGFyZW50OwoKCWNoLT5sdmkrKzsKCWlmIChjaC0+bHZpID09IElDSF9GSUZPSU5ERVgp CgkJY2gtPmx2aSA9IDA7CgliemVybyhjaC0+YnVmZmVyLT5idWYgKyBJQ0hfREVGQVVMVF9CTE9D S1NaICogY2gtPmx2aSwKCSAgICBJQ0hfREVGQVVMVF9CTE9DS1NaKTsKCWNoLT5pbmRleFtjaC0+ bHZpXS5sZW5ndGggPSBJQ0hfQkRDX0JVUCArIElDSF9ERUZBVUxUX0JMT0NLU1ogLyAyOwoJYnVz X3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUE9fTFZJ LCBjaC0+bHZpKTsKCXJldHVybjsKfQovKiBzZW1hbnRpYyBub3RlOiBtdXN0IHN0YXJ0IGF0IGJl Z2lubmluZyBvZiBidWZmZXIgKi8Kc3RhdGljIGludAppY2hwY2hhbl90cmlnZ2VyKHZvaWQgKmRh dGEsIGludCBnbykKewoJc3RydWN0IHNjX2NoaW5mbyAqY2ggPSBkYXRhOwoJc3RydWN0IHNjX2lu Zm8gKnNjID0gY2gtPnBhcmVudDsKCXVfaW50MzJfdCBjcjsKCWludCBpOwoKI2lmKDApCglkZXZp Y2VfcHJpbnRmKGNoLT5wYXJlbnQtPmRldiwgImljaHBjaGFuX3RyaWdnZXIoMHglMDh4LCAlZClc biIsIGRhdGEsIGdvKTsKI2VuZGlmCglzd2l0Y2ggKGdvKSB7CgljYXNlIFBDTVRSSUdfU1RBUlQ6 CiNpZigwKQoJCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fdHJpZ2dl cigpOlBDTVRSSUdfU1RBUlRcbiIpOwojZW5kaWYKCQljaC0+cnVuID0gMTsKCQlpY2hwY2hhbl9w b3dlcihzYywgMSk7CgkJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJh cmgsIElDSF9SRUdfUE9fQkRCQVIsCgkJICAgICh1X2ludDMyX3QpdnRvcGh5cyhjaC0+aW5kZXgp KTsKCQljaC0+bHZpID0gSUNIX0ZJRk9JTkRFWCAtIDE7CgkJaWNocGNoYW5fdXBkYXRlKGNoKTsK CQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19Q T19DUiwKCQkgICAgSUNIX1hfQ1JfUlBCTSB8IElDSF9YX0NSX0xWQklFIHwgSUNIX1hfQ1JfSU9D RSB8CgkJICAgIElDSF9YX0NSX0ZFSUUpOwoJCWJyZWFrOwoJY2FzZSBQQ01UUklHX1NUT1A6CiNp ZigwKQoJCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fdHJpZ2dlcigp OlBDTVRSSUdfU1RPUFxuIik7CiNlbmRpZgoJCWNyID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFi bWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19QT19DUik7CgkJYnVzX3NwYWNlX3dy aXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUE9fQ1IsCgkJICAgIGNy ICYgfklDSF9YX0NSX1JQQk0pOwoJCWljaHBjaGFuX3Bvd2VyKHNjLCAwKTsKCQljaC0+cnVuID0g MDsKCQlicmVhazsKCWNhc2UgUENNVFJJR19BQk9SVDoKI2lmKDApCgkJZGV2aWNlX3ByaW50Zihj aC0+cGFyZW50LT5kZXYsICJpY2hwY2hhbl90cmlnZ2VyKCk6UENNVFJJR19BQk9SVFxuIik7CiNl bmRpZgoJCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hf UkVHX1BPX0NSLAoJCSAgICAwKTsKCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNj LT5uYWJtYmFyaCwgSUNIX1JFR19QT19DUiwKCQkgICAgSUNIX1hfQ1JfUlIpOwoJCWZvciAoaSA9 IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCQljciA9IGJ1c19zcGFjZV9yZWFkXzEoc2MtPm5h Ym1iYXJ0LCBzYy0+bmFibWJhcmgsCgkJCSAgICBJQ0hfUkVHX1BPX0NSKTsKCQkJaWYgKGNyID09 IDApCgkJCQlicmVhazsKCQl9CgkJaWNocGNoYW5fcG93ZXIoc2MsIDApOwoJCWNoLT5ydW4gPSAw OwoJCWNoLT5sdmkgPSAwOwoJCWNoLT5jaGFubmVsLT5mbGFncyAmPSB+Q0hOX0ZfREVBRDsKCQli cmVhazsKCWRlZmF1bHQ6CgkJYnJlYWs7Cgl9CglyZXR1cm4gMDsKfQoKc3RhdGljIGludAppY2hw Y2hhbl9nZXRwdHIodm9pZCAqZGF0YSkKewoJc3RydWN0IHNjX2NoaW5mbyAqY2ggPSBkYXRhOwoJ c3RydWN0IHNjX2luZm8gKnNjID0gY2gtPnBhcmVudDsKCXVfaW50MzJfdCBjaTsKCiNpZigwKQoJ ZGV2aWNlX3ByaW50ZihjaC0+cGFyZW50LT5kZXYsICJpY2hwY2hhbl9nZXRwdHIoMHglMDh4KVxu IiwgZGF0YSk7CiNlbmRpZgoJY2kgPSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2Mt Pm5hYm1iYXJoLCBJQ0hfUkVHX1BPX0NJVik7CiNpZigwKQoJZGV2aWNlX3ByaW50ZihjaC0+cGFy ZW50LT5kZXYsICJpY2hwY2hhbl9nZXRwdHIoKTpJQ0hfUkVHX1BPX0NJViA9ICVkXG4iLCBjaSk7 CiNlbmRpZgoJLyoKCWlmIChjaSA9PSAwKQoJCXJldHVybiBJQ0hfREVGQVVMVF9CTE9DS1NaICog SUNIX0ZJRk9JTkRFWCAtIDE7CgllbHNlCgkJcmV0dXJuIElDSF9ERUZBVUxUX0JMT0NLU1ogKiBj aSAtIDE7CgkqLwoJcmV0dXJuIElDSF9ERUZBVUxUX0JMT0NLU1ogKiBjaTsKfQoKc3RhdGljIHBj bWNoYW5fY2FwcyAqCmljaHBjaGFuX2dldGNhcHModm9pZCAqZGF0YSkKewojaWYoMCkKCXN0cnVj dCBzY19jaGluZm8gKmNoID0gZGF0YTsKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAi aWNocGNoYW5fZ2V0Y2FwcygweCUwOHgpXG4iLCBkYXRhKTsKI2VuZGlmCglyZXR1cm4gJmljaF9w bGF5Y2FwczsKfQoKLyogcmVjb3JkIGNoYW5uZWwgaW50ZXJmYWNlICovCnN0YXRpYyBpbnQKaWNo cmNoYW5fcG93ZXIoc3RydWN0IHNjX2luZm8gKnNjLCBpbnQgc3cpCnsKCXVfaW50MzJfdCBjcjsK CWludCBpOwoKCWNyID0gaWNoX3JkY2Qoc2MsIEFDOTdfUkVHX1BPV0VSKTsKCWlmIChzdykgeyAv KiBwb3dlciBvbiAqLwoJCWNyICY9IH5BQzk3X1BPV0VSX1BJTlBPV0VSOwoJCWljaF93cmNkKHNj LCBBQzk3X1JFR19QT1dFUiwgY3IpOwoJCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykg ewoJCQljciA9IGljaF9yZGNkKHNjLCBBQzk3X1JFR19QT1dFUik7CgkJCWlmICgoY3IgJiBBQzk3 X1BPV0VSX1BJTlJFQURZKSAhPSAwKQoJCQkJYnJlYWs7CgkJfQoJfQoJZWxzZSB7IC8qIHBvd2Vy IG9mZiAqLwoJCWNyIHw9IEFDOTdfUE9XRVJfUElOUE9XRVI7CgkJaWNoX3dyY2Qoc2MsIEFDOTdf UkVHX1BPV0VSLCBjcik7CgkJZm9yIChpID0gMDtpIDwgSUNIX1RJTUVPVVQ7aSsrKSB7CgkJCWNy ID0gaWNoX3JkY2Qoc2MsIEFDOTdfUkVHX1BPV0VSKTsKCQkJaWYgKChjciAmIEFDOTdfUE9XRVJf UElOUkVBRFkpID09IDApCgkJCQlicmVhazsKCQl9Cgl9CglpZiAoaSA9PSBJQ0hfVElNRU9VVCkK CQlyZXR1cm4gLTE7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgKgppY2hyY2hhbl9pbml0KHZv aWQgKmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAqYywgaW50IGRpcikKewoJc3Ry dWN0IHNjX2luZm8gKnNjID0gZGV2aW5mbzsKCXN0cnVjdCBzY19jaGluZm8gKmNoOwoJdV9pbnQz Ml90IGNyOwoJaW50IGk7CgoJLyogcmVzZXQgY29kZWMgKi8KCWJ1c19zcGFjZV93cml0ZV8xKHNj LT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0NSLCAwKTsKCWJ1c19zcGFjZV93 cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0NSLAoJICAgIElD SF9YX0NSX1JSKTsKCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCWNyID0gYnVz X3NwYWNlX3JlYWRfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19Q SV9DUik7CgkJaWYgKGNyID09IDApCgkJCWJyZWFrOwoJfQoJaWYgKGkgPT0gSUNIX1RJTUVPVVQp IHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjYW5ub3QgcmVzZXQgcmVjb3JkIGNvZGVjXG4i KTsKCQlyZXR1cm4gTlVMTDsKCX0KCWlmIChpY2hyY2hhbl9wb3dlcihzYywgMSkgPT0gLTEpIHsK CQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJyZWNvcmQgQURDIG5vdCByZWFkeVxuIik7CgkJcmV0 dXJuIE5VTEw7Cgl9CglpY2hyY2hhbl9wb3dlcihzYywgMCk7CglpZiAoKGNoID0gbWFsbG9jKHNp emVvZigqY2gpLCBNX0RFVkJVRiwgTV9OT1dBSVQpKSA9PSBOVUxMKSB7CgkJZGV2aWNlX3ByaW50 ZihzYy0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIGNoYW5uZWwgaW5mbyBhcmVhXG4iKTsKCQlyZXR1 cm4gTlVMTDsKCX0KCWNoLT5idWZmZXIgPSBiOwoJY2gtPmNoYW5uZWwgPSBjOwoJY2gtPnBhcmVu dCA9IHNjOwoJY2gtPmRpciA9IFBDTURJUl9SRUM7CgljaC0+cnVuID0gMDsKCWNoLT5sdmkgPSAw OwoJaWYgKGljaGNoYW5faW5pdGJ1ZihjaCkpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJj YW5ub3QgYWxsb2NhdGUgY2hhbm5lbCBidWZmZXJcbiIpOwoJCXJldHVybiBOVUxMOwoJfQoJYnVz X3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQkRC QVIsCgkgICAgKHVfaW50MzJfdCl2dG9waHlzKGNoLT5pbmRleCkpOwoJc2MtPnBpID0gY2g7Cglp ZiAoYm9vdHZlcmJvc2UpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsIlJlY29yZCBjb2RlYyBz dXBwb3J0IHJhdGUoSHopOiAiKTsKCQlmb3IgKGkgPSAwO2ljaF9yYXRlW2ldICE9IDA7aSsrKSB7 CgkJCWlmIChpY2hwY2hhbl9zZXRzcGVlZChjaCwgaWNoX3JhdGVbaV0pID09IGljaF9yYXRlW2ld KSB7CgkJCQlwcmludGYoIiVkICIsIGljaF9yYXRlW2ldKTsKCQkJfQoJCX0KCQlwcmludGYoIlxu Iik7Cgl9CglyZXR1cm4gY2g7Cn0KCnN0YXRpYyBpbnQKaWNocmNoYW5fc2V0ZGlyKHZvaWQgKmRh dGEsIGludCBkaXIpCnsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50CmljaHJjaGFuX3NldGZvcm1h dCh2b2lkICpkYXRhLCB1X2ludDMyX3QgZm9ybWF0KQp7CglzdHJ1Y3Qgc2NfY2hpbmZvICpjaCA9 IGRhdGE7CgoJY2gtPmZtdCA9IGZvcm1hdDsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludAppY2hy Y2hhbl9zZXRzcGVlZCh2b2lkICpkYXRhLCB1X2ludDMyX3Qgc3BlZWQpCnsKCXN0cnVjdCBzY19j aGluZm8gKmNoID0gZGF0YTsKCXVfaW50MzJfdCBleHRjYXA7CgoJZXh0Y2FwID0gaWNoX3JkY2Qo Y2gtPnBhcmVudCwgQUM5N19SRUdFWFRfSUQpOwoJaWYgKGV4dGNhcCAmIEFDOTdfRVhUQ0FQX1ZS TSkgewoJCWljaF93cmNkKGNoLT5wYXJlbnQsIEFDOTdfUkVHRVhUX0xBRENSQVRFLCBzcGVlZCk7 CgkJY2gtPnNwZCA9IGljaF9yZGNkKGNoLT5wYXJlbnQsIEFDOTdfUkVHRVhUX0xBRENSQVRFKTsK CX0KCWVsc2UgewoJCWNoLT5zcGQgPSA0ODAwMDsgLyogYmVmb3JlIEFDJzk3IFIyLjAgKi8KCX0K CglyZXR1cm4gY2gtPnNwZDsKfQoKc3RhdGljIGludAppY2hyY2hhbl9zZXRibG9ja3NpemUodm9p ZCAqZGF0YSwgdV9pbnQzMl90IGJsb2Nrc2l6ZSkKewoJcmV0dXJuIGJsb2Nrc2l6ZTsKfQoKLyog c2VtYW50aWMgbm90ZTogbXVzdCBzdGFydCBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyICovCnN0YXRp YyBpbnQKaWNocmNoYW5fdHJpZ2dlcih2b2lkICpkYXRhLCBpbnQgZ28pCnsKCXN0cnVjdCBzY19j aGluZm8gKmNoID0gZGF0YTsKCXN0cnVjdCBzY19pbmZvICpzYyA9IGNoLT5wYXJlbnQ7Cgl1X2lu dDMyX3QgY3I7CglpbnQgaTsKCglzd2l0Y2ggKGdvKSB7CgljYXNlIFBDTVRSSUdfU1RBUlQ6CgkJ Y2gtPnJ1biA9IDE7CgkJaWNocmNoYW5fcG93ZXIoc2MsIDEpOwoJCWJ1c19zcGFjZV93cml0ZV80 KHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0JEQkFSLAoJCSAgICAodV9p bnQzMl90KXZ0b3BoeXMoY2gtPmluZGV4KSk7CgkJY2gtPmx2aSA9IElDSF9GSUZPSU5ERVggLSAx OwoJCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVH X1BJX0xWSSwKCQkgICAgY2gtPmx2aSk7CgkJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0 LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQ1IsCgkJICAgIElDSF9YX0NSX1JQQk0gfCBJQ0hf WF9DUl9MVkJJRSB8IElDSF9YX0NSX0lPQ0UgfAoJCSAgICBJQ0hfWF9DUl9GRUlFKTsKCQlicmVh azsKCWNhc2UgUENNVFJJR19TVE9QOgoJCWNyID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFibWJh cnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19QSV9DUik7CgkJYnVzX3NwYWNlX3dyaXRl XzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQ1IsCgkJICAgIGNyICYg fklDSF9YX0NSX1JQQk0pOwoJCWljaHJjaGFuX3Bvd2VyKHNjLCAwKTsKCQljaC0+cnVuID0gMDsK CQlicmVhazsKCWNhc2UgUENNVFJJR19BQk9SVDoKCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFi bWJhcnQsIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19QSV9DUiwKCQkgICAgMCk7CgkJYnVzX3NwYWNl X3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQ1IsCgkJICAg IElDSF9YX0NSX1JSKTsKCQlmb3IgKGkgPSAwO2kgPCBJQ0hfVElNRU9VVDtpKyspIHsKCQkJY3Ig PSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLAoJCQkgICAgSUNI X1JFR19QSV9DUik7CgkJCWlmIChjciA9PSAwKQoJCQkJYnJlYWs7CgkJfQoJCWljaHJjaGFuX3Bv d2VyKHNjLCAwKTsKCQljaC0+cnVuID0gMDsKCQljaC0+bHZpID0gMDsKCQljaC0+Y2hhbm5lbC0+ ZmxhZ3MgJj0gfkNITl9GX0RFQUQ7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWJyZWFrOwoJfQoJcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbnQKaWNocmNoYW5fZ2V0cHRyKHZvaWQgKmRhdGEpCnsKCXN0cnVj dCBzY19jaGluZm8gKmNoID0gZGF0YTsKCXN0cnVjdCBzY19pbmZvICpzYyA9IGNoLT5wYXJlbnQ7 Cgl1X2ludDMyX3QgY2k7CgoJY2kgPSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2Mt Pm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0NJVik7CglyZXR1cm4gY2kgKiBJQ0hfREVGQVVMVF9CTE9D S1NaOwp9CgpzdGF0aWMgcGNtY2hhbl9jYXBzICoKaWNocmNoYW5fZ2V0Y2Fwcyh2b2lkICpkYXRh KQp7CglyZXR1cm4gJmljaF9yZWNjYXBzOwp9CgovKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgKi8K c3RhdGljIHZvaWQKaWNoX2ludHIodm9pZCAqcCkKewoJc3RydWN0IHNjX2luZm8gKnNjID0gKHN0 cnVjdCBzY19pbmZvICopcDsKCXN0cnVjdCBzY19jaGluZm8gKmNoOwoJdV9pbnQzMl90IGNwOwoJ dV9pbnQzMl90IHNnOwoJdV9pbnQzMl90IHN0OwoJdV9pbnQzMl90IGx2aTsKCiNpZigwKQoJZGV2 aWNlX3ByaW50ZihzYy0+ZGV2LCAiaWNoX2ludHIoMHglMDh4KVxuIiwgcCk7CiNlbmRpZgoJLyog Y2hlY2sgaW50ZXJmYWNlIHN0YXR1cyAqLwoJc2cgPSBidXNfc3BhY2VfcmVhZF80KHNjLT5uYWJt YmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX0dMT0JfU1RBKTsKI2lmKDApCglkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJpY2hfaW50cigpOlJFR19HTE9CX1NUQSA9IDB4JTA4eFxuIiwgc2cpOwoj ZW5kaWYKCWlmIChzZyAmIElDSF9HTE9CX1NUQV9QT0lOVCkgewoJCS8qIFBDTSBPdXQgSU5UZXJy dXB0ICovCgkJLyogbWFzayBpbnRlcnJ1cHQgKi8KCQljcCA9IGJ1c19zcGFjZV9yZWFkXzEoc2Mt Pm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsCgkJICAgIElDSF9SRUdfUE9fQ1IpOwoJCWNwICY9IH4o SUNIX1hfQ1JfTFZCSUUgfCBJQ0hfWF9DUl9JT0NFIHwgSUNIX1hfQ1JfRkVJRSk7CgkJYnVzX3Nw YWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUE9fQ1IsCgkJ ICAgIGNwKTsKCQkvKiBjaGVjayBjaGFubmVsIHN0YXR1cyAqLwoJCWNoID0gc2MtPnBvOwoJCXN0 ID0gYnVzX3NwYWNlX3JlYWRfMihzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNI X1JFR19QT19TUik7CiNpZigwKQoJCWRldmljZV9wcmludGYoc2MtPmRldiwgImljaF9pbnRyKCk6 UkVHX1BPX1NSID0gMHglMDJ4XG4iLCBzdCk7CiNlbmRpZgoJCWlmIChzdCAmIChJQ0hfWF9TUl9C Q0lTIHwgSUNIX1hfU1JfTFZCQ0kpKSB7CgkJCS8qIHBsYXkgYnVmZmVyIGJsb2NrIGNvbXBsZXRl ICovCgkJCWlmIChzdCAmIElDSF9YX1NSX0xWQkNJKQoJCQkJbHZpID0gY2gtPmx2aTsKCQkJLyog dXBkYXRlIGJ1ZmZlciAqLwoJCQljaG5faW50cihjaC0+Y2hhbm5lbCk7CgkJCWljaHBjaGFuX3Vw ZGF0ZShjaCk7CgkJCWlmIChzdCAmIElDSF9YX1NSX0xWQkNJKSB7CgkJCQkvKiByZS1jaGVjayB1 bmRlcmZsb3cgc3RhdHVzICovCgkJCQlpZiAobHZpID09IGNoLT5sdmkpIHsKCQkJCQljaC0+YnVm ZmVyLT51bmRlcmZsb3cgPSAxOwoJCQkJCWljaHBjaGFuX2ZpbGxibGFuayhjaCk7CgkJCQl9CgkJ CX0KCQl9CgkJLyogY2xlYXIgc3RhdHVzIGJpdCAqLwoJCWJ1c19zcGFjZV93cml0ZV8yKHNjLT5u YWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BPX1NSLAoJCSAgICBzdCAmIChJQ0hfWF9T Ul9GSUZPRSB8IElDSF9YX1NSX0JDSVMgfCBJQ0hfWF9TUl9MVkJDSSkpOwoJCS8qIHNldCBpbnRl cnJ1cHQgKi8KCQljcCB8PSAoSUNIX1hfQ1JfTFZCSUUgfCBJQ0hfWF9DUl9JT0NFIHwgSUNIX1hf Q1JfRkVJRSk7CgkJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgs IElDSF9SRUdfUE9fQ1IsCgkJICAgIGNwKTsKCX0KCWlmIChzZyAmIElDSF9HTE9CX1NUQV9QSUlO VCkgewoJCS8qIFBDTSBJbiBJTlRlcnJ1cHQgKi8KCQkvKiBtYXNrIGludGVycnVwdCAqLwoJCWNw ID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNI X1JFR19QSV9DUik7CgkJY3AgJj0gfihJQ0hfWF9DUl9MVkJJRSB8IElDSF9YX0NSX0lPQ0UgfCBJ Q0hfWF9DUl9GRUlFKTsKCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJt YmFyaCwgSUNIX1JFR19QSV9DUiwKCQkgICAgY3ApOwoJCS8qIGNoZWNrIGNoYW5uZWwgc3RhdHVz ICovCgkJY2ggPSBzYy0+cGk7CgkJc3QgPSBidXNfc3BhY2VfcmVhZF8yKHNjLT5uYWJtYmFydCwg c2MtPm5hYm1iYXJoLAoJCSAgICBJQ0hfUkVHX1BJX1NSKTsKI2lmKDApCgkJZGV2aWNlX3ByaW50 ZihzYy0+ZGV2LCAiaWNoX2ludHIoKTpSRUdfUElfU1IgPSAweCUwMnhcbiIsIHN0KTsKI2VuZGlm CgkJaWYgKHN0ICYgKElDSF9YX1NSX0JDSVMgfCBJQ0hfWF9TUl9MVkJDSSkpIHsKCQkJLyogcmVj b3JkIGJ1ZmZlciBibG9jayBmaWxsZWQgKi8KCQkJaWYgKHN0ICYgSUNIX1hfU1JfTFZCQ0kpCgkJ CQlsdmkgPSBjaC0+bHZpOwoJCQkvKiB1cGRhdGUgc3BhY2UgKi8KCQkJY2huX2ludHIoY2gtPmNo YW5uZWwpOwoJCQljaC0+bHZpID0gY2gtPmJ1ZmZlci0+cnAgLyBJQ0hfREVGQVVMVF9CTE9DS1Na IC0gMTsKCQkJaWYgKGNoLT5sdmkgPCAwKQoJCQkJY2gtPmx2aSA9IElDSF9GSUZPSU5ERVggLSAx OwoJCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkJICAg IElDSF9SRUdfUElfTFZJLCBjaC0+bHZpKTsKCQkJaWYgKHN0ICYgSUNIX1hfU1JfTFZCQ0kpIHsK CQkJCS8qIHJlLWNoZWNrIHVuZGVyZmxvdyBzdGF0dXMgKi8KCQkJCWlmIChsdmkgPT0gY2gtPmx2 aSkgewoJCQkJCWNoLT5sdmkrKzsKCQkJCQlpZiAoY2gtPmx2aSA9PSBJQ0hfRklGT0lOREVYKQoJ CQkJCQljaC0+bHZpID0gMDsKCQkJCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsCgkJ CQkJICAgIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19QSV9MVkksCgkJCQkJICAgIGNoLT5sdmkpOwoJ CQkJfQoJCQl9CgkJfQoJCS8qIGNsZWFyIHN0YXR1cyBiaXQgKi8KCQlidXNfc3BhY2Vfd3JpdGVf MihzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19QSV9TUiwKCQkgICAgc3QgJiAo SUNIX1hfU1JfRklGT0UgfCBJQ0hfWF9TUl9CQ0lTIHwgSUNIX1hfU1JfTFZCQ0kpKTsKCQkvKiBz ZXQgaW50ZXJydXB0ICovCgkJY3AgfD0gKElDSF9YX0NSX0xWQklFIHwgSUNIX1hfQ1JfSU9DRSB8 IElDSF9YX0NSX0ZFSUUpOwoJCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5h Ym1iYXJoLCBJQ0hfUkVHX1BJX0NSLAoJCSAgICBjcCk7Cgl9Cn0KCi8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CgovKgogKiBQcm9iZSBhbmQgYXR0YWNoIHRoZSBjYXJkCiAqLwoKc3RhdGljIGludAppY2hfaW5p dChzdHJ1Y3Qgc2NfaW5mbyAqc2MpCnsKCXVfaW50MzJfdCBzdGF0OwoJdV9pbnQzMl90IHNhdmU7 CgoJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsCgkgICAgSUNI X1JFR19HTE9CX0NOVCwgSUNIX0dMT0JfQ1RMX0NPTEQpOwoJREVMQVkoNjAwMDAwKTsKCXN0YXQg PSBidXNfc3BhY2VfcmVhZF80KHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX0dM T0JfU1RBKTsKCWlmICgoc3RhdCAmIElDSF9HTE9CX1NUQV9QQ1IpID09IDApCgkJcmV0dXJuIC0x OwoJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsCgkgICAgSUNI X1JFR19HTE9CX0NOVCwgSUNIX0dMT0JfQ1RMX0NPTEQgfCBJQ0hfR0xPQl9DVExfUFJFUyk7Cglz YXZlID0gYnVzX3NwYWNlX3JlYWRfMihzYy0+bmFtYmFydCwgc2MtPm5hbWJhcmgsIEFDOTdfTUlY X01BU1RFUik7CglidXNfc3BhY2Vfd3JpdGVfMihzYy0+bmFtYmFydCwgc2MtPm5hbWJhcmgsIEFD OTdfTUlYX01BU1RFUiwKCQkJICBBQzk3X01VVEUpOwoJaWYgKGljaF93YWl0Y2Qoc2MpID09IEVU SU1FRE9VVCkKCQlyZXR1cm4gLTE7CglERUxBWSg2MDApOyAvKiBpdCBpcyBuZWVkIGZvciBzb21l IHN5c3RlbSAqLwoJc3RhdCA9IGJ1c19zcGFjZV9yZWFkXzIoc2MtPm5hbWJhcnQsIHNjLT5uYW1i YXJoLCBBQzk3X01JWF9NQVNURVIpOwoJaWYgKHN0YXQgIT0gQUM5N19NVVRFKQoJCXJldHVybiAt MTsKCWJ1c19zcGFjZV93cml0ZV8yKHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgQUM5N19NSVhf TUFTVEVSLCBzYXZlKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50CmljaF9maW5kZGV2KHVfaW50 MzJfdCBkZXYsIHVfaW50MzJfdCBzdWJkZXYpCnsKCWludCBpOwoKCWZvciAoaSA9IDA7IGljaF9k ZXZzW2ldLmRldjsgaSsrKSB7CgkJaWYgKGljaF9kZXZzW2ldLmRldiA9PSBkZXYgJiYKCQkgICAg KGljaF9kZXZzW2ldLnN1YmRldiA9PSBzdWJkZXYgfHwgaWNoX2RldnNbaV0uc3ViZGV2ID09IDAp KQoJCQlyZXR1cm4gaTsKCX0KCXJldHVybiAtMTsKfQoKc3RhdGljIGludAppY2hfcGNpX3Byb2Jl KGRldmljZV90IGRldikKewoJaW50IGk7Cgl1X2ludDMyX3Qgc3ViZGV2OwoKCXN1YmRldiA9IChw Y2lfZ2V0X3N1YmRldmljZShkZXYpIDw8IDE2KSB8IHBjaV9nZXRfc3VidmVuZG9yKGRldik7Cglp ID0gaWNoX2ZpbmRkZXYocGNpX2dldF9kZXZpZChkZXYpLCBzdWJkZXYpOwoJaWYgKGkgPj0gMCkg ewoJCWRldmljZV9zZXRfZGVzYyhkZXYsIGljaF9kZXZzW2ldLm5hbWUpOwoJCXJldHVybiAwOwoJ fSBlbHNlCgkJcmV0dXJuIEVOWElPOwp9CgpzdGF0aWMgaW50CmljaF9wY2lfYXR0YWNoKGRldmlj ZV90IGRldikKewoJdV9pbnQzMl90CWRhdGE7Cgl1X2ludDMyX3QJc3ViZGV2OwoJdV9pbnQzMl90 CWV4dGNhcDsKCXN0cnVjdCBzY19pbmZvICpzYzsKCWNoYXIgCQlzdGF0dXNbU05EX1NUQVRVU0xF Tl07CgoJaWYgKChzYyA9IG1hbGxvYyhzaXplb2YoKnNjKSwgTV9ERVZCVUYsIE1fTk9XQUlUKSkg PT0gTlVMTCkgewoJCWRldmljZV9wcmludGYoZGV2LCAiY2Fubm90IGFsbG9jYXRlIHNvZnRjXG4i KTsKCQlyZXR1cm4gRU5YSU87Cgl9CgoJYnplcm8oc2MsIHNpemVvZigqc2MpKTsKCXNjLT5kZXYg PSBkZXY7CglzdWJkZXYgPSAocGNpX2dldF9zdWJkZXZpY2UoZGV2KSA8PCAxNikgfCBwY2lfZ2V0 X3N1YnZlbmRvcihkZXYpOwoJc2MtPnR5cGUgPSBpY2hfZmluZGRldihwY2lfZ2V0X2RldmlkKGRl diksIHN1YmRldik7CglzYy0+cmV2ID0gcGNpX2dldF9yZXZpZChkZXYpOwoKCWRhdGEgPSBwY2lf cmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOwoJZGF0YSB8PSAoUENJTV9DTURfUE9S VEVOIHwgUENJTV9DTURfTUVNRU4gfCBQQ0lNX0NNRF9CVVNNQVNURVJFTik7CglwY2lfd3JpdGVf Y29uZmlnKGRldiwgUENJUl9DT01NQU5ELCBkYXRhLCAyKTsKCWRhdGEgPSBwY2lfcmVhZF9jb25m aWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOwoKCXNjLT5uYW1iYXJpZCA9IFBDSVJfTkFNQkFSOwoJ c2MtPm5hYm1iYXJpZCA9IFBDSVJfTkFCTUJBUjsKCXNjLT5uYW1iYXIgPSBidXNfYWxsb2NfcmVz b3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwKCSAgICAmc2MtPm5hbWJhcmlkLCAwLCB+MCwgMjU2 LCBSRl9BQ1RJVkUpOwoJc2MtPm5hYm1iYXIgPSBidXNfYWxsb2NfcmVzb3VyY2UoZGV2LCBTWVNf UkVTX0lPUE9SVCwKCSAgICAmc2MtPm5hYm1iYXJpZCwgMCwgfjAsIDY0LCBSRl9BQ1RJVkUpOwoJ aWYgKCFzYy0+bmFtYmFyIHx8ICFzYy0+bmFibWJhcikgewoJCWRldmljZV9wcmludGYoZGV2LCAi dW5hYmxlIHRvIG1hcCBJTyBwb3J0IHNwYWNlXG4iKTsKCQlnb3RvIGJhZDsKCX0KCXNjLT5uYW1i YXJ0ID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5uYW1iYXIpOwoJc2MtPm5hbWJhcmggPSBybWFuX2dl dF9idXNoYW5kbGUoc2MtPm5hbWJhcik7CglzYy0+bmFibWJhcnQgPSBybWFuX2dldF9idXN0YWco c2MtPm5hYm1iYXIpOwoJc2MtPm5hYm1iYXJoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5uYWJt YmFyKTsKCglpZiAoYnVzX2RtYV90YWdfY3JlYXRlKC8qcGFyZW50Ki9OVUxMLCAvKmFsaWdubWVu dCovNCwgLypib3VuZGFyeSovMCwKCSAgICAvKmxvd2FkZHIqL0JVU19TUEFDRV9NQVhBRERSXzMy QklULAoJICAgIC8qaGlnaGFkZHIqL0JVU19TUEFDRV9NQVhBRERSLAoJICAgIC8qZmlsdGVyKi9O VUxMLCAvKmZpbHRlcmFyZyovTlVMTCwKCSAgICAvKm1heHNpemUqLzY1NTM2LCAvKm5zZWdtZW50 cyovMSwgLyptYXhzZWdzeiovMHgzZmZmZiwKCSAgICAvKmZsYWdzKi8wLCAmc2MtPnBhcmVudF9k bWF0KSAhPSAwKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gY3JlYXRlIGRtYSB0 YWdcbiIpOwoJCWdvdG8gYmFkOwoJfQoKCWlmIChpY2hfaW5pdChzYykgPT0gLTEpIHsKCQlkZXZp Y2VfcHJpbnRmKGRldiwgInVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBjYXJkXG4iKTsKCQlnb3Rv IGJhZDsKCX0KCglzYy0+Y29kZWMgPSBhYzk3X2NyZWF0ZShkZXYsIHNjLCBOVUxMLCBpY2hfcmRj ZCwgaWNoX3dyY2QpOwoJaWYgKHNjLT5jb2RlYyA9PSBOVUxMKQoJCWdvdG8gYmFkOwoJbWl4ZXJf aW5pdChkZXYsICZhYzk3X21peGVyLCBzYy0+Y29kZWMpOwoJLyogY2hlY2sgYW5kIHNldCBWUkEg ZnVuY3Rpb24gKi8KCWRhdGEgPSBpY2hfcmRjZChzYywgQUM5N19SRUdFWFRfSUQpOwoJZXh0Y2Fw ID0gMDsKCWlmIChkYXRhICYgQUM5N19FWFRDQVBfVlJBKQoJCWV4dGNhcCA9IEFDOTdfRVhUQ0FQ X1ZSQTsKCWlmIChkYXRhICYgQUM5N19FWFRDQVBfVlJNKQoJCWV4dGNhcCB8PSBBQzk3X0VYVENB UF9WUk07CglpY2hfd3JjZChzYywgQUM5N19SRUdFWFRfU1RBVCwgZXh0Y2FwKTsKCglzYy0+aXJx aWQgPSAwOwoJc2MtPmlycSA9IGJ1c19hbGxvY19yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCAm c2MtPmlycWlkLAoJCQkJIDAsIH4wLCAxLCBSRl9BQ1RJVkUgfCBSRl9TSEFSRUFCTEUpOwoJaWYg KCFzYy0+aXJxIHx8CgkgICAgYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxLCBJTlRSX1RZUEVf VFRZLCBpY2hfaW50ciwgc2MsICZzYy0+aWgpKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFi bGUgdG8gbWFwIGludGVycnVwdFxuIik7CgkJZ290byBiYWQ7Cgl9CgoJc25wcmludGYoc3RhdHVz LCBTTkRfU1RBVFVTTEVOLAoJICAgICJhdCBpbyAweCVseC0weCVseCwgMHglbHgtMHglbHggaXJx ICVsZCIsCgkgICAgcm1hbl9nZXRfc3RhcnQoc2MtPm5hbWJhciksIHJtYW5fZ2V0X2VuZChzYy0+ bmFtYmFyKSwKCSAgICBybWFuX2dldF9zdGFydChzYy0+bmFibWJhciksIHJtYW5fZ2V0X2VuZChz Yy0+bmFibWJhciksCgkgICAgcm1hbl9nZXRfc3RhcnQoc2MtPmlycSkpOwoKCWlmIChwY21fcmVn aXN0ZXIoZGV2LCBzYywgMSwgMSkpCgkJZ290byBiYWQ7CglwY21fYWRkY2hhbihkZXYsIFBDTURJ Ul9QTEFZLCAmaWNoX3BjaGFudGVtcGxhdGUsIHNjKTsKCXBjbV9hZGRjaGFuKGRldiwgUENNRElS X1JFQywgJmljaF9yY2hhbnRlbXBsYXRlLCBzYyk7CglwY21fc2V0c3RhdHVzKGRldiwgc3RhdHVz KTsKCglyZXR1cm4gMDsKCmJhZDoKCWlmIChzYy0+bmFtYmFyKQoJCWJ1c19yZWxlYXNlX3Jlc291 cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsCgkJICAgIHNjLT5uYW1iYXJpZCwgc2MtPm5hbWJhcik7 CglpZiAoc2MtPm5hYm1iYXIpCgkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lP UE9SVCwKCQkgICAgc2MtPm5hYm1iYXJpZCwgc2MtPm5hYm1iYXIpOwoJaWYgKHNjLT5paCkKCQli dXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnEsIHNjLT5paCk7CglpZiAoc2MtPmlycSkKCQli dXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCBzYy0+aXJxaWQsIHNjLT5pcnEp OwoJZnJlZShzYywgTV9ERVZCVUYpOwoJcmV0dXJuIEVOWElPOwp9CgpzdGF0aWMgaW50CmljaF9w Y2lfcmVzdW1lKGRldmljZV90IGRldikKewoJc25kZGV2X2luZm8gKmQ7CglzdHJ1Y3Qgc2NfaW5m byAqc2M7Cgl1X2ludDMyX3QJZGF0YTsKCXVfaW50MzJfdAlleHRjYXA7CgoJc2MgPSBwY21fZ2V0 ZGV2aW5mbyhkZXYpOwoKCS8qIFJlaW5pdCBhdWRpbyBkZXZpY2UgKi8KICAgIAlpZiAoaWNoX2lu aXQoc2MpID09IC0xKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gcmVpbml0aWFs aXplIHRoZSBjYXJkXG4iKTsKCQlyZXR1cm4gRU5YSU87Cgl9CgkvKiBSZWluaXQgbWl4ZXIgKi8K ICAgIAlpZiAobWl4ZXJfcmVpbml0KGRldikgPT0gLTEpIHsKCQlkZXZpY2VfcHJpbnRmKGRldiwg InVuYWJsZSB0byByZWluaXRpYWxpemUgdGhlIG1peGVyXG4iKTsKCQlyZXR1cm4gRU5YSU87Cgl9 CgkvKiBjaGVjayBhbmQgc2V0IFZSQSBmdW5jdGlvbiAqLwoJZGF0YSA9IGljaF9yZGNkKHNjLCBB Qzk3X1JFR0VYVF9JRCk7CglleHRjYXAgPSAwOwoJaWYgKGRhdGEgJiBBQzk3X0VYVENBUF9WUkEp CgkJZXh0Y2FwID0gQUM5N19FWFRDQVBfVlJBOwoJaWYgKGRhdGEgJiBBQzk3X0VYVENBUF9WUk0p CgkJZXh0Y2FwIHw9IEFDOTdfRVhUQ0FQX1ZSTTsKCWljaF93cmNkKHNjLCBBQzk3X1JFR0VYVF9T VEFULCBleHRjYXApOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgaWNoX21l dGhvZHNbXSA9IHsKCS8qIERldmljZSBpbnRlcmZhY2UgKi8KCURFVk1FVEhPRChkZXZpY2VfcHJv YmUsCQlpY2hfcGNpX3Byb2JlKSwKCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAlpY2hfcGNpX2F0 dGFjaCksCglERVZNRVRIT0QoZGV2aWNlX3Jlc3VtZSwJaWNoX3BjaV9yZXN1bWUpLAoJeyAwLCAw IH0KfTsKCnN0YXRpYyBkcml2ZXJfdCBpY2hfZHJpdmVyID0gewoJInBjbSIsCglpY2hfbWV0aG9k cywKCXNpemVvZihzbmRkZXZfaW5mbyksCn07CgpzdGF0aWMgZGV2Y2xhc3NfdCBwY21fZGV2Y2xh c3M7CgpEUklWRVJfTU9EVUxFKHNuZF9pY2gsIHBjaSwgaWNoX2RyaXZlciwgcGNtX2RldmNsYXNz LCAwLCAwKTsKTU9EVUxFX0RFUEVORChzbmRfaWNoLCBzbmRfcGNtLCBQQ01fTUlOVkVSLCBQQ01f UFJFRlZFUixQQ01fTUFYVkVSKTsKTU9EVUxFX1ZFUlNJT04oc25kX2ljaCwgMSk7Cg== --Boundary-=_WfAZyzAZOHsNGHcxSfUBSnsNWfUJ-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00111616571802.00211>