Lines Matching refs:tuple

450 			tuple_t *tuple)  in pccard_get_first_tuple()  argument
457 tuple->TupleLink = tuple->Flags = 0; in pccard_get_first_tuple()
460 tuple->CISOffset = tuple->LinkOffset = 0; in pccard_get_first_tuple()
461 SPACE(tuple->Flags) = HAS_LINK(tuple->Flags) = 1; in pccard_get_first_tuple()
463 if ((s->functions > 1) && !(tuple->Attributes & TUPLE_RETURN_COMMON)) { in pccard_get_first_tuple()
464 cisdata_t req = tuple->DesiredTuple; in pccard_get_first_tuple()
465 tuple->DesiredTuple = CISTPL_LONGLINK_MFC; in pccard_get_first_tuple()
466 if (pccard_get_next_tuple(s, function, tuple) == 0) { in pccard_get_first_tuple()
467 tuple->DesiredTuple = CISTPL_LINKTARGET; in pccard_get_first_tuple()
468 if (pccard_get_next_tuple(s, function, tuple) != 0) in pccard_get_first_tuple()
471 tuple->CISOffset = tuple->TupleLink = 0; in pccard_get_first_tuple()
472 tuple->DesiredTuple = req; in pccard_get_first_tuple()
474 return pccard_get_next_tuple(s, function, tuple); in pccard_get_first_tuple()
477 static int follow_link(struct pcmcia_socket *s, tuple_t *tuple) in follow_link() argument
483 if (MFC_FN(tuple->Flags)) { in follow_link()
485 ret = read_cis_cache(s, LINK_SPACE(tuple->Flags), in follow_link()
486 tuple->LinkOffset, 5, link); in follow_link()
490 SPACE(tuple->Flags) = (link[0] == CISTPL_MFC_ATTR); in follow_link()
492 tuple->LinkOffset += 5; in follow_link()
493 MFC_FN(tuple->Flags)--; in follow_link()
494 } else if (HAS_LINK(tuple->Flags)) { in follow_link()
495 ofs = tuple->LinkOffset; in follow_link()
496 SPACE(tuple->Flags) = LINK_SPACE(tuple->Flags); in follow_link()
497 HAS_LINK(tuple->Flags) = 0; in follow_link()
501 if (SPACE(tuple->Flags)) { in follow_link()
504 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link); in follow_link()
510 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5); in follow_link()
514 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link); in follow_link()
520 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5); in follow_link()
525 tuple_t *tuple) in pccard_get_next_tuple() argument
536 link[1] = tuple->TupleLink; in pccard_get_next_tuple()
537 ofs = tuple->CISOffset + tuple->TupleLink; in pccard_get_next_tuple()
538 attr = SPACE(tuple->Flags); in pccard_get_next_tuple()
555 ofs = follow_link(s, tuple); in pccard_get_next_tuple()
558 attr = SPACE(tuple->Flags); in pccard_get_next_tuple()
573 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
574 LINK_SPACE(tuple->Flags) = attr | IS_ATTR; in pccard_get_next_tuple()
576 &tuple->LinkOffset); in pccard_get_next_tuple()
581 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
582 LINK_SPACE(tuple->Flags) = attr & ~IS_ATTR; in pccard_get_next_tuple()
584 &tuple->LinkOffset); in pccard_get_next_tuple()
589 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
590 LINK_SPACE(tuple->Flags) = IS_ATTR | in pccard_get_next_tuple()
592 tuple->LinkOffset = 0; in pccard_get_next_tuple()
595 tuple->LinkOffset = ofs + 3; in pccard_get_next_tuple()
596 LINK_SPACE(tuple->Flags) = attr; in pccard_get_next_tuple()
603 MFC_FN(tuple->Flags) = tmp; in pccard_get_next_tuple()
606 MFC_FN(tuple->Flags) = 1; in pccard_get_next_tuple()
607 tuple->LinkOffset += function * 5; in pccard_get_next_tuple()
611 HAS_LINK(tuple->Flags) = 0; in pccard_get_next_tuple()
614 if ((tuple->Attributes & TUPLE_RETURN_LINK) && in pccard_get_next_tuple()
615 (tuple->DesiredTuple == RETURN_FIRST_TUPLE)) in pccard_get_next_tuple()
618 if (tuple->DesiredTuple == RETURN_FIRST_TUPLE) in pccard_get_next_tuple()
621 if (link[0] == tuple->DesiredTuple) in pccard_get_next_tuple()
630 tuple->TupleCode = link[0]; in pccard_get_next_tuple()
631 tuple->TupleLink = link[1]; in pccard_get_next_tuple()
632 tuple->CISOffset = ofs + 2; in pccard_get_next_tuple()
636 int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple) in pccard_get_tuple_data() argument
644 if (tuple->TupleLink < tuple->TupleOffset) in pccard_get_tuple_data()
646 len = tuple->TupleLink - tuple->TupleOffset; in pccard_get_tuple_data()
647 tuple->TupleDataLen = tuple->TupleLink; in pccard_get_tuple_data()
650 ret = read_cis_cache(s, SPACE(tuple->Flags), in pccard_get_tuple_data()
651 tuple->CISOffset + tuple->TupleOffset, in pccard_get_tuple_data()
652 min(len, (u_int) tuple->TupleDataMax), in pccard_get_tuple_data()
653 tuple->TupleData); in pccard_get_tuple_data()
662 static int parse_device(tuple_t *tuple, cistpl_device_t *device) in parse_device() argument
668 p = (u_char *)tuple->TupleData; in parse_device()
669 q = p + tuple->TupleDataLen; in parse_device()
723 static int parse_checksum(tuple_t *tuple, cistpl_checksum_t *csum) in parse_checksum() argument
726 if (tuple->TupleDataLen < 5) in parse_checksum()
728 p = (u_char *) tuple->TupleData; in parse_checksum()
729 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2; in parse_checksum()
736 static int parse_longlink(tuple_t *tuple, cistpl_longlink_t *link) in parse_longlink() argument
738 if (tuple->TupleDataLen < 4) in parse_longlink()
740 link->addr = get_unaligned_le32(tuple->TupleData); in parse_longlink()
745 static int parse_longlink_mfc(tuple_t *tuple, cistpl_longlink_mfc_t *link) in parse_longlink_mfc() argument
750 p = (u_char *)tuple->TupleData; in parse_longlink_mfc()
753 if (tuple->TupleDataLen <= link->nfn*5) in parse_longlink_mfc()
796 static int parse_vers_1(tuple_t *tuple, cistpl_vers_1_t *vers_1) in parse_vers_1() argument
800 p = (u_char *)tuple->TupleData; in parse_vers_1()
801 q = p + tuple->TupleDataLen; in parse_vers_1()
813 static int parse_altstr(tuple_t *tuple, cistpl_altstr_t *altstr) in parse_altstr() argument
817 p = (u_char *)tuple->TupleData; in parse_altstr()
818 q = p + tuple->TupleDataLen; in parse_altstr()
825 static int parse_jedec(tuple_t *tuple, cistpl_jedec_t *jedec) in parse_jedec() argument
830 p = (u_char *)tuple->TupleData; in parse_jedec()
831 q = p + tuple->TupleDataLen; in parse_jedec()
845 static int parse_manfid(tuple_t *tuple, cistpl_manfid_t *m) in parse_manfid() argument
847 if (tuple->TupleDataLen < 4) in parse_manfid()
849 m->manf = get_unaligned_le16(tuple->TupleData); in parse_manfid()
850 m->card = get_unaligned_le16(tuple->TupleData + 2); in parse_manfid()
855 static int parse_funcid(tuple_t *tuple, cistpl_funcid_t *f) in parse_funcid() argument
858 if (tuple->TupleDataLen < 2) in parse_funcid()
860 p = (u_char *)tuple->TupleData; in parse_funcid()
867 static int parse_funce(tuple_t *tuple, cistpl_funce_t *f) in parse_funce() argument
871 if (tuple->TupleDataLen < 1) in parse_funce()
873 p = (u_char *)tuple->TupleData; in parse_funce()
875 for (i = 1; i < tuple->TupleDataLen; i++) in parse_funce()
881 static int parse_config(tuple_t *tuple, cistpl_config_t *config) in parse_config() argument
886 p = (u_char *)tuple->TupleData; in parse_config()
889 if (tuple->TupleDataLen < rasz+rmsz+4) in parse_config()
901 config->subtuples = tuple->TupleDataLen - (rasz+rmsz+4); in parse_config()
1081 static int parse_cftable_entry(tuple_t *tuple, in parse_cftable_entry() argument
1086 p = tuple->TupleData; in parse_cftable_entry()
1087 q = p + tuple->TupleDataLen; in parse_cftable_entry()
1205 static int parse_device_geo(tuple_t *tuple, cistpl_device_geo_t *geo) in parse_device_geo() argument
1210 p = (u_char *)tuple->TupleData; in parse_device_geo()
1211 q = p + tuple->TupleDataLen; in parse_device_geo()
1229 static int parse_vers_2(tuple_t *tuple, cistpl_vers_2_t *v2) in parse_vers_2() argument
1233 if (tuple->TupleDataLen < 10) in parse_vers_2()
1236 p = tuple->TupleData; in parse_vers_2()
1237 q = p + tuple->TupleDataLen; in parse_vers_2()
1250 static int parse_org(tuple_t *tuple, cistpl_org_t *org) in parse_org() argument
1255 p = tuple->TupleData; in parse_org()
1256 q = p + tuple->TupleDataLen; in parse_org()
1273 static int parse_format(tuple_t *tuple, cistpl_format_t *fmt) in parse_format() argument
1277 if (tuple->TupleDataLen < 10) in parse_format()
1280 p = tuple->TupleData; in parse_format()
1291 int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse) in pcmcia_parse_tuple() argument
1295 if (tuple->TupleDataLen > tuple->TupleDataMax) in pcmcia_parse_tuple()
1297 switch (tuple->TupleCode) { in pcmcia_parse_tuple()
1300 ret = parse_device(tuple, &parse->device); in pcmcia_parse_tuple()
1303 ret = parse_checksum(tuple, &parse->checksum); in pcmcia_parse_tuple()
1307 ret = parse_longlink(tuple, &parse->longlink); in pcmcia_parse_tuple()
1310 ret = parse_longlink_mfc(tuple, &parse->longlink_mfc); in pcmcia_parse_tuple()
1313 ret = parse_vers_1(tuple, &parse->version_1); in pcmcia_parse_tuple()
1316 ret = parse_altstr(tuple, &parse->altstr); in pcmcia_parse_tuple()
1320 ret = parse_jedec(tuple, &parse->jedec); in pcmcia_parse_tuple()
1323 ret = parse_manfid(tuple, &parse->manfid); in pcmcia_parse_tuple()
1326 ret = parse_funcid(tuple, &parse->funcid); in pcmcia_parse_tuple()
1329 ret = parse_funce(tuple, &parse->funce); in pcmcia_parse_tuple()
1332 ret = parse_config(tuple, &parse->config); in pcmcia_parse_tuple()
1335 ret = parse_cftable_entry(tuple, &parse->cftable_entry); in pcmcia_parse_tuple()
1339 ret = parse_device_geo(tuple, &parse->device_geo); in pcmcia_parse_tuple()
1342 ret = parse_vers_2(tuple, &parse->vers_2); in pcmcia_parse_tuple()
1345 ret = parse_org(tuple, &parse->org); in pcmcia_parse_tuple()
1349 ret = parse_format(tuple, &parse->format); in pcmcia_parse_tuple()
1381 tuple_t *tuple; in pccard_validate_cis() local
1399 tuple = kmalloc(sizeof(*tuple), GFP_KERNEL); in pccard_validate_cis()
1400 if (tuple == NULL) { in pccard_validate_cis()
1406 kfree(tuple); in pccard_validate_cis()
1412 tuple->DesiredTuple = RETURN_FIRST_TUPLE; in pccard_validate_cis()
1413 tuple->Attributes = TUPLE_RETURN_COMMON; in pccard_validate_cis()
1414 ret = pccard_get_first_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1420 if ((tuple->TupleCode == CISTPL_DEVICE) || in pccard_validate_cis()
1437 ret = pccard_get_next_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1440 if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || in pccard_validate_cis()
1441 ((tuple->TupleCode > 0x47) && (tuple->TupleCode < 0x80)) || in pccard_validate_cis()
1442 ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff))) in pccard_validate_cis()
1478 kfree(tuple); in pccard_validate_cis()
1489 tuple_t tuple; in pccard_extract_cis() local
1506 memset(&tuple, 0, sizeof(tuple_t)); in pccard_extract_cis()
1508 tuple.Attributes = TUPLE_RETURN_LINK | TUPLE_RETURN_COMMON; in pccard_extract_cis()
1509 tuple.DesiredTuple = RETURN_FIRST_TUPLE; in pccard_extract_cis()
1510 tuple.TupleOffset = 0; in pccard_extract_cis()
1512 status = pccard_get_first_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()
1514 tuple.TupleData = tuplebuffer; in pccard_extract_cis()
1515 tuple.TupleDataMax = 255; in pccard_extract_cis()
1518 status = pccard_get_tuple_data(s, &tuple); in pccard_extract_cis()
1522 if (off < (pointer + 2 + tuple.TupleDataLen)) { in pccard_extract_cis()
1523 tempbuffer[0] = tuple.TupleCode & 0xff; in pccard_extract_cis()
1524 tempbuffer[1] = tuple.TupleLink & 0xff; in pccard_extract_cis()
1525 for (i = 0; i < tuple.TupleDataLen; i++) in pccard_extract_cis()
1528 for (i = 0; i < (2 + tuple.TupleDataLen); i++) { in pccard_extract_cis()
1537 pointer += 2 + tuple.TupleDataLen; in pccard_extract_cis()
1542 if (tuple.TupleCode == CISTPL_END) in pccard_extract_cis()
1544 status = pccard_get_next_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()