Deleted Added
full compact
libusb10.c (264344) libusb10.c (284744)
1/* $FreeBSD: head/lib/libusb/libusb10.c 264344 2014-04-11 14:11:55Z hselasky $ */
1/* $FreeBSD: head/lib/libusb/libusb10.c 284744 2015-06-24 01:34:35Z araujo $ */
2/*-
3 * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
4 * Copyright (c) 2009 Hans Petter Selasky. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright

--- 993 unchanged lines hidden (view full) ---

1003libusb10_isoc_proxy(struct libusb20_transfer *pxfer)
1004{
1005 struct libusb_super_transfer *sxfer;
1006 struct libusb_transfer *uxfer;
1007 uint32_t actlen;
1008 uint16_t iso_packets;
1009 uint16_t i;
1010 uint8_t status;
2/*-
3 * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
4 * Copyright (c) 2009 Hans Petter Selasky. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright

--- 993 unchanged lines hidden (view full) ---

1003libusb10_isoc_proxy(struct libusb20_transfer *pxfer)
1004{
1005 struct libusb_super_transfer *sxfer;
1006 struct libusb_transfer *uxfer;
1007 uint32_t actlen;
1008 uint16_t iso_packets;
1009 uint16_t i;
1010 uint8_t status;
1011 uint8_t flags;
1012
1013 status = libusb20_tr_get_status(pxfer);
1014 sxfer = libusb20_tr_get_priv_sc1(pxfer);
1015 actlen = libusb20_tr_get_actual_length(pxfer);
1016 iso_packets = libusb20_tr_get_max_frames(pxfer);
1017
1018 if (sxfer == NULL)
1011
1012 status = libusb20_tr_get_status(pxfer);
1013 sxfer = libusb20_tr_get_priv_sc1(pxfer);
1014 actlen = libusb20_tr_get_actual_length(pxfer);
1015 iso_packets = libusb20_tr_get_max_frames(pxfer);
1016
1017 if (sxfer == NULL)
1019 return; /* cancelled - nothing to do */
1018 return; /* cancelled - nothing to do */
1020
1021 uxfer = (struct libusb_transfer *)(
1022 ((uint8_t *)sxfer) + sizeof(*sxfer));
1023
1024 if (iso_packets > uxfer->num_iso_packets)
1025 iso_packets = uxfer->num_iso_packets;
1026
1027 if (iso_packets == 0)
1019
1020 uxfer = (struct libusb_transfer *)(
1021 ((uint8_t *)sxfer) + sizeof(*sxfer));
1022
1023 if (iso_packets > uxfer->num_iso_packets)
1024 iso_packets = uxfer->num_iso_packets;
1025
1026 if (iso_packets == 0)
1028 return; /* nothing to do */
1027 return; /* nothing to do */
1029
1030 /* make sure that the number of ISOCHRONOUS packets is valid */
1031 uxfer->num_iso_packets = iso_packets;
1032
1028
1029 /* make sure that the number of ISOCHRONOUS packets is valid */
1030 uxfer->num_iso_packets = iso_packets;
1031
1033 flags = uxfer->flags;
1034
1035 switch (status) {
1036 case LIBUSB20_TRANSFER_COMPLETED:
1032 switch (status) {
1033 case LIBUSB20_TRANSFER_COMPLETED:
1037
1038 /* update actual length */
1039 uxfer->actual_length = actlen;
1040 for (i = 0; i != iso_packets; i++) {
1041 uxfer->iso_packet_desc[i].actual_length =
1042 libusb20_tr_get_length(pxfer, i);
1043 }
1044 libusb10_complete_transfer(pxfer, sxfer, LIBUSB_TRANSFER_COMPLETED);
1045 break;
1034 /* update actual length */
1035 uxfer->actual_length = actlen;
1036 for (i = 0; i != iso_packets; i++) {
1037 uxfer->iso_packet_desc[i].actual_length =
1038 libusb20_tr_get_length(pxfer, i);
1039 }
1040 libusb10_complete_transfer(pxfer, sxfer, LIBUSB_TRANSFER_COMPLETED);
1041 break;
1046
1047 case LIBUSB20_TRANSFER_START:
1042 case LIBUSB20_TRANSFER_START:
1048
1049 /* setup length(s) */
1050 actlen = 0;
1051 for (i = 0; i != iso_packets; i++) {
1052 libusb20_tr_setup_isoc(pxfer,
1053 &uxfer->buffer[actlen],
1054 uxfer->iso_packet_desc[i].length, i);
1055 actlen += uxfer->iso_packet_desc[i].length;
1056 }
1057
1058 /* no remainder */
1059 sxfer->rem_len = 0;
1060
1061 libusb20_tr_set_total_frames(pxfer, iso_packets);
1062 libusb20_tr_submit(pxfer);
1063
1064 /* fork another USB transfer, if any */
1065 libusb10_submit_transfer_sub(libusb20_tr_get_priv_sc0(pxfer), uxfer->endpoint);
1066 break;
1043 /* setup length(s) */
1044 actlen = 0;
1045 for (i = 0; i != iso_packets; i++) {
1046 libusb20_tr_setup_isoc(pxfer,
1047 &uxfer->buffer[actlen],
1048 uxfer->iso_packet_desc[i].length, i);
1049 actlen += uxfer->iso_packet_desc[i].length;
1050 }
1051
1052 /* no remainder */
1053 sxfer->rem_len = 0;
1054
1055 libusb20_tr_set_total_frames(pxfer, iso_packets);
1056 libusb20_tr_submit(pxfer);
1057
1058 /* fork another USB transfer, if any */
1059 libusb10_submit_transfer_sub(libusb20_tr_get_priv_sc0(pxfer), uxfer->endpoint);
1060 break;
1067
1068 default:
1069 libusb10_complete_transfer(pxfer, sxfer, libusb10_convert_error(status));
1070 break;
1071 }
1072}
1073
1074/* This function must be called locked */
1075

--- 504 unchanged lines hidden ---
1061 default:
1062 libusb10_complete_transfer(pxfer, sxfer, libusb10_convert_error(status));
1063 break;
1064 }
1065}
1066
1067/* This function must be called locked */
1068

--- 504 unchanged lines hidden ---