summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/ata.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2003-03-25 17:01:52 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2003-03-25 17:01:52 +0000
commitdbe06865bfc174d2cfe89b7a41f194301fd48aa3 (patch)
tree2be8d009e9a483271dab57bb2b4d1d40badafeac /cpukit/libblock/src/ata.c
parent2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de> (diff)
downloadrtems-dbe06865bfc174d2cfe89b7a41f194301fd48aa3.tar.bz2
2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
PR 367/filesystem * Makefile.am, include/rtems/ide_part_table.h, src/ata.c, src/ide_part_table.c: Some bugs were still present in the DOSFS implementation: - FAT12 did not work properly on Big-Endian machines - Some synchronization and error handling problems were present - Some legal codings for EOC were not recognized
Diffstat (limited to 'cpukit/libblock/src/ata.c')
-rw-r--r--cpukit/libblock/src/ata.c47
1 files changed, 22 insertions, 25 deletions
diff --git a/cpukit/libblock/src/ata.c b/cpukit/libblock/src/ata.c
index f0304bfda5..bbc6d4156f 100644
--- a/cpukit/libblock/src/ata.c
+++ b/cpukit/libblock/src/ata.c
@@ -18,6 +18,7 @@
#include <errno.h>
#include <chain.h>
#include <assert.h>
+#include <string.h> /* for "memset" declaration */
#include <rtems/diskdevs.h>
#include <rtems/blkdev.h>
@@ -1152,36 +1153,32 @@ ata_initialize(rtems_device_major_number major,
(unsigned8)(CF_LE_W(buffer[ATA_IDENT_WORD_MULT_SECS])) :
0;
-#ifndef ATA_DEV_IS_FLASH_DISK
if ((CF_LE_W(buffer[ATA_IDENT_WORD_FIELD_VALIDITY]) &
- ATA_IDENT_BIT_VALID) == 0)
+ ATA_IDENT_BIT_VALID) == 0) {
+ /* no "supported modes" info -> use default */
+ ATA_DEV_INFO(ctrl_minor, dev).mode_active = ATA_MODES_PIO3;
+ }
+ else {
+ ATA_DEV_INFO(ctrl_minor, dev).modes_avaible =
+ ((CF_LE_W(buffer[64]) & 0x1) ? ATA_MODES_PIO3 : 0) |
+ ((CF_LE_W(buffer[64]) & 0x2) ? ATA_MODES_PIO4 : 0) |
+ ((CF_LE_W(buffer[63]) & 0x1) ? ATA_MODES_DMA0 : 0) |
+ ((CF_LE_W(buffer[63]) & 0x2) ?
+ ATA_MODES_DMA0 | ATA_MODES_DMA1 : 0) |
+ ((CF_LE_W(buffer[63]) & 0x4) ?
+ ATA_MODES_DMA0 | ATA_MODES_DMA1 | ATA_MODES_DMA2 : 0);
+ if (ATA_DEV_INFO(ctrl_minor, dev).modes_avaible == 0)
continue;
-#endif
- ATA_DEV_INFO(ctrl_minor, dev).modes_avaible =
- ((CF_LE_W(buffer[64]) & 0x1) ? ATA_MODES_PIO3 : 0) |
- ((CF_LE_W(buffer[64]) & 0x2) ? ATA_MODES_PIO4 : 0) |
- ((CF_LE_W(buffer[63]) & 0x1) ? ATA_MODES_DMA0 : 0) |
- ((CF_LE_W(buffer[63]) & 0x2) ?
- ATA_MODES_DMA0 | ATA_MODES_DMA1 : 0) |
- ((CF_LE_W(buffer[63]) & 0x4) ?
- ATA_MODES_DMA0 | ATA_MODES_DMA1 | ATA_MODES_DMA2 : 0);
-
- if (ATA_DEV_INFO(ctrl_minor, dev).modes_avaible == 0)
- continue;
-
- /*
- * choose most appropriate ATA device data I/O speed supported by
- * the controller
- */
- status = ide_controller_config_io_speed(
+ /*
+ * choose most appropriate ATA device data I/O speed supported
+ * by the controller
+ */
+ status = ide_controller_config_io_speed(
ctrl_minor,
ATA_DEV_INFO(ctrl_minor, dev).modes_avaible);
- if (status != RTEMS_SUCCESSFUL)
+ if (status != RTEMS_SUCCESSFUL)
continue;
-
-#ifdef ATA_DEV_IS_FLASH_DISK
- ATA_DEV_INFO(ctrl_minor, dev).mode_active = ATA_MODES_PIO3;
-#endif
+ }
/*
* Ok, let register new ATA device in the system
*/