diff options
Diffstat (limited to 'drivers/net/pcmcia/3c589_cs.c')
-rw-r--r-- | drivers/net/pcmcia/3c589_cs.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c index 7e8036f2e19e..4faf1fa08254 100644 --- a/drivers/net/pcmcia/3c589_cs.c +++ b/drivers/net/pcmcia/3c589_cs.c | |||
@@ -105,7 +105,7 @@ enum RxFilter { | |||
105 | #define TX_TIMEOUT ((400*HZ)/1000) | 105 | #define TX_TIMEOUT ((400*HZ)/1000) |
106 | 106 | ||
107 | struct el3_private { | 107 | struct el3_private { |
108 | dev_link_t link; | 108 | struct pcmcia_device *p_dev; |
109 | dev_node_t node; | 109 | dev_node_t node; |
110 | struct net_device_stats stats; | 110 | struct net_device_stats stats; |
111 | /* For transceiver monitoring */ | 111 | /* For transceiver monitoring */ |
@@ -173,8 +173,8 @@ static void tc589_detach(struct pcmcia_device *p_dev); | |||
173 | static int tc589_attach(struct pcmcia_device *p_dev) | 173 | static int tc589_attach(struct pcmcia_device *p_dev) |
174 | { | 174 | { |
175 | struct el3_private *lp; | 175 | struct el3_private *lp; |
176 | dev_link_t *link; | ||
177 | struct net_device *dev; | 176 | struct net_device *dev; |
177 | dev_link_t *link = dev_to_instance(p_dev); | ||
178 | 178 | ||
179 | DEBUG(0, "3c589_attach()\n"); | 179 | DEBUG(0, "3c589_attach()\n"); |
180 | 180 | ||
@@ -183,8 +183,8 @@ static int tc589_attach(struct pcmcia_device *p_dev) | |||
183 | if (!dev) | 183 | if (!dev) |
184 | return -ENOMEM; | 184 | return -ENOMEM; |
185 | lp = netdev_priv(dev); | 185 | lp = netdev_priv(dev); |
186 | link = &lp->link; | ||
187 | link->priv = dev; | 186 | link->priv = dev; |
187 | lp->p_dev = p_dev; | ||
188 | 188 | ||
189 | spin_lock_init(&lp->lock); | 189 | spin_lock_init(&lp->lock); |
190 | link->io.NumPorts1 = 16; | 190 | link->io.NumPorts1 = 16; |
@@ -212,9 +212,6 @@ static int tc589_attach(struct pcmcia_device *p_dev) | |||
212 | #endif | 212 | #endif |
213 | SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops); | 213 | SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops); |
214 | 214 | ||
215 | link->handle = p_dev; | ||
216 | p_dev->instance = link; | ||
217 | |||
218 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; | 215 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; |
219 | tc589_config(link); | 216 | tc589_config(link); |
220 | 217 | ||
@@ -237,7 +234,7 @@ static void tc589_detach(struct pcmcia_device *p_dev) | |||
237 | 234 | ||
238 | DEBUG(0, "3c589_detach(0x%p)\n", link); | 235 | DEBUG(0, "3c589_detach(0x%p)\n", link); |
239 | 236 | ||
240 | if (link->dev) | 237 | if (link->dev_node) |
241 | unregister_netdev(dev); | 238 | unregister_netdev(dev); |
242 | 239 | ||
243 | if (link->state & DEV_CONFIG) | 240 | if (link->state & DEV_CONFIG) |
@@ -345,13 +342,13 @@ static void tc589_config(dev_link_t *link) | |||
345 | else | 342 | else |
346 | printk(KERN_ERR "3c589_cs: invalid if_port requested\n"); | 343 | printk(KERN_ERR "3c589_cs: invalid if_port requested\n"); |
347 | 344 | ||
348 | link->dev = &lp->node; | 345 | link->dev_node = &lp->node; |
349 | link->state &= ~DEV_CONFIG_PENDING; | 346 | link->state &= ~DEV_CONFIG_PENDING; |
350 | SET_NETDEV_DEV(dev, &handle_to_dev(handle)); | 347 | SET_NETDEV_DEV(dev, &handle_to_dev(handle)); |
351 | 348 | ||
352 | if (register_netdev(dev) != 0) { | 349 | if (register_netdev(dev) != 0) { |
353 | printk(KERN_ERR "3c589_cs: register_netdev() failed\n"); | 350 | printk(KERN_ERR "3c589_cs: register_netdev() failed\n"); |
354 | link->dev = NULL; | 351 | link->dev_node = NULL; |
355 | goto failed; | 352 | goto failed; |
356 | } | 353 | } |
357 | 354 | ||
@@ -572,7 +569,7 @@ static int el3_config(struct net_device *dev, struct ifmap *map) | |||
572 | static int el3_open(struct net_device *dev) | 569 | static int el3_open(struct net_device *dev) |
573 | { | 570 | { |
574 | struct el3_private *lp = netdev_priv(dev); | 571 | struct el3_private *lp = netdev_priv(dev); |
575 | dev_link_t *link = &lp->link; | 572 | dev_link_t *link = lp->p_dev; |
576 | 573 | ||
577 | if (!DEV_OK(link)) | 574 | if (!DEV_OK(link)) |
578 | return -ENODEV; | 575 | return -ENODEV; |
@@ -833,7 +830,7 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev) | |||
833 | { | 830 | { |
834 | struct el3_private *lp = netdev_priv(dev); | 831 | struct el3_private *lp = netdev_priv(dev); |
835 | unsigned long flags; | 832 | unsigned long flags; |
836 | dev_link_t *link = &lp->link; | 833 | dev_link_t *link = lp->p_dev; |
837 | 834 | ||
838 | if (DEV_OK(link)) { | 835 | if (DEV_OK(link)) { |
839 | spin_lock_irqsave(&lp->lock, flags); | 836 | spin_lock_irqsave(&lp->lock, flags); |
@@ -935,7 +932,7 @@ static int el3_rx(struct net_device *dev) | |||
935 | static void set_multicast_list(struct net_device *dev) | 932 | static void set_multicast_list(struct net_device *dev) |
936 | { | 933 | { |
937 | struct el3_private *lp = netdev_priv(dev); | 934 | struct el3_private *lp = netdev_priv(dev); |
938 | dev_link_t *link = &lp->link; | 935 | dev_link_t *link = lp->p_dev; |
939 | kio_addr_t ioaddr = dev->base_addr; | 936 | kio_addr_t ioaddr = dev->base_addr; |
940 | u16 opts = SetRxFilter | RxStation | RxBroadcast; | 937 | u16 opts = SetRxFilter | RxStation | RxBroadcast; |
941 | 938 | ||
@@ -950,7 +947,7 @@ static void set_multicast_list(struct net_device *dev) | |||
950 | static int el3_close(struct net_device *dev) | 947 | static int el3_close(struct net_device *dev) |
951 | { | 948 | { |
952 | struct el3_private *lp = netdev_priv(dev); | 949 | struct el3_private *lp = netdev_priv(dev); |
953 | dev_link_t *link = &lp->link; | 950 | dev_link_t *link = lp->p_dev; |
954 | kio_addr_t ioaddr = dev->base_addr; | 951 | kio_addr_t ioaddr = dev->base_addr; |
955 | 952 | ||
956 | DEBUG(1, "%s: shutting down ethercard.\n", dev->name); | 953 | DEBUG(1, "%s: shutting down ethercard.\n", dev->name); |