mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 07:57:46 +00:00
Kernel/USB: Split SysFS code into its own file
This makes it controller agnostic and allows us to access it from the USB hub code. The copyright says "Liav A." because git blame says he wrote this.
This commit is contained in:
parent
b6a2bbba3b
commit
872c75ac44
5 changed files with 187 additions and 150 deletions
52
Kernel/Bus/USB/SysFSUSB.h
Normal file
52
Kernel/Bus/USB/SysFSUSB.h
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Kernel/Bus/USB/USBDevice.h>
|
||||
#include <Kernel/FileSystem/SysFS.h>
|
||||
|
||||
namespace Kernel::USB {
|
||||
|
||||
class SysFSUSBDeviceInformation : public SysFSComponent {
|
||||
friend class SysFSUSBBusDirectory;
|
||||
|
||||
public:
|
||||
virtual ~SysFSUSBDeviceInformation() override;
|
||||
|
||||
static NonnullRefPtr<SysFSUSBDeviceInformation> create(USB::Device&);
|
||||
|
||||
RefPtr<USB::Device> device() const { return m_device; }
|
||||
|
||||
protected:
|
||||
explicit SysFSUSBDeviceInformation(USB::Device& device);
|
||||
|
||||
virtual KResultOr<size_t> read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, FileDescription*) const override;
|
||||
|
||||
IntrusiveListNode<SysFSUSBDeviceInformation, RefPtr<SysFSUSBDeviceInformation>> m_list_node;
|
||||
|
||||
NonnullRefPtr<USB::Device> m_device;
|
||||
};
|
||||
|
||||
class SysFSUSBBusDirectory final : public SysFSDirectory {
|
||||
public:
|
||||
static void initialize();
|
||||
void plug(USB::Device&);
|
||||
void unplug(USB::Device&);
|
||||
|
||||
virtual KResult traverse_as_directory(unsigned, Function<bool(FileSystem::DirectoryEntryView const&)>) const override;
|
||||
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
||||
|
||||
private:
|
||||
explicit SysFSUSBBusDirectory(SysFSBusDirectory&);
|
||||
|
||||
RefPtr<SysFSUSBDeviceInformation> device_node_for(USB::Device& device);
|
||||
|
||||
IntrusiveList<SysFSUSBDeviceInformation, RefPtr<SysFSUSBDeviceInformation>, &SysFSUSBDeviceInformation::m_list_node> m_device_nodes;
|
||||
mutable SpinLock<u8> m_lock;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue