Lines Matching refs:tuple
446 tuple_t *tuple) in pccard_get_first_tuple() argument
453 tuple->TupleLink = tuple->Flags = 0; in pccard_get_first_tuple()
456 tuple->CISOffset = tuple->LinkOffset = 0; in pccard_get_first_tuple()
457 SPACE(tuple->Flags) = HAS_LINK(tuple->Flags) = 1; in pccard_get_first_tuple()
459 if ((s->functions > 1) && !(tuple->Attributes & TUPLE_RETURN_COMMON)) { in pccard_get_first_tuple()
460 cisdata_t req = tuple->DesiredTuple; in pccard_get_first_tuple()
461 tuple->DesiredTuple = CISTPL_LONGLINK_MFC; in pccard_get_first_tuple()
462 if (pccard_get_next_tuple(s, function, tuple) == 0) { in pccard_get_first_tuple()
463 tuple->DesiredTuple = CISTPL_LINKTARGET; in pccard_get_first_tuple()
464 if (pccard_get_next_tuple(s, function, tuple) != 0) in pccard_get_first_tuple()
467 tuple->CISOffset = tuple->TupleLink = 0; in pccard_get_first_tuple()
468 tuple->DesiredTuple = req; in pccard_get_first_tuple()
470 return pccard_get_next_tuple(s, function, tuple); in pccard_get_first_tuple()
473 static int follow_link(struct pcmcia_socket *s, tuple_t *tuple) in follow_link() argument
479 if (MFC_FN(tuple->Flags)) { in follow_link()
481 ret = read_cis_cache(s, LINK_SPACE(tuple->Flags), in follow_link()
482 tuple->LinkOffset, 5, link); in follow_link()
486 SPACE(tuple->Flags) = (link[0] == CISTPL_MFC_ATTR); in follow_link()
488 tuple->LinkOffset += 5; in follow_link()
489 MFC_FN(tuple->Flags)--; in follow_link()
490 } else if (HAS_LINK(tuple->Flags)) { in follow_link()
491 ofs = tuple->LinkOffset; in follow_link()
492 SPACE(tuple->Flags) = LINK_SPACE(tuple->Flags); in follow_link()
493 HAS_LINK(tuple->Flags) = 0; in follow_link()
497 if (SPACE(tuple->Flags)) { in follow_link()
500 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link); in follow_link()
506 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5); in follow_link()
510 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link); in follow_link()
516 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5); in follow_link()
521 tuple_t *tuple) in pccard_get_next_tuple() argument
532 link[1] = tuple->TupleLink; in pccard_get_next_tuple()
533 ofs = tuple->CISOffset + tuple->TupleLink; in pccard_get_next_tuple()
534 attr = SPACE(tuple->Flags); in pccard_get_next_tuple()
551 ofs = follow_link(s, tuple); in pccard_get_next_tuple()
554 attr = SPACE(tuple->Flags); in pccard_get_next_tuple()
569 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
570 LINK_SPACE(tuple->Flags) = attr | IS_ATTR; in pccard_get_next_tuple()
572 &tuple->LinkOffset); in pccard_get_next_tuple()
577 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
578 LINK_SPACE(tuple->Flags) = attr & ~IS_ATTR; in pccard_get_next_tuple()
580 &tuple->LinkOffset); in pccard_get_next_tuple()
585 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
586 LINK_SPACE(tuple->Flags) = IS_ATTR | in pccard_get_next_tuple()
588 tuple->LinkOffset = 0; in pccard_get_next_tuple()
591 tuple->LinkOffset = ofs + 3; in pccard_get_next_tuple()
592 LINK_SPACE(tuple->Flags) = attr; in pccard_get_next_tuple()
599 MFC_FN(tuple->Flags) = tmp; in pccard_get_next_tuple()
602 MFC_FN(tuple->Flags) = 1; in pccard_get_next_tuple()
603 tuple->LinkOffset += function * 5; in pccard_get_next_tuple()
607 HAS_LINK(tuple->Flags) = 0; in pccard_get_next_tuple()
610 if ((tuple->Attributes & TUPLE_RETURN_LINK) && in pccard_get_next_tuple()
611 (tuple->DesiredTuple == RETURN_FIRST_TUPLE)) in pccard_get_next_tuple()
614 if (tuple->DesiredTuple == RETURN_FIRST_TUPLE) in pccard_get_next_tuple()
617 if (link[0] == tuple->DesiredTuple) in pccard_get_next_tuple()
626 tuple->TupleCode = link[0]; in pccard_get_next_tuple()
627 tuple->TupleLink = link[1]; in pccard_get_next_tuple()
628 tuple->CISOffset = ofs + 2; in pccard_get_next_tuple()
632 int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple) in pccard_get_tuple_data() argument
640 if (tuple->TupleLink < tuple->TupleOffset) in pccard_get_tuple_data()
642 len = tuple->TupleLink - tuple->TupleOffset; in pccard_get_tuple_data()
643 tuple->TupleDataLen = tuple->TupleLink; in pccard_get_tuple_data()
646 ret = read_cis_cache(s, SPACE(tuple->Flags), in pccard_get_tuple_data()
647 tuple->CISOffset + tuple->TupleOffset, in pccard_get_tuple_data()
648 min(len, (u_int) tuple->TupleDataMax), in pccard_get_tuple_data()
649 tuple->TupleData); in pccard_get_tuple_data()
658 static int parse_device(tuple_t *tuple, cistpl_device_t *device) in parse_device() argument
664 p = (u_char *)tuple->TupleData; in parse_device()
665 q = p + tuple->TupleDataLen; in parse_device()
719 static int parse_checksum(tuple_t *tuple, cistpl_checksum_t *csum) in parse_checksum() argument
722 if (tuple->TupleDataLen < 5) in parse_checksum()
724 p = (u_char *) tuple->TupleData; in parse_checksum()
725 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2; in parse_checksum()
732 static int parse_longlink(tuple_t *tuple, cistpl_longlink_t *link) in parse_longlink() argument
734 if (tuple->TupleDataLen < 4) in parse_longlink()
736 link->addr = get_unaligned_le32(tuple->TupleData); in parse_longlink()
741 static int parse_longlink_mfc(tuple_t *tuple, cistpl_longlink_mfc_t *link) in parse_longlink_mfc() argument
746 p = (u_char *)tuple->TupleData; in parse_longlink_mfc()
749 if (tuple->TupleDataLen <= link->nfn*5) in parse_longlink_mfc()
792 static int parse_vers_1(tuple_t *tuple, cistpl_vers_1_t *vers_1) in parse_vers_1() argument
796 p = (u_char *)tuple->TupleData; in parse_vers_1()
797 q = p + tuple->TupleDataLen; in parse_vers_1()
809 static int parse_altstr(tuple_t *tuple, cistpl_altstr_t *altstr) in parse_altstr() argument
813 p = (u_char *)tuple->TupleData; in parse_altstr()
814 q = p + tuple->TupleDataLen; in parse_altstr()
821 static int parse_jedec(tuple_t *tuple, cistpl_jedec_t *jedec) in parse_jedec() argument
826 p = (u_char *)tuple->TupleData; in parse_jedec()
827 q = p + tuple->TupleDataLen; in parse_jedec()
841 static int parse_manfid(tuple_t *tuple, cistpl_manfid_t *m) in parse_manfid() argument
843 if (tuple->TupleDataLen < 4) in parse_manfid()
845 m->manf = get_unaligned_le16(tuple->TupleData); in parse_manfid()
846 m->card = get_unaligned_le16(tuple->TupleData + 2); in parse_manfid()
851 static int parse_funcid(tuple_t *tuple, cistpl_funcid_t *f) in parse_funcid() argument
854 if (tuple->TupleDataLen < 2) in parse_funcid()
856 p = (u_char *)tuple->TupleData; in parse_funcid()
863 static int parse_funce(tuple_t *tuple, cistpl_funce_t *f) in parse_funce() argument
867 if (tuple->TupleDataLen < 1) in parse_funce()
869 p = (u_char *)tuple->TupleData; in parse_funce()
871 for (i = 1; i < tuple->TupleDataLen; i++) in parse_funce()
877 static int parse_config(tuple_t *tuple, cistpl_config_t *config) in parse_config() argument
882 p = (u_char *)tuple->TupleData; in parse_config()
885 if (tuple->TupleDataLen < rasz+rmsz+4) in parse_config()
897 config->subtuples = tuple->TupleDataLen - (rasz+rmsz+4); in parse_config()
1077 static int parse_cftable_entry(tuple_t *tuple, in parse_cftable_entry() argument
1082 p = tuple->TupleData; in parse_cftable_entry()
1083 q = p + tuple->TupleDataLen; in parse_cftable_entry()
1201 static int parse_device_geo(tuple_t *tuple, cistpl_device_geo_t *geo) in parse_device_geo() argument
1206 p = (u_char *)tuple->TupleData; in parse_device_geo()
1207 q = p + tuple->TupleDataLen; in parse_device_geo()
1225 static int parse_vers_2(tuple_t *tuple, cistpl_vers_2_t *v2) in parse_vers_2() argument
1229 if (tuple->TupleDataLen < 10) in parse_vers_2()
1232 p = tuple->TupleData; in parse_vers_2()
1233 q = p + tuple->TupleDataLen; in parse_vers_2()
1246 static int parse_org(tuple_t *tuple, cistpl_org_t *org) in parse_org() argument
1251 p = tuple->TupleData; in parse_org()
1252 q = p + tuple->TupleDataLen; in parse_org()
1269 static int parse_format(tuple_t *tuple, cistpl_format_t *fmt) in parse_format() argument
1273 if (tuple->TupleDataLen < 10) in parse_format()
1276 p = tuple->TupleData; in parse_format()
1287 int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse) in pcmcia_parse_tuple() argument
1291 if (tuple->TupleDataLen > tuple->TupleDataMax) in pcmcia_parse_tuple()
1293 switch (tuple->TupleCode) { in pcmcia_parse_tuple()
1296 ret = parse_device(tuple, &parse->device); in pcmcia_parse_tuple()
1299 ret = parse_checksum(tuple, &parse->checksum); in pcmcia_parse_tuple()
1303 ret = parse_longlink(tuple, &parse->longlink); in pcmcia_parse_tuple()
1306 ret = parse_longlink_mfc(tuple, &parse->longlink_mfc); in pcmcia_parse_tuple()
1309 ret = parse_vers_1(tuple, &parse->version_1); in pcmcia_parse_tuple()
1312 ret = parse_altstr(tuple, &parse->altstr); in pcmcia_parse_tuple()
1316 ret = parse_jedec(tuple, &parse->jedec); in pcmcia_parse_tuple()
1319 ret = parse_manfid(tuple, &parse->manfid); in pcmcia_parse_tuple()
1322 ret = parse_funcid(tuple, &parse->funcid); in pcmcia_parse_tuple()
1325 ret = parse_funce(tuple, &parse->funce); in pcmcia_parse_tuple()
1328 ret = parse_config(tuple, &parse->config); in pcmcia_parse_tuple()
1331 ret = parse_cftable_entry(tuple, &parse->cftable_entry); in pcmcia_parse_tuple()
1335 ret = parse_device_geo(tuple, &parse->device_geo); in pcmcia_parse_tuple()
1338 ret = parse_vers_2(tuple, &parse->vers_2); in pcmcia_parse_tuple()
1341 ret = parse_org(tuple, &parse->org); in pcmcia_parse_tuple()
1345 ret = parse_format(tuple, &parse->format); in pcmcia_parse_tuple()
1377 tuple_t *tuple; in pccard_validate_cis() local
1395 tuple = kmalloc(sizeof(*tuple), GFP_KERNEL); in pccard_validate_cis()
1396 if (tuple == NULL) { in pccard_validate_cis()
1402 kfree(tuple); in pccard_validate_cis()
1408 tuple->DesiredTuple = RETURN_FIRST_TUPLE; in pccard_validate_cis()
1409 tuple->Attributes = TUPLE_RETURN_COMMON; in pccard_validate_cis()
1410 ret = pccard_get_first_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1416 if ((tuple->TupleCode == CISTPL_DEVICE) || in pccard_validate_cis()
1433 ret = pccard_get_next_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1436 if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || in pccard_validate_cis()
1437 ((tuple->TupleCode > 0x47) && (tuple->TupleCode < 0x80)) || in pccard_validate_cis()
1438 ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff))) in pccard_validate_cis()
1464 kfree(tuple); in pccard_validate_cis()
1475 tuple_t tuple; in pccard_extract_cis() local
1492 memset(&tuple, 0, sizeof(tuple_t)); in pccard_extract_cis()
1494 tuple.Attributes = TUPLE_RETURN_LINK | TUPLE_RETURN_COMMON; in pccard_extract_cis()
1495 tuple.DesiredTuple = RETURN_FIRST_TUPLE; in pccard_extract_cis()
1496 tuple.TupleOffset = 0; in pccard_extract_cis()
1498 status = pccard_get_first_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()
1500 tuple.TupleData = tuplebuffer; in pccard_extract_cis()
1501 tuple.TupleDataMax = 255; in pccard_extract_cis()
1504 status = pccard_get_tuple_data(s, &tuple); in pccard_extract_cis()
1508 if (off < (pointer + 2 + tuple.TupleDataLen)) { in pccard_extract_cis()
1509 tempbuffer[0] = tuple.TupleCode & 0xff; in pccard_extract_cis()
1510 tempbuffer[1] = tuple.TupleLink & 0xff; in pccard_extract_cis()
1511 for (i = 0; i < tuple.TupleDataLen; i++) in pccard_extract_cis()
1514 for (i = 0; i < (2 + tuple.TupleDataLen); i++) { in pccard_extract_cis()
1523 pointer += 2 + tuple.TupleDataLen; in pccard_extract_cis()
1528 if (tuple.TupleCode == CISTPL_END) in pccard_extract_cis()
1530 status = pccard_get_next_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()