2019-04-03 07:36:40 -03:00
|
|
|
#include <Kernel/Devices/DiskDevice.h>
|
2018-10-16 06:21:49 -03:00
|
|
|
|
2019-08-21 11:45:52 -03:00
|
|
|
DiskDevice::DiskDevice(int major, int minor, size_t block_size)
|
|
|
|
|
: BlockDevice(major, minor, block_size)
|
2018-10-16 06:21:49 -03:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DiskDevice::~DiskDevice()
|
|
|
|
|
{
|
|
|
|
|
}
|
2018-10-16 09:11:58 -03:00
|
|
|
|
2019-07-03 16:17:35 -03:00
|
|
|
bool DiskDevice::read(DiskOffset offset, unsigned length, u8* out) const
|
2018-10-16 09:11:58 -03:00
|
|
|
{
|
2018-12-02 22:38:22 -02:00
|
|
|
ASSERT((offset % block_size()) == 0);
|
|
|
|
|
ASSERT((length % block_size()) == 0);
|
2019-07-03 16:17:35 -03:00
|
|
|
u32 first_block = offset / block_size();
|
|
|
|
|
u32 end_block = (offset + length) / block_size();
|
2019-05-23 23:17:15 -03:00
|
|
|
return const_cast<DiskDevice*>(this)->read_blocks(first_block, end_block - first_block, out);
|
2018-10-16 09:11:58 -03:00
|
|
|
}
|
|
|
|
|
|
2019-07-03 16:17:35 -03:00
|
|
|
bool DiskDevice::write(DiskOffset offset, unsigned length, const u8* in)
|
2018-10-16 09:11:58 -03:00
|
|
|
{
|
2018-12-02 22:38:22 -02:00
|
|
|
ASSERT((offset % block_size()) == 0);
|
|
|
|
|
ASSERT((length % block_size()) == 0);
|
2019-07-03 16:17:35 -03:00
|
|
|
u32 first_block = offset / block_size();
|
|
|
|
|
u32 end_block = (offset + length) / block_size();
|
2019-01-31 14:31:23 -02:00
|
|
|
ASSERT(first_block <= 0xffffffff);
|
|
|
|
|
ASSERT(end_block <= 0xffffffff);
|
2019-05-23 23:17:15 -03:00
|
|
|
return write_blocks(first_block, end_block - first_block, in);
|
2018-10-16 09:11:58 -03:00
|
|
|
}
|