From c873b0ae53497e4f12a51130bc036e91d4ed5c6e Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Thu, 4 Jun 2015 19:23:34 +0100 Subject: [PATCH] devide: support MMIO and non Z80 --- Kernel/dev/devide.c | 12 ++++++++---- Kernel/dev/devide.h | 23 +++++++++++++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Kernel/dev/devide.c b/Kernel/dev/devide.c index 0d7bd40c..54e5f9c8 100644 --- a/Kernel/dev/devide.c +++ b/Kernel/dev/devide.c @@ -17,8 +17,6 @@ #include #include -static void devide_write_data(void); - bool devide_wait(uint8_t bits) { uint8_t status; @@ -95,7 +93,7 @@ int devide_flush_cache(void) drive = blk_op.blkdev->driver_data & DRIVE_NR_MASK; /* check drive has a cache and was written to since the last flush */ - if(blk_op.blkdev->driver_data & (FLAG_WRITE_CACHE | FLAG_CACHE_DIRTY) + if((blk_op.blkdev->driver_data & (FLAG_WRITE_CACHE | FLAG_CACHE_DIRTY)) == (FLAG_WRITE_CACHE | FLAG_CACHE_DIRTY)){ devide_writeb(ide_reg_lba_3, ((drive == 0) ? 0xE0 : 0xF0)); // select drive @@ -123,6 +121,11 @@ int devide_flush_cache(void) /* since it must be able to bank switch to the user memory bank. */ /****************************************************************************/ #ifndef IDE_REG_INDIRECT + +#ifndef IDE_IS_MMIO + +/* Port I/O: Currently Z80 only */ + COMMON_MEMORY void devide_read_data(void) __naked @@ -151,7 +154,7 @@ swapin: __endasm; } -static void devide_write_data(void) __naked +void devide_write_data(void) __naked { __asm ld a, (_blk_op+BLKPARAM_IS_USER_OFFSET) ; blkparam.is_user @@ -177,3 +180,4 @@ swapout: __endasm; } #endif +#endif diff --git a/Kernel/dev/devide.h b/Kernel/dev/devide.h index 7cbea80e..c4c2f436 100644 --- a/Kernel/dev/devide.h +++ b/Kernel/dev/devide.h @@ -101,7 +101,26 @@ extern void devide_read_data(void); extern uint8_t devide_transfer_sector(void); extern int devide_flush_cache(void); +extern void devide_write_data(void); +extern void devde_read_data(void); + #ifndef IDE_REG_INDIRECT +#ifdef IDE_IS_MMIO +#define ide_reg_control *((volatile uint8_t *)IDE_REG_CONTROL) +#define ide_reg_command *((volatile uint8_t *)IDE_REG_COMMAND) +#define ide_reg_data *((volatile uint8_t *)IDE_REG_DATA) +#define ide_reg_devhead *((volatile uint8_t *)IDE_REG_DEVHEAD) +#define ide_reg_error *((volatile uint8_t *)IDE_REG_ERROR) +#define ide_reg_features *((volatile uint8_t *)IDE_FEATURES) +#define ide_reg_lba_0 *((volatile uint8_t *)IDE_REG_LBA_0) +#define ide_reg_lba_1 *((volatile uint8_t *)IDE_REG_LBA_1) +#define ide_reg_lba_2 *((volatile uint8_t *)IDE_REG_LBA_2) +#define ide_reg_lba_3 *((volatile uint8_t *)IDE_REG_LBA_3) +#define ide_reg_sec_count *((volatile uint8_t *)IDE_REG_SEC_COUNT) +#define ide_reg_status *((volatile uint8_t *)IDE_REG_STATUS) + +#else /* !MMIO */ + #ifdef IDE_REG_ALTSTATUS __sfr __at IDE_REG_ALTSTATUS ide_reg_altstatus; #endif @@ -119,7 +138,7 @@ __sfr __at IDE_REG_LBA_2 ide_reg_lba_2; __sfr __at IDE_REG_LBA_3 ide_reg_lba_3; __sfr __at IDE_REG_SEC_COUNT ide_reg_sec_count; __sfr __at IDE_REG_STATUS ide_reg_status; -#endif +#endif /* MMIO */ #endif /* IDE_REG_INDIRECT */ - +#endif /* IDE_PRIVAYTE */ #endif -- 2.34.1