From 2a8d619c9ee64e2e5a5fae54a552e5118580023e Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Wed, 6 May 2009 11:47:48 +0000 Subject: [PATCH] Add three more error checks for paranoias sake. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30642 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/bus_managers/ata/ATAChannel.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp b/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp index 5e8fc9ddbd..0e19d94a72 100644 --- a/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp +++ b/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp @@ -264,7 +264,13 @@ ATAChannel::SelectDevice(uint8 device) taskFile.lba.mode = ATA_MODE_LBA; taskFile.lba.device = device; - _WriteRegs(&taskFile, ATA_MASK_DEVICE_HEAD); + status_t result = _WriteRegs(&taskFile, ATA_MASK_DEVICE_HEAD); + if (result != B_OK) { + TRACE_ERROR("writing register failed when trying to select device %d\n", + device); + return result; + } + _FlushAndWait(1); #if 0 @@ -285,7 +291,11 @@ uint8 ATAChannel::SelectedDevice() { ata_task_file taskFile; - _ReadRegs(&taskFile, ATA_MASK_DEVICE_HEAD); + if (_ReadRegs(&taskFile, ATA_MASK_DEVICE_HEAD) != B_OK) { + TRACE_ERROR("reading register failed when detecting selected device\n"); + return 2; + } + return taskFile.lba.device; } @@ -321,9 +331,7 @@ ATAChannel::Reset(bool *presence, uint16 *signatures) uint8 deviceCount = fDeviceCount; for (uint8 i = 0; i < deviceCount; i++) { - SelectDevice(i); - - if (SelectedDevice() != i) { + if (SelectDevice(i) != B_OK || SelectedDevice() != i) { TRACE_ALWAYS("cannot select device %d, assuming not present\n", i); continue; }