]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
rearrange wait_not_busy
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 24 Dec 2010 16:11:21 +0000 (17:11 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 24 Dec 2010 16:11:21 +0000 (17:11 +0100)
grub-core/disk/pata.c

index b6edf78d68988f58c0347affde655fabf3228980..a24237a83239f0d95835d205c95acfba71f1aa40 100644 (file)
@@ -182,17 +182,18 @@ grub_pata_readwrite (struct grub_ata *disk,
   /* Start command. */
   grub_pata_regset (dev, GRUB_ATA_REG_CMD, parms->taskfile.cmd);
 
-  /* Wait for !BSY.  */
-  if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA))
-    return grub_errno;
-
   /* Check status.  */
   grub_int8_t sts = grub_pata_regget (dev, GRUB_ATA_REG_STATUS);
   grub_dprintf ("pata", "status=0x%x\n", sts);
 
   if (parms->cmdsize)
     {
-      grub_uint8_t irs = grub_pata_regget (dev, GRUB_ATAPI_REG_IREASON);
+      grub_uint8_t irs;
+      /* Wait for !BSY.  */
+      if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA))
+       return grub_errno;
+
+      irs = grub_pata_regget (dev, GRUB_ATAPI_REG_IREASON);
       /* OK if DRQ is asserted and interrupt reason is as expected.  */
       if (!((sts & GRUB_ATA_STATUS_DRQ)
            && (irs & GRUB_ATAPI_IREASON_MASK) == GRUB_ATAPI_IREASON_CMD_OUT))
@@ -210,6 +211,11 @@ grub_pata_readwrite (struct grub_ata *disk,
                  & GRUB_ATAPI_IREASON_MASK) == GRUB_ATAPI_IREASON_DATA_IN)))
     {
       unsigned cnt;
+
+      /* Wait for !BSY.  */
+      if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA))
+       return grub_errno;
+
       if (parms->cmdsize)
        {
          cnt = grub_pata_regget (dev, GRUB_ATAPI_REG_CNTHIGH) << 8
@@ -246,6 +252,10 @@ grub_pata_readwrite (struct grub_ata *disk,
     }
   parms->size = nread;
 
+  /* Wait for !BSY.  */
+  if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA))
+    return grub_errno;
+
   /* Return registers.  */
   for (i = GRUB_ATA_REG_ERROR; i <= GRUB_ATA_REG_STATUS; i++)
     parms->taskfile.raw[i - GRUB_ATA_REG_FEATURES] = grub_pata_regget (dev, i);