]> git.hungrycats.org Git - linux/commitdiff
[PATCH] pcmcia: make rsrc_nonstatic an independend module
authorDominik Brodowski <linux@dominikbrodowski.de>
Tue, 11 Jan 2005 11:29:18 +0000 (03:29 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 11 Jan 2005 11:29:18 +0000 (03:29 -0800)
Make rsrc_nonstatic an independent module.

Signed-off-by: Dominik Brodowski <linux@brodo.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
17 files changed:
drivers/pcmcia/Kconfig
drivers/pcmcia/Makefile
drivers/pcmcia/cistpl.c
drivers/pcmcia/cs.c
drivers/pcmcia/cs_internal.h
drivers/pcmcia/hd64465_ss.c
drivers/pcmcia/i82092.c
drivers/pcmcia/i82365.c
drivers/pcmcia/m32r_cfc.c
drivers/pcmcia/m32r_pcc.c
drivers/pcmcia/pd6729.c
drivers/pcmcia/rsrc_mgr.c
drivers/pcmcia/rsrc_nonstatic.c
drivers/pcmcia/soc_common.c
drivers/pcmcia/tcic.c
drivers/pcmcia/yenta_socket.c
include/pcmcia/ss.h

index 22f3c9a0841e0f5d0c3fedde57f4c8994f39d69b..ca14e721502dda8a386c919db9ddfa20bd651444 100644 (file)
@@ -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
index 1d26c873b6f65a58bf310e3d8139771ead97815e..3d5eb4984a7fbbfcc8372cb9861dd05b5bff7586 100644 (file)
@@ -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
 
index 99b90c2334f790ffdb023e0d9b3366b9b8aac9c0..e29a6ddf2fd7e18af9b2c58cfeca312d1b67cec3 100644 (file)
@@ -78,6 +78,7 @@ void release_cis_mem(struct pcmcia_socket *s)
        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_socket *s)
                s->fake_cis = NULL;
        }
 }
+EXPORT_SYMBOL(destroy_cis_cache);
 
 /*======================================================================
 
index 590b2a5618907e5ff631d7e115ae0087c0b08007..ecf3afff5dce194f54d52a2decdd4ee7a9a6f6d9 100644 (file)
@@ -212,7 +212,7 @@ int pcmcia_register_socket(struct pcmcia_socket *socket)
 {
        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 *socket)
        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;
 
index 764e71bcecaba16e18bd4eb34607f94e043ffad6..f64ca5663f3cc48b2e107653949fea756f27e7e7 100644 (file)
@@ -144,8 +144,6 @@ int try_irq(u_int Attributes, int irq, int specific);
 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;
index 875c9cfaea3f1504734f3ea7f0b47414f98fc378..36d85f04e276cbf8f401eb3fdc3fe47d263f3482 100644 (file)
@@ -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 */
 
index eb255238aef8d516921a514dc4ca8ee695f6d9b8..aa8ed192d21a50ce6117bc47a24f2e9a030340b4 100644 (file)
@@ -162,6 +162,7 @@ static int __devinit i82092aa_pci_probe(struct pci_dev *dev, const struct pci_de
        for (i = 0; i<socket_count; i++) {
                sockets[i].socket.dev.dev = &dev->dev;
                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;
index 56ced25d993c62575f0e6209e7d995a21e1304d4..0d9bb1505c2e15f465d28b82a6834e2fbe827bdf 100644 (file)
@@ -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);        
index 836058dfa2c01b95efe3e013b7a262d35e8cdc35..023013d3e26358d66f9d8e9dcea1cb6d039677f8 100644 (file)
@@ -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);
index aae7a16a1815afcb93d7ec4d965f878b3253dbf5..8c881ae7328789a640b39df61b4d6185f76d007e 100644 (file)
@@ -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);
index ded56ce22d17d38f1db3976af01049d13fb8e126..1347f94260c7128d5a9d46c9401de355c50eeb64 100644 (file)
@@ -759,6 +759,7 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev,
                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];
        }
index 7483249d09febafdd61e51ef0c6d58fc037f0136..b3f1fe0b02caa6b257bd55922925bf1e09a8c5b3 100644 (file)
@@ -290,3 +290,4 @@ struct pccard_resource_ops pccard_static_ops = {
        .adjust_resource = NULL,
        .exit = NULL,
 };
+EXPORT_SYMBOL(pccard_static_ops);
index 088bbb1d2949b4e39a2732864008c8ca1c1631c1..025dca06b8d44bcab0fae115aac85bd5bdf7abd3 100644 (file)
@@ -34,6 +34,9 @@
 #include <pcmcia/cistpl.h>
 #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_nonstatic_ops = {
        .adjust_resource = nonstatic_adjust_resource_info,
        .exit = nonstatic_release_resource_db,
 };
+EXPORT_SYMBOL(pccard_nonstatic_ops);
index a45fee3f43550fec3968ebd1a1ff584f5ded1adb..20dd66b245bc980c0a3e3ffff465786e57ee98a5 100644 (file)
@@ -758,6 +758,7 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops
                        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;
index a651309eb84fb81db366f1211e3f3058b8898145..e20438a7408f41c65d791bda9c1056e68ba8327c 100644 (file)
@@ -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);
     }
index 8b76f7d6a37e3e6c91316cea66e6a1b5ffaa3891..91b7b133989acc0a55edc380e0f22240610f1901 100644 (file)
@@ -917,6 +917,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
 
        /* prepare pcmcia_socket */
        socket->socket.ops = &yenta_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;
index 3b4b3cfea12d66bc0ae5f139e6a0e998da5d7ae0..281689320506cefe39470967330f4a4d160ed29c 100644 (file)
@@ -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