if (ni_boards[i].device_id == id) { return i; } } printk("unknown board 0x%04x -- pretend it is a ", id); return 0; } #ifdef MODULE MODULE_LICENSE("GPL"); static struct pcmcia_device_id ni_mio_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010d), PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010c), PCMCIA_DEVICE_MANF_CARD(0x010b, 0x02c4), PCMCIA_DEVICE_MANF_CARD(0x010b, 0x075e), PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0245), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, ni_mio_cs_ids); struct pcmcia_driver ni_mio_cs_driver = { .probe = &cs_attach, .remove = &cs_detach, .suspend = &mio_cs_suspend, .resume = &mio_cs_resume, .id_table = ni_mio_cs_ids,
return 0; } /* das08_pcmcia_suspend */ static int das08_pcmcia_resume(struct pcmcia_device *link) { struct local_info_t *local = link->priv; local->stop = 0; return 0; } /* das08_pcmcia_resume */ /*====================================================================*/ static struct pcmcia_device_id das08_cs_id_table[] = { PCMCIA_DEVICE_MANF_CARD(0x01c5, 0x4001), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, das08_cs_id_table); MODULE_AUTHOR("David A. Schleef <*****@*****.**>, " "Frank Mori Hess <*****@*****.**>"); MODULE_DESCRIPTION("Comedi driver for ComputerBoards DAS-08 PCMCIA boards"); MODULE_LICENSE("GPL"); struct pcmcia_driver das08_cs_driver = { .probe = das08_pcmcia_attach, .remove = das08_pcmcia_detach, .suspend = das08_pcmcia_suspend, .resume = das08_pcmcia_resume, .id_table = das08_cs_id_table,
static int spectrum_cs_config(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; struct hermes *hw = &priv->hw; int ret; void __iomem *mem; #if 0 /* Not in RHEL */ link->config_flags |= CONF_AUTO_SET_VPP | CONF_AUTO_CHECK_VCC | CONF_AUTO_SET_IO | CONF_ENABLE_IRQ; if (ignore_cis_vcc) link->config_flags &= ~CONF_AUTO_CHECK_VCC; #endif ret = pcmcia_loop_config(link, spectrum_cs_config_check, NULL); if (ret) { if (!ignore_cis_vcc) printk(KERN_ERR PFX "GetNextTuple(): No matching " "CIS configuration. Maybe you need the " "ignore_cis_vcc=1 parameter.\n"); goto failed; } #if 0 /* Not in RHEL */ mem = ioport_map(link->resource[0]->start, resource_size(link->resource[0])); #else mem = ioport_map(link->io.BasePort1, link->io.NumPorts1); #endif if (!mem) goto failed; /* We initialize the hermes structure before completing PCMCIA * configuration just in case the interrupt handler gets * called. */ hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING); hw->eeprom_pda = true; #if 0 /* Not in RHEL */ ret = pcmcia_request_irq(link, orinoco_interrupt); #else ret = pcmcia_request_irq(link, &link->irq); #endif if (ret) goto failed; ret = pcmcia_enable_device(link); if (ret) goto failed; /* Reset card */ if (spectrum_cs_hard_reset(priv) != 0) goto failed; /* Initialise the main driver */ if (orinoco_init(priv) != 0) { printk(KERN_ERR PFX "orinoco_init() failed\n"); goto failed; } /* Register an interface with the stack */ #if 0 /* Not in RHEL */ if (orinoco_if_add(priv, link->resource[0]->start, link->irq, NULL) != 0) { #elif 0 /* Not in RHEL */ if (orinoco_if_add(priv, link->io.BasePort1, link->irq, NULL) != 0) { #else if (orinoco_if_add(priv, link->io.BasePort1, link->irq.AssignedIRQ, NULL) != 0) { #endif printk(KERN_ERR PFX "orinoco_if_add() failed\n"); goto failed; } return 0; failed: spectrum_cs_release(link); return -ENODEV; } /* spectrum_cs_config */ static void spectrum_cs_release(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; unsigned long flags; /* We're committed to taking the device away now, so mark the * hardware as unavailable */ priv->hw.ops->lock_irqsave(&priv->lock, &flags); priv->hw_unavailable++; priv->hw.ops->unlock_irqrestore(&priv->lock, &flags); pcmcia_disable_device(link); if (priv->hw.iobase) ioport_unmap(priv->hw.iobase); } /* spectrum_cs_release */ static int spectrum_cs_suspend(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; int err = 0; /* Mark the device as stopped, to block IO until later */ orinoco_down(priv); return err; } static int spectrum_cs_resume(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; int err = orinoco_up(priv); return err; } /********************************************************************/ /* Module initialization */ /********************************************************************/ static struct pcmcia_device_id spectrum_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x026c, 0x0001), /* Symbol Spectrum24 LA4137 */ PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0001), /* Socket Communications CF */ PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless LAN PC Card", 0x816cc815, 0x6fbf459a), /* 2011B, not 2011 */ PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, spectrum_cs_ids); static struct pcmcia_driver orinoco_driver = { .owner = THIS_MODULE, #if 0 /* Not in RHEL */ .name = DRIVER_NAME, #else .drv = { .name = DRIVER_NAME, }, #endif .probe = spectrum_cs_probe, .remove = spectrum_cs_detach, .suspend = spectrum_cs_suspend, .resume = spectrum_cs_resume, .id_table = spectrum_cs_ids, }; static int __init init_spectrum_cs(void) { return pcmcia_register_driver(&orinoco_driver); } static void __exit exit_spectrum_cs(void) { pcmcia_unregister_driver(&orinoco_driver); }
return -ENODEV; } DBG_TRACE(DbgInfo, "%s: Shutting down adapter.\n", dev->name); wl_close(dev); link->open--; DBG_LEAVE(DbgInfo); return 0; } /* wl_adapter_close */ /*============================================================================*/ static const struct pcmcia_device_id wl_adapter_ids[] = { #if !((HCF_TYPE) & HCF_TYPE_HII5) PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0003), PCMCIA_DEVICE_PROD_ID12("Agere Systems", "Wireless PC Card Model 0110", 0x33103a9b, 0xe175b0dd), #else PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0004), PCMCIA_DEVICE_PROD_ID12("Linksys", "WCF54G_Wireless-G_CompactFlash_Card", 0x0733cc81, 0x98a599e1), #endif /* (HCF_TYPE) & HCF_TYPE_HII5 */ PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, wl_adapter_ids); static struct pcmcia_driver wlags49_driver = { .owner = THIS_MODULE, .name = DRIVER_NAME, .probe = wl_adapter_attach,
static int spectrum_cs_resume(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; int err = orinoco_up(priv); return err; } /* */ /* */ /* */ static const struct pcmcia_device_id spectrum_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x026c, 0x0001), /* */ PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0001), /* */ PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless LAN PC Card", 0x816cc815, 0x6fbf459a), /* */ PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, spectrum_cs_ids); static struct pcmcia_driver orinoco_driver = { .owner = THIS_MODULE, .name = DRIVER_NAME, .probe = spectrum_cs_probe, .remove = spectrum_cs_detach, .suspend = spectrum_cs_suspend, .resume = spectrum_cs_resume, .id_table = spectrum_cs_ids, };
int i; for (i = 0; i < n_ni_boards; i++) { if (ni_boards[i].device_id == link->card_id) return i; } printk("unknown board 0x%04x -- pretend it is a ", link->card_id); return 0; } #ifdef MODULE static struct pcmcia_device_id ni_mio_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010d), /* DAQCard-ai-16xe-50 */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010c), /* DAQCard-ai-16e-4 */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x02c4), /* DAQCard-6062E */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x075e), /* DAQCard-6024E */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0245), /* DAQCard-6036E */ PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, ni_mio_cs_ids); MODULE_AUTHOR("David A. Schleef <*****@*****.**>"); MODULE_DESCRIPTION("Comedi driver for National Instruments DAQCard E series"); MODULE_LICENSE("GPL"); struct pcmcia_driver ni_mio_cs_driver = { .probe = &cs_attach, .remove = &cs_detach,
vxp = link->priv; chip = (struct vx_core *)vxp; card_alloc &= ~(1 << vxp->index); chip->chip_status |= VX_STAT_IS_STALE; /* to be sure */ snd_card_disconnect(chip->card); vxpocket_release(link); snd_card_free_when_closed(chip->card); } /* * Module entry points */ static const struct pcmcia_device_id vxp_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x01f1, 0x0100), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, vxp_ids); static struct pcmcia_driver vxp_cs_driver = { .owner = THIS_MODULE, .name = "snd-vxpocket", .probe = vxpocket_probe, .remove = vxpocket_detach, .id_table = vxp_ids, #ifdef CONFIG_PM .suspend = vxp_suspend, .resume = vxp_resume, #endif };
}; /* PCAN-PC Card private structure */ struct pcan_pccard { struct pcmcia_device *pdev; int chan_count; struct pcan_channel channel[PCC_CHAN_MAX]; u8 ccr; u8 fw_major; u8 fw_minor; void __iomem *ioport_addr; struct timer_list led_timer; }; static struct pcmcia_device_id pcan_table[] = { PCMCIA_DEVICE_MANF_CARD(PCC_MANF_ID, PCC_CARD_ID), PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, pcan_table); static void pcan_set_leds(struct pcan_pccard *card, u8 mask, u8 state); /* * start timer which controls leds state */ static void pcan_start_led_timer(struct pcan_pccard *card) { if (!timer_pending(&card->led_timer)) mod_timer(&card->led_timer, jiffies + HZ); }
if (info->ndev) ide_host_remove(host); info->ndev = 0; pcmcia_disable_device(link); } static struct pcmcia_device_id ide_ids[] = { PCMCIA_DEVICE_FUNC_ID(4), PCMCIA_DEVICE_MANF_CARD(0x0000, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x0007, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x000a, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x001c, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x0032, 0x0704), PCMCIA_DEVICE_MANF_CARD(0x0032, 0x2904), PCMCIA_DEVICE_MANF_CARD(0x0045, 0x0401), PCMCIA_DEVICE_MANF_CARD(0x004f, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x0097, 0x1620), PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d), PCMCIA_DEVICE_MANF_CARD(0x00ce, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x0319, 0x0000), PCMCIA_DEVICE_MANF_CARD(0x2080, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0100), PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0200),
static int orinoco_cs_config(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; struct hermes *hw = &priv->hw; int ret; void __iomem *mem; #if 0 /* Not in RHEL */ link->config_flags |= CONF_AUTO_SET_VPP | CONF_AUTO_CHECK_VCC | CONF_AUTO_SET_IO | CONF_ENABLE_IRQ; if (ignore_cis_vcc) link->config_flags &= ~CONF_AUTO_CHECK_VCC; #endif ret = pcmcia_loop_config(link, orinoco_cs_config_check, NULL); if (ret) { if (!ignore_cis_vcc) printk(KERN_ERR PFX "GetNextTuple(): No matching " "CIS configuration. Maybe you need the " "ignore_cis_vcc=1 parameter.\n"); goto failed; } #if 0 /* Not in RHEL */ mem = ioport_map(link->resource[0]->start, resource_size(link->resource[0])); #else mem = ioport_map(link->io.BasePort1, link->io.NumPorts1); #endif if (!mem) goto failed; /* We initialize the hermes structure before completing PCMCIA * configuration just in case the interrupt handler gets * called. */ hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING); #if 0 /* Not in RHEL */ ret = pcmcia_request_irq(link, orinoco_interrupt); #else ret = pcmcia_request_irq(link, &link->irq); #endif if (ret) goto failed; ret = pcmcia_enable_device(link); if (ret) goto failed; /* Initialise the main driver */ if (orinoco_init(priv) != 0) { printk(KERN_ERR PFX "orinoco_init() failed\n"); goto failed; } /* Register an interface with the stack */ #if 0 /* Not in RHEL */ if (orinoco_if_add(priv, link->resource[0]->start, link->irq, NULL) != 0) { #elif 0 /* Not in RHEL */ if (orinoco_if_add(priv, link->io.BasePort1, link->irq, NULL) != 0) { #else if (orinoco_if_add(priv, link->io.BasePort1, link->irq.AssignedIRQ, NULL) != 0) { #endif printk(KERN_ERR PFX "orinoco_if_add() failed\n"); goto failed; } return 0; failed: orinoco_cs_release(link); return -ENODEV; } /* orinoco_cs_config */ static void orinoco_cs_release(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; unsigned long flags; /* We're committed to taking the device away now, so mark the * hardware as unavailable */ priv->hw.ops->lock_irqsave(&priv->lock, &flags); priv->hw_unavailable++; priv->hw.ops->unlock_irqrestore(&priv->lock, &flags); pcmcia_disable_device(link); if (priv->hw.iobase) ioport_unmap(priv->hw.iobase); } /* orinoco_cs_release */ static int orinoco_cs_suspend(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; struct orinoco_pccard *card = priv->card; /* This is probably racy, but I can't think of a better way, short of rewriting the PCMCIA layer to not suck :-( */ if (!test_bit(0, &card->hard_reset_in_progress)) orinoco_down(priv); return 0; } static int orinoco_cs_resume(struct pcmcia_device *link) { struct orinoco_private *priv = link->priv; struct orinoco_pccard *card = priv->card; int err = 0; if (!test_bit(0, &card->hard_reset_in_progress)) err = orinoco_up(priv); return err; } /********************************************************************/ /* Module initialization */ /********************************************************************/ static struct pcmcia_device_id orinoco_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */ PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */ PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */ PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), /* ARtem Onair */ PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0003), /* ARtem Onair Comcard 11 */ PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), /* Buffalo WLI-PCM-S11 */ PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), /* ASUS SpaceLink WL-100 */ PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x0002), /* SpeedStream SS1021 Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x3021), /* SpeedStream Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x14ea, 0xb001), /* PLANEX RoadLannerWave GW-NS11H */ PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3), PCMCIA_DEVICE_PROD_ID12("Allied Telesyn", "AT-WCL452 Wireless PCMCIA Radio", 0x5cd01705, 0x4271660f), PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25", 0x78fc06ee, 0x45a50c1e), PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25", 0x78fc06ee, 0xdb9aa842), PCMCIA_DEVICE_PROD_ID12("Avaya Communication", "Avaya Wireless PC Card", 0xd8a43b78, 0x0d341169), PCMCIA_DEVICE_PROD_ID12("BENQ", "AWL100 PCMCIA ADAPTER", 0x35dadc74, 0x01f7fedb), PCMCIA_DEVICE_PROD_ID12("Cabletron", "RoamAbout 802.11 DS", 0x32d445f5, 0xedeffd90), PCMCIA_DEVICE_PROD_ID12("D-Link Corporation", "D-Link DWL-650H 11Mbps WLAN Adapter", 0xef544d24, 0xcd8ea916), PCMCIA_DEVICE_PROD_ID12("ELSA", "AirLancer MC-11", 0x4507a33a, 0xef54f0e3), PCMCIA_DEVICE_PROD_ID12("HyperLink", "Wireless PC Card 11Mbps", 0x56cc3f1a, 0x0bcf220c), PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless 2011 LAN PC Card", 0x816cc815, 0x07f58077), PCMCIA_DEVICE_PROD_ID12("LeArtery", "SYNCBYAIR 11Mbps Wireless LAN PC Card", 0x7e3b326a, 0x49893e92), PCMCIA_DEVICE_PROD_ID12("Lucent Technologies", "WaveLAN/IEEE", 0x23eb9949, 0xc562e72a), PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11", 0x481e0094, 0x7360e410), PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11G", 0x481e0094, 0xf57ca4b3), PCMCIA_DEVICE_PROD_ID12("NCR", "WaveLAN/IEEE", 0x24358cd4, 0xc562e72a), PCMCIA_DEVICE_PROD_ID12("Nortel Networks", "emobility 802.11 Wireless LAN PC Card", 0x2d617ea0, 0x88cd5767), PCMCIA_DEVICE_PROD_ID12("OTC", "Wireless AirEZY 2411-PCC WLAN Card", 0x4ac44287, 0x235a6bed), PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PC CARD HARMONY 80211B", 0xc6536a5e, 0x090c3cd9), PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26), PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b), PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e), PCMCIA_DEVICE_MANF_CARD_PROD_ID3(0x0156, 0x0002, "Version 01.01", 0xd27deb1a), /* Lucent Orinoco */ #ifdef CONFIG_HERMES_PRISM /* Only entries that certainly identify Prism chipset */ PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */ PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), /* Sohoware NCP110, Philips 802.11b */ PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), /* AnyPoint(TM) Wireless II PC Card */ PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), /* PROXIM RangeLAN-DS/LAN PC CARD */ PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), /* Compaq WL100 11 Mbps Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), /* Intermec MobileLAN 11Mbps 802.11b WLAN Card */ PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), /* Samsung SWL2000-N 11Mb/s WLAN Card */ PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), /* Linksys WPC11 Version 2.5 */ PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), /* Linksys WPC11 Version 3 */ PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0002), /* Compaq HNW-100 11 Mbps Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0673), /* Linksys WCF12 Wireless CompactFlash Card */ PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* Airvast WN-100 */ PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), /* Adaptec Ultra Wireless ANW-8030 */ PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008), /* CONTEC FLEXSCAN/FX-DDS110-PCC */ PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), /* Conceptronic CON11Cpro, EMTAC A2424i */ PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), /* Safeway 802.11b, ZCOMAX AirRunner/XI-300 */ PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), /* D-Link DCF660, Sandisk Connect SDWCFB-000 */ PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0), PCMCIA_DEVICE_PROD_ID12("ACTIONTEC", "PRISM Wireless LAN PC Card", 0x393089da, 0xa71e69d5), PCMCIA_DEVICE_PROD_ID12("Addtron", "AWP-100 Wireless PCMCIA", 0xe6ec52ce, 0x08649af2), PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G", 0x2decece3, 0x82067c18), PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-PCM-L11G", 0x2decece3, 0xf57ca4b3), PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card", 0x54f7c49c, 0x15a75e5b), PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11", 0x5261440f, 0xa6405584), PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11", 0x5261440f, 0xdf6115f9), PCMCIA_DEVICE_PROD_ID12("corega_K.K.", "Wireless_LAN_PCCB-11", 0x29e33311, 0xee7a27ae), PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100", 0xfdd73470, 0xe0b6f146), PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card", 0x71b18589, 0xf144e3ac), PCMCIA_DEVICE_PROD_ID12("D", "Link DWL-650 11Mbps WLAN Card", 0x71b18589, 0xb6f1b0ab), PCMCIA_DEVICE_PROD_ID12(" ", "IEEE 802.11 Wireless LAN/PC Card", 0x3b6e20c8, 0xefccafe9), PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE", 0x74c5e40d, 0xdb472a18), PCMCIA_DEVICE_PROD_ID12("INTERSIL", "I-GATE 11M PC Card / PC Card plus", 0x74c5e40d, 0x8304ff77), PCMCIA_DEVICE_PROD_ID12("Intersil", "PRISM 2_5 PCMCIA ADAPTER", 0x4b801a17, 0x6345a0bf), PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card", 0x0733cc81, 0x0c52f395), PCMCIA_DEVICE_PROD_ID12("Microsoft", "Wireless Notebook Adapter MN-520", 0x5961bf85, 0x6eec8c01), PCMCIA_DEVICE_PROD_ID12("NETGEAR MA401RA Wireless PC", "Card", 0x0306467f, 0x9762e8f1), PCMCIA_DEVICE_PROD_ID12("NETGEAR MA401 Wireless PC", "Card", 0xa37434e9, 0x9762e8f1), PCMCIA_DEVICE_PROD_ID12("OEM", "PRISM2 IEEE 802.11 PC-Card", 0xfea54c90, 0x48f2bdd6), PCMCIA_DEVICE_PROD_ID12("PLANEX", "GeoWave/GW-CF110", 0x209f40ab, 0xd9715264), PCMCIA_DEVICE_PROD_ID12("PLANEX", "GeoWave/GW-NS110", 0x209f40ab, 0x46263178), PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2532W-B EliteConnect Wireless Adapter", 0xc4f8b18b, 0x196bd757), PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2632W", 0xc4f8b18b, 0x474a1f2a), PCMCIA_DEVICE_PROD_ID12("ZoomAir 11Mbps High", "Rate wireless Networking", 0x273fe3db, 0x32a1eaee), PCMCIA_DEVICE_PROD_ID3("HFA3863", 0x355cb092), PCMCIA_DEVICE_PROD_ID3("ISL37100P", 0x630d52b2), PCMCIA_DEVICE_PROD_ID3("ISL37101P-10", 0xdd97a26b), PCMCIA_DEVICE_PROD_ID3("ISL37300P", 0xc9049a39), /* This may be Agere or Intersil Firmware */ PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), #endif PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, orinoco_cs_ids); static struct pcmcia_driver orinoco_driver = { .owner = THIS_MODULE, #if 0 /* Not in RHEL */ .name = DRIVER_NAME, #else .drv = { .name = DRIVER_NAME, }, #endif .probe = orinoco_cs_probe, .remove = orinoco_cs_detach, .id_table = orinoco_cs_ids, .suspend = orinoco_cs_suspend, .resume = orinoco_cs_resume, }; static int __init init_orinoco_cs(void) { return pcmcia_register_driver(&orinoco_driver); } static void __exit exit_orinoco_cs(void) { pcmcia_unregister_driver(&orinoco_driver); }
if (iface && iface->local) dev_open = iface->local->num_dev_open > 0; prism2_hw_shutdown(dev, 1); prism2_hw_config(dev, dev_open ? 0 : 1); if (dev_open) { netif_device_attach(dev); netif_start_queue(dev); } return 0; } static const struct pcmcia_device_id hostap_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x3301), PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030b), PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x02d2, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* PCMCIA_DEVICE_MANF_CARD(0xc00f, 0x0000), conflict with pcnet_cs */
struct net_device *dev = link->priv; if (link->open) netif_device_detach(dev); return 0; } static int ft1000_resume(struct pcmcia_device *link) { return 0; } /*====================================================================*/ static const struct pcmcia_device_id ft1000_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x02cc, 0x0100), PCMCIA_DEVICE_MANF_CARD(0x02cc, 0x1000), PCMCIA_DEVICE_MANF_CARD(0x02cc, 0x1300), PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, ft1000_ids); static struct pcmcia_driver ft1000_cs_driver = { .owner = THIS_MODULE, .name = "ft1000_cs", .probe = ft1000_attach, .remove = ft1000_detach, .id_table = ft1000_ids, .suspend = ft1000_suspend, .resume = ft1000_resume,
//struct gpib_board_t *dev = info->dev; DEBUG(0, "ni_gpib_resume(0x%p)\n", link); /*if (link->open) { ni_gpib_probe(dev); / really? printk("Gpib resumed ???\n"); //netif_device_attach(dev); }*/ ni_gpib_config(link); return 0; } /*====================================================================*/ static struct pcmcia_device_id ni_pcmcia_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x4882), PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0c71), // NI PCMCIA-GPIB+ PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, ni_pcmcia_ids); static struct pcmcia_driver ni_gpib_cs_driver = { .owner = THIS_MODULE, .drv = { .name = "ni_gpib_cs", }, .id_table = ni_pcmcia_ids, .probe = ni_gpib_probe, .remove = ni_gpib_remove, .suspend = ni_gpib_suspend, .resume = ni_gpib_resume,
return err; } /********************************************************************/ /* Module initialization */ /********************************************************************/ /* Can't be declared "const" or the whole __initdata section will * become const */ static char version[] __initdata = DRIVER_NAME " " DRIVER_VERSION " (David Gibson <*****@*****.**>, " "Pavel Roskin <*****@*****.**>, et al)"; static struct pcmcia_device_id orinoco_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */ PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), /* Sohoware NCP110, Philips 802.11b */ PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), /* AnyPoint(TM) Wireless II PC Card */ PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */ PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), /* PROXIM RangeLAN-DS/LAN PC CARD */ PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), /* Compaq WL100 11 Mbps Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), /* Lucent Orinoco and old Intersil */ PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */ PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */ PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), /* Intermec MobileLAN 11Mbps 802.11b WLAN Card */ PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), /* Samsung SWL2000-N 11Mb/s WLAN Card */ PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */ PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), /* ARtem Onair */ PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), /* Buffalo WLI-PCM-S11 */ PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), /* Linksys WPC11 Version 2.5 */ PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), /* Linksys WPC11 Version 3 */
return err; } static char version[] __initdata = DRIVER_NAME " " DRIVER_VERSION " (David Gibson <*****@*****.**>, " "Pavel Roskin <*****@*****.**>, et al)"; static struct pcmcia_device_id orinoco_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0003), PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612),
return 0; } /********************************************************************/ /* Module initialization */ /********************************************************************/ /* Can't be declared "const" or the whole __initdata section will * become const */ static char version[] __initdata = DRIVER_NAME " " DRIVER_VERSION " (Pavel Roskin <*****@*****.**>," " David Gibson <*****@*****.**>, et al)"; static struct pcmcia_device_id spectrum_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x026c, 0x0001), /* Symbol Spectrum24 LA4137 */ PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0001), /* Socket Communications CF */ PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless LAN PC Card", 0x816cc815, 0x6fbf459a), /* 2011B, not 2011 */ PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, spectrum_cs_ids); static struct pcmcia_driver orinoco_driver = { .owner = THIS_MODULE, .drv = { .name = DRIVER_NAME, }, .probe = spectrum_cs_probe, .remove = spectrum_cs_detach, .suspend = spectrum_cs_suspend, .resume = spectrum_cs_resume,
dev_dbg(&link->dev, "parport_release\n"); if (info->ndev) { struct parport *p = info->port; parport_pc_unregister_port(p); } info->ndev = 0; pcmcia_disable_device(link); } /* parport_cs_release */ static struct pcmcia_device_id parport_ids[] = { PCMCIA_DEVICE_FUNC_ID(3), PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial+Parallel Port: SP230",0x3beb8cf2,0xdb9e58bc), PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0003), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, parport_ids); static struct pcmcia_driver parport_cs_driver = { .owner = THIS_MODULE, .drv = { .name = "parport_cs", }, .probe = parport_probe, .remove = parport_detach, .id_table = parport_ids, }; static int __init init_parport_cs(void)
snd_printdd(KERN_DEBUG "calling snd_pdacf_resume\n"); snd_pdacf_resume(chip); } } snd_printdd(KERN_DEBUG "resume done!\n"); return 0; } #endif /* * Module entry points */ static struct pcmcia_device_id snd_pdacf_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x015d, 0x4c45), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, snd_pdacf_ids); static struct pcmcia_driver pdacf_cs_driver = { .owner = THIS_MODULE, .drv = { .name = "snd-pdaudiocf", }, .probe = snd_pdacf_attach, .remove = snd_pdacf_detach, .id_table = snd_pdacf_ids, #ifdef CONFIG_PM .suspend = pdacf_suspend, .resume = pdacf_resume,
dev_info(&pcmcia->dev, "created %s\n", dev_name(&pdev->dev)); return 0; platform_failed: kfree(dev); mem_failed: pcmcia_bad: pcmcia_failed: pcmcia_disable_device(pcmcia); pcmcia->priv = NULL; return ret ?: -ENODEV; } static /*const*/ struct pcmcia_device_id softingcs_ids[] = { /* softing */ PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0002), PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0004), PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0005), /* vector, manufacturer? */ PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0081), PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0084), PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0085), /* EDIC */ PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0102), PCMCIA_DEVICE_MANF_CARD(0x0168, 0x0105), PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, softingcs_ids);
} static struct comedi_driver driver_labpc_cs = { .driver_name = "ni_labpc_cs", .module = THIS_MODULE, .auto_attach = labpc_cs_auto_attach, .detach = labpc_cs_detach, }; static int labpc_cs_attach(struct pcmcia_device *link) { return comedi_pcmcia_auto_config(link, &driver_labpc_cs); } static const struct pcmcia_device_id labpc_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103), /* daqcard-1200 */ PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids); static struct pcmcia_driver labpc_cs_driver = { .name = "daqcard-1200", .owner = THIS_MODULE, .id_table = labpc_cs_ids, .probe = labpc_cs_attach, .remove = comedi_pcmcia_auto_unconfig, }; module_comedi_pcmcia_driver(driver_labpc_cs, labpc_cs_driver); MODULE_DESCRIPTION("Comedi driver for National Instruments Lab-PC"); MODULE_AUTHOR("Frank Mori Hess <*****@*****.**>");
local->p_dev = link; link->priv = local; /* Initialize */ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID; link->irq.Handler = NULL; link->conf.Attributes = 0; link->conf.IntType = INT_MEMORY_AND_IO; return sl811_cs_config(link); } static struct pcmcia_device_id sl811_ids[] = { PCMCIA_DEVICE_MANF_CARD(0xc015, 0x0001), /* RATOC USB HOST CF+ Card */ PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, sl811_ids); static struct pcmcia_driver sl811_cs_driver = { .owner = THIS_MODULE, .drv = { .name = (char *)driver_name, }, .probe = sl811_cs_probe, .remove = sl811_cs_detach, .id_table = sl811_ids, }; /*====================================================================*/
} static int airo_resume(struct pcmcia_device *link) { local_info_t *local = link->priv; if (link->open) { reset_airo_card(local->eth_dev); netif_device_attach(local->eth_dev); } return 0; } static const struct pcmcia_device_id airo_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x015f, 0x000a), PCMCIA_DEVICE_MANF_CARD(0x015f, 0x0005), PCMCIA_DEVICE_MANF_CARD(0x015f, 0x0007), PCMCIA_DEVICE_MANF_CARD(0x0105, 0x0007), PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, airo_ids); static struct pcmcia_driver airo_driver = { .owner = THIS_MODULE, .name = "airo_cs", .probe = airo_probe, .remove = airo_detach, .id_table = airo_ids, .suspend = airo_suspend, .resume = airo_resume,
} static struct comedi_driver daq700_driver = { .driver_name = "ni_daq_700", .module = THIS_MODULE, .auto_attach = daq700_auto_attach, .detach = comedi_pcmcia_disable, }; static int daq700_cs_attach(struct pcmcia_device *link) { return comedi_pcmcia_auto_config(link, &daq700_driver); } static const struct pcmcia_device_id daq700_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x4743), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, daq700_cs_ids); static struct pcmcia_driver daq700_cs_driver = { .name = "ni_daq_700", .owner = THIS_MODULE, .id_table = daq700_cs_ids, .probe = daq700_cs_attach, .remove = comedi_pcmcia_auto_unconfig, }; module_comedi_pcmcia_driver(daq700_driver, daq700_cs_driver); MODULE_AUTHOR("Fred Brooks <*****@*****.**>"); MODULE_DESCRIPTION(
*/ #include "pcmcia.h" #include <linux/ssb/ssb.h> #include <pcmcia/cs_types.h> #include <pcmcia/cs.h> #include <pcmcia/cistpl.h> #include <pcmcia/ciscode.h> #include <pcmcia/ds.h> #include <pcmcia/cisreg.h> static /*const */ struct pcmcia_device_id b43_pcmcia_tbl[] = { PCMCIA_DEVICE_MANF_CARD(0x2D0, 0x448), PCMCIA_DEVICE_MANF_CARD(0x2D0, 0x476), PCMCIA_DEVICE_NULL, }; MODULE_DEVICE_TABLE(pcmcia, b43_pcmcia_tbl); #ifdef CONFIG_PM static int b43_pcmcia_suspend(struct pcmcia_device *dev) { struct ssb_bus *ssb = dev->priv; return ssb_bus_suspend(ssb); } static int b43_pcmcia_resume(struct pcmcia_device *dev)
pcmcia_disable_device(link); } /* ide_release */ /*====================================================================== The card status event handler. Mostly, this schedules other stuff to run after an event is received. A CARD_REMOVAL event also sets some flags to discourage the ide drivers from talking to the ports. ======================================================================*/ static struct pcmcia_device_id ide_ids[] = { PCMCIA_DEVICE_FUNC_ID(4), PCMCIA_DEVICE_MANF_CARD(0x0000, 0x0000), /* Corsair */ PCMCIA_DEVICE_MANF_CARD(0x0007, 0x0000), /* Hitachi */ PCMCIA_DEVICE_MANF_CARD(0x000a, 0x0000), /* I-O Data CFA */ PCMCIA_DEVICE_MANF_CARD(0x001c, 0x0001), /* Mitsubishi CFA */ PCMCIA_DEVICE_MANF_CARD(0x0032, 0x0704), PCMCIA_DEVICE_MANF_CARD(0x0045, 0x0401), /* SanDisk CFA */ PCMCIA_DEVICE_MANF_CARD(0x004f, 0x0000), /* Kingston */ PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), /* Toshiba */ PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d), PCMCIA_DEVICE_MANF_CARD(0x00ce, 0x0000), /* Samsung */ PCMCIA_DEVICE_MANF_CARD(0x0319, 0x0000), /* Hitachi */ PCMCIA_DEVICE_MANF_CARD(0x2080, 0x0001), PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0100), /* Viking CFA */ PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0200), /* Lexar, Viking CFA */ PCMCIA_DEVICE_PROD_ID123("Caravelle", "PSC-IDE ", "PSC000", 0x8c36137c, 0xd0693ab8, 0x2768a9f0), PCMCIA_DEVICE_PROD_ID123("CDROM", "IDE", "MCD-601p", 0x1b9179ca, 0xede88951, 0x0d902f74),
cs_failed: ixj_cs_release(link); return -ENODEV; } static void ixj_cs_release(struct pcmcia_device *link) { ixj_info_t *info = link->priv; DEBUG(0, "ixj_cs_release(0x%p)\n", link); info->ndev = 0; pcmcia_disable_device(link); } static struct pcmcia_device_id ixj_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x0257, 0x0600), PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, ixj_ids); static struct pcmcia_driver ixj_driver = { .owner = THIS_MODULE, .drv = { .name = "ixj_cs", }, .probe = ixj_probe, .remove = ixj_detach, .id_table = ixj_ids, }; static int __init ixj_pcmcia_init(void)
} static struct comedi_driver driver_dio24 = { .driver_name = "ni_daq_dio24", .module = THIS_MODULE, .auto_attach = dio24_auto_attach, .detach = comedi_pcmcia_disable, }; static int dio24_cs_attach(struct pcmcia_device *link) { return comedi_pcmcia_auto_config(link, &driver_dio24); } static const struct pcmcia_device_id dio24_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x475c), /* daqcard-dio24 */ PCMCIA_DEVICE_NULL }; MODULE_DEVICE_TABLE(pcmcia, dio24_cs_ids); static struct pcmcia_driver dio24_cs_driver = { .name = "ni_daq_dio24", .owner = THIS_MODULE, .id_table = dio24_cs_ids, .probe = dio24_cs_attach, .remove = comedi_pcmcia_auto_unconfig, }; module_comedi_pcmcia_driver(driver_dio24, dio24_cs_driver); MODULE_AUTHOR("Daniel Vecino Castel <*****@*****.**>"); MODULE_DESCRIPTION(