From: Dominik Brodowski Calls to find_io_region only happen if !SS_CAP_STATIC_MAP. Signed-off-by: Dominik Brodowski Signed-off-by: Andrew Morton --- 25-akpm/drivers/pcmcia/rsrc_mgr.c | 43 +++++++++++++++++++++++--------------- 25-akpm/include/pcmcia/ss.h | 3 ++ 2 files changed, 30 insertions(+), 16 deletions(-) diff -puN drivers/pcmcia/rsrc_mgr.c~pcmcia-find_io_region-only-for-non-statically-mapped-sockets drivers/pcmcia/rsrc_mgr.c --- 25/drivers/pcmcia/rsrc_mgr.c~pcmcia-find_io_region-only-for-non-statically-mapped-sockets Fri Dec 17 15:25:07 2004 +++ 25-akpm/drivers/pcmcia/rsrc_mgr.c Fri Dec 17 15:25:07 2004 @@ -504,13 +504,6 @@ static void pcmcia_nonstatic_validate_me } } -void pcmcia_validate_mem(struct pcmcia_socket *s) -{ - if (s->resource_ops->validate_mem) - s->resource_ops->validate_mem(s); -} -EXPORT_SYMBOL(pcmcia_validate_mem); - struct pcmcia_align_data { unsigned long mask; unsigned long offset; @@ -599,14 +592,6 @@ static int nonstatic_adjust_io_region(st return ret; } -int adjust_io_region(struct resource *res, unsigned long r_start, - unsigned long r_end, struct pcmcia_socket *s) -{ - if (s->resource_ops->adjust_io_region) - return s->resource_ops->adjust_io_region(res, r_start, r_end, s); - return -ENOMEM; -} - /*====================================================================== These find ranges of I/O ports or memory addresses that are not @@ -620,7 +605,7 @@ int adjust_io_region(struct resource *re ======================================================================*/ -struct resource *find_io_region(unsigned long base, int num, +struct resource *nonstatic_find_io_region(unsigned long base, int num, unsigned long align, struct pcmcia_socket *s) { struct resource *res = make_resource(0, num, IORESOURCE_IO, s->dev.class_id); @@ -997,12 +982,38 @@ void release_resource_db(struct pcmcia_s } +void pcmcia_validate_mem(struct pcmcia_socket *s) +{ + if (s->resource_ops->validate_mem) + s->resource_ops->validate_mem(s); +} +EXPORT_SYMBOL(pcmcia_validate_mem); + +int adjust_io_region(struct resource *res, unsigned long r_start, + unsigned long r_end, struct pcmcia_socket *s) +{ + if (s->resource_ops->adjust_io_region) + return s->resource_ops->adjust_io_region(res, r_start, r_end, s); + return -ENOMEM; +} + +struct resource *find_io_region(unsigned long base, int num, + unsigned long align, struct pcmcia_socket *s) +{ + if (s->resource_ops->find_io) + return s->resource_ops->find_io(base, num, align, s); + return NULL; +} + + struct pccard_resource_ops pccard_static_ops = { .validate_mem = NULL, .adjust_io_region = NULL, + .find_io = NULL, }; struct pccard_resource_ops pccard_nonstatic_ops = { .validate_mem = pcmcia_nonstatic_validate_mem, .adjust_io_region = nonstatic_adjust_io_region, + .find_io = nonstatic_find_io_region, }; diff -puN include/pcmcia/ss.h~pcmcia-find_io_region-only-for-non-statically-mapped-sockets include/pcmcia/ss.h --- 25/include/pcmcia/ss.h~pcmcia-find_io_region-only-for-non-statically-mapped-sockets Fri Dec 17 15:25:07 2004 +++ 25-akpm/include/pcmcia/ss.h Fri Dec 17 15:25:07 2004 @@ -121,6 +121,9 @@ struct pccard_resource_ops { unsigned long r_start, unsigned long r_end, struct pcmcia_socket *s); + struct resource* (*find_io) (unsigned long base, int num, + unsigned long align, + struct pcmcia_socket *s); }; /* _