The Pedigree Project 0.1
AhciDisk.h
1/*
2 * Copyright (c) 2026, Pedigree Developers. SPDX-License-Identifier: ISC
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#ifndef AHCI_DISK_H
18#define AHCI_DISK_H
19
20#include "modules/drivers/common/scsi/ScsiDisk.h"
21
22class AhciController;
23
24class EXPORTED_PUBLIC AhciDisk final : public ScsiDisk {
25 public:
26 AhciDisk(AhciController* controller, size_t port);
27 ~AhciDisk() override;
28
29 bool initialise();
30
31 void getName(String& name) override;
32 size_t getSize() const override;
33 size_t getBlockCount() const override;
34 size_t getBlockSize() const override;
35 size_t getNativeBlockSize() const override;
36
37 uint64_t doRead(uint64_t location) override;
38 uint64_t doWrite(uint64_t location) override;
39 uint64_t doWriteDirect(uint64_t location, uintptr_t page) override;
40 uint64_t doSync(uint64_t location) override;
41
42 AhciController* controller() const {
43 return m_Controller;
44 }
45 size_t port() const {
46 return m_Port;
47 }
48
49 protected:
50 bool supportsBufferTransfers() const override {
51 return true;
52 }
53 bool transferBuffer(uint64_t location, void* buffer, size_t length, bool writing) override;
54 bool transferReadBuffers(Disk::ReadBuffer* buffers, size_t count) override;
55 bool transferWriteBuffers(Disk::WriteBuffer* buffers, size_t count) override;
56
57 private:
58 friend class AhciController;
59 size_t validPageLength(uint64_t location) const;
60
61 AhciController* m_Controller;
62 const size_t m_Port;
63 size_t m_Sectors;
64 size_t m_SectorBytes;
65 size_t m_Bytes;
66 bool m_ExtendedFlush;
67 bool m_Initialised;
68 char m_Model[41];
69};
70
71#endif
virtual uint64_t doRead(uint64_t location)
Definition ScsiDisk.cc:1213
bool initialise(class ScsiController *pController, size_t nUnit)
Definition ScsiDisk.cc:285
virtual size_t getSize() const
Gets the size of the disk.
Definition ScsiDisk.h:137
virtual MUST_USE_RESULT uint64_t doWriteDirect(uint64_t location, uintptr_t page)
Definition ScsiDisk.cc:1381
virtual void getName(String &str)
Definition ScsiDisk.h:122
virtual size_t getBlockSize() const
Gets the preferred I/O extent of the disk.
Definition ScsiDisk.h:145
virtual size_t getNativeBlockSize() const
Definition ScsiDisk.h:153