From patchwork Tue Mar 31 10:44:15 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Henk Stegeman X-Patchwork-Id: 25384 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id EC466DDF05 for ; Tue, 31 Mar 2009 21:44:39 +1100 (EST) X-Original-To: linuxppc-dev@ozlabs.org Delivered-To: linuxppc-dev@ozlabs.org Received: from ey-out-2122.google.com (ey-out-2122.google.com [74.125.78.24]) by ozlabs.org (Postfix) with ESMTP id 035A6DDE0F for ; Tue, 31 Mar 2009 21:44:19 +1100 (EST) Received: by ey-out-2122.google.com with SMTP id 4so461779eyf.15 for ; Tue, 31 Mar 2009 03:44:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=a9hJ8RncxFFP2zFnIkUPC7xM27vtTXOIbeHxCciktSw=; b=ITN7EIkdkpGvStjEGkyE3VnxWWAekjy1GhdSRSzW7ltFZfnNBb9t6f5uRvDxIcH2ep H2HnHOqFduHUARl/7hb5lJTDs/b3FipzmHmw5Rq5hS3tk1VCX95eCxCL9/KHO4n4rodL A9apg3dp1Qo0fd5pAdAzbnsJvNRSbFVKbvn20= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=P+mrOvc5AZh5RZOzBdkKvurPdLXg3umcH2vohw74RiK3/ltRMRJFpL+JE+Lcbt6Vib LFqC+a3WaO6hoxy/Iij0+RE+YHlKs4zp5wbLRqq329XD2v+li16lctnfQF1cCUTJBK+U FqaF+J0mXjHv5lTPE0bv6ohIW5C2A7S6xWG0k= MIME-Version: 1.0 Received: by 10.216.47.209 with SMTP id t59mr2001216web.127.1238496255792; Tue, 31 Mar 2009 03:44:15 -0700 (PDT) Date: Tue, 31 Mar 2009 12:44:15 +0200 Message-ID: Subject: Patch: Fix fec_mpc52xx driver to use net_device_ops From: Henk Stegeman To: linuxppc-dev@ozlabs.org, netdev@vger.kernel.org X-BeenThere: linuxppc-dev@ozlabs.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org Fix fec_mpc52xx driver to use net_device_ops and to be careful not to dereference phy_device if a phy has not yet been connected. Signed-off-by: Henk Stegeman priv->msg_enable = level; } @@ -882,12 +898,31 @@ static int mpc52xx_fec_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct mpc52xx_fec_priv *priv = netdev_priv(dev); + if (!priv->phydev) + return -ENODEV; + return mpc52xx_fec_phy_mii_ioctl(priv, if_mii(rq), cmd); } /* ======================================================================== */ /* OF Driver */ /* ======================================================================== */ +static const struct net_device_ops mpc52xx_fec_netdev_ops = { + .ndo_open = mpc52xx_fec_open, + .ndo_stop = mpc52xx_fec_close, + .ndo_start_xmit = mpc52xx_fec_hard_start_xmit, + .ndo_tx_timeout = mpc52xx_fec_tx_timeout, + .ndo_get_stats = mpc52xx_fec_get_stats, + .ndo_set_multicast_list = mpc52xx_fec_set_multicast_list, + .ndo_validate_addr = eth_validate_addr, + .ndo_set_mac_address = mpc52xx_fec_set_mac_address, + .ndo_do_ioctl = mpc52xx_fec_ioctl, + +#ifdef CONFIG_NET_POLL_CONTROLLER + .ndo_poll_controller = mpc52xx_fec_poll_controller, +#endif +}; + static int __devinit mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match) @@ -929,20 +964,10 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match) return -EBUSY; /* Init ether ndev with what we have */ - ndev->open = mpc52xx_fec_open; - ndev->stop = mpc52xx_fec_close; - ndev->hard_start_xmit = mpc52xx_fec_hard_start_xmit; - ndev->do_ioctl = mpc52xx_fec_ioctl; ndev->ethtool_ops = &mpc52xx_fec_ethtool_ops; - ndev->get_stats = mpc52xx_fec_get_stats; - ndev->set_mac_address = mpc52xx_fec_set_mac_address; - ndev->set_multicast_list = mpc52xx_fec_set_multicast_list; - ndev->tx_timeout = mpc52xx_fec_tx_timeout; ndev->watchdog_timeo = FEC_WATCHDOG_TIMEOUT; ndev->base_addr = mem.start; -#ifdef CONFIG_NET_POLL_CONTROLLER - ndev->poll_controller = mpc52xx_fec_poll_controller; -#endif + ndev->netdev_ops = &mpc52xx_fec_netdev_ops; priv->t_irq = priv->r_irq = ndev->irq = NO_IRQ; /* IRQ are free for now */ diff --git a/drivers/net/fec_mpc52xx.c b/drivers/net/fec_mpc52xx.c index cd8e98b..ca76b95 100644 --- a/drivers/net/fec_mpc52xx.c +++ b/drivers/net/fec_mpc52xx.c @@ -847,24 +847,40 @@ static void mpc52xx_fec_get_drvinfo(struct net_device *dev, static int mpc52xx_fec_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) { struct mpc52xx_fec_priv *priv = netdev_priv(dev); + + if (!priv->phydev) + return -ENODEV; + return phy_ethtool_gset(priv->phydev, cmd); } static int mpc52xx_fec_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) { struct mpc52xx_fec_priv *priv = netdev_priv(dev); + + if (!priv->phydev) + return -ENODEV; + return phy_ethtool_sset(priv->phydev, cmd); } static u32 mpc52xx_fec_get_msglevel(struct net_device *dev) { struct mpc52xx_fec_priv *priv = netdev_priv(dev); + + if (!priv->phydev) + return 0; + return priv->msg_enable; } static void mpc52xx_fec_set_msglevel(struct net_device *dev, u32 level) { struct mpc52xx_fec_priv *priv = netdev_priv(dev); + + if (!priv->phydev) + return; +