X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fpcmcia%2Fcistpl.c;h=d975ad35aa522bcb1de21ae2a5ccb0ef216623d9;hb=1be35e94e1da3669db492995cd2c8b1a37016b11;hp=b78d41a3c8406e2ac6fed71e9f42a6e0077869e0;hpb=a91482bdcc2e0f6035702e46f1b99043a0893346;p=linux-2.6.git diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index b78d41a3c..d975ad35a 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c @@ -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;