From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755826Ab3HZCao (ORCPT ); Sun, 25 Aug 2013 22:30:44 -0400 Received: from m12-11.163.com ([220.181.12.11]:55488 "EHLO m12-11.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755195Ab3HZCam (ORCPT ); Sun, 25 Aug 2013 22:30:42 -0400 Date: Mon, 26 Aug 2013 10:14:35 +0800 From: "=?utf-8?B?bGl1anVubGlhbmdfbGps?=" To: "=?utf-8?B?Sm9lIFBlcmNoZXM=?=" Cc: "=?utf-8?B?ZGF2ZW0=?=" , "=?utf-8?B?aG9ybXM=?=" , "=?utf-8?B?cm9taWV1?=" , "=?utf-8?B?Z3JlZ2to?=" , "=?utf-8?B?bmV0ZGV2?=" , "=?utf-8?B?bGludXgtdXNi?=" , "=?utf-8?B?bGludXgta2VybmVs?=" , "=?utf-8?B?c3VuaGVjaGVuZw==?=" References: <1377343560-10524-1-git-send-email-liujunliang_ljl@163.com>, <1377368111.1757.2.camel@joe-AO722> Subject: =?utf-8?B?UmU6IFJlOiBbUEFUQ0hdIFVTQjJORVQgOiBTUjk3MDAgOiBPbmUgY2hpcCBVU0IgMS4xIFVTQjJORVQgU1I5NzAwRGV2aWNlIERyaXZlciBTdXBwb3J0?= Message-ID: <201308261014331251822@163.com> X-mailer: Foxmail 6, 15, 201, 22 [cn] Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-CM-TRANSID: C8CowED5D0sJuhpSuy+jAQ--.1577S2 X-Coremail-Antispam: 1Uf129KBjvJXoW3tw15AryfGFW8Xry7tFyxXwb_yoWDXrykpF WUGa45JF4UXr1xXrZYyay8ua4Fvw1kJ3y7Cry3G34F9a43Ar1kXFy09342yryYk3yxCr4S kF4jk343Za15u3JanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07j8EfrUUUUU= X-CM-SenderInfo: xolxy3pqolt0hjboyzi6rwjhhfrp/1tbiRQKFX1EAGfMWyAAAs4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id r7Q2UpkG017575 Dear Joe : I'm sorry to ask you that, do you need me to merge the patch and re-send it again. And which version of kernel will release this driver. Thanks a lot and apologizing for making you trouble. Thanks again. 2013-08-26 liujunliang_ljl 发件人: Joe Perches 发送时间: 2013-08-25 02:15:19 收件人: liujunliang_ljl 抄送: davem; horms; romieu; gregkh; netdev; linux-usb; linux-kernel; sunhecheng 主题: Re: [PATCH] USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support Some whitespace and neatening fixups. Some conversions from 4 indent tabs to normal tabs Signed-off-by: Joe Perches --- Just doing this instead of commenting about spacing again. drivers/net/usb/sr9700.c | 127 +++++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 60 deletions(-) diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c index 27c86ec..4262b9d 100644 --- a/drivers/net/usb/sr9700.c +++ b/drivers/net/usb/sr9700.c @@ -29,7 +29,7 @@ static int sr_read(struct usbnet *dev, u8 reg, u16 length, void *data) int err; err = usbnet_read_cmd(dev, SR_RD_REGS, SR_REQ_RD_REG, - 0, reg, data, length); + 0, reg, data, length); if ((err != length) && (err >= 0)) err = -EINVAL; return err; @@ -40,7 +40,7 @@ static int sr_write(struct usbnet *dev, u8 reg, u16 length, void *data) int err; err = usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG, - 0, reg, data, length); + 0, reg, data, length); if ((err >= 0) && (err < length)) err = -EINVAL; return err; @@ -54,19 +54,19 @@ static int sr_read_reg(struct usbnet *dev, u8 reg, u8 *value) static int sr_write_reg(struct usbnet *dev, u8 reg, u8 value) { return usbnet_write_cmd(dev, SR_WR_REGS, SR_REQ_WR_REG, - value, reg, NULL, 0); + value, reg, NULL, 0); } static void sr_write_async(struct usbnet *dev, u8 reg, u16 length, void *data) { usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG, - 0, reg, data, length); + 0, reg, data, length); } static void sr_write_reg_async(struct usbnet *dev, u8 reg, u8 value) { usbnet_write_cmd_async(dev, SR_WR_REGS, SR_REQ_WR_REG, - value, reg, NULL, 0); + value, reg, NULL, 0); } static int wait_phy_eeprom_ready(struct usbnet *dev, int phy) @@ -89,7 +89,7 @@ static int wait_phy_eeprom_ready(struct usbnet *dev, int phy) if (i >= SR_SHARE_TIMEOUT) { netdev_err(dev->net, "%s write timed out!\n", - phy ? "phy" : "eeprom"); + phy ? "phy" : "eeprom"); ret = -EIO; goto out; } @@ -98,7 +98,8 @@ out: return ret; } -static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 *value) +static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, + __le16 *value) { int ret; @@ -115,14 +116,15 @@ static int sr_share_read_word(struct usbnet *dev, int phy, u8 reg, __le16 *value ret = sr_read(dev, EPDR, 2, value); netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n", - phy, reg, *value, ret); + phy, reg, *value, ret); out: mutex_unlock(&dev->phy_mutex); return ret; } -static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg, __le16 value) +static int sr_share_write_word(struct usbnet *dev, int phy, u8 reg, + __le16 value) { int ret; @@ -156,7 +158,8 @@ static int sr9700_get_eeprom_len(struct net_device *dev) return SR_EEPROM_LEN; } -static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom *eeprom, u8 *data) +static int sr9700_get_eeprom(struct net_device *net, + struct ethtool_eeprom *eeprom, u8 *data) { struct usbnet *dev = netdev_priv(net); __le16 *ebuf = (__le16 *)data; @@ -168,7 +171,8 @@ static int sr9700_get_eeprom(struct net_device *net, struct ethtool_eeprom *eepr return -EINVAL; for (i = 0; i < eeprom->len / 2; i++) - ret = sr_read_eeprom_word(dev, eeprom->offset / 2 + i, &ebuf[i]); + ret = sr_read_eeprom_word(dev, eeprom->offset / 2 + i, + &ebuf[i]); return ret; } @@ -199,12 +203,13 @@ static int sr_mdio_read(struct net_device *netdev, int phy_id, int loc) res = le16_to_cpu(res) & ~BMSR_LSTATUS; netdev_dbg(dev->net, "sr_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n", - phy_id, loc, res); + phy_id, loc, res); return res; } -static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc, int val) +static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc, + int val) { struct usbnet *dev = netdev_priv(netdev); __le16 res = cpu_to_le16(val); @@ -215,7 +220,7 @@ static void sr_mdio_write(struct net_device *netdev, int phy_id, int loc, int va } netdev_dbg(dev->net, "sr_mdio_write() phy_id=0x%02x, loc=0x%02x, val=0x%04x\n", - phy_id, loc, val); + phy_id, loc, val); sr_share_write_word(dev, 1, loc, res); } @@ -242,15 +247,15 @@ static int sr9700_ioctl(struct net_device *net, struct ifreq *rq, int cmd) } static const struct ethtool_ops sr9700_ethtool_ops = { - .get_drvinfo = usbnet_get_drvinfo, - .get_link = sr9700_get_link, - .get_msglevel = usbnet_get_msglevel, - .set_msglevel = usbnet_set_msglevel, - .get_eeprom_len = sr9700_get_eeprom_len, - .get_eeprom = sr9700_get_eeprom, - .get_settings = usbnet_get_settings, - .set_settings = usbnet_set_settings, - .nway_reset = usbnet_nway_reset, + .get_drvinfo = usbnet_get_drvinfo, + .get_link = sr9700_get_link, + .get_msglevel = usbnet_get_msglevel, + .set_msglevel = usbnet_set_msglevel, + .get_eeprom_len = sr9700_get_eeprom_len, + .get_eeprom = sr9700_get_eeprom, + .get_settings = usbnet_get_settings, + .set_settings = usbnet_set_settings, + .nway_reset = usbnet_nway_reset, }; static void sr9700_set_multicast(struct net_device *net) @@ -269,7 +274,7 @@ static void sr9700_set_multicast(struct net_device *net) if (net->flags & IFF_PROMISC) { rx_ctl |= RCR_PRMSC; } else if (net->flags & IFF_ALLMULTI || - netdev_mc_count(net) > SR_MCAST_MAX) { + netdev_mc_count(net) > SR_MCAST_MAX) { rx_ctl |= RCR_RUNT; } else if (!netdev_mc_empty(net)) { struct netdev_hw_addr *ha; @@ -290,7 +295,7 @@ static int sr9700_set_mac_address(struct net_device *net, void *p) if (!is_valid_ether_addr(addr->sa_data)) { netdev_err(net, "not setting invalid mac address %pM\n", - addr->sa_data); + addr->sa_data); return -EINVAL; } @@ -301,15 +306,15 @@ static int sr9700_set_mac_address(struct net_device *net, void *p) } static const struct net_device_ops sr9700_netdev_ops = { - .ndo_open = usbnet_open, - .ndo_stop = usbnet_stop, - .ndo_start_xmit = usbnet_start_xmit, - .ndo_tx_timeout = usbnet_tx_timeout, - .ndo_change_mtu = usbnet_change_mtu, - .ndo_validate_addr = eth_validate_addr, - .ndo_do_ioctl = sr9700_ioctl, - .ndo_set_rx_mode = sr9700_set_multicast, - .ndo_set_mac_address = sr9700_set_mac_address, + .ndo_open = usbnet_open, + .ndo_stop = usbnet_stop, + .ndo_start_xmit = usbnet_start_xmit, + .ndo_tx_timeout = usbnet_tx_timeout, + .ndo_change_mtu = usbnet_change_mtu, + .ndo_validate_addr = eth_validate_addr, + .ndo_do_ioctl = sr9700_ioctl, + .ndo_set_rx_mode = sr9700_set_multicast, + .ndo_set_mac_address = sr9700_set_mac_address, }; static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf) @@ -360,7 +365,8 @@ static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf) sr_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); sr_mdio_write(dev->net, dev->mii.phy_id, - MII_ADVERTISE, ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP); + (MII_ADVERTISE, ADVERTISE_ALL | + ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP)); mii_nway_restart(&dev->mii); out: @@ -373,11 +379,11 @@ static int sr9700_rx_fixup(struct usbnet *dev, struct sk_buff *skb) int len; /* skb content (packets) format : - * p0 p1 p2 ...... pm - * / \ - * / \ - * / \ - * / \ + * p0 p1 p2 ...... pm + * / \ + * / \ + * / \ + * / \ * p0b0 p0b1 p0b2 p0b3 ...... p0b(n-4) p0b(n-3)...p0bn * * p0 : packet 0 @@ -431,7 +437,8 @@ static int sr9700_rx_fixup(struct usbnet *dev, struct sk_buff *skb) return 0; } -static struct sk_buff *sr9700_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) +static struct sk_buff *sr9700_tx_fixup(struct usbnet *dev, struct sk_buff *skb, + gfp_t flags) { int len; @@ -508,40 +515,40 @@ static int sr9700_link_reset(struct usbnet *dev) mii_ethtool_gset(&dev->mii, &ecmd); netdev_dbg(dev->net, "link_reset() speed: %d duplex: %d\n", - ecmd.speed, ecmd.duplex); + ecmd.speed, ecmd.duplex); return 0; } static const struct driver_info sr9700_driver_info = { - .description = "CoreChip SR9700 USB Ethernet", - .flags = FLAG_ETHER, - .bind = sr9700_bind, - .rx_fixup = sr9700_rx_fixup, - .tx_fixup = sr9700_tx_fixup, - .status = sr9700_status, - .link_reset = sr9700_link_reset, - .reset = sr9700_link_reset, + .description = "CoreChip SR9700 USB Ethernet", + .flags = FLAG_ETHER, + .bind = sr9700_bind, + .rx_fixup = sr9700_rx_fixup, + .tx_fixup = sr9700_tx_fixup, + .status = sr9700_status, + .link_reset = sr9700_link_reset, + .reset = sr9700_link_reset, }; static const struct usb_device_id products[] = { { - USB_DEVICE(0x0fe6, 0x9700), /* SR9700 device */ - .driver_info = (unsigned long)&sr9700_driver_info, - }, + USB_DEVICE(0x0fe6, 0x9700), /* SR9700 device */ + .driver_info = (unsigned long)&sr9700_driver_info, + }, {}, /* END */ }; MODULE_DEVICE_TABLE(usb, products); static struct usb_driver sr9700_usb_driver = { - .name = "sr9700", - .id_table = products, - .probe = usbnet_probe, - .disconnect = usbnet_disconnect, - .suspend = usbnet_suspend, - .resume = usbnet_resume, - .disable_hub_initiated_lpm = 1, + .name = "sr9700", + .id_table = products, + .probe = usbnet_probe, + .disconnect = usbnet_disconnect, + .suspend = usbnet_suspend, + .resume = usbnet_resume, + .disable_hub_initiated_lpm = 1, }; module_usb_driver(sr9700_usb_driver); {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?utf-8?B?bGl1anVubGlhbmdfbGps?=" Subject: =?utf-8?B?UmU6IFJlOiBbUEFUQ0hdIFVTQjJORVQgOiBTUjk3MDAgOiBPbmUgY2hpcCBVU0IgMS4xIFVTQjJORVQgU1I5NzAwRGV2aWNlIERyaXZlciBTdXBwb3J0?= Date: Mon, 26 Aug 2013 10:14:35 +0800 Message-ID: <201308261014331251822@163.com> References: <1377343560-10524-1-git-send-email-liujunliang_ljl@163.com>, <1377368111.1757.2.camel@joe-AO722> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "=?utf-8?B?ZGF2ZW0=?=" , "=?utf-8?B?aG9ybXM=?=" , "=?utf-8?B?cm9taWV1?=" , "=?utf-8?B?Z3JlZ2to?=" , "=?utf-8?B?bmV0ZGV2?=" , "=?utf-8?B?bGludXgtdXNi?=" , "=?utf-8?B?bGludXgta2VybmVs?=" , "=?utf-8?B?c3VuaGVjaGVuZw==?=" To: "=?utf-8?B?Sm9lIFBlcmNoZXM=?=" Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org RGVhciAgICBKb2UgOg0KCQkNCgkJCUknbSBzb3JyeSB0byBhc2sgeW91IHRoYXQsIGRvIHlvdSBu ZWVkIG1lIHRvIG1lcmdlIHRoZSBwYXRjaCBhbmQgcmUtc2VuZCBpdCBhZ2Fpbi4NCg0KCQlBbmQg d2hpY2ggdmVyc2lvbiBvZiBrZXJuZWwgd2lsbCByZWxlYXNlIHRoaXMgZHJpdmVyLg0KCQ0KCQkJ VGhhbmtzIGEgbG90IGFuZCBhcG9sb2dpemluZyBmb3IgbWFraW5nIHlvdSB0cm91YmxlLg0KDQoJ CQlUaGFua3MgYWdhaW4uDQoNCg0KMjAxMy0wOC0yNiANCg0KDQoNCmxpdWp1bmxpYW5nX2xqbCAN Cg0KDQoNCuWPkeS7tuS6uu+8miBKb2UgUGVyY2hlcyANCuWPkemAgeaXtumXtO+8miAyMDEzLTA4 LTI1ICAwMjoxNToxOSANCuaUtuS7tuS6uu+8miBsaXVqdW5saWFuZ19samwgDQrmioTpgIHvvJog ZGF2ZW07IGhvcm1zOyByb21pZXU7IGdyZWdraDsgbmV0ZGV2OyBsaW51eC11c2I7IGxpbnV4LWtl cm5lbDsgc3VuaGVjaGVuZyANCuS4u+mimO+8miBSZTogW1BBVENIXSBVU0IyTkVUIDogU1I5NzAw IDogT25lIGNoaXAgVVNCIDEuMSBVU0IyTkVUIFNSOTcwMERldmljZSBEcml2ZXIgU3VwcG9ydCAN CiANClNvbWUgd2hpdGVzcGFjZSBhbmQgbmVhdGVuaW5nIGZpeHVwcy4NClNvbWUgY29udmVyc2lv bnMgZnJvbSA0IGluZGVudCB0YWJzIHRvIG5vcm1hbCB0YWJzDQpTaWduZWQtb2ZmLWJ5OiBKb2Ug UGVyY2hlcyA8am9lQHBlcmNoZXMuY29tPg0KLS0tDQpKdXN0IGRvaW5nIHRoaXMgaW5zdGVhZCBv ZiBjb21tZW50aW5nIGFib3V0IHNwYWNpbmcNCmFnYWluLg0KIGRyaXZlcnMvbmV0L3VzYi9zcjk3 MDAuYyB8IDEyNyArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA2MCBkZWxldGlvbnMoLSkNCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMgYi9kcml2ZXJzL25ldC91c2Ivc3I5 NzAwLmMNCmluZGV4IDI3Yzg2ZWMuLjQyNjJiOWQgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC91 c2Ivc3I5NzAwLmMNCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYw0KQEAgLTI5LDcgKzI5 LDcgQEAgc3RhdGljIGludCBzcl9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYg bGVuZ3RoLCB2b2lkICpkYXRhKQ0KICBpbnQgZXJyOw0KDQogIGVyciA9IHVzYm5ldF9yZWFkX2Nt ZChkZXYsIFNSX1JEX1JFR1MsIFNSX1JFUV9SRF9SRUcsDQotIDAsIHJlZywgZGF0YSwgbGVuZ3Ro KTsNCisgICAgICAgMCwgcmVnLCBkYXRhLCBsZW5ndGgpOw0KICBpZiAoKGVyciAhPSBsZW5ndGgp ICYmIChlcnIgPj0gMCkpDQogIGVyciA9IC1FSU5WQUw7DQogIHJldHVybiBlcnI7DQpAQCAtNDAs NyArNDAsNyBAQCBzdGF0aWMgaW50IHNyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVn LCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKQ0KICBpbnQgZXJyOw0KDQogIGVyciA9IHVzYm5ldF93 cml0ZV9jbWQoZGV2LCBTUl9XUl9SRUdTLCBTUl9SRVFfV1JfUkVHLA0KLSAwLCByZWcsIGRhdGEs IGxlbmd0aCk7DQorICAgICAgICAwLCByZWcsIGRhdGEsIGxlbmd0aCk7DQogIGlmICgoZXJyID49 IDApICYmIChlcnIgPCBsZW5ndGgpKQ0KICBlcnIgPSAtRUlOVkFMOw0KICByZXR1cm4gZXJyOw0K QEAgLTU0LDE5ICs1NCwxOSBAQCBzdGF0aWMgaW50IHNyX3JlYWRfcmVnKHN0cnVjdCB1c2JuZXQg KmRldiwgdTggcmVnLCB1OCAqdmFsdWUpDQogc3RhdGljIGludCBzcl93cml0ZV9yZWcoc3RydWN0 IHVzYm5ldCAqZGV2LCB1OCByZWcsIHU4IHZhbHVlKQ0KIHsNCiAgcmV0dXJuIHVzYm5ldF93cml0 ZV9jbWQoZGV2LCBTUl9XUl9SRUdTLCBTUl9SRVFfV1JfUkVHLA0KLSB2YWx1ZSwgcmVnLCBOVUxM LCAwKTsNCisgdmFsdWUsIHJlZywgTlVMTCwgMCk7DQogfQ0KDQogc3RhdGljIHZvaWQgc3Jfd3Jp dGVfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQgKmRh dGEpDQogew0KICB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgU1JfV1JfUkVHUywgU1JfUkVR X1dSX1JFRywNCi0gMCwgcmVnLCBkYXRhLCBsZW5ndGgpOw0KKyAgICAgICAgMCwgcmVnLCBkYXRh LCBsZW5ndGgpOw0KIH0NCg0KIHN0YXRpYyB2b2lkIHNyX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3Qg dXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpDQogew0KICB1c2JuZXRfd3JpdGVfY21kX2Fz eW5jKGRldiwgU1JfV1JfUkVHUywgU1JfUkVRX1dSX1JFRywNCi0gdmFsdWUsIHJlZywgTlVMTCwg MCk7DQorICAgICAgICB2YWx1ZSwgcmVnLCBOVUxMLCAwKTsNCiB9DQoNCiBzdGF0aWMgaW50IHdh aXRfcGh5X2VlcHJvbV9yZWFkeShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHkpDQpAQCAtODks NyArODksNyBAQCBzdGF0aWMgaW50IHdhaXRfcGh5X2VlcHJvbV9yZWFkeShzdHJ1Y3QgdXNibmV0 ICpkZXYsIGludCBwaHkpDQoNCiAgaWYgKGkgPj0gU1JfU0hBUkVfVElNRU9VVCkgew0KICBuZXRk ZXZfZXJyKGRldi0+bmV0LCAiJXMgd3JpdGUgdGltZWQgb3V0IVxuIiwNCi0gcGh5ID8gInBoeSIg OiAiZWVwcm9tIik7DQorICAgIHBoeSA/ICJwaHkiIDogImVlcHJvbSIpOw0KICByZXQgPSAtRUlP Ow0KICBnb3RvIG91dDsNCiAgfQ0KQEAgLTk4LDcgKzk4LDggQEAgb3V0Og0KICByZXR1cm4gcmV0 Ow0KIH0NCg0KLXN0YXRpYyBpbnQgc3Jfc2hhcmVfcmVhZF93b3JkKHN0cnVjdCB1c2JuZXQgKmRl diwgaW50IHBoeSwgdTggcmVnLCBfX2xlMTYgKnZhbHVlKQ0KK3N0YXRpYyBpbnQgc3Jfc2hhcmVf cmVhZF93b3JkKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeSwgdTggcmVnLA0KKyAgICAgICBf X2xlMTYgKnZhbHVlKQ0KIHsNCiAgaW50IHJldDsNCg0KQEAgLTExNSwxNCArMTE2LDE1IEBAIHN0 YXRpYyBpbnQgc3Jfc2hhcmVfcmVhZF93b3JkKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeSwg dTggcmVnLCBfX2xlMTYgKnZhbHVlDQogIHJldCA9IHNyX3JlYWQoZGV2LCBFUERSLCAyLCB2YWx1 ZSk7DQoNCiAgbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlYWQgc2hhcmVkICVkIDB4JTAyeCByZXR1 cm5lZCAweCUwNHgsICVkXG4iLA0KLSBwaHksIHJlZywgKnZhbHVlLCByZXQpOw0KKyAgICBwaHks IHJlZywgKnZhbHVlLCByZXQpOw0KDQogb3V0Og0KICBtdXRleF91bmxvY2soJmRldi0+cGh5X211 dGV4KTsNCiAgcmV0dXJuIHJldDsNCiB9DQoNCi1zdGF0aWMgaW50IHNyX3NoYXJlX3dyaXRlX3dv cmQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5LCB1OCByZWcsIF9fbGUxNiB2YWx1ZSkNCitz dGF0aWMgaW50IHNyX3NoYXJlX3dyaXRlX3dvcmQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5 LCB1OCByZWcsDQorICAgICAgICBfX2xlMTYgdmFsdWUpDQogew0KICBpbnQgcmV0Ow0KDQpAQCAt MTU2LDcgKzE1OCw4IEBAIHN0YXRpYyBpbnQgc3I5NzAwX2dldF9lZXByb21fbGVuKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpDQogIHJldHVybiBTUl9FRVBST01fTEVOOw0KIH0NCg0KLXN0YXRpYyBp bnQgc3I5NzAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRv b2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQ0KK3N0YXRpYyBpbnQgc3I5NzAwX2dldF9lZXBy b20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwNCisgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20g KmVlcHJvbSwgdTggKmRhdGEpDQogew0KICBzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJp dihuZXQpOw0KICBfX2xlMTYgKmVidWYgPSAoX19sZTE2ICopZGF0YTsNCkBAIC0xNjgsNyArMTcx LDggQEAgc3RhdGljIGludCBzcjk3MDBfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHINCiAgcmV0dXJuIC1FSU5WQUw7DQoNCiAgZm9y IChpID0gMDsgaSA8IGVlcHJvbS0+bGVuIC8gMjsgaSsrKQ0KLSByZXQgPSBzcl9yZWFkX2VlcHJv bV93b3JkKGRldiwgZWVwcm9tLT5vZmZzZXQgLyAyICsgaSwgJmVidWZbaV0pOw0KKyByZXQgPSBz cl9yZWFkX2VlcHJvbV93b3JkKGRldiwgZWVwcm9tLT5vZmZzZXQgLyAyICsgaSwNCisgICAmZWJ1 ZltpXSk7DQoNCiAgcmV0dXJuIHJldDsNCiB9DQpAQCAtMTk5LDEyICsyMDMsMTMgQEAgc3RhdGlj IGludCBzcl9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwg aW50IGxvYykNCiAgcmVzID0gbGUxNl90b19jcHUocmVzKSAmIH5CTVNSX0xTVEFUVVM7DQoNCiAg bmV0ZGV2X2RiZyhkZXYtPm5ldCwgInNyX21kaW9fcmVhZCgpIHBoeV9pZD0weCUwMngsIGxvYz0w eCUwMngsIHJldHVybnM9MHglMDR4XG4iLA0KLSBwaHlfaWQsIGxvYywgcmVzKTsNCisgICAgcGh5 X2lkLCBsb2MsIHJlcyk7DQoNCiAgcmV0dXJuIHJlczsNCiB9DQoNCi1zdGF0aWMgdm9pZCBzcl9t ZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2Ms IGludCB2YWwpDQorc3RhdGljIHZvaWQgc3JfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAq bmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLA0KKyAgIGludCB2YWwpDQogew0KICBzdHJ1Y3Qg dXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KICBfX2xlMTYgcmVzID0gY3B1X3Rv X2xlMTYodmFsKTsNCkBAIC0yMTUsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgc3JfbWRpb193cml0 ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmEN CiAgfQ0KDQogIG5ldGRldl9kYmcoZGV2LT5uZXQsICJzcl9tZGlvX3dyaXRlKCkgcGh5X2lkPTB4 JTAyeCwgbG9jPTB4JTAyeCwgdmFsPTB4JTA0eFxuIiwNCi0gcGh5X2lkLCBsb2MsIHZhbCk7DQor ICAgIHBoeV9pZCwgbG9jLCB2YWwpOw0KDQogIHNyX3NoYXJlX3dyaXRlX3dvcmQoZGV2LCAxLCBs b2MsIHJlcyk7DQogfQ0KQEAgLTI0MiwxNSArMjQ3LDE1IEBAIHN0YXRpYyBpbnQgc3I5NzAwX2lv Y3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpDQog fQ0KDQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzcjk3MDBfZXRodG9vbF9vcHMg PSB7DQotIC5nZXRfZHJ2aW5mbyA9IHVzYm5ldF9nZXRfZHJ2aW5mbywNCi0gLmdldF9saW5rID0g c3I5NzAwX2dldF9saW5rLA0KLSAuZ2V0X21zZ2xldmVsID0gdXNibmV0X2dldF9tc2dsZXZlbCwN Ci0gLnNldF9tc2dsZXZlbCA9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsDQotIC5nZXRfZWVwcm9tX2xl biA9IHNyOTcwMF9nZXRfZWVwcm9tX2xlbiwNCi0gLmdldF9lZXByb20gPSBzcjk3MDBfZ2V0X2Vl cHJvbSwNCi0gLmdldF9zZXR0aW5ncyA9IHVzYm5ldF9nZXRfc2V0dGluZ3MsDQotIC5zZXRfc2V0 dGluZ3MgPSB1c2JuZXRfc2V0X3NldHRpbmdzLA0KLSAubndheV9yZXNldCA9IHVzYm5ldF9ud2F5 X3Jlc2V0LA0KKyAuZ2V0X2RydmluZm8gPSB1c2JuZXRfZ2V0X2RydmluZm8sDQorIC5nZXRfbGlu ayA9IHNyOTcwMF9nZXRfbGluaywNCisgLmdldF9tc2dsZXZlbCA9IHVzYm5ldF9nZXRfbXNnbGV2 ZWwsDQorIC5zZXRfbXNnbGV2ZWwgPSB1c2JuZXRfc2V0X21zZ2xldmVsLA0KKyAuZ2V0X2VlcHJv bV9sZW4gPSBzcjk3MDBfZ2V0X2VlcHJvbV9sZW4sDQorIC5nZXRfZWVwcm9tID0gc3I5NzAwX2dl dF9lZXByb20sDQorIC5nZXRfc2V0dGluZ3MgPSB1c2JuZXRfZ2V0X3NldHRpbmdzLA0KKyAuc2V0 X3NldHRpbmdzID0gdXNibmV0X3NldF9zZXR0aW5ncywNCisgLm53YXlfcmVzZXQgPSB1c2JuZXRf bndheV9yZXNldCwNCiB9Ow0KDQogc3RhdGljIHZvaWQgc3I5NzAwX3NldF9tdWx0aWNhc3Qoc3Ry dWN0IG5ldF9kZXZpY2UgKm5ldCkNCkBAIC0yNjksNyArMjc0LDcgQEAgc3RhdGljIHZvaWQgc3I5 NzAwX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkNCiAgaWYgKG5ldC0+Zmxh Z3MgJiBJRkZfUFJPTUlTQykgew0KICByeF9jdGwgfD0gUkNSX1BSTVNDOw0KICB9IGVsc2UgaWYg KG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwNCi0gICBuZXRkZXZfbWNfY291bnQobmV0KSA+ IFNSX01DQVNUX01BWCkgew0KKyAgICBuZXRkZXZfbWNfY291bnQobmV0KSA+IFNSX01DQVNUX01B WCkgew0KICByeF9jdGwgfD0gUkNSX1JVTlQ7DQogIH0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0 eShuZXQpKSB7DQogIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7DQpAQCAtMjkwLDcgKzI5NSw3 IEBAIHN0YXRpYyBpbnQgc3I5NzAwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAq bmV0LCB2b2lkICpwKQ0KDQogIGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRh KSkgew0KICBuZXRkZXZfZXJyKG5ldCwgIm5vdCBzZXR0aW5nIGludmFsaWQgbWFjIGFkZHJlc3Mg JXBNXG4iLA0KLSBhZGRyLT5zYV9kYXRhKTsNCisgICAgYWRkci0+c2FfZGF0YSk7DQogIHJldHVy biAtRUlOVkFMOw0KICB9DQoNCkBAIC0zMDEsMTUgKzMwNiwxNSBAQCBzdGF0aWMgaW50IHNyOTcw MF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdm9pZCAqcCkNCiB9DQoN CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNyOTcwMF9uZXRkZXZfb3BzID0g ew0KLSAubmRvX29wZW4gPSB1c2JuZXRfb3BlbiwNCi0gLm5kb19zdG9wID0gdXNibmV0X3N0b3As DQotIC5uZG9fc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0LA0KLSAubmRvX3R4X3RpbWVv dXQgPSB1c2JuZXRfdHhfdGltZW91dCwNCi0gLm5kb19jaGFuZ2VfbXR1ID0gdXNibmV0X2NoYW5n ZV9tdHUsDQotIC5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLA0KLSAubmRv X2RvX2lvY3RsID0gc3I5NzAwX2lvY3RsLA0KLSAubmRvX3NldF9yeF9tb2RlID0gc3I5NzAwX3Nl dF9tdWx0aWNhc3QsDQotIC5uZG9fc2V0X21hY19hZGRyZXNzID0gc3I5NzAwX3NldF9tYWNfYWRk cmVzcywNCisgLm5kb19vcGVuID0gdXNibmV0X29wZW4sDQorIC5uZG9fc3RvcCA9IHVzYm5ldF9z dG9wLA0KKyAubmRvX3N0YXJ0X3htaXQgPSB1c2JuZXRfc3RhcnRfeG1pdCwNCisgLm5kb190eF90 aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQsDQorIC5uZG9fY2hhbmdlX210dSA9IHVzYm5ldF9j aGFuZ2VfbXR1LA0KKyAubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwNCisg Lm5kb19kb19pb2N0bCA9IHNyOTcwMF9pb2N0bCwNCisgLm5kb19zZXRfcnhfbW9kZSA9IHNyOTcw MF9zZXRfbXVsdGljYXN0LA0KKyAubmRvX3NldF9tYWNfYWRkcmVzcyA9IHNyOTcwMF9zZXRfbWFj X2FkZHJlc3MsDQogfTsNCg0KIHN0YXRpYyBpbnQgc3I5NzAwX2JpbmQoc3RydWN0IHVzYm5ldCAq ZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikNCkBAIC0zNjAsNyArMzY1LDggQEAgc3Rh dGljIGludCBzcjk3MDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJm YWNlICppbnRmKQ0KDQogIHNyX21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwg TUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOw0KICBzcl9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1p aS5waHlfaWQsDQotIE1JSV9BRFZFUlRJU0UsIEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfQ1NN QSB8IEFEVkVSVElTRV9QQVVTRV9DQVApOw0KKyAgICAgICAoTUlJX0FEVkVSVElTRSwgQURWRVJU SVNFX0FMTCB8DQorICAgICAgICBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVSVElTRV9QQVVTRV9DQVAp KTsNCiAgbWlpX253YXlfcmVzdGFydCgmZGV2LT5taWkpOw0KDQogb3V0Og0KQEAgLTM3MywxMSAr Mzc5LDExIEBAIHN0YXRpYyBpbnQgc3I5NzAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwg c3RydWN0IHNrX2J1ZmYgKnNrYikNCiAgaW50IGxlbjsNCg0KICAvKiBza2IgY29udGVudCAocGFj a2V0cykgZm9ybWF0IDoNCi0gICogcDAgcDEgcDIgLi4uLi4uIHBtDQotICAqICAgICAgLyAgIFwN Ci0gICogLyBcDQotICAqIC8gXA0KLSAgKiAgLyBcDQorICAqICAgICAgICAgICAgICAgICAgICBw MCAgICAgICAgICAgIHAxICAgICAgICAgICAgcDIgICAgLi4uLi4uICAgIHBtDQorICAqICAgICAg ICAgICAgICAgICAvICAgICAgXA0KKyAgKiAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgXA0K KyAgKiAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAqICAvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICogcDBiMCBwMGIxIHAwYjIg cDBiMyAuLi4uLi4gcDBiKG4tNCkgcDBiKG4tMykuLi5wMGJuDQogICAqDQogICAqIHAwIDogcGFj a2V0IDANCkBAIC00MzEsNyArNDM3LDggQEAgc3RhdGljIGludCBzcjk3MDBfcnhfZml4dXAoc3Ry dWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KICByZXR1cm4gMDsNCiB9DQoN Ci1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNyOTcwMF90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpk ZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKQ0KK3N0YXRpYyBzdHJ1Y3Qgc2tf YnVmZiAqc3I5NzAwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYg KnNrYiwNCisgICAgICAgIGdmcF90IGZsYWdzKQ0KIHsNCiAgaW50IGxlbjsNCg0KQEAgLTUwOCw0 MCArNTE1LDQwIEBAIHN0YXRpYyBpbnQgc3I5NzAwX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAq ZGV2KQ0KICBtaWlfZXRodG9vbF9nc2V0KCZkZXYtPm1paSwgJmVjbWQpOw0KDQogIG5ldGRldl9k YmcoZGV2LT5uZXQsICJsaW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWRcbiIsDQotIGVj bWQuc3BlZWQsIGVjbWQuZHVwbGV4KTsNCisgICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgpOw0K DQogIHJldHVybiAwOw0KIH0NCg0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gc3I5 NzAwX2RyaXZlcl9pbmZvID0gew0KLSAuZGVzY3JpcHRpb24gPSAiQ29yZUNoaXAgU1I5NzAwIFVT QiBFdGhlcm5ldCIsDQotIC5mbGFncyA9IEZMQUdfRVRIRVIsDQotIC5iaW5kID0gc3I5NzAwX2Jp bmQsDQotIC5yeF9maXh1cCA9IHNyOTcwMF9yeF9maXh1cCwNCi0gLnR4X2ZpeHVwID0gc3I5NzAw X3R4X2ZpeHVwLA0KLSAuc3RhdHVzID0gc3I5NzAwX3N0YXR1cywNCi0gLmxpbmtfcmVzZXQgPSBz cjk3MDBfbGlua19yZXNldCwNCi0gLnJlc2V0ID0gc3I5NzAwX2xpbmtfcmVzZXQsDQorIC5kZXNj cmlwdGlvbiA9ICJDb3JlQ2hpcCBTUjk3MDAgVVNCIEV0aGVybmV0IiwNCisgLmZsYWdzID0gRkxB R19FVEhFUiwNCisgLmJpbmQgPSBzcjk3MDBfYmluZCwNCisgLnJ4X2ZpeHVwID0gc3I5NzAwX3J4 X2ZpeHVwLA0KKyAudHhfZml4dXAgPSBzcjk3MDBfdHhfZml4dXAsDQorIC5zdGF0dXMgPSBzcjk3 MDBfc3RhdHVzLA0KKyAubGlua19yZXNldCA9IHNyOTcwMF9saW5rX3Jlc2V0LA0KKyAucmVzZXQg PSBzcjk3MDBfbGlua19yZXNldCwNCiB9Ow0KDQogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2 aWNlX2lkIHByb2R1Y3RzW10gPSB7DQogIHsNCi0gIFVTQl9ERVZJQ0UoMHgwZmU2LCAweDk3MDAp LCAvKiBTUjk3MDAgZGV2aWNlICovDQotICAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykm c3I5NzAwX2RyaXZlcl9pbmZvLA0KLSAgfSwNCisgVVNCX0RFVklDRSgweDBmZTYsIDB4OTcwMCks IC8qIFNSOTcwMCBkZXZpY2UgKi8NCisgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnNy OTcwMF9kcml2ZXJfaW5mbywNCisgfSwNCiAge30sIC8qIEVORCAqLw0KIH07DQoNCiBNT0RVTEVf REVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOw0KDQogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVy IHNyOTcwMF91c2JfZHJpdmVyID0gew0KLSAubmFtZSA9ICJzcjk3MDAiLA0KLSAuaWRfdGFibGUg PSBwcm9kdWN0cywNCi0gLnByb2JlID0gdXNibmV0X3Byb2JlLA0KLSAuZGlzY29ubmVjdCA9IHVz Ym5ldF9kaXNjb25uZWN0LA0KLSAuc3VzcGVuZCA9IHVzYm5ldF9zdXNwZW5kLA0KLSAucmVzdW1l ID0gdXNibmV0X3Jlc3VtZSwNCi0gLmRpc2FibGVfaHViX2luaXRpYXRlZF9scG0gPSAxLA0KKyAu bmFtZSA9ICJzcjk3MDAiLA0KKyAuaWRfdGFibGUgPSBwcm9kdWN0cywNCisgLnByb2JlID0gdXNi bmV0X3Byb2JlLA0KKyAuZGlzY29ubmVjdCA9IHVzYm5ldF9kaXNjb25uZWN0LA0KKyAuc3VzcGVu ZCA9IHVzYm5ldF9zdXNwZW5kLA0KKyAucmVzdW1lID0gdXNibmV0X3Jlc3VtZSwNCisgLmRpc2Fi bGVfaHViX2luaXRpYXRlZF9scG0gPSAxLA0KIH07DQoNCiBtb2R1bGVfdXNiX2RyaXZlcihzcjk3 MDBfdXNiX2RyaXZlcik7DQo=