From 3b22a3fe0ef91a2207718d69cb32aef37e8dd353 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 6 May 2018 23:27:15 +0100 Subject: [PATCH] ide: allow overriding number of drives cleanly --- Kernel/dev/devide.c | 4 ++-- Kernel/dev/devide.h | 7 +++++-- Kernel/dev/devide_discard.c | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Kernel/dev/devide.c b/Kernel/dev/devide.c index 15027a8c..aa10d036 100644 --- a/Kernel/dev/devide.c +++ b/Kernel/dev/devide.c @@ -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); diff --git a/Kernel/dev/devide.h b/Kernel/dev/devide.h index 9d9e5561..8e1f8192 100644 --- a/Kernel/dev/devide.h +++ b/Kernel/dev/devide.h @@ -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 diff --git a/Kernel/dev/devide_discard.c b/Kernel/dev/devide_discard.c index ce4d4f86..bf03b3ff 100644 --- a/Kernel/dev/devide_discard.c +++ b/Kernel/dev/devide_discard.c @@ -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); } -- 2.34.1