Ack'd by Russell King as well.
/* Index of functions. */
static void tc574_config(dev_link_t *link);
-static void tc574_release(unsigned long arg);
+static void tc574_release(dev_link_t *link);
static int tc574_event(event_t event, int priority,
event_callback_args_t *args);
link->priv = dev;
spin_lock_init(&lp->window_lock);
- init_timer(&link->release);
- link->release.function = &tc574_release;
- link->release.data = (unsigned long)link;
link->io.NumPorts1 = 32;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- tc574_release((unsigned long)link);
+ tc574_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- tc574_release((unsigned long)link);
+ tc574_release(link);
return;
} /* tc574_config */
still open, this will be postponed until it is closed.
*/
-static void tc574_release(unsigned long arg)
+static void tc574_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
-
DEBUG(0, "3c574_release(0x%p)\n", link);
if (link->open) {
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ tc574_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
netif_stop_queue(dev);
del_timer_sync(&lp->media);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ tc574_release(link);
return 0;
}
/*====================================================================*/
static void tc589_config(dev_link_t *link);
-static void tc589_release(unsigned long arg);
+static void tc589_release(dev_link_t *link);
static int tc589_event(event_t event, int priority,
event_callback_args_t *args);
link->priv = dev;
spin_lock_init(&lp->lock);
- init_timer(&link->release);
- link->release.function = &tc589_release;
- link->release.data = (unsigned long)link;
link->io.NumPorts1 = 16;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- tc589_release((unsigned long)link);
+ tc589_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- tc589_release((unsigned long)link);
+ tc589_release(link);
return;
} /* tc589_config */
======================================================================*/
-static void tc589_release(unsigned long arg)
+static void tc589_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
-
DEBUG(0, "3c589_release(0x%p)\n", link);
if (link->open) {
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ tc589_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
netif_stop_queue(dev);
del_timer_sync(&lp->media);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ tc589_release(link);
return 0;
}
/*====================================================================*/
static void axnet_config(dev_link_t *link);
-static void axnet_release(u_long arg);
+static void axnet_release(dev_link_t *link);
static int axnet_event(event_t event, int priority,
event_callback_args_t *args);
static int axnet_open(struct net_device *dev);
memset(info, 0, sizeof(*info));
link = &info->link; dev = &info->dev;
link->priv = info;
-
- init_timer(&link->release);
- link->release.function = &axnet_release;
- link->release.data = (u_long)link;
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
if (irq_list[0] == -1)
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- axnet_release((u_long)link);
+ axnet_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- axnet_release((u_long)link);
+ axnet_release(link);
link->state &= ~DEV_CONFIG_PENDING;
return;
} /* axnet_config */
======================================================================*/
-static void axnet_release(u_long arg)
+static void axnet_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
-
DEBUG(0, "axnet_release(0x%p)\n", link);
if (link->open) {
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(&info->dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ axnet_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
netif_stop_queue(dev);
del_timer_sync(&info->watchdog);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ axnet_release(link);
return 0;
} /* axnet_close */
/*====================================================================*/
static void com20020_config(dev_link_t *link);
-static void com20020_release(u_long arg);
+static void com20020_release(dev_link_t *link);
static int com20020_event(event_t event, int priority,
event_callback_args_t *args);
memset(link, 0, sizeof(struct dev_link_t));
dev->priv = lp;
- init_timer(&link->release);
- link->release.function = &com20020_release;
- link->release.data = (u_long)link;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
link->io.NumPorts1 = 16;
link->io.IOAddrLines = 16;
dev = info->dev;
if (link->state & DEV_CONFIG) {
- com20020_release((u_long)link);
+ com20020_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_error(link->handle, last_fn, last_ret);
failed:
DEBUG(1,"com20020_config failed...\n");
- com20020_release((u_long)link);
+ com20020_release(link);
} /* com20020_config */
/*======================================================================
======================================================================*/
-static void com20020_release(u_long arg)
+static void com20020_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
DEBUG(1,"release...\n");
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- link->release.expires = jiffies + HZ/20;
link->state |= DEV_RELEASE_PENDING;
- add_timer(&link->release);
}
break;
case CS_EVENT_CARD_INSERTION:
static void fmvj18x_config(dev_link_t *link);
static int fmvj18x_get_hwinfo(dev_link_t *link, u_char *node_id);
static int fmvj18x_setup_mfc(dev_link_t *link);
-static void fmvj18x_release(u_long arg);
+static void fmvj18x_release(dev_link_t *link);
static int fmvj18x_event(event_t event, int priority,
event_callback_args_t *args);
static dev_link_t *fmvj18x_attach(void);
link = &lp->link;
link->priv = dev;
- init_timer(&link->release);
- link->release.function = &fmvj18x_release;
- link->release.data = (u_long)link;
-
/* The io structure describes IO port mapping */
link->io.NumPorts1 = 32;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- fmvj18x_release((u_long)link);
+ fmvj18x_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
/* All Card Services errors end up here */
cs_error(link->handle, last_fn, last_ret);
failed:
- fmvj18x_release((u_long)link);
+ fmvj18x_release(link);
link->state &= ~DEV_CONFIG_PENDING;
} /* fmvj18x_config */
}
/*====================================================================*/
-static void fmvj18x_release(u_long arg)
+static void fmvj18x_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
DEBUG(0, "fmvj18x_release(0x%p)\n", link);
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ fmvj18x_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->open--;
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ fmvj18x_release(link);
return 0;
} /* fjn_close */
static void ibmtr_config(dev_link_t *link);
static void ibmtr_hw_setup(struct net_device *dev, u_int mmiobase);
-static void ibmtr_release(u_long arg);
+static void ibmtr_release(dev_link_t *link);
static int ibmtr_event(event_t event, int priority,
event_callback_args_t *args);
link = &info->link;
link->priv = info;
- init_timer(&link->release);
- link->release.function = &ibmtr_release;
- link->release.data = (u_long)link;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
link->io.NumPorts1 = 4;
link->io.IOAddrLines = 16;
struct tok_info *ti = (struct tok_info *)dev->priv;
del_timer_sync(&(ti->tr_timer));
}
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- ibmtr_release((u_long)link);
+ ibmtr_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- ibmtr_release((u_long)link);
+ ibmtr_release(link);
} /* ibmtr_config */
/*======================================================================
======================================================================*/
-static void ibmtr_release(u_long arg)
+static void ibmtr_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
ibmtr_dev_t *info = link->priv;
struct net_device *dev = info->dev;
/* set flag to bypass normal interrupt code */
((struct tok_info *)dev->priv)->sram_virt |= 1;
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ ibmtr_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
---------------------------------------------------------------------------- */
static void nmclan_config(dev_link_t *link);
-static void nmclan_release(u_long arg);
+static void nmclan_release(dev_link_t *link);
static int nmclan_event(event_t event, int priority,
event_callback_args_t *args);
link->priv = dev;
spin_lock_init(&lp->bank_lock);
- init_timer(&link->release);
- link->release.function = &nmclan_release;
- link->release.data = (u_long)link;
link->io.NumPorts1 = 32;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
link->io.IOAddrLines = 5;
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- nmclan_release((u_long)link);
+ nmclan_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- nmclan_release((u_long)link);
+ nmclan_release(link);
return;
} /* nmclan_config */
net device, and release the PCMCIA configuration. If the device
is still open, this will be postponed until it is closed.
---------------------------------------------------------------------------- */
-static void nmclan_release(u_long arg)
+static void nmclan_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
DEBUG(0, "nmclan_release(0x%p)\n", link);
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ nmclan_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->open--;
netif_stop_queue(dev);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ nmclan_release(link);
return 0;
} /* mace_close */
static void mii_phy_probe(struct net_device *dev);
static void pcnet_config(dev_link_t *link);
-static void pcnet_release(u_long arg);
+static void pcnet_release(dev_link_t *link);
static int pcnet_event(event_t event, int priority,
event_callback_args_t *args);
static int pcnet_open(struct net_device *dev);
link = &info->link; dev = &info->dev;
link->priv = info;
- init_timer(&link->release);
- link->release.function = &pcnet_release;
- link->release.data = (u_long)link;
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
if (irq_list[0] == -1)
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- pcnet_release((u_long)link);
+ pcnet_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- pcnet_release((u_long)link);
+ pcnet_release(link);
link->state &= ~DEV_CONFIG_PENDING;
return;
} /* pcnet_config */
======================================================================*/
-static void pcnet_release(u_long arg)
+static void pcnet_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
pcnet_dev_t *info = link->priv;
DEBUG(0, "pcnet_release(0x%p)\n", link);
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(&info->dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ pcnet_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
netif_stop_queue(dev);
del_timer_sync(&info->watchdog);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ pcnet_release(link);
return 0;
} /* pcnet_close */
static dev_link_t *smc91c92_attach(void);
static void smc91c92_detach(dev_link_t *);
static void smc91c92_config(dev_link_t *link);
-static void smc91c92_release(u_long arg);
+static void smc91c92_release(dev_link_t *link);
static int smc91c92_event(event_t event, int priority,
event_callback_args_t *args);
link->priv = dev;
spin_lock_init(&smc->lock);
- init_timer(&link->release);
- link->release.function = &smc91c92_release;
- link->release.data = (u_long)link;
link->io.NumPorts1 = 16;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
link->io.IOAddrLines = 4;
if (*linkp == NULL)
return;
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- smc91c92_release((u_long)link);
+ smc91c92_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
config_undo:
unregister_netdev(dev);
config_failed: /* CS_EXIT_TEST() calls jump to here... */
- smc91c92_release((u_long)link);
+ smc91c92_release(link);
link->state &= ~DEV_CONFIG_PENDING;
} /* smc91c92_config */
======================================================================*/
-static void smc91c92_release(u_long arg)
+static void smc91c92_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
DEBUG(0, "smc91c92_release(0x%p)\n", link);
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ smc91c92_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->open--;
del_timer_sync(&smc->media);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ smc91c92_release(link);
return 0;
} /* smc_close */
static int has_ce2_string(dev_link_t * link);
static void xirc2ps_config(dev_link_t * link);
-static void xirc2ps_release(u_long arg);
+static void xirc2ps_release(dev_link_t * link);
static int xirc2ps_event(event_t event, int priority,
event_callback_args_t * args);
link = &local->link;
link->priv = dev;
- init_timer(&link->release);
- link->release.function = &xirc2ps_release;
- link->release.data = (u_long) link;
-
/* General socket configuration */
link->conf.Attributes = CONF_ENABLE_IRQ;
link->conf.Vcc = 50;
* the release() function is called, that will trigger a proper
* detach().
*/
- del_timer_sync(&link->release);
if (link->state & DEV_CONFIG) {
- xirc2ps_release((unsigned long)link);
+ xirc2ps_release(link);
if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
config_error:
link->state &= ~DEV_CONFIG_PENDING;
- xirc2ps_release((u_long)link);
+ xirc2ps_release(link);
return;
cis_error:
* still open, this will be postponed until it is closed.
*/
static void
-xirc2ps_release(u_long arg)
+xirc2ps_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *) arg;
DEBUG(0, "release(0x%p)\n", link);
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ xirc2ps_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->open--;
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ xirc2ps_release(link);
return 0;
}
int reset_airo_card( struct net_device * );
static void airo_config(dev_link_t *link);
-static void airo_release(u_long arg);
+static void airo_release(dev_link_t *link);
static int airo_event(event_t event, int priority,
event_callback_args_t *args);
return NULL;
}
memset(link, 0, sizeof(struct dev_link_t));
- init_timer(&link->release);
- link->release.function = &airo_release;
- link->release.data = (u_long)link;
/* Interrupt setup */
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
if (*linkp == NULL)
return;
- del_timer(&link->release);
- if ( link->state & DEV_CONFIG ) {
- airo_release( (int)link );
- if ( link->state & DEV_STALE_CONFIG ) {
+ if (link->state & DEV_CONFIG) {
+ airo_release(link);
+ if (link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
}
cs_failed:
cs_error(link->handle, last_fn, last_ret);
- airo_release((u_long)link);
+ airo_release(link);
} /* airo_config */
======================================================================*/
-static void airo_release(u_long arg)
+static void airo_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
-
DEBUG(0, "airo_release(0x%p)\n", link);
/*
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(local->eth_dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ airo_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
/* XXX: this really needs to move into generic code.. */
while (dev_list != NULL) {
if (dev_list->state & DEV_CONFIG)
- airo_release((u_long)dev_list);
+ airo_release(dev_list);
airo_detach(dev_list);
}
}
/*====================================================================*/
/* PCMCIA (Card Services) related functions */
-static void netwave_release(u_long arg); /* Card removal */
+static void netwave_release(dev_link_t *link); /* Card removal */
static int netwave_event(event_t event, int priority,
event_callback_args_t *args);
static void netwave_pcmcia_config(dev_link_t *arg); /* Runs after card
link = &priv->link;
link->priv = dev;
- init_timer(&link->release);
- link->release.function = &netwave_release;
- link->release.data = (u_long)link;
-
/* The io structure describes IO port mapping */
link->io.NumPorts1 = 16;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
the release() function is called, that will trigger a proper
detach().
*/
- del_timer(&link->release);
if (link->state & DEV_CONFIG) {
- netwave_release((u_long) link);
+ netwave_release(link);
if (link->state & DEV_STALE_CONFIG) {
DEBUG(1, "netwave_cs: detach postponed, '%s' still "
"locked\n", link->dev->dev_name);
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- netwave_release((u_long)link);
+ netwave_release(link);
} /* netwave_pcmcia_config */
/*
* device, and release the PCMCIA configuration. If the device is
* still open, this will be postponed until it is closed.
*/
-static void netwave_release(u_long arg) {
- dev_link_t *link = (dev_link_t *)arg;
+static void netwave_release(dev_link_t *link)
+{
struct net_device *dev = link->priv;
netwave_private *priv = dev->priv;
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
netif_device_detach(dev);
- mod_timer(&link->release, jiffies + HZ/20);
+ netwave_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->open--;
netif_stop_queue(dev);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
-
+ netwave_release(link);
return 0;
}
/* PCMCIA gumpf */
static void orinoco_cs_config(dev_link_t * link);
-static void orinoco_cs_release(u_long arg);
+static void orinoco_cs_release(dev_link_t * link);
static int orinoco_cs_event(event_t event, int priority,
event_callback_args_t * args);
link = &card->link;
link->priv = dev;
- /* Initialize the dev_link_t structure */
- init_timer(&link->release);
- link->release.function = &orinoco_cs_release;
- link->release.data = (u_long) link;
-
/* Interrupt setup */
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
}
if (link->state & DEV_CONFIG) {
- orinoco_cs_release((u_long)link);
+ orinoco_cs_release(link);
if (link->state & DEV_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
orinoco_cs_error(link->handle, last_fn, last_ret);
failed:
- orinoco_cs_release((u_long) link);
+ orinoco_cs_release(link);
} /* orinoco_cs_config */
/*
* still open, this will be postponed until it is closed.
*/
static void
-orinoco_cs_release(u_long arg)
+orinoco_cs_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *) arg;
struct net_device *dev = link->priv;
struct orinoco_private *priv = dev->priv;
unsigned long flags;
DEBUG(0, "orinoco_cs: Removing leftover devices.\n");
while (dev_list != NULL) {
if (dev_list->state & DEV_CONFIG)
- orinoco_cs_release((u_long) dev_list);
+ orinoco_cs_release(dev_list);
orinoco_cs_detach(dev_list);
}
}
#endif
/** Prototypes based on PCMCIA skeleton driver *******************************/
static void ray_config(dev_link_t *link);
-static void ray_release(u_long arg);
+static void ray_release(dev_link_t *link);
static int ray_event(event_t event, int priority, event_callback_args_t *args);
static dev_link_t *ray_attach(void);
static void ray_detach(dev_link_t *);
memset(dev, 0, sizeof(struct net_device));
memset(local, 0, sizeof(ray_dev_t));
- init_timer(&link->release);
- link->release.function = &ray_release;
- link->release.data = (u_long)link;
-
/* The io structure describes IO port mapping. None used here */
link->io.NumPorts1 = 0;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
the release() function is called, that will trigger a proper
detach().
*/
- del_timer(&link->release);
if (link->state & DEV_CONFIG) {
- ray_release((u_long)link);
+ ray_release(link);
if(link->state & DEV_STALE_CONFIG) {
link->state |= DEV_STALE_LINK;
return;
DEBUG(3,"ray_config rmem=%p\n",local->rmem);
DEBUG(3,"ray_config amem=%p\n",local->amem);
if (ray_init(dev) < 0) {
- ray_release((u_long)link);
+ ray_release(link);
return;
}
i = register_netdev(dev);
if (i != 0) {
printk("ray_config register_netdev() failed\n");
- ray_release((u_long)link);
+ ray_release(link);
return;
}
cs_failed:
cs_error(link->handle, last_fn, last_ret);
- ray_release((u_long)link);
+ ray_release(link);
} /* ray_config */
/*===========================================================================*/
static int ray_init(struct net_device *dev)
device, and release the PCMCIA configuration. If the device is
still open, this will be postponed until it is closed.
=============================================================================*/
-static void ray_release(u_long arg)
+static void ray_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
struct net_device *dev = link->priv;
ray_dev_t *local = dev->priv;
int i;
link->state &= ~DEV_PRESENT;
netif_device_detach(dev);
if (link->state & DEV_CONFIG) {
- mod_timer(&link->release, jiffies + HZ/20);
+ ray_release(link);
del_timer(&local->timer);
}
break;
link->open--;
netif_stop_queue(dev);
if (link->state & DEV_STALE_CONFIG)
- mod_timer(&link->release, jiffies + HZ/20);
+ ray_release(link);
/* In here, we should stop the hardware (stop card from beeing active)
* and set local->card_status to CARD_AWAITING_PARAM, so that while the
/* If any step failed, release any partially configured state */
if(i != 0)
{
- wv_pcmcia_release((u_long) link);
+ wv_pcmcia_release(link);
return FALSE;
}
* still open, this will be postponed until it is closed.
*/
static void
-wv_pcmcia_release(u_long arg) /* Address of the interface struct */
+wv_pcmcia_release(dev_link_t *link)
{
- dev_link_t * link = (dev_link_t *) arg;
device * dev = (device *) link->priv;
#ifdef DEBUG_CONFIG_TRACE
else
/* The card is no more there (flag is activated in wv_pcmcia_release) */
if(link->state & DEV_STALE_CONFIG)
- wv_pcmcia_release((u_long)link);
+ wv_pcmcia_release(link);
#ifdef DEBUG_CALLBACK_TRACE
printk(KERN_DEBUG "%s: <-wavelan_close()\n", dev->name);
if (!link) return NULL;
memset(link, 0, sizeof(struct dev_link_t));
- /* Unused for the Wavelan */
- link->release.function = &wv_pcmcia_release;
- link->release.data = (u_long) link;
-
/* The io structure describes IO port mapping */
link->io.NumPorts1 = 8;
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
if(link->state & DEV_CONFIG)
{
/* Some others haven't done their job : give them another chance */
- wv_pcmcia_release((u_long) link);
+ wv_pcmcia_release(link);
if(link->state & DEV_STALE_CONFIG)
{
#ifdef DEBUG_CONFIG_INFO
netif_device_detach(dev);
/* Release the card */
- wv_pcmcia_release((u_long) link);
+ wv_pcmcia_release(link);
}
break;
static inline int
wv_pcmcia_config(dev_link_t *); /* Configure the pcmcia interface */
static void
- wv_pcmcia_release(u_long), /* Remove a device */
+ wv_pcmcia_release(dev_link_t *),/* Remove a device */
wv_flush_stale_links(void); /* "detach" all possible devices */
/* ---------------------- INTERRUPT HANDLING ---------------------- */
static irqreturn_t
#include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/string.h>
-#include <linux/timer.h>
#include <linux/wireless.h>
#include <net/iw_handler.h>
* are invoked from the wl24 event handler.
*/
static void wl3501_config(dev_link_t *link);
-static void wl3501_release(unsigned long arg);
+static void wl3501_release(dev_link_t *link);
static int wl3501_event(event_t event, int pri, event_callback_args_t *args);
/*
wl3501_block_interrupt(this);
if (link->state & DEV_STALE_CONFIG) {
- link->release.expires = jiffies + WL3501_RELEASE_TIMEOUT;
link->state |= DEV_RELEASE_PENDING;
- add_timer(&link->release);
+ wl3501_release(link);
}
rc = 0;
printk(KERN_INFO "%s: WL3501 closed\n", dev->name);
if (!link)
goto out;
memset(link, 0, sizeof(struct dev_link_t));
- init_timer(&link->release);
- link->release.function = wl3501_release;
- link->release.data = (unsigned long)link;
/* The io structure describes IO port mapping */
link->io.NumPorts1 = 16;
cs_failed:
cs_error(link->handle, last_fn, last_ret);
failed:
- wl3501_release((unsigned long)link);
+ wl3501_release(link);
out:
return;
}
* and release the PCMCIA configuration. If the device is still open, this
* will be postponed until it is closed.
*/
-static void wl3501_release(unsigned long arg)
+static void wl3501_release(dev_link_t *link)
{
- dev_link_t *link = (dev_link_t *)arg;
struct net_device *dev = link->priv;
/* If the device is currently in use, we won't release until it is
while (link->open > 0)
wl3501_close(dev);
netif_device_detach(dev);
- link->release.expires = jiffies +
- WL3501_RELEASE_TIMEOUT;
- add_timer(&link->release);
+ wl3501_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
dprintk(0, ": unloading");
pcmcia_unregister_driver(&wl3501_driver);
while (wl3501_dev_list) {
- del_timer(&wl3501_dev_list->release);
/* Mark the device as non-existing to minimize calls to card */
wl3501_dev_list->state &= ~DEV_PRESENT;
if (wl3501_dev_list->state & DEV_CONFIG)
- wl3501_release((unsigned long)wl3501_dev_list);
+ wl3501_release(wl3501_dev_list);
wl3501_detach(wl3501_dev_list);
}
}