Kernel: Move Partition out of StorageDevice and rename functions
This commit is contained in:
@@ -65,7 +65,7 @@ namespace Kernel
|
||||
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) override { return BAN::Error::from_errno(EISDIR); }
|
||||
virtual BAN::ErrorOr<void> create_file(BAN::StringView, mode_t) override { return BAN::Error::from_errno(EINVAL); };
|
||||
|
||||
virtual Type type() const override { return Type::DeviceManager; }
|
||||
virtual InodeType type() const override { return InodeType::DeviceManager; }
|
||||
virtual bool operator==(const Inode&) const override { return false; }
|
||||
|
||||
virtual BAN::RefPtr<Inode> root_inode() override { return this; }
|
||||
|
||||
@@ -142,7 +142,7 @@ namespace Kernel
|
||||
|
||||
virtual BAN::ErrorOr<void> create_file(BAN::StringView, mode_t) override;
|
||||
|
||||
virtual Type type() const override { return Type::Ext2; }
|
||||
virtual InodeType type() const override { return InodeType::Ext2; }
|
||||
virtual bool operator==(const Inode& other) const override;
|
||||
|
||||
protected:
|
||||
@@ -175,12 +175,12 @@ namespace Kernel
|
||||
class Ext2FS : public FileSystem
|
||||
{
|
||||
public:
|
||||
static BAN::ErrorOr<Ext2FS*> create(StorageDevice::Partition&);
|
||||
static BAN::ErrorOr<Ext2FS*> create(Partition&);
|
||||
|
||||
virtual BAN::RefPtr<Inode> root_inode() override { return m_root_inode; }
|
||||
|
||||
private:
|
||||
Ext2FS(StorageDevice::Partition& partition)
|
||||
Ext2FS(Partition& partition)
|
||||
: m_partition(partition)
|
||||
{}
|
||||
|
||||
@@ -207,7 +207,7 @@ namespace Kernel
|
||||
uint32_t block_size() const { return 1024 << superblock().log_block_size; }
|
||||
|
||||
private:
|
||||
StorageDevice::Partition& m_partition;
|
||||
Partition& m_partition;
|
||||
|
||||
BAN::RefPtr<Inode> m_root_inode;
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Kernel
|
||||
IFREG = 0x8000,
|
||||
};
|
||||
|
||||
enum class Type
|
||||
enum class InodeType
|
||||
{
|
||||
DeviceManager,
|
||||
Device,
|
||||
@@ -66,7 +66,7 @@ namespace Kernel
|
||||
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) = 0;
|
||||
virtual BAN::ErrorOr<void> create_file(BAN::StringView, mode_t) = 0;
|
||||
|
||||
virtual Type type() const = 0;
|
||||
virtual InodeType type() const = 0;
|
||||
virtual bool operator==(const Inode&) const = 0;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace Kernel::Input
|
||||
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) override;
|
||||
virtual BAN::ErrorOr<void> create_file(BAN::StringView, mode_t) override { return BAN::Error::from_errno(ENOTDIR); }
|
||||
|
||||
virtual Type type() const override { return Type::Device; }
|
||||
virtual InodeType type() const override { return InodeType::Device; }
|
||||
virtual bool operator==(const Inode&) const override { return false; }
|
||||
|
||||
protected:
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Kernel
|
||||
struct ATABus;
|
||||
class ATAController;
|
||||
|
||||
class ATADevice : public StorageDevice
|
||||
class ATADevice final : public StorageDevice
|
||||
{
|
||||
public:
|
||||
virtual BAN::ErrorOr<void> read_sectors(uint64_t, uint8_t, uint8_t*) override;
|
||||
@@ -18,14 +18,14 @@ namespace Kernel
|
||||
virtual uint64_t total_size() const override { return lba_count * sector_size(); }
|
||||
|
||||
private:
|
||||
enum class Type
|
||||
enum class DeviceType
|
||||
{
|
||||
Unknown,
|
||||
ATA,
|
||||
ATAPI,
|
||||
};
|
||||
|
||||
Type type;
|
||||
DeviceType type;
|
||||
uint8_t slave_bit; // 0x00 for master, 0x10 for slave
|
||||
uint16_t signature;
|
||||
uint16_t capabilities;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <BAN/Vector.h>
|
||||
#include <kernel/Device.h>
|
||||
|
||||
namespace Kernel
|
||||
{
|
||||
@@ -13,35 +14,37 @@ namespace Kernel
|
||||
uint8_t data4[8];
|
||||
};
|
||||
|
||||
class StorageDevice
|
||||
class StorageDevice;
|
||||
|
||||
class Partition
|
||||
{
|
||||
public:
|
||||
struct Partition
|
||||
{
|
||||
Partition(StorageDevice&, const GUID&, const GUID&, uint64_t, uint64_t, uint64_t, const char*);
|
||||
Partition(StorageDevice&, const GUID&, const GUID&, uint64_t, uint64_t, uint64_t, const char*);
|
||||
|
||||
const GUID& type() const { return m_type; }
|
||||
const GUID& guid() const { return m_guid; }
|
||||
uint64_t lba_start() const { return m_lba_start; }
|
||||
uint64_t lba_end() const { return m_lba_end; }
|
||||
uint64_t attributes() const { return m_attributes; }
|
||||
const char* name() const { return m_name; }
|
||||
const StorageDevice& device() const { return m_device; }
|
||||
const GUID& partition_type() const { return m_type; }
|
||||
const GUID& partition_guid() const { return m_guid; }
|
||||
uint64_t lba_start() const { return m_lba_start; }
|
||||
uint64_t lba_end() const { return m_lba_end; }
|
||||
uint64_t attributes() const { return m_attributes; }
|
||||
const char* label() const { return m_label; }
|
||||
const StorageDevice& device() const { return m_device; }
|
||||
|
||||
BAN::ErrorOr<void> read_sectors(uint64_t lba, uint8_t sector_count, uint8_t* buffer);
|
||||
BAN::ErrorOr<void> write_sectors(uint64_t lba, uint8_t sector_count, const uint8_t* buffer);
|
||||
bool is_used() const { uint8_t zero[16] {}; return memcmp(&m_type, zero, 16); }
|
||||
BAN::ErrorOr<void> read_sectors(uint64_t lba, uint8_t sector_count, uint8_t* buffer);
|
||||
BAN::ErrorOr<void> write_sectors(uint64_t lba, uint8_t sector_count, const uint8_t* buffer);
|
||||
bool is_used() const { uint8_t zero[16] {}; return memcmp(&m_type, zero, 16); }
|
||||
|
||||
private:
|
||||
StorageDevice& m_device;
|
||||
const GUID m_type;
|
||||
const GUID m_guid;
|
||||
const uint64_t m_lba_start;
|
||||
const uint64_t m_lba_end;
|
||||
const uint64_t m_attributes;
|
||||
char m_name[36 * 4 + 1];
|
||||
};
|
||||
private:
|
||||
StorageDevice& m_device;
|
||||
const GUID m_type;
|
||||
const GUID m_guid;
|
||||
const uint64_t m_lba_start;
|
||||
const uint64_t m_lba_end;
|
||||
const uint64_t m_attributes;
|
||||
char m_label[36 * 4 + 1];
|
||||
};
|
||||
|
||||
class StorageDevice
|
||||
{
|
||||
public:
|
||||
virtual ~StorageDevice() {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user