Deleted Added
full compact
usb_hub.c (358874) usb_hub.c (359317)
1/* $FreeBSD: stable/11/sys/dev/usb/usb_hub.c 358874 2020-03-11 08:21:04Z hselasky $ */
1/* $FreeBSD: stable/11/sys/dev/usb/usb_hub.c 359317 2020-03-26 05:37:50Z hselasky $ */
2/*-
3 * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
4 * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
5 * Copyright (c) 2008-2010 Hans Petter Selasky. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:

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

2601 if (bus->methods->set_hw_power != NULL) {
2602 /* always update hardware power! */
2603 (bus->methods->set_hw_power) (bus);
2604 }
2605 return;
2606}
2607#endif
2608
2/*-
3 * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
4 * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
5 * Copyright (c) 2008-2010 Hans Petter Selasky. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:

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

2601 if (bus->methods->set_hw_power != NULL) {
2602 /* always update hardware power! */
2603 (bus->methods->set_hw_power) (bus);
2604 }
2605 return;
2606}
2607#endif
2608
2609static usb_error_t
2610usbd_device_30_remote_wakeup(struct usb_device *udev, uint8_t bRequest)
2611{
2612 struct usb_device_request req = {};
2613
2614 req.bmRequestType = UT_WRITE_INTERFACE;
2615 req.bRequest = bRequest;
2616 USETW(req.wValue, USB_INTERFACE_FUNC_SUSPEND);
2617 USETW(req.wIndex, USB_INTERFACE_FUNC_SUSPEND_LP |
2618 USB_INTERFACE_FUNC_SUSPEND_RW);
2619
2620 return (usbd_do_request(udev, NULL, &req, 0));
2621}
2622
2623static usb_error_t
2624usbd_clear_dev_wakeup(struct usb_device *udev)
2625{
2626 usb_error_t err;
2627
2628 if (usb_device_20_compatible(udev)) {
2629 err = usbd_req_clear_device_feature(udev,
2630 NULL, UF_DEVICE_REMOTE_WAKEUP);
2631 } else {
2632 err = usbd_device_30_remote_wakeup(udev,
2633 UR_CLEAR_FEATURE);
2634 }
2635 return (err);
2636}
2637
2638static usb_error_t
2639usbd_set_dev_wakeup(struct usb_device *udev)
2640{
2641 usb_error_t err;
2642
2643 if (usb_device_20_compatible(udev)) {
2644 err = usbd_req_set_device_feature(udev,
2645 NULL, UF_DEVICE_REMOTE_WAKEUP);
2646 } else {
2647 err = usbd_device_30_remote_wakeup(udev,
2648 UR_SET_FEATURE);
2649 }
2650 return (err);
2651}
2652
2609/*------------------------------------------------------------------------*
2610 * usb_dev_resume_peer
2611 *
2612 * This function will resume an USB peer and do the required USB
2613 * signalling to get an USB device out of the suspended state.
2614 *------------------------------------------------------------------------*/
2615static void
2616usb_dev_resume_peer(struct usb_device *udev)

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

2704 /* notify all sub-devices about resume */
2705 err = usb_suspend_resume(udev, 0);
2706
2707 usbd_sr_unlock(udev);
2708
2709 /* check if peer has wakeup capability */
2710 if (usb_peer_can_wakeup(udev)) {
2711 /* clear remote wakeup */
2653/*------------------------------------------------------------------------*
2654 * usb_dev_resume_peer
2655 *
2656 * This function will resume an USB peer and do the required USB
2657 * signalling to get an USB device out of the suspended state.
2658 *------------------------------------------------------------------------*/
2659static void
2660usb_dev_resume_peer(struct usb_device *udev)

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

2748 /* notify all sub-devices about resume */
2749 err = usb_suspend_resume(udev, 0);
2750
2751 usbd_sr_unlock(udev);
2752
2753 /* check if peer has wakeup capability */
2754 if (usb_peer_can_wakeup(udev)) {
2755 /* clear remote wakeup */
2712 err = usbd_req_clear_device_feature(udev,
2713 NULL, UF_DEVICE_REMOTE_WAKEUP);
2756 err = usbd_clear_dev_wakeup(udev);
2714 if (err) {
2715 DPRINTFN(0, "Clearing device "
2716 "remote wakeup failed: %s\n",
2717 usbd_errstr(err));
2718 }
2719 }
2720}
2721

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

2770
2771 if (usb_peer_can_wakeup(udev)) {
2772 /*
2773 * This request needs to be done before we set
2774 * "udev->flags.self_suspended":
2775 */
2776
2777 /* allow device to do remote wakeup */
2757 if (err) {
2758 DPRINTFN(0, "Clearing device "
2759 "remote wakeup failed: %s\n",
2760 usbd_errstr(err));
2761 }
2762 }
2763}
2764

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

2813
2814 if (usb_peer_can_wakeup(udev)) {
2815 /*
2816 * This request needs to be done before we set
2817 * "udev->flags.self_suspended":
2818 */
2819
2820 /* allow device to do remote wakeup */
2778 err = usbd_req_set_device_feature(udev,
2779 NULL, UF_DEVICE_REMOTE_WAKEUP);
2821 err = usbd_set_dev_wakeup(udev);
2780 if (err) {
2781 DPRINTFN(0, "Setting device "
2782 "remote wakeup failed\n");
2783 }
2784 }
2785
2786 USB_BUS_LOCK(udev->bus);
2787 /*

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

2797 */
2798 udev->flags.self_suspended = 1;
2799 }
2800 USB_BUS_UNLOCK(udev->bus);
2801
2802 if (err != 0) {
2803 if (usb_peer_can_wakeup(udev)) {
2804 /* allow device to do remote wakeup */
2822 if (err) {
2823 DPRINTFN(0, "Setting device "
2824 "remote wakeup failed\n");
2825 }
2826 }
2827
2828 USB_BUS_LOCK(udev->bus);
2829 /*

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

2839 */
2840 udev->flags.self_suspended = 1;
2841 }
2842 USB_BUS_UNLOCK(udev->bus);
2843
2844 if (err != 0) {
2845 if (usb_peer_can_wakeup(udev)) {
2846 /* allow device to do remote wakeup */
2805 err = usbd_req_clear_device_feature(udev,
2806 NULL, UF_DEVICE_REMOTE_WAKEUP);
2847 err = usbd_clear_dev_wakeup(udev);
2807 if (err) {
2808 DPRINTFN(0, "Setting device "
2809 "remote wakeup failed\n");
2810 }
2811 }
2812
2813 if (udev->flags.usb_mode == USB_MODE_DEVICE) {
2814 /* resume parent HUB first */

--- 151 unchanged lines hidden ---
2848 if (err) {
2849 DPRINTFN(0, "Setting device "
2850 "remote wakeup failed\n");
2851 }
2852 }
2853
2854 if (udev->flags.usb_mode == USB_MODE_DEVICE) {
2855 /* resume parent HUB first */

--- 151 unchanged lines hidden ---