Kernel: Device dev and rdev number is done more properly

Also hd* partitions are now 1 indexed instead of 0
This commit is contained in:
Bananymous
2023-04-03 11:43:16 +03:00
parent 86d777e2eb
commit b87dae7e7c
15 changed files with 100 additions and 78 deletions

View File

@@ -20,7 +20,9 @@ namespace Kernel
uint8_t next_device_index() const;
private:
ATAController() = default;
ATAController()
: m_rdev(makedev(DeviceManager::get().get_next_rdev(), 0))
{ }
BAN::ErrorOr<void> initialize(const PCIDevice& device);
private:
@@ -28,20 +30,17 @@ namespace Kernel
friend class ATABus;
public:
virtual ino_t ino() const override { return 0; }
virtual Mode mode() const override { return { Mode::IFCHR }; }
virtual nlink_t nlink() const override { return 1; }
virtual uid_t uid() const override { return 0; }
virtual gid_t gid() const override { return 0; }
virtual off_t size() const override { return 0; }
virtual blksize_t blksize() const override { return 0; }
virtual blkcnt_t blocks() const override { return 0; }
virtual dev_t dev() const override { return DeviceManager::get().dev(); }
virtual dev_t rdev() const override { return 0x8594; }
virtual dev_t rdev() const override { return m_rdev; }
virtual BAN::StringView name() const override { return "hd"sv; }
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) { return BAN::Error::from_errno(ENOTSUP); }
private:
const dev_t m_rdev;
};
}

View File

@@ -9,7 +9,10 @@ namespace Kernel
class ATADevice final : public StorageDevice
{
public:
ATADevice(ATABus* bus) : m_bus(bus) { }
ATADevice(ATABus* bus)
: m_bus(bus)
, m_rdev(makedev(DeviceManager::get().get_next_rdev(), 0))
{ }
BAN::ErrorOr<void> initialize(ATABus::DeviceType, const uint16_t*);
virtual BAN::ErrorOr<void> read_sectors(uint64_t, uint8_t, uint8_t*) override;
@@ -34,22 +37,17 @@ namespace Kernel
friend class ATABus;
public:
virtual ino_t ino() const override { return m_index; }
virtual Mode mode() const override { return { Mode::IFBLK }; }
virtual nlink_t nlink() const override { return 1; }
virtual Mode mode() const override { return { Mode::IFBLK | Mode::IRUSR | Mode::IRGRP }; }
virtual uid_t uid() const override { return 0; }
virtual gid_t gid() const override { return 0; }
virtual off_t size() const override { return 0; }
virtual blksize_t blksize() const override { return sector_size(); }
virtual blkcnt_t blocks() const override { return 0; }
virtual dev_t dev() const override { return m_bus->controller()->dev(); }
virtual dev_t rdev() const override { return 0x5429; }
virtual dev_t rdev() const override { return m_rdev; }
virtual BAN::StringView name() const override { return BAN::StringView(m_device_name, sizeof(m_device_name) - 1); }
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) override;
public:
const dev_t m_rdev;
char m_device_name[4] {};
};

View File

@@ -44,16 +44,10 @@ namespace Kernel
public:
virtual DeviceType device_type() const override { return DeviceType::Partition; }
virtual ino_t ino() const override { return m_index; }
virtual Mode mode() const override { return { Mode::IFBLK | Mode::IRUSR | Mode::IRGRP }; }
virtual nlink_t nlink() const override { return 1; }
virtual uid_t uid() const override { return 0; }
virtual gid_t gid() const override { return 0; }
virtual off_t size() const override { return 0; }
virtual blksize_t blksize() const;
virtual blkcnt_t blocks() const override { return 0; }
virtual dev_t dev() const override;
virtual dev_t rdev() const { return 0x7459; }
virtual dev_t rdev() const override;
virtual BAN::StringView name() const override { return m_device_name; }