devide: make the generic devide correct for banked and other cases
authorAlan Cox <alan@linux.intel.com>
Sat, 16 Mar 2019 00:21:51 +0000 (00:21 +0000)
committerAlan Cox <alan@linux.intel.com>
Sat, 16 Mar 2019 00:21:51 +0000 (00:21 +0000)
Only map kernel back if we map something else

Kernel/dev/devide.c

index def5884..0cba1ee 100644 (file)
@@ -151,6 +151,7 @@ void devide_read_data(void) __naked
             ld hl, (_blk_op+BLKPARAM_ADDR_OFFSET)   ; blkparam.addr
             ld bc, #IDE_REG_DATA                    ; setup port number
                                                     ; and count
+            push af
 #ifdef SWAPDEV
            cp #2
             jr nz, not_swapin
@@ -168,6 +169,9 @@ rd_kernel:
 doread:
             inir                                    ; transfer first 256 bytes
             inir                                    ; transfer second 256 bytes
+            pop af
+            or a
+            ret z
             jp map_kernel                           ; else map kernel then return
     __endasm;
 }
@@ -179,6 +183,7 @@ void devide_write_data(void) __naked
             ld hl, (_blk_op+BLKPARAM_ADDR_OFFSET)   ; blkparam.addr
             ld bc, #IDE_REG_DATA                    ; setup port number
                                                     ; and count
+            push af
 #ifdef SWAPDEV
            cp #2
             jr nz, not_swapout
@@ -196,6 +201,8 @@ wr_kernel:
 dowrite:
             otir                                    ; transfer first 256 bytes
             otir                                    ; transfer second 256 bytes
+            pop af
+            ret z
             jp map_kernel                           ; else map kernel then return
     __endasm;
 }