From a1df8a1896db44472f6a92166dfc86bf7dbcd373 Mon Sep 17 00:00:00 2001 From: Jesse Buhagiar Date: Mon, 11 Apr 2022 22:00:27 +1000 Subject: [PATCH] Kernel/USB: Add `control_transfer()` function `USB::Device` Some other parts of the USB stack may require us to perform a control transfer. Instead of abusing `friend` to expose the default pipe, let's just expose it via a function. --- Kernel/Bus/USB/USBDevice.cpp | 5 +++++ Kernel/Bus/USB/USBDevice.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/Kernel/Bus/USB/USBDevice.cpp b/Kernel/Bus/USB/USBDevice.cpp index 4e21a3ca69..695b9c4b3d 100644 --- a/Kernel/Bus/USB/USBDevice.cpp +++ b/Kernel/Bus/USB/USBDevice.cpp @@ -138,4 +138,9 @@ ErrorOr Device::enumerate_device() return {}; } +ErrorOr Device::control_transfer(u8 request_type, u8 request, u16 value, u16 index, u16 length, void* data) +{ + return TRY(m_default_pipe->control_transfer(request_type, request, value, index, length, data)); +} + } diff --git a/Kernel/Bus/USB/USBDevice.h b/Kernel/Bus/USB/USBDevice.h index e2a1aac4ff..1adc4c93c8 100644 --- a/Kernel/Bus/USB/USBDevice.h +++ b/Kernel/Bus/USB/USBDevice.h @@ -47,6 +47,8 @@ public: USBController& controller() { return *m_controller; } USBController const& controller() const { return *m_controller; } + ErrorOr control_transfer(u8 request_type, u8 request, u16 value, u16 index, u16 length, void* data); + protected: Device(NonnullRefPtr controller, u8 address, u8 port, DeviceSpeed speed, NonnullOwnPtr default_pipe);