Subject: Re: mr radio 'can't map io space'
To: Lennart Augustsson <lennart@augustsson.net>
From: George Sollish <gsollish@autogear.net>
List: port-i386
Date: 08/31/2002 10:37:50
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-1415219339-1030804519=:411
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.NEB.4.30.0208311036271.415@pequod.autogear.net>

Back to trying the GUILLEMOT Maxiradio/GEMTEK PR103 pci radio card after
two weeks vacation.  Beginning with Lennart's suggestion that "can't map
io space" is usually indicative of a BIOS problem (which is true -- the
BIOS sees the card but assigns no irq) I tried turning on all the pcibios
kernel options in a 1.6rc2 kernel.  This boots, provides much information,
and confirms that io space has been allocated, but does not assign an irq
or open /dev/radio.

Remembering that OpenBSD had replaced the untested mr driver with a new
gtp driver for the same card (it seems none of the developers had an mr
card for testing), I thought I'd try compiling the gtp driver into another
test kernel; after a bit I did get a kernel built and it does open
/dev/radio (the modified /dev/pci/maxiradio_mod.c is attached).
Unfortunately, it does not seem to activate the tuner.  Am I missing
something obvious -- the card (0x5046) does need an irq, right?

This is the new kernel with my modified OpenBSD gtp driver patched in as
mr:

NetBSD 1.6_RC2 (MIDDLETON.MP) #21: Fri Aug 30 14:38:48 EDT 2002
    gsollish@labrador.autogear.net:/usr/src/syssrc/sys/arch/i386/compile/
MIDDLETON.MP
total memory = 255 MB
avail memory = 231 MB
using 3297 buffers containing 13188 KB of memory
BIOS32 rev. 0 found at 0xfdb60
PCI BIOS rev. 2.1 found at 0xfdb81
pcibios: config mechanism [1][x], special cycles [x][x], last bus 1
PCI BIOS has 9 Interrupt Routing table entries
PIR Entry 0:
	Bus: 0  Device: 0
		INTA: link 0x00 bitmap 0xdeb8
		INTB: link 0x00 bitmap 0xdeb8
		INTC: link 0x00 bitmap 0xdeb8
		INTD: link 0x00 bitmap 0xdeb8
PIR Entry 1:
	Bus: 0  Device: 1
		INTA: link 0x61 bitmap 0xdeb8
		INTB: link 0x62 bitmap 0xdeb8
		INTC: link 0x00 bitmap 0xdeb8
		INTD: link 0x00 bitmap 0xdeb8
PIR Entry 2:
	Bus: 0  Device: 7
		INTA: link 0xfe bitmap 0x4000
		INTB: link 0xff bitmap 0x8000
		INTC: link 0x00 bitmap 0x0000
		INTD: link 0x63 bitmap 0xdeb8
PIR Entry 3:
	Bus: 0  Device: 13
		INTA: link 0x62 bitmap 0xdeb8
		INTB: link 0x63 bitmap 0xdeb8
		INTC: link 0x60 bitmap 0xdeb8
		INTD: link 0x61 bitmap 0xdeb8
PIR Entry 4:
	Bus: 0  Device: 15
		INTA: link 0x60 bitmap 0xdeb8
		INTB: link 0x61 bitmap 0xdeb8
		INTC: link 0x62 bitmap 0xdeb8
		INTD: link 0x63 bitmap 0xdeb8
PIR Entry 5:
	Bus: 0  Device: 16
		INTA: link 0x61 bitmap 0xdeb8
		INTB: link 0x62 bitmap 0xdeb8
		INTC: link 0x63 bitmap 0xdeb8
		INTD: link 0x60 bitmap 0xdeb8
PIR Entry 6:
	Bus: 0  Device: 18
		INTA: link 0x62 bitmap 0xdeb8
		INTB: link 0x63 bitmap 0xdeb8
		INTC: link 0x60 bitmap 0xdeb8
		INTD: link 0x61 bitmap 0xdeb8
PIR Entry 7:
	Bus: 0  Device: 20
		INTA: link 0x63 bitmap 0xdeb8
		INTB: link 0x60 bitmap 0xdeb8
		INTC: link 0x61 bitmap 0xdeb8
		INTD: link 0x62 bitmap 0xdeb8
PIR Entry 8:
	Bus: 1  Device: 0
		INTA: link 0x61 bitmap 0xdeb8
		INTB: link 0x62 bitmap 0xdeb8
		INTC: link 0x00 bitmap 0xdeb8
		INTD: link 0x00 bitmap 0xdeb8
