mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-06 17:06:31 +00:00
![Liav A](/assets/img/avatar_default.png)
It is starting to get a little messy with how each device can try to add or remove itself to either /sys/dev/block or /sys/dev/char directories. To better do this, we introduce 4 virtual methods to take care of that, so until we ensure all nodes in /sys/dev/block and /sys/dev/char are actual symlinks, we allow the Device base class to call virtual methods upon insertion or before being destroying, so it add itself elegantly to either of these directories or remove itself when needed. For special cases where we need to create symlinks, we have two virtual methods to be called otherwise to do almost the same thing mentioned before, but to use symlinks instead.
35 lines
965 B
C++
35 lines
965 B
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/Devices/Device.h>
|
|
|
|
namespace Kernel {
|
|
|
|
class CharacterDevice : public Device {
|
|
public:
|
|
virtual ~CharacterDevice() override;
|
|
|
|
protected:
|
|
CharacterDevice(MajorNumber major, MinorNumber minor)
|
|
: Device(major, minor)
|
|
{
|
|
}
|
|
|
|
virtual void after_inserting_add_symlink_to_device_identifier_directory() override final;
|
|
virtual void before_will_be_destroyed_remove_symlink_from_device_identifier_directory() override final;
|
|
|
|
private:
|
|
virtual bool is_character_device() const final { return true; }
|
|
|
|
// FIXME: These methods will be eventually removed after all nodes in /sys/dev/char/ are symlinks
|
|
virtual void after_inserting_add_to_device_identifier_directory() override final;
|
|
virtual void before_will_be_destroyed_remove_from_device_identifier_directory() override final;
|
|
};
|
|
|
|
}
|