SysFSPCI.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Vector.h>
  8. #include <Kernel/Bus/PCI/Definitions.h>
  9. #include <Kernel/FileSystem/SysFS.h>
  10. namespace Kernel::PCI {
  11. class PCIBusSysFSDirectory final : public SysFSDirectory {
  12. public:
  13. static void initialize();
  14. private:
  15. PCIBusSysFSDirectory();
  16. };
  17. class PCIDeviceSysFSDirectory final : public SysFSDirectory {
  18. public:
  19. static NonnullRefPtr<PCIDeviceSysFSDirectory> create(const SysFSDirectory&, Address);
  20. const Address& address() const { return m_address; }
  21. private:
  22. PCIDeviceSysFSDirectory(const SysFSDirectory&, Address);
  23. Address m_address;
  24. };
  25. class PCIDeviceAttributeSysFSComponent : public SysFSComponent {
  26. public:
  27. static NonnullRefPtr<PCIDeviceAttributeSysFSComponent> create(StringView name, const PCIDeviceSysFSDirectory& device, PCI::RegisterOffset offset, size_t field_bytes_width);
  28. virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const override;
  29. virtual ~PCIDeviceAttributeSysFSComponent() {};
  30. protected:
  31. ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const;
  32. PCIDeviceAttributeSysFSComponent(StringView name, const PCIDeviceSysFSDirectory& device, PCI::RegisterOffset offset, size_t field_bytes_width);
  33. NonnullRefPtr<PCIDeviceSysFSDirectory> m_device;
  34. PCI::RegisterOffset m_offset;
  35. size_t m_field_bytes_width;
  36. };
  37. }