pciintr_link_fixup: PIRQ 0x00 already connected to IRQ 10
pciintr_link_fixup: PIRQ 0x01 already connected to IRQ 10
pciintr_link_fixup: PIRQ 0x02 already connected to IRQ 5
pciintr_link_fixup: PIRQ 0x03 already connected to IRQ 9
pciintr_link_route: route of PIRQ 0x00 -> IRQ 10 preserved BIOS setting
pciintr_link_route: route of PIRQ 0x01 -> IRQ 10 preserved BIOS setting
pciintr_link_route: route of PIRQ 0x02 -> IRQ 5 preserved BIOS setting
pciintr_link_route: route of PIRQ 0x03 -> IRQ 9 preserved BIOS setting
------------------------------------------
  device vendor product pin PIRQ IRQ stage
------------------------------------------
000:07:2 0x8086 0x7112   D  0x03   9  0    already assigned
000:13:0 0x11f6 0x1401   A  0x02   5  0    already assigned
000:15:0 0x1274 0x5880   A  0x00  10  0    already assigned
000:16:0 0x1002 0x5050   A  0x01  10  0    already assigned
000:20:0 0x1260 0x3873   A  0x03   9  0    already assigned
------------------------------------------
PCI fixup examining 8086:71a0
PCI fixup examining 8086:71a1
PCI bridge 0: primary 0, secondary 1, subordinate 1
PCI fixup examining 8086:7110
PCI fixup examining 8086:7111
PCI fixup examining 8086:7112
PCI fixup examining 8086:7113
PCI fixup examining 11f6:1401
PCI fixup examining 1274:5880
PCI fixup examining 1002:5050
PCI fixup examining 5046:1001
PCI fixup examining 1260:3873
PCI bus #1 is the last bus
[System BIOS Setting]-----------------------
  device vendor product
  register space address    size
--------------------------------------------
000:00:0 0x8086 0x71a0
	10h mem  0xf4000000 0x04000000
		[OK]
000:01:0 0x8086 0x71a1
		[OK]
000:07:0 0x8086 0x7110
		[OK]
000:07:1 0x8086 0x7111
	20h port 0x0000ffa0 0x00000010
		[OK]
000:07:2 0x8086 0x7112
	20h port 0x0000ef80 0x00000020
		[OK]
000:07:3 0x8086 0x7113
		[OK]
000:13:0 0x11f6 0x1401
	10h port 0x0000ef40 0x00000020
		[OK]
000:15:0 0x1274 0x5880
	10h port 0x0000ef00 0x00000040
		[OK]
000:16:0 0x1002 0x5050
	10h mem  0xf8000000 0x04000000
	14h port 0x0000e800 0x00000100
	18h mem  0xffafc000 0x00004000
		[OK]
000:18:0 0x5046 0x1001
	10h port 0x0000eff4 0x00000004
		[OK]
000:20:0 0x1260 0x3873
	10h mem  0xfebff000 0x00001000
		[OK]
--------------------------[  0 devices bogus]
 Physical memory end: 0x0fffc000
 PCI memory mapped I/O space start: 0x10000000
