aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/cistpl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia/cistpl.c')
-rw-r--r--drivers/pcmcia/cistpl.c73
1 files changed, 38 insertions, 35 deletions
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c
index fe789e0e7ada..1a513d9a8612 100644
--- a/drivers/pcmcia/cistpl.c
+++ b/drivers/pcmcia/cistpl.c
@@ -392,7 +392,7 @@ int pcmcia_replace_cis(struct pcmcia_socket *s,
392 return CS_OUT_OF_RESOURCE; 392 return CS_OUT_OF_RESOURCE;
393 s->fake_cis_len = len; 393 s->fake_cis_len = len;
394 memcpy(s->fake_cis, data, len); 394 memcpy(s->fake_cis, data, len);
395 return CS_SUCCESS; 395 return 0;
396} 396}
397EXPORT_SYMBOL(pcmcia_replace_cis); 397EXPORT_SYMBOL(pcmcia_replace_cis);
398 398
@@ -441,9 +441,9 @@ int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function, tuple
441 !(tuple->Attributes & TUPLE_RETURN_COMMON)) { 441 !(tuple->Attributes & TUPLE_RETURN_COMMON)) {
442 cisdata_t req = tuple->DesiredTuple; 442 cisdata_t req = tuple->DesiredTuple;
443 tuple->DesiredTuple = CISTPL_LONGLINK_MFC; 443 tuple->DesiredTuple = CISTPL_LONGLINK_MFC;
444 if (pccard_get_next_tuple(s, function, tuple) == CS_SUCCESS) { 444 if (pccard_get_next_tuple(s, function, tuple) == 0) {
445 tuple->DesiredTuple = CISTPL_LINKTARGET; 445 tuple->DesiredTuple = CISTPL_LINKTARGET;
446 if (pccard_get_next_tuple(s, function, tuple) != CS_SUCCESS) 446 if (pccard_get_next_tuple(s, function, tuple) != 0)
447 return CS_NO_MORE_ITEMS; 447 return CS_NO_MORE_ITEMS;
448 } else 448 } else
449 tuple->CISOffset = tuple->TupleLink = 0; 449 tuple->CISOffset = tuple->TupleLink = 0;
@@ -584,7 +584,7 @@ int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function, tuple_
584 tuple->TupleCode = link[0]; 584 tuple->TupleCode = link[0];
585 tuple->TupleLink = link[1]; 585 tuple->TupleLink = link[1];
586 tuple->CISOffset = ofs + 2; 586 tuple->CISOffset = ofs + 2;
587 return CS_SUCCESS; 587 return 0;
588} 588}
589EXPORT_SYMBOL(pccard_get_next_tuple); 589EXPORT_SYMBOL(pccard_get_next_tuple);
590 590
@@ -604,11 +604,11 @@ int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple)
604 len = tuple->TupleLink - tuple->TupleOffset; 604 len = tuple->TupleLink - tuple->TupleOffset;
605 tuple->TupleDataLen = tuple->TupleLink; 605 tuple->TupleDataLen = tuple->TupleLink;
606 if (len == 0) 606 if (len == 0)
607 return CS_SUCCESS; 607 return 0;
608 read_cis_cache(s, SPACE(tuple->Flags), 608 read_cis_cache(s, SPACE(tuple->Flags),
609 tuple->CISOffset + tuple->TupleOffset, 609 tuple->CISOffset + tuple->TupleOffset,
610 _MIN(len, tuple->TupleDataMax), tuple->TupleData); 610 _MIN(len, tuple->TupleDataMax), tuple->TupleData);
611 return CS_SUCCESS; 611 return 0;
612} 612}
613EXPORT_SYMBOL(pccard_get_tuple_data); 613EXPORT_SYMBOL(pccard_get_tuple_data);
614 614
@@ -659,7 +659,7 @@ static int parse_device(tuple_t *tuple, cistpl_device_t *device)
659 if (++p == q) break; 659 if (++p == q) break;
660 } 660 }
661 661
662 return CS_SUCCESS; 662 return 0;
663} 663}
664 664
665/*====================================================================*/ 665/*====================================================================*/
@@ -673,7 +673,7 @@ static int parse_checksum(tuple_t *tuple, cistpl_checksum_t *csum)
673 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2; 673 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2;
674 csum->len = get_unaligned_le16(p + 2); 674 csum->len = get_unaligned_le16(p + 2);
675 csum->sum = *(p + 4); 675 csum->sum = *(p + 4);
676 return CS_SUCCESS; 676 return 0;
677} 677}
678 678
679/*====================================================================*/ 679/*====================================================================*/
@@ -683,7 +683,7 @@ static int parse_longlink(tuple_t *tuple, cistpl_longlink_t *link)
683 if (tuple->TupleDataLen < 4) 683 if (tuple->TupleDataLen < 4)
684 return CS_BAD_TUPLE; 684 return CS_BAD_TUPLE;
685 link->addr = get_unaligned_le32(tuple->TupleData); 685 link->addr = get_unaligned_le32(tuple->TupleData);
686 return CS_SUCCESS; 686 return 0;
687} 687}
688 688
689/*====================================================================*/ 689/*====================================================================*/
@@ -704,7 +704,7 @@ static int parse_longlink_mfc(tuple_t *tuple,
704 link->fn[i].addr = get_unaligned_le32(p); 704 link->fn[i].addr = get_unaligned_le32(p);
705 p += 4; 705 p += 4;
706 } 706 }
707 return CS_SUCCESS; 707 return 0;
708} 708}
709 709
710/*====================================================================*/ 710/*====================================================================*/
@@ -729,9 +729,9 @@ static int parse_strings(u_char *p, u_char *q, int max,
729 } 729 }
730 if (found) { 730 if (found) {
731 *found = ns; 731 *found = ns;
732 return CS_SUCCESS; 732 return 0;
733 } else { 733 } else {
734 return (ns == max) ? CS_SUCCESS : CS_BAD_TUPLE; 734 return (ns == max) ? 0 : CS_BAD_TUPLE;
735 } 735 }
736} 736}
737 737
@@ -782,7 +782,7 @@ static int parse_jedec(tuple_t *tuple, cistpl_jedec_t *jedec)
782 p += 2; 782 p += 2;
783 } 783 }
784 jedec->nid = nid; 784 jedec->nid = nid;
785 return CS_SUCCESS; 785 return 0;
786} 786}
787 787
788/*====================================================================*/ 788/*====================================================================*/
@@ -793,7 +793,7 @@ static int parse_manfid(tuple_t *tuple, cistpl_manfid_t *m)
793 return CS_BAD_TUPLE; 793 return CS_BAD_TUPLE;
794 m->manf = get_unaligned_le16(tuple->TupleData); 794 m->manf = get_unaligned_le16(tuple->TupleData);
795 m->card = get_unaligned_le16(tuple->TupleData + 2); 795 m->card = get_unaligned_le16(tuple->TupleData + 2);
796 return CS_SUCCESS; 796 return 0;
797} 797}
798 798
799/*====================================================================*/ 799/*====================================================================*/
@@ -806,7 +806,7 @@ static int parse_funcid(tuple_t *tuple, cistpl_funcid_t *f)
806 p = (u_char *)tuple->TupleData; 806 p = (u_char *)tuple->TupleData;
807 f->func = p[0]; 807 f->func = p[0];
808 f->sysinit = p[1]; 808 f->sysinit = p[1];
809 return CS_SUCCESS; 809 return 0;
810} 810}
811 811
812/*====================================================================*/ 812/*====================================================================*/
@@ -821,7 +821,7 @@ static int parse_funce(tuple_t *tuple, cistpl_funce_t *f)
821 f->type = p[0]; 821 f->type = p[0];
822 for (i = 1; i < tuple->TupleDataLen; i++) 822 for (i = 1; i < tuple->TupleDataLen; i++)
823 f->data[i-1] = p[i]; 823 f->data[i-1] = p[i];
824 return CS_SUCCESS; 824 return 0;
825} 825}
826 826
827/*====================================================================*/ 827/*====================================================================*/
@@ -847,7 +847,7 @@ static int parse_config(tuple_t *tuple, cistpl_config_t *config)
847 for (i = 0; i <= rmsz; i++) 847 for (i = 0; i <= rmsz; i++)
848 config->rmask[i>>2] += p[i] << (8*(i%4)); 848 config->rmask[i>>2] += p[i] << (8*(i%4));
849 config->subtuples = tuple->TupleDataLen - (rasz+rmsz+4); 849 config->subtuples = tuple->TupleDataLen - (rasz+rmsz+4);
850 return CS_SUCCESS; 850 return 0;
851} 851}
852 852
853/*====================================================================== 853/*======================================================================
@@ -1122,7 +1122,7 @@ static int parse_cftable_entry(tuple_t *tuple,
1122 1122
1123 entry->subtuples = q-p; 1123 entry->subtuples = q-p;
1124 1124
1125 return CS_SUCCESS; 1125 return 0;
1126} 1126}
1127 1127
1128/*====================================================================*/ 1128/*====================================================================*/
@@ -1138,7 +1138,7 @@ static int parse_bar(tuple_t *tuple, cistpl_bar_t *bar)
1138 bar->attr = *p; 1138 bar->attr = *p;
1139 p += 2; 1139 p += 2;
1140 bar->size = get_unaligned_le32(p); 1140 bar->size = get_unaligned_le32(p);
1141 return CS_SUCCESS; 1141 return 0;
1142} 1142}
1143 1143
1144static int parse_config_cb(tuple_t *tuple, cistpl_config_t *config) 1144static int parse_config_cb(tuple_t *tuple, cistpl_config_t *config)
@@ -1152,7 +1152,7 @@ static int parse_config_cb(tuple_t *tuple, cistpl_config_t *config)
1152 p++; 1152 p++;
1153 config->base = get_unaligned_le32(p); 1153 config->base = get_unaligned_le32(p);
1154 config->subtuples = tuple->TupleDataLen - 6; 1154 config->subtuples = tuple->TupleDataLen - 6;
1155 return CS_SUCCESS; 1155 return 0;
1156} 1156}
1157 1157
1158static int parse_cftable_entry_cb(tuple_t *tuple, 1158static int parse_cftable_entry_cb(tuple_t *tuple,
@@ -1223,7 +1223,7 @@ static int parse_cftable_entry_cb(tuple_t *tuple,
1223 1223
1224 entry->subtuples = q-p; 1224 entry->subtuples = q-p;
1225 1225
1226 return CS_SUCCESS; 1226 return 0;
1227} 1227}
1228 1228
1229#endif 1229#endif
@@ -1249,7 +1249,7 @@ static int parse_device_geo(tuple_t *tuple, cistpl_device_geo_t *geo)
1249 p += 6; 1249 p += 6;
1250 } 1250 }
1251 geo->ngeo = n; 1251 geo->ngeo = n;
1252 return CS_SUCCESS; 1252 return 0;
1253} 1253}
1254 1254
1255/*====================================================================*/ 1255/*====================================================================*/
@@ -1291,7 +1291,7 @@ static int parse_org(tuple_t *tuple, cistpl_org_t *org)
1291 if (*p == '\0') break; 1291 if (*p == '\0') break;
1292 if (++p == q) return CS_BAD_TUPLE; 1292 if (++p == q) return CS_BAD_TUPLE;
1293 } 1293 }
1294 return CS_SUCCESS; 1294 return 0;
1295} 1295}
1296 1296
1297/*====================================================================*/ 1297/*====================================================================*/
@@ -1310,14 +1310,14 @@ static int parse_format(tuple_t *tuple, cistpl_format_t *fmt)
1310 fmt->offset = get_unaligned_le32(p + 2); 1310 fmt->offset = get_unaligned_le32(p + 2);
1311 fmt->length = get_unaligned_le32(p + 6); 1311 fmt->length = get_unaligned_le32(p + 6);
1312 1312
1313 return CS_SUCCESS; 1313 return 0;
1314} 1314}
1315 1315
1316/*====================================================================*/ 1316/*====================================================================*/
1317 1317
1318int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse) 1318int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse)
1319{ 1319{
1320 int ret = CS_SUCCESS; 1320 int ret = 0;
1321 1321
1322 if (tuple->TupleDataLen > tuple->TupleDataMax) 1322 if (tuple->TupleDataLen > tuple->TupleDataMax)
1323 return CS_BAD_TUPLE; 1323 return CS_BAD_TUPLE;
@@ -1388,7 +1388,7 @@ int pccard_parse_tuple(tuple_t *tuple, cisparse_t *parse)
1388 break; 1388 break;
1389 case CISTPL_NO_LINK: 1389 case CISTPL_NO_LINK:
1390 case CISTPL_LINKTARGET: 1390 case CISTPL_LINKTARGET:
1391 ret = CS_SUCCESS; 1391 ret = 0;
1392 break; 1392 break;
1393 default: 1393 default:
1394 ret = CS_UNSUPPORTED_FUNCTION; 1394 ret = CS_UNSUPPORTED_FUNCTION;
@@ -1416,12 +1416,14 @@ int pccard_read_tuple(struct pcmcia_socket *s, unsigned int function, cisdata_t
1416 tuple.DesiredTuple = code; 1416 tuple.DesiredTuple = code;
1417 tuple.Attributes = TUPLE_RETURN_COMMON; 1417 tuple.Attributes = TUPLE_RETURN_COMMON;
1418 ret = pccard_get_first_tuple(s, function, &tuple); 1418 ret = pccard_get_first_tuple(s, function, &tuple);
1419 if (ret != CS_SUCCESS) goto done; 1419 if (ret != 0)
1420 goto done;
1420 tuple.TupleData = buf; 1421 tuple.TupleData = buf;
1421 tuple.TupleOffset = 0; 1422 tuple.TupleOffset = 0;
1422 tuple.TupleDataMax = 255; 1423 tuple.TupleDataMax = 255;
1423 ret = pccard_get_tuple_data(s, &tuple); 1424 ret = pccard_get_tuple_data(s, &tuple);
1424 if (ret != CS_SUCCESS) goto done; 1425 if (ret != 0)
1426 goto done;
1425 ret = pccard_parse_tuple(&tuple, parse); 1427 ret = pccard_parse_tuple(&tuple, parse);
1426done: 1428done:
1427 kfree(buf); 1429 kfree(buf);
@@ -1462,21 +1464,21 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned
1462 tuple->DesiredTuple = RETURN_FIRST_TUPLE; 1464 tuple->DesiredTuple = RETURN_FIRST_TUPLE;
1463 tuple->Attributes = TUPLE_RETURN_COMMON; 1465 tuple->Attributes = TUPLE_RETURN_COMMON;
1464 ret = pccard_get_first_tuple(s, function, tuple); 1466 ret = pccard_get_first_tuple(s, function, tuple);
1465 if (ret != CS_SUCCESS) 1467 if (ret != 0)
1466 goto done; 1468 goto done;
1467 1469
1468 /* First tuple should be DEVICE; we should really have either that 1470 /* First tuple should be DEVICE; we should really have either that
1469 or a CFTABLE_ENTRY of some sort */ 1471 or a CFTABLE_ENTRY of some sort */
1470 if ((tuple->TupleCode == CISTPL_DEVICE) || 1472 if ((tuple->TupleCode == CISTPL_DEVICE) ||
1471 (pccard_read_tuple(s, function, CISTPL_CFTABLE_ENTRY, p) == CS_SUCCESS) || 1473 (pccard_read_tuple(s, function, CISTPL_CFTABLE_ENTRY, p) == 0) ||
1472 (pccard_read_tuple(s, function, CISTPL_CFTABLE_ENTRY_CB, p) == CS_SUCCESS)) 1474 (pccard_read_tuple(s, function, CISTPL_CFTABLE_ENTRY_CB, p) == 0))
1473 dev_ok++; 1475 dev_ok++;
1474 1476
1475 /* All cards should have a MANFID tuple, and/or a VERS_1 or VERS_2 1477 /* All cards should have a MANFID tuple, and/or a VERS_1 or VERS_2
1476 tuple, for card identification. Certain old D-Link and Linksys 1478 tuple, for card identification. Certain old D-Link and Linksys
1477 cards have only a broken VERS_2 tuple; hence the bogus test. */ 1479 cards have only a broken VERS_2 tuple; hence the bogus test. */
1478 if ((pccard_read_tuple(s, function, CISTPL_MANFID, p) == CS_SUCCESS) || 1480 if ((pccard_read_tuple(s, function, CISTPL_MANFID, p) == 0) ||
1479 (pccard_read_tuple(s, function, CISTPL_VERS_1, p) == CS_SUCCESS) || 1481 (pccard_read_tuple(s, function, CISTPL_VERS_1, p) == 0) ||
1480 (pccard_read_tuple(s, function, CISTPL_VERS_2, p) != CS_NO_MORE_ITEMS)) 1482 (pccard_read_tuple(s, function, CISTPL_VERS_2, p) != CS_NO_MORE_ITEMS))
1481 ident_ok++; 1483 ident_ok++;
1482 1484
@@ -1485,7 +1487,8 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned
1485 1487
1486 for (count = 1; count < MAX_TUPLES; count++) { 1488 for (count = 1; count < MAX_TUPLES; count++) {
1487 ret = pccard_get_next_tuple(s, function, tuple); 1489 ret = pccard_get_next_tuple(s, function, tuple);
1488 if (ret != CS_SUCCESS) break; 1490 if (ret != 0)
1491 break;
1489 if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || 1492 if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) ||
1490 ((tuple->TupleCode > 0x47) && (tuple->TupleCode < 0x80)) || 1493 ((tuple->TupleCode > 0x47) && (tuple->TupleCode < 0x80)) ||
1491 ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff))) 1494 ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff)))
@@ -1500,6 +1503,6 @@ done:
1500 *info = count; 1503 *info = count;
1501 kfree(tuple); 1504 kfree(tuple);
1502 kfree(p); 1505 kfree(p);
1503 return CS_SUCCESS; 1506 return 0;
1504} 1507}
1505EXPORT_SYMBOL(pccard_validate_cis); 1508EXPORT_SYMBOL(pccard_validate_cis);