libusb10.c (0f2c706643ff211ce1e1eb0cfbc3c05bc67f2311) libusb10.c (5b40d9601c72fbb04f32437d529dbf51252dc31e)
1/* $FreeBSD$ */
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:

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

632
633 return (err ? LIBUSB_ERROR_INVALID_PARAM : 0);
634}
635
636int
637libusb_claim_interface(struct libusb20_device *pdev, int interface_number)
638{
639 libusb_device *dev;
1/* $FreeBSD$ */
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:

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

632
633 return (err ? LIBUSB_ERROR_INVALID_PARAM : 0);
634}
635
636int
637libusb_claim_interface(struct libusb20_device *pdev, int interface_number)
638{
639 libusb_device *dev;
640 int err = 0;
640
641 dev = libusb_get_device(pdev);
642 if (dev == NULL)
643 return (LIBUSB_ERROR_INVALID_PARAM);
644
645 if (interface_number < 0 || interface_number > 31)
646 return (LIBUSB_ERROR_INVALID_PARAM);
647
641
642 dev = libusb_get_device(pdev);
643 if (dev == NULL)
644 return (LIBUSB_ERROR_INVALID_PARAM);
645
646 if (interface_number < 0 || interface_number > 31)
647 return (LIBUSB_ERROR_INVALID_PARAM);
648
649 if (pdev->auto_detach != 0) {
650 err = libusb_detach_kernel_driver(pdev, interface_number);
651 if (err != 0)
652 goto done;
653 }
654
648 CTX_LOCK(dev->ctx);
649 dev->claimed_interfaces |= (1 << interface_number);
650 CTX_UNLOCK(dev->ctx);
655 CTX_LOCK(dev->ctx);
656 dev->claimed_interfaces |= (1 << interface_number);
657 CTX_UNLOCK(dev->ctx);
651
652 return (0);
658done:
659 return (err);
653}
654
655int
656libusb_release_interface(struct libusb20_device *pdev, int interface_number)
657{
658 libusb_device *dev;
659 int err = 0;
660
661 dev = libusb_get_device(pdev);
662 if (dev == NULL)
663 return (LIBUSB_ERROR_INVALID_PARAM);
664
665 if (interface_number < 0 || interface_number > 31)
666 return (LIBUSB_ERROR_INVALID_PARAM);
667
660}
661
662int
663libusb_release_interface(struct libusb20_device *pdev, int interface_number)
664{
665 libusb_device *dev;
666 int err = 0;
667
668 dev = libusb_get_device(pdev);
669 if (dev == NULL)
670 return (LIBUSB_ERROR_INVALID_PARAM);
671
672 if (interface_number < 0 || interface_number > 31)
673 return (LIBUSB_ERROR_INVALID_PARAM);
674
675 if (pdev->auto_detach != 0) {
676 err = libusb_attach_kernel_driver(pdev, interface_number);
677 if (err != 0)
678 goto done;
679 }
680
668 CTX_LOCK(dev->ctx);
669 if (!(dev->claimed_interfaces & (1 << interface_number)))
670 err = LIBUSB_ERROR_NOT_FOUND;
681 CTX_LOCK(dev->ctx);
682 if (!(dev->claimed_interfaces & (1 << interface_number)))
683 err = LIBUSB_ERROR_NOT_FOUND;
671
672 if (!err)
684 else
673 dev->claimed_interfaces &= ~(1 << interface_number);
674 CTX_UNLOCK(dev->ctx);
685 dev->claimed_interfaces &= ~(1 << interface_number);
686 CTX_UNLOCK(dev->ctx);
687done:
675 return (err);
676}
677
678int
679libusb_set_interface_alt_setting(struct libusb20_device *pdev,
680 int interface_number, int alternate_setting)
681{
682 libusb_device *dev;

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

868libusb_attach_kernel_driver(struct libusb20_device *pdev, int interface)
869{
870 if (pdev == NULL)
871 return (LIBUSB_ERROR_INVALID_PARAM);
872 /* stub - currently not supported by libusb20 */
873 return (0);
874}
875
688 return (err);
689}
690
691int
692libusb_set_interface_alt_setting(struct libusb20_device *pdev,
693 int interface_number, int alternate_setting)
694{
695 libusb_device *dev;

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

881libusb_attach_kernel_driver(struct libusb20_device *pdev, int interface)
882{
883 if (pdev == NULL)
884 return (LIBUSB_ERROR_INVALID_PARAM);
885 /* stub - currently not supported by libusb20 */
886 return (0);
887}
888
889int
890libusb_set_auto_detach_kernel_driver(libusb_device_handle *dev, int enable)
891{
892 dev->auto_detach = (enable ? 1 : 0);
893}
894
876/* Asynchronous device I/O */
877
878struct libusb_transfer *
879libusb_alloc_transfer(int iso_packets)
880{
881 struct libusb_transfer *uxfer;
882 struct libusb_super_transfer *sxfer;
883 int len;

--- 725 unchanged lines hidden ---
895/* Asynchronous device I/O */
896
897struct libusb_transfer *
898libusb_alloc_transfer(int iso_packets)
899{
900 struct libusb_transfer *uxfer;
901 struct libusb_super_transfer *sxfer;
902 int len;

--- 725 unchanged lines hidden ---