mainbus0 (root)
mainbus0: Intel MP Specification (Version 1.4) (INTEL    440BX       )
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel Pentium III (Coppermine) Pentium III (686-class), 851.98 MHz
cpu0: features 383fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR>
cpu0: features 383fbff<PGE,MCA,CMOV,FGPAT,PSE36,MMX>
cpu0: features 383fbff<FXSR,SSE>
cpu0: I-cache 16 KB 32b/line 4-way, D-cache 16 KB 32b/line 4-way
cpu0: L2 cache 256 KB 32b/line 8-way
cpu0: ITLB 32 4 KB entries 4-way, 2 4 MB entries fully associative
cpu0: DTLB 64 4 KB entries 4-way, 8 4 MB entries 4-way
cpu0: calibrating local timer
cpu0: apic clock running at 100 MHz
cpu0: 8 page colors
cpu1 at mainbus0: apid 1 (application processor)
cpu1: starting
cpu1: Intel Pentium III (Coppermine) Pentium III (686-class), 851.94 MHz
cpu1: features 383fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR>
cpu1: features 383fbff<PGE,MCA,CMOV,FGPAT,PSE36,MMX>
cpu1: features 383fbff<FXSR,SSE>
cpu1: I-cache 16 KB 32b/line 4-way, D-cache 16 KB 32b/line 4-way
cpu1: L2 cache 256 KB 32b/line 8-way
cpu1: ITLB 32 4 KB entries 4-way, 2 4 MB entries fully associative
cpu1: DTLB 64 4 KB entries 4-way, 8 4 MB entries 4-way
mpbios: bus 0 is type PCI
mpbios: bus 1 is type PCI
mpbios: bus 2 is type ISA
ioapic0 at mainbus0 apid 2 (I/O APIC)
ioapic0: pa 0xfec00000, version 11, 24 pins
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0
pchb0: Intel 82443GX Host Bridge/Controller (rev. 0x00)
agp0 at pchb0: aperture at 0xf4000000, size 0x4000000
ppb0 at pci0 dev 1 function 0: Intel 82443GX AGP Interface (rev. 0x00)
pci1 at ppb0 bus 1
pci1: i/o space, memory space enabled
pcib0 at pci0 dev 7 function 0
pcib0: Intel 82371AB PCI-to-ISA Bridge (PIIX4) (rev. 0x02)
pciide0 at pci0 dev 7 function 1: Intel 82371AB IDE controller (PIIX4) (rev. 0x01)
pciide0: bus-master DMA support present
pciide0: primary channel wired to compatibility mode
wd0 at pciide0 channel 0 drive 0: <WDC WD136AA>
wd0: drive supports 16-sector PIO transfers, LBA addressing
wd0: 12971 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 26564832 sectors
wd0: 32-bit data port
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 4 (Ultra/66)
pciide0: primary channel interrupting at irq 14
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA data transfers)
pciide0: secondary channel wired to compatibility mode
pciide0: disabling secondary channel (no drives)
uhci0 at pci0 dev 7 function 2: Intel 82371AB USB Host Controller (PIIX4) (rev. 0x01)
pci_intr_map: bus 0 dev 7 func 2 pin 4; line 9
pci_intr_map: no MP mapping found
uhci0: interrupting at irq 9
usb0 at uhci0: USB revision 1.0
uhub0 at usb0
uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
Intel 82371AB Power Management Controller (PIIX4) (miscellaneous bridge, revision 0x02) at pci0 dev 7 function 3 not configured
ne2 at pci0 dev 13 function 0: Compex Ethernet
ne2: Ethernet address 00:80:48:c7:62:24
pci_intr_map: bus 0 dev 13 func 0 pin 1; line 5
pci_intr_map: no MP mapping found
ne2: interrupting at irq 5
eap0 at pci0 dev 15 function 0: Ensoniq CT5880 CT5880C (rev. 0x02)
pci_intr_map: bus 0 dev 15 func 0 pin 1; line 10
pci_intr_map: no MP mapping found
eap0: interrupting at irq 10
eap0: SigmaTel STAC9721/23 codec; 18 bit DAC, 18 bit ADC, SigmaTel 3D
audio0 at eap0: full duplex, mmap, independent
midi0 at eap0: AudioPCI MIDI UART
vga1 at pci0 dev 16 function 0: ATI Technologies Rage 128 Pro PCI (TMDS) (rev. 0x00)
wsdisplay0 at vga1 kbdmux 1: console (80x25, vt100 emulation)
wsmux1: connecting to wsdisplay0
mr0 at pci0 dev 18 function 0: Gemtek PR103
radio0 at mr0
wi0 at pci0 dev 20 function 0: Intersil Prism2.5 Wireless Lan
pci_intr_map: bus 0 dev 20 func 0 pin 1; line 9
pci_intr_map: no MP mapping found
wi0: interrupting at irq 9
wi0:wi0: command timed out, cmd=0x0
wi0: init failed
 802.11 address 00:05:5d:ee:59:06
