Lines Matching refs:s

62 void release_cis_mem(struct pcmcia_socket *s)  in release_cis_mem()  argument
64 mutex_lock(&s->ops_mutex); in release_cis_mem()
65 if (s->cis_mem.flags & MAP_ACTIVE) { in release_cis_mem()
66 s->cis_mem.flags &= ~MAP_ACTIVE; in release_cis_mem()
67 s->ops->set_mem_map(s, &s->cis_mem); in release_cis_mem()
68 if (s->cis_mem.res) { in release_cis_mem()
69 release_resource(s->cis_mem.res); in release_cis_mem()
70 kfree(s->cis_mem.res); in release_cis_mem()
71 s->cis_mem.res = NULL; in release_cis_mem()
73 iounmap(s->cis_virt); in release_cis_mem()
74 s->cis_virt = NULL; in release_cis_mem()
76 mutex_unlock(&s->ops_mutex); in release_cis_mem()
87 static void __iomem *set_cis_map(struct pcmcia_socket *s, in set_cis_map() argument
90 pccard_mem_map *mem = &s->cis_mem; in set_cis_map()
93 if (!(s->features & SS_CAP_STATIC_MAP) && (mem->res == NULL)) { in set_cis_map()
94 mem->res = pcmcia_find_mem_region(0, s->map_size, in set_cis_map()
95 s->map_size, 0, s); in set_cis_map()
97 dev_notice(&s->dev, "cs: unable to map card memory!\n"); in set_cis_map()
100 s->cis_virt = NULL; in set_cis_map()
103 if (!(s->features & SS_CAP_STATIC_MAP) && (!s->cis_virt)) in set_cis_map()
104 s->cis_virt = ioremap(mem->res->start, s->map_size); in set_cis_map()
109 ret = s->ops->set_mem_map(s, mem); in set_cis_map()
111 iounmap(s->cis_virt); in set_cis_map()
112 s->cis_virt = NULL; in set_cis_map()
116 if (s->features & SS_CAP_STATIC_MAP) { in set_cis_map()
117 if (s->cis_virt) in set_cis_map()
118 iounmap(s->cis_virt); in set_cis_map()
119 s->cis_virt = ioremap(mem->static_start, s->map_size); in set_cis_map()
122 return s->cis_virt; in set_cis_map()
135 int pcmcia_read_cis_mem(struct pcmcia_socket *s, int attr, u_int addr, in pcmcia_read_cis_mem() argument
141 dev_dbg(&s->dev, "pcmcia_read_cis_mem(%d, %#x, %u)\n", attr, addr, len); in pcmcia_read_cis_mem()
152 sys = set_cis_map(s, 0, MAP_ACTIVE | in pcmcia_read_cis_mem()
155 dev_dbg(&s->dev, "could not map memory\n"); in pcmcia_read_cis_mem()
171 dev_dbg(&s->dev, in pcmcia_read_cis_mem()
184 card_offset = addr & ~(s->map_size-1); in pcmcia_read_cis_mem()
186 sys = set_cis_map(s, card_offset, flags); in pcmcia_read_cis_mem()
188 dev_dbg(&s->dev, "could not map memory\n"); in pcmcia_read_cis_mem()
192 end = sys + s->map_size; in pcmcia_read_cis_mem()
193 sys = sys + (addr & (s->map_size-1)); in pcmcia_read_cis_mem()
199 card_offset += s->map_size; in pcmcia_read_cis_mem()
203 dev_dbg(&s->dev, " %#2.2x %#2.2x %#2.2x %#2.2x ...\n", in pcmcia_read_cis_mem()
216 int pcmcia_write_cis_mem(struct pcmcia_socket *s, int attr, u_int addr, in pcmcia_write_cis_mem() argument
222 dev_dbg(&s->dev, in pcmcia_write_cis_mem()
234 sys = set_cis_map(s, 0, MAP_ACTIVE | in pcmcia_write_cis_mem()
237 dev_dbg(&s->dev, "could not map memory\n"); in pcmcia_write_cis_mem()
258 card_offset = addr & ~(s->map_size-1); in pcmcia_write_cis_mem()
260 sys = set_cis_map(s, card_offset, flags); in pcmcia_write_cis_mem()
262 dev_dbg(&s->dev, "could not map memory\n"); in pcmcia_write_cis_mem()
266 end = sys + s->map_size; in pcmcia_write_cis_mem()
267 sys = sys + (addr & (s->map_size-1)); in pcmcia_write_cis_mem()
273 card_offset += s->map_size; in pcmcia_write_cis_mem()
288 static int read_cis_cache(struct pcmcia_socket *s, int attr, u_int addr, in read_cis_cache() argument
294 if (s->state & SOCKET_CARDBUS) in read_cis_cache()
297 mutex_lock(&s->ops_mutex); in read_cis_cache()
298 if (s->fake_cis) { in read_cis_cache()
299 if (s->fake_cis_len >= addr+len) in read_cis_cache()
300 memcpy(ptr, s->fake_cis+addr, len); in read_cis_cache()
305 mutex_unlock(&s->ops_mutex); in read_cis_cache()
309 list_for_each_entry(cis, &s->cis_cache, node) { in read_cis_cache()
312 mutex_unlock(&s->ops_mutex); in read_cis_cache()
317 ret = pcmcia_read_cis_mem(s, attr, addr, len, ptr); in read_cis_cache()
327 list_add(&cis->node, &s->cis_cache); in read_cis_cache()
330 mutex_unlock(&s->ops_mutex); in read_cis_cache()
336 remove_cis_cache(struct pcmcia_socket *s, int attr, u_int addr, u_int len) in remove_cis_cache() argument
340 mutex_lock(&s->ops_mutex); in remove_cis_cache()
341 list_for_each_entry(cis, &s->cis_cache, node) in remove_cis_cache()
347 mutex_unlock(&s->ops_mutex); in remove_cis_cache()
357 void destroy_cis_cache(struct pcmcia_socket *s) in destroy_cis_cache() argument
362 list_for_each_safe(l, n, &s->cis_cache) { in destroy_cis_cache()
372 int verify_cis_cache(struct pcmcia_socket *s) in verify_cis_cache() argument
378 if (s->state & SOCKET_CARDBUS) in verify_cis_cache()
383 dev_warn(&s->dev, "no memory for verifying CIS\n"); in verify_cis_cache()
386 mutex_lock(&s->ops_mutex); in verify_cis_cache()
387 list_for_each_entry(cis, &s->cis_cache, node) { in verify_cis_cache()
393 ret = pcmcia_read_cis_mem(s, cis->attr, cis->addr, len, buf); in verify_cis_cache()
396 mutex_unlock(&s->ops_mutex); in verify_cis_cache()
401 mutex_unlock(&s->ops_mutex); in verify_cis_cache()
411 int pcmcia_replace_cis(struct pcmcia_socket *s, in pcmcia_replace_cis() argument
415 dev_warn(&s->dev, "replacement CIS too big\n"); in pcmcia_replace_cis()
418 mutex_lock(&s->ops_mutex); in pcmcia_replace_cis()
419 kfree(s->fake_cis); in pcmcia_replace_cis()
420 s->fake_cis = kmalloc(len, GFP_KERNEL); in pcmcia_replace_cis()
421 if (s->fake_cis == NULL) { in pcmcia_replace_cis()
422 dev_warn(&s->dev, "no memory to replace CIS\n"); in pcmcia_replace_cis()
423 mutex_unlock(&s->ops_mutex); in pcmcia_replace_cis()
426 s->fake_cis_len = len; in pcmcia_replace_cis()
427 memcpy(s->fake_cis, data, len); in pcmcia_replace_cis()
428 dev_info(&s->dev, "Using replacement CIS\n"); in pcmcia_replace_cis()
429 mutex_unlock(&s->ops_mutex); in pcmcia_replace_cis()
447 int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function, in pccard_get_first_tuple() argument
450 if (!s) in pccard_get_first_tuple()
453 if (!(s->state & SOCKET_PRESENT) || (s->state & SOCKET_CARDBUS)) in pccard_get_first_tuple()
461 if ((s->functions > 1) && !(tuple->Attributes & TUPLE_RETURN_COMMON)) { in pccard_get_first_tuple()
464 if (pccard_get_next_tuple(s, function, tuple) == 0) { in pccard_get_first_tuple()
466 if (pccard_get_next_tuple(s, function, tuple) != 0) in pccard_get_first_tuple()
472 return pccard_get_next_tuple(s, function, tuple); in pccard_get_first_tuple()
475 static int follow_link(struct pcmcia_socket *s, tuple_t *tuple) in follow_link() argument
483 ret = read_cis_cache(s, LINK_SPACE(tuple->Flags), in follow_link()
502 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link); in follow_link()
508 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5); in follow_link()
512 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link); in follow_link()
518 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5); in follow_link()
522 int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function, in pccard_get_next_tuple() argument
529 if (!s) in pccard_get_next_tuple()
531 if (!(s->state & SOCKET_PRESENT) || (s->state & SOCKET_CARDBUS)) in pccard_get_next_tuple()
542 ret = read_cis_cache(s, attr, ofs, 2, link); in pccard_get_next_tuple()
553 ofs = follow_link(s, tuple); in pccard_get_next_tuple()
557 ret = read_cis_cache(s, attr, ofs, 2, link); in pccard_get_next_tuple()
573 ret = read_cis_cache(s, attr, ofs+2, 4, in pccard_get_next_tuple()
581 ret = read_cis_cache(s, attr, ofs+2, 4, in pccard_get_next_tuple()
597 ret = read_cis_cache(s, attr, ofs+2, in pccard_get_next_tuple()
624 dev_dbg(&s->dev, "cs: overrun in pcmcia_get_next_tuple\n"); in pccard_get_next_tuple()
634 int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple) in pccard_get_tuple_data() argument
639 if (!s) in pccard_get_tuple_data()
648 ret = read_cis_cache(s, SPACE(tuple->Flags), in pccard_get_tuple_data()
763 char *s, u_char *ofs, u_char *found) in parse_strings() argument
776 s[j++] = (*p == 0xff) ? '\0' : *p; in parse_strings()
1377 int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info) in pccard_validate_cis() argument
1384 if (!s) in pccard_validate_cis()
1387 if (s->functions || !(s->state & SOCKET_PRESENT)) { in pccard_validate_cis()
1393 mutex_lock(&s->ops_mutex); in pccard_validate_cis()
1394 destroy_cis_cache(s); in pccard_validate_cis()
1395 mutex_unlock(&s->ops_mutex); in pccard_validate_cis()
1399 dev_warn(&s->dev, "no memory to validate CIS\n"); in pccard_validate_cis()
1405 dev_warn(&s->dev, "no memory to validate CIS\n"); in pccard_validate_cis()
1412 ret = pccard_get_first_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1419 (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY, p)) || in pccard_validate_cis()
1420 (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY_CB, p))) in pccard_validate_cis()
1426 if ((pccard_read_tuple(s, BIND_FN_ALL, CISTPL_MANFID, p) == 0) || in pccard_validate_cis()
1427 (pccard_read_tuple(s, BIND_FN_ALL, CISTPL_VERS_1, p) == 0) || in pccard_validate_cis()
1428 (pccard_read_tuple(s, BIND_FN_ALL, CISTPL_VERS_2, p) != -ENOSPC)) in pccard_validate_cis()
1435 ret = pccard_get_next_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1452 mutex_lock(&s->ops_mutex); in pccard_validate_cis()
1453 destroy_cis_cache(s); in pccard_validate_cis()
1454 mutex_unlock(&s->ops_mutex); in pccard_validate_cis()
1474 static ssize_t pccard_extract_cis(struct pcmcia_socket *s, char *buf, in pccard_extract_cis() argument
1500 status = pccard_get_first_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()
1506 status = pccard_get_tuple_data(s, &tuple); in pccard_extract_cis()
1532 status = pccard_get_next_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()
1552 struct pcmcia_socket *s; in pccard_show_cis() local
1558 s = to_socket(container_of(kobj, struct device, kobj)); in pccard_show_cis()
1560 if (!(s->state & SOCKET_PRESENT)) in pccard_show_cis()
1562 if (!s->functions && pccard_validate_cis(s, &chains)) in pccard_show_cis()
1567 count = pccard_extract_cis(s, buf, off, count); in pccard_show_cis()
1578 struct pcmcia_socket *s; in pccard_store_cis() local
1581 s = to_socket(container_of(kobj, struct device, kobj)); in pccard_store_cis()
1589 if (!(s->state & SOCKET_PRESENT)) in pccard_store_cis()
1592 error = pcmcia_replace_cis(s, buf, count); in pccard_store_cis()
1596 pcmcia_parse_uevents(s, PCMCIA_UEVENT_REQUERY); in pccard_store_cis()