/* * Copyright (c) 2021, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Kernel::USB { class USBController : public RefCounted { public: virtual ~USBController() = default; virtual KResult initialize() = 0; virtual KResult reset() = 0; virtual KResult stop() = 0; virtual KResult start() = 0; virtual KResultOr submit_control_transfer(Transfer&) = 0; virtual RefPtr const get_device_at_port(USB::Device::PortNumber) = 0; virtual RefPtr const get_device_from_address(u8) = 0; u8 allocate_address(); private: u8 m_next_device_index { 1 }; IntrusiveListNode> m_controller_list_node; public: using List = IntrusiveList, &USBController::m_controller_list_node>; }; }