aboutsummaryrefslogtreecommitdiff
path: root/src/ata.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-08-16 13:32:24 -0400
committerKevin O'Connor <kevin@koconnor.net>2009-08-16 13:32:24 -0400
commit126eac646d28bed641643978de1dc2fd45b4fc88 (patch)
tree803369eb68ade6c5002700ffc752297cec5cb103 /src/ata.c
parentafd05205dc1e16a6f96b99af1bfde008a1bb7ab9 (diff)
downloadseabios-hppa-126eac646d28bed641643978de1dc2fd45b4fc88.zip
seabios-hppa-126eac646d28bed641643978de1dc2fd45b4fc88.tar.gz
seabios-hppa-126eac646d28bed641643978de1dc2fd45b4fc88.tar.bz2
Change send_disk_op() to return the bios status code.
Diffstat (limited to 'src/ata.c')
-rw-r--r--src/ata.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/ata.c b/src/ata.c
index e587016..510951b 100644
--- 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.