Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-6]: src/sys/arch/arm/arm32 Pull up file removal (requested by b...
details: https://anonhg.NetBSD.org/src/rev/2055e6aa8428
branches: netbsd-1-6
changeset: 529408:2055e6aa8428
user: he <he%NetBSD.org@localhost>
date: Mon Nov 18 02:37:47 2002 +0000
description:
Pull up file removal (requested by bjh21 in ticket #689):
New and much improved version of copyin(), copyout(), and
kcopy() which works on both 26-bit and 32-bit machines.
diffstat:
sys/arch/arm/arm32/bcopyinout.S | 245 ----------------------------------------
1 files changed, 0 insertions(+), 245 deletions(-)
diffs (249 lines):
diff -r 4616dc310a60 -r 2055e6aa8428 sys/arch/arm/arm32/bcopyinout.S
--- a/sys/arch/arm/arm32/bcopyinout.S Mon Nov 18 02:37:12 2002 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,245 +0,0 @@
-/* $NetBSD: bcopyinout.S,v 1.5 2002/03/23 02:22:57 thorpej Exp $ */
-
-/*
- * Copyright (c) 1995-1998 Mark Brinicombe.
- * Copyright (c) 1995 Brini.
- * All rights reserved.
- *
- * This code is derived from software written for Brini by Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Mark Brinicombe.
- * 4. The name of the company nor the name of the author may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- *
- * bcopyinout.S
- *
- * optimized and fault protected byte copy functions
- *
- * Created : 16/05/95
- */
-
-#include "assym.h"
-
-#include <machine/asm.h>
-#include <sys/errno.h>
-
- .text
- .align 0
-Lcurpcb:
- .word _C_LABEL(curpcb)
-
-Lvm_min_address:
- .word VM_MIN_ADDRESS
-Lvm_maxuser_address:
- .word VM_MAXUSER_ADDRESS
-Lvm_maxkern_address:
- .word _C_LABEL(pmap_curmaxkvaddr)
-
-ENTRY(kcopy)
- b do_copyinout
-
-/*
- * r0 = user space address
- * r1 = kernel space address
- * r2 = length
- *
- * Copies bytes from user space to kernel space
- */
-
-ENTRY(copyin)
- /* Validate user and kernel addresses */
- ldr r3, Lvm_min_address
- cmp r0, r3
- bcc Lbadaddress
- ldr r3, Lvm_maxuser_address
- cmp r0, r3
- bcs Lbadaddress
- cmp r1, r3
- bcc Lbadaddress
- ldr r3, Lvm_maxkern_address
- ldr ip, [r3]
- cmp r1, ip
- bcs Lbadaddress
-
- /* Quick exit if length is zero */
- teq r2, #0
- moveq r0, #0
- moveq pc, lr
-
- /* Do the actual copy */
- b do_copyinout
-
-/*
- * r0 = kernel space address
- * r1 = user space address
- * r2 = length
- *
- * Copies bytes from user space to kernel space
- */
-
-Lpgbase:
- .long PTE_BASE
-
-ENTRY(copyout)
- /* Validate user and kernel addresses */
- ldr r3, Lvm_min_address
- cmp r1, r3
- bcc Lbadaddress
- ldr r3, Lvm_maxuser_address
- cmp r1, r3
- bcs Lbadaddress
- cmp r0, r3
- bcc Lbadaddress
- ldr r3, Lvm_maxkern_address
- ldr ip, [r3]
- cmp r0, ip
- bcs Lbadaddress
-
- /* Quick exit if length is zero */
- teq r2, #0
- moveq r0, #0
- moveq pc, lr
-
- /* Check the page protection for copy-on-write */
- stmfd sp!, {r4-r7} /* stack is 8 byte aligned */
- ldr r4, Lcurpcb
- ldr r4, [r4]
-
- ldr r5, [r4, #PCB_ONFAULT]
- add r3, pc, #do_cowfault - . - 8
- str r3, [r4, #PCB_ONFAULT]
-
- ldr r3, Lpgbase
- add r6, r3, r1, lsr #(PGSHIFT-2)
- bic r6, r6, #3 /* beginning PTE */
-
- mov r7, r1, lsl #(32-PGSHIFT)
- add r7, r2, r7, lsr #(32-PGSHIFT)
- sub r7, r7, #1
- mov r7, r7, lsr #(PGSHIFT) /* number of pages -1 */
-
-do_ptecheck:
- ldr r3, [r6] /* grab PTE */
- tst r3, #1 /* check writable bit */
- beq do_cowfault /* if clear, do COW fault */
-do_ptecheck_next:
- add r6, r6, #4
- subs r7, r7, #1
- bpl do_ptecheck
- str r5, [r4, #PCB_ONFAULT]
- ldmfd sp!, {r4-r7} /* stack is 8 byte aligned */
-
- /* Do the actual copy */
- b do_copyinout
-
-do_cowfault:
- stmfd sp!, {r0-r2, lr} /* stack is 8 byte aligned */
- ldr r3, Lpgbase
- sub r0, r6, r3
- mov r0, r0, lsl #(PGSHIFT-2) /* calculate VA of page */
- bl _C_LABEL(cowfault)
- mov r3, r0
- ldmfd sp!, {r0-r2, lr} /* stack is 8 byte aligned */
- teq r3, #0 /* check for error return */
- beq do_ptecheck_next
- mov r0, r3
- str r5, [r4, #PCB_ONFAULT]
- ldmfd sp!, {r4-r7} /* stack is 8 byte aligned */
- mov pc, lr
-
-do_copyinout:
- stmfd sp!, {r4, r5} /* stack is 8 byte aligned */
- ldr r4, Lcurpcb
- ldr r4, [r4]
-
-#ifdef DIAGNOSTIC
- teq r4, #0x00000000
- beq Lcopyinoutpcbfault
-#endif /* DIAGNOSTIC */
-
- ldr r5, [r4, #PCB_ONFAULT]
- add r3, pc, #Lcopyinoutfault - . - 8
- str r3, [r4, #PCB_ONFAULT]
-
- /*
- * If less than 4 bytes or the source or destination address is
- * not 32 bit aligned then copy it slowly, byte at a time.
- * Otherwise copy it 32 bits at a time.
- */
- subs r2, r2, #4
- bmi Lslow_copyinout
- tst r0, #3
- tsteq r1, #3
- bne Lslow_copyinout
-
-Lcopyinout_loop:
- ldr r3, [r0], #0x0004
- str r3, [r1], #0x0004
- subs r2, r2, #0x00000004
- bpl Lcopyinout_loop
-
- tst r2, #3
- beq Lcopyinout_exit
-
-Lslow_copyinout:
- add r2, r2, #4
-
-Lslow_copyinout_loop:
- ldrb r3, [r0], #0x0001
- strb r3, [r1], #0x0001
- subs r2, r2, #0x00000001
- bne Lslow_copyinout_loop
-
-Lcopyinout_exit:
- mov r0, #0x00000000
- str r5, [r4, #PCB_ONFAULT]
- ldmfd sp!, {r4, r5} /* stack is 8 byte aligned */
- mov pc, lr
-
-/* A fault occurred during the copy */
-Lcopyinoutfault:
- str r5, [r4, #PCB_ONFAULT]
- ldmfd sp!, {r4, r5} /* stack is 8 byte aligned */
-
- /* FALLTHROUGH */
-
-/* Source or Destination address was bad so fail */
-Lbadaddress:
- /* Don't return EFAULT if legnth was zero */
- teq r2, #0x00000000
- moveq r0, #0x00000000
- movne r0, #EFAULT
- mov pc, lr
-
-#ifdef DIAGNOSTIC
-Lcopyinoutpcbfault:
- mov r2, r1
- mov r1, r0
- add r0, pc, #Lcopyinouttext - . - 8
- b _C_LABEL(panic)
-
-Lcopyinouttext:
- .asciz "No valid PCB during copyinout() addr1=%08x addr2=%08x\n"
- .align 0
-#endif /* DIAGNOSTIC */
Home |
Main Index |
Thread Index |
Old Index