From patchwork Mon Jun 29 13:13:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Edich X-Patchwork-Id: 1319048 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=quarantine dis=none) header.from=microchip.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=microchip.com header.i=@microchip.com header.a=rsa-sha256 header.s=mchp header.b=XZeeUWUe; dkim=pass (1024-bit key; unprotected) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-microchiptechnology-onmicrosoft-com header.b=fIFet3Dx; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 49wckW2NNgz9sQt for ; Tue, 30 Jun 2020 05:19:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731781AbgF2TTq (ORCPT ); Mon, 29 Jun 2020 15:19:46 -0400 Received: from esa2.microchip.iphmx.com ([68.232.149.84]:35783 "EHLO esa2.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732072AbgF2TTo (ORCPT ); Mon, 29 Jun 2020 15:19:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1593458383; x=1624994383; h=from:to:cc:subject:date:message-id:content-id: content-transfer-encoding:mime-version; bh=S7RV17VsWqu3dyTvljWWEJLWl/0iARjuqJBb/CFh71g=; b=XZeeUWUe2tnA2JsTMmi9TvSegTjI6WqDJ8zFIb7Lpv1mwiXenkMKrsJO y7W17tkhbJ1a8rTsRqHs3o/ZKvvuPedeEz1ANnDklCkdHcOpXbwYWB3uf 8W5nxmqVHusvGw+VHUsKEHbovQEzJOVOE/qS2eJHrogsmMcg0YXsjAr9p QF7EPzGpydbNmSBlDolRM+kLV+P8VQCkbYTSQfdROxOdRWuLYPAECmKNs KO1SLjKfft1bkEZ8NXCQ7KfA6iS2uBPReGyjHZr3MSVjI273Bm26rsnaZ o8P6cD+Qn5V1rPgZdyElivfytZ0dUafsdpOpu9XgF6ey25yHIqWJfYsXO w==; IronPort-SDR: 7/f5Nyv9y5UVQ8Vk8NJwxeYxa4i+tcXtoYXC6nEseeG/M7HTVSV043UcJhjcKRPWR5QALF8XRP Reh7NlPFffWJjCondHZySLGwsMSM0Zi9VH6yUgCHI/DJSDZWdqOem/4GAWjOjkwOpqkZ2HIA5F qMhICudoBLerUSTO3FI8thKSphNABh9C3wUlyStXiNzPNLbN+vfQWtpG8G4fKlyHZuNcvWoBkR U9XKvWedkMkqU7SPkZ/lbU0psdROxr7KdGvd1xauxE0qjQZlRZRZoiBadQEnw38VunzLKsGPn8 dvw= X-IronPort-AV: E=Sophos;i="5.75,294,1589266800"; d="scan'208";a="80077633" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 29 Jun 2020 06:13:21 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Mon, 29 Jun 2020 06:13:21 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3 via Frontend Transport; Mon, 29 Jun 2020 06:13:21 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ei4ML5ZCGJEc/hTmgiitI/TnCYS/iPtc24AM3CG1/EWVcNtHEitwfxbtEF2rlSBm9un70DIBGohzM7ZSp6eHLl1RCNpjeEPrsuTnXMG0MbzDBWnmqr2TitCZUYZ7IeJtL2dJy2PazTKbuX+0kaaJtqAp+cUA4HRczeIN5M/4HnXBBIvT7wuFD47CAmCpGGnro4odVQX7P6voGrddBonMxB5NwK82NfedZD7OynhrblCDOekesmw5owWI0M940NUK6DZcXhLmf2yDtQ2w0KZSV+3cVFToiySr4+Do0REg2Kt6WYUe6VTwSfP0TS734mJS6yBsmsStM0By930R01W0cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S7RV17VsWqu3dyTvljWWEJLWl/0iARjuqJBb/CFh71g=; b=ZSKLPwzR7y9jAkH+3fb4d60qNAUoOCusQOGVyzOhqe/M4V/Gy7ciS/20xy/tTPHcpNMujrF+LxzZWjf1tjfGkQpZkT7fNyjnZsoa7+kbVA4U0eufSPccmRrUhUjXLQZaRhMylurGQtCqoG2NxYmp1Q3OGybOQo9nLIlZeYrFrqbV8FTZYCTBdVjJTX0dQ9IOicmnXoeGAfndDoDz1zTH3p83uytaSy6EpF33h7l5/Jq+ZY68exQM7F7nLHe6zQfOlzakUTjeMJfuqolLuCT3ugZqgZperqG/y4hQs1CtLQdlH/1xCUO5bKRq/YBgMM2JaU9lGLWmBF2vtRpaym+M+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S7RV17VsWqu3dyTvljWWEJLWl/0iARjuqJBb/CFh71g=; b=fIFet3DxXO8dd447aiP1IGFcZEnByJ2QhGAUAaz9x7Zh5zN7jt553jKB0Yd+Pn76XO8oxqrOy9TUh9TR2W4tdrlQIyE738koxdBZsAiC7m4Zm4emsRjNemgBjT89cUEVM+EsAJ2lRUGfCAJkDrK6sJgaf3JEDer2v/0LvmfQioI= Received: from BY5PR11MB3927.namprd11.prod.outlook.com (2603:10b6:a03:186::21) by BY5PR11MB4434.namprd11.prod.outlook.com (2603:10b6:a03:1c2::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.20; Mon, 29 Jun 2020 13:13:19 +0000 Received: from BY5PR11MB3927.namprd11.prod.outlook.com ([fe80::5993:d0ac:9849:d311]) by BY5PR11MB3927.namprd11.prod.outlook.com ([fe80::5993:d0ac:9849:d311%7]) with mapi id 15.20.3131.027; Mon, 29 Jun 2020 13:13:19 +0000 From: To: , , CC: Subject: [PATCH net-next 7/8] smsc95xx: use PHY framework instead of MII library Thread-Topic: [PATCH net-next 7/8] smsc95xx: use PHY framework instead of MII library Thread-Index: AQHWThcOXiClW+0yNkaESaHFHegHIA== Date: Mon, 29 Jun 2020 13:13:18 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.3 authentication-results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=microchip.com; x-originating-ip: [93.202.178.57] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6f6bff8b-a442-4d10-090b-08d81c2e311b x-ms-traffictypediagnostic: BY5PR11MB4434: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:6108; x-forefront-prvs: 044968D9E1 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ligNQ7Ud1r9iDnQuGGevecaNAJaVgrMxlb/mzcBBpA+uXljmB8um55L2dWLsafrgirt9KZlJKQEqdMxwJGgYkc8sbQrWoPtkuK9t2gIXoPlmbW+DKWrGnwSneI3kWipK3zxIGaYeSPa/RK0TtDljzmflAiz2vk3fb5UxYoEh+baDtboWa0AwCre0e9vC/glljXWhU3WUsR65no749QiH5sxurU1/MNK2UCJaoGu0ZgH9gZo8BpJAodMn2Z04laDj6mWDYJmHUH34h3+3DEAbIYYvdCLTw9Gst3Fpo/q30agg/wq/zlcnJzElpn+YXdiJXqEUHDOW2dHWBQ6hi13Axw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR11MB3927.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(396003)(366004)(136003)(39860400002)(346002)(376002)(83380400001)(6512007)(8676002)(8936002)(5660300002)(36756003)(110136005)(4326008)(316002)(2906002)(6486002)(107886003)(66946007)(6506007)(2616005)(76116006)(91956017)(66476007)(66556008)(64756008)(66446008)(186003)(26005)(478600001)(86362001)(71200400001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: Tlgvxq5HS5ASyn80aauvG0Ulx+VJF9iy7QtT6eW9smF2DZbQKDA6iJXG3oPOWKdlW34vSqKoo6Rfx2AvY9MZg0vzNaAjiAQymkaWNijlkka1L0EF1L4NqqdoyAUhW+umYFJ/t8m5eyuo1XhndUMBnwQkIryFDTLeISkF2Cm0fzSb5uXOckWqvFF78IH7FBw/kI4r/7ybpY3M0QM9/uZ03ziYVRbmHlJ0Hz6DCTTWq785AX4INBZBOYE6QOQaoFFRX/vfNK0aEJys3A8d1DBNs21i0EJcylXTDCZcs/B4n8KhEujPFAIxHral3esrG5wHYTYxBcVlSvRzZW0VTxQdhCImMsl46dg6z6+XplpY9yMA47L4ou4GM8W6ohKudV6Z9ZxjnK3r+ejO68A4lBl2ecDLl1Z6q8wHY0AEg8SpRCUR6DCZ6K0RGtTpytrcO+aA35u9QORnyO7eUklbGrdq+YLKtsQQdbbIQx6xSHWTN1yQ54ThmrElRwU1Yx82/3CL Content-ID: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB3927.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f6bff8b-a442-4d10-090b-08d81c2e311b X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jun 2020 13:13:18.8795 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1SXq7NNDXRJrHJ5/PXNc2l9oD9P1ufTH3Yi+9PzXbgBBZGOmLZOibfJKb8SClhiNNANaPKSfg/fDmsmBgMUNkKlRLKA8kG1plg90a1ZgBZ8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR11MB4434 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since the PHY framework is used anyway, replace the rest of the calls to the MII library, including those from the USB Network driver infrastructure, by the calls to the PHY framework. Signed-off-by: Andre Edich --- drivers/net/usb/smsc95xx.c | 92 +++++++++++++++----------------------- 1 file changed, 36 insertions(+), 56 deletions(-) u32 chip_id; u32 mac_cr; @@ -173,10 +176,9 @@ static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, return -EIO; } -static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, +static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx, int in_pm) { - struct usbnet *dev = netdev_priv(netdev); u32 val, addr; int ret; @@ -190,8 +192,8 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, } /* set the address, index & direction (read from PHY) */ - phy_id &= dev->mii.phy_id_mask; - idx &= dev->mii.reg_num_mask; + phy_id &= PHY_ID_MASK; + idx &= REG_NUM_MASK; addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_; ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); if (ret < 0) { @@ -218,10 +220,9 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, return ret; } -static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, +static void __smsc95xx_mdio_write(struct usbnet *dev, int phy_id, int idx, int regval, int in_pm) { - struct usbnet *dev = netdev_priv(netdev); u32 val, addr; int ret; @@ -242,8 +243,8 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, } /* set the address, index & direction (write to PHY) */ - phy_id &= dev->mii.phy_id_mask; - idx &= dev->mii.reg_num_mask; + phy_id &= PHY_ID_MASK; + idx &= REG_NUM_MASK; addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_; ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); if (ret < 0) { @@ -263,34 +264,23 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, static int smsc95xx_mdio_read_nopm(struct usbnet *dev, int idx) { - struct mii_if_info *mii = &dev->mii; + struct smsc95xx_priv *pdata = dev->driver_priv; - return __smsc95xx_mdio_read(dev->net, mii->phy_id, idx, 1); + return __smsc95xx_mdio_read(dev, pdata->phydev->mdio.addr, idx, 1); } static void smsc95xx_mdio_write_nopm(struct usbnet *dev, int idx, int regval) { - struct mii_if_info *mii = &dev->mii; - - __smsc95xx_mdio_write(dev->net, mii->phy_id, idx, regval, 1); -} - -static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) -{ - return __smsc95xx_mdio_read(netdev, phy_id, idx, 0); -} + struct smsc95xx_priv *pdata = dev->driver_priv; -static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx, - int regval) -{ - __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 0); + __smsc95xx_mdio_write(dev, pdata->phydev->mdio.addr, idx, regval, 1); } static int smsc95xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx) { struct usbnet *dev = bus->priv; - return __smsc95xx_mdio_read(dev->net, phy_id, idx, 0); + return __smsc95xx_mdio_read(dev, phy_id, idx, 0); } static int smsc95xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx, @@ -298,7 +288,7 @@ static int smsc95xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx, { struct usbnet *dev = bus->priv; - __smsc95xx_mdio_write(dev->net, phy_id, idx, regval, 0); + __smsc95xx_mdio_write(dev, phy_id, idx, regval, 0); return 0; } @@ -569,8 +559,7 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, static int smsc95xx_link_reset(struct usbnet *dev) { struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev- >data[0]); - struct mii_if_info *mii = &dev->mii; - struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET }; + struct ethtool_link_ksettings cmd; unsigned long flags; u16 lcladv, rmtadv; int ret; @@ -584,17 +573,16 @@ static int smsc95xx_link_reset(struct usbnet *dev) if (ret < 0) return ret; - mii_check_media(mii, 1, 1); - mii_ethtool_gset(&dev->mii, &ecmd); + phy_ethtool_ksettings_get(pdata->phydev, &cmd); lcladv = phy_read(pdata->phydev, MII_ADVERTISE); rmtadv = phy_read(pdata->phydev, MII_LPA); netif_dbg(dev, link, dev->net, "speed: %u duplex: %d lcladv: %04x rmtadv: %04x\n", - ethtool_cmd_speed(&ecmd), ecmd.duplex, lcladv, rmtadv); + cmd.base.speed, cmd.base.duplex, lcladv, rmtadv); spin_lock_irqsave(&pdata->mac_cr_lock, flags); - if (ecmd.duplex != DUPLEX_FULL) { + if (cmd.base.duplex != DUPLEX_FULL) { pdata->mac_cr &= ~MAC_CR_FDPX_; pdata->mac_cr |= MAC_CR_RCVOWN_; } else { @@ -607,7 +595,8 @@ static int smsc95xx_link_reset(struct usbnet *dev) if (ret < 0) return ret; - ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); + ret = smsc95xx_phy_update_flowcontrol(dev, cmd.base.duplex, lcladv, + rmtadv); if (ret < 0) netdev_warn(dev->net, "Error updating PHY flow control\n"); @@ -780,6 +769,9 @@ static void set_mdix_status(struct net_device *net, __u8 mdix_ctrl) struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev- >data[0]); int buf; + if (pdata->mdix_ctrl == mdix_ctrl) + return; + if ((pdata->chip_id == ID_REV_CHIP_ID_9500A_) || (pdata->chip_id == ID_REV_CHIP_ID_9530_) || (pdata->chip_id == ID_REV_CHIP_ID_89530_) || @@ -821,7 +813,7 @@ static int smsc95xx_get_link_ksettings(struct net_device *net, struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev- >data[0]); int retval; - retval = usbnet_get_link_ksettings(net, cmd); + retval = phy_ethtool_get_link_ksettings(net, cmd); cmd->base.eth_tp_mdix = pdata->mdix_ctrl; cmd->base.eth_tp_mdix_ctrl = pdata->mdix_ctrl; @@ -832,21 +824,19 @@ static int smsc95xx_get_link_ksettings(struct net_device *net, static int smsc95xx_set_link_ksettings(struct net_device *net, const struct ethtool_link_ksettings *cmd) { - struct usbnet *dev = netdev_priv(net); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev- >data[0]); - int retval; - - if (pdata->mdix_ctrl != cmd->base.eth_tp_mdix_ctrl) - set_mdix_status(net, cmd->base.eth_tp_mdix_ctrl); - - retval = usbnet_set_link_ksettings(net, cmd); + set_mdix_status(net, cmd->base.eth_tp_mdix_ctrl); + return phy_ethtool_set_link_ksettings(net, cmd); +} - return retval; +static u32 smsc95xx_get_link(struct net_device *net) +{ + phy_read_status(net->phydev); + return net->phydev->link; } static const struct ethtool_ops smsc95xx_ethtool_ops = { - .get_link = usbnet_get_link, - .nway_reset = usbnet_nway_reset, + .get_link = smsc95xx_get_link, + .nway_reset = phy_ethtool_nway_reset, .get_drvinfo = usbnet_get_drvinfo, .get_msglevel = usbnet_get_msglevel, .set_msglevel = usbnet_set_msglevel, @@ -864,12 +854,10 @@ static const struct ethtool_ops smsc95xx_ethtool_ops = { static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) { - struct usbnet *dev = netdev_priv(netdev); - if (!netif_running(netdev)) return -EINVAL; - return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); + return phy_mii_ioctl(netdev->phydev, rq, cmd); } static void smsc95xx_init_mac_address(struct usbnet *dev) @@ -1179,7 +1167,7 @@ static int smsc95xx_start_phy(struct usbnet *dev) phy_attached_info(net->phydev); phy_start(net->phydev); - mii_nway_restart(&dev->mii); + phy_start_aneg(net->phydev); return 0; } @@ -1268,9 +1256,6 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) pdata->mdiobus->write = smsc95xx_mdiobus_write; pdata->mdiobus->name = "smsc95xx-mdiobus"; - dev->mii.phy_id_mask = 0x1f; - dev->mii.reg_num_mask = 0x1f; - snprintf(pdata->mdiobus->id, ARRAY_SIZE(pdata->mdiobus->id), "usb-%03d:%03d", dev->udev->bus->busnum, dev->udev- >devnum); @@ -1287,11 +1272,6 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) goto unregister_mdio; } - dev->mii.dev = dev->net; - dev->mii.mdio_read = smsc95xx_mdio_read; - dev->mii.mdio_write = smsc95xx_mdio_write; - dev->mii.phy_id = pdata->phydev->mdio.addr; - /* detect device revision as different features may be available */ ret = smsc95xx_read_reg(dev, ID_REV, &val); if (ret < 0) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index bcdd7e726f5b..06fcc2518305 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -51,6 +51,9 @@ #define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \ SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3) +#define PHY_ID_MASK 0x1f +#define REG_NUM_MASK 0x1f + struct smsc95xx_priv {