devide: support MMIO and non Z80
authorAlan Cox <alan@linux.intel.com>
Thu, 4 Jun 2015 18:23:34 +0000 (19:23 +0100)
committerAlan Cox <alan@linux.intel.com>
Thu, 4 Jun 2015 18:23:34 +0000 (19:23 +0100)
Kernel/dev/devide.c
Kernel/dev/devide.h

index 0d7bd40..54e5f9c 100644 (file)
@@ -17,8 +17,6 @@
 #include <devide.h>
 #include <blkdev.h>
 
-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
index 7cbea80..c4c2f43 100644 (file)
@@ -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