ide: allow overriding number of drives cleanly
authorAlan Cox <alan@linux.intel.com>
Sun, 6 May 2018 22:27:15 +0000 (23:27 +0100)
committerAlan Cox <alan@linux.intel.com>
Sun, 6 May 2018 22:27:15 +0000 (23:27 +0100)
Kernel/dev/devide.c
Kernel/dev/devide.h
Kernel/dev/devide_discard.c

index 15027a8..aa10d03 100644 (file)
@@ -55,7 +55,7 @@ uint8_t devide_transfer_sector(void)
 #endif
 
 
-    drive = blk_op.blkdev->driver_data & DRIVE_NR_MASK;
+    drive = blk_op.blkdev->driver_data & IDE_DRIVE_NR_MASK;
 
     ide_select(drive);
 
@@ -103,7 +103,7 @@ int devide_flush_cache(void)
 {
     uint8_t drive;
 
-    drive = blk_op.blkdev->driver_data & DRIVE_NR_MASK;
+    drive = blk_op.blkdev->driver_data & IDE_DRIVE_NR_MASK;
 
     ide_select(drive);
 
index 9d9e556..8e1f819 100644 (file)
@@ -91,14 +91,17 @@ void devide_writeb(uint8_t regaddr, uint8_t value);
 #define IDE_CMD_IDENTIFY        0xEC
 #define IDE_CMD_SET_FEATURES    0xEF
 
+#ifndef IDE_DRIVE_NR_MASK
+#define IDE_DRIVE_NR_MASK    0x0F   /* low bit used to select master/slave */
+#endif
+
 #ifdef _IDE_PRIVATE
 
 #ifndef IDE_DRIVE_COUNT
-#define IDE_DRIVE_COUNT 2       /* at most 16 drives without adjusting DRIVE_NR_MASK */
+#define IDE_DRIVE_COUNT 2       /* at most 16 drives without adjusting IDE_DRIVE_NR_MASK */
 #endif
 
 /* we use the bits in the driver_data field of blkdev_t as follows: */
-#define DRIVE_NR_MASK    0x0F   /* low bit used to select master/slave */
 #define FLAG_CACHE_DIRTY 0x40
 #define FLAG_WRITE_CACHE 0x80
 
index ce4d4f8..bf03b3f 100644 (file)
@@ -113,7 +113,7 @@ void devide_init_drive(uint8_t drive)
 
     blk->transfer = devide_transfer_sector;
     blk->flush = devide_flush_cache;
-    blk->driver_data = drive & DRIVE_NR_MASK;
+    blk->driver_data = drive & IDE_DRIVE_NR_MASK;
 
     if( !(((uint16_t*)buffer)[82] == 0x0000 && ((uint16_t*)buffer)[83] == 0x0000) ||
          (((uint16_t*)buffer)[82] == 0xFFFF && ((uint16_t*)buffer)[83] == 0xFFFF) ){
@@ -153,6 +153,7 @@ void devide_init(void)
     devide_reset();
 #endif
 
+    kprintf("X");
     for(d=0; d < IDE_DRIVE_COUNT; d++)
         devide_init_drive(d);
 }