Lines Matching refs:request

389 static void OsFreeIsoUrbs(struct UsbHostRequest *request)
393 for (int32_t i = 0; i < request->numUrbs; i++) {
394 urb = request->isoUrbs[i];
401 RawUsbMemFree(request->isoUrbs);
402 request->isoUrbs = NULL;
405 static void OsDiscardUrbs(const struct UsbHostRequest *request, int32_t first, int32_t last)
409 if (request == NULL || request->devHandle == NULL || first > URBS_PER_REQUEST || first > last) {
415 if (request->requestType == USB_REQUEST_TYPE_ISOCHRONOUS) {
416 urb = request->isoUrbs[i];
418 urb = &request->urbs[i];
420 if (ioctl(request->devHandle->fd, USBDEVFS_DISCARDURB, urb) == 0) {
426 static int32_t OsSubmitControlRequest(struct UsbHostRequest *request)
432 if (request == NULL || request->devHandle == NULL || request->length > MAX_BULK_DATA_BUFFER_LENGTH) {
437 fd = request->devHandle->fd;
445 urb->endPoint = request->endPoint;
446 urb->buffer = request->buffer;
447 urb->bufferLength = (int32_t)request->length;
448 urb->userContext = request;
449 request->urbs = urb;
450 request->numUrbs = 1;
456 request->urbs = NULL;
466 struct UsbHostRequest *request, struct UsbAdapterUrb *urb, int32_t bulkBufferLen, int32_t number)
473 urb->userContext = (void *)request;
474 switch (request->requestType) {
483 __func__, __LINE__, request->requestType);
486 urb->endPoint = request->endPoint;
487 urb->buffer = request->buffer + (number * bulkBufferLen);
488 if (number == request->numUrbs - 1) {
489 uint32_t len = request->length % (uint32_t)(bulkBufferLen);
499 struct UsbHostRequest *request, struct UsbAdapterUrb *urbs, int32_t bulkBufferLen)
501 int32_t fd = request->devHandle->fd;
502 int32_t numUrbs = request->numUrbs;
506 int32_t ret = OsSubmitBulkRequestHandleUrb(request, urb, bulkBufferLen, i);
521 request->numRetired += numUrbs - i;
523 request->reqStatus = USB_REQUEST_ERROR;
532 static int32_t OsSubmitBulkRequest(struct UsbHostRequest *request)
538 if (request == NULL) {
543 if (request->length <= 0) {
544 HDF_LOGE("request->length less than the minimum");
548 if (request->length > MAX_BULK_DATA_BUFFER_LENGTH) {
549 HDF_LOGW("request->length greater than the maximum");
552 if (request->devHandle->caps & USB_ADAPTER_CAP_BULK_SCATTER_GATHER) {
554 bulkBufferLen = (int32_t)request->length ? (int32_t)request->length : 1;
555 } else if (request->devHandle->caps & USB_ADAPTER_CAP_BULK_CONTINUATION) {
557 } else if (request->devHandle->caps & USB_ADAPTER_CAP_NO_PACKET_SIZE_LIM) {
559 bulkBufferLen = (int32_t)request->length ? request->length : 1;
563 numUrbs = (int32_t)request->length / bulkBufferLen;
564 if ((request->length % bulkBufferLen) > 0) {
570 if (request->bulkUrb) {
571 RawUsbMemFree(request->bulkUrb);
573 request->bulkUrb = urbs;
574 request->urbs = NULL;
576 urbs = request->bulkUrb;
583 request->urbs = urbs;
584 request->numUrbs = numUrbs;
585 request->numRetired = 0;
586 request->reqStatus = USB_REQUEST_COMPLETED;
588 return OsSubmitBulkRequestHandle(request, urbs, bulkBufferLen);
591 static int32_t OsAllocIsoUrbs(struct UsbHostRequest *request, int32_t numUrbs, struct UsbAdapterUrb **urbs)
594 unsigned char *urbBuffer = request->buffer;
595 int32_t numPacketsLeft = request->numIsoPackets;
603 OsFreeIsoUrbs(request);
609 unsigned int packetLen = request->isoPacketDesc[packetIdx++].length;
615 urb->endPoint = request->endPoint;
618 urb->userContext = request;
626 static int32_t OsSubmitIsoUrbs(struct UsbHostRequest *request, int32_t numUrbs, struct UsbAdapterUrb **pUrbs)
629 int32_t ret = ioctl(request->devHandle->fd, USBDEVFS_SUBMITURB, *pUrbs[i]);
643 OsFreeIsoUrbs(request);
646 request->reqStatus = USB_REQUEST_ERROR;
647 request->numRetired += numUrbs - i;
648 if (request->numRetired == numUrbs) {
650 request->urbs = NULL;
658 static int32_t OsSubmitIsoRequest(struct UsbHostRequest *request)
660 if (request == NULL || request->devHandle == NULL || request->numIsoPackets < 1) {
665 if (request->length > MAX_ISO_DATA_BUFFER_LEN) {
666 HDF_LOGE("%{public}s:%{public}d request length exceed the maximum", __func__, __LINE__);
671 for (int32_t i = 0; i < request->numIsoPackets; i++) {
672 unsigned int packetLen = request->isoPacketDesc[i].length;
680 if (request->length < totalLen) {
684 int32_t numUrbs = (request->numIsoPackets + (MAX_ISO_PACKETS_PER_URB - 1)) / MAX_ISO_PACKETS_PER_URB;
690 request->isoUrbs = (void **)pUrbs;
691 request->numUrbs = numUrbs;
692 request->numRetired = 0;
693 request->isoPacketOffset = 0;
694 int32_t ret = OsAllocIsoUrbs(request, numUrbs, pUrbs);
700 return OsSubmitIsoUrbs(request, numUrbs, pUrbs);
703 static int32_t OsControlCompletion(struct UsbHostRequest *request, struct UsbAdapterUrb *urb)
707 request->actualLength += urb->actualLength;
708 if (request->reqStatus == USB_REQUEST_CANCELLED) {
709 RawUsbMemFree(request->urbs);
710 request->urbs = NULL;
711 return RawHandleRequestCompletion(request, USB_REQUEST_CANCELLED);
735 RawUsbMemFree(request->urbs);
736 request->urbs = NULL;
737 return RawHandleRequestCompletion(request, status);
740 static void OsIsoRequestDesStatus(struct UsbHostRequest *request, struct UsbAdapterUrb *urb)
748 requestDesc = &request->isoPacketDesc[request->isoPacketOffset++];
773 static int32_t OsIsoCompletion(struct UsbHostRequest *request, struct UsbAdapterUrb *urb)
779 if (request == NULL) {
784 numUrbs = request->numUrbs;
787 if (urb == request->isoUrbs[i]) {
797 OsIsoRequestDesStatus(request, urb);
798 request->numRetired++;
799 if (request->reqStatus != USB_REQUEST_COMPLETED) {
801 if (request->numRetired == numUrbs) {
802 OsFreeIsoUrbs(request);
803 return RawHandleRequestCompletion(request, USB_REQUEST_ERROR);
816 if (request->numRetired == numUrbs) {
817 OsFreeIsoUrbs(request);
818 return RawHandleRequestCompletion(request, status);
824 static int32_t OsProcessAbnormalReap(struct UsbHostRequest *request, const struct UsbAdapterUrb *urb)
827 unsigned char *target = request->buffer + request->actualLength;
834 request->actualLength += urb->actualLength;
836 if (request->numRetired == request->numUrbs) {
843 static int32_t OsUrbStatusToRequestStatus(struct UsbHostRequest *request, const struct UsbAdapterUrb *urb)
852 request->reqStatus = USB_REQUEST_NO_DEVICE;
856 if (request->reqStatus == USB_REQUEST_COMPLETED) {
857 request->reqStatus = USB_REQUEST_STALL;
862 if (request->reqStatus == USB_REQUEST_COMPLETED) {
863 request->reqStatus = USB_REQUEST_OVERFLOW;
868 if (request->reqStatus == USB_REQUEST_COMPLETED) {
869 request->reqStatus = USB_REQUEST_ERROR;
878 static int32_t OsBulkCompletion(struct UsbHostRequest * const request, const struct UsbAdapterUrb *urb)
881 int32_t urbIdx = urb - (struct UsbAdapterUrb *)request->urbs;
883 request->numRetired++;
884 if (request->reqStatus != USB_REQUEST_COMPLETED) {
885 if (OsProcessAbnormalReap(request, urb) == HDF_SUCCESS) {
891 request->actualLength += urb->actualLength;
893 ret = OsUrbStatusToRequestStatus(request, urb);
900 if (request->numRetired == request->numUrbs) {
903 if (request->reqStatus == USB_REQUEST_COMPLETED) {
904 request->reqStatus = USB_REQUEST_COMPLETED_SHORT;
911 if (request->numRetired == request->numUrbs) {
914 OsDiscardUrbs(request, urbIdx + 1, request->numUrbs);
918 return RawHandleRequestCompletion(request, request->reqStatus);
1289 struct UsbHostRequest *request = NULL;
1310 request = (struct UsbHostRequest *)memBuf;
1311 request->numIsoPackets = isoPackets;
1312 request->buffer = (unsigned char *)memBuf + allocSize - len;
1313 request->bufLen = (int32_t)len;
1314 request->bulkUrb = RawUsbMemCalloc(sizeof(struct UsbAdapterUrb));
1315 if (request->bulkUrb == NULL) {
1322 request->urbs = request->bulkUrb;
1323 return request;
1330 struct UsbHostRequest *request = NULL;
1337 request = RawUsbMemCalloc(allocSize);
1338 if (request == NULL) {
1351 RawUsbMemFree(request);
1355 request->numIsoPackets = isoPackets;
1356 request->buffer = memBuf;
1357 request->bufLen = (int32_t)len;
1358 request->bulkUrb = RawUsbMemCalloc(sizeof(struct UsbAdapterUrb));
1359 if (request->bulkUrb == NULL) {
1363 request->urbs = request->bulkUrb;
1364 return request;
1367 static int32_t AdapterFreeRequestByMmap(struct UsbHostRequest *request)
1369 if (request == NULL) {
1373 if (request->bulkUrb) {
1374 RawUsbMemFree(request->bulkUrb);
1375 request->bulkUrb = NULL;
1377 request->urbs = NULL;
1379 if (munmap((void *)request->buffer, request->bufLen) != 0) {
1383 RawUsbMemFree(request);
1384 request = NULL;
1388 static int32_t AdapterFreeRequest(struct UsbHostRequest *request)
1390 if (request == NULL) {
1394 if (request->bulkUrb) {
1395 RawUsbMemFree(request->bulkUrb);
1396 request->bulkUrb = NULL;
1398 request->urbs = NULL;
1400 RawUsbMemFree(request);
1401 request = NULL;
1404 (sizeof(struct UsbIsoPacketDesc) * (size_t)(request->numIsoPackets)) + (size_t)request->bufLen;
1405 if (munmap((void *)request, allocSize) != 0) {
1413 static int32_t AdapterSubmitRequest(struct UsbHostRequest *request)
1417 if (request == NULL) {
1418 HDF_LOGE("%{public}s:%{public}d request is NULL", __func__, __LINE__);
1422 request->actualLength = 0;
1423 switch (request->requestType) {
1425 ret = OsSubmitControlRequest(request);
1428 ret = OsSubmitIsoRequest(request);
1432 ret = OsSubmitBulkRequest(request);
1435 HDF_LOGE("%{public}s:%{public}d unknown requestType=%{public}u", __func__, __LINE__, request->requestType);
1443 static int32_t AdapterCancelRequest(struct UsbHostRequest * const request)
1445 if (!request->urbs) {
1450 OsDiscardUrbs(request, 0, request->numUrbs);
1452 if (!((request->requestType == USB_REQUEST_TYPE_BULK) && (request->reqStatus == USB_REQUEST_ERROR))) {
1453 request->reqStatus = USB_REQUEST_CANCELLED;
1462 struct UsbHostRequest *request = NULL;
1482 request = urb->userContext;
1484 switch (request->requestType) {
1486 ret = OsControlCompletion(request, urb);
1489 ret = OsIsoCompletion(request, urb);
1493 ret = OsBulkCompletion(request, (const struct UsbAdapterUrb *)urb);
1497 __func__, __LINE__, request->requestType);