NetBSD Problem Report #42314

From www@NetBSD.org  Fri Nov 13 21:57:17 2009
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by www.NetBSD.org (Postfix) with ESMTP id 402D863B8CD
	for <gnats-bugs@gnats.netbsd.org>; Fri, 13 Nov 2009 21:57:17 +0000 (UTC)
Message-Id: <20091113215716.E73E963B844@www.NetBSD.org>
Date: Fri, 13 Nov 2009 21:57:16 +0000 (UTC)
From: tharada@oucrc.org
Reply-To: tharada@oucrc.org
To: gnats-bugs@NetBSD.org
Subject: IC Plus IP100x PHY support
X-Send-Pr-Version: www-1.0

>Number:         42314
>Category:       kern
>Synopsis:       IC Plus IP100x PHY support
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    msaitoh
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Nov 13 22:00:00 +0000 2009
>Closed-Date:    Thu Nov 28 04:48:10 +0000 2019
>Last-Modified:  Thu Nov 28 04:48:10 +0000 2019
>Originator:     Tomokazu HARADA
>Release:        5.99.22
>Organization:
>Environment:
NetBSD xjazz 5.99.22 NetBSD 5.99.22 (GENERIC) #1: Sat Nov 14 06:05:25 JST 2009  root@xjazz:/usr/obj/sys/arch/i386/compile/GENERIC i386

>Description:
IC Plus IP1000A/IP1001 10/100/1000 PHY support
(from OpenBSD ipgphy)

vge0 at pci2 dev 0 function 0: VIA VT612X Gigabit Ethernet (rev. 0x82)
vge0: interrupting at ioapic0 pin 16
vge0: Ethernet address: 00:02:2a:e6:d7:ad
ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
ipgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto

This is a VIA VT6130 PCIe GbE, the phy is integrated on.

>How-To-Repeat:
N/A
>Fix:
http://tharada.oucrc.org/ipgphy/

>Release-Note:

>Audit-Trail:
From: Andrius V <vezhlys@gmail.com>
To: gnats-bugs@netbsd.org
Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Sat, 7 Sep 2019 23:57:04 +0300

 --000000000000efb2d20591fccc25
 Content-Type: text/plain; charset="UTF-8"

 Hi,

 Since, I have VIA EPIA-M900 motherboard with VT6130 Ethernet
 controller and IP1001 phy, I made an effort to port OpenBSD driver,
 and I prepared initial but not complete patch for PHY support (which
 is almost a copy of OpenBSD driver with mainly small changes to cater
 NetBSD specifics). Issues described below (first two I believe are
 blocking from committing it to NetBSD yet and I need a help to resolve
 if possible):

 * For some reason direct port fails to work with autonegotation
 (if_media match fails, there is no auto option available). As a
 workaround I copied the code below from rgephy.c to add it manually
 and it worked for me:

 #define    ADD(m, c)    ifmedia_add(&mii->mii_media, (m), (c), NULL)
 #define    PRINT(n)    aprint_normal("%s%s", sep, (n)); sep = ", "

     ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst), MII_NMEDIA);
     sep =", ";
     PRINT("auto");

 I believe it is a hack in this case, since OpenBSD seemingly doesn't
 need it but for some reason direct port looses auto option in NetBSD.
 Maybe somebody have idea, why it happened?
 * Commented out the code with stge revision check in ipgphy_reset
 (which calls also commented ipgphy_load_dspcode). I guess to implement
 that I would need to change if_stge driver to move struct into a
 header file or find another way to get sc_rev. Can someone help me out
 with that?
 * I change config for amd64 GENERIC only. I quite certain, it can be
 added at least to i386, though OpenBSD defined it in most ports.
 * Same as OpenBSD, manual setting to 1000baseT will fail,
 autonegotation must be used to get Gigabit Ethernet speed.
 * OUI in NetBSD is recognized as 0x0009c3, not as 0x0090c3 like it is
 defined in Open/FreeBSD. Changed it in miidevs.

 Attached the patch below (regen is still needed for miidevs).

 With provided changes, vge successfully auto negotiated for 1Gbit
 speed (which wasn't the case with general phy):
 vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
         enabled=0
         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
         ec_enabled=2<VLAN_HWTAGGING>
         address: xx:xx:xx:xx:xx:xx
         media: Ethernet autoselect (1000baseT
 full-duplex,flowcontrol,master,rxpause,txpause)
         status: active
         inet 192.168.1.18/24 broadcast 192.168.1.255 flags 0x0
         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x

 from dmesg:
 ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 025
 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto

 P.S. Not sure if original submitter did provide a patch as well but
 his link is down currently.

 Regards,
 Andrius V

 On Sat, Nov 14, 2009 at 12:00 AM <tharada@oucrc.org> wrote:
 >
 > >Number:         42314
 > >Category:       kern
 > >Synopsis:       IC Plus IP100x PHY support
 > >Confidential:   no
 > >Severity:       non-critical
 > >Priority:       low
 > >Responsible:    kern-bug-people
 > >State:          open
 > >Class:          sw-bug
 > >Submitter-Id:   net
 > >Arrival-Date:   Fri Nov 13 22:00:00 +0000 2009
 > >Originator:     Tomokazu HARADA
 > >Release:        5.99.22
 > >Organization:
 > >Environment:
 > NetBSD xjazz 5.99.22 NetBSD 5.99.22 (GENERIC) #1: Sat Nov 14 06:05:25 JST 2009  root@xjazz:/usr/obj/sys/arch/i386/compile/GENERIC i386
 >
 > >Description:
 > IC Plus IP1000A/IP1001 10/100/1000 PHY support
 > (from OpenBSD ipgphy)
 >
 > vge0 at pci2 dev 0 function 0: VIA VT612X Gigabit Ethernet (rev. 0x82)
 > vge0: interrupting at ioapic0 pin 16
 > vge0: Ethernet address: 00:02:2a:e6:d7:ad
 > ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 > ipgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
 >
 > This is a VIA VT6130 PCIe GbE, the phy is integrated on.
 >
 > >How-To-Repeat:
 > N/A
 > >Fix:
 > http://tharada.oucrc.org/ipgphy/
 >

 --000000000000efb2d20591fccc25
 Content-Type: text/x-patch; charset="US-ASCII"; name="test.patch"
 Content-Disposition: attachment; filename="test.patch"
 Content-Transfer-Encoding: base64
 Content-ID: <f_k09zxctb0>
 X-Attachment-Id: f_k09zxctb0

 QURERUQgICAgc2hhcmUvbWFuL21hbjQvaXBncGh5LjQKSW5kZXg6IHNoYXJlL21hbi9tYW40L2lw
 Z3BoeS40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWFuL21hbjQvaXBncGh5LjQKKysrIHNoYXJlL21h
 bi9tYW40L2lwZ3BoeS40CkBAIC0wLDAgKzEsMzggQEAKKy5cIgkkT3BlbkJTRDogaXBncGh5LjQs
 diAxLjUgMjAwOS8wOC8wOCAxNzoxMjo0MCBuYWRkeSBFeHAgJAorLlwiCisuXCIJJE5ldEJTRDog
 aXBncGh5LjQkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDYgQnJhZCBTbWl0aCA8YnJhZEBv
 cGVuYnNkLm9yZz4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
 ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLlwiIHB1cnBvc2Ugd2l0aCBvciB3
 aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKy5c
 IiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh
 bGwgY29waWVzLgorLlwiCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5E
 IFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisuXCIgV0lUSCBSRUdBUkQgVE8g
 VEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorLlwiIE1F
 UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
 RSBMSUFCTEUgRk9SCisuXCIgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNF
 UVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworLlwiIFdIQVRTT0VWRVIgUkVTVUxUSU5H
 IEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorLlwiIEFD
 VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
 SVNJTkcgT1VUIE9GCisuXCIgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S
 TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKy5cIgorLkRkICRNZG9jZGF0ZTogQXVndXN0IDggMjAw
 OSAkCisuRHQgSVBHUEhZIDQKKy5PcworLlNoIE5BTUUKKy5ObSBpcGdwaHkKKy5OZCBJQyBQbHVz
 IElQMTAwMEEvSVAxMDAxIDEwLzEwMC9HaWdhYml0IEV0aGVybmV0IFBIWQorLlNoIFNZTk9QU0lT
 CisuQ2QgImlwZ3BoeSogYXQgbWlpPyIKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0KK2RyaXZl
 ciBzdXBwb3J0cyB0aGUgSUMgUGx1cyBJUDEwMDBBL0lQMTAwMSAxMC8xMDAvR2lnYWJpdCBFdGhl
 cm5ldCBQSFkKK2ludGVyZmFjZS4KKy5TaCBTRUUgQUxTTworLlhyIGlmbWVkaWEgNCAsCisuWHIg
 aW50cm8gNCAsCisuWHIgbWlpIDQgLAorLlhyIHN0Z2UgNCwKKy5YciB2Z2UgNCwKKy5YciBpZmNv
 bmZpZyA4CgpJbmRleDogc3lzL2FyY2gvYW1kNjQvY29uZi9HRU5FUklDCj09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
 c3lzL2FyY2gvYW1kNjQvY29uZi9HRU5FUklDCisrKyBzeXMvYXJjaC9hbWQ2NC9jb25mL0dFTkVS
 SUMKQEAgLTg3MSwxMCArODcxLDExIEBACiBpZ3BoeSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwg
 SUdQMDFFMTAwMAogaWhwaHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgyNTc3IFBIWXMKIGlr
 cGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU2MyBQSFlzCiBpbnBoeSoJYXQgbWlpPyBw
 aHkgPwkJCSMgSW50ZWwgODI1NTUgUEhZcwogaW9waHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVs
 IDgyNTUzIFBIWXMKK2lwZ3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgSUMgUExVUyBJUDEwMDBBL0lQ
 MTAwMSBQSFlzCiBseHRwaHkqIGF0IG1paT8gcGh5ID8JCQkjIExldmVsIE9uZSBMWFQtOTcwIFBI
 WXMKIG1ha3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgTWFydmVsbCBTZW1pY29uZHVjdG9yIDg4RTEw
 MDAgUEhZcwogbnNwaHkqCWF0IG1paT8gcGh5ID8JCQkjIE5TODM4NDAgUEhZcwogbnNwaHl0ZXIq
 IGF0IG1paT8gcGh5ID8gCQkjIE5TODM4NDMgUEhZcwogcG5hcGh5KiBhdCBtaWk/IHBoeSA/CQkJ
 IyBnZW5lcmljIEhvbWVQTkEgUEhZcwoKSW5kZXg6IHN5cy9kZXYvREVWTkFNRVMKPT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 Ci0tLSBzeXMvZGV2L0RFVk5BTUVTCisrKyBzeXMvZGV2L0RFVk5BTUVTCkBAIC02NTcsMTAgKzY1
 NywxMSBAQAogaW9wbAkJCU1JCiBpb3BzcAkJCU1JCiBpcGFxYnVzCQkJaHBjYXJtCiBpcGFxbGNk
 CQkJaHBjYXJtCiBpcGFxcGNpYwkJaHBjYXJtCitpcGdwaHkJCQlNSQogaXBtaQkJCWFtZDY0CiBp
 cG1pCQkJaTM4NgogaXBtaQkJCXhlbgogaXB3CQkJTUkKIGlyZGFzaXIJCQlNSQkJQXR0cmlidXRl
 CgpJbmRleDogc3lzL2Rldi9taWkvZmlsZXMubWlpCj09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkv
 ZmlsZXMubWlpCisrKyBzeXMvZGV2L21paS9maWxlcy5taWkKQEAgLTk3LDEwICs5NywxNCBAQAog
 CiBkZXZpY2UJaWtwaHk6IG1paV9waHkKIGF0dGFjaAlpa3BoeSBhdCBtaWkKIGZpbGUJZGV2L21p
 aS9pa3BoeS5jCQkJCWlrcGh5CiAKK2RldmljZQlpcGdwaHk6IG1paV9waHkKK2F0dGFjaAlpcGdw
 aHkgYXQgbWlpCitmaWxlCWRldi9taWkvaXBncGh5LmMJCQlpcGdwaHkKKwogZGV2aWNlCXNxcGh5
 OiBtaWlfcGh5CiBhdHRhY2gJc3FwaHkgYXQgbWlpCiBmaWxlCWRldi9taWkvc3FwaHkuYwkJCQlz
 cXBoeQogCiBkZXZpY2UJdHFwaHk6IG1paV9waHkKCkFEREVEICAgIHN5cy9kZXYvbWlpL2lwZ3Bo
 eS5jCkluZGV4OiBzeXMvZGV2L21paS9pcGdwaHkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvbWlp
 L2lwZ3BoeS5jCisrKyBzeXMvZGV2L21paS9pcGdwaHkuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoJ
 JE9wZW5CU0Q6IGlwZ3BoeS5jLHYgMS4xOSAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBFeHAgJAkq
 LworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24gPHlvbmdhcmlA
 RnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
 ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
 ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
 ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1v
 ZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
 IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
 ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
 Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
 dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
 aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
 QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
 IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
 RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
 VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
 VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
 RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
 IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
 VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
 T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
 TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
 KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
 QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
 VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
 CisgKi8KKworLyoKKyAqIERyaXZlciBmb3IgdGhlIElDIFBsdXMgSVAxMDAwQS9JUDEwMDEgMTAv
 MTAwLzEwMDAgUEhZLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxz
 eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVs
 Lmg+CisjaW5jbHVkZSA8c3lzL2RldmljZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp
 bmNsdWRlIDxzeXMvZXJybm8uaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5l
 dC9pZl9tZWRpYS5oPgorCisjaW5jbHVkZSA8ZGV2L21paS9taWkuaD4KKyNpbmNsdWRlIDxkZXYv
 bWlpL21paXZhci5oPgorI2luY2x1ZGUgPGRldi9taWkvbWlpZGV2cy5oPgorCisjaW5jbHVkZSA8
 ZGV2L21paS9pcGdwaHlyZWcuaD4KKworI2luY2x1ZGUgPGRldi9wY2kvaWZfc3RnZXJlZy5oPgor
 CitzdGF0aWMgaW50IGlwZ3BoeV9tYXRjaChkZXZpY2VfdCwgY2ZkYXRhX3QsIHZvaWQgKik7Citz
 dGF0aWMgdm9pZCBpcGdwaHlfYXR0YWNoKGRldmljZV90LCBkZXZpY2VfdCwgdm9pZCAqKTsKKwor
 Q0ZBVFRBQ0hfREVDTF9ORVcoaXBncGh5LCBzaXplb2Yoc3RydWN0IG1paV9zb2Z0YyksCisgICAg
 aXBncGh5X21hdGNoLCBpcGdwaHlfYXR0YWNoLCBtaWlfcGh5X2RldGFjaCwgbWlpX3BoeV9hY3Rp
 dmF0ZSk7CisKK3N0YXRpYyBpbnQJaXBncGh5X3NlcnZpY2Uoc3RydWN0IG1paV9zb2Z0YyAqLCBz
 dHJ1Y3QgbWlpX2RhdGEgKiwgaW50KTsKK3N0YXRpYyB2b2lkCWlwZ3BoeV9zdGF0dXMoc3RydWN0
 IG1paV9zb2Z0YyAqKTsKK3N0YXRpYyBpbnQJaXBncGh5X21paV9waHlfYXV0byhzdHJ1Y3QgbWlp
 X3NvZnRjICopOworLy9zdGF0aWMgdm9pZAlpcGdwaHlfbG9hZF9kc3Bjb2RlKHN0cnVjdCBtaWlf
 c29mdGMgKik7CitzdGF0aWMgdm9pZAlpcGdwaHlfcmVzZXQoc3RydWN0IG1paV9zb2Z0YyAqKTsK
 Kworc3RhdGljIGNvbnN0IHN0cnVjdCBtaWlfcGh5X2Z1bmNzIGlwZ3BoeV9mdW5jcyA9IHsKKwlp
 cGdwaHlfc2VydmljZSwgaXBncGh5X3N0YXR1cywgaXBncGh5X3Jlc2V0LAorfTsKKworc3RhdGlj
 IGNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyBpcGdwaHlzW10gPSB7CisJTUlJX1BIWV9ERVNDKElD
 UExVUywgSVAxMDAwQSksCisJTUlJX1BIWV9ERVNDKElDUExVUywgSVAxMDAxKSwKKwlNSUlfUEhZ
 X0VORCwKK307CisKK3N0YXRpYyBpbnQKK2lwZ3BoeV9tYXRjaChkZXZpY2VfdCBwYXJlbnQsIGNm
 ZGF0YV90IG1hdGNoLCB2b2lkICphdXgpCit7CisJc3RydWN0IG1paV9hdHRhY2hfYXJncyAqbWEg
 PSBhdXg7CisKKwlpZiAobWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cykgIT0gTlVMTCkgeworCQly
 ZXR1cm4gMTA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXBncGh5X2F0dGFj
 aChkZXZpY2VfdCBwYXJlbnQsIGRldmljZV90IHNlbGYsIHZvaWQgKmF1eCkKK3sKKwlzdHJ1Y3Qg
 bWlpX3NvZnRjICpzYyA9IGRldmljZV9wcml2YXRlKHNlbGYpOworCXN0cnVjdCBtaWlfYXR0YWNo
 X2FyZ3MgKm1hID0gYXV4OworCXN0cnVjdCBtaWlfZGF0YSAqbWlpID0gbWEtPm1paV9kYXRhOwor
 CWNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyAqbXBkOworCWNvbnN0IGNoYXIgKnNlcCA9ICIiOwor
 CisJbXBkID0gbWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cyk7CisJYXByaW50X25haXZlKCI6IE1l
 ZGlhIGludGVyZmFjZVxuIik7CisJYXByaW50X25vcm1hbCgiOiAlcywgcmV2LiAlZFxuIiwgbXBk
 LT5tcGRfbmFtZSwgTUlJX1JFVihtYS0+bWlpX2lkMikpOworCisJc2MtPm1paV9kZXYgPSBzZWxm
 OworCXNjLT5taWlfaW5zdCA9IG1paS0+bWlpX2luc3RhbmNlOworCXNjLT5taWlfcGh5ID0gbWEt
 Pm1paV9waHlubzsKKwlzYy0+bWlpX21wZF9vdWkgPSBNSUlfT1VJKG1hLT5taWlfaWQxLCBtYS0+
 bWlpX2lkMik7CisJc2MtPm1paV9tcGRfbW9kZWwgPSBNSUlfTU9ERUwobWEtPm1paV9pZDIpOwor
 CXNjLT5taWlfbXBkX3JldiA9IE1JSV9SRVYobWEtPm1paV9pZDIpOworCXNjLT5taWlfZnVuY3Mg
 PSAmaXBncGh5X2Z1bmNzOworCXNjLT5taWlfcGRhdGEgPSBtaWk7CisJc2MtPm1paV9mbGFncyA9
 IG1hLT5taWlfZmxhZ3M7CisKKwlzYy0+bWlpX2ZsYWdzIHw9IE1JSUZfTk9JU09MQVRFOworCXNj
 LT5taWlfYW5lZ3RpY2tzID0gTUlJX0FORUdUSUNLU19HSUdFOworCisJUEhZX1JFU0VUKHNjKTsK
 KworCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnNjLT5taWlfY2FwYWJpbGl0aWVzKTsKKwlzYy0+
 bWlpX2NhcGFiaWxpdGllcyAmPSBtYS0+bWlpX2NhcG1hc2s7CisJc2MtPm1paV9jYXBhYmlsaXRp
 ZXMgJj0gfkJNU1JfQU5FRzsKKwlpZiAoc2MtPm1paV9jYXBhYmlsaXRpZXMgJiBCTVNSX0VYVFNU
 QVQpCisJCVBIWV9SRUFEKHNjLCBNSUlfRVhUU1IsICZzYy0+bWlpX2V4dGNhcGFiaWxpdGllcyk7
 CisgCisJbWlpX3BoeV9hZGRfbWVkaWEoc2MpOworCQorI2RlZmluZQlBREQobSwgYykJaWZtZWRp
 YV9hZGQoJm1paS0+bWlpX21lZGlhLCAobSksIChjKSwgTlVMTCkKKyNkZWZpbmUJUFJJTlQobikJ
 YXByaW50X25vcm1hbCgiJXMlcyIsIHNlcCwgKG4pKTsgc2VwID0gIiwgIgorCQorCUFERChJRk1f
 TUFLRVdPUkQoSUZNX0VUSEVSLCBJRk1fQVVUTywgMCwgc2MtPm1paV9pbnN0KSwgTUlJX05NRURJ
 QSk7CisJc2VwID0iLCAiOworCVBSSU5UKCJhdXRvIik7CisKKwlhcHJpbnRfbm9ybWFsKCJcbiIp
 OworfQorCitzdGF0aWMgaW50CitpcGdwaHlfc2VydmljZShzdHJ1Y3QgbWlpX3NvZnRjICpzYywg
 c3RydWN0IG1paV9kYXRhICptaWksIGludCBjbWQpCit7CisJc3RydWN0IGlmbWVkaWFfZW50cnkg
 KmlmZSA9IG1paS0+bWlpX21lZGlhLmlmbV9jdXI7CisJdWludDE2X3QgZ2lnLCByZWcsIHNwZWVk
 OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1JSV9QT0xMU1RBVDoKKwkJLyoKKwkJICogSWYg
 d2UncmUgbm90IHBvbGxpbmcgb3VyIFBIWSBpbnN0YW5jZSwganVzdCByZXR1cm4uCisJCSAqLwor
 CQlpZiAoSUZNX0lOU1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5taWlfaW5zdCkKKwkJCXJldHVy
 biAwOworCQlicmVhazsKKworCWNhc2UgTUlJX01FRElBQ0hHOgorCQkvKgorCQkgKiBJZiB0aGUg
 bWVkaWEgaW5kaWNhdGVzIGEgZGlmZmVyZW50IFBIWSBpbnN0YW5jZSwKKwkJICogaXNvbGF0ZSBv
 dXJzZWx2ZXMuCisJCSAqLworCQlpZiAoSUZNX0lOU1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5t
 aWlfaW5zdCkgeworCQkJUEhZX1JFQUQoc2MsIE1JSV9CTUNSLCAmcmVnKTsKKwkJCVBIWV9XUklU
 RShzYywgTUlJX0JNQ1IsIHJlZyB8IEJNQ1JfSVNPKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJ
 LyoKKwkJICogSWYgdGhlIGludGVyZmFjZSBpcyBub3QgdXAsIGRvbid0IGRvIGFueXRoaW5nLgor
 CQkgKi8KKwkJaWYgKChtaWktPm1paV9pZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQkJ
 YnJlYWs7CisKKwkJUEhZX1JFU0VUKHNjKTsKKworCQlzd2l0Y2ggKElGTV9TVUJUWVBFKGlmZS0+
 aWZtX21lZGlhKSkgeworCQljYXNlIElGTV9BVVRPOgorCQkJKHZvaWQpaXBncGh5X21paV9waHlf
 YXV0byhzYyk7CisJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKworCQljYXNlIElGTV8xMDAwX1Q6
 CisJCQkvKgorCQkJICogWFhYCisJCQkgKiBNYW51YWwgMTAwMGJhc2VUIHNldHRpbmcgZG9lc24n
 dCBzZWVtIHRvIHdvcmsuCisJCQkgKi8KKwkJCXNwZWVkID0gQk1DUl9TMTAwMDsKKwkJCWJyZWFr
 OworCisJCWNhc2UgSUZNXzEwMF9UWDoKKwkJCXNwZWVkID0gQk1DUl9TMTAwOworCQkJYnJlYWs7
 CisKKwkJY2FzZSBJRk1fMTBfVDoKKwkJCXNwZWVkID0gQk1DUl9TMTA7CisJCQlicmVhazsKKwor
 CQlkZWZhdWx0OgorCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCisJCWlmICgoKGlmZS0+aWZtX21l
 ZGlhICYgSUZNX0dNQVNLKSAmIElGTV9GRFgpICE9IDApIHsKKwkJCXNwZWVkIHw9IEJNQ1JfRkRY
 OworCQkJZ2lnID0gR1RDUl9BRFZfMTAwMFRGRFg7CisJCX0gZWxzZQorCQkJZ2lnID0gR1RDUl9B
 RFZfMTAwMFRIRFg7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwgMCk7CisJCVBIWV9X
 UklURShzYywgTUlJX0JNQ1IsIHNwZWVkKTsKKworCQlpZiAoSUZNX1NVQlRZUEUoaWZlLT5pZm1f
 bWVkaWEpICE9IElGTV8xMDAwX1QpCisJCQlicmVhazsKKworCQlQSFlfV1JJVEUoc2MsIE1JSV8x
 MDBUMkNSLCBnaWcpOworCQlQSFlfV1JJVEUoc2MsIE1JSV9CTUNSLCBzcGVlZCk7CisKKwkJaWYg
 KG1paS0+bWlpX21lZGlhLmlmbV9tZWRpYSAmIElGTV9FVEhfTUFTVEVSKQorCQkJZ2lnIHw9IEdU
 Q1JfTUFOX01TIHwgR1RDUl9BRFZfTVM7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwg
 Z2lnKTsKKworZG9uZToKKwkJYnJlYWs7CisKKwljYXNlIE1JSV9USUNLOgorCQkvKgorCQkgKiBJ
 ZiB3ZSdyZSBub3QgY3VycmVudGx5IHNlbGVjdGVkLCBqdXN0IHJldHVybi4KKwkJICovCisJCWlm
 IChJRk1fSU5TVChpZmUtPmlmbV9tZWRpYSkgIT0gc2MtPm1paV9pbnN0KQorCQkJcmV0dXJuIDA7
 CisKKwkJLyoKKwkJICogSXMgdGhlIGludGVyZmFjZSBldmVuIHVwPworCQkgKi8KKwkJaWYgKCht
 aWktPm1paV9pZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJ
 LyoKKwkJICogT25seSB1c2VkIGZvciBhdXRvbmVnb3RpYXRpb24uCisJCSAqLworCQlpZiAoSUZN
 X1NVQlRZUEUoaWZlLT5pZm1fbWVkaWEpICE9IElGTV9BVVRPKSB7CisJCQlzYy0+bWlpX3RpY2tz
 ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGhh
 dmUgbGluay4gIElmIHdlIGRvLCB3ZSBkb24ndAorCQkgKiBuZWVkIHRvIHJlc3RhcnQgdGhlIGF1
 dG9uZWdvdGlhdGlvbiBwcm9jZXNzLiAgUmVhZAorCQkgKiB0aGUgQk1TUiB0d2ljZSBpbiBjYXNl
 IGl0J3MgbGF0Y2hlZC4KKwkJICovCisJCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnJlZyk7CisJ
 CVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnJlZyk7CisJCWlmIChyZWcgJiBCTVNSX0xJTkspIHsK
 KwkJCS8qCisJCQkgKiBSZXNldCBhdXRvbmVnb3RpYXRpb24gdGltZXIgdG8gMCBpbiBjYXNlIHRo
 ZSBsaW5rCisJCQkgKiBnb2VzIGRvd24gaW4gdGhlIG5leHQgdGljay4KKwkJCSAqLworCQkJc2Mt
 Pm1paV90aWNrcyA9IDA7CisJCQkvKiBTZWUgYWJvdmUuICovCisJCQlicmVhazsKKwkJfQorCisJ
 CS8qIEFubm91bmNlIGxpbmsgbG9zcyByaWdodCBhZnRlciBpdCBoYXBwZW5zICovCisJCWlmIChz
 Yy0+bWlpX3RpY2tzKysgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE9ubHkgcmV0cnkg
 YXV0b25lZ290aWF0aW9uIGV2ZXJ5IG1paV9hbmVndGlja3Mgc2Vjb25kcy4KKwkJICovCisJCWlm
 IChzYy0+bWlpX3RpY2tzIDw9IHNjLT5taWlfYW5lZ3RpY2tzKQorCQkJYnJlYWs7CisKKwkJc2Mt
 Pm1paV90aWNrcyA9IDA7CisJCWlwZ3BoeV9taWlfcGh5X2F1dG8oc2MpOworCQlicmVhazsKKwl9
 CisKKwkvKiBVcGRhdGUgdGhlIG1lZGlhIHN0YXR1cy4gKi8KKwlpcGdwaHlfc3RhdHVzKHNjKTsK
 KworCS8qIENhbGxiYWNrIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiAqLworCW1paV9waHlfdXBkYXRl
 KHNjLCBjbWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXBncGh5X3N0YXR1cyhz
 dHJ1Y3QgbWlpX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paSA9IHNjLT5taWlf
 cGRhdGE7CisJc3RydWN0IGlmbWVkaWFfZW50cnkgKmlmZSA9IG1paS0+bWlpX21lZGlhLmlmbV9j
 dXI7CisJdWludDE2X3QgYm1zciwgYm1jciwgc3RhdCwgZ3RzcjsKKworCW1paS0+bWlpX21lZGlh
 X3N0YXR1cyA9IElGTV9BVkFMSUQ7CisJbWlpLT5taWlfbWVkaWFfYWN0aXZlID0gSUZNX0VUSEVS
 OworCisJUEhZX1JFQUQoc2MsIE1JSV9CTVNSLCAmYm1zcik7CisJUEhZX1JFQUQoc2MsIE1JSV9C
 TVNSLCAmYm1zcik7CisJaWYgKGJtc3IgJiBCTVNSX0xJTkspIAorCQltaWktPm1paV9tZWRpYV9z
 dGF0dXMgfD0gSUZNX0FDVElWRTsKKworCVBIWV9SRUFEKHNjLCBNSUlfQk1DUiwgJmJtY3IpOwor
 CWlmIChibWNyICYgQk1DUl9MT09QKQorCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0xP
 T1A7CisKKwlpZiAoYm1jciAmIEJNQ1JfQVVUT0VOKSB7CisJCWlmICgoYm1zciAmIEJNU1JfQUNP
 TVApID09IDApIHsKKwkJCS8qIEVyZywgc3RpbGwgdHJ5aW5nLCBJIGd1ZXNzLi4uICovCisJCQlt
 aWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7CisJCQlyZXR1cm47CisJCX0KKworCQlp
 ZiAoc2MtPm1paV9tcGRfbW9kZWwgPT0gTUlJX01PREVMX0lDUExVU19JUDEwMDEpIHsKKwkJCVBI
 WV9SRUFEKHNjLCBJUEdQSFlfTFNSLCAmc3RhdCk7CisJCQlzd2l0Y2ggKHN0YXQgJiBJUEdQSFlf
 TFNSX1NQRUVEX01BU0spIHsKKwkJCWNhc2UgSVBHUEhZX0xTUl9TUEVFRF8xMDoKKwkJCQltaWkt
 Pm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNXzEwX1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIElQR1BI
 WV9MU1JfU1BFRURfMTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RY
 OworCQkJCWJyZWFrOworCQkJY2FzZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDA6CisJCQkJbWlpLT5t
 aWlfbWVkaWFfYWN0aXZlIHw9IElGTV8xMDAwX1Q7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgkJ
 CQkKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7CisJCQkJcmV0dXJuOwor
 CQkJfQorCisJCQlpZiAoc3RhdCAmIElQR1BIWV9MU1JfRlVMTF9EVVBMRVgpCisJCQkJbWlpLT5t
 aWlfbWVkaWFfYWN0aXZlIHw9IElGTV9GRFg7CisJCQllbHNlCisJCQkJbWlpLT5taWlfbWVkaWFf
 YWN0aXZlIHw9IElGTV9IRFg7CisJCX0gZWxzZSB7CisJCQlQSFlfUkVBRChzYywgU1RHRV9QaHlD
 dHJsLCAmc3RhdCk7CisJCQlzd2l0Y2ggKFBDX0xpbmtTcGVlZChzdGF0KSkgeworCQkJY2FzZSBQ
 Q19MaW5rU3BlZWRfRG93bjoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7
 CisJCQkJcmV0dXJuOworCQkJY2FzZSBQQ19MaW5rU3BlZWRfMTA6CisJCQkJbWlpLT5taWlfbWVk
 aWFfYWN0aXZlIHw9IElGTV8xMF9UOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ19MaW5rU3BlZWRf
 MTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RYOworCQkJCWJyZWFr
 OworCQkJY2FzZSBQQ19MaW5rU3BlZWRfMTAwMDoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUg
 fD0gSUZNXzEwMDBfVDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbWlpLT5taWlfbWVk
 aWFfYWN0aXZlIHw9IElGTV9OT05FOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKHN0YXQg
 JiBQQ19QaHlEdXBsZXhTdGF0dXMpCisJCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9G
 RFg7CisJCQllbHNlCisJCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9IRFg7CisJCX0K
 KworCQlpZiAobWlpLT5taWlfbWVkaWFfYWN0aXZlICYgSUZNX0ZEWCkKKwkJCW1paS0+bWlpX21l
 ZGlhX2FjdGl2ZSB8PSBtaWlfcGh5X2Zsb3dzdGF0dXMoc2MpOworCisJCWlmIChJRk1fU1VCVFlQ
 RShtaWktPm1paV9tZWRpYV9hY3RpdmUpID09IElGTV8xMDAwX1QpIHsKKwkJCVBIWV9SRUFEKHNj
 LCBNSUlfMTAwVDJTUiwgJmd0c3IpOworCQkJaWYgKGd0c3IgJiBHVFNSX01TX1JFUykKKwkJCQlt
 aWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0VUSF9NQVNURVI7CisJCX0KKwl9IGVsc2UKKwkJ
 bWlpLT5taWlfbWVkaWFfYWN0aXZlID0gaWZlLT5pZm1fbWVkaWE7Cit9CisKK3N0YXRpYyBpbnQK
 K2lwZ3BoeV9taWlfcGh5X2F1dG8oc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJdWludDE2X3Qg
 cmVnID0gMDsKKworCWlmIChzYy0+bWlpX21wZF9tb2RlbCA9PSBNSUlfTU9ERUxfSUNQTFVTX0lQ
 MTAwMSkgeworCQlQSFlfUkVBRChzYywgTUlJX0FOQVIsICZyZWcpOworCQlyZWcgJj0gfihBTkFS
 X1BBVVNFX1NZTSB8IEFOQVJfUEFVU0VfQVNZTSk7CisJCXJlZyB8PSBBTkFSX05QOworCX0KKwor
 CXJlZyB8PSBBTkFSXzEwIHwgQU5BUl8xMF9GRCB8IEFOQVJfVFggfCBBTkFSX1RYX0ZEOworCisJ
 aWYgKHNjLT5taWlfZmxhZ3MgJiBNSUlGX0RPUEFVU0UpCisJCXJlZyB8PSBBTkFSX1BBVVNFX1NZ
 TSB8IEFOQVJfUEFVU0VfQVNZTTsKKworCVBIWV9XUklURShzYywgTUlJX0FOQVIsIHJlZyB8IEFO
 QVJfQ1NNQSk7CisKKwlyZWcgPSBHVENSX0FEVl8xMDAwVEZEWCB8IEdUQ1JfQURWXzEwMDBUSERY
 OworCWlmIChzYy0+bWlpX21wZF9tb2RlbCAhPSBNSUlfTU9ERUxfSUNQTFVTX0lQMTAwMSkKKwkJ
 cmVnIHw9IEdUQ1JfQURWX01TOworCVBIWV9XUklURShzYywgTUlJXzEwMFQyQ1IsIHJlZyk7CisK
 KwlQSFlfV1JJVEUoc2MsIE1JSV9CTUNSLCBCTUNSX0ZEWCB8IEJNQ1JfQVVUT0VOIHwgQk1DUl9T
 VEFSVE5FRyk7CisKKwlyZXR1cm4gRUpVU1RSRVRVUk47Cit9CisKKy8qc3RhdGljIHZvaWQKK2lw
 Z3BoeV9sb2FkX2RzcGNvZGUoc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJUEhZX1dSSVRFKHNj
 LCAzMSwgMHgwMDAxKTsKKwlQSFlfV1JJVEUoc2MsIDI3LCAweDAxZTApOworCVBIWV9XUklURShz
 YywgMzEsIDB4MDAwMik7CisJUEhZX1dSSVRFKHNjLCAyNywgMHhlYjhlKTsKKwlQSFlfV1JJVEUo
 c2MsIDMxLCAweDAwMDApOworCVBIWV9XUklURShzYywgMzAsIDB4MDA1ZSk7CisJUEhZX1dSSVRF
 KHNjLCA5LCAweDA3MDApOworCisJREVMQVkoNTApOworfSovCisKK3N0YXRpYyB2b2lkCitpcGdw
 aHlfcmVzZXQoc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJLy9zdHJ1Y3QgaWZuZXQgKmlmcCA9
 IHNjLT5taWlfcGRhdGEtPm1paV9pZnA7CisJdWludDE2X3QgcmVnOworCisJbWlpX3BoeV9yZXNl
 dChzYyk7CisKKwkvKiBjbGVhciBhdXRvbmVnL2Z1bGwtZHVwbGV4IGFzIHdlIGRvbid0IHdhbnQg
 aXQgYWZ0ZXIgcmVzZXQgKi8KKwlQSFlfUkVBRChzYywgTUlJX0JNQ1IsICZyZWcpOworCXJlZyAm
 PSB+KEJNQ1JfQVVUT0VOIHwgQk1DUl9GRFgpOworCVBIWV9XUklURShzYywgTUlJX0JNQ1IsIHJl
 Zyk7CisKKwkvKmlmIChzYy0+bWlpX21wZF9tb2RlbCA9PSBNSUlfTU9ERUxfSUNQTFVTX0lQMTAw
 MEEgJiYKKwkgICAgc3RyY21wKGlmcC0+aWZfeG5hbWUsICJzdGdlIikgPT0gMCkgeworCQlzdHJ1
 Y3Qgc3RnZV9zb2Z0YyAqc3RnZV9zYyA9IGlmcC0+aWZfc29mdGM7CisJCWlmIChzdGdlX3NjLT5z
 Y19yZXYgPj0gMHg0MCAmJiBzdGdlX3NjLT5zY19yZXYgPD0gMHg0ZSkKKwkJCWlwZ3BoeV9sb2Fk
 X2RzcGNvZGUoc2MpOworCX0qLworfQoKQURERUQgICAgc3lzL2Rldi9taWkvaXBncGh5cmVnLmgK
 SW5kZXg6IHN5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkv
 aXBncGh5cmVnLmgKKysrIHN5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oCkBAIC0wLDAgKzEsODMgQEAK
 Ky8qCSRPcGVuQlNEOiBpcGdwaHlyZWcuaCx2IDEuMyAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBF
 eHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24KKyAq
 IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgCisgKiBSZWRpc3RyaWJ1dGlv
 biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
 IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
 Y29uZGl0aW9ucworICogYXJlIG1ldDogICAgICAgICAgICAgCisgKiAxLiBSZWRpc3RyaWJ1dGlv
 bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
 bm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxv
 d2luZworICogICAgZGlzY2xhaW1lci4gIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
 eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
 dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
 aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
 aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
 WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
 U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
 VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
 IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
 VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
 RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
 RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
 Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
 LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
 IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
 Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
 UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
 UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
 SCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0RFVl9NSUlfSVBHUEhZUkVHX0hfCisjZGVm
 aW5lIF9ERVZfTUlJX0lQR1BIWVJFR19IXworCisvKgorICogUmVnaXN0ZXJzIGZvciB0aGUgSUMg
 UGx1cyBJUEdBIGludGVybmFsIFBIWS4KKyAqLworCisvKiBQSFkgc3BlY2lmaWMgY29udHJvbCAm
 IHN0YXR1cyByZWdpc3Rlci4gSVAxMDAxIG9ubHkuICovCisjZGVmaW5lIElQR1BIWV9TQ1NSCQkJ
 MHgxMAorI2RlZmluZSBJUEdQSFlfU0NTUl9SWFBIQVNFX1NFTAkweDAwMDEKKyNkZWZpbmUgSVBH
 UEhZX1NDU1JfVFhQSEFTRV9TRUwJMHgwMDAyCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JFUEVBVE9S
 X01PREUJMHgwMDA0CisjZGVmaW5lIElQR1BIWV9TQ1NSX1JFU0VSVkVEMV9ERUYJMHgwMDA4Cisj
 ZGVmaW5lIElQR1BIWV9TQ1NSX1JYQ0xLX0RSVl9NQVNLCTB4MDA2MAorI2RlZmluZSBJUEdQSFlf
 U0NTUl9SWENMS19EUlZfREVGCTB4MDA0MAorI2RlZmluZSBJUEdQSFlfU0NTUl9SWERfRFJWX01B
 U0sJMHgwMTgwCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JYRF9EUlZfREVGCTB4MDEwMAorI2RlZmlu
 ZSBJUEdQSFlfU0NTUl9KQUJCRVJfRU5CCTB4MDIwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9IRUFS
 VF9CRUFUX0VOQgkweDA0MDAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfRE9XTlNISUZUX0VOQgkweDA4
 MDAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfUkVTRVJWRUQyX0RFRgkweDEwMDAKKyNkZWZpbmUgSVBH
 UEhZX1NDU1JfTEVEX0RSVl80TUEJMHgwMDAwCisjZGVmaW5lIElQR1BIWV9TQ1NSX0xFRF9EUlZf
 OE1BCTB4MjAwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9MRURfTU9ERV9NQVNLCTB4QzAwMAorI2Rl
 ZmluZSBJUEdQSFlfU0NTUl9MRURfTU9ERV9ERUYJMHgwMDAwCisKKy8qIFBIWSBsaW5rIHN0YXR1
 cyByZWdpc3Rlci4gSVAxMDAxIG9ubHkuICovCisjZGVmaW5lIElQR1BIWV9MU1IJCQkweDExCisj
 ZGVmaW5lIElQR1BIWV9MU1JfSkFCQkVSX0RFVAkweDAyMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9B
 UFNfU0xFRVAJCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfTFNSX01ESVgJCTB4MDgwMAorI2RlZmlu
 ZSBJUEdQSFlfTFNSX0ZVTExfRFVQTEVYCTB4MTAwMAorI2RlZmluZSBJUEdQSFlfTFNSX1NQRUVE
 XzEwCQkweDAwMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9TUEVFRF8xMDAJCTB4MjAwMAorI2RlZmlu
 ZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDAJMHg0MDAwCisjZGVmaW5lIElQR1BIWV9MU1JfU1BFRURf
 TUFTSwkweDYwMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9MSU5LVVAJCTB4ODAwMAorCisvKiBQSFkg
 c3BlY2lmaWMgY29udHJvbCByZWdpc3RlciAyLiBJUDEwMDEgb25seS4gKi8KKyNkZWZpbmUgSVBH
 UEhZX1NDUgorI2RlZmluZSBJUEdQSFlfU0NSX1NFV19SQVRFX01BU0sJMHgwMDAzCisjZGVmaW5l
 IElQR1BIWV9TQ1JfU0VXX1JBVEVfREVGCTB4MDAwMworI2RlZmluZSBJUEdQSFlfU0NSX0FVVE9f
 WE9WRVIJMHgwMDA0CisjZGVmaW5lIElQR1BIWV9TQ1JfU1BFRURfMTBfMTAwX0VOQgkweDAwNDAK
 KyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVOQ1lfMgkweDAwMDAKKyNkZWZpbmUgSVBHUEhZ
 X1NDUl9GSUZPX0xBVEVOQ1lfMwkweDAwODAKKyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVO
 Q1lfNAkweDAxMDAKKyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVOQ1lfNQkweDAxODAKKyNk
 ZWZpbmUgSVBHUEhZX1NDUl9NRElYX0VOQgkJMHgwMjAwCisjZGVmaW5lIElQR1BIWV9TQ1JfUkVT
 RVJWRURfREVGCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfU0NSX0FQU19PTgkJMHgwODAwCisKKyNl
 bmRpZiAvKiBfREVWX01JSV9JUEdQSFlSRUdfSF8gKi8KCkluZGV4OiBzeXMvZGV2L21paS9taWlk
 ZXZzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkvbWlpZGV2cworKysgc3lzL2Rldi9taWkvbWlp
 ZGV2cwpAQCAtNzQsMTEgKzc0LDExIEBACiBvdWkgTUFSVkVMTAkJCTB4MDA1MDQzCU1hcnZlbGwg
 U2VtaWNvbmR1Y3Rvcgogb3VpIFFVQUxTRU1JCQkJMHgwMDYwNTEJUXVhbGl0eSBTZW1pY29uZHVj
 dG9yCiBvdWkgQU1MT0dJQwkJCTB4MDA2MDUxCUFtbG9naWMKIG91aSBEQVZJQ09NCQkJMHgwMDYw
 NmUJRGF2aWNvbSBTZW1pY29uZHVjdG9yCiBvdWkgU01TQwkJCTB4MDA4MDBmCVNNU0MKLW91aSBJ
 Q1BMVVMJCQkweDAwOTBjMwlJQyBQbHVzIENvcnAuCitvdWkgSUNQTFVTCQkJMHgwMDA5YzMJSUMg
 UGx1cyBDb3JwLgogb3VpIFNFRVEJCQkweDAwYTA3ZAlTZWVxCiBvdWkgSUNTCQkJCTB4MDBhMGJl
 CUludGVncmF0ZWQgQ2lyY3VpdCBTeXN0ZW1zCiBvdWkgSU5URUwJCQkweDAwYWEwMAlJbnRlbAog
 b3VpIFRTQwkJCQkweDAwYzAzOQlUREsgU2VtaWNvbmR1Y3Rvcgogb3VpIE1ZU09OCQkJMHgwMGMw
 YjQJTXlzb24gVGVjaG5vbG9neQoK
 --000000000000efb2d20591fccc25--

Responsible-Changed-From-To: kern-bug-people->msaitoh
Responsible-Changed-By: msaitoh@NetBSD.org
Responsible-Changed-When: Mon, 09 Sep 2019 07:51:31 +0000
Responsible-Changed-Why:
mine.


From: Andrius V <vezhlys@gmail.com>
To: kern-bug-people@netbsd.org, netbsd-bugs@netbsd.org, tharada@oucrc.org, 
	msaitoh@netbsd.org, gnats-bugs@netbsd.org, gnats-admin@netbsd.org
Cc: 
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Tue, 24 Sep 2019 01:50:49 +0300

 It seems like to avoid attaching auto manually, only the removal of
 sc->mii_capabilities &= ~BMSR_ANEG; line is needed in ipgphy_match (I
 copied it from rgephy but this code was specific to that phy only):

 static void
 ipgphy_attach(device_t parent, device_t self, void *aux)
 {
     struct mii_softc *sc = device_private(self);
     struct mii_attach_args *ma = aux;
     struct mii_data *mii = ma->mii_data;
     const struct mii_phydesc *mpd;

     mpd = mii_phy_match(ma, ipgphys);
     aprint_naive(": Media interface\n");
     aprint_normal(": %s, rev. %d\n", mpd->mpd_name, MII_REV(ma->mii_id2));

     sc->mii_dev = self;
     sc->mii_inst = mii->mii_instance;
     sc->mii_phy = ma->mii_phyno;
     sc->mii_mpd_oui = MII_OUI(ma->mii_id1, ma->mii_id2);
     sc->mii_mpd_model = MII_MODEL(ma->mii_id2);
     sc->mii_mpd_rev = MII_REV(ma->mii_id2);
     sc->mii_funcs = &ipgphy_funcs;
     sc->mii_pdata = mii;
     sc->mii_flags = ma->mii_flags;

     sc->mii_flags |= MIIF_NOISOLATE;
     sc->mii_anegticks = MII_ANEGTICKS_GIGE;

     PHY_RESET(sc);

     PHY_READ(sc, MII_BMSR, &sc->mii_capabilities);
     sc->mii_capabilities &= ma->mii_capmask;

     if (sc->mii_capabilities & BMSR_EXTSTAT)
         PHY_READ(sc, MII_EXTSR, &sc->mii_extcapabilities);

     mii_phy_add_media(sc);
     aprint_normal("\n");

 }

 On Sun, Sep 8, 2019 at 12:00 AM Andrius V <vezhlys@gmail.com> wrote:
 >
 > The following reply was made to PR kern/42314; it has been noted by GNATS.
 >
 > From: Andrius V <vezhlys@gmail.com>
 > To: gnats-bugs@netbsd.org
 > Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
 > Subject: Re: kern/42314: IC Plus IP100x PHY support
 > Date: Sat, 7 Sep 2019 23:57:04 +0300
 >
 >  --000000000000efb2d20591fccc25
 >  Content-Type: text/plain; charset="UTF-8"
 >
 >  Hi,
 >
 >  Since, I have VIA EPIA-M900 motherboard with VT6130 Ethernet
 >  controller and IP1001 phy, I made an effort to port OpenBSD driver,
 >  and I prepared initial but not complete patch for PHY support (which
 >  is almost a copy of OpenBSD driver with mainly small changes to cater
 >  NetBSD specifics). Issues described below (first two I believe are
 >  blocking from committing it to NetBSD yet and I need a help to resolve
 >  if possible):
 >
 >  * For some reason direct port fails to work with autonegotation
 >  (if_media match fails, there is no auto option available). As a
 >  workaround I copied the code below from rgephy.c to add it manually
 >  and it worked for me:
 >
 >  #define    ADD(m, c)    ifmedia_add(&mii->mii_media, (m), (c), NULL)
 >  #define    PRINT(n)    aprint_normal("%s%s", sep, (n)); sep = ", "
 >
 >      ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst), MII_NMEDIA);
 >      sep =", ";
 >      PRINT("auto");
 >
 >  I believe it is a hack in this case, since OpenBSD seemingly doesn't
 >  need it but for some reason direct port looses auto option in NetBSD.
 >  Maybe somebody have idea, why it happened?
 >  * Commented out the code with stge revision check in ipgphy_reset
 >  (which calls also commented ipgphy_load_dspcode). I guess to implement
 >  that I would need to change if_stge driver to move struct into a
 >  header file or find another way to get sc_rev. Can someone help me out
 >  with that?
 >  * I change config for amd64 GENERIC only. I quite certain, it can be
 >  added at least to i386, though OpenBSD defined it in most ports.
 >  * Same as OpenBSD, manual setting to 1000baseT will fail,
 >  autonegotation must be used to get Gigabit Ethernet speed.
 >  * OUI in NetBSD is recognized as 0x0009c3, not as 0x0090c3 like it is
 >  defined in Open/FreeBSD. Changed it in miidevs.
 >
 >  Attached the patch below (regen is still needed for miidevs).
 >
 >  With provided changes, vge successfully auto negotiated for 1Gbit
 >  speed (which wasn't the case with general phy):
 >  vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >          capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >          capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >          enabled=0
 >          ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >          ec_enabled=2<VLAN_HWTAGGING>
 >          address: xx:xx:xx:xx:xx:xx
 >          media: Ethernet autoselect (1000baseT
 >  full-duplex,flowcontrol,master,rxpause,txpause)
 >          status: active
 >          inet 192.168.1.18/24 broadcast 192.168.1.255 flags 0x0
 >          inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x
 >
 >  from dmesg:
 >  ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 025
 >  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
 >
 >  P.S. Not sure if original submitter did provide a patch as well but
 >  his link is down currently.
 >
 >  Regards,
 >  Andrius V
 >
 >  On Sat, Nov 14, 2009 at 12:00 AM <tharada@oucrc.org> wrote:
 >  >
 >  > >Number:         42314
 >  > >Category:       kern
 >  > >Synopsis:       IC Plus IP100x PHY support
 >  > >Confidential:   no
 >  > >Severity:       non-critical
 >  > >Priority:       low
 >  > >Responsible:    kern-bug-people
 >  > >State:          open
 >  > >Class:          sw-bug
 >  > >Submitter-Id:   net
 >  > >Arrival-Date:   Fri Nov 13 22:00:00 +0000 2009
 >  > >Originator:     Tomokazu HARADA
 >  > >Release:        5.99.22
 >  > >Organization:
 >  > >Environment:
 >  > NetBSD xjazz 5.99.22 NetBSD 5.99.22 (GENERIC) #1: Sat Nov 14 06:05:25 JST 2009  root@xjazz:/usr/obj/sys/arch/i386/compile/GENERIC i386
 >  >
 >  > >Description:
 >  > IC Plus IP1000A/IP1001 10/100/1000 PHY support
 >  > (from OpenBSD ipgphy)
 >  >
 >  > vge0 at pci2 dev 0 function 0: VIA VT612X Gigabit Ethernet (rev. 0x82)
 >  > vge0: interrupting at ioapic0 pin 16
 >  > vge0: Ethernet address: 00:02:2a:e6:d7:ad
 >  > ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 >  > ipgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
 >  >
 >  > This is a VIA VT6130 PCIe GbE, the phy is integrated on.
 >  >
 >  > >How-To-Repeat:
 >  > N/A
 >  > >Fix:
 >  > http://tharada.oucrc.org/ipgphy/
 >  >
 >
 >  --000000000000efb2d20591fccc25
 >  Content-Type: text/x-patch; charset="US-ASCII"; name="test.patch"
 >  Content-Disposition: attachment; filename="test.patch"
 >  Content-Transfer-Encoding: base64
 >  Content-ID: <f_k09zxctb0>
 >  X-Attachment-Id: f_k09zxctb0
 >
 >  QURERUQgICAgc2hhcmUvbWFuL21hbjQvaXBncGh5LjQKSW5kZXg6IHNoYXJlL21hbi9tYW40L2lw
 >  Z3BoeS40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 >  PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWFuL21hbjQvaXBncGh5LjQKKysrIHNoYXJlL21h
 >  bi9tYW40L2lwZ3BoeS40CkBAIC0wLDAgKzEsMzggQEAKKy5cIgkkT3BlbkJTRDogaXBncGh5LjQs
 >  diAxLjUgMjAwOS8wOC8wOCAxNzoxMjo0MCBuYWRkeSBFeHAgJAorLlwiCisuXCIJJE5ldEJTRDog
 >  aXBncGh5LjQkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDYgQnJhZCBTbWl0aCA8YnJhZEBv
 >  cGVuYnNkLm9yZz4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
 >  ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLlwiIHB1cnBvc2Ugd2l0aCBvciB3
 >  aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKy5c
 >  IiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh
 >  bGwgY29waWVzLgorLlwiCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5E
 >  IFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisuXCIgV0lUSCBSRUdBUkQgVE8g
 >  VEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorLlwiIE1F
 >  UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
 >  RSBMSUFCTEUgRk9SCisuXCIgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNF
 >  UVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworLlwiIFdIQVRTT0VWRVIgUkVTVUxUSU5H
 >  IEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorLlwiIEFD
 >  VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
 >  SVNJTkcgT1VUIE9GCisuXCIgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S
 >  TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKy5cIgorLkRkICRNZG9jZGF0ZTogQXVndXN0IDggMjAw
 >  OSAkCisuRHQgSVBHUEhZIDQKKy5PcworLlNoIE5BTUUKKy5ObSBpcGdwaHkKKy5OZCBJQyBQbHVz
 >  IElQMTAwMEEvSVAxMDAxIDEwLzEwMC9HaWdhYml0IEV0aGVybmV0IFBIWQorLlNoIFNZTk9QU0lT
 >  CisuQ2QgImlwZ3BoeSogYXQgbWlpPyIKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0KK2RyaXZl
 >  ciBzdXBwb3J0cyB0aGUgSUMgUGx1cyBJUDEwMDBBL0lQMTAwMSAxMC8xMDAvR2lnYWJpdCBFdGhl
 >  cm5ldCBQSFkKK2ludGVyZmFjZS4KKy5TaCBTRUUgQUxTTworLlhyIGlmbWVkaWEgNCAsCisuWHIg
 >  aW50cm8gNCAsCisuWHIgbWlpIDQgLAorLlhyIHN0Z2UgNCwKKy5YciB2Z2UgNCwKKy5YciBpZmNv
 >  bmZpZyA4CgpJbmRleDogc3lzL2FyY2gvYW1kNjQvY29uZi9HRU5FUklDCj09PT09PT09PT09PT09
 >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
 >  c3lzL2FyY2gvYW1kNjQvY29uZi9HRU5FUklDCisrKyBzeXMvYXJjaC9hbWQ2NC9jb25mL0dFTkVS
 >  SUMKQEAgLTg3MSwxMCArODcxLDExIEBACiBpZ3BoeSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwg
 >  SUdQMDFFMTAwMAogaWhwaHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgyNTc3IFBIWXMKIGlr
 >  cGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU2MyBQSFlzCiBpbnBoeSoJYXQgbWlpPyBw
 >  aHkgPwkJCSMgSW50ZWwgODI1NTUgUEhZcwogaW9waHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVs
 >  IDgyNTUzIFBIWXMKK2lwZ3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgSUMgUExVUyBJUDEwMDBBL0lQ
 >  MTAwMSBQSFlzCiBseHRwaHkqIGF0IG1paT8gcGh5ID8JCQkjIExldmVsIE9uZSBMWFQtOTcwIFBI
 >  WXMKIG1ha3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgTWFydmVsbCBTZW1pY29uZHVjdG9yIDg4RTEw
 >  MDAgUEhZcwogbnNwaHkqCWF0IG1paT8gcGh5ID8JCQkjIE5TODM4NDAgUEhZcwogbnNwaHl0ZXIq
 >  IGF0IG1paT8gcGh5ID8gCQkjIE5TODM4NDMgUEhZcwogcG5hcGh5KiBhdCBtaWk/IHBoeSA/CQkJ
 >  IyBnZW5lcmljIEhvbWVQTkEgUEhZcwoKSW5kZXg6IHN5cy9kZXYvREVWTkFNRVMKPT09PT09PT09
 >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 >  Ci0tLSBzeXMvZGV2L0RFVk5BTUVTCisrKyBzeXMvZGV2L0RFVk5BTUVTCkBAIC02NTcsMTAgKzY1
 >  NywxMSBAQAogaW9wbAkJCU1JCiBpb3BzcAkJCU1JCiBpcGFxYnVzCQkJaHBjYXJtCiBpcGFxbGNk
 >  CQkJaHBjYXJtCiBpcGFxcGNpYwkJaHBjYXJtCitpcGdwaHkJCQlNSQogaXBtaQkJCWFtZDY0CiBp
 >  cG1pCQkJaTM4NgogaXBtaQkJCXhlbgogaXB3CQkJTUkKIGlyZGFzaXIJCQlNSQkJQXR0cmlidXRl
 >  CgpJbmRleDogc3lzL2Rldi9taWkvZmlsZXMubWlpCj09PT09PT09PT09PT09PT09PT09PT09PT09
 >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkv
 >  ZmlsZXMubWlpCisrKyBzeXMvZGV2L21paS9maWxlcy5taWkKQEAgLTk3LDEwICs5NywxNCBAQAog
 >  CiBkZXZpY2UJaWtwaHk6IG1paV9waHkKIGF0dGFjaAlpa3BoeSBhdCBtaWkKIGZpbGUJZGV2L21p
 >  aS9pa3BoeS5jCQkJCWlrcGh5CiAKK2RldmljZQlpcGdwaHk6IG1paV9waHkKK2F0dGFjaAlpcGdw
 >  aHkgYXQgbWlpCitmaWxlCWRldi9taWkvaXBncGh5LmMJCQlpcGdwaHkKKwogZGV2aWNlCXNxcGh5
 >  OiBtaWlfcGh5CiBhdHRhY2gJc3FwaHkgYXQgbWlpCiBmaWxlCWRldi9taWkvc3FwaHkuYwkJCQlz
 >  cXBoeQogCiBkZXZpY2UJdHFwaHk6IG1paV9waHkKCkFEREVEICAgIHN5cy9kZXYvbWlpL2lwZ3Bo
 >  eS5jCkluZGV4OiBzeXMvZGV2L21paS9pcGdwaHkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
 >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvbWlp
 >  L2lwZ3BoeS5jCisrKyBzeXMvZGV2L21paS9pcGdwaHkuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoJ
 >  JE9wZW5CU0Q6IGlwZ3BoeS5jLHYgMS4xOSAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBFeHAgJAkq
 >  LworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24gPHlvbmdhcmlA
 >  RnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
 >  aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
 >  ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
 >  ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
 >  ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1v
 >  ZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
 >  IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
 >  ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
 >  Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
 >  dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
 >  aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
 >  QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
 >  IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
 >  RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
 >  VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
 >  VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
 >  RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
 >  IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
 >  VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
 >  T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
 >  TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
 >  KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
 >  QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
 >  VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
 >  CisgKi8KKworLyoKKyAqIERyaXZlciBmb3IgdGhlIElDIFBsdXMgSVAxMDAwQS9JUDEwMDEgMTAv
 >  MTAwLzEwMDAgUEhZLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxz
 >  eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVs
 >  Lmg+CisjaW5jbHVkZSA8c3lzL2RldmljZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp
 >  bmNsdWRlIDxzeXMvZXJybm8uaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5l
 >  dC9pZl9tZWRpYS5oPgorCisjaW5jbHVkZSA8ZGV2L21paS9taWkuaD4KKyNpbmNsdWRlIDxkZXYv
 >  bWlpL21paXZhci5oPgorI2luY2x1ZGUgPGRldi9taWkvbWlpZGV2cy5oPgorCisjaW5jbHVkZSA8
 >  ZGV2L21paS9pcGdwaHlyZWcuaD4KKworI2luY2x1ZGUgPGRldi9wY2kvaWZfc3RnZXJlZy5oPgor
 >  CitzdGF0aWMgaW50IGlwZ3BoeV9tYXRjaChkZXZpY2VfdCwgY2ZkYXRhX3QsIHZvaWQgKik7Citz
 >  dGF0aWMgdm9pZCBpcGdwaHlfYXR0YWNoKGRldmljZV90LCBkZXZpY2VfdCwgdm9pZCAqKTsKKwor
 >  Q0ZBVFRBQ0hfREVDTF9ORVcoaXBncGh5LCBzaXplb2Yoc3RydWN0IG1paV9zb2Z0YyksCisgICAg
 >  aXBncGh5X21hdGNoLCBpcGdwaHlfYXR0YWNoLCBtaWlfcGh5X2RldGFjaCwgbWlpX3BoeV9hY3Rp
 >  dmF0ZSk7CisKK3N0YXRpYyBpbnQJaXBncGh5X3NlcnZpY2Uoc3RydWN0IG1paV9zb2Z0YyAqLCBz
 >  dHJ1Y3QgbWlpX2RhdGEgKiwgaW50KTsKK3N0YXRpYyB2b2lkCWlwZ3BoeV9zdGF0dXMoc3RydWN0
 >  IG1paV9zb2Z0YyAqKTsKK3N0YXRpYyBpbnQJaXBncGh5X21paV9waHlfYXV0byhzdHJ1Y3QgbWlp
 >  X3NvZnRjICopOworLy9zdGF0aWMgdm9pZAlpcGdwaHlfbG9hZF9kc3Bjb2RlKHN0cnVjdCBtaWlf
 >  c29mdGMgKik7CitzdGF0aWMgdm9pZAlpcGdwaHlfcmVzZXQoc3RydWN0IG1paV9zb2Z0YyAqKTsK
 >  Kworc3RhdGljIGNvbnN0IHN0cnVjdCBtaWlfcGh5X2Z1bmNzIGlwZ3BoeV9mdW5jcyA9IHsKKwlp
 >  cGdwaHlfc2VydmljZSwgaXBncGh5X3N0YXR1cywgaXBncGh5X3Jlc2V0LAorfTsKKworc3RhdGlj
 >  IGNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyBpcGdwaHlzW10gPSB7CisJTUlJX1BIWV9ERVNDKElD
 >  UExVUywgSVAxMDAwQSksCisJTUlJX1BIWV9ERVNDKElDUExVUywgSVAxMDAxKSwKKwlNSUlfUEhZ
 >  X0VORCwKK307CisKK3N0YXRpYyBpbnQKK2lwZ3BoeV9tYXRjaChkZXZpY2VfdCBwYXJlbnQsIGNm
 >  ZGF0YV90IG1hdGNoLCB2b2lkICphdXgpCit7CisJc3RydWN0IG1paV9hdHRhY2hfYXJncyAqbWEg
 >  PSBhdXg7CisKKwlpZiAobWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cykgIT0gTlVMTCkgeworCQly
 >  ZXR1cm4gMTA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXBncGh5X2F0dGFj
 >  aChkZXZpY2VfdCBwYXJlbnQsIGRldmljZV90IHNlbGYsIHZvaWQgKmF1eCkKK3sKKwlzdHJ1Y3Qg
 >  bWlpX3NvZnRjICpzYyA9IGRldmljZV9wcml2YXRlKHNlbGYpOworCXN0cnVjdCBtaWlfYXR0YWNo
 >  X2FyZ3MgKm1hID0gYXV4OworCXN0cnVjdCBtaWlfZGF0YSAqbWlpID0gbWEtPm1paV9kYXRhOwor
 >  CWNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyAqbXBkOworCWNvbnN0IGNoYXIgKnNlcCA9ICIiOwor
 >  CisJbXBkID0gbWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cyk7CisJYXByaW50X25haXZlKCI6IE1l
 >  ZGlhIGludGVyZmFjZVxuIik7CisJYXByaW50X25vcm1hbCgiOiAlcywgcmV2LiAlZFxuIiwgbXBk
 >  LT5tcGRfbmFtZSwgTUlJX1JFVihtYS0+bWlpX2lkMikpOworCisJc2MtPm1paV9kZXYgPSBzZWxm
 >  OworCXNjLT5taWlfaW5zdCA9IG1paS0+bWlpX2luc3RhbmNlOworCXNjLT5taWlfcGh5ID0gbWEt
 >  Pm1paV9waHlubzsKKwlzYy0+bWlpX21wZF9vdWkgPSBNSUlfT1VJKG1hLT5taWlfaWQxLCBtYS0+
 >  bWlpX2lkMik7CisJc2MtPm1paV9tcGRfbW9kZWwgPSBNSUlfTU9ERUwobWEtPm1paV9pZDIpOwor
 >  CXNjLT5taWlfbXBkX3JldiA9IE1JSV9SRVYobWEtPm1paV9pZDIpOworCXNjLT5taWlfZnVuY3Mg
 >  PSAmaXBncGh5X2Z1bmNzOworCXNjLT5taWlfcGRhdGEgPSBtaWk7CisJc2MtPm1paV9mbGFncyA9
 >  IG1hLT5taWlfZmxhZ3M7CisKKwlzYy0+bWlpX2ZsYWdzIHw9IE1JSUZfTk9JU09MQVRFOworCXNj
 >  LT5taWlfYW5lZ3RpY2tzID0gTUlJX0FORUdUSUNLU19HSUdFOworCisJUEhZX1JFU0VUKHNjKTsK
 >  KworCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnNjLT5taWlfY2FwYWJpbGl0aWVzKTsKKwlzYy0+
 >  bWlpX2NhcGFiaWxpdGllcyAmPSBtYS0+bWlpX2NhcG1hc2s7CisJc2MtPm1paV9jYXBhYmlsaXRp
 >  ZXMgJj0gfkJNU1JfQU5FRzsKKwlpZiAoc2MtPm1paV9jYXBhYmlsaXRpZXMgJiBCTVNSX0VYVFNU
 >  QVQpCisJCVBIWV9SRUFEKHNjLCBNSUlfRVhUU1IsICZzYy0+bWlpX2V4dGNhcGFiaWxpdGllcyk7
 >  CisgCisJbWlpX3BoeV9hZGRfbWVkaWEoc2MpOworCQorI2RlZmluZQlBREQobSwgYykJaWZtZWRp
 >  YV9hZGQoJm1paS0+bWlpX21lZGlhLCAobSksIChjKSwgTlVMTCkKKyNkZWZpbmUJUFJJTlQobikJ
 >  YXByaW50X25vcm1hbCgiJXMlcyIsIHNlcCwgKG4pKTsgc2VwID0gIiwgIgorCQorCUFERChJRk1f
 >  TUFLRVdPUkQoSUZNX0VUSEVSLCBJRk1fQVVUTywgMCwgc2MtPm1paV9pbnN0KSwgTUlJX05NRURJ
 >  QSk7CisJc2VwID0iLCAiOworCVBSSU5UKCJhdXRvIik7CisKKwlhcHJpbnRfbm9ybWFsKCJcbiIp
 >  OworfQorCitzdGF0aWMgaW50CitpcGdwaHlfc2VydmljZShzdHJ1Y3QgbWlpX3NvZnRjICpzYywg
 >  c3RydWN0IG1paV9kYXRhICptaWksIGludCBjbWQpCit7CisJc3RydWN0IGlmbWVkaWFfZW50cnkg
 >  KmlmZSA9IG1paS0+bWlpX21lZGlhLmlmbV9jdXI7CisJdWludDE2X3QgZ2lnLCByZWcsIHNwZWVk
 >  OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1JSV9QT0xMU1RBVDoKKwkJLyoKKwkJICogSWYg
 >  d2UncmUgbm90IHBvbGxpbmcgb3VyIFBIWSBpbnN0YW5jZSwganVzdCByZXR1cm4uCisJCSAqLwor
 >  CQlpZiAoSUZNX0lOU1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5taWlfaW5zdCkKKwkJCXJldHVy
 >  biAwOworCQlicmVhazsKKworCWNhc2UgTUlJX01FRElBQ0hHOgorCQkvKgorCQkgKiBJZiB0aGUg
 >  bWVkaWEgaW5kaWNhdGVzIGEgZGlmZmVyZW50IFBIWSBpbnN0YW5jZSwKKwkJICogaXNvbGF0ZSBv
 >  dXJzZWx2ZXMuCisJCSAqLworCQlpZiAoSUZNX0lOU1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5t
 >  aWlfaW5zdCkgeworCQkJUEhZX1JFQUQoc2MsIE1JSV9CTUNSLCAmcmVnKTsKKwkJCVBIWV9XUklU
 >  RShzYywgTUlJX0JNQ1IsIHJlZyB8IEJNQ1JfSVNPKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJ
 >  LyoKKwkJICogSWYgdGhlIGludGVyZmFjZSBpcyBub3QgdXAsIGRvbid0IGRvIGFueXRoaW5nLgor
 >  CQkgKi8KKwkJaWYgKChtaWktPm1paV9pZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQkJ
 >  YnJlYWs7CisKKwkJUEhZX1JFU0VUKHNjKTsKKworCQlzd2l0Y2ggKElGTV9TVUJUWVBFKGlmZS0+
 >  aWZtX21lZGlhKSkgeworCQljYXNlIElGTV9BVVRPOgorCQkJKHZvaWQpaXBncGh5X21paV9waHlf
 >  YXV0byhzYyk7CisJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKworCQljYXNlIElGTV8xMDAwX1Q6
 >  CisJCQkvKgorCQkJICogWFhYCisJCQkgKiBNYW51YWwgMTAwMGJhc2VUIHNldHRpbmcgZG9lc24n
 >  dCBzZWVtIHRvIHdvcmsuCisJCQkgKi8KKwkJCXNwZWVkID0gQk1DUl9TMTAwMDsKKwkJCWJyZWFr
 >  OworCisJCWNhc2UgSUZNXzEwMF9UWDoKKwkJCXNwZWVkID0gQk1DUl9TMTAwOworCQkJYnJlYWs7
 >  CisKKwkJY2FzZSBJRk1fMTBfVDoKKwkJCXNwZWVkID0gQk1DUl9TMTA7CisJCQlicmVhazsKKwor
 >  CQlkZWZhdWx0OgorCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCisJCWlmICgoKGlmZS0+aWZtX21l
 >  ZGlhICYgSUZNX0dNQVNLKSAmIElGTV9GRFgpICE9IDApIHsKKwkJCXNwZWVkIHw9IEJNQ1JfRkRY
 >  OworCQkJZ2lnID0gR1RDUl9BRFZfMTAwMFRGRFg7CisJCX0gZWxzZQorCQkJZ2lnID0gR1RDUl9B
 >  RFZfMTAwMFRIRFg7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwgMCk7CisJCVBIWV9X
 >  UklURShzYywgTUlJX0JNQ1IsIHNwZWVkKTsKKworCQlpZiAoSUZNX1NVQlRZUEUoaWZlLT5pZm1f
 >  bWVkaWEpICE9IElGTV8xMDAwX1QpCisJCQlicmVhazsKKworCQlQSFlfV1JJVEUoc2MsIE1JSV8x
 >  MDBUMkNSLCBnaWcpOworCQlQSFlfV1JJVEUoc2MsIE1JSV9CTUNSLCBzcGVlZCk7CisKKwkJaWYg
 >  KG1paS0+bWlpX21lZGlhLmlmbV9tZWRpYSAmIElGTV9FVEhfTUFTVEVSKQorCQkJZ2lnIHw9IEdU
 >  Q1JfTUFOX01TIHwgR1RDUl9BRFZfTVM7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwg
 >  Z2lnKTsKKworZG9uZToKKwkJYnJlYWs7CisKKwljYXNlIE1JSV9USUNLOgorCQkvKgorCQkgKiBJ
 >  ZiB3ZSdyZSBub3QgY3VycmVudGx5IHNlbGVjdGVkLCBqdXN0IHJldHVybi4KKwkJICovCisJCWlm
 >  IChJRk1fSU5TVChpZmUtPmlmbV9tZWRpYSkgIT0gc2MtPm1paV9pbnN0KQorCQkJcmV0dXJuIDA7
 >  CisKKwkJLyoKKwkJICogSXMgdGhlIGludGVyZmFjZSBldmVuIHVwPworCQkgKi8KKwkJaWYgKCht
 >  aWktPm1paV9pZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJ
 >  LyoKKwkJICogT25seSB1c2VkIGZvciBhdXRvbmVnb3RpYXRpb24uCisJCSAqLworCQlpZiAoSUZN
 >  X1NVQlRZUEUoaWZlLT5pZm1fbWVkaWEpICE9IElGTV9BVVRPKSB7CisJCQlzYy0+bWlpX3RpY2tz
 >  ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGhh
 >  dmUgbGluay4gIElmIHdlIGRvLCB3ZSBkb24ndAorCQkgKiBuZWVkIHRvIHJlc3RhcnQgdGhlIGF1
 >  dG9uZWdvdGlhdGlvbiBwcm9jZXNzLiAgUmVhZAorCQkgKiB0aGUgQk1TUiB0d2ljZSBpbiBjYXNl
 >  IGl0J3MgbGF0Y2hlZC4KKwkJICovCisJCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnJlZyk7CisJ
 >  CVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnJlZyk7CisJCWlmIChyZWcgJiBCTVNSX0xJTkspIHsK
 >  KwkJCS8qCisJCQkgKiBSZXNldCBhdXRvbmVnb3RpYXRpb24gdGltZXIgdG8gMCBpbiBjYXNlIHRo
 >  ZSBsaW5rCisJCQkgKiBnb2VzIGRvd24gaW4gdGhlIG5leHQgdGljay4KKwkJCSAqLworCQkJc2Mt
 >  Pm1paV90aWNrcyA9IDA7CisJCQkvKiBTZWUgYWJvdmUuICovCisJCQlicmVhazsKKwkJfQorCisJ
 >  CS8qIEFubm91bmNlIGxpbmsgbG9zcyByaWdodCBhZnRlciBpdCBoYXBwZW5zICovCisJCWlmIChz
 >  Yy0+bWlpX3RpY2tzKysgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE9ubHkgcmV0cnkg
 >  YXV0b25lZ290aWF0aW9uIGV2ZXJ5IG1paV9hbmVndGlja3Mgc2Vjb25kcy4KKwkJICovCisJCWlm
 >  IChzYy0+bWlpX3RpY2tzIDw9IHNjLT5taWlfYW5lZ3RpY2tzKQorCQkJYnJlYWs7CisKKwkJc2Mt
 >  Pm1paV90aWNrcyA9IDA7CisJCWlwZ3BoeV9taWlfcGh5X2F1dG8oc2MpOworCQlicmVhazsKKwl9
 >  CisKKwkvKiBVcGRhdGUgdGhlIG1lZGlhIHN0YXR1cy4gKi8KKwlpcGdwaHlfc3RhdHVzKHNjKTsK
 >  KworCS8qIENhbGxiYWNrIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiAqLworCW1paV9waHlfdXBkYXRl
 >  KHNjLCBjbWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXBncGh5X3N0YXR1cyhz
 >  dHJ1Y3QgbWlpX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paSA9IHNjLT5taWlf
 >  cGRhdGE7CisJc3RydWN0IGlmbWVkaWFfZW50cnkgKmlmZSA9IG1paS0+bWlpX21lZGlhLmlmbV9j
 >  dXI7CisJdWludDE2X3QgYm1zciwgYm1jciwgc3RhdCwgZ3RzcjsKKworCW1paS0+bWlpX21lZGlh
 >  X3N0YXR1cyA9IElGTV9BVkFMSUQ7CisJbWlpLT5taWlfbWVkaWFfYWN0aXZlID0gSUZNX0VUSEVS
 >  OworCisJUEhZX1JFQUQoc2MsIE1JSV9CTVNSLCAmYm1zcik7CisJUEhZX1JFQUQoc2MsIE1JSV9C
 >  TVNSLCAmYm1zcik7CisJaWYgKGJtc3IgJiBCTVNSX0xJTkspIAorCQltaWktPm1paV9tZWRpYV9z
 >  dGF0dXMgfD0gSUZNX0FDVElWRTsKKworCVBIWV9SRUFEKHNjLCBNSUlfQk1DUiwgJmJtY3IpOwor
 >  CWlmIChibWNyICYgQk1DUl9MT09QKQorCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0xP
 >  T1A7CisKKwlpZiAoYm1jciAmIEJNQ1JfQVVUT0VOKSB7CisJCWlmICgoYm1zciAmIEJNU1JfQUNP
 >  TVApID09IDApIHsKKwkJCS8qIEVyZywgc3RpbGwgdHJ5aW5nLCBJIGd1ZXNzLi4uICovCisJCQlt
 >  aWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7CisJCQlyZXR1cm47CisJCX0KKworCQlp
 >  ZiAoc2MtPm1paV9tcGRfbW9kZWwgPT0gTUlJX01PREVMX0lDUExVU19JUDEwMDEpIHsKKwkJCVBI
 >  WV9SRUFEKHNjLCBJUEdQSFlfTFNSLCAmc3RhdCk7CisJCQlzd2l0Y2ggKHN0YXQgJiBJUEdQSFlf
 >  TFNSX1NQRUVEX01BU0spIHsKKwkJCWNhc2UgSVBHUEhZX0xTUl9TUEVFRF8xMDoKKwkJCQltaWkt
 >  Pm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNXzEwX1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIElQR1BI
 >  WV9MU1JfU1BFRURfMTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RY
 >  OworCQkJCWJyZWFrOworCQkJY2FzZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDA6CisJCQkJbWlpLT5t
 >  aWlfbWVkaWFfYWN0aXZlIHw9IElGTV8xMDAwX1Q7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgkJ
 >  CQkKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7CisJCQkJcmV0dXJuOwor
 >  CQkJfQorCisJCQlpZiAoc3RhdCAmIElQR1BIWV9MU1JfRlVMTF9EVVBMRVgpCisJCQkJbWlpLT5t
 >  aWlfbWVkaWFfYWN0aXZlIHw9IElGTV9GRFg7CisJCQllbHNlCisJCQkJbWlpLT5taWlfbWVkaWFf
 >  YWN0aXZlIHw9IElGTV9IRFg7CisJCX0gZWxzZSB7CisJCQlQSFlfUkVBRChzYywgU1RHRV9QaHlD
 >  dHJsLCAmc3RhdCk7CisJCQlzd2l0Y2ggKFBDX0xpbmtTcGVlZChzdGF0KSkgeworCQkJY2FzZSBQ
 >  Q19MaW5rU3BlZWRfRG93bjoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7
 >  CisJCQkJcmV0dXJuOworCQkJY2FzZSBQQ19MaW5rU3BlZWRfMTA6CisJCQkJbWlpLT5taWlfbWVk
 >  aWFfYWN0aXZlIHw9IElGTV8xMF9UOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ19MaW5rU3BlZWRf
 >  MTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RYOworCQkJCWJyZWFr
 >  OworCQkJY2FzZSBQQ19MaW5rU3BlZWRfMTAwMDoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUg
 >  fD0gSUZNXzEwMDBfVDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbWlpLT5taWlfbWVk
 >  aWFfYWN0aXZlIHw9IElGTV9OT05FOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKHN0YXQg
 >  JiBQQ19QaHlEdXBsZXhTdGF0dXMpCisJCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9G
 >  RFg7CisJCQllbHNlCisJCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9IRFg7CisJCX0K
 >  KworCQlpZiAobWlpLT5taWlfbWVkaWFfYWN0aXZlICYgSUZNX0ZEWCkKKwkJCW1paS0+bWlpX21l
 >  ZGlhX2FjdGl2ZSB8PSBtaWlfcGh5X2Zsb3dzdGF0dXMoc2MpOworCisJCWlmIChJRk1fU1VCVFlQ
 >  RShtaWktPm1paV9tZWRpYV9hY3RpdmUpID09IElGTV8xMDAwX1QpIHsKKwkJCVBIWV9SRUFEKHNj
 >  LCBNSUlfMTAwVDJTUiwgJmd0c3IpOworCQkJaWYgKGd0c3IgJiBHVFNSX01TX1JFUykKKwkJCQlt
 >  aWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0VUSF9NQVNURVI7CisJCX0KKwl9IGVsc2UKKwkJ
 >  bWlpLT5taWlfbWVkaWFfYWN0aXZlID0gaWZlLT5pZm1fbWVkaWE7Cit9CisKK3N0YXRpYyBpbnQK
 >  K2lwZ3BoeV9taWlfcGh5X2F1dG8oc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJdWludDE2X3Qg
 >  cmVnID0gMDsKKworCWlmIChzYy0+bWlpX21wZF9tb2RlbCA9PSBNSUlfTU9ERUxfSUNQTFVTX0lQ
 >  MTAwMSkgeworCQlQSFlfUkVBRChzYywgTUlJX0FOQVIsICZyZWcpOworCQlyZWcgJj0gfihBTkFS
 >  X1BBVVNFX1NZTSB8IEFOQVJfUEFVU0VfQVNZTSk7CisJCXJlZyB8PSBBTkFSX05QOworCX0KKwor
 >  CXJlZyB8PSBBTkFSXzEwIHwgQU5BUl8xMF9GRCB8IEFOQVJfVFggfCBBTkFSX1RYX0ZEOworCisJ
 >  aWYgKHNjLT5taWlfZmxhZ3MgJiBNSUlGX0RPUEFVU0UpCisJCXJlZyB8PSBBTkFSX1BBVVNFX1NZ
 >  TSB8IEFOQVJfUEFVU0VfQVNZTTsKKworCVBIWV9XUklURShzYywgTUlJX0FOQVIsIHJlZyB8IEFO
 >  QVJfQ1NNQSk7CisKKwlyZWcgPSBHVENSX0FEVl8xMDAwVEZEWCB8IEdUQ1JfQURWXzEwMDBUSERY
 >  OworCWlmIChzYy0+bWlpX21wZF9tb2RlbCAhPSBNSUlfTU9ERUxfSUNQTFVTX0lQMTAwMSkKKwkJ
 >  cmVnIHw9IEdUQ1JfQURWX01TOworCVBIWV9XUklURShzYywgTUlJXzEwMFQyQ1IsIHJlZyk7CisK
 >  KwlQSFlfV1JJVEUoc2MsIE1JSV9CTUNSLCBCTUNSX0ZEWCB8IEJNQ1JfQVVUT0VOIHwgQk1DUl9T
 >  VEFSVE5FRyk7CisKKwlyZXR1cm4gRUpVU1RSRVRVUk47Cit9CisKKy8qc3RhdGljIHZvaWQKK2lw
 >  Z3BoeV9sb2FkX2RzcGNvZGUoc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJUEhZX1dSSVRFKHNj
 >  LCAzMSwgMHgwMDAxKTsKKwlQSFlfV1JJVEUoc2MsIDI3LCAweDAxZTApOworCVBIWV9XUklURShz
 >  YywgMzEsIDB4MDAwMik7CisJUEhZX1dSSVRFKHNjLCAyNywgMHhlYjhlKTsKKwlQSFlfV1JJVEUo
 >  c2MsIDMxLCAweDAwMDApOworCVBIWV9XUklURShzYywgMzAsIDB4MDA1ZSk7CisJUEhZX1dSSVRF
 >  KHNjLCA5LCAweDA3MDApOworCisJREVMQVkoNTApOworfSovCisKK3N0YXRpYyB2b2lkCitpcGdw
 >  aHlfcmVzZXQoc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJLy9zdHJ1Y3QgaWZuZXQgKmlmcCA9
 >  IHNjLT5taWlfcGRhdGEtPm1paV9pZnA7CisJdWludDE2X3QgcmVnOworCisJbWlpX3BoeV9yZXNl
 >  dChzYyk7CisKKwkvKiBjbGVhciBhdXRvbmVnL2Z1bGwtZHVwbGV4IGFzIHdlIGRvbid0IHdhbnQg
 >  aXQgYWZ0ZXIgcmVzZXQgKi8KKwlQSFlfUkVBRChzYywgTUlJX0JNQ1IsICZyZWcpOworCXJlZyAm
 >  PSB+KEJNQ1JfQVVUT0VOIHwgQk1DUl9GRFgpOworCVBIWV9XUklURShzYywgTUlJX0JNQ1IsIHJl
 >  Zyk7CisKKwkvKmlmIChzYy0+bWlpX21wZF9tb2RlbCA9PSBNSUlfTU9ERUxfSUNQTFVTX0lQMTAw
 >  MEEgJiYKKwkgICAgc3RyY21wKGlmcC0+aWZfeG5hbWUsICJzdGdlIikgPT0gMCkgeworCQlzdHJ1
 >  Y3Qgc3RnZV9zb2Z0YyAqc3RnZV9zYyA9IGlmcC0+aWZfc29mdGM7CisJCWlmIChzdGdlX3NjLT5z
 >  Y19yZXYgPj0gMHg0MCAmJiBzdGdlX3NjLT5zY19yZXYgPD0gMHg0ZSkKKwkJCWlwZ3BoeV9sb2Fk
 >  X2RzcGNvZGUoc2MpOworCX0qLworfQoKQURERUQgICAgc3lzL2Rldi9taWkvaXBncGh5cmVnLmgK
 >  SW5kZXg6IHN5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
 >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkv
 >  aXBncGh5cmVnLmgKKysrIHN5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oCkBAIC0wLDAgKzEsODMgQEAK
 >  Ky8qCSRPcGVuQlNEOiBpcGdwaHlyZWcuaCx2IDEuMyAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBF
 >  eHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24KKyAq
 >  IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgCisgKiBSZWRpc3RyaWJ1dGlv
 >  biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
 >  IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
 >  Y29uZGl0aW9ucworICogYXJlIG1ldDogICAgICAgICAgICAgCisgKiAxLiBSZWRpc3RyaWJ1dGlv
 >  bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
 >  bm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxv
 >  d2luZworICogICAgZGlzY2xhaW1lci4gIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
 >  eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
 >  dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
 >  aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
 >  aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
 >  WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
 >  U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
 >  VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
 >  IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
 >  VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
 >  RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
 >  RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
 >  Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
 >  LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
 >  IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
 >  Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
 >  UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
 >  UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
 >  SCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0RFVl9NSUlfSVBHUEhZUkVHX0hfCisjZGVm
 >  aW5lIF9ERVZfTUlJX0lQR1BIWVJFR19IXworCisvKgorICogUmVnaXN0ZXJzIGZvciB0aGUgSUMg
 >  UGx1cyBJUEdBIGludGVybmFsIFBIWS4KKyAqLworCisvKiBQSFkgc3BlY2lmaWMgY29udHJvbCAm
 >  IHN0YXR1cyByZWdpc3Rlci4gSVAxMDAxIG9ubHkuICovCisjZGVmaW5lIElQR1BIWV9TQ1NSCQkJ
 >  MHgxMAorI2RlZmluZSBJUEdQSFlfU0NTUl9SWFBIQVNFX1NFTAkweDAwMDEKKyNkZWZpbmUgSVBH
 >  UEhZX1NDU1JfVFhQSEFTRV9TRUwJMHgwMDAyCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JFUEVBVE9S
 >  X01PREUJMHgwMDA0CisjZGVmaW5lIElQR1BIWV9TQ1NSX1JFU0VSVkVEMV9ERUYJMHgwMDA4Cisj
 >  ZGVmaW5lIElQR1BIWV9TQ1NSX1JYQ0xLX0RSVl9NQVNLCTB4MDA2MAorI2RlZmluZSBJUEdQSFlf
 >  U0NTUl9SWENMS19EUlZfREVGCTB4MDA0MAorI2RlZmluZSBJUEdQSFlfU0NTUl9SWERfRFJWX01B
 >  U0sJMHgwMTgwCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JYRF9EUlZfREVGCTB4MDEwMAorI2RlZmlu
 >  ZSBJUEdQSFlfU0NTUl9KQUJCRVJfRU5CCTB4MDIwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9IRUFS
 >  VF9CRUFUX0VOQgkweDA0MDAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfRE9XTlNISUZUX0VOQgkweDA4
 >  MDAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfUkVTRVJWRUQyX0RFRgkweDEwMDAKKyNkZWZpbmUgSVBH
 >  UEhZX1NDU1JfTEVEX0RSVl80TUEJMHgwMDAwCisjZGVmaW5lIElQR1BIWV9TQ1NSX0xFRF9EUlZf
 >  OE1BCTB4MjAwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9MRURfTU9ERV9NQVNLCTB4QzAwMAorI2Rl
 >  ZmluZSBJUEdQSFlfU0NTUl9MRURfTU9ERV9ERUYJMHgwMDAwCisKKy8qIFBIWSBsaW5rIHN0YXR1
 >  cyByZWdpc3Rlci4gSVAxMDAxIG9ubHkuICovCisjZGVmaW5lIElQR1BIWV9MU1IJCQkweDExCisj
 >  ZGVmaW5lIElQR1BIWV9MU1JfSkFCQkVSX0RFVAkweDAyMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9B
 >  UFNfU0xFRVAJCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfTFNSX01ESVgJCTB4MDgwMAorI2RlZmlu
 >  ZSBJUEdQSFlfTFNSX0ZVTExfRFVQTEVYCTB4MTAwMAorI2RlZmluZSBJUEdQSFlfTFNSX1NQRUVE
 >  XzEwCQkweDAwMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9TUEVFRF8xMDAJCTB4MjAwMAorI2RlZmlu
 >  ZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDAJMHg0MDAwCisjZGVmaW5lIElQR1BIWV9MU1JfU1BFRURf
 >  TUFTSwkweDYwMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9MSU5LVVAJCTB4ODAwMAorCisvKiBQSFkg
 >  c3BlY2lmaWMgY29udHJvbCByZWdpc3RlciAyLiBJUDEwMDEgb25seS4gKi8KKyNkZWZpbmUgSVBH
 >  UEhZX1NDUgorI2RlZmluZSBJUEdQSFlfU0NSX1NFV19SQVRFX01BU0sJMHgwMDAzCisjZGVmaW5l
 >  IElQR1BIWV9TQ1JfU0VXX1JBVEVfREVGCTB4MDAwMworI2RlZmluZSBJUEdQSFlfU0NSX0FVVE9f
 >  WE9WRVIJMHgwMDA0CisjZGVmaW5lIElQR1BIWV9TQ1JfU1BFRURfMTBfMTAwX0VOQgkweDAwNDAK
 >  KyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVOQ1lfMgkweDAwMDAKKyNkZWZpbmUgSVBHUEhZ
 >  X1NDUl9GSUZPX0xBVEVOQ1lfMwkweDAwODAKKyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVO
 >  Q1lfNAkweDAxMDAKKyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVOQ1lfNQkweDAxODAKKyNk
 >  ZWZpbmUgSVBHUEhZX1NDUl9NRElYX0VOQgkJMHgwMjAwCisjZGVmaW5lIElQR1BIWV9TQ1JfUkVT
 >  RVJWRURfREVGCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfU0NSX0FQU19PTgkJMHgwODAwCisKKyNl
 >  bmRpZiAvKiBfREVWX01JSV9JUEdQSFlSRUdfSF8gKi8KCkluZGV4OiBzeXMvZGV2L21paS9taWlk
 >  ZXZzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 >  PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkvbWlpZGV2cworKysgc3lzL2Rldi9taWkvbWlp
 >  ZGV2cwpAQCAtNzQsMTEgKzc0LDExIEBACiBvdWkgTUFSVkVMTAkJCTB4MDA1MDQzCU1hcnZlbGwg
 >  U2VtaWNvbmR1Y3Rvcgogb3VpIFFVQUxTRU1JCQkJMHgwMDYwNTEJUXVhbGl0eSBTZW1pY29uZHVj
 >  dG9yCiBvdWkgQU1MT0dJQwkJCTB4MDA2MDUxCUFtbG9naWMKIG91aSBEQVZJQ09NCQkJMHgwMDYw
 >  NmUJRGF2aWNvbSBTZW1pY29uZHVjdG9yCiBvdWkgU01TQwkJCTB4MDA4MDBmCVNNU0MKLW91aSBJ
 >  Q1BMVVMJCQkweDAwOTBjMwlJQyBQbHVzIENvcnAuCitvdWkgSUNQTFVTCQkJMHgwMDA5YzMJSUMg
 >  UGx1cyBDb3JwLgogb3VpIFNFRVEJCQkweDAwYTA3ZAlTZWVxCiBvdWkgSUNTCQkJCTB4MDBhMGJl
 >  CUludGVncmF0ZWQgQ2lyY3VpdCBTeXN0ZW1zCiBvdWkgSU5URUwJCQkweDAwYWEwMAlJbnRlbAog
 >  b3VpIFRTQwkJCQkweDAwYzAzOQlUREsgU2VtaWNvbmR1Y3Rvcgogb3VpIE1ZU09OCQkJMHgwMGMw
 >  YjQJTXlzb24gVGVjaG5vbG9neQoK
 >  --000000000000efb2d20591fccc25--
 >

From: Andrius V <vezhlys@gmail.com>
To: msaitoh@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, 
	tharada@oucrc.org, gnats-bugs@netbsd.org
Cc: 
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Sat, 28 Sep 2019 23:29:02 +0300

 --00000000000081a60e0593a2dbc1
 Content-Type: text/plain; charset="UTF-8"

 Hi,

 Attaching my final (I guess) patch which addresses most issues from
 the initial one (auto doesn't need special code, stge part uncommented
 by moving struct to stgereg header file, i386/amd64 kernel configs
 updated) and is based on more recent current branch (OUI was renamed
 and updated in current already), plus some updates with man pages to
 be build properly. I believe it should be in parity with OpenBSD
 driver now but I have only one board for testing. Temporarily created
 a branch in github as well:
 https://github.com/vezhlys/netbsd-src/tree/ipgphy. The problem that
 setting 1000BaseTX specifically won't work is present, but it is the
 same in Open/FreeBSD as well (autonegiotation needs to be used to get
 1GBit speed). Hope, the patch should be relatively easy to adjust and
 apply, if it's OK and there's a plan to do it.

 Regards,
 Andrius V

 On Tue, Sep 24, 2019 at 1:55 AM Andrius V <vezhlys@gmail.com> wrote:
 >
 > The following reply was made to PR kern/42314; it has been noted by GNATS.
 >
 > From: Andrius V <vezhlys@gmail.com>
 > To: kern-bug-people@netbsd.org, netbsd-bugs@netbsd.org, tharada@oucrc.org,
 >         msaitoh@netbsd.org, gnats-bugs@netbsd.org, gnats-admin@netbsd.org
 > Cc:
 > Subject: Re: kern/42314: IC Plus IP100x PHY support
 > Date: Tue, 24 Sep 2019 01:50:49 +0300
 >
 >  It seems like to avoid attaching auto manually, only the removal of
 >  sc->mii_capabilities &= ~BMSR_ANEG; line is needed in ipgphy_match (I
 >  copied it from rgephy but this code was specific to that phy only):
 >
 >  static void
 >  ipgphy_attach(device_t parent, device_t self, void *aux)
 >  {
 >      struct mii_softc *sc = device_private(self);
 >      struct mii_attach_args *ma = aux;
 >      struct mii_data *mii = ma->mii_data;
 >      const struct mii_phydesc *mpd;
 >
 >      mpd = mii_phy_match(ma, ipgphys);
 >      aprint_naive(": Media interface\n");
 >      aprint_normal(": %s, rev. %d\n", mpd->mpd_name, MII_REV(ma->mii_id2));
 >
 >      sc->mii_dev = self;
 >      sc->mii_inst = mii->mii_instance;
 >      sc->mii_phy = ma->mii_phyno;
 >      sc->mii_mpd_oui = MII_OUI(ma->mii_id1, ma->mii_id2);
 >      sc->mii_mpd_model = MII_MODEL(ma->mii_id2);
 >      sc->mii_mpd_rev = MII_REV(ma->mii_id2);
 >      sc->mii_funcs = &ipgphy_funcs;
 >      sc->mii_pdata = mii;
 >      sc->mii_flags = ma->mii_flags;
 >
 >      sc->mii_flags |= MIIF_NOISOLATE;
 >      sc->mii_anegticks = MII_ANEGTICKS_GIGE;
 >
 >      PHY_RESET(sc);
 >
 >      PHY_READ(sc, MII_BMSR, &sc->mii_capabilities);
 >      sc->mii_capabilities &= ma->mii_capmask;
 >
 >      if (sc->mii_capabilities & BMSR_EXTSTAT)
 >          PHY_READ(sc, MII_EXTSR, &sc->mii_extcapabilities);
 >
 >      mii_phy_add_media(sc);
 >      aprint_normal("\n");
 >
 >  }
 >
 >  On Sun, Sep 8, 2019 at 12:00 AM Andrius V <vezhlys@gmail.com> wrote:
 >  >
 >  > The following reply was made to PR kern/42314; it has been noted by GNATS.
 >  >
 >  > From: Andrius V <vezhlys@gmail.com>
 >  > To: gnats-bugs@netbsd.org
 >  > Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
 >  > Subject: Re: kern/42314: IC Plus IP100x PHY support
 >  > Date: Sat, 7 Sep 2019 23:57:04 +0300
 >  >
 >  >  --000000000000efb2d20591fccc25
 >  >  Content-Type: text/plain; charset="UTF-8"
 >  >
 >  >  Hi,
 >  >
 >  >  Since, I have VIA EPIA-M900 motherboard with VT6130 Ethernet
 >  >  controller and IP1001 phy, I made an effort to port OpenBSD driver,
 >  >  and I prepared initial but not complete patch for PHY support (which
 >  >  is almost a copy of OpenBSD driver with mainly small changes to cater
 >  >  NetBSD specifics). Issues described below (first two I believe are
 >  >  blocking from committing it to NetBSD yet and I need a help to resolve
 >  >  if possible):
 >  >
 >  >  * For some reason direct port fails to work with autonegotation
 >  >  (if_media match fails, there is no auto option available). As a
 >  >  workaround I copied the code below from rgephy.c to add it manually
 >  >  and it worked for me:
 >  >
 >  >  #define    ADD(m, c)    ifmedia_add(&mii->mii_media, (m), (c), NULL)
 >  >  #define    PRINT(n)    aprint_normal("%s%s", sep, (n)); sep = ", "
 >  >
 >  >      ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst), MII_NMEDIA);
 >  >      sep =", ";
 >  >      PRINT("auto");
 >  >
 >  >  I believe it is a hack in this case, since OpenBSD seemingly doesn't
 >  >  need it but for some reason direct port looses auto option in NetBSD.
 >  >  Maybe somebody have idea, why it happened?
 >  >  * Commented out the code with stge revision check in ipgphy_reset
 >  >  (which calls also commented ipgphy_load_dspcode). I guess to implement
 >  >  that I would need to change if_stge driver to move struct into a
 >  >  header file or find another way to get sc_rev. Can someone help me out
 >  >  with that?
 >  >  * I change config for amd64 GENERIC only. I quite certain, it can be
 >  >  added at least to i386, though OpenBSD defined it in most ports.
 >  >  * Same as OpenBSD, manual setting to 1000baseT will fail,
 >  >  autonegotation must be used to get Gigabit Ethernet speed.
 >  >  * OUI in NetBSD is recognized as 0x0009c3, not as 0x0090c3 like it is
 >  >  defined in Open/FreeBSD. Changed it in miidevs.
 >  >
 >  >  Attached the patch below (regen is still needed for miidevs).
 >  >
 >  >  With provided changes, vge successfully auto negotiated for 1Gbit
 >  >  speed (which wasn't the case with general phy):
 >  >  vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >  >          capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >  >          capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >  >          enabled=0
 >  >          ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >  >          ec_enabled=2<VLAN_HWTAGGING>
 >  >          address: xx:xx:xx:xx:xx:xx
 >  >          media: Ethernet autoselect (1000baseT
 >  >  full-duplex,flowcontrol,master,rxpause,txpause)
 >  >          status: active
 >  >          inet 192.168.1.18/24 broadcast 192.168.1.255 flags 0x0
 >  >          inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x
 >  >
 >  >  from dmesg:
 >  >  ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 025
 >  >  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
 >  >
 >  >  P.S. Not sure if original submitter did provide a patch as well but
 >  >  his link is down currently.
 >  >
 >  >  Regards,
 >  >  Andrius V
 >  >
 >  >  On Sat, Nov 14, 2009 at 12:00 AM <tharada@oucrc.org> wrote:
 >  >  >
 >  >  > >Number:         42314
 >  >  > >Category:       kern
 >  >  > >Synopsis:       IC Plus IP100x PHY support
 >  >  > >Confidential:   no
 >  >  > >Severity:       non-critical
 >  >  > >Priority:       low
 >  >  > >Responsible:    kern-bug-people
 >  >  > >State:          open
 >  >  > >Class:          sw-bug
 >  >  > >Submitter-Id:   net
 >  >  > >Arrival-Date:   Fri Nov 13 22:00:00 +0000 2009
 >  >  > >Originator:     Tomokazu HARADA
 >  >  > >Release:        5.99.22
 >  >  > >Organization:
 >  >  > >Environment:
 >  >  > NetBSD xjazz 5.99.22 NetBSD 5.99.22 (GENERIC) #1: Sat Nov 14 06:05:25 JST 2009  root@xjazz:/usr/obj/sys/arch/i386/compile/GENERIC i386
 >  >  >
 >  >  > >Description:
 >  >  > IC Plus IP1000A/IP1001 10/100/1000 PHY support
 >  >  > (from OpenBSD ipgphy)
 >  >  >
 >  >  > vge0 at pci2 dev 0 function 0: VIA VT612X Gigabit Ethernet (rev. 0x82)
 >  >  > vge0: interrupting at ioapic0 pin 16
 >  >  > vge0: Ethernet address: 00:02:2a:e6:d7:ad
 >  >  > ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 >  >  > ipgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
 >  >  >
 >  >  > This is a VIA VT6130 PCIe GbE, the phy is integrated on.
 >  >  >
 >  >  > >How-To-Repeat:
 >  >  > N/A
 >  >  > >Fix:
 >  >  > http://tharada.oucrc.org/ipgphy/
 >  >  >
 >  >
 >  >  --000000000000efb2d20591fccc25
 >  >  Content-Type: text/x-patch; charset="US-ASCII"; name="test.patch"
 >  >  Content-Disposition: attachment; filename="test.patch"
 >  >  Content-Transfer-Encoding: base64
 >  >  Content-ID: <f_k09zxctb0>
 >  >  X-Attachment-Id: f_k09zxctb0
 >  >
 >  >  QURERUQgICAgc2hhcmUvbWFuL21hbjQvaXBncGh5LjQKSW5kZXg6IHNoYXJlL21hbi9tYW40L2lw
 >  >  Z3BoeS40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 >  >  PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWFuL21hbjQvaXBncGh5LjQKKysrIHNoYXJlL21h
 >  >  bi9tYW40L2lwZ3BoeS40CkBAIC0wLDAgKzEsMzggQEAKKy5cIgkkT3BlbkJTRDogaXBncGh5LjQs
 >  >  diAxLjUgMjAwOS8wOC8wOCAxNzoxMjo0MCBuYWRkeSBFeHAgJAorLlwiCisuXCIJJE5ldEJTRDog
 >  >  aXBncGh5LjQkCisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDYgQnJhZCBTbWl0aCA8YnJhZEBv
 >  >  cGVuYnNkLm9yZz4KKy5cIgorLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
 >  >  ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLlwiIHB1cnBvc2Ugd2l0aCBvciB3
 >  >  aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKy5c
 >  >  IiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh
 >  >  bGwgY29waWVzLgorLlwiCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5E
 >  >  IFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisuXCIgV0lUSCBSRUdBUkQgVE8g
 >  >  VEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorLlwiIE1F
 >  >  UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
 >  >  RSBMSUFCTEUgRk9SCisuXCIgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNF
 >  >  UVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworLlwiIFdIQVRTT0VWRVIgUkVTVUxUSU5H
 >  >  IEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorLlwiIEFD
 >  >  VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
 >  >  SVNJTkcgT1VUIE9GCisuXCIgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S
 >  >  TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKy5cIgorLkRkICRNZG9jZGF0ZTogQXVndXN0IDggMjAw
 >  >  OSAkCisuRHQgSVBHUEhZIDQKKy5PcworLlNoIE5BTUUKKy5ObSBpcGdwaHkKKy5OZCBJQyBQbHVz
 >  >  IElQMTAwMEEvSVAxMDAxIDEwLzEwMC9HaWdhYml0IEV0aGVybmV0IFBIWQorLlNoIFNZTk9QU0lT
 >  >  CisuQ2QgImlwZ3BoeSogYXQgbWlpPyIKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0KK2RyaXZl
 >  >  ciBzdXBwb3J0cyB0aGUgSUMgUGx1cyBJUDEwMDBBL0lQMTAwMSAxMC8xMDAvR2lnYWJpdCBFdGhl
 >  >  cm5ldCBQSFkKK2ludGVyZmFjZS4KKy5TaCBTRUUgQUxTTworLlhyIGlmbWVkaWEgNCAsCisuWHIg
 >  >  aW50cm8gNCAsCisuWHIgbWlpIDQgLAorLlhyIHN0Z2UgNCwKKy5YciB2Z2UgNCwKKy5YciBpZmNv
 >  >  bmZpZyA4CgpJbmRleDogc3lzL2FyY2gvYW1kNjQvY29uZi9HRU5FUklDCj09PT09PT09PT09PT09
 >  >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
 >  >  c3lzL2FyY2gvYW1kNjQvY29uZi9HRU5FUklDCisrKyBzeXMvYXJjaC9hbWQ2NC9jb25mL0dFTkVS
 >  >  SUMKQEAgLTg3MSwxMCArODcxLDExIEBACiBpZ3BoeSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwg
 >  >  SUdQMDFFMTAwMAogaWhwaHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgyNTc3IFBIWXMKIGlr
 >  >  cGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU2MyBQSFlzCiBpbnBoeSoJYXQgbWlpPyBw
 >  >  aHkgPwkJCSMgSW50ZWwgODI1NTUgUEhZcwogaW9waHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVs
 >  >  IDgyNTUzIFBIWXMKK2lwZ3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgSUMgUExVUyBJUDEwMDBBL0lQ
 >  >  MTAwMSBQSFlzCiBseHRwaHkqIGF0IG1paT8gcGh5ID8JCQkjIExldmVsIE9uZSBMWFQtOTcwIFBI
 >  >  WXMKIG1ha3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgTWFydmVsbCBTZW1pY29uZHVjdG9yIDg4RTEw
 >  >  MDAgUEhZcwogbnNwaHkqCWF0IG1paT8gcGh5ID8JCQkjIE5TODM4NDAgUEhZcwogbnNwaHl0ZXIq
 >  >  IGF0IG1paT8gcGh5ID8gCQkjIE5TODM4NDMgUEhZcwogcG5hcGh5KiBhdCBtaWk/IHBoeSA/CQkJ
 >  >  IyBnZW5lcmljIEhvbWVQTkEgUEhZcwoKSW5kZXg6IHN5cy9kZXYvREVWTkFNRVMKPT09PT09PT09
 >  >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 >  >  Ci0tLSBzeXMvZGV2L0RFVk5BTUVTCisrKyBzeXMvZGV2L0RFVk5BTUVTCkBAIC02NTcsMTAgKzY1
 >  >  NywxMSBAQAogaW9wbAkJCU1JCiBpb3BzcAkJCU1JCiBpcGFxYnVzCQkJaHBjYXJtCiBpcGFxbGNk
 >  >  CQkJaHBjYXJtCiBpcGFxcGNpYwkJaHBjYXJtCitpcGdwaHkJCQlNSQogaXBtaQkJCWFtZDY0CiBp
 >  >  cG1pCQkJaTM4NgogaXBtaQkJCXhlbgogaXB3CQkJTUkKIGlyZGFzaXIJCQlNSQkJQXR0cmlidXRl
 >  >  CgpJbmRleDogc3lzL2Rldi9taWkvZmlsZXMubWlpCj09PT09PT09PT09PT09PT09PT09PT09PT09
 >  >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkv
 >  >  ZmlsZXMubWlpCisrKyBzeXMvZGV2L21paS9maWxlcy5taWkKQEAgLTk3LDEwICs5NywxNCBAQAog
 >  >  CiBkZXZpY2UJaWtwaHk6IG1paV9waHkKIGF0dGFjaAlpa3BoeSBhdCBtaWkKIGZpbGUJZGV2L21p
 >  >  aS9pa3BoeS5jCQkJCWlrcGh5CiAKK2RldmljZQlpcGdwaHk6IG1paV9waHkKK2F0dGFjaAlpcGdw
 >  >  aHkgYXQgbWlpCitmaWxlCWRldi9taWkvaXBncGh5LmMJCQlpcGdwaHkKKwogZGV2aWNlCXNxcGh5
 >  >  OiBtaWlfcGh5CiBhdHRhY2gJc3FwaHkgYXQgbWlpCiBmaWxlCWRldi9taWkvc3FwaHkuYwkJCQlz
 >  >  cXBoeQogCiBkZXZpY2UJdHFwaHk6IG1paV9waHkKCkFEREVEICAgIHN5cy9kZXYvbWlpL2lwZ3Bo
 >  >  eS5jCkluZGV4OiBzeXMvZGV2L21paS9pcGdwaHkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
 >  >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvbWlp
 >  >  L2lwZ3BoeS5jCisrKyBzeXMvZGV2L21paS9pcGdwaHkuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoJ
 >  >  JE9wZW5CU0Q6IGlwZ3BoeS5jLHYgMS4xOSAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBFeHAgJAkq
 >  >  LworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24gPHlvbmdhcmlA
 >  >  RnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
 >  >  aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
 >  >  ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
 >  >  ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
 >  >  ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1v
 >  >  ZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
 >  >  IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
 >  >  ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
 >  >  Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
 >  >  dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
 >  >  aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
 >  >  QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
 >  >  IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
 >  >  RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
 >  >  VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
 >  >  VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
 >  >  RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
 >  >  IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
 >  >  VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
 >  >  T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
 >  >  TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
 >  >  KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
 >  >  QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
 >  >  VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
 >  >  CisgKi8KKworLyoKKyAqIERyaXZlciBmb3IgdGhlIElDIFBsdXMgSVAxMDAwQS9JUDEwMDEgMTAv
 >  >  MTAwLzEwMDAgUEhZLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxz
 >  >  eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVs
 >  >  Lmg+CisjaW5jbHVkZSA8c3lzL2RldmljZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp
 >  >  bmNsdWRlIDxzeXMvZXJybm8uaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5l
 >  >  dC9pZl9tZWRpYS5oPgorCisjaW5jbHVkZSA8ZGV2L21paS9taWkuaD4KKyNpbmNsdWRlIDxkZXYv
 >  >  bWlpL21paXZhci5oPgorI2luY2x1ZGUgPGRldi9taWkvbWlpZGV2cy5oPgorCisjaW5jbHVkZSA8
 >  >  ZGV2L21paS9pcGdwaHlyZWcuaD4KKworI2luY2x1ZGUgPGRldi9wY2kvaWZfc3RnZXJlZy5oPgor
 >  >  CitzdGF0aWMgaW50IGlwZ3BoeV9tYXRjaChkZXZpY2VfdCwgY2ZkYXRhX3QsIHZvaWQgKik7Citz
 >  >  dGF0aWMgdm9pZCBpcGdwaHlfYXR0YWNoKGRldmljZV90LCBkZXZpY2VfdCwgdm9pZCAqKTsKKwor
 >  >  Q0ZBVFRBQ0hfREVDTF9ORVcoaXBncGh5LCBzaXplb2Yoc3RydWN0IG1paV9zb2Z0YyksCisgICAg
 >  >  aXBncGh5X21hdGNoLCBpcGdwaHlfYXR0YWNoLCBtaWlfcGh5X2RldGFjaCwgbWlpX3BoeV9hY3Rp
 >  >  dmF0ZSk7CisKK3N0YXRpYyBpbnQJaXBncGh5X3NlcnZpY2Uoc3RydWN0IG1paV9zb2Z0YyAqLCBz
 >  >  dHJ1Y3QgbWlpX2RhdGEgKiwgaW50KTsKK3N0YXRpYyB2b2lkCWlwZ3BoeV9zdGF0dXMoc3RydWN0
 >  >  IG1paV9zb2Z0YyAqKTsKK3N0YXRpYyBpbnQJaXBncGh5X21paV9waHlfYXV0byhzdHJ1Y3QgbWlp
 >  >  X3NvZnRjICopOworLy9zdGF0aWMgdm9pZAlpcGdwaHlfbG9hZF9kc3Bjb2RlKHN0cnVjdCBtaWlf
 >  >  c29mdGMgKik7CitzdGF0aWMgdm9pZAlpcGdwaHlfcmVzZXQoc3RydWN0IG1paV9zb2Z0YyAqKTsK
 >  >  Kworc3RhdGljIGNvbnN0IHN0cnVjdCBtaWlfcGh5X2Z1bmNzIGlwZ3BoeV9mdW5jcyA9IHsKKwlp
 >  >  cGdwaHlfc2VydmljZSwgaXBncGh5X3N0YXR1cywgaXBncGh5X3Jlc2V0LAorfTsKKworc3RhdGlj
 >  >  IGNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyBpcGdwaHlzW10gPSB7CisJTUlJX1BIWV9ERVNDKElD
 >  >  UExVUywgSVAxMDAwQSksCisJTUlJX1BIWV9ERVNDKElDUExVUywgSVAxMDAxKSwKKwlNSUlfUEhZ
 >  >  X0VORCwKK307CisKK3N0YXRpYyBpbnQKK2lwZ3BoeV9tYXRjaChkZXZpY2VfdCBwYXJlbnQsIGNm
 >  >  ZGF0YV90IG1hdGNoLCB2b2lkICphdXgpCit7CisJc3RydWN0IG1paV9hdHRhY2hfYXJncyAqbWEg
 >  >  PSBhdXg7CisKKwlpZiAobWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cykgIT0gTlVMTCkgeworCQly
 >  >  ZXR1cm4gMTA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXBncGh5X2F0dGFj
 >  >  aChkZXZpY2VfdCBwYXJlbnQsIGRldmljZV90IHNlbGYsIHZvaWQgKmF1eCkKK3sKKwlzdHJ1Y3Qg
 >  >  bWlpX3NvZnRjICpzYyA9IGRldmljZV9wcml2YXRlKHNlbGYpOworCXN0cnVjdCBtaWlfYXR0YWNo
 >  >  X2FyZ3MgKm1hID0gYXV4OworCXN0cnVjdCBtaWlfZGF0YSAqbWlpID0gbWEtPm1paV9kYXRhOwor
 >  >  CWNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyAqbXBkOworCWNvbnN0IGNoYXIgKnNlcCA9ICIiOwor
 >  >  CisJbXBkID0gbWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cyk7CisJYXByaW50X25haXZlKCI6IE1l
 >  >  ZGlhIGludGVyZmFjZVxuIik7CisJYXByaW50X25vcm1hbCgiOiAlcywgcmV2LiAlZFxuIiwgbXBk
 >  >  LT5tcGRfbmFtZSwgTUlJX1JFVihtYS0+bWlpX2lkMikpOworCisJc2MtPm1paV9kZXYgPSBzZWxm
 >  >  OworCXNjLT5taWlfaW5zdCA9IG1paS0+bWlpX2luc3RhbmNlOworCXNjLT5taWlfcGh5ID0gbWEt
 >  >  Pm1paV9waHlubzsKKwlzYy0+bWlpX21wZF9vdWkgPSBNSUlfT1VJKG1hLT5taWlfaWQxLCBtYS0+
 >  >  bWlpX2lkMik7CisJc2MtPm1paV9tcGRfbW9kZWwgPSBNSUlfTU9ERUwobWEtPm1paV9pZDIpOwor
 >  >  CXNjLT5taWlfbXBkX3JldiA9IE1JSV9SRVYobWEtPm1paV9pZDIpOworCXNjLT5taWlfZnVuY3Mg
 >  >  PSAmaXBncGh5X2Z1bmNzOworCXNjLT5taWlfcGRhdGEgPSBtaWk7CisJc2MtPm1paV9mbGFncyA9
 >  >  IG1hLT5taWlfZmxhZ3M7CisKKwlzYy0+bWlpX2ZsYWdzIHw9IE1JSUZfTk9JU09MQVRFOworCXNj
 >  >  LT5taWlfYW5lZ3RpY2tzID0gTUlJX0FORUdUSUNLU19HSUdFOworCisJUEhZX1JFU0VUKHNjKTsK
 >  >  KworCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnNjLT5taWlfY2FwYWJpbGl0aWVzKTsKKwlzYy0+
 >  >  bWlpX2NhcGFiaWxpdGllcyAmPSBtYS0+bWlpX2NhcG1hc2s7CisJc2MtPm1paV9jYXBhYmlsaXRp
 >  >  ZXMgJj0gfkJNU1JfQU5FRzsKKwlpZiAoc2MtPm1paV9jYXBhYmlsaXRpZXMgJiBCTVNSX0VYVFNU
 >  >  QVQpCisJCVBIWV9SRUFEKHNjLCBNSUlfRVhUU1IsICZzYy0+bWlpX2V4dGNhcGFiaWxpdGllcyk7
 >  >  CisgCisJbWlpX3BoeV9hZGRfbWVkaWEoc2MpOworCQorI2RlZmluZQlBREQobSwgYykJaWZtZWRp
 >  >  YV9hZGQoJm1paS0+bWlpX21lZGlhLCAobSksIChjKSwgTlVMTCkKKyNkZWZpbmUJUFJJTlQobikJ
 >  >  YXByaW50X25vcm1hbCgiJXMlcyIsIHNlcCwgKG4pKTsgc2VwID0gIiwgIgorCQorCUFERChJRk1f
 >  >  TUFLRVdPUkQoSUZNX0VUSEVSLCBJRk1fQVVUTywgMCwgc2MtPm1paV9pbnN0KSwgTUlJX05NRURJ
 >  >  QSk7CisJc2VwID0iLCAiOworCVBSSU5UKCJhdXRvIik7CisKKwlhcHJpbnRfbm9ybWFsKCJcbiIp
 >  >  OworfQorCitzdGF0aWMgaW50CitpcGdwaHlfc2VydmljZShzdHJ1Y3QgbWlpX3NvZnRjICpzYywg
 >  >  c3RydWN0IG1paV9kYXRhICptaWksIGludCBjbWQpCit7CisJc3RydWN0IGlmbWVkaWFfZW50cnkg
 >  >  KmlmZSA9IG1paS0+bWlpX21lZGlhLmlmbV9jdXI7CisJdWludDE2X3QgZ2lnLCByZWcsIHNwZWVk
 >  >  OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1JSV9QT0xMU1RBVDoKKwkJLyoKKwkJICogSWYg
 >  >  d2UncmUgbm90IHBvbGxpbmcgb3VyIFBIWSBpbnN0YW5jZSwganVzdCByZXR1cm4uCisJCSAqLwor
 >  >  CQlpZiAoSUZNX0lOU1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5taWlfaW5zdCkKKwkJCXJldHVy
 >  >  biAwOworCQlicmVhazsKKworCWNhc2UgTUlJX01FRElBQ0hHOgorCQkvKgorCQkgKiBJZiB0aGUg
 >  >  bWVkaWEgaW5kaWNhdGVzIGEgZGlmZmVyZW50IFBIWSBpbnN0YW5jZSwKKwkJICogaXNvbGF0ZSBv
 >  >  dXJzZWx2ZXMuCisJCSAqLworCQlpZiAoSUZNX0lOU1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5t
 >  >  aWlfaW5zdCkgeworCQkJUEhZX1JFQUQoc2MsIE1JSV9CTUNSLCAmcmVnKTsKKwkJCVBIWV9XUklU
 >  >  RShzYywgTUlJX0JNQ1IsIHJlZyB8IEJNQ1JfSVNPKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJ
 >  >  LyoKKwkJICogSWYgdGhlIGludGVyZmFjZSBpcyBub3QgdXAsIGRvbid0IGRvIGFueXRoaW5nLgor
 >  >  CQkgKi8KKwkJaWYgKChtaWktPm1paV9pZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQkJ
 >  >  YnJlYWs7CisKKwkJUEhZX1JFU0VUKHNjKTsKKworCQlzd2l0Y2ggKElGTV9TVUJUWVBFKGlmZS0+
 >  >  aWZtX21lZGlhKSkgeworCQljYXNlIElGTV9BVVRPOgorCQkJKHZvaWQpaXBncGh5X21paV9waHlf
 >  >  YXV0byhzYyk7CisJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKworCQljYXNlIElGTV8xMDAwX1Q6
 >  >  CisJCQkvKgorCQkJICogWFhYCisJCQkgKiBNYW51YWwgMTAwMGJhc2VUIHNldHRpbmcgZG9lc24n
 >  >  dCBzZWVtIHRvIHdvcmsuCisJCQkgKi8KKwkJCXNwZWVkID0gQk1DUl9TMTAwMDsKKwkJCWJyZWFr
 >  >  OworCisJCWNhc2UgSUZNXzEwMF9UWDoKKwkJCXNwZWVkID0gQk1DUl9TMTAwOworCQkJYnJlYWs7
 >  >  CisKKwkJY2FzZSBJRk1fMTBfVDoKKwkJCXNwZWVkID0gQk1DUl9TMTA7CisJCQlicmVhazsKKwor
 >  >  CQlkZWZhdWx0OgorCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCisJCWlmICgoKGlmZS0+aWZtX21l
 >  >  ZGlhICYgSUZNX0dNQVNLKSAmIElGTV9GRFgpICE9IDApIHsKKwkJCXNwZWVkIHw9IEJNQ1JfRkRY
 >  >  OworCQkJZ2lnID0gR1RDUl9BRFZfMTAwMFRGRFg7CisJCX0gZWxzZQorCQkJZ2lnID0gR1RDUl9B
 >  >  RFZfMTAwMFRIRFg7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwgMCk7CisJCVBIWV9X
 >  >  UklURShzYywgTUlJX0JNQ1IsIHNwZWVkKTsKKworCQlpZiAoSUZNX1NVQlRZUEUoaWZlLT5pZm1f
 >  >  bWVkaWEpICE9IElGTV8xMDAwX1QpCisJCQlicmVhazsKKworCQlQSFlfV1JJVEUoc2MsIE1JSV8x
 >  >  MDBUMkNSLCBnaWcpOworCQlQSFlfV1JJVEUoc2MsIE1JSV9CTUNSLCBzcGVlZCk7CisKKwkJaWYg
 >  >  KG1paS0+bWlpX21lZGlhLmlmbV9tZWRpYSAmIElGTV9FVEhfTUFTVEVSKQorCQkJZ2lnIHw9IEdU
 >  >  Q1JfTUFOX01TIHwgR1RDUl9BRFZfTVM7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwg
 >  >  Z2lnKTsKKworZG9uZToKKwkJYnJlYWs7CisKKwljYXNlIE1JSV9USUNLOgorCQkvKgorCQkgKiBJ
 >  >  ZiB3ZSdyZSBub3QgY3VycmVudGx5IHNlbGVjdGVkLCBqdXN0IHJldHVybi4KKwkJICovCisJCWlm
 >  >  IChJRk1fSU5TVChpZmUtPmlmbV9tZWRpYSkgIT0gc2MtPm1paV9pbnN0KQorCQkJcmV0dXJuIDA7
 >  >  CisKKwkJLyoKKwkJICogSXMgdGhlIGludGVyZmFjZSBldmVuIHVwPworCQkgKi8KKwkJaWYgKCht
 >  >  aWktPm1paV9pZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJ
 >  >  LyoKKwkJICogT25seSB1c2VkIGZvciBhdXRvbmVnb3RpYXRpb24uCisJCSAqLworCQlpZiAoSUZN
 >  >  X1NVQlRZUEUoaWZlLT5pZm1fbWVkaWEpICE9IElGTV9BVVRPKSB7CisJCQlzYy0+bWlpX3RpY2tz
 >  >  ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGhh
 >  >  dmUgbGluay4gIElmIHdlIGRvLCB3ZSBkb24ndAorCQkgKiBuZWVkIHRvIHJlc3RhcnQgdGhlIGF1
 >  >  dG9uZWdvdGlhdGlvbiBwcm9jZXNzLiAgUmVhZAorCQkgKiB0aGUgQk1TUiB0d2ljZSBpbiBjYXNl
 >  >  IGl0J3MgbGF0Y2hlZC4KKwkJICovCisJCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnJlZyk7CisJ
 >  >  CVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnJlZyk7CisJCWlmIChyZWcgJiBCTVNSX0xJTkspIHsK
 >  >  KwkJCS8qCisJCQkgKiBSZXNldCBhdXRvbmVnb3RpYXRpb24gdGltZXIgdG8gMCBpbiBjYXNlIHRo
 >  >  ZSBsaW5rCisJCQkgKiBnb2VzIGRvd24gaW4gdGhlIG5leHQgdGljay4KKwkJCSAqLworCQkJc2Mt
 >  >  Pm1paV90aWNrcyA9IDA7CisJCQkvKiBTZWUgYWJvdmUuICovCisJCQlicmVhazsKKwkJfQorCisJ
 >  >  CS8qIEFubm91bmNlIGxpbmsgbG9zcyByaWdodCBhZnRlciBpdCBoYXBwZW5zICovCisJCWlmIChz
 >  >  Yy0+bWlpX3RpY2tzKysgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE9ubHkgcmV0cnkg
 >  >  YXV0b25lZ290aWF0aW9uIGV2ZXJ5IG1paV9hbmVndGlja3Mgc2Vjb25kcy4KKwkJICovCisJCWlm
 >  >  IChzYy0+bWlpX3RpY2tzIDw9IHNjLT5taWlfYW5lZ3RpY2tzKQorCQkJYnJlYWs7CisKKwkJc2Mt
 >  >  Pm1paV90aWNrcyA9IDA7CisJCWlwZ3BoeV9taWlfcGh5X2F1dG8oc2MpOworCQlicmVhazsKKwl9
 >  >  CisKKwkvKiBVcGRhdGUgdGhlIG1lZGlhIHN0YXR1cy4gKi8KKwlpcGdwaHlfc3RhdHVzKHNjKTsK
 >  >  KworCS8qIENhbGxiYWNrIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiAqLworCW1paV9waHlfdXBkYXRl
 >  >  KHNjLCBjbWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXBncGh5X3N0YXR1cyhz
 >  >  dHJ1Y3QgbWlpX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paSA9IHNjLT5taWlf
 >  >  cGRhdGE7CisJc3RydWN0IGlmbWVkaWFfZW50cnkgKmlmZSA9IG1paS0+bWlpX21lZGlhLmlmbV9j
 >  >  dXI7CisJdWludDE2X3QgYm1zciwgYm1jciwgc3RhdCwgZ3RzcjsKKworCW1paS0+bWlpX21lZGlh
 >  >  X3N0YXR1cyA9IElGTV9BVkFMSUQ7CisJbWlpLT5taWlfbWVkaWFfYWN0aXZlID0gSUZNX0VUSEVS
 >  >  OworCisJUEhZX1JFQUQoc2MsIE1JSV9CTVNSLCAmYm1zcik7CisJUEhZX1JFQUQoc2MsIE1JSV9C
 >  >  TVNSLCAmYm1zcik7CisJaWYgKGJtc3IgJiBCTVNSX0xJTkspIAorCQltaWktPm1paV9tZWRpYV9z
 >  >  dGF0dXMgfD0gSUZNX0FDVElWRTsKKworCVBIWV9SRUFEKHNjLCBNSUlfQk1DUiwgJmJtY3IpOwor
 >  >  CWlmIChibWNyICYgQk1DUl9MT09QKQorCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0xP
 >  >  T1A7CisKKwlpZiAoYm1jciAmIEJNQ1JfQVVUT0VOKSB7CisJCWlmICgoYm1zciAmIEJNU1JfQUNP
 >  >  TVApID09IDApIHsKKwkJCS8qIEVyZywgc3RpbGwgdHJ5aW5nLCBJIGd1ZXNzLi4uICovCisJCQlt
 >  >  aWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7CisJCQlyZXR1cm47CisJCX0KKworCQlp
 >  >  ZiAoc2MtPm1paV9tcGRfbW9kZWwgPT0gTUlJX01PREVMX0lDUExVU19JUDEwMDEpIHsKKwkJCVBI
 >  >  WV9SRUFEKHNjLCBJUEdQSFlfTFNSLCAmc3RhdCk7CisJCQlzd2l0Y2ggKHN0YXQgJiBJUEdQSFlf
 >  >  TFNSX1NQRUVEX01BU0spIHsKKwkJCWNhc2UgSVBHUEhZX0xTUl9TUEVFRF8xMDoKKwkJCQltaWkt
 >  >  Pm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNXzEwX1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIElQR1BI
 >  >  WV9MU1JfU1BFRURfMTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RY
 >  >  OworCQkJCWJyZWFrOworCQkJY2FzZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDA6CisJCQkJbWlpLT5t
 >  >  aWlfbWVkaWFfYWN0aXZlIHw9IElGTV8xMDAwX1Q7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgkJ
 >  >  CQkKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7CisJCQkJcmV0dXJuOwor
 >  >  CQkJfQorCisJCQlpZiAoc3RhdCAmIElQR1BIWV9MU1JfRlVMTF9EVVBMRVgpCisJCQkJbWlpLT5t
 >  >  aWlfbWVkaWFfYWN0aXZlIHw9IElGTV9GRFg7CisJCQllbHNlCisJCQkJbWlpLT5taWlfbWVkaWFf
 >  >  YWN0aXZlIHw9IElGTV9IRFg7CisJCX0gZWxzZSB7CisJCQlQSFlfUkVBRChzYywgU1RHRV9QaHlD
 >  >  dHJsLCAmc3RhdCk7CisJCQlzd2l0Y2ggKFBDX0xpbmtTcGVlZChzdGF0KSkgeworCQkJY2FzZSBQ
 >  >  Q19MaW5rU3BlZWRfRG93bjoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX05PTkU7
 >  >  CisJCQkJcmV0dXJuOworCQkJY2FzZSBQQ19MaW5rU3BlZWRfMTA6CisJCQkJbWlpLT5taWlfbWVk
 >  >  aWFfYWN0aXZlIHw9IElGTV8xMF9UOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ19MaW5rU3BlZWRf
 >  >  MTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RYOworCQkJCWJyZWFr
 >  >  OworCQkJY2FzZSBQQ19MaW5rU3BlZWRfMTAwMDoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUg
 >  >  fD0gSUZNXzEwMDBfVDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbWlpLT5taWlfbWVk
 >  >  aWFfYWN0aXZlIHw9IElGTV9OT05FOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKHN0YXQg
 >  >  JiBQQ19QaHlEdXBsZXhTdGF0dXMpCisJCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9G
 >  >  RFg7CisJCQllbHNlCisJCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9IRFg7CisJCX0K
 >  >  KworCQlpZiAobWlpLT5taWlfbWVkaWFfYWN0aXZlICYgSUZNX0ZEWCkKKwkJCW1paS0+bWlpX21l
 >  >  ZGlhX2FjdGl2ZSB8PSBtaWlfcGh5X2Zsb3dzdGF0dXMoc2MpOworCisJCWlmIChJRk1fU1VCVFlQ
 >  >  RShtaWktPm1paV9tZWRpYV9hY3RpdmUpID09IElGTV8xMDAwX1QpIHsKKwkJCVBIWV9SRUFEKHNj
 >  >  LCBNSUlfMTAwVDJTUiwgJmd0c3IpOworCQkJaWYgKGd0c3IgJiBHVFNSX01TX1JFUykKKwkJCQlt
 >  >  aWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0VUSF9NQVNURVI7CisJCX0KKwl9IGVsc2UKKwkJ
 >  >  bWlpLT5taWlfbWVkaWFfYWN0aXZlID0gaWZlLT5pZm1fbWVkaWE7Cit9CisKK3N0YXRpYyBpbnQK
 >  >  K2lwZ3BoeV9taWlfcGh5X2F1dG8oc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJdWludDE2X3Qg
 >  >  cmVnID0gMDsKKworCWlmIChzYy0+bWlpX21wZF9tb2RlbCA9PSBNSUlfTU9ERUxfSUNQTFVTX0lQ
 >  >  MTAwMSkgeworCQlQSFlfUkVBRChzYywgTUlJX0FOQVIsICZyZWcpOworCQlyZWcgJj0gfihBTkFS
 >  >  X1BBVVNFX1NZTSB8IEFOQVJfUEFVU0VfQVNZTSk7CisJCXJlZyB8PSBBTkFSX05QOworCX0KKwor
 >  >  CXJlZyB8PSBBTkFSXzEwIHwgQU5BUl8xMF9GRCB8IEFOQVJfVFggfCBBTkFSX1RYX0ZEOworCisJ
 >  >  aWYgKHNjLT5taWlfZmxhZ3MgJiBNSUlGX0RPUEFVU0UpCisJCXJlZyB8PSBBTkFSX1BBVVNFX1NZ
 >  >  TSB8IEFOQVJfUEFVU0VfQVNZTTsKKworCVBIWV9XUklURShzYywgTUlJX0FOQVIsIHJlZyB8IEFO
 >  >  QVJfQ1NNQSk7CisKKwlyZWcgPSBHVENSX0FEVl8xMDAwVEZEWCB8IEdUQ1JfQURWXzEwMDBUSERY
 >  >  OworCWlmIChzYy0+bWlpX21wZF9tb2RlbCAhPSBNSUlfTU9ERUxfSUNQTFVTX0lQMTAwMSkKKwkJ
 >  >  cmVnIHw9IEdUQ1JfQURWX01TOworCVBIWV9XUklURShzYywgTUlJXzEwMFQyQ1IsIHJlZyk7CisK
 >  >  KwlQSFlfV1JJVEUoc2MsIE1JSV9CTUNSLCBCTUNSX0ZEWCB8IEJNQ1JfQVVUT0VOIHwgQk1DUl9T
 >  >  VEFSVE5FRyk7CisKKwlyZXR1cm4gRUpVU1RSRVRVUk47Cit9CisKKy8qc3RhdGljIHZvaWQKK2lw
 >  >  Z3BoeV9sb2FkX2RzcGNvZGUoc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJUEhZX1dSSVRFKHNj
 >  >  LCAzMSwgMHgwMDAxKTsKKwlQSFlfV1JJVEUoc2MsIDI3LCAweDAxZTApOworCVBIWV9XUklURShz
 >  >  YywgMzEsIDB4MDAwMik7CisJUEhZX1dSSVRFKHNjLCAyNywgMHhlYjhlKTsKKwlQSFlfV1JJVEUo
 >  >  c2MsIDMxLCAweDAwMDApOworCVBIWV9XUklURShzYywgMzAsIDB4MDA1ZSk7CisJUEhZX1dSSVRF
 >  >  KHNjLCA5LCAweDA3MDApOworCisJREVMQVkoNTApOworfSovCisKK3N0YXRpYyB2b2lkCitpcGdw
 >  >  aHlfcmVzZXQoc3RydWN0IG1paV9zb2Z0YyAqc2MpCit7CisJLy9zdHJ1Y3QgaWZuZXQgKmlmcCA9
 >  >  IHNjLT5taWlfcGRhdGEtPm1paV9pZnA7CisJdWludDE2X3QgcmVnOworCisJbWlpX3BoeV9yZXNl
 >  >  dChzYyk7CisKKwkvKiBjbGVhciBhdXRvbmVnL2Z1bGwtZHVwbGV4IGFzIHdlIGRvbid0IHdhbnQg
 >  >  aXQgYWZ0ZXIgcmVzZXQgKi8KKwlQSFlfUkVBRChzYywgTUlJX0JNQ1IsICZyZWcpOworCXJlZyAm
 >  >  PSB+KEJNQ1JfQVVUT0VOIHwgQk1DUl9GRFgpOworCVBIWV9XUklURShzYywgTUlJX0JNQ1IsIHJl
 >  >  Zyk7CisKKwkvKmlmIChzYy0+bWlpX21wZF9tb2RlbCA9PSBNSUlfTU9ERUxfSUNQTFVTX0lQMTAw
 >  >  MEEgJiYKKwkgICAgc3RyY21wKGlmcC0+aWZfeG5hbWUsICJzdGdlIikgPT0gMCkgeworCQlzdHJ1
 >  >  Y3Qgc3RnZV9zb2Z0YyAqc3RnZV9zYyA9IGlmcC0+aWZfc29mdGM7CisJCWlmIChzdGdlX3NjLT5z
 >  >  Y19yZXYgPj0gMHg0MCAmJiBzdGdlX3NjLT5zY19yZXYgPD0gMHg0ZSkKKwkJCWlwZ3BoeV9sb2Fk
 >  >  X2RzcGNvZGUoc2MpOworCX0qLworfQoKQURERUQgICAgc3lzL2Rldi9taWkvaXBncGh5cmVnLmgK
 >  >  SW5kZXg6IHN5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
 >  >  PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkv
 >  >  aXBncGh5cmVnLmgKKysrIHN5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oCkBAIC0wLDAgKzEsODMgQEAK
 >  >  Ky8qCSRPcGVuQlNEOiBpcGdwaHlyZWcuaCx2IDEuMyAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBF
 >  >  eHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24KKyAq
 >  >  IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgCisgKiBSZWRpc3RyaWJ1dGlv
 >  >  biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
 >  >  IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
 >  >  Y29uZGl0aW9ucworICogYXJlIG1ldDogICAgICAgICAgICAgCisgKiAxLiBSZWRpc3RyaWJ1dGlv
 >  >  bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
 >  >  bm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxv
 >  >  d2luZworICogICAgZGlzY2xhaW1lci4gIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
 >  >  eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
 >  >  dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
 >  >  aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
 >  >  aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
 >  >  WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
 >  >  U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
 >  >  VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
 >  >  IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
 >  >  VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
 >  >  RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
 >  >  RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
 >  >  Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
 >  >  LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
 >  >  IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
 >  >  Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
 >  >  UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
 >  >  UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
 >  >  SCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0RFVl9NSUlfSVBHUEhZUkVHX0hfCisjZGVm
 >  >  aW5lIF9ERVZfTUlJX0lQR1BIWVJFR19IXworCisvKgorICogUmVnaXN0ZXJzIGZvciB0aGUgSUMg
 >  >  UGx1cyBJUEdBIGludGVybmFsIFBIWS4KKyAqLworCisvKiBQSFkgc3BlY2lmaWMgY29udHJvbCAm
 >  >  IHN0YXR1cyByZWdpc3Rlci4gSVAxMDAxIG9ubHkuICovCisjZGVmaW5lIElQR1BIWV9TQ1NSCQkJ
 >  >  MHgxMAorI2RlZmluZSBJUEdQSFlfU0NTUl9SWFBIQVNFX1NFTAkweDAwMDEKKyNkZWZpbmUgSVBH
 >  >  UEhZX1NDU1JfVFhQSEFTRV9TRUwJMHgwMDAyCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JFUEVBVE9S
 >  >  X01PREUJMHgwMDA0CisjZGVmaW5lIElQR1BIWV9TQ1NSX1JFU0VSVkVEMV9ERUYJMHgwMDA4Cisj
 >  >  ZGVmaW5lIElQR1BIWV9TQ1NSX1JYQ0xLX0RSVl9NQVNLCTB4MDA2MAorI2RlZmluZSBJUEdQSFlf
 >  >  U0NTUl9SWENMS19EUlZfREVGCTB4MDA0MAorI2RlZmluZSBJUEdQSFlfU0NTUl9SWERfRFJWX01B
 >  >  U0sJMHgwMTgwCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JYRF9EUlZfREVGCTB4MDEwMAorI2RlZmlu
 >  >  ZSBJUEdQSFlfU0NTUl9KQUJCRVJfRU5CCTB4MDIwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9IRUFS
 >  >  VF9CRUFUX0VOQgkweDA0MDAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfRE9XTlNISUZUX0VOQgkweDA4
 >  >  MDAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfUkVTRVJWRUQyX0RFRgkweDEwMDAKKyNkZWZpbmUgSVBH
 >  >  UEhZX1NDU1JfTEVEX0RSVl80TUEJMHgwMDAwCisjZGVmaW5lIElQR1BIWV9TQ1NSX0xFRF9EUlZf
 >  >  OE1BCTB4MjAwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9MRURfTU9ERV9NQVNLCTB4QzAwMAorI2Rl
 >  >  ZmluZSBJUEdQSFlfU0NTUl9MRURfTU9ERV9ERUYJMHgwMDAwCisKKy8qIFBIWSBsaW5rIHN0YXR1
 >  >  cyByZWdpc3Rlci4gSVAxMDAxIG9ubHkuICovCisjZGVmaW5lIElQR1BIWV9MU1IJCQkweDExCisj
 >  >  ZGVmaW5lIElQR1BIWV9MU1JfSkFCQkVSX0RFVAkweDAyMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9B
 >  >  UFNfU0xFRVAJCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfTFNSX01ESVgJCTB4MDgwMAorI2RlZmlu
 >  >  ZSBJUEdQSFlfTFNSX0ZVTExfRFVQTEVYCTB4MTAwMAorI2RlZmluZSBJUEdQSFlfTFNSX1NQRUVE
 >  >  XzEwCQkweDAwMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9TUEVFRF8xMDAJCTB4MjAwMAorI2RlZmlu
 >  >  ZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDAJMHg0MDAwCisjZGVmaW5lIElQR1BIWV9MU1JfU1BFRURf
 >  >  TUFTSwkweDYwMDAKKyNkZWZpbmUgSVBHUEhZX0xTUl9MSU5LVVAJCTB4ODAwMAorCisvKiBQSFkg
 >  >  c3BlY2lmaWMgY29udHJvbCByZWdpc3RlciAyLiBJUDEwMDEgb25seS4gKi8KKyNkZWZpbmUgSVBH
 >  >  UEhZX1NDUgorI2RlZmluZSBJUEdQSFlfU0NSX1NFV19SQVRFX01BU0sJMHgwMDAzCisjZGVmaW5l
 >  >  IElQR1BIWV9TQ1JfU0VXX1JBVEVfREVGCTB4MDAwMworI2RlZmluZSBJUEdQSFlfU0NSX0FVVE9f
 >  >  WE9WRVIJMHgwMDA0CisjZGVmaW5lIElQR1BIWV9TQ1JfU1BFRURfMTBfMTAwX0VOQgkweDAwNDAK
 >  >  KyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVOQ1lfMgkweDAwMDAKKyNkZWZpbmUgSVBHUEhZ
 >  >  X1NDUl9GSUZPX0xBVEVOQ1lfMwkweDAwODAKKyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVO
 >  >  Q1lfNAkweDAxMDAKKyNkZWZpbmUgSVBHUEhZX1NDUl9GSUZPX0xBVEVOQ1lfNQkweDAxODAKKyNk
 >  >  ZWZpbmUgSVBHUEhZX1NDUl9NRElYX0VOQgkJMHgwMjAwCisjZGVmaW5lIElQR1BIWV9TQ1JfUkVT
 >  >  RVJWRURfREVGCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfU0NSX0FQU19PTgkJMHgwODAwCisKKyNl
 >  >  bmRpZiAvKiBfREVWX01JSV9JUEdQSFlSRUdfSF8gKi8KCkluZGV4OiBzeXMvZGV2L21paS9taWlk
 >  >  ZXZzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 >  >  PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9taWkvbWlpZGV2cworKysgc3lzL2Rldi9taWkvbWlp
 >  >  ZGV2cwpAQCAtNzQsMTEgKzc0LDExIEBACiBvdWkgTUFSVkVMTAkJCTB4MDA1MDQzCU1hcnZlbGwg
 >  >  U2VtaWNvbmR1Y3Rvcgogb3VpIFFVQUxTRU1JCQkJMHgwMDYwNTEJUXVhbGl0eSBTZW1pY29uZHVj
 >  >  dG9yCiBvdWkgQU1MT0dJQwkJCTB4MDA2MDUxCUFtbG9naWMKIG91aSBEQVZJQ09NCQkJMHgwMDYw
 >  >  NmUJRGF2aWNvbSBTZW1pY29uZHVjdG9yCiBvdWkgU01TQwkJCTB4MDA4MDBmCVNNU0MKLW91aSBJ
 >  >  Q1BMVVMJCQkweDAwOTBjMwlJQyBQbHVzIENvcnAuCitvdWkgSUNQTFVTCQkJMHgwMDA5YzMJSUMg
 >  >  UGx1cyBDb3JwLgogb3VpIFNFRVEJCQkweDAwYTA3ZAlTZWVxCiBvdWkgSUNTCQkJCTB4MDBhMGJl
 >  >  CUludGVncmF0ZWQgQ2lyY3VpdCBTeXN0ZW1zCiBvdWkgSU5URUwJCQkweDAwYWEwMAlJbnRlbAog
 >  >  b3VpIFRTQwkJCQkweDAwYzAzOQlUREsgU2VtaWNvbmR1Y3Rvcgogb3VpIE1ZU09OCQkJMHgwMGMw
 >  >  YjQJTXlzb24gVGVjaG5vbG9neQoK
 >  >  --000000000000efb2d20591fccc25--
 >  >
 >

 --00000000000081a60e0593a2dbc1
 Content-Type: text/x-patch; charset="US-ASCII"; name="ipgphy_patch.diff"
 Content-Disposition: attachment; filename="ipgphy_patch.diff"
 Content-Transfer-Encoding: base64
 Content-ID: <f_k13zkkzh0>
 X-Attachment-Id: f_k13zkkzh0

 ZGlmZiAtLWdpdCBhL2Rpc3RyaWIvc2V0cy9saXN0cy9tYW4vbWkgYi9kaXN0cmliL3NldHMvbGlz
 dHMvbWFuL21pCmluZGV4IGNiZjEyM2Y1OTkzLi4zYzQzMTliZmRlNCAxMDA2NDQKLS0tIGEvZGlz
 dHJpYi9zZXRzL2xpc3RzL21hbi9taQorKysgYi9kaXN0cmliL3NldHMvbGlzdHMvbWFuL21pCkBA
 IC0xMzM2LDYgKzEzMzYsNyBAQAogLi91c3Ivc2hhcmUvbWFuL2NhdDQvaXA2LjAJCQltYW4tc3lz
 LWNhdG1hbgkJLmNhdAogLi91c3Ivc2hhcmUvbWFuL2NhdDQvaXBmLjAJCQltYW4taXBmLWNhdG1h
 bgkJaXBmaWx0ZXIsLmNhdAogLi91c3Ivc2hhcmUvbWFuL2NhdDQvaXBmaWx0ZXIuMAkJCW1hbi1p
 cGYtY2F0bWFuCQlpcGZpbHRlciwuY2F0CisuL3Vzci9zaGFyZS9tYW4vY2F0NC9pcGdwaHkuMAkJ
 CW1hbi1zeXMtY2F0bWFuCQkuY2F0CiAuL3Vzci9zaGFyZS9tYW4vY2F0NC9pcGlwLjAJCQltYW4t
 b2Jzb2xldGUJCW9ic29sZXRlCiAuL3Vzci9zaGFyZS9tYW4vY2F0NC9pcGtkYi4wCQkJbWFuLW9i
 c29sZXRlCQlvYnNvbGV0ZQogLi91c3Ivc2hhcmUvbWFuL2NhdDQvaXBsLjAJCQltYW4taXBmLWNh
 dG1hbgkJaXBmaWx0ZXIsLmNhdApAQCAtNDQ3Nyw2ICs0NDc4LDcgQEAKIC4vdXNyL3NoYXJlL21h
 bi9odG1sNC9pcDYuaHRtbAkJCW1hbi1zeXMtaHRtbG1hbgkJaHRtbAogLi91c3Ivc2hhcmUvbWFu
 L2h0bWw0L2lwZi5odG1sCQkJbWFuLWlwZi1odG1sbWFuCQlpcGZpbHRlcixodG1sCiAuL3Vzci9z
 aGFyZS9tYW4vaHRtbDQvaXBmaWx0ZXIuaHRtbAkJbWFuLWlwZi1odG1sbWFuCQlpcGZpbHRlcixo
 dG1sCisuL3Vzci9zaGFyZS9tYW4vaHRtbDQvaXBncGh5Lmh0bWwJCW1hbi1zeXMtaHRtbG1hbgkJ
 aHRtbAogLi91c3Ivc2hhcmUvbWFuL2h0bWw0L2lwa2RiLmh0bWwJCW1hbi1vYnNvbGV0ZQkJb2Jz
 b2xldGUKIC4vdXNyL3NoYXJlL21hbi9odG1sNC9pcGwuaHRtbAkJCW1hbi1pcGYtaHRtbG1hbgkJ
 aXBmaWx0ZXIsaHRtbAogLi91c3Ivc2hhcmUvbWFuL2h0bWw0L2lwbWkuaHRtbAkJCW1hbi1zeXMt
 aHRtbG1hbgkJaHRtbApAQCAtNzQ1NCw2ICs3NDU2LDcgQEAKIC4vdXNyL3NoYXJlL21hbi9tYW40
 L2lwNi40CQkJbWFuLXN5cy1tYW4JCS5tYW4KIC4vdXNyL3NoYXJlL21hbi9tYW40L2lwZi40CQkJ
 bWFuLXN5cy1tYW4JCWlwZmlsdGVyLC5tYW4KIC4vdXNyL3NoYXJlL21hbi9tYW40L2lwZmlsdGVy
 LjQJCQltYW4tc3lzLW1hbgkJaXBmaWx0ZXIsLm1hbgorLi91c3Ivc2hhcmUvbWFuL21hbjQvaXBn
 cGh5LjQJCQltYW4tc3lzLW1hbgkJLm1hbgogLi91c3Ivc2hhcmUvbWFuL21hbjQvaXBpcC40CQkJ
 bWFuLW9ic29sZXRlCQlvYnNvbGV0ZQogLi91c3Ivc2hhcmUvbWFuL21hbjQvaXBrZGIuNAkJCW1h
 bi1vYnNvbGV0ZQkJb2Jzb2xldGUKIC4vdXNyL3NoYXJlL21hbi9tYW40L2lwbC40CQkJbWFuLXN5
 cy1tYW4JCWlwZmlsdGVyLC5tYW4KZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9tYW40L01ha2VmaWxl
 IGIvc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKaW5kZXggNGRjNjg2OGE4OWIuLjIyN2M0OWNkM2Mx
 IDEwMDY0NAotLS0gYS9zaGFyZS9tYW4vbWFuNC9NYWtlZmlsZQorKysgYi9zaGFyZS9tYW4vbWFu
 NC9NYWtlZmlsZQpAQCAtMzIsNyArMzIsNyBAQCBNQU49CWFhYy40IGFjOTcuNCBhY2FyZGlkZS40
 IGFjZXJpZGUuNCBhY3BoeS40IFwKIAlpYm1jZC40IGlibWhhd2suNCBpY2hzbWIuNCBpY21wLjQg
 aWNwLjQgaWNzcGh5LjQgaWVlLjQgaWVlZTgwMjExLjQgXAogCWlmbWVkaWEuNCBpZ21hZmIuNCBp
 Z3BoeS40IGlnc2ZiLjQgaWhhLjQgaWhpZGV2LjQgaWhwaHkuNCBpaWMuNCBpbXMuNCBcCiAJaW5l
 dC40IGlrcGh5LjQgaW5waHkuNCBpbnRlcnNpbDcxNzAuNCBpbnRyby40IFwKLQlpb2FzaWMuNCBp
 b2F0LjQgaW9wLjQgaW9waHkuNCBpb3BzcC40IGlwLjQgaXBtaS40IGlwdy40IFwKKwlpb2FzaWMu
 NCBpb2F0LjQgaW9wLjQgaW9waHkuNCBpb3BzcC40IGlwLjQgaXBncGh5LjQgaXBtaS40IGlwdy40
 IFwKIAlpcm1jZS40IGlzcC40IGlzbXQuNCBpc3YuNCBpdGVzaW8uNCBpdGVpZGUuNCBpd2kuNCBp
 d20uNCBpd24uNCBpeGcuNCBcCiAJaXhwaWRlLjQgaXh2LjQgXAogCWptZS40IGptaWRlLjQgam95
 LjQgXApkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjQvaXBncGh5LjQgYi9zaGFyZS9tYW4vbWFu
 NC9pcGdwaHkuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzFhZTJl
 Y2JmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9tYW4vbWFuNC9pcGdwaHkuNApAQCAtMCww
 ICsxLDM0IEBACisuXCIJJE9wZW5CU0Q6IGlwZ3BoeS40LHYgMS41IDIwMDkvMDgvMDggMTc6MTI6
 NDAgbmFkZHkgRXhwICQKKy5cIgorLlwiIENvcHlyaWdodCAoYykgMjAwNiBCcmFkIFNtaXRoIDxi
 cmFkQG9wZW5ic2Qub3JnPgorLlwiCisuXCIgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm
 eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisuXCIgcHVycG9zZSB3aXRo
 IG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92
 ZQorLlwiIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFy
 IGluIGFsbCBjb3BpZXMuCisuXCIKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
 IiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKy5cIiBXSVRIIFJFR0FS
 RCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisu
 XCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
 SE9SIEJFIExJQUJMRSBGT1IKKy5cIiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
 Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisuXCIgV0hBVFNPRVZFUiBSRVNV
 TFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisu
 XCIgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElP
 TiwgQVJJU0lORyBPVVQgT0YKKy5cIiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQ
 RVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorLlwiCisuRGQgJE1kb2NkYXRlOiBBdWd1c3Qg
 OCAyMDA5ICQKKy5EdCBJUEdQSFkgNAorLk9zCisuU2ggTkFNRQorLk5tIGlwZ3BoeQorLk5kIElD
 IFBsdXMgSVAxMDAwQS9JUDEwMDEgMTAvMTAwL0dpZ2FiaXQgRXRoZXJuZXQgUEhZCisuU2ggU1lO
 T1BTSVMKKy5DZCAiaXBncGh5KiBhdCBtaWk/IgorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObQor
 ZHJpdmVyIHN1cHBvcnRzIHRoZSBJQyBQbHVzIElQMTAwMEEvSVAxMDAxIDEwLzEwMC9HaWdhYml0
 IEV0aGVybmV0IFBIWQoraW50ZXJmYWNlLgorLlNoIFNFRSBBTFNPCisuWHIgaWZtZWRpYSA0ICwK
 Ky5YciBpbnRybyA0ICwKKy5YciBtaWkgNCAsCisuWHIgaWZjb25maWcgOApkaWZmIC0tZ2l0IGEv
 c2hhcmUvbWFuL21hbjQvbWlpLjQgYi9zaGFyZS9tYW4vbWFuNC9taWkuNAppbmRleCA3MzRhODVh
 YWQyOC4uMjliMjlhZjFkMTIgMTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW40L21paS40CisrKyBi
 L3NoYXJlL21hbi9tYW40L21paS40CkBAIC00OSw2ICs0OSw3IEBACiAuQ2QgImlrcGh5KiAgICBh
 dCBtaWk/IHBoeSA/CQkjIEludGVsIDgyNTYzIFBIWXMiCiAuQ2QgImlucGh5KiAgICBhdCBtaWk/
 IHBoeSA/CQkjIEludGVsIDgyNTU1IFBIWXMiCiAuQ2QgImlvcGh5KiAgICBhdCBtaWk/IHBoeSA/
 CQkjIEludGVsIDgyNTUzIFBIWXMiCisuQ2QgImlwZ3BoeSogICBhdCBtaWk/IHBoeSA/CQkjIElD
 IFBMVVMgSVAxMDAwQS9JUDEwMDEgUEhZcyIKIC5DZCAibHh0cGh5KiAgIGF0IG1paT8gcGh5ID8J
 CSMgTGV2ZWwgT25lIExYVC05NzAgUEhZcyIKIC5DZCAibWFrcGh5KiAgIGF0IG1paT8gcGh5ID8J
 CSMgTWFydmVsIDg4RTEwMDAgR2lnLUUgUEhZcyIKIC5DZCAibWljcGh5KiAgIGF0IG1paT8gcGh5
 ID8JCSMgTWljcmVsIEtTWjkwMjEgR2lnLUUgUEhZcyIKZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9t
 YW40L3ZnZS40IGIvc2hhcmUvbWFuL21hbjQvdmdlLjQKaW5kZXggNjJiYjMxOTM5MTIuLjI2Mzhj
 ODBjOWNmIDEwMDY0NAotLS0gYS9zaGFyZS9tYW4vbWFuNC92Z2UuNAorKysgYi9zaGFyZS9tYW4v
 bWFuNC92Z2UuNApAQCAtMTgwLDYgKzE4MCw3IEBAIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gKGNh
 YmxlKS4gRHJpdmVyIHJlc2V0cyB0aGUgZGV2aWNlLgogLlNoIFNFRSBBTFNPCiAuWHIgYXJwIDQg
 LAogLlhyIGNpcGh5IDQgLAorLlhyIGlwZ3BoeSA0ICwKIC5YciBtaWkgNCAsCiAuWHIgbmV0aW50
 cm8gNCAsCiAuWHIgdWtwaHkgNCAsCmRpZmYgLS1naXQgYS9zeXMvYXJjaC9hbWQ2NC9jb25mL0FM
 TCBiL3N5cy9hcmNoL2FtZDY0L2NvbmYvQUxMCmluZGV4IGUzMzI5MzllNTZhLi42MTAxYTZlZGI4
 MiAxMDA2NDQKLS0tIGEvc3lzL2FyY2gvYW1kNjQvY29uZi9BTEwKKysrIGIvc3lzL2FyY2gvYW1k
 NjQvY29uZi9BTEwKQEAgLTExMDQsNiArMTEwNCw3IEBAIGlocGh5KglhdCBtaWk/IHBoeSA/CQkJ
 IyBJbnRlbCA4MjU3NyBQSFlzCiBpa3BoeSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwgODI1NjMg
 UEhZcwogaW5waHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgyNTU1IFBIWXMKIGlvcGh5Kglh
 dCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU1MyBQSFlzCitpcGdwaHkqCWF0IG1paT8gcGh5ID8J
 CQkjIElDIFBMVVMgSVAxMDAwQS9JUDEwMDEgUEhZcwogbHh0cGh5KiBhdCBtaWk/IHBoeSA/CQkJ
 IyBMZXZlbCBPbmUgTFhULTk3MCBQSFlzCiBtYWtwaHkqIGF0IG1paT8gcGh5ID8JCQkjIE1hcnZl
 bGwgU2VtaWNvbmR1Y3RvciA4OEUxMDAwIFBIWXMKIG5zcGh5KglhdCBtaWk/IHBoeSA/CQkJIyBO
 UzgzODQwIFBIWXMKZGlmZiAtLWdpdCBhL3N5cy9hcmNoL2FtZDY0L2NvbmYvR0VORVJJQyBiL3N5
 cy9hcmNoL2FtZDY0L2NvbmYvR0VORVJJQwppbmRleCBmZmIzNjUzNWQyYy4uNDQwMmEwZGYxMGMg
 MTAwNjQ0Ci0tLSBhL3N5cy9hcmNoL2FtZDY0L2NvbmYvR0VORVJJQworKysgYi9zeXMvYXJjaC9h
 bWQ2NC9jb25mL0dFTkVSSUMKQEAgLTg3Myw2ICs4NzMsNyBAQCBpaHBoeSoJYXQgbWlpPyBwaHkg
 PwkJCSMgSW50ZWwgODI1NzcgUEhZcwogaWtwaHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgy
 NTYzIFBIWXMKIGlucGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU1NSBQSFlzCiBpb3Bo
 eSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwgODI1NTMgUEhZcworaXBncGh5KglhdCBtaWk/IHBo
 eSA/CQkJIyBJQyBQTFVTIElQMTAwMEEvSVAxMDAxIFBIWXMKIGx4dHBoeSogYXQgbWlpPyBwaHkg
 PwkJCSMgTGV2ZWwgT25lIExYVC05NzAgUEhZcwogbWFrcGh5KiBhdCBtaWk/IHBoeSA/CQkJIyBN
 YXJ2ZWxsIFNlbWljb25kdWN0b3IgODhFMTAwMCBQSFlzCiBuc3BoeSoJYXQgbWlpPyBwaHkgPwkJ
 CSMgTlM4Mzg0MCBQSFlzCmRpZmYgLS1naXQgYS9zeXMvYXJjaC9pMzg2L2NvbmYvQUxMIGIvc3lz
 L2FyY2gvaTM4Ni9jb25mL0FMTAppbmRleCAxMGEwZWE2ODI5My4uNzUzYTkwM2IyZTggMTAwNjQ0
 Ci0tLSBhL3N5cy9hcmNoL2kzODYvY29uZi9BTEwKKysrIGIvc3lzL2FyY2gvaTM4Ni9jb25mL0FM
 TApAQCAtMTIwOSw2ICsxMjA5LDcgQEAgaWhwaHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgy
 NTc3IFBIWXMKIGlrcGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU2MyBQSFlzCiBpbnBo
 eSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwgODI1NTUgUEhZcwogaW9waHkqCWF0IG1paT8gcGh5
 ID8JCQkjIEludGVsIDgyNTUzIFBIWXMKK2lwZ3BoeSoJYXQgbWlpPyBwaHkgPwkJCSMgSUMgUExV
 UyBJUDEwMDBBL0lQMTAwMSBQSFlzCiBseHRwaHkqIGF0IG1paT8gcGh5ID8JCQkjIExldmVsIE9u
 ZSBMWFQtOTcwIFBIWXMKIG1ha3BoeSogYXQgbWlpPyBwaHkgPwkJCSMgTWFydmVsbCBTZW1pY29u
 ZHVjdG9yIDg4RTEwMDAgUEhZcwogbnNwaHkqCWF0IG1paT8gcGh5ID8JCQkjIE5TODM4NDAgUEhZ
 cwpkaWZmIC0tZ2l0IGEvc3lzL2FyY2gvaTM4Ni9jb25mL0dFTkVSSUMgYi9zeXMvYXJjaC9pMzg2
 L2NvbmYvR0VORVJJQwppbmRleCBmNmE1YjMzMjRiNC4uZTg2NzhlMTA4NGYgMTAwNjQ0Ci0tLSBh
 L3N5cy9hcmNoL2kzODYvY29uZi9HRU5FUklDCisrKyBiL3N5cy9hcmNoL2kzODYvY29uZi9HRU5F
 UklDCkBAIC0xMTIwLDYgKzExMjAsNyBAQCBpaHBoeSoJYXQgbWlpPyBwaHkgPwkJCSMgSW50ZWwg
 ODI1NzcgUEhZcwogaWtwaHkqCWF0IG1paT8gcGh5ID8JCQkjIEludGVsIDgyNTYzIFBIWXMKIGlu
 cGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJbnRlbCA4MjU1NSBQSFlzCiBpb3BoeSoJYXQgbWlpPyBw
 aHkgPwkJCSMgSW50ZWwgODI1NTMgUEhZcworaXBncGh5KglhdCBtaWk/IHBoeSA/CQkJIyBJQyBQ
 TFVTIElQMTAwMEEvSVAxMDAxIFBIWXMKIGx4dHBoeSogYXQgbWlpPyBwaHkgPwkJCSMgTGV2ZWwg
 T25lIExYVC05NzAgUEhZcwogbWFrcGh5KiBhdCBtaWk/IHBoeSA/CQkJIyBNYXJ2ZWxsIFNlbWlj
 b25kdWN0b3IgODhFMTAwMCBQSFlzCiBuc3BoeSoJYXQgbWlpPyBwaHkgPwkJCSMgTlM4Mzg0MCBQ
 SFlzCmRpZmYgLS1naXQgYS9zeXMvZGV2L0RFVk5BTUVTIGIvc3lzL2Rldi9ERVZOQU1FUwppbmRl
 eCAzNDY4OWYyZjc4NC4uOTg0NzlmYjA0MTEgMTAwNjQ0Ci0tLSBhL3N5cy9kZXYvREVWTkFNRVMK
 KysrIGIvc3lzL2Rldi9ERVZOQU1FUwpAQCAtNjU5LDYgKzY1OSw3IEBAIGlvcHNwCQkJTUkKIGlw
 YXFidXMJCQlocGNhcm0KIGlwYXFsY2QJCQlocGNhcm0KIGlwYXFwY2ljCQlocGNhcm0KK2lwZ3Bo
 eQkJCU1JCiBpcG1pCQkJYW1kNjQKIGlwbWkJCQlpMzg2CiBpcG1pCQkJeGVuCmRpZmYgLS1naXQg
 YS9zeXMvZGV2L21paS9maWxlcy5taWkgYi9zeXMvZGV2L21paS9maWxlcy5taWkKaW5kZXggYTMx
 YjQzYWU4NmEuLmMyODRiZDdlOTQzIDEwMDY0NAotLS0gYS9zeXMvZGV2L21paS9maWxlcy5taWkK
 KysrIGIvc3lzL2Rldi9taWkvZmlsZXMubWlpCkBAIC05OSw2ICs5OSwxMCBAQCBkZXZpY2UJaWtw
 aHk6IG1paV9waHkKIGF0dGFjaAlpa3BoeSBhdCBtaWkKIGZpbGUJZGV2L21paS9pa3BoeS5jCQkJ
 CWlrcGh5CiAKK2RldmljZQlpcGdwaHk6IG1paV9waHkKK2F0dGFjaAlpcGdwaHkgYXQgbWlpCitm
 aWxlCWRldi9taWkvaXBncGh5LmMJCQlpcGdwaHkKKwogZGV2aWNlCXNxcGh5OiBtaWlfcGh5CiBh
 dHRhY2gJc3FwaHkgYXQgbWlpCiBmaWxlCWRldi9taWkvc3FwaHkuYwkJCQlzcXBoeQpkaWZmIC0t
 Z2l0IGEvc3lzL2Rldi9taWkvaXBncGh5LmMgYi9zeXMvZGV2L21paS9pcGdwaHkuYwpuZXcgZmls
 ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWFmZDJkY2FjODAKLS0tIC9kZXYvbnVs
 bAorKysgYi9zeXMvZGV2L21paS9pcGdwaHkuYwpAQCAtMCwwICsxLDQxNSBAQAorLyoJJE9wZW5C
 U0Q6IGlwZ3BoeS5jLHYgMS4xOSAyMDE1LzA3LzE5IDA2OjI4OjEyIHl1byBFeHAgJAkqLworCisv
 Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgUHl1biBZb25nSHllb24gPHlvbmdhcmlARnJlZUJT
 RC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
 ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
 aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
 aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
 IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVk
 LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
 YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
 dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
 bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
 TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
 UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
 VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
 T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
 TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
 RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
 VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
 VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
 SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
 RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
 IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8K
 KworLyoKKyAqIERyaXZlciBmb3IgdGhlIElDIFBsdXMgSVAxMDAwQS9JUDEwMDEgMTAvMTAwLzEw
 MDAgUEhZLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0tFUk5FTF9SQ1NJRCgwLCAi
 JE5ldEJTRDogaXBncGh5LmMsdiAxLjU1IDIwMTkvMDYvMDUgMTc6NTA6MDYgdmV6aGx5cyBFeHAg
 JCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Cisj
 aW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9kZXZpY2UuaD4KKyNpbmNsdWRl
 IDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL2Vycm5vLmg+CisKKyNpbmNsdWRlIDxuZXQv
 aWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVkaWEuaD4KKworI2luY2x1ZGUgPGRldi9taWkvbWlp
 Lmg+CisjaW5jbHVkZSA8ZGV2L21paS9taWl2YXIuaD4KKyNpbmNsdWRlIDxkZXYvbWlpL21paWRl
 dnMuaD4KKworI2luY2x1ZGUgPGRldi9taWkvaXBncGh5cmVnLmg+CisKKyNpbmNsdWRlIDxkZXYv
 cGNpL2lmX3N0Z2VyZWcuaD4KKworc3RhdGljIGludCBpcGdwaHlfbWF0Y2goZGV2aWNlX3QsIGNm
 ZGF0YV90LCB2b2lkICopOworc3RhdGljIHZvaWQgaXBncGh5X2F0dGFjaChkZXZpY2VfdCwgZGV2
 aWNlX3QsIHZvaWQgKik7CisKK0NGQVRUQUNIX0RFQ0xfTkVXKGlwZ3BoeSwgc2l6ZW9mKHN0cnVj
 dCBtaWlfc29mdGMpLAorICAgIGlwZ3BoeV9tYXRjaCwgaXBncGh5X2F0dGFjaCwgbWlpX3BoeV9k
 ZXRhY2gsIG1paV9waHlfYWN0aXZhdGUpOworCitzdGF0aWMgaW50CWlwZ3BoeV9zZXJ2aWNlKHN0
 cnVjdCBtaWlfc29mdGMgKiwgc3RydWN0IG1paV9kYXRhICosIGludCk7CitzdGF0aWMgdm9pZAlp
 cGdwaHlfc3RhdHVzKHN0cnVjdCBtaWlfc29mdGMgKik7CitzdGF0aWMgaW50CWlwZ3BoeV9taWlf
 cGh5X2F1dG8oc3RydWN0IG1paV9zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkCWlwZ3BoeV9sb2FkX2Rz
 cGNvZGUoc3RydWN0IG1paV9zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkCWlwZ3BoeV9yZXNldChzdHJ1
 Y3QgbWlpX3NvZnRjICopOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1paV9waHlfZnVuY3MgaXBn
 cGh5X2Z1bmNzID0geworCWlwZ3BoeV9zZXJ2aWNlLCBpcGdwaHlfc3RhdHVzLCBpcGdwaHlfcmVz
 ZXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1paV9waHlkZXNjIGlwZ3BoeXNbXSA9IHsK
 KwlNSUlfUEhZX0RFU0MoeHhJQ1BMVVMsIElQMTAwMEEpLAorCU1JSV9QSFlfREVTQyh4eElDUExV
 UywgSVAxMDAxKSwKKwlNSUlfUEhZX0VORCwKK307CisKK3N0YXRpYyBpbnQKK2lwZ3BoeV9tYXRj
 aChkZXZpY2VfdCBwYXJlbnQsIGNmZGF0YV90IG1hdGNoLCB2b2lkICphdXgpCit7CisJc3RydWN0
 IG1paV9hdHRhY2hfYXJncyAqbWEgPSBhdXg7CisKKwlpZiAobWlpX3BoeV9tYXRjaChtYSwgaXBn
 cGh5cykgIT0gTlVMTCkgeworCQlyZXR1cm4gMTA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0
 aWMgdm9pZAoraXBncGh5X2F0dGFjaChkZXZpY2VfdCBwYXJlbnQsIGRldmljZV90IHNlbGYsIHZv
 aWQgKmF1eCkKK3sKKwlzdHJ1Y3QgbWlpX3NvZnRjICpzYyA9IGRldmljZV9wcml2YXRlKHNlbGYp
 OworCXN0cnVjdCBtaWlfYXR0YWNoX2FyZ3MgKm1hID0gYXV4OworCXN0cnVjdCBtaWlfZGF0YSAq
 bWlpID0gbWEtPm1paV9kYXRhOworCWNvbnN0IHN0cnVjdCBtaWlfcGh5ZGVzYyAqbXBkOworCisJ
 bXBkID0gbWlpX3BoeV9tYXRjaChtYSwgaXBncGh5cyk7CisJYXByaW50X25haXZlKCI6IE1lZGlh
 IGludGVyZmFjZVxuIik7CisJYXByaW50X25vcm1hbCgiOiAlcywgcmV2LiAlZFxuIiwgbXBkLT5t
 cGRfbmFtZSwgTUlJX1JFVihtYS0+bWlpX2lkMikpOworCisJc2MtPm1paV9kZXYgPSBzZWxmOwor
 CXNjLT5taWlfaW5zdCA9IG1paS0+bWlpX2luc3RhbmNlOworCXNjLT5taWlfcGh5ID0gbWEtPm1p
 aV9waHlubzsKKwlzYy0+bWlpX21wZF9vdWkgPSBNSUlfT1VJKG1hLT5taWlfaWQxLCBtYS0+bWlp
 X2lkMik7CisJc2MtPm1paV9tcGRfbW9kZWwgPSBNSUlfTU9ERUwobWEtPm1paV9pZDIpOworCXNj
 LT5taWlfbXBkX3JldiA9IE1JSV9SRVYobWEtPm1paV9pZDIpOworCXNjLT5taWlfZnVuY3MgPSAm
 aXBncGh5X2Z1bmNzOworCXNjLT5taWlfcGRhdGEgPSBtaWk7CisJc2MtPm1paV9mbGFncyA9IG1h
 LT5taWlfZmxhZ3M7CisKKwlzYy0+bWlpX2ZsYWdzIHw9IE1JSUZfTk9JU09MQVRFOworCXNjLT5t
 aWlfYW5lZ3RpY2tzID0gTUlJX0FORUdUSUNLU19HSUdFOworCisJUEhZX1JFU0VUKHNjKTsKKwor
 CVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJnNjLT5taWlfY2FwYWJpbGl0aWVzKTsKKwlzYy0+bWlp
 X2NhcGFiaWxpdGllcyAmPSBtYS0+bWlpX2NhcG1hc2s7CisJLy9zYy0+bWlpX2NhcGFiaWxpdGll
 cyAmPSB+Qk1TUl9BTkVHOworCWlmIChzYy0+bWlpX2NhcGFiaWxpdGllcyAmIEJNU1JfRVhUU1RB
 VCkKKwkJUEhZX1JFQUQoc2MsIE1JSV9FWFRTUiwgJnNjLT5taWlfZXh0Y2FwYWJpbGl0aWVzKTsK
 KyAKKwltaWlfcGh5X2FkZF9tZWRpYShzYyk7CisJYXByaW50X25vcm1hbCgiXG4iKTsKK30KKwor
 c3RhdGljIGludAoraXBncGh5X3NlcnZpY2Uoc3RydWN0IG1paV9zb2Z0YyAqc2MsIHN0cnVjdCBt
 aWlfZGF0YSAqbWlpLCBpbnQgY21kKQoreworCXN0cnVjdCBpZm1lZGlhX2VudHJ5ICppZmUgPSBt
 aWktPm1paV9tZWRpYS5pZm1fY3VyOworCXVpbnQxNl90IGdpZywgcmVnLCBzcGVlZDsKKworCXN3
 aXRjaCAoY21kKSB7CisJY2FzZSBNSUlfUE9MTFNUQVQ6CisJCS8qCisJCSAqIElmIHdlJ3JlIG5v
 dCBwb2xsaW5nIG91ciBQSFkgaW5zdGFuY2UsIGp1c3QgcmV0dXJuLgorCQkgKi8KKwkJaWYgKElG
 TV9JTlNUKGlmZS0+aWZtX21lZGlhKSAhPSBzYy0+bWlpX2luc3QpCisJCQlyZXR1cm4gMDsKKwkJ
 YnJlYWs7CisKKwljYXNlIE1JSV9NRURJQUNIRzoKKwkJLyoKKwkJICogSWYgdGhlIG1lZGlhIGlu
 ZGljYXRlcyBhIGRpZmZlcmVudCBQSFkgaW5zdGFuY2UsCisJCSAqIGlzb2xhdGUgb3Vyc2VsdmVz
 LgorCQkgKi8KKwkJaWYgKElGTV9JTlNUKGlmZS0+aWZtX21lZGlhKSAhPSBzYy0+bWlpX2luc3Qp
 IHsKKwkJCVBIWV9SRUFEKHNjLCBNSUlfQk1DUiwgJnJlZyk7CisJCQlQSFlfV1JJVEUoc2MsIE1J
 SV9CTUNSLCByZWcgfCBCTUNSX0lTTyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAq
 IElmIHRoZSBpbnRlcmZhY2UgaXMgbm90IHVwLCBkb24ndCBkbyBhbnl0aGluZy4KKwkJICovCisJ
 CWlmICgobWlpLT5taWlfaWZwLT5pZl9mbGFncyAmIElGRl9VUCkgPT0gMCkKKwkJCWJyZWFrOwor
 CisJCVBIWV9SRVNFVChzYyk7CisKKwkJc3dpdGNoIChJRk1fU1VCVFlQRShpZmUtPmlmbV9tZWRp
 YSkpIHsKKwkJY2FzZSBJRk1fQVVUTzoKKwkJCSh2b2lkKWlwZ3BoeV9taWlfcGh5X2F1dG8oc2Mp
 OworCQkJZ290byBkb25lOworCQkJYnJlYWs7CisKKwkJY2FzZSBJRk1fMTAwMF9UOgorCQkJLyoK
 KwkJCSAqIFhYWAorCQkJICogTWFudWFsIDEwMDBiYXNlVCBzZXR0aW5nIGRvZXNuJ3Qgc2VlbSB0
 byB3b3JrLgorCQkJICovCisJCQlzcGVlZCA9IEJNQ1JfUzEwMDA7CisJCQlicmVhazsKKworCQlj
 YXNlIElGTV8xMDBfVFg6CisJCQlzcGVlZCA9IEJNQ1JfUzEwMDsKKwkJCWJyZWFrOworCisJCWNh
 c2UgSUZNXzEwX1Q6CisJCQlzcGVlZCA9IEJNQ1JfUzEwOworCQkJYnJlYWs7CisKKwkJZGVmYXVs
 dDoKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKworCQlpZiAoKChpZmUtPmlmbV9tZWRpYSAmIElG
 TV9HTUFTSykgJiBJRk1fRkRYKSAhPSAwKSB7CisJCQlzcGVlZCB8PSBCTUNSX0ZEWDsKKwkJCWdp
 ZyA9IEdUQ1JfQURWXzEwMDBURkRYOworCQl9IGVsc2UKKwkJCWdpZyA9IEdUQ1JfQURWXzEwMDBU
 SERYOworCisJCVBIWV9XUklURShzYywgTUlJXzEwMFQyQ1IsIDApOworCQlQSFlfV1JJVEUoc2Ms
 IE1JSV9CTUNSLCBzcGVlZCk7CisKKwkJaWYgKElGTV9TVUJUWVBFKGlmZS0+aWZtX21lZGlhKSAh
 PSBJRk1fMTAwMF9UKQorCQkJYnJlYWs7CisKKwkJUEhZX1dSSVRFKHNjLCBNSUlfMTAwVDJDUiwg
 Z2lnKTsKKwkJUEhZX1dSSVRFKHNjLCBNSUlfQk1DUiwgc3BlZWQpOworCisJCWlmIChtaWktPm1p
 aV9tZWRpYS5pZm1fbWVkaWEgJiBJRk1fRVRIX01BU1RFUikKKwkJCWdpZyB8PSBHVENSX01BTl9N
 UyB8IEdUQ1JfQURWX01TOworCisJCVBIWV9XUklURShzYywgTUlJXzEwMFQyQ1IsIGdpZyk7CisK
 K2RvbmU6CisJCWJyZWFrOworCisJY2FzZSBNSUlfVElDSzoKKwkJLyoKKwkJICogSWYgd2UncmUg
 bm90IGN1cnJlbnRseSBzZWxlY3RlZCwganVzdCByZXR1cm4uCisJCSAqLworCQlpZiAoSUZNX0lO
 U1QoaWZlLT5pZm1fbWVkaWEpICE9IHNjLT5taWlfaW5zdCkKKwkJCXJldHVybiAwOworCisJCS8q
 CisJCSAqIElzIHRoZSBpbnRlcmZhY2UgZXZlbiB1cD8KKwkJICovCisJCWlmICgobWlpLT5taWlf
 aWZwLT5pZl9mbGFncyAmIElGRl9VUCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCS8qCisJCSAq
 IE9ubHkgdXNlZCBmb3IgYXV0b25lZ290aWF0aW9uLgorCQkgKi8KKwkJaWYgKElGTV9TVUJUWVBF
 KGlmZS0+aWZtX21lZGlhKSAhPSBJRk1fQVVUTykgeworCQkJc2MtPm1paV90aWNrcyA9IDA7CisJ
 CQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGxpbmsu
 ICBJZiB3ZSBkbywgd2UgZG9uJ3QKKwkJICogbmVlZCB0byByZXN0YXJ0IHRoZSBhdXRvbmVnb3Rp
 YXRpb24gcHJvY2Vzcy4gIFJlYWQKKwkJICogdGhlIEJNU1IgdHdpY2UgaW4gY2FzZSBpdCdzIGxh
 dGNoZWQuCisJCSAqLworCQlQSFlfUkVBRChzYywgTUlJX0JNU1IsICZyZWcpOworCQlQSFlfUkVB
 RChzYywgTUlJX0JNU1IsICZyZWcpOworCQlpZiAocmVnICYgQk1TUl9MSU5LKSB7CisJCQkvKgor
 CQkJICogUmVzZXQgYXV0b25lZ290aWF0aW9uIHRpbWVyIHRvIDAgaW4gY2FzZSB0aGUgbGluawor
 CQkJICogZ29lcyBkb3duIGluIHRoZSBuZXh0IHRpY2suCisJCQkgKi8KKwkJCXNjLT5taWlfdGlj
 a3MgPSAwOworCQkJLyogU2VlIGFib3ZlLiAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKiBBbm5v
 dW5jZSBsaW5rIGxvc3MgcmlnaHQgYWZ0ZXIgaXQgaGFwcGVucyAqLworCQlpZiAoc2MtPm1paV90
 aWNrcysrID09IDApCisJCQlicmVhazsKKworCQkvKgorCQkgKiBPbmx5IHJldHJ5IGF1dG9uZWdv
 dGlhdGlvbiBldmVyeSBtaWlfYW5lZ3RpY2tzIHNlY29uZHMuCisJCSAqLworCQlpZiAoc2MtPm1p
 aV90aWNrcyA8PSBzYy0+bWlpX2FuZWd0aWNrcykKKwkJCWJyZWFrOworCisJCXNjLT5taWlfdGlj
 a3MgPSAwOworCQlpcGdwaHlfbWlpX3BoeV9hdXRvKHNjKTsKKwkJYnJlYWs7CisJfQorCisJLyog
 VXBkYXRlIHRoZSBtZWRpYSBzdGF0dXMuICovCisJaXBncGh5X3N0YXR1cyhzYyk7CisKKwkvKiBD
 YWxsYmFjayBpZiBzb21ldGhpbmcgY2hhbmdlZC4gKi8KKwltaWlfcGh5X3VwZGF0ZShzYywgY21k
 KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2lwZ3BoeV9zdGF0dXMoc3RydWN0IG1p
 aV9zb2Z0YyAqc2MpCit7CisJc3RydWN0IG1paV9kYXRhICptaWkgPSBzYy0+bWlpX3BkYXRhOwor
 CXN0cnVjdCBpZm1lZGlhX2VudHJ5ICppZmUgPSBtaWktPm1paV9tZWRpYS5pZm1fY3VyOworCXVp
 bnQxNl90IGJtc3IsIGJtY3IsIHN0YXQsIGd0c3I7CisKKwltaWktPm1paV9tZWRpYV9zdGF0dXMg
 PSBJRk1fQVZBTElEOworCW1paS0+bWlpX21lZGlhX2FjdGl2ZSA9IElGTV9FVEhFUjsKKworCVBI
 WV9SRUFEKHNjLCBNSUlfQk1TUiwgJmJtc3IpOworCVBIWV9SRUFEKHNjLCBNSUlfQk1TUiwgJmJt
 c3IpOworCWlmIChibXNyICYgQk1TUl9MSU5LKSAKKwkJbWlpLT5taWlfbWVkaWFfc3RhdHVzIHw9
 IElGTV9BQ1RJVkU7CisKKwlQSFlfUkVBRChzYywgTUlJX0JNQ1IsICZibWNyKTsKKwlpZiAoYm1j
 ciAmIEJNQ1JfTE9PUCkKKwkJbWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV9MT09QOworCisJ
 aWYgKGJtY3IgJiBCTUNSX0FVVE9FTikgeworCQlpZiAoKGJtc3IgJiBCTVNSX0FDT01QKSA9PSAw
 KSB7CisJCQkvKiBFcmcsIHN0aWxsIHRyeWluZywgSSBndWVzcy4uLiAqLworCQkJbWlpLT5taWlf
 bWVkaWFfYWN0aXZlIHw9IElGTV9OT05FOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHNjLT5t
 aWlfbXBkX21vZGVsID09IE1JSV9NT0RFTF94eElDUExVU19JUDEwMDEpIHsKKwkJCVBIWV9SRUFE
 KHNjLCBJUEdQSFlfTFNSLCAmc3RhdCk7CisJCQlzd2l0Y2ggKHN0YXQgJiBJUEdQSFlfTFNSX1NQ
 RUVEX01BU0spIHsKKwkJCWNhc2UgSVBHUEhZX0xTUl9TUEVFRF8xMDoKKwkJCQltaWktPm1paV9t
 ZWRpYV9hY3RpdmUgfD0gSUZNXzEwX1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIElQR1BIWV9MU1Jf
 U1BFRURfMTAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAwX1RYOworCQkJ
 CWJyZWFrOworCQkJY2FzZSBJUEdQSFlfTFNSX1NQRUVEXzEwMDA6CisJCQkJbWlpLT5taWlfbWVk
 aWFfYWN0aXZlIHw9IElGTV8xMDAwX1Q7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1p
 aS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fTk9ORTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJ
 CWlmIChzdGF0ICYgSVBHUEhZX0xTUl9GVUxMX0RVUExFWCkKKwkJCQltaWktPm1paV9tZWRpYV9h
 Y3RpdmUgfD0gSUZNX0ZEWDsKKwkJCWVsc2UKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0g
 SUZNX0hEWDsKKwkJfSBlbHNlIHsKKwkJCVBIWV9SRUFEKHNjLCBTVEdFX1BoeUN0cmwsICZzdGF0
 KTsKKwkJCXN3aXRjaCAoUENfTGlua1NwZWVkKHN0YXQpKSB7CisJCQljYXNlIFBDX0xpbmtTcGVl
 ZF9Eb3duOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fTk9ORTsKKwkJCQlyZXR1
 cm47CisJCQljYXNlIFBDX0xpbmtTcGVlZF8xMDoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUg
 fD0gSUZNXzEwX1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFBDX0xpbmtTcGVlZF8xMDA6CisJCQkJ
 bWlpLT5taWlfbWVkaWFfYWN0aXZlIHw9IElGTV8xMDBfVFg7CisJCQkJYnJlYWs7CisJCQljYXNl
 IFBDX0xpbmtTcGVlZF8xMDAwOgorCQkJCW1paS0+bWlpX21lZGlhX2FjdGl2ZSB8PSBJRk1fMTAw
 MF9UOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUg
 fD0gSUZNX05PTkU7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlpZiAoc3RhdCAmIFBDX1BoeUR1
 cGxleFN0YXR1cykKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0ZEWDsKKwkJCWVs
 c2UKKwkJCQltaWktPm1paV9tZWRpYV9hY3RpdmUgfD0gSUZNX0hEWDsKKwkJfQorCisJCWlmICht
 aWktPm1paV9tZWRpYV9hY3RpdmUgJiBJRk1fRkRYKQorCQkJbWlpLT5taWlfbWVkaWFfYWN0aXZl
 IHw9IG1paV9waHlfZmxvd3N0YXR1cyhzYyk7CisKKwkJaWYgKElGTV9TVUJUWVBFKG1paS0+bWlp
 X21lZGlhX2FjdGl2ZSkgPT0gSUZNXzEwMDBfVCkgeworCQkJUEhZX1JFQUQoc2MsIE1JSV8xMDBU
 MlNSLCAmZ3Rzcik7CisJCQlpZiAoZ3RzciAmIEdUU1JfTVNfUkVTKQorCQkJCW1paS0+bWlpX21l
 ZGlhX2FjdGl2ZSB8PSBJRk1fRVRIX01BU1RFUjsKKwkJfQorCX0gZWxzZQorCQltaWktPm1paV9t
 ZWRpYV9hY3RpdmUgPSBpZmUtPmlmbV9tZWRpYTsKK30KKworc3RhdGljIGludAoraXBncGh5X21p
 aV9waHlfYXV0byhzdHJ1Y3QgbWlpX3NvZnRjICpzYykKK3sKKwl1aW50MTZfdCByZWcgPSAwOwor
 CisJaWYgKHNjLT5taWlfbXBkX21vZGVsID09IE1JSV9NT0RFTF94eElDUExVU19JUDEwMDEpIHsK
 KwkJUEhZX1JFQUQoc2MsIE1JSV9BTkFSLCAmcmVnKTsKKwkJcmVnICY9IH4oQU5BUl9QQVVTRV9T
 WU0gfCBBTkFSX1BBVVNFX0FTWU0pOworCQlyZWcgfD0gQU5BUl9OUDsKKwl9CisKKwlyZWcgfD0g
 QU5BUl8xMCB8IEFOQVJfMTBfRkQgfCBBTkFSX1RYIHwgQU5BUl9UWF9GRDsKKworCWlmIChzYy0+
 bWlpX2ZsYWdzICYgTUlJRl9ET1BBVVNFKQorCQlyZWcgfD0gQU5BUl9QQVVTRV9TWU0gfCBBTkFS
 X1BBVVNFX0FTWU07CisKKwlQSFlfV1JJVEUoc2MsIE1JSV9BTkFSLCByZWcgfCBBTkFSX0NTTUEp
 OworCisJcmVnID0gR1RDUl9BRFZfMTAwMFRGRFggfCBHVENSX0FEVl8xMDAwVEhEWDsKKwlpZiAo
 c2MtPm1paV9tcGRfbW9kZWwgIT0gTUlJX01PREVMX3h4SUNQTFVTX0lQMTAwMSkKKwkJcmVnIHw9
 IEdUQ1JfQURWX01TOworCVBIWV9XUklURShzYywgTUlJXzEwMFQyQ1IsIHJlZyk7CisKKwlQSFlf
 V1JJVEUoc2MsIE1JSV9CTUNSLCBCTUNSX0ZEWCB8IEJNQ1JfQVVUT0VOIHwgQk1DUl9TVEFSVE5F
 Ryk7CisKKwlyZXR1cm4gRUpVU1RSRVRVUk47Cit9CisKK3N0YXRpYyB2b2lkCitpcGdwaHlfbG9h
 ZF9kc3Bjb2RlKHN0cnVjdCBtaWlfc29mdGMgKnNjKQoreworCVBIWV9XUklURShzYywgMzEsIDB4
 MDAwMSk7CisJUEhZX1dSSVRFKHNjLCAyNywgMHgwMWUwKTsKKwlQSFlfV1JJVEUoc2MsIDMxLCAw
 eDAwMDIpOworCVBIWV9XUklURShzYywgMjcsIDB4ZWI4ZSk7CisJUEhZX1dSSVRFKHNjLCAzMSwg
 MHgwMDAwKTsKKwlQSFlfV1JJVEUoc2MsIDMwLCAweDAwNWUpOworCVBIWV9XUklURShzYywgOSwg
 MHgwNzAwKTsKKworCURFTEFZKDUwKTsKK30KKworc3RhdGljIHZvaWQKK2lwZ3BoeV9yZXNldChz
 dHJ1Y3QgbWlpX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5taWlfcGRh
 dGEtPm1paV9pZnA7CisJdWludDE2X3QgcmVnOworCisJbWlpX3BoeV9yZXNldChzYyk7CisKKwkv
 KiBjbGVhciBhdXRvbmVnL2Z1bGwtZHVwbGV4IGFzIHdlIGRvbid0IHdhbnQgaXQgYWZ0ZXIgcmVz
 ZXQgKi8KKwlQSFlfUkVBRChzYywgTUlJX0JNQ1IsICZyZWcpOworCXJlZyAmPSB+KEJNQ1JfQVVU
 T0VOIHwgQk1DUl9GRFgpOworCVBIWV9XUklURShzYywgTUlJX0JNQ1IsIHJlZyk7CisKKwlpZiAo
 c2MtPm1paV9tcGRfbW9kZWwgPT0gTUlJX01PREVMX3h4SUNQTFVTX0lQMTAwMEEgJiYKKwkgICAg
 c3RyY21wKGlmcC0+aWZfeG5hbWUsICJzdGdlIikgPT0gMCkgeworCQlzdHJ1Y3Qgc3RnZV9zb2Z0
 YyAqc3RnZV9zYyA9IGlmcC0+aWZfc29mdGM7CisJCWlmIChzdGdlX3NjLT5zY19yZXYgPj0gMHg0
 MCAmJiBzdGdlX3NjLT5zY19yZXYgPD0gMHg0ZSkKKwkJCWlwZ3BoeV9sb2FkX2RzcGNvZGUoc2Mp
 OworCX0KK30KZGlmZiAtLWdpdCBhL3N5cy9kZXYvbWlpL2lwZ3BoeXJlZy5oIGIvc3lzL2Rldi9t
 aWkvaXBncGh5cmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNl
 ZjE0NWYzNmFkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2Rldi9taWkvaXBncGh5cmVnLmgKQEAg
 LTAsMCArMSw4MyBAQAorLyoJJE9wZW5CU0Q6IGlwZ3BoeXJlZy5oLHYgMS4zIDIwMTUvMDcvMTkg
 MDY6Mjg6MTIgeXVvIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA2LCBQeXVu
 IFlvbmdIeWVvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAKKyAq
 IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
 b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
 dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OiAgICAgICAgICAgICAKKyAqIDEu
 IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
 eXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMs
 IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLiAgCisgKiAyLiBSZWRpc3RyaWJ1
 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
 ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
 aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
 YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
 IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
 CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
 VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
 VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
 RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
 RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
 UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
 SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
 UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
 TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
 VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
 RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
 VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
 SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfREVWX01JSV9JUEdQ
 SFlSRUdfSF8KKyNkZWZpbmUgX0RFVl9NSUlfSVBHUEhZUkVHX0hfCisKKy8qCisgKiBSZWdpc3Rl
 cnMgZm9yIHRoZSBJQyBQbHVzIElQR0EgaW50ZXJuYWwgUEhZLgorICovCisKKy8qIFBIWSBzcGVj
 aWZpYyBjb250cm9sICYgc3RhdHVzIHJlZ2lzdGVyLiBJUDEwMDEgb25seS4gKi8KKyNkZWZpbmUg
 SVBHUEhZX1NDU1IJCQkweDEwCisjZGVmaW5lIElQR1BIWV9TQ1NSX1JYUEhBU0VfU0VMCTB4MDAw
 MQorI2RlZmluZSBJUEdQSFlfU0NTUl9UWFBIQVNFX1NFTAkweDAwMDIKKyNkZWZpbmUgSVBHUEhZ
 X1NDU1JfUkVQRUFUT1JfTU9ERQkweDAwMDQKKyNkZWZpbmUgSVBHUEhZX1NDU1JfUkVTRVJWRUQx
 X0RFRgkweDAwMDgKKyNkZWZpbmUgSVBHUEhZX1NDU1JfUlhDTEtfRFJWX01BU0sJMHgwMDYwCisj
 ZGVmaW5lIElQR1BIWV9TQ1NSX1JYQ0xLX0RSVl9ERUYJMHgwMDQwCisjZGVmaW5lIElQR1BIWV9T
 Q1NSX1JYRF9EUlZfTUFTSwkweDAxODAKKyNkZWZpbmUgSVBHUEhZX1NDU1JfUlhEX0RSVl9ERUYJ
 MHgwMTAwCisjZGVmaW5lIElQR1BIWV9TQ1NSX0pBQkJFUl9FTkIJMHgwMjAwCisjZGVmaW5lIElQ
 R1BIWV9TQ1NSX0hFQVJUX0JFQVRfRU5CCTB4MDQwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9ET1dO
 U0hJRlRfRU5CCTB4MDgwMAorI2RlZmluZSBJUEdQSFlfU0NTUl9SRVNFUlZFRDJfREVGCTB4MTAw
 MAorI2RlZmluZSBJUEdQSFlfU0NTUl9MRURfRFJWXzRNQQkweDAwMDAKKyNkZWZpbmUgSVBHUEhZ
 X1NDU1JfTEVEX0RSVl84TUEJMHgyMDAwCisjZGVmaW5lIElQR1BIWV9TQ1NSX0xFRF9NT0RFX01B
 U0sJMHhDMDAwCisjZGVmaW5lIElQR1BIWV9TQ1NSX0xFRF9NT0RFX0RFRgkweDAwMDAKKworLyog
 UEhZIGxpbmsgc3RhdHVzIHJlZ2lzdGVyLiBJUDEwMDEgb25seS4gKi8KKyNkZWZpbmUgSVBHUEhZ
 X0xTUgkJCTB4MTEKKyNkZWZpbmUgSVBHUEhZX0xTUl9KQUJCRVJfREVUCTB4MDIwMAorI2RlZmlu
 ZSBJUEdQSFlfTFNSX0FQU19TTEVFUAkJMHgwNDAwCisjZGVmaW5lIElQR1BIWV9MU1JfTURJWAkJ
 MHgwODAwCisjZGVmaW5lIElQR1BIWV9MU1JfRlVMTF9EVVBMRVgJMHgxMDAwCisjZGVmaW5lIElQ
 R1BIWV9MU1JfU1BFRURfMTAJCTB4MDAwMAorI2RlZmluZSBJUEdQSFlfTFNSX1NQRUVEXzEwMAkJ
 MHgyMDAwCisjZGVmaW5lIElQR1BIWV9MU1JfU1BFRURfMTAwMAkweDQwMDAKKyNkZWZpbmUgSVBH
 UEhZX0xTUl9TUEVFRF9NQVNLCTB4NjAwMAorI2RlZmluZSBJUEdQSFlfTFNSX0xJTktVUAkJMHg4
 MDAwCisKKy8qIFBIWSBzcGVjaWZpYyBjb250cm9sIHJlZ2lzdGVyIDIuIElQMTAwMSBvbmx5LiAq
 LworI2RlZmluZSBJUEdQSFlfU0NSCisjZGVmaW5lIElQR1BIWV9TQ1JfU0VXX1JBVEVfTUFTSwkw
 eDAwMDMKKyNkZWZpbmUgSVBHUEhZX1NDUl9TRVdfUkFURV9ERUYJMHgwMDAzCisjZGVmaW5lIElQ
 R1BIWV9TQ1JfQVVUT19YT1ZFUgkweDAwMDQKKyNkZWZpbmUgSVBHUEhZX1NDUl9TUEVFRF8xMF8x
 MDBfRU5CCTB4MDA0MAorI2RlZmluZSBJUEdQSFlfU0NSX0ZJRk9fTEFURU5DWV8yCTB4MDAwMAor
 I2RlZmluZSBJUEdQSFlfU0NSX0ZJRk9fTEFURU5DWV8zCTB4MDA4MAorI2RlZmluZSBJUEdQSFlf
 U0NSX0ZJRk9fTEFURU5DWV80CTB4MDEwMAorI2RlZmluZSBJUEdQSFlfU0NSX0ZJRk9fTEFURU5D
 WV81CTB4MDE4MAorI2RlZmluZSBJUEdQSFlfU0NSX01ESVhfRU5CCQkweDAyMDAKKyNkZWZpbmUg
 SVBHUEhZX1NDUl9SRVNFUlZFRF9ERUYJMHgwNDAwCisjZGVmaW5lIElQR1BIWV9TQ1JfQVBTX09O
 CQkweDA4MDAKKworI2VuZGlmIC8qIF9ERVZfTUlJX0lQR1BIWVJFR19IXyAqLwpkaWZmIC0tZ2l0
 IGEvc3lzL2Rldi9wY2kvaWZfc3RnZS5jIGIvc3lzL2Rldi9wY2kvaWZfc3RnZS5jCmluZGV4IDdj
 N2RmY2YzZjZkLi5hNjM1M2MyODdlMyAxMDA2NDQKLS0tIGEvc3lzL2Rldi9wY2kvaWZfc3RnZS5j
 CisrKyBiL3N5cy9kZXYvcGNpL2lmX3N0Z2UuYwpAQCAtNzYsMTM1ICs3NiwxMCBAQCBfX0tFUk5F
 TF9SQ1NJRCgwLCAiJE5ldEJTRDogaWZfc3RnZS5jLHYgMS43MCAyMDE5LzA3LzA5IDA4OjQ2OjU5
 IG1zYWl0b2ggRXhwICQiKQogI2RlZmluZQlTVEdFX1ZMQU5fVU5UQUcJCQkxCiAvKiAjZGVmaW5l
 CVNUR0VfVkxBTl9DRkkJCTEgKi8KIAotLyoKLSAqIFRyYW5zbWl0IGRlc2NyaXB0b3IgbGlzdCBz
 aXplLgotICovCi0jZGVmaW5lCVNUR0VfTlRYREVTQwkJMjU2Ci0jZGVmaW5lCVNUR0VfTlRYREVT
 Q19NQVNLCShTVEdFX05UWERFU0MgLSAxKQotI2RlZmluZQlTVEdFX05FWFRUWCh4KQkJKCgoeCkg
 KyAxKSAmIFNUR0VfTlRYREVTQ19NQVNLKQotCi0vKgotICogUmVjZWl2ZSBkZXNjcmlwdG9yIGxp
 c3Qgc2l6ZS4KLSAqLwotI2RlZmluZQlTVEdFX05SWERFU0MJCTI1NgotI2RlZmluZQlTVEdFX05S
 WERFU0NfTUFTSwkoU1RHRV9OUlhERVNDIC0gMSkKLSNkZWZpbmUJU1RHRV9ORVhUUlgoeCkJCSgo
 KHgpICsgMSkgJiBTVEdFX05SWERFU0NfTUFTSykKLQotLyoKLSAqIE9ubHkgaW50ZXJydXB0IGV2
 ZXJ5IE4gZnJhbWVzLiAgTXVzdCBiZSBhIHBvd2VyLW9mLXR3by4KLSAqLwotI2RlZmluZQlTVEdF
 X1RYSU5UUl9TUEFDSU5HCTE2Ci0jZGVmaW5lCVNUR0VfVFhJTlRSX1NQQUNJTkdfTUFTSyAoU1RH
 RV9UWElOVFJfU1BBQ0lORyAtIDEpCi0KLS8qCi0gKiBDb250cm9sIHN0cnVjdHVyZXMgYXJlIERN
 QSdkIHRvIHRoZSBUQzkwMjEgY2hpcC4gIFdlIGFsbG9jYXRlIHRoZW0gaW4KLSAqIGEgc2luZ2xl
 IGNsdW1wIHRoYXQgbWFwcyB0byBhIHNpbmdsZSBETUEgc2VnbWVudCB0byBtYWtlIHNldmVyYWwg
 dGhpbmdzCi0gKiBlYXNpZXIuCi0gKi8KLXN0cnVjdCBzdGdlX2NvbnRyb2xfZGF0YSB7Ci0JLyoK
 LQkgKiBUaGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMuCi0JICovCi0Jc3RydWN0IHN0Z2VfdGZkIHNj
 ZF90eGRlc2NzW1NUR0VfTlRYREVTQ107Ci0KLQkvKgotCSAqIFRoZSByZWNlaXZlIGRlc2NyaXB0
 b3JzLgotCSAqLwotCXN0cnVjdCBzdGdlX3JmZCBzY2RfcnhkZXNjc1tTVEdFX05SWERFU0NdOwot
 fTsKLQogI2RlZmluZQlTVEdFX0NET0ZGKHgpCW9mZnNldG9mKHN0cnVjdCBzdGdlX2NvbnRyb2xf
 ZGF0YSwgeCkKICNkZWZpbmUJU1RHRV9DRFRYT0ZGKHgpCVNUR0VfQ0RPRkYoc2NkX3R4ZGVzY3Nb
 KHgpXSkKICNkZWZpbmUJU1RHRV9DRFJYT0ZGKHgpCVNUR0VfQ0RPRkYoc2NkX3J4ZGVzY3NbKHgp
 XSkKIAotLyoKLSAqIFNvZnR3YXJlIHN0YXRlIGZvciB0cmFuc21pdCBhbmQgcmVjZWl2ZSBqb2Jz
 LgotICovCi1zdHJ1Y3Qgc3RnZV9kZXNjc29mdCB7Ci0Jc3RydWN0IG1idWYgKmRzX21idWY7CQkv
 KiBoZWFkIG9mIG91ciBtYnVmIGNoYWluICovCi0JYnVzX2RtYW1hcF90IGRzX2RtYW1hcDsJCS8q
 IG91ciBETUEgbWFwICovCi19OwotCi0vKgotICogU29mdHdhcmUgc3RhdGUgcGVyIGRldmljZS4K
 LSAqLwotc3RydWN0IHN0Z2Vfc29mdGMgewotCWRldmljZV90IHNjX2RldjsJCS8qIGdlbmVyaWMg
 ZGV2aWNlIGluZm9ybWF0aW9uICovCi0JYnVzX3NwYWNlX3RhZ190IHNjX3N0OwkJLyogYnVzIHNw
 YWNlIHRhZyAqLwotCWJ1c19zcGFjZV9oYW5kbGVfdCBzY19zaDsJLyogYnVzIHNwYWNlIGhhbmRs
 ZSAqLwotCWJ1c19kbWFfdGFnX3Qgc2NfZG1hdDsJCS8qIGJ1cyBETUEgdGFnICovCi0Jc3RydWN0
 IGV0aGVyY29tIHNjX2V0aGVyY29tOwkvKiBldGhlcm5ldCBjb21tb24gZGF0YSAqLwotCWludCBz
 Y19yZXY7CQkJLyogc2lsaWNvbiByZXZpc2lvbiAqLwotCi0Jdm9pZCAqc2NfaWg7CQkJLyogaW50
 ZXJydXB0IGNvb2tpZSAqLwotCi0Jc3RydWN0IG1paV9kYXRhIHNjX21paTsJCS8qIE1JSS9tZWRp
 YSBpbmZvcm1hdGlvbiAqLwotCi0JY2FsbG91dF90IHNjX3RpY2tfY2g7CQkvKiB0aWNrIGNhbGxv
 dXQgKi8KLQotCWJ1c19kbWFtYXBfdCBzY19jZGRtYW1hcDsJLyogY29udHJvbCBkYXRhIERNQSBt
 YXAgKi8KLSNkZWZpbmUJc2NfY2RkbWEJc2NfY2RkbWFtYXAtPmRtX3NlZ3NbMF0uZHNfYWRkcgot
 Ci0JLyoKLQkgKiBTb2Z0d2FyZSBzdGF0ZSBmb3IgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZGVzY3Jp
 cHRvcnMuCi0JICovCi0Jc3RydWN0IHN0Z2VfZGVzY3NvZnQgc2NfdHhzb2Z0W1NUR0VfTlRYREVT
 Q107Ci0Jc3RydWN0IHN0Z2VfZGVzY3NvZnQgc2Nfcnhzb2Z0W1NUR0VfTlJYREVTQ107Ci0KLQkv
 KgotCSAqIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmVzLgotCSAqLwotCXN0cnVjdCBzdGdlX2NvbnRy
 b2xfZGF0YSAqc2NfY29udHJvbF9kYXRhOwotI2RlZmluZQlzY190eGRlc2NzCXNjX2NvbnRyb2xf
 ZGF0YS0+c2NkX3R4ZGVzY3MKLSNkZWZpbmUJc2NfcnhkZXNjcwlzY19jb250cm9sX2RhdGEtPnNj
 ZF9yeGRlc2NzCi0KLSNpZmRlZiBTVEdFX0VWRU5UX0NPVU5URVJTCi0JLyoKLQkgKiBFdmVudCBj
 b3VudGVycy4KLQkgKi8KLQlzdHJ1Y3QgZXZjbnQgc2NfZXZfdHhzdGFsbDsJLyogVHggc3RhbGxl
 ZCAqLwotCXN0cnVjdCBldmNudCBzY19ldl90eGRtYWludHI7CS8qIFR4IERNQSBpbnRlcnJ1cHRz
 ICovCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4aW5kaW50cjsJLyogVHggSW5kaWNhdGUgaW50ZXJy
 dXB0cyAqLwotCXN0cnVjdCBldmNudCBzY19ldl9yeGludHI7CS8qIFJ4IGludGVycnVwdHMgKi8K
 LQotCXN0cnVjdCBldmNudCBzY19ldl90eHNlZzE7CS8qIFR4IHBhY2tldHMgdy8gMSBzZWdtZW50
 ICovCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnMjsJLyogVHggcGFja2V0cyB3LyAyIHNlZ21l
 bnRzICovCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnMzsJLyogVHggcGFja2V0cyB3LyAzIHNl
 Z21lbnRzICovCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnNDsJLyogVHggcGFja2V0cyB3LyA0
 IHNlZ21lbnRzICovCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnNTsJLyogVHggcGFja2V0cyB3
 LyA1IHNlZ21lbnRzICovCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnbW9yZTsJLyogVHggcGFj
 a2V0cyB3LyBtb3JlIHRoYW4gNSBzZWdtZW50cyAqLwotCXN0cnVjdCBldmNudCBzY19ldl90eGNv
 cHk7CS8qIFR4IHBhY2tldHMgdGhhdCB3ZSBoYWQgdG8gY29weSAqLwotCi0Jc3RydWN0IGV2Y250
 IHNjX2V2X3J4aXBzdW07CS8qIElQIGNoZWNrc3VtcyBjaGVja2VkIGluLWJvdW5kICovCi0Jc3Ry
 dWN0IGV2Y250IHNjX2V2X3J4dGNwc3VtOwkvKiBUQ1AgY2hlY2tzdW1zIGNoZWNrZWQgaW4tYm91
 bmQgKi8KLQlzdHJ1Y3QgZXZjbnQgc2NfZXZfcnh1ZHBzdW07CS8qIFVEUCBjaGVja3N1bXMgY2hl
 Y2tlZCBpbi1ib3VuZCAqLwotCi0Jc3RydWN0IGV2Y250IHNjX2V2X3R4aXBzdW07CS8qIElQIGNo
 ZWNrc3VtcyBjb21wLiBvdXQtYm91bmQgKi8KLQlzdHJ1Y3QgZXZjbnQgc2NfZXZfdHh0Y3BzdW07
 CS8qIFRDUCBjaGVja3N1bXMgY29tcC4gb3V0LWJvdW5kICovCi0Jc3RydWN0IGV2Y250IHNjX2V2
 X3R4dWRwc3VtOwkvKiBVRFAgY2hlY2tzdW1zIGNvbXAuIG91dC1ib3VuZCAqLwotI2VuZGlmIC8q
 IFNUR0VfRVZFTlRfQ09VTlRFUlMgKi8KLQotCWludAlzY190eHBlbmRpbmc7CQkvKiBudW1iZXIg
 b2YgVHggcmVxdWVzdHMgcGVuZGluZyAqLwotCWludAlzY190eGRpcnR5OwkJLyogZmlyc3QgZGly
 dHkgVHggZGVzY3JpcHRvciAqLwotCWludAlzY190eGxhc3Q7CQkvKiBsYXN0IHVzZWQgVHggZGVz
 Y3JpcHRvciAqLwotCi0JaW50CXNjX3J4cHRyOwkJLyogbmV4dCByZWFkeSBSeCBkZXNjcmlwdG9y
 L2Rlc2Nzb2Z0ICovCi0JaW50CXNjX3J4ZGlzY2FyZDsKLQlpbnQJc2NfcnhsZW47Ci0Jc3RydWN0
 IG1idWYgKnNjX3J4aGVhZDsKLQlzdHJ1Y3QgbWJ1ZiAqc2Nfcnh0YWlsOwotCXN0cnVjdCBtYnVm
 ICoqc2Nfcnh0YWlscDsKLQotCWludAlzY190eHRocmVzaDsJCS8qIFR4IHRocmVzaG9sZCAqLwot
 CXVpbnQzMl90IHNjX3VzZWZpYmVyOjE7CQkvKiBpZiB3ZSdyZSBmaWJlciAqLwotCXVpbnQzMl90
 IHNjX3N0Z2UxMDIzOjE7CQkvKiBhcmUgd2UgYSAxMDIzICovCi0JdWludDMyX3Qgc2NfRE1BQ3Ry
 bDsJCS8qIHByb3RvdHlwZSBETUFDdHJsIHJlZ2lzdGVyICovCi0JdWludDMyX3Qgc2NfTUFDQ3Ry
 bDsJCS8qIHByb3RvdHlwZSBNYWNDdHJsIHJlZ2lzdGVyICovCi0JdWludDE2X3Qgc2NfSW50RW5h
 YmxlOwkJLyogcHJvdG90eXBlIEludEVuYWJsZSByZWdpc3RlciAqLwotCXVpbnQxNl90IHNjX1Jl
 Y2VpdmVNb2RlOwkvKiBwcm90b3R5cGUgUmVjZWl2ZU1vZGUgcmVnaXN0ZXIgKi8KLQl1aW50OF90
 IHNjX1BoeUN0cmw7CQkvKiBwcm90b3R5cGUgUGh5Q3RybCByZWdpc3RlciAqLwotfTsKLQogI2Rl
 ZmluZQlTVEdFX1JYQ0hBSU5fUkVTRVQoc2MpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAkoc2Mp
 LT5zY19yeHRhaWxwID0gJihzYyktPnNjX3J4aGVhZDsJCQkJXApkaWZmIC0tZ2l0IGEvc3lzL2Rl
 di9wY2kvaWZfc3RnZXJlZy5oIGIvc3lzL2Rldi9wY2kvaWZfc3RnZXJlZy5oCmluZGV4IGFiYjNj
 YjJkOTBjLi5hY2UwOTM1NmI5OCAxMDA2NDQKLS0tIGEvc3lzL2Rldi9wY2kvaWZfc3RnZXJlZy5o
 CisrKyBiL3N5cy9kZXYvcGNpL2lmX3N0Z2VyZWcuaApAQCAtMzIsNiArMzIsMTAgQEAKICNpZm5k
 ZWYgX0RFVl9QQ0lfSUZfU1RHRVJFR19IXwogI2RlZmluZQlfREVWX1BDSV9JRl9TVEdFUkVHX0hf
 CiAKKworI2luY2x1ZGUgPG5ldC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKwog
 LyoKICAqIFJlZ2lzdGVyIGRlc2NyaXB0aW9uIGZvciB0aGUgU3VuZGFuY2UgVGVjaC4gVEM5MDIx
 IDEwLzEwMC8xMDAwCiAgKiBFdGhlcm5ldCBjb250cm9sbGVyLgpAQCAtNDQ5LDQgKzQ1MywxMjkg
 QEAgc3RydWN0IHN0Z2VfcmZkIHsKIAogI2RlZmluZQlTVEdFX0V0aGVyU3RhdHNQa3RzMTAyNHRv
 MTUxOE9jdGV0cwkJMHgxNTAKIAorLyoKKyAqIFRyYW5zbWl0IGRlc2NyaXB0b3IgbGlzdCBzaXpl
 LgorICovCisjZGVmaW5lCVNUR0VfTlRYREVTQwkJMjU2CisjZGVmaW5lCVNUR0VfTlRYREVTQ19N
 QVNLCShTVEdFX05UWERFU0MgLSAxKQorI2RlZmluZQlTVEdFX05FWFRUWCh4KQkJKCgoeCkgKyAx
 KSAmIFNUR0VfTlRYREVTQ19NQVNLKQorCisvKgorICogUmVjZWl2ZSBkZXNjcmlwdG9yIGxpc3Qg
 c2l6ZS4KKyAqLworI2RlZmluZQlTVEdFX05SWERFU0MJCTI1NgorI2RlZmluZQlTVEdFX05SWERF
 U0NfTUFTSwkoU1RHRV9OUlhERVNDIC0gMSkKKyNkZWZpbmUJU1RHRV9ORVhUUlgoeCkJCSgoKHgp
 ICsgMSkgJiBTVEdFX05SWERFU0NfTUFTSykKKworLyoKKyAqIE9ubHkgaW50ZXJydXB0IGV2ZXJ5
 IE4gZnJhbWVzLiAgTXVzdCBiZSBhIHBvd2VyLW9mLXR3by4KKyAqLworI2RlZmluZQlTVEdFX1RY
 SU5UUl9TUEFDSU5HCTE2CisjZGVmaW5lCVNUR0VfVFhJTlRSX1NQQUNJTkdfTUFTSyAoU1RHRV9U
 WElOVFJfU1BBQ0lORyAtIDEpCisKKy8qCisgKiBDb250cm9sIHN0cnVjdHVyZXMgYXJlIERNQSdk
 IHRvIHRoZSBUQzkwMjEgY2hpcC4gIFdlIGFsbG9jYXRlIHRoZW0gaW4KKyAqIGEgc2luZ2xlIGNs
 dW1wIHRoYXQgbWFwcyB0byBhIHNpbmdsZSBETUEgc2VnbWVudCB0byBtYWtlIHNldmVyYWwgdGhp
 bmdzCisgKiBlYXNpZXIuCisgKi8KK3N0cnVjdCBzdGdlX2NvbnRyb2xfZGF0YSB7CisJLyoKKwkg
 KiBUaGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMuCisJICovCisJc3RydWN0IHN0Z2VfdGZkIHNjZF90
 eGRlc2NzW1NUR0VfTlRYREVTQ107CisKKwkvKgorCSAqIFRoZSByZWNlaXZlIGRlc2NyaXB0b3Jz
 LgorCSAqLworCXN0cnVjdCBzdGdlX3JmZCBzY2RfcnhkZXNjc1tTVEdFX05SWERFU0NdOworfTsK
 KworLyoKKyAqIFNvZnR3YXJlIHN0YXRlIGZvciB0cmFuc21pdCBhbmQgcmVjZWl2ZSBqb2JzLgor
 ICovCitzdHJ1Y3Qgc3RnZV9kZXNjc29mdCB7CisJc3RydWN0IG1idWYgKmRzX21idWY7CQkvKiBo
 ZWFkIG9mIG91ciBtYnVmIGNoYWluICovCisJYnVzX2RtYW1hcF90IGRzX2RtYW1hcDsJCS8qIG91
 ciBETUEgbWFwICovCit9OworCisvKgorICogU29mdHdhcmUgc3RhdGUgcGVyIGRldmljZS4KKyAq
 Lworc3RydWN0IHN0Z2Vfc29mdGMgeworCWRldmljZV90IHNjX2RldjsJCS8qIGdlbmVyaWMgZGV2
 aWNlIGluZm9ybWF0aW9uICovCisJYnVzX3NwYWNlX3RhZ190IHNjX3N0OwkJLyogYnVzIHNwYWNl
 IHRhZyAqLworCWJ1c19zcGFjZV9oYW5kbGVfdCBzY19zaDsJLyogYnVzIHNwYWNlIGhhbmRsZSAq
 LworCWJ1c19kbWFfdGFnX3Qgc2NfZG1hdDsJCS8qIGJ1cyBETUEgdGFnICovCisJc3RydWN0IGV0
 aGVyY29tIHNjX2V0aGVyY29tOwkvKiBldGhlcm5ldCBjb21tb24gZGF0YSAqLworCWludCBzY19y
 ZXY7CQkJLyogc2lsaWNvbiByZXZpc2lvbiAqLworCisJdm9pZCAqc2NfaWg7CQkJLyogaW50ZXJy
 dXB0IGNvb2tpZSAqLworCisJc3RydWN0IG1paV9kYXRhIHNjX21paTsJCS8qIE1JSS9tZWRpYSBp
 bmZvcm1hdGlvbiAqLworCisJY2FsbG91dF90IHNjX3RpY2tfY2g7CQkvKiB0aWNrIGNhbGxvdXQg
 Ki8KKworCWJ1c19kbWFtYXBfdCBzY19jZGRtYW1hcDsJLyogY29udHJvbCBkYXRhIERNQSBtYXAg
 Ki8KKyNkZWZpbmUJc2NfY2RkbWEJc2NfY2RkbWFtYXAtPmRtX3NlZ3NbMF0uZHNfYWRkcgorCisJ
 LyoKKwkgKiBTb2Z0d2FyZSBzdGF0ZSBmb3IgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZGVzY3JpcHRv
 cnMuCisJICovCisJc3RydWN0IHN0Z2VfZGVzY3NvZnQgc2NfdHhzb2Z0W1NUR0VfTlRYREVTQ107
 CisJc3RydWN0IHN0Z2VfZGVzY3NvZnQgc2Nfcnhzb2Z0W1NUR0VfTlJYREVTQ107CisKKwkvKgor
 CSAqIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmVzLgorCSAqLworCXN0cnVjdCBzdGdlX2NvbnRyb2xf
 ZGF0YSAqc2NfY29udHJvbF9kYXRhOworI2RlZmluZQlzY190eGRlc2NzCXNjX2NvbnRyb2xfZGF0
 YS0+c2NkX3R4ZGVzY3MKKyNkZWZpbmUJc2NfcnhkZXNjcwlzY19jb250cm9sX2RhdGEtPnNjZF9y
 eGRlc2NzCisKKyNpZmRlZiBTVEdFX0VWRU5UX0NPVU5URVJTCisJLyoKKwkgKiBFdmVudCBjb3Vu
 dGVycy4KKwkgKi8KKwlzdHJ1Y3QgZXZjbnQgc2NfZXZfdHhzdGFsbDsJLyogVHggc3RhbGxlZCAq
 LworCXN0cnVjdCBldmNudCBzY19ldl90eGRtYWludHI7CS8qIFR4IERNQSBpbnRlcnJ1cHRzICov
 CisJc3RydWN0IGV2Y250IHNjX2V2X3R4aW5kaW50cjsJLyogVHggSW5kaWNhdGUgaW50ZXJydXB0
 cyAqLworCXN0cnVjdCBldmNudCBzY19ldl9yeGludHI7CS8qIFJ4IGludGVycnVwdHMgKi8KKwor
 CXN0cnVjdCBldmNudCBzY19ldl90eHNlZzE7CS8qIFR4IHBhY2tldHMgdy8gMSBzZWdtZW50ICov
 CisJc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnMjsJLyogVHggcGFja2V0cyB3LyAyIHNlZ21lbnRz
 ICovCisJc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnMzsJLyogVHggcGFja2V0cyB3LyAzIHNlZ21l
 bnRzICovCisJc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnNDsJLyogVHggcGFja2V0cyB3LyA0IHNl
 Z21lbnRzICovCisJc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnNTsJLyogVHggcGFja2V0cyB3LyA1
 IHNlZ21lbnRzICovCisJc3RydWN0IGV2Y250IHNjX2V2X3R4c2VnbW9yZTsJLyogVHggcGFja2V0
 cyB3LyBtb3JlIHRoYW4gNSBzZWdtZW50cyAqLworCXN0cnVjdCBldmNudCBzY19ldl90eGNvcHk7
 CS8qIFR4IHBhY2tldHMgdGhhdCB3ZSBoYWQgdG8gY29weSAqLworCisJc3RydWN0IGV2Y250IHNj
 X2V2X3J4aXBzdW07CS8qIElQIGNoZWNrc3VtcyBjaGVja2VkIGluLWJvdW5kICovCisJc3RydWN0
 IGV2Y250IHNjX2V2X3J4dGNwc3VtOwkvKiBUQ1AgY2hlY2tzdW1zIGNoZWNrZWQgaW4tYm91bmQg
 Ki8KKwlzdHJ1Y3QgZXZjbnQgc2NfZXZfcnh1ZHBzdW07CS8qIFVEUCBjaGVja3N1bXMgY2hlY2tl
 ZCBpbi1ib3VuZCAqLworCisJc3RydWN0IGV2Y250IHNjX2V2X3R4aXBzdW07CS8qIElQIGNoZWNr
 c3VtcyBjb21wLiBvdXQtYm91bmQgKi8KKwlzdHJ1Y3QgZXZjbnQgc2NfZXZfdHh0Y3BzdW07CS8q
 IFRDUCBjaGVja3N1bXMgY29tcC4gb3V0LWJvdW5kICovCisJc3RydWN0IGV2Y250IHNjX2V2X3R4
 dWRwc3VtOwkvKiBVRFAgY2hlY2tzdW1zIGNvbXAuIG91dC1ib3VuZCAqLworI2VuZGlmIC8qIFNU
 R0VfRVZFTlRfQ09VTlRFUlMgKi8KKworCWludAlzY190eHBlbmRpbmc7CQkvKiBudW1iZXIgb2Yg
 VHggcmVxdWVzdHMgcGVuZGluZyAqLworCWludAlzY190eGRpcnR5OwkJLyogZmlyc3QgZGlydHkg
 VHggZGVzY3JpcHRvciAqLworCWludAlzY190eGxhc3Q7CQkvKiBsYXN0IHVzZWQgVHggZGVzY3Jp
 cHRvciAqLworCisJaW50CXNjX3J4cHRyOwkJLyogbmV4dCByZWFkeSBSeCBkZXNjcmlwdG9yL2Rl
 c2Nzb2Z0ICovCisJaW50CXNjX3J4ZGlzY2FyZDsKKwlpbnQJc2NfcnhsZW47CisJc3RydWN0IG1i
 dWYgKnNjX3J4aGVhZDsKKwlzdHJ1Y3QgbWJ1ZiAqc2Nfcnh0YWlsOworCXN0cnVjdCBtYnVmICoq
 c2Nfcnh0YWlscDsKKworCWludAlzY190eHRocmVzaDsJCS8qIFR4IHRocmVzaG9sZCAqLworCXVp
 bnQzMl90IHNjX3VzZWZpYmVyOjE7CQkvKiBpZiB3ZSdyZSBmaWJlciAqLworCXVpbnQzMl90IHNj
 X3N0Z2UxMDIzOjE7CQkvKiBhcmUgd2UgYSAxMDIzICovCisJdWludDMyX3Qgc2NfRE1BQ3RybDsJ
 CS8qIHByb3RvdHlwZSBETUFDdHJsIHJlZ2lzdGVyICovCisJdWludDMyX3Qgc2NfTUFDQ3RybDsJ
 CS8qIHByb3RvdHlwZSBNYWNDdHJsIHJlZ2lzdGVyICovCisJdWludDE2X3Qgc2NfSW50RW5hYmxl
 OwkJLyogcHJvdG90eXBlIEludEVuYWJsZSByZWdpc3RlciAqLworCXVpbnQxNl90IHNjX1JlY2Vp
 dmVNb2RlOwkvKiBwcm90b3R5cGUgUmVjZWl2ZU1vZGUgcmVnaXN0ZXIgKi8KKwl1aW50OF90IHNj
 X1BoeUN0cmw7CQkvKiBwcm90b3R5cGUgUGh5Q3RybCByZWdpc3RlciAqLworfTsKKwogI2VuZGlm
 IC8qIF9ERVZfUENJX0lGX1NUR0VSRUdfSF8gKi8K
 --00000000000081a60e0593a2dbc1--

From: Masanobu SAITOH <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>, msaitoh@netbsd.org,
 gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, tharada@oucrc.org,
 gnats-bugs@netbsd.org
Cc: msaitoh@execsw.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Tue, 8 Oct 2019 10:50:33 +0900

 On 2019/09/29 5:29, Andrius V wrote:
 > Hi,
 > 
 > Attaching my final (I guess) patch which addresses most issues from
 > the initial one (auto doesn't need special code, stge part uncommented
 > by moving struct to stgereg header file, i386/amd64 kernel configs
 > updated) and is based on more recent current branch (OUI was renamed
 > and updated in current already), plus some updates with man pages to
 > be build properly. I believe it should be in parity with OpenBSD
 > driver now but I have only one board for testing. Temporarily created
 > a branch in github as well:
 > https://github.com/vezhlys/netbsd-src/tree/ipgphy.

 It's merged!

 > The problem that
 > setting 1000BaseTX specifically won't work is present, but it is the
 > same in Open/FreeBSD as well (autonegiotation needs to be used to get
 > 1GBit speed). Hope, the patch should be relatively easy to adjust and
 > apply, if it's OK and there's a plan to do it.

 Additional patch are also welcomed.

 Thanks.

 > Regards,
 > Andrius V


 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: Masanobu SAITOH <msaitoh@execsw.org>
Cc: msaitoh@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, 
	tharada@oucrc.org, gnats-bugs@netbsd.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Tue, 8 Oct 2019 18:38:36 +0300

 Hi,

 > It's merged!

 Thank you! Tested, working as expected.

 > Additional patch are also welcomed.

 Sure, if I will have something.

 Regards,
 Andrius V

From: Masanobu SAITOH <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>
Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 netbsd-bugs@netbsd.org, tharada@oucrc.org, gnats-bugs@netbsd.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Thu, 14 Nov 2019 18:09:20 +0900

 On 2019/10/09 0:38, Andrius V wrote:
 > Hi,
 > 
 >> It's merged!
 > 
 > Thank you! Tested, working as expected.
 > 
 >> Additional patch are also welcomed.
 > 
 > Sure, if I will have something.
 > 
 > Regards,
 > Andrius V

 Could you test with the latest ipgphy.c(rev. 1.4)?

 Also please show me the output of the dmesg (both MAC and PHY).

 Thanks in advance.

 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: gnats-bugs@netbsd.org
Cc: msaitoh@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, 
	tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Thu, 14 Nov 2019 11:48:40 +0200

 Hi,

 Sure, will do sometime today, once the changes will be synced with
 fossil/git repos.

 On Thu, Nov 14, 2019 at 11:10 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 >
 > The following reply was made to PR kern/42314; it has been noted by GNATS.
 >
 > From: Masanobu SAITOH <msaitoh@execsw.org>
 > To: Andrius V <vezhlys@gmail.com>
 > Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 >  netbsd-bugs@netbsd.org, tharada@oucrc.org, gnats-bugs@netbsd.org
 > Subject: Re: kern/42314: IC Plus IP100x PHY support
 > Date: Thu, 14 Nov 2019 18:09:20 +0900
 >
 >  On 2019/10/09 0:38, Andrius V wrote:
 >  > Hi,
 >  >
 >  >> It's merged!
 >  >
 >  > Thank you! Tested, working as expected.
 >  >
 >  >> Additional patch are also welcomed.
 >  >
 >  > Sure, if I will have something.
 >  >
 >  > Regards,
 >  > Andrius V
 >
 >  Could you test with the latest ipgphy.c(rev. 1.4)?
 >
 >  Also please show me the output of the dmesg (both MAC and PHY).
 >
 >  Thanks in advance.
 >
 >  --
 >  -----------------------------------------------
 >                  SAITOH Masanobu (msaitoh@execsw.org
 >                                   msaitoh@netbsd.org)
 >

From: Andrius V <vezhlys@gmail.com>
To: gnats-bugs@netbsd.org
Cc: msaitoh@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, 
	tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Thu, 14 Nov 2019 19:42:07 +0200

 Hi,

 Tested, didn't notice any regressions, auto-negotiation configures
 1000baseT full-duplex as expected (doesn't matter if on boot or using
 "ifconfig vge0 media auto" manually). Setting media type explicitly to
 1000baseT selects 100baseTX though (which is an improvement, since it
 was completely  failing with the original code).  From dmesg:

 [     1.050249] vge0 at pci4 dev 0 function 0: VIA VT612X Gigabit
 Ethernet (rev. 0x82)
 [     1.050249] vge0: interrupting at ioapic1 pin 12
 [     1.050249] vge0: Ethernet address xx:xx:xx:xx:xx:xx
 [     1.050249] ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 [     1.050249] 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
 1000baseT, 1000baseT-FDX, auto

 ifconfig vge0 (auto)
 vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
         enabled=0
         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
         ec_enabled=2<VLAN_HWTAGGING>
         address: xx:xx:xx:xx:xx:xx
         media: Ethernet autoselect (1000baseT
 full-duplex,flowcontrol,master,rxpause,txpause)
         status: active
         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 ifconfig vge0 (1000baseT):
 vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
         enabled=0
         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
         ec_enabled=2<VLAN_HWTAGGING>
         address: xx:xx:xx:xx:xx:xx
         media: Ethernet 1000baseT (100baseTX
 full-duplex,flowcontrol,rxpause,txpause)
         status: active
         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1

 Regards,
 Andrius V


 On Thu, Nov 14, 2019 at 11:48 AM Andrius V <vezhlys@gmail.com> wrote:
 >
 > Hi,
 >
 > Sure, will do sometime today, once the changes will be synced with
 > fossil/git repos.
 >
 > On Thu, Nov 14, 2019 at 11:10 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 > >
 > > The following reply was made to PR kern/42314; it has been noted by GNATS.
 > >
 > > From: Masanobu SAITOH <msaitoh@execsw.org>
 > > To: Andrius V <vezhlys@gmail.com>
 > > Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 > >  netbsd-bugs@netbsd.org, tharada@oucrc.org, gnats-bugs@netbsd.org
 > > Subject: Re: kern/42314: IC Plus IP100x PHY support
 > > Date: Thu, 14 Nov 2019 18:09:20 +0900
 > >
 > >  On 2019/10/09 0:38, Andrius V wrote:
 > >  > Hi,
 > >  >
 > >  >> It's merged!
 > >  >
 > >  > Thank you! Tested, working as expected.
 > >  >
 > >  >> Additional patch are also welcomed.
 > >  >
 > >  > Sure, if I will have something.
 > >  >
 > >  > Regards,
 > >  > Andrius V
 > >
 > >  Could you test with the latest ipgphy.c(rev. 1.4)?
 > >
 > >  Also please show me the output of the dmesg (both MAC and PHY).
 > >
 > >  Thanks in advance.
 > >
 > >  --
 > >  -----------------------------------------------
 > >                  SAITOH Masanobu (msaitoh@execsw.org
 > >                                   msaitoh@netbsd.org)
 > >

From: SAITOH Masanobu <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>, gnats-bugs@netbsd.org
Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Mon, 18 Nov 2019 23:46:24 +0900

 On 2019/11/15 2:42, Andrius V wrote:
 > Hi,
 > 
 > Tested, didn't notice any regressions, auto-negotiation configures
 > 1000baseT full-duplex as expected (doesn't matter if on boot or using
 > "ifconfig vge0 media auto" manually). Setting media type explicitly to
 > 1000baseT selects 100baseTX though (which is an improvement, since it
 > was completely  failing with the original code).

 On my machine, forcing 1000baseT-FDX usually got a link as it is, but
 sometimes got a link as 100baseTX-FDX. I suspect it depend on your
 cable and/or the link partner. Some PHYs include IP1000A and IP1001
 have a feature called downshift. If the PHY detect it can't link 1000baseT,
 it downgrade to 100baseT. It can be disabled by clearing IPGPHY_SCSR_DOWNSHIFT_ENB
 bit.

 >  From dmesg:
 > 
 > [     1.050249] vge0 at pci4 dev 0 function 0: VIA VT612X Gigabit
 > Ethernet (rev. 0x82)
 > [     1.050249] vge0: interrupting at ioapic1 pin 12
 > [     1.050249] vge0: Ethernet address xx:xx:xx:xx:xx:xx
 > [     1.050249] ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 > [     1.050249] 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
 > 1000baseT, 1000baseT-FDX, auto

 I have the same one (I have both stge+IP1000A and vge+IP1001).

 > ifconfig vge0 (auto)
 > vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >         enabled=0
 >         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >         ec_enabled=2<VLAN_HWTAGGING>
 >         address: xx:xx:xx:xx:xx:xx
 >         media: Ethernet autoselect (1000baseT
 > full-duplex,flowcontrol,master,rxpause,txpause)
 >         status: active
 >         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
 >         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 > ifconfig vge0 (1000baseT):
 > vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >         enabled=0
 >         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >         ec_enabled=2<VLAN_HWTAGGING>
 >         address: xx:xx:xx:xx:xx:xx
 >         media: Ethernet 1000baseT (100baseTX
 > full-duplex,flowcontrol,rxpause,txpause)
 >         status: active

 It seems you  set "ifconfig vge0 media 1000baseT" and the resulted link
 is 100baseT. It would be good to try ifconfig vge0 media "1000baseT-FDX"

 On my environment:
 > # ifconfig vge0
 > vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >         enabled=0
 >         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >         ec_enabled=2<VLAN_HWTAGGING>
 >         address: 00:02:2a:e0:4b:a9
 >         media: Ethernet 1000baseT full-duplex (1000baseT full-duplex,flowcontrol,rxpause,txpause)
 >         status: active

 Thanks.

 >         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
 >         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 > 
 > Regards,
 > Andrius V
 > 
 > 
 > On Thu, Nov 14, 2019 at 11:48 AM Andrius V <vezhlys@gmail.com> wrote:
 >>
 >> Hi,
 >>
 >> Sure, will do sometime today, once the changes will be synced with
 >> fossil/git repos.
 >>
 >> On Thu, Nov 14, 2019 at 11:10 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 >>>
 >>> The following reply was made to PR kern/42314; it has been noted by GNATS.
 >>>
 >>> From: Masanobu SAITOH <msaitoh@execsw.org>
 >>> To: Andrius V <vezhlys@gmail.com>
 >>> Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 >>>  netbsd-bugs@netbsd.org, tharada@oucrc.org, gnats-bugs@netbsd.org
 >>> Subject: Re: kern/42314: IC Plus IP100x PHY support
 >>> Date: Thu, 14 Nov 2019 18:09:20 +0900
 >>>
 >>>  On 2019/10/09 0:38, Andrius V wrote:
 >>>  > Hi,
 >>>  >
 >>>  >> It's merged!
 >>>  >
 >>>  > Thank you! Tested, working as expected.
 >>>  >
 >>>  >> Additional patch are also welcomed.
 >>>  >
 >>>  > Sure, if I will have something.
 >>>  >
 >>>  > Regards,
 >>>  > Andrius V
 >>>
 >>>  Could you test with the latest ipgphy.c(rev. 1.4)?
 >>>
 >>>  Also please show me the output of the dmesg (both MAC and PHY).
 >>>
 >>>  Thanks in advance.
 >>>
 >>>  --
 >>>  -----------------------------------------------
 >>>                  SAITOH Masanobu (msaitoh@execsw.org
 >>>                                   msaitoh@netbsd.org)
 >>>


 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: SAITOH Masanobu <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>, gnats-bugs@netbsd.org
Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Tue, 19 Nov 2019 00:04:49 +0900

 On 2019/11/18 23:46, SAITOH Masanobu wrote:
 > On 2019/11/15 2:42, Andrius V wrote:
 >> Hi,
 >>
 >> Tested, didn't notice any regressions, auto-negotiation configures
 >> 1000baseT full-duplex as expected (doesn't matter if on boot or using
 >> "ifconfig vge0 media auto" manually). Setting media type explicitly to
 >> 1000baseT selects 100baseTX though (which is an improvement, since it
 >> was completely  failing with the original code).
 > 
 > On my machine, forcing 1000baseT-FDX usually got a link as it is, but
 > sometimes got a link as 100baseTX-FDX. I suspect it depend on your
 > cable and/or the link partner. Some PHYs include IP1000A and IP1001
 > have a feature called downshift. If the PHY detect it can't link 1000baseT,
 > it downgrade to 100baseT. It can be disabled by clearing IPGPHY_SCSR_DOWNSHIFT_ENB
 > bit.
 > 
 >>  From dmesg:
 >>
 >> [     1.050249] vge0 at pci4 dev 0 function 0: VIA VT612X Gigabit
 >> Ethernet (rev. 0x82)
 >> [     1.050249] vge0: interrupting at ioapic1 pin 12
 >> [     1.050249] vge0: Ethernet address xx:xx:xx:xx:xx:xx
 >> [     1.050249] ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 >> [     1.050249] 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
 >> 1000baseT, 1000baseT-FDX, auto
 > 
 > I have the same one (I have both stge+IP1000A and vge+IP1001).
 > 
 >> ifconfig vge0 (auto)
 >> vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >>         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >>         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >>         enabled=0
 >>         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >>         ec_enabled=2<VLAN_HWTAGGING>
 >>         address: xx:xx:xx:xx:xx:xx
 >>         media: Ethernet autoselect (1000baseT
 >> full-duplex,flowcontrol,master,rxpause,txpause)
 >>         status: active
 >>         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
 >>         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 >> ifconfig vge0 (1000baseT):
 >> vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >>         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >>         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >>         enabled=0
 >>         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >>         ec_enabled=2<VLAN_HWTAGGING>
 >>         address: xx:xx:xx:xx:xx:xx
 >>         media: Ethernet 1000baseT (100baseTX
 >> full-duplex,flowcontrol,rxpause,txpause)
 >>         status: active
 > 
 > It seems you  set "ifconfig vge0 media 1000baseT" and the resulted link
 > is 100baseT. It would be good to try ifconfig vge0 media "1000baseT-FDX"
 > 
 > On my environment:
 >> # ifconfig vge0
 >> vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 >>         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 >>         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 >>         enabled=0
 >>         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 >>         ec_enabled=2<VLAN_HWTAGGING>
 >>         address: 00:02:2a:e0:4b:a9
 >>         media: Ethernet 1000baseT full-duplex (1000baseT full-duplex,flowcontrol,rxpause,txpause)
 >>         status: active

 Even though the link was established as 1000baseTX-FDX,
 vge0 got watchdog timeout as:
 > vge0: soft reset timed outvge0: watchdog timeout

 and repeat linkdown -> linkup -> watchdog. I suspect some addition
 might be required into if_vge.c. stge0 doesn't have such problem.


 > Thanks.
 > 
 >>         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
 >>         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 >>
 >> Regards,
 >> Andrius V
 >>
 >>
 >> On Thu, Nov 14, 2019 at 11:48 AM Andrius V <vezhlys@gmail.com> wrote:
 >>>
 >>> Hi,
 >>>
 >>> Sure, will do sometime today, once the changes will be synced with
 >>> fossil/git repos.
 >>>
 >>> On Thu, Nov 14, 2019 at 11:10 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 >>>>
 >>>> The following reply was made to PR kern/42314; it has been noted by GNATS.
 >>>>
 >>>> From: Masanobu SAITOH <msaitoh@execsw.org>
 >>>> To: Andrius V <vezhlys@gmail.com>
 >>>> Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 >>>>  netbsd-bugs@netbsd.org, tharada@oucrc.org, gnats-bugs@netbsd.org
 >>>> Subject: Re: kern/42314: IC Plus IP100x PHY support
 >>>> Date: Thu, 14 Nov 2019 18:09:20 +0900
 >>>>
 >>>>  On 2019/10/09 0:38, Andrius V wrote:
 >>>>  > Hi,
 >>>>  >
 >>>>  >> It's merged!
 >>>>  >
 >>>>  > Thank you! Tested, working as expected.
 >>>>  >
 >>>>  >> Additional patch are also welcomed.
 >>>>  >
 >>>>  > Sure, if I will have something.
 >>>>  >
 >>>>  > Regards,
 >>>>  > Andrius V
 >>>>
 >>>>  Could you test with the latest ipgphy.c(rev. 1.4)?
 >>>>
 >>>>  Also please show me the output of the dmesg (both MAC and PHY).
 >>>>
 >>>>  Thanks in advance.
 >>>>
 >>>>  --
 >>>>  -----------------------------------------------
 >>>>                  SAITOH Masanobu (msaitoh@execsw.org
 >>>>                                   msaitoh@netbsd.org)
 >>>>
 > 
 > 


 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: SAITOH Masanobu <msaitoh@execsw.org>
Cc: gnats-bugs@netbsd.org, msaitoh@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Mon, 18 Nov 2019 21:23:20 +0200

 Hi,

 Yes, setting 1000baseT-FDX ends up in watchdog timeout for me too.

 On Mon, Nov 18, 2019 at 5:04 PM SAITOH Masanobu <msaitoh@execsw.org> wrote:
 >
 > On 2019/11/18 23:46, SAITOH Masanobu wrote:
 > > On 2019/11/15 2:42, Andrius V wrote:
 > >> Hi,
 > >>
 > >> Tested, didn't notice any regressions, auto-negotiation configures
 > >> 1000baseT full-duplex as expected (doesn't matter if on boot or using
 > >> "ifconfig vge0 media auto" manually). Setting media type explicitly to
 > >> 1000baseT selects 100baseTX though (which is an improvement, since it
 > >> was completely  failing with the original code).
 > >
 > > On my machine, forcing 1000baseT-FDX usually got a link as it is, but
 > > sometimes got a link as 100baseTX-FDX. I suspect it depend on your
 > > cable and/or the link partner. Some PHYs include IP1000A and IP1001
 > > have a feature called downshift. If the PHY detect it can't link 1000baseT,
 > > it downgrade to 100baseT. It can be disabled by clearing IPGPHY_SCSR_DOWNSHIFT_ENB
 > > bit.
 > >
 > >>  From dmesg:
 > >>
 > >> [     1.050249] vge0 at pci4 dev 0 function 0: VIA VT612X Gigabit
 > >> Ethernet (rev. 0x82)
 > >> [     1.050249] vge0: interrupting at ioapic1 pin 12
 > >> [     1.050249] vge0: Ethernet address xx:xx:xx:xx:xx:xx
 > >> [     1.050249] ipgphy0 at vge0 phy 22: IP1001 10/100/1000 PHY, rev. 0
 > >> [     1.050249] 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
 > >> 1000baseT, 1000baseT-FDX, auto
 > >
 > > I have the same one (I have both stge+IP1000A and vge+IP1001).
 > >
 > >> ifconfig vge0 (auto)
 > >> vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 > >>         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 > >>         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 > >>         enabled=0
 > >>         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 > >>         ec_enabled=2<VLAN_HWTAGGING>
 > >>         address: xx:xx:xx:xx:xx:xx
 > >>         media: Ethernet autoselect (1000baseT
 > >> full-duplex,flowcontrol,master,rxpause,txpause)
 > >>         status: active
 > >>         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
 > >>         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 > >> ifconfig vge0 (1000baseT):
 > >> vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 > >>         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 > >>         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 > >>         enabled=0
 > >>         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 > >>         ec_enabled=2<VLAN_HWTAGGING>
 > >>         address: xx:xx:xx:xx:xx:xx
 > >>         media: Ethernet 1000baseT (100baseTX
 > >> full-duplex,flowcontrol,rxpause,txpause)
 > >>         status: active
 > >
 > > It seems you  set "ifconfig vge0 media 1000baseT" and the resulted link
 > > is 100baseT. It would be good to try ifconfig vge0 media "1000baseT-FDX"
 > >
 > > On my environment:
 > >> # ifconfig vge0
 > >> vge0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 > >>         capabilities=3f00<IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx>
 > >>         capabilities=3f00<UDP4CSUM_Rx,UDP4CSUM_Tx>
 > >>         enabled=0
 > >>         ec_capabilities=7<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
 > >>         ec_enabled=2<VLAN_HWTAGGING>
 > >>         address: 00:02:2a:e0:4b:a9
 > >>         media: Ethernet 1000baseT full-duplex (1000baseT full-duplex,flowcontrol,rxpause,txpause)
 > >>         status: active
 >
 > Even though the link was established as 1000baseTX-FDX,
 > vge0 got watchdog timeout as:
 > > vge0: soft reset timed outvge0: watchdog timeout
 >
 > and repeat linkdown -> linkup -> watchdog. I suspect some addition
 > might be required into if_vge.c. stge0 doesn't have such problem.
 >
 >
 > > Thanks.
 > >
 > >>         inet 192.168.1.10/24 broadcast 192.168.1.255 flags 0x0
 > >>         inet6 fe80::8c9e:c8a0:eb4b:731f%vge0/64 flags 0x0 scopeid 0x1
 > >>
 > >> Regards,
 > >> Andrius V
 > >>
 > >>
 > >> On Thu, Nov 14, 2019 at 11:48 AM Andrius V <vezhlys@gmail.com> wrote:
 > >>>
 > >>> Hi,
 > >>>
 > >>> Sure, will do sometime today, once the changes will be synced with
 > >>> fossil/git repos.
 > >>>
 > >>> On Thu, Nov 14, 2019 at 11:10 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 > >>>>
 > >>>> The following reply was made to PR kern/42314; it has been noted by GNATS.
 > >>>>
 > >>>> From: Masanobu SAITOH <msaitoh@execsw.org>
 > >>>> To: Andrius V <vezhlys@gmail.com>
 > >>>> Cc: msaitoh@execsw.org, msaitoh@netbsd.org, gnats-admin@netbsd.org,
 > >>>>  netbsd-bugs@netbsd.org, tharada@oucrc.org, gnats-bugs@netbsd.org
 > >>>> Subject: Re: kern/42314: IC Plus IP100x PHY support
 > >>>> Date: Thu, 14 Nov 2019 18:09:20 +0900
 > >>>>
 > >>>>  On 2019/10/09 0:38, Andrius V wrote:
 > >>>>  > Hi,
 > >>>>  >
 > >>>>  >> It's merged!
 > >>>>  >
 > >>>>  > Thank you! Tested, working as expected.
 > >>>>  >
 > >>>>  >> Additional patch are also welcomed.
 > >>>>  >
 > >>>>  > Sure, if I will have something.
 > >>>>  >
 > >>>>  > Regards,
 > >>>>  > Andrius V
 > >>>>
 > >>>>  Could you test with the latest ipgphy.c(rev. 1.4)?
 > >>>>
 > >>>>  Also please show me the output of the dmesg (both MAC and PHY).
 > >>>>
 > >>>>  Thanks in advance.
 > >>>>
 > >>>>  --
 > >>>>  -----------------------------------------------
 > >>>>                  SAITOH Masanobu (msaitoh@execsw.org
 > >>>>                                   msaitoh@netbsd.org)
 > >>>>
 > >
 > >
 >
 >
 > --
 > -----------------------------------------------
 >                 SAITOH Masanobu (msaitoh@execsw.org
 >                                  msaitoh@netbsd.org)

From: Masanobu SAITOH <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>
Cc: msaitoh@execsw.org, gnats-bugs@netbsd.org, msaitoh@netbsd.org,
 gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Tue, 19 Nov 2019 18:55:52 +0900

 On 2019/11/19 4:23, Andrius V wrote:
 > Hi,
 > 
 > Yes, setting 1000baseT-FDX ends up in watchdog timeout for me too.

 Please try if_vge.c rev. 1.75.

 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: Masanobu SAITOH <msaitoh@execsw.org>
Cc: gnats-bugs@netbsd.org, msaitoh@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Wed, 20 Nov 2019 08:25:19 +0200

 Hi,

 With the latest code ifconfig selects media correctly and I don't see
 watchdog timeout messages but dhcpcd still fails to get IP address
 properly though (assigns 169.254.161.13/16) and network is not working
 because of that. Same happens with 1000baseT-FDX and 1000baseT now
 (for 1000baseT it is a regression since previous commit). Reselecting
 auto or lower media types (100baseT, 10baseT) works correctly and dhcp
 reassigns proper the IP address.

 On Tue, Nov 19, 2019 at 11:55 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 >
 > On 2019/11/19 4:23, Andrius V wrote:
 > > Hi,
 > >
 > > Yes, setting 1000baseT-FDX ends up in watchdog timeout for me too.
 >
 > Please try if_vge.c rev. 1.75.
 >
 > --
 > -----------------------------------------------
 >                 SAITOH Masanobu (msaitoh@execsw.org
 >                                  msaitoh@netbsd.org)

From: SAITOH Masanobu <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>
Cc: msaitoh@execsw.org, gnats-bugs@netbsd.org, msaitoh@netbsd.org,
 gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Thu, 21 Nov 2019 00:14:35 +0900

 On 2019/11/20 15:25, Andrius V wrote:
 > Hi,
 > 
 > With the latest code ifconfig selects media correctly and I don't see
 > watchdog timeout messages but dhcpcd still fails to get IP address
 > properly though (assigns 169.254.161.13/16) and network is not working
 > because of that. Same happens with 1000baseT-FDX and 1000baseT now
 > (for 1000baseT it is a regression since previous commit). Reselecting
 > auto or lower media types (100baseT, 10baseT) works correctly and dhcp
 > reassigns proper the IP address.

 Could you test the following diff?
 - Set duplex correctly when user setting is not IFM_AUTO.
 - When the link is up, set VGE_DIAGCTL not from user media setting but from
   the current active link status.

 Index: if_vge.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/pci/if_vge.c,v
 retrieving revision 1.76
 diff -u -p -r1.76 if_vge.c
 --- if_vge.c	19 Nov 2019 09:54:07 -0000	1.76
 +++ if_vge.c	20 Nov 2019 15:08:28 -0000
 @@ -1928,33 +1928,34 @@ vge_miibus_statchg(struct ifnet *ifp)
  	 * always implied, so we turn on the forced mode bit but leave
  	 * the FDX bit cleared.
  	 */
 -
  	dctl = CSR_READ_1(sc, VGE_DIAGCTL);

 -	switch (IFM_SUBTYPE(ife->ifm_media)) {
 -	case IFM_AUTO:
 +	if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
  		dctl &= ~VGE_DIAGCTL_MACFORCE;
  		dctl &= ~VGE_DIAGCTL_FDXFORCE;
 -		break;
 -	case IFM_1000_T:
 -		dctl |= VGE_DIAGCTL_MACFORCE;
 -		dctl &= ~VGE_DIAGCTL_FDXFORCE;
 -		dctl |= VGE_DIAGCTL_GMII;
 -		break;
 -	case IFM_100_TX:
 -	case IFM_10_T:
 +	} else {
 +		u_int ifmword;
 +
 +		/* If the link is up, use the current active media. */
 +		if ((mii->mii_media_status & IFM_ACTIVE) != 0)
 +			ifmword = mii->mii_media_active;
 +		else
 +			ifmword = ife->ifm_media;
 +
  		dctl |= VGE_DIAGCTL_MACFORCE;
 -		dctl &= ~VGE_DIAGCTL_GMII;
 -		if ((ife->ifm_media & IFM_FDX) != 0)
 +		if ((ifmword & IFM_FDX) != 0)
  			dctl |= VGE_DIAGCTL_FDXFORCE;
  		else
  			dctl &= ~VGE_DIAGCTL_FDXFORCE;
 -		break;
 -	default:
 -		printf("%s: unknown media type: %x\n",
 -		    device_xname(sc->sc_dev),
 -		    IFM_SUBTYPE(ife->ifm_media));
 -		break;
 +
 +		if (IFM_SUBTYPE(ifmword) == IFM_1000_T) {
 +			/*
 +			 * It means the user setting is not auto and it's
 +			 * 1000baseT-FDX or 1000baseT.
 +			 */
 +			dctl |= VGE_DIAGCTL_GMII;
 +		} else
 +			dctl &= ~VGE_DIAGCTL_GMII;
  	}

  	CSR_WRITE_1(sc, VGE_DIAGCTL, dctl);
 -----------



 The same diff is at:

 	http://www.netbsd.org/~msaitoh/vge-20191120-0.dif

 Thanks in advance.

 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: SAITOH Masanobu <msaitoh@execsw.org>
Cc: gnats-bugs@netbsd.org, msaitoh@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Wed, 20 Nov 2019 21:45:23 +0200

 Tested, this patch works well. Changing media type works in all cases
 now. Thanks.

 On Wed, Nov 20, 2019 at 5:14 PM SAITOH Masanobu <msaitoh@execsw.org> wrote:
 >
 > On 2019/11/20 15:25, Andrius V wrote:
 > > Hi,
 > >
 > > With the latest code ifconfig selects media correctly and I don't see
 > > watchdog timeout messages but dhcpcd still fails to get IP address
 > > properly though (assigns 169.254.161.13/16) and network is not working
 > > because of that. Same happens with 1000baseT-FDX and 1000baseT now
 > > (for 1000baseT it is a regression since previous commit). Reselecting
 > > auto or lower media types (100baseT, 10baseT) works correctly and dhcp
 > > reassigns proper the IP address.
 >
 > Could you test the following diff?
 > - Set duplex correctly when user setting is not IFM_AUTO.
 > - When the link is up, set VGE_DIAGCTL not from user media setting but from
 >   the current active link status.
 >
 > Index: if_vge.c
 > ===================================================================
 > RCS file: /cvsroot/src/sys/dev/pci/if_vge.c,v
 > retrieving revision 1.76
 > diff -u -p -r1.76 if_vge.c
 > --- if_vge.c    19 Nov 2019 09:54:07 -0000      1.76
 > +++ if_vge.c    20 Nov 2019 15:08:28 -0000
 > @@ -1928,33 +1928,34 @@ vge_miibus_statchg(struct ifnet *ifp)
 >          * always implied, so we turn on the forced mode bit but leave
 >          * the FDX bit cleared.
 >          */
 > -
 >         dctl = CSR_READ_1(sc, VGE_DIAGCTL);
 >
 > -       switch (IFM_SUBTYPE(ife->ifm_media)) {
 > -       case IFM_AUTO:
 > +       if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
 >                 dctl &= ~VGE_DIAGCTL_MACFORCE;
 >                 dctl &= ~VGE_DIAGCTL_FDXFORCE;
 > -               break;
 > -       case IFM_1000_T:
 > -               dctl |= VGE_DIAGCTL_MACFORCE;
 > -               dctl &= ~VGE_DIAGCTL_FDXFORCE;
 > -               dctl |= VGE_DIAGCTL_GMII;
 > -               break;
 > -       case IFM_100_TX:
 > -       case IFM_10_T:
 > +       } else {
 > +               u_int ifmword;
 > +
 > +               /* If the link is up, use the current active media. */
 > +               if ((mii->mii_media_status & IFM_ACTIVE) != 0)
 > +                       ifmword = mii->mii_media_active;
 > +               else
 > +                       ifmword = ife->ifm_media;
 > +
 >                 dctl |= VGE_DIAGCTL_MACFORCE;
 > -               dctl &= ~VGE_DIAGCTL_GMII;
 > -               if ((ife->ifm_media & IFM_FDX) != 0)
 > +               if ((ifmword & IFM_FDX) != 0)
 >                         dctl |= VGE_DIAGCTL_FDXFORCE;
 >                 else
 >                         dctl &= ~VGE_DIAGCTL_FDXFORCE;
 > -               break;
 > -       default:
 > -               printf("%s: unknown media type: %x\n",
 > -                   device_xname(sc->sc_dev),
 > -                   IFM_SUBTYPE(ife->ifm_media));
 > -               break;
 > +
 > +               if (IFM_SUBTYPE(ifmword) == IFM_1000_T) {
 > +                       /*
 > +                        * It means the user setting is not auto and it's
 > +                        * 1000baseT-FDX or 1000baseT.
 > +                        */
 > +                       dctl |= VGE_DIAGCTL_GMII;
 > +               } else
 > +                       dctl &= ~VGE_DIAGCTL_GMII;
 >         }
 >
 >         CSR_WRITE_1(sc, VGE_DIAGCTL, dctl);
 > -----------
 >
 >
 >
 > The same diff is at:
 >
 >         http://www.netbsd.org/~msaitoh/vge-20191120-0.dif
 >
 > Thanks in advance.
 >
 > --
 > -----------------------------------------------
 >                 SAITOH Masanobu (msaitoh@execsw.org
 >                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: Masanobu SAITOH <msaitoh@execsw.org>
Cc: gnats-bugs@netbsd.org, msaitoh@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Wed, 20 Nov 2019 22:46:40 +0200

 --000000000000809c8c0597cd473a
 Content-Type: text/plain; charset="UTF-8"

 Btw, ipgphy.c and ipgphyreg.h doesn't have NetBSD header comment. Probably
 should be added too?

 On Wed, Nov 20, 2019, 21:45 Andrius V <vezhlys@gmail.com> wrote:

 > Tested, this patch works well. Changing media type works in all cases
 > now. Thanks.
 >
 > On Wed, Nov 20, 2019 at 5:14 PM SAITOH Masanobu <msaitoh@execsw.org>
 > wrote:
 > >
 > > On 2019/11/20 15:25, Andrius V wrote:
 > > > Hi,
 > > >
 > > > With the latest code ifconfig selects media correctly and I don't see
 > > > watchdog timeout messages but dhcpcd still fails to get IP address
 > > > properly though (assigns 169.254.161.13/16) and network is not working
 > > > because of that. Same happens with 1000baseT-FDX and 1000baseT now
 > > > (for 1000baseT it is a regression since previous commit). Reselecting
 > > > auto or lower media types (100baseT, 10baseT) works correctly and dhcp
 > > > reassigns proper the IP address.
 > >
 > > Could you test the following diff?
 > > - Set duplex correctly when user setting is not IFM_AUTO.
 > > - When the link is up, set VGE_DIAGCTL not from user media setting but
 > from
 > >   the current active link status.
 > >
 > > Index: if_vge.c
 > > ===================================================================
 > > RCS file: /cvsroot/src/sys/dev/pci/if_vge.c,v
 > > retrieving revision 1.76
 > > diff -u -p -r1.76 if_vge.c
 > > --- if_vge.c    19 Nov 2019 09:54:07 -0000      1.76
 > > +++ if_vge.c    20 Nov 2019 15:08:28 -0000
 > > @@ -1928,33 +1928,34 @@ vge_miibus_statchg(struct ifnet *ifp)
 > >          * always implied, so we turn on the forced mode bit but leave
 > >          * the FDX bit cleared.
 > >          */
 > > -
 > >         dctl = CSR_READ_1(sc, VGE_DIAGCTL);
 > >
 > > -       switch (IFM_SUBTYPE(ife->ifm_media)) {
 > > -       case IFM_AUTO:
 > > +       if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) {
 > >                 dctl &= ~VGE_DIAGCTL_MACFORCE;
 > >                 dctl &= ~VGE_DIAGCTL_FDXFORCE;
 > > -               break;
 > > -       case IFM_1000_T:
 > > -               dctl |= VGE_DIAGCTL_MACFORCE;
 > > -               dctl &= ~VGE_DIAGCTL_FDXFORCE;
 > > -               dctl |= VGE_DIAGCTL_GMII;
 > > -               break;
 > > -       case IFM_100_TX:
 > > -       case IFM_10_T:
 > > +       } else {
 > > +               u_int ifmword;
 > > +
 > > +               /* If the link is up, use the current active media. */
 > > +               if ((mii->mii_media_status & IFM_ACTIVE) != 0)
 > > +                       ifmword = mii->mii_media_active;
 > > +               else
 > > +                       ifmword = ife->ifm_media;
 > > +
 > >                 dctl |= VGE_DIAGCTL_MACFORCE;
 > > -               dctl &= ~VGE_DIAGCTL_GMII;
 > > -               if ((ife->ifm_media & IFM_FDX) != 0)
 > > +               if ((ifmword & IFM_FDX) != 0)
 > >                         dctl |= VGE_DIAGCTL_FDXFORCE;
 > >                 else
 > >                         dctl &= ~VGE_DIAGCTL_FDXFORCE;
 > > -               break;
 > > -       default:
 > > -               printf("%s: unknown media type: %x\n",
 > > -                   device_xname(sc->sc_dev),
 > > -                   IFM_SUBTYPE(ife->ifm_media));
 > > -               break;
 > > +
 > > +               if (IFM_SUBTYPE(ifmword) == IFM_1000_T) {
 > > +                       /*
 > > +                        * It means the user setting is not auto and it's
 > > +                        * 1000baseT-FDX or 1000baseT.
 > > +                        */
 > > +                       dctl |= VGE_DIAGCTL_GMII;
 > > +               } else
 > > +                       dctl &= ~VGE_DIAGCTL_GMII;
 > >         }
 > >
 > >         CSR_WRITE_1(sc, VGE_DIAGCTL, dctl);
 > > -----------
 > >
 > >
 > >
 > > The same diff is at:
 > >
 > >         http://www.netbsd.org/~msaitoh/vge-20191120-0.dif
 > >
 > > Thanks in advance.
 > >
 > > --
 > > -----------------------------------------------
 > >                 SAITOH Masanobu (msaitoh@execsw.org
 > >                                  msaitoh@netbsd.org)
 >

 --000000000000809c8c0597cd473a
 Content-Type: text/html; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable

 <div dir=3D"auto">Btw, ipgphy.c and ipgphyreg.h doesn&#39;t have NetBSD hea=
 der comment. Probably should be added too?</div><br><div class=3D"gmail_quo=
 te"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Nov 20, 2019, 21:45 Andri=
 us V &lt;<a href=3D"mailto:vezhlys@gmail.com">vezhlys@gmail.com</a>&gt; wro=
 te:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
 order-left:1px #ccc solid;padding-left:1ex">Tested, this patch works well. =
 Changing media type works in all cases<br>
 now. Thanks.<br>
 <br>
 On Wed, Nov 20, 2019 at 5:14 PM SAITOH Masanobu &lt;<a href=3D"mailto:msait=
 oh@execsw.org" target=3D"_blank" rel=3D"noreferrer">msaitoh@execsw.org</a>&=
 gt; wrote:<br>
 &gt;<br>
 &gt; On 2019/11/20 15:25, Andrius V wrote:<br>
 &gt; &gt; Hi,<br>
 &gt; &gt;<br>
 &gt; &gt; With the latest code ifconfig selects media correctly and I don&#=
 39;t see<br>
 &gt; &gt; watchdog timeout messages but dhcpcd still fails to get IP addres=
 s<br>
 &gt; &gt; properly though (assigns <a href=3D"http://169.254.161.13/16" rel=
 =3D"noreferrer noreferrer" target=3D"_blank">169.254.161.13/16</a>) and net=
 work is not working<br>
 &gt; &gt; because of that. Same happens with 1000baseT-FDX and 1000baseT no=
 w<br>
 &gt; &gt; (for 1000baseT it is a regression since previous commit). Reselec=
 ting<br>
 &gt; &gt; auto or lower media types (100baseT, 10baseT) works correctly and=
  dhcp<br>
 &gt; &gt; reassigns proper the IP address.<br>
 &gt;<br>
 &gt; Could you test the following diff?<br>
 &gt; - Set duplex correctly when user setting is not IFM_AUTO.<br>
 &gt; - When the link is up, set VGE_DIAGCTL not from user media setting but=
  from<br>
 &gt;=C2=A0 =C2=A0the current active link status.<br>
 &gt;<br>
 &gt; Index: if_vge.c<br>
 &gt; =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
 &gt; RCS file: /cvsroot/src/sys/dev/pci/if_vge.c,v<br>
 &gt; retrieving revision 1.76<br>
 &gt; diff -u -p -r1.76 if_vge.c<br>
 &gt; --- if_vge.c=C2=A0 =C2=A0 19 Nov 2019 09:54:07 -0000=C2=A0 =C2=A0 =C2=
 =A0 1.76<br>
 &gt; +++ if_vge.c=C2=A0 =C2=A0 20 Nov 2019 15:08:28 -0000<br>
 &gt; @@ -1928,33 +1928,34 @@ vge_miibus_statchg(struct ifnet *ifp)<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * always implied, so we turn on the =
 forced mode bit but leave<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * the FDX bit cleared.<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 */<br>
 &gt; -<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl =3D CSR_READ_1(sc, VGE_DIAGCTL);=
 <br>
 &gt;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0switch (IFM_SUBTYPE(ife-&gt;ifm_media)) {<=
 br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0case IFM_AUTO:<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0if (IFM_SUBTYPE(ife-&gt;ifm_media) =3D=3D =
 IFM_AUTO) {<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl &amp=
 ;=3D ~VGE_DIAGCTL_MACFORCE;<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl &amp=
 ;=3D ~VGE_DIAGCTL_FDXFORCE;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0case IFM_1000_T:<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl |=3D VGE_=
 DIAGCTL_MACFORCE;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl &amp;=3D =
 ~VGE_DIAGCTL_FDXFORCE;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl |=3D VGE_=
 DIAGCTL_GMII;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0case IFM_100_TX:<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0case IFM_10_T:<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0} else {<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0u_int ifmword;=
 <br>
 &gt; +<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* If the link=
  is up, use the current active media. */<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if ((mii-&gt;m=
 ii_media_status &amp; IFM_ACTIVE) !=3D 0)<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0ifmword =3D mii-&gt;mii_media_active;<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0ifmword =3D ife-&gt;ifm_media;<br>
 &gt; +<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl |=3D=
  VGE_DIAGCTL_MACFORCE;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dctl &amp;=3D =
 ~VGE_DIAGCTL_GMII;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if ((ife-&gt;i=
 fm_media &amp; IFM_FDX) !=3D 0)<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if ((ifmword &=
 amp; IFM_FDX) !=3D 0)<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0dctl |=3D VGE_DIAGCTL_FDXFORCE;<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0dctl &amp;=3D ~VGE_DIAGCTL_FDXFORCE;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0default:<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0printf(&quot;%=
 s: unknown media type: %x\n&quot;,<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 device_xname(sc-&gt;sc_dev),<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 IFM_SUBTYPE(ife-&gt;ifm_media));<br>
 &gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
 &gt; +<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (IFM_SUBTYP=
 E(ifmword) =3D=3D IFM_1000_T) {<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0/*<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 * It means the user setting is not auto and it&#39;s<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 * 1000baseT-FDX or 1000baseT.<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 */<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0dctl |=3D VGE_DIAGCTL_GMII;<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else<br>
 &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0dctl &amp;=3D ~VGE_DIAGCTL_GMII;<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}<br>
 &gt;<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CSR_WRITE_1(sc, VGE_DIAGCTL, dctl);<b=
 r>
 &gt; -----------<br>
 &gt;<br>
 &gt;<br>
 &gt;<br>
 &gt; The same diff is at:<br>
 &gt;<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"http://www.netbsd.org/~msa=
 itoh/vge-20191120-0.dif" rel=3D"noreferrer noreferrer" target=3D"_blank">ht=
 tp://www.netbsd.org/~msaitoh/vge-20191120-0.dif</a><br>
 &gt;<br>
 &gt; Thanks in advance.<br>
 &gt;<br>
 &gt; --<br>
 &gt; -----------------------------------------------<br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SAITOH Ma=
 sanobu (<a href=3D"mailto:msaitoh@execsw.org" target=3D"_blank" rel=3D"nore=
 ferrer">msaitoh@execsw.org</a><br>
 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <a href=3D"mailto:msaitoh@=
 netbsd.org" target=3D"_blank" rel=3D"noreferrer">msaitoh@netbsd.org</a>)<br=
 >
 </blockquote></div>

 --000000000000809c8c0597cd473a--

From: Masanobu SAITOH <msaitoh@execsw.org>
To: Andrius V <vezhlys@gmail.com>
Cc: msaitoh@execsw.org, gnats-bugs@netbsd.org, msaitoh@netbsd.org,
 gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Thu, 21 Nov 2019 13:37:14 +0900

 On 2019/11/21 5:46, Andrius V wrote:
 > Btw, ipgphy.c and ipgphyreg.h doesn't have NetBSD header comment. Probably should be added too?

 Done.

 > On Wed, Nov 20, 2019, 21:45 Andrius V <vezhlys@gmail.com <mailto:vezhlys@gmail.com>> wrote:
 > 
 >     Tested, this patch works well. Changing media type works in all cases
 >     now. Thanks.

 Done.

 Thank you for your cooperation!

 -- 
 -----------------------------------------------
                 SAITOH Masanobu (msaitoh@execsw.org
                                  msaitoh@netbsd.org)

From: Andrius V <vezhlys@gmail.com>
To: Masanobu SAITOH <msaitoh@execsw.org>
Cc: gnats-bugs@netbsd.org, msaitoh@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, tharada@oucrc.org
Subject: Re: kern/42314: IC Plus IP100x PHY support
Date: Thu, 28 Nov 2019 01:41:34 +0200

 Hi,

 Should you close the ticket? It is still in open state. Thank you for
 pull up to netbsd-9!

 On Thu, Nov 21, 2019 at 6:37 AM Masanobu SAITOH <msaitoh@execsw.org> wrote:
 >
 > On 2019/11/21 5:46, Andrius V wrote:
 > > Btw, ipgphy.c and ipgphyreg.h doesn't have NetBSD header comment. Probably should be added too?
 >
 > Done.
 >
 > > On Wed, Nov 20, 2019, 21:45 Andrius V <vezhlys@gmail.com <mailto:vezhlys@gmail.com>> wrote:
 > >
 > >     Tested, this patch works well. Changing media type works in all cases
 > >     now. Thanks.
 >
 > Done.
 >
 > Thank you for your cooperation!
 >
 > --
 > -----------------------------------------------
 >                 SAITOH Masanobu (msaitoh@execsw.org
 >                                  msaitoh@netbsd.org)

State-Changed-From-To: open->closed
State-Changed-By: msaitoh@NetBSD.org
State-Changed-When: Thu, 28 Nov 2019 04:48:10 +0000
State-Changed-Why:
NetBSD 9.0 supports ipgphy(4).
Thanks.


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.45 2018/12/21 14:23:33 maya Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2017 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.