diff options
Diffstat (limited to 'drivers/pcmcia/rsrc_nonstatic.c')
-rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 25 |
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 | ||
599 | static void | 599 | static resource_size_t |
600 | pcmcia_common_align(void *align_data, struct resource *res, | 600 | pcmcia_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 | ||
614 | static void | 614 | static resource_size_t |
615 | pcmcia_align(void *align_data, struct resource *res, resource_size_t size, | 615 | pcmcia_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 | ||