mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:37:36 +00:00
Kernel: Make major and minor numbers to be DistinctNumerics
This helps avoid confusion in general, and make constructors, methods and code patterns much more clean and understandable.
This commit is contained in:
parent
6d14940053
commit
9eb08bdb0f
24 changed files with 70 additions and 52 deletions
|
@ -64,7 +64,7 @@ public:
|
|||
virtual void start_request(AsyncBlockDeviceRequest&) = 0;
|
||||
|
||||
protected:
|
||||
BlockDevice(unsigned major, unsigned minor, size_t block_size = PAGE_SIZE)
|
||||
BlockDevice(MajorNumber major, MinorNumber minor, size_t block_size = PAGE_SIZE)
|
||||
: Device(major, minor)
|
||||
, m_block_size(block_size)
|
||||
{
|
||||
|
|
|
@ -15,7 +15,7 @@ public:
|
|||
virtual ~CharacterDevice() override;
|
||||
|
||||
protected:
|
||||
CharacterDevice(unsigned major, unsigned minor)
|
||||
CharacterDevice(MajorNumber major, MinorNumber minor)
|
||||
: Device(major, minor)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ RefPtr<SysFSComponent> SysFSCharacterDevicesDirectory::lookup(StringView name)
|
|||
});
|
||||
}
|
||||
|
||||
Device::Device(unsigned major, unsigned minor)
|
||||
Device::Device(MajorNumber major, MinorNumber minor)
|
||||
: m_major(major)
|
||||
, m_minor(minor)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <AK/HashMap.h>
|
||||
#include <AK/RefPtr.h>
|
||||
#include <Kernel/Devices/AsyncDeviceRequest.h>
|
||||
#include <Kernel/FileSystem/DeviceFileTypes.h>
|
||||
#include <Kernel/FileSystem/File.h>
|
||||
#include <Kernel/FileSystem/SysFS.h>
|
||||
#include <Kernel/Locking/Mutex.h>
|
||||
|
@ -37,8 +38,8 @@ protected:
|
|||
public:
|
||||
virtual ~Device() override;
|
||||
|
||||
unsigned major() const { return m_major; }
|
||||
unsigned minor() const { return m_minor; }
|
||||
MajorNumber major() const { return m_major; }
|
||||
MinorNumber minor() const { return m_minor; }
|
||||
|
||||
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(const OpenFileDescription&) const override;
|
||||
|
||||
|
@ -63,13 +64,13 @@ public:
|
|||
}
|
||||
|
||||
protected:
|
||||
Device(unsigned major, unsigned minor);
|
||||
Device(MajorNumber major, MinorNumber minor);
|
||||
void set_uid(UserID uid) { m_uid = uid; }
|
||||
void set_gid(GroupID gid) { m_gid = gid; }
|
||||
|
||||
private:
|
||||
unsigned m_major { 0 };
|
||||
unsigned m_minor { 0 };
|
||||
MajorNumber m_major { 0 };
|
||||
MinorNumber m_minor { 0 };
|
||||
UserID m_uid { 0 };
|
||||
GroupID m_gid { 0 };
|
||||
|
||||
|
|
|
@ -42,10 +42,10 @@ DeviceManagement& DeviceManagement::the()
|
|||
return *s_the;
|
||||
}
|
||||
|
||||
Device* DeviceManagement::get_device(unsigned major, unsigned minor)
|
||||
Device* DeviceManagement::get_device(MajorNumber major, MinorNumber minor)
|
||||
{
|
||||
return m_devices.with_exclusive([&](auto& map) -> Device* {
|
||||
auto it = map.find(encoded_device(major, minor));
|
||||
auto it = map.find(encoded_device(major.value(), minor.value()));
|
||||
if (it == map.end())
|
||||
return nullptr;
|
||||
return it->value;
|
||||
|
@ -54,7 +54,7 @@ Device* DeviceManagement::get_device(unsigned major, unsigned minor)
|
|||
|
||||
void DeviceManagement::before_device_removal(Badge<Device>, Device& device)
|
||||
{
|
||||
u32 device_id = encoded_device(device.major(), device.minor());
|
||||
u64 device_id = encoded_device(device.major(), device.minor());
|
||||
m_devices.with_exclusive([&](auto& map) -> void {
|
||||
VERIFY(map.contains(device_id));
|
||||
map.remove(encoded_device(device.major(), device.minor()));
|
||||
|
@ -63,7 +63,7 @@ void DeviceManagement::before_device_removal(Badge<Device>, Device& device)
|
|||
|
||||
void DeviceManagement::after_inserting_device(Badge<Device>, Device& device)
|
||||
{
|
||||
u32 device_id = encoded_device(device.major(), device.minor());
|
||||
u64 device_id = encoded_device(device.major(), device.minor());
|
||||
m_devices.with_exclusive([&](auto& map) -> void {
|
||||
if (map.contains(device_id)) {
|
||||
dbgln("Already registered {},{}: {}", device.major(), device.minor(), device.class_name());
|
||||
|
|
|
@ -42,7 +42,7 @@ public:
|
|||
void before_device_removal(Badge<Device>, Device&);
|
||||
|
||||
void for_each(Function<void(Device&)>);
|
||||
Device* get_device(unsigned major, unsigned minor);
|
||||
Device* get_device(MajorNumber major, MinorNumber minor);
|
||||
|
||||
NullDevice const& null_device() const;
|
||||
NullDevice& null_device();
|
||||
|
@ -63,7 +63,7 @@ private:
|
|||
RefPtr<ConsoleDevice> m_console_device;
|
||||
// FIXME: Once we have a singleton for managing many sound cards, remove this from here
|
||||
NonnullRefPtrVector<CharacterDevice, 1> m_audio_devices;
|
||||
MutexProtected<HashMap<u32, Device*>> m_devices;
|
||||
MutexProtected<HashMap<u64, Device*>> m_devices;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ public:
|
|||
virtual void enable_interrupts() = 0;
|
||||
|
||||
protected:
|
||||
HIDDevice(unsigned major, unsigned minor)
|
||||
HIDDevice(MajorNumber major, MinorNumber minor)
|
||||
: CharacterDevice(major, minor)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue