From: Will Sowerbutts Date: Fri, 24 Apr 2015 20:37:44 +0000 (+0100) Subject: Tiny optimisation for devide_read_data()/devide_write_data() X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=e674beb79947e213b257c49797cb7445aea5e8e9;p=FUZIX.git Tiny optimisation for devide_read_data()/devide_write_data() --- diff --git a/Kernel/dev/devide.c b/Kernel/dev/devide.c index 8bcbbd26..d2ce6cf8 100644 --- a/Kernel/dev/devide.c +++ b/Kernel/dev/devide.c @@ -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 diff --git a/Kernel/platform-zeta-v2/ppide.c b/Kernel/platform-zeta-v2/ppide.c index 2e5d053b..4e80bf1b 100644 --- a/Kernel/platform-zeta-v2/ppide.c +++ b/Kernel/platform-zeta-v2/ppide.c @@ -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