23#include "pedigree/kernel/Atomic.h"
24#include "pedigree/kernel/Spinlock.h"
25#include "pedigree/kernel/process/Mutex.h"
26#include "pedigree/kernel/process/Semaphore.h"
27#include "pedigree/kernel/process/Thread.h"
28#include "pedigree/kernel/processor/MemoryRegion.h"
29#include "pedigree/kernel/processor/types.h"
30#include "pedigree/kernel/utilities/String.h"
32#include "BusMasterIde.h"
33#include "ata-common.h"
34#include "modules/drivers/common/scsi/ScsiDisk.h"
49 void preparePagingStorage();
50 void releasePagingStorage();
67 static void discard(
void* context);
95 void shutdownDeviceCache()
override;
110 virtual uint64_t
doRead(uint64_t location);
111 virtual uint64_t
doWrite(uint64_t location);
112 virtual uint64_t doSync(uint64_t location);
114 PagingStatus doPagingTransfer(PagingOperation operation, uint64_t offset,
void* page)
override;
130 virtual size_t getSize()
const;
133 virtual size_t getBlockCount()
const;
136 virtual bool sendCommand(
size_t nUnit, uintptr_t pCommand, uint8_t nCommandSize,
137 uintptr_t pRespBuffer, uint16_t nRespBytes,
bool bWrite);
143 void setupLBA28(uint64_t n, uint32_t nSectors);
145 void setupLBA48(uint64_t n, uint32_t nSectors);
207 void setFeatures(uint8_t command, uint8_t countreg, uint8_t lowreg, uint8_t midreg,
PagingStatus preparePagingTransport(PagingTransport *&transport) override
AtaDiskType m_AtaDiskType
virtual MUST_USE_RESULT uint64_t doWriteDirect(uint64_t location, uintptr_t page)
void setupLBA28(uint64_t n, uint32_t nSectors)
virtual uint64_t doWrite(uint64_t location)
virtual size_t getNativeBlockSize() const
Semaphore * m_IrqReceived
virtual size_t getCacheFillSize() const
size_t m_LastPrdTableOffset
virtual BusMasterIde * getBusMaster() const
void setFeatures(uint8_t command, uint8_t countreg, uint8_t lowreg, uint8_t midreg, uint8_t hireg)
bool initialise(size_t nUnit=~0)
char m_pFirmwareRevision[64]
physical_uintptr_t m_PrdTablePhys
void setupLBA48(uint64_t n, uint32_t nSectors)
virtual uint64_t doRead(uint64_t location)
PhysicalRegionDescriptor * m_PrdTable
virtual void getName(String &str)
virtual void irqReceived()
virtual size_t defaultBlockSize()
Atomic< size_t > m_IrqCount
uint64_t writePageBuffer(uint64_t location, uintptr_t page)
MemoryRegion m_PrdTableMemRegion
virtual size_t getSize() const
Gets the size of the disk.
virtual size_t getBlockSize() const
Gets the preferred I/O extent of the disk.
Abstrace base class for hardware I/O capabilities.
Special memory entity in the kernel's virtual address space.
size_t offset
Offset into the read.
uintptr_t buffer
Virtual address of buffer to read into (page sized).