xref: /netbsd-src/sys/arch/usermode/usermode/copy.c (revision b1c86f5f087524e68db12794ee9c3e3da1ab17a0)
1 /* $NetBSD: copy.c,v 1.2 2009/10/21 16:07:00 snj Exp $ */
2 
3 /*-
4  * Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #include <sys/cdefs.h>
30 __KERNEL_RCSID(0, "$NetBSD: copy.c,v 1.2 2009/10/21 16:07:00 snj Exp $");
31 
32 #include <sys/types.h>
33 #include <sys/systm.h>
34 
35 int
36 copyin(const void *uaddr, void *kaddr, size_t len)
37 {
38 	memcpy(kaddr, uaddr, len);
39 	return 0;
40 }
41 
42 int
43 copyout(const void *kaddr, void *uaddr, size_t len)
44 {
45 	memcpy(uaddr, kaddr, len);
46 	return 0;
47 }
48 
49 int
50 copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done)
51 {
52 	strncpy(kaddr, uaddr, len);
53 	if (done)
54 		*done = min(strlen(uaddr), len);
55 	return 0;
56 }
57 
58 int
59 copyoutstr(const void *kaddr, void *uaddr, size_t len, size_t *done)
60 {
61 	strncpy(uaddr, kaddr, len);
62 	if (done)
63 		*done = min(strlen(kaddr), len);
64 	return 0;
65 }
66 
67 int
68 copystr(const void *kfaddr, void *kdaddr, size_t len, size_t *done)
69 {
70 	strncpy(kdaddr, kfaddr, len);
71 	if (done)
72 		*done = min(strlen(kfaddr), len);
73 	return 0;
74 }
75 
76 int
77 kcopy(const void *src, void *dst, size_t len)
78 {
79 	memcpy(dst, src, len);
80 	return 0;
81 }
82 
83 int
84 fuswintr(const void *base)
85 {
86 	return *(const short *)base;
87 }
88 
89 int
90 suswintr(void *base, short c)
91 {
92 	*(short *)base = c;
93 	return 0;
94 }
95 
96 int
97 subyte(void *base, int c)
98 {
99 	*(char *)base = c;
100 	return 0;
101 }
102 
103 int
104 suword(void *base, long c)
105 {
106 	*(long *)base = c;
107 	return 0;
108 }
109