1
Fork 0
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:
Liav A 2021-12-23 20:08:18 +02:00 committed by Andreas Kling
parent 6d14940053
commit 9eb08bdb0f
24 changed files with 70 additions and 52 deletions

View file

@ -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)
{

View file

@ -15,7 +15,7 @@ public:
virtual ~CharacterDevice() override;
protected:
CharacterDevice(unsigned major, unsigned minor)
CharacterDevice(MajorNumber major, MinorNumber minor)
: Device(major, minor)
{
}

View file

@ -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)
{

View file

@ -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 };

View file

@ -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());

View file

@ -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;
};
}

View file

@ -23,7 +23,7 @@ public:
virtual void enable_interrupts() = 0;
protected:
HIDDevice(unsigned major, unsigned minor)
HIDDevice(MajorNumber major, MinorNumber minor)
: CharacterDevice(major, minor)
{
}