1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-16 23:05:08 +00:00
serenity/Kernel/Bus/USB/EHCI/EHCIController.h
Sönke Holz 06a32b6e16 Kernel/USB: Handle non-page aligned EHCI controller BARs correctly
BARs don't have to be page-aligned. This patch correctly calculates the
needed memory range and register base address in that region.
2024-02-22 07:36:45 +01:00

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;
};
}