Lines Matching refs:tuple
448 tuple_t *tuple) in pccard_get_first_tuple() argument
455 tuple->TupleLink = tuple->Flags = 0; in pccard_get_first_tuple()
458 tuple->CISOffset = tuple->LinkOffset = 0; in pccard_get_first_tuple()
459 SPACE(tuple->Flags) = HAS_LINK(tuple->Flags) = 1; in pccard_get_first_tuple()
461 if ((s->functions > 1) && !(tuple->Attributes & TUPLE_RETURN_COMMON)) { in pccard_get_first_tuple()
462 cisdata_t req = tuple->DesiredTuple; in pccard_get_first_tuple()
463 tuple->DesiredTuple = CISTPL_LONGLINK_MFC; in pccard_get_first_tuple()
464 if (pccard_get_next_tuple(s, function, tuple) == 0) { in pccard_get_first_tuple()
465 tuple->DesiredTuple = CISTPL_LINKTARGET; in pccard_get_first_tuple()
466 if (pccard_get_next_tuple(s, function, tuple) != 0) in pccard_get_first_tuple()
469 tuple->CISOffset = tuple->TupleLink = 0; in pccard_get_first_tuple()
470 tuple->DesiredTuple = req; 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
481 if (MFC_FN(tuple->Flags)) { in follow_link()
483 ret = read_cis_cache(s, LINK_SPACE(tuple->Flags), in follow_link()
484 tuple->LinkOffset, 5, link); in follow_link()
488 SPACE(tuple->Flags) = (link[0] == CISTPL_MFC_ATTR); in follow_link()
490 tuple->LinkOffset += 5; in follow_link()
491 MFC_FN(tuple->Flags)--; in follow_link()
492 } else if (HAS_LINK(tuple->Flags)) { in follow_link()
493 ofs = tuple->LinkOffset; in follow_link()
494 SPACE(tuple->Flags) = LINK_SPACE(tuple->Flags); in follow_link()
495 HAS_LINK(tuple->Flags) = 0; in follow_link()
499 if (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()
523 tuple_t *tuple) in pccard_get_next_tuple() argument
534 link[1] = tuple->TupleLink; in pccard_get_next_tuple()
535 ofs = tuple->CISOffset + tuple->TupleLink; in pccard_get_next_tuple()
536 attr = SPACE(tuple->Flags); in pccard_get_next_tuple()
553 ofs = follow_link(s, tuple); in pccard_get_next_tuple()
556 attr = SPACE(tuple->Flags); in pccard_get_next_tuple()
571 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
572 LINK_SPACE(tuple->Flags) = attr | IS_ATTR; in pccard_get_next_tuple()
574 &tuple->LinkOffset); in pccard_get_next_tuple()
579 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
580 LINK_SPACE(tuple->Flags) = attr & ~IS_ATTR; in pccard_get_next_tuple()
582 &tuple->LinkOffset); in pccard_get_next_tuple()
587 HAS_LINK(tuple->Flags) = 1; in pccard_get_next_tuple()
588 LINK_SPACE(tuple->Flags) = IS_ATTR | in pccard_get_next_tuple()
590 tuple->LinkOffset = 0; in pccard_get_next_tuple()
593 tuple->LinkOffset = ofs + 3; in pccard_get_next_tuple()
594 LINK_SPACE(tuple->Flags) = attr; in pccard_get_next_tuple()
601 MFC_FN(tuple->Flags) = tmp; in pccard_get_next_tuple()
604 MFC_FN(tuple->Flags) = 1; in pccard_get_next_tuple()
605 tuple->LinkOffset += function * 5; in pccard_get_next_tuple()
609 HAS_LINK(tuple->Flags) = 0; in pccard_get_next_tuple()
612 if ((tuple->Attributes & TUPLE_RETURN_LINK) && in pccard_get_next_tuple()
613 (tuple->DesiredTuple == RETURN_FIRST_TUPLE)) in pccard_get_next_tuple()
616 if (tuple->DesiredTuple == RETURN_FIRST_TUPLE) in pccard_get_next_tuple()
619 if (link[0] == tuple->DesiredTuple) in pccard_get_next_tuple()
628 tuple->TupleCode = link[0]; in pccard_get_next_tuple()
629 tuple->TupleLink = link[1]; in pccard_get_next_tuple()
630 tuple->CISOffset = ofs + 2; in pccard_get_next_tuple()
634 int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple) in pccard_get_tuple_data() argument
642 if (tuple->TupleLink < tuple->TupleOffset) in pccard_get_tuple_data()
644 len = tuple->TupleLink - tuple->TupleOffset; in pccard_get_tuple_data()
645 tuple->TupleDataLen = tuple->TupleLink; in pccard_get_tuple_data()
648 ret = read_cis_cache(s, SPACE(tuple->Flags), in pccard_get_tuple_data()
649 tuple->CISOffset + tuple->TupleOffset, in pccard_get_tuple_data()
650 min(len, (u_int) tuple->TupleDataMax), in pccard_get_tuple_data()
651 tuple->TupleData); in pccard_get_tuple_data()
660 static int parse_device(tuple_t *tuple, cistpl_device_t *device) in parse_device() argument
666 p = (u_char *)tuple->TupleData; in parse_device()
667 q = p + tuple->TupleDataLen; in parse_device()
721 static int parse_checksum(tuple_t *tuple, cistpl_checksum_t *csum) in parse_checksum() argument
724 if (tuple->TupleDataLen < 5) in parse_checksum()
726 p = (u_char *) tuple->TupleData; in parse_checksum()
727 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2; in parse_checksum()
734 static int parse_longlink(tuple_t *tuple, cistpl_longlink_t *link) in parse_longlink() argument
736 if (tuple->TupleDataLen < 4) in parse_longlink()
738 link->addr = get_unaligned_le32(tuple->TupleData); in parse_longlink()
743 static int parse_longlink_mfc(tuple_t *tuple, cistpl_longlink_mfc_t *link) in parse_longlink_mfc() argument
748 p = (u_char *)tuple->TupleData; in parse_longlink_mfc()
751 if (tuple->TupleDataLen <= link->nfn*5) in parse_longlink_mfc()
794 static int parse_vers_1(tuple_t *tuple, cistpl_vers_1_t *vers_1) in parse_vers_1() argument
798 p = (u_char *)tuple->TupleData; in parse_vers_1()
799 q = p + tuple->TupleDataLen; in parse_vers_1()
811 static int parse_altstr(tuple_t *tuple, cistpl_altstr_t *altstr) in parse_altstr() argument
815 p = (u_char *)tuple->TupleData; in parse_altstr()
816 q = p + tuple->TupleDataLen; in parse_altstr()
823 static int parse_jedec(tuple_t *tuple, cistpl_jedec_t *jedec) in parse_jedec() argument
828 p = (u_char *)tuple->TupleData; in parse_jedec()
829 q = p + tuple->TupleDataLen; in parse_jedec()
843 static int parse_manfid(tuple_t *tuple, cistpl_manfid_t *m) in parse_manfid() argument
845 if (tuple->TupleDataLen < 4) in parse_manfid()
847 m->manf = get_unaligned_le16(tuple->TupleData); in parse_manfid()
848 m->card = get_unaligned_le16(tuple->TupleData + 2); in parse_manfid()
853 static int parse_funcid(tuple_t *tuple, cistpl_funcid_t *f) in parse_funcid() argument
856 if (tuple->TupleDataLen < 2) in parse_funcid()
858 p = (u_char *)tuple->TupleData; in parse_funcid()
865 static int parse_funce(tuple_t *tuple, cistpl_funce_t *f) in parse_funce() argument
869 if (tuple->TupleDataLen < 1) in parse_funce()
871 p = (u_char *)tuple->TupleData; in parse_funce()
873 for (i = 1; i < tuple->TupleDataLen; i++) in parse_funce()
879 static int parse_config(tuple_t *tuple, cistpl_config_t *config) in parse_config() argument
884 p = (u_char *)tuple->TupleData; in parse_config()
887 if (tuple->TupleDataLen < rasz+rmsz+4) in parse_config()
899 config->subtuples = tuple->TupleDataLen - (rasz+rmsz+4); in parse_config()
1079 static int parse_cftable_entry(tuple_t *tuple, in parse_cftable_entry() argument
1084 p = tuple->TupleData; in parse_cftable_entry()
1085 q = p + tuple->TupleDataLen; in parse_cftable_entry()
1203 static int parse_device_geo(tuple_t *tuple, cistpl_device_geo_t *geo) in parse_device_geo() argument
1208 p = (u_char *)tuple->TupleData; in parse_device_geo()
1209 q = p + tuple->TupleDataLen; in parse_device_geo()
1227 static int parse_vers_2(tuple_t *tuple, cistpl_vers_2_t *v2) in parse_vers_2() argument
1231 if (tuple->TupleDataLen < 10) in parse_vers_2()
1234 p = tuple->TupleData; in parse_vers_2()
1235 q = p + tuple->TupleDataLen; in parse_vers_2()
1248 static int parse_org(tuple_t *tuple, cistpl_org_t *org) in parse_org() argument
1253 p = tuple->TupleData; in parse_org()
1254 q = p + tuple->TupleDataLen; in parse_org()
1271 static int parse_format(tuple_t *tuple, cistpl_format_t *fmt) in parse_format() argument
1275 if (tuple->TupleDataLen < 10) in parse_format()
1278 p = tuple->TupleData; in parse_format()
1289 int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse) in pcmcia_parse_tuple() argument
1293 if (tuple->TupleDataLen > tuple->TupleDataMax) in pcmcia_parse_tuple()
1295 switch (tuple->TupleCode) { in pcmcia_parse_tuple()
1298 ret = parse_device(tuple, &parse->device); in pcmcia_parse_tuple()
1301 ret = parse_checksum(tuple, &parse->checksum); in pcmcia_parse_tuple()
1305 ret = parse_longlink(tuple, &parse->longlink); in pcmcia_parse_tuple()
1308 ret = parse_longlink_mfc(tuple, &parse->longlink_mfc); in pcmcia_parse_tuple()
1311 ret = parse_vers_1(tuple, &parse->version_1); in pcmcia_parse_tuple()
1314 ret = parse_altstr(tuple, &parse->altstr); in pcmcia_parse_tuple()
1318 ret = parse_jedec(tuple, &parse->jedec); in pcmcia_parse_tuple()
1321 ret = parse_manfid(tuple, &parse->manfid); in pcmcia_parse_tuple()
1324 ret = parse_funcid(tuple, &parse->funcid); in pcmcia_parse_tuple()
1327 ret = parse_funce(tuple, &parse->funce); in pcmcia_parse_tuple()
1330 ret = parse_config(tuple, &parse->config); in pcmcia_parse_tuple()
1333 ret = parse_cftable_entry(tuple, &parse->cftable_entry); in pcmcia_parse_tuple()
1337 ret = parse_device_geo(tuple, &parse->device_geo); in pcmcia_parse_tuple()
1340 ret = parse_vers_2(tuple, &parse->vers_2); in pcmcia_parse_tuple()
1343 ret = parse_org(tuple, &parse->org); in pcmcia_parse_tuple()
1347 ret = parse_format(tuple, &parse->format); in pcmcia_parse_tuple()
1379 tuple_t *tuple; in pccard_validate_cis() local
1397 tuple = kmalloc(sizeof(*tuple), GFP_KERNEL); in pccard_validate_cis()
1398 if (tuple == NULL) { in pccard_validate_cis()
1404 kfree(tuple); in pccard_validate_cis()
1410 tuple->DesiredTuple = RETURN_FIRST_TUPLE; in pccard_validate_cis()
1411 tuple->Attributes = TUPLE_RETURN_COMMON; in pccard_validate_cis()
1412 ret = pccard_get_first_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1418 if ((tuple->TupleCode == CISTPL_DEVICE) || in pccard_validate_cis()
1435 ret = pccard_get_next_tuple(s, BIND_FN_ALL, tuple); in pccard_validate_cis()
1438 if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || in pccard_validate_cis()
1439 ((tuple->TupleCode > 0x47) && (tuple->TupleCode < 0x80)) || in pccard_validate_cis()
1440 ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff))) in pccard_validate_cis()
1466 kfree(tuple); in pccard_validate_cis()
1477 tuple_t tuple; in pccard_extract_cis() local
1494 memset(&tuple, 0, sizeof(tuple_t)); in pccard_extract_cis()
1496 tuple.Attributes = TUPLE_RETURN_LINK | TUPLE_RETURN_COMMON; in pccard_extract_cis()
1497 tuple.DesiredTuple = RETURN_FIRST_TUPLE; in pccard_extract_cis()
1498 tuple.TupleOffset = 0; in pccard_extract_cis()
1500 status = pccard_get_first_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()
1502 tuple.TupleData = tuplebuffer; in pccard_extract_cis()
1503 tuple.TupleDataMax = 255; in pccard_extract_cis()
1506 status = pccard_get_tuple_data(s, &tuple); in pccard_extract_cis()
1510 if (off < (pointer + 2 + tuple.TupleDataLen)) { in pccard_extract_cis()
1511 tempbuffer[0] = tuple.TupleCode & 0xff; in pccard_extract_cis()
1512 tempbuffer[1] = tuple.TupleLink & 0xff; in pccard_extract_cis()
1513 for (i = 0; i < tuple.TupleDataLen; i++) in pccard_extract_cis()
1516 for (i = 0; i < (2 + tuple.TupleDataLen); i++) { in pccard_extract_cis()
1525 pointer += 2 + tuple.TupleDataLen; in pccard_extract_cis()
1530 if (tuple.TupleCode == CISTPL_END) in pccard_extract_cis()
1532 status = pccard_get_next_tuple(s, BIND_FN_ALL, &tuple); in pccard_extract_cis()