/* * Copyright (c) 2021, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Kernel::PCI { class PCIBusSysFSDirectory final : public SysFSDirectory { public: static void initialize(); private: PCIBusSysFSDirectory(); }; class PCIDeviceSysFSDirectory final : public SysFSDirectory { public: static NonnullRefPtr create(const SysFSDirectory&, Address); const Address& address() const { return m_address; } private: PCIDeviceSysFSDirectory(const SysFSDirectory&, Address); Address m_address; }; class PCIDeviceAttributeSysFSComponent : public SysFSComponent { public: static NonnullRefPtr create(String name, const PCIDeviceSysFSDirectory& device, PCI::RegisterOffset offset, size_t field_bytes_width); virtual ErrorOr read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const override; virtual ~PCIDeviceAttributeSysFSComponent() {}; protected: ErrorOr> try_to_generate_buffer() const; PCIDeviceAttributeSysFSComponent(String name, const PCIDeviceSysFSDirectory& device, PCI::RegisterOffset offset, size_t field_bytes_width); NonnullRefPtr m_device; PCI::RegisterOffset m_offset; size_t m_field_bytes_width; }; }