]> git.hungrycats.org Git - linux/commitdiff
[PATCH] pcmcia: adjust_ and release_resources only for non-statically mapped sockets
authorDominik Brodowski <linux@dominikbrodowski.de>
Tue, 11 Jan 2005 11:28:50 +0000 (03:28 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 11 Jan 2005 11:28:50 +0000 (03:28 -0800)
re-direct calls to adjust_resource_info for MEM and IO.

Signed-off-by: Dominik Brodowski <linux@brodo.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/pcmcia/rsrc_mgr.c
include/pcmcia/ss.h

index ea52d03e9f4bec00af5c2521efcff62eceb9fe97..ff67766d0a073e60e25ba3785a225e5f79262d1f 100644 (file)
@@ -940,6 +940,17 @@ static int adjust_irq(adjust_t *adj)
 
 /*====================================================================*/
 
+static int nonstatic_adjust_resource_info(struct pcmcia_socket *s, adjust_t *adj)
+{
+       switch (adj->Resource) {
+       case RES_MEMORY_RANGE:
+               return adjust_memory(s, adj);
+       case RES_IO_RANGE:
+               return adjust_io(s, adj);
+       }
+       return CS_UNSUPPORTED_FUNCTION;
+}
+
 int pcmcia_adjust_resource_info(adjust_t *adj)
 {
        struct pcmcia_socket *s;
@@ -950,14 +961,8 @@ int pcmcia_adjust_resource_info(adjust_t *adj)
 
        down_read(&pcmcia_socket_list_rwsem);
        list_for_each_entry(s, &pcmcia_socket_list, socket_list) {
-               switch (adj->Resource) {
-               case RES_MEMORY_RANGE:
-                       ret = adjust_memory(s, adj);
-                       break;
-               case RES_IO_RANGE:
-                       ret = adjust_io(s, adj);
-                       break;
-               }
+               if (s->resource_ops->adjust_resource)
+                       ret = s->resource_ops->adjust_resource(s, adj);
        }
        up_read(&pcmcia_socket_list_rwsem);
 
@@ -967,7 +972,7 @@ EXPORT_SYMBOL(pcmcia_adjust_resource_info);
 
 /*====================================================================*/
 
-void release_resource_db(struct pcmcia_socket *s)
+static void nonstatic_release_resource_db(struct pcmcia_socket *s)
 {
     resource_map_t *p, *q;
     
@@ -982,6 +987,7 @@ void release_resource_db(struct pcmcia_socket *s)
 }
 
 
+
 void pcmcia_validate_mem(struct pcmcia_socket *s)
 {
        if (s->resource_ops->validate_mem)
@@ -1013,12 +1019,20 @@ struct resource *find_mem_region(u_long base, u_long num, u_long align,
        return NULL;
 }
 
+void release_resource_db(struct pcmcia_socket *s)
+{
+       if (s->resource_ops->exit)
+               s->resource_ops->exit(s);
+}
+
 
 struct pccard_resource_ops pccard_static_ops = {
        .validate_mem = NULL,
        .adjust_io_region = NULL,
        .find_io = NULL,
        .find_mem = NULL,
+       .adjust_resource = NULL,
+       .exit = NULL,
 };
 
 struct pccard_resource_ops pccard_nonstatic_ops = {
@@ -1026,4 +1040,6 @@ struct pccard_resource_ops pccard_nonstatic_ops = {
        .adjust_io_region = nonstatic_adjust_io_region,
        .find_io = nonstatic_find_io_region,
        .find_mem = nonstatic_find_mem_region,
+       .adjust_resource = nonstatic_adjust_resource_info,
+       .exit = nonstatic_release_resource_db,
 };
index bd22d0c69975ffba79c59ef0a398cde9f4d3f6c5..3b4b3cfea12d66bc0ae5f139e6a0e998da5d7ae0 100644 (file)
@@ -127,6 +127,9 @@ struct pccard_resource_ops {
        struct resource* (*find_mem)    (unsigned long base, unsigned long num,
                                         unsigned long align, int low,
                                         struct pcmcia_socket *s);
+       int     (*adjust_resource)      (struct pcmcia_socket *s,
+                                        adjust_t *adj);
+       void    (*exit)                 (struct pcmcia_socket *s);
 };
 
 /*