Lines Matching +full:usb +full:- +full:based
1 // SPDX-License-Identifier: GPL-2.0
4 * offload.c - USB offload related functions
8 * Author: Guan-Yu Lin
11 #include <linux/usb.h>
13 #include "usb.h"
16 * usb_offload_get - increment the offload_usage of a USB device
17 * @udev: the USB device to increment its offload_usage
20 * enabled on this usb_device; that is, another entity is actively handling USB
21 * transfers. This information allows the USB driver to adjust its power
22 * management policy based on offload activity.
31 return -ENODEV; in usb_offload_get()
33 if (pm_runtime_get_if_active(&udev->dev) != 1) { in usb_offload_get()
34 ret = -EBUSY; in usb_offload_get()
38 spin_lock(&udev->offload_lock); in usb_offload_get()
40 if (udev->offload_pm_locked) { in usb_offload_get()
41 ret = -EAGAIN; in usb_offload_get()
45 udev->offload_usage++; in usb_offload_get()
48 spin_unlock(&udev->offload_lock); in usb_offload_get()
49 pm_runtime_put_autosuspend(&udev->dev); in usb_offload_get()
58 * usb_offload_put - drop the offload_usage of a USB device
59 * @udev: the USB device to drop its offload_usage
62 * a USB device. This information allows the USB driver to adjust its power
63 * management policy based on offload activity.
72 return -ENODEV; in usb_offload_put()
74 if (pm_runtime_get_if_active(&udev->dev) != 1) { in usb_offload_put()
75 ret = -EBUSY; in usb_offload_put()
79 spin_lock(&udev->offload_lock); in usb_offload_put()
81 if (udev->offload_pm_locked) { in usb_offload_put()
82 ret = -EAGAIN; in usb_offload_put()
87 if (udev->offload_usage) in usb_offload_put()
88 udev->offload_usage--; in usb_offload_put()
91 spin_unlock(&udev->offload_lock); in usb_offload_put()
92 pm_runtime_put_autosuspend(&udev->dev); in usb_offload_put()
101 * usb_offload_check - check offload activities on a USB device
102 * @udev: the USB device to check its offload activity.
104 * Check if there are any offload activity on the USB device right now. This
109 * ensure the device itself and the downstream usb devices are all marked as
114 bool usb_offload_check(struct usb_device *udev) __must_hold(&udev->dev->mutex) in usb_offload_check()
120 if (udev->offload_usage) in usb_offload_check()
137 * usb_offload_set_pm_locked - set the PM lock state of a USB device
138 * @udev: the USB device to modify
148 spin_lock(&udev->offload_lock); in usb_offload_set_pm_locked()
149 udev->offload_pm_locked = locked; in usb_offload_set_pm_locked()
150 spin_unlock(&udev->offload_lock); in usb_offload_set_pm_locked()