Index: 2.6.10/drivers/pcmcia/cistpl.c =================================================================== --- 2.6.10.orig/drivers/pcmcia/cistpl.c 2004-12-29 10:09:52.930529946 +0100 +++ 2.6.10/drivers/pcmcia/cistpl.c 2004-12-29 10:18:48.454626093 +0100 @@ -383,6 +383,8 @@ memcpy(s->fake_cis, cis->Data, cis->Length); return CS_SUCCESS; } +EXPORT_SYMBOL(pcmcia_replace_cis); + /*====================================================================== Index: 2.6.10/drivers/pcmcia/cs.c =================================================================== --- 2.6.10.orig/drivers/pcmcia/cs.c 2004-12-29 10:07:43.567831744 +0100 +++ 2.6.10/drivers/pcmcia/cs.c 2004-12-29 10:19:14.974669122 +0100 @@ -33,36 +33,11 @@ #include #include "cs_internal.h" -#ifdef CONFIG_PCI -#define PCI_OPT " [pci]" -#else -#define PCI_OPT "" -#endif -#ifdef CONFIG_CARDBUS -#define CB_OPT " [cardbus]" -#else -#define CB_OPT "" -#endif -#ifdef CONFIG_PM -#define PM_OPT " [pm]" -#else -#define PM_OPT "" -#endif -#if !defined(CONFIG_CARDBUS) && !defined(CONFIG_PCI) && !defined(CONFIG_PM) -#define OPTIONS " none" -#else -#define OPTIONS PCI_OPT CB_OPT PM_OPT -#endif - -static const char *release = "Linux Kernel Card Services"; -static const char *options = "options: " OPTIONS; - -/*====================================================================*/ /* Module parameters */ MODULE_AUTHOR("David Hinds "); -MODULE_DESCRIPTION("Linux Kernel Card Services\noptions:" OPTIONS); +MODULE_DESCRIPTION("Linux Kernel Card Services"); MODULE_LICENSE("GPL"); #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444) @@ -90,29 +65,27 @@ } #endif -/*====================================================================*/ socket_state_t dead_socket = { .csc_mask = SS_DETECT, }; +EXPORT_SYMBOL(dead_socket); /* List of all sockets, protected by a rwsem */ LIST_HEAD(pcmcia_socket_list); -DECLARE_RWSEM(pcmcia_socket_list_rwsem); EXPORT_SYMBOL(pcmcia_socket_list); -EXPORT_SYMBOL(pcmcia_socket_list_rwsem); - -/*==================================================================== +DECLARE_RWSEM(pcmcia_socket_list_rwsem); +EXPORT_SYMBOL(pcmcia_socket_list_rwsem); - Low-level PC Card interface drivers need to register with Card - Services using these calls. - -======================================================================*/ /** - * socket drivers are expected to use the following callbacks in their + * + * Low-level PC Card interface drivers need to register with the PCCard + * core using pcmcia_register_socket. + * + * socket drivers are expected to use the following callbacks in their * .drv struct: * - pcmcia_socket_dev_suspend * - pcmcia_socket_dev_resume @@ -212,8 +185,8 @@ } /* try to obtain a socket number [yes, it gets ugly if we - * register more than 2^sizeof(unsigned int) pcmcia - * sockets... but the socket number is deprecated + * register more than 2^sizeof(unsigned int) pcmcia + * sockets... but the socket number is deprecated * anyways, so I don't care] */ down_write(&pcmcia_socket_list_rwsem); if (list_empty(&pcmcia_socket_list)) @@ -322,67 +295,47 @@ EXPORT_SYMBOL(pcmcia_get_socket_by_nr); -/*====================================================================== - - Shutdown_Socket() and setup_socket() are scheduled using add_timer - calls by the main event handler when card insertion and removal - events are received. Shutdown_Socket() unconfigures a socket and - turns off socket power. Setup_socket() turns on socket power - and resets the socket, in two stages. - -======================================================================*/ - static void free_regions(memory_handle_t *list) { - memory_handle_t tmp; - while (*list != NULL) { - tmp = *list; - *list = tmp->info.next; - tmp->region_magic = 0; - kfree(tmp); - } + memory_handle_t tmp; + while (*list != NULL) { + tmp = *list; + *list = tmp->info.next; + tmp->region_magic = 0; + kfree(tmp); + } } static void shutdown_socket(struct pcmcia_socket *s) { - cs_dbg(s, 1, "shutdown_socket\n"); + cs_dbg(s, 1, "shutdown_socket\n"); - /* Blank out the socket state */ - s->socket = dead_socket; - s->ops->init(s); - s->ops->set_socket(s, &s->socket); - s->irq.AssignedIRQ = s->irq.Config = 0; - s->lock_count = 0; - destroy_cis_cache(s); + /* Blank out the socket state */ + s->socket = dead_socket; + s->ops->init(s); + s->ops->set_socket(s, &s->socket); + s->irq.AssignedIRQ = s->irq.Config = 0; + s->lock_count = 0; + destroy_cis_cache(s); #ifdef CONFIG_CARDBUS - cb_free(s); + cb_free(s); #endif - s->functions = 0; - if (s->config) { - kfree(s->config); - s->config = NULL; - } - free_regions(&s->a_region); - free_regions(&s->c_region); - - { - int status; - s->ops->get_status(s, &status); - if (status & SS_POWERON) { - printk(KERN_ERR "PCMCIA: socket %p: *** DANGER *** unable to remove socket power\n", s); + s->functions = 0; + if (s->config) { + kfree(s->config); + s->config = NULL; } - } -} /* shutdown_socket */ - -/*====================================================================== + free_regions(&s->a_region); + free_regions(&s->c_region); - The central event handler. Send_event() sends an event to the - 16-bit subsystem, which then calls the relevant device drivers. - Parse_events() interprets the event bits from - a card status change report. Do_shutdown() handles the high - priority stuff associated with a card removal. - -======================================================================*/ + { + int status; + s->ops->get_status(s, &status); + if (status & SS_POWERON) { + printk(KERN_ERR "PCMCIA: socket %p: *** DANGER *** unable to remove socket power\n", s); + } + } +} /* shutdown_socket */ /* NOTE: send_event needs to be called with skt->sem held. */ @@ -727,28 +680,7 @@ wake_up(&s->thread_wait); } } /* pcmcia_parse_events */ - - -/*===================================================================== - - Return the PCI device associated with a card.. - -======================================================================*/ - -#ifdef CONFIG_CARDBUS - -struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s) -{ - if (!s || !(s->state & SOCKET_CARDBUS)) - return NULL; - - return s->cb_dev->subordinate; -} - -EXPORT_SYMBOL(pcmcia_lookup_bus); - -#endif - +EXPORT_SYMBOL(pcmcia_parse_events); /* register pcmcia_callback */ int pccard_register_pcmcia(struct pcmcia_socket *s, struct pcmcia_callback *c) @@ -778,19 +710,15 @@ } EXPORT_SYMBOL(pccard_register_pcmcia); - -/*====================================================================== - - I'm not sure which "reset" function this is supposed to use, - but for now, it uses the low-level interface's reset, not the - CIS register. - -======================================================================*/ - +/* + * I'm not sure which "reset" function this is supposed to use, + * but for now, it uses the low-level interface's reset, not the + * CIS register. + */ int pccard_reset_card(struct pcmcia_socket *skt) { int ret; - + cs_dbg(skt, 1, "resetting socket\n"); down(&skt->skt_sem); @@ -823,17 +751,14 @@ } /* reset_card */ EXPORT_SYMBOL(pccard_reset_card); -/*====================================================================== - - These shut down or wake up a socket. They are sort of user - initiated versions of the APM suspend and resume actions. - -======================================================================*/ - +/* + * These shut down or wake up a socket. They are sort of user + * initiated versions of the APM suspend and resume actions. + */ int pcmcia_suspend_card(struct pcmcia_socket *skt) { int ret; - + cs_dbg(skt, 1, "suspending socket\n"); down(&skt->skt_sem); @@ -852,11 +777,12 @@ return ret; } /* suspend_card */ +EXPORT_SYMBOL(pcmcia_suspend_card); int pcmcia_resume_card(struct pcmcia_socket *skt) { int ret; - + cs_dbg(skt, 1, "waking up socket\n"); down(&skt->skt_sem); @@ -875,17 +801,15 @@ return ret; } /* resume_card */ +EXPORT_SYMBOL(pcmcia_resume_card); -/*====================================================================== - These handle user requests to eject or insert a card. - -======================================================================*/ +/* These handle user requests to eject or insert a card. */ int pcmcia_eject_card(struct pcmcia_socket *skt) { int ret; - + cs_dbg(skt, 1, "user eject request\n"); down(&skt->skt_sem); @@ -908,6 +832,7 @@ return ret; } /* eject_card */ +EXPORT_SYMBOL(pcmcia_eject_card); int pcmcia_insert_card(struct pcmcia_socket *skt) { @@ -931,21 +856,8 @@ return ret; } /* insert_card */ - -/*====================================================================== - - OS-specific module glue goes here - -======================================================================*/ -/* in alpha order */ -EXPORT_SYMBOL(pcmcia_eject_card); EXPORT_SYMBOL(pcmcia_insert_card); -EXPORT_SYMBOL(pcmcia_replace_cis); -EXPORT_SYMBOL(pcmcia_resume_card); -EXPORT_SYMBOL(pcmcia_suspend_card); -EXPORT_SYMBOL(dead_socket); -EXPORT_SYMBOL(pcmcia_parse_events); struct class pcmcia_socket_class = { .name = "pcmcia_socket", @@ -953,28 +865,24 @@ }; EXPORT_SYMBOL(pcmcia_socket_class); - static int __init init_pcmcia_cs(void) { int ret; - printk(KERN_INFO "%s\n", release); - printk(KERN_INFO " %s\n", options); ret = class_register(&pcmcia_socket_class); if (ret) return (ret); - return class_interface_register(&pccard_sysfs_interface); + ret = class_interface_register(&pccard_sysfs_interface); + if (ret) + class_unregister(&pcmcia_socket_class); + + return (ret); } +subsys_initcall(init_pcmcia_cs); static void __exit exit_pcmcia_cs(void) { - printk(KERN_INFO "unloading Kernel Card Services\n"); - class_interface_unregister(&pccard_sysfs_interface); - class_unregister(&pcmcia_socket_class); + class_interface_unregister(&pccard_sysfs_interface); + class_unregister(&pcmcia_socket_class); } - -subsys_initcall(init_pcmcia_cs); module_exit(exit_pcmcia_cs); - -/*====================================================================*/ - Index: 2.6.10/drivers/pcmcia/ds.c =================================================================== --- 2.6.10.orig/drivers/pcmcia/ds.c 2004-12-29 09:27:30.000000000 +0100 +++ 2.6.10/drivers/pcmcia/ds.c 2004-12-29 10:18:48.457625646 +0100 @@ -1250,7 +1250,18 @@ /*====================================================================*/ -extern struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s); +#ifdef CONFIG_CARDBUS + +static struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s) +{ + if (!s || !(s->state & SOCKET_CARDBUS)) + return NULL; + + return s->cb_dev->subordinate; +} + +#endif + static int get_device_info(struct pcmcia_bus_socket *s, bind_info_t *bind_info, int first) {