Tiny optimisation for devide_read_data()/devide_write_data()
authorWill Sowerbutts <will@sowerbutts.com>
Fri, 24 Apr 2015 20:37:44 +0000 (21:37 +0100)
committerWill Sowerbutts <will@sowerbutts.com>
Fri, 24 Apr 2015 20:46:08 +0000 (21:46 +0100)
Kernel/dev/devide.c
Kernel/platform-zeta-v2/ppide.c

index 8bcbbd2..d2ce6cf 100644 (file)
@@ -133,9 +133,8 @@ void devide_read_data(void) __naked
             ld b, #0                                ; setup count
             ld c, #IDE_REG_DATA                     ; setup port number
             or a                                    ; test is_user
-            jr z, goread                            ; just start the transfer if kernel memory
-            call map_process_always                 ; else map user memory first
-goread:     inir                                    ; transfer first 256 bytes
+            call nz, map_process_always             ; map user memory first if required
+            inir                                    ; transfer first 256 bytes
             inir                                    ; transfer second 256 bytes
             or a                                    ; test is_user
             ret z                                   ; done if kernel memory transfer
@@ -151,9 +150,8 @@ static void devide_write_data(void) __naked
             ld b, #0                                ; setup count
             ld c, #IDE_REG_DATA                     ; setup port number
             or a                                    ; test is_user
-            jr z, gowrite                           ; just start the transfer if kernel memory
-            call map_process_always                 ; else map user memory first
-gowrite:    otir                                    ; transfer first 256 bytes
+            call nz, map_process_always             ; else map user memory first if required
+            otir                                    ; transfer first 256 bytes
             otir                                    ; transfer second 256 bytes
             or a                                    ; test is_user
             ret z                                   ; done if kernel memory transfer
index 2e5d053..4e80bf1 100644 (file)
@@ -62,8 +62,7 @@ void devide_read_data(void) __naked
             or a                                    ; test is_user
             push af                                 ; save flags
             ld a, #PPIDE_BASE+0                     ; I will be needing this later
-            jr z, goread                            ; just start the transfer if kernel memory
-            call map_process_always                 ; else map user memory first
+            call nz, map_process_always             ; map user memory first if required
 goread:     ; now we do the transfer
             out (c), e                              ; assert /RD
             ld c, a                                 ; PPIDE_BASE
@@ -99,8 +98,7 @@ void devide_write_data(void) __naked
             or a                                    ; test is_user
             push af                                 ; save flags
             ld a, #PPIDE_BASE+0                     ; I will be needing this later
-            jr z, gowrite                           ; just start the transfer if kernel memory
-            call map_process_always                 ; else map user memory first
+            call nz, map_process_always             ; map user memory first if required
 gowrite:    ; now we do the transfer
             out (c), d                              ; de-assert /WR
             ld c, a                                 ; PPIDE_BASE