mirror of
https://github.com/RGBCube/serenity
synced 2025-05-16 23:05:08 +00:00

BARs don't have to be page-aligned. This patch correctly calculates the needed memory range and register base address in that region.
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2023, Leon Albrecht <leon.a@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
#include <Kernel/Bus/PCI/Device.h>
|
|
#include <Kernel/Bus/USB/EHCI/Registers.h>
|
|
#include <Kernel/Bus/USB/USBController.h>
|
|
#include <Kernel/Memory/TypedMapping.h>
|
|
|
|
namespace Kernel::USB::EHCI {
|
|
|
|
class EHCIController : public USBController
|
|
, public PCI::Device {
|
|
public:
|
|
static ErrorOr<NonnullLockRefPtr<EHCIController>> 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<void> initialize() override;
|
|
|
|
virtual ErrorOr<void> reset() override { return ENOTSUP; }
|
|
virtual ErrorOr<void> stop() override { return ENOTSUP; }
|
|
virtual ErrorOr<void> start() override { return ENOTSUP; }
|
|
|
|
virtual void cancel_async_transfer(NonnullLockRefPtr<Transfer>) override {};
|
|
virtual ErrorOr<size_t> submit_control_transfer(Transfer&) override { return ENOTSUP; }
|
|
virtual ErrorOr<size_t> submit_bulk_transfer(Transfer&) override { return ENOTSUP; }
|
|
virtual ErrorOr<void> submit_async_interrupt_transfer(NonnullLockRefPtr<Transfer>, u16) override { return ENOTSUP; }
|
|
|
|
private:
|
|
EHCIController(PCI::DeviceIdentifier const& pci_device_identifier, NonnullOwnPtr<Memory::Region> register_region, VirtualAddress register_base_address);
|
|
|
|
NonnullOwnPtr<Memory::Region> m_register_region;
|
|
CapabilityRegisters const* m_cap_regs;
|
|
OperationalRegisters volatile* m_op_regs;
|
|
};
|
|
|
|
}
|