forked from Bananymous/banan-os
- Removed virtual functions for all of the stat stuff. This did however introduce some issues, mainly with /proc becoming out of sync if you changed your ID. I propose we do the linux thing and just have a stat update function which is optional, but allows dynamic updates of stat fields for cases such as those in uid/gid in /proc. - Simplified the API, although still kind of annoying it is a bit simpler. - Moved some of the FS structure from having the FS inode inside the in memory inode to a Serialise <-> Deserialise model where Inodes are deserialised from disk into in memory ones and then back into on disk ones when it comes time for syncing. This makes it semantically better in my opinion, as it explicitly separates disk and non-disk functionality.
40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <kernel/Memory/DMARegion.h>
|
|
#include <kernel/Storage/StorageDevice.h>
|
|
|
|
namespace Kernel
|
|
{
|
|
|
|
class NVMeController;
|
|
|
|
class NVMeNamespace : public StorageDevice
|
|
{
|
|
public:
|
|
static BAN::ErrorOr<BAN::RefPtr<NVMeNamespace>> create(NVMeController&, uint32_t ns_index, uint32_t nsid, uint64_t block_count, uint32_t block_size);
|
|
|
|
virtual uint32_t sector_size() const override { return m_block_size; }
|
|
virtual uint64_t total_size() const override { return m_block_size * m_block_count; }
|
|
|
|
virtual BAN::StringView name() const override { return m_name; }
|
|
|
|
private:
|
|
NVMeNamespace(NVMeController&, uint32_t ns_index, uint32_t nsid, uint64_t block_count, uint32_t block_size);
|
|
BAN::ErrorOr<void> initialize();
|
|
|
|
virtual BAN::ErrorOr<void> read_sectors_impl(uint64_t lba, uint64_t sector_count, BAN::ByteSpan) override;
|
|
virtual BAN::ErrorOr<void> write_sectors_impl(uint64_t lba, uint64_t sector_count, BAN::ConstByteSpan) override;
|
|
|
|
private:
|
|
NVMeController& m_controller;
|
|
BAN::UniqPtr<DMARegion> m_dma_region;
|
|
|
|
const uint32_t m_nsid;
|
|
const uint32_t m_block_size;
|
|
const uint64_t m_block_count;
|
|
|
|
char m_name[10] {};
|
|
};
|
|
|
|
}
|