lkml.org 
[lkml]   [2003]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 2.5 2/5] alloc_etherdev for 3c589_cs
Date
net_device is no longer allocated as part of the driver's private structure,
instead it's allocated via alloc_netdev. compile tested only since no hardware
against 2.5.73-bk


-daniel

===== drivers/net/pcmcia/3c589_cs.c 1.17 vs edited =====
--- 1.17/drivers/net/pcmcia/3c589_cs.c Sun May 4 23:20:34 2003
+++ edited/drivers/net/pcmcia/3c589_cs.c Mon Jun 23 23:24:48 2003
@@ -106,7 +106,6 @@

struct el3_private {
dev_link_t link;
- struct net_device dev;
dev_node_t node;
struct net_device_stats stats;
/* For transceiver monitoring */
@@ -213,14 +212,14 @@
flush_stale_links();

/* Create new ethernet device */
- lp = kmalloc(sizeof(*lp), GFP_KERNEL);
- if (!lp) return NULL;
- memset(lp, 0, sizeof(*lp));
+ dev = alloc_etherdev(sizeof(struct el3_private));
+ if (!dev)
+ return NULL;
+ lp = dev->priv;
+ link = &lp->link;
+ link->priv = dev;
+
spin_lock_init(&lp->lock);
-
- link = &lp->link; dev = &lp->dev;
- link->priv = dev->priv = link->irq.Instance = lp;
-
init_timer(&link->release);
link->release.function = &tc589_release;
link->release.data = (unsigned long)link;
@@ -234,6 +233,7 @@
for (i = 0; i < 4; i++)
link->irq.IRQInfo2 |= 1 << irq_list[i];
link->irq.Handler = &el3_interrupt;
+ link->irq.Instance = dev;
link->conf.Attributes = CONF_ENABLE_IRQ;
link->conf.Vcc = 50;
link->conf.IntType = INT_MEMORY_AND_IO;
@@ -246,7 +246,6 @@
dev->set_config = &el3_config;
dev->get_stats = &el3_get_stats;
dev->set_multicast_list = &set_multicast_list;
- ether_setup(dev);
dev->open = &el3_open;
dev->stop = &el3_close;
#ifdef HAVE_TX_TIMEOUT
@@ -288,7 +287,7 @@

static void tc589_detach(dev_link_t *link)
{
- struct el3_private *lp = link->priv;
+ struct net_device *dev = link->priv;
dev_link_t **linkp;

DEBUG(0, "3c589_detach(0x%p)\n", link);
@@ -314,8 +313,8 @@
/* Unlink device structure, free bits */
*linkp = link->next;
if (link->dev)
- unregister_netdev(&lp->dev);
- kfree(lp);
+ unregister_netdev(dev);
+ kfree(dev);

} /* tc589_detach */

@@ -333,8 +332,8 @@
static void tc589_config(dev_link_t *link)
{
client_handle_t handle = link->handle;
- struct el3_private *lp = link->priv;
- struct net_device *dev = &lp->dev;
+ struct net_device *dev = link->priv;
+ struct el3_private *lp = dev->priv;
tuple_t tuple;
cisparse_t parse;
u16 buf[32], *phys_addr;
@@ -487,8 +486,7 @@
event_callback_args_t *args)
{
dev_link_t *link = args->client_data;
- struct el3_private *lp = link->priv;
- struct net_device *dev = &lp->dev;
+ struct net_device *dev = link->priv;

DEBUG(1, "3c589_event(0x%06x)\n", event);

@@ -738,7 +736,7 @@
tc589_reset(dev);
init_timer(&lp->media);
lp->media.function = &media_check;
- lp->media.data = (unsigned long)lp;
+ lp->media.data = (unsigned long) dev;
lp->media.expires = jiffies + HZ;
add_timer(&lp->media);

@@ -818,8 +816,8 @@
/* The EL3 interrupt handler. */
static irqreturn_t el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
- struct el3_private *lp = dev_id;
- struct net_device *dev = &lp->dev;
+ struct net_device *dev = (struct net_device *) dev_id;
+ struct el3_private *lp = dev->priv;
ioaddr_t ioaddr, status;
int i = 0, handled = 1;

@@ -903,8 +901,8 @@

static void media_check(unsigned long arg)
{
- struct el3_private *lp = (struct el3_private *)(arg);
- struct net_device *dev = &lp->dev;
+ struct net_device *dev = (struct net_device *)(arg);
+ struct el3_private *lp = dev->priv;
ioaddr_t ioaddr = dev->base_addr;
u16 media, errs;
unsigned long flags;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:36    [from the cache]
©2003-2011 Jasper Spaans