Skip to content

Commit b59e45e

Browse files
supercomputer7awesomekling
authored andcommitted
Kernel: Use global mechanism to determine minor number of Storage Device
1 parent 566c10b commit b59e45e

File tree

7 files changed

+31
-8
lines changed

7 files changed

+31
-8
lines changed

Kernel/Storage/IDEChannel.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,9 +381,9 @@ UNMAP_AFTER_INIT void IDEChannel::detect_disks()
381381
dbgln("IDEChannel: {} {} device found: Type={}, Name={}, C/H/Spt={}/{}/{}, Capabilities=0x{:04x}", channel_type_string(), channel_string(i), interface_type == PATADiskDevice::InterfaceType::ATA ? "ATA" : "ATAPI", ((char*)bbuf.data() + 54), cyls, heads, spt, capabilities);
382382

383383
if (i == 0) {
384-
m_master = PATADiskDevice::create(m_parent_controller, *this, PATADiskDevice::DriveType::Master, interface_type, cyls, heads, spt, capabilities, 3, (m_channel_type == ChannelType::Primary) ? 0 : 2);
384+
m_master = PATADiskDevice::create(m_parent_controller, *this, PATADiskDevice::DriveType::Master, interface_type, cyls, heads, spt, capabilities);
385385
} else {
386-
m_slave = PATADiskDevice::create(m_parent_controller, *this, PATADiskDevice::DriveType::Slave, interface_type, cyls, heads, spt, capabilities, 3, (m_channel_type == ChannelType::Primary) ? 1 : 3);
386+
m_slave = PATADiskDevice::create(m_parent_controller, *this, PATADiskDevice::DriveType::Slave, interface_type, cyls, heads, spt, capabilities);
387387
}
388388
}
389389
}

Kernel/Storage/PATADiskDevice.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333

3434
namespace Kernel {
3535

36-
UNMAP_AFTER_INIT NonnullRefPtr<PATADiskDevice> PATADiskDevice::create(const IDEController& controller, IDEChannel& channel, DriveType type, InterfaceType interface_type, u16 cylinders, u16 heads, u16 spt, u16 capabilities, int major, int minor)
36+
UNMAP_AFTER_INIT NonnullRefPtr<PATADiskDevice> PATADiskDevice::create(const IDEController& controller, IDEChannel& channel, DriveType type, InterfaceType interface_type, u16 cylinders, u16 heads, u16 spt, u16 capabilities)
3737
{
38-
return adopt(*new PATADiskDevice(controller, channel, type, interface_type, cylinders, heads, spt, capabilities, major, minor));
38+
return adopt(*new PATADiskDevice(controller, channel, type, interface_type, cylinders, heads, spt, capabilities));
3939
}
4040

41-
UNMAP_AFTER_INIT PATADiskDevice::PATADiskDevice(const IDEController& controller, IDEChannel& channel, DriveType type, InterfaceType interface_type, u16 cylinders, u16 heads, u16 spt, u16 capabilities, int major, int minor)
42-
: StorageDevice(controller, major, minor, 512, 0)
41+
UNMAP_AFTER_INIT PATADiskDevice::PATADiskDevice(const IDEController& controller, IDEChannel& channel, DriveType type, InterfaceType interface_type, u16 cylinders, u16 heads, u16 spt, u16 capabilities)
42+
: StorageDevice(controller, 512, 0)
4343
, m_cylinders(cylinders)
4444
, m_heads(heads)
4545
, m_sectors_per_track(spt)

Kernel/Storage/PATADiskDevice.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class PATADiskDevice final : public StorageDevice {
5757
};
5858

5959
public:
60-
static NonnullRefPtr<PATADiskDevice> create(const IDEController&, IDEChannel&, DriveType, InterfaceType, u16, u16, u16, u16, int major, int minor);
60+
static NonnullRefPtr<PATADiskDevice> create(const IDEController&, IDEChannel&, DriveType, InterfaceType, u16, u16, u16, u16);
6161
virtual ~PATADiskDevice() override;
6262

6363
// ^StorageDevice
@@ -69,7 +69,7 @@ class PATADiskDevice final : public StorageDevice {
6969
virtual String device_name() const override;
7070

7171
private:
72-
PATADiskDevice(const IDEController&, IDEChannel&, DriveType, InterfaceType, u16, u16, u16, u16, int major, int minor);
72+
PATADiskDevice(const IDEController&, IDEChannel&, DriveType, InterfaceType, u16, u16, u16, u16);
7373

7474
// ^DiskDevice
7575
virtual const char* class_name() const override;

Kernel/Storage/StorageDevice.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,17 @@
2929
#include <Kernel/Debug.h>
3030
#include <Kernel/FileSystem/FileDescription.h>
3131
#include <Kernel/Storage/StorageDevice.h>
32+
#include <Kernel/Storage/StorageManagement.h>
3233

3334
namespace Kernel {
3435

36+
StorageDevice::StorageDevice(const StorageController& controller, size_t sector_size, size_t max_addressable_block)
37+
: BlockDevice(StorageManagement::major_number(), StorageManagement::minor_number(), sector_size)
38+
, m_storage_controller(controller)
39+
, m_max_addressable_block(max_addressable_block)
40+
{
41+
}
42+
3543
StorageDevice::StorageDevice(const StorageController& controller, int major, int minor, size_t sector_size, size_t max_addressable_block)
3644
: BlockDevice(major, minor, sector_size)
3745
, m_storage_controller(controller)

Kernel/Storage/StorageDevice.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class StorageDevice : public BlockDevice {
6161
virtual mode_t required_mode() const override { return 0600; }
6262

6363
protected:
64+
StorageDevice(const StorageController&, size_t, size_t);
6465
StorageDevice(const StorageController&, int, int, size_t, size_t);
6566
// ^DiskDevice
6667
virtual const char* class_name() const override;

Kernel/Storage/StorageManagement.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@
4040
namespace Kernel {
4141

4242
static StorageManagement* s_the;
43+
static size_t s_device_minor_number;
4344

4445
UNMAP_AFTER_INIT StorageManagement::StorageManagement(String boot_argument, bool force_pio)
4546
: m_boot_argument(boot_argument)
4647
, m_controllers(enumerate_controllers(force_pio))
4748
, m_storage_devices(enumerate_storage_devices())
4849
, m_disk_partitions(enumerate_disk_partitions())
4950
{
51+
s_device_minor_number = 0;
5052
if (!boot_argument_contains_partition_uuid()) {
5153
determine_boot_device();
5254
return;
@@ -177,6 +179,15 @@ RefPtr<BlockDevice> StorageManagement::boot_block_device() const
177179
return m_boot_block_device;
178180
}
179181

182+
int StorageManagement::major_number()
183+
{
184+
return 3;
185+
}
186+
int StorageManagement::minor_number()
187+
{
188+
return s_device_minor_number++;
189+
}
190+
180191
NonnullRefPtr<FS> StorageManagement::root_filesystem() const
181192
{
182193
auto boot_device_description = boot_block_device();

Kernel/Storage/StorageManagement.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class StorageManagement {
4848

4949
NonnullRefPtr<FS> root_filesystem() const;
5050

51+
static int major_number();
52+
static int minor_number();
53+
5154
NonnullRefPtrVector<StorageController> ide_controllers() const;
5255

5356
private:

0 commit comments

Comments
 (0)