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/id_ata.cpp?rev=64855&r1=64854&r2=64855&view=diff
==============================================================================
--- 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/id_sata.cpp?rev=64855&r1=64854&r2=64855&view=diff
==============================================================================
--- 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/uniata_ver.h?rev=64855&r1=64854&r2=64855&view=diff
==============================================================================
--- 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"


Reply via email to