
From: Dominik Brodowski <linux@dominikbrodowski.de>

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>
---

 25-akpm/drivers/pcmcia/rsrc_mgr.c |   34 +++++++++++++++++++++++++---------
 25-akpm/include/pcmcia/ss.h       |    3 +++
 2 files changed, 28 insertions(+), 9 deletions(-)

diff -puN drivers/pcmcia/rsrc_mgr.c~pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets drivers/pcmcia/rsrc_mgr.c
--- 25/drivers/pcmcia/rsrc_mgr.c~pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets	Fri Dec 17 15:25:09 2004
+++ 25-akpm/drivers/pcmcia/rsrc_mgr.c	Fri Dec 17 15:25:09 2004
@@ -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
 
 	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_inf
 
 /*====================================================================*/
 
-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_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 
 	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_nonsta
 	.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,
 };
diff -puN include/pcmcia/ss.h~pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets include/pcmcia/ss.h
--- 25/include/pcmcia/ss.h~pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets	Fri Dec 17 15:25:09 2004
+++ 25-akpm/include/pcmcia/ss.h	Fri Dec 17 15:25:09 2004
@@ -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);
 };
 
 /*
_
