From c903cda7aac3b19868b408565c0cfc2f3725dcdc Mon Sep 17 00:00:00 2001 From: Aman Priyadarshi Date: Tue, 26 Jul 2016 14:15:15 +0000 Subject: [PATCH] Added write support, next operation code 53 27. svn path=/branches/GSoC_2016/AHCI/; revision=72002 --- drivers/storage/storahci/storahci.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/storage/storahci/storahci.c b/drivers/storage/storahci/storahci.c index 2d0da6e55a7..af75b87a89a 100644 --- a/drivers/storage/storahci/storahci.c +++ b/drivers/storage/storahci/storahci.c @@ -849,7 +849,7 @@ AhciHwStartIo ( Srb->SrbStatus = DeviceRequestSense(AdapterExtension, Srb, cdb); break; case SCSIOP_READ: - //case SCSIOP_WRITE: + case SCSIOP_WRITE: Srb->SrbStatus = DeviceRequestReadWrite(AdapterExtension, Srb, cdb); break; default: @@ -1726,7 +1726,7 @@ UCHAR DeviceRequestSense ( ModeHeader->ModeDataLength = sizeof(MODE_PARAMETER_HEADER); ModeHeader->MediumType = 0; - ModeHeader->DeviceSpecificParameter = MODE_DSP_WRITE_PROTECT; + ModeHeader->DeviceSpecificParameter = 0; ModeHeader->BlockDescriptorLength = 0; if (Cdb->MODE_SENSE.PageCode == MODE_SENSE_CURRENT_VALUES) @@ -1776,9 +1776,12 @@ UCHAR DeviceRequestReadWrite ( NT_ASSERT(BytesPerSector > 0); - ROUND_UP(DataTransferLength, BytesPerSector); + //ROUND_UP(DataTransferLength, BytesPerSector); SectorCount = DataTransferLength / BytesPerSector; + + Srb->DataTransferLength = SectorCount * BytesPerSector; + StartOffset = AhciGetLba(Cdb, Srb->CdbLength); IsReading = (Cdb->CDB10.OperationCode == SCSIOP_READ); @@ -1796,7 +1799,8 @@ UCHAR DeviceRequestReadWrite ( else { SrbExtension->Flags |= ATA_FLAGS_DATA_OUT; - NT_ASSERT(FALSE); + SrbExtension->CommandReg = IDE_COMMAND_WRITE_DMA; + //NT_ASSERT(FALSE); } SrbExtension->FeaturesLow = 0;