The Pedigree Project 0.1
VirtioBlkDisk.h
1/* Copyright (c) 2026, Pedigree Developers. SPDX-License-Identifier: ISC */
2#ifndef VIRTIO_BLK_DISK_H
3#define VIRTIO_BLK_DISK_H
4
5#include "modules/drivers/common/scsi/ScsiDisk.h"
6
8
9class EXPORTED_PUBLIC VirtioBlkDisk final : public ScsiDisk {
10 public:
11 explicit VirtioBlkDisk(VirtioBlkController* controller);
12 ~VirtioBlkDisk() override;
13
14 void getName(String& name) override;
15 size_t getSize() const override;
16 size_t getBlockCount() const override;
17 size_t getBlockSize() const override;
18 size_t getNativeBlockSize() const override;
19 bool writeFrom(uint64_t location, const void* buffer, size_t length) override;
20 bool writeFromBatch(WriteBuffer* buffers, size_t count) override;
21 void write(uint64_t location) override;
22 bool zero(uint64_t location, size_t length) override;
23
24 uint64_t doRead(uint64_t location) override;
25 uint64_t doWrite(uint64_t location) override;
26 uint64_t doWriteDirect(uint64_t location, uintptr_t page) override;
27 uint64_t doSync(uint64_t location) override;
28
29 protected:
30 BufferView acquireView(uint64_t location, bool writable, uint64_t& token) override;
31 bool supportsBufferTransfers() const override {
32 return true;
33 }
34 bool transferBuffer(uint64_t location, void* buffer, size_t length, bool writing) override;
35
36 private:
37 friend class VirtioBlkController;
38 size_t validPageLength(uint64_t location) const;
39
40 VirtioBlkController* m_Controller;
41};
42
43#endif
virtual uint64_t doRead(uint64_t location)
Definition ScsiDisk.cc:1265
virtual void write(uint64_t location)
Definition ScsiDisk.cc:919
virtual size_t getSize() const
Gets the size of the disk.
Definition ScsiDisk.h:140
virtual MUST_USE_RESULT uint64_t doWriteDirect(uint64_t location, uintptr_t page)
Definition ScsiDisk.cc:1433
virtual void getName(String &str)
Definition ScsiDisk.h:123
virtual size_t getBlockSize() const
Gets the preferred I/O extent of the disk.
Definition ScsiDisk.h:148
bool writeFromBatch(WriteBuffer *buffers, size_t count) override
Definition ScsiDisk.cc:839
bool zero(uint64_t location, size_t length) override
Definition ScsiDisk.cc:664
virtual size_t getNativeBlockSize() const
Definition ScsiDisk.h:156