diff options
author | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:26:44 -0600 |
---|---|---|
committer | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:26:44 -0600 |
commit | 23c0a9c5dd350701e0ef3f428d37da4130f382ce (patch) | |
tree | ba58962ca2e6a72356f3bb2f73336898aea15079 | |
parent | c8ebc96d995f386afea6e24766153c199b1a8ca8 (diff) |
CR ENGR00052918 fec 2.6.22 workqueue changes
Patch for CR ENGR00052918: This patch updates the FEC ethernet with
workqueue changes for the linux 2.6.22 kernel.
Applies to MX27 platform.
http://www.bitshrine.org/gpp/linux-2.6.22-mx-CR-ENGR00052918-fec-2.6.22-workqueue-chang.patch
-rw-r--r-- | drivers/net/fec.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 91e0a740e640..938426953149 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -236,6 +236,7 @@ struct fec_enet_private { uint phy_speed; phy_info_t const *phy; struct work_struct phy_task; + struct net_device *net; uint sequence_done; uint mii_phy_task_queued; @@ -2360,9 +2361,11 @@ static void mii_display_status(struct net_device *dev) printk(".\n"); } -static void mii_display_config(struct net_device *dev) +static void mii_display_config(struct work_struct *work) { - struct fec_enet_private *fep = netdev_priv(dev); + struct fec_enet_private *fep = + container_of(work, struct fec_enet_private, phy_task); + struct net_device *dev = fep->net; uint status = fep->phy_status; /* @@ -2396,9 +2399,11 @@ static void mii_display_config(struct net_device *dev) fep->sequence_done = 1; } -static void mii_relink(struct net_device *dev) +static void mii_relink(struct work_struct *work) { - struct fec_enet_private *fep = netdev_priv(dev); + struct fec_enet_private *fep = + container_of(work, struct fec_enet_private, phy_task); + struct net_device *dev = fep->net; int duplex; /* @@ -2442,7 +2447,7 @@ static void mii_queue_relink(uint mii_reg, struct net_device *dev) return; fep->mii_phy_task_queued = 1; - INIT_WORK(&fep->phy_task, (void*)mii_relink, dev); + INIT_WORK(&fep->phy_task, (void*)mii_relink); schedule_work(&fep->phy_task); } @@ -2455,7 +2460,7 @@ static void mii_queue_config(uint mii_reg, struct net_device *dev) return; fep->mii_phy_task_queued = 1; - INIT_WORK(&fep->phy_task, (void*)mii_display_config, dev); + INIT_WORK(&fep->phy_task, (void*)mii_display_config); schedule_work(&fep->phy_task); } @@ -2739,7 +2744,9 @@ int __init fec_enet_init(struct net_device *dev) /* Only allow us to be probed once. */ if (index >= FEC_MAX_PORTS) return -ENXIO; - + + fep->net = dev; + spin_lock_init(&(fep->lock)); /* Allocate memory for buffer descriptors. |