| Summary: | =?iso-8859-5?B?UmU6IHd3dy8xMTU0ODE6IEFTVVMgUDVLIFNFIG1vdGhlcmJvYXJkIHN0YXR1cyBmb3IgYW1kNjQ=?= | ||
|---|---|---|---|
| Product: | Documentation | Reporter: | Andriy Podanenko <podarok> |
| Component: | Books & Articles | Assignee: | Mark Linimon <linimon> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | CC: | andriy |
| Priority: | Normal | ||
| Version: | Latest | ||
| Hardware: | Any | ||
| OS: | Any | ||
State Changed From-To: open->closed Misfiled followup to www/115481; content migrated. To submitter: GNATS needs to have a non-encoded Subject line for the followups to be properly filed. Thanks. Responsible Changed From-To: gnats-admin->linimon Sorry for the bad encoding to avoid duplication please get files from = http://www.freebsd.org/cgi/query-pr.cgi?pr=3D114473 -- = ---------------- Andriy Podanenko -podarok- PAK-UANIC ICQ 1400213 = YahooIM podarok_ua MSN podarok_ Jabber podarok@jabber.org AIM podarokua |
--8323328-2057934626-1187120403=:29731 Content-Type: TEXT/PLAIN; CHARSET=iso-8859-5 Content-Transfer-Encoding: QUOTED-PRINTABLE dmesg with this patch (ICH9 SATA id`s added) ************************** Copyright (c) 1992-2007 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 =09The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 6.2-RELEASE-p7 #3: Tue Aug 14 18:35:55 UTC 2007 root@podarok.voliacable.com:/usr/obj/usr/src/sys/GENERIC can't re-use a leaf (mddebug)! module_register: module g_md already exists! Module g_md failed to register: 17 module_register: module pci/hptmv already exists! Module pci/hptmv failed to register: 17 module_register: module g_bsd already exists! Module g_bsd failed to register: 17 module_register: module g_mbrext already exists! Module g_mbrext failed to register: 17 module_register: module g_mbr already exists! Module g_mbr failed to register: 17 Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: Intel(R) Core(TM)2 Duo CPU E6550 @ 2.33GHz (2336.08-MHz K8-class = CPU) Origin =3D "GenuineIntel" Id =3D 0x6fb Stepping =3D 11 Features=3D0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PG= E,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE> Features2=3D0xe3fd<SSE3,RSVD2,MON,DS_CPL,VMX,<b6>,EST,TM2,<b9>,CX16,<b14>= ,<b15>> AMD Features=3D0x20100800<SYSCALL,NX,LM> AMD Features2=3D0x1<LAHF> Cores per package: 2 real memory =3D 2146959360 (2047 MB) avail memory =3D 2060800000 (1965 MB) ACPI APIC Table: <A_M_I_ OEMAPIC > ioapic0 <Version 2.0> irqs 0-23 on motherboard kbd1 at kbdmux0 ichwd module loaded ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413) acpi0: <NEC > on motherboard acpi_bus_number: can't get _ADR acpi_bus_number: can't get _ADR acpi_bus_number: can't get _ADR acpi_bus_number: can't get _ADR acpi0: Power Button (fixed) Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0 cpu0: <ACPI CPU> on acpi0 est0: <Enhanced SpeedStep Frequency Control> on cpu0 p4tcc0: <CPU Frequency Thermal Control> on cpu0 pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0 pci0: <ACPI PCI bus> on pcib0 pcib1: <ACPI PCI-PCI bridge> irq 16 at device 1.0 on pci0 pci1: <ACPI PCI bus> on pcib1 pci1: <display, VGA> at device 0.0 (no driver attached) uhci0: <UHCI (generic) USB controller> port 0xc800-0xc81f irq 16 at device = 26.0 on pci0 uhci0: [GIANT-LOCKED] usb0: <UHCI (generic) USB controller> on uhci0 usb0: USB revision 1.0 uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered uhci1: <UHCI (generic) USB controller> port 0xc880-0xc89f irq 21 at device = 26.1 on pci0 uhci1: [GIANT-LOCKED] usb1: <UHCI (generic) USB controller> on uhci1 usb1: USB revision 1.0 uhub1: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub1: 2 ports with 2 removable, self powered uhci2: <UHCI (generic) USB controller> port 0xcc00-0xcc1f irq 18 at device = 26.2 on pci0 uhci2: [GIANT-LOCKED] usb2: <UHCI (generic) USB controller> on uhci2 usb2: USB revision 1.0 uhub2: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub2: 2 ports with 2 removable, self powered ehci0: <EHCI (generic) USB 2.0 controller> mem 0xfbfffc00-0xfbffffff irq 18= at device 26.7 on pci0 ehci0: [GIANT-LOCKED] usb3: EHCI version 1.0 usb3: companion controllers, 2 ports each: usb0 usb1 usb2 usb3: <EHCI (generic) USB 2.0 controller> on ehci0 usb3: USB revision 2.0 uhub3: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1 uhub3: 6 ports with 6 removable, self powered pcm0: <Intel (Unknown) High Definition Audio Controller> mem 0xfbff8000-0xf= bffbfff irq 22 at device 27.0 on pci0 pcib2: <ACPI PCI-PCI bridge> irq 17 at device 28.0 on pci0 pci3: <ACPI PCI bus> on pcib2 pcib3: <ACPI PCI-PCI bridge> irq 17 at device 28.4 on pci0 pci2: <ACPI PCI bus> on pcib3 atapci0: <GENERIC ATA controller> port 0xdc00-0xdc07,0xd880-0xd883,0xd800-0= xd807,0xd480-0xd483,0xd400-0xd40f mem 0xfeaffc00-0xfeafffff irq 16 at devic= e 0.0 on pci2 ata2: <ATA channel 0> on atapci0 ata3: <ATA channel 1> on atapci0 uhci3: <UHCI (generic) USB controller> port 0xc080-0xc09f irq 23 at device = 29.0 on pci0 uhci3: [GIANT-LOCKED] usb4: <UHCI (generic) USB controller> on uhci3 usb4: USB revision 1.0 uhub4: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub4: 2 ports with 2 removable, self powered uhci4: <UHCI (generic) USB controller> port 0xc400-0xc41f irq 19 at device = 29.1 on pci0 uhci4: [GIANT-LOCKED] usb5: <UHCI (generic) USB controller> on uhci4 usb5: USB revision 1.0 uhub5: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub5: 2 ports with 2 removable, self powered uhci5: <UHCI (generic) USB controller> port 0xc480-0xc49f irq 18 at device = 29.2 on pci0 uhci5: [GIANT-LOCKED] usb6: <UHCI (generic) USB controller> on uhci5 usb6: USB revision 1.0 uhub6: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub6: 2 ports with 2 removable, self powered ehci1: <EHCI (generic) USB 2.0 controller> mem 0xfbfff800-0xfbfffbff irq 23= at device 29.7 on pci0 ehci1: [GIANT-LOCKED] usb7: EHCI version 1.0 usb7: companion controllers, 2 ports each: usb4 usb5 usb6 usb7: <EHCI (generic) USB 2.0 controller> on ehci1 usb7: USB revision 2.0 uhub7: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1 uhub7: 6 ports with 6 removable, self powered umass0: Generic Mass Storage Device, rev 2.00/1.27, addr 2 pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0 pci4: <ACPI PCI bus> on pcib4 dc0: <Accton EN2242 MiniPCI 10/100BaseTX> port 0xe800-0xe8ff mem 0xfebffc00= -0xfebfffff irq 16 at device 0.0 on pci4 miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc0: Ethernet address: 00:c0:49:b3:8a:81 isab0: <PCI-ISA bridge> at device 31.0 on pci0 isa0: <ISA bus> on isab0 atapci1: <Intel ICH9 SATA300 controller> port 0xb000-0xb007,0xac00-0xac03,0= xa880-0xa887,0xa800-0xa803,0xa480-0xa48f,0xa400-0xa40f irq 22 at device 31.= 2 on pci0 ata4: <ATA channel 0> on atapci1 ata5: <ATA channel 1> on atapci1 ichsmb0: <SMBus controller> port 0x400-0x41f mem 0xfbfff400-0xfbfff4ff irq = 18 at device 31.3 on pci0 ichsmb0: [GIANT-LOCKED] smbus0: <System Management Bus> on ichsmb0 smb0: <SMBus generic I/O> on smbus0 atapci2: <Intel ICH9 SATA300 controller> port 0xc000-0xc007,0xbc00-0xbc03,0= xb880-0xb887,0xb800-0xb803,0xb480-0xb48f,0xb400-0xb40f irq 22 at device 31.= 5 on pci0 ata6: <ATA channel 0> on atapci2 ata7: <ATA channel 1> on atapci2 acpi_button0: <Power Button> on acpi0 speaker0: <PC speaker> port 0x61 on acpi0 fdc0: <floppy drive controller (FDE)> port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on= acpi0 fdc0: [FAST] atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0 atkbd0: <AT Keyboard> irq 1 on atkbdc0 kbd0 at atkbd0 atkbd0: [GIANT-LOCKED] ppc0: cannot reserve I/O port range sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=3D0x300> sio0: configured irq 4 not in bitmap of probed irqs 0 sio0: port may not be enabled sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 8250 or not responding sio1: configured irq 3 not in bitmap of probed irqs 0 sio1: port may not be enabled vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 Timecounter "TSC" frequency 2336080971 Hz quality 800 Timecounters tick every 1.000 msec The GEOM class BSD is already loaded. The GEOM class MBREXT is already loaded. The GEOM class MBR is already loaded. The GEOM class MD is already loaded. ad8: 114473MB <Seagate ST3120813AS 2AAA> at ata4-master SATA150 ad10: 190782MB <Seagate ST3200820AS 3.AAD> at ata5-master SATA150 ad12: 114473MB <Seagate ST3120813AS 2AAA> at ata6-master SATA150 ad14: 152627MB <Seagate ST3160815AS 3.AAD> at ata7-master SATA150 pcm0: <HDA Codec: Realtek ALC883> pcm0: <HDA Driver Revision: 20061013_0032> da0 at umass-sim0 bus 0 target 0 lun 0 da0: <Generic USB SD Reader 1.00> Removable Direct Access SCSI-0 device=20 da0: 40.000MB/s transfers da0: Attempt to query device size failed: NOT READY, Medium not present da1 at umass-sim0 bus 0 target 0 lun 1 da1: <Generic USB CF Reader 1.01> Removable Direct Access SCSI-0 device=20 da1: 40.000MB/s transfers da1: Attempt to query device size failed: NOT READY, Medium not present da2 at umass-sim0 bus 0 target 0 lun 2 da2: <Generic USB SM Reader 1.02> Removable Direct Access SCSI-0 device=20 da2: 40.000MB/s transfers da2: Attempt to query device size failed: NOT READY, Medium not present da3 at umass-sim0 bus 0 target 0 lun 3 da3: <Generic USB MS Reader 1.03> Removable Direct Access SCSI-0 device=20 da3: 40.000MB/s transfers da3: Attempt to query device size failed: NOT READY, Medium not present -- =E0=D5=DA=DB=D0=DC=D0 --------------------------------------------------= --------- http://FREEhost.com.ua - =DF=DE=DA=E3=DF=D0=EF =E5=DE=E1=E2=D8=DD=D3 +10 = =E3.=D5. =DA=DE=DD=E2=D5=DA=E1=E2=D0 =DD=D0 Begun =D2 =DF=DE=D4=D0=E0=DE=DA= ! --8323328-2057934626-1187120403=:29731 Content-Type: APPLICATION/OCTET-STREAM; name=ata-chipset.c Content-Transfer-Encoding: BASE64 Content-Disposition: attachment; filename=ata-chipset.c LyotCiAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDYgU/hyZW4gU2NobWlk dCA8c29zQEZyZWVCU0Qub3JnPgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciwKICogICAgd2l0aG91dCBtb2RpZmljYXRp b24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUu CiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoK ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ RUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgog KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAogKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogKiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgogKi8KCiNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KX19G QlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLWNoaXBzZXQu Yyx2IDEuMTI2LjIuMTUgMjAwNi8xMC8wOSAxNjowMTozNSBzb3MgRXhwICQi KTsKCiNpbmNsdWRlICJvcHRfYXRhLmgiCiNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgojaW5jbHVkZSA8c3lzL2tlcm5l bC5oPgojaW5jbHVkZSA8c3lzL2F0YS5oPgojaW5jbHVkZSA8c3lzL2J1cy5o PgojaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgojaW5jbHVkZSA8c3lzL21hbGxv Yy5oPgojaW5jbHVkZSA8c3lzL2xvY2suaD4KI2luY2x1ZGUgPHN5cy9tdXRl eC5oPgojaW5jbHVkZSA8c3lzL3NlbWEuaD4KI2luY2x1ZGUgPHN5cy90YXNr cXVldWUuaD4KI2luY2x1ZGUgPHZtL3VtYS5oPgojaW5jbHVkZSA8bWFjaGlu ZS9zdGRhcmcuaD4KI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KI2lu Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiNpbmNsdWRlIDxzeXMvcm1hbi5oPgoj aW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KI2luY2x1ZGUgPGRldi9wY2kv cGNpcmVnLmg+CiNpbmNsdWRlIDxkZXYvYXRhL2F0YS1hbGwuaD4KI2luY2x1 ZGUgPGRldi9hdGEvYXRhLXBjaS5oPgojaW5jbHVkZSA8YXRhX2lmLmg+Cgov KiBsb2NhbCBwcm90b3R5cGVzICovCi8qIGF0YS1jaGlwc2V0LmMgKi8Kc3Rh dGljIGludCBhdGFfZ2VuZXJpY19jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpz dGF0aWMgdm9pZCBhdGFfZ2VuZXJpY19pbnRyKHZvaWQgKmRhdGEpOwpzdGF0 aWMgdm9pZCBhdGFfZ2VuZXJpY19zZXRtb2RlKGRldmljZV90IGRldiwgaW50 IG1vZGUpOwpzdGF0aWMgdm9pZCBhdGFfc2F0YV9waHlfZW5hYmxlKHN0cnVj dCBhdGFfY2hhbm5lbCAqY2gpOwpzdGF0aWMgdm9pZCBhdGFfc2F0YV9waHlf ZXZlbnQodm9pZCAqY29udGV4dCwgaW50IGR1bW15KTsKc3RhdGljIGludCBh dGFfc2F0YV9jb25uZWN0KHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gpOwpzdGF0 aWMgdm9pZCBhdGFfc2F0YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1v ZGUpOwpzdGF0aWMgaW50IGF0YV9haGNpX2NoaXBpbml0KGRldmljZV90IGRl dik7CnN0YXRpYyBpbnQgYXRhX2FoY2lfYWxsb2NhdGUoZGV2aWNlX3QgZGV2 KTsKc3RhdGljIGludCBhdGFfYWhjaV9zdGF0dXMoZGV2aWNlX3QgZGV2KTsK c3RhdGljIGludCBhdGFfYWhjaV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3Qg YXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgaW50IGF0YV9haGNpX2Vu ZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpz dGF0aWMgdm9pZCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0 aWMgdm9pZCBhdGFfYWhjaV9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1h X3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwpzdGF0 aWMgdm9pZCBhdGFfYWhjaV9kbWFpbml0KGRldmljZV90IGRldik7CnN0YXRp YyBpbnQgYXRhX2FoY2lfc2V0dXBfZmlzKHVfaW50OF90ICpmaXMsIHN0cnVj dCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CnN0YXRpYyBpbnQgYXRhX2FjYXJk X2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2FjYXJk X2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2FjYXJk X3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfYWNhcmRf ODUwX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyB2 b2lkIGF0YV9hY2FyZF84Nlhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBt b2RlKTsKc3RhdGljIGludCBhdGFfYWxpX2NoaXBpbml0KGRldmljZV90IGRl dik7CnN0YXRpYyBpbnQgYXRhX2FsaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp OwpzdGF0aWMgaW50IGF0YV9hbGlfc2F0YV9hbGxvY2F0ZShkZXZpY2VfdCBk ZXYpOwpzdGF0aWMgdm9pZCBhdGFfYWxpX3Jlc2V0KGRldmljZV90IGRldik7 CnN0YXRpYyB2b2lkIGF0YV9hbGlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGlu dCBtb2RlKTsKc3RhdGljIGludCBhdGFfYW1kX2NoaXBpbml0KGRldmljZV90 IGRldik7CnN0YXRpYyBpbnQgYXRhX2F0aV9jaGlwaW5pdChkZXZpY2VfdCBk ZXYpOwpzdGF0aWMgdm9pZCBhdGFfYXRpX3NldG1vZGUoZGV2aWNlX3QgZGV2 LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX2N5cml4X2NoaXBpbml0KGRl dmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jeXJpeF9zZXRtb2RlKGRl dmljZV90IGRldiwgaW50IG1vZGUpOwpzdGF0aWMgaW50IGF0YV9jeXByZXNz X2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jeXBy ZXNzX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBp bnQgYXRhX2hpZ2hwb2ludF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpzdGF0 aWMgaW50IGF0YV9oaWdocG9pbnRfYWxsb2NhdGUoZGV2aWNlX3QgZGV2KTsK c3RhdGljIHZvaWQgYXRhX2hpZ2hwb2ludF9zZXRtb2RlKGRldmljZV90IGRl diwgaW50IG1vZGUpOwpzdGF0aWMgaW50IGF0YV9oaWdocG9pbnRfY2hlY2tf ODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRh X2ludGVsX2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRh X2ludGVsX2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0 YV9pbnRlbF9yZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFf aW50ZWxfb2xkX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0 YXRpYyB2b2lkIGF0YV9pbnRlbF9uZXdfc2V0bW9kZShkZXZpY2VfdCBkZXYs IGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfaW50ZWxfMzEyNDRfYWxsb2Nh dGUoZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfaW50ZWxfMzEyNDRf c3RhdHVzKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2ludGVsXzMx MjQ0X2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKc3Rh dGljIHZvaWQgYXRhX2ludGVsXzMxMjQ0X3Jlc2V0KGRldmljZV90IGRldik7 CnN0YXRpYyBpbnQgYXRhX2l0ZV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpz dGF0aWMgdm9pZCBhdGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQg bW9kZSk7CnN0YXRpYyBpbnQgYXRhX2ptaWNyb25fY2hpcGluaXQoZGV2aWNl X3QgZGV2KTsKc3RhdGljIGludCBhdGFfam1pY3Jvbl9hbGxvY2F0ZShkZXZp Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfam1pY3Jvbl9yZXNldChkZXZp Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfam1pY3Jvbl9kbWFpbml0KGRl dmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9qbWljcm9uX3NldG1vZGUo ZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX21hcnZl bGxfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfbWFy dmVsbF9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9t YXJ2ZWxsX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9t YXJ2ZWxsX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAq cmVxdWVzdCk7CnN0YXRpYyBpbnQgYXRhX21hcnZlbGxfZW5kX3RyYW5zYWN0 aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CnN0YXRpYyB2b2lk IGF0YV9tYXJ2ZWxsX3Jlc2V0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lk IGF0YV9tYXJ2ZWxsX2RtYXNldHByZCh2b2lkICp4c2MsIGJ1c19kbWFfc2Vn bWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcik7CnN0YXRpYyB2 b2lkIGF0YV9tYXJ2ZWxsX2RtYWluaXQoZGV2aWNlX3QgZGV2KTsKc3RhdGlj IGludCBhdGFfbmF0aW9uYWxfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKc3Rh dGljIHZvaWQgYXRhX25hdGlvbmFsX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBp bnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX252aWRpYV9jaGlwaW5pdChkZXZp Y2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9udmlkaWFfYWxsb2NhdGUoZGV2 aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfbnZpZGlhX3N0YXR1cyhkZXZp Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfbnZpZGlhX3Jlc2V0KGRldmlj ZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfY2hpcGluaXQoZGV2 aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9hbGxvY2F0ZShk ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9wcm9taXNlX3N0YXR1cyhk ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9wcm9taXNlX2RtYXN0YXJ0 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfZG1hc3Rv cChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9kbWFy ZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9k bWFpbml0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9wcm9taXNl X3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQg YXRhX3Byb21pc2VfdHgyX2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRp YyBpbnQgYXRhX3Byb21pc2VfdHgyX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpz dGF0aWMgaW50IGF0YV9wcm9taXNlX21pb19hbGxvY2F0ZShkZXZpY2VfdCBk ZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9taW9faW50cih2b2lkICpk YXRhKTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9taW9fc3RhdHVzKGRldmlj ZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfbWlvX2NvbW1hbmQo c3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKc3RhdGljIHZvaWQgYXRh X3Byb21pc2VfbWlvX3Jlc2V0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lk IGF0YV9wcm9taXNlX21pb19kbWFpbml0KGRldmljZV90IGRldik7CnN0YXRp YyB2b2lkIGF0YV9wcm9taXNlX21pb19zZXRtb2RlKGRldmljZV90IGRldiwg aW50IG1vZGUpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9zeDRfaW50cih2 b2lkICpkYXRhKTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9zeDRfY29tbWFu ZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgaW50IGF0 YV9wcm9taXNlX2Fwa3QodV9pbnQ4X3QgKmJ5dGVwLCBzdHJ1Y3QgYXRhX3Jl cXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9xdWV1 ZV9ocGt0KHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIsIHVfaW50 MzJfdCBocGt0KTsKc3RhdGljIHZvaWQgYXRhX3Byb21pc2VfbmV4dF9ocGt0 KHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIpOwpzdGF0aWMgaW50 IGF0YV9zZXJ2ZXJ3b3Jrc19jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpzdGF0 aWMgaW50IGF0YV9zZXJ2ZXJ3b3Jrc19hbGxvY2F0ZShkZXZpY2VfdCBkZXYp OwpzdGF0aWMgdm9pZCBhdGFfc2VydmVyd29ya3Nfc2V0bW9kZShkZXZpY2Vf dCBkZXYsIGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfc2lpX2NoaXBpbml0 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2NtZF9hbGxvY2F0ZShk ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9jbWRfc3RhdHVzKGRldmlj ZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jbWRfc2V0bW9kZShkZXZpY2Vf dCBkZXYsIGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfc2lpX2FsbG9jYXRl KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3NpaV9zdGF0dXMoZGV2 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3NpaV9yZXNldChkZXZpY2Vf dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfc2lpX3NldG1vZGUoZGV2aWNlX3Qg ZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX3Npc19jaGlwaW5pdChk ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9zaXNfYWxsb2NhdGUoZGV2 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3Npc19yZXNldChkZXZpY2Vf dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfc2lzX3NldG1vZGUoZGV2aWNlX3Qg ZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX3ZpYV9jaGlwaW5pdChk ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV92aWFfYWxsb2NhdGUoZGV2 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3ZpYV9yZXNldChkZXZpY2Vf dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfdmlhX3NvdXRoYnJpZGdlX2ZpeHVw KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV92aWFfZmFtaWx5X3Nl dG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBzdHJ1Y3Qg YXRhX2NoaXBfaWQgKmF0YV9tYXRjaF9jaGlwKGRldmljZV90IGRldiwgc3Ry dWN0IGF0YV9jaGlwX2lkICppbmRleCk7CnN0YXRpYyBzdHJ1Y3QgYXRhX2No aXBfaWQgKmF0YV9maW5kX2NoaXAoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXRh X2NoaXBfaWQgKmluZGV4LCBpbnQgc2xvdCk7CnN0YXRpYyBpbnQgYXRhX3Nl dHVwX2ludGVycnVwdChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9z ZXJpYWxpemUoZGV2aWNlX3QgZGV2LCBpbnQgZmxhZ3MpOwpzdGF0aWMgdm9p ZCBhdGFfcHJpbnRfY2FibGUoZGV2aWNlX3QgZGV2LCB1X2ludDhfdCAqd2hv KTsKc3RhdGljIGludCBhdGFfYXRhcGkoZGV2aWNlX3QgZGV2KTsKc3RhdGlj IGludCBhdGFfY2hlY2tfODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7 CnN0YXRpYyBpbnQgYXRhX21vZGUyaWR4KGludCBtb2RlKTsKCgovKgogKiBn ZW5lcmljIEFUQSBzdXBwb3J0IGZ1bmN0aW9ucwogKi8KaW50CmF0YV9nZW5l cmljX2lkZW50KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lf Y29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAg ICBkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiR0VORVJJQyBBVEEgY29udHJvbGxl ciIpOwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfZ2VuZXJpY19jaGlwaW5p dDsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0YV9nZW5lcmljX2No aXBpbml0KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29u dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAgICBp ZiAoYXRhX3NldHVwX2ludGVycnVwdChkZXYpKQoJcmV0dXJuIEVOWElPOwog ICAgY3Rsci0+c2V0bW9kZSA9IGF0YV9nZW5lcmljX3NldG1vZGU7CiAgICBy ZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQKYXRhX2dlbmVyaWNfaW50cih2b2lk ICpkYXRhKQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy ID0gZGF0YTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2g7CiAgICBpbnQg dW5pdDsKCiAgICBmb3IgKHVuaXQgPSAwOyB1bml0IDwgY3Rsci0+Y2hhbm5l bHM7IHVuaXQrKykgewoJaWYgKChjaCA9IGN0bHItPmludGVycnVwdFt1bml0 XS5hcmd1bWVudCkpCgkgICAgY3Rsci0+aW50ZXJydXB0W3VuaXRdLmZ1bmN0 aW9uKGNoKTsKICAgIH0KfQoKc3RhdGljIHZvaWQKYXRhX2dlbmVyaWNfc2V0 bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBzdHJ1Y3QgYXRh X2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg IG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYsIG1vZGUsIEFUQV9VRE1BMik7 CiAgICBtb2RlID0gYXRhX2NoZWNrXzgwcGluKGRldiwgbW9kZSk7CiAgICBp ZiAoIWF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBBVEFf U0ZfU0VUWEZFUiwgMCwgbW9kZSkpCglhdGFkZXYtPm1vZGUgPSBtb2RlOwp9 CgoKLyoKICogU0FUQSBzdXBwb3J0IGZ1bmN0aW9ucwogKi8Kc3RhdGljIHZv aWQKYXRhX3NhdGFfcGh5X2VuYWJsZShzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo KQp7CiAgICBpbnQgbG9vcCwgcmV0cnk7CgogICAgaWYgKChBVEFfSURYX0lO TChjaCwgQVRBX1NDT05UUk9MKSAmIEFUQV9TQ19ERVRfTUFTSykgPT0gQVRB X1NDX0RFVF9JRExFKSB7CglhdGFfc2F0YV9jb25uZWN0KGNoKTsKCXJldHVy bjsKICAgIH0KCiAgICBmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAxMDsgcmV0 cnkrKykgewoJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKyspIHsK CSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9TQ09OVFJPTCwgQVRBX1NDX0RF VF9SRVNFVCk7CgkgICAgYXRhX3VkZWxheSgxMDApOwoJICAgIGlmICgoQVRB X0lEWF9JTkwoY2gsIEFUQV9TQ09OVFJPTCkgJgoJCSBBVEFfU0NfREVUX01B U0spID09IEFUQV9TQ19ERVRfUkVTRVQpCgkJYnJlYWs7Cgl9CglhdGFfdWRl bGF5KDUwMDApOwoJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKysp IHsKCSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9TQ09OVFJPTCwgQVRBX1ND X0RFVF9JRExFIHwKCQkJCQkgICBBVEFfU0NfSVBNX0RJU19QQVJUSUFMIHwK CQkJCQkgICBBVEFfU0NfSVBNX0RJU19TTFVNQkVSKTsKCSAgICBhdGFfdWRl bGF5KDEwMCk7CgkgICAgaWYgKChBVEFfSURYX0lOTChjaCwgQVRBX1NDT05U Uk9MKSAmIEFUQV9TQ19ERVRfTUFTSykgPT0gMCkgewoJCWF0YV9zYXRhX2Nv bm5lY3QoY2gpOwoJCXJldHVybjsKCSAgICB9Cgl9CiAgICB9Cn0KCnN0YXRp YyB2b2lkCmF0YV9zYXRhX3BoeV9ldmVudCh2b2lkICpjb250ZXh0LCBpbnQg ZHVtbXkpCnsKICAgIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICp0cCA9IChz dHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAqKWNvbnRleHQ7CiAgICBzdHJ1Y3Qg YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyh0cC0+ZGV2KTsK ICAgIGRldmljZV90ICpjaGlsZHJlbjsKICAgIGludCBuY2hpbGRyZW4sIGk7 CgogICAgbXR4X2xvY2soJkdpYW50KTsgICAvKiBuZXdidXMgc3Vja2FnZSBp dCBuZWVkcyBHaWFudCAqLwogICAgaWYgKHRwLT5hY3Rpb24gPT0gQVRBX0Nf QVRUQUNIKSB7CglpZiAoYm9vdHZlcmJvc2UpCgkgICAgZGV2aWNlX3ByaW50 Zih0cC0+ZGV2LCAiQ09OTkVDVEVEXG4iKTsKCWF0YV9zYXRhX2Nvbm5lY3Qo Y2gpOwoJYXRhX2lkZW50aWZ5KHRwLT5kZXYpOwogICAgfQogICAgaWYgKHRw LT5hY3Rpb24gPT0gQVRBX0NfREVUQUNIKSB7CglpZiAoIWRldmljZV9nZXRf Y2hpbGRyZW4odHAtPmRldiwgJmNoaWxkcmVuLCAmbmNoaWxkcmVuKSkgewoJ ICAgIGZvciAoaSA9IDA7IGkgPCBuY2hpbGRyZW47IGkrKykKCQlpZiAoY2hp bGRyZW5baV0pCgkJICAgIGRldmljZV9kZWxldGVfY2hpbGQodHAtPmRldiwg Y2hpbGRyZW5baV0pOwoJICAgIGZyZWUoY2hpbGRyZW4sIE1fVEVNUCk7Cgl9 ICAgIAoJbXR4X2xvY2soJmNoLT5zdGF0ZV9tdHgpOwoJY2gtPnN0YXRlID0g QVRBX0lETEU7CgltdHhfdW5sb2NrKCZjaC0+c3RhdGVfbXR4KTsKCWlmIChi b290dmVyYm9zZSkKCSAgICBkZXZpY2VfcHJpbnRmKHRwLT5kZXYsICJESVND T05ORUNURURcbiIpOwogICAgfQogICAgbXR4X3VubG9jaygmR2lhbnQpOyAv KiBzdWNrYWdlIGNvZGUgZGVhbHQgd2l0aCwgcmVsZWFzZSBHaWFudCAqLwog ICAgZnJlZSh0cCwgTV9BVEEpOwp9CgpzdGF0aWMgaW50CmF0YV9zYXRhX2Nv bm5lY3Qoc3RydWN0IGF0YV9jaGFubmVsICpjaCkKewogICAgdV9pbnQzMl90 IHN0YXR1czsKICAgIGludCB0aW1lb3V0OwoKICAgIC8qIHdhaXQgdXAgdG8g MSBzZWNvbmQgZm9yICJjb25uZWN0IHdlbGwiICovCiAgICBmb3IgKHRpbWVv dXQgPSAwOyB0aW1lb3V0IDwgMTAwIDsgdGltZW91dCsrKSB7CglzdGF0dXMg PSBBVEFfSURYX0lOTChjaCwgQVRBX1NTVEFUVVMpOwoJaWYgKChzdGF0dXMg JiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PSBBVEFfU1NfQ09OV0VMTF9HRU4x IHx8CgkgICAgKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFU QV9TU19DT05XRUxMX0dFTjIpCgkgICAgYnJlYWs7CglhdGFfdWRlbGF5KDEw MDAwKTsKICAgIH0KICAgIGlmICh0aW1lb3V0ID49IDEwMCkgewoJaWYgKGJv b3R2ZXJib3NlKQoJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIlNBVEEg Y29ubmVjdCBzdGF0dXM9JTA4eFxuIiwgc3RhdHVzKTsKCXJldHVybiAwOwog ICAgfQoKICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KICAg IEFUQV9JRFhfT1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gs IEFUQV9TRVJST1IpKTsKCiAgICAvKiBmaW5kIG91dCB3aGF0IHR5cGUgZGV2 aWNlIHdlIGdvdCBwb2xsIGZvciBzcGVjJ2QgMzEgc2Vjb25kcyAqLwogICAg LyogWFhYIFNPUyAxMCBzZWNzIGZvciBub3cgYXMgSSBoYXZlIGxpdHRsZSBw YXRpZW5jZSAqLwogICAgY2gtPmRldmljZXMgPSAwOwogICAgZm9yICh0aW1l b3V0ID0gMDsgdGltZW91dCA8IDEwMDA7IHRpbWVvdXQrKykgewoJaWYgKEFU QV9JRFhfSU5CKGNoLCBBVEFfU1RBVFVTKSAmIEFUQV9TX0JVU1kpIAoJICAg IERFTEFZKDEwMDAwKTsKCWVsc2UKCSAgICBicmVhazsKICAgIH0KICAgIGlm IChib290dmVyYm9zZSkKCWRldmljZV9wcmludGYoY2gtPmRldiwgIlNBVEEg Y29ubmVjdCByZWFkeSB0aW1lPSVkbXNcbiIsIHRpbWVvdXQgKiAxMCk7CiAg ICBpZiAodGltZW91dCA8IDEwMDApIHsKCWlmICgoQVRBX0lEWF9JTkIoY2gs IEFUQV9DWUxfTFNCKSA9PSBBVEFQSV9NQUdJQ19MU0IpICYmCgkgICAgKEFU QV9JRFhfSU5CKGNoLCBBVEFfQ1lMX01TQikgPT0gQVRBUElfTUFHSUNfTVNC KSkKCSAgICBjaC0+ZGV2aWNlcyA9IEFUQV9BVEFQSV9NQVNURVI7CgllbHNl IAoJICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQV9NQVNURVI7CiAgICB9CiAg ICBpZiAoYm9vdHZlcmJvc2UpCglkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJz YXRhX2Nvbm5lY3QgZGV2aWNlcz0weCViXG4iLAoJCSAgICAgIGNoLT5kZXZp Y2VzLCAiXDIwXDNBVEFQSV9NQVNURVJcMUFUQV9NQVNURVIiKTsKICAgIHJl dHVybiAxOwp9CgpzdGF0aWMgdm9pZAphdGFfc2F0YV9zZXRtb2RlKGRldmlj ZV90IGRldiwgaW50IG1vZGUpCnsKICAgIHN0cnVjdCBhdGFfZGV2aWNlICph dGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgLyoKICAgICAq IGlmIHdlIGRldGVjdCB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgYSByZWFsIFNB VEEgZGV2aWNlIHdlIGxpbWl0IAogICAgICogdGhlIHRyYW5zZmVyIG1vZGUg dG8gVURNQTUvQVRBMTAwLgogICAgICogdGhpcyB3b3JrcyBhcm91bmQgdGhl IHByb2JsZW1zIHNvbWUgZGV2aWNlcyBoYXMgd2l0aCB0aGUgCiAgICAgKiBN YXJ2ZWxsIDg4U1g4MDMwIFNBVEEtPlBBVEEgY29udmVydGVycyBhbmQgVURN QTYvQVRBMTMzLgogICAgICovCiAgICBpZiAoYXRhZGV2LT5wYXJhbS5zYXRh Y2FwYWJpbGl0aWVzICE9IDB4MDAwMCAmJgoJYXRhZGV2LT5wYXJhbS5zYXRh Y2FwYWJpbGl0aWVzICE9IDB4ZmZmZikgewoJc3RydWN0IGF0YV9jaGFubmVs ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2 KSk7CgoJLyogb24gc29tZSBkcml2ZXMgd2UgbmVlZCB0byBzZXQgdGhlIHRy YW5zZmVyIG1vZGUgKi8KCWF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZF QVRVUkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwKCQkgICAgICAgYXRhX2xpbWl0 X21vZGUoZGV2LCBtb2RlLCBBVEFfVURNQTYpKTsKCgkvKiBxdWVyeSBTQVRB IFNUQVRVUyBmb3IgdGhlIHNwZWVkICovCiAgICAgICAgaWYgKGNoLT5yX2lv W0FUQV9TU1RBVFVTXS5yZXMgJiYgCgkgICAoKEFUQV9JRFhfSU5MKGNoLCBB VEFfU1NUQVRVUykgJiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PQoJICAgIEFU QV9TU19DT05XRUxMX0dFTjIpKQoJICAgIGF0YWRldi0+bW9kZSA9IEFUQV9T QTMwMDsKCWVsc2UgCgkgICAgYXRhZGV2LT5tb2RlID0gQVRBX1NBMTUwOwog ICAgfQogICAgZWxzZSB7Cgltb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBt b2RlLCBBVEFfVURNQTUpOwoJaWYgKCFhdGFfY29udHJvbGNtZChkZXYsIEFU QV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1vZGUpKQoJICAg IGF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBBSENJIHYx LjAgY29tcGxpYW50IFNBVEEgY2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucwog Ki8Kc3RydWN0IGF0YV9haGNpX2RtYV9wcmQgewogICAgdV9pbnQ2NF90ICAg ICAgICAgICAgICAgICAgIGRiYTsKICAgIHVfaW50MzJfdCAgICAgICAgICAg ICAgICAgICByZXNlcnZlZDsKICAgIHVfaW50MzJfdCAgICAgICAgICAgICAg ICAgICBkYmM7ICAgICAgICAgICAgLyogMCBiYXNlZCAqLwojZGVmaW5lIEFU QV9BSENJX1BSRF9NQVNLICAgICAgIDB4MDAzZmZmZmYgICAgICAvKiBtYXgg NE1CICovCiNkZWZpbmUgQVRBX0FIQ0lfUFJEX0lQQyAgICAgICAgKDE8PDMx KQp9IF9fcGFja2VkOwoKc3RydWN0IGF0YV9haGNpX2NtZF90YWIgewogICAg dV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgIGNmaXNbNjRdOwogICAgdV9p bnQ4X3QgICAgICAgICAgICAgICAgICAgIGFjbWRbMzJdOwogICAgdV9pbnQ4 X3QgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzMyXTsKICAgIHN0cnVj dCBhdGFfYWhjaV9kbWFfcHJkICAgICBwcmRfdGFiWzE2XTsKfSBfX3BhY2tl ZDsKCnN0cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCB7CiAgICB1X2ludDE2X3Qg ICAgICAgICAgICAgICAgICAgY21kX2ZsYWdzOwogICAgdV9pbnQxNl90ICAg ICAgICAgICAgICAgICAgIHByZF9sZW5ndGg7ICAgICAvKiBQUkQgZW50cmll cyAqLwogICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgIGJ5dGVjb3Vu dDsKICAgIHVfaW50NjRfdCAgICAgICAgICAgICAgICAgICBjbWRfdGFibGVf cGh5czsgLyogMTI4Ynl0ZSBhbGlnbmVkICovCn0gX19wYWNrZWQ7CgoKc3Rh dGljIGludAphdGFfYWhjaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAg IHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldik7CiAgICB1X2ludDMyX3QgdmVyc2lvbjsKCiAgICAvKiBy ZXNldCBBSENJIGNvbnRyb2xsZXIgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJf cmVzMiwgQVRBX0FIQ0lfR0hDLAoJICAgICBBVEFfSU5MKGN0bHItPnJfcmVz MiwgQVRBX0FIQ0lfR0hDKSB8IEFUQV9BSENJX0dIQ19IUik7CiAgICBERUxB WSgxMDAwMDAwKTsKICAgIGlmIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB X0FIQ0lfR0hDKSAmIEFUQV9BSENJX0dIQ19IUikgewoJYnVzX3JlbGVhc2Vf cmVzb3VyY2UoZGV2LCBjdGxyLT5yX3R5cGUyLCBjdGxyLT5yX3JpZDIsIGN0 bHItPnJfcmVzMik7CglkZXZpY2VfcHJpbnRmKGRldiwgIkFIQ0kgY29udHJv bGxlciByZXNldCBmYWlsdXJlXG4iKTsKCXJldHVybiBFTlhJTzsKICAgIH0K CiAgICAvKiBlbmFibGUgQUhDSSBtb2RlICovCiAgICBBVEFfT1VUTChjdGxy LT5yX3JlczIsIEFUQV9BSENJX0dIQywKCSAgICAgQVRBX0lOTChjdGxyLT5y X3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfQUUpOwoKICAg IC8qIGdldCB0aGUgbnVtYmVyIG9mIEhXIGNoYW5uZWxzICovCiAgICBjdGxy LT5jaGFubmVscyA9IChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lf Q0FQKSAmIEFUQV9BSENJX05QTUFTSykrMTsKCiAgICAvKiBjbGVhciBpbnRl cnJ1cHRzICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJ X0lTLCBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfSVMpKTsKCiAg ICAvKiBlbmFibGUgQUhDSSBpbnRlcnJ1cHRzICovCiAgICBBVEFfT1VUTChj dGxyLT5yX3JlczIsIEFUQV9BSENJX0dIQywKCSAgICAgQVRBX0lOTChjdGxy LT5yX3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfSUUpOwoK ICAgIGN0bHItPnJlc2V0ID0gYXRhX2FoY2lfcmVzZXQ7CiAgICBjdGxyLT5k bWFpbml0ID0gYXRhX2FoY2lfZG1haW5pdDsKICAgIGN0bHItPmFsbG9jYXRl ID0gYXRhX2FoY2lfYWxsb2NhdGU7CiAgICBjdGxyLT5zZXRtb2RlID0gYXRh X3NhdGFfc2V0bW9kZTsKCiAgICAvKiBlbmFibGUgUENJIGludGVycnVwdCAq LwogICAgcGNpX3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwKCQkg ICAgIHBjaV9yZWFkX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwgMikgJiB+ MHgwNDAwLCAyKTsKCiAgICAvKiBhbm5vdW5jZSB3ZSBzdXBwb3J0IHRoZSBI VyAqLwogICAgdmVyc2lvbiA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFf QUhDSV9WUyk7CiAgICBkZXZpY2VfcHJpbnRmKGRldiwKCQkgICJBSENJIFZl cnNpb24gJXgleC4leCV4IGNvbnRyb2xsZXIgd2l0aCAlZCBwb3J0cyBkZXRl Y3RlZFxuIiwKCQkgICh2ZXJzaW9uID4+IDI0KSAmIDB4ZmYsICh2ZXJzaW9u ID4+IDE2KSAmIDB4ZmYsCgkJICAodmVyc2lvbiA+PiA4KSAmIDB4ZmYsIHZl cnNpb24gJiAweGZmLCBjdGxyLT5jaGFubmVscyk7CiAgICByZXR1cm4gMDsK fQoKc3RhdGljIGludAphdGFfYWhjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3Ry dWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK ICAgIGludCBvZmZzZXQgPSAoY2gtPnVuaXQgPDwgNyk7CgogICAgLyogc2V0 dXAgbGVnYWN5IGNydWZ0IHdlIG5lZWQgKi8KICAgIGNoLT5yX2lvW0FUQV9D WUxfTFNCXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFf Q1lMX0xTQl0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9TSUcgKyAxICsgb2Zmc2V0 OwogICAgY2gtPnJfaW9bQVRBX0NZTF9NU0JdLnJlcyA9IGN0bHItPnJfcmVz MjsKICAgIGNoLT5yX2lvW0FUQV9DWUxfTVNCXS5vZmZzZXQgPSBBVEFfQUhD SV9QX1NJRyArIDMgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVT XS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVT XS5vZmZzZXQgPSBBVEFfQUhDSV9QX1RGRCArIG9mZnNldDsKICAgIGNoLT5y X2lvW0FUQV9BTFRTVEFUXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+ cl9pb1tBVEFfQUxUU1RBVF0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9URkQgKyBv ZmZzZXQ7CgogICAgLyogc2V0IHRoZSBTQVRBIHJlc291cmNlcyAqLwogICAg Y2gtPnJfaW9bQVRBX1NTVEFUVVNdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAg IGNoLT5yX2lvW0FUQV9TU1RBVFVTXS5vZmZzZXQgPSBBVEFfQUhDSV9QX1NT VFMgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5yZXMgPSBj dGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQg PSBBVEFfQUhDSV9QX1NFUlIgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFf U0NPTlRST0xdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FU QV9TQ09OVFJPTF0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9TQ1RMICsgb2Zmc2V0 OwogICAgY2gtPnJfaW9bQVRBX1NBQ1RJVkVdLnJlcyA9IGN0bHItPnJfcmVz MjsKICAgIGNoLT5yX2lvW0FUQV9TQUNUSVZFXS5vZmZzZXQgPSBBVEFfQUhD SV9QX1NBQ1QgKyBvZmZzZXQ7CgogICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9h aGNpX3N0YXR1czsKICAgIGNoLT5ody5iZWdpbl90cmFuc2FjdGlvbiA9IGF0 YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uOwogICAgY2gtPmh3LmVuZF90cmFu c2FjdGlvbiA9IGF0YV9haGNpX2VuZF90cmFuc2FjdGlvbjsKICAgIGNoLT5o dy5jb21tYW5kID0gTlVMTDsgICAgICAvKiBub3QgdXNlZCBoZXJlICovCgog ICAgLyogc2V0dXAgdGhlIHdvcmsgYXJlYXMgKi8KICAgIEFUQV9PVVRMKGN0 bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEIgKyBvZmZzZXQsCgkgICAgIGNo LT5kbWEtPndvcmtfYnVzICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUKTsKICAgIEFU QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEJVICsgb2Zmc2V0 LCAweDAwMDAwMDAwKTsKCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFU QV9BSENJX1BfRkIgKyBvZmZzZXQsCgkgICAgIGNoLT5kbWEtPndvcmtfYnVz ICsgQVRBX0FIQ0lfRkJfT0ZGU0VUKTsKICAgIEFUQV9PVVRMKGN0bHItPnJf cmVzMiwgQVRBX0FIQ0lfUF9GQlUgKyBvZmZzZXQsIDB4MDAwMDAwMDApOwoK ICAgIC8qIGVuYWJsZSB3YW50ZWQgcG9ydCBpbnRlcnJ1cHRzICovCiAgICBB VEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSUUgKyBvZmZzZXQs CgkgICAgIChBVEFfQUhDSV9QX0lYX0NQRCB8IEFUQV9BSENJX1BfSVhfVEZF IHwgQVRBX0FIQ0lfUF9JWF9IQkYgfAoJICAgICAgQVRBX0FIQ0lfUF9JWF9I QkQgfCBBVEFfQUhDSV9QX0lYX0lGIHwgQVRBX0FIQ0lfUF9JWF9PRiB8Cgkg ICAgICBBVEFfQUhDSV9QX0lYX1BSQyB8IEFUQV9BSENJX1BfSVhfUEMgfCBB VEFfQUhDSV9QX0lYX0RQIHwKCSAgICAgIEFUQV9BSENJX1BfSVhfVUYgfCBB VEFfQUhDSV9QX0lYX1NEQiB8IEFUQV9BSENJX1BfSVhfRFMgfAoJICAgICAg QVRBX0FIQ0lfUF9JWF9QUyB8IEFUQV9BSENJX1BfSVhfREhSKSk7CgogICAg Lyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KICAgIEFU QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQs CgkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhDSV9QX0NN RF9GUkUgfAoJICAgICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKICAgIHJldHVybiAw Owp9CgpzdGF0aWMgaW50CmF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYp CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3Ry dWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK ICAgIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICp0cDsKICAgIHVfaW50MzJf dCBhY3Rpb24sIGlzdGF0dXMsIHNzdGF0dXMsIGVycm9yLCBpc3N1ZWQ7CiAg ICBpbnQgb2Zmc2V0ID0gKGNoLT51bml0IDw8IDcpOwogICAgaW50IHRhZyA9 IDA7CgogICAgYWN0aW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9B SENJX0lTKTsKICAgIGlmIChhY3Rpb24gJiAoMSA8PCBjaC0+dW5pdCkpIHsK CWlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9J UyArIG9mZnNldCk7Cglpc3N1ZWQgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwg QVRBX0FIQ0lfUF9DSSArIG9mZnNldCk7Cglzc3RhdHVzID0gQVRBX0lOTChj dGxyLT5yX3JlczIsIEFUQV9BSENJX1BfU1NUUyArIG9mZnNldCk7CgllcnJv ciA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1NFUlIgKyBv ZmZzZXQpOwoKCS8qIGNsZWFyIGludGVycnVwdChzKSAqLwoJQVRBX09VVEwo Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgYWN0aW9uKTsKCUFUQV9PVVRM KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwgaXN0YXR1 cyk7CglBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfU0VSUiAr IG9mZnNldCwgZXJyb3IpOwoKCS8qIGRvIHdlIGhhdmUgY29sZCBjb25uZWN0 IHN1cnByaXNlICovCglpZiAoaXN0YXR1cyAmIEFUQV9BSENJX1BfSVhfQ1BE KSB7CgkgICAgcHJpbnRmKCJhdGFfYWhjaV9zdGF0dXMgc3RhdHVzPSUwOHgg c3N0YXR1cz0lMDh4IGVycm9yPSUwOHhcbiIsCgkJICAgaXN0YXR1cywgc3N0 YXR1cywgZXJyb3IpOwoJfQoKCS8qIGNoZWNrIGZvciBhbmQgaGFuZGxlIGNv bm5lY3QgZXZlbnRzICovCglpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lY X1BDKSAmJgoJICAgICh0cCA9IChzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAq KQoJCSAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayks CgkJCSBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCSAgICBpZiAo Ym9vdHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiQ09OTkVD VCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19BVFRB Q0g7CgkgICAgdHAtPmRldiA9IGNoLT5kZXY7CgkgICAgVEFTS19JTklUKCZ0 cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7CgkgICAgdGFz a3F1ZXVlX2VucXVldWUodGFza3F1ZXVlX3RocmVhZCwgJnRwLT50YXNrKTsK CX0KCgkvKiBjaGVjayBmb3IgYW5kIGhhbmRsZSBkaXNjb25uZWN0IGV2ZW50 cyAqLwoJZWxzZSBpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lYX1BSQykg JiYgCgkgICAgISgoc3N0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09 IEFUQV9TU19DT05XRUxMX0dFTjEgfHwKCSAgICAgIChzc3RhdHVzICYgQVRB X1NTX0NPTldFTExfTUFTSykgPT0gQVRBX1NTX0NPTldFTExfR0VOMikgJiYK CSAgICAodHAgPSAoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgKikKCQkgIG1h bGxvYyhzaXplb2Yoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2spLAoJCSAgICAg ICBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCSAgICBpZiAoYm9v dHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElTQ09OTkVD VCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19ERVRB Q0g7CgkgICAgdHAtPmRldiA9IGNoLT5kZXY7CgkgICAgVEFTS19JTklUKCZ0 cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7CgkgICAgdGFz a3F1ZXVlX2VucXVldWUodGFza3F1ZXVlX3RocmVhZCwgJnRwLT50YXNrKTsK CX0KCgkvKiBkbyB3ZSBoYXZlIGFueSBkZXZpY2UgYWN0aW9uID8gKi8KCWlm ICghKGlzc3VlZCAmICgxIDw8IHRhZykpKQoJICAgIHJldHVybiAxOwogICAg fQogICAgcmV0dXJuIDA7Cn0KCi8qIG11c3QgYmUgY2FsbGVkIHdpdGggQVRB IGNoYW5uZWwgbG9ja2VkIGFuZCBzdGF0ZV9tdHggaGVsZCAqLwpzdGF0aWMg aW50CmF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVx dWVzdCAqcmVxdWVzdCkKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl ciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3Qt PmRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CiAg ICBzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAqY3RwOwogICAgc3RydWN0IGF0 YV9haGNpX2NtZF9saXN0ICpjbHA7CiAgICBpbnQgdGFnID0gMCwgZW50cmll cyA9IDA7CiAgICBpbnQgZmlzX3NpemU7CgogICAgLyogZ2V0IGEgcGllY2Ug b2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAgICBjdHAg PSAoc3RydWN0IGF0YV9haGNpX2NtZF90YWIgKikKCSAgKGNoLT5kbWEtPndv cmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQgKyAoQVRBX0FIQ0lfQ1RfU0laRSAq IHRhZykpOwoKICAgIC8qIHNldHVwIHRoZSBGSVMgZm9yIHRoaXMgcmVxdWVz dCAqLyAvKiBYWFggU09TIEFUQVBJIG1pc3Npbmcgc3RpbGwgKi8KICAgIGlm ICghKGZpc19zaXplID0gYXRhX2FoY2lfc2V0dXBfZmlzKCZjdHAtPmNmaXNb MF0sIHJlcXVlc3QpKSkgewoJZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYs ICJzZXR0aW5nIHVwIFNBVEEgRklTIGZhaWxlZFxuIik7CglyZXF1ZXN0LT5y ZXN1bHQgPSBFSU87CglyZXR1cm4gQVRBX09QX0ZJTklTSEVEOwogICAgfQoK ICAgIC8qIGlmIHJlcXVlc3QgbW92ZXMgZGF0YSBzZXR1cCBhbmQgbG9hZCBT RyBsaXN0ICovCiAgICBpZiAocmVxdWVzdC0+ZmxhZ3MgJiAoQVRBX1JfUkVB RCB8IEFUQV9SX1dSSVRFKSkgewoJaWYgKGNoLT5kbWEtPmxvYWQoY2gtPmRl diwgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+Ynl0ZWNvdW50LAoJCQkgIHJl cXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCwKCQkJICBjdHAtPnByZF90YWIs ICZlbnRyaWVzKSkgewoJICAgIGRldmljZV9wcmludGYocmVxdWVzdC0+ZGV2 LCAic2V0dGluZyB1cCBETUEgZmFpbGVkXG4iKTsKCSAgICByZXF1ZXN0LT5y ZXN1bHQgPSBFSU87CgkgICAgcmV0dXJuIEFUQV9PUF9GSU5JU0hFRDsKCX0K ICAgIH0KCiAgICAvKiBzZXR1cCB0aGUgY29tbWFuZCBsaXN0IGVudHJ5ICov CiAgICBjbHAgPSAoc3RydWN0IGF0YV9haGNpX2NtZF9saXN0ICopCgkgIChj aC0+ZG1hLT53b3JrICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUICsgKEFUQV9BSENJ X0NMX1NJWkUgKiB0YWcpKTsKCiAgICBjbHAtPnByZF9sZW5ndGggPSBlbnRy aWVzOwogICAgY2xwLT5jbWRfZmxhZ3MgPSAocmVxdWVzdC0+ZmxhZ3MgJiBB VEFfUl9XUklURSA/ICgxPDw2KSA6IDApIHwKCQkgICAgIChyZXF1ZXN0LT5m bGFncyAmIEFUQV9SX0FUQVBJID8gKDE8PDUpIDogMCkgfAoJCSAgICAgKGZp c19zaXplIC8gc2l6ZW9mKHVfaW50MzJfdCkpOwogICAgY2xwLT5ieXRlY291 bnQgPSAwOwogICAgY2xwLT5jbWRfdGFibGVfcGh5cyA9IGh0b2xlNjQoY2gt PmRtYS0+d29ya19idXMgKyBBVEFfQUhDSV9DVF9PRkZTRVQgKwoJCQkJICAo QVRBX0FIQ0lfQ1RfU0laRSAqIHRhZykpOwoKICAgIC8qIGNsZWFyIGV2ZW50 dWFsIEFDVElWRSBiaXQgKi8KICAgIEFUQV9JRFhfT1VUTChjaCwgQVRBX1NB Q1RJVkUsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0FDVElWRSkgJiAoMSA8PCB0 YWcpKTsKCiAgICAvKiBpc3N1ZSB0aGUgY29tbWFuZCAqLwogICAgQVRBX09V VEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NJICsgKGNoLT51bml0IDw8 IDcpLCAoMSA8PCB0YWcpKTsKCiAgICAvKiBzdGFydCB0aGUgdGltZW91dCAq LwogICAgY2FsbG91dF9yZXNldCgmcmVxdWVzdC0+Y2FsbG91dCwgcmVxdWVz dC0+dGltZW91dCAqIGh6LAoJCSAgKHRpbWVvdXRfdCopYXRhX3RpbWVvdXQs IHJlcXVlc3QpOwogICAgcmV0dXJuIEFUQV9PUF9DT05USU5VRVM7Cn0KCi8q IG11c3QgYmUgY2FsbGVkIHdpdGggQVRBIGNoYW5uZWwgbG9ja2VkIGFuZCBz dGF0ZV9tdHggaGVsZCAqLwpzdGF0aWMgaW50CmF0YV9haGNpX2VuZF90cmFu c2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCnsKICAgIHN0 cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHI9ZGV2aWNlX2dldF9zb2Z0 YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYpKTsKICAgIHN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFy ZW50KHJlcXVlc3QtPmRldikpOwogICAgc3RydWN0IGF0YV9haGNpX2NtZF9s aXN0ICpjbHA7CiAgICB1X2ludDMyX3QgdGZfZGF0YTsKICAgIGludCB0YWcg PSAwOwoKICAgIC8qIGtpbGwgdGhlIHRpbWVvdXQgKi8KICAgIGNhbGxvdXRf c3RvcCgmcmVxdWVzdC0+Y2FsbG91dCk7CgogICAgLyogZ2V0IHN0YXR1cyAq LwogICAgdGZfZGF0YSA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD SV9QX1RGRCArIChjaC0+dW5pdCA8PCA3KSk7CiAgICByZXF1ZXN0LT5zdGF0 dXMgPSB0Zl9kYXRhOwoKICAgIC8qIGlmIGVycm9yIHN0YXR1cyBnZXQgZGV0 YWlscyAqLwogICAgaWYgKHJlcXVlc3QtPnN0YXR1cyAmIEFUQV9TX0VSUk9S KSAgCglyZXF1ZXN0LT5lcnJvciA9IHRmX2RhdGEgPj4gODsKCiAgICAvKiBy ZWNvcmQgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBtb3ZlZCAqLwogICAg Y2xwID0gKHN0cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCAqKQoJICAoY2gtPmRt YS0+d29yayArIEFUQV9BSENJX0NMX09GRlNFVCArIChBVEFfQUhDSV9DTF9T SVpFICogdGFnKSk7CiAgICByZXF1ZXN0LT5kb25lY291bnQgPSBjbHAtPmJ5 dGVjb3VudDsKCiAgICAvKiByZWxlYXNlIFNHIGxpc3QgZXRjICovCiAgICBj aC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CgogICAgcmV0dXJuIEFUQV9PUF9G SU5JU0hFRDsKfQoKc3RhdGljIHZvaWQKYXRhX2FoY2lfcmVzZXQoZGV2aWNl X3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsK ICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CiAgICB1X2ludDMyX3QgY21kOwogICAgaW50IHRpbWVvdXQsIG9m ZnNldCA9IChjaC0+dW5pdCA8PCA3KTsKCiAgICAvKiBraWxsIG9mZiBhbGwg YWN0aXZpdHkgb24gdGhpcyBjaGFubmVsICovCiAgICBjbWQgPSBBVEFfSU5M KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpOwogICAg QVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNl dCwKCSAgICAgY21kICYgfihBVEFfQUhDSV9QX0NNRF9GUkUgfCBBVEFfQUhD SV9QX0NNRF9TVCkpOwoKICAgIC8qIFhYWCBTT1MgdGhpcyBpcyBub3QgZW50 aXJlbHkgd3JvbmcgKi8KICAgIHRpbWVvdXQgPSAwOwogICAgZG8gewoJREVM QVkoMTAwMCk7CglpZiAodGltZW91dCsrID4gNTAwKQoJICAgIGRldmljZV9w cmludGYoZGV2LCAic3RvcHBpbmcgQUhDSSBlbmdpbmUgZmFpbGVkXG4iKTsK CSAgICBicmVhazsKCX0KICAgIHdoaWxlIChBVEFfSU5MKGN0bHItPnJfcmVz MiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpICYgQVRBX0FIQ0lfUF9DTURf Q1IpOwoKICAgIC8qIGlzc3VlIENvbW1hbmQgTGlzdCBPdmVycmlkZSBpZiBz dXBwb3J0ZWQgKi8gCiAgICBpZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFU QV9BSENJX0NBUCkgJiBBVEFfQUhDSV9DQVBfQ0xPKSB7CgljbWQgPSBBVEFf SU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpOwoJ Y21kIHw9IEFUQV9BSENJX1BfQ01EX0NMTzsKCUFUQV9PVVRMKGN0bHItPnJf cmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQsIGNtZCk7Cgl0aW1lb3V0 ID0gMDsKCWRvIHsKCSAgICBERUxBWSgxMDAwKTsKCSAgICBpZiAodGltZW91 dCsrID4gNTAwKQoJCWRldmljZV9wcmludGYoZGV2LCAiZXhlY3V0aW5nIENM TyBmYWlsZWRcbiIpOwoJCWJyZWFrOwoJICAgIH0KCXdoaWxlIChBVEFfSU5M KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQrb2Zmc2V0KSZBVEFfQUhD SV9QX0NNRF9DTE8pOwogICAgfQoKICAgIC8qIHNwaW4gdXAgZGV2aWNlICov CiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsg b2Zmc2V0LCBBVEFfQUhDSV9QX0NNRF9TVUQpOwoKICAgIGF0YV9zYXRhX3Bo eV9lbmFibGUoY2gpOwoKICAgIC8qIGNsZWFyIGFueSBpbnRlcnJ1cHRzIHBl bmRpbmcgb24gdGhpcyBjaGFubmVsICovCiAgICBBVEFfT1VUTChjdGxyLT5y X3JlczIsIEFUQV9BSENJX1BfSVMgKyBvZmZzZXQsCgkgICAgIEFUQV9JTkwo Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CgogICAg Lyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KICAgIEFU QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQs CgkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhDSV9QX0NN RF9GUkUgfAoJICAgICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKfQoKc3RhdGljIHZv aWQKYXRhX2FoY2lfZG1hc2V0cHJkKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdt ZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQp7ICAgIAogICAg c3RydWN0IGF0YV9kbWFzZXRwcmRfYXJncyAqYXJncyA9IHhzYzsKICAgIHN0 cnVjdCBhdGFfYWhjaV9kbWFfcHJkICpwcmQgPSBhcmdzLT5kbWF0YWI7CiAg ICBpbnQgaTsKCiAgICBpZiAoIShhcmdzLT5lcnJvciA9IGVycm9yKSkgewoJ Zm9yIChpID0gMDsgaSA8IG5zZWdzOyBpKyspIHsKCSAgICBwcmRbaV0uZGJh ID0gaHRvbGU2NChzZWdzW2ldLmRzX2FkZHIpOwoJICAgIHByZFtpXS5kYmMg PSBodG9sZTMyKChzZWdzW2ldLmRzX2xlbiAtIDEpICYgQVRBX0FIQ0lfUFJE X01BU0spOwoJfQogICAgfQogICAgYXJncy0+bnNlZ3MgPSBuc2VnczsKfQoK c3RhdGljIHZvaWQKYXRhX2FoY2lfZG1haW5pdChkZXZpY2VfdCBkZXYpCnsK ICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CgogICAgYXRhX2RtYWluaXQoZGV2KTsKICAgIGlmIChjaC0+ZG1h KSB7CgkvKiBub3RlIHN0YXJ0IGFuZCBzdG9wIGFyZSBub3QgdXNlZCBoZXJl ICovCgljaC0+ZG1hLT5zZXRwcmQgPSBhdGFfYWhjaV9kbWFzZXRwcmQ7Cglj aC0+ZG1hLT5tYXhfaW9zaXplID0gODE5MiAqIERFVl9CU0laRTsKICAgIH0K fQoKc3RhdGljIGludAphdGFfYWhjaV9zZXR1cF9maXModV9pbnQ4X3QgKmZp cywgc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQp7CiAgICBzdHJ1Y3Qg YXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0 LT5kZXYpOwogICAgaW50IGlkeCA9IDA7CgogICAgLyogWFhYIFNPUyBhZGQg QVRBUEkgY29tbWFuZHMgc3VwcG9ydCBsYXRlciAqLwogICAgYXRhX21vZGlm eV9pZl80OGJpdChyZXF1ZXN0KTsKCiAgICBmaXNbaWR4KytdID0gMHgyNzsg IC8qIGhvc3QgdG8gZGV2aWNlICovCiAgICBmaXNbaWR4KytdID0gMHg4MDsg IC8qIGNvbW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KICAgIGZp c1tpZHgrK10gPSByZXF1ZXN0LT51LmF0YS5jb21tYW5kOwogICAgZmlzW2lk eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmZlYXR1cmU7CgogICAgZmlzW2lkeCsr XSA9IHJlcXVlc3QtPnUuYXRhLmxiYTsKICAgIGZpc1tpZHgrK10gPSByZXF1 ZXN0LT51LmF0YS5sYmEgPj4gODsKICAgIGZpc1tpZHgrK10gPSByZXF1ZXN0 LT51LmF0YS5sYmEgPj4gMTY7CiAgICBmaXNbaWR4XSA9IEFUQV9EX0xCQSB8 IGF0YWRldi0+dW5pdDsKICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0Rf NDhCSVRfQUNUSVZFKQoJaWR4Kys7CiAgICBlbHNlCglmaXNbaWR4KytdIHw9 IChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMjQgJiAweDBmKTsKCiAgICBmaXNb aWR4KytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDI0OwogICAgZmlzW2lk eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAzMjsgCiAgICBmaXNbaWR4 KytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDQwOyAKICAgIGZpc1tpZHgr K10gPSByZXF1ZXN0LT51LmF0YS5mZWF0dXJlID4+IDg7CgogICAgZmlzW2lk eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmNvdW50OwogICAgZmlzW2lkeCsrXSA9 IHJlcXVlc3QtPnUuYXRhLmNvdW50ID4+IDg7CiAgICBmaXNbaWR4KytdID0g MHgwMDsKICAgIGZpc1tpZHgrK10gPSBBVEFfQV80QklUOwoKICAgIGZpc1tp ZHgrK10gPSAweDAwOwogICAgZmlzW2lkeCsrXSA9IDB4MDA7CiAgICBmaXNb aWR4KytdID0gMHgwMDsKICAgIGZpc1tpZHgrK10gPSAweDAwOwogICAgcmV0 dXJuIGlkeDsKfQoKCi8qCiAqIEFjYXJkIGNoaXBzZXQgc3VwcG9ydCBmdW5j dGlvbnMKICovCmludAphdGFfYWNhcmRfaWRlbnQoZGV2aWNlX3QgZGV2KQp7 CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNl X2dldF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0YV9jaGlwX2lkICppZHg7 CiAgICBzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkIGlkc1tdID0KICAgIHt7 IEFUQV9BVFA4NTBSLCAwLCBBVFBPTEQsIDB4MDAsIEFUQV9VRE1BMiwgIkFU UDg1MCIgfSwKICAgICB7IEFUQV9BVFA4NjBBLCAwLCAwLCAgICAgIDB4MDAs IEFUQV9VRE1BNCwgIkFUUDg2MEEiIH0sCiAgICAgeyBBVEFfQVRQODYwUiwg MCwgMCwgICAgICAweDAwLCBBVEFfVURNQTQsICJBVFA4NjBSIiB9LAogICAg IHsgQVRBX0FUUDg2NUEsIDAsIDAsICAgICAgMHgwMCwgQVRBX1VETUE2LCAi QVRQODY1QSIgfSwKICAgICB7IEFUQV9BVFA4NjVSLCAwLCAwLCAgICAgIDB4 MDAsIEFUQV9VRE1BNiwgIkFUUDg2NVIiIH0sCiAgICAgeyAwLCAwLCAwLCAw LCAwLCAwfX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAgIGlmICghKGlk eCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87 CgogICAgc3ByaW50ZihidWZmZXIsICJBY2FyZCAlcyAlcyBjb250cm9sbGVy IiwKCSAgICBpZHgtPnRleHQsIGF0YV9tb2RlMnN0cihpZHgtPm1heF9kbWEp KTsKICAgIGRldmljZV9zZXRfZGVzY19jb3B5KGRldiwgYnVmZmVyKTsKICAg IGN0bHItPmNoaXAgPSBpZHg7CiAgICBjdGxyLT5jaGlwaW5pdCA9IGF0YV9h Y2FyZF9jaGlwaW5pdDsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0 YV9hY2FyZF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVy biBFTlhJTzsKCiAgICBjdGxyLT5hbGxvY2F0ZSA9IGF0YV9hY2FyZF9hbGxv Y2F0ZTsKICAgIGlmIChjdGxyLT5jaGlwLT5jZmcxID09IEFUUE9MRCkgewoJ Y3Rsci0+c2V0bW9kZSA9IGF0YV9hY2FyZF84NTBfc2V0bW9kZTsKCWN0bHIt PmxvY2tpbmcgPSBhdGFfc2VyaWFsaXplOwogICAgfQogICAgZWxzZQoJY3Rs ci0+c2V0bW9kZSA9IGF0YV9hY2FyZF84Nlhfc2V0bW9kZTsKICAgIHJldHVy biAwOwp9CgpzdGF0aWMgaW50CmF0YV9hY2FyZF9hbGxvY2F0ZShkZXZpY2Vf dCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CgogICAgLyogc2V0dXAgdGhlIHVzdWFsIHJlZ2lz dGVyIG5vcm1hbCBwY2kgc3R5bGUgKi8KICAgIGlmIChhdGFfcGNpX2FsbG9j YXRlKGRldikpCglyZXR1cm4gRU5YSU87CgogICAgY2gtPmh3LnN0YXR1cyA9 IGF0YV9hY2FyZF9zdGF0dXM7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlu dAphdGFfYWNhcmRfc3RhdHVzKGRldmljZV90IGRldikKewogICAgc3RydWN0 IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMo ZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGlmIChjdGxy LT5jaGlwLT5jZmcxID09IEFUUE9MRCAmJgoJQVRBX0xPQ0tJTkcoY2gtPmRl diwgQVRBX0xGX1dISUNIKSAhPSBjaC0+dW5pdCkKCSAgICByZXR1cm4gMDsK ICAgIGlmIChjaC0+ZG1hICYmIChjaC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFf QUNUSVZFKSkgewoJaW50IGJtc3RhdCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFf Qk1TVEFUX1BPUlQpICYgQVRBX0JNU1RBVF9NQVNLOwoKCWlmICgoYm1zdGF0 ICYgKEFUQV9CTVNUQVRfQUNUSVZFIHwgQVRBX0JNU1RBVF9JTlRFUlJVUFQp KSAhPQoJICAgIEFUQV9CTVNUQVRfSU5URVJSVVBUKQoJICAgIHJldHVybiAw OwoJQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIGJtc3RhdCAm IH5BVEFfQk1TVEFUX0VSUk9SKTsKCURFTEFZKDEpOwoJQVRBX0lEWF9PVVRC KGNoLCBBVEFfQk1DTURfUE9SVCwKCQkgICAgIEFUQV9JRFhfSU5CKGNoLCBB VEFfQk1DTURfUE9SVCkgJiB+QVRBX0JNQ01EX1NUQVJUX1NUT1ApOwoJREVM QVkoMSk7CiAgICB9CiAgICBpZiAoQVRBX0lEWF9JTkIoY2gsIEFUQV9BTFRT VEFUKSAmIEFUQV9TX0JVU1kpIHsKCURFTEFZKDEwMCk7CglpZiAoQVRBX0lE WF9JTkIoY2gsIEFUQV9BTFRTVEFUKSAmIEFUQV9TX0JVU1kpCgkgICAgcmV0 dXJuIDA7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3RhdGljIHZvaWQKYXRh X2FjYXJkXzg1MF9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCnsK ICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAg c3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf c29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAg IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CiAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFf REVWKGF0YWRldi0+dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9kZSA9 IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwKCQkJICBhdGFfYXRhcGkoZGV2 KSA/IEFUQV9QSU9fTUFYIDogY3Rsci0+Y2hpcC0+bWF4X2RtYSk7CgogICAg LyogWFhYIFNPUyBtaXNzaW5nIFdETUEwKzEgKyBQSU8gbW9kZXMgKi8KICAg IGlmIChtb2RlID49IEFUQV9XRE1BMikgewoJZXJyb3IgPSBhdGFfY29udHJv bGNtZChkZXYsIEFUQV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAs IG1vZGUpOwoJaWYgKGJvb3R2ZXJib3NlKQoJICAgIGRldmljZV9wcmludGYo ZGV2LCAiJXNzZXR0aW5nICVzIG9uICVzIGNoaXBcbiIsCgkJCSAgKGVycm9y KSA/ICJGQUlMVVJFICIgOiAiIiwKCQkJICBhdGFfbW9kZTJzdHIobW9kZSks IGN0bHItPmNoaXAtPnRleHQpOwoJaWYgKCFlcnJvcikgewoJICAgIHVfaW50 OF90IHJlZzU0ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NTQsIDEp OwoJICAgIAoJICAgIHJlZzU0ICY9IH4oMHgwMyA8PCAoZGV2bm8gPDwgMSkp OwoJICAgIGlmIChtb2RlID49IEFUQV9VRE1BMCkKCQlyZWc1NCB8PSAoKCht b2RlICYgQVRBX01PREVfTUFTSykgKyAxKSA8PCAoZGV2bm8gPDwgMSkpOwoJ ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1NCwgcmVnNTQsIDEp OwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwgMHhhNiwg MSk7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQwICsgKGRl dm5vIDw8IDEpLCAweDAzMDEsIDIpOwoJICAgIGF0YWRldi0+bW9kZSA9IG1v ZGU7CgkgICAgcmV0dXJuOwoJfQogICAgfQogICAgLyogd2UgY291bGQgc2V0 IFBJTyBtb2RlIHRpbWluZ3MsIGJ1dCB3ZSBhc3N1bWUgdGhlIEJJT1MgZGlk IHRoYXQgKi8KfQoKc3RhdGljIHZvaWQKYXRhX2FjYXJkXzg2WF9zZXRtb2Rl KGRldmljZV90IGRldiwgaW50IG1vZGUpCnsKICAgIGRldmljZV90IGdwYXJl bnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29u dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZ3BhcmVudCk7CiAg ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk ZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfZGV2aWNl ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgZGV2 bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFfREVWKGF0YWRldi0+dW5pdCk7 CiAgICBpbnQgZXJyb3I7CgoKICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShk ZXYsIG1vZGUsCgkJCSAgYXRhX2F0YXBpKGRldikgPyBBVEFfUElPX01BWCA6 IGN0bHItPmNoaXAtPm1heF9kbWEpOwoKICAgIG1vZGUgPSBhdGFfY2hlY2tf ODBwaW4oZGV2LCBtb2RlKTsKCiAgICAvKiBYWFggU09TIG1pc3NpbmcgV0RN QTArMSArIFBJTyBtb2RlcyAqLwogICAgaWYgKG1vZGUgPj0gQVRBX1dETUEy KSB7CgllcnJvciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRV UkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwgbW9kZSk7CglpZiAoYm9vdHZlcmJv c2UpCgkgICAgZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMgb24g JXMgY2hpcFxuIiwKCQkJICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLAoJ CQkgIGF0YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7Cglp ZiAoIWVycm9yKSB7CgkgICAgdV9pbnQxNl90IHJlZzQ0ID0gcGNpX3JlYWRf Y29uZmlnKGdwYXJlbnQsIDB4NDQsIDIpOwoJICAgIAoJICAgIHJlZzQ0ICY9 IH4oMHgwMDBmIDw8IChkZXZubyA8PCAyKSk7CgkgICAgaWYgKG1vZGUgPj0g QVRBX1VETUEwKQoJCXJlZzQ0IHw9ICgoKG1vZGUgJiBBVEFfTU9ERV9NQVNL KSArIDEpIDw8IChkZXZubyA8PCAyKSk7CgkgICAgcGNpX3dyaXRlX2NvbmZp ZyhncGFyZW50LCAweDQ0LCByZWc0NCwgMik7CgkgICAgcGNpX3dyaXRlX2Nv bmZpZyhncGFyZW50LCAweDRhLCAweGE2LCAxKTsKCSAgICBwY2lfd3JpdGVf Y29uZmlnKGdwYXJlbnQsIDB4NDAgKyBkZXZubywgMHgzMSwgMSk7CgkgICAg YXRhZGV2LT5tb2RlID0gbW9kZTsKCSAgICByZXR1cm47Cgl9CiAgICB9CiAg ICAvKiB3ZSBjb3VsZCBzZXQgUElPIG1vZGUgdGltaW5ncywgYnV0IHdlIGFz c3VtZSB0aGUgQklPUyBkaWQgdGhhdCAqLwp9CgoKLyoKICogQWNlciBMYWJz IEluYyAoQUxJKSBjaGlwc2V0IHN1cHBvcnQgZnVuY3Rpb25zCiAqLwppbnQK YXRhX2FsaV9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFf cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7 CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsKICAgIHN0YXRpYyBzdHJ1 Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAge3sgQVRBX0FMSV81Mjg5LCAw eDAwLCAyLCBBTElTQVRBLCBBVEFfU0ExNTAsICJNNTI4OSIgfSwKICAgICB7 IEFUQV9BTElfNTI4OCwgMHgwMCwgNCwgQUxJU0FUQSwgQVRBX1NBMzAwLCAi TTUyODgiIH0sCiAgICAgeyBBVEFfQUxJXzUyODcsIDB4MDAsIDQsIEFMSVNB VEEsIEFUQV9TQTE1MCwgIk01Mjg3IiB9LAogICAgIHsgQVRBX0FMSV81Mjgx LCAweDAwLCAyLCBBTElTQVRBLCBBVEFfU0ExNTAsICJNNTI4MSIgfSwKICAg ICB7IEFUQV9BTElfNTIyOSwgMHhjNSwgMCwgQUxJTkVXLCAgQVRBX1VETUE2 LCAiTTUyMjkiIH0sCiAgICAgeyBBVEFfQUxJXzUyMjksIDB4YzQsIDAsIEFM SU5FVywgIEFUQV9VRE1BNSwgIk01MjI5IiB9LAogICAgIHsgQVRBX0FMSV81 MjI5LCAweGMyLCAwLCBBTElORVcsICBBVEFfVURNQTQsICJNNTIyOSIgfSwK ICAgICB7IEFUQV9BTElfNTIyOSwgMHgyMCwgMCwgQUxJT0xELCAgQVRBX1VE TUEyLCAiTTUyMjkiIH0sCiAgICAgeyBBVEFfQUxJXzUyMjksIDB4MDAsIDAs IEFMSU9MRCwgIEFUQV9XRE1BMiwgIk01MjI5IiB9LAogICAgIHsgMCwgMCwg MCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJbNjRdOyAKCiAgICBpZiAo IShpZHggPSBhdGFfbWF0Y2hfY2hpcChkZXYsIGlkcykpKQoJcmV0dXJuIEVO WElPOwoKICAgIHNwcmludGYoYnVmZmVyLCAiQWNlckxhYnMgJXMgJXMgY29u dHJvbGxlciIsCgkgICAgaWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5t YXhfZG1hKSk7CiAgICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZl cik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQg PSBhdGFfYWxpX2NoaXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBp bnQKYXRhX2FsaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVj dCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJl dHVybiBFTlhJTzsKCiAgICBzd2l0Y2ggKGN0bHItPmNoaXAtPmNmZzIpIHsK ICAgIGNhc2UgQUxJU0FUQToKCWN0bHItPmNoYW5uZWxzID0gY3Rsci0+Y2hp cC0+Y2ZnMTsKCWN0bHItPmFsbG9jYXRlID0gYXRhX2FsaV9zYXRhX2FsbG9j YXRlOwoJY3Rsci0+c2V0bW9kZSA9IGF0YV9zYXRhX3NldG1vZGU7CgoJLyog aWYgd2UgaGF2ZSBhIG1lbW9yeSByZXNvdXJjZSB3ZSBjYW4gbGlrZWx5IGRv IEFIQ0kgKi8KCWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9SWTsKCWN0 bHItPnJfcmlkMiA9IFBDSVJfQkFSKDUpOwoJaWYgKChjdGxyLT5yX3JlczIg PSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgY3Rsci0+cl90eXBlMiwK CQkJCQkJICAgJmN0bHItPnJfcmlkMiwgUkZfQUNUSVZFKSkpCgkgICAgcmV0 dXJuIGF0YV9haGNpX2NoaXBpbml0KGRldik7CgoJLyogZW5hYmxlIFBDSSBp bnRlcnJ1cHQgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1B TkQsCgkJCSBwY2lfcmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIp ICYgfjB4MDQwMCwgMik7CglicmVhazsKCiAgICBjYXNlIEFMSU5FVzoKCS8q IHVzZSBkZXZpY2UgaW50ZXJydXB0IGFzIGJ5dGUgY291bnQgZW5kICovCglw Y2lfd3JpdGVfY29uZmlnKGRldiwgMHg0YSwgcGNpX3JlYWRfY29uZmlnKGRl diwgMHg0YSwgMSkgfCAweDIwLCAxKTsKCgkvKiBlbmFibGUgY2FibGUgZGV0 ZWN0aW9uIGFuZCBVRE1BIHN1cHBvcnQgb24gbmV3ZXIgY2hpcHMgKi8KCXBj aV93cml0ZV9jb25maWcoZGV2LCAweDRiLCBwY2lfcmVhZF9jb25maWcoZGV2 LCAweDRiLCAxKSB8IDB4MDksIDEpOwoKCS8qIGVuYWJsZSBBVEFQSSBVRE1B IG1vZGUgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDUzLCBwY2lfcmVh ZF9jb25maWcoZGV2LCAweDUzLCAxKSB8IDB4MDEsIDEpOwoKCS8qIG9ubHkg Y2hpcHMgd2l0aCByZXZpc2lvbiA+IDB4YzQgY2FuIGRvIDQ4Yml0IERNQSAq LwoJaWYgKGN0bHItPmNoaXAtPmNoaXByZXYgPD0gMHhjNCkKCSAgICBkZXZp Y2VfcHJpbnRmKGRldiwKCQkJICAidXNpbmcgUElPIHRyYW5zZmVycyBhYm92 ZSAxMzdHQiBhcyB3b3JrYXJvdW5kIGZvciAiCgkJCSAgIjQ4Yml0IERNQSBh Y2Nlc3MgYnVnLCBleHBlY3QgcmVkdWNlZCBwZXJmb3JtYW5jZVxuIik7Cglj dGxyLT5hbGxvY2F0ZSA9IGF0YV9hbGlfYWxsb2NhdGU7CgljdGxyLT5yZXNl dCA9IGF0YV9hbGlfcmVzZXQ7CgljdGxyLT5zZXRtb2RlID0gYXRhX2FsaV9z ZXRtb2RlOwoJYnJlYWs7CgogICAgY2FzZSBBTElPTEQ6CgkvKiBkZWFjdGl2 YXRlIHRoZSBBVEFQSSBGSUZPIGFuZCBlbmFibGUgQVRBUEkgVURNQSAqLwoJ cGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTMsIHBjaV9yZWFkX2NvbmZpZyhk ZXYsIDB4NTMsIDEpIHwgMHgwMywgMSk7CgljdGxyLT5zZXRtb2RlID0gYXRh X2FsaV9zZXRtb2RlOwoJYnJlYWs7CiAgICB9CiAgICByZXR1cm4gMDsKfQoK c3RhdGljIGludAphdGFfYWxpX2FsbG9jYXRlKGRldmljZV90IGRldikKewog ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg IC8qIHNldHVwIHRoZSB1c3VhbCByZWdpc3RlciBub3JtYWwgcGNpIHN0eWxl ICovCiAgICBpZiAoYXRhX3BjaV9hbGxvY2F0ZShkZXYpKQoJcmV0dXJuIEVO WElPOwoKICAgIC8qIG9sZGVyIGNoaXBzIGNhbid0IGRvIDQ4Yml0IERNQSB0 cmFuc2ZlcnMgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jaGlwcmV2IDw9IDB4 YzQpCgljaC0+ZmxhZ3MgfD0gQVRBX05PXzQ4QklUX0RNQTsKCiAgICByZXR1 cm4gMDsKfQoKc3RhdGljIGludAphdGFfYWxpX3NhdGFfYWxsb2NhdGUoZGV2 aWNlX3QgZGV2KQp7CiAgICBkZXZpY2VfdCBwYXJlbnQgPSBkZXZpY2VfZ2V0 X3BhcmVudChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAq Y3RsciA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKICAgIHN0cnVjdCBh dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBz dHJ1Y3QgcmVzb3VyY2UgKmlvID0gTlVMTCwgKmN0bGlvID0gTlVMTDsKICAg IGludCB1bml0MDEgPSAoY2gtPnVuaXQgJiAxKSwgdW5pdDEwID0gKGNoLT51 bml0ICYgMik7CiAgICBpbnQgaSwgcmlkOwoJCQogICAgcmlkID0gUENJUl9C QVIoMCkgKyAodW5pdDAxID8gOCA6IDApOwogICAgaW8gPSBidXNfYWxsb2Nf cmVzb3VyY2VfYW55KHBhcmVudCwgU1lTX1JFU19JT1BPUlQsICZyaWQsIFJG X0FDVElWRSk7CiAgICBpZiAoIWlvKQoJcmV0dXJuIEVOWElPOwoKICAgIHJp ZCA9IFBDSVJfQkFSKDEpICsgKHVuaXQwMSA/IDggOiAwKTsKICAgIGN0bGlv ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShwYXJlbnQsIFNZU19SRVNfSU9Q T1JULCAmcmlkLCBSRl9BQ1RJVkUpOwogICAgaWYgKCFjdGxpbykgewoJYnVz X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwgQVRBX0lP QUREUl9SSUQsIGlvKTsKCXJldHVybiBFTlhJTzsKICAgIH0KCQkKICAgIGZv ciAoaSA9IEFUQV9EQVRBOyBpIDw9IEFUQV9DT01NQU5EOyBpICsrKSB7Cglj aC0+cl9pb1tpXS5yZXMgPSBpbzsKCWNoLT5yX2lvW2ldLm9mZnNldCA9IGkg KyAodW5pdDEwID8gOCA6IDApOwogICAgfQogICAgY2gtPnJfaW9bQVRBX0NP TlRST0xdLnJlcyA9IGN0bGlvOwogICAgY2gtPnJfaW9bQVRBX0NPTlRST0xd Lm9mZnNldCA9IDIgKyAodW5pdDEwID8gNCA6IDApOwogICAgY2gtPnJfaW9b QVRBX0lEWF9BRERSXS5yZXMgPSBpbzsKICAgIGF0YV9kZWZhdWx0X3JlZ2lz dGVycyhkZXYpOwogICAgaWYgKGN0bHItPnJfcmVzMSkgewoJZm9yIChpID0g QVRBX0JNQ01EX1BPUlQ7IGkgPD0gQVRBX0JNRFRQX1BPUlQ7IGkrKykgewoJ ICAgIGNoLT5yX2lvW2ldLnJlcyA9IGN0bHItPnJfcmVzMTsKCSAgICBjaC0+ cl9pb1tpXS5vZmZzZXQgPSAoaSAtIEFUQV9CTUNNRF9QT1JUKSsoY2gtPnVu aXQgKiBBVEFfQk1JT1NJWkUpOwoJfQogICAgfQogICAgY2gtPmZsYWdzIHw9 IEFUQV9OT19TTEFWRTsKCiAgICAvKiBYWFggU09TIFBIWSBoYW5kbGluZyBh d2t3YXJkIGluIEFMSSBjaGlwIG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAgICBh dGFfcGNpX2h3KGRldik7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQK YXRhX2FsaV9yZXNldChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFf cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmlj ZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGRldmljZV90ICpjaGls ZHJlbjsKICAgIGludCBuY2hpbGRyZW4sIGk7CgogICAgYXRhX2dlbmVyaWNf cmVzZXQoZGV2KTsKCiAgICAvKgogICAgICogd29ya2Fyb3VuZCBmb3IgZGF0 YWNvcnJ1cHRpb24gYnVnIGZvdW5kIG9uIGF0IGxlYXN0IFNVTiBCbGFkZS0x MDAKICAgICAqIGZpbmQgdGhlIElTQSBmdW5jdGlvbiBvbiB0aGUgc291dGhi cmlkZ2UgYW5kIGRpc2FibGUgdGhlbiBlbmFibGUKICAgICAqIHRoZSBBVEEg Y2hhbm5lbCB0cmlzdGF0ZSBidWZmZXIKICAgICAqLwogICAgaWYgKGN0bHIt PmNoaXAtPmNoaXByZXYgPT0gMHhjMyB8fCBjdGxyLT5jaGlwLT5jaGlwcmV2 ID09IDB4YzIpIHsKCWlmICghZGV2aWNlX2dldF9jaGlsZHJlbihHUkFORFBB UkVOVChkZXYpLCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CgkgICAgZm9y IChpID0gMDsgaSA8IG5jaGlsZHJlbjsgaSsrKSB7CgkJaWYgKHBjaV9nZXRf ZGV2aWQoY2hpbGRyZW5baV0pID09IEFUQV9BTElfMTUzMykgewoJCSAgICBw Y2lfd3JpdGVfY29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAKCQkJCSAgICAg cGNpX3JlYWRfY29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAxKSAmCgkJCQkg ICAgIH4oMHgwNCA8PCBjaC0+dW5pdCksIDEpOwoJCSAgICBwY2lfd3JpdGVf Y29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAKCQkJCSAgICAgcGNpX3JlYWRf Y29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAxKSB8CgkJCQkgICAgICgweDA0 IDw8IGNoLT51bml0KSwgMSk7CgkJICAgIGJyZWFrOwoJCX0KCSAgICB9Cgkg ICAgZnJlZShjaGlsZHJlbiwgTV9URU1QKTsKCX0KICAgIH0KfQoKc3RhdGlj IHZvaWQKYXRhX2FsaV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUp CnsKICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwog ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n ZXRfc29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsK ICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CiAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBB VEFfREVWKGF0YWRldi0+dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9k ZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4 X2RtYSk7CgogICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBBTElORVcpIHsK CWlmIChtb2RlID4gQVRBX1VETUEyICYmCgkgICAgcGNpX3JlYWRfY29uZmln KGdwYXJlbnQsIDB4NGEsIDEpICYgKDEgPDwgY2gtPnVuaXQpKSB7CgkgICAg YXRhX3ByaW50X2NhYmxlKGRldiwgImNvbnRyb2xsZXIiKTsKCSAgICBtb2Rl ID0gQVRBX1VETUEyOwoJfQogICAgfQogICAgZWxzZQoJbW9kZSA9IGF0YV9j aGVja184MHBpbihkZXYsIG1vZGUpOwoKICAgIGlmIChjdGxyLT5jaGlwLT5j ZmcyICYgQUxJT0xEKSB7CgkvKiBkb2Vzbid0IHN1cHBvcnQgQVRBUEkgRE1B IG9uIHdyaXRlICovCgljaC0+ZmxhZ3MgfD0gQVRBX0FUQVBJX0RNQV9STzsK CWlmIChjaC0+ZGV2aWNlcyAmIEFUQV9BVEFQSV9NQVNURVIgJiYgY2gtPmRl dmljZXMgJiBBVEFfQVRBUElfU0xBVkUpIHsKCSAgICAvKiBkb2Vzbid0IHN1 cHBvcnQgQVRBUEkgRE1BIG9uIHR3byBBVEFQSSBkZXZpY2VzICovCgkgICAg ZGV2aWNlX3ByaW50ZihkZXYsICJ0d28gYXRhcGkgZGV2aWNlcyBvbiB0aGlz IGNoYW5uZWwsIG5vIERNQVxuIik7CgkgICAgbW9kZSA9IGF0YV9saW1pdF9t b2RlKGRldiwgbW9kZSwgQVRBX1BJT19NQVgpOwoJfQogICAgfQoKICAgIGVy cm9yID0gYXRhX2NvbnRyb2xjbWQoZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFU QV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKCiAgICBpZiAoYm9vdHZlcmJvc2Up CglkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBjaGlw XG4iLAoJCSAgIChlcnJvcikgPyAiRkFJTFVSRSAiIDogIiIsIAoJCSAgIGF0 YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7CiAgICBpZiAo IWVycm9yKSB7CglpZiAobW9kZSA+PSBBVEFfVURNQTApIHsKCSAgICB1X2lu dDhfdCB1ZG1hW10gPSB7MHgwYywgMHgwYiwgMHgwYSwgMHgwOSwgMHgwOCwg MHgwZiwgMHgwZH07CgkgICAgdV9pbnQzMl90IHdvcmQ1NCA9IHBjaV9yZWFk X2NvbmZpZyhncGFyZW50LCAweDU0LCA0KTsKCgkgICAgd29yZDU0ICY9IH4o MHgwMDBmMDAwZiA8PCAoZGV2bm8gPDwgMikpOwoJICAgIHdvcmQ1NCB8PSAo KCh1ZG1hW21vZGUmQVRBX01PREVfTUFTS108PDE2KXwweDA1KTw8KGRldm5v PDwyKSk7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDU0LCB3 b3JkNTQsIDQpOwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1 OCArIChjaC0+dW5pdCA8PCAyKSwKCQkJICAgICAweDAwMzEwMDAxLCA0KTsK CX0KCWVsc2UgewoJICAgIHVfaW50MzJfdCBwaW90aW1pbmdzW10gPQoJCXsg MHgwMDZkMDAwMywgMHgwMDU4MDAwMiwgMHgwMDQ0MDAwMSwgMHgwMDMzMDAw MSwKCQkgIDB4MDAzMTAwMDEsIDB4MDA0NDAwMDEsIDB4MDAzMzAwMDEsIDB4 MDAzMTAwMDF9OwoKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4 NTQsIHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDU0LCA0KSAmCgkJCQkJ ICAgIH4oMHgwMDA4MDAwZiA8PCAoZGV2bm8gPDwgMikpLCA0KTsKCSAgICBw Y2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTggKyAoY2gtPnVuaXQgPDwg MiksCgkJCSAgICAgcGlvdGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldLCA0 KTsKCX0KCWF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBB bWVyaWNhbiBNaWNybyBEZXZpY2VzIChBTUQpIGNoaXBzZXQgc3VwcG9ydCBm dW5jdGlvbnMKICovCmludAphdGFfYW1kX2lkZW50KGRldmljZV90IGRldikK ewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFfY2hpcF9pZCAqaWR4 OwogICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9CiAgICB7 eyBBVEFfQU1ENzU2LCAgMHgwMCwgQU1ETlZJRElBLCAweDAwLCAgICAgICAg ICAgIEFUQV9VRE1BNCwgIjc1NiIgfSwKICAgICB7IEFUQV9BTUQ3NjYsICAw eDAwLCBBTUROVklESUEsIEFNRENBQkxFfEFNREJVRywgQVRBX1VETUE1LCAi NzY2IiB9LAogICAgIHsgQVRBX0FNRDc2OCwgIDB4MDAsIEFNRE5WSURJQSwg QU1EQ0FCTEUsICAgICAgICBBVEFfVURNQTUsICI3NjgiIH0sCiAgICAgeyBB VEFfQU1EODExMSwgMHgwMCwgQU1ETlZJRElBLCBBTURDQUJMRSwgICAgICAg IEFUQV9VRE1BNiwgIjgxMTEiIH0sCiAgICAgeyAwLCAwLCAwLCAwLCAwLCAw fX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAgIGlmICghKGlkeCA9IGF0 YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87CgogICAg c3ByaW50ZihidWZmZXIsICJBTUQgJXMgJXMgY29udHJvbGxlciIsCgkgICAg aWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5tYXhfZG1hKSk7CiAgICBk ZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZlcik7CiAgICBjdGxyLT5j aGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfYW1kX2NoaXBp bml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2FtZF9jaGlw aW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYg KGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAg ICAvKiBkaXNhYmxlL3NldCBwcmVmZXRjaCwgcG9zdHdyaXRlICovCiAgICBp ZiAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIEFNREJVRykKCXBjaV93cml0ZV9jb25m aWcoZGV2LCAweDQxLCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDQxLCAxKSAm IDB4MGYsIDEpOwogICAgZWxzZQoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4 NDEsIHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEsIDEpIHwgMHhmMCwgMSk7 CgogICAgY3Rsci0+c2V0bW9kZSA9IGF0YV92aWFfZmFtaWx5X3NldG1vZGU7 CiAgICByZXR1cm4gMDsKfQoKCi8qCiAqIEFUSSBjaGlwc2V0IHN1cHBvcnQg ZnVuY3Rpb25zCiAqLwppbnQKYXRhX2F0aV9pZGVudChkZXZpY2VfdCBkZXYp CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldik7CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlk eDsKICAgIH