Author: spetreolle
Date: Mon Oct 20 21:20:35 2014
New Revision: 64855
URL:
http://svn.reactos.org/svn/reactos?rev=64855&view=rev
Log:
[UNIATA]
Update to 0.45b.
CORE-8280
Modified:
trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp
trunk/reactos/drivers/storage/ide/uniata/id_sata.cpp
trunk/reactos/drivers/storage/ide/uniata/uniata_ver.h
Modified: trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/ide/uniata…
==============================================================================
--- trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp [iso-8859-1] Mon Oct 20 21:20:35
2014
@@ -1692,7 +1692,7 @@
deviceExtension->FullIdentifyData.NVCache_Version
));
- KdPrint2((PRINT_PREFIX "R-rate %#x\n",
+ KdPrint2((PRINT_PREFIX "R-rate %d\n",
deviceExtension->FullIdentifyData.NominalMediaRotationRate
));
@@ -5071,9 +5071,9 @@
if(AtaReq->retry < MAX_RETRIES) {
//fallback_pio:
if(!(deviceExtension->HwFlags & UNIATA_AHCI)) {
- AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION;
+ //AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION;
+ // Downrate will happen in AtapiDmaReinit(), try UDMA-2 for
HDD only
AtaReq->Flags |= REQ_FLAG_FORCE_DOWNRATE;
-// LunExt->DeviceFlags |= DFLAGS_FORCE_DOWNRATE;
}
AtaReq->ReqState = REQ_STATE_QUEUED;
goto reenqueue_req;
@@ -5093,6 +5093,7 @@
((error >> 4) == SCSI_SENSE_HARDWARE_ERROR)) {
if(AtaReq->retry < MAX_RETRIES) {
//fallback_pio:
+ // Downrate will happen in AtapiDmaReinit(), use PIO immediately for
ATAPI
AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION;
AtaReq->Flags |= REQ_FLAG_FORCE_DOWNRATE;
// LunExt->DeviceFlags |= DFLAGS_FORCE_DOWNRATE;
@@ -5449,6 +5450,7 @@
chan->ChannelCtrlFlags &= ~CTRFLAGS_DMA_OPERATION;
goto CompleteRequest;
}
+continue_read_drq:
// Ensure that this is a read command.
if (srb->SrbFlags & SRB_FLAGS_DATA_IN) {
@@ -5489,7 +5491,6 @@
}
}
}
-
} else {
KdPrint2((PRINT_PREFIX
"IdeIntr: Read %#x Dwords\n", wordCount/2));
@@ -5580,6 +5581,12 @@
status = SRB_STATUS_SUCCESS;
goto CompleteRequest;
+ }
+ } else {
+ if(!atapiDev && !DataOverrun && (srb->SrbFlags &
SRB_FLAGS_DATA_IN) &&
+ (statusByte == (IDE_STATUS_IDLE | IDE_STATUS_DRQ))) {
+ KdPrint2((PRINT_PREFIX " HDD read data ready \n"));
+ goto continue_read_drq;
}
}
}
@@ -6689,6 +6696,7 @@
// Adjust buffer address and words left count.
AtaReq->WordsLeft -= wordCount;
AtaReq->DataBuffer += wordCount;
+ AtaReq->WordsTransfered += wordCount;
// Wait for interrupt.
return SRB_STATUS_PENDING;
Modified: trunk/reactos/drivers/storage/ide/uniata/id_sata.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/ide/uniata…
==============================================================================
--- trunk/reactos/drivers/storage/ide/uniata/id_sata.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/ide/uniata/id_sata.cpp [iso-8859-1] Mon Oct 20 21:20:35
2014
@@ -968,6 +968,12 @@
KdPrint2((PRINT_PREFIX "\n"));
/* get the number of HW channels */
+
+ /* CAP.NOP sometimes indicate the index of the last enabled
+ * port, at other times, that of the last possible port, so
+ * determining the maximum port number requires looking at
+ * both CAP.NOP and PI.
+ */
PI = UniataAhciReadHostPort4(deviceExtension, IDX_AHCI_PI);
deviceExtension->AHCI_PI = PI;
KdPrint2((PRINT_PREFIX " AHCI PI %#x\n", PI));
Modified: trunk/reactos/drivers/storage/ide/uniata/uniata_ver.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/ide/uniata…
==============================================================================
--- trunk/reactos/drivers/storage/ide/uniata/uniata_ver.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/ide/uniata/uniata_ver.h [iso-8859-1] Mon Oct 20 21:20:35
2014
@@ -1,10 +1,10 @@
-#define UNIATA_VER_STR "45a8"
-#define UNIATA_VER_DOT 0.45.1.8
+#define UNIATA_VER_STR "45b"
+#define UNIATA_VER_DOT 0.45.2.0
#define UNIATA_VER_MJ 0
#define UNIATA_VER_MN 45
-#define UNIATA_VER_SUB_MJ 1
-#define UNIATA_VER_SUB_MN 8
-#define UNIATA_VER_DOT_COMMA 0,45,1,8
-#define UNIATA_VER_DOT_STR "0.45.1.8"
+#define UNIATA_VER_SUB_MJ 2
+#define UNIATA_VER_SUB_MN 0
+#define UNIATA_VER_DOT_COMMA 0,45,2,0
+#define UNIATA_VER_DOT_STR "0.45.2.0"
#define UNIATA_VER_YEAR 2014
#define UNIATA_VER_YEAR_STR "2014"