diff options
author | benno <benno@FreeBSD.org> | 2002-03-21 23:45:59 +0000 |
---|---|---|
committer | benno <benno@FreeBSD.org> | 2002-03-21 23:45:59 +0000 |
commit | d0f7d014387d18db9910e1094a3d0696bfeccab6 (patch) | |
tree | 0cd0d0638fdadbbe1fb9c321122350144b811549 /sys/powerpc | |
parent | 639925999454f6b54b9289fd91e95662e424f911 (diff) | |
download | FreeBSD-src-d0f7d014387d18db9910e1094a3d0696bfeccab6.zip FreeBSD-src-d0f7d014387d18db9910e1094a3d0696bfeccab6.tar.gz |
Collect all functions for copying to and from userspace into the one file.
This allows me to reimplement [sf]u{byte,word} as separate functions and not
as calls to copy{in,out}.
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/aim/copyinout.c | 260 | ||||
-rw-r--r-- | sys/powerpc/aim/trap.c | 90 | ||||
-rw-r--r-- | sys/powerpc/powerpc/copyinout.c | 260 | ||||
-rw-r--r-- | sys/powerpc/powerpc/copyinstr.c | 73 | ||||
-rw-r--r-- | sys/powerpc/powerpc/fubyte.c | 54 | ||||
-rw-r--r-- | sys/powerpc/powerpc/fuword.c | 54 | ||||
-rw-r--r-- | sys/powerpc/powerpc/subyte.c | 61 | ||||
-rw-r--r-- | sys/powerpc/powerpc/suword.c | 53 | ||||
-rw-r--r-- | sys/powerpc/powerpc/trap.c | 90 |
9 files changed, 520 insertions, 475 deletions
diff --git a/sys/powerpc/aim/copyinout.c b/sys/powerpc/aim/copyinout.c new file mode 100644 index 0000000..c1ec6d3 --- /dev/null +++ b/sys/powerpc/aim/copyinout.c @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2002 Benno Rice + * All rights reserved. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY Benno Rice ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/*- + * Copyright (C) 1993 Wolfgang Solfrank. + * Copyright (C) 1993 TooLs GmbH. + * All rights reserved. + * + * 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 TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/proc.h> + +#include <vm/vm.h> +#include <vm/pmap.h> +#include <vm/vm_map.h> + +/* + * Makes sure that the right segment of userspace is mapped in. + */ +static __inline void +set_user_sr(register_t vsid) +{ + + isync(); + __asm __volatile ("mtsr %0,%1" :: "n"(USER_SR), "r"(vsid)); + isync(); +} + +int +copyout(const void *kaddr, void *udaddr, size_t len) +{ + struct thread *td; + pmap_t pm; + const char *kp; + char *up, *p; + size_t l; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + + kp = kaddr; + up = udaddr; + + while (len > 0) { + p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + + l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; + if (l > len) + l = len; + + set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + + bcopy(kp, p, l); + + up += l; + kp += l; + len -= l; + } + + return (0); +} + +int +copyin(const void *udaddr, void *kaddr, size_t len) +{ + struct thread *td; + pmap_t pm; + const char *up; + char *kp, *p; + size_t l; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + + kp = kaddr; + up = udaddr; + + while (len > 0) { + p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + + l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; + if (l > len) + l = len; + + set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + + bcopy(p, kp, l); + + up += l; + kp += l; + len -= l; + } + + return (0); +} + +int +copyinstr(const void *udaddr, void *kaddr, size_t len, size_t *done) +{ + struct thread *td; + pmap_t pm; + const char *up; + char *kp; + size_t l; + int rv, c; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + + kp = kaddr; + up = udaddr; + + rv = ENAMETOOLONG; + + for (l = 0; len-- > 0; l++) { + if ((c = fubyte(up++)) < 0) { + rv = EFAULT; + break; + } + + if (!(*kp++ = c)) { + l++; + rv = 0; + break; + } + } + + if (done != NULL) { + *done = l; + } + + return (rv); +} + +int +subyte(void *addr, int byte) +{ + struct thread *td; + pmap_t pm; + char *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + *p = (char)byte; + + return (0); +} + +int +suibyte(void *addr, int byte) +{ + + return (subyte(addr, byte)); +} + +int +suword(void *addr, long word) +{ + struct thread *td; + pmap_t pm; + long *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + *p = word; + + return (0); +} + +int +fubyte(const void *addr) +{ + struct thread *td; + pmap_t pm; + char *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + return ((int)*p); +} + +long +fuword(const void *addr) +{ + struct thread *td; + pmap_t pm; + long *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + return (*p); +} diff --git a/sys/powerpc/aim/trap.c b/sys/powerpc/aim/trap.c index a21fa1a..2b2d746 100644 --- a/sys/powerpc/aim/trap.c +++ b/sys/powerpc/aim/trap.c @@ -554,96 +554,6 @@ child_return(void *arg) } #endif -static __inline void -setusr(int content) -{ - - __asm __volatile ("isync; mtsr %0,%1; isync" - :: "n"(USER_SR), "r"(content)); -} - -int -copyin(udaddr, kaddr, len) - const void *udaddr; - void *kaddr; - size_t len; -{ - const char *up; - char *kp, *p; - size_t l; - faultbuf env; - uint segment; - struct thread *td; - pmap_t pm; - - up = udaddr; - kp = kaddr; - -#if 0 - if (setfault(env)) { - PCPU_GET(curpcb)->pcb_onfault = 0; - return EFAULT; - } -#endif - td = PCPU_GET(curthread); - pm = &td->td_proc->p_vmspace->vm_pmap; - while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); - l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; - if (l > len) - l = len; - segment = (uint)up >> ADDR_SR_SHFT; - setusr(pm->pm_sr[segment]); - bcopy(p, kp, l); - up += l; - kp += l; - len -= l; - } - PCPU_GET(curpcb)->pcb_onfault = 0; - return 0; -} - -int -copyout(kaddr, udaddr, len) - const void *kaddr; - void *udaddr; - size_t len; -{ - const char *kp; - char *up, *p; - size_t l; - faultbuf env; - unsigned int segment; - struct thread *td; - pmap_t pm; - - kp = kaddr; - up = udaddr; - -#if 0 - if (setfault(env)) { - PCPU_GET(curpcb)->pcb_onfault = 0; - return EFAULT; - } -#endif - td = PCPU_GET(curthread); - pm = &td->td_proc->p_vmspace->vm_pmap; - while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); - l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; - if (l > len) - l = len; - segment = (u_int)up >> ADDR_SR_SHFT; - setusr(pm->pm_sr[segment]); - bcopy(kp, p, l); - up += l; - kp += l; - len -= l; - } - PCPU_GET(curpcb)->pcb_onfault = 0; - return 0; -} - #if 0 /* XXX: not used yet */ /* * kcopy(const void *src, void *dst, size_t len); diff --git a/sys/powerpc/powerpc/copyinout.c b/sys/powerpc/powerpc/copyinout.c new file mode 100644 index 0000000..c1ec6d3 --- /dev/null +++ b/sys/powerpc/powerpc/copyinout.c @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2002 Benno Rice + * All rights reserved. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY Benno Rice ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/*- + * Copyright (C) 1993 Wolfgang Solfrank. + * Copyright (C) 1993 TooLs GmbH. + * All rights reserved. + * + * 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 TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/proc.h> + +#include <vm/vm.h> +#include <vm/pmap.h> +#include <vm/vm_map.h> + +/* + * Makes sure that the right segment of userspace is mapped in. + */ +static __inline void +set_user_sr(register_t vsid) +{ + + isync(); + __asm __volatile ("mtsr %0,%1" :: "n"(USER_SR), "r"(vsid)); + isync(); +} + +int +copyout(const void *kaddr, void *udaddr, size_t len) +{ + struct thread *td; + pmap_t pm; + const char *kp; + char *up, *p; + size_t l; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + + kp = kaddr; + up = udaddr; + + while (len > 0) { + p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + + l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; + if (l > len) + l = len; + + set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + + bcopy(kp, p, l); + + up += l; + kp += l; + len -= l; + } + + return (0); +} + +int +copyin(const void *udaddr, void *kaddr, size_t len) +{ + struct thread *td; + pmap_t pm; + const char *up; + char *kp, *p; + size_t l; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + + kp = kaddr; + up = udaddr; + + while (len > 0) { + p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + + l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; + if (l > len) + l = len; + + set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + + bcopy(p, kp, l); + + up += l; + kp += l; + len -= l; + } + + return (0); +} + +int +copyinstr(const void *udaddr, void *kaddr, size_t len, size_t *done) +{ + struct thread *td; + pmap_t pm; + const char *up; + char *kp; + size_t l; + int rv, c; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + + kp = kaddr; + up = udaddr; + + rv = ENAMETOOLONG; + + for (l = 0; len-- > 0; l++) { + if ((c = fubyte(up++)) < 0) { + rv = EFAULT; + break; + } + + if (!(*kp++ = c)) { + l++; + rv = 0; + break; + } + } + + if (done != NULL) { + *done = l; + } + + return (rv); +} + +int +subyte(void *addr, int byte) +{ + struct thread *td; + pmap_t pm; + char *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + *p = (char)byte; + + return (0); +} + +int +suibyte(void *addr, int byte) +{ + + return (subyte(addr, byte)); +} + +int +suword(void *addr, long word) +{ + struct thread *td; + pmap_t pm; + long *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + *p = word; + + return (0); +} + +int +fubyte(const void *addr) +{ + struct thread *td; + pmap_t pm; + char *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + return ((int)*p); +} + +long +fuword(const void *addr) +{ + struct thread *td; + pmap_t pm; + long *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + + set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + + return (*p); +} diff --git a/sys/powerpc/powerpc/copyinstr.c b/sys/powerpc/powerpc/copyinstr.c deleted file mode 100644 index a0a975f..0000000 --- a/sys/powerpc/powerpc/copyinstr.c +++ /dev/null @@ -1,73 +0,0 @@ -/*- - * Copyright (C) 1995 Wolfgang Solfrank. - * Copyright (C) 1995 TooLs GmbH. - * All rights reserved. - * - * 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 TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $NetBSD: copyinstr.c,v 1.3 2000/02/19 23:29:16 chs Exp $ - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/param.h> -#include <sys/errno.h> -#include <sys/systm.h> - -/* - * Emulate copyinstr. - */ -int -copyinstr(const void *udaddr, void *kaddr, size_t len, size_t *done) -{ - const u_char *up; - u_char *kp; - size_t l; - int c, rv; - - up = udaddr; - kp = kaddr; - - rv = ENAMETOOLONG; - for (l = 0; len-- > 0; l++) { - if ((c = fubyte(up++)) < 0) { - rv = EFAULT; - break; - } - if (!(*kp++ = c)) { - l++; - rv = 0; - break; - } - } - if (done != NULL) { - *done = l; - } - return rv; -} diff --git a/sys/powerpc/powerpc/fubyte.c b/sys/powerpc/powerpc/fubyte.c deleted file mode 100644 index 35aa8d5..0000000 --- a/sys/powerpc/powerpc/fubyte.c +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * Copyright (C) 1993 Wolfgang Solfrank. - * Copyright (C) 1993 TooLs GmbH. - * All rights reserved. - * - * 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 TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $NetBSD: fubyte.c,v 1.2 2000/06/08 07:29:22 kleink Exp $ - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/systm.h> - -/* - * Emulate fubyte. - */ -int -fubyte(const void *addr) -{ - unsigned char c; - - if (copyin(addr,&c,sizeof(c))) { - return -1; - } - - return c; -} diff --git a/sys/powerpc/powerpc/fuword.c b/sys/powerpc/powerpc/fuword.c deleted file mode 100644 index 2965ca9..0000000 --- a/sys/powerpc/powerpc/fuword.c +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * Copyright (C) 1993 Wolfgang Solfrank. - * Copyright (C) 1993 TooLs GmbH. - * All rights reserved. - * - * 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 TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $NetBSD: fubyte.c,v 1.2 2000/06/08 07:29:22 kleink Exp $ - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/systm.h> - -/* - * Emulate fuword. - */ -long -fuword(const void *addr) -{ - long l; - - if (copyin(addr, &l, sizeof(l))) { - return -1; - } - - return l; -} diff --git a/sys/powerpc/powerpc/subyte.c b/sys/powerpc/powerpc/subyte.c deleted file mode 100644 index 391839a..0000000 --- a/sys/powerpc/powerpc/subyte.c +++ /dev/null @@ -1,61 +0,0 @@ -/*- - * Copyright (C) 1993 Wolfgang Solfrank. - * Copyright (C) 1993 TooLs GmbH. - * All rights reserved. - * - * 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 TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $NetBSD: subyte.c,v 1.2 2000/06/09 14:05:47 kleink Exp $ - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/systm.h> - -/* - * Emulate subyte. - */ - -int -subyte(void *base, int byte) -{ - - if (copyout(&byte, base, 1)) { - return -1; - } - - return 0; -} - -int -suibyte(void *base, int byte) -{ - - return subyte(base, byte); -} diff --git a/sys/powerpc/powerpc/suword.c b/sys/powerpc/powerpc/suword.c deleted file mode 100644 index e0178c5..0000000 --- a/sys/powerpc/powerpc/suword.c +++ /dev/null @@ -1,53 +0,0 @@ -/*- - * Copyright (C) 1993 Wolfgang Solfrank. - * Copyright (C) 1993 TooLs GmbH. - * All rights reserved. - * - * 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 TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $NetBSD: suword.c,v 1.2 2000/06/09 14:05:49 kleink Exp $ - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/systm.h> - -/* - * Emulate suword - */ -int -suword(void *addr, long l) -{ - - if (copyout(&l, addr, sizeof(l))) { - return -1; - } - - return 0; -} diff --git a/sys/powerpc/powerpc/trap.c b/sys/powerpc/powerpc/trap.c index a21fa1a..2b2d746 100644 --- a/sys/powerpc/powerpc/trap.c +++ b/sys/powerpc/powerpc/trap.c @@ -554,96 +554,6 @@ child_return(void *arg) } #endif -static __inline void -setusr(int content) -{ - - __asm __volatile ("isync; mtsr %0,%1; isync" - :: "n"(USER_SR), "r"(content)); -} - -int -copyin(udaddr, kaddr, len) - const void *udaddr; - void *kaddr; - size_t len; -{ - const char *up; - char *kp, *p; - size_t l; - faultbuf env; - uint segment; - struct thread *td; - pmap_t pm; - - up = udaddr; - kp = kaddr; - -#if 0 - if (setfault(env)) { - PCPU_GET(curpcb)->pcb_onfault = 0; - return EFAULT; - } -#endif - td = PCPU_GET(curthread); - pm = &td->td_proc->p_vmspace->vm_pmap; - while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); - l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; - if (l > len) - l = len; - segment = (uint)up >> ADDR_SR_SHFT; - setusr(pm->pm_sr[segment]); - bcopy(p, kp, l); - up += l; - kp += l; - len -= l; - } - PCPU_GET(curpcb)->pcb_onfault = 0; - return 0; -} - -int -copyout(kaddr, udaddr, len) - const void *kaddr; - void *udaddr; - size_t len; -{ - const char *kp; - char *up, *p; - size_t l; - faultbuf env; - unsigned int segment; - struct thread *td; - pmap_t pm; - - kp = kaddr; - up = udaddr; - -#if 0 - if (setfault(env)) { - PCPU_GET(curpcb)->pcb_onfault = 0; - return EFAULT; - } -#endif - td = PCPU_GET(curthread); - pm = &td->td_proc->p_vmspace->vm_pmap; - while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); - l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; - if (l > len) - l = len; - segment = (u_int)up >> ADDR_SR_SHFT; - setusr(pm->pm_sr[segment]); - bcopy(kp, p, l); - up += l; - kp += l; - len -= l; - } - PCPU_GET(curpcb)->pcb_onfault = 0; - return 0; -} - #if 0 /* XXX: not used yet */ /* * kcopy(const void *src, void *dst, size_t len); |