This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / pcmcia / cistpl.c
index b78d41a..d975ad3 100644 (file)
@@ -85,15 +85,13 @@ INT_MODULE_PARM(cis_width,  0);             /* 16-bit CIS? */
 
 void release_cis_mem(struct pcmcia_socket *s)
 {
-    if (s->cis_mem.flags & MAP_ACTIVE) {
+    if (s->cis_mem.sys_start != 0) {
        s->cis_mem.flags &= ~MAP_ACTIVE;
        s->ops->set_mem_map(s, &s->cis_mem);
-       if (s->cis_mem.res) {
-           release_resource(s->cis_mem.res);
-           kfree(s->cis_mem.res);
-           s->cis_mem.res = NULL;
-       }
+       if (!(s->features & SS_CAP_STATIC_MAP))
+           release_mem_region(s->cis_mem.sys_start, s->map_size);
        iounmap(s->cis_virt);
+       s->cis_mem.sys_start = 0;
        s->cis_virt = NULL;
     }
 }
@@ -107,16 +105,17 @@ static unsigned char *
 set_cis_map(struct pcmcia_socket *s, unsigned int card_offset, unsigned int flags)
 {
     pccard_mem_map *mem = &s->cis_mem;
-    if (!(s->features & SS_CAP_STATIC_MAP) && mem->res == NULL) {
-       mem->res = find_mem_region(0, s->map_size, s->map_size, 0,
-                                  "card services", s);
-       if (mem->res == NULL) {
+    if (!(s->features & SS_CAP_STATIC_MAP) &&
+       mem->sys_start == 0) {
+       validate_mem(s);
+       mem->sys_start = 0;
+       if (find_mem_region(&mem->sys_start, s->map_size,
+                           s->map_size, 0, "card services", s)) {
            printk(KERN_NOTICE "cs: unable to map card memory!\n");
            return NULL;
        }
-       mem->sys_start = mem->res->start;
-       mem->sys_stop = mem->res->end;
-       s->cis_virt = ioremap(mem->res->start, s->map_size);
+       mem->sys_stop = mem->sys_start+s->map_size-1;
+       s->cis_virt = ioremap(mem->sys_start, s->map_size);
     }
     mem->card_start = card_offset;
     mem->flags = flags;