Commit 3c944835 authored by Daniel Ritz's avatar Daniel Ritz Committed by Ralf Bächle

[PATCH] alloc_etherdev for 3c589_cs

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 =====
parent be42dd4c
...@@ -106,7 +106,6 @@ enum RxFilter { ...@@ -106,7 +106,6 @@ enum RxFilter {
struct el3_private { struct el3_private {
dev_link_t link; dev_link_t link;
struct net_device dev;
dev_node_t node; dev_node_t node;
struct net_device_stats stats; struct net_device_stats stats;
/* For transceiver monitoring */ /* For transceiver monitoring */
...@@ -213,14 +212,14 @@ static dev_link_t *tc589_attach(void) ...@@ -213,14 +212,14 @@ static dev_link_t *tc589_attach(void)
flush_stale_links(); flush_stale_links();
/* Create new ethernet device */ /* Create new ethernet device */
lp = kmalloc(sizeof(*lp), GFP_KERNEL); dev = alloc_etherdev(sizeof(struct el3_private));
if (!lp) return NULL; if (!dev)
memset(lp, 0, sizeof(*lp)); return NULL;
lp = dev->priv;
link = &lp->link;
link->priv = dev;
spin_lock_init(&lp->lock); spin_lock_init(&lp->lock);
link = &lp->link; dev = &lp->dev;
link->priv = dev->priv = link->irq.Instance = lp;
init_timer(&link->release); init_timer(&link->release);
link->release.function = &tc589_release; link->release.function = &tc589_release;
link->release.data = (unsigned long)link; link->release.data = (unsigned long)link;
...@@ -234,6 +233,7 @@ static dev_link_t *tc589_attach(void) ...@@ -234,6 +233,7 @@ static dev_link_t *tc589_attach(void)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
link->irq.IRQInfo2 |= 1 << irq_list[i]; link->irq.IRQInfo2 |= 1 << irq_list[i];
link->irq.Handler = &el3_interrupt; link->irq.Handler = &el3_interrupt;
link->irq.Instance = dev;
link->conf.Attributes = CONF_ENABLE_IRQ; link->conf.Attributes = CONF_ENABLE_IRQ;
link->conf.Vcc = 50; link->conf.Vcc = 50;
link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO;
...@@ -246,7 +246,6 @@ static dev_link_t *tc589_attach(void) ...@@ -246,7 +246,6 @@ static dev_link_t *tc589_attach(void)
dev->set_config = &el3_config; dev->set_config = &el3_config;
dev->get_stats = &el3_get_stats; dev->get_stats = &el3_get_stats;
dev->set_multicast_list = &set_multicast_list; dev->set_multicast_list = &set_multicast_list;
ether_setup(dev);
dev->open = &el3_open; dev->open = &el3_open;
dev->stop = &el3_close; dev->stop = &el3_close;
#ifdef HAVE_TX_TIMEOUT #ifdef HAVE_TX_TIMEOUT
...@@ -288,7 +287,7 @@ static dev_link_t *tc589_attach(void) ...@@ -288,7 +287,7 @@ static dev_link_t *tc589_attach(void)
static void tc589_detach(dev_link_t *link) static void tc589_detach(dev_link_t *link)
{ {
struct el3_private *lp = link->priv; struct net_device *dev = link->priv;
dev_link_t **linkp; dev_link_t **linkp;
DEBUG(0, "3c589_detach(0x%p)\n", link); DEBUG(0, "3c589_detach(0x%p)\n", link);
...@@ -314,8 +313,8 @@ static void tc589_detach(dev_link_t *link) ...@@ -314,8 +313,8 @@ static void tc589_detach(dev_link_t *link)
/* Unlink device structure, free bits */ /* Unlink device structure, free bits */
*linkp = link->next; *linkp = link->next;
if (link->dev) if (link->dev)
unregister_netdev(&lp->dev); unregister_netdev(dev);
kfree(lp); kfree(dev);
} /* tc589_detach */ } /* tc589_detach */
...@@ -333,8 +332,8 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed ...@@ -333,8 +332,8 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
static void tc589_config(dev_link_t *link) static void tc589_config(dev_link_t *link)
{ {
client_handle_t handle = link->handle; client_handle_t handle = link->handle;
struct el3_private *lp = link->priv; struct net_device *dev = link->priv;
struct net_device *dev = &lp->dev; struct el3_private *lp = dev->priv;
tuple_t tuple; tuple_t tuple;
cisparse_t parse; cisparse_t parse;
u16 buf[32], *phys_addr; u16 buf[32], *phys_addr;
...@@ -487,8 +486,7 @@ static int tc589_event(event_t event, int priority, ...@@ -487,8 +486,7 @@ static int tc589_event(event_t event, int priority,
event_callback_args_t *args) event_callback_args_t *args)
{ {
dev_link_t *link = args->client_data; dev_link_t *link = args->client_data;
struct el3_private *lp = link->priv; struct net_device *dev = link->priv;
struct net_device *dev = &lp->dev;
DEBUG(1, "3c589_event(0x%06x)\n", event); DEBUG(1, "3c589_event(0x%06x)\n", event);
...@@ -738,7 +736,7 @@ static int el3_open(struct net_device *dev) ...@@ -738,7 +736,7 @@ static int el3_open(struct net_device *dev)
tc589_reset(dev); tc589_reset(dev);
init_timer(&lp->media); init_timer(&lp->media);
lp->media.function = &media_check; lp->media.function = &media_check;
lp->media.data = (unsigned long)lp; lp->media.data = (unsigned long) dev;
lp->media.expires = jiffies + HZ; lp->media.expires = jiffies + HZ;
add_timer(&lp->media); add_timer(&lp->media);
...@@ -818,8 +816,8 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -818,8 +816,8 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* The EL3 interrupt handler. */ /* The EL3 interrupt handler. */
static irqreturn_t el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) static irqreturn_t el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{ {
struct el3_private *lp = dev_id; struct net_device *dev = (struct net_device *) dev_id;
struct net_device *dev = &lp->dev; struct el3_private *lp = dev->priv;
ioaddr_t ioaddr, status; ioaddr_t ioaddr, status;
int i = 0, handled = 1; int i = 0, handled = 1;
...@@ -903,8 +901,8 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -903,8 +901,8 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
static void media_check(unsigned long arg) static void media_check(unsigned long arg)
{ {
struct el3_private *lp = (struct el3_private *)(arg); struct net_device *dev = (struct net_device *)(arg);
struct net_device *dev = &lp->dev; struct el3_private *lp = dev->priv;
ioaddr_t ioaddr = dev->base_addr; ioaddr_t ioaddr = dev->base_addr;
u16 media, errs; u16 media, errs;
unsigned long flags; unsigned long flags;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment