/* * Copyright (c) 2023, Leon Albrecht * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Kernel::USB::EHCI { class EHCIController : public USBController , public PCI::Device { public: static ErrorOr> try_to_initialize(PCI::DeviceIdentifier const& pci_device_identifier); virtual ~EHCIController() override = default; // ^PCI::Device virtual StringView device_name() const override { return "EHCI"sv; } // ^USBController virtual ErrorOr initialize() override; virtual ErrorOr reset() override { return ENOTSUP; } virtual ErrorOr stop() override { return ENOTSUP; } virtual ErrorOr start() override { return ENOTSUP; } virtual void cancel_async_transfer(NonnullLockRefPtr) override {}; virtual ErrorOr submit_control_transfer(Transfer&) override { return ENOTSUP; } virtual ErrorOr submit_bulk_transfer(Transfer&) override { return ENOTSUP; } virtual ErrorOr submit_async_interrupt_transfer(NonnullLockRefPtr, u16) override { return ENOTSUP; } private: EHCIController(PCI::DeviceIdentifier const& pci_device_identifier, NonnullOwnPtr register_region, VirtualAddress register_base_address); NonnullOwnPtr m_register_region; CapabilityRegisters const* m_cap_regs; OperationalRegisters volatile* m_op_regs; }; }