]> xenbits.xensource.com Git - seabios.git/commitdiff
Change send_disk_op() to return the bios status code.
authorKevin O'Connor <kevin@koconnor.net>
Sun, 16 Aug 2009 17:32:24 +0000 (13:32 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Sun, 16 Aug 2009 17:32:24 +0000 (13:32 -0400)
src/ata.c
src/disk.c

index e587016d28938da13e2dfe34b8057c15786faccc..510951b54756eb508c65e0ae24fed5799a98ab5c 100644 (file)
--- a/src/ata.c
+++ b/src/ata.c
@@ -137,7 +137,9 @@ isready(int driveid)
     u8 channel = ataid / 2;
     u16 iobase1 = GET_GLOBAL(ATA_channels[channel].iobase1);
     u8 status = inb(iobase1 + ATA_CB_STAT);
-    return (status & ( ATA_CB_STAT_BSY | ATA_CB_STAT_RDY )) == ATA_CB_STAT_RDY;
+    if ((status & (ATA_CB_STAT_BSY|ATA_CB_STAT_RDY)) == ATA_CB_STAT_RDY)
+        return DISK_RET_SUCCESS;
+    return DISK_RET_ENOTREADY;
 }
 
 static int
@@ -151,7 +153,7 @@ process_ata_misc_op(struct disk_op_s *op)
         return 0;
     case CMD_RESET:
         ata_reset(op->driveid);
-        return 0;
+        return DISK_RET_SUCCESS;
     case CMD_ISREADY:
         return isready(op->driveid);
     }
@@ -351,14 +353,20 @@ process_ata_op(struct disk_op_s *op)
     if (!CONFIG_ATA)
         return 0;
 
+    int ret;
     switch (op->command) {
     case CMD_READ:
-        return ata_cmd_data(op, 0, ATA_CMD_READ_SECTORS);
+        ret = ata_cmd_data(op, 0, ATA_CMD_READ_SECTORS);
+        break;
     case CMD_WRITE:
-        return ata_cmd_data(op, 1, ATA_CMD_WRITE_SECTORS);
+        ret = ata_cmd_data(op, 1, ATA_CMD_WRITE_SECTORS);
+        break;
     default:
         return process_ata_misc_op(op);
     }
+    if (ret)
+        return DISK_RET_EBADTRACK;
+    return DISK_RET_SUCCESS;
 }
 
 
@@ -436,12 +444,17 @@ cdrom_read(struct disk_op_s *op)
 int
 process_atapi_op(struct disk_op_s *op)
 {
+    int ret;
     switch (op->command) {
     case CMD_READ:
-        return cdrom_read(op);
+        ret = cdrom_read(op);
+        break;
     default:
         return process_ata_misc_op(op);
     }
+    if (ret)
+        return DISK_RET_EBADTRACK;
+    return DISK_RET_SUCCESS;
 }
 
 // Send a simple atapi command to a drive.
index c23def3fa0799198e0f6632ccb97414031684d11..291713bb202bd6b8922de7eaec2d0ca665f73eed 100644 (file)
@@ -67,9 +67,6 @@ __send_disk_op(struct disk_op_s *op_far, u16 op_seg)
     // Update count with total sectors transferred.
     SET_FARVAR(op_seg, op_far->count, dop.count);
 
-    if (status)
-        dprintf(1, "disk_op cmd %d error %d!\n", dop.command, status);
-
     return status;
 }
 
@@ -135,11 +132,7 @@ basic_access(struct bregs *regs, u8 driveid, u16 command)
 
     regs->al = dop.count;
 
-    if (status) {
-        disk_ret(regs, DISK_RET_EBADTRACK);
-        return;
-    }
-    disk_ret(regs, DISK_RET_SUCCESS);
+    disk_ret(regs, status);
 }
 
 // Perform cdemu read/verify
@@ -160,11 +153,12 @@ cdemu_access(struct bregs *regs, u8 driveid, u16 command)
     u8 *cdbuf_far = (void*)offsetof(struct extended_bios_data_area_s, cdemu_buf);
     u8 *dest_far = (void*)(regs->bx+0);
     regs->al = 0;
+    int status = DISK_RET_SUCCESS;
 
     if (vlba & 3) {
         dop.count = 1;
         dop.buf_fl = MAKE_FLATPTR(ebda_seg, cdbuf_far);
-        int status = send_disk_op(&dop);
+        status = send_disk_op(&dop);
         if (status)
             goto fail;
         u8 thiscount = 4 - (vlba & 3);
@@ -182,7 +176,7 @@ cdemu_access(struct bregs *regs, u8 driveid, u16 command)
     if (count > 3) {
         dop.count = count / 4;
         dop.buf_fl = MAKE_FLATPTR(regs->es, dest_far);
-        int status = send_disk_op(&dop);
+        status = send_disk_op(&dop);
         regs->al += dop.count * 4;
         if (status)
             goto fail;
@@ -195,7 +189,7 @@ cdemu_access(struct bregs *regs, u8 driveid, u16 command)
     if (count) {
         dop.count = 1;
         dop.buf_fl = MAKE_FLATPTR(ebda_seg, cdbuf_far);
-        int status = send_disk_op(&dop);
+        status = send_disk_op(&dop);
         if (status)
             goto fail;
         u8 thiscount = count;
@@ -203,10 +197,8 @@ cdemu_access(struct bregs *regs, u8 driveid, u16 command)
         regs->al += thiscount;
     }
 
-    disk_ret(regs, DISK_RET_SUCCESS);
-    return;
 fail:
-    disk_ret(regs, DISK_RET_EBADTRACK);
+    disk_ret(regs, status);
 }
 
 // Perform read/write/verify using new-style "int13ext" accesses.
@@ -234,11 +226,7 @@ extended_access(struct bregs *regs, u8 driveid, u16 command)
 
     SET_INT13EXT(regs, count, dop.count);
 
-    if (status) {
-        disk_ret(regs, DISK_RET_EBADTRACK);
-        return;
-    }
-    disk_ret(regs, DISK_RET_SUCCESS);
+    disk_ret(regs, status);
 }
 
 
@@ -253,7 +241,8 @@ disk_1300(struct bregs *regs, u8 driveid)
     struct disk_op_s dop;
     dop.driveid = driveid;
     dop.command = CMD_RESET;
-    send_disk_op(&dop);
+    int status = send_disk_op(&dop);
+    disk_ret(regs, status);
 }
 
 // read disk status
@@ -347,10 +336,7 @@ disk_1310(struct bregs *regs, u8 driveid)
     dop.driveid = driveid;
     dop.command = CMD_ISREADY;
     int status = send_disk_op(&dop);
-    if (status)
-        disk_ret(regs, DISK_RET_ENOTREADY);
-    else
-        disk_ret(regs, DISK_RET_SUCCESS);
+    disk_ret(regs, status);
 }
 
 // recalibrate