forked from Bananymous/banan-os
Kernel: StorageDevices now specify prefix for partition names
This commit is contained in:
parent
c6130f33d7
commit
812e9efd41
|
@ -9,7 +9,7 @@ namespace Kernel
|
|||
class Partition final : public BlockDevice
|
||||
{
|
||||
public:
|
||||
static BAN::ErrorOr<BAN::RefPtr<Partition>> create(BAN::RefPtr<BlockDevice>, const BAN::GUID& type, const BAN::GUID& guid, uint64_t first_block, uint64_t last_block, uint64_t attr, const char* label, uint32_t index);
|
||||
static BAN::ErrorOr<BAN::RefPtr<Partition>> create(BAN::RefPtr<BlockDevice>, const BAN::GUID& type, const BAN::GUID& guid, uint64_t first_block, uint64_t last_block, uint64_t attr, const char* label, uint32_t index, BAN::StringView name_prefix);
|
||||
|
||||
const BAN::GUID& partition_type() const { return m_type; }
|
||||
const BAN::GUID& partition_guid() const { return m_guid; }
|
||||
|
@ -26,7 +26,7 @@ namespace Kernel
|
|||
virtual BAN::StringView name() const override { return m_name; }
|
||||
|
||||
private:
|
||||
Partition(BAN::RefPtr<BlockDevice>, const BAN::GUID&, const BAN::GUID&, uint64_t, uint64_t, uint64_t, const char*, uint32_t);
|
||||
Partition(BAN::RefPtr<BlockDevice>, const BAN::GUID&, const BAN::GUID&, uint64_t, uint64_t, uint64_t, const char*, uint32_t, BAN::StringView);
|
||||
|
||||
private:
|
||||
BAN::RefPtr<BlockDevice> m_device;
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace Kernel
|
|||
{ }
|
||||
virtual ~StorageDevice();
|
||||
|
||||
BAN::ErrorOr<void> initialize_partitions();
|
||||
BAN::ErrorOr<void> initialize_partitions(BAN::StringView name_prefix);
|
||||
|
||||
virtual BAN::ErrorOr<void> read_blocks(uint64_t lba, size_t sector_count, BAN::ByteSpan buffer) override { return read_sectors(lba, sector_count, buffer); }
|
||||
virtual BAN::ErrorOr<void> write_blocks(uint64_t lba, size_t sector_count, BAN::ConstByteSpan buffer) override { return write_sectors(lba, sector_count, buffer); }
|
||||
|
|
|
@ -76,7 +76,7 @@ namespace Kernel
|
|||
add_disk_cache();
|
||||
|
||||
DevFileSystem::get().add_device(this);
|
||||
if (auto res = initialize_partitions(); res.is_error())
|
||||
if (auto res = initialize_partitions(name()); res.is_error())
|
||||
dprintln("{}", res.error());
|
||||
|
||||
return {};
|
||||
|
|
|
@ -5,15 +5,15 @@
|
|||
namespace Kernel
|
||||
{
|
||||
|
||||
BAN::ErrorOr<BAN::RefPtr<Partition>> Partition::create(BAN::RefPtr<BlockDevice> device, const BAN::GUID& type, const BAN::GUID& guid, uint64_t first_block, uint64_t last_block, uint64_t attr, const char* label, uint32_t index)
|
||||
BAN::ErrorOr<BAN::RefPtr<Partition>> Partition::create(BAN::RefPtr<BlockDevice> device, const BAN::GUID& type, const BAN::GUID& guid, uint64_t first_block, uint64_t last_block, uint64_t attr, const char* label, uint32_t index, BAN::StringView name_prefix)
|
||||
{
|
||||
auto partition_ptr = new Partition(device, type, guid, first_block, last_block, attr, label, index);
|
||||
auto partition_ptr = new Partition(device, type, guid, first_block, last_block, attr, label, index, name_prefix);
|
||||
if (partition_ptr == nullptr)
|
||||
return BAN::Error::from_errno(ENOMEM);
|
||||
return BAN::RefPtr<Partition>::adopt(partition_ptr);
|
||||
}
|
||||
|
||||
Partition::Partition(BAN::RefPtr<BlockDevice> device, const BAN::GUID& type, const BAN::GUID& guid, uint64_t first_block, uint64_t last_block, uint64_t attr, const char* label, uint32_t index)
|
||||
Partition::Partition(BAN::RefPtr<BlockDevice> device, const BAN::GUID& type, const BAN::GUID& guid, uint64_t first_block, uint64_t last_block, uint64_t attr, const char* label, uint32_t index, BAN::StringView name_prefix)
|
||||
: BlockDevice(0660, 0, 0)
|
||||
, m_device(device)
|
||||
, m_type(type)
|
||||
|
@ -21,7 +21,7 @@ namespace Kernel
|
|||
, m_first_block(first_block)
|
||||
, m_last_block(last_block)
|
||||
, m_attributes(attr)
|
||||
, m_name(BAN::String::formatted("{}{}", device->name(), index))
|
||||
, m_name(BAN::String::formatted("{}{}", name_prefix, index))
|
||||
, m_rdev(makedev(major(device->rdev()), index))
|
||||
{
|
||||
memcpy(m_label, label, sizeof(m_label));
|
||||
|
|
|
@ -142,7 +142,7 @@ namespace Kernel
|
|||
return true;
|
||||
}
|
||||
|
||||
BAN::ErrorOr<void> StorageDevice::initialize_partitions()
|
||||
BAN::ErrorOr<void> StorageDevice::initialize_partitions(BAN::StringView name_prefix)
|
||||
{
|
||||
if (total_size() < sizeof(GPTHeader))
|
||||
return BAN::Error::from_error_code(ErrorCode::Storage_GPTHeader);
|
||||
|
@ -189,7 +189,8 @@ namespace Kernel
|
|||
entry.ending_lba,
|
||||
entry.attributes,
|
||||
utf8_name,
|
||||
i + 1
|
||||
i + 1,
|
||||
name_prefix
|
||||
));
|
||||
TRY(m_partitions.push_back(BAN::move(partition)));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue