static void prism2_tx_timeout(struct net_device *dev) { local_info_t *local = (local_info_t *) dev->priv; struct hfa384x_regs regs; printk(KERN_WARNING "%s Tx timed out! Resetting card\n", dev->name); hostap_netif_stop_queues(dev); local->func->read_regs(dev, ®s); printk(KERN_DEBUG "%s: CMD=%04x EVSTAT=%04x " "OFFSET0=%04x OFFSET1=%04x SWSUPPORT0=%04x\n", dev->name, regs.cmd, regs.evstat, regs.offset0, regs.offset1, regs.swsupport0); local->func->schedule_reset(local); }
static int prism2_pci_suspend(struct pci_dev *pdev, u32 state) { struct net_device *dev = pci_get_drvdata(pdev); struct hostap_interface *iface = dev->priv; local_info_t *local = iface->local; if (netif_running(dev)) { hostap_netif_stop_queues(dev); netif_device_detach(dev); } prism2_hw_shutdown(dev, 0); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,6)) pci_save_state(pdev, local->pci_save_state); #endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,4)) pci_disable_device(pdev); #endif pci_set_power_state(pdev, 3); return 0; }
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; }