git: 1928debe1a47 - main - usb: Add get_ext_port_status helper function

From: ShengYi Hung <aokblast_at_FreeBSD.org>
Date: Mon, 02 Nov 2026 03:02:50 UTC
The branch main has been updated by aokblast:

URL: https://cgit.FreeBSD.org/src/commit/?id=1928debe1a47e3a7411a1c09e46ea910f73950d2

commit 1928debe1a47e3a7411a1c09e46ea910f73950d2
Author:     ShengYi Hung <aokblast@FreeBSD.org>
AuthorDate: 2026-05-22 16:23:07 +0000
Commit:     ShengYi Hung <aokblast@FreeBSD.org>
CommitDate: 2026-11-02 03:02:11 +0000

    usb: Add get_ext_port_status helper function
    
    usbd_req_get_ext_port_status() wraps the Get Extended Port Status
    request.
    
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D57201
---
 sys/dev/usb/usb_request.c | 23 +++++++++++++++++++++++
 sys/dev/usb/usb_request.h |  2 ++
 2 files changed, 25 insertions(+)

diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c
index 879d57f00eec..df6dadae541b 100644
--- a/sys/dev/usb/usb_request.c
+++ b/sys/dev/usb/usb_request.c
@@ -1624,6 +1624,29 @@ usbd_req_get_port_status(struct usb_device *udev, struct mtx *mtx,
 	return (usbd_do_request_flags(udev, mtx, &req, ps, 0, NULL, 1000));
 }
 
+/*------------------------------------------------------------------------*
+ *	usbd_req_get_ext_port_status
+ *
+ * Returns:
+ *    0: Success
+ * Else: Failure
+ *------------------------------------------------------------------------*/
+usb_error_t
+usbd_req_get_ext_port_status(struct usb_device *udev, struct mtx *mtx,
+    struct usb_ext_status *ps, uint8_t port)
+{
+	struct usb_device_request req;
+
+	req.bmRequestType = UT_READ_CLASS_OTHER;
+	req.bRequest = UR_GET_STATUS;
+	USETW(req.wValue, 2);
+	req.wIndex[0] = port;
+	req.wIndex[1] = 0;
+	USETW(req.wLength, sizeof(*ps));
+
+	return (usbd_do_request_flags(udev, mtx, &req, ps, 0, NULL, 1000));
+}
+
 /*------------------------------------------------------------------------*
  *	usbd_req_clear_hub_feature
  *
diff --git a/sys/dev/usb/usb_request.h b/sys/dev/usb/usb_request.h
index 56a4003e8bae..f7ccd84eb69c 100644
--- a/sys/dev/usb/usb_request.h
+++ b/sys/dev/usb/usb_request.h
@@ -64,6 +64,8 @@ usb_error_t usbd_req_get_hub_status(struct usb_device *udev, struct mtx *mtx,
 		    struct usb_hub_status *st);
 usb_error_t usbd_req_get_port_status(struct usb_device *udev, struct mtx *mtx,
 		    struct usb_port_status *ps, uint8_t port);
+usb_error_t usbd_req_get_ext_port_status(struct usb_device *udev,
+    struct mtx *mtx, struct usb_ext_status *ps, uint8_t port);
 usb_error_t usbd_req_reset_port(struct usb_device *udev, struct mtx *mtx,
 		    uint8_t port);
 usb_error_t usbd_req_warm_reset_port(struct usb_device *udev,