Lines Matching defs:tuple

432 /* The high-level CIS tuple services */
447 tuple_t *tuple)
454 tuple->TupleLink = tuple->Flags = 0;
457 tuple->CISOffset = tuple->LinkOffset = 0;
458 SPACE(tuple->Flags) = HAS_LINK(tuple->Flags) = 1;
460 if ((s->functions > 1) && !(tuple->Attributes & TUPLE_RETURN_COMMON)) {
461 cisdata_t req = tuple->DesiredTuple;
462 tuple->DesiredTuple = CISTPL_LONGLINK_MFC;
463 if (pccard_get_next_tuple(s, function, tuple) == 0) {
464 tuple->DesiredTuple = CISTPL_LINKTARGET;
465 if (pccard_get_next_tuple(s, function, tuple) != 0)
468 tuple->CISOffset = tuple->TupleLink = 0;
469 tuple->DesiredTuple = req;
471 return pccard_get_next_tuple(s, function, tuple);
474 static int follow_link(struct pcmcia_socket *s, tuple_t *tuple)
480 if (MFC_FN(tuple->Flags)) {
481 /* Get indirect link from the MFC tuple */
482 ret = read_cis_cache(s, LINK_SPACE(tuple->Flags),
483 tuple->LinkOffset, 5, link);
487 SPACE(tuple->Flags) = (link[0] == CISTPL_MFC_ATTR);
489 tuple->LinkOffset += 5;
490 MFC_FN(tuple->Flags)--;
491 } else if (HAS_LINK(tuple->Flags)) {
492 ofs = tuple->LinkOffset;
493 SPACE(tuple->Flags) = LINK_SPACE(tuple->Flags);
494 HAS_LINK(tuple->Flags) = 0;
498 if (SPACE(tuple->Flags)) {
501 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link);
507 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5);
511 ret = read_cis_cache(s, SPACE(tuple->Flags), ofs, 5, link);
517 remove_cis_cache(s, SPACE(tuple->Flags), ofs, 5);
522 tuple_t *tuple)
533 link[1] = tuple->TupleLink;
534 ofs = tuple->CISOffset + tuple->TupleLink;
535 attr = SPACE(tuple->Flags);
552 ofs = follow_link(s, tuple);
555 attr = SPACE(tuple->Flags);
561 /* Is this a link tuple? Make a note of it */
570 HAS_LINK(tuple->Flags) = 1;
571 LINK_SPACE(tuple->Flags) = attr | IS_ATTR;
573 &tuple->LinkOffset);
578 HAS_LINK(tuple->Flags) = 1;
579 LINK_SPACE(tuple->Flags) = attr & ~IS_ATTR;
581 &tuple->LinkOffset);
586 HAS_LINK(tuple->Flags) = 1;
587 LINK_SPACE(tuple->Flags) = IS_ATTR |
589 tuple->LinkOffset = 0;
592 tuple->LinkOffset = ofs + 3;
593 LINK_SPACE(tuple->Flags) = attr;
600 MFC_FN(tuple->Flags) = tmp;
603 MFC_FN(tuple->Flags) = 1;
604 tuple->LinkOffset += function * 5;
608 HAS_LINK(tuple->Flags) = 0;
611 if ((tuple->Attributes & TUPLE_RETURN_LINK) &&
612 (tuple->DesiredTuple == RETURN_FIRST_TUPLE))
615 if (tuple->DesiredTuple == RETURN_FIRST_TUPLE)
618 if (link[0] == tuple->DesiredTuple)
627 tuple->TupleCode = link[0];
628 tuple->TupleLink = link[1];
629 tuple->CISOffset = ofs + 2;
633 int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple)
641 if (tuple->TupleLink < tuple->TupleOffset)
643 len = tuple->TupleLink - tuple->TupleOffset;
644 tuple->TupleDataLen = tuple->TupleLink;
647 ret = read_cis_cache(s, SPACE(tuple->Flags),
648 tuple->CISOffset + tuple->TupleOffset,
649 min(len, (u_int) tuple->TupleDataMax),
650 tuple->TupleData);
659 static int parse_device(tuple_t *tuple, cistpl_device_t *device)
665 p = (u_char *)tuple->TupleData;
666 q = p + tuple->TupleDataLen;
720 static int parse_checksum(tuple_t *tuple, cistpl_checksum_t *csum)
723 if (tuple->TupleDataLen < 5)
725 p = (u_char *) tuple->TupleData;
726 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2;
733 static int parse_longlink(tuple_t *tuple, cistpl_longlink_t *link)
735 if (tuple->TupleDataLen < 4)
737 link->addr = get_unaligned_le32(tuple->TupleData);
742 static int parse_longlink_mfc(tuple_t *tuple, cistpl_longlink_mfc_t *link)
747 p = (u_char *)tuple->TupleData;
750 if (tuple->TupleDataLen <= link->nfn*5)
793 static int parse_vers_1(tuple_t *tuple, cistpl_vers_1_t *vers_1)
797 p = (u_char *)tuple->TupleData;
798 q = p + tuple->TupleDataLen;
810 static int parse_altstr(tuple_t *tuple, cistpl_altstr_t *altstr)
814 p = (u_char *)tuple->TupleData;
815 q = p + tuple->TupleDataLen;
822 static int parse_jedec(tuple_t *tuple, cistpl_jedec_t *jedec)
827 p = (u_char *)tuple->TupleData;
828 q = p + tuple->TupleDataLen;
842 static int parse_manfid(tuple_t *tuple, cistpl_manfid_t *m)
844 if (tuple->TupleDataLen < 4)
846 m->manf = get_unaligned_le16(tuple->TupleData);
847 m->card = get_unaligned_le16(tuple->TupleData + 2);
852 static int parse_funcid(tuple_t *tuple, cistpl_funcid_t *f)
855 if (tuple->TupleDataLen < 2)
857 p = (u_char *)tuple->TupleData;
864 static int parse_funce(tuple_t *tuple, cistpl_funce_t *f)
868 if (tuple->TupleDataLen < 1)
870 p = (u_char *)tuple->TupleData;
872 for (i = 1; i < tuple->TupleDataLen; i++)
878 static int parse_config(tuple_t *tuple, cistpl_config_t *config)
883 p = (u_char *)tuple->TupleData;
886 if (tuple->TupleDataLen < rasz+rmsz+4)
898 config->subtuples = tuple->TupleDataLen - (rasz+rmsz+4);
1078 static int parse_cftable_entry(tuple_t *tuple,
1083 p = tuple->TupleData;
1084 q = p + tuple->TupleDataLen;
1202 static int parse_device_geo(tuple_t *tuple, cistpl_device_geo_t *geo)
1207 p = (u_char *)tuple->TupleData;
1208 q = p + tuple->TupleDataLen;
1226 static int parse_vers_2(tuple_t *tuple, cistpl_vers_2_t *v2)
1230 if (tuple->TupleDataLen < 10)
1233 p = tuple->TupleData;
1234 q = p + tuple->TupleDataLen;
1247 static int parse_org(tuple_t *tuple, cistpl_org_t *org)
1252 p = tuple->TupleData;
1253 q = p + tuple->TupleDataLen;
1270 static int parse_format(tuple_t *tuple, cistpl_format_t *fmt)
1274 if (tuple->TupleDataLen < 10)
1277 p = tuple->TupleData;
1288 int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse)
1292 if (tuple->TupleDataLen > tuple->TupleDataMax)
1294 switch (tuple->TupleCode) {
1297 ret = parse_device(tuple, &parse->device);
1300 ret = parse_checksum(tuple, &parse->checksum);
1304 ret = parse_longlink(tuple, &parse->longlink);
1307 ret = parse_longlink_mfc(tuple, &parse->longlink_mfc);
1310 ret = parse_vers_1(tuple, &parse->version_1);
1313 ret = parse_altstr(tuple, &parse->altstr);
1317 ret = parse_jedec(tuple, &parse->jedec);
1320 ret = parse_manfid(tuple, &parse->manfid);
1323 ret = parse_funcid(tuple, &parse->funcid);
1326 ret = parse_funce(tuple, &parse->funce);
1329 ret = parse_config(tuple, &parse->config);
1332 ret = parse_cftable_entry(tuple, &parse->cftable_entry);
1336 ret = parse_device_geo(tuple, &parse->device_geo);
1339 ret = parse_vers_2(tuple, &parse->vers_2);
1342 ret = parse_org(tuple, &parse->org);
1346 ret = parse_format(tuple, &parse->format);
1378 tuple_t *tuple;
1396 tuple = kmalloc(sizeof(*tuple), GFP_KERNEL);
1397 if (tuple == NULL) {
1403 kfree(tuple);
1409 tuple->DesiredTuple = RETURN_FIRST_TUPLE;
1410 tuple->Attributes = TUPLE_RETURN_COMMON;
1411 ret = pccard_get_first_tuple(s, BIND_FN_ALL, tuple);
1415 /* First tuple should be DEVICE; we should really have either that
1417 if ((tuple->TupleCode == CISTPL_DEVICE) ||
1422 /* All cards should have a MANFID tuple, and/or a VERS_1 or VERS_2
1423 tuple, for card identification. Certain old D-Link and Linksys
1424 cards have only a broken VERS_2 tuple; hence the bogus test. */
1434 ret = pccard_get_next_tuple(s, BIND_FN_ALL, tuple);
1437 if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) ||
1438 ((tuple->TupleCode > 0x47) && (tuple->TupleCode < 0x80)) ||
1439 ((tuple->TupleCode > 0x90) && (tuple->TupleCode < 0xff)))
1465 kfree(tuple);
1476 tuple_t tuple;
1493 memset(&tuple, 0, sizeof(tuple_t));
1495 tuple.Attributes = TUPLE_RETURN_LINK | TUPLE_RETURN_COMMON;
1496 tuple.DesiredTuple = RETURN_FIRST_TUPLE;
1497 tuple.TupleOffset = 0;
1499 status = pccard_get_first_tuple(s, BIND_FN_ALL, &tuple);
1501 tuple.TupleData = tuplebuffer;
1502 tuple.TupleDataMax = 255;
1505 status = pccard_get_tuple_data(s, &tuple);
1509 if (off < (pointer + 2 + tuple.TupleDataLen)) {
1510 tempbuffer[0] = tuple.TupleCode & 0xff;
1511 tempbuffer[1] = tuple.TupleLink & 0xff;
1512 for (i = 0; i < tuple.TupleDataLen; i++)
1515 for (i = 0; i < (2 + tuple.TupleDataLen); i++) {
1524 pointer += 2 + tuple.TupleDataLen;
1529 if (tuple.TupleCode == CISTPL_END)
1531 status = pccard_get_next_tuple(s, BIND_FN_ALL, &tuple);