aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia')
-rw-r--r--drivers/pcmcia/rsrc_mgr.c13
-rw-r--r--drivers/pcmcia/rsrc_nonstatic.c25
-rw-r--r--drivers/pcmcia/yenta_socket.c5
3 files changed, 23 insertions, 20 deletions
diff --git a/drivers/pcmcia/rsrc_mgr.c b/drivers/pcmcia/rsrc_mgr.c
index 52db17263d8b..f8401a0ef89b 100644
--- a/drivers/pcmcia/rsrc_mgr.c
+++ b/drivers/pcmcia/rsrc_mgr.c
@@ -114,22 +114,21 @@ struct pcmcia_align_data {
114 unsigned long offset; 114 unsigned long offset;
115}; 115};
116 116
117static void pcmcia_align(void *align_data, struct resource *res, 117static resource_size_t pcmcia_align(void *align_data,
118 unsigned long size, unsigned long align) 118 const struct resource *res,
119 resource_size_t size, resource_size_t align)
119{ 120{
120 struct pcmcia_align_data *data = align_data; 121 struct pcmcia_align_data *data = align_data;
121 unsigned long start; 122 resource_size_t start;
122 123
123 start = (res->start & ~data->mask) + data->offset; 124 start = (res->start & ~data->mask) + data->offset;
124 if (start < res->start) 125 if (start < res->start)
125 start += data->mask + 1; 126 start += data->mask + 1;
126 res->start = start;
127 127
128#ifdef CONFIG_X86 128#ifdef CONFIG_X86
129 if (res->flags & IORESOURCE_IO) { 129 if (res->flags & IORESOURCE_IO) {
130 if (start & 0x300) { 130 if (start & 0x300) {
131 start = (start + 0x3ff) & ~0x3ff; 131 start = (start + 0x3ff) & ~0x3ff;
132 res->start = start;
133 } 132 }
134 } 133 }
135#endif 134#endif
@@ -137,9 +136,11 @@ static void pcmcia_align(void *align_data, struct resource *res,
137#ifdef CONFIG_M68K 136#ifdef CONFIG_M68K
138 if (res->flags & IORESOURCE_IO) { 137 if (res->flags & IORESOURCE_IO) {
139 if ((res->start + size - 1) >= 1024) 138 if ((res->start + size - 1) >= 1024)
140 res->start = res->end; 139 start = res->end;
141 } 140 }
142#endif 141#endif
142
143 return start;
143} 144}
144 145
145 146
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c
index 9b0dc433a8c3..c67638fe6914 100644
--- a/drivers/pcmcia/rsrc_nonstatic.c
+++ b/drivers/pcmcia/rsrc_nonstatic.c
@@ -533,8 +533,8 @@ struct pcmcia_align_data {
533 struct resource_map *map; 533 struct resource_map *map;
534}; 534};
535 535
536static void 536static resource_size_t
537pcmcia_common_align(void *align_data, struct resource *res, 537pcmcia_common_align(void *align_data, const struct resource *res,
538 resource_size_t size, resource_size_t align) 538 resource_size_t size, resource_size_t align)
539{ 539{
540 struct pcmcia_align_data *data = align_data; 540 struct pcmcia_align_data *data = align_data;
@@ -545,17 +545,18 @@ pcmcia_common_align(void *align_data, struct resource *res,
545 start = (res->start & ~data->mask) + data->offset; 545 start = (res->start & ~data->mask) + data->offset;
546 if (start < res->start) 546 if (start < res->start)
547 start += data->mask + 1; 547 start += data->mask + 1;
548 res->start = start; 548 return start;
549} 549}
550 550
551static void 551static resource_size_t
552pcmcia_align(void *align_data, struct resource *res, resource_size_t size, 552pcmcia_align(void *align_data, const struct resource *res,
553 resource_size_t align) 553 resource_size_t size, resource_size_t align)
554{ 554{
555 struct pcmcia_align_data *data = align_data; 555 struct pcmcia_align_data *data = align_data;
556 struct resource_map *m; 556 struct resource_map *m;
557 resource_size_t start;
557 558
558 pcmcia_common_align(data, res, size, align); 559 start = pcmcia_common_align(data, res, size, align);
559 560
560 for (m = data->map->next; m != data->map; m = m->next) { 561 for (m = data->map->next; m != data->map; m = m->next) {
561 unsigned long start = m->base; 562 unsigned long start = m->base;
@@ -567,8 +568,7 @@ pcmcia_align(void *align_data, struct resource *res, resource_size_t size,
567 * fit here. 568 * fit here.
568 */ 569 */
569 if (res->start < start) { 570 if (res->start < start) {
570 res->start = start; 571 start = pcmcia_common_align(data, res, size, align);
571 pcmcia_common_align(data, res, size, align);
572 } 572 }
573 573
574 /* 574 /*
@@ -586,7 +586,9 @@ pcmcia_align(void *align_data, struct resource *res, resource_size_t size,
586 * If we failed to find something suitable, ensure we fail. 586 * If we failed to find something suitable, ensure we fail.
587 */ 587 */
588 if (m == data->map) 588 if (m == data->map)
589 res->start = res->end; 589 start = res->end;
590
591 return start;
590} 592}
591 593
592/* 594/*
@@ -801,8 +803,7 @@ static int nonstatic_autoadd_resources(struct pcmcia_socket *s)
801 return -EINVAL; 803 return -EINVAL;
802#endif 804#endif
803 805
804 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 806 pci_bus_for_each_resource(s->cb_dev->bus, res, i) {
805 res = s->cb_dev->bus->resource[i];
806 if (!res) 807 if (!res)
807 continue; 808 continue;
808 809
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
index e4d12acdd525..1f2039d5e966 100644
--- a/drivers/pcmcia/yenta_socket.c
+++ b/drivers/pcmcia/yenta_socket.c
@@ -649,9 +649,10 @@ static int yenta_search_one_res(struct resource *root, struct resource *res,
649static int yenta_search_res(struct yenta_socket *socket, struct resource *res, 649static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
650 u32 min) 650 u32 min)
651{ 651{
652 struct resource *root;
652 int i; 653 int i;
653 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 654
654 struct resource *root = socket->dev->bus->resource[i]; 655 pci_bus_for_each_resource(socket->dev->bus, root, i) {
655 if (!root) 656 if (!root)
656 continue; 657 continue;
657 658