aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/rsrc_nonstatic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia/rsrc_nonstatic.c')
-rw-r--r--drivers/pcmcia/rsrc_nonstatic.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c
index a69eed6c5b92..4663b3fa9f96 100644
--- a/drivers/pcmcia/rsrc_nonstatic.c
+++ b/drivers/pcmcia/rsrc_nonstatic.c
@@ -596,8 +596,8 @@ struct pcmcia_align_data {
596 struct resource_map *map; 596 struct resource_map *map;
597}; 597};
598 598
599static void 599static resource_size_t
600pcmcia_common_align(void *align_data, struct resource *res, 600pcmcia_common_align(void *align_data, const struct resource *res,
601 resource_size_t size, resource_size_t align) 601 resource_size_t size, resource_size_t align)
602{ 602{
603 struct pcmcia_align_data *data = align_data; 603 struct pcmcia_align_data *data = align_data;
@@ -608,17 +608,18 @@ pcmcia_common_align(void *align_data, struct resource *res,
608 start = (res->start & ~data->mask) + data->offset; 608 start = (res->start & ~data->mask) + data->offset;
609 if (start < res->start) 609 if (start < res->start)
610 start += data->mask + 1; 610 start += data->mask + 1;
611 res->start = start; 611 return start;
612} 612}
613 613
614static void 614static resource_size_t
615pcmcia_align(void *align_data, struct resource *res, resource_size_t size, 615pcmcia_align(void *align_data, const struct resource *res,
616 resource_size_t align) 616 resource_size_t size, resource_size_t align)
617{ 617{
618 struct pcmcia_align_data *data = align_data; 618 struct pcmcia_align_data *data = align_data;
619 struct resource_map *m; 619 struct resource_map *m;
620 resource_size_t start;
620 621
621 pcmcia_common_align(data, res, size, align); 622 start = pcmcia_common_align(data, res, size, align);
622 623
623 for (m = data->map->next; m != data->map; m = m->next) { 624 for (m = data->map->next; m != data->map; m = m->next) {
624 unsigned long start = m->base; 625 unsigned long start = m->base;
@@ -630,8 +631,7 @@ pcmcia_align(void *align_data, struct resource *res, resource_size_t size,
630 * fit here. 631 * fit here.
631 */ 632 */
632 if (res->start < start) { 633 if (res->start < start) {
633 res->start = start; 634 start = pcmcia_common_align(data, res, size, align);
634 pcmcia_common_align(data, res, size, align);
635 } 635 }
636 636
637 /* 637 /*
@@ -649,7 +649,9 @@ pcmcia_align(void *align_data, struct resource *res, resource_size_t size,
649 * If we failed to find something suitable, ensure we fail. 649 * If we failed to find something suitable, ensure we fail.
650 */ 650 */
651 if (m == data->map) 651 if (m == data->map)
652 res->start = res->end; 652 start = res->end;
653
654 return start;
653} 655}
654 656
655/* 657/*
@@ -857,8 +859,7 @@ static int nonstatic_autoadd_resources(struct pcmcia_socket *s)
857 return -EINVAL; 859 return -EINVAL;
858#endif 860#endif
859 861
860 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 862 pci_bus_for_each_resource(s->cb_dev->bus, res, i) {
861 res = s->cb_dev->bus->resource[i];
862 if (!res) 863 if (!res)
863 continue; 864 continue;
864 865