summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authorbenno <benno@FreeBSD.org>2002-03-21 23:45:59 +0000
committerbenno <benno@FreeBSD.org>2002-03-21 23:45:59 +0000
commitd0f7d014387d18db9910e1094a3d0696bfeccab6 (patch)
tree0cd0d0638fdadbbe1fb9c321122350144b811549 /sys/powerpc
parent639925999454f6b54b9289fd91e95662e424f911 (diff)
downloadFreeBSD-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.c260
-rw-r--r--sys/powerpc/aim/trap.c90
-rw-r--r--sys/powerpc/powerpc/copyinout.c260
-rw-r--r--sys/powerpc/powerpc/copyinstr.c73
-rw-r--r--sys/powerpc/powerpc/fubyte.c54
-rw-r--r--sys/powerpc/powerpc/fuword.c54
-rw-r--r--sys/powerpc/powerpc/subyte.c61
-rw-r--r--sys/powerpc/powerpc/suword.c53
-rw-r--r--sys/powerpc/powerpc/trap.c90
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);
OpenPOWER on IntegriCloud