/* allocate local data and register with CardServices * initialize dev_link structure, but do not configure the card yet */ static int hostap_cs_probe(struct pcmcia_device *p_dev) { int ret; PDEBUG(DEBUG_HW, "%s: setting Vcc=33 (constant)\n", dev_info); ret = prism2_config(p_dev); if (ret) { PDEBUG(DEBUG_EXTRA, "prism2_config() failed\n"); } return ret; }
static int prism2_event(event_t event, int priority, event_callback_args_t *args) { dev_link_t *link = args->client_data; struct net_device *dev = (struct net_device *) link->priv; switch (event) { case CS_EVENT_CARD_INSERTION: PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_CARD_INSERTION\n", dev_info); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (prism2_config(link)) dev->irq = 0; break; case CS_EVENT_CARD_REMOVAL: PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_CARD_REMOVAL\n", dev_info); link->state &= ~DEV_PRESENT; if (link->state & DEV_CONFIG) { hostap_netif_stop_queues(dev); netif_device_detach(dev); #ifdef HOSTAP_USE_RELEASE_TIMER mod_timer(&link->release, jiffies + HZ / 20); #else /* HOSTAP_USE_RELEASE_TIMER */ prism2_release((u_long) link); #endif /* HOSTAP_USE_RELEASE_TIMER */ } break; case CS_EVENT_PM_SUSPEND: PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_PM_SUSPEND\n", dev_info); link->state |= DEV_SUSPEND; /* fall through */ case CS_EVENT_RESET_PHYSICAL: PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_RESET_PHYSICAL\n", dev_info); if (link->state & DEV_CONFIG) { if (link->open) { hostap_netif_stop_queues(dev); netif_device_detach(dev); } CardServices(ReleaseConfiguration, link->handle); } break; case CS_EVENT_PM_RESUME: PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_PM_RESUME\n", dev_info); link->state &= ~DEV_SUSPEND; /* fall through */ case CS_EVENT_CARD_RESET: PDEBUG(DEBUG_EXTRA, "%s: CS_EVENT_CARD_RESET\n", dev_info); if (link->state & DEV_CONFIG) { CardServices(RequestConfiguration, link->handle, &link->conf); if (link->open) { prism2_hw_shutdown(dev, 1); prism2_hw_config(dev, 0); netif_device_attach(dev); netif_start_queue(dev); } } break; default: PDEBUG(DEBUG_EXTRA, "%s: prism2_event() - unknown event %d\n", dev_info, event); break; } return 0; }