wi0: using Unknown Lucent chip
wi0: Lucent Firmware: Station (0.0.0)
isa0 at pcib0
aha0 at isa0 port 0x330-0x333 irq 11 drq 5
aha0: model AHA-1542CF, firmware B.0
aha0: unlocking mailbox interface
aha0: async, parity
scsibus0 at aha0: 8 targets, 8 luns per target
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo
pckbc0 at isa0 port 0x60-0x64
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
lm0 at isa0 port 0x290-0x297: W83781D
lpt0 at isa0 port 0x378-0x37b irq 7
pcppi0 at isa0 port 0x61
midi1 at pcppi0: PC speaker
sysbeep0 at pcppi0
isapnp0 at isa0 port 0x279: ISA Plug 'n Play device support
npx0 at isa0 port 0xf0-0xff: using exception 16
fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
fd0 at fdc0 drive 0: 1.44MB, 80 cyl, 2 head, 18 sec
isapnp0: no ISA Plug 'n Play devices found
apm0 at mainbus0: Power Management spec V1.2
biomask 0 netmask 0 ttymask 0
ioapic0: enabling
ioapic0: WARNING: sharing interrupt between different IPLs (currently broken)
ioapic0: pin 19, ipls 70..80
scsibus0: waiting 2 seconds for devices to settle...
st0 at scsibus0 target 2 lun 0: <TANDBERG, TDC 4100, =05:> SCSI2 1/sequential removable
st0: drive empty
cd0 at scsibus0 target 3 lun 0: <PLEXTOR, CD-ROM PX-20TS, 1.02> SCSI2 5/cdrom removable
boot device: wd0
root on wd0a dumps on wd0b
root file system type: ffs
cpu1: CPU 1 running
in6_ifattach: bridge0 is not multicast capable, IPv6 not enabled
in6_ifattach: bridge0 is not multicast capable, IPv6 not enabled
wsdisplay0: screen 1 added (80x25, vt100 emulation)
wsdisplay0: screen 2 added (80x25, vt100 emulation)
wsdisplay0: screen 3 added (80x25, vt100 emulation)
wsdisplay0: screen 4 added (80x25, vt100 emulation)

This is what radioctl -a reports:

volume=0
frequency=87.50MHz
mute=off
sensitivity=30mkV
signal=off
stereo=off
card capabilities: stereo detect, signal detect, manageable mono/stereo, hardware search, hardware AFC

This is what xmradio reports on startup:

Couldn't find starting station, using default one.
could not open /dev/tuner: Device not configured
FAILED TO INIT TUNER!
Can't control bass via /dev/mixer: Device not configured
Can't control treble via /dev/mixer: Device not configured

George E Sollish	Chief Engineer		Auto Gear Equipment
			Project Manager		The Payne Lake Project


--0-1415219339-1030804519=:411
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="maxiradio_mod.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.30.0208311035180.411@pequod.autogear.net>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="maxiradio_mod.c"

