28 bool initialise(uint32_t capabilities, uint32_t version, uint32_t extendedCapabilities);
30 void enableInterrupts();
31 bool interrupt(
bool pending);
32 bool command(uint8_t opcode, uint64_t lba, uint16_t sectors,
void* buffer,
size_t bytes,
33 bool write,
bool interrupts,
bool interruptProbe =
false);
36 size_t interruptCompletions()
const;
37 size_t maximumOutstanding()
const;
38 void configureDisk(
size_t sectorBytes,
size_t queueDepth);
39 size_t sectorBytes()
const {
44 bool transferBatch(
Disk::ReadBuffer* buffers,
size_t count,
bool interrupts,
bool writing);
45 uint32_t read(
size_t reg)
const;
46 void write(
size_t reg, uint32_t value);
47 void waitForProgress();
48 bool waitClear(
size_t reg, uint32_t bits,
size_t milliseconds);
50 void acknowledge(uint32_t status);
51 void observe(uint32_t status,
bool fromInterrupt);
52 void pollCompletions(
bool interrupts);
54 bool chooseSlot(
bool queued,
size_t& index);
55 bool issueCommand(
size_t index, uint8_t opcode, uint64_t lba, uint16_t sectors,
void* buffer,
56 size_t bytes,
bool writing,
bool queued,
bool interrupts);
57 bool reapCommand(
size_t index, uint8_t opcode,
void* buffer,
size_t bytes,
bool writing,
58 bool queued,
bool interrupts,
bool interruptProbe);
65 : data(
"AHCI transfer buffer"), completion(0,
false), done(
false), errors(0), deadline(0) {}
67 physical_uintptr_t pages[16];
75 mutable Mutex m_StateLock;
83 bool m_AddressesInstalled;
84 bool m_PolledInterrupt;
85 size_t m_InterruptCompletions;
86 size_t m_MaximumOutstanding;