mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 00:57:36 +00:00
Kernel/SysFS: Split bulky SysFSPCI file into separate files
This commit is contained in:
parent
e488245234
commit
99bac4f34f
8 changed files with 138 additions and 74 deletions
|
@ -9,7 +9,7 @@
|
||||||
#include <Kernel/Bus/PCI/Access.h>
|
#include <Kernel/Bus/PCI/Access.h>
|
||||||
#include <Kernel/Bus/PCI/Initializer.h>
|
#include <Kernel/Bus/PCI/Initializer.h>
|
||||||
#include <Kernel/CommandLine.h>
|
#include <Kernel/CommandLine.h>
|
||||||
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/SysFSPCI.h>
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.h>
|
||||||
#include <Kernel/Firmware/ACPI/Parser.h>
|
#include <Kernel/Firmware/ACPI/Parser.h>
|
||||||
#include <Kernel/Panic.h>
|
#include <Kernel/Panic.h>
|
||||||
#include <Kernel/Sections.h>
|
#include <Kernel/Sections.h>
|
||||||
|
@ -59,7 +59,7 @@ UNMAP_AFTER_INIT void initialize()
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
PCI::PCIBusSysFSDirectory::initialize();
|
PCIBusSysFSDirectory::initialize();
|
||||||
|
|
||||||
MUST(PCI::enumerate([&](DeviceIdentifier const& device_identifier) {
|
MUST(PCI::enumerate([&](DeviceIdentifier const& device_identifier) {
|
||||||
dmesgln("{} {}", device_identifier.address(), device_identifier.hardware_id());
|
dmesgln("{} {}", device_identifier.address(), device_identifier.hardware_id());
|
||||||
|
|
|
@ -143,7 +143,9 @@ set(KERNEL_SOURCES
|
||||||
FileSystem/ProcFS.cpp
|
FileSystem/ProcFS.cpp
|
||||||
FileSystem/SysFS.cpp
|
FileSystem/SysFS.cpp
|
||||||
FileSystem/SysFS/Component.cpp
|
FileSystem/SysFS/Component.cpp
|
||||||
FileSystem/SysFS/Subsystems/Bus/PCI/SysFSPCI.cpp
|
FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.cpp
|
||||||
|
FileSystem/SysFS/Subsystems/Bus/PCI/DeviceAttribute.cpp
|
||||||
|
FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.cpp
|
||||||
FileSystem/SysFS/Subsystems/Bus/USB/BusDirectory.cpp
|
FileSystem/SysFS/Subsystems/Bus/USB/BusDirectory.cpp
|
||||||
FileSystem/SysFS/Subsystems/Bus/USB/DeviceInformation.cpp
|
FileSystem/SysFS/Subsystems/Bus/USB/DeviceInformation.cpp
|
||||||
FileSystem/SysFS/Subsystems/Firmware/BIOS.cpp
|
FileSystem/SysFS/Subsystems/Firmware/BIOS.cpp
|
||||||
|
|
31
Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.cpp
Normal file
31
Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.cpp
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Kernel/Bus/PCI/API.h>
|
||||||
|
#include <Kernel/Bus/PCI/Access.h>
|
||||||
|
#include <Kernel/Debug.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.h>
|
||||||
|
#include <Kernel/Sections.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
UNMAP_AFTER_INIT void PCIBusSysFSDirectory::initialize()
|
||||||
|
{
|
||||||
|
auto pci_directory = adopt_ref(*new (nothrow) PCIBusSysFSDirectory());
|
||||||
|
SysFSComponentRegistry::the().register_new_bus_directory(pci_directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNMAP_AFTER_INIT PCIBusSysFSDirectory::PCIBusSysFSDirectory()
|
||||||
|
: SysFSDirectory(SysFSComponentRegistry::the().buses_directory())
|
||||||
|
{
|
||||||
|
MUST(PCI::enumerate([&](PCI::DeviceIdentifier const& device_identifier) {
|
||||||
|
auto pci_device = PCIDeviceSysFSDirectory::create(*this, device_identifier.address());
|
||||||
|
m_components.append(pci_device);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
23
Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.h
Normal file
23
Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Kernel/Bus/PCI/Definitions.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
class PCIBusSysFSDirectory final : public SysFSDirectory {
|
||||||
|
public:
|
||||||
|
static void initialize();
|
||||||
|
virtual StringView name() const override { return "pci"sv; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
PCIBusSysFSDirectory();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -7,54 +7,10 @@
|
||||||
#include <Kernel/Bus/PCI/API.h>
|
#include <Kernel/Bus/PCI/API.h>
|
||||||
#include <Kernel/Bus/PCI/Access.h>
|
#include <Kernel/Bus/PCI/Access.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/SysFSPCI.h>
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceAttribute.h>
|
||||||
#include <Kernel/Sections.h>
|
#include <Kernel/Sections.h>
|
||||||
|
|
||||||
namespace Kernel::PCI {
|
namespace Kernel {
|
||||||
|
|
||||||
UNMAP_AFTER_INIT NonnullRefPtr<PCIDeviceSysFSDirectory> PCIDeviceSysFSDirectory::create(SysFSDirectory const& parent_directory, Address address)
|
|
||||||
{
|
|
||||||
// FIXME: Handle allocation failure gracefully
|
|
||||||
auto device_name = MUST(KString::formatted("{:04x}:{:02x}:{:02x}.{}", address.domain(), address.bus(), address.device(), address.function()));
|
|
||||||
return adopt_ref(*new (nothrow) PCIDeviceSysFSDirectory(move(device_name), parent_directory, address));
|
|
||||||
}
|
|
||||||
|
|
||||||
UNMAP_AFTER_INIT PCIDeviceSysFSDirectory::PCIDeviceSysFSDirectory(NonnullOwnPtr<KString> device_directory_name, SysFSDirectory const& parent_directory, Address address)
|
|
||||||
: SysFSDirectory(parent_directory)
|
|
||||||
, m_address(address)
|
|
||||||
, m_device_directory_name(move(device_directory_name))
|
|
||||||
{
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::VENDOR_ID, 2));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::DEVICE_ID, 2));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::CLASS, 1));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::SUBCLASS, 1));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::REVISION_ID, 1));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::PROG_IF, 1));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::SUBSYSTEM_VENDOR_ID, 2));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::SUBSYSTEM_ID, 2));
|
|
||||||
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR0, 4));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR1, 4));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR2, 4));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR3, 4));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR4, 4));
|
|
||||||
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR5, 4));
|
|
||||||
}
|
|
||||||
|
|
||||||
UNMAP_AFTER_INIT void PCIBusSysFSDirectory::initialize()
|
|
||||||
{
|
|
||||||
auto pci_directory = adopt_ref(*new (nothrow) PCIBusSysFSDirectory());
|
|
||||||
SysFSComponentRegistry::the().register_new_bus_directory(pci_directory);
|
|
||||||
}
|
|
||||||
|
|
||||||
UNMAP_AFTER_INIT PCIBusSysFSDirectory::PCIBusSysFSDirectory()
|
|
||||||
: SysFSDirectory(SysFSComponentRegistry::the().buses_directory())
|
|
||||||
{
|
|
||||||
MUST(PCI::enumerate([&](DeviceIdentifier const& device_identifier) {
|
|
||||||
auto pci_device = PCI::PCIDeviceSysFSDirectory::create(*this, device_identifier.address());
|
|
||||||
m_components.append(pci_device);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
StringView PCIDeviceAttributeSysFSComponent::name() const
|
StringView PCIDeviceAttributeSysFSComponent::name() const
|
||||||
{
|
{
|
|
@ -9,32 +9,9 @@
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include <Kernel/Bus/PCI/Definitions.h>
|
#include <Kernel/Bus/PCI/Definitions.h>
|
||||||
#include <Kernel/FileSystem/SysFS.h>
|
#include <Kernel/FileSystem/SysFS.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.h>
|
||||||
|
|
||||||
namespace Kernel::PCI {
|
namespace Kernel {
|
||||||
|
|
||||||
class PCIBusSysFSDirectory final : public SysFSDirectory {
|
|
||||||
public:
|
|
||||||
static void initialize();
|
|
||||||
virtual StringView name() const override { return "pci"sv; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
PCIBusSysFSDirectory();
|
|
||||||
};
|
|
||||||
|
|
||||||
class PCIDeviceSysFSDirectory final : public SysFSDirectory {
|
|
||||||
public:
|
|
||||||
static NonnullRefPtr<PCIDeviceSysFSDirectory> create(SysFSDirectory const&, Address);
|
|
||||||
Address const& address() const { return m_address; }
|
|
||||||
|
|
||||||
virtual StringView name() const override { return m_device_directory_name->view(); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
PCIDeviceSysFSDirectory(NonnullOwnPtr<KString> device_directory_name, SysFSDirectory const&, Address);
|
|
||||||
|
|
||||||
Address m_address;
|
|
||||||
|
|
||||||
NonnullOwnPtr<KString> m_device_directory_name;
|
|
||||||
};
|
|
||||||
|
|
||||||
class PCIDeviceAttributeSysFSComponent : public SysFSComponent {
|
class PCIDeviceAttributeSysFSComponent : public SysFSComponent {
|
||||||
public:
|
public:
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Kernel/Bus/PCI/API.h>
|
||||||
|
#include <Kernel/Bus/PCI/Access.h>
|
||||||
|
#include <Kernel/Debug.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceAttribute.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.h>
|
||||||
|
#include <Kernel/Sections.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
UNMAP_AFTER_INIT NonnullRefPtr<PCIDeviceSysFSDirectory> PCIDeviceSysFSDirectory::create(SysFSDirectory const& parent_directory, PCI::Address address)
|
||||||
|
{
|
||||||
|
// FIXME: Handle allocation failure gracefully
|
||||||
|
auto device_name = MUST(KString::formatted("{:04x}:{:02x}:{:02x}.{}", address.domain(), address.bus(), address.device(), address.function()));
|
||||||
|
return adopt_ref(*new (nothrow) PCIDeviceSysFSDirectory(move(device_name), parent_directory, address));
|
||||||
|
}
|
||||||
|
|
||||||
|
UNMAP_AFTER_INIT PCIDeviceSysFSDirectory::PCIDeviceSysFSDirectory(NonnullOwnPtr<KString> device_directory_name, SysFSDirectory const& parent_directory, PCI::Address address)
|
||||||
|
: SysFSDirectory(parent_directory)
|
||||||
|
, m_address(address)
|
||||||
|
, m_device_directory_name(move(device_directory_name))
|
||||||
|
{
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::VENDOR_ID, 2));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::DEVICE_ID, 2));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::CLASS, 1));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::SUBCLASS, 1));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::REVISION_ID, 1));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::PROG_IF, 1));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::SUBSYSTEM_VENDOR_ID, 2));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::SUBSYSTEM_ID, 2));
|
||||||
|
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR0, 4));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR1, 4));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR2, 4));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR3, 4));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR4, 4));
|
||||||
|
m_components.append(PCIDeviceAttributeSysFSComponent::create(*this, PCI::RegisterOffset::BAR5, 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.h
Normal file
30
Kernel/FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Kernel/Bus/PCI/Definitions.h>
|
||||||
|
#include <Kernel/FileSystem/SysFS.h>
|
||||||
|
#include <Kernel/KString.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
class PCIDeviceSysFSDirectory final : public SysFSDirectory {
|
||||||
|
public:
|
||||||
|
static NonnullRefPtr<PCIDeviceSysFSDirectory> create(SysFSDirectory const&, PCI::Address);
|
||||||
|
PCI::Address const& address() const { return m_address; }
|
||||||
|
|
||||||
|
virtual StringView name() const override { return m_device_directory_name->view(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
PCIDeviceSysFSDirectory(NonnullOwnPtr<KString> device_directory_name, SysFSDirectory const&, PCI::Address);
|
||||||
|
|
||||||
|
PCI::Address m_address;
|
||||||
|
|
||||||
|
NonnullOwnPtr<KString> m_device_directory_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue