linux_usb.c (194227) | linux_usb.c (194228) |
---|---|
1/* $FreeBSD: head/sys/dev/usb/usb_compat_linux.c 194227 2009-06-15 00:33:18Z thompsa $ */ | 1/* $FreeBSD: head/sys/dev/usb/usb_compat_linux.c 194228 2009-06-15 01:02:43Z thompsa $ */ |
2/*- 3 * Copyright (c) 2007 Luigi Rizzo - Universita` di Pisa. All rights reserved. 4 * Copyright (c) 2007 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 --- 15 unchanged lines hidden (view full) --- 25 * SUCH DAMAGE. 26 */ 27 28#include <dev/usb/usb_mfunc.h> 29#include <dev/usb/usb.h> 30#include <dev/usb/usb_error.h> 31#include <dev/usb/usb_ioctl.h> 32 | 2/*- 3 * Copyright (c) 2007 Luigi Rizzo - Universita` di Pisa. All rights reserved. 4 * Copyright (c) 2007 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 --- 15 unchanged lines hidden (view full) --- 25 * SUCH DAMAGE. 26 */ 27 28#include <dev/usb/usb_mfunc.h> 29#include <dev/usb/usb.h> 30#include <dev/usb/usb_error.h> 31#include <dev/usb/usb_ioctl.h> 32 |
33#define USB_DEBUG_VAR usb2_debug | 33#define USB_DEBUG_VAR usb_debug |
34 35#include <dev/usb/usb_core.h> 36#include <dev/usb/usb_compat_linux.h> 37#include <dev/usb/usb_process.h> 38#include <dev/usb/usb_device.h> 39#include <dev/usb/usb_util.h> 40#include <dev/usb/usb_busdma.h> 41#include <dev/usb/usb_transfer.h> --- 207 unchanged lines hidden (view full) --- 249 } 250 mtx_unlock(&Giant); 251 252 if (id == NULL) { 253 return (ENXIO); 254 } 255 if (usb_linux_create_usb_device(uaa->device, dev) != 0) 256 return (ENOMEM); | 34 35#include <dev/usb/usb_core.h> 36#include <dev/usb/usb_compat_linux.h> 37#include <dev/usb/usb_process.h> 38#include <dev/usb/usb_device.h> 39#include <dev/usb/usb_util.h> 40#include <dev/usb/usb_busdma.h> 41#include <dev/usb/usb_transfer.h> --- 207 unchanged lines hidden (view full) --- 249 } 250 mtx_unlock(&Giant); 251 252 if (id == NULL) { 253 return (ENXIO); 254 } 255 if (usb_linux_create_usb_device(uaa->device, dev) != 0) 256 return (ENOMEM); |
257 device_set_usb2_desc(dev); | 257 device_set_usb_desc(dev); |
258 259 sc->sc_fbsd_udev = uaa->device; 260 sc->sc_fbsd_dev = dev; 261 sc->sc_udrv = udrv; 262 sc->sc_ui = usb_ifnum_to_if(uaa->device, uaa->info.bIfaceNum); 263 if (sc->sc_ui == NULL) { 264 return (EINVAL); 265 } --- 88 unchanged lines hidden (view full) --- 354 * 355 * The following function returns the maximum number of isochronous 356 * frames that we support per URB. It is not part of the Linux USB API. 357 *------------------------------------------------------------------------*/ 358static uint16_t 359usb_max_isoc_frames(struct usb_device *dev) 360{ 361 ; /* indent fix */ | 258 259 sc->sc_fbsd_udev = uaa->device; 260 sc->sc_fbsd_dev = dev; 261 sc->sc_udrv = udrv; 262 sc->sc_ui = usb_ifnum_to_if(uaa->device, uaa->info.bIfaceNum); 263 if (sc->sc_ui == NULL) { 264 return (EINVAL); 265 } --- 88 unchanged lines hidden (view full) --- 354 * 355 * The following function returns the maximum number of isochronous 356 * frames that we support per URB. It is not part of the Linux USB API. 357 *------------------------------------------------------------------------*/ 358static uint16_t 359usb_max_isoc_frames(struct usb_device *dev) 360{ 361 ; /* indent fix */ |
362 switch (usb2_get_speed(dev)) { | 362 switch (usbd_get_speed(dev)) { |
363 case USB_SPEED_LOW: 364 case USB_SPEED_FULL: 365 return (USB_MAX_FULL_SPEED_ISOC_FRAMES); 366 default: 367 return (USB_MAX_HIGH_SPEED_ISOC_FRAMES); 368 } 369} 370 --- 27 unchanged lines hidden (view full) --- 398 if (uhe->bsd_xfer[0] || 399 uhe->bsd_xfer[1]) { 400 /* we are ready! */ 401 402 TAILQ_INSERT_HEAD(&uhe->bsd_urb_list, urb, bsd_urb_list); 403 404 urb->status = -EINPROGRESS; 405 | 363 case USB_SPEED_LOW: 364 case USB_SPEED_FULL: 365 return (USB_MAX_FULL_SPEED_ISOC_FRAMES); 366 default: 367 return (USB_MAX_HIGH_SPEED_ISOC_FRAMES); 368 } 369} 370 --- 27 unchanged lines hidden (view full) --- 398 if (uhe->bsd_xfer[0] || 399 uhe->bsd_xfer[1]) { 400 /* we are ready! */ 401 402 TAILQ_INSERT_HEAD(&uhe->bsd_urb_list, urb, bsd_urb_list); 403 404 urb->status = -EINPROGRESS; 405 |
406 usb2_transfer_start(uhe->bsd_xfer[0]); 407 usb2_transfer_start(uhe->bsd_xfer[1]); | 406 usbd_transfer_start(uhe->bsd_xfer[0]); 407 usbd_transfer_start(uhe->bsd_xfer[1]); |
408 } else { 409 /* no pipes have been setup yet! */ 410 urb->status = -EINVAL; 411 return (-EINVAL); 412 } 413 return (0); 414} 415 --- 9 unchanged lines hidden (view full) --- 425 return (usb_unlink_urb_sub(urb, 0)); 426} 427 428static void 429usb_unlink_bsd(struct usb_xfer *xfer, 430 struct urb *urb, uint8_t drain) 431{ 432 if (xfer && | 408 } else { 409 /* no pipes have been setup yet! */ 410 urb->status = -EINVAL; 411 return (-EINVAL); 412 } 413 return (0); 414} 415 --- 9 unchanged lines hidden (view full) --- 425 return (usb_unlink_urb_sub(urb, 0)); 426} 427 428static void 429usb_unlink_bsd(struct usb_xfer *xfer, 430 struct urb *urb, uint8_t drain) 431{ 432 if (xfer && |
433 usb2_transfer_pending(xfer) && | 433 usbd_transfer_pending(xfer) && |
434 (xfer->priv_fifo == (void *)urb)) { 435 if (drain) { 436 mtx_unlock(&Giant); | 434 (xfer->priv_fifo == (void *)urb)) { 435 if (drain) { 436 mtx_unlock(&Giant); |
437 usb2_transfer_drain(xfer); | 437 usbd_transfer_drain(xfer); |
438 mtx_lock(&Giant); 439 } else { | 438 mtx_lock(&Giant); 439 } else { |
440 usb2_transfer_stop(xfer); | 440 usbd_transfer_stop(xfer); |
441 } | 441 } |
442 usb2_transfer_start(xfer); | 442 usbd_transfer_start(xfer); |
443 } 444} 445 446static int 447usb_unlink_urb_sub(struct urb *urb, uint8_t drain) 448{ 449 struct usb_host_endpoint *uhe; 450 uint16_t x; --- 59 unchanged lines hidden (view full) --- 510 addr = uhe->desc.bEndpointAddress; 511 512 bzero(cfg, sizeof(cfg)); 513 514 cfg[0].type = type; 515 cfg[0].endpoint = addr & UE_ADDR; 516 cfg[0].direction = addr & (UE_DIR_OUT | UE_DIR_IN); 517 | 443 } 444} 445 446static int 447usb_unlink_urb_sub(struct urb *urb, uint8_t drain) 448{ 449 struct usb_host_endpoint *uhe; 450 uint16_t x; --- 59 unchanged lines hidden (view full) --- 510 addr = uhe->desc.bEndpointAddress; 511 512 bzero(cfg, sizeof(cfg)); 513 514 cfg[0].type = type; 515 cfg[0].endpoint = addr & UE_ADDR; 516 cfg[0].direction = addr & (UE_DIR_OUT | UE_DIR_IN); 517 |
518 ep = usb2_get_endpoint(dev, uhe->bsd_iface_index, cfg); | 518 ep = usbd_get_endpoint(dev, uhe->bsd_iface_index, cfg); |
519 if (ep == NULL) 520 return (-EINVAL); 521 | 519 if (ep == NULL) 520 return (-EINVAL); 521 |
522 usb2_clear_data_toggle(dev, ep); | 522 usbd_clear_data_toggle(dev, ep); |
523 524 return (usb_control_msg(dev, &dev->ep0, 525 UR_CLEAR_FEATURE, UT_WRITE_ENDPOINT, 526 UF_ENDPOINT_HALT, addr, NULL, 0, 1000)); 527} 528 529/*------------------------------------------------------------------------* 530 * usb_start_wait_urb --- 82 unchanged lines hidden (view full) --- 613 if (type != UE_CONTROL) { 614 return (-EINVAL); 615 } 616 if (addr == 0) { 617 /* 618 * The FreeBSD USB stack supports standard control 619 * transfers on control endpoint zero: 620 */ | 523 524 return (usb_control_msg(dev, &dev->ep0, 525 UR_CLEAR_FEATURE, UT_WRITE_ENDPOINT, 526 UF_ENDPOINT_HALT, addr, NULL, 0, 1000)); 527} 528 529/*------------------------------------------------------------------------* 530 * usb_start_wait_urb --- 82 unchanged lines hidden (view full) --- 613 if (type != UE_CONTROL) { 614 return (-EINVAL); 615 } 616 if (addr == 0) { 617 /* 618 * The FreeBSD USB stack supports standard control 619 * transfers on control endpoint zero: 620 */ |
621 err = usb2_do_request_flags(dev, | 621 err = usbd_do_request_flags(dev, |
622 &Giant, &req, data, USB_SHORT_XFER_OK, 623 &actlen, timeout); 624 if (err) { 625 err = -EPIPE; 626 } else { 627 err = actlen; 628 } 629 return (err); --- 54 unchanged lines hidden (view full) --- 684 struct usb_interface *p_ui = usb_ifnum_to_if(dev, iface_no); 685 int err; 686 687 if (p_ui == NULL) 688 return (-EINVAL); 689 if (alt_index >= p_ui->num_altsetting) 690 return (-EINVAL); 691 usb_linux_cleanup_interface(dev, p_ui); | 622 &Giant, &req, data, USB_SHORT_XFER_OK, 623 &actlen, timeout); 624 if (err) { 625 err = -EPIPE; 626 } else { 627 err = actlen; 628 } 629 return (err); --- 54 unchanged lines hidden (view full) --- 684 struct usb_interface *p_ui = usb_ifnum_to_if(dev, iface_no); 685 int err; 686 687 if (p_ui == NULL) 688 return (-EINVAL); 689 if (alt_index >= p_ui->num_altsetting) 690 return (-EINVAL); 691 usb_linux_cleanup_interface(dev, p_ui); |
692 err = -usb2_set_alt_interface_index(dev, | 692 err = -usbd_set_alt_interface_index(dev, |
693 p_ui->bsd_iface_index, alt_index); 694 if (err == 0) { 695 p_ui->cur_altsetting = p_ui->altsetting + alt_index; 696 } 697 return (err); 698} 699 700/*------------------------------------------------------------------------* --- 14 unchanged lines hidden (view full) --- 715 struct usb_config cfg[2]; 716 uint8_t type = uhe->desc.bmAttributes & UE_XFERTYPE; 717 uint8_t addr = uhe->desc.bEndpointAddress; 718 719 if (uhe->fbsd_buf_size == bufsize) { 720 /* optimize */ 721 return (0); 722 } | 693 p_ui->bsd_iface_index, alt_index); 694 if (err == 0) { 695 p_ui->cur_altsetting = p_ui->altsetting + alt_index; 696 } 697 return (err); 698} 699 700/*------------------------------------------------------------------------* --- 14 unchanged lines hidden (view full) --- 715 struct usb_config cfg[2]; 716 uint8_t type = uhe->desc.bmAttributes & UE_XFERTYPE; 717 uint8_t addr = uhe->desc.bEndpointAddress; 718 719 if (uhe->fbsd_buf_size == bufsize) { 720 /* optimize */ 721 return (0); 722 } |
723 usb2_transfer_unsetup(uhe->bsd_xfer, 2); | 723 usbd_transfer_unsetup(uhe->bsd_xfer, 2); |
724 725 uhe->fbsd_buf_size = bufsize; 726 727 if (bufsize == 0) { 728 return (0); 729 } 730 bzero(cfg, sizeof(cfg)); 731 --- 22 unchanged lines hidden (view full) --- 754 cfg[0].flags.ext_buffer = 1; 755#endif 756 cfg[0].flags.short_xfer_ok = 1; 757 758 bcopy(cfg, cfg + 1, sizeof(*cfg)); 759 760 /* Allocate and setup two generic FreeBSD USB transfers */ 761 | 724 725 uhe->fbsd_buf_size = bufsize; 726 727 if (bufsize == 0) { 728 return (0); 729 } 730 bzero(cfg, sizeof(cfg)); 731 --- 22 unchanged lines hidden (view full) --- 754 cfg[0].flags.ext_buffer = 1; 755#endif 756 cfg[0].flags.short_xfer_ok = 1; 757 758 bcopy(cfg, cfg + 1, sizeof(*cfg)); 759 760 /* Allocate and setup two generic FreeBSD USB transfers */ 761 |
762 if (usb2_transfer_setup(dev, &uhe->bsd_iface_index, | 762 if (usbd_transfer_setup(dev, &uhe->bsd_iface_index, |
763 uhe->bsd_xfer, cfg, 2, uhe, &Giant)) { 764 return (-EINVAL); 765 } 766 } else { 767 if (bufsize > (1 << 22)) { 768 /* limit buffer size */ 769 bufsize = (1 << 22); 770 } 771 /* Allocate and setup one generic FreeBSD USB transfer */ 772 773 cfg[0].type = type; 774 cfg[0].endpoint = addr & UE_ADDR; 775 cfg[0].direction = addr & (UE_DIR_OUT | UE_DIR_IN); 776 cfg[0].callback = &usb_linux_non_isoc_callback; 777 cfg[0].bufsize = bufsize; 778 cfg[0].flags.ext_buffer = 1; /* enable zero-copy */ 779 cfg[0].flags.proxy_buffer = 1; 780 cfg[0].flags.short_xfer_ok = 1; 781 | 763 uhe->bsd_xfer, cfg, 2, uhe, &Giant)) { 764 return (-EINVAL); 765 } 766 } else { 767 if (bufsize > (1 << 22)) { 768 /* limit buffer size */ 769 bufsize = (1 << 22); 770 } 771 /* Allocate and setup one generic FreeBSD USB transfer */ 772 773 cfg[0].type = type; 774 cfg[0].endpoint = addr & UE_ADDR; 775 cfg[0].direction = addr & (UE_DIR_OUT | UE_DIR_IN); 776 cfg[0].callback = &usb_linux_non_isoc_callback; 777 cfg[0].bufsize = bufsize; 778 cfg[0].flags.ext_buffer = 1; /* enable zero-copy */ 779 cfg[0].flags.proxy_buffer = 1; 780 cfg[0].flags.short_xfer_ok = 1; 781 |
782 if (usb2_transfer_setup(dev, &uhe->bsd_iface_index, | 782 if (usbd_transfer_setup(dev, &uhe->bsd_iface_index, |
783 uhe->bsd_xfer, cfg, 1, uhe, &Giant)) { 784 return (-EINVAL); 785 } 786 } 787 return (0); 788} 789 790/*------------------------------------------------------------------------* 791 * usb_linux_create_usb_device 792 * 793 * The following function is used to build up a per USB device 794 * structure tree, that mimics the Linux one. The root structure 795 * is returned by this function. 796 *------------------------------------------------------------------------*/ 797static int 798usb_linux_create_usb_device(struct usb_device *udev, device_t dev) 799{ | 783 uhe->bsd_xfer, cfg, 1, uhe, &Giant)) { 784 return (-EINVAL); 785 } 786 } 787 return (0); 788} 789 790/*------------------------------------------------------------------------* 791 * usb_linux_create_usb_device 792 * 793 * The following function is used to build up a per USB device 794 * structure tree, that mimics the Linux one. The root structure 795 * is returned by this function. 796 *------------------------------------------------------------------------*/ 797static int 798usb_linux_create_usb_device(struct usb_device *udev, device_t dev) 799{ |
800 struct usb_config_descriptor *cd = usb2_get_config_descriptor(udev); | 800 struct usb_config_descriptor *cd = usbd_get_config_descriptor(udev); |
801 struct usb_descriptor *desc; 802 struct usb_interface_descriptor *id; 803 struct usb_endpoint_descriptor *ed; 804 struct usb_interface *p_ui = NULL; 805 struct usb_host_interface *p_uhi = NULL; 806 struct usb_host_endpoint *p_uhe = NULL; 807 usb_size_t size; 808 uint16_t niface_total; --- 14 unchanged lines hidden (view full) --- 823 iface_index = 0; 824 nedesc = 0; 825 desc = NULL; 826 827 /* 828 * Iterate over all the USB descriptors. Use the USB config 829 * descriptor pointer provided by the FreeBSD USB stack. 830 */ | 801 struct usb_descriptor *desc; 802 struct usb_interface_descriptor *id; 803 struct usb_endpoint_descriptor *ed; 804 struct usb_interface *p_ui = NULL; 805 struct usb_host_interface *p_uhi = NULL; 806 struct usb_host_endpoint *p_uhe = NULL; 807 usb_size_t size; 808 uint16_t niface_total; --- 14 unchanged lines hidden (view full) --- 823 iface_index = 0; 824 nedesc = 0; 825 desc = NULL; 826 827 /* 828 * Iterate over all the USB descriptors. Use the USB config 829 * descriptor pointer provided by the FreeBSD USB stack. 830 */ |
831 while ((desc = usb2_desc_foreach(cd, desc))) { | 831 while ((desc = usb_desc_foreach(cd, desc))) { |
832 833 /* 834 * Build up a tree according to the descriptors we 835 * find: 836 */ 837 switch (desc->bDescriptorType) { 838 case UDESC_DEVICE: 839 break; --- 220 unchanged lines hidden (view full) --- 1060 *------------------------------------------------------------------------*/ 1061void * 1062usb_buffer_alloc(struct usb_device *dev, usb_size_t size, uint16_t mem_flags, uint8_t *dma_addr) 1063{ 1064 return (malloc(size, M_USBDEV, M_WAITOK | M_ZERO)); 1065} 1066 1067/*------------------------------------------------------------------------* | 832 833 /* 834 * Build up a tree according to the descriptors we 835 * find: 836 */ 837 switch (desc->bDescriptorType) { 838 case UDESC_DEVICE: 839 break; --- 220 unchanged lines hidden (view full) --- 1060 *------------------------------------------------------------------------*/ 1061void * 1062usb_buffer_alloc(struct usb_device *dev, usb_size_t size, uint16_t mem_flags, uint8_t *dma_addr) 1063{ 1064 return (malloc(size, M_USBDEV, M_WAITOK | M_ZERO)); 1065} 1066 1067/*------------------------------------------------------------------------* |
1068 * usb_get_intfdata | 1068 * usbd_get_intfdata |
1069 *------------------------------------------------------------------------*/ 1070void * | 1069 *------------------------------------------------------------------------*/ 1070void * |
1071usb_get_intfdata(struct usb_interface *intf) | 1071usbd_get_intfdata(struct usb_interface *intf) |
1072{ 1073 return (intf->bsd_priv_sc); 1074} 1075 1076/*------------------------------------------------------------------------* 1077 * usb_linux_register 1078 * 1079 * The following function is used by the "USB_DRIVER_EXPORT()" macro, --- 6 unchanged lines hidden (view full) --- 1086usb_linux_register(void *arg) 1087{ 1088 struct usb_driver *drv = arg; 1089 1090 mtx_lock(&Giant); 1091 LIST_INSERT_HEAD(&usb_linux_driver_list, drv, linux_driver_list); 1092 mtx_unlock(&Giant); 1093 | 1072{ 1073 return (intf->bsd_priv_sc); 1074} 1075 1076/*------------------------------------------------------------------------* 1077 * usb_linux_register 1078 * 1079 * The following function is used by the "USB_DRIVER_EXPORT()" macro, --- 6 unchanged lines hidden (view full) --- 1086usb_linux_register(void *arg) 1087{ 1088 struct usb_driver *drv = arg; 1089 1090 mtx_lock(&Giant); 1091 LIST_INSERT_HEAD(&usb_linux_driver_list, drv, linux_driver_list); 1092 mtx_unlock(&Giant); 1093 |
1094 usb2_needs_explore_all(); | 1094 usb_needs_explore_all(); |
1095} 1096 1097/*------------------------------------------------------------------------* 1098 * usb_linux_deregister 1099 * 1100 * The following function is used by the "USB_DRIVER_EXPORT()" macro, 1101 * and is used to deregister a Linux USB driver. This function will 1102 * ensure that all driver instances belonging to the Linux USB device --- 198 unchanged lines hidden (view full) --- 1301 1302 offset = 0; 1303 1304 for (x = 0; x < urb->number_of_packets; x++) { 1305 uipd = urb->iso_frame_desc + x; 1306 uipd->actual_length = xfer->frlengths[x]; 1307 uipd->status = 0; 1308 if (!xfer->flags.ext_buffer) { | 1095} 1096 1097/*------------------------------------------------------------------------* 1098 * usb_linux_deregister 1099 * 1100 * The following function is used by the "USB_DRIVER_EXPORT()" macro, 1101 * and is used to deregister a Linux USB driver. This function will 1102 * ensure that all driver instances belonging to the Linux USB device --- 198 unchanged lines hidden (view full) --- 1301 1302 offset = 0; 1303 1304 for (x = 0; x < urb->number_of_packets; x++) { 1305 uipd = urb->iso_frame_desc + x; 1306 uipd->actual_length = xfer->frlengths[x]; 1307 uipd->status = 0; 1308 if (!xfer->flags.ext_buffer) { |
1309 usb2_copy_out(xfer->frbuffers, offset, | 1309 usbd_copy_out(xfer->frbuffers, offset, |
1310 USB_ADD_BYTES(urb->transfer_buffer, 1311 uipd->offset), uipd->actual_length); 1312 } 1313 offset += max_frame; 1314 } 1315 } else { 1316 for (x = 0; x < urb->number_of_packets; x++) { 1317 uipd = urb->iso_frame_desc + x; --- 54 unchanged lines hidden (view full) --- 1372 /* copy out data with regard to the URB */ 1373 1374 offset = 0; 1375 1376 for (x = 0; x < urb->number_of_packets; x++) { 1377 uipd = urb->iso_frame_desc + x; 1378 xfer->frlengths[x] = uipd->length; 1379 if (!xfer->flags.ext_buffer) { | 1310 USB_ADD_BYTES(urb->transfer_buffer, 1311 uipd->offset), uipd->actual_length); 1312 } 1313 offset += max_frame; 1314 } 1315 } else { 1316 for (x = 0; x < urb->number_of_packets; x++) { 1317 uipd = urb->iso_frame_desc + x; --- 54 unchanged lines hidden (view full) --- 1372 /* copy out data with regard to the URB */ 1373 1374 offset = 0; 1375 1376 for (x = 0; x < urb->number_of_packets; x++) { 1377 uipd = urb->iso_frame_desc + x; 1378 xfer->frlengths[x] = uipd->length; 1379 if (!xfer->flags.ext_buffer) { |
1380 usb2_copy_in(xfer->frbuffers, offset, | 1380 usbd_copy_in(xfer->frbuffers, offset, |
1381 USB_ADD_BYTES(urb->transfer_buffer, 1382 uipd->offset), uipd->length); 1383 } 1384 offset += uipd->length; 1385 } 1386 } else { 1387 1388 /* --- 8 unchanged lines hidden (view full) --- 1397 for (x = 0; x < urb->number_of_packets; x++) { 1398 uipd = urb->iso_frame_desc + x; 1399 xfer->frlengths[x] = max_frame; 1400 } 1401 } 1402 1403 if (xfer->flags.ext_buffer) { 1404 /* set virtual address to load */ | 1381 USB_ADD_BYTES(urb->transfer_buffer, 1382 uipd->offset), uipd->length); 1383 } 1384 offset += uipd->length; 1385 } 1386 } else { 1387 1388 /* --- 8 unchanged lines hidden (view full) --- 1397 for (x = 0; x < urb->number_of_packets; x++) { 1398 uipd = urb->iso_frame_desc + x; 1399 xfer->frlengths[x] = max_frame; 1400 } 1401 } 1402 1403 if (xfer->flags.ext_buffer) { 1404 /* set virtual address to load */ |
1405 usb2_set_frame_data(xfer, | 1405 usbd_set_frame_data(xfer, |
1406 urb->transfer_buffer, 0); 1407 } 1408 xfer->priv_fifo = urb; 1409 xfer->flags.force_short_xfer = 0; 1410 xfer->timeout = urb->timeout; 1411 xfer->nframes = urb->number_of_packets; | 1406 urb->transfer_buffer, 0); 1407 } 1408 xfer->priv_fifo = urb; 1409 xfer->flags.force_short_xfer = 0; 1410 xfer->timeout = urb->timeout; 1411 xfer->nframes = urb->number_of_packets; |
1412 usb2_start_hardware(xfer); | 1412 usbd_transfer_submit(xfer); |
1413 return; 1414 1415 default: /* Error */ 1416 if (xfer->error == USB_ERR_CANCELLED) { 1417 urb->status = -ECONNRESET; 1418 } else { 1419 urb->status = -EPIPE; /* stalled */ 1420 } --- 47 unchanged lines hidden (view full) --- 1468 if (xfer->flags_int.control_xfr) { 1469 1470 /* don't transfer the setup packet again: */ 1471 1472 xfer->frlengths[0] = 0; 1473 } 1474 if (urb->bsd_isread && (!xfer->flags.ext_buffer)) { 1475 /* copy in data with regard to the URB */ | 1413 return; 1414 1415 default: /* Error */ 1416 if (xfer->error == USB_ERR_CANCELLED) { 1417 urb->status = -ECONNRESET; 1418 } else { 1419 urb->status = -EPIPE; /* stalled */ 1420 } --- 47 unchanged lines hidden (view full) --- 1468 if (xfer->flags_int.control_xfr) { 1469 1470 /* don't transfer the setup packet again: */ 1471 1472 xfer->frlengths[0] = 0; 1473 } 1474 if (urb->bsd_isread && (!xfer->flags.ext_buffer)) { 1475 /* copy in data with regard to the URB */ |
1476 usb2_copy_out(xfer->frbuffers + data_frame, 0, | 1476 usbd_copy_out(xfer->frbuffers + data_frame, 0, |
1477 urb->bsd_data_ptr, xfer->frlengths[data_frame]); 1478 } 1479 urb->bsd_length_rem -= xfer->frlengths[data_frame]; 1480 urb->bsd_data_ptr += xfer->frlengths[data_frame]; 1481 urb->actual_length += xfer->frlengths[data_frame]; 1482 1483 /* check for short transfer */ 1484 if (xfer->actlen < xfer->sumlen) { --- 34 unchanged lines hidden (view full) --- 1519 1520 if (xfer->flags_int.control_xfr) { 1521 1522 /* 1523 * USB control transfers need special handling. 1524 * First copy in the header, then copy in data! 1525 */ 1526 if (!xfer->flags.ext_buffer) { | 1477 urb->bsd_data_ptr, xfer->frlengths[data_frame]); 1478 } 1479 urb->bsd_length_rem -= xfer->frlengths[data_frame]; 1480 urb->bsd_data_ptr += xfer->frlengths[data_frame]; 1481 urb->actual_length += xfer->frlengths[data_frame]; 1482 1483 /* check for short transfer */ 1484 if (xfer->actlen < xfer->sumlen) { --- 34 unchanged lines hidden (view full) --- 1519 1520 if (xfer->flags_int.control_xfr) { 1521 1522 /* 1523 * USB control transfers need special handling. 1524 * First copy in the header, then copy in data! 1525 */ 1526 if (!xfer->flags.ext_buffer) { |
1527 usb2_copy_in(xfer->frbuffers, 0, | 1527 usbd_copy_in(xfer->frbuffers, 0, |
1528 urb->setup_packet, REQ_SIZE); 1529 } else { 1530 /* set virtual address to load */ | 1528 urb->setup_packet, REQ_SIZE); 1529 } else { 1530 /* set virtual address to load */ |
1531 usb2_set_frame_data(xfer, | 1531 usbd_set_frame_data(xfer, |
1532 urb->setup_packet, 0); 1533 } 1534 1535 xfer->frlengths[0] = REQ_SIZE; 1536 1537 ptr = urb->setup_packet; 1538 1539 /* setup data transfer direction and length */ --- 22 unchanged lines hidden (view full) --- 1562 (urb->transfer_flags & URB_ZERO_PACKET) && 1563 (!xfer->flags_int.control_xfr)) { 1564 xfer->flags.force_short_xfer = 1; 1565 } 1566 /* check if we need to copy in data */ 1567 1568 if (xfer->flags.ext_buffer) { 1569 /* set virtual address to load */ | 1532 urb->setup_packet, 0); 1533 } 1534 1535 xfer->frlengths[0] = REQ_SIZE; 1536 1537 ptr = urb->setup_packet; 1538 1539 /* setup data transfer direction and length */ --- 22 unchanged lines hidden (view full) --- 1562 (urb->transfer_flags & URB_ZERO_PACKET) && 1563 (!xfer->flags_int.control_xfr)) { 1564 xfer->flags.force_short_xfer = 1; 1565 } 1566 /* check if we need to copy in data */ 1567 1568 if (xfer->flags.ext_buffer) { 1569 /* set virtual address to load */ |
1570 usb2_set_frame_data(xfer, urb->bsd_data_ptr, | 1570 usbd_set_frame_data(xfer, urb->bsd_data_ptr, |
1571 data_frame); 1572 } else if (!urb->bsd_isread) { 1573 /* copy out data with regard to the URB */ | 1571 data_frame); 1572 } else if (!urb->bsd_isread) { 1573 /* copy out data with regard to the URB */ |
1574 usb2_copy_in(xfer->frbuffers + data_frame, 0, | 1574 usbd_copy_in(xfer->frbuffers + data_frame, 0, |
1575 urb->bsd_data_ptr, max_bulk); 1576 } 1577 xfer->frlengths[data_frame] = max_bulk; 1578 if (xfer->flags_int.control_xfr) { 1579 if (max_bulk > 0) { 1580 xfer->nframes = 2; 1581 } else { 1582 xfer->nframes = 1; 1583 } 1584 } else { 1585 xfer->nframes = 1; 1586 } | 1575 urb->bsd_data_ptr, max_bulk); 1576 } 1577 xfer->frlengths[data_frame] = max_bulk; 1578 if (xfer->flags_int.control_xfr) { 1579 if (max_bulk > 0) { 1580 xfer->nframes = 2; 1581 } else { 1582 xfer->nframes = 1; 1583 } 1584 } else { 1585 xfer->nframes = 1; 1586 } |
1587 usb2_start_hardware(xfer); | 1587 usbd_transfer_submit(xfer); |
1588 return; 1589 1590 default: 1591 if (xfer->error == USB_ERR_CANCELLED) { 1592 urb->status = -ECONNRESET; 1593 } else { 1594 urb->status = -EPIPE; 1595 } --- 14 unchanged lines hidden --- | 1588 return; 1589 1590 default: 1591 if (xfer->error == USB_ERR_CANCELLED) { 1592 urb->status = -ECONNRESET; 1593 } else { 1594 urb->status = -EPIPE; 1595 } --- 14 unchanged lines hidden --- |