From: Dominik Brodowski Make rsrc_nonstatic an independent module. Signed-off-by: Dominik Brodowski Signed-off-by: Andrew Morton --- 25-akpm/drivers/pcmcia/Kconfig | 9 +++++++++ 25-akpm/drivers/pcmcia/Makefile | 4 +++- 25-akpm/drivers/pcmcia/cistpl.c | 2 ++ 25-akpm/drivers/pcmcia/cs.c | 8 ++------ 25-akpm/drivers/pcmcia/cs_internal.h | 2 -- 25-akpm/drivers/pcmcia/hd64465_ss.c | 1 + 25-akpm/drivers/pcmcia/i82092.c | 1 + 25-akpm/drivers/pcmcia/i82365.c | 1 + 25-akpm/drivers/pcmcia/m32r_cfc.c | 1 + 25-akpm/drivers/pcmcia/m32r_pcc.c | 1 + 25-akpm/drivers/pcmcia/pd6729.c | 1 + 25-akpm/drivers/pcmcia/rsrc_mgr.c | 1 + 25-akpm/drivers/pcmcia/rsrc_nonstatic.c | 4 ++++ 25-akpm/drivers/pcmcia/soc_common.c | 1 + 25-akpm/drivers/pcmcia/tcic.c | 3 ++- 25-akpm/drivers/pcmcia/yenta_socket.c | 1 + 25-akpm/include/pcmcia/ss.h | 4 ++++ 17 files changed, 35 insertions(+), 10 deletions(-) diff -puN drivers/pcmcia/cistpl.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/cistpl.c --- 25/drivers/pcmcia/cistpl.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/cistpl.c Fri Dec 17 15:25:11 2004 @@ -78,6 +78,7 @@ void release_cis_mem(struct pcmcia_socke s->cis_virt = NULL; } } +EXPORT_SYMBOL(release_cis_mem); /* * Map the card memory at "card_offset" into virtual space. @@ -320,6 +321,7 @@ void destroy_cis_cache(struct pcmcia_soc s->fake_cis = NULL; } } +EXPORT_SYMBOL(destroy_cis_cache); /*====================================================================== diff -puN drivers/pcmcia/cs.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/cs.c --- 25/drivers/pcmcia/cs.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/cs.c Fri Dec 17 15:25:11 2004 @@ -212,7 +212,7 @@ int pcmcia_register_socket(struct pcmcia { int ret; - if (!socket || !socket->ops || !socket->dev.dev) + if (!socket || !socket->ops || !socket->dev.dev || !socket->resource_ops) return -EINVAL; cs_dbg(socket, 0, "pcmcia_register_socket(0x%p)\n", socket->ops); @@ -250,11 +250,7 @@ int pcmcia_register_socket(struct pcmcia socket->cis_mem.flags = 0; socket->cis_mem.speed = cis_speed; - /* init resource handling */ - if (socket->features & SS_CAP_STATIC_MAP) - socket->resource_ops = &pccard_static_ops; - else - socket->resource_ops = &pccard_nonstatic_ops; + socket->mem_db.next = &socket->mem_db; socket->io_db.next = &socket->io_db; diff -puN drivers/pcmcia/cs_internal.h~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/cs_internal.h --- 25/drivers/pcmcia/cs_internal.h~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/cs_internal.h Fri Dec 17 15:25:11 2004 @@ -144,8 +144,6 @@ int try_irq(u_int Attributes, int irq, i void undo_irq(u_int Attributes, int irq); int adjust_resource_info(client_handle_t handle, adjust_t *adj); void release_resource_db(struct pcmcia_socket *s); -extern struct pccard_resource_ops pccard_static_ops; -extern struct pccard_resource_ops pccard_nonstatic_ops; /* In socket_sysfs.c */ extern struct class_interface pccard_sysfs_interface; diff -puN drivers/pcmcia/hd64465_ss.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/hd64465_ss.c --- 25/drivers/pcmcia/hd64465_ss.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/hd64465_ss.c Fri Dec 17 15:25:11 2004 @@ -922,6 +922,7 @@ static int __init init_hs(void) hs_set_voltages(&hs_sockets[i], 0, 0); hs_sockets[i].socket.features |= SS_CAP_PCCARD | SS_CAP_STATIC_MAP; /* mappings are fixed in host memory */ + hs_sockets[i].socket.resource_ops = &pccard_static_ops; hs_sockets[i].socket.irq_mask = 0xffde;/*0xffff*/ /* IRQs mapped in s/w so can do any, really */ hs_sockets[i].socket.map_size = HD64465_PCC_WINDOW; /* 16MB fixed window size */ diff -puN drivers/pcmcia/i82092.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/i82092.c --- 25/drivers/pcmcia/i82092.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/i82092.c Fri Dec 17 15:25:11 2004 @@ -162,6 +162,7 @@ static int __devinit i82092aa_pci_probe( for (i = 0; idev; sockets[i].socket.ops = &i82092aa_operations; + sockets[i].socket.resource_ops = &pccard_nonstatic_ops; ret = pcmcia_register_socket(&sockets[i].socket); if (ret) { goto err_out_free_sockets; diff -puN drivers/pcmcia/i82365.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/i82365.c --- 25/drivers/pcmcia/i82365.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/i82365.c Fri Dec 17 15:25:11 2004 @@ -1400,6 +1400,7 @@ static int __init init_i82365(void) for (i = 0; i < sockets; i++) { socket[i].socket.dev.dev = &i82365_device.dev; socket[i].socket.ops = &pcic_operations; + socket[i].socket.resource_ops = &pccard_nonstatic_ops; socket[i].socket.owner = THIS_MODULE; socket[i].number = i; ret = pcmcia_register_socket(&socket[i].socket); diff -puN drivers/pcmcia/Kconfig~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/Kconfig --- 25/drivers/pcmcia/Kconfig~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/Kconfig Fri Dec 17 15:25:11 2004 @@ -80,6 +80,7 @@ config YENTA depends on PCCARD && PCI #fixme: remove dependendcy on CARDBUS depends on CARDBUS + select PCCARD_NONSTATIC ---help--- This option enables support for CardBus host bridges. Virtually all modern PCMCIA bridges are CardBus compatible. A "bridge" is @@ -94,6 +95,7 @@ config YENTA config PD6729 tristate "Cirrus PD6729 compatible bridge support" depends on PCMCIA && PCI + select PCCARD_NONSTATIC help This provides support for the Cirrus PD6729 PCI-to-PCMCIA bridge device, found in some older laptops and PCMCIA card readers. @@ -101,6 +103,7 @@ config PD6729 config I82092 tristate "i82092 compatible bridge support" depends on PCMCIA && PCI + select PCCARD_NONSTATIC help This provides support for the Intel I82092AA PCI-to-PCMCIA bridge device, found in some older laptops and more commonly in evaluation boards for the @@ -109,6 +112,7 @@ config I82092 config I82365 tristate "i82365 compatible bridge support" depends on PCMCIA && ISA + select PCCARD_NONSTATIC help Say Y here to include support for ISA-bus PCMCIA host bridges that are register compatible with the Intel i82365. These are found on @@ -119,6 +123,7 @@ config I82365 config TCIC tristate "Databook TCIC host bridge support" depends on PCMCIA + select PCCARD_NONSTATIC help Say Y here to include support for the Databook TCIC family of PCMCIA host bridges. These are only found on a handful of old systems. @@ -178,4 +183,8 @@ config M32R_CFC_NUM help Set the number of M32R CF slots. +config PCCARD_NONSTATIC + tristate + depends on PCCARD + endmenu diff -puN drivers/pcmcia/m32r_cfc.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/m32r_cfc.c --- 25/drivers/pcmcia/m32r_cfc.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/m32r_cfc.c Fri Dec 17 15:25:11 2004 @@ -831,6 +831,7 @@ static int __init init_m32r_pcc(void) for (i = 0 ; i < pcc_sockets ; i++) { socket[i].socket.dev.dev = &pcc_device.dev; socket[i].socket.ops = &pcc_operations; + socket[i].socket.resource_ops = &pccard_static_ops; socket[i].socket.owner = THIS_MODULE; socket[i].number = i; ret = pcmcia_register_socket(&socket[i].socket); diff -puN drivers/pcmcia/m32r_pcc.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/m32r_pcc.c --- 25/drivers/pcmcia/m32r_pcc.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/m32r_pcc.c Fri Dec 17 15:25:11 2004 @@ -768,6 +768,7 @@ static int __init init_m32r_pcc(void) for (i = 0 ; i < pcc_sockets ; i++) { socket[i].socket.dev.dev = &pcc_device.dev; socket[i].socket.ops = &pcc_operations; + socket[i].socket.resource_ops = &pccard_static_ops; socket[i].socket.owner = THIS_MODULE; socket[i].number = i; ret = pcmcia_register_socket(&socket[i].socket); diff -puN drivers/pcmcia/Makefile~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/Makefile --- 25/drivers/pcmcia/Makefile~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/Makefile Fri Dec 17 15:25:11 2004 @@ -6,13 +6,15 @@ ifeq ($(CONFIG_PCMCIA_DEBUG),y) EXTRA_CFLAGS += -DDEBUG endif -pcmcia_core-y += cs.o cistpl.o rsrc_mgr.o socket_sysfs.o rsrc_nonstatic.o +pcmcia_core-y += cs.o cistpl.o rsrc_mgr.o socket_sysfs.o pcmcia_core-$(CONFIG_CARDBUS) += cardbus.o obj-$(CONFIG_PCCARD) += pcmcia_core.o pcmcia-y += ds.o pcmcia_compat.o obj-$(CONFIG_PCMCIA) += pcmcia.o +obj-$(CONFIG_PCCARD_NONSTATIC) += rsrc_nonstatic.o + # socket drivers diff -puN drivers/pcmcia/pd6729.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/pd6729.c --- 25/drivers/pcmcia/pd6729.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/pd6729.c Fri Dec 17 15:25:11 2004 @@ -759,6 +759,7 @@ static int __devinit pd6729_pci_probe(st socket[i].number = i; socket[i].socket.ops = &pd6729_operations; + socket[i].socket.resource_ops = &pccard_nonstatic_ops; socket[i].socket.dev.dev = &dev->dev; socket[i].socket.driver_data = &socket[i]; } diff -puN drivers/pcmcia/rsrc_mgr.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/rsrc_mgr.c --- 25/drivers/pcmcia/rsrc_mgr.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/rsrc_mgr.c Fri Dec 17 15:25:11 2004 @@ -290,3 +290,4 @@ struct pccard_resource_ops pccard_static .adjust_resource = NULL, .exit = NULL, }; +EXPORT_SYMBOL(pccard_static_ops); diff -puN drivers/pcmcia/rsrc_nonstatic.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/rsrc_nonstatic.c --- 25/drivers/pcmcia/rsrc_nonstatic.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/rsrc_nonstatic.c Fri Dec 17 15:25:11 2004 @@ -34,6 +34,9 @@ #include #include "cs_internal.h" +MODULE_AUTHOR("David A. Hinds, Dominik Brodowski"); +MODULE_LICENSE("GPL"); + /* Parameters that can be set with 'insmod' */ #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444) @@ -769,3 +772,4 @@ struct pccard_resource_ops pccard_nonsta .adjust_resource = nonstatic_adjust_resource_info, .exit = nonstatic_release_resource_db, }; +EXPORT_SYMBOL(pccard_nonstatic_ops); diff -puN drivers/pcmcia/soc_common.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/soc_common.c --- 25/drivers/pcmcia/soc_common.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/soc_common.c Fri Dec 17 15:25:11 2004 @@ -758,6 +758,7 @@ int soc_common_drv_pcmcia_probe(struct d goto out_err_6; skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD; + skt->socket.resource_ops = &pccard_static_ops; skt->socket.irq_mask = 0; skt->socket.map_size = PAGE_SIZE; skt->socket.pci_irq = skt->irq; diff -puN drivers/pcmcia/tcic.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/tcic.c --- 25/drivers/pcmcia/tcic.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/tcic.c Fri Dec 17 15:25:11 2004 @@ -531,8 +531,9 @@ static int __init init_tcic(void) for (i = 0; i < sockets; i++) { socket_table[i].socket.ops = &tcic_operations; + socket_table[i].socket.resource_ops = &pccard_nonstatic_ops; socket_table[i].socket.dev.dev = &tcic_device.dev; - ret = pcmcia_register_socket(&socket_table[i].socket); + ret = pcmcia_register_socket(&socket_table[i].socket); if (ret && i) pcmcia_unregister_socket(&socket_table[0].socket); } diff -puN drivers/pcmcia/yenta_socket.c~pcmcia-make-rsrc_nonstatic-an-independend-module drivers/pcmcia/yenta_socket.c --- 25/drivers/pcmcia/yenta_socket.c~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/drivers/pcmcia/yenta_socket.c Fri Dec 17 15:25:11 2004 @@ -917,6 +917,7 @@ static int __devinit yenta_probe (struct /* prepare pcmcia_socket */ socket->socket.ops = ¥ta_socket_operations; + socket->socket.resource_ops = &pccard_nonstatic_ops; socket->socket.dev.dev = &dev->dev; socket->socket.driver_data = socket; socket->socket.owner = THIS_MODULE; diff -puN include/pcmcia/ss.h~pcmcia-make-rsrc_nonstatic-an-independend-module include/pcmcia/ss.h --- 25/include/pcmcia/ss.h~pcmcia-make-rsrc_nonstatic-an-independend-module Fri Dec 17 15:25:11 2004 +++ 25-akpm/include/pcmcia/ss.h Fri Dec 17 15:25:11 2004 @@ -131,6 +131,10 @@ struct pccard_resource_ops { adjust_t *adj); void (*exit) (struct pcmcia_socket *s); }; +/* SS_CAP_STATIC_MAP */ +extern struct pccard_resource_ops pccard_static_ops; +/* !SS_CAP_STATIC_MAP */ +extern struct pccard_resource_ops pccard_nonstatic_ops; /* * Calls to set up low-level "Socket Services" drivers _