diff options
-rw-r--r-- | drivers/mtd/maps/pcmciamtd.c | 5 | ||||
-rw-r--r-- | drivers/pcmcia/cistpl.c | 15 | ||||
-rw-r--r-- | drivers/pcmcia/ds.c | 7 | ||||
-rw-r--r-- | drivers/pcmcia/pcmcia_ioctl.c | 2 | ||||
-rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 11 | ||||
-rw-r--r-- | drivers/pcmcia/socket_sysfs.c | 6 | ||||
-rw-r--r-- | include/pcmcia/cistpl.h | 2 |
7 files changed, 24 insertions, 24 deletions
diff --git a/drivers/mtd/maps/pcmciamtd.c b/drivers/mtd/maps/pcmciamtd.c index 1912d968718b..00530f9bf4a7 100644 --- a/drivers/mtd/maps/pcmciamtd.c +++ b/drivers/mtd/maps/pcmciamtd.c | |||
@@ -498,17 +498,14 @@ static int pcmciamtd_config(struct pcmcia_device *link) | |||
498 | int i; | 498 | int i; |
499 | config_info_t t; | 499 | config_info_t t; |
500 | static char *probes[] = { "jedec_probe", "cfi_probe" }; | 500 | static char *probes[] = { "jedec_probe", "cfi_probe" }; |
501 | cisinfo_t cisinfo; | ||
502 | int new_name = 0; | 501 | int new_name = 0; |
503 | 502 | ||
504 | DEBUG(3, "link=0x%p", link); | 503 | DEBUG(3, "link=0x%p", link); |
505 | 504 | ||
506 | DEBUG(2, "Validating CIS"); | 505 | DEBUG(2, "Validating CIS"); |
507 | ret = pcmcia_validate_cis(link, &cisinfo); | 506 | ret = pcmcia_validate_cis(link, NULL); |
508 | if(ret != CS_SUCCESS) { | 507 | if(ret != CS_SUCCESS) { |
509 | cs_error(link, GetTupleData, ret); | 508 | cs_error(link, GetTupleData, ret); |
510 | } else { | ||
511 | DEBUG(2, "ValidateCIS found %d chains", cisinfo.Chains); | ||
512 | } | 509 | } |
513 | 510 | ||
514 | card_settings(dev, link, &new_name); | 511 | card_settings(dev, link, &new_name); |
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index 36379535f9da..0996ca253f28 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c | |||
@@ -1439,10 +1439,11 @@ EXPORT_SYMBOL(pccard_read_tuple); | |||
1439 | 1439 | ||
1440 | ======================================================================*/ | 1440 | ======================================================================*/ |
1441 | 1441 | ||
1442 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_t *info) | 1442 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned int *info) |
1443 | { | 1443 | { |
1444 | tuple_t *tuple; | 1444 | tuple_t *tuple; |
1445 | cisparse_t *p; | 1445 | cisparse_t *p; |
1446 | unsigned int count = 0; | ||
1446 | int ret, reserved, dev_ok = 0, ident_ok = 0; | 1447 | int ret, reserved, dev_ok = 0, ident_ok = 0; |
1447 | 1448 | ||
1448 | if (!s) | 1449 | if (!s) |
@@ -1457,7 +1458,7 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_ | |||
1457 | return CS_OUT_OF_RESOURCE; | 1458 | return CS_OUT_OF_RESOURCE; |
1458 | } | 1459 | } |
1459 | 1460 | ||
1460 | info->Chains = reserved = 0; | 1461 | count = reserved = 0; |
1461 | tuple->DesiredTuple = RETURN_FIRST_TUPLE; | 1462 | tuple->DesiredTuple = RETURN_FIRST_TUPLE; |
1462 | tuple->Attributes = TUPLE_RETURN_COMMON; | 1463 | tuple->Attributes = TUPLE_RETURN_COMMON; |
1463 | ret = pccard_get_first_tuple(s, function, tuple); | 1464 | ret = pccard_get_first_tuple(s, function, tuple); |
@@ -1482,7 +1483,7 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_ | |||
1482 | if (!dev_ok && !ident_ok) | 1483 | if (!dev_ok && !ident_ok) |
1483 | goto done; | 1484 | goto done; |
1484 | 1485 | ||
1485 | for (info->Chains = 1; info->Chains < MAX_TUPLES; info->Chains++) { | 1486 | for (count = 1; count < MAX_TUPLES; count++) { |
1486 | ret = pccard_get_next_tuple(s, function, tuple); | 1487 | ret = pccard_get_next_tuple(s, function, tuple); |
1487 | if (ret != CS_SUCCESS) break; | 1488 | if (ret != CS_SUCCESS) break; |
1488 | if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || | 1489 | if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || |
@@ -1490,11 +1491,13 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_ | |||
1490 | ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff))) | 1491 | ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff))) |
1491 | reserved++; | 1492 | reserved++; |
1492 | } | 1493 | } |
1493 | if ((info->Chains == MAX_TUPLES) || (reserved > 5) || | 1494 | if ((count) || (reserved > 5) || |
1494 | ((!dev_ok || !ident_ok) && (info->Chains > 10))) | 1495 | ((!dev_ok || !ident_ok) && (count > 10))) |
1495 | info->Chains = 0; | 1496 | count = 0; |
1496 | 1497 | ||
1497 | done: | 1498 | done: |
1499 | if (info) | ||
1500 | *info = count; | ||
1498 | kfree(tuple); | 1501 | kfree(tuple); |
1499 | kfree(p); | 1502 | kfree(p); |
1500 | return CS_SUCCESS; | 1503 | return CS_SUCCESS; |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index e40775443d04..0f56cb5a30be 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
@@ -741,9 +741,8 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f | |||
741 | 741 | ||
742 | static int pcmcia_card_add(struct pcmcia_socket *s) | 742 | static int pcmcia_card_add(struct pcmcia_socket *s) |
743 | { | 743 | { |
744 | cisinfo_t cisinfo; | ||
745 | cistpl_longlink_mfc_t mfc; | 744 | cistpl_longlink_mfc_t mfc; |
746 | unsigned int no_funcs, i; | 745 | unsigned int no_funcs, i, no_chains; |
747 | int ret = 0; | 746 | int ret = 0; |
748 | 747 | ||
749 | if (!(s->resource_setup_done)) { | 748 | if (!(s->resource_setup_done)) { |
@@ -757,8 +756,8 @@ static int pcmcia_card_add(struct pcmcia_socket *s) | |||
757 | return -EAGAIN; /* try again, but later... */ | 756 | return -EAGAIN; /* try again, but later... */ |
758 | } | 757 | } |
759 | 758 | ||
760 | ret = pccard_validate_cis(s, BIND_FN_ALL, &cisinfo); | 759 | ret = pccard_validate_cis(s, BIND_FN_ALL, &no_chains); |
761 | if (ret || !cisinfo.Chains) { | 760 | if (ret || !no_chains) { |
762 | ds_dbg(0, "invalid CIS or invalid resources\n"); | 761 | ds_dbg(0, "invalid CIS or invalid resources\n"); |
763 | return -ENODEV; | 762 | return -ENODEV; |
764 | } | 763 | } |
diff --git a/drivers/pcmcia/pcmcia_ioctl.c b/drivers/pcmcia/pcmcia_ioctl.c index 758ece8dc362..1efc74fef148 100644 --- a/drivers/pcmcia/pcmcia_ioctl.c +++ b/drivers/pcmcia/pcmcia_ioctl.c | |||
@@ -735,7 +735,7 @@ static int ds_ioctl(struct inode * inode, struct file * file, | |||
735 | mutex_lock(&s->skt_mutex); | 735 | mutex_lock(&s->skt_mutex); |
736 | pcmcia_validate_mem(s); | 736 | pcmcia_validate_mem(s); |
737 | mutex_unlock(&s->skt_mutex); | 737 | mutex_unlock(&s->skt_mutex); |
738 | ret = pccard_validate_cis(s, BIND_FN_ALL, &buf->cisinfo); | 738 | ret = pccard_validate_cis(s, BIND_FN_ALL, &buf->cisinfo.Chains); |
739 | break; | 739 | break; |
740 | case DS_SUSPEND_CARD: | 740 | case DS_SUSPEND_CARD: |
741 | ret = pcmcia_suspend_card(s); | 741 | ret = pcmcia_suspend_card(s); |
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 162693480ed0..70d2e010e654 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
@@ -261,21 +261,22 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base, | |||
261 | ======================================================================*/ | 261 | ======================================================================*/ |
262 | 262 | ||
263 | /* Validation function for cards with a valid CIS */ | 263 | /* Validation function for cards with a valid CIS */ |
264 | static int readable(struct pcmcia_socket *s, struct resource *res, cisinfo_t *info) | 264 | static int readable(struct pcmcia_socket *s, struct resource *res, |
265 | unsigned int *count) | ||
265 | { | 266 | { |
266 | int ret = -1; | 267 | int ret = -1; |
267 | 268 | ||
268 | s->cis_mem.res = res; | 269 | s->cis_mem.res = res; |
269 | s->cis_virt = ioremap(res->start, s->map_size); | 270 | s->cis_virt = ioremap(res->start, s->map_size); |
270 | if (s->cis_virt) { | 271 | if (s->cis_virt) { |
271 | ret = pccard_validate_cis(s, BIND_FN_ALL, info); | 272 | ret = pccard_validate_cis(s, BIND_FN_ALL, count); |
272 | /* invalidate mapping and CIS cache */ | 273 | /* invalidate mapping and CIS cache */ |
273 | iounmap(s->cis_virt); | 274 | iounmap(s->cis_virt); |
274 | s->cis_virt = NULL; | 275 | s->cis_virt = NULL; |
275 | destroy_cis_cache(s); | 276 | destroy_cis_cache(s); |
276 | } | 277 | } |
277 | s->cis_mem.res = NULL; | 278 | s->cis_mem.res = NULL; |
278 | if ((ret != 0) || (info->Chains == 0)) | 279 | if ((ret != 0) || (count == 0)) |
279 | return 0; | 280 | return 0; |
280 | return 1; | 281 | return 1; |
281 | } | 282 | } |
@@ -316,7 +317,7 @@ static int | |||
316 | cis_readable(struct pcmcia_socket *s, unsigned long base, unsigned long size) | 317 | cis_readable(struct pcmcia_socket *s, unsigned long base, unsigned long size) |
317 | { | 318 | { |
318 | struct resource *res1, *res2; | 319 | struct resource *res1, *res2; |
319 | cisinfo_t info1, info2; | 320 | unsigned int info1, info2; |
320 | int ret = 0; | 321 | int ret = 0; |
321 | 322 | ||
322 | res1 = claim_region(s, base, size/2, IORESOURCE_MEM, "cs memory probe"); | 323 | res1 = claim_region(s, base, size/2, IORESOURCE_MEM, "cs memory probe"); |
@@ -330,7 +331,7 @@ cis_readable(struct pcmcia_socket *s, unsigned long base, unsigned long size) | |||
330 | free_region(res2); | 331 | free_region(res2); |
331 | free_region(res1); | 332 | free_region(res1); |
332 | 333 | ||
333 | return (ret == 2) && (info1.Chains == info2.Chains); | 334 | return (ret == 2) && (info1 == info2); |
334 | } | 335 | } |
335 | 336 | ||
336 | static int | 337 | static int |
diff --git a/drivers/pcmcia/socket_sysfs.c b/drivers/pcmcia/socket_sysfs.c index 562384d6f321..ff079987db1d 100644 --- a/drivers/pcmcia/socket_sysfs.c +++ b/drivers/pcmcia/socket_sysfs.c | |||
@@ -293,7 +293,7 @@ static ssize_t pccard_show_cis(struct kobject *kobj, | |||
293 | count = 0; | 293 | count = 0; |
294 | else { | 294 | else { |
295 | struct pcmcia_socket *s; | 295 | struct pcmcia_socket *s; |
296 | cisinfo_t cisinfo; | 296 | unsigned int chains; |
297 | 297 | ||
298 | if (off + count > size) | 298 | if (off + count > size) |
299 | count = size - off; | 299 | count = size - off; |
@@ -302,9 +302,9 @@ static ssize_t pccard_show_cis(struct kobject *kobj, | |||
302 | 302 | ||
303 | if (!(s->state & SOCKET_PRESENT)) | 303 | if (!(s->state & SOCKET_PRESENT)) |
304 | return -ENODEV; | 304 | return -ENODEV; |
305 | if (pccard_validate_cis(s, BIND_FN_ALL, &cisinfo)) | 305 | if (pccard_validate_cis(s, BIND_FN_ALL, &chains)) |
306 | return -EIO; | 306 | return -EIO; |
307 | if (!cisinfo.Chains) | 307 | if (!chains) |
308 | return -ENODATA; | 308 | return -ENODATA; |
309 | 309 | ||
310 | count = pccard_extract_cis(s, buf, off, count); | 310 | count = pccard_extract_cis(s, buf, off, count); |
diff --git a/include/pcmcia/cistpl.h b/include/pcmcia/cistpl.h index d3bbb19caf81..e2e10c1e9a06 100644 --- a/include/pcmcia/cistpl.h +++ b/include/pcmcia/cistpl.h | |||
@@ -595,7 +595,7 @@ int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function, tuple | |||
595 | int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple); | 595 | int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple); |
596 | int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse); | 596 | int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse); |
597 | 597 | ||
598 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_t *info); | 598 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned int *count); |
599 | 599 | ||
600 | /* ... but use these wrappers instead */ | 600 | /* ... but use these wrappers instead */ |
601 | #define pcmcia_get_first_tuple(p_dev, tuple) \ | 601 | #define pcmcia_get_first_tuple(p_dev, tuple) \ |