ahci: propagate physical block size to scsi read capacity 16
Change-Id: I8dab117fe8da9fc6e0f18adaa178ff79bc7c6ae4 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5666 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
This commit is contained in:
parent
806a5d179e
commit
a9ada46be8
@ -72,6 +72,7 @@ AHCIPort::AHCIPort(AHCIController* controller, int index)
|
||||
fDevicePresent(false),
|
||||
fUse48BitCommands(false),
|
||||
fSectorSize(0),
|
||||
fPhysicalSectorSize(0),
|
||||
fSectorCount(0),
|
||||
fIsATAPI(false),
|
||||
fTestUnitReadyActive(false),
|
||||
@ -784,6 +785,7 @@ AHCIPort::ScsiInquiry(scsi_ccb* request)
|
||||
if (!fIsATAPI) {
|
||||
fSectorCount = ataData.SectorCount(fUse48BitCommands, true);
|
||||
fSectorSize = ataData.SectorSize();
|
||||
fPhysicalSectorSize = ataData.PhysicalSectorSize();
|
||||
fTrimSupported = ataData.data_set_management_support;
|
||||
fTrimReturnsZeros = ataData.supports_read_zero_after_trim;
|
||||
fMaxTrimRangeBlocks = B_LENDIAN_TO_HOST_INT16(
|
||||
@ -953,6 +955,10 @@ AHCIPort::ScsiReadCapacity16(scsi_ccb* request)
|
||||
|
||||
scsiData.block_size = B_HOST_TO_BENDIAN_INT32(fSectorSize);
|
||||
scsiData.lba = B_HOST_TO_BENDIAN_INT64(fSectorCount - 1);
|
||||
uint8 exponent = 0;
|
||||
for (uint32 size = fPhysicalSectorSize; size > fSectorSize; size >>= 1)
|
||||
exponent++;
|
||||
scsiData.logical_blocks_per_physical_block_exponent = exponent;
|
||||
scsiData.rc_basis = 0x01;
|
||||
scsiData.lbpme = fTrimSupported;
|
||||
scsiData.lbprz = fTrimReturnsZeros;
|
||||
|
@ -80,6 +80,7 @@ private:
|
||||
bool fDevicePresent;
|
||||
bool fUse48BitCommands;
|
||||
uint32 fSectorSize;
|
||||
uint32 fPhysicalSectorSize;
|
||||
uint64 fSectorCount;
|
||||
bool fIsATAPI;
|
||||
bool fTestUnitReadyActive;
|
||||
|
Loading…
x
Reference in New Issue
Block a user