From: Dominik Brodowski re-direct calls to adjust_resource_info for MEM and IO. Signed-off-by: Dominik Brodowski Signed-off-by: Andrew Morton --- 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); }; /* _