LyoJJE9wZW5CU0Q6IGd0cC5jLHYgMS4xLjIuMSAyMDAyLzA2LzExIDAzOjQy
OjI0IGFydCBFeHAgJAkqLw0KDQovKg0KICogQ29weXJpZ2h0IChjKSAyMDAy
IFZsYWRpbWlyIFBvcG92IDxqdW1ib0BuYXJvZC5ydT4NCiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQog
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6DQogKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUNCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogKg0K
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SDQogKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
Lg0KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCiAqIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVA0KICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LA0KICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQogKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUDQogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YN
CiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogKi8NCg0KLyogR2VtdGVrIFBD
SSBSYWRpbyBDYXJkIERldmljZSBEcml2ZXIgKi8NCg0KI2luY2x1ZGUgPHN5
cy9wYXJhbS5oPg0KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KI2luY2x1ZGUg
PHN5cy9kZXZpY2UuaD4NCiNpbmNsdWRlIDxzeXMvZXJybm8uaD4NCiNpbmNs
dWRlIDxzeXMvaW9jdGwuaD4NCiNpbmNsdWRlIDxzeXMvcHJvYy5oPg0KI2lu
Y2x1ZGUgPHN5cy9yYWRpb2lvLmg+DQoNCiNpbmNsdWRlIDxtYWNoaW5lL2J1
cy5oPg0KDQojaW5jbHVkZSA8ZGV2L3BjaS9wY2lyZWcuaD4NCiNpbmNsdWRl
IDxkZXYvcGNpL3BjaXZhci5oPg0KI2luY2x1ZGUgPGRldi9wY2kvcGNpZGV2
cy5oPg0KDQojaW5jbHVkZSA8ZGV2L2ljL3RlYTU3NTcuaD4NCiNpbmNsdWRl
IDxkZXYvcmFkaW9faWYuaD4NCg0KaW50CW1yX21hdGNoKHN0cnVjdCBkZXZp
Y2UgKiwgc3RydWN0IGNmZGF0YSAqLCB2b2lkICopOw0Kdm9pZAltcl9hdHRh
Y2goc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKik7
DQoNCmludCAgICAgbXJfZ2V0X2luZm8odm9pZCAqLCBzdHJ1Y3QgcmFkaW9f
aW5mbyAqKTsNCmludCAgICAgbXJfc2V0X2luZm8odm9pZCAqLCBzdHJ1Y3Qg
cmFkaW9faW5mbyAqKTsNCmludCAgICAgbXJfc2VhcmNoKHZvaWQgKiwgaW50
KTsNCg0KI2RlZmluZSBHRU1URUtfUENJX0NBUFMJUkFESU9fQ0FQU19ERVRF
Q1RfU0lHTkFMIHwJCQlcDQoJCQlSQURJT19DQVBTX0RFVEVDVF9TVEVSRU8g
fAkJCVwNCgkJCVJBRElPX0NBUFNfU0VUX01PTk8gfAkJCQlcDQoJCQlSQURJ
T19DQVBTX0hXX1NFQVJDSCB8CQkJCVwNCgkJCVJBRElPX0NBUFNfSFdfQUZD
IHwJCQkJXA0KCQkJUkFESU9fQ0FQU19MT0NLX1NFTlNJVElWSVRZDQoNCiNk
ZWZpbmUgR0VNVEVLX1BDSV9NVVRFCQkweDAwDQojZGVmaW5lIEdFTVRFS19Q
Q0lfUlNFVAkJMHgxMA0KDQojZGVmaW5lIEdFTVRFS19QQ0lfU0lHTkFMCTB4
MDgNCiNkZWZpbmUgR0VNVEVLX1BDSV9TVEVSRU8JMHgwOA0KDQojZGVmaW5l
IEdUUF9XUkVOX09OCQkoMSA8PCAyKQ0KI2RlZmluZSBHVFBfV1JFTl9PRkYJ
CSgwIDw8IDIpDQoNCiNkZWZpbmUgR1RQX0RBVEFfT04JCSgxIDw8IDEpDQoj
ZGVmaW5lIEdUUF9EQVRBX09GRgkJKDAgPDwgMSkNCg0KI2RlZmluZSBHVFBf
Q0xDS19PTgkJKDEgPDwgMCkNCiNkZWZpbmUgR1RQX0NMQ0tfT0ZGCQkoMCA8
PCAwKQ0KDQojZGVmaW5lIEdUUF9SRUFEX0NMT0NLX0xPVwkoR1RQX1dSRU5f
T0ZGIHwgR1RQX0RBVEFfT04gfCBHVFBfQ0xDS19PRkYpDQojZGVmaW5lIEdU
UF9SRUFEX0NMT0NLX0hJR0gJKEdUUF9XUkVOX09GRiB8IEdUUF9EQVRBX09O
IHwgR1RQX0NMQ0tfT04pDQoNCi8qIGRlZmluZSBvdXIgaW50ZXJmYWNlIHRv
IHRoZSBoaWdoLWxldmVsIHJhZGlvIGRyaXZlciAqLw0KDQpzdHJ1Y3QgcmFk
aW9faHdfaWYgbXJfaHdfaWYgPSB7DQoJTlVMTCwgLyogb3BlbiAqLw0KCU5V
TEwsIC8qIGNsb3NlICovDQoJbXJfZ2V0X2luZm8sDQoJbXJfc2V0X2luZm8s
DQoJbXJfc2VhcmNoDQp9Ow0KDQpzdHJ1Y3QgbXJfc29mdGMgew0KCXN0cnVj
dCBkZXZpY2UJc2NfZGV2Ow0KDQoJaW50CW11dGU7DQoJdV9pbnQ4X3QJdm9s
Ow0KCXVfaW50MzJfdAlmcmVxOw0KCXVfaW50MzJfdAlzdGVyZW87DQoJdV9p
bnQzMl90CWxvY2s7DQoNCglzdHJ1Y3QgdGVhNTc1N190CXRlYTsNCn07DQoN
CnN0cnVjdCBjZmF0dGFjaCBtcl9jYSA9IHsNCglzaXplb2Yoc3RydWN0IG1y
X3NvZnRjKSwgbXJfbWF0Y2gsIG1yX2F0dGFjaA0KfTsNCg0Kdm9pZAltcl9z
ZXRfbXV0ZShzdHJ1Y3QgbXJfc29mdGMgKik7DQp2b2lkCW1yX3dyaXRlX2Jp
dChidXNfc3BhY2VfdGFnX3QsIGJ1c19zcGFjZV9oYW5kbGVfdCwgYnVzX3Np
emVfdCwgaW50KTsNCnZvaWQJbXJfaW5pdChidXNfc3BhY2VfdGFnX3QsIGJ1
c19zcGFjZV9oYW5kbGVfdCwgYnVzX3NpemVfdCwgdV9pbnQzMl90KTsNCnZv
aWQJbXJfcnNldChidXNfc3BhY2VfdGFnX3QsIGJ1c19zcGFjZV9oYW5kbGVf
dCwgYnVzX3NpemVfdCwgdV9pbnQzMl90KTsNCmludAltcl9zdGF0ZShidXNf
c3BhY2VfdGFnX3QsIGJ1c19zcGFjZV9oYW5kbGVfdCk7DQp1X2ludDMyX3QJ
bXJfaGFyZHdhcmVfcmVhZChidXNfc3BhY2VfdGFnX3QsIGJ1c19zcGFjZV9o
YW5kbGVfdCwNCgkJYnVzX3NpemVfdCk7DQoNCmludA0KbXJfbWF0Y2goc3Ry
dWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgY2ZkYXRhICpjZiwgdm9pZCAq
YXV4KQ0Kew0KCXN0cnVjdCBwY2lfYXR0YWNoX2FyZ3MgKnBhID0gYXV4Ow0K
CS8qIEZJWE1FOg0KCSAqIEd1aWxsZW1vdCBwcm9kdWNlcyB0aGUgY2FyZCB0
aGF0DQoJICogd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IEdlbXRlaw0K
CSAqLw0KCWlmIChQQ0lfVkVORE9SKHBhLT5wYV9pZCkgPT0gUENJX1ZFTkRP
Ul9HRU1URUsgJiYNCgkgICAgUENJX1BST0RVQ1QocGEtPnBhX2lkKSA9PSBQ
Q0lfUFJPRFVDVF9HRU1URUtfUFIxMDMpDQoJCXJldHVybiAoMSk7DQoJcmV0
dXJuICgwKTsNCn0NCg0Kdm9pZA0KbXJfYXR0YWNoKHN0cnVjdCBkZXZpY2Ug
KnBhcmVudCwgc3RydWN0IGRldmljZSAqc2VsZiwgdm9pZCAqYXV4KQ0Kew0K
CXN0cnVjdCBtcl9zb2Z0YyAqc2MgPSAoc3RydWN0IG1yX3NvZnRjICopc2Vs
ZjsNCglzdHJ1Y3QgcGNpX2F0dGFjaF9hcmdzICpwYSA9IGF1eDsNCgkvKnN0
cnVjdCBjZmRhdGEgKmNmID0gc2MtPnNjX2Rldi5kdl9jZmRhdGE7ICovDQoJ
cGNpX2NoaXBzZXRfdGFnX3QgcGMgPSBwYS0+cGFfcGM7DQoJcGNpcmVnX3Qg
Y3NyOw0KDQoJaWYgKHBjaV9tYXByZWdfbWFwKHBhLCAweDEwLCBQQ0lfTUFQ
UkVHX1RZUEVfSU8sIDAsICZzYy0+dGVhLmlvdCwNCgkgICAgJnNjLT50ZWEu
aW9oLCBOVUxMLCAwKSkgew0KCQlwcmludGYoIjogY2FuJ3QgbWFwIGkvbyBz
cGFjZVxuIik7DQoJCXJldHVybjsNCgl9DQoNCgkvKiBFbmFibGUgdGhlIGNh
cmQgKi8NCgljc3IgPSBwY2lfY29uZl9yZWFkKHBjLCBwYS0+cGFfdGFnLCBQ
Q0lfQ09NTUFORF9TVEFUVVNfUkVHKTsNCglwY2lfY29uZl93cml0ZShwYywg
cGEtPnBhX3RhZywgUENJX0NPTU1BTkRfU1RBVFVTX1JFRywNCgkgICAgY3Ny
IHwgUENJX0NPTU1BTkRfTUFTVEVSX0VOQUJMRSk7DQoNCglzYy0+dm9sID0g
MDsNCglzYy0+bXV0ZSA9IDA7DQoJc2MtPmZyZXEgPSBNSU5fRk1fRlJFUTsN
CglzYy0+c3RlcmVvID0gVEVBNTc1N19TVEVSRU87DQoJc2MtPmxvY2sgPSBU
RUE1NzU3X1MwMzA7DQoJc2MtPnRlYS5vZmZzZXQgPSAwOw0KCS8qc2MtPnRl
YS5mbGFncyA9IGNmLT5jZl9mbGFnczsgKi8NCglzYy0+dGVhLmluaXQgPSBt
cl9pbml0Ow0KCXNjLT50ZWEucnNldCA9IG1yX3JzZXQ7DQoJc2MtPnRlYS53
cml0ZV9iaXQgPSBtcl93cml0ZV9iaXQ7DQoJc2MtPnRlYS5yZWFkID0gbXJf
aGFyZHdhcmVfcmVhZDsNCg0KCXByaW50ZigiOiBHZW10ZWsgUFIxMDNcbiIp
Ow0KDQoJcmFkaW9fYXR0YWNoX21pKCZtcl9od19pZiwgc2MsICZzYy0+c2Nf
ZGV2KTsNCn0NCg0KaW50DQptcl9nZXRfaW5mbyh2b2lkICp2LCBzdHJ1Y3Qg
cmFkaW9faW5mbyAqcmkpDQp7DQoJc3RydWN0IG1yX3NvZnRjICpzYyA9IHY7
DQoNCglyaS0+bXV0ZSA9IHNjLT5tdXRlOw0KCXJpLT52b2x1bWUgPSBzYy0+
dm9sID8gMjU1IDogMDsNCglyaS0+c3RlcmVvID0gc2MtPnN0ZXJlbyA9PSBU
RUE1NzU3X1NURVJFTyA/IDEgOiAwOw0KCXJpLT5jYXBzID0gR0VNVEVLX1BD
SV9DQVBTOw0KCXJpLT5yZnJlcSA9IDA7DQoJcmktPmxvY2sgPSB0ZWE1NzU3
X2RlY29kZV9sb2NrKHNjLT5sb2NrKTsNCg0KCS8qIEZyZXF1ZW5jeSByZWFk
IHVuc3VwcG9ydGVkICovDQoJcmktPmZyZXEgPSBzYy0+ZnJlcTsNCg0KCXJp
LT5pbmZvID0gbXJfc3RhdGUoc2MtPnRlYS5pb3QsIHNjLT50ZWEuaW9oKTsN
Cgltcl9zZXRfbXV0ZShzYyk7DQoNCglyZXR1cm4gKDApOw0KfQ0KDQppbnQN
Cm1yX3NldF9pbmZvKHZvaWQgKnYsIHN0cnVjdCByYWRpb19pbmZvICpyaSkN
CnsNCglzdHJ1Y3QgbXJfc29mdGMgKnNjID0gdjsNCg0KCXNjLT5tdXRlID0g
cmktPm11dGUgPyAxIDogMDsNCglzYy0+dm9sID0gcmktPnZvbHVtZSA/IDI1
NSA6IDA7DQoJc2MtPnN0ZXJlbyA9IHJpLT5zdGVyZW8gPyBURUE1NzU3X1NU
RVJFTzogVEVBNTc1N19NT05POw0KCXNjLT5sb2NrID0gdGVhNTc1N19lbmNv
ZGVfbG9jayhyaS0+bG9jayk7DQoJcmktPmZyZXEgPSBzYy0+ZnJlcSA9IHRl
YTU3NTdfc2V0X2ZyZXEoJnNjLT50ZWEsDQoJICAgIHNjLT5sb2NrLCBzYy0+
c3RlcmVvLCByaS0+ZnJlcSk7DQoJbXJfc2V0X211dGUoc2MpOw0KDQoJcmV0
dXJuICgwKTsNCn0NCg0KaW50DQptcl9zZWFyY2godm9pZCAqdiwgaW50IGYp
DQp7DQoJc3RydWN0IG1yX3NvZnRjICpzYyA9IHY7DQoNCgl0ZWE1NzU3X3Nl
YXJjaCgmc2MtPnRlYSwgc2MtPmxvY2ssIHNjLT5zdGVyZW8sIGYpOw0KCW1y
X3NldF9tdXRlKHNjKTsNCg0KCXJldHVybiAoMCk7DQp9DQoNCnZvaWQNCm1y
X3NldF9tdXRlKHN0cnVjdCBtcl9zb2Z0YyAqc2MpDQp7DQoJaWYgKHNjLT5t
dXRlIHx8ICFzYy0+dm9sKQ0KCQlidXNfc3BhY2Vfd3JpdGVfMihzYy0+dGVh
LmlvdCwgc2MtPnRlYS5pb2gsIDAsIEdFTVRFS19QQ0lfTVVURSk7DQoJZWxz
ZQ0KCQlzYy0+ZnJlcSA9IHRlYTU3NTdfc2V0X2ZyZXEoJnNjLT50ZWEsDQoJ
CSAgICBzYy0+bG9jaywgc2MtPnN0ZXJlbywgc2MtPmZyZXEpOw0KfQ0KDQp2
b2lkDQptcl93cml0ZV9iaXQoYnVzX3NwYWNlX3RhZ190IGlvdCwgYnVzX3Nw
YWNlX2hhbmRsZV90IGlvaCwgYnVzX3NpemVfdCBvZmYsDQoJCWludCBiaXQp
DQp7DQoJdV9pbnQ4X3QgZGF0YTsNCg0KCWRhdGEgPSBiaXQgPyBHVFBfREFU
QV9PTiA6IEdUUF9EQVRBX09GRjsNCglidXNfc3BhY2Vfd3JpdGVfMShpb3Qs
IGlvaCwgb2ZmLCBHVFBfV1JFTl9PTiB8IEdUUF9DTENLX09GRiB8IGRhdGEp
Ow0KCWJ1c19zcGFjZV93cml0ZV8xKGlvdCwgaW9oLCBvZmYsIEdUUF9XUkVO
X09OIHwgR1RQX0NMQ0tfT04gIHwgZGF0YSk7DQoJYnVzX3NwYWNlX3dyaXRl
XzEoaW90LCBpb2gsIG9mZiwgR1RQX1dSRU5fT04gfCBHVFBfQ0xDS19PRkYg
fCBkYXRhKTsNCn0NCg0Kdm9pZA0KbXJfaW5pdChidXNfc3BhY2VfdGFnX3Qg
aW90LCBidXNfc3BhY2VfaGFuZGxlX3QgaW9oLCBidXNfc2l6ZV90IG9mZiwg
dV9pbnQzMl90IGQpDQp7DQoJYnVzX3NwYWNlX3dyaXRlXzEoaW90LCBpb2gs
IG9mZiwgR1RQX1dSRU5fT04gfCBHVFBfREFUQV9PTiB8IEdUUF9DTENLX09G
Rik7DQp9DQoNCnZvaWQNCm1yX3JzZXQoYnVzX3NwYWNlX3RhZ190IGlvdCwg
YnVzX3NwYWNlX2hhbmRsZV90IGlvaCwgYnVzX3NpemVfdCBvZmYsIHVfaW50
MzJfdCBkKQ0Kew0KCWJ1c19zcGFjZV93cml0ZV8xKGlvdCwgaW9oLCBvZmYs
IEdFTVRFS19QQ0lfUlNFVCk7DQp9DQoNCnVfaW50MzJfdA0KbXJfaGFyZHdh
cmVfcmVhZChidXNfc3BhY2VfdGFnX3QgaW90LCBidXNfc3BhY2VfaGFuZGxl
X3QgaW9oLCBidXNfc2l6ZV90IG9mZikNCnsNCgkvKiBVTlNVUFBPUlRFRCAq
Lw0KCXJldHVybiAwOw0KfQ0KDQppbnQNCm1yX3N0YXRlKGJ1c19zcGFjZV90
YWdfdCBpb3QsIGJ1c19zcGFjZV9oYW5kbGVfdCBpb2gpDQp7DQoJaW50IHJl
dDsNCg0KCWJ1c19zcGFjZV93cml0ZV8yKGlvdCwgaW9oLCAwLA0KCSAgICBH
VFBfREFUQV9PTiB8IEdUUF9XUkVOX09GRiB8IEdUUF9DTENLX09GRik7DQoJ
cmV0ICA9IGJ1c19zcGFjZV9yZWFkXzIoaW90LCBpb2gsIDApICYNCgkgICAg
R0VNVEVLX1BDSV9TVEVSRU8/ICAwIDogUkFESU9fSU5GT19TVEVSRU87DQoJ
YnVzX3NwYWNlX3dyaXRlXzIoaW90LCBpb2gsIDAsDQoJICAgIEdUUF9EQVRB
X09OIHwgR1RQX1dSRU5fT0ZGIHwgR1RQX0NMQ0tfT04pOw0KCXJldCB8PSBi
dXNfc3BhY2VfcmVhZF8yKGlvdCwgaW9oLCAwKSAmDQoJICAgIEdFTVRFS19Q
Q0lfU0lHTkFMPyAgMCA6IFJBRElPX0lORk9fU0lHTkFMOw0KDQoJcmV0dXJu
IHJldDsNCn0NCg==
--0-1415219339-1030804519=:411--